WCAG 2.3.2: Three Flashes
The Level A flashing rule comes with an engineering exemption: flashes that are small, dim, or low-contrast enough are permitted. This criterion removes it. At Level AAA, nothing on the page may flash more than three times in any one-second period — no size carve-out, no brightness math, no red-flash calculus. It is the simplest criterion in WCAG to state, and one of the most important to honor: this one is about seizures.
The success criterion, in full
Web pages do not contain anything that flashes more than three times in any one second period.
Compare 2.3.1 Three Flashes or Below Threshold (Level A), which adds “…or the flash is below the general flash and red flash thresholds.” 2.3.2 is that sentence with the exemption amputated. “Anything” means anything: a 12-pixel icon, a subtle shimmer, a video thumbnail.
Why flashing is dangerous
For people with photosensitive epilepsy, flashing light in roughly the 3–60 flashes-per-second range can trigger a seizure — with peak sensitivity around 15 to 20 flashes per second. Two facts make this unlike almost every other accessibility barrier:
- The harm is physical and immediate. A seizure can cause injury, and the reaction can begin faster than the person can look away or close the tab. 'The user can avoid it' is not a mitigation.
- Users often don't know they are at risk. Many people experience their first photosensitive seizure from screen content, with no prior diagnosis. The famous 1997 Pokémon broadcast incident sent hundreds of viewers in Japan to hospital.
Flashing also harms far more people than those with epilepsy: it can trigger migraines, dizziness, and nausea in people with vestibular disorders or general photosensitivity. Keeping every flash at three per second or slower protects all of them at once.
2.3.2 vs. 2.3.1: what the missing threshold means
2.3.1 permits fast flashing when it stays below the general flash and red flash thresholds — a formula involving the flashing area (relative to a 10-degree field of vision), the luminance change, and whether the flash involves saturated red. That exemption is grounded in broadcast-safety research, but it bakes in assumptions: a typical screen size, a typical viewing distance, a typical user.
2.3.2 exists because those assumptions fail at the margins:
- Some people are simply more sensitive than the thresholds model — the thresholds protect most photosensitive users, not all of them.
- Zoom, screen magnification, projection, and phones held close all enlarge the flashing area's share of the visual field beyond what the exemption assumed.
- Multiple 'safely small' flashing elements near each other can combine into an unsafe stimulus.
The practical consequence for teams: at AAA there is nothing to calculate. If it flashes more than three times in any one second, it fails — so design it out entirely. Related but distinct: 2.2.2 Pause, Stop, Hide (A) covers slower blinking and moving content, and 2.3.3 Animation from Interactions (AAA) covers non-flashing motion effects.
What counts as a flash
A flash is a pair of opposing changes in relative luminance: bright, then dark (or dark, then bright) counts as one flash. Three flashes in a second means three of those round trips — i.e. luminance alternating faster than 3 Hz. Typical sources on the web:
Video footage
Paparazzi camera bursts, lightning, strobe lighting at concerts, gunfire and explosion effects, fast scene cuts between bright and dark shots.
Animated GIFs and memes
Strobing text, rapid color-cycling backgrounds, 'glitch' effects. User-generated content is a major vector.
CSS/JS animations
Attention-grabbing blink effects, rapidly pulsing badges or alerts, hover effects that oscillate quickly, loading indicators that alternate high-contrast frames.
Ads and embeds
Third-party creatives with strobe effects — your page's conformance includes them, so ad policies matter.
Not flashing in this sense: a text cursor blinking about once a second, a gentle opacity pulse at 1 Hz, or a smooth continuous animation with no abrupt luminance alternation. Those may still need pause controls under 2.2.2, but they are not seizure triggers.
Pass and fail examples
✓ Passes 2.3.2
- An alert badge that pulses gently twice per second or slower, with a pause control per 2.2.2.
- News footage screened with PEAT; a sequence with camera flashes was re-edited to slow the effective flash rate below 3 Hz.
- A game whose “damage flash” is a single luminance dip, not a strobe.
- A recording of a concert where strobe segments were replaced with a still frame and a caption noting the omission.
✗ Fails 2.3.2
- A “SALE!” banner alternating white and red five times per second — fails 2.3.1 too if large enough.
- A tiny 16-pixel “recording” dot strobing at 8 Hz: small enough to pass 2.3.1’s threshold exemption, but a 2.3.2 failure.
- An embedded GIF of a glitch-art meme cycling black/white at 10 Hz.
- An autoplay trailer with an un-reviewed strobe sequence, even though it is “only” a few seconds long.
If an effect must communicate urgency, do it without a strobe: a single transition, a color change with an icon, a slow pulse, or a static high-visibility style all convey alarm without a flash frequency.
Common failures
- Fast blink/strobe attention effects on badges, banners, or CTAs — usually implemented with a steps() or fast alternate CSS animation.
- Publishing video without any flash screening: news, sports, music, and gaming footage are the highest-risk categories.
- Relying on 2.3.1's small-area exemption at AAA — under 2.3.2 the size of the flashing region is irrelevant.
- User-generated GIFs and videos rendered with autoplay, so a strobing upload flashes at every visitor by default.
- Third-party ad creatives with strobe effects, embedded without a policy or review that covers flashing.
- Loading spinners or 'live' indicators that alternate two high-contrast frames faster than 3 Hz.
- Assuming a short duration is safe — 'it only strobes for two seconds' is still more than three flashes in one second.
How to test for 2.3.2
- 1
Inventory everything that changes appearance rapidly
CSS animations and transitions, JS-driven effects, animated GIFs/WebPs, <video> elements, canvas/WebGL scenes, embedded players, and ads. Autoplaying content is the priority; user-triggered content still counts.
- 2
Audit coded animations by their numbers
For CSS/JS effects you can read the frequency straight from the code: an animation alternating luminance with a duration under ~330ms per cycle (or steps() flicker) exceeds three flashes per second. No visual judgment needed.
- 3
Run video through PEAT
The free Photosensitive Epilepsy Analysis Tool (Trace Center) analyzes captured screen video for flash risk. For 2.3.2 remember the stricter reading: any flashing over 3 Hz fails, even where PEAT's threshold-based verdict would allow it at Level A.
- 4
Test at realistic and worst-case sizes
Play content full-screen and zoomed. 2.3.2 has no size exemption, but this step also protects your 2.3.1 conformance where viewers enlarge content beyond the threshold assumptions.
- 5
Check upstream policies
Verify ad network settings, UGC moderation rules, and editorial workflows include a no-strobe requirement, so conformance survives the next upload — and never rely on users' ability to look away.
Never test suspected strobe content by staring at it — capture it and analyze the recording. Continue with the full WCAG 2.2 checklist.
Frequently asked questions
What does WCAG 2.3.2 Three Flashes require?
It requires that web pages do not contain anything that flashes more than three times in any one-second period — full stop. Unlike the Level A criterion 2.3.1, there are no exemptions: it does not matter how small the flashing area is, how dim the flash is, how low its contrast is, or whether it avoids saturated red. If any content flashes more than three times in a second, the page fails 2.3.2.
How is 2.3.2 different from 2.3.1 Three Flashes or Below Threshold?
2.3.1 (Level A) forbids flashing above three per second unless the flash is below the 'general flash and red flash thresholds' — a technical exemption that covers flashes that are small enough (roughly under 25% of a 10-degree visual field, about 341×256 pixels at typical viewing distance in the original formulation), dim enough, or low-contrast enough to be considered safe. 2.3.2 (Level AAA) deletes the exemption entirely: three flashes per second is the ceiling for anything, of any size or intensity. It exists because some people are more sensitive than the thresholds assume, and because content viewed closer or larger than expected (zoom, projection, mobile held near the face) can exceed the assumed visual angle.
What exactly counts as a 'flash'?
A flash is a pair of opposing changes in relative luminance — content going markedly brighter then darker (or vice versa) counts as one flash. Three flashes means three such pairs. Rapid alternation between contrasting colors, strobe-style effects, fast white-black cycling, lightning effects in video, and rapidly blinking elements are the classic cases. Slow blinking (like a cursor at ~1 Hz) is not flashing in this sense — though blinking content has its own requirements under 2.2.2 Pause, Stop, Hide.
Who is harmed by flashing content?
People with photosensitive epilepsy can experience seizures triggered by flashing at roughly 3 to 60 flashes per second (with peak sensitivity around 15–20 Hz). Seizures can begin before a person can look away — the trigger acts faster than a voluntary response — which is why prevention must happen in the content, not the user's reflexes. Beyond epilepsy, flashing content can trigger migraines, dizziness, and nausea in people with vestibular disorders and photosensitivity that does not reach seizure threshold.
Does 2.3.2 apply to video content and ads on my page?
Yes. The criterion applies to anything on the web page: embedded video, animated GIFs, canvas animations, CSS animations, ad creatives served by third parties, and autoplay media. Third-party content you embed is part of your page's conformance claim. Video is the most common risk surface — news footage with camera flashes, concert scenes, explosion effects — and should be screened with a tool like PEAT (Photosensitive Epilepsy Analysis Tool) before publishing.
How do I test content for flashing?
For designed UI effects, inspect the code and count: does anything change luminance in opposing directions more than three times within any one-second window? For video and complex animation, use the free PEAT tool from the Trace Center, which analyzes captured video against flash and red-flash risk. Test at realistic playback and with the content at full size — and remember that for 2.3.2, any flashing above three per second is a failure regardless of what a threshold-based analyzer would exempt at Level A.
Related Success Criteria
Content does not contain anything that flashes more than three times per second.
Motion animation triggered by interaction can be disabled.
All functionality is available from a keyboard interface.
Focus can be moved away from any component using standard keyboard methods.
All functionality is available from a keyboard interface without exception.