Skip to main content

Accessibility

Accessibility Statement

Cairn is committed to making its service accessible to everyone, including people who use assistive technology. This page describes our current conformance status, known limitations, and how to reach us if you encounter a barrier.

Last reviewed: June 6, 2026Standard: WCAG 2.2 Level AA

Target standard

Cairn targets WCAG 2.2 Level AA conformance, the current W3C Recommendation (October 2023). No automated tool alone determines WCAG conformance — per W3C guidance, our audit combines automated signals with manual keyboard, focus, ARIA, and semantic structure review.

Scope

This audit covers all public-facing pages and authenticated flows:

  • Landing page, How it works, About, Pricing, Contact
  • Legal pages: Privacy Policy, Terms of Service, Cookie Policy, Refund Policy
  • Authentication: Log in, Reset password
  • App shell: Assessment chat, Plan dashboard, Progress tracking
  • Account settings

What passes

  • Skip navigation: A visible “Skip to main content” link appears as the first focusable element on every page.
  • Landmarks: Every page uses <header>, <nav>, <main>, and <footer> with distinct ARIA labels where multiple navs appear.
  • Heading hierarchy: One <h1> per page with correct descending hierarchy.
  • Forms: All inputs are associated to visible labels. Error messages are linked to the specific field via aria-describedby. Success and error states are announced to screen readers via role="alert" or aria-live.
  • Modals: All dialogs use Radix UI Dialog, which provides automatic focus trapping and focus-return on close. Escape dismisses all modal overlays.
  • Icon buttons: Every icon-only button has an explicit aria-label. Decorative icons carry aria-hidden="true".
  • Motion: All CSS animations are wrapped in @media (prefers-reduced-motion: reduce) blocks. JavaScript-driven scroll and animation behavior is gated on the same preference.
  • Keyboard navigation: Locked or loading nav items expose their state via aria-disabled and aria-busy. Account dropdowns close on Escape with focus returned to the trigger.
  • Current page: Active links carry aria-current="page" in all navigation regions.

Known limitations

C01OpenDark-mode secondary text contrast

The --muted-foreground token in dark mode renders at approximately 3.5:1 contrast on the dark background, below the WCAG 1.4.3 minimum of 4.5:1 for normal text. Affected elements include secondary labels in the sidebar, settings, and metadata text. A token adjustment is pending design review.

L01OpenSocial media footer links are placeholder

The X, Instagram, and LinkedIn links in the footer currently use href="#" because social accounts are not yet established. Links have accessible labels but are non-functional. They will be updated with real URLs once accounts are created.

P01PartialTouch target size

Small icon buttons (Add child, Delete child) have been updated to meet the WCAG 2.5.8 minimum of 24×24 CSS pixels. The stricter 44×44 px target (WCAG 2.5.5, Level AAA) is not yet met.

S07EnhancementSettings navigation group labels

Section dividers in the settings navigation (“Profile”, “Plan & billing”, etc.) are visual only and are not programmatically associated with the items they group. Future work will addrole="group" with aria-label.

Testing methodology

  1. Static code review — all page, component, and CSS files audited for semantic structure, ARIA attributes, label associations, live regions, and motion handling
  2. Keyboard testing — manual verification of Tab order, focus visibility, modal traps, and Escape-key behaviour
  3. Automated signal — Lighthouse and ESLint (not treated as proof of conformance)
  4. Pattern verification — Radix UI components verified against ARIA Authoring Practices Guide

Per W3C guidance: no automated tool alone determines WCAG conformance. Items requiring live screen-reader testing (NVDA, VoiceOver) and real-device mobile testing are not yet verified.

Contact

To report an accessibility barrier or request an accommodation, email us at hello@cairnplan.com. We aim to respond within 3 business days.