The header and the mobile stack each carried a single rule on the inner edge. Against the top and bottom of the screen that left them bleeding into it — a band with one line round it, where every other surface here has two. Both are ruled top and bottom now.
The stack's extra pixel has to be paid for. The page reserves room for it by
padding itself by TAB_ROW, a constant kept by hand against the markup, and
that constant counts the borders term by term — so a second rule that is not
added to it puts the last row of content one pixel under the tabs. Measured
rather than reasoned: the stack went to 119.5px against 118.5px reserved, and
is level again at 18.5px.
Text fields are 16px on a phone, back to text-sm from sm up. Under 16px iOS
Safari zooms the whole page when a field takes focus, and it does not zoom back
out — you land on the vote page, tap the handle box, and the layout is left
somewhere off to the side. It was doing that on all four: the login handle, the
vote page's handle box, and both campaign fields.
The nominee search grows to the full row on mobile in the same move. It was a
fixed 176px box already clipping its own placeholder at 14px, and the larger
type would only have taken more of it; it wraps onto its own line at that width
anyway, so there is a whole row there to use. Unchanged at 224px from sm.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com