You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The surface switch above the content becomes the kit's tab bar. Seven surfaces — dashboard, upload, failed items, review, settings, logs, diagnostics — stay switchable, and the switch now scrolls or offers an overflow menu when the window is too narrow for all of them, instead of clipping or forcing a large minimum window width.
The window minimum size currently exists partly because seven hand-built buttons must fit on one row. This ticket decouples those two decisions.
Acceptance criteria
Pointer and keyboard both reach every surface, and the selected one is conveyed by more than colour.
At a window narrower than the seven labels, nothing is clipped: the bar scrolls, or the overflow menu lists the tabs that do not fit, and picking one switches to it.
The window's minimum size is set by the narrowest surface's layout, not by the tab row, and the comment on it says so.
The environment-variable surface pin and the folder-detail link into a filtered list still open the surface they name.
The per-surface tests that assert the switch still pass; the nav element ids tests rely on are preserved.
Notes
Accessibility is the point, not a side effect: the accessibility label of each tab is part of the acceptance, not a follow-up.
Landed in main at 35691b2, merged from integration/kit-surface (CI green at 43223e2). Gate on the merged tree: cargo fmt --all -- --check, cargo clippy --workspace --all-targets -D warnings, cargo test --workspace — all clean.
What the reviews changed. Three passes. The keyboard path had no visible focus state — a regression from the Button it replaced — and nothing at all told a user that tabs were hidden at the minimum window. The fix took the kit's focus ring and edge fades, with the fades lever-tested for pointer hit-testing; a third pass found the ring clipped top and bottom, painting brackets rather than a ring, so the strip now keeps its room on every side with the geometry asserted. The minimum is 520×480, set by the dashboard header, and the tab row provably no longer holds it open.
Still manual. Real screen reader; a real trackpad (the mask's axis lock is untested here); macOS/Windows runtime. Known: the strip reveals on resize, so scrolling the tabs away and then resizing snaps back to the shown surface's tab.
Activity
elementalvoid commentedon Oct 31, 2026
Landed in
mainat35691b2, merged fromintegration/kit-surface(CI green at43223e2). Gate on the merged tree:cargo fmt --all -- --check,cargo clippy --workspace --all-targets -D warnings,cargo test --workspace— all clean.What the reviews changed. Three passes. The keyboard path had no visible focus state — a regression from the
Buttonit replaced — and nothing at all told a user that tabs were hidden at the minimum window. The fix took the kit's focus ring and edge fades, with the fades lever-tested for pointer hit-testing; a third pass found the ring clipped top and bottom, painting brackets rather than a ring, so the strip now keeps its room on every side with the geometry asserted. The minimum is 520×480, set by the dashboard header, and the tab row provably no longer holds it open.Still manual. Real screen reader; a real trackpad (the mask's axis lock is untested here); macOS/Windows runtime. Known: the strip reveals on resize, so scrolling the tabs away and then resizing snaps back to the shown surface's tab.