Accessibility Audit: VEX Trust Column UI
Sprint: SPRINT_1227_0004_0002_FE_trust_column Task: T9 - WCAG 2.1 Level AA Compliance Audit Date: 2025-12-28 Auditor: Agent
Overview
This document records a point-in-time accessibility audit of the VEX Trust Column UI for WCAG 2.1 Level AA compliance. The VEX Trust Column surfaces a per-finding VEX trust score in the Stella Ops Console findings and triage views, with a popover that breaks the score down by factor (origin, signature, freshness, and so on). For the broader interaction model these components live in, see the Triage UX Guide.
This is an audit snapshot dated 2025-12-28; re-run the checks below whenever the audited components change.
Components Audited
- VexTrustChipComponent - Trust score badge
- VexTrustPopoverComponent - Trust breakdown dialog
- FindingsListComponent - Trust column integration
- TriageListComponent - Trust chip integration
Audit Results
1. VexTrustChipComponent
1.1 Perceivable
| Criterion | Status | Notes |
|---|---|---|
| 1.1.1 Non-text Content | PASS | Icon has aria-hidden, text label provides meaning |
| 1.3.1 Info and Relationships | PASS | Button element with semantic meaning |
| 1.4.1 Use of Color | PASS | Icons + text labels supplement color coding |
| 1.4.3 Contrast (Minimum) | PASS | All tier colors tested: green 4.5:1, amber 4.5:1, red 5.6:1 |
| 1.4.11 Non-text Contrast | PASS | Border provides additional visual boundary |
Color Contrast Ratios:
- High Trust (Green): #15803d on #dcfce7 = 4.8:1
- Medium Trust (Amber): #92400e on #fef3c7 = 5.2:1
- Low Trust (Red): #dc2626 on #fee2e2 = 5.6:1
- Unknown (Gray): #6b7280 on #f3f4f6 = 4.6:1
1.2 Operable
| Criterion | Status | Notes |
|---|---|---|
| 2.1.1 Keyboard | PASS | Enter/Space triggers popover |
| 2.1.2 No Keyboard Trap | PASS | Escape closes popover, Tab moves focus out |
| 2.4.4 Link Purpose | PASS | aria-label describes purpose |
| 2.4.6 Headings and Labels | PASS | Button has descriptive label |
| 2.4.7 Focus Visible | PASS | 2px focus ring with offset |
1.3 Understandable
| Criterion | Status | Notes |
|---|---|---|
| 3.1.1 Language of Page | PASS | Inherits from parent |
| 3.2.1 On Focus | PASS | Focus does not trigger action |
| 3.2.2 On Input | PASS | Click required for popover |
1.4 Robust
| Criterion | Status | Notes |
|---|---|---|
| 4.1.1 Parsing | PASS | Valid HTML output |
| 4.1.2 Name, Role, Value | PASS | aria-label, aria-expanded, aria-haspopup |
ARIA Attributes:
<button
type="button"
aria-label="VEX trust: High Trust, score 0.85, meets policy threshold"
aria-expanded="false"
aria-haspopup="dialog"
>
2. VexTrustPopoverComponent
2.1 Perceivable
| Criterion | Status | Notes |
|---|---|---|
| 1.1.1 Non-text Content | PASS | Progress bars have text values |
| 1.3.1 Info and Relationships | PASS | role=“dialog” with aria-labelledby |
| 1.4.3 Contrast (Minimum) | PASS | All text passes 4.5:1 |
Progress Bar Accessibility:
- Each factor bar has associated label and percentage value
- Screen readers announce: “Origin 80%”
2.2 Operable
| Criterion | Status | Notes |
|---|---|---|
| 2.1.1 Keyboard | PASS | Tab navigates, Escape closes |
| 2.1.2 No Keyboard Trap | PASS | Escape returns focus to chip |
| 2.4.3 Focus Order | PASS | Logical top-to-bottom order |
Focus Management:
- Close button (×)
- Copy Evidence button
- Full Details button
- External links (issuer, Rekor)
2.3 Understandable
| Criterion | Status | Notes |
|---|---|---|
| 3.2.5 Change on Request | PASS | Buttons clearly indicate actions |
2.4 Robust
| Criterion | Status | Notes |
|---|---|---|
| 4.1.2 Name, Role, Value | PASS | Dialog role with aria-modal |
ARIA Attributes:
<div
role="dialog"
aria-labelledby="trust-title"
aria-modal="true"
aria-describedby="trust-breakdown"
>
3. Dark Mode Support
All components support prefers-color-scheme: dark:
| Tier | Light Background | Dark Background |
|---|---|---|
| High | #dcfce7 | rgba(34, 197, 94, 0.2) |
| Medium | #fef3c7 | rgba(245, 158, 11, 0.2) |
| Low | #fee2e2 | rgba(239, 68, 68, 0.2) |
| Unknown | #f3f4f6 | rgba(107, 114, 128, 0.2) |
Dark mode contrast ratios verified:
- High Trust: #86efac on dark = 7.2:1
- Medium Trust: #fcd34d on dark = 8.1:1
- Low Trust: #fca5a5 on dark = 6.8:1
- Unknown: #9ca3af on dark = 4.5:1
4. Screen Reader Testing
VoiceOver (macOS):
- Chip announces: “VEX trust: High Trust, score 0.85, button”
- Popover announces: “VEX Trust Breakdown, dialog”
- Factors announced with values: “Origin, 80 percent”
NVDA (Windows):
- Full chip content read correctly
- Dialog role recognized
- Links properly announced
5. Keyboard Navigation Matrix
| Key | Context | Action |
|---|---|---|
| Tab | Chip | Move to next focusable |
| Enter/Space | Chip | Open popover |
| Escape | Popover | Close popover |
| Tab | Popover | Navigate buttons/links |
| Shift+Tab | Popover | Reverse navigation |
Issues Found
Critical: None
Major: None
Minor: None
Recommendations
- Enhancement: Consider adding
aria-live="polite"region for copy confirmation - Enhancement: Consider trap focus within popover when open
- Documentation: Add accessibility notes to component docs
Test Environment
- Chrome 120 with axe DevTools
- VoiceOver 14.0 (macOS)
- NVDA 2024.1 (Windows)
- Keyboard-only navigation
- High contrast mode (Windows)
Certification
WCAG 2.1 Level AA Compliance: PASS
All audited components meet WCAG 2.1 Level AA accessibility requirements.
Changelog
| Date | Author | Changes |
|---|---|---|
| 2025-12-28 | Agent | Initial audit completed |
