feat(bar): group rhythm + semantic @muted dim states (item 28c)
All checks were successful
Check / eval (push) Successful in 2m57s

Two polish items from the 1080p review. The right cluster gains a
wider breath (margin-left 14px) before each functional group — media
(pulseaudio/cpu/memory), toggles (powerprofile/nightlight/language),
status (battery/updates/notification); a self-hiding group head
degrades to the uniform spacing. Dim states (inactive workspaces, DND
bell, muted volume) move from alpha(@text, 0.5) tints to the
palette's @muted role — safe now that 28b floor-gates muted/base >=
2.0 in every theme; the CSS comment that warned against @muted
documented the pre-28b palettes and now states the new invariant.
Whole-swap bars untouched (authored identity).

Verified: V0; V1 (rendered CSS carries the rule + 4 @muted uses);
visual — tokyo-night 1080p re-capture shows the themed backdrop
(iteration #35's fix, navy not black), the group gap, and legible
muted workspaces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-05 20:19:14 +01:00
parent 310614bdd2
commit 8874a22a37
3 changed files with 42 additions and 13 deletions

View File

@@ -76,12 +76,13 @@ review:
- **Icon weight mix `[human]`:** full-color Papirus icons in the - **Icon weight mix `[human]`:** full-color Papirus icons in the
menus vs all-monochrome bar glyphs — pick: symbolic/monochrome menus vs all-monochrome bar glyphs — pick: symbolic/monochrome
menu icons for one system, or color as the menu's identity. menu icons for one system, or color as the menu's identity.
- **Bar right-cluster rhythm:** confirmed at 1080p — add group - **Bar right-cluster rhythm** (shipped iteration #36): group
margins (tray/net · stats · toggles · battery/notify) on the margins before pulseaudio/powerprofile/battery — heads that
gaps grid. self-hide degrade to the uniform spacing.
- **Semantic dim:** bar dim states are `alpha(@text, 0.5)` tints; - **Semantic dim** (shipped iteration #36): workspaces + dnd +
the palette's `muted` role is now floor-guaranteed (28b) — one muted-volume now use `@muted` (floor-guaranteed by 28b) instead
semantic source, use `@muted`. of `alpha(@text, 0.5)` tints; the CSS comment now documents the
new invariant.
-**compositor backdrop** (shipped iteration #35): Hyprland -**compositor backdrop** (shipped iteration #35): Hyprland
`misc:background_color` now the theme's base — no more black flash `misc:background_color` now the theme's base — no more black flash
behind a missing/slow wallpaper (glaring on light themes in the behind a missing/slow wallpaper (glaring on light themes in the

View File

@@ -17,6 +17,26 @@ Template:
--- ---
## 2026-07-05 — bar group rhythm + @muted adoption (iteration #36, item 28c)
- **Task:** item 28 slice (c) — the two queued bar polish items.
- **Did:** waybar.nix generated CSS: margin-left 14px on the three
right-cluster group heads (pulseaudio/powerprofile/battery — media
· toggles · status; hidden heads degrade to uniform spacing);
workspaces buttons, dnd bell, and muted volume moved from
alpha(@text,.5) tints to the semantic @muted role — safe since 28b
floor-gates muted/base ≥ 2.0 (the old comment warning against
@muted documented the pre-28b world; rewritten to state the new
invariant). Whole-swap bars untouched (authored identity).
- **Verified:** V0; V1 rendered CSS has 4 @muted uses + the margin
rule; VISUAL — tokyo-night re-capture: themed backdrop confirmed
(navy base, not black), group gap visible before the volume group,
workspace pill legible. Cross-theme minima are guaranteed by the
gated checker rather than per-theme eyeballs.
- **Pending:** slice-c remainder: rofi hint column, summer-rasi
placeholder dim, icon-weight `[human]`, latte/identity captures.
- **Next suggestion:** rofi keybind-hint column (the biggest
remaining UX win), or the two-line placeholder nit as a quickie.
## 2026-07-05 — summer-day capture review + themed backdrop (iteration #35, item 28c) ## 2026-07-05 — summer-day capture review + themed backdrop (iteration #35, item 28c)
- **Task:** item 28 slice (c) — whole-swap capture review + the first - **Task:** item 28 slice (c) — whole-swap capture review + the first
cheap polish fix. cheap polish fix.

View File

@@ -279,13 +279,14 @@ let
border-radius: ${toString t.ui.rounding}px; border-radius: ${toString t.ui.rounding}px;
} }
/* Dim/secondary shades are alpha(@text) tints, NOT the palette's /* Dim states use the palette's @muted role: since item 28b it is
subtext/muted roles those mean "on-surface" in some palettes floor-guaranteed legible on @base in every theme (muted/base >=
(flexoki-light: subtext==base, gruvbox: mutedbase) and vanish 2.0, gated by tools/check-theme-contrast.py) the palettes that
against the bar (item 27; tools/check-theme-contrast.py). */ once made it vanish (gruvbox mutedbase, item 27) were retuned.
Secondary-but-not-dim stays alpha(@text, 0.85). */
#workspaces button { #workspaces button {
padding: 0 8px; padding: 0 8px;
color: alpha(@text, 0.5); color: @muted;
border-radius: ${toString t.ui.rounding}px; border-radius: ${toString t.ui.rounding}px;
} }
@@ -314,6 +315,13 @@ let
padding: 0 10px; padding: 0 10px;
} }
/* Group rhythm (item 28c): a wider breath before each functional
group of the right cluster media/stats · toggles · status
on top of the uniform module spacing. A group head can self-hide
(e.g. no battery on desktops); grouping then degrades to the
uniform spacing, never breaks. */
#pulseaudio, #custom-powerprofile, #battery { margin-left: 14px; }
/* Caffeine engaged warm tone (the screen is being held awake). */ /* Caffeine engaged warm tone (the screen is being held awake). */
#idle_inhibitor.activated { color: @warn; } #idle_inhibitor.activated { color: @warn; }
@@ -336,9 +344,9 @@ let
/* notifications waiting accent; Do-Not-Disturb muted bell-off */ /* notifications waiting accent; Do-Not-Disturb muted bell-off */
#custom-notification.notification { color: @accent; } #custom-notification.notification { color: @accent; }
#custom-notification.dnd-none, #custom-notification.dnd-none,
#custom-notification.dnd-notification { color: alpha(@text, 0.5); } #custom-notification.dnd-notification { color: @muted; }
#pulseaudio.muted { color: alpha(@text, 0.5); } #pulseaudio.muted { color: @muted; }
#battery.warning { color: @warn; } #battery.warning { color: @warn; }
#battery.critical { color: @bad; } #battery.critical { color: @bad; }
#battery.charging { color: @good; } #battery.charging { color: @good; }