Everything the audit covers, from automated scans to a real screen reader's voice
Large-scale detection, real evidence instead of assumption, scaling to a whole site, and deliverables ready for your teams — in French and English.
Large-scale automated detection
| Capability | Detail |
|---|---|
| axe-core 4.9.1 scanning | Injected dynamically into a real browser (no degraded headless simulation), collects both violations and "incomplete" items — not just failures, so the report also documents what was actually tested. |
| Rich DOM inspection | Checks accessible names (accname-approximation: aria-label > resolved aria-labelledby > associated <label> > text content > title), heading structure, ARIA roles, language attributes, duplicate IDs. |
| Automated keyboard navigation | Full Tab/Shift-Tab sweeps, focus-order capture, keyboard-trap detection, computed-style diff (outline, box-shadow) to catch missing focus indicators — found 5 design-system components with zero visible focus indicator on a real project. |
| Contrast | An in-page injected WCAG luminance-ratio formula (resolves cases axe-core leaves as "incomplete"), plus an emulated forced-colors mode (forced-colors: active) to catch hardcoded foreground/background pairs that would break under Windows High Contrast. |
| Zoom and reflow | 320px viewport emulation and 200% zoom to detect truncated content or lost functionality. |
| Text spacing | CSS injection of the WCAG 1.4.12 ratios and automatic detection of resulting text truncation. |
| Pointer-gesture cancellation | Mouse simulation (down → move away → up) to verify an action doesn't fire prematurely (WCAG 2.5.2). |
| CSS/JS disabled | Rendering comparison with and without CSS, and a dedicated browser context with JavaScript disabled from page load. |
| Office documents | Site-wide crawl by file extension (PDF, DOCX...) and PDF tagging verification via pypdf (tags, StructTreeRoot, declared language). |
| Interface-component contrast | Luminance computed on the element, its containers, and its children — beyond text, covering borders, icons, and interaction states. |
| CSS color declarations with fallbacks | Detects foreground/background pairs defined with a fallback that would break readability if the primary color failed to apply. |
| Information carried by pseudo-elements | Detects semantically meaningful content inserted via ::before/::after, invisible to standard DOM inspection. |
| Hidden and hover-revealed content | Flags hidden content and content revealed only on mouse hover with no keyboard equivalent. |
| Complex gestures | Detected via instrumentation set up before the page loads; non-applicability proven when no complex gesture exists, with a systematic search for a button-based alternative. |
| Context changes on input | Detects context changes automatically triggered while typing into a field (WCAG 3.2.2). |
| Status messages | Verifies status messages are correctly exposed (role="status", live regions) without forcing a focus move. |
| Geometric position of labels | Verifies a field's visible label matches its real accessible name (WCAG 2.5.3). |
| Engaging forms and flash animations | Detects forms requiring engaging confirmation and flash-type animations (WCAG 2.3.1). |
| Focus return on modal close | Real open-then-close sequences simulated for every modal dialog, verifying focus returns to the triggering element. |
Local W3C validation
The rendered source code of every page — the one assistive technologies actually consume — is validated by a local instance of the W3C validator, with no page-size limit, messages filtered to the scope of the official test (tags, nesting, duplicate attributes).
Consistency across screens
Comparison of each page's navigation signature (menu order, placement of the site map and search) and of the consistency of same-function field labels across templates.
Real evidence instead of assumption
The tool's most differentiating part: instead of leaving a criterion "not tested" for lack of automation, several protocols get real evidence at a reasonable implementation cost.
Real screen-reader bridge (NVDA ↔ Playwright)
Captures the speech NVDA actually says (not an approximation of what it should say). Works around undocumented Windows pitfalls (UIPI process isolation, the SendInput API silently failing, the need to bring the window to the real foreground before sending low-level keyboard events).
Real session-timeout test
An actual 30-minute wait (no simulation), with spaced checks, to verify there's no silent warning/logout on a real transactional flow.
Vision-model-assisted triage (multimodal vision model via API)
For every icon button flagged by the DOM as lacking an accessible name, captures a crop with surrounding visual context and asks the model to propose a relevant label and judge icon/function correspondence. Triage, not a final verdict. The same model judges, on the full page capture, decorative images, text-as-image, and information carried by color alone or by shape/position alone — with a dual rate displayed (official rate including these judgments vs. mechanically proven rate) and an exhaustive appendix kept for sampling-based review.
Touch gestures and screen rotation
Simulated via Playwright emulation (hasTouch, viewport rotation), without dedicated physical hardware.
Automatic audio/video transcription
Speech detection on the site's audio and video content to inform media criteria (WCAG 1.2.x, RGAA theme 4) — validated under real conditions on our reference project, where it resolved 6 additional criteria.
Scaling to a whole site
- Parallel automated crawl to audit hundreds of pages in parallel (cascading crawl: start page → all its links → their own links), aggregating defect patterns rather than a flat per-page list — useful for spotting that a defect comes from a shared component and therefore affects the entire site.
- Scoping methodology run before the audit itself: site mapping, grouping by page template, explicit scope presentation for a conscious trade-off, documented exclusions in the final report.
- Orchestration through targeted-repass campaigns, driven by a completeness check (every page × every check in the catalog, with no verifiable gap) and resilient to the rate limits of the sites being audited.
Regulatory compliance — two independent frameworks
Across all 162 regulatory criteria (106 RGAA + 56 WCAG), our automated approach covers 81% of RGAA criteria and 71% of WCAG criteria:
- RGAA: 20% with no human check at all (verdict guaranteed by code), 61% with a quick manual confirmation.
- WCAG: 21% with no human check at all, 50% with a quick manual confirmation.
- The remaining criteria (19% RGAA, 29% WCAG) require direct human judgment that no automated method covers yet. We don't integrate them into our approach: as a research lab, we aim to push the limits of automation as far as possible — combining traditional methods with LLM judgment for human-style analysis — rather than falling back on a classic manual audit.
- WCAG 2.1/2.2 levels A and AA (56 criteria) and RGAA 4.1.2 (106 criteria, 258 official unit tests) tested each on its own terms.
- For every criterion covered by our approach: a verdict (compliant / non-compliant / not applicable / real evidence gathered), automated or quickly confirmed by hand. Criteria not yet covered are neither tested nor delivered.
- Structured, data-driven reference framework: the 106 RGAA criteria and their 258 tests, along with the 56 WCAG criteria, are encoded as structured data, each linked to its automated test method or manual protocol.
- Scope covered: EAA (European Directive 2019/882), WCAG 2.1/2.2, RGAA 4.1.2. See also where RGAA version 5 stands, currently being drafted.
Automatically generated deliverables
| Deliverable | Content |
|---|---|
| Structured CSV | Source of truth — one finding per row, normalized columns (severity, WCAG criterion, RGAA criterion, detection method, verification status, test protocol). |
| Excel workbook | Multiple tabs (findings, legend, summary), native formulas (counts by severity/status) — no hardcoded values, recalculates on open. |
| Word report | Executive summary, per-page detailed findings, systemic-defect analysis, prioritization, appendices with annotated screenshots at exact DOM coordinates. |
| Interactive chat interface | Local web server, filterable/searchable finding list + chat, an assistant that answers citing relevant finding IDs. |
| Systematic bilingual output | Every deliverable ships as two separate files (French and English) — not a single mixed-language document. |