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