fix(themes): light themes — readable inactive workspaces + notification hover
All checks were successful
Check / eval (push) Successful in 4m9s

Two hardware-reported contrast bugs, both the same family: surfaces
that fell back to something designed on dark.

1. Inactive workspace numbers unreadable on every light theme.
   - Generated bar: the @muted dim role is floor-gated at only 2.0:1 —
     fine as "dim" on dark, washed out at number size on light. Light
     mode now promotes inactive buttons to @subtext (3.0 floor,
     typically 4-7:1); dark themes keep @muted.
   - boreal-dawn + kiln-clay whole-swaps: same @muted -> @subtext
     (6.4:1 / 6.6:1).
   - summer-day whole-swap: had NO button color rule at all — the
     container's @fg does not inherit into GTK buttons, so the numbers
     took the GTK default over the cream chip. Explicit @fg_dim
     (= the palette's subtext, 4.0:1) added.
   - executive-ivory already used @subtext; untouched.

2. Notification popup unreadable on hover (bg turns dark, text stays
   dark). Root cause found by probing, not guessing: the popup body is
   one big GTK button (.notification-default-action) and swaync's
   DEFAULT stylesheet — still loaded under our style.css — hovers it to
   rgb(56,56,56). Our sheet never overrode that node (only the
   control-center row), so the default bled through; on light themes
   dark @text sat on it. Now the body + action buttons + close button
   are re-pinned to the palette's alpha(@text) tint construction —
   mode-proof by construction. The first fix attempt (row-level hover)
   was probed, SHOWN insufficient, and replaced.

Verification: V2. nix flake check --no-build, theme-wholeswap,
theme-contrast green. §3 evidence viewed: a purpose-built VM hover
probe under summer-day (notify-send -u critical, cursor parked ON the
popup, screenshot) — before: dark card, drowned text (reproduces the
report exactly, /nix/store/q1qf67fl...notify-shot-summer-day); after:
cream card + faint tint, fully readable (shot-notify2). Bar renders
verified under catppuccin-latte (generated light path incl. the mode
branch) and summer-day (edited whole-swap). An inactive-number visual
needs two live workspaces — VM shows one — so the on-hardware
confirmation is queued (HARDWARE-QUEUE light-theme refits entry);
the ratio change itself is machine-checked.

Bookkeeping riding along: BACKLOG #152 deleted (shipped in d79ad35).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 13:27:43 +01:00
parent d79ad3517e
commit 8e8a142465
7 changed files with 67 additions and 27 deletions

View File

@@ -120,7 +120,9 @@ window#waybar {
#workspaces { padding: 0 2px; }
#workspaces button {
color: @muted;
/* @subtext, not @muted: on a light pill the 2.0-floor grey washes out
at number size — inactive workspaces must stay readable (6.4:1). */
color: @subtext;
padding: 0 9px;
margin: 3px 1px;
border-radius: 9px;

View File

@@ -117,7 +117,9 @@ window#waybar {
#workspaces { padding: 0 2px; }
#workspaces button {
color: @muted;
/* @subtext, not @muted: on the cream plank the 2.0-floor grey washes
out at number size — inactive workspaces must stay readable (6.6:1). */
color: @subtext;
padding: 0 9px;
margin: 3px 1px;
border-radius: 6px;

View File

@@ -18,6 +18,7 @@
@define-color grey0 #a6b0a0;
@define-color grey1 #939f91; /* overlay */
@define-color grey2 #829181; /* muted */
@define-color fg_dim #6e828a; /* subtext */
/* margin: top right bottom left */
/* Spacing outside the element */
@@ -79,6 +80,14 @@ window#waybar {
padding: 0px;
}
/* Inactive workspace numbers: without an explicit rule the GTK default
button color leaks in (the container's @fg does NOT inherit into
buttons) and the numbers vanish on the cream chip. @fg_dim = the
palette's subtext (4.0:1) — dim but readable. */
#workspaces button {
color: @fg_dim;
}
/* The power-profile speedometer glyph renders small in its em box. */
#custom-powerprofile {
font-size: 20px;