style(web): restyle the beads parade in the todo.sr.ht idiom The board still read as a rounded-card kanban from another app. Re-skin every surface in sourcehut's own issue-tracker language (todo.sr.ht): flat and square — no border-radius, no shadows, no tints — hairline gray borders, monospace ids, striped-on-hover rows instead of cards, and squared bordered labels (the sourcehut .label: 1px border, no radius). The summary becomes a flat hairline strip and each lane a squared column with a 2px accent cap. The Mardi Gras hues survive only as small square swatches and the lane cap, never as fills, so the view looks like a native sourcehut tracker in both the light and dark themes. Verified via a headless light/dark render. Test asserts the renamed summary class.
fix(web): make the beads view inherit the SourceHut theme The beads board shipped its own Mardi Gras palette — a purple→green marquee gradient and saturated solid lane fills — that clashed with SourceHut's flat, utilitarian dark theme, and the detail pane's field labels were a hardcoded dark purple with no dark-mode override, leaving "Created by / Owner / Description" unreadable on the dark background. Drive everything from CSS variables that mirror core.sr.ht's Bootstrap palette for both the light default and the prefers-color-scheme: dark variant sourcehut ships (the same media query it uses), so the view inherits the host theme instead of fighting it. Lane hues become muted Mardi Gras accents (gold/green/violet/gray) used only as thin borders and low-alpha tints — never as body text — so contrast holds on either theme. The marquee is now a flat stat row, lanes an understated panel with an accent underline, and detail labels a readable muted caption. Verified light and dark via a headless render.
feat(web): Mardi Gras beads view Render a beads (bd) issue database as a Mardi Gras parade board: four lanes — Rolling (in progress), Lined Up (open & ready), Stalled (open & blocked), Past Stand (done) — plus a marquee of per-lane counts. Cards show id/title/type/priority/assignee/labels and blocked-by/blocks counts; an issue-detail pane (?issue=<id>) shows the full issue with its dependency edges in both directions and its comments thread. Fingerprints on the issues + dependencies tables and reads everything through the browse layer (column-name-keyed, so column order is irrelevant), capped at 2000 rows/table. Status is bucketed via custom_statuses with name heuristics as a fallback; "blocked" means is_blocked or an open blocking dependency. Plugs into the view registry via init()+RegisterView with no framework edits. Purple/gold/green palette scoped in the template (no scss rebuild needed).