Blog

The 2025 TestParty Guide to WCAG 2.3.2 – Three Flashes (Level AAA)

TestParty
TestParty
February 10, 2025

Why did the web developer remove the disco ball animation? Because three flashes and you're out—literally.

WCAG 2.3.2 Three Flashes is a Level AAA success criterion that prohibits any content from flashing more than three times per second. This strict requirement protects people with photosensitive epilepsy from potentially life-threatening seizures triggered by rapid visual stimulation.

Table of Contents

  • What WCAG 2.3.2 Requires
  • Why This Matters
  • Quick Implementation Guide
  • Common Mistakes to Avoid
  • How to Test for WCAG 2.3.2
  • How TestParty Helps
  • FAQs

What WCAG 2.3.2 Requires

WCAG 2.3.2 mandates that web pages must not contain anything that flashes more than three times in any one-second period. This is a zero-tolerance requirement—no exceptions based on size, color, or location.

Key points:

  • Absolute threshold: Unlike the Level A criterion (2.3.1), which allows small, low-contrast flashes, 2.3.2 prohibits all flashing above three times per second
  • Applies to everything: Animations, videos, GIFs, canvas elements, CSS transitions, JavaScript effects, and any visual content
  • No size exemption: Even tiny flashing elements must comply
  • Includes user-generated content: If your platform allows users to upload videos or animations, you're responsible for ensuring they don't violate this criterion

What counts as a "flash":

A flash is a pair of opposing changes in relative luminance of 10% or more. In simpler terms, it's a rapid switch between light and dark, or between contrasting colors, that creates a strobing effect.

Why This Matters

Photosensitive epilepsy affects approximately 1 in 4,000 people. Flashing content can trigger seizures, loss of consciousness, and other serious medical emergencies.

Real user impact:

People with photosensitive epilepsy can experience tonic-clonic seizures when exposed to flashing content. These seizures can cause injury from falls, require emergency medical intervention, and create lasting trauma that makes individuals afraid to browse the web.

Legal and compliance context:

While 2.3.2 is a Level AAA criterion and not explicitly required by most regulations, the risk is severe enough that many organizations adopt it as policy. The ADA requires "effective communication" and reasonable accommodations—a seizure-inducing website clearly fails that standard. Section 508 and EN 301 549 reference WCAG Level AA (which includes the related 2.3.1 criterion), but government agencies and enterprises serving European markets often adopt AAA standards for seizure prevention. The European Accessibility Act emphasizes safety, making seizure prevention a practical necessity even when not technically mandated.

Business case:

Beyond the moral imperative, the liability risk is substantial. A single seizure incident could result in lawsuits, negative publicity, and permanent damage to brand reputation. The cost of prevention—simply avoiding rapid flashing—is negligible compared to the potential harm.

Quick Implementation Guide

Preventing flashing content is straightforward: design and develop without rapid visual changes.

Core principles:

  • Audit all motion: Review every animation, transition, video, and dynamic effect for flashing patterns
  • Set animation frame rates carefully: Keep any pulsing, blinking, or strobing effects at three flashes per second or slower (one flash every 333ms minimum)
  • Control third-party content: Vet advertisements, embedded videos, and widgets before deployment
  • Provide static alternatives: For any borderline effects, offer a reduced-motion version

Example of safe animation timing:

/* Safe: pulses once every 500ms (2 times per second) */
.notification-badge {
  animation: pulse 1s ease-in-out infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.6; }
}

/* Unsafe: flashes 4 times per second */
.alert-danger {
  animation: flash 0.25s linear infinite; /* DON'T DO THIS */
}

