Skip to content

Accessibility

Translucency is a rendering choice, not an excuse. These are the commitments every component is built against.

Focus is never just the rim

Every interactive component carries a two-layer focus indicator: a 2px accent outline offset from the control, designed to read against any backdrop the glass floats over. The glass rim alone is never the focus signal.

Contrast has floors

Each material sets a minimum tint opacity so text never sits on raw backdrop. Semantic variants (accent, destructive, success) raise the tint to near-opaque before placing light text on it.

Motion asks permission

prefers-reduced-motion pauses the aurora drift, collapses overlay springs to opacity fades, flattens the dock, and removes the lens entirely. Nothing essential is conveyed by motion alone.

Transparency asks permission

prefers-reduced-transparency switches the whole system to the solid engine: opaque surfaces, no backdrop filters, structure intact.

Behavior is borrowed, not improvised

Dialogs trap and return focus. Menus, selects, tabs, sliders, and accordions follow established keyboard patterns — arrow-key roving, typeahead, Escape, Home and End — provided by hardened headless primitives rather than hand-rolled event handlers.

Decoration is hidden

The aurora field, the lens, sheens, and filter definitions are aria-hidden. Meters and progress announce real values; toasts are polite live regions.