Accessibility
boodoo follows common web standards, and can easily be adapted to meet the WCAG 2.1 AA requirements with the proper markup and configuration.
Summary of accessibility features
- Focus visible: boodoo suppresses the focus ring only for mouse users
(
:focus:not(:focus-visible)) and keeps it for keyboard navigation. - Skip link: the docs layout ships with a
visually-hidden-focusable"skip to main content" link. - Reduced motion: all animations and transitions respect
prefers-reduced-motion: reduce. - ARIA roles & states: components set
aria-expanded,aria-selected,aria-busy,aria-labelledby, and userole="alert"/role="dialog"where appropriate. - Keyboard: modals trap focus, dropdowns close with Esc, carousels support arrow keys.
- Color contrast: the default palette meets AA contrast on white, and subtle/emphasis variants are provided.
- Touch: 44px minimum interactive target sizes to satisfy touch accessibility guidelines.
Skip Link Example
Test the focusable skip link by clicking below and pressing Tab:
<a class="visually-hidden-focusable btn btn-primary" href="#main-content">
<span>Skip to main content</span>
</a>
Reduced motion
boodoo includes a media query that disables animations and transitions for users who prefer reduced motion:
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
Color contrast
Some combinations of colors that make up boodoo's default palette may not have sufficient contrast on certain
backgrounds. You can adjust these via the Sass variables, or use the -subtle background/border helpers
and -emphasis text helpers to tune it per component.
Tip: use the .visually-hidden helper for content that should be available to assistive
technologies but hidden visually. See the visually hidden guide.
Accessibility Verification Matrix
To provide full transparency, Boodoo documents the explicit verification status and methodology for WCAG 2.1 & 2.2 AA accessibility criteria:
| Verification Category | Standard / Target | Verification Status | Implementation & Methodology |
|---|---|---|---|
| Keyboard Navigation | WCAG 2.1.1 (Level A) | Verified | Roving tabindex on Tabs, TreeView, and Menus; Esc key handling on Modals/Dropdowns; Arrow keys on Combobox and Carousel. |
| Focus Management & Trapping | WCAG 2.4.3 (Level A) | Verified | Active focus trap in Modals, Dialogs, and Command Palette; focus restored to invoking trigger element on teardown. |
| Visible Focus Indicators | WCAG 2.4.7 / 2.4.11 (Level AA) | Verified | Dual-ring focus indicators using :focus-visible; suppressed for pure pointer events with zero focus loss. |
| Color Contrast | WCAG 1.4.3 (Level AA) | Verified | Core primary, success, danger, dark tokens meet 4.5:1 text and 3:1 graphical object contrast. Specific subtle variants require appropriate emphasis text classes. |
| Screen Reader & Live Announcements | WCAG 4.1.2 / 4.1.3 (Level AA) | Verified | Built-in a11y.announce() with polite and assertive ARIA live regions for toasts, streaming chat, and dynamic alerts. |
| Reduced Motion | WCAG 2.3.3 (Level AAA) | Verified | Sitewide prefers-reduced-motion: reduce clamp setting animation/transition durations to 0.01ms. |
| Touch Target Size | WCAG 2.5.8 (Level AA) | Verified | Interactive controls enforce 44px minimum target dimensions or touch padding bounding boxes. |
| Automated Accessibility Auditing | axe-core / Lighthouse | Continuous CI | Automated test suites in tests/framework.test.mjs enforce semantic tags, mandatory form IDs, and ARIA attributes. |