Accessibility statement.
Where we stand against WCAG 2.1 Level AA, what we still owe, and how to report a problem. Honest is more useful than aspirational.
Target and current status
We target WCAG 2.1 Level AA across every Playtcha surface: the embedded widget, the marketing site, the auth pages, the customer dashboard, and the docs. The marketing site, dashboard, auth, and docs are conformant. The widget is partially conformant — the underlying product centres on real-time motor + visual gameplay, which is in tension with strict accessibility for some impairments. We document the gap rather than hide it.
What works today
- Full keyboard play. Every shipped game is operable without a pointer device. Space/arrow keys for flapping, catching, slinging; number keys for whacking; arrow keys for sliding; same idle/play/success/error focus discipline across all games.
- Screen-reader announcements. Score changes, state transitions ("Loading game", "Round 2 of 3", "Verified"), and errors are surfaced through a polite live region. Decorative visuals are
aria-hidden. - Reduced motion.
prefers-reduced-motionclamps decorative animations (parallax, particle bursts, marquees, the rolling-digit counter on the landing page) and replaces the success "burst" with a static checkmark fade. Gameplay animations themselves are preserved — clamping those would break the product — but decorative game effects (screen shakes, parallax backgrounds) are disabled. - Focus visibility never removed. 2px solid focus rings with a 2px offset on every interactive element, light and dark modes both verified for ≥3:1 contrast.
- Reflow without scroll. Every page reflows down to a 320 CSS-pixel viewport with no horizontal scroll. Layout is rem-scaled and survives 200% zoom.
- Non-colour signals. The dashboard usage bar, game items, and success/error states all carry shape, label, or position cues in addition to colour. Color blindness simulation (protanopia / deuteranopia / tritanopia) is part of our manual test checklist.
- No motion or device-tilt input. Nothing in the widget requires shaking, tilting, or multi-touch gestures without a single-pointer alternative.
- Pointer-cancellation safety. Buttons fire on
pointerupwith click-target validation; dragging off cancels.
Known gaps we're honest about
- No universal non-game completion path. Playtcha is currently a visual minigame product. We have improved keyboard reachability, focus management, live-region updates, and touch ergonomics, but we do not yet offer a non-visual completion path equivalent to solving a game by audio alone. This is the single largest known accessibility gap and is stated plainly anywhere Playtcha is sold or procured.
- Severe motor impairment. Real-time tap, click, or drag is part of every shipped game. An "audio-only" mode would not solve this — it's a motor constraint, not a perceptual one. We do not have a non-real-time alternative today.
- Timing. The 2-minute challenge-token lifetime is part of the security model and is not adjustable per-session. We mitigate by surfacing remaining time in the widget and by allowing unlimited retries — a slow user is never locked out, only asked to start a fresh token.
These limitations apply specifically to the embedded widget. The rest of the site — signing in, dashboards, docs — has no such real-time-input constraint and is held to the full AA bar.
Keyboard reference
| Context | Key | Action |
|---|---|---|
| Idle (any game) | Tab | Focus the widget |
| Idle | Enter / Space | Start the game |
| Flappy | Space / ↑ / W | Flap |
| Whack-a-mole | 1–9 (Numpad too) | Hit the corresponding cell |
| Catch | ← / → / A / D | Move the basket |
| Slingshot | ← / → / ↑ / ↓ then Space | Adjust aim, release to shoot |
| Sorter | ← / → | Drop the current tile into a bin |
| Unblock | Tab, then ← / → / ↑ / ↓ | Select a piece and slide it |
| Echo | 1–4 / arrow keys | Repeat the shown sequence |
| Metronome | Space | Tap on the beat |
| Any state | Esc | Pause (resume with Esc again) |
| Error / expired | Enter / Space | Retry with a fresh challenge |
Testing we run
- Automated axe-core checks in CI on every page route.
- Lighthouse accessibility score > 95 on landing, dashboard, auth, docs.
- Manual screen-reader passes on NVDA + Firefox, VoiceOver + Safari (macOS + iOS), and TalkBack + Chrome (Android), covering: widget embed, signup, login, project create, secret regenerate, account delete.
- Keyboard-only walkthrough: complete a verification, create a project, regenerate a secret, delete an account — without touching a pointer device.
- Reduced-motion verification in both light and dark modes.
- Color-blindness simulation (protanopia, deuteranopia, tritanopia) across the widget's interactive elements.
How to report a problem
If you hit a barrier — whether on the marketing site, in the dashboard, or trying to verify with the widget on a customer's site — please tell us. We treat accessibility regressions with the same priority as security regressions.
Write to support@playtcha.com. Include the page or site, the assistive technology you were using (NVDA / VoiceOver / TalkBack / keyboard-only / Switch Control / etc.), and what you expected to happen. We aim to acknowledge within two business days.
For background on how we approach accessible CAPTCHA design, see our writeup on the trade-offs.
Statement last reviewed: 2026-05-11. Reviewed at every material change to the widget or dashboard.