fix(themes): P2 contrast floors retuned + gated across 9 themes (item 28b done)
All checks were successful
Check / eval (push) Successful in 3m10s

18 hex retunes, hue-preserving OKLCH minimal raises except where the
upstream palette defines a canonical value: muted lifted to >= 2.0 on
lumon/white/retro-82/everforest (solved), gruvbox (bg4 #7c6f64), nord
(#616e88, the community comment-brightening), catppuccin-latte
(overlay1 #8c8fa1); text-on-surface >= 4.5 via surface nudges
(ristretto darker, latte lighter); accentAlt >= 3.0 (latte, summer-day
darkened); warn >= 2.5 — the bar's battery tint — darkened on the
light bases (latte, rose-pine dawn, summer-day) and flexoki-light's
four status colors moved to their canonical light-mode 600 series.

check-theme-contrast.py now gates all four adopted floors (7 pairings
x 21 themes, green). good/bad stay audit-only — identity themes sit at
2.0-2.3 there by design, so no exemption mechanism was needed. The
design audit's contrast findings drop 20 -> 1 (miasma's earthy `bad`,
kept as identity). Item 28 slice (b) complete.

Verified: V0, checks.theme-contrast green, flake check green,
re-audit. Rendering is V3 -> HARDWARE-QUEUE eyeball entries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-05 19:44:46 +01:00
parent 47c8b6f997
commit 44d5516191
15 changed files with 64 additions and 20 deletions

View File

@@ -55,8 +55,15 @@ 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;
(all 21 pass). P2s ✓ shipped 2026-07-05 (iteration #33): 18 hex
retunes across 9 themes (OKLCH hue-preserving minimal raises;
canonical where upstream defines one — gruvbox bg4, nord #616e88,
latte overlay1, flexoki 600-series statuses for light mode) and the
four floors GATED: muted ≥ 2, text/surface ≥ 4.5, accentAlt ≥ 3,
warn ≥ 2.5 (21×7 pairings green; audit contrast findings 20 → 1 —
miasma's earthy `bad` stays as identity, good/bad floors stay
audit-only so no exemption list was needed). Remaining (b): nothing —
further palette work graduates from slices (c)/(d) findings;
(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

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).
- [ ] **P2 retunes eyeball (item 28b)** — spot-check on top of the P1
entry below: gruvbox/nord/lumon/everforest/retro-82/white dimmed
text (inactive workspaces, muted volume) now visible-but-dim;
latte + rose-pine(dawn) + summer-day warn/battery tint reads on
the light bases; flexoki-light statuses are the deeper canonical
600s; latte selected-row/alt-accent pink darker. Anything that
lost its "dim" feel → reopen 28b.
- [ ] **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,

View File

@@ -17,6 +17,28 @@ Template:
---
## 2026-07-05 — P2 floors retuned + gated (iteration #33, item 28b done)
- **Task:** item 28 slice (b) remainder — the P2 contrast floors.
- **Did:** 18 hex retunes across 9 themes: muted raised on lumon/
white/retro-82/everforest (OKLCH hue-preserving minimal solve to
≥2.05) + gruvbox→bg4 #7c6f64, nord→#616e88 (community standard),
latte→overlay1 #8c8fa1; text-on-surface via surface nudges
(ristretto darker, latte lighter); accentAlt darkened (latte,
summer-day); warn darkened on the light themes (latte, summer-day,
rose-pine-dawn) and flexoki-light's four statuses moved to the
canonical 600 series. check-theme-contrast.py gates all four
adopted floors (muted ≥2, text/surface ≥4.5, accentAlt ≥3, warn
≥2.5 — warn is the battery tint); good/bad stay audit-only
(identity), so no exemption mechanism was needed. Slice (b) done.
- **Verified:** V0 + checks.theme-contrast GREEN (21×7); re-audit:
contrast findings 20→1 (miasma bad = identity); flake check green.
Rendering is V3 → queued (P2 eyeball entry).
- **Pending:** slices (c) per-surface polish (needs 1080p captures)
and (d) whole-swap bar parity; ansi[] conventions decision still
open (audit notes).
- **Next suggestion:** slice (c) prep — 1080p captures via the VM
recipe, or hardware captures if Bernardo prefers eyeballing first.
## 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,

View File

@@ -7,15 +7,15 @@
"colors": {
"base": "#eff1f5",
"mantle": "#cbcdd0",
"surface": "#bcc0cc",
"surface": "#bfc4d0",
"overlay": "#acb0be",
"text": "#4c4f69",
"subtext": "#5c5f77",
"muted": "#acb0be",
"muted": "#8c8fa1",
"accent": "#1e66f5",
"accentAlt": "#ea76cb",
"accentAlt": "#d260b5",
"good": "#40a02b",
"warn": "#df8e1d",
"warn": "#d6860a",
"bad": "#d20f39"
},
"border": {

View File

@@ -11,7 +11,7 @@
"overlay": "#475258",
"text": "#d3c6aa",
"subtext": "#d3c6aa",
"muted": "#475258",
"muted": "#59646a",
"accent": "#7fbbb3",
"accentAlt": "#d699b6",
"good": "#a7c080",

View File

@@ -13,10 +13,10 @@
"subtext": "#6F6E69",
"muted": "#878580",
"accent": "#205EA6",
"accentAlt": "#CE5D97",
"good": "#879A39",
"warn": "#D0A215",
"bad": "#D14D41"
"accentAlt": "#A02F6F",
"good": "#66800B",
"warn": "#AD8301",
"bad": "#AF3029"
},
"border": {
"active": "accent",

View File

@@ -11,7 +11,7 @@
"overlay": "#3c3836",
"text": "#d4be98",
"subtext": "#d4be98",
"muted": "#3c3836",
"muted": "#7c6f64",
"accent": "#7daea3",
"accentAlt": "#d3869b",
"good": "#a9b665",

View File

@@ -11,7 +11,7 @@
"overlay": "#304860",
"text": "#d6e2ee",
"subtext": "#d6e2ee",
"muted": "#304860",
"muted": "#3c556e",
"accent": "#f2fcff",
"accentAlt": "#8bc9eb",
"good": "#5e95bc",

View File

@@ -11,7 +11,7 @@
"overlay": "#4c566a",
"text": "#d8dee9",
"subtext": "#e5e9f0",
"muted": "#4c566a",
"muted": "#616e88",
"accent": "#81a1c1",
"accentAlt": "#b48ead",
"good": "#a3be8c",

View File

@@ -11,7 +11,7 @@
"overlay": "#134e5a",
"text": "#f6dcac",
"subtext": "#a7c9c6",
"muted": "#134e5a",
"muted": "#19525f",
"accent": "#faa968",
"accentAlt": "#3f8f8a",
"good": "#028391",

View File

@@ -7,7 +7,7 @@
"colors": {
"base": "#2c2525",
"mantle": "#251f1f",
"surface": "#72696a",
"surface": "#675e5f",
"overlay": "#948a8b",
"text": "#e6d9db",
"subtext": "#e6d9db",

View File

@@ -15,7 +15,7 @@
"accent": "#56949f",
"accentAlt": "#907aa9",
"good": "#286983",
"warn": "#ea9d34",
"warn": "#d68a16",
"bad": "#b4637a"
},
"border": {

View File

@@ -13,9 +13,9 @@
"subtext": "#6e828a",
"muted": "#829181",
"accent": "#3a94c5",
"accentAlt": "#df69ba",
"accentAlt": "#d863b4",
"good": "#8da101",
"warn": "#dfa000",
"warn": "#ca9210",
"bad": "#f85552"
},
"border": {

View File

@@ -11,7 +11,7 @@
"overlay": "#c0c0c0",
"text": "#000000",
"subtext": "#000000",
"muted": "#c0c0c0",
"muted": "#b5b5b5",
"accent": "#6e6e6e",
"accentAlt": "#2e2e2e",
"good": "#3a3a3a",

View File

@@ -26,6 +26,14 @@ PAIRINGS = [
# 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)"),
# Item-28 P2 floors (all 21 themes retuned to pass, 2026-07-05).
# warn IS held to a floor — it's the bar's 25%-battery color and the
# low-battery toast tint; good/bad stay audit-only (identity themes
# sit at 2.02.3 there by design — see tools/audit-theme-design.py).
("muted", "base", 2.0, "dimmed text (inactive workspaces, muted volume)"),
("text", "surface", 4.5, "text on chips / raised rows"),
("accentAlt", "base", 3.0, "alt-accent glyphs"),
("warn", "base", 2.5, "battery warning tint (bar + toast)"),
]