WCAG 2.1 AA coverage

Every check Proof runs, and exactly how each one gets fixed.

No hand-waving: this is the full map — what’s tested, by which engine, and whether the resolution is a machine fix, a guided human decision, or a human attestation.

Automatic passes clear 63–74% of all defects (12,689 findings · three document libraries · Aug 2026), but most documents still need one or two human decisions, usually color contrast or reading order. The rest is a guided decision or a human attestation — mapped below, never hand-waved.

“Proof of accessibility” means evidence: the certificate records every WCAG 2.1 AA check Proof ran on that exact file and every judgment call a person attested; it is not a usability test, so for high-stakes documents, such as forms people must complete and notices people must act on, also test the finished file with a screen reader.

Three layers of checks

  • layer 1

    veraPDF

    Built on veraPDF, the open-source PDF/UA validator, with every machine clause mapped to its WCAG criterion — plus Ockem’s own detectors for the checks it has no clause for.

  • layer 2

    Ockem’s own detectors

    Checks veraPDF has no clause for — color contrast that ignores text hidden behind artwork, reading order, images of text found by comparing OCR with the text layer, language of parts, use of color, non-text contrast, and how forms and scripts behave. Checks most tools skip entirely.

  • layer 3

    Deterministic prescan

    Document facts read directly from the file: structure tree, image-only detection, bookmarks, metadata, encryption flags.

How to read the resolution chips:

Automatic
deterministic fixer, re-verified
Guarded
live before/after diff inside the apply
AI + human
drafted locally, human-approved
Decision queue
human decides, machine applies
Attestation
human sign-off, listed on the certificate

Perceivable

content everyone can perceive

CheckHow Proof handles itResolution
Figures alternate text1.1.1 Non-text Content · A

Figure census from the structure tree, per-figure strict check, alt/content association analysis, empty-alt detection. Fixed by AI-drafted alt text with the figure crop beside the draft — human-approved — plus automatic figure wrapping so alt text has somewhere to live.

How this gets fixed: Figures alternate text
  • AI + human
  • Automatic
Image-only PDFs1.1.1 · A

Scanned documents detected at prescan. OCR rebuilds the page as structured, accessible-by-default content — real headings, reading order, and tab order, with scan noise artifacted — not just an invisible text layer.

How this gets fixed: Image-only PDFs
  • Automatic
Multimedia alternatives1.2.1 / 1.2.2 / 1.2.3 / 1.2.5 · A / AA

Media annotations typed automatically; the alternate description is drafted as a placeholder for a person to word. A person checks each clip for captions and an audio description or text alternative.

How this gets fixed: Multimedia alternatives
  • Automatic
  • Decision queue
  • Attestation
Tables1.3.1 Info & Relationships · A

16 table-shape rules plus Ockem’s untagged-table detection in the raw content layer. Fixed by guarded structure builders (tag, headers→TH, scope, colspan balancing) when the table’s shape is unambiguous, and an in-browser table editor (first release) for the calls a machine shouldn’t make.

How this gets fixed: Tables
  • Guarded
  • Decision queue
Headings, lists & structure1.3.1 · A

Heading nesting, list structure, role mapping, tagged-content analysis. Guarded automatic repair — plus a decision queue that promotes real headings mis-tagged as page furniture.

How this gets fixed: Headings, lists & structure
  • Guarded
  • Decision queue
Logical reading order1.3.2 Meaningful Sequence · A

Ockem’s consensus audit compares geometric order against structure-tree order per page. Untagged content is an objective fail; divergent pages go to a step-by-step page review with numbered overlays. Confirmations are recorded attestations.

How this gets fixed: Logical reading order
  • Automatic
  • Decision queue
  • Attestation
Sensory characteristics1.3.3 · A

Bilingual language scan for instructions relying on shape, position, or sound — deliberately over-flags for the reviewer.

How this gets fixed: Sensory characteristics
  • Attestation
Input purpose1.3.5 Identify Input Purpose · AA

A form field that asks for the person’s own details passes when its name says what it collects; a generic name goes to a person.

How this gets fixed: Input purpose
  • Attestation
Use of color1.4.1 Use of Color · A

