Last verified: 28 September 2026

Accessibility Disclosure

Sovern commits to WCAG 2.2 AA accessibility as the substrate baseline per EAA Directive 2019/882 (entered force 28 June 2025). Every criterion below is auto-projected from the closed accessibility-criteria registry. A post-launch substantive external audit will produce a formal conformance statement.

Generated from lib/registry/accessibility-criteria-registry.ts · 37 registered criteria

Reference standards

The substrate accessibility commitment maps to the following international standards:

Criteria summary

37 criteria registered: 19 fulfilled · 10 fulfilled with caveat · 6 in progress · 2 deferred post-launch.

Criteria detail

WCAG-1.1.1 — 1.1.1 Non-text Content

GSDS Icon components accept an `aria-label` prop; all substrate-authored icons in navigation, action buttons, and status indicators carry programmatic labels. Third-party icon usage is restricted by guard:gsds-third-party-registered. Caveat: full audit of every icon instance across 200+ GSDS components is deferred to the post-launch substantive audit.

Status: Fulfilled with caveat · Surface: GSDS icon and image components · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.2.1 — 1.2.1 Audio-only and Video-only (Prerecorded)

No prerecorded audio-only or video-only content surfaces exist at v1.0.0 launch. This criterion activates when video/audio content surfaces ship. Tracked at the post-launch accessibility audit horizon.

Status: Deferred post-launch · Surface: Video and audio surfaces · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.2.2 — 1.2.2 Captions (Prerecorded)

No prerecorded video content surfaces exist at v1.0.0 launch. Caption authoring and delivery infrastructure will be required when video surfaces ship.

Status: Deferred post-launch · Surface: Video surfaces · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.3.1 — 1.3.1 Info and Relationships

Substrate uses semantic HTML throughout: PageNarrow, Heading (h1–h6 via `as` prop), Stack, Text, Table, TableHeader, TableBody, TableRow, TableCell, Separator — all render native HTML elements with appropriate ARIA roles. Next.js server-side rendering means semantic structure is present in the DOM on first paint without JavaScript.

Status: Fulfilled · Surface: GSDS semantic HTML components · Standard: WCAG 2 2 AA

WCAG-1.3.2 — 1.3.2 Meaningful Sequence

GSDS Stack, PageNarrow, and section layout primitives produce logical DOM order that matches visual order. Server-rendered HTML means the reading order is correct before CSS applies.

Status: Fulfilled · Surface: Server-rendered GSDS page structure · Standard: WCAG 2 2 AA

WCAG-1.3.3 — 1.3.3 Sensory Characteristics

Core substrate navigation and action surfaces do not rely solely on shape, colour, or location. Caveat: the flow-canvas drag-and-drop interface (app/(app)/flow-canvas) uses spatial metaphors; keyboard-equivalent affordances are in-progress.

Status: Fulfilled with caveat · Surface: App shell and flow-canvas · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.3.4 — 1.3.4 Orientation

GSDS layout components do not lock display orientation. Marketing site, app shell, and trust pages respond to both portrait and landscape viewport orientations.

Status: Fulfilled · Surface: Responsive layout (all surfaces) · Standard: WCAG 2 2 AA

WCAG-1.3.5 — 1.3.5 Identify Input Purpose

GSDS Input, Select, and Textarea components accept a `name` prop mapped to HTML `autocomplete` attributes for standard field types (name, email, password, phone). Substrate form fields for identity/onboarding carry appropriate autocomplete annotations.

Status: Fulfilled · Surface: GSDS form components · Standard: WCAG 2 2 AA

WCAG-1.4.1 — 1.4.1 Use of Colour

GSDS uses semantic colour tokens (--gsds-color-*, status colour tokens) that pair colour cues with shape/icon/text cues in status indicators, alerts, and badges. Caveat: formal colour-contrast ratio attestation across all 20+ token variants requires the post-launch external audit.

Status: Fulfilled with caveat · Surface: GSDS design tokens (--gsds-* semantic colour scale) · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.4.3 — 1.4.3 Contrast (Minimum)

GSDS semantic typography tokens (--gsds-color-foreground, --gsds-color-muted-foreground) are designed for ≥4.5:1 contrast ratio against background tokens in both light and dark themes. Caveat: a full programmatic contrast audit across every token pairing in every surface is deferred to the post-launch external WCAG AA conformance review.

Status: Fulfilled with caveat · Surface: GSDS typography + colour token pairings · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.4.4 — 1.4.4 Resize Text

All GSDS typography tokens use `rem` units (--gsds-font-size-*). Text scales correctly when users increase browser font size up to 200% without loss of content or functionality.

Status: Fulfilled · Surface: GSDS typography tokens (rem-based) · Standard: WCAG 2 2 AA

WCAG-1.4.5 — 1.4.5 Images of Text

Substrate does not use images of text for user interface labels. All text is rendered as live DOM text via GSDS Text components. Logotypes in branding contexts use SVG with accessible labelling.

Status: Fulfilled · Surface: All substrate surfaces · Standard: WCAG 2 2 AA

