# Accessibility

Source: https://docs.gryt.chat/docs/guide/accessibility

Our commitment and roadmap toward full accessibility

Gryt is not fully accessible yet. This page says what works, what does not, and what is being done about it, because a page that only listed the good parts would be worse than nothing to somebody deciding whether they can use this.

## Why accessibility matters

Voice chat platforms are inherently social tools. If they aren't accessible, they exclude the very people who could benefit most from low-friction, real-time communication. We believe everyone deserves equal access to online communities regardless of visual, motor, auditory, or cognitive ability.

## Typography: Atkinson Hyperlegible

Gryt uses [Atkinson Hyperlegible Next](https://brailleinstitute.org/freefont) as its primary typeface and **Atkinson Hyperlegible Mono** for all monospaced text (code blocks, hotkey badges, debug panels, and technical displays).

Atkinson Hyperlegible was created by the **Braille Institute of America** with one goal: maximum legibility. Traditional typefaces optimize for aesthetics; Atkinson Hyperlegible optimizes for character differentiation. Key design decisions include:

- **Exaggerated letter forms** — Characters like `I`, `l`, `1` and `0`, `O`, `Q` are unambiguously distinct, reducing misreadings for users with low vision.
- **Open apertures** — Letters like `c`, `e`, and `s` have wider openings so they remain distinguishable at small sizes or low resolutions.
- **Asymmetric shapes** — Mirrored letters such as `b`/`d` and `p`/`q` have subtle asymmetries that make them easier to tell apart.
- **Variable weight axis** — The font ships as a single variable file supporting weights 200–900, so we can use it everywhere from thin labels to bold headings without loading extra files.

The mono variant applies these same legibility principles to fixed-width text, making it significantly easier to read code, IP addresses, keybinds, and latency numbers compared to traditional monospace fonts.

## Current accessibility features

### Keyboard navigation
Core flows, meaning the chat input, the voice-control hotkeys and dialogs, are operable with the keyboard. However, some interactive elements (video cards, reply links, the image lightbox, and the focused-video overlay) are not yet keyboard-accessible, and list views (channels, servers, members) do not support arrow-key navigation. We are working toward full keyboard operability for every interactive element.

### Configurable hotkeys
Users can rebind **push-to-talk**, **mute**, **deafen**, and **disconnect** to any key combination via _Settings → Hotkeys_. This lets users with limited mobility choose key placements that work for them. Camera and screen-share toggles are not yet rebindable.

### Screen reader support
The client is built on `@gryt/ui`, which sits on Base UI primitives. Those provide a baseline of ARIA roles and keyboard interaction for dialogs, menus and form controls. However, comprehensive screen-reader support is still in progress: many icon-only buttons lack `aria-label` attributes, the layout does not yet use semantic HTML landmarks (`<nav>`, `<main>`, `<aside>`), and voice-state changes (mute, deafen, speaking) are not yet announced via ARIA live regions.

### Theme support
Gryt supports light and dark themes with system-preference detection, and accepts imported themes. Both built-in themes use a scale-based colour system, where each hue runs from a background step up to a high-contrast text step, so a component picks a step by its role rather than picking a colour. No formal contrast audit has been done against either theme, and an imported theme is only as accessible as whoever made it.

### Focus management
Modals and dialogs trap focus correctly, and tab order follows a logical reading sequence, with no `tabIndex` above zero anywhere. Custom overlays — the image lightbox, the emoji picker, and the focused-video view — do not yet trap focus or restore focus on close. We are actively closing these gaps.

## Roadmap

We're working toward full WCAG 2.2 AA compliance across the entire platform. Current priorities include:

- Keyboard handlers and ARIA roles for all custom interactive elements (video cards, reply links, lightbox)
- Arrow-key navigation for channel, server, and member lists
- `aria-label` on every icon-only button
- Semantic HTML landmarks throughout the layout
- ARIA live regions for voice-state changes and chat messages
- Focus trapping and focus-return for custom overlays
- Rebindable hotkeys for camera and screen-share toggles
- Formal WCAG AA contrast audit with a path to AAA
- Reduced-motion mode
- High-contrast theme
- Real-time captioning

See the [roadmap](https://docs.gryt.chat/docs/guide/roadmap#accessibility) for the full list of planned accessibility improvements.

## Contributing to accessibility

If you encounter an accessibility barrier in Gryt, please [open an issue](https://github.com/Gryt-chat/gryt/issues) and label it `accessibility`. We treat accessibility bugs with the same urgency as security issues.

We also welcome contributions that improve accessibility — see the [contributing guide](https://docs.gryt.chat/docs/guide/contributing) for how to get started.
