Design Tokens

tokEns

Every visual decision codified as a token. Colour, typography, spacing, radius, shadow, and motion — consumed as CSS custom properties, Tailwind utilities, or TypeScript constants. This is the single source of truth for every interface built under the Alchemy system.

01 Primary Scales02 Neutrals03 Semantic04 Status05 Families06 Type Scale07 Usage08 Spacing09 Radius/Shadow/Motion10 Code
01

colour — primary scaleS

Full 11-step scales for Orange and Blue. Anchored at 500. Generated with perceptually uniform lightness distribution.

Orange

50

#FFF4ED

100

#FFE4D1

200

#FFC59E

300

#FFA06B

400

#FF7633

500

#FF4D00

600

#DB3F00

700

#B53300

800

#8C2800

900

#661D00

950

#331000

Blue

50

#EBF2FE

100

#D2E2FC

200

#A5C5F9

300

#78A8F6

400

#4B8BF3

500

#126EF5

600

#0E58C4

700

#0B4293

800

#072C62

900

#041B3E

950

#051B3D

02

colour — neutrals

Cool-gray neutral scale aligned to Tailwind Slate. Used for text, borders, backgrounds, and all structural UI.

Neutral

50

#F8FAFC

100

#F1F5F9

200

#E2E8F0

300

#CBD5E1

400

#94A3B8

500

#64748B

600

#475569

700

#334155

800

#1E293B

900

#0F172A

950

#020617

03

colour — semantic mapping

Purpose-driven tokens that map to primitive values. Always reference semantic tokens in components — never primitives directly.

Token NamePrimitiveValuePurpose
brand-primaryorange.500#FF4D00Primary brand colour — CTAs, buttons, brand mark
brand-accentblue.500#126EF5Accent colour — links, secondary actions
text-primary#1A1A2E#1A1A2EPrimary text — headings, body text
text-secondaryneutral.600#475569Secondary text — supporting copy
text-tertiaryneutral.500#64748BTertiary text — placeholders, hints
text-inversewhite#FFFFFFInverse text — on dark backgrounds
text-linkblue.500#126EF5Link text colour
bg-pagewhite#FFFFFFPage background — pure white canvas
bg-subtleneutral.50#F8FAFCSubtle background — sections, alternating rows
bg-mutedneutral.100#F1F5F9Muted background — cards, inputs
border-defaultneutral.200#E2E8F0Default border
border-strongneutral.300#CBD5E1Strong border — active inputs, dividers
successgreen#16A34ASuccess state — confirmations, positive
warningamber#D97706Warning state — caution, attention
errorred#DC2626Error state — destructive, negative
04

colour — stAtus

Semantic status colours for feedback, validation, and data states. Each has a primary, light background, and dark text variant.

Success

#16A34A

--color-status-success

Confirmations, positive metrics, completed states, form validation pass, trend-up indicators

#F0FDF4
#15803D

Warning

#D97706

--color-status-warning

Caution states, attention needed, degraded metrics, approaching thresholds, pending actions

#FFFBEB
#B45309

Error

#DC2626

--color-status-error

Destructive actions, failed validations, broken tracking, critical alerts, trend-down indicators

#FEF2F2
#B91C1C
05

typoGraphy — families

Three font families serve distinct roles. Display for brand moments, body for readability, mono for data and code.

Display

ED Nimpkish

Tracking Becomes Visible

Token--font-display
StackED Nimpkish, Georgia, serif
Weights400
Min Size24px

Body

Inter

Your ad platforms are optimising on incomplete data. Most advertisers are missing 30-40% of their conversion signals.

Token--font-body
StackInter, system-ui, sans-serif
Weights400 500 600 700

Mono

JetBrains Mono

ROAS: 4.2x | CPA: $18.40 | Conv: 1,247 | CTR: 3.8%

Token--font-mono
StackJetBrains Mono, ui-monospace
Weights400 500 700
06

typography — scalE

Full type scale from 12px to 72px. Display font (ED Nimpkish) for 3xl and above, body font (Inter) for the rest.

6xl

72px

lh 1.1

w400

Hero Display

5xl

56px

lh 1.1

w400

Heading One

4xl

40px

lh 1.1

w400

Heading Two

3xl

32px

lh 1.25

w400

Heading Three

2xl

24px

lh 1.25

w600

Subheading text

xl

20px

lh 1.5

w400

Lead paragraph text

lg

17px

lh 1.5

w400

Large body text for emphasis

base

15px

lh 1.5

w400

Base body text — the default reading size for all content

sm

13px

lh 1.5

w400

Small text for captions and metadata

xs

12px

lh 1.5

w500

Extra small — labels and fine print

07

typoGraphy — usage patterns

How type is applied in practice. Each pattern maps to a specific role in the interface hierarchy.

Buttons

Explore Components

Inter 11px / uppercase / tracking-widest / medium

--font-body / --font-size-xs / letter-spacing: 0.15em

Badges

NewDraftLive

Inter 11px / uppercase / tracking-wide / medium

--font-body / --font-size-xs / letter-spacing: 0.12em

Headings

Section Heading

Sub-section Heading

ED Nimpkish 32px / 24px+ / regular / tight tracking