Text, links, chart keys and chart-like pictures scanned for meaning carried by color alone. A file with none passes; each one found goes to a person.

How this gets fixed: Use of color
  • Attestation
Audio control1.4.2 · A

Audio that plays on its own needs a way to pause or stop it — checked by a person on every file with media.

How this gets fixed: Audio control
  • Attestation
Color contrast1.4.3 Contrast (Minimum) · AA

Every text run classified against 4.5:1 (3:1 large text), artifact-aware, with an occlusion guard that suppresses text hidden behind cover artwork. Fixed in the contrast decision queue: recolor to the nearest accessible color, or insert a backing band on photographic backgrounds.

How this gets fixed: Color contrast
  • Decision queue
  • Attestation
Resize text1.4.4 · AA

Reflow and zoom behavior is a judgment check — reviewed and attested by an accountable person.

How this gets fixed: Resize text
  • Attestation
Images of text1.4.5 · AA

Ockem’s OCR-diff detector: large raster regions are OCR’d and compared against the real text layer; a surplus means text living only inside an image. Evidence shown on the review card. Font embedding is repaired automatically.

How this gets fixed: Images of text
  • Attestation
  • Automatic
Non-text contrast1.4.11 · AA

Form-control borders and chart keys measured against 3:1, and pictures that look like charts or maps found for a person to check. A file with none of these passes.

How this gets fixed: Non-text contrast
  • Attestation
Content on hover or focus1.4.13 · AA

Files with scripts: Acrobat’s built-in scripts pass; a custom script goes to a person, who checks anything it shows can be dismissed and stays put.

How this gets fixed: Content on hover or focus
  • Attestation

Operable

navigation that works without a mouse

CheckHow Proof handles itResolution
Keyboard access & traps2.1.1 / 2.1.2 · A

Links and form fields work through the viewer’s own keyboard support and pass. Actions only a pointer can fire, and custom scripts, go to a person.

How this gets fixed: Keyboard access & traps
  • Attestation
Timing, motion & flicker2.2.1 / 2.2.2 / 2.3.1 · A

Scripts that run on a timer, custom scripts and embedded media go to a person, who confirms nothing demands a timed response, anything moving can be paused and nothing flashes. A file without them passes.

How this gets fixed: Timing, motion & flicker
  • Attestation
Bookmarks2.4.1 Bypass Blocks · A

Outline presence checked against document length; generated automatically from the heading structure.

How this gets fixed: Bookmarks
  • Automatic
Document title2.4.2 Page Titled · A

Catalog + XMP title checks, including filename-echo detection — a title that just repeats the filename fails until a human sets a real one. AI drafts a title; a person accepts it.

How this gets fixed: Document title
  • AI + human
Tab order2.4.3 Focus Order · A

Page tab-order settings checked and set to structure order automatically.

How this gets fixed: Tab order
  • Automatic
Link purpose2.4.4 · A

Link structure and accessible names checked; links wrapped, named from visible text, and bare URLs/emails/phones turned into real link annotations.

How this gets fixed: Link purpose
  • Automatic
Focus visible2.4.7 · AA

The viewer draws focus on links and form fields, so they pass; a script that moves or restyles a field on focus goes to a person.

How this gets fixed: Focus visible
  • Attestation
Label in name2.5.3 · A

Form fields whose spoken name is generic and shares no word with the printed label are flagged for a person.

How this gets fixed: Label in name
  • Attestation

Understandable

language declared, forms that behave

CheckHow Proof handles itResolution
Document language3.1.1 Language of Page · A

Catalog and XMP language checked; auto-detected from content and written when absent.

How this gets fixed: Document language
  • Automatic
Language of parts3.1.2 · AA

Unicode-script scan surfaces runs of Cyrillic, Greek, Arabic, Hebrew, CJK and other scripts different from the document language, with locations. Span-level language is a content decision — attested.

How this gets fixed: Language of parts
  • Attestation
Change of context3.2.1 / 3.2.2 · A

A field that navigates, opens a file, submits, launches anything or moves focus when it gets focus or its value changes goes to a person.

How this gets fixed: Change of context
  • Attestation
