The momentum meter already had a lot of feedback for a reset: the pips shatter, and a screen-reader announcement fires ("Momentum lost — the arc broke."). But the visible hint under the meter never said why the arc broke. A player who glanced away saw the pips empty with no cause. Worse, under prefers-reduced-motion the shatter is muted, so that path got the least signal of all.
The fix is small and contained to one component. On any momentum drop, the hint briefly shows a cause line — "Arc broken — a loss reset your momentum" — then settles back to its normal coaching text after 2.6s. Nothing else moves: it reuses the existing hint slot and the existing live region, adds two component tests, and touches no game logic. Blast radius is one file's <script setup>.
Where the hint and the ARIA line render. Both already existed — only the hint's content gains a transient cause line.
The hint was a pure function of the current momentum value, so it could never reflect an event like a break. The change splits it in two: baseHint is the old steady-state text, and a new resetNotice ref holds the transient cause line. The displayed hint is just resetNotice || baseHint — when the notice is set it wins; when it clears, the normal hint returns. A RESET_NOTICE_MS constant (2.6s) names how long it lingers, deliberately longer than the 620ms shatter because this is text to read, not a flash to glimpse.
New reactive state, the reading-time constant, and the one-line overlay.
The reset already lived in a watch on momentum. The drop branch gains three lines: set resetNotice to a cause line (the full reset vs. a partial dip), then schedule it to clear after RESET_NOTICE_MS. The climb branch gains the mirror — a recovery supersedes a lingering notice at once, so you never see "a loss reset you" while you're already climbing back.
The drop sets and schedules the notice; the climb clears it.
Two component tests lock in the rendered text at each phase — the discriminating checks that only this layer could catch. The first drives a drop and asserts the hint names the cause, the live region still announces the break, then (via fake timers) that the hint settles back to the zero-state line. The second asserts a climb clears a lingering notice immediately. Full unit suite stays green (901 tests); typecheck is clean.