Skeleton
A pulsing block that holds layout space while content loads. Compose multiple Skeletons to match the shape of the real content.
Default
Composing a card placeholder
Accessibility notes
- Sets
role=“status”witharia-busy=“true”andaria-live=“polite”— screen readers announce a loading state without interrupting. - The opacity pulse is driven by Motion and stops entirely under
prefers-reduced-motion— the skeleton becomes a static dimmed block. - For long-running loads, swap the role to a more specific live region announcing progress (e.g.
aria-busyon the parent +aria-liveon a sibling status node).