Two independent contrast bugs, both from a token being used somewhere
it was never validated as a text color:
- Links/inline code used --accent as their text color against dark
card surfaces, measuring 2.8-3.6:1 (below the 4.5:1 AA threshold for
normal text) depending on the surface. Worst case: the sender's own
DM chat bubble uses --accent as its *background*, so a link inside
your own message was the exact same color as the bubble - 1.0:1,
functionally invisible. Added --link/--link-hover (same hue/
saturation as --accent, lightened until they clear 4.5:1 against the
darkest realistic surface) and repointed the sitewide `a`/`a:hover`
default, `.rendered-content a`/`code`, `.docs-chat-bubble a`, and
`.ds-chat-citations a`. The DM chat bubble additionally needed
bubble-scoped overrides (link, AI-adjusted note, attachment-pending
placeholder, failed-send outline/retry-hint) since its background
*is* --accent, which --link alone doesn't fix.
- `background: var(--warning); color: var(--white)` (chat's connection
banner, a container badge, a service-status badge, and docs' PUT/4xx
badges) measured ~1.7:1 - yellow needs dark text. Added --on-warning
mirroring the existing --on-accent pattern and repointed just the
warning-backed variants, leaving sibling info/success/danger badges
untouched (they have the same underlying issue but are out of scope
for this pass).
--accent itself is untouched, so every button/badge/nav element using
it as a solid fill is unchanged. Verified with computed WCAG contrast
ratios and Playwright screenshots against a live render of the real
CSS, plus the production homepage to confirm no regression to brand
colors.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vnp7vzE4hvsytMo5YjszJm