WCAG-1.4.10 — 1.4.10 Reflow

GSDS layout is built with Tailwind-responsive utility classes and --gsds-space-* tokens. Content reflows at 320px width (equivalent to 400% zoom at 1280px) without horizontal scrolling for core marketing and app shell surfaces.

Status: Fulfilled · Surface: Responsive layout (all surfaces) · Standard: WCAG 2 2 AA

WCAG-1.4.11 — 1.4.11 Non-text Contrast

GSDS input borders, focus indicators, and icon components use semantic colour tokens targeting ≥3:1 contrast ratio against adjacent colours. Caveat: programmatic verification across all interactive component states requires the post-launch external audit.

Status: Fulfilled with caveat · Surface: GSDS interactive component borders and icons · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-1.4.12 — 1.4.12 Text Spacing

GSDS typography uses `rem`-based line-height and letter-spacing tokens. Overriding text spacing via user stylesheet (line-height 1.5×, letter-spacing 0.12em, word-spacing 0.16em, paragraph-spacing 2×) does not cause content loss or overlap in tested GSDS components.

Status: Fulfilled · Surface: GSDS typography system · Standard: WCAG 2 2 AA

WCAG-1.4.13 — 1.4.13 Content on Hover or Focus

GSDS Tooltip content is dismissible (Escape key), hoverable (pointer can move over tooltip without dismissal), and persistent until pointer leaves or Escape is pressed. Caveat: complex Popover patterns in the flow-canvas require focused testing to confirm full criterion compliance.

Status: Fulfilled with caveat · Surface: GSDS Tooltip and Popover components · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.1.1 — 2.1.1 Keyboard

Marketing site, app shell navigation, and form surfaces are keyboard-operable. The flow-canvas drag-and-drop interface requires keyboard-equivalent actions (node manipulation, edge creation, canvas pan/zoom) — this is the primary keyboard gap at v1 and is actively tracked.

Status: In progress · Surface: App shell, marketing site, forms, flow-canvas · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.1.2 — 2.1.2 No Keyboard Trap

GSDS modal/dialog primitives implement focus trapping within the modal boundary and restore focus to the trigger element on close. Escape key dismisses all modal/overlay surfaces.

Status: Fulfilled · Surface: GSDS Dialog, Modal, and Sheet components · Standard: WCAG 2 2 AA

WCAG-2.4.1 — 2.4.1 Bypass Blocks

A skip-to-main-content link is planned but not yet implemented across all surfaces. Heading structure (H1 per page) provides an alternative bypass mechanism for screen reader users. The skip-link implementation is tracked as part of the post-launch accessibility audit.

Status: In progress · Surface: App shell and marketing site · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.4.2 — 2.4.2 Page Titled

Every page module exports a `metadata.title` value per Next.js App Router conventions. The marketing metadata runtime (`lib/gsds/marketing-metadata-runtime.ts`) generates titles from the closed MARKETING_METADATA registry. Guard:marketing-metadata-canonical enforces title presence BLOCKING.

Status: Fulfilled · Surface: All Next.js pages (metadata.title exports) · Standard: WCAG 2 2 AA

WCAG-2.4.3 — 2.4.3 Focus Order

GSDS components render in natural DOM order matching visual layout; tab order follows document structure. Caveat: complex multi-panel layouts (flow-canvas, split-pane editors) require manual testing to confirm focus order is meaningful across all interaction patterns.

Status: Fulfilled with caveat · Surface: App shell and marketing site · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.4.4 — 2.4.4 Link Purpose (In Context)

GSDS navigation links, action buttons, and CTA components carry descriptive text or aria-label attributes distinguishing their purpose. The substrate vocabulary discipline (guard:ecosystem-vocabulary-canonical) prevents generic link text patterns.

Status: Fulfilled · Surface: Navigation and action components · Standard: WCAG 2 2 AA

WCAG-2.4.6 — 2.4.6 Headings and Labels

GSDS Heading component enforces a typed `as` prop (h1–h6) providing meaningful heading structure. Marketing site pages use h1 for page title, h2 for sections, h3 for subsections. Trust pages follow the same hierarchy.

Status: Fulfilled · Surface: GSDS Heading component hierarchy · Standard: WCAG 2 2 AA

WCAG-2.4.7 — 2.4.7 Focus Visible

GSDS provides --gsds-ring-* CSS custom properties applied via Tailwind `focus-visible:ring-*` utilities. Guard:gsds-no-focus-ring (BLOCKING) prevents removal of focus-visible styles from interactive components.

Status: Fulfilled · Surface: GSDS focus ring tokens (--gsds-ring-*) · Standard: WCAG 2 2 AA

WCAG-2.4.11 — 2.4.11 Focus Appearance (WCAG 2.2)

GSDS focus ring tokens are designed to meet the 2.4.11 minimum area and contrast requirements (≥2px outline, ≥3:1 contrast ratio). Caveat: formal focus-appearance contrast verification across all interactive component states is deferred to the post-launch external audit.

