Judge’s gavel on a desk with people in the background during a legal proceeding.

Image description: Judge’s gavel on a desk with people in the background during a legal proceeding.

What gets sued: A field guide to the UI patterns behind 6,666 accessibility complaints

Pattern catalog · 19 exhibits

What gets sued: A field guide to the UI patterns behind 6,666 accessibility complaints

Federal accessibility complaints under the Americans with Disabilities Act rarely allege novel failures. They allege the same nineteen things, over and over, in roughly the same wording. This is a pattern-by-pattern catalog of the page elements, code mistakes, and design choices that show up most often — each anchored in verbatim text pulled from the underlying complaint documents.

The previous installment in this series analyzed the litigation from above: 8,788 federal cases in the US, who is filing them, how concentrated the plaintiff bar is, and how fast cases settle. That view is useful for legal and finance teams. It is less useful for the developer, designer, or product manager who has to ship the actual fix on Monday morning.

This guide takes the opposite view. It works from the page outward. Every entry below is a specific UI pattern — sometimes a single element, sometimes a flow — that a screen-reader user, keyboard user, or low-vision user encountered, could not operate, and which became part of a federal court filing. For each one, we show what plaintiffs actually wrote in the complaint, how often that pattern appears in the dataset, why it triggers litigation, and what the fix looks like.

Evidence index · Cat. 2026.04

19 patterns · ranked by frequency in extracted complaint records

n = 113,120 issues
ID Pattern Page / surface Issues recorded
E·01Form field announced as “edit box”Site-wide forms17,693 ↑
E·02Global navigation / hamburger menuHeader, every page7,934
E·03Missing or invisible focus indicatorSite-wide7,294
E·04Logo and decorative images without alt textHeader, banners6,337
E·05Modal / popup not announced or focusedSite-wide3,476
E·06Video without captions or transcriptHero, content pages3,355
E·07Product card / PLP grid not operableListing pages2,900
E·08Size, quantity, swatch buttons (PDP)Product detail2,725
E·09Empty links and “click here” / “read more”Site-wide2,723
E·10Page structure: missing H1, broken landmarksSite-wide2,485
E·11Checkout flow errors and required fieldsCheckout1,656
E·12Icon-only controls (cart, chat, social)Header, footer1,531
E·13Search bar and autocomplete suggestionsHeader1,252
E·14Accessibility overlay / widget itselfSite-wide1,210
E·15Login, sign-in, password formsAuth pages1,158
E·16Cart page: quantity, remove, updateCart1,022
E·17Mobile-only barriersMobile web / app787
E·18“Add to Cart” — no audible confirmationPDP, cart718
E·19Payment field labels (CVV, card number)Checkout524

Counts reflect categorized issue entries extracted from the complaint documents in the federal court dataset; one case typically generates dozens of entries. Patterns ordered by total recorded issues, not by case-level frequency.

Where the data comes from

The catalog draws from the same federal court dataset described in the prior installment: 8,788 ADA Title III website-accessibility cases pulled from PACER (the federal judiciary’s Public Access to Court Electronic Records system), with 6,666 individual issue descriptions extracted from the complaint documents and tagged into 27 functional categories — global navigation, screen reader announcements, keyboard navigation, forms, modals, payment, and so on.

Every verbatim quote in the entries below is reproduced from the issue extracts as it appears in the underlying complaint, with light copy-edits only to fix obvious OCR artifacts (e.g., “A nnounced” → “Announced”) that were introduced when the court records were scanned. Issue counts reflect the number of categorized entries, not the number of unique cases — a single case typically generates dozens of issue entries spanning multiple categories. Where useful we note the relative dominance of a sub-pattern within its category.

Plaintiffs are not litigating exotic, hard-to-find bugs. They are litigating the same checkout, the same logo, the same modal, the same form field, on site after site after site.

Part I · The user journey
Patterns that get sued, in the order a user encounters them

Eight exhibits arranged from arrival to checkout. The page elements where most cases originate sit not at the edges of the site but along the conversion path — header, search, product, cart, checkout — exactly where revenue is generated.

E·02

Global navigation and the unlabeled hamburger menu

Verbatim from complaints
The main menu button is not labeled
The “Skip to Menu” Link Not Working Properly
Missing Skip Link on the Page
The page lacks a skip link or landmark region that would allow keyboard users to jump ahead, forcing them to tab through the header elements
Frequency
7,934issue entries categorized as Global Navigation / Header
301entries specifically about menu, hamburger, or skip-link failures
Why it gets sued

The header is the first interactive surface on every page, and the hamburger button is often the first thing a keyboard user reaches. When that button is rendered as a <div> with a CSS background image, has no accessible name, or expands a menu that traps focus or fails to communicate its open/closed state, the entire site becomes structurally inoperable from the keyboard before the user has touched any actual content.

The skip link is the companion failure. A working "Skip to main content" link is a five-line fix, but it is also the single most efficient screen for whether a development team has accessibility on their checklist at all. Complaints frequently cite both in the same paragraph, because a missing or broken skip link is the canary — if the team didn’t ship a skip link, they almost certainly didn’t ship aria-expanded states either.

