Skip to main content
Forepost is built to be usable by everyone who runs a support function. This page is the public statement of where we stand on accessibility, what we test against, what we’ve consciously deferred, and how to flag something that doesn’t work.

Standard we target

WCAG 2.1 AA, with WCAG 2.2 AA criteria adopted where the work is mechanical (notably 2.5.8 Target Size). This is the level referenced by the European Accessibility Act (June 2025) and the US ADA digital-services guidance.

What’s in place today

Perceivable

  • Text contrast clears AA 4.5:1 across every text/background pair the app renders. Tertiary text (eyebrows, hint chips, target labels) and status colours (green/amber/red on tinted pill backgrounds) all measured and tuned to pass.
  • Sparkline + trajectory shape isn’t conveyed by colour alone — every status uses a label and a tone, every per-agent trajectory line spells out direction and magnitude in words.
  • Decorative icons are marked aria-hidden so screen readers don’t double-announce them alongside the text they accompany.
  • Honest-no-data: missing values are surfaced explicitly rather than filled with placeholder zeros. (Reference.)

Operable

  • Keyboard navigation: every interactive element is reachable, including the AskBar (⌘K / Ctrl-K shortcut), nav, modal dialogs, and the sidebar.
  • Visible focus: a 2px outline (#3A4AD9 on cream paper, 5.99:1 contrast) appears on every focused element on keyboard navigation. Mouse-click focus stays subtle so the mouse experience is unchanged.
  • Skip-to-main link: the first Tab on any page reveals a “Skip to main content” link that bypasses the sidebar.
  • Target size: interactive targets are at least 24×24 CSS pixels (WCAG 2.2 AA), including the small sparkle “Ask Forepost” buttons on cards.
  • No keyboard traps: modal dialogs (Forward, Draft agenda) trap focus inside while open, release it cleanly on close, restore focus to whatever triggered them, and accept Escape as a close gesture.

Understandable

  • Labels are programmatically associated with their inputs via htmlFor/id or implicit wrapping, so screen readers announce the field name when focused.
  • Status messages (saving, sending, sent, failed) use aria-live="polite" regions so state changes are announced without forcing a re-focus.
  • Heading hierarchy is correct on every view: one <h1> per page, no level skips.
  • Page language is declared (<html lang="en">).

Robust

  • Semantic HTML: <nav>, <header>, <main>, <dialog> (role="dialog" + aria-modal), <button> everywhere clickable.
  • ARIA labels on icon-only buttons (close ×, send arrow, sparkle “Ask Forepost”).
  • Reduced motion: @media (prefers-reduced-motion: reduce) clamps every animation and transition to ~0ms, so the fade-ins, blinking cursor, and dot loader collapse to one frame for vestibular-sensitive users.

What’s deferred

We’re transparent about the gaps:
  • Non-text UI contrast (WCAG 1.4.11) on card borders. The cream-on-cream border (#D7D2C7 on #F5F3EE) sits at 1.36:1, below the 3:1 threshold for UI components. Cards still distinguish from background via colour difference (paper vs paper2), but the border itself fails the strict criterion. Held back deliberately as an aesthetic decision (editorial register vs dashboard register); we’ll revisit if a user flags it as a barrier.
  • Composite-input field labels. The H/M/S sub-inputs of the duration picker share a parent label but don’t each have their own. Affects screen-reader announcement of which sub-field is focused. Planned for a focused fix.
  • Industry / ARR / Platform picker groups are button groups, not radiogroups. They function correctly for keyboard users but don’t declare their group semantics. Planned conversion to <fieldset> + role="radiogroup".

Testing

The compliance posture is verified by:
  • Manual keyboard pass on every release: Tab through the brief, open + close every modal, fire every AskBar / AskButton affordance.
  • Contrast audit script committed to the repo — runs the WCAG luminance math against every token + background pair before merge.
  • Screen reader spot-check with VoiceOver (macOS) on the most-trafficked surfaces (Daily Brief, Watchlist, Settings).
We don’t yet have automated axe-core / Pa11y in CI; planned.

Reporting a barrier

If something on Forepost doesn’t work with your assistive technology, or if a contrast / focus / labelling decision blocks you, please email a11y@forepost.ai. We respond within five working days and treat genuine accessibility blockers as P1 bugs. A formal complaints procedure for EU customers under the Accessibility Act will be added before customer-facing launch in EU jurisdictions.

Document review

This statement was last reviewed on the date shown in the page footer. It’s reviewed at every release that touches the visual or interaction layer, plus quarterly at minimum.