Try a profile

One click activates a curated set of features via AccessibilityWidget.applyProfile().

No matching profile?

Language & reset

Every change is persisted in localStorage and applied before the first render — no FOUC.

Live, no reload Switch language

28 languages available. The panel re-renders live via AccessibilityWidget.setLocale().

Back to zero Clear preferences

Clears the localStorage key and reloads the page.

Sample content

This text reacts to every widget setting. Toggle font size, contrast or reading aids and watch it change here.

Legal background

Since 28 June 2025, the German Accessibility Strengthening Act (BFSG) requires nearly all B2C providers to make their digital offerings accessible.

A widget never replaces clean code. But a well-built preference layer is a real win for users — and a visible commitment from the operator.

Animation test

This dot pulses until you enable pause animations in the widget.

Scanner test zone

Contains intentional WCAG violations

This page serves automated scanners (axe-core, pa11y, Lighthouse, Playwright-AxE) as a target. In a real product these barriers would be fixed — here they exist as stable test cases:

  • <img> without an alt attribute
  • Link text “click here” (not contextual)
  • Button with contrast < 4.5:1
  • Form <input> without a label

click here for more.

Preview port for the scanner: http://localhost:4173.