Problem
Infinite animations lack prefers-reduced-motion guards in the main stylesheet. @keyframes statusPulse drives .status-dot-pulse (1.9 s infinite — potentially on many task dots simultaneously) at styles.css:1413-1424; askcode-pulse (:2263); inline keybind-pulse (HelpDialog.tsx:529-535). styles.css has exactly one reduced-motion block, covering only .projects-collapser (:977-981). The arena CSS files all guard properly — the pattern exists; the main file doesn't use it.
Terminals are silent to screen readers. No screenReaderMode anywhere in src/ — xterm.js ships an off-by-default SR mode, and the app's primary content (agent output) is unreadable by assistive tech. It costs rendering performance, so opt-in via Settings is the right shape.
All 124 tooltips are native title= with no custom tooltip component: ~1 s hover delay, never shown on keyboard focus, unstyled. IconButton funnels through a title prop consistently (which at least provides accessible names), so a single upgrade point exists.
Proposed fix
From a full design/UX audit (2026-07-07); adversarially verified. Line numbers as of b342bbd (v1.12.0).
Problem
Infinite animations lack
prefers-reduced-motionguards in the main stylesheet.@keyframes statusPulsedrives.status-dot-pulse(1.9 s infinite — potentially on many task dots simultaneously) atstyles.css:1413-1424;askcode-pulse(:2263); inlinekeybind-pulse(HelpDialog.tsx:529-535).styles.csshas exactly one reduced-motion block, covering only.projects-collapser(:977-981). The arena CSS files all guard properly — the pattern exists; the main file doesn't use it.Terminals are silent to screen readers. No
screenReaderModeanywhere in src/ — xterm.js ships an off-by-default SR mode, and the app's primary content (agent output) is unreadable by assistive tech. It costs rendering performance, so opt-in via Settings is the right shape.All 124 tooltips are native
title=with no custom tooltip component: ~1 s hover delay, never shown on keyboard focus, unstyled.IconButtonfunnels through atitleprop consistently (which at least provides accessible names), so a single upgrade point exists.Proposed fix
@media (prefers-reduced-motion: reduce)block disabling the pulse/appear/remove keyframe animations instyles.css.screenReaderMode: trueinto terminal creation.:focus-visible;aria-labelfallback prop onIconButton.From a full design/UX audit (2026-07-07); adversarially verified. Line numbers as of b342bbd (v1.12.0).