Skip to content

Accessibility

Stellix UI Material is built to WCAG 2.1 AA standards. Every component ships with correct ARIA attributes, full keyboard navigation, focus-visible rings, and reduced-motion support out of the box.

WCAG 2.1 AA Compliance

1.4.3 Contrast (Minimum)pass

4.5:1 for normal text, 3:1 for large text in both light and dark themes.

1.4.4 Resize Textpass

All text remains readable at 200% zoom without horizontal scrolling.

1.4.11 Non-text Contrastpass

UI components and focus indicators meet 3:1 contrast ratio.

2.1.1 Keyboardpass

All functionality is operable from a keyboard without requiring specific timings.

2.4.7 Focus Visiblepass

Focus ring is clearly visible on all interactive elements via focus-visible.

4.1.2 Name, Role, Valuepass

All components expose name, role, and value to assistive technologies via ARIA.

1.3.1 Info and Relationshipspass

Semantic HTML elements and ARIA roles communicate structure to screen readers.

2.4.3 Focus Orderpass

Tab order follows the visual reading order within all components.

1.4.13 Content on Hoverpass

Tooltip content persists when the pointer moves to it and is dismissible via Escape.

ARIA Attributes Reference

All ARIA attributes are applied automatically by the component. You do not need to add them manually.

Attribute / RoleUsed inPurpose
aria-labelButton, Avatar, Spinner, Toggle, Switch, Input, Textarea, Select, Checkbox, RadioProvides an accessible name when visible text is absent.
aria-labelledbyModal, Drawer, Alert, ToastAssociates a heading element as the accessible name of the region.
aria-describedbyInput, Textarea, Select, Checkbox, RadioPoints to helper text or error messages that describe the field.
aria-liveToast, Alert, LoadingState, NumberTickerAnnounces dynamic content changes to screen readers.
aria-expandedAccordion, Dropdown, Drawer, SidebarIndicates whether a collapsible region is open or closed.
aria-haspopupDropdown, Tooltip, ModalSignals that activating the element opens a popup layer.
aria-selectedTabs, Select, RadioMarks the currently selected item in a set of options.
aria-checkedCheckbox, Switch, Toggle, RadioReports the checked state of form controls.
aria-disabledButton, Input, Select, ToggleCommunicates that an element is present but not interactive.
aria-busySpinner, ProgressBar, LoadingStateTells assistive technology that content is still loading.
aria-valuenowProgressBar, ProgressRing, SliderGives the current numeric value of a range widget.
aria-valueminProgressBar, ProgressRing, SliderSets the minimum allowed value for a range widget.
aria-valuemaxProgressBar, ProgressRing, SliderSets the maximum allowed value for a range widget.
aria-modalModal, DrawerRestricts screen reader navigation to the modal region while open.
aria-currentBreadcrumb, Pagination, SidebarNavIdentifies the active item in a navigation sequence.
role="status"Spinner, Toast (info/success)Live region that announces non-critical updates politely.
role="alert"Toast (error/warning), AlertLive region that announces critical updates immediately.
role="dialog"Modal, DrawerMarks the container as a dialog requiring user interaction.
role="progressbar"ProgressBar, ProgressRingExposes progress to assistive technology with ARIA value attributes.
role="tab"TabsMarks a tab button within a tablist.

Keyboard Navigation

Every interactive component is fully navigable using the standard keyboard conventions below.

KeyAction
TabMove focus forward through interactive elements
Shift + TabMove focus backward through interactive elements
EnterActivate buttons, links, and selected option in dropdowns
SpaceToggle checkboxes, switches, and radio buttons; open dropdowns
EscapeClose modals, drawers, dropdowns, tooltips, and toasts
Arrow Up / DownNavigate options in dropdowns, selects, and accordion items
Arrow Left / RightSwitch between tabs; navigate pagination
HomeMove to the first item in a list or select
EndMove to the last item in a list or select
Page Up / DownScroll long lists or modal content by large steps

Reduced Motion Support

All animated components in Stellix UI Material respect the operating system preference for reduced motion. When a user enables the Reduce Motion setting (on macOS, Windows, iOS, or Android), all transitions and keyframe animations are automatically disabled or reduced to simple opacity fades.

This is implemented via the @media (prefers-reduced-motion: reduce) CSS media query applied globally in the Tailwind theme configuration and in individual component animation keyframes. Components affected include: GlimmEffect, GlidingHighlight, MorphTransition, ConfettiEffect, TypewriterEffect, NumberTicker, ProgressRing, RippleEffect, ShakeAnimation, SlideReveal, Spinner, ProgressBar (indeterminate), SkeletonBlock, and LoadingState.

@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}

Focus-Visible Ring Demo

Tab into the buttons below to see the focus ring in action. The ring only appears for keyboard navigation and is suppressed for mouse/touch interactions using the :focus-visible CSS pseudo-class.

Click anywhere to dismiss focus, then press Tab to cycle through the controls above. Focus rings use a 2px solid accent-colour ring with a 2px transparent offset for clarity.