Overview
Tokens are the contract between design and code. Eight collections, three platforms, one source of truth.
A token in Zazz is not a styling decision. It is the contract between design and code.
You know how most design systems work: a Figma library, a CSS file, sometimes a Tailwind config, sometimes a Webflow style guide. Each one tries to be the source of truth. When a designer changes a corporate color in Figma, someone has to update the CSS. When a developer adjusts the spacing scale in code, the Figma file drifts. Rebrands turn into a manual sweep across tools. Dark mode arrives bolted on. The design tool and the codebase end up telling different stories about the same product.
This is what Zazz Foundations solves. The token system is built around the following principles:
- Variables-Driven: Every visible choice is a token. Nothing is hardcoded.
- Roles, Not Values: Tokens describe what a value is for, not what it equals.
- Derived, Not Duplicated: Themes, overlays, and scales derive from a small set of primitives.
- Themable by Mode: Light, dark, and other modes attach to the variable, not the layer.
- Portable Across Tools: Figma, Webflow, Tailwind, and CSS share the same names.
Variables-Driven
Zazz exposes every visible choice (color, type, space, radius, shadow) as a token. The token, not the value, is what your work references. This means:
- One source of truth. Change the token, the whole product changes with it.
- No hardcoded values. Components don't ship with literal hex codes or pixel sizes.
- One vocabulary. Designers and developers talk about the same
--gap-md, not "the medium spacing" versus "16px."
In a typical setup, changing a corporate color is a search-and-replace across files. With Zazz, you change one variable and the rebrand is done: in Figma, in Webflow, and in code at once.
Upfront, yes. The token collections take an hour or two to wire to a project. After that, the math runs the other way. A rebrand is one variable away, dark mode is free, and a new client variant is editing a small surface, not sweeping a stylesheet.
Agencies that ship multiple projects a year recover the setup cost in the first one. If you're building a one-off site you won't reuse the system on, the upfront work won't pay back. Zazz is for teams that ship many things and need them to stay consistent.
Roles, Not Values
Tokens describe roles. --color-text is a role, not a color. --gap-md is a role, not a measurement. You decide what each role points to.
- Adoption inherits structure, not look. Use Zazz's organization without inheriting Zazz's aesthetic.
- Components are agnostic. They consume
--color-textand don't care what color it is. - Customization is the default mode. Override at the token layer; never touch components.
If you want a louder rebrand, change the corporate scales. If you want denser layouts, change --spacing-interval. If you want softer corners, change --radius-multiplier. The components don't care.
Derived, Not Duplicated
Zazz layers tokens so a single change propagates instead of replicating across files.
- Semantic tokens reference primitives.
--color-textpoints into the grayscale or corporate palette, not at a hex value. - Derived tokens are computed. Shade and tint use
oklch(from var(...) ...). They aren't separate values to maintain. - Theme tokens follow modes. Light and dark are two values on the same variable.
:root {
--color-text: var(--neutral-950);
--gap-md: calc(var(--step-4) * var(--spacing-interval));
--radius-xs: calc(2px * var(--radius-multiplier));
--shadow-md: 0 4px 8px oklch(from var(--neutral-950) l c h / 0.08);
}Change --neutral-950, and every shade overlay, every text color, every shadow that derives from it shifts in lockstep. No hunt-and-fix.
Themable by Mode
Light, dark, and any additional modes attach to the variable itself, not to individual layers.
- One variable, multiple values.
--color-backgroundresolves to the right value automatically when the mode switches. - No mode-specific markup. Components don't branch on theme. They consume the token and trust it.
- Modes are extensible. Add high-contrast, brand-takeover, or holiday modes; they're all just additional values on existing variables.
Designers switch the Figma mode and the file recolors. Developers toggle a data attribute and the app recolors. Same variables, same outcome, no per-component logic.
Portable Across Tools
The Zazz token in Figma is the Zazz token in Webflow is the Zazz token in Tailwind is the Zazz token in CSS.
| Platform | Mechanism |
|---|---|
| Figma | Variables, with light/dark (and other) modes attached to the variable, not the layer. |
| Webflow | Variables for primitives like --gap-md and --color-text; style classes for compositions. |
| Tailwind + CSS | The Tailwind config extends CSS custom properties, so --gap-md and gap-md resolve to the same value. |
The same name lives in every tool. You're not learning four token languages. You're learning one.
The eight collections
Each collection is a category page.
Theme
Base, overlay, brand, status. And the modes they switch between.
Corporate
Brand color scales for primary, secondary, tertiary, and beyond.
Grayscale
Neutrals, and the shade and tint scales derived from them.
Typography
Family, fluid size, weight, tracking, leading, paragraph spacing.
Spacing
Modifiers, semantic gap-*, and the step-* scale.
Radius
Multiplier, semantic, and primitive-specific radii.
Layout
Containers, article widths, and breakpoints for calcs and container queries.
Effects
Shadows and states. Focus rings and feedback.