Supper for shadcn/ui

Supper is a shadcn/ui theme built around a green primary color (#87a937) with violet accents (#5937a9). The light mode uses a neutral background (#ffffff). Dark mode keeps the green primary (#87a937) on a green-tinted background (#0c0f06).

Color palette

TokenLightDark
Background
#ffffffwhite
#0c0f06black
Foreground
#090b04black
#f8faf5whitesmoke
Card
#ffffffwhite
#0c0f06black
Card foreground
#090b04black
#f8faf5whitesmoke
Popover
#ffffffwhite
#0c0f06black
Popover foreground
#090b04black
#f8faf5whitesmoke
Primary
#87a937yellowgreen
#87a937yellowgreen
Primary foreground
#0c0f05black
#0c0f05black
Secondary
#5937a9rebeccapurple
#5937a9rebeccapurple
Secondary foreground
#ffffffwhite
#ffffffwhite
Muted
#dfdce5gainsboro
#1d1a23black
Muted foreground
#454446darkslategray
#bab9bbsilver
Accent
#5937a9rebeccapurple
#5937a9rebeccapurple
Accent foreground
#ffffffwhite
#ffffffwhite
Destructive
#9d1310darkred
#e92e2bcrimson
Destructive foreground
#fce4e3mistyrose
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#87a937yellowgreen
#87a937yellowgreen

Contrast

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

Light mode
Text on background19.78:1AAA
Text on card19.78:1AAA
Primary button7.17:1AAA
Secondary button8.23:1AAA
Muted text7.13:1AAA
Accent8.23:1AAA
Destructive6.85:1AA
Dark mode
Text on background18.40:1AAA
Text on card18.40:1AAA
Primary button7.17:1AAA
Secondary button8.23:1AAA
Muted text8.77:1AAA
Accent8.23:1AAA
Destructive4.30:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(1 0 180);
  --foreground: oklch(0.146 0.019 120.123);
  --muted: oklch(0.899 0.013 299.8);
  --muted-foreground: oklch(0.388 0.002 299.936);
  --popover: oklch(1 0 180);
  --popover-foreground: oklch(0.146 0.019 120.123);
  --card: oklch(1 0 180);
  --card-foreground: oklch(0.146 0.019 120.123);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.688 0.146 124.549);
  --primary-foreground: oklch(0.163 0.023 121.447);
  --secondary: oklch(0.445 0.173 291.556);
  --secondary-foreground: oklch(1 0 180);
  --accent: oklch(0.445 0.173 291.556);
  --accent-foreground: oklch(1 0 180);
  --destructive: oklch(0.445 0.171 28.355);
  --destructive-foreground: oklch(0.938 0.027 18.811);
  --ring: oklch(0.688 0.146 124.549);
  --chart-1: oklch(0.688 0.146 124.549);
  --chart-2: oklch(0.445 0.173 291.556);
  --chart-3: oklch(0.445 0.173 291.556);
  --chart-4: oklch(0.466 0.183 291.468);
  --chart-5: oklch(0.697 0.152 124.786);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.161 0.021 121.337);
  --foreground: oklch(0.982 0.007 120.152);
  --muted: oklch(0.225 0.018 298.675);
  --muted-foreground: oklch(0.788 0.002 299.996);
  --popover: oklch(0.161 0.021 121.337);
  --popover-foreground: oklch(0.982 0.007 120.152);
  --card: oklch(0.161 0.021 121.337);
  --card-foreground: oklch(0.982 0.007 120.152);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.688 0.146 124.549);
  --primary-foreground: oklch(0.163 0.023 121.447);
  --secondary: oklch(0.445 0.173 291.556);
  --secondary-foreground: oklch(1 0 180);
  --accent: oklch(0.445 0.173 291.556);
  --accent-foreground: oklch(1 0 180);
  --destructive: oklch(0.605 0.221 27.615);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.688 0.146 124.549);
  --chart-1: oklch(0.688 0.146 124.549);
  --chart-2: oklch(0.445 0.173 291.556);
  --chart-3: oklch(0.445 0.173 291.556);
  --chart-4: oklch(0.466 0.183 291.468);
  --chart-5: oklch(0.697 0.152 124.786);
}