Skip to main content
VPAT 2.5 REV 508

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.

Product NameCivic Filament
Product Versionv0.1.0 (in active development)
Report Date2026-09-30
AuthorMoonlit Social Labs (self-assessed)
Product DescriptionConsensus infrastructure — AI-mediated interviews synthesize community perspectives into a versioned Living Requirement Document.
Contact InformationSee the Contact page for accessibility inquiries.
NotesSelf-assessed. A third-party audit has not yet been commissioned. Criteria we could only partly verify are marked Partially Supports.
Evaluation Methods UsedAutomated eslint jsx-a11y rules (the set bundled with eslint-config-next); manual keyboard and screen-reader spot checks by the team on the main routes; prefers-reduced-motion check; contrast check of the theme color tokens. No automated axe test suite.

Applicable standards

STANDARDWCAG 2.1 →Level A + AAYes
STANDARDRevised Section 508 →Chapters 4, 5, 6Yes
STANDARDEN 301 549 →Ch. 9 (Web), Ch. 10 (Non-Web)Included by reference — table below satisfies EN 301 549 §9 via WCAG mapping.

Terms & conformance summary

30
SUPPORTS
13
PARTIALLY SUPPORTS
0
DOES NOT SUPPORT
7
NOT APPLICABLE
0
NOT EVALUATED
SUPPORTSThe functionality of the product has at least one method that meets the criterion without known defects, or meets with equivalent facilitation.
PARTIALLY SUPPORTSSome functionality does not meet the criterion.
DOES NOT SUPPORTThe majority of product functionality does not meet the criterion.
NOT APPLICABLEThe criterion is not relevant to the product.
NOT EVALUATEDThe product has not been evaluated against the criterion.

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.

SCCRITERIONLEVELCONFORMANCEREMARKS
1.1.1Non-text ContentASupportsIconographic buttons carry aria-label. Decorative SVGs are marked aria-hidden. Animated interview simulation and consensus graph provide sr-only text summaries.
1.2.1Audio-only and Video-only (Prerecorded)ANot ApplicableNo prerecorded audio-only or video-only media.
1.2.2Captions (Prerecorded)ANot ApplicableNo prerecorded video with audio.
1.2.3Audio Description or Media Alternative (Prerecorded)ANot ApplicableNo prerecorded video.
1.2.4Captions (Live)AANot ApplicableNo live video with audio.
1.2.5Audio Description (Prerecorded)AANot ApplicableNo prerecorded video.
1.3.1Info and RelationshipsAPartially SupportsSemantic 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.2Meaningful SequenceASupportsReading order matches visual order on the routes we spot-checked (landing, participate, LRD, auth, legal pages).
1.3.3Sensory CharacteristicsASupportsInstructions do not rely on shape, color, or position alone. All interactive controls carry text or accessible names.
1.3.4OrientationAASupportsContent works in both portrait and landscape orientations. No orientation lock.
1.3.5Identify Input PurposeAASupportsautoComplete attributes present on email/password fields (email, current-password, new-password).
1.4.1Use of ColorASupportsColor is never the sole indicator. Category chips also carry text labels; toggle states use aria-pressed in addition to color changes.
1.4.2Audio ControlANot ApplicableNo auto-playing audio.
1.4.3Contrast (Minimum)AAPartially SupportsTheme 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.4Resize TextAAPartially SupportsMinimum 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.5Images of TextAASupportsNo images of text used for content. OG images are share previews, not on-page content.
1.4.10ReflowAAPartially SupportsLayouts 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.11Non-text ContrastAAPartially SupportsInteractive 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.12Text SpacingAAPartially SupportsNot systematically tested with text-spacing overrides. No fixed-height text containers are known to clip, but this has only been self-assessed.
1.4.13Content on Hover or FocusAASupportsThe consensus-map hover tooltip is dismissible by moving away from the node; content remains visible while hovered; no obscuring of triggering content.
2.1.1KeyboardAPartially SupportsLinks, 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.2No Keyboard TrapASupportsNo 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.4Character Key ShortcutsASupportsNo single-character keyboard shortcuts are used.
2.2.1Timing AdjustableASupportsThe interview has no time limit. Sessions persist across page reloads via anonymous session token.
2.2.2Pause, Stop, HideASupportsFramer-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.1Three Flashes or Below ThresholdASupportsNo content flashes more than three times per second.
2.4.1Bypass BlocksASupportsA "Skip to main content" link is the first focusable element on every page. Semantic landmark structure supports assistive-tech shortcuts.
2.4.2Page TitledASupportsEvery route defines a Next.js metadata.title. The site template applies "%s | Civic Filament".
2.4.3Focus OrderASupportsDOM order matches visual order on the routes spot-checked; no positive tabindex values in the codebase.
2.4.4Link Purpose (In Context)ASupportsLink text is descriptive. "Explore further" widget uses full-sentence link text with helper detail. Icon-only navigation links carry aria-label.
2.4.5Multiple WaysAASupportsUsers can find pages via primary nav, footer (Protocol / Trust / Deploy / Legal columns), sitemap, and cross-links between related pages.
2.4.6Headings and LabelsAAPartially SupportsHeadings 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.7Focus VisibleAASupportsGlobal :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.1Pointer GesturesASupportsNo multipoint or path-based gestures required. All interactions work with a single tap or click.
2.5.2Pointer CancellationASupportsButtons fire on up-event; users can drag away to cancel.
2.5.3Label in NameASupportsVisible labels match the programmatic accessible name for the controls we checked.
2.5.4Motion ActuationANot ApplicableNo functionality relies on device motion or user gesture.
3.1.1Language of PageASupportsRoot <html lang="en"> declared in the root layout.
3.1.2Language of PartsAAPartially SupportsThe 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.1On FocusASupportsFocus does not trigger context changes anywhere.
3.2.2On InputASupportsForm inputs do not automatically submit or navigate. Submit requires explicit button activation.
3.2.3Consistent NavigationAASupportsPrimary nav is identical across routes. Footer structure is identical across routes.
3.2.4Consistent IdentificationAASupportsIcons and controls with the same function are labeled consistently across the site.
3.3.1Error IdentificationAPartially SupportsForm 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.2Labels or InstructionsAPartially SupportsInputs 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.3Error SuggestionAAPartially SupportsPassword 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.4Error Prevention (Legal, Financial, Data)AASupportsAccount deletion (irreversible) requires typing "DELETE" as an explicit confirmation. Data-export flow is confirmable and reversible.
4.1.1ParsingASupportsObsoleted in WCAG 2.2 but retained for VPAT 2.5. React renders valid HTML with unique IDs on all form controls.
4.1.2Name, Role, ValueASupportsSemantic 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.3Status MessagesAAPartially SupportsForm 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)

502.2.1 USER CONTROL OF ACCESSIBILITY FEATURES

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.

502.3 ACCESSIBILITY SERVICES

Not Applicable. Civic Filament is a web application accessed via standard browsers; it does not implement its own accessibility service layer.

503.2 USER PREFERENCES

Supports. Content honors user-agent text-spacing, font-size, and color preferences.

503.3 ALTERNATIVE USER INTERFACES

Not Applicable. No alternative UI is provided.

504.2 CONTENT CREATION OR EDITING

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.