fix(gui): close the hover-state AA gap left by the contrast audit (#235) - #244
Merged
Conversation
#235 fixed contrast on resting surfaces and is a real improvement, but its audit only walked resting backgrounds. `text-muted` (#5b6579) clears AA on paper-base at 5.57:1 — and then `.popover-item:hover` swaps the ground to paper-hover (#d8cfb0), where it drops to 3.76:1. paper-pressed (#bdb088) takes it to 2.72:1. So `.item-sub` fails AA precisely while the user is hovering to read it, which is the one moment it has to be legible. (#235 still improved that spot a lot — it was 1.98:1 before.) Adds --color-text-muted-strong (#3a4254) and applies it to `.item-sub` on hover and active: 6.45:1 and 4.66:1, both clear AA. It's the same hex the prefers-contrast tier already uses for muted, so no new color enters the palette. Also corrects three annotations so the next audit can trust them: - tokens.css: attached-fg is 5.02:1, not 4.94:1; human-fg is 5.17:1, not 5.22:1. - tokens.json `_meta.overrides` read "repoPrimaryFg #a43c32 (was #e65a4f, 5.17:1 on -primaryBg)", which parses as though the OLD value scored 5.17:1. It scored 2.85:1; 5.17:1 is the new one. That note exists specifically to stop someone re-deriving from the handoff and reverting the a11y fix — as written, it invited exactly that. Now spelled `NEW (ratio) replaces OLD (ratio)`, with both ratios and a PASS/FAIL on each. Every ratio recomputed with the WCAG 2.1 relative-luminance formula. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
This was referenced Jul 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #235. That PR is a real improvement and its resting-surface numbers all check out — I recomputed every pair with the WCAG 2.1 relative-luminance formula and they hold (in two cases it understated its own gain). But its audit only walked resting backgrounds.
The gap
text-muted(#5b6579) clears AA onpaper-baseat 5.57:1. Then.popover-item:hoverswaps the ground out from under it:.item-subsits onpaper-base#fbf9f4(resting)paper-hover#d8cfb0(hovering)paper-pressed#bdb088(pressed)So it fails AA precisely while the user is hovering to read it — the one moment it has to be legible.
To be fair to #235: it improved that spot enormously. The pre-audit value scored 1.98:1 there. This just finishes the job.
The fix
Adds
--color-text-muted-strong(#3a4254), applied to.item-subon:hoverand:active:paper-hoverpaper-pressedIt is the same hex the
prefers-contrast: moretier already uses for muted, so no new color enters the palette — and scoping it to the interaction state keeps the three-tier text hierarchy intact at rest, rather than flattening.item-subtotext-primary.Annotation corrections
Three comments were off. They pass either way, but an audit trail nobody can trust is worse than none:
tokens.css:attached-fgis 5.02:1, not 4.94:1.human-fgis 5.17:1, not 5.22:1.tokens.json_meta.overridesread:which parses as the old value scored 5.17:1. It scored 2.85:1 — 5.17:1 is the new one. This note exists specifically to stop someone re-deriving tokens from the handoff and silently reverting the a11y fix; as written it invited exactly that. Now spelled
NEW (ratio) replaces OLD (ratio)with a PASS/FAIL on each.Verified
vite build: cleanprettier --check: clean🤖 Generated with Claude Code