waffle

Shared design tokens for Aisu.Studio projects — the base every new build starts from.

Work in progress

waffle is still being built out. The tokens on this page (including dark mode, radius, shadow, and motion below) are stable and safe to use directly; components.html has the real component classes; the Patterns page is the rougher quarry they were distilled from.

Color tokens

Click a swatch to try a new color. Nothing here is saved automatically — use Export below to get the file.

--color-blueberry #1f1934 · ink, primary text
--color-grape #5100ff · accent, links
--color-lemon #d8ff01 · highlight
--color-hazelnut #9e9c95 · borders, dividers, disabled
--color-cappuccino #d9d7ce · surface / card bg
--color-vanilla #eae8e0 · page bg
--color-galao #f2f1eb · galão · surface on surface
--color-cortado #66655f · cortado · secondary text, 4.53:1 on vanilla

Tertiary colors — flavor ramps

The third tier, and a functional one. Above it sit primary (blueberry, grape, lemon — brand and interaction) and secondary (hazelnut, cappuccino, vanilla — surfaces); these carry neither, they only encode meaning in content: sequential scales, heatmaps, intensity or priority coding, categorical series. So don't reach for a flavor to style chrome — a button, a link, a border. Five flavors × five juicyness levels, level 5 full juice and level 1 the most diluted. One level read across flavors gives a categorical series; one flavor read 1 → 5 gives a sequential scale. Fixed values, like the core swatches: they don't repoint in dark mode.

Juicyness level 5 4 3 2 1
#3e7c1f
#57a03a
#92c982
#a6cd93
#c4ddb6
pistachio
#ec6608
#f0921a
#f2b63c
#efcc81
#f0d9a3
mango
#d80b0b
#ee3d28
#e9634f
#e9887b
#f0aaa0
strawberry
#e6187c
#ea4e9f
#ee72b6
#f192c7
#f5b3d6
raspberry
#2b1611
#4b3225
#7a6250
#9f8c7c
#c2b3a5
chocolate

Token names are --color-<flavor>-<1–5>; the bare --color-<flavor> is an alias for level 5. Text on a fill: ink (blueberry) clears WCAG AA on pistachio 1–4, mango 1–5, strawberry 1–3, raspberry 1–4, chocolate 1–2; vanilla clears it on chocolate 3–5. Four levels land between 3:1 and 4.5:1 — pistachio 5, strawberry 4 and 5, raspberry 5 — so those take large text (≥24px, or ≥18.7px bold) or no text at all. The hexes printed above use whichever of the two reads better on that level — which on those four is still below AA, deliberately, so the limit is visible here.

Spacing scale

--sp-xs4px
--sp-sm8px
--sp-md16px
--sp-lg24px
--sp-xl32px
--sp-2xl48px
--sp-3xl64px
--sp-4xl96px

Type roles

Three priority slots, deliberately numbered rather than named. A name like “sans” or “headline” promises an appearance or a use, and either can change — a priority cannot. Which face sits in which slot is the decision; the slot itself stays.

--font-primary
Public Sans

Paragraphs, buttons, tabs, nav — anything sentence-like or interactive. When in doubt: primary.

--font-secondary
Stoke

Display titles and headings. A characterful serif, Light 300 / Regular 400 only — never body copy, never small sizes.

--font-tertiary
iA Writer Mono S

Small data and label accents: eyebrows, tags, indices, KPI values, code. Not headlines.

Type scale

h1
secondary · 32px

Waffle is the base for every Aisu

h2
secondary · 20px · uppercase

Section heading

body-lg
primary · 20px

Larger body copy for intros and lede paragraphs.

body
primary · 16px

Default body copy for regular reading text.

caption
primary bold · 12px · uppercase

Caption / eyebrow label

mono
tertiary · 14px

const token = "value";

link
primary bold · 16px
This is a link

Dark mode

Every semantic alias below (bg / surface / surface-2 / text / muted / accent / on-accent / on-accent-solid / border, plus the shadow scale) repoints for dark automatically — via prefers-color-scheme, or force it with <html data-theme="dark"> / data-theme="light". The raw --color-* swatches above never change; only the aliases do. Values are the same ones already proven in production by AisuStudio/spiritsprint, not a new invention.

Try it: toggle your OS or browser color scheme and reload this page.

Radius scale

--radius-xs (3px)
tags, badges, progress fill
--radius-sm (6px)
buttons, inputs, media cards
--radius-md (10px)
modals, rails, export cards
--radius-lg (16px)
glass cards, hero panels
--radius-full
pills, toggle groups

Shadow scale

No horizontal shift by default — straight drop shadows. Opacity is raised automatically in dark mode so they still read against a dark surface.

--shadow-sm
--shadow-md
--shadow-lg

Motion

--duration-fast (120ms)
click to try
--duration-base (200ms)
hover states, toggles
--duration-slow (320ms)
panels, modals

Easing: --ease-standard (default), --ease-out (entering), --ease-in (exiting).

Breakpoints

Reference values only — a media query can't read a CSS custom property, so these aren't functional tokens. Copy the rem value into your own @media rule and keep it in sync with this table by hand.

TokenValuePixels
--bp-sm30rem480px
--bp-md48rem768px
--bp-lg64rem1024px
--bp-xl80rem1280px

Export

Edits above only live in this browser tab. Nothing is written back to the repo automatically — copy or download the file below and commit it yourself when you're happy with it.