fix(themes): P1 palette retunes from the design audit + gated subtext floor (item 28b)
All checks were successful
Check / eval (push) Successful in 3m0s

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 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-05 18:55:44 +01:00
parent abc953ea84
commit 47c8b6f997
8 changed files with 55 additions and 18 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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).