Accessibility — baki.io

Accessibility

What the site does, what is missing, and what is coming.

Commitment

baki.io aims to be usable by as many people as possible. This page is the honest ledger of what works today, what is known to be incomplete, and what is on the roadmap.

Last reviewed: 2026-04-30.

Conformance level

This site aims for WCAG 2.1 Level AA conformance per EN 301 549 v3.2.1 — the technical baseline referenced by the European Accessibility Act (Directive 2019/882, EAA). Where individual success criteria from WCAG 2.2 AA are already met, they are noted as a bonus, but the legal floor declared on this page is WCAG 2.1 AA.

The European Accessibility Act applies to most digital services in the EU starting 2026-06-28. A personal portfolio site of this size is generally outside the EAA’s mandatory scope, but baki.io publishes this statement voluntarily as a transparency commitment: the same disclosure surface a regulated service would offer.

Conformance status

The site is partially conformant with WCAG 2.1 AA. “Partially conformant” means most of the standard is met, but some content does not yet fully conform; the gaps are listed below in What is missing.

WCAG 2.1 principleStatusNotes
1. PerceivablePartially conformantNon-text content, structure, and resize (§1.1, §1.3, §1.4.4) all pass. Contrast minimum (§1.4.3) has one known gap on text-void-muted; fix proposed in docs/design/contrast-audit-text-void-muted.md.
2. OperablePartially conformantKeyboard access, skip-link, no time limits, and reduced-motion (§2.1, §2.2, §2.3) pass for the core spine. Focus visible (§2.4.7) on bespoke widgets is at first-pass coverage; time-simulator handles and globals-editor are open. Drag-and-drop alternatives (§2.5.7, WCAG 2.2) are not yet shipped.
3. UnderstandableFully conformantLanguage declared, predictable navigation, labelled inputs (§3.1, §3.2, §3.3).
4. RobustFully conformantValid HTML, ARIA used per pattern, programmatic name/role/value (§4.1). End-to-end screen reader testing on JAWS/NVDA is pending — see Compatibility.

Top-level honest disclosure: rows above marked Partially conformant are tracked in What is missing. Rows marked Fully conformant reflect manual review on the audit date; if a regression is reported, the row is downgraded and a fix is opened.

What works

What is missing

Custom-widget focus-indicator audit (2026-04-29)

WidgetKeyboard reachableFocus-visibleStatus
Debate vertices (DebatesModule)yes (Tab + Enter/Space)yes (dashed ring)closed
RichText format toolbaryes (native buttons)yes (2px box-shadow)closed
Signal-drop composeyes (native textarea + button)yes (2px box-shadow)closed
Beat-prose tile delete + add-module paletteyes (native buttons)yes (2px box-shadow)closed
Edit-mode chip rail (CONTENT / LAYOUT / STYLE)yes (native buttons)yes (2px box-shadow)closed
Time-simulator handlesnot yet auditedn/aopen
Globals-editor inputsfeature not yet shippedn/ablocked on D3 Phase 3.1
DraggableModule drag handlesyes; activation by pointer onlyn/aopen (deferred — drag a11y is a separate pattern)

Focus rules live in src/styles/a11y.css so they survive the auto-regeneration of tokens.css. All rules use :focus-visible (keyboard-only) — pointer interaction does not show the ring.

What is coming

Compatibility

The site is built and tested against modern evergreen browsers paired with widely-used assistive technologies. The matrix below is the ground truth for the current audit cycle; entries marked not yet tested are honest gaps, not silent claims.

BrowserAssistive techStatus
Safari (macOS, latest)VoiceOvertested — passes for spine + prose pages
Safari (iOS, latest)VoiceOvertested — passes for spine + prose pages
Chrome (latest)NVDA (Windows)not yet tested end-to-end (planned next audit cycle)
Firefox (latest)NVDA (Windows)not yet tested end-to-end (planned next audit cycle)
Chrome (latest)JAWS (Windows)not yet tested end-to-end (planned next audit cycle)
Chrome (Android, latest)TalkBacknot yet tested

Beyond AT, the site is verified against keyboard-only navigation, 200% browser zoom, prefers-reduced-motion, prefers-color-scheme: dark, and forced-colors: active (Windows High Contrast).

Methodology

The conformance claim above is based on a combination of manual and automated checks performed during this audit cycle:

Every audit cycle re-runs the checklist above; the last_audited date in this page’s frontmatter is the source of truth for when that last happened.

How to report issues

If something is unusable, please reach out. Every accessibility bug is a P1. Direct contact: design@baki.io. Other channels at /system/colophon.

This contact is the EAA Article 12 feedback mechanism for this site: any visitor — including regulators or supervisory authorities — may submit accessibility-related complaints, requests for an accessible alternative format, or questions about this statement to the address above. Acknowledged within 7 days; substantive response within 30 days.

Enforcement procedure

If a request submitted via the feedback contact above is not handled to your satisfaction, you may escalate to the relevant supervisory authority. For visitors based in Berlin, Germany — the operator’s place of establishment — the competent authority for accessibility-related complaints under EAA Article 13 is:

EU visitors may additionally lodge a complaint with the supervisory or market-surveillance authority designated under the EAA in their own member state.

Standards

Conformance target: WCAG 2.1 Level AA, per EN 301 549 v3.2.1 — the legal floor referenced by the European Accessibility Act. Aspirational target: WCAG 2.2 AA, where individual SCs from the 2.2 delta are met they are noted above. Where the site falls short of either target, the gap is logged in What is missing.

European Accessibility Act (EAA) compliance: this page serves as the EAA Article 12 accessibility statement; the Enforcement procedure section above satisfies EAA Article 13. Most relevant EN 301 549 v3.2.1 clauses for the current gaps:

This statement was last reviewed: 2026-04-30. Material changes to the site or this list trigger a re-audit; the last_audited field in this page’s frontmatter is the source of truth.