Accessibility Conformance Report
Voluntary Product Accessibility Template (VPAT® 2.5) · WCAG 2.1 / 2.2 Level AA (selected AAA) · Section 508 · EN 301 549 · Effective: May 30, 2026 · GabaNode Lab, LLC
npm run test:a11y).Product Description
The Idioma platform is a JavaScript-based web accessibility toolset embedded as a single script tag on government websites. It has two surfaces, both covered by this report:
- Translation Ribbon — a floating globe control that, when activated, displays a language selector and translates the host page's content into 100+ languages.
- Document Reader (Inline Document Viewer) — intercepts links to PDF documents and renders them as semantic, translatable, accessible HTML inside a modal dialog. Performs OCR on scanned PDFs, recovers hyperlinks, generates alt text for figures, detects and links footnotes / page references / table of contents, preserves inline typography (sup/sub/bold/italic), and ships with four built-in themes (dark, light, sepia, high-contrast) plus a dyslexia-friendly font option.
The widget operates without requiring user accounts, cookies, or any personally identifiable information from website visitors. It is designed to run on existing government websites without modification to layout or content structure.
Evaluation Methodology
- Manual code review of widget HTML, ARIA attributes, and JavaScript event handling
- Keyboard-only navigation testing (Tab, Enter, Escape, n / p / g / G / ? shortcut keys)
- Color contrast analysis using WCAG contrast ratio calculations — ratios documented inline in the stylesheet at every themed surface
- Screen reader compatibility review (NVDA on Windows, VoiceOver on macOS, JAWS on Windows)
- Automated axe-core sweep over a representative corpus of fixtures (tables with merged cells, multi-column reading, footnote-bearing docs, scanned PDFs, figure-heavy reports, real-world government agendas / bills) — CI-enforced, zero serious or critical violations
- OS-level preference verification (prefers-reduced-motion, prefers-color-scheme, forced-colors / Windows High Contrast Mode)
WCAG 2.1 Conformance Table
| Criterion | Level | Conformance | Notes |
|---|---|---|---|
| 1.1.1 Non-text Content | A | Supports | The globe icon has aria-label. All interactive elements have accessible text. Document figures rendered by the Document Reader carry alt text from the source caption when present, or a vision-model-generated description, or are flagged as decorative when small / repeated / in a header band. |
| 1.3.1 Info & Relationships | A | Supports | Widget uses semantic HTML. Dropdowns are <select> elements with <label> associations. Document Reader output uses semantic tags throughout (h1-h6, ul/ol, table/th/td/thead/tbody with scope and rowspan/colspan, figure/figcaption) plus DPUB-ARIA roles (doc-pagebreak, doc-footnote, doc-noteref, doc-backlink, doc-pageref, doc-toc) where the document structure supports them. |
| 1.3.2 Meaningful Sequence | A | Supports | Document Reader reading order is computed from page geometry: paragraphs in single-column docs read top-down; multi-column pages are detected via a vertical-gutter test and interleaved column-by-column in correct reading order. |
| 1.3.3 Sensory Characteristics | A | Supports | Instructions do not rely solely on color or position. |
| 1.4.1 Use of Color | A | Supports | Color is not the only means of conveying information. Icons and text labels are used. Link affordances combine color with underline; the warning role uses both icon and text. |
| 1.4.3 Contrast (Minimum) | AA | Supports | All text elements meet or exceed a 4.5:1 contrast ratio. Computed ratios are documented inline in the stylesheet at each themed surface; dark theme body text reaches 14:1. |
| 1.4.4 Resize Text | AA | Supports | Widget layout is fluid and responds correctly to browser zoom up to 200% without horizontal scroll. |
| 1.4.6 Contrast (Enhanced) | AAA | Supports | High-Contrast theme (data-theme="hc") achieves 21:1 (white on black). Sepia theme achieves ~9.4:1 — both pass AAA. |
| 1.4.10 Reflow | AA | Supports | The Document Reader dialog and its content reflow without loss of information at 320 CSS pixels (default mobile width). |
| 1.4.11 Non-text Contrast | AA | Supports | All interactive UI components (buttons, link bars, form controls) and meaningful graphical components have ≥3:1 contrast against adjacent colors. |
| 1.4.12 Text Spacing | AA | Supports | Content remains readable with user-overridden line-height 1.5×, letter-spacing 0.12×, word-spacing 0.16×, paragraph-spacing 2×. Inline-runs/abbr/pageref rendering uses inline elements so spacing overrides apply uniformly. |
| 1.4.13 Content on Hover or Focus | AA | Supports | abbr-tooltip content is browser-native (dismissable via Escape, persistent until pointer moves, hoverable). All hover/focus content is reachable by keyboard. |
| 2.1.1 Keyboard | A | Supports | All controls are keyboard-accessible. The Focus dialog places focus on the Read Document button on open and returns focus to the trigger on close. Document Reader shortcuts: n/p (next/previous heading), g/Shift+G (top/bottom), ? (shortcuts help), Esc (close). A full Tab-cycle focus trap is active within the dialog. |
| 2.1.2 No Keyboard Trap | A | Supports | Users can navigate out of any widget component using the keyboard. Focus trap in the dialog is dismissable via Escape. |
| 2.3.3 Animation from Interactions | AAA | Supports | @media (prefers-reduced-motion: reduce) disables loading-spinner rotations. |
| 2.4.1 Bypass Blocks | A | Supports | A "Skip to document content" link is the first focusable element inside the Focus dialog and jumps past the dialog header into the document body. |
| 2.4.3 Focus Order | A | Supports | Tab order follows the logical document order within the widget. The Focus dialog skip link → header buttons → body content → footer matches the visual order. |
| 2.4.4 Link Purpose (In Context) | A | Supports | Recovered hyperlinks carry visible anchor text derived from the source PDF's annotation rect contents. In-document references — footnote markers (doc-noteref), page references (doc-pageref), figure/table cross-references ("Figure 3.2" / "Table 1"), and TOC entries — all include their target in the href and label so the link's purpose is clear from text alone. Print stylesheet emits each external link's URL in parens for paper readers. |
| 2.4.5 Multiple Ways | AA | Supports | Documents are navigable via scroll, keyboard heading-jump (n/p), the detected Table of Contents (role="doc-toc", each entry a clickable link to its heading), in-line page references (doc-pageref), figure/table cross-references, and footnote round-trips (noteref ↔ backlink). |
| 2.4.6 Headings & Labels | AA | Supports | All interactive controls have descriptive labels. Document headings detected by the OCR pipeline are emitted as h1-h6 with stable anchor IDs. |
| 2.4.7 Focus Visible | AA | Supports | Focus indicators are visible on all interactive elements. High-Contrast theme uses a 3px system Highlight outline; forced-colors mode maps to system Highlight. |
| 2.5.8 Target Size (Minimum) | AA | Supports | All interactive targets in the Focus dialog (close, Read Document, Load More, refine controls) are ≥24×24 CSS px. |
| 3.1.1 Language of Page | A | Supports | The widget updates the document lang attribute when a language is selected, and stamps it on the Focus dialog root when translating. |
| 3.1.2 Language of Parts | AA | Supports | Per-block BCP-47 detection: a stop-word scoring pass over the rendered document text identifies paragraphs / headings / lists whose dominant language differs from the document default (e.g. a Spanish quote inside an English minute) and stamps lang="es" on those blocks. Screen readers then switch voices appropriately. Languages currently detected: English, Spanish, French, Vietnamese. Zero false positives observed on English-only fixture set. |
| 3.1.4 Abbreviations | AAA | Supports | A curated dictionary of ~140 federal, state, and local government acronyms (ADA, WCAG, CFR, USC, DOJ, EPA, NIST, OSHA, SNAP, WIC, FEMA, USDA, USGS, USPS, NOAA, FAFSA, EITC, LIHEAP, …) wraps the first occurrence per block in <abbr title="…">. |
| 3.2.2 On Input | A | Supports | No unexpected context changes occur when the user selects a language. Theme/font preference changes update styling in place. |
| 3.3.1 Error Identification | A | Supports | Translation errors and document-processing errors surface a visible, plain-text error message. Low-confidence OCR pages render a role="note" warning. |
| 4.1.1 Parsing | A | Supports | Widget generates valid HTML. Anchor IDs are guaranteed unique per document via a slug + numeric suffix. |
| 4.1.2 Name, Role, Value | A | Supports | All UI components use native HTML elements with correct role and state attributes. The Focus dialog uses role="dialog" aria-modal="true" aria-labelledby. DPUB-ARIA roles emitted where the document structure supports them: doc-pagebreak on page boundaries, doc-footnote / doc-noteref / doc-backlink on footnote round-trips, doc-pageref on inline page references, doc-toc on detected tables of contents (with each entry a clickable in-document link), doc-bibliography on References / Works Cited sections, role="img" + aria-label on figure description cards. |
| 4.1.3 Status Messages | AA | Supports | Progressive page loading and translation progress use role="status" aria-live="polite" so screen-reader users hear updates without losing focus. |
Known Limitations & Roadmap
- Screen reader announcements: When a page is translated, an
aria-liveannouncement is emitted. Some screen readers may announce the new language name with a slight delay depending on DOM mutation timing. This is a known browser/AT behavior, not a widget defect. - Third-party page content: The widget translates content provided by the host page. Accessibility of the translated content structure (e.g., heading levels, table structure) is inherited from the host page and is not within the widget's control.
- Footnote markers in untagged scanned PDFs: Azure Document Intelligence occasionally substitutes a footnote sup glyph (e.g. "²") with a similar punctuation character ("-", """, "®") during OCR. Where the source is a digital PDF, the inline-runs pass cross-references pdf.js glyph data and salvages the marker; where the source is image-only, the corrupted character is rendered as-is.
- Mathematical notation (roadmap): Inline superscript/subscript chemistry and Pythagorean-style equations render correctly via
<sup>/<sub>. Full equation parsing into MathML (radicals, summations, fractions) is on the roadmap. - Tagged-PDF StructTree (roadmap): When a source PDF contains an authored
/StructTreeRoot, the widget will be able to use that structure directly and bypass OCR-based inference entirely — eliminating the residual Azure-marker substitution above. Currently planned, not yet shipped. - Per-paragraph language detection — shipped: Stop-word scoring identifies blocks whose dominant language differs from the document default and stamps lang=\"…\" on them so screen-reader voice switches. Currently supports English, Spanish, French, Vietnamese. Additional languages (Mandarin, Arabic, Korean, Tagalog) are on the roadmap as the dictionary expands.
Contact
To report an accessibility issue or request a manual accessibility review for your agency's deployment:
admin@gabanodelab.com
We commit to responding to accessibility reports within 5 business days and resolving critical issues within 30 days.