Foundation
Tokens
Semantic tokens: colors, typography, layout, motion, z-index, and borders. The single source of truth—don’t use ad-hoc values.
Colors
Brand, system states (score, feedback), surfaces and text.
Brand & CTA
primary
Primary CTA
#d8b4fe
accent.mint
Calm / success
#99f6e4
accent.blue
Analytics / info
#93c5fd
Score (Traffic Lights)
score.high
High Match
#34d399
score.medium
Potential Risk
#fbbf24
score.low
Low Match
#f43f55
Surfaces
surface.base
App background
#f8f7ff
surface.card
Card
#ffffff
surface.darkCard
Hero block
#1a1625
Color scales (full palette)
Every shade for each brand and system color. Prefer semantic tokens (above) when a role exists; use these when you need a specific step (e.g. soft background, border, or a shade not yet mapped to a token).
Purple (primary brand)
50–200: very light backgrounds, inactive/ghost states. 500: main CTA, primary actions. 600–700: hover, pressed, links. 800–900: text or strong accent on light backgrounds.
Mint (calm / success accent)
50–200: soft success backgrounds, “ready” states. 500: accent for success/calm. 600–700: hover, active success. 800–900: strong teal for text or emphasis.
Blue (info / analytics)
50–200: light info backgrounds, charts. 500: analytics accent, secondary CTAs. 600–700: hover, links. 800–900: text or strong accent on light.
System: red, green, yellow
100: soft background for toasts/alerts. 500–700: score badges (Traffic Lights), buttons, icons. 900: dark text on light when you need maximum contrast. Use for feedback (success, warning, error) and Fit/Growth score.
red
green
yellow
Typography
Figtree. Role: hero, page title, section, body, button, caption, badge.
Heading 1 / Hero
Heading 2 / Page title
Heading 3 / Section title
Heading 4 / Block title
Body L / Default text
Button
Caption / Meta
Label Tiny / Badge
Layout
Spacing (4px base), radius, elevation, shadows.
Spacing
1: 4px, 2: 8px, 3: 12px, 4: 16px, 5: 20px, 6: 24px, 8: 32px, 10: 40px, 12: 48px, 16: 64px
Radius
sm 8px, md 12px, lg 16px, xl 24px, pill
Elevation
none, card, cardHover, modal
Shadows (diffuse)
Large blur, low opacity — soft and visible. For inputs, floating elements.
Motion
Duration: fast (hover, feedback), normal (dropdown, modal open), slow (sidebar/drawer). Easing: ease-out-expo for smooth arrivals—cards and overlays don’t snap linearly.
Duration
fast150ms — button hover, focusnormal250ms — dropdown open, modalslow400ms — sidebar / drawer slide-out
Easing
outExpocubic-bezier(0.16, 1, 0.3, 1)outcubic-bezier(0, 0, 0.2, 1)linear— progress, indeterminate
CSS: var(--duration-ds-fast), var(--ease-ds-out-expo)
Z-Index
One z-index scale across the app. Overlay sits under modals, toasts stay on top.
z-ds-base0 — Base layerz-ds-above10 — Above content (sticky)z-ds-overlay40 — Overlay (drawer backdrop)z-ds-dropdown50 — Dropdown, popoverz-ds-modal100 — Modal, dialogz-ds-toast200 — Toast notificationsz-ds-max9999 — Max (tooltips; ensure on top)
CSS: var(--z-ds-overlay), var(--z-ds-modal)
Stroke / Border width
Border thickness for dividers and focus rings.
CSS: var(--border-width-ds-thin), var(--border-width-ds-medium)