[object Object]

← back to Wallco Ai

wallco.ai · WCAG 2.3.3 prefers-reduced-motion shotgun — neutralizes all transitions + keyframe animations site-wide for OS-level reduce-motion users; hero crossfade (1.2s) / card-room overlay (360ms) / chat thinking-dot bounce / skip-link slide all collapse to 1ms; verified via playwright reducedMotion:reduce vs no-preference — design-card 0.18s→1e-05s, card-room 0.36s→1e-05s, skip-link 0.16s→0s

450155ec68a45a1ff829f9e157c71bcbf8a94b15 · 2026-05-12 07:19:54 -0700 · SteveStudio2

Files touched

Diff

commit 450155ec68a45a1ff829f9e157c71bcbf8a94b15
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Tue May 12 07:19:54 2026 -0700

    wallco.ai · WCAG 2.3.3 prefers-reduced-motion shotgun — neutralizes all transitions + keyframe animations site-wide for OS-level reduce-motion users; hero crossfade (1.2s) / card-room overlay (360ms) / chat thinking-dot bounce / skip-link slide all collapse to 1ms; verified via playwright reducedMotion:reduce vs no-preference — design-card 0.18s→1e-05s, card-room 0.36s→1e-05s, skip-link 0.16s→0s
---
 public/css/site.css | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/public/css/site.css b/public/css/site.css
index c0d53e9..c22c02d 100644
--- a/public/css/site.css
+++ b/public/css/site.css
@@ -321,8 +321,25 @@ main { padding-top: 73px; }
 }
 .design-card.has-room:hover .card-room-badge,
 .design-card.has-room:focus-visible .card-room-badge { opacity: 0; }
+/* ── A11Y: prefers-reduced-motion sweep (WCAG 2.3.3, vestibular)
+   Shotgun-neutralizes every transition + keyframe animation across the site
+   for users who've set their OS to reduce motion (iOS Settings → Accessibility
+   → Motion, macOS System Settings → Accessibility → Display → Reduce Motion,
+   GNOME, etc.). Long crossfades (hero rotation 1.2s, room overlay 360ms,
+   chat thinking-dot bounce) are the highest-impact triggers — this collapses
+   them to 1ms instantly. Per-component opt-OUT via `transition-duration:
+   inherit; @media (prefers-reduced-motion: no-preference) { ... }` if any
+   future motion is genuinely essential. */
 @media (prefers-reduced-motion: reduce) {
+  *, *::before, *::after {
+    animation-duration: 0.01ms !important;
+    animation-iteration-count: 1 !important;
+    transition-duration: 0.01ms !important;
+    scroll-behavior: auto !important;
+  }
   .card-room { transition: none; }
+  /* Skip-link slide-in too — it should pop into view, not glide. */
+  .skip-link { transition: none !important; }
 }
 
 .card-meta {

← 2acf00a wallco.ai · WCAG 2.4.1 skip-to-main link in htmlHeader() — f  ·  back to Wallco Ai  ·  security — prompt-injection hardening on Ollama chat path. A 324afdd →