Voluntary Product
Accessibility Template
Civic Filament conformance report against WCAG 2.1 Level A + AA, US Section 508 Revised, and EN 301 549. This is a self-assessed internal draft. A third-party audit has not yet been commissioned.
Applicable standards
Terms & conformance summary
WCAG 2.1 Report — Level A & AA
50 success criteria, self-assessed. Each row lists the criterion, WCAG level, our conformance level, and remarks. Levels beyond AA (AAA) are not covered.
| SC | CRITERION | LEVEL | CONFORMANCE | REMARKS |
|---|---|---|---|---|
| 1.1.1 | Non-text Content | A | Supports | Iconographic buttons carry aria-label. Decorative SVGs are marked aria-hidden. Animated interview simulation and consensus graph provide sr-only text summaries. |
| 1.2.1 | Audio-only and Video-only (Prerecorded) | A | Not Applicable | No prerecorded audio-only or video-only media. |
| 1.2.2 | Captions (Prerecorded) | A | Not Applicable | No prerecorded video with audio. |
| 1.2.3 | Audio Description or Media Alternative (Prerecorded) | A | Not Applicable | No prerecorded video. |
| 1.2.4 | Captions (Live) | AA | Not Applicable | No live video with audio. |
| 1.2.5 | Audio Description (Prerecorded) | AA | Not Applicable | No prerecorded video. |
| 1.3.1 | Info and Relationships | A | Partially Supports | Semantic landmarks (header, main, nav, footer). Inputs on public forms have programmatically associated labels. Rating groups use role="group" and aria-labelledby. Heading hierarchy has been spot-checked on the main routes, not verified on every page. |
| 1.3.2 | Meaningful Sequence | A | Supports | Reading order matches visual order on the routes we spot-checked (landing, participate, LRD, auth, legal pages). |
| 1.3.3 | Sensory Characteristics | A | Supports | Instructions do not rely on shape, color, or position alone. All interactive controls carry text or accessible names. |
| 1.3.4 | Orientation | AA | Supports | Content works in both portrait and landscape orientations. No orientation lock. |
| 1.3.5 | Identify Input Purpose | AA | Supports | autoComplete attributes present on email/password fields (email, current-password, new-password). |
| 1.4.1 | Use of Color | A | Supports | Color is never the sole indicator. Category chips also carry text labels; toggle states use aria-pressed in addition to color changes. |
| 1.4.2 | Audio Control | A | Not Applicable | No auto-playing audio. |
| 1.4.3 | Contrast (Minimum) | AA | Partially Supports | Theme text colors, including tertiary (secondary-label) text, meet at least 4.5:1 against the background in all three themes (Void, Lumina, Cipher). Self-assessed with a contrast checker on the theme tokens; a few hard-coded inline colors and the static /s/ pages have not been re-checked. Cipher is a stylistic theme, not a high-contrast mode; the separate high-contrast toggle provides that. |
| 1.4.4 | Resize Text | AA | Partially Supports | Minimum text size is 11px. The in-page larger-text control scales text up site-wide, and browser zoom works. Text is sized in fixed CSS pixels in places, so resizing relies on browser zoom or the larger-text control; 200% zoom has been spot-checked, not verified on every route. |
| 1.4.5 | Images of Text | AA | Supports | No images of text used for content. OG images are share previews, not on-page content. |
| 1.4.10 | Reflow | AA | Partially Supports | Layouts are responsive and the main routes reflow at 320 CSS px in our spot checks. Wide data tables (including the table on this page) scroll horizontally inside their container. |
| 1.4.11 | Non-text Contrast | AA | Partially Supports | Interactive control borders (input focus rings, button borders) generally meet 3:1 against adjacent colors on the default theme. Formal verification of every state (default / hover / focus / disabled) is a known open item. |
| 1.4.12 | Text Spacing | AA | Partially Supports | Not systematically tested with text-spacing overrides. No fixed-height text containers are known to clip, but this has only been self-assessed. |
| 1.4.13 | Content on Hover or Focus | AA | Supports | The consensus-map hover tooltip is dismissible by moving away from the node; content remains visible while hovered; no obscuring of triggering content. |
| 2.1.1 | Keyboard | A | Partially Supports | Links, buttons, form fields, the mobile menu, the theme switcher and the accessibility controls are keyboard-operable in our spot checks. Not every interactive visualization (for example, consensus-map node tooltips) has been verified with a keyboard. |
| 2.1.2 | No Keyboard Trap | A | Supports | No keyboard traps found in spot checks. The age gate and the cookie banner are proper dialogs: focus moves into them and they can be completed or dismissed with the keyboard. |
| 2.1.4 | Character Key Shortcuts | A | Supports | No single-character keyboard shortcuts are used. |
| 2.2.1 | Timing Adjustable | A | Supports | The interview has no time limit. Sessions persist across page reloads via anonymous session token. |
| 2.2.2 | Pause, Stop, Hide | A | Supports | Framer-motion animations honor prefers-reduced-motion through a global MotionConfig, and the in-page reduced-motion toggle stops animations without changing the OS setting. The landing-page interview simulation jumps to its completed state when motion is reduced. |
| 2.3.1 | Three Flashes or Below Threshold | A | Supports | No content flashes more than three times per second. |
| 2.4.1 | Bypass Blocks | A | Supports | A "Skip to main content" link is the first focusable element on every page. Semantic landmark structure supports assistive-tech shortcuts. |
| 2.4.2 | Page Titled | A | Supports | Every route defines a Next.js metadata.title. The site template applies "%s | Civic Filament". |
| 2.4.3 | Focus Order | A | Supports | DOM order matches visual order on the routes spot-checked; no positive tabindex values in the codebase. |
| 2.4.4 | Link Purpose (In Context) | A | Supports | Link text is descriptive. "Explore further" widget uses full-sentence link text with helper detail. Icon-only navigation links carry aria-label. |
| 2.4.5 | Multiple Ways | AA | Supports | Users can find pages via primary nav, footer (Protocol / Trust / Deploy / Legal columns), sitemap, and cross-links between related pages. |
| 2.4.6 | Headings and Labels | AA | Partially Supports | Headings describe their topic and public form labels describe purpose. Some secondary controls rely on aria-label rather than a visible label; not every page has been audited. |
| 2.4.7 | Focus Visible | AA | Supports | Global :focus-visible outline defined in globals.css (2px solid, glow-cyan, 2px offset). Overrides on inputs use border-color changes on focus; global outline still applies for keyboard-visible focus. |
| 2.5.1 | Pointer Gestures | A | Supports | No multipoint or path-based gestures required. All interactions work with a single tap or click. |
| 2.5.2 | Pointer Cancellation | A | Supports | Buttons fire on up-event; users can drag away to cancel. |
| 2.5.3 | Label in Name | A | Supports | Visible labels match the programmatic accessible name for the controls we checked. |
| 2.5.4 | Motion Actuation | A | Not Applicable | No functionality relies on device motion or user gesture. |
| 3.1.1 | Language of Page | A | Supports | Root <html lang="en"> declared in the root layout. |
| 3.1.2 | Language of Parts | AA | Partially Supports | The UI and the mediator are English-only. If a participant writes in another language, those turns are not marked with a lang attribute. |
| 3.2.1 | On Focus | A | Supports | Focus does not trigger context changes anywhere. |
| 3.2.2 | On Input | A | Supports | Form inputs do not automatically submit or navigate. Submit requires explicit button activation. |
| 3.2.3 | Consistent Navigation | AA | Supports | Primary nav is identical across routes. Footer structure is identical across routes. |
| 3.2.4 | Consistent Identification | AA | Supports | Icons and controls with the same function are labeled consistently across the site. |
| 3.3.1 | Error Identification | A | Partially Supports | Form errors are surfaced in text below the affected form (sign-in, forgot password). Field-level inline error styling is a known open item for auth flows. |
| 3.3.2 | Labels or Instructions | A | Partially Supports | Inputs on public forms have labels; optional fields are marked. A few inputs (for example, the evidence date field) are labelled programmatically rather than with visible text. |
| 3.3.3 | Error Suggestion | AA | Partially Supports | Password validation returns descriptive text. Other error messages describe the problem but do not always suggest a specific fix. Open action: standardize error copy across the auth flow. |
| 3.3.4 | Error Prevention (Legal, Financial, Data) | AA | Supports | Account deletion (irreversible) requires typing "DELETE" as an explicit confirmation. Data-export flow is confirmable and reversible. |
| 4.1.1 | Parsing | A | Supports | Obsoleted in WCAG 2.2 but retained for VPAT 2.5. React renders valid HTML with unique IDs on all form controls. |
| 4.1.2 | Name, Role, Value | A | Supports | Semantic elements used throughout. Custom toggle buttons carry aria-pressed. Rating group carries role="group" and aria-labelledby. Icon-only buttons carry aria-label. |
| 4.1.3 | Status Messages | AA | Partially Supports | Form submission success messages are announced via visible confirmation. Feedback rating change uses aria-live="polite". Not every async status change (e.g., "sending…" on the demo booking form) is announced via a live region yet. |
Section 508 supplemental (Chapter 5 — Software)
Supports. Platform-level accessibility settings (OS zoom, reduced motion, screen reader) are respected, and the site has its own high contrast, larger text and reduced motion controls. It respectsprefers-reduced-motion in CSS and, through a global MotionConfig, in framer-motion animations.
Not Applicable. Civic Filament is a web application accessed via standard browsers; it does not implement its own accessibility service layer.
Supports. Content honors user-agent text-spacing, font-size, and color preferences.
Not Applicable. No alternative UI is provided.
Supports. Content-creation flows (interview, perspective submission, feedback) preserve accessibility information in the underlying data model — the LRD renders semantic HTML from that model.
Legal & use notice
This document is a self-assessed conformance statement in the VPAT 2.5 Rev 508 format, dated 2026-09-30. It does not represent a signed third-party audit. Statements of “Supports” reflect our good-faith evaluation of the current build against each success criterion, using the methods listed above. Statements of “Partially Supports” transparently name open items.
Buyers with legal-conformance obligations (federal Section 508 procurement, EU accessibility directive, ADA Title II) should treat this as a starting point for their own evaluation. A third-party audit has not yet been commissioned; if one is, its findings will supersede this document. For questions or to request the source data behind any specific row, please use the contact page.
Related: Accessibility Statement · Security & Data · Procurement FAQ