The fix

Render the menu trigger as a real <button> with a visible or screen-reader-only text label and a managed aria-expanded attribute. Provide a "Skip to main content" link that becomes visible on focus and lands inside the <main> landmark. Make sure focus enters the menu when it opens, returns to the trigger when it closes, and that Esc dismisses the menu.

SurfaceHeader, every page WCAG 2.2 AA2.4.1 Bypass Blocks · 4.1.2 Name, Role, Value · 2.1.1 Keyboard
E·13

Search bar and autocomplete suggestions

Verbatim from complaints
User cannot operate the Search Bar
Search suggestions that appeared below the Search bar were not keyboard focusable
The user was not aware of the search suggestions after entering a search term into the search bar
Plaintiff was not announced that search results appeared on the screen
Frequency
1,252issue entries on Search & Filtering
164entries specifically on autocomplete, suggestions, or predictive UI
Why it gets sued

Search is rebuilt as a custom component on most large sites — a debounced text input that fires a request on every keystroke and renders a floating list of suggestions inside an absolutely-positioned <div>. The text input itself is usually fine. The suggestion list almost never is. It is rendered outside the input’s DOM context, has no role="listbox", no aria-activedescendant, and no live-region announcement when results appear. A screen-reader user types, hears nothing, hits Enter, and gets a results page they did not know was waiting.

The same architecture pattern recurs in faceted-search filter panels and in the results-list itself: keyboard-focusable elements that are visually present but never announced. Complaints about search are rarely about the search box; they are about everything that appears after the user types.

The fix

Use the established WAI-ARIA Combobox pattern: role="combobox" on the input with aria-expanded, aria-controls, and aria-activedescendant wired to a role="listbox" of suggestions. Add a polite live region that announces result counts. Make sure the suggestion list is reachable with the down-arrow key, not just the mouse.

SurfaceHeader search · search results page WCAG 2.2 AA4.1.2 Name, Role, Value · 4.1.3 Status Messages · 2.1.1 Keyboard
E·07

Product listing card and the PLP grid

Verbatim from complaints
The user cannot operate this filter
User cannot operate the filters menu
attributes and inaccessible filters
The result prevents the screen-reader user from using the ‘Filter’ tool
Frequency
2,900issue entries on Product Listing Page
30cases with detailed PLP issue extraction
Why it gets sued

The PLP grid concentrates several anti-patterns into one screen. Each tile is typically a clickable card with three or four interactive children — image link, title link, color swatches, quick-add button — wrapped in another link to the product page. The result is nested interactive elements (an HTML error), redundant link text (“Hero Dash Three Graphic Image Link” repeating four times), and color swatches built from <div> elements with click handlers but no role and no name.

The filter sidebar adds a second category of failure. Filter facets are usually checkbox lists, but built with custom div-and-span elements styled to look like checkboxes, with the actual <input> hidden offscreen. When that hidden input loses its association — through a CSS rule, a JavaScript event handler that swallows space-key presses, or a missing for attribute on the visible label — the filter becomes operable by mouse only.

The fix

Use one anchor per tile with descriptive text, not three links per product. Render swatches as real <button> elements inside a role="radiogroup". Build filter facets on actual <input type="checkbox"> elements with associated <label> tags; style the inputs visibly rather than hiding them. Announce filter changes with a polite live region.

SurfaceProduct listing pages, search results WCAG 2.2 AA1.3.1 Info and Relationships · 2.4.4 Link Purpose · 4.1.2 Name, Role, Value
E·08

Product detail: size, quantity, and swatch buttons

Verbatim from complaints
The ‘Size’ and ‘Quantity’ buttons on product pages are not labeled
The ‘Quantity’ button is not labeled or accessible on product pages
The ‘Size Chart’ button is not labeled on product pages
On the product page the website does not read the size guide information
Frequency
2,725issue entries on Product Detail Page
169entries specifically about size, quantity, swatch, or color selectors
Why it gets sued

The product detail page is where a screen-reader user must make several specific choices in the right order: pick a color, pick a size, set a quantity, then add to cart. Every one of those choices is implemented in modern eCommerce as a custom widget — usually a horizontal row of <button>-shaped <div>s for sizes, color tiles built from CSS-styled divs, and a numeric stepper made from two icon buttons flanking an input. The increase and decrease buttons are routinely shipped with no accessible name; complaints describe them as announced as “button, button” with no indication of what they do.

Size guides and size charts are a separate sub-failure: they almost always live behind a “Size Chart” link that opens a modal, and the link itself frequently has no label, the modal frequently has no announced title, and the table inside frequently has no row or column headers.

The fix

Use real form controls. Color swatches and size selectors should be a role="radiogroup" of role="radio" buttons (or actual radio inputs styled invisibly), each with an accessible name like “Size: Medium”. The quantity stepper should be a labeled number input with paired increment / decrement buttons whose accessible names include the action and the current quantity. Wrap the entire selection block in a fieldset with a legend.

