Accessibility Conformance Report
VPAT® — Voluntary Product Accessibility Template · April 2026 · Version 2.0
Product Information
- Product Name:
- Aegis Firma
- Version:
- 2.0
- Report Date:
- April 2026
- Contact:
- support@aegisfirma.com
- Conformance Target:
- WCAG 2.2 Level AA
- Evaluation Method:
- Automated (Aegis Firma WCAG 2.2 AA scanner) + manual keyboard and screen reader testing
WCAG 2.2 Criteria
| Criterion | Level | Status | Remarks |
|---|---|---|---|
| 1.1.1 Non-text Content | A | Supports | All meaningful images have alt text. Decorative images use empty alt="". |
| 1.2.1 Audio-only / Video-only | A | Not Applicable | No audio or video content in current product. |
| 1.2.2 Captions (Prerecorded) | A | Not Applicable | No video content. |
| 1.2.3 Audio Description or Media Alternative | A | Not Applicable | No video content. |
| 1.2.4 Captions (Live) | AA | Not Applicable | No live media. |
| 1.2.5 Audio Description (Prerecorded) | AA | Not Applicable | No video content. |
| 1.3.1 Info and Relationships | A | Supports | Semantic HTML: landmarks, headings, lists, tables with scope, form labels via htmlFor / aria-labelledby. |
| 1.3.2 Meaningful Sequence | A | Supports | Reading order follows DOM order throughout. |
| 1.3.3 Sensory Characteristics | A | Supports | Instructions do not rely solely on shape, colour, size, or position. |
| 1.3.4 Orientation | AA | Supports | Layout adapts to both portrait and landscape. |
| 1.3.5 Identify Input Purpose | AA | Supports | autocomplete attributes applied to all identity fields (name, email). |
| 1.4.1 Use of Color | A | Supports | Colour is never the sole differentiator; icons, text labels, and patterns are also used. |
| 1.4.2 Audio Control | A | Not Applicable | No audio plays automatically. |
| 1.4.3 Contrast (Minimum) | AA | Supports | Text uses semantic tokens designed for ≥4.5:1 contrast, verified by manual contrast review. Residual cases are tracked in Known Issues below. |
| 1.4.4 Resize Text | AA | Supports | All text scales to 200% without loss of content or functionality. |
| 1.4.5 Images of Text | AA | Supports | No images of text are used; all text is live. |
| 1.4.10 Reflow | AA | Supports | Dashboard reflows to single column at 320 CSS pixels width. |
| 1.4.11 Non-text Contrast | AA | Supports | UI components (buttons, inputs, focus rings) meet 3:1 against adjacent colours. |
| 1.4.12 Text Spacing | AA | Supports | Increased letter-spacing, line-height, and word-spacing do not cause content loss. |
| 1.4.13 Content on Hover or Focus | AA | Supports | Tooltips and popovers are dismissible (Esc), hoverable, and persistent. |
| 2.1.1 Keyboard | A | Supports | All interactive elements reachable via Tab/Shift+Tab. Custom shortcuts: g+d/e/r/i and ⌘K palette. |
| 2.1.2 No Keyboard Trap | A | Supports | Modal focus traps are intentional per ARIA pattern; Esc always dismisses. |
| 2.1.4 Character Key Shortcuts | A | Supports | Single-character shortcuts (g, n, /) are suppressed inside text inputs. |
| 2.2.1 Timing Adjustable | A | Supports | Session expiry warning shown 10 minutes before logout; user can extend session. |
| 2.2.2 Pause, Stop, Hide | A | Supports | Loading bar and notification badge animations can be suppressed via prefers-reduced-motion. |
| 2.3.1 Three Flashes or Below Threshold | A | Supports | No flashing content. |
| 2.4.1 Bypass Blocks | A | Supports | Skip-to-content link appears on first Tab press on every page. |
| 2.4.2 Page Titled | A | Supports | Every page has a unique <title> set via Next.js metadata API. |
| 2.4.3 Focus Order | A | Supports | Focus order follows reading order; modals return focus to trigger on close. |
| 2.4.4 Link Purpose (In Context) | A | Supports | All links have descriptive text or aria-label. |
| 2.4.6 Headings and Labels | AA | Supports | One h1 per page; heading hierarchy descends without skipping levels. |
| 2.4.7 Focus Visible | AA | Supports | Focus ring: 2px indigo, offset 2px, visible on both light and dark backgrounds. |
| 2.4.11 Focus Not Obscured (Minimum) | AA | Supports | Sticky nav does not fully obscure focused elements; partially visible focus accepted. |
| 2.5.1 Pointer Gestures | A | Supports | No multi-point or path-based gestures required. |
| 2.5.2 Pointer Cancellation | A | Supports | All actions trigger on pointer up; down-event cancellation supported. |
| 2.5.3 Label in Name | A | Supports | Visible button labels match their accessible names. |
| 2.5.4 Motion Actuation | A | Not Applicable | No functionality relies on device motion. |
| 2.5.7 Dragging Movements | AA | Supports | Sortable table columns activate via Enter/Space keyboard alternative. |
| 2.5.8 Target Size (Minimum) | AA | Supports | All interactive elements have min 24×24 CSS px touch target enforced globally in CSS. |
| 3.1.1 Language of Page | A | Supports | lang="en" set on <html> in root layout. |
| 3.1.2 Language of Parts | AA | Not Applicable | Product is English-only; no multilingual text mixing. |
| 3.2.1 On Focus | A | Supports | No unexpected context change on focus. |
| 3.2.2 On Input | A | Supports | Form submission only occurs on explicit button press; no auto-submit. |
| 3.2.3 Consistent Navigation | AA | Supports | Sidebar, top nav, and Help button appear in the same location on every dashboard page. |
| 3.2.4 Consistent Identification | AA | Supports | Same UI components used consistently for equivalent functions across pages. |
| 3.2.6 Consistent Help | A | Supports | Help (?) button in top-right nav on every dashboard page; links to /docs/getting-started. |
| 3.3.1 Error Identification | A | Supports | All form errors shown with role="alert" and red text identifying the invalid field. |
| 3.3.2 Labels or Instructions | A | Supports | All inputs have visible labels; required fields marked with * and aria-required. |
| 3.3.3 Error Suggestion | AA | Supports | Error messages describe how to fix the issue, not just that it exists. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | AA | Supports | Destructive actions (delete, clear data) require explicit confirmation dialog. |
| 3.3.7 Redundant Entry | A | Supports | Session refresh is silent (Supabase token refresh); re-authentication only when session is truly expired. |
| 3.3.8 Accessible Authentication (Minimum) | AA | Supports | Magic-link login requires no cognitive function tests. Password login has show/hide toggle. |
| 4.1.1 Parsing | A | Supports | React/Next.js generates well-formed HTML. No duplicate IDs — generated via useId(). |
| 4.1.2 Name, Role, Value | A | Supports | All interactive components use ARIA roles via Radix primitives. Custom elements have aria-label/aria-expanded as appropriate. |
| 4.1.3 Status Messages | AA | Supports | Toast notifications use aria-live="polite" (info/success) and aria-live="assertive" (errors). Form validation errors use role="alert". |
Known Issues
1.4.3 Contrast (Minimum) (Minor)
Some placeholder text in search inputs may fall below 4.5:1 at certain viewport sizes. Tracked for remediation in v2.1.
Target fix: Q3 2026
2.4.6 Headings and Labels (Minor)
A small number of legacy dashboard sub-pages render the page title as a visually prominent div rather than a semantic h1. Being migrated to the Typography component.
Target fix: Q3 2026
Report an Accessibility Issue
If you encounter an accessibility barrier not listed above, please let us know. We aim to respond within 5 business days.
Submit accessibility feedback →DRAFT · This conformance report reflects our best assessment. Aegis Firma is not responsible for accessibility gaps introduced by third-party browser extensions or assistive technology incompatibilities beyond our control.