Accessibility
Kestrel is built to work without a mouse, without sight, and without motion. This article documents the behaviors to preserve when changing the site.
On this page
Keyboard
Every control is a native control or a native disclosure: radio buttons for billing period, asset type, version, and asset choice; buttons for reorder; a disclosure for the on-page table of contents. Native controls bring arrow-key movement and focus behavior for free; do not replace them with styled divs.
Overlays trap focus and close on Escape, returning focus to the control that opened them. The docs search follows the same pattern: Arrow keys move through results, Enter opens the active result, and Escape closes the list and returns focus to the search field.
Semantics
Every page has one level-1 heading, a main landmark, and a skip link to it. Navigation
marks the current page with aria-current="page". Live regions announce only
what changed: the billing selection, the visible record count, and the search result count.
Status pills are text, never color alone: the state word is always present.
Motion
The site ships no layout animation and no looping animation. A reduced-motion guard covers the whole stylesheet, so visitors who prefer reduced motion get none at all. When adding a component, add no transition or animation that moves layout properties (width, height, margin, padding, position, or font size).
Print output is paper colors with interactive chrome removed: headers, docs navigation, and the search box are hidden, and article content prints in full. Code samples wrap instead of overflowing the page. Check a printed article after any layout change; a control that prints is a control that should have been marked non-printing.
Continue with the Performance docs.