SurfaceProduct detail pages WCAG 2.2 AA1.3.1 Info and Relationships · 4.1.2 Name, Role, Value · 3.3.2 Labels or Instructions
E·18

“Add to Cart” — the button that doesn’t confirm

Verbatim from complaints
Add to Cart Confirmation Not Announced
The ‘Add to Cart’ button is NOT announced and NOT accessible
The “Add to Cart” message not announced for screen reader users
The user is not able to Add to Cart
Frequency
718issue entries on the Add-to-Cart action
78entries specifically using the phrase “not announced” / “no confirmation”
Why it gets sued

Add-to-Cart is the most-tested moment in any eCommerce funnel and one of the most consistently broken for assistive-tech users. The pattern is mechanical: a visitor presses the button, a small confirmation toast or mini-cart drawer appears for two or three seconds, and the cart icon updates a count badge in the header. Sighted users see all three signals. Screen-reader users typically receive zero. The toast renders outside any live region, the drawer appears without focus management, and the cart-count change is delivered as plain DOM mutation that no screen reader will announce.

The result is a button that, from the user’s perspective, does nothing. They press it, they hear nothing, they assume it failed, they press it again. Some complaints describe pressing the button five or six times before realizing the cart had silently accumulated five or six items.

The fix

Wrap the cart-status region in aria-live="polite" and update its text on every successful add. If the design uses a confirmation drawer, move focus to the drawer when it opens and return focus to the original button when it closes. Update the cart-count badge with a screen-reader-only announcement like “1 item added. Cart total: 3 items.”

SurfaceProduct detail · cart drawer · listing pages WCAG 2.2 AA4.1.3 Status Messages · 4.1.2 Name, Role, Value · 2.4.3 Focus Order
E·12

Icon-only controls: the cart, the chat bubble, the social row

Verbatim from complaints
The shopping cart icon is not labeled properly
The Account and Cart icons are not labeled on Defendant’s Digital Platform
Chat Icon Not Keyboard Accessible
The social media links in the footer are not labeled
Frequency
1,531issue entries on Icons + Visual Elements
40entries specifically on cart-icon labeling
Why it gets sued

Icon-only controls fail in a predictable way: the visible content is an SVG or icon-font glyph, the accessible content is empty, and screen-reader output collapses to the element’s structural role with no name. The cart icon ends up announced as “link” or “collapsed”; the chat bubble as “button”; the row of social icons in the footer as “link, link, link, link, link”. The user has no way to know what any of them do.

Cart icons fail more often than other icons for an architectural reason: many implementations render the cart count inside the icon’s accessible name (e.g., the icon shows “0” inside the SVG), and the screen reader picks up only the digit. Complaints describe the cart icon being announced as “3, link” or “0, link”, with no indication that “3” refers to a quantity in a shopping cart.

The fix

Every icon-only control needs an accessible name. Add an aria-label on the button or wrap a visually-hidden text label inside it: "Shopping cart, 3 items". Avoid putting count digits inside the icon’s accessible name without context. For decorative icons that sit alongside visible text, use aria-hidden="true" on the icon and let the text carry the label.

SurfaceHeader · footer · floating widgets WCAG 2.2 AA1.1.1 Non-text Content · 4.1.2 Name, Role, Value · 2.4.4 Link Purpose
E·11

Checkout: the form that can’t be filled out

Verbatim from complaints
On the checkout page the error message is not announced
The user is not able to Enter Billing Details at checkout
Dropdowns in the Billing Information section cannot be operated using the Space key
Checkout error messages are vague, failing to inform users what needs to be corrected
Frequency
1,656issue entries on Checkout Flow
124entries on error messages, required fields, or billing-form barriers
Why it gets sued

Checkout concentrates more compliance risk per square pixel than any other page on a commerce site, and the pattern of failure is dense. Address dropdowns rendered as custom <div> components that ignore the space key. Required-field markers shown only as a red asterisk, with no aria-required and no programmatic association. Inline error messages painted in red text below the field, with no aria-describedby linking the field to the error and no live-region announcement when validation fails. The user fills in the form, presses “Continue,” is silently bounced back, and has no way to know which fields failed or why.

The same complaint language recurs across hundreds of cases: error message is not announced, error messages are vague, cannot enter billing information. These are not isolated bugs. They are the default behavior of most commerce checkout components shipped without explicit accessibility work.

The fix

Use real <label> elements associated to inputs by for/id. Mark required fields with aria-required="true" and indicate requirement in visible text, not just color. On validation failure, render the error message inside the input’s aria-describedby target, give the failing field aria-invalid="true", and move keyboard focus to the first invalid field. Provide a summary error region at the top of the form with anchor links to each failing field.

SurfaceCheckout · address forms · contact forms WCAG 2.2 AA3.3.1 Error Identification · 3.3.3 Error Suggestion · 1.3.1 Info and Relationships · 4.1.3 Status Messages
E·19

Payment: the CVV field that has no label

