SPELWork dashboards: colour-blind check of warning states and step colours (spec §1) #173

Closed
opened 2026-09-28 20:29:23 +00:00 by forge-ci · 3 comments
Member

§1 of spelwork-dashboard-design-part1.md lists this as an open item: nothing has been checked for colour-blind-safe combinations. Contrast against the background passes, but that doesn't show the states can be told apart from each other.

Acceptance criteria

  • Simulate deuteranopia, protanopia and tritanopia for the five warning states (fine / slow / old / broken / very serious) and the six step colours, in light and dark.
  • Flag any pair that collapses, and propose a fix.
  • Also recheck the two closest dark-accent pairs the spec calls out: sanctum/trust (ΔE 27.7) and trust/pilgrimage (ΔE 29.3).
  • Write the results into the spec.

Do this after the step colours are proposed (#172).

§1 of [`spelwork-dashboard-design-part1.md`](https://git.toilville.dev/Toilville/toilville-design/src/branch/main/Brand/specs/spelwork/spelwork-dashboard-design-part1.md) lists this as an open item: nothing has been checked for colour-blind-safe **combinations**. Contrast against the background passes, but that doesn't show the states can be told apart from each other. ## Acceptance criteria - [ ] Simulate deuteranopia, protanopia and tritanopia for the five warning states (fine / slow / old / broken / very serious) and the six step colours, in light and dark. - [ ] Flag any pair that collapses, and propose a fix. - [ ] Also recheck the two closest dark-accent pairs the spec calls out: sanctum/trust (ΔE 27.7) and trust/pilgrimage (ΔE 29.3). - [ ] Write the results into the spec. Do this after the step colours are proposed (#172).
Member

Light severity colours: proposed revision, needs a decision

The light values of three existing severity tokens need to change. #173 found that light slow and broken collapse under deuteranopia (simulated ΔE00 2.0, on analysis thresholds for that review, not a standard). Fine, slow and broken have almost the same lightness (L* 49.6, 49.9, 47.9), so once red-green vision removes the hue difference they merge. This is the light-theme lightness-order issue recorded in #174.

Proposal. The severity semantics, hues and token structure stay the same. Only the light value of three tokens changes:

State Token Current Proposed
slow color.accent.warning #CD4D0B #B43A01
broken color.accent.error #DC2626 #AA0110
very serious color.accent.critical #960157 #84014C

Fine (#12883E) and stale (#706052) are unchanged, as are all dark values. No token is added. Very serious moves slightly from the value approved in #174 (ΔE00 3.6) to even out the ladder.

Result

  • The ladder steps down about 7.1 to 7.2 L* per step (fine 49.6, slow 42.4, broken 35.2, very serious 28.0). Today the order is reversed at fine to slow.
  • No collapse in any tested severity pair, stale included. The worst simulated pair improves from ΔE00 2.0 to 6.3. Slow/broken (6.3) and fine/slow (9.4) stay weak, because orange and red are close in hue.
  • White text still passes AA on every fill (lowest 4.55:1). Marks keep at least 3:1 on all six light surfaces (lowest 3.60:1).
  • Colour is still not the only state cue. Each state keeps its glyph, rule weight and word (Part 1 §3, §5).

Tradeoff. The revised slow, broken and very serious are darker and heavier, especially in charts. Mean lightness of the four colours falls from L* 44.9 to 38.8. Slow loses 7.5 L*, broken 12.7 and very serious 4.2. The added lightness separation is what provides the accessibility gain. Chroma is already close to the sRGB limit at these lightness values, so brightening them would give the separation back.

Scope. These are baseline light values. They reach toilville and wp-themes. Rituals has its own palette and SPELWork carries no accent tokens. Part 1 §3 and §1 would be updated with the change.

Alternatives tested and not preferred: a version with a darker very serious (thicker ladder, changes the approved value more), and a version that keeps #960157 (thinner ladder, more weak pairs).

**Light severity colours: proposed revision, needs a decision** The light values of three existing severity tokens need to change. #173 found that light **slow** and **broken** collapse under deuteranopia (simulated ΔE00 2.0, on analysis thresholds for that review, not a standard). Fine, slow and broken have almost the same lightness (L\* 49.6, 49.9, 47.9), so once red-green vision removes the hue difference they merge. This is the light-theme lightness-order issue recorded in #174. **Proposal.** The severity semantics, hues and token structure stay the same. Only the light value of three tokens changes: | State | Token | Current | Proposed | |---|---|---|---| | slow | `color.accent.warning` | `#CD4D0B` | `#B43A01` | | broken | `color.accent.error` | `#DC2626` | `#AA0110` | | very serious | `color.accent.critical` | `#960157` | `#84014C` | Fine (`#12883E`) and stale (`#706052`) are unchanged, as are all dark values. No token is added. Very serious moves slightly from the value approved in #174 (ΔE00 3.6) to even out the ladder. **Result** - The ladder steps down about 7.1 to 7.2 L\* per step (fine 49.6, slow 42.4, broken 35.2, very serious 28.0). Today the order is reversed at fine to slow. - No collapse in any tested severity pair, stale included. The worst simulated pair improves from ΔE00 2.0 to 6.3. Slow/broken (6.3) and fine/slow (9.4) stay weak, because orange and red are close in hue. - White text still passes AA on every fill (lowest 4.55:1). Marks keep at least 3:1 on all six light surfaces (lowest 3.60:1). - Colour is still not the only state cue. Each state keeps its glyph, rule weight and word (Part 1 §3, §5). **Tradeoff.** The revised slow, broken and very serious are darker and heavier, especially in charts. Mean lightness of the four colours falls from L\* 44.9 to 38.8. Slow loses 7.5 L\*, broken 12.7 and very serious 4.2. The added lightness separation is what provides the accessibility gain. Chroma is already close to the sRGB limit at these lightness values, so brightening them would give the separation back. **Scope.** These are baseline light values. They reach `toilville` and `wp-themes`. Rituals has its own palette and SPELWork carries no accent tokens. Part 1 §3 and §1 would be updated with the change. Alternatives tested and not preferred: a version with a darker very serious (thicker ladder, changes the approved value more), and a version that keeps `#960157` (thinner ladder, more weak pairs).
Owner

@ville Sounds good lets do it

@ville Sounds good lets do it
Owner

Closing — both acceptance criteria are met.

  • Simulate the three dichromacies across five warning states and six step colours, light and dark. Done and recorded in Part 1 §1 under "Colour-vision check (#173)" by #228, which replaced the standing "none of this has been checked yet" item.
  • Flag any pair that collapses. One did: slow and broken under simulated deuteranopia at ΔE00 2.0, because fine, slow and broken sat at almost the same lightness. #230 fixed it by revising the three light values — accent.warning #CD4D0B→#B43A01, accent.error #DC2626→#AA0110, accent.critical #960157→#84014C — leaving dark, fine and stale untouched.

§3's "Light theme lightness order" is now marked resolved in #173. Finding a real collapse and fixing it is the outcome this issue wanted; a clean pass would have been the less useful result.

**Closing — both acceptance criteria are met.** - **Simulate the three dichromacies across five warning states and six step colours, light and dark.** Done and recorded in Part 1 §1 under "Colour-vision check (#173)" by #228, which replaced the standing "none of this has been checked yet" item. - **Flag any pair that collapses.** One did: slow and broken under simulated deuteranopia at ΔE00 2.0, because fine, slow and broken sat at almost the same lightness. #230 fixed it by revising the three light values — `accent.warning` `#CD4D0B`→`#B43A01`, `accent.error` `#DC2626`→`#AA0110`, `accent.critical` `#960157`→`#84014C` — leaving dark, fine and stale untouched. §3's "Light theme lightness order" is now marked resolved in #173. Finding a real collapse and fixing it is the outcome this issue wanted; a clean pass would have been the less useful result.
Sign in to join this conversation.
No description provided.