/* busy.js — the busy rule. First-party, dependency-free, and on by default: link it and every submit button in every form that goes somewhere is covered, with no attribute to remember, because a button that changes something should say so while it works, and a form that double-submits on a second click is a bug on every screen. It is app-owned from the moment it is vendored; leave it unlinked to opt the whole app out. What a submitted button does: its label gives way to a spinner (the label stays, beside the spinner, under reduced motion or forced colours — tokens.css), it goes aria-busy and then disabled, and its form refuses a second submit. The spinner shows for at least HOLD_MS: a response faster than that is held back until then, so a quick save reads as a deliberate beat rather than a flicker. Going Back to the page hands every busy form back, and a submit still being held when the page is left is dropped rather than sent later. Vocabulary: data-busy="false" on a