Verbatim from complaints
The ‘Debit or Credit Card’ edit fields on the checkout page are NOT labeled
When the user tries to Credit Card, there is not a proper label identifying the CVV input field
The user is not able to Enter credit card information at checkout
The user is not able to Add Credit Card at checkout
Frequency
524issue entries on Payment
75entries specifically on credit-card, CVV, or card-number labeling
Why it gets sued

The payment block is unusual because it is often delivered by an embedded third-party iframe — Stripe Elements, Braintree Hosted Fields, an Adyen drop-in. Inside the iframe, the payment vendor’s own form is usually well-labeled. But the moment a site builds its own card capture, or wraps the embedded fields in custom layout that overrides the labels with visual placeholders, the four fields — number, expiration, CVV, postal code — become a row of blank inputs to a screen reader.

The CVV field is the most consistently mislabeled because designers commonly replace its label with a question-mark icon that opens a tooltip explaining what a CVV is. The tooltip is not the label; the field still needs a programmatic name. When it doesn’t have one, the screen reader announces the entire payment block as “edit, edit, edit, edit” and the transaction stops.

The fix

If using a third-party hosted-fields integration, follow the vendor’s accessibility guidance — most provide a documented way to label fields from outside the iframe. If building custom card capture, every input needs a real <label> element with a visible text label, plus autocomplete="cc-number" / cc-exp" / cc-csc" attributes so password managers and assistive tech can identify the fields by purpose.

SurfaceCheckout · payment step WCAG 2.2 AA3.3.2 Labels or Instructions · 1.3.5 Identify Input Purpose · 4.1.2 Name, Role, Value
E·16

Cart page: the quantity stepper and the missing “remove”

Verbatim from complaints
As a result, screen reader users cannot remove items from the cart
Plaintiff was unable to remove any product from the shopping cart
Plaintiff was unable to adjust the quantity of items in the shopping cart
Inside the shopping cart, the quantity option is not properly labeled
Frequency
1,022issue entries on the Shopping Cart / Basket page
174entries specifically on quantity, remove, or update operations
Why it gets sued

The cart page repeats the PDP quantity-stepper failure but at higher stakes: a screen-reader user who cannot operate the stepper cannot complete the order. The “Remove” control is its own anti-pattern — it is usually a small × icon next to each line item, often with no visible text, no aria-label, and no announcement when the row is removed. The user presses what they hope is the remove button, the row disappears, and the screen reader stays silent. There is no way to confirm the action succeeded.

Several complaints describe a related failure mode: the cart’s running total updates dynamically when quantities change or items are removed, but the new total is rendered as ordinary DOM text outside any live region, so the user has no idea what they will be charged.

The fix

Each line item should expose a labeled remove button (e.g., "Remove Blue T-Shirt, size M, from cart"). Quantity steppers should announce their current value as part of the accessible name or via paired live-region updates. The cart subtotal should sit inside an aria-live="polite" region so changes are announced. Confirm removals with an undo affordance.

SurfaceCart / basket page WCAG 2.2 AA4.1.3 Status Messages · 4.1.2 Name, Role, Value · 2.4.4 Link Purpose
Part II · Site-Wide Patterns
Failures that recur on every page, regardless of journey

Seven exhibits that are not tied to a specific funnel step. These are infrastructure issues — page-level conventions, global components, content baseline — and a single failure here is reproduced on every page where the component appears.

E·01

The form field announced as “edit box”

Verbatim from complaints
Plaintiff encountered unlabeled form fields announced only as “edit box,” and could not apply promotions or complete payment
On Sign in page the input field has no label and it is not announced
Missing visual labels on form fields • Issue: No labels for “Name” and “Email Address” fields
The increase and decrease buttons are similarly unlabeled and are not announced to screen-reader users
Frequency
17,693issue entries categorized as Screen Reader Announcements
2,522issue entries directly under the Forms category
Why it gets sued

This is the single largest category in the dataset because it is the lowest-cost issue to detect and the highest-cost issue to ignore. A screen reader walks the DOM, hits an <input>, and reads its accessible name — which it computes from, in order: aria-labelledby, aria-label, an associated <label for>, the title attribute, or the placeholder. If none of those exist, the screen reader announces only the role: “edit box” or “edit, blank.” That phrase, almost verbatim, recurs in hundreds of complaint records.

The reason it is so common is structural. Modern design systems frequently render placeholder text inside the input as a stand-in for the visible label, and developers assume the placeholder is doing the labeling work. It isn’t. The placeholder disappears when the user types, leaves no programmatic name, and renders the field unusable for anyone who arrives at it later in the flow or returns to it after an error.

The fix

Every interactive control gets a visible label, programmatically associated. <label for="email">Email</label><input id="email" type="email"> is the canonical pattern. Placeholders are supplementary hints, not substitutes. For controls where a visible label is genuinely undesirable (search boxes, icon buttons), use aria-label with descriptive text — never with the placeholder duplicated.

