Skip to content

Automated WCAG 2.1 AA a11y testing across all themes/modes - #38

Draft
sjoerdbeentjes wants to merge 38 commits into
mainfrom
feat/a11y-testing
Draft

Automated WCAG 2.1 AA a11y testing across all themes/modes#38
sjoerdbeentjes wants to merge 38 commits into
mainfrom
feat/a11y-testing

Conversation

@sjoerdbeentjes

@sjoerdbeentjes sjoerdbeentjes commented Jun 22, 2026

Copy link
Copy Markdown
Collaborator

Adds an automated WCAG 2.1 AA pipeline that sweeps every Storybook story across all themes and modes from @surfnet/tokens, in both React and Angular.

What

  • Shared config in @surfnet/storybook-config: browser-safe a11yParameters (merged into both previews, also scopes the addon-a11y panel) and a node-only runStoryA11yAudit behind a ./test-runner subpath so it never enters a preview bundle.
  • Builder-agnostic runner: @storybook/test-runner + axe-playwright against a served Storybook, so one setup covers React (Vite) and Angular (webpack). Each story is audited once per theme × mode (11 themes × 2 modes), writing a per-story JSON report.
  • Wiring: per-package test:a11y / test:a11y:ci scripts, a turbo task, a root script, and a CI step that runs report-only (continue-on-error) and uploads the JSON as an artifact.

Notes

  • CI is intentionally report-only until the token contrast backlog is triaged; flip to blocking by removing continue-on-error.

@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 5 times, most recently from b563368 to 871c744 Compare June 22, 2026 14:18
@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

♿ Accessibility audit — WCAG 2.1 AA

⚠️ 219 finding(s) — 184 contrast (per theme·mode), 35 theme-independent · across 421 stories / 11788 audited combinations. Report-only — does not block merge.

@surfnet/curve-angular — 181 finding(s)
Badge — 3 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Status List — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Button — 4 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Sizes — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Icon — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Calendar — 141 finding(s)

Default — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Disabled Dates — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Dropdown Caption — 29 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Highlighted And Bounded — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)

Multiple — 28 finding(s)

  • default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • light#a4a4a4 on #f5f5f5 · ratio 2.28 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/light)
    • dark#575757 on #0a0a0a · ratio 2.73 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • light#a9a9a9 on #ffffff · ratio 2.35 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/light)
    • dark#6f6f6f on #0a0a0a · ratio 3.94 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Card — 1 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
DataTable — 1 finding(s) · color-contrast only

Custom Toolbar — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Empty — 2 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

With Multiple Actions — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Item — 1 finding(s) · color-contrast only

With Header And Footer — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
NativeSelect — 5 finding(s)

Default — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Disabled — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Invalid — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

Sizes — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation

With Option Groups — 1 finding(s)

  • Select element must have an accessible name — select-name · all themes/modes
    select-name violation
Pagination — 15 finding(s)

Numbered Pagination — 15 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
  • default
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (default/dark)
  • groenvermogen-nkph2
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/dark)
  • shadcn-default
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default/dark)
  • shadcn-default-grey-background
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (shadcn-default-grey-background/dark)
  • surf-blue-purple
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-purple/dark)
  • surf-blue-turquoise
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-turquoise/dark)
  • surf-blue-yellow
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-green
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-green/dark)
  • surf-orange
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange/dark)
  • surf-orange-turquoise
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-orange-turquoise/dark)
  • surf-pilot
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-pilot/dark)
  • surf-purple
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple/dark)
  • surf-purple-orange
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-purple-orange/dark)
  • surf-yellow
    • dark#4a5565 on #0a0a0a · ratio 2.61 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Select — 4 finding(s)

Default — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Disabled — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Grouped — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation

Sizes — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
Sidebar — 2 finding(s) · color-contrast only

Default — 2 finding(s)

  • surf-blue-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-blue-yellow/dark)
  • surf-yellow
    • dark#fafafa on #8a7900 · ratio 4.17 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (surf-yellow/dark)
Switch — 1 finding(s)

Default — 1 finding(s)

  • Buttons must have discernible text — button-name (4.1.2) · all themes/modes
    button-name (4.1.2) violation
Tabs — 1 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
@surfnet/curve-react — 38 finding(s)
Badge — 3 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Status List — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Variants — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)
Button — 4 finding(s) · color-contrast only

Default — 1 finding(s)

  • groenvermogen-nkph2
    • light#fafafa on #84cc16 · ratio 1.89 — color-contrast (1.4.3)
      color-contrast (1.4.3) violation (groenvermogen-nkph2/light)

Sizes — 1 finding(s)

…truncated; see the a11y-reports artifact for the full list.

@sjoerdbeentjes sjoerdbeentjes linked an issue Jun 23, 2026 that may be closed by this pull request
@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 3 times, most recently from 8b13cff to fc78595 Compare June 30, 2026 06:45
@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 4 times, most recently from 52bcb10 to 5afc87c Compare July 1, 2026 18:46
Comment thread .github/workflows/ci.yml

# Scoped to @surfnet/storybook-config, which pins playwright, so both
# framework runs share one browser.
- name: Install Playwright Chromium

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hoe is de performance? Ik zou verwachten dat we in een CI-stap een headless browser gebruiken.

@sjoerdbeentjes
sjoerdbeentjes force-pushed the feat/a11y-testing branch 2 times, most recently from 573772a to 4c66f62 Compare July 6, 2026 07:43
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 6, 2026
github-actions Bot added a commit that referenced this pull request Jul 7, 2026
github-actions Bot added a commit that referenced this pull request Jul 14, 2026
github-actions Bot added a commit that referenced this pull request Aug 25, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WCAG 2.1 AA-check op alle PoC-componenten

3 participants