We ran the pack on our own site
We sell an accessibility pack, so we pointed it at ourselves. It found five real issues, one of them Critical, and we fixed all five. Here is what it found, where the site stands now across every WCAG 2.2 AA criterion, and the live audit that gates every build. It is evidence, and a sample of what the ADA Conformance Pack produces. Last run August 2, 2026.
What the pack found here, and fixed
- Critical
The mobile menu left 32 controls tabbable behind its own opaque overlay.
- Major
The theme toggle announced a pressed state that contradicted its own name.
- Major
The arrow on the primary buttons failed text contrast in both themes.
- Minor
A standalone link underline sat below the 3 to 1 floor in light mode.
- Minor
A status region sat in the markup but never actually announced.
Every fix is in the site's git history and was re-measured after the change. This is the pack's own posture turned on its author: find the real issue, ship the fix, and never call it done for you.
Where the site stands now
A conformance record scored every one of the 55 WCAG 2.2 AA success criteria across the eight public pages.
- 43
- Supports
- 3
- Partially supports
- 9
- Not applicable
- 0
- Does not support
The three partial marks are the honest edges. Two design criteria still want a real-browser zoom pass, and the embedded Polar checkout is third-party content we do not control, so this site makes a statement of partial conformance for that one component. A screen reader pass and a forced-colors pass are still on a human checklist, listed rather than assumed. The full VPAT-shaped record is available to procurement on request.
The live audit, published in full
This is the axe run that gates every build: 0 violations across 9 pages, 2 viewports, and 2 themes. The numbers come from the run itself, not from us.
Accessibility conformance report
Property: tokenstoagents.com, public pages
Date of test: 2026-08-02
Standard: WCAG 2.2 Level AA, plus the regulatory profile (WCAG 2.1 AA, the DOJ ADA Title II baseline)
Automated engine: axe-core 4.12.1 via Puppeteer (headless Chromium)
Scope: 9 pages x 2 viewports x 2 themes = 36 page renders
This report is generated by the same gate that runs on every build of this site. It is published as evidence, and as a sample of the output format the ADA Conformance Pack produces.
Result
- Violations: 0
- Checks passed: 808
- Flagged for human review: 36
- Distinct rules exercised: 34
No automated violations were detected at WCAG 2.2 AA across any page or viewport.
Per page
| Page | Viewport | Theme | Violations | Passed | Needs review |
|---|---|---|---|---|---|
Landing (/) | Desktop 1280x800 | light | 0 | 21 | 1 |
ADA Conformance Pack (/ada) | Desktop 1280x800 | light | 0 | 26 | 1 |
Install (/ada/install) | Desktop 1280x800 | light | 0 | 22 | 1 |
Enterprise (/ada/enterprise) | Desktop 1280x800 | light | 0 | 29 | 1 |
Terms (/terms) | Desktop 1280x800 | light | 0 | 18 | 1 |
Privacy (/privacy) | Desktop 1280x800 | light | 0 | 18 | 1 |
Support (/support) | Desktop 1280x800 | light | 0 | 18 | 1 |
Changelog (/changelog) | Desktop 1280x800 | light | 0 | 19 | 1 |
Accessibility report (/accessibility-report) | Desktop 1280x800 | light | 0 | 29 | 1 |
Landing (/) | Mobile 320x720 | light | 0 | 21 | 1 |
ADA Conformance Pack (/ada) | Mobile 320x720 | light | 0 | 26 | 1 |
Install (/ada/install) | Mobile 320x720 | light | 0 | 23 | 1 |
Enterprise (/ada/enterprise) | Mobile 320x720 | light | 0 | 30 | 1 |
Terms (/terms) | Mobile 320x720 | light | 0 | 18 | 1 |
Privacy (/privacy) | Mobile 320x720 | light | 0 | 18 | 1 |
Support (/support) | Mobile 320x720 | light | 0 | 18 | 1 |
Changelog (/changelog) | Mobile 320x720 | light | 0 | 19 | 1 |
Accessibility report (/accessibility-report) | Mobile 320x720 | light | 0 | 31 | 1 |
Landing (/) | Desktop 1280x800 | dark | 0 | 21 | 1 |
ADA Conformance Pack (/ada) | Desktop 1280x800 | dark | 0 | 26 | 1 |
Install (/ada/install) | Desktop 1280x800 | dark | 0 | 22 | 1 |
Enterprise (/ada/enterprise) | Desktop 1280x800 | dark | 0 | 29 | 1 |
Terms (/terms) | Desktop 1280x800 | dark | 0 | 18 | 1 |
Privacy (/privacy) | Desktop 1280x800 | dark | 0 | 18 | 1 |
Support (/support) | Desktop 1280x800 | dark | 0 | 18 | 1 |
Changelog (/changelog) | Desktop 1280x800 | dark | 0 | 19 | 1 |
Accessibility report (/accessibility-report) | Desktop 1280x800 | dark | 0 | 29 | 1 |
Landing (/) | Mobile 320x720 | dark | 0 | 21 | 1 |
ADA Conformance Pack (/ada) | Mobile 320x720 | dark | 0 | 26 | 1 |
Install (/ada/install) | Mobile 320x720 | dark | 0 | 23 | 1 |
Enterprise (/ada/enterprise) | Mobile 320x720 | dark | 0 | 30 | 1 |
Terms (/terms) | Mobile 320x720 | dark | 0 | 18 | 1 |
Privacy (/privacy) | Mobile 320x720 | dark | 0 | 18 | 1 |
Support (/support) | Mobile 320x720 | dark | 0 | 18 | 1 |
Changelog (/changelog) | Mobile 320x720 | dark | 0 | 19 | 1 |
Accessibility report (/accessibility-report) | Mobile 320x720 | dark | 0 | 31 | 1 |
Flagged for human review
axe could not decide these automatically. Each was reviewed by hand.
color-contraston /: Elements must meet minimum color contrast ratio thresholds (3 element(s))color-contraston /ada: Elements must meet minimum color contrast ratio thresholds (7 element(s))color-contraston /ada/install: Elements must meet minimum color contrast ratio thresholds (4 element(s))color-contraston /ada/enterprise: Elements must meet minimum color contrast ratio thresholds (5 element(s))color-contraston /terms: Elements must meet minimum color contrast ratio thresholds (3 element(s))color-contraston /privacy: Elements must meet minimum color contrast ratio thresholds (3 element(s))color-contraston /support: Elements must meet minimum color contrast ratio thresholds (3 element(s))color-contraston /changelog: Elements must meet minimum color contrast ratio thresholds (3 element(s))color-contraston /accessibility-report: Elements must meet minimum color contrast ratio thresholds (3 element(s))
Rules exercised
Every rule below ran against every page in scope.
aria-allowed-attr: Elements must only use supported ARIA attributesaria-conditional-attr: ARIA attributes must be used as specified for the element’s rolearia-deprecated-role: Deprecated ARIA roles must not be usedaria-hidden-body: aria-hidden=“true” must not be present on the document bodyaria-hidden-focus: ARIA hidden element must not be focusable or contain focusable elementsaria-prohibited-attr: Elements must only use permitted ARIA attributesaria-required-attr: Required ARIA attributes must be providedaria-required-children: Certain ARIA roles must contain particular childrenaria-roles: ARIA roles used must conform to valid valuesaria-valid-attr: ARIA attributes must conform to valid namesaria-valid-attr-value: ARIA attributes must conform to valid valuesautocomplete-valid: autocomplete attribute must be used correctlybutton-name: Buttons must have discernible textbypass: Page must have means to bypass repeated blockscolor-contrast: Elements must meet minimum color contrast ratio thresholdsdefinition-list:<dl>elements must only directly contain properly-ordered<dt>and<dd>groups,<script>,<template>or<div>elementsdlitem:<dt>and<dd>elements must be contained by a<dl>document-title: Documents must have<title>element to aid in navigationduplicate-id-aria: IDs used in ARIA and labels must be uniqueform-field-multiple-labels: Form field must not have multiple label elementshtml-has-lang:<html>element must have a lang attributehtml-lang-valid:<html>element must have a valid value for the lang attributelabel: Form elements must have labelslink-in-text-block: Links must be distinguishable without relying on colorlink-name: Links must have discernible textlist:<ul>and<ol>must only directly contain<li>,<script>or<template>elementslistitem:<li>elements must be contained in a<ul>or<ol>meta-viewport: Zooming and scaling must not be disablednested-interactive: Interactive controls must not be nestedscrollable-region-focusable: Scrollable region must have keyboard accesssummary-name: Summary elements must have discernible texttarget-size: All touch targets must be 24px large, or leave sufficient spacetd-headers-attr: Table cell headers attributes must refer to other<th>elements in the same tableth-has-data-cells: Table headers in a data table must refer to data cells
What this report does not cover
Automated testing catches roughly 30 to 40 percent of real accessibility issues. It cannot judge whether a heading describes the section beneath it, whether a button name matches what the button actually does, whether focus order matches reading order for a person using the page to get something done, or whether an error message tells a user how to recover.
Those are human decisions. A clean automated report is a floor, not a certificate, and no tool, including this one, can confer legal compliance. This document reports conformance testing only. It is not legal advice.
Method
- The site is built to static HTML and served locally.
- Each page is loaded in headless Chromium at each viewport.
- Reduced motion is emulated so measurements are taken against the resting state rather than mid-transition, which is the state a reader actually reads and the only one that gives repeatable results.
- axe-core runs with the WCAG 2.0, 2.1, and 2.2 A and AA rule tags.
- The build fails if any violation is found.
Reproduce with npm run a11y:report in this repository.
## Accessibility conformance report
**Property:** tokenstoagents.com, public pages
**Date of test:** 2026-08-02
**Standard:** WCAG 2.2 Level AA, plus the regulatory profile (WCAG 2.1 AA, the DOJ ADA Title II baseline)
**Automated engine:** axe-core 4.12.1 via Puppeteer (headless Chromium)
**Scope:** 9 pages x 2 viewports x 2 themes = 36 page renders
This report is generated by the same gate that runs on every build of this
site. It is published as evidence, and as a sample of the output format the
ADA Conformance Pack produces.
## Result
- **Violations: 0**
- Checks passed: 808
- Flagged for human review: 36
- Distinct rules exercised: 34
No automated violations were detected at WCAG 2.2 AA across any page or viewport.
## Per page
| Page | Viewport | Theme | Violations | Passed | Needs review |
| --- | --- | --- | --- | --- | --- |
| Landing (`/`) | Desktop 1280x800 | light | 0 | 21 | 1 |
| ADA Conformance Pack (`/ada`) | Desktop 1280x800 | light | 0 | 26 | 1 |
| Install (`/ada/install`) | Desktop 1280x800 | light | 0 | 22 | 1 |
| Enterprise (`/ada/enterprise`) | Desktop 1280x800 | light | 0 | 29 | 1 |
| Terms (`/terms`) | Desktop 1280x800 | light | 0 | 18 | 1 |
| Privacy (`/privacy`) | Desktop 1280x800 | light | 0 | 18 | 1 |
| Support (`/support`) | Desktop 1280x800 | light | 0 | 18 | 1 |
| Changelog (`/changelog`) | Desktop 1280x800 | light | 0 | 19 | 1 |
| Accessibility report (`/accessibility-report`) | Desktop 1280x800 | light | 0 | 29 | 1 |
| Landing (`/`) | Mobile 320x720 | light | 0 | 21 | 1 |
| ADA Conformance Pack (`/ada`) | Mobile 320x720 | light | 0 | 26 | 1 |
| Install (`/ada/install`) | Mobile 320x720 | light | 0 | 23 | 1 |
| Enterprise (`/ada/enterprise`) | Mobile 320x720 | light | 0 | 30 | 1 |
| Terms (`/terms`) | Mobile 320x720 | light | 0 | 18 | 1 |
| Privacy (`/privacy`) | Mobile 320x720 | light | 0 | 18 | 1 |
| Support (`/support`) | Mobile 320x720 | light | 0 | 18 | 1 |
| Changelog (`/changelog`) | Mobile 320x720 | light | 0 | 19 | 1 |
| Accessibility report (`/accessibility-report`) | Mobile 320x720 | light | 0 | 31 | 1 |
| Landing (`/`) | Desktop 1280x800 | dark | 0 | 21 | 1 |
| ADA Conformance Pack (`/ada`) | Desktop 1280x800 | dark | 0 | 26 | 1 |
| Install (`/ada/install`) | Desktop 1280x800 | dark | 0 | 22 | 1 |
| Enterprise (`/ada/enterprise`) | Desktop 1280x800 | dark | 0 | 29 | 1 |
| Terms (`/terms`) | Desktop 1280x800 | dark | 0 | 18 | 1 |
| Privacy (`/privacy`) | Desktop 1280x800 | dark | 0 | 18 | 1 |
| Support (`/support`) | Desktop 1280x800 | dark | 0 | 18 | 1 |
| Changelog (`/changelog`) | Desktop 1280x800 | dark | 0 | 19 | 1 |
| Accessibility report (`/accessibility-report`) | Desktop 1280x800 | dark | 0 | 29 | 1 |
| Landing (`/`) | Mobile 320x720 | dark | 0 | 21 | 1 |
| ADA Conformance Pack (`/ada`) | Mobile 320x720 | dark | 0 | 26 | 1 |
| Install (`/ada/install`) | Mobile 320x720 | dark | 0 | 23 | 1 |
| Enterprise (`/ada/enterprise`) | Mobile 320x720 | dark | 0 | 30 | 1 |
| Terms (`/terms`) | Mobile 320x720 | dark | 0 | 18 | 1 |
| Privacy (`/privacy`) | Mobile 320x720 | dark | 0 | 18 | 1 |
| Support (`/support`) | Mobile 320x720 | dark | 0 | 18 | 1 |
| Changelog (`/changelog`) | Mobile 320x720 | dark | 0 | 19 | 1 |
| Accessibility report (`/accessibility-report`) | Mobile 320x720 | dark | 0 | 31 | 1 |
## Flagged for human review
axe could not decide these automatically. Each was reviewed by hand.
- `color-contrast` on /: Elements must meet minimum color contrast ratio thresholds (3 element(s))
- `color-contrast` on /ada: Elements must meet minimum color contrast ratio thresholds (7 element(s))
- `color-contrast` on /ada/install: Elements must meet minimum color contrast ratio thresholds (4 element(s))
- `color-contrast` on /ada/enterprise: Elements must meet minimum color contrast ratio thresholds (5 element(s))
- `color-contrast` on /terms: Elements must meet minimum color contrast ratio thresholds (3 element(s))
- `color-contrast` on /privacy: Elements must meet minimum color contrast ratio thresholds (3 element(s))
- `color-contrast` on /support: Elements must meet minimum color contrast ratio thresholds (3 element(s))
- `color-contrast` on /changelog: Elements must meet minimum color contrast ratio thresholds (3 element(s))
- `color-contrast` on /accessibility-report: Elements must meet minimum color contrast ratio thresholds (3 element(s))
## Rules exercised
Every rule below ran against every page in scope.
- `aria-allowed-attr`: Elements must only use supported ARIA attributes
- `aria-conditional-attr`: ARIA attributes must be used as specified for the element's role
- `aria-deprecated-role`: Deprecated ARIA roles must not be used
- `aria-hidden-body`: aria-hidden="true" must not be present on the document body
- `aria-hidden-focus`: ARIA hidden element must not be focusable or contain focusable elements
- `aria-prohibited-attr`: Elements must only use permitted ARIA attributes
- `aria-required-attr`: Required ARIA attributes must be provided
- `aria-required-children`: Certain ARIA roles must contain particular children
- `aria-roles`: ARIA roles used must conform to valid values
- `aria-valid-attr`: ARIA attributes must conform to valid names
- `aria-valid-attr-value`: ARIA attributes must conform to valid values
- `autocomplete-valid`: autocomplete attribute must be used correctly
- `button-name`: Buttons must have discernible text
- `bypass`: Page must have means to bypass repeated blocks
- `color-contrast`: Elements must meet minimum color contrast ratio thresholds
- `definition-list`: `<dl>` elements must only directly contain properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements
- `dlitem`: `<dt>` and `<dd>` elements must be contained by a `<dl>`
- `document-title`: Documents must have `<title>` element to aid in navigation
- `duplicate-id-aria`: IDs used in ARIA and labels must be unique
- `form-field-multiple-labels`: Form field must not have multiple label elements
- `html-has-lang`: `<html>` element must have a lang attribute
- `html-lang-valid`: `<html>` element must have a valid value for the lang attribute
- `label`: Form elements must have labels
- `link-in-text-block`: Links must be distinguishable without relying on color
- `link-name`: Links must have discernible text
- `list`: `<ul>` and `<ol>` must only directly contain `<li>`, `<script>` or `<template>` elements
- `listitem`: `<li>` elements must be contained in a `<ul>` or `<ol>`
- `meta-viewport`: Zooming and scaling must not be disabled
- `nested-interactive`: Interactive controls must not be nested
- `scrollable-region-focusable`: Scrollable region must have keyboard access
- `summary-name`: Summary elements must have discernible text
- `target-size`: All touch targets must be 24px large, or leave sufficient space
- `td-headers-attr`: Table cell headers attributes must refer to other `<th>` elements in the same table
- `th-has-data-cells`: Table headers in a data table must refer to data cells
## What this report does not cover
Automated testing catches roughly 30 to 40 percent of real accessibility
issues. It cannot judge whether a heading describes the section beneath it,
whether a button name matches what the button actually does, whether focus
order matches reading order for a person using the page to get something
done, or whether an error message tells a user how to recover.
Those are human decisions. A clean automated report is a floor, not a
certificate, and no tool, including this one, can confer legal compliance.
This document reports conformance testing only. It is not legal advice.
## Method
1. The site is built to static HTML and served locally.
2. Each page is loaded in headless Chromium at each viewport.
3. Reduced motion is emulated so measurements are taken against the resting
state rather than mid-transition, which is the state a reader actually
reads and the only one that gives repeatable results.
4. axe-core runs with the WCAG 2.0, 2.1, and 2.2 A and AA rule tags.
5. The build fails if any violation is found.
Reproduce with `npm run a11y:report` in this repository.