v0.12.0
The page, redesigned
The bases are black and white now — a black canvas in the dark theme, a white one in the
light, hue-less greys between. The hues are the page's original night palette, spent only
where colour means something: your turns and the selected row, a session's state, a tool
block's category, which CLI a session came from. Everything else got quieter — sections
instead of stacked cards, rows that read as surfaces rather than table lines.
Light and dark, with a switch
The page still follows the system until the half-disc button on the header pins a theme.
The choice is stored, applied before the first paint (no flash of the other theme on
load), and handed back to the system the moment your choice agrees with it again — a
pinned theme never outlives its reason.
The type
Geist and Geist Mono (SIL OFL, licence text alongside) are embedded and served from
/ui/fonts, so the Content-Security-Policy still allows no other origin and the page still
makes no request anywhere else. CJK text falls through to the system fonts named in the
stack. The binary grows by about 115 KB.
Panes that carry their own controls
Each side pane has a bar of its own: "Collapse all" sits over the project groups it
collapses, and the fold toggle sits at the edge the pane folds towards. A folded pane
keeps a slim rail with the toggle pointing back instead of vanishing, and both remember
what you chose. Project headers read as folded or open at a glance — chevron, weight and
count chip change with the state.
Smaller things
Loading a conversation shows a skeleton that holds back long enough never to flash, a
freshly opened one eases its messages in, the auto-refresh checkbox became a switch,
numbers are tabular throughout, empty states say what to do rather than where things used
to be, and the icons are regenerated from the same generator with the new colours. On a
phone the header no longer clips the search row while the Sessions pane is up.
Full changelog: v0.11.6...v0.12.0