Skip to content
Back to skills

Accessibility Section 508

ASecurity

Section 508 + WCAG 2.1 AA compliance for public-sector software. Covers VPAT authoring, screen-reader verification (NVDA/JAWS/VoiceOver), keyboard-only flows, color contrast, captions, ARIA labeling, focus indicators, and reduced-motion respect. In government procurement contexts a failing Section 508 check is a legal block — not an aspirational polish pass. Use when designing any citizen-facing or employee-facing UI, any procurement-responsive RFP response, or any VPAT refresh. Cross-referen...

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 2, 2026
ai-agentsgoawstestingfrontendsecurityperformance

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add Canhada-Labs/ceo-orchestration --skill accessibility-section-508 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Accessibility Section 508?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Accessibility Section 508
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/canhada-labs-accessibility-section-508/badge)](https://www.skillsdirectory.com/skills/canhada-labs-accessibility-section-508)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: accessibility-section-508
description: Section 508 + WCAG 2.1 AA compliance for public-sector software. Covers VPAT authoring, screen-reader verification (NVDA/JAWS/VoiceOver), keyboard-only flows, color contrast, captions, ARIA labeling, focus indicators, and reduced-motion respect. In government procurement contexts a failing Section 508 check is a legal block — not an aspirational polish pass. Use when designing any citizen-facing or employee-facing UI, any procurement-responsive RFP response, or any VPAT refresh. Cross-references core `accessibility-and-wcag` but is Section-508-specific and carries VETO weight because of procurement consequences.
owner: Linh Abernathy (Government A11y Engineer, domain persona)
secondary_owner: Darius Okonkwo (Public Records Engineer, domain persona)
tier: domain:government
scope_tags: [accessibility, section-508, wcag, vpat, procurement-block, public-sector]
# --- smart-loading fields (PLAN-083 Wave 0b sub-agent 0.7c) ---
domain: government
priority: 8
risk_class: medium
stack: []
context_budget_tokens: 700
inactive_but_retained: true
repo_profile_binding:
  frontend: {active: false, priority: 10}
  engine: {active: false, priority: 10}
  fintech: {active: false, priority: 10}
  trading-readonly: {active: false, priority: 10}
  generic: {active: false, priority: 10}
activation_triggers: []
# --- K1 paths: native file-touch activation (PLAN-135 W3 unit k1a) ---
paths:
  - "**/ui/**"
  - "**/components/**"
  - "**/accessibility/**"
  - "**/vpat/**"
---

# Accessibility — Section 508 (+ WCAG 2.1 AA)

## Cardinal Rule

**In government, Section 508 non-compliance is a procurement block,
not a polish item.** A federal agency cannot buy or renew a contract
for software that fails VPAT. State and local increasingly mirror the
federal rule. Treat 508 as you would a security gate: shippable only
when green.

## What "Section 508" actually means in 2026

- **Revised Section 508 standards (2017 refresh)** incorporate WCAG
  2.0 Level A + AA by reference. Most agencies have practically moved
  to WCAG 2.1 AA expectations in RFP language. A conservative baseline
  is WCAG 2.1 AA, with an eye toward WCAG 2.2 for new builds.
- **VPAT (Voluntary Product Accessibility Template)** is the vendor's
  self-reported conformance document. VPAT 2.4 Rev 508 is the current
  US-procurement format. VPATs older than ~12 months are considered
  stale by most agency procurement offices.
- **"Functional performance criteria"** (Chapter 3) require that
  users with a given disability can perform the task WITHOUT a
  particular ability (e.g. without vision, without hearing, without
  color perception, without fine motor control, without speech).

## Procurement impact (why this carries VETO)

| Scenario | Consequence |
|---|---|
| RFP requires Section 508 conformance, VPAT says "does not support" | Bid disqualified (federal); heavy negotiation or exclusion (state/local) |
| Post-award discovery that deployed product fails 508 | Contract cure period; in severe cases, rescission and reprocurement |
| Public-facing portal fails 508 | Potential DOJ settlement (ADA Title II for state/local); reputational cost + mandated remediation schedule |

Ship-blocking, not ship-annoying.

## Pre-merge Section 508 checklist (domain VETO trigger)

All items MUST pass before the A11y Engineer signs off:

- [ ] **Keyboard-only**: every interactive element reachable + operable
      via keyboard. Tab order matches visual order. No keyboard traps.
      Skip-to-main link at top.
- [ ] **Focus indicator**: visible focus ring on every focusable
      element, 3:1 contrast minimum against adjacent colors; NEVER
      removed via `outline: 0` without a replacement.
- [ ] **Screen reader pass**: manual smoke on NVDA + JAWS (Windows)
      OR VoiceOver (macOS/iOS). Page landmarks announced; form
      labels read; error messages announced via `aria-live` or
      role="alert"; dynamic content updates announced.
- [ ] **Color contrast**: 4.5:1 for normal text, 3:1 for large text
      (≥18pt or ≥14pt bold), 3:1 for UI components + graphical objects
      (WCAG 1.4.11). Run automated check AND manual verify.
- [ ] **Color independence**: no information conveyed by color alone.
      Required fields have an asterisk or "(required)" label, not just
      red. Error states have an icon + text, not just red border.
- [ ] **Captions + transcripts**: every video has accurate captions
      (not auto-generated-only); prerecorded audio has a transcript;
      live broadcasts have live captions. No muted autoplay with
      critical info.
- [ ] **Form labels + ARIA**: every input has a programmatic label
      (`<label for>`, `aria-label`, or `aria-labelledby`). Error
      messages linked via `aria-describedby`. Required fields have
      `aria-required="true"`.
- [ ] **Accessible name matches visible text**: WCAG 2.5.3 — the
      accessible name (what screen readers announce) starts with or
      contains the visible text. `aria-label="Submit"` on a button
      visibly labeled "Send" is a failure.
- [ ] **Motion + animation**: honors `prefers-reduced-motion`. No
      auto-playing motion >5s. No flashing content >3 Hz (seizure
      risk, WCAG 2.3.1).
- [ ] **Zoom + reflow**: page works at 200% zoom without horizontal
      scroll on 1280px viewport (WCAG 1.4.10 Reflow).
- [ ] **Timing**: any session timeout under 20 hours has a warning
      modal with "extend" option (WCAG 2.2.1). Adjustable or
      extendable unless the timing is essential (exam, auction).
- [ ] **Language declared**: `<html lang>` set; language changes
      within content marked with `lang` attribute.

## Common 508 failures found in government software

1. **Custom controls without ARIA role** — a `<div>` that acts like a
   button is a checkbox to nobody. Either use `<button>` or give the
   div role="button", `tabindex="0"`, and keyboard handlers for
   Enter + Space.
2. **"Skip to main content" link styled `display:none`** — removes
   it from the keyboard flow. Use a visually-hidden class that
   reveals on focus.
3. **Modal traps focus but never returns it** — when modal closes,
   focus should return to the triggering element.
4. **Icon buttons with no accessible name** — `<button><svg/></button>`
   announces as "button" with no label. Add `aria-label`.
5. **PDF forms without tags** — a scanned PDF is inaccessible by
   default. Use tagged PDFs or HTML forms. Agency should reject
   untagged PDFs from vendors.
6. **Session timeout with no warning** — exam / benefits / license
   renewal workflows kick users with cognitive disabilities who need
   more time. Warning + extend option is mandatory.
7. **Color-only required-field indicator** — red asterisk with no
   "required" text fails color-independence.
8. **Video without captions** — procurement-blocker. Auto-generated
   captions are a starting draft, not compliance.

## VPAT authoring discipline

- One VPAT per product per year minimum (stale = >12 months).
- VPAT conformance levels: "Supports", "Partially Supports", "Does
  Not Support", "Not Applicable". NEVER mark "Supports" on a
  criterion without verified manual testing. "Partially Supports"
  requires a remediation plan with target date.
- VPAT authored by engineering + accessibility SME together; legal
  review before delivery to agency.
- Remediation backlog for any "Partially Supports" tracked in
  project management with agency-visible due dates.

## Reduced-motion respect

```css
@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
```

This applies to page-load animations, hero banners, auto-scrolling
carousels, parallax effects, and any decorative motion. Functional
motion (video playback on user request) stays as-is.

## Testing stack (minimum viable)

- **Automated**: axe-core or Pa11y in CI. Catches ~30-40% of issues.
- **Manual screen reader**: NVDA (free, Windows) + VoiceOver (macOS)
  on a monthly rotation per shipping squad. JAWS if an agency
  requires it contractually.
- **Manual keyboard-only**: engineer unplugs mouse for the session,
  completes each primary user path end-to-end.
- **Contrast checker**: browser devtools or Stark plugin.
- **Real user testing**: at least annually, paid session with
  disabled users across vision, motor, cognitive, hearing dimensions.

## References

- Revised Section 508 standards (36 CFR Part 1194)
- WCAG 2.1 AA (W3C Recommendation)
- VPAT 2.4 Rev 508 template (ITI)
- DOJ ADA Title II final rule on web/mobile accessibility (2024)
- `.claude/skills/frontend/accessibility-and-wcag/SKILL.md` (core
  accessibility reference — this skill is the government-specific
  overlay with VETO authority)
- `.claude/skills/domains/government/skills/public-procurement/SKILL.md`
  (procurement context — VPAT is a bid artifact)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…