Integration Lab
AccessKit integration lab
Master showcase for the Accessibility Widget and DevTools. DevTools runs WCAG 2.0/2.1/2.2 Level A, AA, AAA and best-practice rules. This page includes a wide range of intentional violations so you can see how each is reported. Use the widget toggles below to see how settings affect the page.
Widget settings preview
Use the AccessKit widget (floating button) to toggle each setting and see the effect on the elements below.
Reduced motion
When Reduced Motion is on, the box and dot below should stop moving.
High contrast
When High Contrast is on, the low-contrast sample below becomes easier to read.
Focus indicators
Tab through the buttons and link below to see focus rings when Focus Indicators is on.
Letter, word & line spacing
Use the Letter spacing, Word spacing, and Line height sliders to adjust this paragraph.
The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs.
Dyslexia-friendly font
Turn on Dyslexia-friendly font to switch page text to Lexend for easier reading.
This sample uses the default font until the setting is enabled.
Font size
Use the font size slider in the widget to scale page text.
Sample text at root size; it scales with the slider.
WCAG Compliance Guidelines
The AccessKit DevTool detects all of the compliance issues demonstrated below and provides actionable guidance on how to resolve each one for full WCAG compliance. Issues are organized by the four WCAG principles, covering every success criterion from Level A through AAA.
Principle 1: Perceivable
Information and user interface components must be presentable to users in ways they can perceive.
1.1 Text Alternatives
1.1.1 Non-text Content (Level A)WCAG 2.0
All non-text content that is presented to the user has a text alternative that serves the equivalent purpose.




Section divider:
next section

1.2 Time-Based Media
1.2.1 Audio-only and Video-only — Prerecorded (Level A)WCAG 2.0
For prerecorded audio-only or video-only media, a text alternative or audio track describing the content must be provided.
<track> element<track> element<track> but no transcript on page1.2.2 Captions — Prerecorded (Level A)WCAG 2.0
Captions must be provided for all prerecorded audio content in synchronized media.
1.2.3 / 1.2.5 Audio Description (Level A / AA)WCAG 2.0
An audio description track must be provided for prerecorded video so that blind users can understand visual-only content.
1.3 Adaptable
1.3.1 Info and Relationships (Level A)WCAG 2.0
Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.
Section title (h3)
Subsection (h6 — skipped h4, h5)
Heading exists in DOM but contains only whitespace
| Name | Value |
| Alpha | 100 |
| Item | Count |
|---|---|
| Widgets | 42 |
This looks like a heading
But it's just a bold paragraph.
Shipping address
Please read the terms of service before submitting your application.
Bold and italic convey emphasis but use CSS instead of <strong> / <em>This table is used purely for layout, not data. |
1.3.2 Meaningful Sequence (Level A)WCAG 2.0
When the order of content matters, the correct reading sequence can be programmatically determined.
1.3.3 Sensory Characteristics (Level A)WCAG 2.0
Instructions provided for understanding and operating content do not rely solely on sensory characteristics of components such as shape, color, size, visual location, orientation, or sound.
Click the round button to continue.
"Round button" is meaningless to screen reader usersUse the menu on the right to navigate.
"On the right" has no meaning for screen reader users or on mobile layoutsFields marked in red are required.
Color-blind users and screen reader users cannot distinguish which fields are required1.3.4 Orientation (Level AA)WCAG 2.1
Content does not restrict its view and operation to a single display orientation, such as portrait or landscape, unless a specific orientation is essential.
Simulated lock: This component would use CSS@media (orientation: landscape) { display: none }or JavaScript screen.orientation.lock('portrait')to hide content in landscape mode.
1.3.5 Identify Input Purpose (Level AA)WCAG 2.1
The purpose of each input field collecting information about the user can be programmatically determined via the autocomplete attribute.
1.3.6 Identify Purpose (Level AAA)WCAG 2.1
The purpose of UI components, icons, and regions can be programmatically determined through role, landmarks, or ARIA attributes.
Quick actions
1.4 Distinguishable
1.4.1 Use of Color (Level A)WCAG 2.0
Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.
Read our terms of service before continuing.
Link has no underline or other non-color indicator — fails link-in-text-block1.4.2 Audio Control (Level A)WCAG 2.0
If audio plays automatically for more than 3 seconds, a mechanism is provided to pause, stop, or control the volume independently.
controls attribute — the element is invisible, so users have no way to pause, stop, or control volume1.4.3 Contrast — Minimum (Level AA)WCAG 2.0
Text has a contrast ratio of at least 4.5:1 (3:1 for large text). Contrast failures are reliably detected — no additional examples needed.
1.4.4 Resize Text (Level AA)WCAG 2.0
Text can be resized without assistive technology up to 200% without loss of content or functionality.
<meta name="viewport" content="width=device-width, user-scalable=no, maximum-scale=1">user-scalable=no and maximum-scale < 5 are detected — shown as code since meta tags go in <head>This text uses a fixed 10px font size. At 200% browser zoom it may still be too small to read comfortably because it doesn't use relative units (rem/em).
Fixed px font sizes are not flagged — would need zoom simulation to detectThis long text content will be clipped because the container has overflow:hidden and fixed height, making it inaccessible when zoomed.
1.4.5 Images of Text (Level AA)WCAG 2.0
If the same visual presentation can be made with text, text is used to convey the information rather than images of text (exceptions: logos, customizable).

