Accessibility

Accessibility at Envoy

Envoy's web app has a skip link, a labeled navigation landmark, named dialogs, and labeled form fields, and we ran axe-core on every page and the deal drawer at 375 and 1440 pixels in light and dark. The first run found 25 serious color-contrast problems; we fixed them, and the rerun found no serious or critical violation. A deal moves between stages by dragging on the board or from the Stage menu in the deal drawer, which a keyboard reaches, and the dialogs do not manage focus, which we list below instead of hiding. We do not claim a WCAG level.

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 Envoy 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

    A skip link leads to the main content, the sidebar links and every deal card are real links and buttons that Tab reaches, and a card opens the deal drawer. Escape closes the deal drawer and every dialog. Dropping a card on a column is a mouse drag, but the deal drawer has a labeled Stage menu that changes the stage from the keyboard, and the dialogs do not move or restore focus.

    Evidence

    • frontend/src/components/layout/Layout.tsx in the Envoy repo: the Skip to main content link, the labeled navigation, and the main landmark
    • frontend/src/pages/DealsPage.tsx: each card is a button; the board's own stage move is an onDragStart and onDrop pair with no key handler
    • frontend/src/components/deals/DealDrawer.tsx and frontend/src/__tests__/DealDrawer.test.tsx: the Stage select lists the pipeline's stages in order, calls the same stage-change endpoint as the board, and is tested with Tab and a selection; it is a unit test, not a recorded keyboard walkthrough
    • frontend/src/hooks/useEscapeKey.ts and frontend/src/__tests__/escape-key.test.tsx: Escape closes the six modal dialogs; DealsPage.test.tsx checks it on New Deal
    • No keyboard-only walkthrough of every flow has been recorded.
  • Partly supported

    Screen reader landmarks and labels

    Landmarks, named dialogs (Deal detail, New deal), labeled fields, and a health score with an accessible name are in place, and axe-core finds no serious or critical violation on 44 page views. Two smaller findings remain open. Nothing has been tested with a screen reader.

    Evidence

    • screenshots/output/envoy/a11y.json: axe-core 4.14.0 on 11 routes and the deal drawer, at 375 and 1440 pixels, light and dark (44 runs), no serious or critical violation; the open findings are an empty table header on the Accounts page (minor, 4 runs) and a heading that skips a level in the drawer (moderate, 4 runs)
    • frontend/src/__tests__/a11y.test.tsx runs vitest-axe on the rendered app
    • frontend/src/components/deals/DealDrawer.tsx: role dialog with aria-modal and the name Deal detail
  • Partly supported

    Contrast in light and dark

    The first axe-core run found 25 serious color-contrast violations (health chips, accent buttons in dark mode, the delete text, dimmed settings rows). They are fixed, with source-level tests, and the rerun found none. Automated checks do not evaluate hover or focus states, so those are not covered.

    Evidence

    • screenshots/output/envoy/a11y.json: 44 runs after the fixes, no color-contrast violation
    • frontend/src/__tests__/contrast.test.ts in the Envoy repo checks the fixed color pairs from the source styles
    • frontend/src/global.css sets --brand-accent separately for light and dark
  • Not yet tested

    Reduced motion

    The mobile menu slides in over 200 milliseconds. Envoy's own styles have no prefers-reduced-motion rule, and nobody has checked whether the design system supplies one.

  • Not yet tested

    Text resize and zoom

    Resizing text to 200 percent has not been tested.

  • Partly supported

    Mobile and touch

    Every page and the deal drawer fit a 375 pixel wide screen with no sideways page scroll, in both themes, and the sidebar becomes a menu button that opens a drawer. The kanban board scrolls sideways inside its own area. Tap-target size was not measured.

    Evidence

    • screenshots/output/envoy/a11y.json: 22 runs at 375 pixels, maximum horizontal overflow 0
    • frontend/src/__tests__/Layout.test.tsx: the hamburger button toggles aria-expanded and the mobile sidebar
    • screenshots/captures/envoy-a11y.spec.ts is the scan that produced these results

No WCAG conformance level is claimed for Envoy. We ran automated checks only (axe-core 4.14.0 against the WCAG 2.0 to 2.2 A and AA rule sets plus best practices, on 44 page views). No one has audited it against WCAG, walked every flow with the keyboard, or tested it with a screen reader, and automated checks find only part of the problems.

Known gaps

What does not work yet

  • Dropping a card on a board column is still mouse-only. The keyboard and touch path is the Stage menu in the deal drawer, so a person who cannot drag opens the card first. That menu is unit-tested but was added after the axe-core scan below, and no one has used it with a screen reader.
  • The deal drawer and the New Deal, New Account, New Sequence, New Territory, and stage-criteria dialogs are marked modal (aria-modal) and close on Escape, but they do not move focus into the dialog, trap it, or return it to the control that opened them.
  • axe-core still reports an empty table header on the Accounts page (minor, 4 runs) and a heading level that skips in the deal drawer (moderate, 4 runs).
  • The Commissions page needs a rep's raw id typed into a text box, and a deal's History tab prints stage ids. Both are hard to use with a screen reader, and neither has a plain-language alternative.
  • No one has tested Envoy with a screen reader, tested 200 percent text, or measured tap targets, and nothing here is a WCAG audit.
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.

Feedback

Tell us what is in your way

If something here or in Envoy does not work for you, write to Renkara Media Group. Say what you were doing, what you used, and what happened, and a person will answer.

Statement last reviewed 10/29/2026.