Design Tokens
Systemized scales powering theming, semantics, and components.
Root scales
Defined in src/scss/tokens/_root.scss. Raw,
brand‑agnostic numeric/color/size values.
Colors
Primary
--color-primary-900: #34156f; --color-primary-800: #4c1ea5; --color-primary-700: #6125cf; --color-primary-600: #7532f2; --color-primary-500: #8746ff; --color-primary-400: #a06dff; --color-primary-300: #bf97ff; --color-primary-200: #d5b9ff; --color-primary-100: #eadbff; --color-primary-50: #f5efff;
Neutrals
--color-neutral-900: #202539; --color-neutral-800: #363b50; --color-neutral-700: #4c536c; --color-neutral-600: #616b87; --color-neutral-500: #7b85a4; --color-neutral-400: #9aa3bf; --color-neutral-300: #bcc3d9; --color-neutral-200: #d8dced; --color-neutral-100: #eceef6; --color-neutral-50: #f6f7fb;
Status
/* Success */ --color-success-700: #0a6e45; --color-success-600: #096642; --color-success-500: #0d8052; --color-success-400: #20c38f; --color-success-100: #e8fff4; /* Warning */ --color-warning-700: #7a4b10; --color-warning-600: #cc7f19; --color-warning-500: #ffa321; --color-warning-400: #ffc247; --color-warning-100: #fff3d8; /* Error */ --color-error-700: #8a1a36; --color-error-600: #b02246; --color-error-500: #d02b54; --color-error-400: #ff6b87; --color-error-100: #ffe5ea; /* Info */ --color-info-700: #006fa8; --color-info-600: #0098e0; --color-info-500: #1cb8ff; --color-info-400: #52d0ff; --color-info-100: #e6f7ff;
Typography & Spacing
Font sizes
--font-size-xs: 0.75rem; --font-size-s: 0.875rem; --font-size-m: 1rem; --font-size-l: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 1.875rem; --font-size-4xl: 2.25rem; --font-size-5xl: 3rem;
Weights & line-height
--font-weight-regular: 400; --font-weight-semibold: 600; --font-weight-bold: 700; --line-height-tight: 1.25; --line-height-normal: 1.5; --line-height-relaxed: 1.75;
Spacing scale
--space-2xs: .25rem; /* 4px */ --space-xs: .5rem; /* 8px */ --space-s: .75rem; /* 12px */ --space-m: 1rem; /* 16px */ --space-l: 1.25rem; /* 20px */ --space-xl: 1.5rem; /* 24px */ --space-2xl: 2rem; /* 32px */ --space-3xl: 2.5rem; /* 40px */ --space-4xl: 3rem; /* 48px */
Radius, Borders & Shadows
Radii
--radius-s: .25rem; --radius-m: .375rem; --radius-l: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-full: 12.5rem; /* pill */
Border widths
--border-width-thin: .0625rem; --border-width-medium: .125rem; --border-width-thick: .25rem;
Shadows
--shadow-xs: 0 1px 2px 0 rgba(0,0,0,.05); --shadow-s: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06); --shadow-m: 0 4px 6px rgba(0,0,0,.1), 0 2px 4px rgba(0,0,0,.06); --shadow-l: 0 10px 15px rgba(0,0,0,.1), 0 4px 6px rgba(0,0,0,.05);
Dark theme overrides live under [data-theme="dark"] in
_root.scss.
Semantic tokens
Defined in src/scss/tokens/_semantic.scss. Mapping
intent (text, surface, border, icon) to raw scales.
/* Text */ --color-text-white: var(--color-white); --color-text-neutral-600: var(--color-neutral-600); --color-text-neutral-700: var(--color-neutral-700); --color-text-neutral-800: var(--color-neutral-800); --color-text-neutral-900: var(--color-neutral-900); --color-text-primary-700: var(--color-primary-700); --color-text-success-700: var(--color-success-700); --color-text-warning-700: var(--color-warning-700); --color-text-error-700: var(--color-error-700); --color-text-info-700: var(--color-info-700); /* Surfaces */ --color-surface-white: var(--color-white); --color-surface-neutral-50: var(--color-neutral-50); --color-surface-neutral-100: var(--color-neutral-100); --color-surface-neutral-300: var(--color-neutral-300); --color-surface-primary-50: var(--color-primary-50); --color-surface-primary-600: var(--color-primary-600); --color-surface-primary-700: var(--color-primary-700); --color-surface-primary-800: var(--color-primary-800); --color-surface-success-100: var(--color-success-100); --color-surface-success-500: var(--color-success-500); --color-surface-success-600: var(--color-success-600); --color-surface-warning-100: var(--color-warning-100); --color-surface-error-100: var(--color-error-100); --color-surface-error-500: var(--color-error-500); --color-surface-error-600: var(--color-error-600); /* Borders */ --color-border-neutral-200: var(--color-neutral-200); --color-border-neutral-300: var(--color-neutral-300); --color-border-primary-500: var(--color-primary-500); --color-border-primary-700: var(--color-primary-700); --color-border-success-500: var(--color-success-500); --color-border-warning-500: var(--color-warning-500); --color-border-info-500: var(--color-info-500); --color-border-error-500: var(--color-error-500); /* Icons */ --color-icon-white: var(--color-white); --color-icon-neutral-900: var(--color-neutral-900); --color-icon-primary-700: var(--color-primary-700); --color-icon-primary-800: var(--color-primary-800); /* Spacing shorthands */ --padding-inline-2xs .. --padding-inline-xl --padding-block-2xs .. --padding-block-xl
Tip: Keep semantic tokens meaningful and channel‑agnostic (avoid brand names).
Component tokens
Defined in src/scss/tokens/_components.scss. Mapping
component anatomy to semantic tokens.
/* Alerts */ --color-alert-bg-info: var(--color-surface-info-100); --color-alert-border-info: var(--color-border-info-500); --color-alert-text-info: var(--color-text-info-600); /* Badges */ --color-badge-bg-success: var(--color-surface-success-100); --color-badge-text-success: var(--color-text-success-600); /* Buttons */ --color-btn-filled-bg: var(--color-surface-primary-700); --color-btn-filled-bg-hover: var(--color-surface-primary-800); --color-btn-outline-border: var(--color-border-primary-700); --color-btn-outline-text: var(--color-text-primary-700); /* Cards */ --color-card-bg: var(--color-surface-white); --color-card-border: var(--color-border-neutral-200); --color-card-title: var(--color-text-neutral-900); --color-card-subtitle: var(--color-text-neutral-600); /* Form elements */ --color-form-element-bg: var(--color-surface-white); --color-form-element-border: var(--color-border-neutral-300); --color-form-element-border-focus: var(--color-border-primary-500); --color-form-element-bg-checked: var(--color-surface-primary-700); --color-form-element-border-checked: var(--color-border-primary-700); --color-form-element-icon-checked: var(--color-icon-white); /* Table */ --color-table-bg: var(--color-surface-white); --color-table-cell-bg-hover: var(--color-surface-neutral-50); --color-table-cell-border: var(--color-border-neutral-200); /* Sizing, radii, paddings */ --radius-btn --radius-card --radius-form-element-input --padding-inline-btn --padding-block-btn
Components should only reference component tokens directly.
Usage example
/* SCSS (component) */
.an-btn.an-btn-filled {
color: var(--color-btn-filled-text);
background: var(--color-btn-filled-bg);
padding-inline: var(--padding-inline-btn);
padding-block: var(--padding-block-btn);
border-radius: var(--radius-btn);
}
.an-btn.an-btn-filled:hover {
background: var(--color-btn-filled-bg-hover);
}
/* Theming */
/* In _root.scss override scales for [data-theme="dark"]. For contrast fine-tuning, add adjustments under [data-theme="dark"] in _semantic.scss or _components.scss. */