Axes — tone · appearance · variant
Styling axes are named by what they mean, and the name is enforced — a metadata lint fails the build when an axis is misnamed. That's what makes the API predictable for humans and machine-checkable for agents: an agent never has to guess whether variant="danger" exists (it doesn't — color intent is always tone).
tone
Color intentFrom the shared vocabulary neutral · brand · info · success · warning · danger · discovery (plus component-specific tones like Stat's positive/negative). Color intent is never expressed through an axis named variant.
<Badge tone="danger" />appearance
Fill / surface treatmentHow the color is applied to the surface: solid · soft · outline · ghost · subtle · framed, and friends.
<Alert tone="warning" appearance="soft" />variant
Kind / structureReserved for structural axes — line|bar, arc|needle, dot|icon — not color or fill. The one exception is Button, whose variant is the action-emphasis (fill) axis; its color intent still lives on the orthogonal tone axis.
<Sparkline variant="bar" />Every enum axis also reflects to a matching data-<axis> attribute (data-tone, data-appearance, data-variant) so styling and testing can target semantics, not class soup. See it applied on any component page under Appearance — browse the roster →