Input errors3.3.1 / 3.3.3 · A / AA

Acrobat’s built-in validators pass when the field’s name states the expected format; custom validation goes to a person. A form that validates nothing passes.

How this gets fixed: Input errors
  • Attestation
Error prevention3.3.4 · AA

A form that is saved or printed passes; one that can submit goes to a person, who confirms entries can be reviewed, corrected or undone.

How this gets fixed: Error prevention
  • Attestation

Robust

works with assistive technology

CheckHow Proof handles itResolution
AT-blocking encryption4.1.2 Name, Role, Value · A

Accessibility-permission flags detected and removed automatically.

  • Automatic
Form fields4.1.2 · A

Field tagging and description checks. Widgets tagged into Form structure with tooltips written; per-field label text is human-authorable; vestigial exporter-artifact widgets removed.

How this gets fixed: Form fields
  • Automatic
  • Decision queue
Status messages4.1.3 · AA

Files with scripts: Acrobat’s built-in scripts pass; a custom script goes to a person, who checks any status message it shows is announced.

How this gets fixed: Status messages
  • Attestation
Fonts & character encodingsupports 1.1.1 / 1.4.5

veraPDF’s font checks: unembedded fonts get metric-compatible replacements; character-map plumbing regenerated so extracted text is faithful; symbolic checkbox glyphs replaced with vector drawing.

How this gets fixed: Fonts & character encoding
  • Automatic
Structure-tree truststructure integrity

The Suspects flag is cleared so validators and assistive technology trust the tag tree.

  • Automatic

Every WCAG 2.1 A and AA criterion, and what a certificate claims

WCAG 2.1 has 50 success criteria at Levels A and AA. 11 never apply to a static PDF. The other 39 can apply, depending on what the file contains, and 14 apply to every PDF. Proof evaluates every one of the 39, by machine check or recorded attestation: 14 through machine checks, and 25 through scans that pass a file when they find nothing to question and otherwise ask a person to attest.

Each certificate counts its own coverage. When every criterion that applies to the document was evaluated, it says so: “every one of the M WCAG 2.1 Level A/AA criteria that apply to this document (M of M, by machine check or recorded attestation)”, with M the number of criteria that apply to it. It lists the checks it ran, and says that criteria it does not list are outside its scope and are not claimed. So its badge reads as WCAG 2.1 AA Compliant on every criterion that applies to the document, and the certificate gives the count.

A certificate says “N of the M” instead in two cases: it was issued before October 8, 2026, when Proof began evaluating every criterion that can apply, or every link in the document is tagged around empty content, which leaves 2.4.4 Link Purpose with no words to evaluate. Either way, the certificate names what was not evaluated: its “Not claimed” section lists, by number and name, each criterion that applies and was not evaluated, and its public verification page says the same. Certificates issued before October 8 add the names the next time their holder opens or downloads them in Ockem Proof.

Certificates anchor WCAG 2.1 Level AA, the standard the ADA Title II and HHS Section 504 rules cite. Proof does not evaluate the criteria added in WCAG 2.2.

  • 14 evaluated by machine
  • 25 attested by a person
  • 11 not applicable to a static PDF
Evaluated (machine)
Proof’s checks decide pass or fail on their own. A person is asked only where a check cannot decide.
Attested (human)
Proof never fails these on its own. A scan passes the file when it finds nothing to question; otherwise a person decides, and the certificate lists the criteria that rest on that judgment and names the organization that attested.
Not applicable to a static PDF
Never engaged by a single static PDF, per W3C’s guidance for non-web documents (WCAG2ICT). No certificate counts it.
WCAG 2.1 Level A and AA success criteria and what Proof does with each, in WCAG order (Proof’s conformance scope as of October 8, 2026)
CriterionLevelApplies toWhat Proof doesNotes
1.1.1 Non-text ContentAEvery PDFEvaluated (machine)

Every image needs real alternative text or a decorative mark; a tool’s placeholder does not count. The check confirms the text is there, not that it describes the image well.

Deep dives for 1.1.1 Non-text Content: Alt text, Scanned documents

1.2.1 Audio-only and Video-only (Prerecorded)AFiles with audio or videoEvaluated (machine)