SurfaceEvery form on the site WCAG 2.2 AA3.3.2 Labels or Instructions · 1.3.1 Info and Relationships · 4.1.2 Name, Role, Value
E·05

The modal that is neither announced nor focused

Verbatim from complaints
This pop-up is not announced or given focus
However, focus does not move into the pop-up
The dialog box did not automatically receive focus
The pop-up does not receive focus and is not announced
Frequency
3,476issue entries on Popups, Modals, and Overlays
1,165entries that mention focus, escape, or dismissal
Why it gets sued

The phrase “not announced or given focus” appears verbatim in over 400 complaint entries and is one of the most replicated sentences in the entire dataset. It describes a specific failure mode: a modal or dialog appears on the page (often automatically — newsletter signup, age gate, location confirmation), the visible content shifts, but the screen reader is given no signal that anything has changed. Focus remains on the underlying page. The user continues tabbing through whatever was beneath the modal, completely unaware that a blocking dialog has appeared.

This is the textbook case of a modal that fails on every dimension simultaneously: no role="dialog", no aria-modal="true", no programmatic focus shift on open, no focus trap while open, no Esc-to-close behavior, no announced title. Because all of these failures travel together, fixing any one of them in isolation does not move the case meter.

The fix

Use an established dialog pattern (the WAI-ARIA Authoring Practices spec is the reference). On open: move focus to the first focusable element inside the dialog, set aria-modal="true" and role="dialog", label the dialog with aria-labelledby pointing to its heading. While open: trap focus within the dialog. On close: return focus to the element that triggered it. Honor the Esc key. If the modal interrupts a flow (e.g., autoplaying on page load), give the user a single mechanism to dismiss it permanently.

SurfaceNewsletter pop-ups · cookie banners · age gates · cart-confirmation drawers WCAG 2.2 AA4.1.2 Name, Role, Value · 2.4.3 Focus Order · 2.1.2 No Keyboard Trap · 4.1.3 Status Messages
E·03

The missing focus indicator

Verbatim from complaints
Keyboard focus indicators that are not discernible
Additionally, they do not receive visible focus indicators
the keyboard focus indicator was not discernible
Additional violations include keyboard traps
Frequency
7,294issue entries on Keyboard Navigation + Focus
197entries specifically about focus indicators or visible focus
Why it gets sued

Focus indicators are usually killed deliberately, by a developer or designer who saw the default browser outline as visual noise and wrote *:focus { outline: none; } into a global stylesheet. The page now looks cleaner to a sighted mouse user. To a sighted keyboard user — including most low-vision users, motor-impaired users, and users navigating without a mouse — the page becomes unusable. The user can press Tab, but they cannot see where they are.

This is one of the few failure modes that is visible without any assistive technology. A QA reviewer who tabs through the home page once, with no other tooling, will spot it in under a minute. That accessibility teams find it consistently in litigated sites, while internal review missed it, is one of the most reliable signals in the dataset that the site has no keyboard-testing pass at all.

The fix

Never blanket-disable :focus outlines without a replacement. Provide a visible focus style — typically a 2-3px outline with sufficient contrast against both the element and its background — using :focus-visible so the indicator appears for keyboard navigation but not for mouse clicks. Verify it on every interactive component, including custom widgets, links inside cards, and elements with tabindex.

SurfaceEvery interactive element on the site WCAG 2.2 AA2.4.7 Focus Visible · 2.1.1 Keyboard · 1.4.11 Non-text Contrast
E·04

Logo and decorative images without alt text

Verbatim from complaints
Logo Image Missing Alternative Text
Missing Alternative Text for Logo Image
Logo Image Missing Textual Description
An image with a null alt attribute should not have title, aria-label or aria-labelledby attributes
Frequency
6,337issue entries on Images + Alt Text
394entries that specifically cite the site logo
Why it gets sued

The logo is the most-visited image on a website and one of the most consistently broken. It typically lives in a link that wraps it back to the homepage, but the image is shipped with no alt, no aria-label on the link, and no surrounding text. The screen reader announces only “link”, with no information about where it goes. Multiply by every page on the site.

The wider category — images without alt text — covers banner art, product photos, hero illustrations, social-icon glyphs, and the vast catalog of marketing imagery a typical commerce site ships. Complaints in this category often cite specific image filenames, indicating that the plaintiff’s expert ran an automated check that listed every image whose alt attribute was missing or empty when it should have been descriptive.

The fix

Logos should carry alt text describing the company name and, if the logo links somewhere, the destination — alt="Acme Co. — homepage". Decorative images get an empty alt attribute (alt=""), which deliberately hides them from assistive tech. Informative images get descriptive alt text. Avoid auto-generating alt text from filenames or AI captioning without human review; complaint records repeatedly cite cases where overlay tools captioned a company logo as “a blue and yellow sign.”

SurfaceHeader logo · banners · product imagery · marketing pages WCAG 2.2 AA1.1.1 Non-text Content · 2.4.4 Link Purpose
E·09

Empty links and “click here” / “read more”

