Skip to content

Palette:

Seed: <input> · Mood: <adjective list> · Target: <framework>

Why this palette

<2–4 sentences. What problem this solves, what brand position it claims, what tradeoffs were accepted.>

Tokens

Brand ramps

Step Primary Accent Neutral
50 #... #... #...
100 #... #... #...
...
950 #... #... #...

Semantic aliases — light

Token Value Notes
--color-primary-default #... hits 4.5:1 on white
--color-primary-hover #...
--color-primary-active #...
--color-primary-subtle #... background
--color-on-primary #... text/icon on primary
--color-bg-default #...
--color-bg-elevated #...
--color-text-primary #...
--color-text-secondary #...
--color-text-disabled #...
--color-border-default #...
--color-success #...
--color-warning #...
--color-error #...
--color-info #...

Semantic aliases — dark

Contrast matrix

Pair Ratio AA AAA
text-primary on bg-default 13.8:1
primary-default on white 4.6:1
primary-default on bg-default 4.5:1
text-secondary on bg-default 7.1:1
border-default on bg-default 3.0:1 ✓ (UI)
...

Output: Tailwind v4

@theme {
  --color-primary-50:  #...;
  --color-primary-100: #...;
  /* ... */
}

Output: shadcn-ui (CSS vars)

:root {
  --primary: #...;
  --primary-foreground: #...;
  /* ... */
}

.dark {
  /* ... */
}

Output: Style Dictionary (JSON)

{
  "color": {
    "primary": {
      "50":  { "value": "#..." },
      "100": { "value": "#..." }
    }
  }
}

Use guidance

  • Reach for primary for:
  • Reach for accent for:
  • Reach for neutral for:
  • Don't:

Cited sources