Foundations
Color
Zetta is built around a three-role palette — Brand (identity), Primary (interaction) and AI (automation) — plus a status-only semantic set and a disciplined neutral ramp. Colour never carries meaning on its own; pair it with text, icon and border.
The three-role palette
Brand (lime) is identity only; Primary (indigo) is every interaction; AI (purple) marks
automation, premium and discovery. Each role also carries -hover,
-active, -text and a -bg tint. v1.5 collapsed this from
five roles: secondary and quaternary were deleted and
tertiary was renamed ai — informational contexts now use semantic
info, urgency uses warning, and links use primary.
Semantic — status only
Used for state, never for interaction (the one exception is destructive danger buttons). Fill and text tokens are distinct and must not be swapped.
Neutrals & surfaces
The rules
- 1Brand lime is identity only — logo, focus ring, spinner. Never a button, link or active state.
- 2Primary indigo is every CTA and interactive state; text on it is
primary-text. - 3The three roles aren't interchangeable — Brand is identity, Primary is interaction, AI is automation. Use base colours for actions and accents, never large fills; reach for
-bginstead. - 4Semantic = status only; fill vs text tokens are distinct and must not be swapped.
- 6
brand-text(#0a0a31) is text-only — never a background.
See every color token with all three theme values on the Color tokens page.