Verbatim from complaints
The Website includes empty links without text
For example, links like “Read more” do not provide enough context
For example, a link labeled “Click here” did not provide sufficient context
Vague Link Descriptions • Issue: Links like “click here” lack context about their purpose
Frequency
2,723issue entries on Links + Buttons
85entries on empty-link or generic-link-text patterns
Why it gets sued

Screen readers expose a “list of links” view, used heavily by experienced users to scan a page in seconds. That view shows only the link text, divorced from its surrounding paragraph. A page where every blog teaser ends in “Read more” renders to that view as fifteen identical entries. A page with five empty links — <a href="..."></a>, common when icons are inside link wrappers without any text fallback — renders five blanks.

The fix is well-known and the failure is well-known, which is why this pattern keeps appearing in complaints — its persistence indicates a development process with no automated linter for link text and no manual screen-reader pass.

The fix

Every link must have an accessible name describing its destination or action. Replace generic phrases with descriptive ones — “Read more” becomes “Read more about Q3 earnings”. For icon-only links, add visually-hidden text or an aria-label. Run an automated check (axe, Lighthouse, etc.) for empty <a> elements during CI.

SurfaceSite-wide · blog teasers · footer · related-content blocks WCAG 2.2 AAA2.4.4 Link Purpose · 2.4.9 Link Purpose (Link Only)
E·06

Video without captions or transcript

Verbatim from complaints
The Website contains many videos that lack captioning
Lack of closed captions on website videos
There are many more videos which lack closed-captioning on the Website
Frequency
3,355issue entries on Video + Audio Content
86entries that specifically reference captions, autoplay, or audio description
Why it gets sued

Video appears in complaints in two patterns. The first is the obvious one: a marketing video, product demo, or explainer ships without captions, transcript, or any text alternative — and a Deaf or hard-of-hearing visitor cannot access the content. The second is more subtle: a hero video that autoplays on page load, which interferes with screen-reader output and violates pause/stop controls expected at WCAG 2.2 AA level (per SC 2.2.2 Pause, Stop, Hide for moving content and SC 1.4.2 for any audio).

Some complaints in this dataset assert that “Lack of closed captions on website videos are a violation of the ADA,” framed as a legal conclusion. Whether that framing holds varies by jurisdiction and circumstance; what is more durable is that these videos consistently fail WCAG 2.2 AA, the standard most courts and settlement agreements treat as the operative compliance benchmark.

The fix

Provide synchronized captions for all pre-recorded video with audio. Provide a text transcript as well; transcripts are useful for users on muted devices, in low-bandwidth environments, and for indexing. Avoid autoplay; if autoplay is required for design reasons, provide a pause/stop control immediately reachable by keyboard. For video-only content (no audio), provide an audio description or text alternative.

SurfaceHero videos · product demos · marketing pages · YouTube embeds WCAG 2.2 AA1.2.2 Captions (Prerecorded) · 1.2.5 Audio Description (Prerecorded) · 2.2.2 Pause, Stop, Hide
E·15

Login, sign-in, password forms

Verbatim from complaints
User cannot operate the Login form
The user is not able to Login to Account
The user is not able to Sign In to Account
The user is not able to Sign in at Checkout
Frequency
1,158issue entries on User Account + Authentication
Why it gets sued

Sign-in is the gatekeeper for the entire authenticated experience. When the form fails, every page behind it becomes unreachable, and complaints frequently treat that cascade as a single barrier. The pattern is the same form-labeling failure as E·01, often combined with three specific sub-failures: a “Show password” toggle implemented as an icon-only button with no name and no announcement of state change, a CAPTCHA that defeats screen-reader use entirely, and inline errors (“invalid credentials”) that are painted on screen but not announced.

The “remember me” checkbox is an additional recurring sub-failure: rendered as a styled <div>, with the actual <input> hidden offscreen, the checkbox is operable by mouse but not by keyboard or screen reader. The user has no way to opt into a persistent session.

The fix

Use real <input>, <label>, and <button> elements. Make the show/hide-password toggle a real button with an accessible name that updates with state ("Show password" / "Hide password") and announce the change with aria-pressed. Provide an accessible alternative to image-based CAPTCHAs (audio CAPTCHA, or — preferably — replace CAPTCHA with risk-based authentication or hCaptcha’s accessible variants).

SurfaceLogin pages · checkout sign-in · account dashboards WCAG 2.2 AA3.3.2 Labels or Instructions · 4.1.2 Name, Role, Value · 1.1.1 Non-text Content (CAPTCHA)
Part III · Infrastructure and Code-Level Patterns
Failures rooted in markup, structure, and tooling decisions

Four exhibits that describe failures of architecture rather than of any specific UI surface. These are decisions made above the page level — heading discipline, mobile parity, third-party dependencies — whose consequences propagate everywhere.

E·10

Page structure: missing H1, broken landmarks, no language

