Accessibility

Accessibility at Peregrine

Peregrine's dashboard is built on the Renkara design system. A scripted axe-core run covers its two pages in light and dark at phone and desktop widths, and the same run walks the keyboard path to the kill switch. That run found and fixed seven defects before this site was built. Here is what the product supports today and what we have actually checked. We do not claim a WCAG conformance level for the product.

Illustration: a quiet public reading room in soft light, with a wide level entrance, a low service counter, and clear open aisles between the shelves.
The product

What Peregrine supports today

Each line says what the product does, how we know, and where to look. “Not yet tested” means exactly that: we have not checked, and we do not claim it.

  • Partly supported

    Keyboard operation

    Every control is a native link, button, or form field, and the scrolling Markets and event tape regions take focus so a keyboard user can scroll them. In a scripted run, Tab reached Halt and flatten, Enter opened the confirmation dialog, focus moved into it, and Escape closed it with the engine still trading. Every stop in a 40-press Tab walk showed a focus indicator except where focus left the page.

    Evidence

    • captures/peregrine-a11y.spec.ts in the fleet screenshot harness: a 40-press Tab walk of the dashboard and the kill switch by keyboard alone, 11/03/2026
    • frontend/src/__tests__/focusRing.test.ts in the Peregrine repo holds the focus-ring rule the walk found missing
    • No one has walked every flow with a keyboard alone.
  • Partly supported

    Screen reader landmarks and labels

    axe-core, which checks names, labels, roles, and landmark structure, found no violations of any impact on the dashboard, the Risk page, or the halted dashboard. Peregrine has not been tested with a screen reader. The event tape is a labeled log that is not announced live, because it updates several times a second.

    Evidence

    • captures/peregrine-a11y.spec.ts runs axe-core on the dashboard, the Risk page, and the halted dashboard, in light and dark, at 1440 and 375 pixels: 0 violations
    • captures/peregrine.spec.ts fails a capture on a serious or critical axe-core violation in each captured state
    • frontend/src/__tests__/dashboard.test.tsx and equityChart.test.tsx hold the markup rules axe found broken (log role, definition list, scrollable regions, chart role)
  • Supported

    Contrast in light and dark

    Text and controls are checked for contrast in both the light and dark themes, including the heatmap tiles at their strongest tint and the event tape's kind chips.

    Evidence

    • axe-core color-contrast rule on every view in both themes (captures/peregrine-a11y.spec.ts), no violations
    • frontend/src/__tests__/brand.test.ts, heatContrast.test.ts, and eventTapeContrast.test.ts recompute the contrast ratios from the stylesheet and require 4.5:1
  • Partly supported

    Reduced motion

    The tick flash and the live dot stop under the reduced-motion setting. In a scripted run, 54 animations ran on the dashboard with no preference and none with the setting on. Peregrine's own tests do not exercise the setting.

    Evidence

    • captures/peregrine-a11y.spec.ts counts running animations on the dashboard with and without the reduced-motion preference: 54 and 0
    • frontend/src/global.css disables the tick and live-dot animations inside a prefers-reduced-motion rule
  • Not yet tested

    Text resize and zoom

    Resizing text to 200 percent has not been tested.

  • Supported

    Mobile and touch

    Both pages fit a 375 pixel and a 320 pixel wide screen with no sideways scrolling of the page. Some controls are smaller than 44 by 44 pixels, including the design system's header buttons and the chart library's attribution link.

    Evidence

    • captures/peregrine-a11y.spec.ts: horizontal overflow of the page at 375 and 320 pixels on both pages, none
    • The same scan counts interactive targets under 44 pixels and lists them.

No WCAG conformance level is claimed for Peregrine. Its checks are automated and scripted only; no one has audited it against WCAG or tested it with a screen reader or other assistive technology.

Known gaps

What does not work yet

  • Peregrine has not been tested with a screen reader or walked end to end with a keyboard alone.
  • 200 percent text resize is not covered by any test.
  • Some controls are under 44 pixels: the header's links and its theme and account buttons, and the chart library's attribution link.
  • The live figures change several times a second and are not announced as they change.
This website

How this site is built and checked

This site targets WCAG 2.2 level AA. That is a target we build and test toward, not a certification, and no one has audited it for conformance.

  • Structure

    A skip link, labeled landmarks (header, navigation, main, footer), one h1 per page, and headings that do not skip levels.

  • Keyboard and focus

    Links and buttons are native elements, so they work from the keyboard. Focus is drawn as a visible ring, and the menu closes with Escape.

  • Contrast

    Text meets 4.5 to 1 in both the light and dark themes, checked against the stylesheet by the test suite.

  • Motion

    Transitions and animation switch off when your system asks for reduced motion.

  • Small screens and zoom

    Layouts hold at 375 pixels wide with no sideways scrolling, text resizes with the browser, and touch targets are at least 44 pixels.

  • Automated scan

    Every page is scanned with axe-core at 375 and 1440 pixels in light and dark, and the checks fail on any serious or critical violation. Automated tools find only part of the problems, so this is a floor, not proof.

  • Images

    Every product screenshot has a text description and comes in a light and a dark version that follows your theme.

  • Your theme choice

    The theme follows your system setting until you pick one with the button in the header.

Statement last reviewed 11/03/2026.