fix(theme): generated waybar/rofi CSS invisible on on-surface palettes (item 27)
All checks were successful
Check / eval (push) Successful in 2m53s

Follow-on to the swaync fix (a643391): the generated Waybar CSS colored
the module row and #window @subtext and dim states @muted, and the
generated rofi theme put @fg text on @surface chips — invisible where
palettes use those roles as "on-surface" (flexoki-light: subtext==base,
surface==text; gruvbox: muted/base = 1.27). flexoki-light has no
whole-swap, so it ran this CSS. Generated surfaces only — the summer
whole-swaps are hand-authored and untouched.

- waybar: secondary text → alpha(@text, 0.85); dim states (inactive
  workspaces, DND bell, muted volume) → alpha(@text, 0.5).
- rofi: @dim → text+"80", @surface → text+"1a" (#RRGGBBAA fg tints).
- check-theme-contrast.py pairings/docs now cover all three generated
  surfaces; status glyphs (good/warn/bad on base, worst 2.05) are
  deliberately not held to a text ratio — raising them is palette
  design, a human decision.

Verified: V0; V1 (checks.theme-contrast green over 21 themes;
downstream-template-home builds; rendered waybar style has zero
@subtext/@muted/@surface; rendered custom.rasi shows fg-derived
tints). Honesty: NOT visually verified — V3 queued (flexoki-light
eyeball + dark-theme regression spot-check).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-04 19:08:18 +01:00
parent a643391d3d
commit fd6e5f60e9
7 changed files with 54 additions and 37 deletions

View File

@@ -25,26 +25,6 @@ next, in what order*.
*Items 2127: real-hardware QA findings from the Latitude 5410
(Bernardo, 2026-07-04) — bugs found on metal outrank the queue.*
### 27. Generated waybar/rofi CSS invisible on on-surface palettes
Found by item 25's audit: the generated Waybar CSS colors `#window` and
the whole module row `@subtext`, and the generated rofi theme puts `@fg`
text on `@surface` backgrounds (inputbar, textbox, `element alternate`).
In palettes where subtext/surface mean "on-surface" (flexoki-light:
subtext==base AND surface==text) those are invisible. summer-day/night
escape via their whole-swap waybar.css/rofi.rasi — **flexoki-light does
not** and runs the generated CSS. Same class of fix as the shipped
swaync one (63136a8-follow-on): move the generated surfaces to pairings
that contrast by construction (alpha(@text) tints; @text for module
text with per-module accents kept), then extend
tools/check-theme-contrast.py's PAIRINGS to cover waybar/rofi so
`checks.theme-contrast` guards them too. Waybar changes must respect
the parity rule (generated bar only — the summer whole-swaps are
hand-authored and unaffected). Alternative worth weighing in-iteration:
normalize the flexoki-light palette itself (make subtext dim-text,
surface elevated-bg) — smaller diff but changes the theme's look
everywhere. **Verify:** V1 + the extended contrast check across all 21
themes; V2 themed-VM screenshot on flexoki-light if cheap; V3 eyeball.
### 22. Network menu shows nameless/weird entries
Reported: `networkmanager_dmenu` lists entries with no names (likely
hidden-SSID APs rendered as blank rows, possibly other adapters/

View File

@@ -44,6 +44,11 @@ QA machine), the **T14s** (webcam case).
readable body text; open the control centre (SUPER+N), hover a
notification row and check the Clear button — all text legible
(body/buttons now @text on tinted chips, not subtext/surface).
- [ ] **Bar + rofi legible on flexoki-light** (item 27 fix) — switch to
flexoki-light: every Waybar module readable (window title, tray
row, dimmed inactive workspaces / muted volume visible-but-dim),
rofi inputbar/alternate rows show text. Spot-check one dark theme
(e.g. tokyo-night) for no visual regression in the same spots.
- [ ] **Keyboard hotplug picker (re-verify after in-flake graduation)** —
plug an external keyboard post-login, pick a layout in rofi, confirm
it applies per-device only, persists in `settings.keyboard.devices`,

View File

@@ -17,6 +17,23 @@ Template:
---
## 2026-07-04 — waybar/rofi palette-safe pairings (iteration #10, item 27)
- **Task:** BACKLOG NOW#27 — generated waybar/rofi CSS invisible on
on-surface palettes (flexoki-light runs it; summers whole-swap).
- **Did:** waybar.nix generated CSS: module row + #window
alpha(@text, 0.85); inactive workspaces / dnd / pulseaudio.muted →
alpha(@text, 0.5) (gruvbox's muted/base was 1.27). rofi.nix: @dim
text+80, @surface → text+1a (#RRGGBBAA fg tints). Contrast check
docstring/pairings now cover all three generated surfaces. Status
glyphs (good/warn/bad on base, worst 2.05) left as-is — palette
design, human call. Generated bar only; whole-swaps untouched.
- **Verified:** V0; V1 — checks.theme-contrast green (21 themes),
downstream-template-home builds, rendered waybar style has zero
@subtext/@muted/@surface, rendered custom.rasi shows fg-derived
tints. NOT visually verified — V3 queued (flexoki-light eyeball).
- **Pending:** V3 flexoki-light + dark-theme regression spot-check.
- **Next suggestion:** item 22 (network menu rows) — V1-actionable.
## 2026-07-04 — swaync contrast fix + theme-contrast check (iteration #9, item 25)
- **Task:** BACKLOG NOW#25 — swaync text invisible on summer-day.
- **Did:** swaync.nix now uses only palette-safe pairings: body/summary