Repository navigation
fix(web): stop status animations when Reduce Motion is enabled - #18814
Conversation
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused accessibility fix that disables only status-indicator animations when reduced motion is enabled, while preserving all status content and normal-motion behavior. The five-file change is small, self-contained, and introduces no API, schema, deployment, or sensitive-code impact. You can add or adjust custom eligibility rules. Learn more. |
# Conflicts: # apps/web/src/components/ServerUpdateAction.tsx
Dismissing prior approval to re-evaluate b7e8f9d
|
Taking over this one. I’ll reduce the tests to the useful coverage, update the implementation against current main, and verify it before publishing the changes. |
|
Post-merge visual verification on main (b874ff6): PASS, with Reduce Motion on, the Working status dot is static on main and still pulses on the parent. Setup: a live Working thread shown in the legacy sidebar, viewed in headless Chromium with
Only the legacy-sidebar thread dot was exercised. The connection halo, chat header waiting dot, and preview recording dot were not driven. |

Problem
With the system's Reduce Motion setting on, some status indicators still animate forever: the working and waiting dots in thread rows, the project status dot in the legacy sidebar, the reconnecting halo on the connection dot, the chat header's waiting dot, and the preview tab's error dot. Other indicators in
ThreadStatusIndicators.tsxalready usemotion-safe:animate-status-pulse, so the setting is only honored in some places.Change
Added
motion-safe:to the 6 remaininganimate-status-pulse/animate-status-pingcall sites, matching the existing guarded indicators. With Reduce Motion on, the dots stay visible but static. Nothing changes for other users.Scope and approval
A small, focused accessibility fix (6 class names in 5 files), so it uses the no-prior-issue exception.
Verification
index.csswith the installed Tailwind and rendered every status indicator's classes in the T3 browser panel, forcing the reduced-motion media branch through CSSOM (the panel cannot toggle the OS setting). Onmain, 7 of 9 indicators keep running animations; with this change, 0 of 9. With no preference, all 9 still animate at2s infiniteon both revisions (assertions, call-site audit).vp test runforThreadStatusIndicators.test.tsandServerUpdateAction.test.tsx: 81 passed.vp linton touched files andapps/webtypecheck: clean.main: fix: update all no longer runs agents twice or loses background work #19291 removed the server update dot's pulse, so this PR no longer touchesServerUpdateAction.tsx. No other unguardedanimate-status-*use is left onmain(AgentBrowserCursoralready hasmotion-reduce:animate-none).Found by a GPT-6.1 Sol (high) audit and implemented by GPT-6.1 Sol (medium) in T3 Code. Reviewed by Claude Opus 5.5. Coordinated by Claude Opus 5.5 in Claude Code via T3 Code. Agent-authored, sponsored by Alex Southwell.
🤖 Generated with Claude Code