SIGN IN SIGN UP

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