SIGN IN SIGN UP

fix(sidebar): keep a folder's colour on its own title, and finish the group heading

Picking a colour for a folder wrapped every row it owns — the header, the empty
hints, the drag surface, the sticky overlay and each conversation card — in a
`data-theme` scope, so the choice repainted that whole subtree's hover pill,
selection and muted tokens while barely showing on the title it was chosen for:
every preset's `--sidebar-foreground` is the same near-black or near-white. The
colour now lands on the title text and nowhere else, and a card always renders
in the app theme, whichever colour its folder carries.

`THEME_COLOR_TITLE` carries a light/dark pair per preset, written as inline
custom properties that `.folder-title-tint` picks between — the shape
`.forge-label` already uses, and for the same reason: choosing in JS flashes the
light value on a cold start in dark mode. Each pair keeps its preset's hue and
chroma and pins the lightness where the sidebar can carry it (0.50 light, 0.80
dark, chroma clamped back into sRGB), which holds all twelve above 4.5:1 against
both the sidebar and the hover pill in either theme; the floor is green in light
mode at 5.4:1, and 4.7:1 over the pill.

A group heading now reads as the folder headings' sibling rather than another
kind of row: same title size, weight and colour, and the same amber badge for
sessions RUNNING anywhere in the group — summed across its members and their
worktrees, absent at zero — in place of a grey count of the folders it holds,
which the rows under an open group already state. The count is derived at render
from live conversation state, so a status event still moves one number on one
memoized heading instead of rebuilding the row model. Group affordances take the
Layers family — `LayersPlus` to create one, `Layers` in front of the name and on
"Move to group" — so a group no longer wears a folder's glyph.
X
xintaofei committed
12274051cf9a94e74a0178360a562d97dfcdd52a
Parent: d6de8c6