# Accessibility Conformance Report — TrialVector (2026-Q3)

**Based on VPAT® Version 2.5 Rev — WCAG Edition.** This report also maps to Section 508 (Revised).

## Report information

| | |
|---|---|
| **Product** | TrialVector — the civil-litigation operating system (web application, www.trialvector.ai) |
| **Report date** | August 17, 2026 |
| **Evaluation methods** | Automated testing with axe-core 4.13.0 over the route census; the token-contrast + form-label laws in the deterministic suite; keyboard-journey automation; the assistive-technology PROXY (Playwright accessibility-tree walk over the 12 manual tasks, snapshots stored); document inspection (DOCX/PDF). Environments: Chromium 151 (Playwright 1.62). **A human screen-reader session (NVDA/VoiceOver) and disabled-user testing are pending** — see Limitations. |
| **Scope** | The public site and the eight state subtrees (SURFACE-INVENTORY.md), the authenticated workspace through the fixture harness, and the document families in REPRESENTATIVE-SAMPLE.md. |
| **Standards** | WCAG 2.2 Level A and AA (primary); WCAG 2.0/2.1 A and AA (subsumed); Section 508 (Revised). |
| **Contact** | Report a barrier: the form at www.trialvector.ai/accessibility → the monitored review queue. |

## Conformance terms
- **Supports** — the functionality meets the criterion.
- **Partially Supports** — some functionality does not meet the criterion.
- **Does Not Support** — the majority of functionality does not meet the criterion.
- **Not Applicable** — the criterion does not apply.

_Conformance is stated per criterion with remarks; this report makes no blanket product-wide accessibility claim._

**Tally (WCAG 2.2 A + AA, 56 criteria):** Supports 46 · Partially Supports 0 · Does Not Support 0 · Not Applicable 10.

## Table 1 — Perceivable
| Success Criterion | Level | Conformance | Remarks |
|---|---|---|---|
| 1.1.1 Non-text Content (WCAG 2.0) | A | Supports | No informational <img> exists; the three decorative SVGs are aria-hidden. Icon-only controls carry an accessible name (ledger: Images without alt = PASS). |
| 1.2.1 Audio-only and Video-only (Prerecorded) (WCAG 2.0) | A | Not Applicable | The product contains no audio or video media (ledger: Audio/video = NOT APPLICABLE). |
| 1.2.2 Captions (Prerecorded) (WCAG 2.0) | A | Not Applicable | No media. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) (WCAG 2.0) | A | Not Applicable | No media. |
| 1.2.4 Captions (Live) (WCAG 2.0) | AA | Not Applicable | No live media. |
| 1.2.5 Audio Description (Prerecorded) (WCAG 2.0) | AA | Not Applicable | No media. |
| 1.3.1 Info and Relationships (WCAG 2.0) | A | Supports | Semantic landmarks, headings, lists and data tables (scoped <th> + caption); forms wired through the <Field> primitive (label[for], aria-describedby). The offline state carries a real <h1> (ADA-7). Verified by axe across the census and the AT-proxy tree walk. |
| 1.3.2 Meaningful Sequence (WCAG 2.0) | A | Supports | DOM order matches reading order; verified at 320 CSS px reflow (ADA-6 visual-adaptation spec). |
| 1.3.3 Sensory Characteristics (WCAG 2.0) | A | Supports | Instructions never rely on shape or position alone; status is text, not color-only (ADA-3 status law). |
| 1.3.4 Orientation (WCAG 2.1) | AA | Supports | No orientation lock; responsive at all widths. |
| 1.3.5 Identify Input Purpose (WCAG 2.1) | AA | Supports | Personal-data fields carry autocomplete tokens (ADA-3, T27). |
| 1.4.1 Use of Color (WCAG 2.0) | A | Supports | State is conveyed by text/'icon+text', not color alone (chips carry a word; the deadline trace is text). |
| 1.4.2 Audio Control (WCAG 2.0) | A | Not Applicable | No auto-playing audio. |
| 1.4.3 Contrast (Minimum) (WCAG 2.0) | AA | Supports | The token contrast law computes every text pair in both themes ≥ 4.5:1 (the primary button ink flipped to navy 4.59:1; accent/warn have text shades). FX-2 (2026-08-23): every ground text sits on is a flat token fill (the html radial wash and the panel/console/stat gradients removed) so axe evaluates every pair instead of filing it incomplete, and no component may paint a raw text color (white/black/hex) — the guard that would have caught the one theme-fixed clause the 08-23 audit found on /served and /paths (≈1.1:1 on the Paper theme, fixed the same day). Evidence: tests/tv-a11y-guards.test.ts (0 failing pairs; the FX-2 laws), axe 0 serious. |
| 1.4.4 Resize Text (WCAG 2.0) | AA | Supports | No text is clipped at the WCAG text-spacing overrides; an 11-px type floor replaced every sub-11-px utility (ADA-5, 658 sites). |
| 1.4.5 Images of Text (WCAG 2.0) | AA | Supports | Text is live text; no images of text. |
| 1.4.10 Reflow (WCAG 2.1) | AA | Supports | No horizontal scroll and no clipped control at 320 CSS px on the sampled pages (ADA-6, after the header reflow fix); wide tables scroll inside named focusable regions. |
| 1.4.11 Non-text Contrast (WCAG 2.1) | AA | Supports | Control borders and the focus ring meet ≥ 3:1 in both themes (--tv-control-border, the two-tone --tv-focus/--tv-focus-halo ring); token law pinned. |
| 1.4.12 Text Spacing (WCAG 2.1) | AA | Supports | Content survives the 1.5/2×/0.12/0.16 overrides with no loss (ADA-6 spec, 4 pages). |
| 1.4.13 Content on Hover or Focus (WCAG 2.1) | AA | Supports | Hover/focus content (tooltips, disclosure) is dismissable and persistent; no hover-only path (ADA-2 disclosure nav). |

