Files
James Rich 9e887ed92a fix(a11y): keep bubble metadata green legible on colored bubbles
Review feedback (design#113): the green SNR/RSSI text and the signed
shield sit on a per-node-tinted message bubble, where the shared
"Status Good" green has poor contrast (worst in light mode) — an
accessibility/readability problem. The black message text is fine
because it derives from the bubble's content color; the green metadata
did not.

Fix is scoped to the bubble — the shared StatusGreen token is used in
~15 components, almost all on the neutral theme surface where it's fine,
so changing the token globally would be the wrong lever. Instead:

- Add ensureContrastOn(background): nudges a color toward black/white
  just enough to meet WCAG AA against a given background, preserving hue
  (picks the higher-contrast direction, so a mid-tone bubble darkens the
  green rather than washing it to white). Unit-tested.
- Snr/Rssi/SnrAndRssi gain an optional `background` param (default null =
  unchanged everywhere else — no blast radius).
- MessageItem passes the composited bubble background so SNR, RSSI, and
  the signed shield all stay legible; shield unified onto the same
  contrast-adjusted StatusGreen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 14:37:35 -05:00
..