Accessibility
I aim for this site to meet WCAG 2.2 level AA. This page says what I have done toward that, what I have not, and how to tell me about a problem. It describes my own checks. It is not an independent audit.
Target: WCAG 2.2 level AA. Last updated 30 October 2026.
How it is checked
- Automated axe-core scans in the Playwright end-to-end suite, run against the home page, the Realm codex and this page, using the WCAG 2.0 A and AA rule sets. The tests fail on critical or serious violations.
- Colour contrast tests on the core design tokens (text, muted text, primary and accent against the background), each held to at least 4.5:1.
- A type-size test that fails the test suite if any text on the classic site is set below 12px.
- Reduced-motion support: animated components check the user's reduced-motion setting, and a global style rule switches animations and transitions off when it is set.
- A skip-to-main-content link at the top of every page.
- A visible focus outline on links, buttons and form fields.
- Tap targets of at least 44px on the navigation bar and footer links and buttons.
- Expandable sections (education, career entries) use native details elements or buttons with aria-expanded, so they work from the keyboard and with a screen reader.
- The WebGL experiences are opt-in. The Realm falls back to an accessible text codex when WebGL is unavailable or reduced motion is set, and ShaafOS shows a fallback message when WebGL is unavailable.
Known gaps
- The site is dark-only. There is no light or high-contrast mode yet.
- The WebGL worlds (/os and /realm) are decorative. The same content is available in the classic site and in the Realm codex, which are the accessible versions.
- Automated scans cover the home page, the Realm codex and this page. The other pages are not scanned automatically.
- The axe scans use the WCAG 2.0 A and AA rule sets. WCAG 2.2 criteria such as target size and focus appearance are addressed through design choices, not checked by an automated scan.
- Contrast tests cover the core token pairs only. Muted secondary text classes use at least 80% opacity (about 6.1:1 against the page background), and a test scans class names for anything lower. Composited colours on cards and in the ShaafOS screens are not all checked.
- The 44px tap-target work covers the navigation bar and footer. I have not measured every inline control on every page.
- I have not had the site audited by a third party, and I do not claim a full manual screen-reader review.
Report a problem
Email msk@shaafkashan.com with the page and what got in the way.