## Table 2 — Operable
| Success Criterion | Level | Conformance | Remarks |
|---|---|---|---|
| 2.1.1 Keyboard (WCAG 2.0) | A | Supports | Every journey is keyboard-operable; the file input is focusable; the palettes and modals are keyboard dialogs. Evidence: e2e/a11y-keyboard.spec.ts (6/6), a11y-journeys (7/7), the AT proxy. |
| 2.1.2 No Keyboard Trap (WCAG 2.0) | A | Supports | The one dialog primitive (useDialog) traps then RETURNS focus to the opener on Escape; no other trap (ADA-2). |
| 2.1.4 Character Key Shortcuts (WCAG 2.1) | A | Supports | The only shortcut (⌘/Ctrl-K) uses a modifier; no single-character shortcut exists. |
| 2.2.1 Timing Adjustable (WCAG 2.0) | A | Not Applicable | No time limits on any interaction (ledger: session time limits = NOT APPLICABLE). |
| 2.2.2 Pause, Stop, Hide (WCAG 2.0) | A | Supports | The ten auto-cyclers honor prefers-reduced-motion (they start paused) and expose a Play/Pause control; live regions speak only when the user drives them (ADA-2, useReducedMotion). |
| 2.3.1 Three Flashes or Below Threshold (WCAG 2.0) | A | Supports | No flashing content. |
| 2.4.1 Bypass Blocks (WCAG 2.0) | A | Supports | A skip link is the first Tab stop on every page; scroll-padding keeps the target clear of the sticky header (ADA-2). |
| 2.4.2 Page Titled (WCAG 2.0) | A | Supports | Every route has a specific <title>; the 26 workspace routes gained per-segment titles and the matter/draft pages title themselves with the record name (ADA-7, T14). The AT proxy asserts a non-generic title per task. |
| 2.4.3 Focus Order (WCAG 2.0) | A | Supports | Focus order follows reading order; verified by the keyboard spec. |
| 2.4.4 Link Purpose (In Context) (WCAG 2.0) | A | Supports | Repeated download/decision controls name their object and format; 33 new-tab links are hinted (ADA-2/ADA-3). |
| 2.4.5 Multiple Ways (WCAG 2.0) | AA | Supports | Nav, the ⌘K palette, the rules search, the sitemap and in-context links provide multiple ways to each surface. |
| 2.4.6 Headings and Labels (WCAG 2.0) | AA | Supports | One descriptive <h1> per page, no downward level skip; labels are descriptive (the AT proxy asserts heading order + named controls per task). |
| 2.4.7 Focus Visible (WCAG 2.0) | AA | Supports | A two-tone focus ring reads on any ground; no outline:none remains (ADA-1/ADA-2 focus law, pinned). |
| 2.4.11 Focus Not Obscured (Minimum) (WCAG 2.2) | AA | Supports | scroll-padding-top keeps a focused control clear of the sticky header; asserted in the keyboard spec. |
| 2.5.1 Pointer Gestures (WCAG 2.1) | A | Supports | No multipoint or path-based gesture is required. |
| 2.5.2 Pointer Cancellation (WCAG 2.1) | A | Supports | Actions fire on up-event; no down-event commit. |
| 2.5.3 Label in Name (WCAG 2.1) | A | Supports | Visible label text is contained in the accessible name (the <Field> primitive and named buttons). |
| 2.5.4 Motion Actuation (WCAG 2.1) | A | Not Applicable | No motion-actuated function. |
| 2.5.7 Dragging Movements (WCAG 2.2) | AA | Not Applicable | No function requires a dragging movement (no drag-and-drop, sliders use inputs). |
| 2.5.8 Target Size (Minimum) (WCAG 2.2) | AA | Supports | Buttons/targets are ≥ 24 px; native checkboxes/radios were sized to a 24-px box app-wide and two inline link-buttons gained a 24-px height after the full census found them off-seed (ADA-7, verified live 24×24). axe target-size 0 across the tool desks + 8 state mirrors. |

