The edit form's legend read "Skill areas" and carried no directive, while the
application form read "Skill profile — 15 points to distribute" and said what to
do. Same rule, worded in two places — and the edit form lost the sentence.
- New static/focus-rule.js exposes window.O4PFocus: LEGEND, DIRECTIVE, TOTAL, MAX
and message(sum). Both forms render the legend, the directive and the
wrong-total message from it, so the two cannot drift apart again.
- Edit form: legend from the constant, the application form's directive under it,
and the blocked-save message now names the direction.
- Application form: legend set from the constant, live warn and sum gate use the
same message(); the all-zero gate keeps the directive.
- Message wording: over -> "remove N", under -> "add N", zero -> "place all 15
points"; the total, aria-live, data-bad, the blocked save and the
fieldset/legend structure are unchanged.
The rule text now appears once: "You have 17 of 15 — remove 2."