Skip to main content

Design Tokens

Design tokens are the single source of truth for visual design decisions — colors, spacing, typography, and more. They ensure consistency across all components and applications.

Token Architecture

primitives.json → Raw values (colors, sizes, fonts)
↓ Style Dictionary
semantic/light.json → Contextual meanings (light theme)
semantic/dark.json → Contextual meanings (dark theme)
↓ Build
tokens.css → CSS Variables (:root + [data-theme])
tokens.d.ts → TypeScript constants

Token Categories

Colors

TokenLightDarkUsage
--color-primary#4F46E5#818CF8Primary actions, links
--color-bg-primary#FFFFFF#0F0F19Page background
--color-text-primary#111827#F9FAFBPrimary text
--color-border#E5E7EB#374151Borders, dividers
--color-success#059669#34D399Success states
--color-danger#DC2626#F87171Error states
--color-warning#D97706#FBBF24Warning states

Spacing

Based on a 4px grid:

TokenValueUsage
--spacing-14pxTight gaps
--spacing-28pxDefault padding
--spacing-312pxComponent padding
--spacing-416pxSection gaps
--spacing-624pxCard padding
--spacing-832pxSection spacing

Typography

TokenValueUsage
--font-family-sansInter, system-uiBody text
--font-family-monoJetBrains MonoCode
--font-size-xs0.75remCaptions
--font-size-sm0.875remSecondary text
--font-size-base1remBody text
--font-size-lg1.125remEmphasis
--font-size-xl1.25remHeadings

Using Tokens

In CSS Modules

/* Button.module.css */
.button {
background: var(--color-primary);
padding: var(--spacing-2) var(--spacing-4);
font-family: var(--font-family-sans);
border-radius: var(--radius-md);
}

In Inline Styles

<div style={{ padding: 'var(--spacing-4)', color: 'var(--color-text-primary)' }}>
Content
</div>

Token Format (W3C Draft)

Tokens follow the W3C Design Tokens Community Group draft specification:

{
"color": {
"primary": {
"$value": "#4F46E5",
"$type": "color",
"$description": "Primary brand color"
}
}
}

Package

pnpm add @kikumi3n/tokens
// Import CSS Variables
import '@kikumi3n/tokens/css';

// Import TypeScript constants (optional)
import { tokens } from '@kikumi3n/tokens';