Status: Fulfilled with caveat · Surface: GSDS focus ring tokens · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.5.3 — 2.5.3 Label in Name

GSDS interactive components ensure accessible name (aria-label or visible text) contains the visible label text. The substrate vocabulary discipline prevents accessible-name vs. visible-label mismatches.

Status: Fulfilled · Surface: GSDS button, input, and link components · Standard: WCAG 2 2 AA

WCAG-2.5.7 — 2.5.7 Dragging Movements (WCAG 2.2)

All flow-canvas drag operations require single-pointer gestures today; keyboard-equivalent alternatives (arrow-key node movement, tab-then-Enter edge creation) are in active development. This is the primary WCAG 2.2-specific gap at v1.

Status: In progress · Surface: Flow-canvas drag-and-drop · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-2.5.8 — 2.5.8 Target Size (Minimum) (WCAG 2.2)

GSDS button and interactive components use --gsds-space-* tokens targeting ≥24×24px minimum target area. Caveat: icon-only buttons in dense UI areas (toolbars, inline action menus) require size verification against the 24×24px minimum in the post-launch audit.

Status: Fulfilled with caveat · Surface: GSDS interactive component sizing tokens · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-3.1.1 — 3.1.1 Language of Page

The html `lang` attribute is set by next-intl's locale routing middleware from the 10-entry SOVERN_LOCALES registry. Every page in every locale has a programmatically determinable language matching the content.

Status: Fulfilled · Surface: next-intl locale routing (lib/registry/supported-locales-registry.ts) · Standard: WCAG 2 2 AA

WCAG-3.2.1 — 3.2.1 On Focus

GSDS interactive components do not initiate context changes on focus alone. Focus events trigger only visual state changes (focus ring appearance).

Status: Fulfilled · Surface: All GSDS interactive components · Standard: WCAG 2 2 AA

WCAG-3.2.2 — 3.2.2 On Input

GSDS form inputs, selects, and checkboxes do not trigger automatic context changes on value change. Form submission requires an explicit submit action.

Status: Fulfilled · Surface: GSDS form components · Standard: WCAG 2 2 AA

WCAG-3.3.1 — 3.3.1 Error Identification

GSDS form components surface validation errors via accessible error message elements associated with their respective inputs via aria-describedby. Zod-backed server-side validation errors are returned as structured field-level messages.

Status: Fulfilled · Surface: GSDS form validation components · Standard: WCAG 2 2 AA

WCAG-3.3.2 — 3.3.2 Labels or Instructions

GSDS Label component is required for all Input, Select, and Textarea instances. Guard:gsds-i18n-required ensures labels are translated strings, not hardcoded literals.

Status: Fulfilled · Surface: GSDS Label and form components · Standard: WCAG 2 2 AA

WCAG-4.1.2 — 4.1.2 Name, Role, Value

GSDS components use native HTML semantics supplemented with ARIA attributes where required (e.g., aria-expanded on disclosure widgets, aria-selected on tab panels, aria-live on dynamic regions). Caveat: custom widget patterns (flow-canvas, data-grid) require a full ARIA implementation review in the post-launch audit.

Status: Fulfilled with caveat · Surface: GSDS component ARIA attributes · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

WCAG-4.1.3 — 4.1.3 Status Messages

Toast and notification components are in-progress for aria-live region implementation to ensure status messages (success, error, info) are announced to screen reader users without receiving focus.

Status: In progress · Surface: App shell toast/notification system · Standard: WCAG 2 2 AA · Horizon: <horizon:accessibility-substantive-audit>

EAA-BASELINE — EAA Directive 2019/882 Article 4 — functional requirements

EAA Directive 2019/882 (entered force 28 June 2025) requires digital services offered in the EU to meet WCAG 2.2 AA as the functional accessibility baseline. The substrate commits to WCAG 2.2 AA as the v1 baseline per this registry. A formal EAA conformance statement and substantive external audit are tracked at the post-launch accessibility audit horizon.

Status: In progress · Surface: All user-facing surfaces (marketing, app, trust pages) · Standard: EAA DIR 2019 882 · Horizon: <horizon:accessibility-substantive-audit>

EN-301-549-CLAUSE-9 — EN 301 549 v3.2.1 Clause 9 — Web accessibility requirements

EN 301 549 v3.2.1 Clause 9 maps directly to WCAG 2.1 Level AA (which WCAG 2.2 AA supersedes for new requirements). All WCAG criteria above address the Clause 9 requirements. A formal EN 301 549 conformance statement requires the post-launch substantive audit.

Status: In progress · Surface: All web surfaces · Standard: EN 301 549 v3.2.1 · Horizon: <horizon:accessibility-substantive-audit>

Post-launch substantive audit

This registry captures the substrate baseline posture, not a formal WCAG AA conformance attestation. The post-launch substantive audit (horizon: accessibility-substantive-audit) will engage an external WCAG specialist to verify criterion-level conformance, produce an Accessibility Conformance Report (ACR / VPAT), and publish a formal EAA accessibility statement per Dutch business.gov.nl requirements.