Accessibility

Accessibility at Meridian

Meridian is a web app, and this is what its code, tests, and real-browser scans show today. It has a skip link, labeled landmarks, a header navigation that works at every width, and an axe-core scan that finds no serious or critical violations on its nine screens at 375 and 1,440 pixels in light and dark. Nobody has tested it with a screen reader or walked it with only a keyboard, and we do not claim a conformance level for it.

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 Meridian 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 page starts with a skip link to the main content, and the header navigation, buttons, filters, and the timesheet's hour cells are standard links, buttons, and fields that take Tab focus. Dialogs are labeled and close on Escape. The code does not move focus into a dialog or trap it there, and nobody has walked every flow with only a keyboard.

    Evidence

    • frontend/src/components/Layout.tsx: the skip link to #main-content, and the header navigation
    • frontend/src/components/Modal.tsx: role dialog, aria-modal, a labeled title, and Escape closes it; no focus handling
    • frontend/src/pages/TimePage.tsx: each hour cell is a labeled field (for example Hours for a project on a date)
    • A keyboard-only walkthrough of every flow has not been recorded.
  • Partly supported

    Screen reader landmarks and labels

    Pages have a main landmark and a labeled navigation, buttons and filters carry accessible names, table headers are marked as column headers, and the loading state is announced politely. An axe-core scan finds no violations on the nine screens. Meridian has not been tested with VoiceOver, NVDA, or any other screen reader, so how it reads aloud is unknown.

    Evidence

    • frontend/src/__tests__/accessibility.test.tsx: vitest-axe on the whole app and on eight routes (jsdom)
    • screenshots/captures/meridian-a11y.spec.ts: axe-core 4.14.0 in a real browser, nine routes at 375 and 1,440 pixels in light and dark (36 scans), output/meridian/a11y.json, 10/29/2026
    • On 10/29/2026 the scan found and we fixed unnamed buttons, an unnamed back link, and scrolling tables that a keyboard could not reach
    • No screen-reader run is on record.
  • Partly supported

    Contrast in light and dark

    Before the 10/29/2026 scan the primary buttons measured 2.76 to 1 in light and 3.32 to 1 in dark and the Sent badge 4.24 and 3.9 to 1; both were fixed, and the scan's color-contrast rule now passes on all nine screens in both themes. The scan measures the screens as seeded, with text on its real backgrounds; it cannot judge every state, such as a hover or a disabled button.

    Evidence

    • meridian commits 1598a21 and 0af72f4 (buttons, the Sent badge, and Write Off), 10/29/2026
    • screenshots/captures/meridian-a11y.spec.ts: the color-contrast rule, both themes, both widths, output/meridian/a11y.json
    • No manual contrast measurement of hover, focus, or disabled states is on record.
  • Partly supported

    Reduced motion

    The design system's global stylesheet shortens animations and transitions to almost nothing when the system asks for reduced motion. This was read from the stylesheet and not checked in a browser with the setting turned on.

    Evidence

    • node_modules/@renkara/design-system/dist/tokens.css: a prefers-reduced-motion block
  • Not yet tested

    Text resize and zoom

    Nobody has tested Meridian at larger text sizes or browser zoom. The timesheet is a wide grid, so large text may push it into horizontal scrolling.

  • Partly supported

    Mobile and touch

    The header navigation collapses to a drawer on a phone, so every page is reachable at 375 pixels. The scan found no horizontal overflow on any of the nine screens at 375 pixels, and wide tables scroll inside a region the keyboard can reach. Nobody has used it on a phone for real work, and the timesheet is tight at that width.

    Evidence

    • frontend/src/__tests__/layoutNav.test.tsx: every page link is in the header navigation, and there is no sidebar
    • screenshots/captures/meridian-a11y.spec.ts: page width against viewport width on every route at 375 pixels
    • No hands-on phone session is on record.

No WCAG conformance level is claimed for the Meridian app. The tests are automated: axe-core run inside the app's unit tests (jsdom, no contrast checks) and axe-core 4.14.0 run in a real browser against the running app by the fleet screenshot harness on 10/29/2026, which does check contrast. Axe finds only some problems, so a clean scan is not a conformance claim. This site's own pages are scanned by the kit's axe-core run at 375 and 1,440 pixels in light and dark.

Product notes

More about Meridian

Where to go with the keyboard

Meridian has no custom shortcuts. Everything is reached with the standard keys.

Where to go with the keyboard
Tab and Shift TabMove between the skip link, the header navigation, filters, buttons, and the timesheet's hour fields
Enter or SpacePress a button or follow a link
EscapeClose the open dialog
Known gaps

What does not work yet

  • Meridian has not been tested with a screen reader, and nobody has walked it with only a keyboard.
  • Dialogs do not move focus in or return it, and the unnamed actions column in the tables is flagged by axe as a minor issue.
  • Larger text sizes, zoom, and the Increase Contrast setting are untested.
  • Marking an invoice paid plays a short sound from a shared package; whether it respects a quiet setting has not been checked.
  • The automated scans cannot judge reading order, focus order, or how a screen reader announces a table.
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 Meridian 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.