feat(web): adopt claude code's palette, monospace ui, and a theme pin
The palette is collie's neutral ramp rasterized -- #0a0a0a under #fafafa, #f5f5f5 under #0a0a0a -- written ONCE as light-dark() pairs resolved by the root's own color-scheme. The other shape, a light palette plus a dark @media copy, has to restate every value and then a third time for an explicit pin; this way the Auto/Light/Dark control costs two lines of CSS, and native UI (scrollbars, form controls, the caret, the iOS keyboard) lands on the right side of the theme for free. Auto is the ABSENCE of a pin, so it needs no JavaScript at all. What JS owns is the part CSS cannot do: taking a stale pin back off -- Dark -> Auto leaving `data-theme` stamped is the bug the two-way write exists to stop -- and the two theme-color metas, which carry `media` and so follow the OS rather than the pin. The choice is a bare string in localStorage, read by a script in <head> before first paint so a Dark reader is never shown the system's Light. --on-accent replaces the literal `color: #fff` on every saturated fill. A saturated token is dark in the light theme and light in the dark one, so no single literal serves both: it measured 2.6:1 against the dark theme's blue, and is >= 6.6:1 on all four hues in both now. The UI is monospace because the app is a window onto a terminal, and a proportional shell around a monospace pane read as two programs sharing a screen. The bundled Hack Nerd Font stays OUT of that stack: 982KB, which nothing fetches until a session opens because a `display: none` element loads no font. Every measured layout assertion in tests/test_web_*.py passes unchanged under it.
N
Nick007 committed
ea0892c9c518b352b649899ec88877b913c94e00
Parent: 58055a4