Accessibility
How we build for keyboard, screen reader, low-vision, and low-tech users. An honest, dated snapshot.
Formal accessibility statement
- Standard targeted
- WCAG 2.2 AA across the entire experience. AAA treatment on focus appearance (thick high-contrast rings, not-obscured) and on form labelling + error recovery. Tracked against the W3C Recommendation, not a paraphrase.
- Last internal audit
- 2026-04-19. Manual pass by our own team against the homepage, print-size, /standards/ hub + 9 authority pages, and the 45 payment-scheme landing pages.
- External audit
- Commissioned, report pending. Publishing on arrival at /accessibility/audit/ with remediation notes, blemishes intact, no cherry-picking.
- Retest cadence
- Monthly spot-check + full manual pass after any major UI change. Automated checks (contrast linting, WCAG 2.2 new-criteria scan) run on every deploy.
- Contact + SLA
- hello@abundera.ai, we acknowledge accessibility reports within 2 business days, triage within 5, and treat keyboard / screen-reader / cognitive blockers as priority issues (ship ahead of feature work).
WCAG 2.2 AA conformance by success criterion
The new-in-2.2 criteria we're actively watching. Status reflects what we've verified internally; the external audit will supersede.
| SC | Criterion | Level | Status |
|---|---|---|---|
| 2.4.11 | Focus Not Obscured (Minimum) | AA | Pass, focus ring always visible, not hidden under sticky headers |
| 2.4.12 | Focus Not Obscured (Enhanced) | AAA | Pass on the generator surface; some drawers have brief overlap during animation |
| 2.4.13 | Focus Appearance | AAA | Pass, 3 px outline + 2 px offset + box-shadow backup on any background |
| 2.5.7 | Dragging Movements | AA | Pass, no essential drag-only interactions; the business-card designer offers keyboard alternatives for every drag |
| 2.5.8 | Target Size (Minimum) | AA | Pass, verified 24×24 CSS px minimum on every interactive target; most at 28×28 or 40×40 |
| 3.2.6 | Consistent Help | A | Pass, help / contact appear in the same place on every page (footer + nav) |
| 3.3.7 | Redundant Entry | A | Pass, no form requires re-entering data the user already provided in the same session |
| 3.3.8 | Accessible Authentication (Minimum) | AA | N/A, no cognitive function tests; Abundera QR does not require login |
Motion and forced-colors support
- prefers-reduced-motion: reduce, ambient orb float and fade-in transitions are suppressed. Functional transitions stay short. Verified with macOS Reduce Motion and Windows "Show animations" disabled.
- forced-colors: active (Windows High Contrast Mode), focus rings use the system Highlight colour; borders inherit system CanvasText. Verified in Edge on Windows 11 High Contrast.
Known limitations
- JAWS not tested yet. The next AT round targets JAWS on Edge on Windows 11.
- Business Card Designer is mouse-first by design for the drag-to-position preview. Every control has a keyboard alternative, but the live-feedback loop is still visual. Color inputs, preset grid, and hex fields now have explicit ARIA bindings (2026-04-19).
- External audit report is pending. The self-attested status on the table above will be replaced with the auditor's findings when the report lands.
- Some third-party assistive technologies (Dragon NaturallySpeaking, Speech-to-text on Android) are not in our regression matrix; we accept community reports and fix per-ticket.
Accessibility changelog
- 2026-04-19 (PM), TalkBack live-region double-fire fixed:
aria-live="polite"removed from the#qr-previewwrapper; announcements now come only from the scanabilityrole="status"badge, once per generate. BCD modal: color pickers gained proper<label for>bindings (Background, Text, Accent, Gradient); preset-grid container gainedrole="group"+aria-label. Accessibility tables gained<caption>+scope="col"/"row", WCAG 2.2 AA + AT matrix now announce correctly on VoiceOver, NVDA, and TalkBack. - 2026-04-19 (AM), Focus indicators upgraded (3 px + box-shadow backup). forced-colors + prefers-reduced-motion support added. Target-size audit: bumped
.saved-profile-delete,.type-search-clear,.compat-toggle-btnto ≥ 28 px. Heading-level skip fixed (vCard/MECARD subheads h4 → h3). Formal WCAG 2.2 AA statement + AT matrix published. - 2026-04-18, Manual WCAG 2.2 AA baseline pass documented. Four-pillar trust strip collapsed for cleaner hierarchy.
- 2026-03-08, Initial /accessibility/ page published.
What we commit to
- Full keyboard traversal. Every generator control, every modal, and every export flow is reachable without a mouse.
- Visible focus states. Focused inputs, buttons, and links show a clear ring. We don't rely on color alone.
- Labels on every field. Form inputs have associated
<label>elements oraria-labelattributes. Placeholder text is never used as the only label. - ARIA live regions for the QR preview and toasts. Screen readers hear "QR generated" and toast messages when they fire, not just when focus moves to them.
- Text alternatives for icon-only buttons.
aria-labelon every SVG-only button. - Color-independent status meaning. Scannability badges and compat chips pair color with a glyph and a text label.
- Explicit export format names. Download buttons say "Download PNG", "Download SVG", etc., not just "Download".
- Large-tap mobile targets. Interactive elements are at least 44 × 44 CSS pixels on coarse pointers, per WCAG 2.5.8.
- Reduced-motion respect. Transitions are disabled under
prefers-reduced-motion: reduce.
Where we still fall short
- JAWS not tested yet. JAWS licence acquired, tester slot booked for the next AT round. All other majors (VoiceOver macOS + iOS, NVDA, Narrator, TalkBack) have passed the most recent regression.
- The Business Card Designer is mouse-heavy by design (drag-to-position, canvas preview). Keyboard alternatives exist for every control but the live-preview feedback loop is still visual-first. Color controls now use proper
<label for>bindings +role="group"on the preset picker (2026-04-19). - Complex generator flows (batch CSV, multi-step wizard) could use better skip-link structure. Planned.
- Descriptive table summaries. Accessibility + compatibility tables now have
<caption>+scopeattributes (2026-04-19). Longer row-level narrative summaries for every row are still planned.
Assistive-tech support matrix
Engineering artifact, not a PR statement. Each row is a real browser + AT + platform combination we have physically put hands on. Status reflects the most recent manual pass; caveats record anything that still blocks a full pass.
| Browser | AT | Platform | Last passed | Status | Known caveats |
|---|---|---|---|---|---|
| Safari | VoiceOver | macOS 15 | 2026-04-19 | Pass | Command palette "Shortcuts" list reads items twice when the palette first opens; cosmetic, not blocking |
| Safari | VoiceOver | iOS 18 | 2026-04-19 | Pass | Rotor reorders some dynamically-inserted chips; re-announce on interaction recovers the order |
| Firefox | NVDA | Windows 11 | 2026-04-19 | Pass | , |
| Chrome | NVDA | Windows 11 | 2026-04-19 | Pass | , |
| Chrome | ChromeVox | ChromeOS 128 | 2026-03-30 | Spot-checked | Full regression overdue; re-queue for next release |
| Chrome | TalkBack | Android 14 | 2026-04-19 | Pass | Live-region double-fire on the QR preview (announced "QR preview updated" twice mid-debounce) fixed 2026-04-19: aria-live removed from the preview wrapper; announcements now come only from the scanability role="status" badge, once per generate. |
| Edge | Narrator | Windows 11 | 2026-04-12 | Pass | Forced-colors mode (new this release): focus rings OK, but some chip borders collapse to transparent, queued |
| Safari | JAWS | Windows 11 | , | Not tested | Scheduled for next AT round; JAWS licence acquired, tester slot booked |
| Any | Dragon NaturallySpeaking | Windows 11 | , | Not tested | Accepting community reports; fix per-ticket until a dedicated regression lands |
Keyboard map
- Tab / Shift+Tab: move forward / back through focusable elements.
- Enter / Space: activate buttons and toggles.
- Arrow keys: move between options inside a radio group (type selector, template picker, tab bar).
- Escape: close modals (Business Card Designer, preflight, print services, image crop).
- Home / End inside an overflow menu jump to first / last item.
Internal audit, 2026-04-19
Manual WCAG 2.2 AA pass against the homepage, /print-size/, the new /standards/ hub + 9 authority pages, and the 45 payment-scheme landing pages (which inherit from the shared template). What we verified, what we fixed, and what's open:
Verified passing
- Skip link target exists, the skip link (
href="#generator") resolves to a visible element on every page variant. - Focus-visible styles,
:focus-visibleis declared globally with a 2px outline, plus per-input overrides with a coloured border + shadow. Confirmed via CSS audit at lines 34 and 88 ofsite/css/style.c17bfd85.css. - All form inputs have labels, every
<input>/<select>/<textarea>in the generator has either an explicit<label for="...">or a wrapping<label>. Placeholder-as-label is not used anywhere. - Buttons have accessible names, every
<button>either has text content or anaria-label. SVG-only buttons (hamburger, share, install) all carryaria-label. - Decorative SVGs marked hidden,
aria-hidden="true"on every decorative icon so screen readers skip them instead of announcing their geometry. - Correct ARIA roles,
role="radiogroup"on the type selector withrole="radio"+aria-checkedon each option;role="tablist"/role="tab"+aria-selectedon the panel tabs. - Text contrast, primary text is
#f5f5f5on#08090a(≈ 17:1, WCAG AAA). Muted text#a3a3a3on the same background is ≈ 8:1 (above AAA 7:1). - Language switcher has
aria-label="Language"even though the visible label is implicit.
Fixed in this pass
- Heading-level skip, three subheads inside the vCard / MECARD extra-fields sections were
<h4>under a<h2>with no intervening<h3>. Screen-reader outline tools flagged this as "skipped level." Changed to<h3>so the outline reads h1 → h2 → h3 → h3 cleanly.
Known limitations
- Axe / NVDA / VoiceOver full sweep requires a browser + AT which we can't run from the build pipeline. Manual browser-based pass scheduled monthly.
- Third-party independent audit is commissioned (see /accessibility/audit/ placeholder). Report will publish on arrival even if it contains findings.
- The "/" keyboard shortcut for the command palette is a slight collision risk on pages with search fields. We preventDefault() only when focus is outside an input; documented but not yet audited with AT.
Report an issue
If something is unreachable by keyboard, mislabeled, or otherwise unusable with your setup, email hello@abundera.ai. Include your browser, OS, AT, and the specific flow. We treat accessibility bugs as priority issues.