Waterwheel for shadcn/ui

Waterwheel is a shadcn/ui theme built around a yellow primary color (#b29c2e) with muted yellow accents (#c9c6b5). The light mode uses a neutral background (#fdfdfc). Dark mode keeps the yellow primary (#b29c2e) on a neutral background (#000000).

Color palette

TokenLightDark
Background
#fdfdfcwhite
#000000black
Foreground
#000000black
#ffffffwhite
Card
#fdfdfcwhite
#000000black
Card foreground
#000000black
#ffffffwhite
Popover
#fdfdfcwhite
#000000black
Popover foreground
#000000black
#ffffffwhite
Primary
#b29c2eperu
#b29c2eperu
Primary foreground
#100e04black
#100e04black
Secondary
#d9d8d3lightgrey
#242219black
Secondary foreground
#424038darkslategray
#c5c1aasilver
Muted
#f3f3f1whitesmoke
#0e0d0cblack
Muted foreground
#474538darkslategray
#c7c4b8silver
Accent
#c9c6b5silver
#3a3622darkslategray
Accent foreground
#2c2a20darkslategray
#d6d1b8lightgrey
Destructive
#7b2a04saddlebrown
#f65b13orangered
Destructive foreground
#fcccb5peachpuff
#000000black
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#b29c2eperu
#b29c2eperu

Contrast

WCAG 2 contrast ratios between each background and its foreground color.

Light mode
Text on background20.63:1AAA
Text on card20.63:1AAA
Primary button7.10:1AAA
Secondary button7.30:1AAA
Muted text8.68:1AAA
Accent8.39:1AAA
Destructive6.63:1AA
Dark mode
Text on background21.00:1AAA
Text on card21.00:1AAA
Primary button7.10:1AAA
Secondary button8.74:1AAA
Muted text11.09:1AAA
Accent7.88:1AAA
Destructive6.43:1AA

CSS variables

Paste this into your globals.css to use Waterwheel in your shadcn/ui project.

:root {
  --radius: 0.5rem;
  --background: oklch(0.994 0.002 97.284);
  --foreground: oklch(0 0 0);
  --muted: oklch(0.964 0.002 97.287);
  --muted-foreground: oklch(0.388 0.021 97.899);
  --popover: oklch(0.994 0.002 97.284);
  --popover-foreground: oklch(0 0 0);
  --card: oklch(0.994 0.002 97.284);
  --card-foreground: oklch(0 0 0);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.694 0.127 97.445);
  --primary-foreground: oklch(0.164 0.022 99.634);
  --secondary: oklch(0.883 0.007 97.372);
  --secondary-foreground: oklch(0.372 0.014 97.718);
  --accent: oklch(0.825 0.024 97.622);
  --accent-foreground: oklch(0.285 0.018 97.986);
  --destructive: oklch(0.402 0.121 40.515);
  --destructive-foreground: oklch(0.881 0.063 46.176);
  --ring: oklch(0.694 0.127 97.445);
  --chart-1: oklch(0.694 0.127 97.445);
  --chart-2: oklch(0.883 0.007 97.372);
  --chart-3: oklch(0.825 0.024 97.622);
  --chart-4: oklch(0.905 0.006 97.348);
  --chart-5: oklch(0.702 0.131 97.277);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0 0 0);
  --foreground: oklch(1 0 180);
  --muted: oklch(0.16 0.003 97.511);
  --muted-foreground: oklch(0.82 0.018 97.539);
  --popover: oklch(0 0 0);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0 0 0);
  --card-foreground: oklch(1 0 180);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.694 0.127 97.445);
  --primary-foreground: oklch(0.164 0.022 99.634);
  --secondary: oklch(0.253 0.018 98.04);
  --secondary-foreground: oklch(0.807 0.031 97.739);
  --accent: oklch(0.332 0.034 98.25);
  --accent-foreground: oklch(0.858 0.034 97.753);
  --destructive: oklch(0.669 0.203 40.031);
  --destructive-foreground: oklch(0 0 0);
  --ring: oklch(0.694 0.127 97.445);
  --chart-1: oklch(0.694 0.127 97.445);
  --chart-2: oklch(0.253 0.018 98.04);
  --chart-3: oklch(0.332 0.034 98.25);
  --chart-4: oklch(0.288 0.021 98.073);
  --chart-5: oklch(0.702 0.131 97.277);
}