SendingSpinClass and CallAvatarAnimation ignore prefers-reduced-motion #84

Closed
opened 2026-09-12 01:51:33 -04:00 by jared · 0 comments
Owner

Severity: low · Type: a11y · Confidence: high

Location: src/app/styles/Animations.css.ts:36-56 (WobbleAnimation, GlowAnimation, CallAvatarAnimation, SendingSpinClass) vs. Animations.css.ts:58-67 (MsgAppearClass, correctly gated with '@media': {'(prefers-reduced-motion: no-preference)': {...}})

Problem

The message-send scale-in animation (MsgAppearClass) explicitly respects reduced motion, but the sibling "message sending" spinner (SendingSpinClass, an infinite 900ms rotation shown on every outgoing message via Message.tsx:146) and the incoming/active-call avatar wobble+glow (CallAvatarAnimation, used in CallEmbedProvider.tsx:168,341) are unconditional animation-iteration-count: infinite rules with no prefers-reduced-motion guard, inconsistent with the rest of the Lotus animation surface (chat backgrounds, seasonal particles, toasts, avatar decorations, mention pulse all check it).

How to trigger

Enable OS/browser "reduce motion", send a message (brief spin before it's acked) or receive an incoming call (avatar wobbles/glows continuously) — both animate despite the preference.

Suggested fix

Wrap SendingSpinClass and CallAvatarAnimation (and WobbleAnimation/GlowAnimation if used elsewhere) in the same (prefers-reduced-motion: no-preference) media guard used by MsgAppearClass, falling back to a static/opacity-only indicator.


Filed from the September 2026 client audit (branch lotus @ 4bea4895).

**Severity:** low · **Type:** a11y · **Confidence:** high **Location:** `src/app/styles/Animations.css.ts:36-56` (`WobbleAnimation`, `GlowAnimation`, `CallAvatarAnimation`, `SendingSpinClass`) vs. `Animations.css.ts:58-67` (`MsgAppearClass`, correctly gated with `'@media': {'(prefers-reduced-motion: no-preference)': {...}}`) ### Problem The message-send scale-in animation (`MsgAppearClass`) explicitly respects reduced motion, but the sibling "message sending" spinner (`SendingSpinClass`, an infinite 900ms rotation shown on every outgoing message via `Message.tsx:146`) and the incoming/active-call avatar wobble+glow (`CallAvatarAnimation`, used in `CallEmbedProvider.tsx:168,341`) are unconditional `animation-iteration-count: infinite` rules with no `prefers-reduced-motion` guard, inconsistent with the rest of the Lotus animation surface (chat backgrounds, seasonal particles, toasts, avatar decorations, mention pulse all check it). ### How to trigger Enable OS/browser "reduce motion", send a message (brief spin before it's acked) or receive an incoming call (avatar wobbles/glows continuously) — both animate despite the preference. ### Suggested fix Wrap `SendingSpinClass` and `CallAvatarAnimation` (and `WobbleAnimation`/`GlowAnimation` if used elsewhere) in the same `(prefers-reduced-motion: no-preference)` media guard used by `MsgAppearClass`, falling back to a static/opacity-only indicator. --- _Filed from the September 2026 client audit (branch `lotus` @ 4bea4895)._
jared added this to the Audit 2026-09 · Medium & Low milestone 2026-09-12 01:51:33 -04:00
jared added the priority: lowa11yarea: appearance labels 2026-09-12 01:51:33 -04:00
jared self-assigned this 2026-09-12 01:51:33 -04:00
jared closed this issue 2026-09-12 20:29:06 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#84