# What we enforce, and what we don't. Source: https://customlabs.io/accessibility/ Updated: 2026-09-08 Accessibility # What we enforce, and what we don't. We hold this site to WCAG 2.2 AA. Below is what CI actually checks on every build, and what it doesn't. Same first-party approach as our security review and delivery record: named limits instead of a badge. The standard ## WCAG 2.2 AA, checked at build time. An audit of the built site found five buying-path pages shipping with no page heading, no way to skip the navigation, and a menu that was quietly writing itself into the document outline. Those are fixed, and four checks now run on every build so they can't come back unnoticed. What CI enforces ## Four checks, every build. Each one fails the build with a readable list of what it found, not a silent pass. ### `verify-a11y` Every page has exactly one

inside
, no heading level skips, no headings outside
(so the nav can't reopen the outline), a working skip link, every image has alt text, every link and button has an accessible name, every form control has a label, no positive tabindex, no focusable element nested inside a , and a 24px floor declared on the heading permalink. ### `verify-seo` Canonical URLs, structured data, meta descriptions, and page titles are present, correct, and unique on every route. A search engine and a screen reader both depend on the same thing here: an honest, unambiguous description of what the page actually is. ### `verify-theme` Every text-and-surface colour pairing in both themes clears 4.5:1 contrast, every focus indicator clears 3:1, and no component draws its own focus ring in a colour that skips the check. ### `verify-copy` Prose density and banned filler phrases, which is not an accessibility rule in the WCAG sense but the same instinct: a reader using a screen reader has to sit through every word we didn't cut. What isn't automated ## What this doesn't prove. Read this before the checklist above, not after. - No automated screen-reader pass. verify-a11y checks the markup a screen reader depends on (headings, labels, names), not what one actually announces. - No axe-core or other browser-based scanner in CI. The gate is regex over built HTML, the same approach every other verifier on this site uses, so it catches a fixed, named list of defects, not everything axe would. - Focus order is not machine-checked beyond the skip link. Tab order for on-page content follows document order, but nothing in CI walks a page pressing Tab. - The scroll-in entrance animations honour a reduced-motion preference, but we have verified that by reading the stylesheet, not by testing it with someone who relies on the setting. - Keyboard and screen-reader testing here has been done by the people who built the site, not an independent accessibility audit. Report a problem ## Found something we missed? Tell us what page, what you were trying to do, and what happened instead. [Send a project brief](https://customlabs.io/contact/) and put "Accessibility" in it. We read every one.