1.4.6 Contrast — Enhanced (Level AAA)WCAG 2.0
Text has a contrast ratio of at least 7:1 (4.5:1 for large text). Enhanced contrast failures are reliably detected — no additional examples needed.
1.4.7 Low or No Background Audio (Level AAA)WCAG 2.0
For prerecorded audio with speech, background sounds are at least 20dB lower than foreground speech, or can be turned off.
1.4.8 Visual Presentation (Level AAA)WCAG 2.0
For blocks of text: colors are selectable, width ≤80 characters, text is not justified, line spacing ≥1.5, paragraph spacing ≥1.5x line spacing, and text is resizable to 200% without horizontal scrolling.
This paragraph is fully justified. Justified text creates uneven word spacing that makes reading more difficult, especially for users with dyslexia or cognitive disabilities. The rivers of white space can be distracting.
First paragraph with very tight line spacing. This makes it hard to track which line you are reading and can cause lines to blur together.
Second paragraph with minimal paragraph spacing. The gap between paragraphs should be at least 1.5 times the line spacing.
This is an extremely long line of text that is intentionally not constrained to 80 characters or fewer per line. Long lines force readers to move their eyes a long distance from the end of one line to the beginning of the next, making it easy to lose track of which line comes next, which is particularly problematic for users with reading or cognitive disabilities.
Line width should be constrained to ~80 characters (about 80ch or 45em)1.4.9 Images of Text — No Exception (Level AAA)WCAG 2.0
Images of text are only used for pure decoration or where a particular presentation of text is essential (e.g., logotypes). Stricter than 1.4.5 — same detection gaps apply.
1.4.10 Reflow (Level AA)WCAG 2.1
Content can be presented without loss of information or functionality and without requiring scrolling in two dimensions at 320px width (400% zoom).
This content is inside a fixed 500px-wide container. On narrow viewports or at high zoom, it forces horizontal scrolling.
1.4.11 Non-text Contrast (Level AA)WCAG 2.1
UI components and meaningful graphics have a contrast ratio of at least 3:1 against adjacent colors.
1.4.12 Text Spacing (Level AA)WCAG 2.1
No loss of content or functionality when overriding: line height to 1.5x font size, paragraph spacing to 2x font size, letter spacing to 0.12x font size, word spacing to 0.16x font size.
This text has WCAG-mandated spacing overrides applied. The fixed-height container clips it.
Expanded text spacing
1.4.13 Content on Hover or Focus (Level AA)WCAG 2.1
Content that appears on hover or focus is dismissible (Escape), hoverable (pointer can move to new content), and persistent (stays visible until dismissed or trigger is removed).
This popup has a gap between trigger and content. Moving the pointer to read it causes it to vanish.
Simulated: A toast or tooltip that appears on hover/focus but automatically disappears after 3 seconds, before the user finishes reading.
Principle 2: Operable
User interface components and navigation must be operable.
2.1 Keyboard Accessible
2.1.1 Keyboard (Level A)WCAG 2.0
All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.
This scrollable container has no tabindex, so keyboard users cannot scroll it. Content continues below the visible area and requires scrolling to read. A keyboard user would be unable to access the rest of this text because the container cannot receive focus.
2.1.2 No Keyboard Trap (Level A)WCAG 2.0
If keyboard focus can be moved to a component, focus can be moved away from that component using only a keyboard. If it requires non-standard exit keys, the user is advised.
Modal Dialog
This simulates a modal that traps focus inside but has no Escape key handler to close it and no visible close button.
Simulates a third-party embedded widget (date picker, rich text editor) where Tab cycles only within the widget and never returns to the main page.
2.1.3 Keyboard — No Exception (Level AAA)WCAG 2.0
All functionality is operable through a keyboard — same as 2.1.1 but with no exceptions for any content type. Even path-dependent input (freehand drawing, flight simulators) must have a keyboard alternative.
2.1.4 Character Key Shortcuts (Level A)WCAG 2.1
If single-character keyboard shortcuts exist, they can be turned off, remapped, or are only active when the relevant component has focus.
Keyboard shortcuts
Press ? anywhere to open help — this shortcut cannot be turned off or remapped.
2.2 Enough Time
2.2.1 Timing Adjustable (Level A)WCAG 2.0
For each time limit set by the content, the user can turn off, adjust, or extend the limit (with exceptions for real-time and essential timing).
<meta http-equiv="refresh" content="30; url=/session-expired">Meta refresh tags are detected — shown as code since this goes in <head>Session active
Simulated: setTimeout(logout, 300000) — user is logged out after 5 minutes with no warning dialog or extension option.
Slide 2 of 5
Auto-advances every 4 seconds — no pause button
2.2.2 Pause, Stop, Hide (Level A)WCAG 2.0
For moving, blinking, scrolling, or auto-updating content, users can pause, stop, or hide it.
<marquee> element — deprecated scrolling element
Breaking: New accessibility standard released
Update: Browser support for ARIA 1.3 grows
Report: 97% of home pages have WCAG failures
2.2.3 No Timing (Level AAA)WCAG 2.0
Timing is not an essential part of any event or activity presented by the content, except for real-time events and synchronized media.
Question 3 of 10
00:28What does WCAG stand for?
2.2.4 Interruptions (Level AAA)WCAG 2.0
Interruptions can be postponed or suppressed by the user, except for emergencies involving health, safety, or property.
New message from Support
"Your ticket has been updated. Click to view."
2.2.5 Re-authenticating (Level AAA)WCAG 2.0
When an authenticated session expires, the user can continue the activity without loss of data after re-authenticating.
Session expired
Your session has timed out. Please log in again.
All unsaved form data has been lost.
2.2.6 Timeouts (Level AAA)WCAG 2.0
Users are warned of the duration of any user inactivity that could cause data loss, unless the data is preserved for more than 20 hours.
No warning that leaving this page idle for 15 minutes will discard all responses
2.3 Seizures and Physical Reactions
2.3.1 Three Flashes or Below Threshold (Level A)WCAG 2.0
No content flashes more than three times per second, or the flash is below general flash and red flash thresholds.
Simulates a strobe-like animation — kept static here for safety. Real violations would involve CSS animations or JS toggling light/dark more than 3 times per second.
2.3.2 Three Flashes (Level AAA)WCAG 2.0
No content flashes more than three times per second — stricter than 2.3.1 with no threshold exceptions allowed.
Under the stricter AAA criterion, all flashing content above 3 times/second is prohibited — even if below the general flash thresholds permitted by 2.3.1. Same detection gap applies.
2.3.3 Animation from Interactions (Level AAA)WCAG 2.0
Motion animation triggered by interaction can be disabled, unless the animation is essential to the functionality or information being conveyed.
Simulated: Elements fly in from the side, fade, or scale as the user scrolls — parallax and scroll-linked animations with no way to disable them.
prefers-reduced-motion check — can trigger vestibular disordersSimulated: Full-page slide/zoom transitions between routes that cannot be turned off and don't respect the reduced-motion media query.
2.4 Navigable
2.4.1 Bypass Blocks (Level A)WCAG 2.0
A mechanism is available to bypass blocks of content that are repeated on multiple pages. Missing skip links and landmarks are reliably detected.
2.4.2 Page Titled (Level A)WCAG 2.0
Web pages have titles that describe topic or purpose.
<title></title>Empty or missing <title> elements are detected<title>Untitled Document</title>Title exists but doesn't describe the page — only presence is checked, not qualitySimulated: Client-side navigation changes the page content to "Settings > Notifications" but document.title still reads "Dashboard — MyApp" from the previous view.
2.4.3 Focus Order (Level A)WCAG 2.0
If content can be navigated sequentially, components receive focus in an order that preserves meaning and operability.
Confirm delete?
New results appear here but focus stays on the button
2.4.4 Link Purpose — In Context (Level A)WCAG 2.0
The purpose of each link can be determined from the link text alone, or from the link text together with its context.
New features are available. Click here
Updated privacy policy. Read more
Pricing has changed. Learn more
2.4.5 Multiple Ways (Level AA)WCAG 2.0
More than one way is available to locate a web page within a set of pages (e.g., navigation + search + sitemap).
Only a nav menu is provided — no search, sitemap, A-Z index, or table of contents. Requires multi-page crawling to detect.
2.4.6 Headings and Labels (Level AA)WCAG 2.0
Headings and labels describe topic or purpose.
| Value | |
|---|---|
| Row 1 | 100 |
Section 1
Content about account settings...
Section 2
Content about notification preferences...
2.4.7 Focus Visible (Level AA)WCAG 2.0
Any keyboard operable user interface has a mode of operation where the keyboard focus indicator is visible.
2.4.8 Location (Level AAA)WCAG 2.0
Information about the user's location within a set of web pages is available (breadcrumbs, site map highlighting, step indicators).
Settings > Notifications > Email preferences
This page has no breadcrumbs, no highlighted navigation item, and no step indicator — users cannot tell where they are in the site hierarchy.
2.4.9 Link Purpose — Link Only (Level AAA)WCAG 2.0
The purpose of each link can be identified from the link text alone — stricter than 2.4.4, surrounding context does not help.
2.4.10 Section Headings (Level AAA)WCAG 2.0
Section headings are used to organize content — every distinct content section has a heading, not just some.
Account information section — no heading provided.
Billing details section — no heading provided.
Notification settings section — no heading provided.
2.4.11 Focus Not Obscured — Minimum (Level AA)WCAG 2.2WCAG 2.2
When a UI component receives keyboard focus, it is not entirely hidden by author-created content (sticky headers, floating toolbars, chat widgets).
accesskit-focus-obscuredSimulated: A cookie consent banner with position: fixed; bottom: 0 covering form inputs and links at the bottom of the page. Keyboard users tab to an element entirely obscured by the banner.
2.4.12 Focus Not Obscured — Enhanced (Level AAA)WCAG 2.2
When a UI component receives keyboard focus, no part of the component is hidden by author-created content (stricter than 2.4.11 — even partial overlap fails).
accesskit-focus-obscured-enhancedSimulated: A "Get Started" floating action button (position: fixed; bottom: 20px) partially overlaps a footer link when that link receives focus. 1px of overlap fails AAA.
2.4.13 Focus Appearance (Level AAA)WCAG 2.2
Focus indicator area is at least 2px thick around the entire perimeter and has at least 3:1 contrast ratio between focused and unfocused states.
:focus CSS rule) — area is below the minimum 2×perimeter threshold. Triggers accesskit-focus-appearance-insufficientoutline: 1px solid #999 overrides the browser default focus ring, making it the effective focus indicator at only 1px. No :focus CSS rule present. Triggers accesskit-focus-appearance-insufficient2.5 Input Modalities
2.5.1 Pointer Gestures (Level A)WCAG 2.1
All functionality using multipoint or path-based gestures (pinch, swipe, drag) can be operated with a single pointer without a path-based gesture, unless essential.
Zoom requires pinch gesture — no +/- buttons provided
Slide 1
← Swipe to navigate →
2.5.2 Pointer Cancellation (Level A)WCAG 2.1
For single-pointer functionality, at least one of: no down-event trigger, abort/undo available, up-event reverses down-event, or down-event is essential.
Simulated: Tapping "Send" immediately submits with no confirmation and no undo — accidental taps (common for users with motor impairments) cannot be reversed.
2.5.3 Label in Name (Level A)WCAG 2.1
For components with visible text labels, the accessible name contains the visible label text.
2.5.4 Motion Actuation (Level A)WCAG 2.1
Functionality triggered by device motion (shake, tilt) can also be operated via a UI control, and motion response can be disabled.
Simulated: "Shake your device to undo the last action." No on-screen undo button and no setting to disable motion response.
Uses DeviceMotionEvent listener — users with mounted devices or motor impairments cannot trigger this.
2.5.5 Target Size — Enhanced (Level AAA)WCAG 2.1
Pointer targets are at least 44×44 CSS pixels, with exceptions for inline, user-agent-controlled, essential, and equivalent targets.
2.5.6 Concurrent Input Mechanisms (Level AAA)WCAG 2.1
Content does not restrict use of input modalities available on the platform, except where the restriction is essential or required for security.
Simulated: A web app detects a touchscreen and disables mouse and keyboard input, forcing touch-only interaction. Users with external keyboards or switch devices connected to tablets are locked out.
2.5.7 Dragging Movements (Level AA)WCAG 2.2
All functionality using dragging can be achieved with a single pointer without dragging, unless dragging is essential or determined by the user agent.
📦 Item 1 — drag to reorder
📦 Item 2 — drag to reorder
📦 Item 3 — drag to reorder
accesskit-drag-without-alternativeNo +/- step buttons and no tabindex — drag is the only way to change the value
To Do
In Progress
Done
2.5.8 Target Size — Minimum (Level AA)WCAG 2.2
The size of the target for pointer inputs is at least 24×24 CSS pixels (with exceptions for spacing, inline targets, and user-agent controls).
target-size rule (enabled via wcag22aa tag)Principle 3: Understandable
Information and the operation of the user interface must be understandable.
3.1 Readable
3.1.1 Language of Page (Level A)WCAG 2.0
The default human language of the page can be programmatically determined. Missing or invalid lang attributes on the html element are reliably detected.
3.1.2 Language of Parts (Level AA)WCAG 2.0
The human language of each passage or phrase can be programmatically determined (except for proper names, technical terms, and indeterminate language).
This text has an invalid language code.
Invalid lang attribute values are detected — "xx-invalid" is not a valid BCP 47 tag"Le cœur a ses raisons que la raison ne connaît point."French quote in an English page with no lang="fr" wrapper — screen readers will mispronounce it using English phonetics
Our company motto is "Über alles hinaus streben" which means "strive beyond everything." We also follow the principle of "改善" (continuous improvement).
German and Japanese phrases embedded in English text — each needs its own lang attribute. Detecting which text is foreign requires NLP language detection.3.1.3 Unusual Words (Level AAA)WCAG 2.0
A mechanism is available for identifying definitions of words or phrases used in an unusual or restricted way, including idioms and jargon.
We need to dogfood the new MVP before the stand-up. Make sure to ping the stakeholders and avoid any bikeshedding during the review.
Industry jargon used without definitions, glossary links, or <dfn> elements3.1.4 Abbreviations (Level AAA)WCAG 2.0
A mechanism for identifying the expanded form of abbreviations is provided.
The API uses REST over HTTPS with JWT for auth. Check the SLA for QoS guarantees. Our CDN handles TLS termination.
Multiple abbreviations (API, REST, HTTPS, JWT, SLA, QoS, CDN, TLS) with no <abbr title="..."> elements, first-occurrence expansions, or linked glossary3.1.5 Reading Level (Level AAA)WCAG 2.0
When text requires more than a lower secondary education reading level, a supplemental version or summary is available.
Notwithstanding the aforementioned stipulations, the indemnification provisions herein shall be construed in accordance with the applicable jurisdictional prerequisites, whereby the contracting parties acknowledge their fiduciary obligations pursuant to the regulatory framework established thereunder.
Legal/academic language well above lower secondary reading level — no plain-language summary or simplified version provided. Requires readability analysis (Flesch-Kincaid).3.1.6 Pronunciation (Level AAA)WCAG 2.0
A mechanism is available for identifying specific pronunciation of words where meaning is ambiguous without pronunciation (e.g., homographs).
The lead developer will lead the project. Please read what you read yesterday. The bass player caught a bass.
"Lead", "read", and "bass" have different meanings depending on pronunciation — no phonetic guide, ruby annotation, or audio clip provided3.2 Predictable
3.2.1 On Focus (Level A)WCAG 2.0
When any UI component receives focus, it does not initiate a change of context (page navigation, form submission, or significant DOM change).
3.2.2 On Input (Level A)WCAG 2.0
Changing the setting of any UI component does not automatically cause a change of context unless the user has been advised beforehand.
3.2.3 Consistent Navigation (Level AA)WCAG 2.0
Navigational mechanisms that are repeated on multiple pages occur in the same relative order each time, unless the user initiates a change.
3.2.4 Consistent Identification (Level AA)WCAG 2.0
Components with the same functionality are identified consistently across pages.
3.2.5 Change on Request (Level AAA)WCAG 2.0
Changes of context are initiated only by user request, or the user can turn off such changes.
Simulated: After 5 seconds on this page, the user is automatically redirected to a "new version" of the site. No option to stay on the current page or disable auto-redirect.
3.2.6 Consistent Help (Level A)WCAG 2.2
If help mechanisms (contact info, chat, FAQ) are repeated across pages, they appear in the same relative order. This page includes help elements that trigger the consistency inventory check.
Phone: +1 (555) 123-4567
accesskit-consistent-help-inventory detects these and reminds you to verify they appear in the same relative order on all pages3.3 Input Assistance
3.3.1 Error Identification (Level A)WCAG 2.0
If an input error is automatically detected, the item in error is identified and the error is described to the user in text.
Username must be at least 3 characters.
3.3.2 Labels or Instructions (Level A)WCAG 2.0
Labels or instructions are provided when content requires user input.
3.3.3 Error Suggestion (Level AA)WCAG 2.0
If an input error is detected and suggestions for correction are known, they are provided to the user (unless it would compromise security).
Invalid input.
Wrong format.
3.3.4 Error Prevention — Legal, Financial, Data (Level AA)WCAG 2.0
For pages with legal commitments, financial transactions, or data modifications: submissions are reversible, data is verified, or a confirmation step exists.
Transfer funds
3.3.5 Help (Level AAA)WCAG 2.0
Context-sensitive help is available for text input fields.
3.3.6 Error Prevention — All (Level AAA)WCAG 2.0
For all forms that require user data submission: submissions are reversible, data is checked, or a confirmation mechanism exists. Same as 3.3.4 but applies to all forms, not just legal/financial.
No review step and no undo — under AAA, even routine form submissions should be reversible or confirmed
3.3.7 Redundant Entry (Level A)WCAG 2.2
Information previously entered by the user that is required again in the same process is either auto-populated or available to select.
autocomplete attributes — users may need to re-type previously entered data. Triggers accesskit-redundant-entry-riskaccesskit-redundant-entry-risk3.3.8 Accessible Authentication — Minimum (Level AA)WCAG 2.2
A cognitive function test is not required for authentication unless a mechanism assists the user (password manager support, copy-paste, autofill).
accesskit-auth-paste-blockedautocomplete attribute — password managers may not recognize these fields. Triggers accesskit-auth-missing-autocomplete3.3.9 Accessible Authentication — Enhanced (Level AAA)WCAG 2.2
No cognitive function tests at all for authentication — even image-recognition CAPTCHAs ("select all traffic lights") are failures at this level.
accesskit-auth-captcha-cognitivePrinciple 4: Robust
Content must be robust enough that it can be interpreted by a wide variety of user agents, including assistive technologies.
4.1 Compatible
4.1.2 Name, Role, Value (Level A)WCAG 2.0
For all UI components, the name and role can be programmatically determined; states, properties, and values can be programmatically set; and notifications of changes are available to user agents and assistive technologies.
This menu is visually open
but aria-expanded="false"
4.1.3 Status Messages (Level AA)WCAG 2.0
Status messages can be programmatically determined through role or properties so assistive technologies can present them without receiving focus.