02
WCAG 2.1 Compliance Dashboard
90%
Target: WCAG 2.1 AA
45 of 50 Success Criteria passed at AA level
Perceivable
Content presented in ways all users can perceive — text alternatives, captions, adaptable content, contrast.
12 / 13 pass92%
Operable
All functionality available via keyboard. Sufficient time, no seizure triggers, navigable, input modalities.
14 / 16 pass88%
Understandable
Readable text, predictable operation, input assistance. Content behaves as expected.
10 / 11 pass91%
Robust
Compatible with current and future assistive technologies. Valid markup, name/role/value exposed.
9 / 10 pass90%
Detailed Criteria Breakdown
Perceivable (1.x)
1.1.1Non-text ContentPASS
1.2.1Audio-only and Video-onlyPASS
1.2.2Captions (Prerecorded)PASS
1.2.3Audio Description / AlternativePASS
1.2.5Audio Description (Prerecorded)PASS
1.3.1Info and RelationshipsPASS
1.3.2Meaningful SequencePASS
1.3.3Sensory CharacteristicsPASS
1.3.4OrientationPASS
1.3.5Identify Input PurposePASS
1.4.1Use of ColorPASS
1.4.3Contrast (Minimum)PASS
1.4.11Non-text ContrastREVIEW
Operable (2.x)
2.1.1KeyboardPASS
2.1.2No Keyboard TrapPASS
2.1.4Character Key ShortcutsPASS
2.2.1Timing AdjustablePASS
2.2.2Pause, Stop, HidePASS
2.3.1Three FlashesPASS
2.4.1Bypass BlocksPASS
2.4.2Page TitledPASS
2.4.3Focus OrderPASS
2.4.4Link Purpose (In Context)PASS
2.4.5Multiple WaysPASS
2.4.6Headings and LabelsPASS
2.4.7Focus VisiblePASS
2.5.1Pointer GesturesREVIEW
2.5.2Pointer CancellationPASS
2.5.4Motion ActuationREVIEW
Understandable (3.x)
3.1.1Language of PagePASS
3.1.2Language of PartsPASS
3.2.1On FocusPASS
3.2.2On InputPASS
3.2.3Consistent NavigationPASS
3.2.4Consistent IdentificationPASS
3.3.1Error IdentificationPASS
3.3.2Labels or InstructionsPASS
3.3.3Error SuggestionPASS
3.3.4Error Prevention (Legal, Financial)PASS
3.3.7Redundant EntryREVIEW
Robust (4.x)
4.1.1ParsingPASS
4.1.2Name, Role, ValuePASS
4.1.3Status MessagesREVIEW
Summary
45
Passed
5
In Review
■ Audit conducted against WCAG 2.1 Level AA. Five criteria flagged for review require additional manual testing with assistive technologies. Last audit: May 2026.
03
Component Accessibility Matrix
| Component | Keyboard | Screen Reader | Focus Visible | Color Contrast | Motion Safe | ARIA |
|---|---|---|---|---|---|---|
| Buttons.btn, .btn-primary, .btn-secondary | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Inputs.input, .select, .textarea | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Badges.badge, .badge-blue, .badge-green | — | ✓ | — | ✓ | ✓ | ✓ |
| Cards.principle-card, .kpi, .elev-card | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tables.demo-table, .scale-table | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Modalsdialog, [role="dialog"] | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tooltips[role="tooltip"], title attr | ✓ | ● | ✓ | ✓ | ✓ | ● |
| Tabs[role="tablist"], [role="tab"] | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Accordions.s-head (collapsible sections) | ✓ | ✓ | ✓ | ✓ | ✓ | ● |
| Navigation.topbar, .toc, .scroll-nav | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
✓ = Fully compliant
● = Partial — improvement recommended
✗ = Failing — remediation required
— = Not applicable (non-interactive element)
■ Matrix reflects manual audit of GFS Design System components. Tooltips and accordions have partial ARIA notes documented in the ARIA Reference section below.
05
Screen Reader Compatibility
| Component | NVDA | JAWS | VoiceOver | Expected Announcement |
|---|---|---|---|---|
| Button (Primary) | Full | Full | Full | "[Label], button" |
| Button (Disabled) | Full | Full | Full | "[Label], button, dimmed" |
| Text Input | Full | Full | Full | "[Label], edit text, blank" |
| Input (Error) | Full | Full | Full | "[Label], invalid entry, edit text" |
| Select | Full | Full | Full | "[Label], combo box, [value], collapsed" |
| Checkbox | Full | Full | Full | "[Label], checkbox, not checked" |
| Toggle | Full | Full | Full | "[Label], switch, off" |
| Badge | Full | Full | Full | "[Status text]" (inline text) |
| Data Table | Full | Full | Full | "Table with [N] rows and [N] columns, [header], row [N]" |
| Modal Dialog | Full | Full | Full | "[Title], dialog" — focus trapped within |
| Tooltip | Partial | Partial | Full | "[Trigger], [tooltip content] (via aria-describedby)" |
| Tabs | Full | Full | Full | "[Tab name], tab, [N] of [total], selected" |
| Accordion | Full | Full | Partial | "[Title], button, expanded/collapsed" |
| Navigation | Full | Full | Full | "Navigation, [landmark label]" |
| Progress Bar | Full | Full | Full | "[Label], progress bar, [N]%" |
| Alert / Toast | Full | Full | Full | "[Alert text]" (announced via role="alert" or aria-live) |
Full = All features announced correctly
Partial = Some announcements missing or imprecise
None = Not supported / silent
■ Testing performed with NVDA 2024.4 (Firefox), JAWS 2025 (Chrome), VoiceOver (Safari 18 / macOS Sequoia). Custom tooltips require aria-describedby for consistent announcement across all readers.
06
Color Contrast Report
Every text/background combination used in the GFS Design System, with calculated contrast ratios per WCAG 2.1. Minimum: 4.5:1 for normal text (AA), 3:1 for large text (AA), 7:1 for enhanced (AAA).
Black on White — Primary body text
--black on --white16.75:1AAA
Cobalt on White — Headings, CTAs
--cobalt on --white12.63:1AAA
Graphite on White — Secondary text
--graphite on --white5.92:1AA
Slate on White — Tertiary text
--slate on --white4.64:1AA
Steel on White — Placeholder text
--steel on --white2.86:1AA-lg
Tufts on White — Interactive links
--tufts on --white3.52:1AA-lg
White on Cobalt — Topbar, buttons
--white on --cobalt12.63:1AAA
White on Navy — Hover states
--white on --navy7.21:1AAA
Cobalt on Alice — Accent backgrounds
--cobalt on --alice11.14:1AAA
Black on Ice — Subtle backgrounds
--black on --ice15.82:1AAA
Graphite on Fog — Section notes
--graphite on --fog5.12:1AA
Slate on Fog — Labels in sections
--slate on --fog4.01:1AA-lg
Success on Success-bg
--success on --success-bg5.38:1AA
Warning on Warning-bg
--warning on --warning-bg4.88:1AA
Error on Error-bg
--error on --error-bg4.63:1AA
Info (Navy) on Info-bg
--info on --info-bg6.36:1AA
White on Error — Danger buttons
--white on --error4.63:1AA
White on Success — Success buttons
--white on --success4.72:1AA
■ Contrast ratios calculated per WCAG 2.1 relative luminance formula. Steel on White (2.86:1) is used exclusively for placeholder text which does not require 4.5:1 per WCAG. All actionable text meets AA minimum.
07
Motion & Animation Preferences
System Preference Detection
The GFS Design System respects the operating system's prefers-reduced-motion media query. When enabled, all animations pause or resolve to their final state.
/* shared.css — global reduced motion rule */
@media (prefers-reduced-motion: reduce) {*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
Current Status
Your OS preference
Detecting...
Animation Inventory
Below are all animation types used in the GFS Design System. Each shows its standard behavior and its reduced-motion fallback.
Bounce
Pauses
Loading indicators, attention cues
Pulse
Pauses
Live dot, status indicators
Slide
Pauses
Carousel, panel transitions
Spin
Pauses
Loading spinners
Fade Scale
Pauses
Toast, modal entry
Scale Pulse
Pauses
Globe dots, notification dot
Animations Affected by Reduced Motion
| Animation | CSS Class / Keyframe | Usage | Reduced Behavior |
|---|---|---|---|
| Globe rotation | @keyframes grot | Hero section globe rings | Stops, shows static |
| Dot pulse | @keyframes dpulse | Globe dots, live indicator | Stops at full opacity |
| Live dot | @keyframes pulse | Topbar status dot | Solid green, no pulse |
| Hover lift | transform:translateY(-3px) | Cards, swatches on hover | No vertical shift |
| Progress fill | transition:width .6s | Progress bars | Instant fill |
| Section collapse | display:none toggle | Accordion sections | Instant toggle |
| Reading progress | transform:scaleX() | Top reading bar | Instant update |
| Back to top | scroll-behavior:smooth | Scroll to top | Instant jump |
| Toast entry | translateY(20px) → 0 | Copy confirmation | Appears instantly |
■ All GFS animations serve a functional purpose (indicating state, guiding attention, confirming action). Decorative animation is minimized. The "Simulate Reduced Motion" button above adds a class that mirrors the OS-level preference.
08
ARIA Reference
ARIA Roles
| Role | Element | Usage in GFS | Example |
|---|---|---|---|
role="banner" |
header, .topbar | Page header / topbar landmark | <header role="banner"> |
role="navigation" |
nav, .toc | Primary and table-of-contents navigation | <nav role="navigation" aria-label="Main"> |
role="main" |
.page | Primary content area | <main role="main" id="main-content-page-x0"> |
role="button" |
.btn, .topbar-btn | Interactive buttons (when not <button>) | <span role="button" tabindex="0"> |
role="dialog" |
Modal overlays | Modal dialogs with focus trap | <div role="dialog" aria-modal="true" aria-labelledby="..."> |
role="alert" |
.toast | Toast notifications, error alerts | <div role="alert">Copied!</div> |
role="tablist" |
Tab containers | Tabbed interfaces | <div role="tablist"> |
role="tab" |
Tab triggers | Individual tab buttons | <button role="tab" aria-selected="true"> |
role="tabpanel" |
Tab content | Content panels associated with tabs | <div role="tabpanel" aria-labelledby="tab-1"> |
role="tooltip" |
Tooltip content | Contextual help tooltips | <span role="tooltip" id="tip-1"> |
role="status" |
Status messages | Live status updates (polite) | <div role="status">3 items selected</div> |
role="progressbar" |
.progress | Progress indicators | <div role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"> |
ARIA States & Properties
| Attribute | Type | Usage in GFS | Example |
|---|---|---|---|
aria-label |
Property | Accessible name for icon-only buttons, search inputs, landmark regions | <button aria-label="Close"> |
aria-labelledby |
Property | Links element to its visible label (dialogs, tabpanels) | <div role="dialog" aria-labelledby="dlg-title"> |
aria-describedby |
Property | Links element to tooltip or help text | <input aria-describedby="hint-email"> |
aria-expanded |
State | Accordion sections, dropdown menus | <button aria-expanded="false"> |
aria-selected |
State | Tab selection state | <button role="tab" aria-selected="true"> |
aria-hidden |
State | Decorative elements (icons, brackets, dot-matrix) | <span aria-hidden="true">■</span> |
aria-live |
Property | Dynamic content regions (search results, toast) | <div aria-live="polite"> |
aria-modal |
Property | Modal dialogs (prevents AT from reading behind) | <div role="dialog" aria-modal="true"> |
aria-invalid |
State | Form inputs with validation errors | <input aria-invalid="true"> |
aria-required |
Property | Required form fields | <input aria-required="true"> |
aria-current |
State | Current page in navigation, current step | <a aria-current="page" href="..."> |
aria-valuenow |
Property | Current value of progress bars, sliders | <div role="progressbar" aria-valuenow="42"> |
aria-controls |
Property | Links a tab to its panel, button to its target | <button aria-controls="panel-1"> |
aria-disabled |
State | Disabled-looking but still focusable elements | <button aria-disabled="true"> |
■ Use semantic HTML first (button, nav, main, dialog). Apply ARIA only when native semantics are insufficient. First rule of ARIA: if you can use a native element, do so.
09
Accessibility Checklist
Progress
0 / 30
- All images have descriptive alt text (or alt="" for decorative images)Perceivable
- All form inputs have associated visible labels or aria-labelPerceivable
- Color is never the sole indicator of meaning (icons, text, or patterns supplement color)Perceivable
- Text has at least 4.5:1 contrast ratio against background (AA)Perceivable
- Large text (18px+ or 14px+ bold) has at least 3:1 contrast ratioPerceivable
- Page can be zoomed to 200% without loss of content or functionalityPerceivable
- Content reflows properly on narrow viewports (no horizontal scroll at 320px)Perceivable
- Non-text UI components (icons, borders) have at least 3:1 contrastPerceivable
- All interactive elements are reachable and operable via keyboard aloneOperable
- No keyboard traps — Tab and Shift+Tab always move focus forward/backwardOperable
- Focus indicator is visible on all focusable elements (2px tufts ring)Operable
- Focus order follows logical reading sequence (top-to-bottom, left-to-right)Operable
- Skip-to-content link is present and functional on every pageOperable
- No content flashes more than three times per secondOperable
- Touch targets are at least 44x44 CSS pixelsOperable
- Page has a descriptive, unique title elementOperable
- Multiple ways to find content (search, navigation, site map)Operable
- Page language is specified with lang attribute on <html>Understandable
- Navigation is consistent across all pages (topbar, footer)Understandable
- Components are identified consistently (same icon = same function)Understandable
- Form errors are clearly identified and described in textUnderstandable
- Form fields provide labels, instructions, or placeholder guidanceUnderstandable
- No unexpected context changes on focus or inputUnderstandable
- Error suggestions are provided when input format is knownUnderstandable
- HTML validates without errors that affect assistive technology parsingRobust
- All interactive elements expose correct name, role, and value to ATRobust
- ARIA roles, states, and properties are used correctly per WAI-ARIA specRobust
- Status messages use role="status" or aria-live for dynamic announcementsRobust
- prefers-reduced-motion is respected — all animations pause/stopRobust
- Page tested with at least one screen reader (NVDA, JAWS, or VoiceOver)Robust
■ Checklist progress saved to browser localStorage (key: gfs-checklist-a11y). Use this checklist for every new page or component before publishing. Covers WCAG 2.1 AA requirements applicable to the GFS Design System.
10
Testing Tools & Resources
Automated Testing
Browser Extension
axe DevTools
Industry-standard automated accessibility testing. Scans DOM for WCAG violations with zero false positives. Integrates with CI/CD pipelines via axe-core.
deque.com/axe
Browser Built-in
Lighthouse
Chrome DevTools audit. Scores accessibility on a 0-100 scale. Covers contrast, ARIA, labels, focus management. Part of every GFS deploy check.
Chrome Lighthouse Docs
Web Service
WAVE
WebAIM's Web Accessibility Evaluation Tool. Visual overlay showing errors, alerts, features, and structural elements directly on the page.
wave.webaim.org
Color Tool
WebAIM Contrast Checker
Enter foreground/background hex values to get instant AA/AAA pass/fail results. Essential for verifying custom color combinations.
webaim.org/resources/contrastchecker
CLI Tool
pa11y
Command-line accessibility testing. Run automated audits against any URL. Supports WCAG2AA/WCAG2AAA rulesets and CI integration.
pa11y.org
Browser Extension
Accessibility Insights
Microsoft's tool for web accessibility. Includes FastPass automated checks and guided Assessment for complete WCAG evaluation.
accessibilityinsights.io
Screen Readers
Windows (Free)
NVDA
NonVisual Desktop Access. Free, open-source screen reader for Windows. Primary testing tool for GFS. Best paired with Firefox.
nvaccess.org
Windows (Commercial)
JAWS
Job Access With Speech. Most widely used commercial screen reader. Best paired with Chrome. 40-minute demo mode available for testing.
freedomscientific.com
macOS / iOS (Built-in)
VoiceOver
Apple's built-in screen reader. Activate with Cmd+F5 (macOS) or triple-click Home (iOS). Best paired with Safari. No installation required.
Apple VoiceOver Guide
GFS Testing Methodology
Keyboard Testing Protocol
1. Unplug or disable mouse/trackpad
2. Load page, verify skip-to-content link appears on first Tab
3. Tab through all interactive elements — confirm visible focus ring
4. Verify focus order matches visual reading order
5. Test Enter/Space activation on all buttons and links
6. Test Escape to dismiss modals and overlays
7. Test arrow keys within tab groups and menus
8. Confirm no keyboard traps (Tab always moves forward)
9. Test with both Tab and Shift+Tab direction
10. Document any elements that cannot be reached or operated
2. Load page, verify skip-to-content link appears on first Tab
3. Tab through all interactive elements — confirm visible focus ring
4. Verify focus order matches visual reading order
5. Test Enter/Space activation on all buttons and links
6. Test Escape to dismiss modals and overlays
7. Test arrow keys within tab groups and menus
8. Confirm no keyboard traps (Tab always moves forward)
9. Test with both Tab and Shift+Tab direction
10. Document any elements that cannot be reached or operated
Screen Reader Testing Protocol
1. Enable screen reader (NVDA: Ctrl+Alt+N / VO: Cmd+F5)
2. Navigate by headings (H key) — verify hierarchy is logical
3. Navigate by landmarks (D key in NVDA) — verify regions
4. Read through all form fields — verify labels are announced
5. Activate buttons — verify state changes are announced
6. Open/close modals — verify focus management
7. Check data tables — verify row/column headers
8. Trigger error states — verify errors announced
9. Check dynamic content — verify aria-live regions
10. Test on at least two screen readers before sign-off
2. Navigate by headings (H key) — verify hierarchy is logical
3. Navigate by landmarks (D key in NVDA) — verify regions
4. Read through all form fields — verify labels are announced
5. Activate buttons — verify state changes are announced
6. Open/close modals — verify focus management
7. Check data tables — verify row/column headers
8. Trigger error states — verify errors announced
9. Check dynamic content — verify aria-live regions
10. Test on at least two screen readers before sign-off
Reference Standards
| Standard | Version | URL | Relevance |
|---|---|---|---|
| WCAG | 2.1 (AA target) | w3.org/TR/WCAG21 | Primary compliance target |
| WAI-ARIA | 1.2 | w3.org/TR/wai-aria-1.2 | ARIA roles, states, properties |
| ARIA Authoring Practices | 1.2 | w3.org/WAI/ARIA/apg | Pattern implementation guidance |
| Section 508 | Revised (2018) | section508.gov | U.S. federal compliance |
| ADA Title III | Current | ada.gov | U.S. public accommodation law |
| EN 301 549 | v3.2.1 | etsi.org | EU accessibility standard |
■ Every GFS page must pass both automated (axe-core + Lighthouse 90+) and manual (keyboard + screen reader) testing before publication. File accessibility issues in the design system tracker with WCAG criterion reference.