refactor(app): make the sidebar's running status a plain dot

The running dot no longer animates, and the machinery behind it is gone
rather than switched off: the shared refcounted clock, the theme-scheme prop
mapping, and the extra wave color all existed only to drive it.

Four affordances were tried and each failed for its own reason, which is
worth writing down before someone reaches for one of them again. Fading the
dot blends it toward the row's surface rather than toward black, so the
bottom of every cycle was a washed-out blue that read as the success dot one
row up. Dropping chroma holds brightness but turns the low point grey.
Raising chroma has nowhere to go: blue at these lightnesses is already within
11% of the sRGB gamut edge, so the only real headroom is at the hue-250 cusp,
which costs lightness. An expanding ring solved the color problem outright —
motion cannot be confused with another hue — but stayed too subtle at a size
that suits an 8pt dot sitting beside a title.

If the ring is revisited: the project badge shell clips its contents to 12pt,
which is what made the first attempt invisible on exactly the rows most
likely to be on screen. The clip is not what makes the shell read as a
knockout; its fill is.
This commit is contained in:
Mohamed Boudra
2026-08-05 23:51:06 +02:00
parent fb5cfb9fb9
commit 9f84522521
4 changed files with 14 additions and 105 deletions
+5 -6
View File
@@ -165,12 +165,11 @@ const darkStatusColors = {
// for them. Same four hues and the same generation rule as the status colors above, but its
// own band, because a dot is doing a different job than a check icon or a host badge.
//
// A dot is 6-8pt of solid color with no shape to read and no label attached, and the running
// one pulses down to PULSE_MIN_OPACITY for half of every cycle. At the status band's lightness
// the dots read dimmer than the static text and icons beside them on the same row, which is
// backwards — the dot is the row's state. So the band is pushed away from the surface rather
// than toward it (darker in light, lighter in dark) and carries more chroma: 90% of gamut max
// against the status family's 55-60%.
// A dot is 6-8pt of solid color with no shape to read and no label attached. At the status
// band's lightness the dots read dimmer than the static text and icons beside them on the same
// row, which is backwards — the dot is the row's state. So the band is pushed away from the
// surface rather than toward it (darker in light, lighter in dark) and carries more chroma:
// 90% of gamut max against the status family's 55-60%.
//
// All four move together. A dot matching its siblings in lightness and chroma says only which
// state the row is in; one that does not says "this row matters more", which is a claim the