Skip to main content

Theme reference

Per-theme tokens, typography, motion, control scale, and live component chrome. Catalog themes read from src/registry/core/themes/sites.tswith branches in recipes/; saved custom themes use their draft token overrides.

atelierAtelier · light mode

At a glance

Catalog style

Warm linen studio — brass accents, subtle lift, catalog dogfood shell.

  • Catalog-only mood — no product globals.css to copy.
  • UI font stack: var(--font-geist-sans), system-ui, sans-serif.
  • Preview panels use a gradient page background via themePreviewStyle.

Studio lookbook

Notebook & calm

Warm surfaces, restrained motion, writing-first chrome.

Best for: Journals, docs, personal productivity, calm B2B

Live component preview

Wrapped in themePreviewStyle so the canvas matches marketing and doc previews. Toggle theme and mode above to compare catalog themes and saved custom themes.

Live previewDraftLight

Component chrome

Buttons, fields, badges, and progress at medium size — same tokens as copied components in your app.

Helper text uses the theme muted token.

Weekly writing goal

Canvas: Three-stop linear gradient from canvas → secondary → tertiary (typical dashboard page chrome).

Surface roles

How ink, surface, canvas, and accent relate on a typical page — rendered with the active theme tokens.

Canvas

Page canvas

Surface

Cards & panels

Border

Hairlines

Accent

Brand accent

Heading on surface

Body and muted text — ink and muted tokens on a surface panel.

Color palette

Injected on each component via themeStyleVars(theme, mode).

Ink

--atelier-ink

#2c2419

Muted

--atelier-muted

#8a7f72

Surface

--atelier-surface

#fffdf8

Canvas

--atelier-canvas

#f3ebe0

Canvas secondary

gradient stop

#ebe3d6

Canvas tertiary

gradient stop

#e2d8c8

Border

--atelier-border

#d9cfc0

Accent

--atelier-accent

#9a7222

Accent hover

--atelier-accent-hover

#7d5c18

Accent soft

--atelier-accent-soft

#c9a962

On accent

--atelier-on-accent

#fffdf8

Focus ring

--atelier-focus-ring

color-mix(in srgb, #c9a962 30%, transparent)

Danger

--atelier-danger

#b54a4a

Light vs dark

Core colors for both modes — use the mode toggle to preview components; this table showsraw token values from sites.ts.

TokenLightDark
Ink--atelier-ink#2c2419#f5efe6
Muted--atelier-muted#8a7f72#a89b8a
Canvas--atelier-canvas#f3ebe0#1e1914
Surface--atelier-surface#fffdf8#2a231c
Border--atelier-border#d9cfc0#4a4035
Accent--atelier-accent#9a7222#d4b872
Accent hover--atelier-accent-hover#7d5c18#e8cc8a
Danger--atelier-danger#b54a4a#e07a7a

Typography

The quick brown fox

Labels, hints, and body copy pull from --atelier-ink and --atelier-muted.

UI font

Geist Sans, system-ui, sans-serif

Mono font

Geist Mono, ui-monospace, monospace

Field label

14px / medium · tracking-wide

Hint text

12px

Button weight

medium

Shape

TokenCSS variableValue
Control radius--atelier-radius0.875rem
Surface radius--atelier-radius-lg1.125rem

Motion

Easing and durations drive buttons, panels, tabs, and accordion height transitions.

TokenCSS variableValue
Easing--atelier-easecubic-bezier(0.25, 0.8, 0.25, 1)
Fast duration--atelier-dur-fast180ms
Panel duration--atelier-dur-panel320ms
Enter duration--atelier-dur-enter420ms

Control scale

Minimum heights and type sizes from recipes/button.ts and recipes/field.ts for this theme.

ControlSmallMediumLarge
Button36px · 12px text40px · 14px text44px · 16px text
Field44px · 14px text44px · 14px text44px · 14px text

Recipe modules

Shared branches apply to every theme; dedicated files override chrome for catalog moods.

Shared (all themes)

recipes/button.ts · recipes/field.ts · recipes/surface.ts · recipes/nav.ts · recipes/data.ts · recipes/chrome.ts · recipes/display.ts · recipes/overlay.ts · recipes/toggle.ts

No dedicated recipe file — this theme uses shared modules with per-theme branches.

Usage in your app

Pass theme and mode on each component — no global globals.css token block required after copying core once.

import { Button } from "@/app/ui/button";
import { themeStyleVars } from "@/app/ui/core/themes";

<div style={themeStyleVars("atelier", "light")}>
  <Button theme="atelier" mode="light" variant="primary">
    Save
  </Button>
</div>

CSS variables (light)

Full set written by themeStyleVars("atelier", "light").

TokenCSS variableValue
Ink--atelier-ink#2c2419
Muted--atelier-muted#8a7f72
Surface--atelier-surface#fffdf8
Canvas--atelier-canvas#f3ebe0
Border--atelier-border#d9cfc0
Accent--atelier-accent#9a7222
Accent hover--atelier-accent-hover#7d5c18
Accent soft--atelier-accent-soft#c9a962
On accent--atelier-on-accent#fffdf8
Focus ring--atelier-focus-ringcolor-mix(in srgb, #c9a962 30%, transparent)
Danger--atelier-danger#b54a4a
Control radius--atelier-radius0.875rem
Surface radius--atelier-radius-lg1.125rem
Easing--atelier-easecubic-bezier(0.25, 0.8, 0.25, 1)
Fast duration--atelier-dur-fast180ms
Panel duration--atelier-dur-panel320ms
Enter duration--atelier-dur-enter420ms