QA of the #167 follow-up found two defects: 1) renumber() referenced an undefined 'tops' variable in the rAF re-verification pass, so any wrap toggle that reflowed a partially filled last visual row left stale (non-idempotent) numbering. 2) rows were derived from per-span heights while the code column also renders newline text nodes between .codeline blocks, so the gutter could drift from the code column's real visual rows. renumber() now measures each .codeline's actual offsetTop and places every number on the visual row its line starts on (a line wrapping to N rows gets its number on the first of them), pads filler rows in between, and self-corrects one frame later if reflow moves any line. Wrap-OFF path stays unchanged ('1 2 3 4'). Verified in headless Chromium: gutter/code row alignment exact at 1200px and 640px, toggle cycles stable, no horizontal scroll, no CSP console errors; go build/test pass.