Pass 1
Craft
- Re-derived the whole model. Drove all 27 estimate cells in a headless browser against an oracle written separately from the page. All 27 matched, including the $95 floor, the $290 / $3,480 rest state, the $545 / $6,540 ceiling and the $200 sole-trader-with-staff case. No pricing changed.
- The proof element was out of frame. At 1200×750 the result card ended at 788.8 px and the twelve-month strip at 771.8 — the thumbnail would have shown three rows of chips and no answer. Took 72 px out of the card’s vertical rhythm (hero padding 46→36, a one-line lead, tighter fieldset, legend and result padding) and re-cut the strip. The result card now ends at 716.7 px.
- The headline was set in a column half the width available.
h1{max-width:15ch}applied at every width, so a 62-character headline wrapped into a 218 px column on a 339 px phone — four lines plus a two-line tail, and the first trust line landed at y 687 on a 667 px viewport. Freed the cap below 961 px and trimmed the subline; the trust line now sits well above the fold and above the sticky bar. - A dead error state. The submit handler added a
.badclass to invalid fields and no CSS defined it — the failure was in the accessibility tree and nowhere on screen. Added a 2 px ink border and a deep-verdigris label, both measured. - Removed a duplicate
displaydeclaration on the chip label that setblockand thenflex.