Applies only when the file embeds audio or video; checks the media is tagged with a text alternative.

Deep dives for 1.2.1 Audio-only and Video-only (Prerecorded): Multimedia

1.2.2 Captions (Prerecorded)AFiles with audio or videoAttested (human)

Applies only when the file embeds audio or video, and then always goes to a person, who checks that each clip with sound has captions.

Deep dives for 1.2.2 Captions (Prerecorded): Multimedia

1.2.3 Audio Description or Media Alternative (Prerecorded)AFiles with audio or videoAttested (human)

Applies only when the file embeds audio or video, and then always goes to a person, who checks that each video has an audio description or a text alternative.

Deep dives for 1.2.3 Audio Description or Media Alternative (Prerecorded): Multimedia

1.2.4 Captions (Live)AANo static PDFNot applicable to a static PDF

A PDF cannot carry a live stream.

1.2.5 Audio Description (Prerecorded)AAFiles with audio or videoAttested (human)

Applies only when the file embeds audio or video, and then always goes to a person, who checks that each video has an audio description.

Deep dives for 1.2.5 Audio Description (Prerecorded): Multimedia

1.3.1 Info and RelationshipsAEvery PDFEvaluated (machine)

Tags, headings, lists and tables, checked against the PDF/UA structure rules and Proof’s own scans for structure that is shown but not tagged.

Deep dives for 1.3.1 Info and Relationships: Tables, Headings and lists

1.3.2 Meaningful SequenceAEvery PDFEvaluated (machine)

The tagged reading order is audited against the page layout; where the audit cannot decide, a person confirms the order.

Deep dives for 1.3.2 Meaningful Sequence: Reading order

1.3.3 Sensory CharacteristicsAEvery PDFAttested (human)

A scan flags instructions that lean on color, shape, position, size or sound; a person reviews each one.

Deep dives for 1.3.3 Sensory Characteristics: Human-verified checks

1.3.4 OrientationAANo static PDFNot applicable to a static PDF

Not engaged by a single static PDF (WCAG2ICT).

1.3.5 Identify Input PurposeAAFiles with form fieldsAttested (human)

Fillable forms: a field that asks for the person’s own details (name, email, phone, address, birth date) passes when its name says what it collects. A generic name goes to a person.

Deep dives for 1.3.5 Identify Input Purpose: Forms

1.4.1 Use of ColorAEvery PDFAttested (human)

A scan looks for text, links, chart keys and chart-like pictures told apart by color alone. It passes the file when it finds none; otherwise a person checks each one.

Deep dives for 1.4.1 Use of Color: Human-verified checks

1.4.2 Audio ControlAFiles with audio or videoAttested (human)

Applies only when the file embeds audio or video, and then always goes to a person, who checks that no audio plays on its own without a way to pause or stop it.

Deep dives for 1.4.2 Audio Control: Multimedia

1.4.3 Contrast (Minimum)AAEvery PDFEvaluated (machine)

Text contrast is measured run by run, on scanned pages from the pixels. A page that cannot be measured with a clear margin goes to a person.

Deep dives for 1.4.3 Contrast (Minimum): Color contrast

1.4.4 Resize TextAAEvery PDFAttested (human)

Tagged text passes, because PDF viewers zoom it. An untagged file goes to a person.

Deep dives for 1.4.4 Resize Text: Human-verified checks

1.4.5 Images of TextAAEvery PDFAttested (human)

A text-recognition scan finds images that contain text; a person decides each one.

Deep dives for 1.4.5 Images of Text: Human-verified checks

1.4.10 ReflowAAEvery PDFEvaluated (machine)

Derived from the tagging, reading-order and images-of-text results; it passes only when they do.

1.4.11 Non-text ContrastAAEvery PDFAttested (human)

Proof measures form-field borders and chart keys against 3:1 and finds pictures that look like charts or maps. A person confirms any shortfall and checks each chart; a file with none of these passes.

Deep dives for 1.4.11 Non-text Contrast: Human-verified checks

1.4.12 Text SpacingAANo static PDFNot applicable to a static PDF

