Accessibility
WCAG 2.2 compliance built into the token system. Every accessibility mode has purpose-built token overrides, not generic fallbacks.
Focus Ring
WCAG 2.4.13 Focus Appearance — 2px ring with 2px offset from element edge.
--focus-ring-width: 2px
--focus-ring-offset: 2px
--focus-ring-color: var(--ring)
Touch Targets
Minimum interactive target sizes for different contexts. Ensures touch-friendly interactions on all devices.
WCAG 2.5.8 Level AAA / Apple HIG
Toolbar buttons, primary actions
Accessibility Media Queries
5 media queries with dedicated token overrides. Each targets a specific user need.
All motion-duration-* tokens set to 0ms. Animations removed but content changes still occur.
Foreground/background delta increased. Muted colors darkened. Borders strengthened. Applied to both light and dark modes.
Alpha-blended tokens replaced with solid equivalents. Prevents transparency-caused readability issues.
Minimal surgical overrides — system handles most colors. Diff indicators use system color keywords (LinkText, VisitedText, Highlight).
All colors resolve to black-on-white. Backgrounds transparent. Selection, cursors, and revision colors hidden. Editor renders as plain text.
Reading Measures
Maximum line lengths prevent eye strain and improve reading speed.
Skill results, descriptions, prose. ~12\u201315 words per line.
Fixed by WGA standard. ~55\u201360 chars at 12pt Courier.
Multi-Signal Encoding
Critical information is never conveyed by color alone. Diff indicators use color + border + text decoration for triple redundancy.
Signal 1: Color (hue)
Signal 2: Border (left accent)
Signal 3: Symbol
In forced-colors mode, system color keywords (LinkText, VisitedText, Highlight) replace token colors. The border width increases to 3px thick for visibility.
ARIA Patterns for States
Standardized ARIA attributes for loading, error, and empty states across all components.
| State | ARIA | Behavior |
|---|---|---|
| Loading | aria-busy="true" | Screen reader announces "loading"; waits for busy=false |
| Error | role="alert" aria-live="assertive" | Interrupts current output to announce error |
| Empty | role="status" aria-live="polite" | Announces after current output finishes |
| AI Streaming | aria-busy="true" on container | Only state transitions announced (not tokens) |
| Complete | aria-live="polite" | "Skill complete. N suggestions ready for review." |