Verbatim from complaints
Missing heading mark-up – H1
Improper heading structure and missing document language declarations
Main landmark not announced by screen reader • Issue: The <main> landmark is not defined within the page
The page lacks a skip link or landmark region that would allow keyboard users to jump ahead
Frequency
2,485issue entries on Page Structure + Semantics
950+entries citing heading, landmark, or H1 issues specifically
Why it gets sued

Screen readers expose the page through three navigation modes: by heading, by landmark, and by link. A page that ships without an <h1>, without <main>, <nav>, and <footer> landmarks, and without a lang="en" attribute on the <html> element, has stripped out all three of those navigation modes simultaneously. Users have no way to scan, no way to jump to content, and no way for the screen reader to load the right pronunciation engine.

This is an unusually generative failure: a single missing landmark causes a downstream cascade of complaints because every screen-reader navigation strategy that depends on it now fails. Complaints in this category typically list four or five specific structural problems together, presented as evidence that the site has no semantic baseline.

The fix

Every page gets one and only one <h1>, with subheadings (<h2>, <h3>) nested logically. Wrap regions in HTML5 landmark elements: <header>, <nav>, <main>, <aside>, <footer>. Set lang on the root <html> element. Validate with an outline checker or run document.querySelectorAll('h1').length === 1 as a smoke test in CI.

SurfaceEvery page WCAG 2.2 AA1.3.1 Info and Relationships · 2.4.6 Headings and Labels · 3.1.1 Language of Page
E·17

Mobile-only barriers

Verbatim from complaints
Errors are not announced to mobile SRU’s
The menu is not announced to mobile SRU’s (screen reader users)
For example, the ‘Mobile Number’ field label is not announced
Mobile SRUs cannot select the ‘Apple Pay’ button as a payment method
Frequency
787issue entries on Mobile + Responsive
203entries explicitly contrasting mobile vs. desktop behavior
Why it gets sued

Most accessibility QA is done on desktop browsers with NVDA or JAWS. Mobile assistive tech — VoiceOver on iOS, TalkBack on Android — exposes a different rendering of the same DOM, frequently with different bugs. Complaints repeatedly use the abbreviation “mobile SRU” (mobile screen-reader user) to flag failures that are unique to the mobile view: a hamburger menu that works with NVDA on desktop but is silent under VoiceOver, an Apple Pay button that is reachable on a laptop but not on the iPhone equivalent of the page, error messages that announce on desktop but not on mobile.

The dataset suggests that defendants whose desktop accessibility is otherwise solid are still being sued on mobile-specific issues. Mobile parity is its own audit pass.

The fix

Test with VoiceOver on iOS Safari and TalkBack on Android Chrome at minimum, on the same flows that desktop QA covers. Pay particular attention to gesture-based interactions, native payment buttons, and form-field announcement on focus. If a native app exists, run it through the same audit — complaints frequently cover both web and app under the same case.

SurfaceMobile web · native iOS / Android apps WCAG 2.2 AAAll — applied to the mobile rendering · 2.5.1 Pointer Gestures · 2.5.2 Pointer Cancellation
E·14

The accessibility overlay or widget itself

Verbatim from complaints
Accessibility overlay widgets like UserWay cannot and do not fix underlying code-level accessibility barriers
Plaintiff contends that he is familiar with accessiBe’s overlay widget and that it “simply does not work for someone who is completely blind.”
Issues Caused by AccessiBe’s Accessibility Adjustments Plugin: The AccessiBe plugin introduces significant accessibility barriers rather than solving them
Automated accessibility overlay widgets do not provide equal access and may actually create additional barriers for users with disabilities
Frequency
1,210issue entries on Third-Party Components
26entries explicitly naming a vendor or describing overlay-introduced bugs
Why it gets sued

The accessibility overlay is the only exhibit in this catalog where the failure is not in the underlying site at all — it is in the supposed remediation layer that was added to fix it. Complaints in this category describe two distinct harms. The first is that overlays do not actually fix underlying barriers, so the user encounters the same broken modals, mislabeled forms, and unannounced errors regardless of whether the widget is present. The second is more pointed: overlays sometimes introduce new failures by injecting incorrect labels, mis-applying ARIA roles, or interfering with the user’s own assistive tech configuration.

One detail worth noting: complaints in 2024 and 2025 increasingly cite the overlay vendor by name. Two specific complaint passages identify UserWay and AccessiBe in unambiguous language, and recent FTC actions have created an explicit risk that adding an overlay is itself evidence of a failure to do real remediation work — rather than a defense against litigation.

The fix

Treat overlays as a flag, not a fix. If one is currently deployed, plan a real-remediation roadmap that addresses underlying code rather than masking it. The well-tested path is some combination of: an automated scanner integrated in CI, a human audit pass against WCAG 2.2 AA, manual testing with at least one screen reader and keyboard-only navigation, and ongoing accessibility QA in the design and engineering process.

SurfaceSite-wide overlay widget WCAG 2.2 AAOverlays do not satisfy AA conformance · all relevant SCs remain in scope

What these nineteen patterns have in common

