Skip to content

Design tokens ​

One source of truth. Every token lives in theme.css and is exposed as a CSS variable and a Tailwind v4 utility. Short names don't exist — use the real ones.

Semantic color ​

CSS variableValueUse
--primary#2bf2f1CTAs, focus, brand
--foreground#082422Text, dark surfaces
--background#fefcf9Warm canvas
--muted#efebe7Hover, secondary fills
--status-success#60d06fCompleted, received
--status-warning#ffd200Pending, on its way
--status-error#f26629Blocking, destructive
--interactive-primary-hover#1abfbePrimary hover

Border radius ​

TokenValueApplies to
--radius-xs2px—
--radius-md8pxInputs, small cards
--radius-xl16pxStandard cards
--radius-2xl24pxHero cards, sheets
--radius-3xl32pxLarge overlays
--radius-full9999pxButtons, badges, chips

--radius-sm (4px) and --radius-lg (12px) also exist. Pill buttons use --radius-button: calc(1rem + 999px), which resolves to a full pill.

TokenValue
--radius-xs2px
--radius-sm4px
--radius-md8px
--radius-lg12px
--radius-xl16px
--radius-2xl24px
--radius-3xl32px
--radius-full9999px

Spacing ​

A 4px grid only: 4, 8, 12, 16, 24, 32, 48, 64. They map to --spacing-1, --spacing-2, --spacing-3, --spacing-4, --spacing-6, --spacing-8, --spacing-12, and --spacing-16.

TokenValuerem
--spacing-14px0.25rem
--spacing-28px0.5rem
--spacing-312px0.75rem
--spacing-416px1rem
--spacing-624px1.5rem
--spacing-832px2rem
--spacing-1248px3rem
--spacing-1664px4rem

Shadows ​

Slate-tinted. Never pure black.

TokenUse
--shadow-smChips, active tabs
--shadow-mdElevated card
--shadow-lgDropdowns, popovers
--shadow-xlDialogs
--shadow-turquoisePrimary button glow: 0 4px 14px #2bf2f140
--shadow-selectionTurquoise focus, 6px: 0 0 0 6px #2bf2f11a

Use the tokens in another project ​

The tokens ship as one file of CSS variables, light and dark, at felix-tokens.css in the repo root. A project links it and keeps no copy of the values.

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/axeliodiaz/templates@felix-tokens-v1.0.0/felix-tokens.css">
  • Pin a release tag, as above. A tag never changes, so a token edit here cannot restyle an app until the app moves to the next tag. Do not link @main or @develop from production.
  • Dark mode turns on when .felix-dark, .dark or [data-theme="dark"] sits on an ancestor, usually <html>.
  • The file has variables only: color, radius, spacing, shadow and type names. Fonts (Plain and Saans) are licensed and load separately.
  • To change a token, edit the file here, merge, and publish a new tag. Apps then bump the tag.

CSS variables ​

css
:root {
  --turquoise: #2bf2f1;
  --lime: #dcff00;
  --slate: #082422;
  --linen: #fefcf9;
  --stone: #efebe7;
  --concrete: #cfcabf;
  --fg-muted: #636158;
  --light-sky: #d4fffe;

  --background: var(--linen);
  --foreground: var(--slate);
  --primary: var(--turquoise);
  --primary-foreground: var(--slate);
  --accent: var(--lime);
  --border: var(--concrete);
  --muted: var(--stone);
  --destructive: #f26629;
  --status-success: #60d06f;
  --status-warning: #ffd200;
  --status-error: #f26629;
  --interactive-primary-hover: #1abfbe;

  --radius-xs: 2px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-2xl: 24px;
  --radius-3xl: 32px;
  --radius-full: 9999px;
  --radius-button: calc(1rem + 999px);

  --spacing-1: 4px;
  --spacing-2: 8px;
  --spacing-3: 12px;
  --spacing-4: 16px;
  --spacing-6: 24px;
  --spacing-8: 32px;
  --spacing-12: 48px;
  --spacing-16: 64px;

  --shadow-sm: 0 1px 3px #0824220f, 0 1px 2px #0824220a;
  --shadow-md: 0 4px 6px #0824220f, 0 2px 4px #0824220a;
  --shadow-lg: 0 10px 15px #0824220f, 0 4px 6px #08242208;
  --shadow-xl: 0 20px 25px #0824220f, 0 8px 10px #08242208;
  --shadow-turquoise: 0 4px 14px #2bf2f140; /* primary button glow */
  --shadow-selection: 0 0 0 6px #2bf2f11a;  /* turquoise focus, 6px */

  --font-heading: "Plain", "Saans", system-ui, sans-serif;
  --font-sans: "Saans", system-ui, sans-serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
}

.dark {
  --background: #082422;
  --foreground: #fefcf9;
  --card: #234343;
  --muted: #152b2a;
  --accent: #b2d000;
  --border: #35605f;
}

Dark mode ​

Slate canvas #082422, linen text #fefcf9, card #234343, muted #152b2a, lime accent #b2d000, border #35605f. Turquoise stays --primary. Text on turquoise and lime is always #082422.