From 47c8b6f99716e3201acbf0b919328245c6a8b424 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sun, 5 Jul 2026 18:55:44 +0100 Subject: [PATCH] fix(themes): P1 palette retunes from the design audit + gated subtext floor (item 28b) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The audit's P1s, fixed at the palette level (items 25/27 previously patched the consumers around these): - summer-day: surface was the TEXT color (slate #5c6a72 on cream) and subtext was the BASE (ratio 1.0, invisible) — now a raised cream surface #efe7d0 and a slate-teal subtext #6e828a in the theme's family. - flexoki-light: surface/overlay/muted were all the text black and subtext the paper — retuned to canonical upstream Flexoki tones (ui #E6E4D9, #B7B5AC, tx-2 #6F6E69, base-500 #878580). - miasma: pure-black surface under a #222 base → raised #2e2e2e. - kanagawa: surface was sumiInk0 (darker than the bg) → upstream's raised sumiInk4 #2a2a37. check-theme-contrast.py gains the adopted rule: subtext on base >= 3.0 (all 21 themes pass), so the invisible-secondary-text class cannot ship again. Model note in the backlog: `overlay` is a mid-tone role (catppuccin semantics), not a third bg tier. Verified: V0 + checks.theme-contrast green (21x3); re-audit shows all four P1 findings gone; a scratch downstream with summer-day active builds and the new surface hex lands in the rendered ghostty config. Remains: V3 four-theme eyeball (HARDWARE-QUEUE) and 28b's P2 floors + exemption list. Co-Authored-By: Claude Fable 5 --- agent/BACKLOG.md | 26 ++++++++++++++++---------- agent/HARDWARE-QUEUE.md | 7 +++++++ agent/JOURNAL.md | 20 ++++++++++++++++++++ themes/flexoki-light.json | 8 ++++---- themes/kanagawa.json | 2 +- themes/miasma.json | 2 +- themes/summer-day.json | 4 ++-- tools/check-theme-contrast.py | 4 ++++ 8 files changed, 55 insertions(+), 18 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index befb5d1..1659bf4 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -50,7 +50,13 @@ Bernardo has offered image-expert models for designed graphics needs artwork must STOP and ask ("say the word") instead of shipping programmer-art. Slices: (a) ✓ the audit (2026-07-05, iteration #31 — findings below); -(b) palette-level fixes + the extended contrast/harmony checker; +(b) palette-level fixes + the extended contrast/harmony checker — +P1s ✓ shipped 2026-07-05 (iteration #32): summer-day + flexoki-light +subtext/surface/overlay/muted retuned (flexoki to its canonical +upstream tones), miasma + kanagawa surfaces raised (kanagawa to +sumiInk4); `subtext/base ≥ 3` now GATED in check-theme-contrast.py +(all 21 pass). Remaining (b): the P2 floors below + the per-theme +exemption-list mechanism, then re-audit; (c) per-surface polish slices; (d) the whole-swap themes brought to the same bar. Visual work is V3-bound by nature — screenshots are the review artifact, hardware @@ -58,15 +64,15 @@ confirms. **Audit findings (slice a — `tools/audit-theme-design.py` over all 21 palettes + visual pass over previews; identity-aware curation):** -- **P1 · invisible-secondary-text palettes:** summer-day and - flexoki-light have `subtext == base` (contrast 1.0 — literally - invisible) and `text == surface`. Items 25/27 fixed the *consumers* - (swaync/bar stopped using them); the palettes are still traps — any - new surface consuming subtext/surface re-trips. Fix the palettes: - real mid-tone subtext, raised surface. -- **P1 · inverted bg stacks:** miasma's surface is #000000 under a - much lighter base; kanagawa's surface (L .14) sits below base - (L .24). "Raised" surfaces render sunken/black. Retune. +- ~~P1 · invisible-secondary-text palettes~~ ✓ fixed iteration #32 + (summer-day subtext #6e828a, surface #efe7d0; flexoki-light to + canonical Flexoki: surface #E6E4D9, overlay #B7B5AC, subtext + #6F6E69, muted #878580). Gate added. +- ~~P1 · inverted bg stacks~~ ✓ fixed iteration #32 (miasma surface + #2e2e2e; kanagawa surface #2a2a37 = upstream sumiInk4). Note + learned: in this palette model `overlay` is a MID-TONE + (borders/dim, catppuccin semantics), not a third bg tier — the + dark-theme overlay==muted pattern is intentional. - **P2 · muted floor:** muted-on-base < 2.0 on gruvbox (1.27), everforest (1.55), lumon (1.68), nord (1.69), white (1.82), latte (1.91), retro-82 (1.93) — dimmed workspaces/inactive items barely diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index 2c3944b..76d6608 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -153,6 +153,13 @@ QA machine), the **T14s** (webcam case). applies the matching profile within ~3s (toast names it); unplugging switches back; Auto-switch off stops that; with two profiles naming the same outputs, no flapping (ties do nothing). +- [ ] **Retuned palettes eyeball (item 28b P1)** — switch through + summer-day, flexoki-light, kanagawa, miasma: chips/menus/toasts + now draw on a *raised* surface (summer-day's was slate-on-cream, + kanagawa's near-black, miasma's pure black), secondary text + (tooltips, fastfetch labels) is visible on summer-day + + flexoki-light, kanagawa floats are lighter than the bg (upstream + sumiInk4). Anything that reads worse than before → reopen 28b. - [ ] **Themed greeter + console (item 16)** — after `sys-rebuild` + logout: tuigreet renders in theme colors (dark container, accent border, themed prompt/time) and a raw tty (CTRL+ALT+F2) shows the diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 2573f0c..0ff2304 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,26 @@ Template: --- +## 2026-07-05 — P1 palette retunes + gated subtext floor (iteration #32, item 28b) +- **Task:** item 28 slice (b), P1s from the #31 audit. +- **Did:** summer-day: surface #5c6a72(=text!)→#efe7d0 raised cream, + subtext #fdf6e3(=base!)→#6e828a slate; flexoki-light to canonical + Flexoki tones: surface #E6E4D9(ui), overlay #B7B5AC, subtext + #6F6E69(tx-2), muted #878580(base-500); miasma surface #000→#2e2e2e; + kanagawa surface #090618→#2a2a37 (upstream sumiInk4 — old value was + sumiInk0, darker than bg). check-theme-contrast.py gains the adopted + `subtext/base ≥ 3` pairing (the item-25/27 trap, now impossible). + Model note recorded: `overlay` is a mid-tone role, not a bg tier. +- **Verified:** V0 + checks.theme-contrast GREEN (21×3 pairings); + re-audit: all four P1 findings gone (kanagawa now CVD-only findings); + V1 — scratch downstream with summer-day ACTIVE builds, new surface + hex present in rendered ghostty config. Looks are V3 → queued + (four-theme eyeball). +- **Pending:** 28b remainder: P2 floors (muted ≥2, warn ≥2.5, + text-on-surface ≥4.5, accentAlt ≥3) + exemption-list mechanism. +- **Next suggestion:** 28b P2s (7 muted retunes + 4 warn + 2 + text-on-surface + 2 accentAlt, then gate with exemptions). + ## 2026-07-05 — theme design audit (iteration #31, item 28 slice a) - **Task:** BACKLOG NEXT#28 slice (a) — the design-theory audit (human-requested; Bernardo asked to run it now). diff --git a/themes/flexoki-light.json b/themes/flexoki-light.json index 4be4409..6dfd551 100644 --- a/themes/flexoki-light.json +++ b/themes/flexoki-light.json @@ -7,11 +7,11 @@ "colors": { "base": "#FFFCF0", "mantle": "#d9d6cc", - "surface": "#100F0F", - "overlay": "#100F0F", + "surface": "#E6E4D9", + "overlay": "#B7B5AC", "text": "#100F0F", - "subtext": "#FFFCF0", - "muted": "#100F0F", + "subtext": "#6F6E69", + "muted": "#878580", "accent": "#205EA6", "accentAlt": "#CE5D97", "good": "#879A39", diff --git a/themes/kanagawa.json b/themes/kanagawa.json index 6bc93bb..f4ede8e 100644 --- a/themes/kanagawa.json +++ b/themes/kanagawa.json @@ -7,7 +7,7 @@ "colors": { "base": "#1f1f28", "mantle": "#1a1a22", - "surface": "#090618", + "surface": "#2a2a37", "overlay": "#727169", "text": "#dcd7ba", "subtext": "#c8c093", diff --git a/themes/miasma.json b/themes/miasma.json index 910f279..3cdc740 100644 --- a/themes/miasma.json +++ b/themes/miasma.json @@ -7,7 +7,7 @@ "colors": { "base": "#222222", "mantle": "#1d1d1d", - "surface": "#000000", + "surface": "#2e2e2e", "overlay": "#666666", "text": "#c2c2b0", "subtext": "#d7c483", diff --git a/themes/summer-day.json b/themes/summer-day.json index da9124a..52f398e 100644 --- a/themes/summer-day.json +++ b/themes/summer-day.json @@ -7,10 +7,10 @@ "colors": { "base": "#fdf6e3", "mantle": "#d7d1c1", - "surface": "#5c6a72", + "surface": "#efe7d0", "overlay": "#829181", "text": "#5c6a72", - "subtext": "#fdf6e3", + "subtext": "#6e828a", "muted": "#829181", "accent": "#3a94c5", "accentAlt": "#df69ba", diff --git a/tools/check-theme-contrast.py b/tools/check-theme-contrast.py index 30cb0d7..08a519e 100644 --- a/tools/check-theme-contrast.py +++ b/tools/check-theme-contrast.py @@ -22,6 +22,10 @@ PAIRINGS = [ ("text", "base", 4.5, "swaync body / waybar modules / rofi rows"), # symmetric ratio also covers accent-on-base (waybar updates, rofi prompt) ("base", "accent", 3.0, "swaync button:hover / waybar active ws / rofi selected row"), + # Adopted from the item-28 design audit: summer-day/flexoki-light + # shipped subtext == base (ratio 1.0 — invisible secondary text; the + # palette-level cause of items 25/27). Never again. + ("subtext", "base", 3.0, "secondary text (tooltips, hints, fastfetch labels)"), ]