The catalog is not a random sample. Read the exhibits in order and a small number of structural patterns surface repeatedly — patterns about why these specific failures dominate, rather than which surface they appear on.

  1. Custom JavaScript components substituting for native HTML elements

    The most-cited failures all involve a <div> doing the job of a <button>, a <label>, a <select>, or a <dialog>. Where the native element is used, the issue is rare. Where it is replaced — usually for visual-design reasons — the issue is reliable.

  2. Missing programmatic associations between visible content and its meaning

    The placeholder treated as a label. The asterisk treated as aria-required. The red border treated as an error message. Sighted users see the relationships visually; assistive-tech users can only see the relationships that exist in the DOM.

  3. Status changes that aren’t announced

    Add to Cart confirmations, search-result counts, validation errors, modal openings, cart-total updates — every dynamic state change in the catalog has at least one verbatim complaint describing it as silent. Status messages and live regions are the single most underused part of the WAI-ARIA toolkit.

  4. Mobile and desktop diverge

    The same component built once with semantic HTML works in both VoiceOver and NVDA. The same component built with custom JS frequently passes desktop-screen-reader QA and fails on mobile, because mobile-screen-reader rendering surfaces different bugs in the same code.

  5. The complaints are templated, but the underlying bugs aren’t fictional

    Boilerplate complaint sentences appear verbatim in hundreds of cases — but the specific element-level findings within each complaint are fact-checkable, and they’re correct. A plaintiff’s law firm using a templated wrapper does not mean the underlying issues are made up; it means the same playbook is being applied against the same recurring bugs.

What to audit first if you don’t have an accessibility program

The catalog above is exhaustive but not prioritized for triage. If a team is starting from zero and wants to know which exhibits to audit before the next release, the dataset suggests a clear ordering — driven both by frequency and by the presence/absence of these patterns in actual complaint records. The list below is not a substitute for a full WCAG 2.2 AA audit, but it covers the failures that recur in the largest share of cases.

Tier 1 — Highest frequency, lowest cost to fix

  • Tab through your homepage with a keyboard. Can you see where focus is at every step? (E·03)
  • Open the page source and confirm every <input> on every form has a real <label>. (E·01)
  • Open every modal with a screen reader. Is it announced? Does focus move into it? (E·05)
  • Run an automated scanner (axe DevTools, Lighthouse) on your top five templates. (E·04, E·09, E·10)

Tier 2 — Highest financial exposure if broken

  • Complete a checkout end-to-end with a screen reader, including a deliberate validation error. Are errors announced? Are required fields announced? (E·11)
  • Add a product to cart with a screen reader. Do you hear that the cart updated? (E·18)
  • Operate the search box and autocomplete with keyboard only. Can you reach and select a suggestion? (E·13)
  • Verify every payment-form input has a real label, not a placeholder. (E·19)

Tier 3 — Easy to overlook in desktop testing

  • Repeat Tier 1 and Tier 2 on iOS Safari with VoiceOver and Android Chrome with TalkBack. (E·17)
  • If you have an accessibility overlay deployed, plan its removal alongside a real-remediation roadmap. (E·14)
  • Audit every video for captions and a transcript. (E·06)
The bottom line

The catalog of what gets sued is small, stable, and visible from the homepage.

The 19 patterns above account for the overwhelming majority of issue entries in 113,120 categorized complaints across 8,788 federal cases. They are not novel. They are not hard to find. They are the same checkout, the same modal, the same logo, the same form field that would surface in any thirty-minute keyboard-and-screen-reader pass over the site.

The asymmetry is the point. The plaintiff’s bar is well-organized, well-resourced, and pattern-matching against this same list with industrial efficiency — half of the cases settle in under 100 days. Defendants, in aggregate, ship the same patterns into production over and over, often with an overlay widget bolted on as a perceived defense.

The work of closing that asymmetry is not legal. It is engineering and design discipline applied against a known, finite list. This article is the list.

Methodology & dataThe 19 exhibits are derived from 113,120 individual issue descriptions categorized into 27 functional buckets, drawn from the complaint documents in 8,788 federal ADA Title III website-accessibility cases (PACER records, 2007–April 2026). Issue counts cited per exhibit reflect categorized entries within the relevant sheet, not unique cases — a single case typically generates dozens of entries. Verbatim quotes are reproduced as they appear in the underlying complaint records, with light correction of OCR artifacts only.

WCAG referencesSuccess Criteria are cited at WCAG 2.2 AA, the version most consistently treated by U.S. federal courts and DOJ settlement agreements as the operative compliance benchmark. WCAG 2.2 introduces additional Success Criteria but is not yet the default reference standard in the litigation analyzed here.

DisclaimersThis guide is informational and not legal advice. Whether any specific UI pattern triggers liability depends on the jurisdiction, the defendant’s category of public accommodation, the plaintiff’s specific injury, and how the issue was pleaded. Several quoted complaint passages assert legal conclusions (e.g., that lack of captions “is a violation of the ADA”) that should be read as plaintiffs’ allegations rather than as established law.

(the federal judiciary’s Public Access to Court Electronic Records system)