## Table 3 — Understandable
| Success Criterion | Level | Conformance | Remarks |
|---|---|---|---|
| 3.1.1 Language of Page (WCAG 2.0) | A | Supports | <html lang> is set; the es/ht hubs declare their language for the life of the route (ADA-5, T13). |
| 3.1.2 Language of Parts (WCAG 2.0) | AA | Supports | Foreign-language passages on the es/ht hubs carry the page language; inline foreign terms are rare and glossed. |
| 3.2.1 On Focus (WCAG 2.0) | A | Supports | No context change on focus. |
| 3.2.2 On Input (WCAG 2.0) | A | Supports | No automatic context change on input; forms submit on an explicit control. |
| 3.2.3 Consistent Navigation (WCAG 2.0) | AA | Supports | The nav and workspace sidebar render from one map, consistent across pages. |
| 3.2.4 Consistent Identification (WCAG 2.0) | AA | Supports | Repeated components (download, decision, status) are labeled consistently. |
| 3.2.6 Consistent Help (WCAG 2.2) | A | Supports | The barrier-report form and support paths appear in a consistent location (the accessibility statement + footer). |
| 3.3.1 Error Identification (WCAG 2.0) | A | Supports | Every inline error is a role=alert that names the field and moves focus to it (ADA-3, 47 alerts in src). |
| 3.3.2 Labels or Instructions (WCAG 2.0) | A | Supports | Every control has a programmatic label via <Field>; the census is 0 unlabeled / 0 placeholder-only (ADA-1, T7). |
| 3.3.3 Error Suggestion (WCAG 2.0) | AA | Supports | Errors suggest a correction (e.g. the login email offers 'like name@example.com'); the rules search states its offline cause (ADA-3/ADA-7). |
| 3.3.4 Error Prevention (Legal, Financial, Data) (WCAG 2.0) | AA | Supports | The destructive account-delete requires a typed confirmation phrase and stays disabled (and says so) until it matches (ADA-3). |
| 3.3.7 Redundant Entry (WCAG 2.2) | A | Supports | Multi-step flows carry prior entries forward; no field asks for the same information twice in a session. |
| 3.3.8 Accessible Authentication (Minimum) (WCAG 2.2) | AA | Supports | Sign-in is email + password with no cognitive-function test (no puzzle, no CAPTCHA); password managers and paste are supported (ledger: CAPTCHA = NOT APPLICABLE). |

## Table 4 — Robust
| Success Criterion | Level | Conformance | Remarks |
|---|---|---|---|
| 4.1.1 Parsing (obsolete) (WCAG 2.0) | A | Not Applicable | Removed from WCAG 2.2; not evaluated. React renders well-formed markup regardless. |
| 4.1.2 Name, Role, Value (WCAG 2.0) | A | Supports | Custom controls (dialogs as combobox/listbox, pressed-state chips, aria-current) expose name/role/state; the AT proxy asserts no nameless interactive node in <main> on any task page. Human screen-reader confirmation is pending (D5). |
| 4.1.3 Status Messages (WCAG 2.1) | AA | Supports | Results and completion are announced once through a polite live region (never per token); the rules search announces its count or its offline state (ADA-3/ADA-7 status primitives). |

## Section 508 (Revised) mapping
| Chapter | Conformance | Remarks |
|---|---|---|
| Chapter 3 — Functional Performance Criteria (302) | Supports | The WCAG 2.2 AA results below satisfy the functional criteria; without-vision and with-limited-manipulation performance rest on the pending screen-reader-user session (D5). |
| Chapter 4 — Hardware | Not Applicable | TrialVector is a web application; no hardware is provided. |
| Chapter 5 — Software (501–504) | Supports | The application meets WCAG 2.0/2.1/2.2 Level A and AA as tabulated; authoring tools (the drafting engine) produce accessible DOCX/PDF output (ADA-4). |
| Chapter 6 — Support Documentation and Services (602–603) | Supports | This ACR and the accessibility statement are provided in accessible HTML and DOCX; the barrier-report channel is the support service. |

## Limitations, assumptions, and pending work
- **Human assistive-technology testing is pending** (founder decision D5). This ACR's screen-reader-relevant criteria (1.3.1, 2.4.x, 4.1.2, 4.1.3) rest on the automated accessibility-TREE walk and code review; a screen-reader USER has not yet confirmed them. Recorded honestly in `docs/accessibility/AT-RUNS/2026-Q3.md`.
- **Court-issued and kit PDFs** carry `/Lang` and a title but are not yet fully tagged (Phase 4b); the accessible path is the on-screen HTML of every rule and form.
- **Third-party content:** Stripe hosted checkout (Stripe's own conformance) and CourtListener data are outside our DOM; the on-site path around each is accessible.
- The report is refreshed each quarter and whenever a dark state lane unlocks.

_Generated by `scripts/a11y/acr.mjs` from the evidence ledger. Do not hand-edit; change the CRITERIA table and regenerate._
