Accessibility
Last updated: 2026-10-07
EstateDraftFL is designed to conform to the Web Content Accessibility Guidelines (WCAG) 2.2 at Level AA. This page says what that means, how we check it, what we know is not there yet, and how to reach us.
Our commitment
Estate planning is for every family. We build accessibility into the design system, the questionnaire primitives and every journey — not as an overlay or an add-on — and we publish what we have verified and what we have not.
Standard and scope
Target: WCAG 2.2 Level AA for every page we author, including our multilingual pages, the firm console, our emails and the documents we generate (Word documents carry real headings and a declared language; PDF copies declare their language and subject). Third-party pages we do not author — the payment provider's hosted checkout page and the courts' official PDF forms — are outside this scope; our own checkout steps, receipts and filled DOCX forms are inside it.
Conformance status
Partially conforms: the known limitations below are listed with dates and plans. Conformance is verified surface by surface and recorded in our evidence ledger; every release runs automated accessibility checks that block deployment on any violation.
What we do
- Design tokens whose colour contrast is computed in tests, form-control borders and focus rings that meet 3:1 on every band, error text that meets 4.5:1.
- One accessible questionnaire primitive: labels tied to their fields, required and invalid states announced, errors associated and focused, keyboard-reachable read-to-accept gates.
- Keyboard operation everywhere: skip link, visible focus, dialogs that trap and restore focus, pause controls on moving content, nothing hidden behind sticky bars.
- Five languages including a right-to-left one, declared in the page itself.
- Automated checks (axe-core, WCAG 2.2 AA rules) on every public page and on our signed-in components on every code change; a written release gate; no overlay widget.
- A first-party Display settings control on every page — text size, contrast, motion, typeface, link underlines, light or dark — built on our own design tokens, saved in your browser only, never a third-party overlay.
What the code enforces
Laws written into our design tokens, our shared components and the guards that test them — a build fails the moment one breaks. 32 recorded claims.
Last ran on a recorded release: · 5d46da9b (pull request 374)
Show the 32 recorded claims
- E-001 The evidence spine exists and is pinned (10 files) and AGENTS.md carries rule R9
- E-002 Text token pairs used by the primitives ≥ 4.5:1 (24 pairs incl. white on the teal buttons, deep-band text, danger-ink/warn-ink on their surfaces) — computed from the real hexes
- E-003 Form-control boundaries ≥ 3:1 on white and cream (--color-control), primitives + every raw control on the token
- E-004 Focus indicator ≥ 3:1 on light surfaces (brand) AND on the deep-teal bands (--color-focus-on-deep, applied by .bg-brand-deep :focus-visible / [data-band=deep])
- E-005 Error text is danger-ink on every role=alert; text-danger never shares an element with cream / danger-soft / warn-soft
- E-006 FieldInput 2.0 emits the full name/role/state/error contract (id↔htmlFor, required + aria-required, aria-describedby help+error, aria-invalid + associated role=alert, fieldset/legend checklists, autocomplete, control…
- E-014 Every target="_blank" link carries a visually-hidden "(opens in a new window)" hint ×5 locales (3.2.5 / G201)
- E-015 Zero unlabeled <svg> in src (decorative → aria-hidden; the health-score ring names score AND tier as text) (1.1.1 / 1.4.1)
- E-018 Step changes move focus to the new step heading and announce "Step X of Y — group"; probate has a named progressbar; scrollToTop honors reduced motion
- E-019 The three legal-commitment scroll gates share the keyboard-region + no-overflow contract (useScrollGate)
- E-020 No unfocusable (display:none) file input inside a label button; button-driven inputs are explicitly out of the tab order
- E-021 AI surfaces announce one status per phase (assistant/research), agents rail announces only the run status; composers labelled
- E-022 Tables: every <th> scoped, every table named; decision rail toggles named + pressed + live counts; command palette combobox/listbox; workstation actions named with their subject
- E-023 DOCX instruments are navigable, language-declared documents: Title on the cover, Heading 1 for the instrument, Heading 2 for every article + EXECUTION + IMPORTANT NOTICE (styles restyled to the original black…
- E-024 Every generated PDF (packet, review, redline, cite-check) and every filled court form declares /Lang en-US, a subject and keywords
- E-025 HTML-primary policy: the report page is the accessible version; each PDF link is described by "Print copy…" ×5
- E-026 The five auth emails declare their language, use one h1, keep the plain-link fallback (applied to prod omhsgzowmmhliaqvtift + staging qaazrpwshcajzzdajnxg, read-back verified 2,210–2,354 chars)
- E-027 Tour narration is transcript-equivalent: the studio MP3 / TTS speaks the on-screen caption (1.2.1)
- E-029 Every string introduced by the program (11 keys: required legend, pause, new-window hint, assistant/research statuses + labels, print-copy hint) exists in all five locales
- E-036 A barrier report becomes a durable a11y.feedback audit row AND an owner alert (platform-admin bell + NOTIFY_OPS_EMAIL) — the live round-trip is smoked after promotion
- E-037 An Accessibility Conformance Report (VPAT 2.5, WCAG edition) is generated from this ledger and committed each quarter
- E-038 Any firm brand colour yields AA text on the client portal wordmark and the print letterhead; the console reports the computed ratios and the derived shade
- E-040 Sustainment is wired: DONE-REPORT R9 + Accessibility block, quarterly sample re-run + statement review (first 2026-11-16) and annual independent evaluation (first 2027-08-16) on the governance calendar, PROMOTION step…
- E-042 Display-settings engine: validated choices → html[data-*], pre-paint stamping before hydration, high-contrast token pairs computed (text ≥ 7:1, hairline ≥ 3:1), OS prefers-contrast: more + prefers-reduced-motion honored…
- E-046 Operative/report PDF copies disclose that they are untagged print copies and identify the accessible account path; the same sealed version renders a semantic Word copy. Court-bound copies retain letter geometry, 1-inch…
- E-048 Every form control styled through a class constant carries the ≥3:1 control-border token (1.4.11) — the P1 rule matched only named constants and inline tags, and 26 console/portal components kept const field = "……
- E-049 Consumer packet inventory retains named status/count presentation at 1360/390; fictional accessibility fixtures are excluded from production
- E-050 Identity-free firm registration and responsibility/release-evidence controls retain labels, roles, error states and responsive bounds at 1360/390
- E-051 Pricing comparison, audience navigation and coordinated form errors retain responsive layouts and accessible controls
- E-052 Authored PDFs preserve supported characters, carry ordered structure and readable text colors; download refusals retain Word/HTML alternatives without first-click loss, overflow or stretched adjacent controls
- E-053 The /documents hero sub-line meets AA contrast on the deep band (was 2.21:1 as text-muted on bg-brand-deep, measured live 2026-09-12 and 2026-09-14; now the mint token, 8.24:1 by the same computed-style measurement)
- E-054 Every input, textarea and select on the console and portal surfaces we author carries an accessible name (aria-label equal to the visible instruction, localized where the surface is; selects named by what they choose…
What a machine checks, and which harness
Browser tests that run on every release before it reaches you. Each harness below, what it checks, and the recorded claims it proves.
Last ran on a recorded release: · 5d46da9b (pull request 374)
e2e/a11y-harness.spec.ts
axe on every section of the fixture harness — the signed-in components rendered with fictional data — at 1360 and 390 px, in light and in dark, plus each component's keyboard and focus contract.
Show the 17 recorded claims
- E-033 Authenticated components (report views, decision rail, unlock + consent, election gate, workstation rail, assistant, research, pause control, dialog) are axe-clean at 1280 and 390…
- E-045 The shared canonical-artifact delivery control exposes Word, an explicitly labelled PDF print copy, per-account Vault save, version/hash evidence, loading/error/empty states, and…
- E-055 On a right-to-left page a person's own words keep their own order (1.3.2 meaningful sequence): the .authored class (globals.css — unicode-bidi: plaintext, aligned the way its…
- E-056 A first-party dark reading mode as the sixth Display settings choice (Follow my device — the default, on the device's prefers-color-scheme — · Light · Dark), on our own tokens and…
- E-058 The evidence center, the accessibility evidence generated from this ledger, and the “Inspect the example” cards: each card is the WAI-ARIA tabs pattern (one tab stop; the arrows…
- E-060 The harness's dark census scans the dark design: a frozen statement shown inside a page keeps its light paper on its own subtree only ([data-island="paper"], with the paper's own…
- E-062 Work that runs in the background shows one progress panel wherever it appears: the job's state in words (waiting its turn · waiting to try again, with the reason · in progress ·…
- E-063 The firm-wide lists' pages are a navigation landmark named for the list ("Pages of plans"), the position said as text ("Page 3 of 5 · 214 plans"), the previous and next pages as…
- E-066 The new frame around the firm console and the customer's account — the deep-teal sidebar, the top bar (search, All tools or the language menu, Display settings, notifications, the…
- E-067 The client intake's six steps, its sent and withdrawn record, the emailed link's door and the firm's two intake pages are axe-clean at 1360 and 390 px; Continue on a step with a…
- E-068 My Estate Desk's five screens (Overview, My documents, Start a plan, Documents & tools, the Florida signing instructions) and the estate-plan questionnaire in the intake's frame…
- E-069 The firm's Overview & chat, Clients & matters and Saved conversations are axe-clean at 1360 and 390 px, with the matter bar, the assistant panel and the record's column; the…
- E-070 The Matter command center is axe-clean at 1360 and 390 px in each of its six tabs, with the matter bar on every matter page: the tabs are a navigation landmark ("Matter sections")…
- E-071 Attorney review & decisions is axe-clean at 1360 and 390 px in each of its four tabs and in the finalize receipt's dialog: the tabs are a navigation landmark ("Review sections")…
- E-072 The drafting desk is axe-clean at 1360 and 390 px — the draft, its version history and comparison, an older version, an archived matter, a matter without a plan, a locked plan…
- E-073 The sidebar is one navigation landmark ("Firm workspace") whose doors are the reference's, the current page marked with aria-current="page" — a page whose door left the sidebar…
- E-074 The line that says how many of a client's intake files are in the matter's source record is axe-clean at 1360 and 390 px in the firm's reading of a sent intake (one file on the…
e2e/a11y.spec.ts
axe on every indexable route in the route registry, curated samples and the Spanish, Hebrew and Russian samples, with menus, dialogs and the questionnaire's error state open — every impact fails the build; the risk-tier pages again in the dark reading mode.
Show the 15 recorded claims
- E-007 The probate intake ERROR STATE is associated (aria-invalid → aria-describedby → message), announced (role=alert), focused (first invalid control) and axe-clean; the "* required"…
- E-008 Zoom never blocked; skip link first → #main; global :focus-visible ring
- E-009 21 public pages + es/he/ru samples: 0 critical/serious axe violations (axe-core 4.13)
- E-011 Every auto-cycling component runs on the shared loop (no private setInterval), renders the PauseControl toggle (aria-pressed, constant localized name), stops on hover/focus, never…
- E-012 Focused elements are never hidden behind the sticky header or the fixed bottom bars: scroll-padding-top: 6rem, runtime scroll-padding-bottom from the mounted bars (2.4.11)
- E-013 All five dialogs share ONE implementation: portal to <body>, focus trap, initial focus inside, Escape (except legal gates), focus restored to the opener; DisclaimerGate's scroll…
- E-016 axe target-size (2.5.8) enforced as blocking on the 24-scan public census — 0 violations
- E-034 The public census covers EVERY exact indexable route in the registry (+ prefix samples + es/he/ru), explicit tags, every impact failing, mega-menu / mobile-menu / dialog /…
- E-039 The Word taskpane and Outlook pane shells are in the axe census (all impacts)
- E-056 A first-party dark reading mode as the sixth Display settings choice (Follow my device — the default, on the device's prefers-color-scheme — · Light · Dark), on our own tokens and…
- E-057 A link inside muted text is underlined, not marked by colour alone (1.4.1 — the home page's "See the probate engine", 1.03:1 against its sentence); the probate assessment's "high"…
- E-058 The evidence center, the accessibility evidence generated from this ledger, and the “Inspect the example” cards: each card is the WAI-ARIA tabs pattern (one tab stop; the arrows…
- E-059 The buyer's page and the sample matter: every charge table becomes one card per row on a phone (no horizontal scroll at 390); the data-flow drawing is one labelled image whose…
- E-063 The firm-wide lists' pages are a navigation landmark named for the list ("Pages of plans"), the position said as text ("Page 3 of 5 · 214 plans"), the previous and next pages as…
- E-075 The demo's index (/demo/screens) and all sixteen screen pages are in the public axe census, light and dark, every impact failing: each is axe-clean; the index's sixteen doors are…
e2e/display-settings.spec.ts
The Display settings control: one labelled dialog, each choice applied at once and kept across a reload with no flash, the theme, right-to-left, small screens and target sizes.
Show the 3 recorded claims
- E-043 The Display settings control on every page (header at every breakpoint, footer, SiteHeader, console, statement): named trigger with the accessibility symbol, one labelled modal…
- E-056 A first-party dark reading mode as the sixth Display settings choice (Follow my device — the default, on the device's prefers-color-scheme — · Light · Dark), on our own tokens and…
- E-061 The device's reduced-motion preference collapses every transition and animation, as the Display settings' own Reduce motion choice does — the Opposing Counsel Pass demo's 700 ms…
e2e/a11y-statement.spec.ts
This statement: reachable from the same place in every footer, its sections present, axe-clean in English, Spanish and Hebrew.
Show the 2 recorded claims
- E-032 The accessibility statement is reachable from the same footer position on every page (3.2.6 consistent help) and the barrier form is the consistent help mechanism
- E-035 /accessibility ×5: WCAG 2.2 AA target + scope + status ("Partially conforms") + measures + dated limitations + compatibility + barrier form + escalation + history; no forbidden…
e2e/keyboard-journeys.spec.ts
One task per role completed with the keyboard alone — a consumer skipping the header and using Display settings, a visitor in a dialog, an attorney pausing a matter, a paralegal answering the conflict questions, a firm administrator renewing the attestation, a client answering a decision — with the focus visible at every stop and never trapped outside a dialog.
Show the 2 recorded claims
- E-064 Seven role tasks — consumer (skip the header; Display settings), visitor (a modal), attorney (pause and resume a matter), paralegal (the conflict questions), firm administrator…
- E-065 "Skip to content" moves past the header: its target is each page's own <main id="main"> (95 mains in 91 files), not the root layout's wrapper, which begins with the header …
e2e/locale-shell.spec.ts
Each page's language and direction declared in the raw HTML, and the right-to-left mirroring.
Show the 2 recorded claims
- E-028 The static fleet's content root declares the true language and direction in the raw HTML (he → rtl, es → ltr, en → ltr) with no cookie/JS dependency; the fleet stays prerendered…
- E-030 RTL: the pause control mirrors to the inline-start edge and carries the Hebrew name under tc_locale=he; the ≤1px Hebrew overflow contract stays green
e2e/visual.spec.ts
Pixel baselines of the essential public pages at 1360 and 390 px in both themes; any change beyond 1.5 % of the pixels fails until reviewed.
Show the 2 recorded claims
- E-047 The release gate enforces full-page Linux pixel baselines for 12 essential public journey/template-family routes at both 1360 × 900 and 390 × 844, with an anti-disarm assertion…
- E-056 A first-party dark reading mode as the sixth Display settings choice (Follow my device — the default, on the device's prefers-color-scheme — · Light · Dark), on our own tokens and…
e2e/a11y-journeys.spec.ts
The self-help journeys by keyboard alone: the questionnaire's steps, an error and its recovery, the probate intake and sign-in.
Show the recorded claim
- E-017 The consumer journeys are keyboard-operable end-to-end where automatable: estate wizard chooser → step 1 → step 2 (labels resolve, focus + announcement, data preserved on Back)…
e2e/a11y-visual-adaptation.spec.ts
Reflow at 320 px, text-spacing overrides and forced colours on the pages that matter most.
Show the recorded claim
- E-031 Reflow at 320 CSS px (400 % zoom): no horizontal scroll and no control outside the viewport on 6 pages; WCAG 1.4.12 text-spacing overrides cause no overflow or clipped controls…
e2e/homestead-lanes.spec.ts
The pill radio pattern by keyboard — arrow keys move the choice and the focus together.
Show the recorded claim
- E-044 The pill radio pattern (both HomesteadClear lanes + the Vault context questions) follows the WAI-ARIA radio-group contract through ONE primitive: roving tabindex (exactly one tab…
e2e/language-of-parts.spec.ts
The language of each part of twelve kinds of public page, read in Spanish and in Hebrew beside the English page: English words declared English, translated words declared in the reader's language, and the note at the top of every page whose words are English.
Show the recorded claim
- E-076 The public pages declare the language of their parts (3.1.2): on the Spanish, Haitian Creole, Russian and Hebrew pages the words written only in English — whole pages (the article…
e2e/smoke.spec.ts
The advertised paths on the production build with a clean console — the home and firm pages, the buyer's page and its downloads, and the sample matter's live parts sending nothing; private routes turning anonymous visitors to sign-in; no sideways scroll at 390 px.
Show the recorded claim
- E-059 The buyer's page and the sample matter: every charge table becomes one card per row on a phone (no horizontal scroll at 390); the data-flow drawing is one labelled image whose…
e2e/ui-upgrade-u9.spec.ts
the public demo of the sixteen reference screens (U9): each page says it is a sample in words, asks the server nothing on load and is not indexed; the index's sixteen doors; one document opened from its address on My documents; a sample intake that keeps nothing
Show the recorded claim
- E-075 The demo's index (/demo/screens) and all sixteen screen pages are in the public axe census, light and dark, every impact failing: each is axe-clean; the index's sixteen doors are…
What no machine here checks
No automated tool can judge these. They are listed here, with the runs still owed, instead of being implied.
- Not run yet Human / assistive-technology validation of P1 forms
- Not run yet Human + assistive-technology validation package (README + TEMPLATE, 3 environments, +3 tasks) — runs NOT yet performed; the statement and ACR carry the limitation until a filled record lands
- Open limitation PDF accessibility remains limited. Older immutable copies and third-party court forms may lack structure tags. The September 12 candidate adds explicit structure to newly authored instrument, report and workspace text PDFs, but standard fonts remain…
- Open limitation No human assistive-technology run has been recorded yet (NVDA / VoiceOver / iOS VO); JAWS is not available to the program
- Open limitation Third-party surfaces: Square's hosted checkout page and the courts' official PDF forms are not authored by us
- Open limitation Language of parts on the signed-in surfaces: on the public pages the words written only in English are declared English in Spanish, Haitian Creole, Russian and Hebrew (E-076, 2026-10-07); the account, the client portal and the firm console have not yet been…
Display settings
Every page carries a Display settings control (the accessibility symbol in the header and footer): text size, high contrast, reduced motion, an easier-reading typeface, always-underlined links and a dark reading mode (which follows your device's dark setting unless you choose otherwise), all built on our own design and saved in your browser only. It is a feature, not a conformance claim; your browser and device settings continue to apply and are honored regardless.
Known limitations
Dated and honest. Each item leaves this list only when the evidence says it is fixed.
- PDF accessibility remains limited. Older copies may lack structure tags, and PDF fonts may not support every character. Use the account page or the Word copy with semantic headings. Human screen-reader testing of PDFs remains incomplete. Contact us for another format.
- We have not yet completed a documented screen-reader test session with real assistive technology (NVDA, VoiceOver). Automated and keyboard checks run on every change; the human session is scheduled and its result will be published here.
- The payment provider's hosted checkout page and the courts' official PDF forms are third-party content we cannot change.
- Some signed-in screens — the account, the client portal and the firm console — have not yet been checked in Spanish, Haitian Creole, Russian and Hebrew for words that remain in English; a screen reader may read such words with the wrong voice. The public pages are checked. Until the signed-in screens are, choose English in the language menu, or tell us where it happens.
Compatibility
Current versions of Chrome, Edge, Firefox and Safari on desktop and iOS; keyboard-only operation; NVDA and VoiceOver are the screen readers we design for. Our multilingual pages render without JavaScript.
Tell us about a barrier
If something on this site does not work for you, tell us. We acknowledge within two business days and give you a workaround or a fix path within ten business days for the essential journeys. You do not need to describe your disability — just what got in the way.
If we fall short
If our response does not resolve the barrier, reply and ask for escalation — it goes to our leadership. This statement does not limit any rights you may have under applicable law.
Statement history
First published 16 August 2026. Reviewed with every release that changes an accessibility fact and at least quarterly.