Key techniques:

  • G19: Ensure no component flashes more than three times per second by measuring frame rates and testing animations before deployment
  • Use prefers-reduced-motion media queries to disable all animations for users who request it
  • Implement content warnings and skip links for any video content that might contain flashing (even if you believe it's compliant)

Common Mistakes to Avoid

Even well-intentioned teams can introduce flashing hazards:

  • Rapid loading spinners: Some CSS spinners or "thinking" animations cycle too quickly. Measure the actual flash rate, not just the perceived smoothness.
  • Video content without review: Embedding YouTube videos, user uploads, or stock footage without checking for flashing scenes (lightning, strobe lights, camera flashes in rapid succession).
  • Parallax and scroll effects: Rapidly changing backgrounds or elements that flicker as users scroll can create unintentional flashing patterns.
  • Error state animations: Shaking, flashing, or rapidly pulsing error messages that exceed three flashes per second.
  • Advertising networks: Third-party ads are a common source of violations. Use ad network controls to block flashing creative, or avoid networks that don't offer seizure-safe guarantees.

Bad vs. good:

  • Bad: A "breaking news" banner that flashes red and white five times per second to grab attention
  • Good: A banner that fades in once, remains visible, and uses a subtle color change every two seconds

How to Test for WCAG 2.3.2

Testing for flashing requires both automated analysis and manual review.

Automated testing:

  • Use the Photosensitive Epilepsy Analysis Tool (PEAT): This free tool from the Trace Research & Development Center analyzes video content and animations for seizure risks. It detects flashing and red flash violations.
  • Browser DevTools: Record animations and use frame-by-frame playback to count flashes. Chrome DevTools' Performance panel can capture frame rates.
  • TestParty's motion analysis: TestParty scans for CSS animations, JavaScript-driven effects, and embedded media with rapid visual changes (see below).

Manual testing checklist:

  • Play all videos at normal speed and watch for flashing scenes (lightning, explosions, strobe effects, camera flashes)
  • Interact with all dynamic UI elements (loading states, notifications, hover effects) and observe their behavior
  • Scroll through pages with parallax or animation-on-scroll effects to check for unintended flashing
  • Test with prefers-reduced-motion disabled to see the full animation behavior

What automated tools catch vs. manual review:

Automated tools excel at detecting CSS animation frame rates, JavaScript setInterval/setTimeout patterns, and analyzing video files with PEAT. However, context-dependent flashing—like a GIF that only flashes when combined with surrounding content, or user-generated videos—requires human judgment.

How TestParty Helps

TestParty provides multi-layered protection against flashing content violations, combining automated detection with workflow integration to prevent seizure risks from reaching production.

What TestParty detects:

TestParty's accessibility scanner analyzes your codebase and rendered pages for flashing hazards:

  • CSS animation inspection: Parses stylesheets to identify animations, transitions, and keyframes with frame rates exceeding three flashes per second
  • JavaScript motion tracking: Detects setInterval, requestAnimationFrame, and other timing functions that create rapid visual changes
  • Video and media analysis: Flags embedded videos, GIFs, and canvas elements for manual review with PEAT or similar tools
  • Third-party script warnings: Identifies ad networks, analytics widgets, and embedded content sources known to serve flashing creative
  • Contrast change detection: Monitors DOM mutations and style changes that create rapid luminance shifts

When TestParty identifies a potential violation, it flags the specific component, line of code, and provides context about why it's a seizure risk.

How TestParty suggests fixes:

For many flashing violations, TestParty generates concrete remediation guidance:

  • Animation timing adjustments: Suggests modified CSS with safe frame rates (e.g., changing animation: flash 0.2s to animation: pulse 0.5s)
  • Reduced-motion implementation: Auto-generates @media (prefers-reduced-motion: reduce) blocks that disable problematic animations for users who request it
  • Video content warnings: Recommends adding skip links and text warnings before video embeds, with code snippets ready to implement
  • Safe alternative patterns: Provides design alternatives (fade-ins, subtle color shifts, static badges) that achieve the same goal without flashing

All AI-generated suggestions are reviewed by TestParty's accessibility specialists or your development team before merging, ensuring fixes are appropriate for your design system and user experience.

Developer workflow integration:

TestParty catches flashing violations early in the development lifecycle:

  • CI/CD gates: Blocks pull requests that introduce CSS animations or JavaScript effects exceeding safe flash thresholds
  • IDE integration: Highlights problematic animation code in real-time as developers write it, with inline explanations and fix suggestions
  • Design system validation: Scans component libraries and style guides to ensure no base components contain flashing patterns that could propagate across your site

This shift-left approach prevents seizure risks from ever reaching staging or production environments.

Ongoing monitoring:

Flashing violations can creep in through third-party updates, new ad creative, or user-generated content. TestParty's continuous monitoring:

  • Regression detection: Runs periodic scans to catch new flashing content introduced by dependency updates or CMS changes
  • Third-party tracking: Monitors external scripts and iframes for changes that introduce flashing elements
  • Audit-ready reporting: Generates compliance reports showing zero flashing violations, with timestamped evidence for legal and procurement reviews

For organizations serving high-risk populations (healthcare, education, government), TestParty provides the documentation and assurance needed to demonstrate proactive seizure prevention.


Some TestParty features described in this article are currently under development. Visit TestParty.ai to learn more about our current capabilities and roadmap, or book a demo at TestParty.ai/book-a-demo to see TestParty in action.

Disclaimer: Some of this article was generated with Large Language Models (LLMs) and Artificial Intelligence (AI). There may be some errors and we advise you to consult with human professionals for detailed questions.


FAQs About WCAG 2.3.2

What is WCAG 2.3.2 in plain language?

WCAG 2.3.2 requires that nothing on your website flashes more than three times per second. This prevents seizures in people with photosensitive epilepsy. It's a stricter version of the Level A criterion (2.3.1), with no exceptions for small or low-contrast flashes.

Is WCAG 2.3.2 required for ADA compliance?

WCAG 2.3.2 is a Level AAA criterion, so it's not explicitly required by the ADA, which typically references Level AA. However, causing a seizure would likely violate the ADA's broader requirements for safe, accessible services. Many organizations adopt 2.3.2 as policy to eliminate this serious risk entirely.

What's the difference between WCAG 2.3.1 and 2.3.2?

WCAG 2.3.1 (Level A) allows small flashes (less than a certain size threshold) or flashes that don't meet the "general flash" or "red flash" definitions. WCAG 2.3.2 (Level AAA) is absolute: no content can flash more than three times per second, regardless of size, color, or contrast. 2.3.2 is the safer, more comprehensive standard.

Can I use animated GIFs if they don't flash rapidly?

Yes. Animated GIFs are fine as long as they don't flash more than three times per second. A smoothly looping animation or a slow fade effect complies with 2.3.2. The key is measuring the actual flash rate—if the GIF alternates between contrasting frames more than three times per second, it's a violation.

How do I test videos for flashing content?

Use the Photosensitive Epilepsy Analysis Tool (PEAT), a free application that analyzes video files for seizure risks. Play the video through PEAT, and it will flag any sequences that violate flash thresholds. For user-generated content, consider requiring uploaders to certify their videos are seizure-safe, or run automated PEAT analysis on all uploads before publishing.

Does `prefers-reduced-motion` satisfy WCAG 2.3.2?

No. prefers-reduced-motion is a best practice for respecting user preferences, but WCAG 2.3.2 requires that flashing content not exist by default. You can't rely on users to enable a setting to avoid seizures—the content must be safe for everyone from the start. Use prefers-reduced-motion as an additional layer of safety, not a substitute for compliance.

Stay informed

Accessibility insights delivered
straight to your inbox.

Contact Us

Automate the software work for accessibility compliance, end-to-end.

Empowering businesses with seamless digital accessibility solutions—simple, inclusive, effective.

Book a Demo