PDF viewers do not let a reader override spacing, so a document can neither meet nor fail it (WCAG2ICT).

1.4.13 Content on Hover or FocusAAFiles with scriptsAttested (human)

Applies only to files with scripts. Acrobat’s own built-in scripts pass; a custom script goes to a person, who checks that anything it shows on hover or focus can be dismissed and stays put.

Deep dives for 1.4.13 Content on Hover or Focus: Human-verified checks

2.1.1 KeyboardAFiles with links, form fields, scripts or audio or videoAttested (human)

Links and form fields work through the viewer’s own keyboard support, so they pass. An action only a pointer can fire, or a custom script, goes to a person.

Deep dives for 2.1.1 Keyboard: Human-verified checks

2.1.2 No Keyboard TrapAFiles with form fields, scripts or audio or videoAttested (human)

Form fields and media are operated through the viewer and pass. A custom script, or an action only a pointer can fire, goes to a person, who confirms focus is never trapped.

Deep dives for 2.1.2 No Keyboard Trap: Human-verified checks

2.1.4 Character Key ShortcutsANo static PDFNot applicable to a static PDF

Not engaged by a single static PDF (WCAG2ICT).

2.2.1 Timing AdjustableAFiles with scriptsAttested (human)

Applies only to files with scripts. A script that runs on a timer goes to a person, who confirms no action needs a response in time; without one, the file passes.

Deep dives for 2.2.1 Timing Adjustable: Human-verified checks

2.2.2 Pause, Stop, HideAFiles with scripts or audio or videoAttested (human)

Applies only to files with scripts or media. Audio or video, or a custom script, goes to a person, who confirms anything that moves or updates on its own can be paused.

Deep dives for 2.2.2 Pause, Stop, Hide: Human-verified checks, Multimedia

2.3.1 Three Flashes or Below ThresholdAFiles with scripts or audio or videoAttested (human)

Applies only to files with scripts or media. Media, or a script that runs on a timer, goes to a person, who confirms nothing flashes more than three times a second.

Deep dives for 2.3.1 Three Flashes or Below Threshold: Human-verified checks

2.4.1 Bypass BlocksAFiles over 20 pagesEvaluated (machine)

Applies to files over 20 pages: bookmarks or a heading structure meet it. With neither, a person decides.

2.4.2 Page TitledAEvery PDFEvaluated (machine)

The file needs a real title that the viewer shows, not a file name, a generator default or garbled text.

Deep dives for 2.4.2 Page Titled: Document title

2.4.3 Focus OrderAFiles with links or form fieldsEvaluated (machine)

Files with links or form fields: checks the tab order follows the document structure.

Deep dives for 2.4.3 Focus Order: Links and navigation

2.4.4 Link Purpose (In Context)AFiles with linksEvaluated (machine)

Checks each link is tagged around the words that describe it. When every link is tagged around empty content there are no words to check, so the criterion is not evaluated on that file: its certificate says “N of the M” and names 2.4.4 as not claimed.

Deep dives for 2.4.4 Link Purpose (In Context): Links and navigation

2.4.5 Multiple WaysAANo static PDFNot applicable to a static PDF

Applies to a set of web pages, not to one document.

2.4.6 Headings and LabelsAAEvery PDFEvaluated (machine)

Heading structure, a title marked as page decoration that screen readers skip, and form-field names.

Deep dives for 2.4.6 Headings and Labels: Headings and lists

2.4.7 Focus VisibleAAFiles with links or form fieldsAttested (human)

The PDF viewer draws focus on links and form fields, so they pass. A script that moves or restyles a field on focus goes to a person.

Deep dives for 2.4.7 Focus Visible: Human-verified checks

2.5.1 Pointer GesturesANo static PDFNot applicable to a static PDF

Not engaged by a single static PDF (WCAG2ICT).

2.5.2 Pointer CancellationANo static PDFNot applicable to a static PDF

Not engaged by a single static PDF (WCAG2ICT).

2.5.3 Label in NameAFiles with form fieldsAttested (human)

Fillable forms: a field is flagged when its spoken name is generic and shares no word with the label printed beside it. A person decides each one.

Deep dives for 2.5.3 Label in Name: Forms

