gui: themes and a less stock-Adwaita look (#7)

* gui: lift selected sidebar row into a card

Darker sidebar in dark mode, rounded card for the selected row
instead of the accent stripe, subtle hover.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: show status age in sidebar labels

"Working 3m", "Approval 2m": spoken statuses carry how long they
have held; under a minute the word stands alone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: drive dark-only styles from StyleManager

prefers-color-scheme does not follow libadwaita's scheme on this
desktop, so the dark sidebar, pane shadow and permission orange never
applied. Mirror is_dark() as a root class like reduced-motion.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: give workspaces a mark and a breadcrumb header

Monogram on a stable per-workspace tint in each sidebar row, repeated
in a left-aligned mark / name / branch · path header; signaltty
wordmark replaces the generic sidebar title.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: dark lightness ladder and flatter chrome

Near-black canvas, sidebar and pane cards stepped by lightness with
hairlines (docs/14 §7); lower flat header bars; pane header folds into
the card; terminal node no longer paints its own slab. Light mode
keeps stock Adwaita values.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* specs: 015 themes spec, palette research, plan and ADR-0017

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* core: appearance and theme preference model

Pure Appearance/Theme/GuiPreference with per-axis fallback parsing and
the pane background table the terminal mirrors.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: five themes as libadwaita variable overrides

Signal, Grove, Ocean, Ember, Iris in light and dark per research.md;
pane and permission app tokens; theme-aware workspace marks; swatches;
high contrast last so it wins over every theme.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: preferences dialog for appearance and theme

Ctrl+, opens System/Light/Dark and theme cards; choice applies live,
restyles terminals to the theme's card colour and persists to
gui.json. Test pins the terminal table to the stylesheet.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* qa: theme screenshots for every theme and variant

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: date attention labels from when attention was raised

The status age read the workspace's latest activity, so output from any
pane reset an old "Approval 10m". Panes now carry attention_since,
set on raise and cleared on mark-seen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: drop reference cycles in preference card callbacks

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* gui: keep theme test and screenshot recipe off the real gui.json

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
9f1ead0167Simone committed on 10/4/2026, 1:29:44 AM· committed by GitHubparenta8e1afd
42 files changedLine totals unavailable