From 82437bd4b91029a206d3d7f6edcfadf5c78fffc4 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Sun, 24 May 2026 18:33:53 -0700 Subject: [PATCH] =?UTF-8?q?style(tui):=20picker=20highlighted=20item=20?= =?UTF-8?q?=E2=86=92=20Aurora=20blue=20(v0.6.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator request: the agent picker's highlighted selection should get the brand-color treatment — Aurora blue background — instead of the v0.6.1 dark-30 muted bg. ## Two-fix landing **The selector**: v0.6.1's `ListView > ListItem.--highlight` (double dash) never actually matched. Textual's class is `-highlight` (single dash). The v0.6.1 "fix" silently fell through to Textual's defaults, which happened to be invisible because $block-cursor-background was configured but the selector path didn't reach the rendered widget. Probed live: `item.classes = frozenset({'-highlight'})`. Selector corrected, plus dropped the `>` combinator since Textual's internal DOM puts wrappers between `ListView` and `ListItem`. **The background**: explicit `#agent-list:focus ListItem.-highlight { background: $primary }` — Aurora blue (#6388D8) for the focused- list highlight band. **The contrast**: bright-blue id-line text on Aurora-blue background would be unreadable. Highlighted-state child overrides: .agent-id-line → $au-bright-white (#cce7ec) + bold .agent-desc → $au-bright-80 (#b3cbcf) Non-highlighted items keep their default colors (bright-blue id + bright-70 desc on App bg). ## Verified live 13 fill rects of `#6388d8` in the picker SVG export (was 0 before this commit). Other Australis brand colors intact: chrome surface #373b46, dark-50 #6e7882, dark-30 #414751. ## Tests 241/241 GREEN; ruff clean. No test rewrites needed — picker tests assert structure (widget tree, key bindings), not colors. Patch bump (v0.6.3 → v0.6.4) — cosmetic; no public-API change. --- persistent-memory.md | 9 +++++---- pyproject.toml | 2 +- src/ratatoskr/tui.py | 32 ++++++++++++++++++++++---------- uv.lock | 2 +- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/persistent-memory.md b/persistent-memory.md index b52df56..2db1016 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -32,9 +32,9 @@ separate dev team rather than an in-tree Worldtree tool. ## Current state / in-flight -_As of 2026-05-24 (post-v0.6.3 Australis restored, $background → black):_ +_As of 2026-05-24 (post-v0.6.4 picker Aurora-blue highlight):_ -**Status: v0.6.3 shipped.** Nine core issues complete (`sse_client` +**Status: v0.6.4 shipped.** Nine core issues complete (`sse_client` #1, `sessions` #2, `cli` #3, `tui` #4, `--end-user-id` #5, TUI startup error visibility #6, presenter contract semantics amendment #12, startup agent picker #8, §5 layout reshape + Tools pane #13) @@ -51,8 +51,9 @@ Static in the footer (static "Tools" v1; dynamic when more tabs land). CLI mode (--send) unaffected by design — INV-018. Last commits on `main`: -- v0.6.3 style(tui): restore Australis palette, only $background → pure black -- `d845b20` style(tui): neutralize Australis dark palette — bg no longer blue-tinted (v0.6.2, reverted) +- v0.6.4 style(tui): picker highlighted item → Aurora blue (brand selection treatment) +- `ac690c1` style(tui): restore Australis palette, only $background → pure black (v0.6.3) +- `d845b20` style(tui): neutralize Australis dark palette (v0.6.2, reverted) - `8463eb2` style(tui): kill remaining blue + thinking-current into pane (v0.6.1) - `cfee89a` refactor(tui): streaming + turn headers + Thinking pane (v0.6.0) - `7106af5` style(tui): UI polish pass — terminal label colors, placeholders (v0.5.1) diff --git a/pyproject.toml b/pyproject.toml index eb97527..8de5235 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "ratatoskr" -version = "0.6.3" +version = "0.6.4" description = "Worldtree Conversation API debug TUI — multi-pane observability dashboard" readme = "README.md" requires-python = ">=3.12" diff --git a/src/ratatoskr/tui.py b/src/ratatoskr/tui.py index 8b99c62..7e80837 100644 --- a/src/ratatoskr/tui.py +++ b/src/ratatoskr/tui.py @@ -425,22 +425,34 @@ class AgentPickerApp(App[str | None]): background: $background; } /* Multi-line agent items. Each ListItem is auto-height so the full - description wraps below the agent_id/name line — no truncation. */ + description wraps below the agent_id/name line — no truncation. + v0.6.4: lock bg to $background so Textual's auto background-tint on + focus doesn't bleed through unwanted color into the non-highlighted + items. */ #agent-list > ListItem { height: auto; padding: 1 1; background: $background; } - /* v0.6.1: override Textual's default ListView:focus highlight, which - defaults to $primary (Aurora blue) and made the picker unreadable. - Both selectors needed — focused state has higher specificity in - Textual's defaults. */ - ListView > ListItem.--highlight, - ListView:focus > ListItem.--highlight { - background: $au-dark-30; + /* v0.6.4: highlighted item gets Aurora blue background (Textual's + default $block-cursor-background = $primary). Override only the + text-color descendants so id-line/desc stay readable on blue. The + background itself comes from Textual's default ListItem.-highlight + rule — we removed our previous overriding selectors. + + Textual's class is `-highlight` (single dash). Use plain descendant + combinator to bypass internal DOM wrappers. */ + #agent-list:focus ListItem.-highlight { + background: $primary; } - /* Children of highlighted items keep their colors — the dark-30 bg - provides enough contrast for bright-blue id + dark-60 desc text. */ + #agent-list:focus ListItem.-highlight .agent-id-line { + color: $au-bright-white; + text-style: bold; + } + #agent-list:focus ListItem.-highlight .agent-desc { + color: $au-bright-80; + } + /* Default (unhighlighted) item text styling. */ .agent-id-line { color: $au-bright-blue; text-style: bold; diff --git a/uv.lock b/uv.lock index 85a4816..a6e9a45 100644 --- a/uv.lock +++ b/uv.lock @@ -968,7 +968,7 @@ wheels = [ [[package]] name = "ratatoskr" -version = "0.6.3" +version = "0.6.4" source = { editable = "." } dependencies = [ { name = "httpx" },