2.5.4 Motion ActuationANo static PDFNot applicable to a static PDF

Not engaged by a single static PDF (WCAG2ICT).

3.1.1 Language of PageAEvery PDFEvaluated (machine)

Checks the file declares its primary language.

Deep dives for 3.1.1 Language of Page: Document language

3.1.2 Language of PartsAAEvery PDFAttested (human)

A scan finds passages in another writing system; a person confirms each is marked with its language.

Deep dives for 3.1.2 Language of Parts: Human-verified checks

3.2.1 On FocusAFiles with form fields or scriptsAttested (human)

Forms and files with scripts: a field that navigates, opens a file, submits, launches anything or moves focus when it receives focus goes to a person.

Deep dives for 3.2.1 On Focus: Forms

3.2.2 On InputAFiles with form fields or scriptsAttested (human)

Forms and files with scripts: a field that navigates, opens a file, submits, launches anything or moves focus when its value changes goes to a person.

Deep dives for 3.2.2 On Input: Forms

3.2.3 Consistent NavigationAANo static PDFNot applicable to a static PDF

Applies to a set of web pages, not to one document.

3.2.4 Consistent IdentificationAANo static PDFNot applicable to a static PDF

Applies to a set of web pages, not to one document.

3.3.1 Error IdentificationAFiles with form fieldsAttested (human)

Fillable forms: Acrobat’s built-in validators name the expected format and pass when the field’s name states it too. A custom validation script goes to a person. A form that validates nothing passes.

Deep dives for 3.3.1 Error Identification: Forms

3.3.2 Labels or InstructionsAFiles with form fieldsEvaluated (machine)

Fillable forms: checks each field is properly structured, and that its name identifies it and states any required format.

Deep dives for 3.3.2 Labels or Instructions: Forms

3.3.3 Error SuggestionAAFiles with form fieldsAttested (human)

Checked with 3.3.1: a rejected entry needs a message that says what to enter. A custom validation script goes to a person.

Deep dives for 3.3.3 Error Suggestion: Forms

3.3.4 Error Prevention (Legal, Financial, Data)AAFiles with form fieldsAttested (human)

Fillable forms: a form that is saved or printed commits no one and passes. One that can submit goes to a person, who confirms entries can be reviewed and corrected, or the submission confirmed or undone.

Deep dives for 3.3.4 Error Prevention (Legal, Financial, Data): Forms

4.1.1 ParsingANo static PDFNot applicable to a static PDF

W3C now treats it as always satisfied, and removed it in WCAG 2.2.

4.1.2 Name, Role, ValueAFiles with links, form fields or scriptsEvaluated (machine)

Form fields and links need a name and a role; the file must also let assistive technology read it.

Deep dives for 4.1.2 Name, Role, Value: Forms

4.1.3 Status MessagesAAFiles with scriptsAttested (human)

Applies only to files with scripts. Acrobat’s own built-in scripts pass; a custom script goes to a person, who checks that any status message it shows is announced.

Deep dives for 4.1.3 Status Messages: Human-verified checks

What we deliberately don’t show as red

File-format bookkeeping rules that don’t affect assistive-technology behavior — conformance metadata, file-header details — are shown for information, never as failures. On fillable forms, Proof checks each field’s name, role and label (4.1.2, 3.3.2, 2.5.3) and how the form behaves: what a field does on focus or input (3.2.1, 3.2.2), how it reports an input error (3.3.1, 3.3.3), whether it can submit (3.3.4), and whether a field asking for personal details says what it collects (1.3.5). A check that finds nothing that could break its criterion passes; anything it finds goes to a person, never straight to “failed”.

Machine-detected, human-attested

Some criteria are genuinely judgment: images of text, sensory characteristics, focus visibility. Proof detects candidates and shows the evidence; an accountable person attests, and the attestation is recorded against them. We say so plainly — the claim is automated + attested, never "fully automatic."

Run the full profile on one of yours.

Free, no account: one PDF of up to 10 pages and 50 MB per verified email, remediated file and verification record included. Certify it for $59 when you’re ready.

WCAG 2.1 AA coverage — Ockem Proof