Files
Claude-Code-Workflow/.codex/skills/team-visual-a11y/specs/wcag-matrix.md
catlog22 cac126e7bf feat: port 4 new UI team skills to Codex v4 format
Convert team-interactive-craft, team-motion-design, team-visual-a11y,
team-ui-polish from Claude agent format to Codex v4 API (spawn_agent,
wait_agent, close_agent, request_user_input). Each skill includes
SKILL.md with Delegation Lock + v4 Coordination, coordinator with
Scope Lock, worker roles with preserved domain content, and specs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:19:37 +08:00

134 lines
5.8 KiB
Markdown

# WCAG 2.1 Criteria Matrix
Reference matrix for visual accessibility audit. Maps WCAG success criteria to audit methods and responsible roles.
## Criteria Covered by This Team
| Criterion | Level | Automated | Manual | Check Method | Primary Role |
|-----------|-------|-----------|--------|-------------|-------------|
| 1.4.3 Contrast (Minimum) | AA | Yes | - | Color ratio calculation (4.5:1 normal, 3:1 large) | color-auditor |
| 1.4.6 Contrast (Enhanced) | AAA | Yes | - | Color ratio calculation (7:1 normal, 4.5:1 large) | color-auditor |
| 1.4.11 Non-text Contrast | AA | Partial | Yes | UI component border/fill contrast >= 3:1 | color-auditor |
| 1.4.4 Resize Text | AA | Yes | - | 200% zoom, no content loss | typo-auditor |
| 1.4.12 Text Spacing | AA | Partial | Yes | Override line-height 1.5x, letter-spacing 0.12em, word-spacing 0.16em | typo-auditor |
| 2.1.1 Keyboard | A | Partial | Yes | Tab through all interactive elements | focus-auditor |
| 2.1.2 No Keyboard Trap | A | - | Yes | Tab can escape all contexts (except intentional traps with Escape) | focus-auditor |
| 2.4.1 Bypass Blocks | A | Yes | - | Skip link present and functional | focus-auditor |
| 2.4.3 Focus Order | A | - | Yes | Logical tab sequence | focus-auditor |
| 2.4.7 Focus Visible | AA | Partial | Yes | Visible focus indicator on all interactive elements | focus-auditor |
| 2.4.11 Focus Not Obscured (Min) | AA | - | Yes | Focus indicator not hidden by overlays, sticky headers | focus-auditor |
| 2.5.8 Target Size (Minimum) | AA | Yes | - | Minimum 24x24px CSS pixel touch targets | focus-auditor |
| 4.1.2 Name, Role, Value | A | Yes | - | ARIA roles, labels, and states on interactive elements | focus-auditor |
| 4.1.3 Status Messages | AA | Partial | Yes | aria-live regions for dynamic status updates | focus-auditor |
## Audit Method Legend
| Method | Description |
|--------|-------------|
| Automated | Can be verified programmatically (CSS parsing, contrast calculation) |
| Manual | Requires human judgment or runtime interaction |
| Partial | Automated detection of presence, manual verification of correctness |
## Criterion Details
### 1.4.3 Contrast (Minimum) - AA
**Requirement**: Text and images of text have a contrast ratio of at least 4.5:1 (3:1 for large text).
**Large text definition**: >= 18pt (24px) or >= 14pt bold (18.66px bold).
**Exceptions**: Decorative text, logos, inactive UI components.
**Check**: Extract foreground/background colors -> calculate contrast ratio -> compare against threshold.
### 1.4.6 Contrast (Enhanced) - AAA
**Requirement**: Text has contrast ratio of at least 7:1 (4.5:1 for large text).
**Check**: Same as 1.4.3 but with higher thresholds.
### 1.4.11 Non-text Contrast - AA
**Requirement**: UI components and graphical objects have at least 3:1 contrast against adjacent colors.
**Applies to**: Buttons, inputs, icons, focus indicators, charts, custom controls.
**Check**: Extract border/fill colors of UI components -> calculate contrast against background.
### 1.4.4 Resize Text - AA
**Requirement**: Text can be resized up to 200% without loss of content or functionality.
**Check**: Zoom to 200% -> verify no horizontal scrolling, no content clipping, no overlap.
### 1.4.12 Text Spacing - AA
**Requirement**: Content must remain readable when user overrides:
- Line height to 1.5x font size
- Paragraph spacing to 2x font size
- Letter spacing to 0.12x font size
- Word spacing to 0.16x font size
**Check**: Apply overrides via JavaScript/CSS -> verify no content loss or overlap.
### 2.1.1 Keyboard - A
**Requirement**: All functionality available via keyboard (Enter, Space, Tab, Arrow keys, Escape).
**Check**: Tab to every interactive element -> activate with Enter/Space -> navigate composites with Arrows.
### 2.1.2 No Keyboard Trap - A
**Requirement**: Keyboard focus can be moved away from any component using standard keys.
**Exception**: Modal dialogs that trap focus intentionally (must have Escape to exit).
**Check**: Tab forward and backward through all elements -> verify escape from all containers.
### 2.4.1 Bypass Blocks - A
**Requirement**: Mechanism to bypass repeated content blocks (skip links, landmarks, headings).
**Check**: Verify skip link as first focusable element, target exists, focus moves correctly.
### 2.4.3 Focus Order - A
**Requirement**: Focus order preserves meaning and operability (logical sequence).
**Check**: Tab through page -> verify order matches visual/reading order.
### 2.4.7 Focus Visible - AA
**Requirement**: Keyboard focus indicator is visible on all interactive elements.
**Check**: Tab to each element -> verify visible outline/border/shadow change.
### 2.4.11 Focus Not Obscured (Minimum) - AA
**Requirement**: Focused element is not entirely hidden by other content (sticky headers, overlays, banners).
**Check**: Tab through elements near sticky/fixed positioned elements -> verify focus indicator partially visible.
### 2.5.8 Target Size (Minimum) - AA
**Requirement**: Interactive targets are at least 24x24 CSS pixels, or have adequate spacing.
**Exceptions**: Inline links within text, user agent default controls, essential presentation.
**Check**: Measure interactive element dimensions -> verify >= 24x24px or adequate spacing.
### 4.1.2 Name, Role, Value - A
**Requirement**: All UI components have accessible name, role, and state programmatically determined.
**Check**: Verify interactive elements have:
- Accessible name (text content, aria-label, aria-labelledby)
- Appropriate role (native HTML or ARIA role)
- Current state (aria-expanded, aria-pressed, aria-selected, aria-checked)
### 4.1.3 Status Messages - AA
**Requirement**: Status messages can be programmatically determined through role or properties without receiving focus.
**Check**: Verify dynamic content updates use `aria-live` or appropriate roles (`status`, `alert`, `log`).