States
The state= attribute communicates interactive and semantic states.
Combine with surfaces and tones for rich feedback patterns.
state="loading"
Hides children and shows a centered spinner. Element retains its size.
<button surface="solid" tone="primary" density="default" radius="md" state="loading"> Saving… </button>
state="disabled"
Reduces opacity to 45% and disables pointer events. Works on any element.
<button surface="solid" tone="primary" density="default" radius="md" state="disabled"> Disabled </button> <div field state="disabled"> <label>Disabled input</label> <input input placeholder="Not editable" /> </div>
state="skeleton"
Animated shimmer for loading placeholders. Hides inner content and adds a pulse effect.
<!-- Card skeleton --> <div surface="matte" density="spacious" radius="xl" layout="stack" gap="sm"> <div state="skeleton" style="height: 120px; border-radius: 8px;"></div> <div state="skeleton" radius="md" style="height: 14px; width: 70%;"></div> <div state="skeleton" radius="md" style="height: 14px; width: 45%;"></div> </div>
state="error" / "success" / "warning"
Sets --aura-tone-color for the element, allowing downstream surfaces and borders to inherit the semantic color.
⚠ Something went wrong
✓ Changes saved successfully
⚡ Storage at 90% capacity
<div surface="ghost" tone="danger" density="compact" radius="md" state="error"> ⚠ Something went wrong </div> <div surface="ghost" tone="success" density="compact" radius="md" state="success"> ✓ Changes saved </div> <div surface="ghost" tone="warning" density="compact" radius="md" state="warning"> ⚡ Storage at 90% </div>
Combining states
Banner notifications
⚠
Authentication failed
Your session has expired. Please sign in again.
✓
Deployment complete
Your site is live at aura-css.netlify.app
<div surface="solid" tone="danger" density="default" radius="lg" layout="row" gap="sm" state="error">
<span>⚠</span>
<div layout="stack" gap="xs">
<p weight="semibold">Authentication failed</p>
<p text="caption">Your session has expired. Please sign in again.</p>
</div>
</div>