Skip to main content

Design Token Platform

Generate 11-step color scales and semantic tokens from your palette. Export to CSS, Tailwind, JSON, Style Dictionary, or Figma Tokens.

Palette

Accessibility Score

8/8
100% pass WCAG AA
Text on Background
14.04:1AAA
Secondary Text on Background
5.92:1AA
Text on Subtle Background
12.68:1AAA
Secondary on Subtle
5.35:1AA
Action Text on Action
8.21:1AAA
Success Text on Background
7.04:1AAA
Warning Text on Background
6.21:1AA
Error Text on Background
8.1:1AAA

Token Preview

primary

secondary

accent

neutral

success

warning

error

Naming:
CSS Variables
/* ============================================================
   Design Tokens — CSS Custom Properties
   Generated by State of Colors
   ============================================================ */

:root {
  /* Primitive Tokens */
  /* Primary */
  --color-primary-50: #eff1ff;
  --color-primary-100: #dee4fe;
  --color-primary-200: #bfc8fc;
  --color-primary-300: #9da9f8;
  --color-primary-400: #7e88f2;
  --color-primary-500: #4f46e5;
  --color-primary-600: #403cb8;
  --color-primary-700: #32318c;
  --color-primary-800: #242663;
  --color-primary-900: #191c41;
  --color-primary-950: #111325;

  /* Secondary */
  --color-secondary-50: #f6f0ff;
  --color-secondary-100: #ece2ff;
  --color-secondary-200: #dac4fd;
  --color-secondary-300: #c6a3fa;
  --color-secondary-400: #b380f5;
  --color-secondary-500: #9333ea;
  --color-secondary-600: #772ebc;
  --color-secondary-700: #5b288f;
  --color-secondary-800: #412165;
  --color-secondary-900: #2c1942;
  --color-secondary-950: #1a1226;

  /* Accent */
  --color-accent-50: #eff6f9;
  --color-accent-100: #deedf3;
  --color-accent-200: #bddce7;
  --color-accent-300: #98c8d9;
  --color-accent-400: #71b4cb;
  --color-accent-500: #0891b2;
  --color-accent-600: #15758f;
  --color-accent-700: #185b6e;
  --color-accent-800: #17414e;
  --color-accent-900: #142c34;
  --color-accent-950: #0f1a1e;

  /* Neutral */
  --color-neutral-50: #f2f3f5;
  --color-neutral-100: #e5e8ec;
  --color-neutral-200: #cbd1d9;
  --color-neutral-300: #aeb7c4;
  --color-neutral-400: #939eaf;
  --color-neutral-500: #64748b;
  --color-neutral-600: #525e70;
  --color-neutral-700: #404957;
  --color-neutral-800: #2f353f;
  --color-neutral-900: #20242a;
  --color-neutral-950: #151719;

  /* Success */
  --color-success-50: #eff7f2;
  --color-success-100: #deeee6;
  --color-success-200: #bdddcd;
  --color-success-300: #98cbb2;
  --color-success-400: #71b897;
  --color-success-500: #059669;
  --color-success-600: #147956;
  --color-success-700: #185d43;
  --color-success-800: #174331;
  --color-success-900: #142d22;
  --color-success-950: #0f1b15;

  /* Warning */
  --color-warning-50: #fdf4ee;
  --color-warning-100: #fbeadd;
  --color-warning-200: #f6d4bc;
  --color-warning-300: #f0bc96;
  --color-warning-400: #e8a46e;
  --color-warning-500: #d97706;
  --color-warning-600: #ae6113;
  --color-warning-700: #854c17;
  --color-warning-800: #5e3716;
  --color-warning-900: #3e2613;
  --color-warning-950: #23180f;

  /* Error */
  --color-error-50: #fff0f0;
  --color-error-100: #ffe0e0;
  --color-error-200: #ffc1c2;
  --color-error-300: #fb9ea1;
  --color-error-400: #f47981;
  --color-error-500: #e11d48;
  --color-error-600: #b5203c;
  --color-error-700: #8b1f30;
  --color-error-800: #631c24;
  --color-error-900: #41161a;
  --color-error-950: #261011;


  /* Semantic Tokens */
  --bg-default: #f2f3f5;
  --bg-subtle: #e5e8ec;
  --bg-muted: #cbd1d9;
  --text-primary: #20242a;
  --text-secondary: #525e70;
  --text-disabled: #939eaf;
  --border-default: #cbd1d9;
  --border-strong: #939eaf;
  --action-bg: #403cb8;
  --action-text: #ffffff;
  --action-hover: #32318c;
  --success-surface: #deeee6;
  --success-text: #185d43;
  --warning-surface: #fbeadd;
  --warning-text: #854c17;
  --error-surface: #ffe0e0;
  --error-text: #8b1f30;
  --focus-ring: #4f46e5;
}

/* Dark Mode */
.dark {
  --bg-default: #151719;
  --bg-subtle: #20242a;
  --bg-muted: #2f353f;
  --text-primary: #f2f3f5;
  --text-secondary: #aeb7c4;
  --text-disabled: #525e70;
  --border-default: #2f353f;
  --border-strong: #525e70;
  --action-bg: #4f46e5;
  --action-text: #ffffff;
  --action-hover: #7e88f2;
  --success-surface: #0f1b15;
  --success-text: #98cbb2;
  --warning-surface: #23180f;
  --warning-text: #f0bc96;
  --error-surface: #261011;
  --error-text: #fb9ea1;
  --focus-ring: #7e88f2;
}