This project is a WCAG 2.2-focused accessibility preference widget.
This widget does not by itself make a website WCAG-conformant. Site-wide design, content, code, and assistive-technology testing are still required.
The widget changes presentation and exposes user controls. It does not audit, repair, or certify the host site's markup, content, interactions, media alternatives, forms, or complete user processes.
- The trigger starts with
aria-expanded="false"and references the dialog witharia-controls. - The closed dialog has both
hiddenandinert, keeping its controls out of the tab sequence. - Opening moves focus to the close button.
- Tab and Shift+Tab are contained within the open modal.
- Escape closes the modal and restores focus.
- Other body children are temporarily made inert while the modal is open, and their previous inert state is restored on close.
- The former Ctrl+U shortcut is not present, so the browser shortcut is not overridden.
- A
prefers-reduced-motion: reducerule removes widget animations and minimizes transitions.
The interface is hosted in an open Shadow Root. Modules intentionally modify the host document with widget-owned classes, inline styles, <style> elements, and helper overlays. Preferences are stored with a11y-* localStorage keys.
Reset removes registered widget-owned effects and storage values except the interface language. Destroy also removes widget-owned helper elements and styles. Active text-size and image-hiding preferences are refreshed when host applications add content. Host applications should still verify that their dynamic DOM and site-specific styles are fully restored.
The public core intentionally excludes:
- license verification and customer-specific code
- proprietary or private API calls
- sign-language video services
- simulated keyboard-navigation mode
- a screen-reader replacement
- layout-control mode
These capabilities must not be advertised as active features.
- No formal WCAG conformance evaluation has been performed.
- No complete browser and assistive-technology matrix has been completed.
- MutationObserver-based refresh cannot guarantee compatibility with every virtualized, embedded, or closed-shadow-root component.
- Some host-page transformations intentionally use broad selectors and can conflict with site-specific CSS.
- Read aloud uses browser speech synthesis. Voice availability, language quality, and behavior vary by browser and operating system.
- Preset profiles combine preferences and are not medical recommendations.
- Shadow DOM isolates the control interface, but the intended page-level transformations are not isolated.
- Automated tests use a simulated DOM and do not replace real-browser or assistive-technology testing.
Before a public release:
- Test current Chrome, Edge, Firefox, and Safari where available.
- Test keyboard-only opening, complete focus traversal, Escape, close, and focus restoration.
- Test at 200% and 400% zoom and in narrow responsive layouts.
- Test
prefers-reduced-motion: reduce. - Test at least NVDA/Firefox, NVDA/Chrome or Edge, VoiceOver/Safari, and one mobile screen reader.
- Confirm trigger name, dialog announcement, button pressed states, language changes, and reset feedback.
- Confirm each preference can be enabled, disabled, persisted, and reset without corrupting host-page styles.
- Test dynamic content, single-page navigation, forms, editors, media, and embedded content.
- Run automated accessibility tooling as a supplement, not a substitute for manual testing.
- Repeat the host site's own WCAG evaluation after integration.