--font-display / --font-size-3xl+ / line-height: 1.1-1.25

Body Text

Your ad platforms are optimising on incomplete data. Most advertisers are missing 30-40% of their conversion signals. Kazam finds the gaps.

Inter 15px / regular / relaxed leading / text-secondary

--font-body / --font-size-base / line-height: 1.625

Captions

Last updated 2 hours ago

Conversion tracking status: active

Inter 12-13px / regular / text-tertiary

--font-body / --font-size-xs to --font-size-sm

Data / Metrics

$14.5M

ROAS 4.2x | CPA $18.40

conv: 1,247 | ctr: 3.8%

JetBrains Mono / various sizes / tabular numerals

--font-mono / bold for hero KPIs, regular for supporting

Form Labels

you@company.com

Inter 13px / medium / text-primary for labels

--font-body / --font-size-sm / font-weight: 500

Navigation Links

TokensComponentsDataBrand

Inter 12px / uppercase / tracking-widest / medium

--font-body / --font-size-xs / letter-spacing: 0.1em

08

spacinG

4px base unit. Every spatial decision uses this scale. Consistent rhythm across all components and layouts.

0--spacing-0
0px
1--spacing-1
4px
2--spacing-2
8px
3--spacing-3
12px
4--spacing-4
16px
6--spacing-6
24px
8--spacing-8
32px
12--spacing-12
48px
16--spacing-16
64px
24--spacing-24
96px
09

radius, shadow, motion

Spatial modifiers and transition tokens. Sharp rectangles by default, with controlled rounding, elevation, and movement.

Radius

none0px

--radius-none

sm4px

--radius-sm

md8px

--radius-md

lg12px

--radius-lg

xl16px

--radius-xl

full9999px

--radius-full

Shadow

sm--shadow-sm

Cards, subtle elevation

0 1px 2px 0 rgba(0,0,0,0.05)

md--shadow-md

Dropdowns, popovers

0 4px 6px -1px rgba(0,0,0,0.07)

lg--shadow-lg

Modals, overlays

0 10px 15px -3px rgba(0,0,0,0.10)

Motion

fast150ms

Hovers, toggles, micro-interactions

--duration-fast

normal200ms

State changes, tab switches

--duration-normal

slow300ms

Entrances, page transitions, complex reveals

--duration-slow

Easing Curves

ease-outEntrances — elements appearing

cubic-bezier(0, 0, 0.2, 1)

--ease-out

ease-inExits — elements disappearing

cubic-bezier(0.4, 0, 1, 1)

--ease-in

ease-in-outState changes — position, color, size

cubic-bezier(0.4, 0, 0.2, 1)

--ease-in-out

10

token uSage

Three ways to consume tokens: CSS custom properties for stylesheets, Tailwind utilities for components, TypeScript imports for programmatic access.

CSS Custom Properties.css
/* CSS Custom Properties */
.card {
  background: var(--color-bg-page);
  border: 1px solid var(--color-border-default);
  border-radius: var(--radius-md);
  padding: var(--spacing-6);
  box-shadow: var(--shadow-sm);
}

.card-title {
  font-family: var(--font-display);
  font-size: var(--font-size-3xl);
  line-height: var(--line-height-tight);
  color: var(--color-text-primary);
}

.card-body {
  font-family: var(--font-body);
  font-size: var(--font-size-base);
  color: var(--color-text-secondary);
  margin-top: var(--spacing-3);
}

.card:hover {
  border-color: var(--color-brand-primary);
  transition: border-color var(--duration-fast)
    var(--ease-out);
}
Tailwind Classes.tsx
{/* Tailwind CSS Classes */}
<div className="
  bg-white
  border border-neutral-200
  rounded-md
  p-6
  shadow-sm
  hover:border-orange-500
  transition-colors duration-fast
">
  <h3 className="
    font-display text-3xl
    leading-tight tracking-tight
    text-text-primary
  ">
    Card Title
  </h3>
  <p className="
    font-body text-base
    text-text-secondary
    mt-3
  ">
    Card body text using semantic
    colour tokens.
  </p>
  <span className="
    font-mono text-xs
    text-orange-500
  ">
    $14.5M
  </span>
</div>
TypeScript Constants.ts
// TypeScript Imports
import {
  colors,
  typography,
  spacing,
  radius,
  shadow,
  motion,
} from '@kazam-au/tokens';

// Access primitive values
colors.primitive.orange[500]
// → '#FF4D00'

// Access semantic tokens
colors.semantic.brand.primary
// → '#FF4D00' (resolves reference)

colors.semantic.text.primary
// → '#1A1A2E'

// Typography composites
typography.styles.display.hero
// → { fontFamily, fontSize, fontWeight,
//     lineHeight }

// Spacing scale
spacing[4]  // → '16px'
spacing[8]  // → '32px'

// Motion
motion.duration.fast     // → '150ms'
motion.easing['ease-out']
// → [0, 0, 0.2, 1]

// Use in styled components or
// inline styles
const chartColors = [
  colors.primitive.orange[500],
  colors.primitive.blue[500],
  colors.semantic.status.success,
  colors.semantic.status.warning,
];