Design system generator #47003A
Colours
Colour scale
Generated in OKLCH with your brand hue preserved; the source colour is pinned at its natural position.
Palette
Lock swatches to keep them while regenerating, or type a HEX value to override one manually.
Refinement
Locked colours won't be affected by refinement.
Layout primitives
Radius style
Type scale
Fonts
The quick brown fox — 48pt heading sample
Dark background
| Step | Size / LH | Copy |
|---|---|---|
| xs | 0.64rem / 1.45 | |
| sm | 0.8rem / 1.45 | |
| base | 1rem / 1.5 | |
| lg | 1.25rem / 1.4 | |
| xl | 1.563rem / 1.3 | |
| 2xl | 1.953rem / 1.15 | |
| 3xl | 2.441rem / 1.15 | |
| 4xl | 3.052rem / 1.15 | |
| 5xl | 3.815rem / 1.15 |
Spacing (4px base)
Radii
Elevation
Exports include these as CSS variables (--font-size-*, --space-*, --radius-*, --shadow-*) and native Tailwind v4 theme namespaces.
Placeholder content — your tokens, real interfaces
Overview
MRR
$48,210
+12.4% sampleActive customers
1,284
+3.1% sampleChurned
17
-0.8% sampleRecent invoices
| Customer | Amount | Status |
|---|---|---|
| Harbor & Co | $1,240.00 | Paid |
| Northwind Labs | $860.00 | Pending |
| Bluepeak GmbH | $2,410.00 | Paid |
| Summit Studio | $310.00 | Overdue |
| Ridgeway LLC | $980.00 | Draft |
Accessibility — WCAG 2.x
Light: all AA pairs pass · Dark: all AA pairs pass
| Pair | Preview | Ratio | AA normal | AA large | AAA normal | AAA large | Fix |
|---|---|---|---|---|---|---|---|
| Body text on page backgroundlight | 18.37:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Muted text on page backgroundlight | 8.18:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Body text on cardslight | 18.48:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Primary buttonlight | 15.80:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Secondary buttonlight | 5.71:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Accent elementlight | 10.23:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Success badgelight | 4.57:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Warning badgelight | 9.35:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Danger badgelight | 4.55:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Info badgelight | 4.50:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Body text on page backgrounddark | 16.67:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Muted text on page backgrounddark | 7.93:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Body text on cardsdark | 15.46:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Primary buttondark | 4.69:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Secondary buttondark | 10.43:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Accent elementdark | 4.76:1 | PASSPASS passes | PASSPASS passes | FAILFAIL fails | PASSPASS passes | ||
| Success badgedark | 9.13:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Warning badgedark | 10.91:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Danger badgedark | 8.13:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes | ||
| Info badgedark | 8.78:1 | PASSPASS passes | PASSPASS passes | PASSPASS passes | PASSPASS passes |
Thresholds: AA normal ≥ 4.5:1, AA large ≥ 3:1, AAA normal ≥ 7:1, AAA large ≥ 4.5:1. Fixes adjust the nearest accessible value in OKLCH, preserving hue.
Colour-blind preview
Simulated difference for each pair — under ~30 they are hard to tell apart.
| Pair | Protanopia | Deuteranopia | Tritanopia |
|---|---|---|---|
| Body text on page backgroundlight | diff 92 · 18.66:1Distinguishable | diff 92 · 18.40:1Distinguishable | diff 92 · 18.34:1Distinguishable |
| Muted text on page backgroundlight | diff 69 · 8.42:1Distinguishable | diff 68 · 8.16:1Distinguishable | diff 68 · 8.17:1Distinguishable |
| Body text on cardslight | diff 93 · 18.69:1Distinguishable | diff 92 · 18.55:1Distinguishable | diff 92 · 18.45:1Distinguishable |
| Primary buttonlight | diff 91 · 18.58:1Distinguishable | diff 89 · 17.58:1Distinguishable | diff 88 · 15.51:1Distinguishable |
| Secondary buttonlight | diff 47 · 5.90:1Distinguishable | diff 45 · 5.39:1Distinguishable | diff 45 · 5.73:1Distinguishable |
| Accent elementlight | diff 77 · 12.25:1Distinguishable | diff 74 · 10.87:1Distinguishable | diff 74 · 10.07:1Distinguishable |
| Success badgelight | diff 38 · 4.60:1Distinguishable | diff 33 · 3.77:1Distinguishable | diff 35 · 4.46:1Distinguishable |
| Warning badgelight | diff 56 · 8.36:1Distinguishable | diff 61 · 9.87:1Distinguishable | diff 64 · 8.52:1Distinguishable |
| Danger badgelight | diff 66 · 6.88:1Distinguishable | diff 61 · 4.99:1Distinguishable | diff 59 · 3.93:1Distinguishable |
| Info badgelight | diff 50 · 4.37:1Distinguishable | diff 59 · 5.93:1Distinguishable | diff 68 · 3.89:1Distinguishable |
| Body text on page backgrounddark | diff 89 · 16.60:1Distinguishable | diff 89 · 16.69:1Distinguishable | diff 89 · 16.64:1Distinguishable |
| Muted text on page backgrounddark | diff 60 · 7.86:1Distinguishable | diff 60 · 7.92:1Distinguishable | diff 61 · 7.93:1Distinguishable |
| Body text on cardsdark | diff 85 · 15.44:1Distinguishable | diff 85 · 15.48:1Distinguishable | diff 85 · 15.43:1Distinguishable |
| Primary buttondark | diff 44 · 4.06:1Distinguishable | diff 46 · 4.61:1Distinguishable | diff 49 · 4.78:1Distinguishable |
| Secondary buttondark | diff 73 · 10.45:1Distinguishable | diff 74 · 11.23:1Distinguishable | diff 76 · 10.35:1Distinguishable |
| Accent elementdark | diff 44 · 4.16:1Distinguishable | diff 46 · 4.71:1Distinguishable | diff 49 · 4.86:1Distinguishable |
| Success badgedark | diff 61 · 9.41:1Distinguishable | diff 57 · 8.17:1Distinguishable | diff 57 · 8.87:1Distinguishable |
| Warning badgedark | diff 61 · 9.85:1Distinguishable | diff 66 · 11.52:1Distinguishable | diff 70 · 10.09:1Distinguishable |
| Danger badgedark | diff 50 · 6.17:1Distinguishable | diff 57 · 7.96:1Distinguishable | diff 64 · 7.63:1Distinguishable |
| Info badgedark | diff 73 · 9.48:1Distinguishable | diff 68 · 7.68:1Distinguishable | diff 61 · 9.44:1Distinguishable |
Simulations use the Machado, Oliveira & Fernandes (2009) matrices. A passing WCAG ratio does not guarantee the pair stays distinguishable under a colour vision deficiency — these checks surface pairs that collapse even though the numbers look fine.
Semantic tokens
| Token | Light | Dark |
|---|---|---|
| --background | ||
| --background-subtle | ||
| --foreground | ||
| --foreground-muted | ||
| --foreground-subtle |
| Token | Light | Dark |
|---|---|---|
| --surface | ||
| --surface-raised | ||
| --surface-muted |
| Token | Light | Dark |
|---|---|---|
| --primary | ||
| --primary-hover | ||
| --primary-active | ||
| --primary-foreground | ||
| --secondary | ||
| --secondary-hover | ||
| --secondary-foreground |
| Token | Light | Dark |
|---|---|---|
| --accent | ||
| --accent-foreground |
| Token | Light | Dark |
|---|---|---|
| --border | ||
| --border-muted | ||
| --border-strong | ||
| --input | ||
| --input-border | ||
| --focus-ring |
| Token | Light | Dark |
|---|---|---|
| --success | ||
| --success-foreground | ||
| --warning | ||
| --warning-foreground | ||
| --danger | ||
| --danger-foreground | ||
| --info | ||
| --info-foreground |
AI Palette Suggestion
Describe your brand and get 5 smart palette options
Export
Web
Mobile / Desktop
Design Tools
Plain CSS custom properties with a .dark override block.
/*
Design system #47003A design tokens
Source: #47003a
Generated by ChromaBrew — free design system generator
*/
:root {
--background: #fffcfe;
--background-subtle: #faf1f7;
--foreground: #1b0e17;
--foreground-muted: #584a53;
--foreground-subtle: #7e727a;
--surface: #fffdfe;
--surface-raised: #ffffff;
--surface-muted: #fcf3f9;
--primary: #47003a;
--primary-hover: #38002d;
--primary-active: #290021;
--primary-foreground: #ffffff;
--secondary: #6e9b81;
--secondary-hover: #5d896f;
--secondary-foreground: #1d141a;
--accent: #6b265b;
--accent-foreground: #ffffff;
--border: #e4dbe1;
--border-muted: #ebe4e8;
--border-strong: #cabfc6;
--input: #ffffff;
--input-border: #e4dbe1;
--focus-ring: #47003a;
--success: #2b9338;
--success-foreground: #1d141a;
--warning: #ebb213;
--warning-foreground: #1d141a;
--danger: #c94c49;
--danger-foreground: #ffffff;
--info: #007cc2;
--info-foreground: #ffffff;
}
.dark {
--background: #0e090c;
--background-subtle: #150f13;
--foreground: #f3e9f0;
--foreground-muted: #aaa2a7;
--foreground-subtle: #797377;
--surface: #191317;
--surface-raised: #201a1e;
--surface-muted: #130e11;
--primary: #b0639b;
--primary-hover: #c072ab;
--primary-active: #a65a92;
--primary-foreground: #130c11;
--secondary: #103c26;
--secondary-hover: #214c35;
--secondary-foreground: #e1efe6;
--accent: #b0659b;
--accent-foreground: #130c11;
--border: #322c30;
--border-muted: #282326;
--border-strong: #4a4348;
--input: #191317;
--input-border: #322c30;
--focus-ring: #b0639b;
--success: #6bc670;
--success-foreground: #130c11;
--warning: #f0bb3b;
--warning-foreground: #130c11;
--danger: #ff847d;
--danger-foreground: #130c11;
--info: #59b6ff;
--info-foreground: #130c11;
}
:root {
--font-heading: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
--font-sans: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;
--font-size-xs: 0.64rem;
--font-size-xs-line-height: 1.45;
--font-size-xs-letter-spacing: 0em;
--font-size-sm: 0.8rem;
--font-size-sm-line-height: 1.45;
--font-size-sm-letter-spacing: 0em;
--font-size-base: 1rem;
--font-size-base-line-height: 1.5;
--font-size-base-letter-spacing: 0em;
--font-size-lg: 1.25rem;
--font-size-lg-line-height: 1.4;
--font-size-lg-letter-spacing: 0em;
--font-size-xl: 1.563rem;
--font-size-xl-line-height: 1.3;
--font-size-xl-letter-spacing: -0.01em;
--font-size-2xl: 1.953rem;
--font-size-2xl-line-height: 1.15;
--font-size-2xl-letter-spacing: -0.02em;
--font-size-3xl: 2.441rem;
--font-size-3xl-line-height: 1.15;
--font-size-3xl-letter-spacing: -0.02em;
--font-size-4xl: 3.052rem;
--font-size-4xl-line-height: 1.15;
--font-size-4xl-letter-spacing: -0.02em;
--font-size-5xl: 3.815rem;
--font-size-5xl-line-height: 1.15;
--font-size-5xl-letter-spacing: -0.02em;
--space-2: 0.125rem;
--space-4: 0.25rem;
--space-6: 0.375rem;
--space-8: 0.5rem;
--space-10: 0.625rem;
--space-12: 0.75rem;
--space-16: 1rem;
--space-20: 1.25rem;
--space-24: 1.5rem;
--space-32: 2rem;
--space-40: 2.5rem;
--space-48: 3rem;
--space-64: 4rem;
--space-80: 5rem;
--space-96: 6rem;
--radius-sm: 0.25rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-xl: 1rem;
--radius-full: 9999px;
--shadow-sm: 0 1px 2px 0 rgb(0 0 / 0.05);
--shadow-md: 0 2px 4px -1px rgb(0 0 / 0.06), 0 4px 10px -2px rgb(0 0 / 0.07);
--shadow-lg: 0 4px 8px -2px rgb(0 0 / 0.08), 0 12px 24px -6px rgb(0 0 / 0.1);
--shadow-xl: 0 8px 16px -4px rgb(0 0 / 0.1), 0 24px 48px -12px rgb(0 0 / 0.14);
}
From one color to a working design system
ChromaBrew builds every color decision your interface needs from a single seed color: a perceptual tonal scale, a harmony palette, semantic tokens, and matched light and dark themes. Everything runs in your browser — nothing is uploaded — and there is no account required.
1. Seed your colors
Start from one primary color and optionally add secondary and accent colors. Randomize, paste a HEX, or start from a real brand color.
2. Refine the system
Adjust the scale, palette strategy and size, radius, type ratio, and dark-theme background. Live previews update as you go, and the accessibility report grades every pair.
3. Export and ship
Copy tokens straight into your codebase in the format your stack expects, or share the URL so teammates open the same system.
What you get
- Eleven-step tonal scale (50-950) computed in OKLCH for perceptually even steps
- Harmony palette: complementary, analogous, triadic, split-complementary and more
- Semantic tokens mapped to real interface roles
- Light and dark themes generated together, never hand-inverted
- Live previews for SaaS, marketing, ecommerce and mobile layouts
- WCAG contrast report for every color pair, with one-click fixes
- AI palette suggestions you can apply or ignore
- Optional account only to save projects — the tool itself never asks you to sign up
Export where you work
Copy CSS variables or JSON for any codebase; generate Tailwind CSS, Bootstrap, shadcn/ui, MUI, Ant Design or Chakra themes; take tokens to React Native, Flutter, iOS and Android; or push variables straight into Figma, Penpot and W3C-compatible token files. One ZIP contains every format for your team.
Related free tools
- Color palette generatorSix harmony strategies from one color.
- Tailwind color generatorTurn a color into a Tailwind CSS theme.
- shadcn/ui theme generatorGenerate shadcn/ui CSS variables from a color.
- Design token generatorW3C-compatible tokens from any color.
- WCAG contrast checkerGrade any two colors against WCAG.
- Dark mode generatorA dark theme with real contrast, not just inverted.
Prefer a single-purpose tool? Browse the full list of free color tools, start from a real brand color, or read how to build a design system from one color step by step.
FAQ
- Is the design system generator free?
- Yes — completely. The full generator, every color control, WCAG accessibility checks and all core exports are free with no account required. An account is optional and only used if you want to save and revisit your projects.
- What does ChromaBrew generate from a single color?
- One primary color produces an eleven-step tonal scale (50-950), a harmony palette, semantic tokens, and matched light and dark themes — plus radius, typography scale and dark-background controls you can tune live.
- How does the share link work?
- The Share link button encodes your entire configuration in the URL. Anyone who opens the link sees the exact same design system — no account, no upload, no server storage involved.
- Are the contrast checks accurate?
- Every foreground/background pair is graded against WCAG contrast requirements in both light and dark themes. Where a pair fails, the Fix contrast control applies a compliant adjustment instantly.
- Which export formats are supported?
- Export as plain CSS variables, JSON, Tailwind CSS, Bootstrap, shadcn/ui, MUI, Ant Design or Chakra themes; React Native, Flutter, iOS (Swift) and Android tokens; Figma variables, W3C design tokens, Penpot, or a ZIP with every format.