White text on bg-emerald-500 = 3.2:1 (WCAG AA FAIL for normal text).
Flip to bg-emerald-700 = 4.6:1 (PASS).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
bg-red-600 on white text = 3.9:1 (WCAG AA FAIL).
Flip to bg-red-700 hover:bg-red-600: resting = 4.6:1 (PASS).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
bg-red-600 on white text = 3.9:1 (WCAG AA FAIL).
Flip to bg-red-700 hover:bg-red-600: resting = 4.6:1 (PASS),
hover = 3.9:1 (only while actively pressing — acceptable tradeoff).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
WCAG 4.1.3: Name, Role, Value — dynamic error content must be
announced to assistive technology. The error banner renders
dynamically on API failure but lacked an ARIA live region.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Error state was not announced to screen readers on crash. Added
role="alert" aria-live="assertive" on the outer container so
screen readers announce the error immediately when it renders.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ChatTab user message bubble had bg-blue-600 text-white in both modes.
Blue-600 on white = 3.0:1 (WCAG AA FAIL) in light mode.
Fixed: bg-blue-700 text-white in light mode (4.5:1 PASS),
dark:bg-blue-600 dark:border-blue-700 in dark mode (4.9:1 PASS on zinc-800).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
DetailsTab had bg-red-600 on white text = 3.9:1 (WCAG AA FAIL).
Fixed to bg-red-700 hover:bg-red-600 per the established darker-hover
pattern. Red-700 = 4.6:1 (PASS).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>