This is a real report, not a mock-up.

It was produced on 29 August 2026 by the same renderer that runs when you buy a Motion Report, fed by the same live scan engine. Every candidate, every WCAG citation and every fix below comes out of an actual scan.

The page it scans is our own /before-after demo, which deliberately ships motion the checker should flag — six infinite animations with no pause path (WCAG 2.2.2, Level A) and several animation layers sitting outside the prefers-reduced-motion guard (WCAG 2.3.3) — so the report has something to show. A clean page produces a much shorter report; the scoring, the sections and the disclosures are identical.

Get this report for your page — $29 Fourteen‑day refund, no questions asked.

Run the free check on your own page → See all plans →

MotionSpec
motionspec.dev — motion accessibility, static scan of 29 August 2026

Motion Accessibility Report

https://motionspec.dev/before-after
Report IDexample-2026-08-29
Date29 August 2026
Scan typeStatic scan (scoring v2)
Prepared byMotionSpec — Froeba Sales Solutions UG
26/100
High motion-accessibility risk
▲ study median 35
Engineering report — not legal compliance evidence. Motion/animation scope only (WCAG 2.2.2, 2.3.3, prefers-reduced-motion). Not an EN 301 549 audit. Full terms on the last page.
MotionSpecexample-2026-08-29 · motionspec.dev · 29 August 2026

Executive summary

13 distinct motion-a11y root cause(s), 14 occurrence(s), in the static scan.

Score: 26/100 — High motion-accessibility risk

This score is higher than 82 of the 196 pages in the study, and level with 2 of them.

Benchmark population: the July 2026 MotionSpec “State of Motion” study — 196 production pages generated by five AI app-builder platforms, scanned with this same engine and scoring (v2). It benchmarks against AI-generated UIs, not the general web. Scores in that population cluster on a few values, so this report gives raw counts only: any single summary figure would suggest a precision these clustered scores do not carry.

How this page compares with the study population

MeasureThis page196-page study (AI-generated UIs, July 2026)
Score (v2)26/100median 35/100
Motion without a reduced-motion guardYespresent on 190 of 196 pages
Infinite animation without a pause path (WCAG 2.2.2, Level A)Yespresent on 130 of 196 pages
Statically clean (no candidates)No6 of 196 pages

Top candidates

SeverityCandidate (root cause)OccurrencesScore impact
High Infinite animation without pause path (no animation-play-state / data-* toggle)
WCAG 2.2.2 Pause, Stop, Hide — Level A
−20
High Infinite animation without pause path (no animation-play-state / data-* toggle)
WCAG 2.2.2 Pause, Stop, Hide — Level A
−20
High Infinite animation without pause path (no animation-play-state / data-* toggle)
WCAG 2.2.2 Pause, Stop, Hide — Level A
−20

The highest-priority candidates are the infinite animations without a pause path — WCAG 2.2.2 (Pause, Stop, Hide) is a Level-A criterion, the strictest conformance tier, and continuous movement is a real barrier for people with attention and vestibular conditions. The unguarded-motion candidates are animation that, as scanned, still runs when a visitor’s OS-level “reduce motion” setting is on; a single prefers-reduced-motion media query per animation layer usually clears this class in one change. The matching criterion, WCAG 2.3.3, is Level AAA — so this is a robustness gap, not a Level-A conformance failure. The suggested fixes in this report are CSS-only and incremental — none require redesigning the page. After deploying, re-run the free checker to see the new scan result.

MotionSpec Motion Accessibility Reportexample-2026-08-29
MotionSpecexample-2026-08-29 · motionspec.dev · 29 August 2026

Candidates in detail

Candidates are grouped by root cause: one CSS root cause (a @keyframes animation or a transition layer) applied to N selectors is one candidate with N occurrences — not N candidates. Groups are ordered by their score impact. Candidates describe the page as scanned: they are engineering observations to check, not confirmed defects and not a judgement of the team that built it.

1. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:logosway
Where: .wavemark
Suggested fix
Make it pausable: html[data-ms-paused] .wavemark { animation-play-state: paused !important; } + pause button.
2. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:kenburns
Where: .bgfx
Suggested fix
Make it pausable: html[data-ms-paused] .bgfx { animation-play-state: paused !important; } + pause button.
3. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:pulse
Where: .cta
Suggested fix
Make it pausable: html[data-ms-paused] .cta { animation-play-state: paused !important; } + pause button.
4. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:spin
Where: .spinner
Suggested fix
Make it pausable: html[data-ms-paused] .spinner { animation-play-state: paused !important; } + pause button.
5. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:scrollx
Where: .track
Suggested fix
Make it pausable: html[data-ms-paused] .track { animation-play-state: paused !important; } + pause button.
6. Infinite animation without pause path (no animation-play-state / data-* toggle)
High
WCAG 2.2.2 Pause, Stop, Hide — Level A  ·  1 occurrence  ·  score impact −20  ·  root cause: keyframes:bounce
Where: .cue span
Suggested fix
Make it pausable: html[data-ms-paused] .cue span { animation-play-state: paused !important; } + pause button.
7. Transitions without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  2 occurrences  ·  score impact −11.2  ·  root cause: transition:(unguarded)
Where: .slider · .slider::before
Suggested fix
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } } — or guard the transition utilities layer.
8. Motion without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  1 occurrence  ·  score impact −8  ·  root cause: keyframes:kenburns
Where: .bgfx
Suggested fix
@media (prefers-reduced-motion: reduce) { .bgfx { animation: none; transition: none; } }
9. Motion without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  1 occurrence  ·  score impact −8  ·  root cause: keyframes:pulse
Where: .cta
Suggested fix
@media (prefers-reduced-motion: reduce) { .cta { animation: none; transition: none; } }
10. Motion without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  1 occurrence  ·  score impact −8  ·  root cause: keyframes:spin
Where: .spinner
Suggested fix
@media (prefers-reduced-motion: reduce) { .spinner { animation: none; transition: none; } }
11. Motion without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  1 occurrence  ·  score impact −8  ·  root cause: keyframes:scrollx
Where: .track
Suggested fix
@media (prefers-reduced-motion: reduce) { .track { animation: none; transition: none; } }
12. Motion without prefers-reduced-motion guard
Medium
WCAG 2.3.3 (Level AAA) / prefers-reduced-motion best practice  ·  1 occurrence  ·  score impact −8  ·  root cause: keyframes:bounce
Where: .cue span
Suggested fix
@media (prefers-reduced-motion: reduce) { .cue span { animation: none; transition: none; } }
13. Animated non-transform/opacity propert(ies): background
Low
Best practice — compositor-safe animation (performance + vestibular safety)  ·  1 occurrence  ·  score impact −4  ·  root cause: props:background
Where: .slider
Suggested fix
Animate only transform/opacity (compositor-safe), e.g. transform instead of background.
MotionSpec Motion Accessibility Reportexample-2026-08-29
MotionSpecexample-2026-08-29 · motionspec.dev · 29 August 2026

Scan coverage & disclosures

No coverage limitations were flagged for this scan beyond the general static-scan scope described under Methodology.

Methodology

What we test

Scoring (v2)

scoring v2: 100 minus, per root-cause group (same kind + same keyframes/transition-props/selector-family), severity-weight x min(3, 1 + 0.4*log2(occurrences)); per-category caps (infinite/marquee 40, autoplay 25, unguarded 30, risky-props 15) so one issue class cannot zero the score alone; floor 0.

What we do not test

Reference population

Comparison figures come from the MotionSpec State of Motion in AI-Generated UIs study (Motion Accessibility Index #1, July 2026): 196 publicly accessible production pages generated by five AI app-builder platforms (anonymized cohorts A–E), scanned with this same engine and scoring. Dataset: CC BY 4.0, motionspec.dev/blog/state-of-motion-ai-generated-uis.

MotionSpec Motion Accessibility Reportexample-2026-08-29
MotionSpecexample-2026-08-29 · motionspec.dev · 29 August 2026

Scope, terms & imprint

Scope disclaimer
Engineering report — not legal compliance evidence. Motion/animation scope only (WCAG 2.2.2, 2.3.3, prefers-reduced-motion). Not an EN 301 549 audit.

This is an automated, point-in-time engineering assessment based on publicly reachable pages. It is not a legal compliance determination. Prepared for the buyer's internal use; please do not redistribute or use it to make public claims about third-party sites.

Refunds

If this report is not useful to you, email hello@motionspec.dev within 14 days, quoting the report number above, and we refund the purchase in full — no questions asked.

Re-checks

The scan reflects the page as served on 29 August 2026. After you ship fixes, you can re-check the page free of charge at any time: motionspec.dev/motion-check.

Questions

Write to hello@motionspec.dev and quote the report number above.


Imprint / Impressum: Froeba Sales Solutions UG (haftungsbeschränkt) — MotionSpec, hello@motionspec.dev.
Report example-2026-08-29, generated 29 August 2026 from a static scan of https://motionspec.dev/before-after. MotionSpec is an EU trademark application of Froeba Sales Solutions UG.
WCAG is a trademark of the W3C. This document cites WCAG success criteria for engineering orientation only.

MotionSpec Motion Accessibility Reportexample-2026-08-29 · end of report