Skip to content

Raise dark-mode contrast to a legible floor - #22

Open
dgruhin-hrizn wants to merge 1 commit into
L1AD:mainfrom
dgruhin-hrizn:pr/dark-contrast
Open

Raise dark-mode contrast to a legible floor#22
dgruhin-hrizn wants to merge 1 commit into
L1AD:mainfrom
dgruhin-hrizn:pr/dark-contrast

Conversation

@dgruhin-hrizn

Copy link
Copy Markdown

What

The dark neutrals fail WCAG contrast against the background — badly enough that on a phone in daylight the completed column is close to unreadable.

Measured against --bg-deep:

Token Ratio
--text-tertiary 2.97:1 fails 3:1
--text-muted 1.89:1 fails
--border 1.22:1 card edges invisible

Completed cards then stack opacity: 0.6 on top, so muted text on a done card lands at 1.78:1 — that reads as missing, not de-emphasised.

Change

Warmed the ramp and lifted every step. #08090a was a blue-black, which sits oddly against the warm orange accent; the new base is a warm dark in the same family.

Token Before After
--text-tertiary 2.97:1 6.01:1
--text-muted 1.89:1 3.90:1
--border 1.22:1 1.54:1
muted on a completed card 1.78:1 3.08:1

Completed-card opacity 0.6 → 0.8 so the dimming no longer compounds with already-dim tokens.

Light mode overrides all of these and is untouched. The diff is 10 lines of :root plus one opacity value.

Screenshots

Regenerated, because the dark one no longer matched what the app renders — it was effectively the "before" picture for this bug.

Both are recaptured together from a synthetic demo dataset (10 sessions, 35 tasks) generated into a throwaway CLAUDE_DIR, so nothing from a real task directory is published. Updating only the dark one would have left the pair showing different data.

They're also now dimension-matched at 1772×1320 — the light one had been 1781×1318.

If you'd rather keep your own screenshots, drop the two .png files from this PR; the CSS change stands alone.

Note on the numbers

These are computed, not eyeballed — standard WCAG relative-luminance, with the completed-card figures taken after compositing the 0.8 alpha against the card background. Happy to adjust the exact hues if they don't match your taste; the point is the floor, not these specific values.

Independent of the other PR

I've opened a second PR for mobile responsiveness. They're independent and touch disjoint regions of the file — I verified both merge cleanly onto main in either order, and that merging both reproduces exactly the tree I tested. Take either, both, or neither.

The dark neutrals fail WCAG against the background, badly enough that on
a phone screen the completed column is close to invisible:

  --text-tertiary   2.97:1
  --text-muted      1.89:1
  --border          1.22:1

Completed cards then stack opacity 0.6 on top, so muted text on a done
card lands at 1.78:1 -- that reads as missing rather than de-emphasised.

Warms the ramp and lifts every step. #08090a was a blue-black, which
sits oddly against the warm orange accent; the new base is a warm dark
in the same family as the accent.

  --text-tertiary   2.97 -> 6.01:1
  --text-muted      1.89 -> 3.90:1
  --border          1.22 -> 1.54:1
  muted on a completed card  1.78 -> 3.08:1

Completed-card opacity 0.6 -> 0.8 so the dimming no longer compounds
with already-dim tokens. Light mode overrides all of these and is
untouched.

Screenshots are regenerated because the dark one no longer matched what
the app renders. Both are recaptured together from the same synthetic
demo dataset -- updating only the dark one would leave the pair showing
different data. They are also now dimension-matched at 1772x1320; the
light one had been 1781x1318.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant