Leafy for shadcn/ui

Leafy is a shadcn/ui theme built around a near-black primary color (#000000) with near-black accents (#000000). The light mode uses a neutral background (#fcf7f7). Dark mode keeps the near-black primary (#000000) on a red-tinted background (#0f0505).

Color palette

TokenLightDark
Background
#fcf7f7snow
#0f0505black
Foreground
#040101black
#fbf9f9snow
Card
#fbf4f4lavenderblush
#130707black
Card foreground
#000000black
#fdfcfcsnow
Popover
#fcf7f7snow
#0f0505black
Popover foreground
#040101black
#fbf9f9snow
Primary
#000000black
#000000black
Primary foreground
#999999darkgray
#999999darkgray
Secondary
#000000black
#000000black
Secondary foreground
#999999darkgray
#999999darkgray
Muted
#efe1e1mistyrose
#1e1010black
Muted foreground
#4e4141darkslategray
#beb1b1silver
Accent
#000000black
#000000black
Accent foreground
#999999darkgray
#999999darkgray
Destructive
#642602maroon
#fb5f04orangered
Destructive foreground
#fdbf9bnavajowhite
#000000black
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#000000black
#000000black

Contrast

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

Light mode
Text on background19.66:1AAA
Text on card19.30:1AAA
Primary button7.37:1AAA
Secondary button7.37:1AAA
Muted text7.65:1AAA
Accent7.37:1AAA
Destructive7.18:1AAA
Dark mode
Text on background19.13:1AAA
Text on card19.35:1AAA
Primary button7.37:1AAA
Secondary button7.37:1AAA
Muted text8.90:1AAA
Accent7.37:1AAA
Destructive6.72:1AA

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.981 0.005 17.246);
  --foreground: oklch(0.083 0.012 20.039);
  --muted: oklch(0.921 0.016 17.45);
  --muted-foreground: oklch(0.389 0.018 17.944);
  --popover: oklch(0.981 0.005 17.246);
  --popover-foreground: oklch(0.083 0.012 20.039);
  --card: oklch(0.972 0.008 17.292);
  --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 0 0);
  --primary-foreground: oklch(0.683 0 180);
  --secondary: oklch(0 0 0);
  --secondary-foreground: oklch(0.683 0 180);
  --accent: oklch(0 0 0);
  --accent-foreground: oklch(0.683 0 180);
  --destructive: oklch(0.355 0.1 44.745);
  --destructive-foreground: oklch(0.853 0.087 51.254);
  --ring: oklch(0 0 0);
  --chart-1: oklch(0 0 0);
  --chart-2: oklch(0 0 0);
  --chart-3: oklch(0 0 0);
  --chart-4: oklch(0.132 0 165.964);
  --chart-5: oklch(0 0 0);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.134 0.019 19.941);
  --foreground: oklch(0.983 0.002 17.195);
  --muted: oklch(0.192 0.025 19.619);
  --muted-foreground: oklch(0.772 0.015 17.477);
  --popover: oklch(0.134 0.019 19.941);
  --popover-foreground: oklch(0.983 0.002 17.195);
  --card: oklch(0.146 0.023 20.162);
  --card-foreground: oklch(0.992 0.001 17.176);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0 0 0);
  --primary-foreground: oklch(0.683 0 180);
  --secondary: oklch(0 0 0);
  --secondary-foreground: oklch(0.683 0 180);
  --accent: oklch(0 0 0);
  --accent-foreground: oklch(0.683 0 180);
  --destructive: oklch(0.681 0.206 41.519);
  --destructive-foreground: oklch(0 0 0);
  --ring: oklch(0 0 0);
  --chart-1: oklch(0 0 0);
  --chart-2: oklch(0 0 0);
  --chart-3: oklch(0 0 0);
  --chart-4: oklch(0.132 0 165.964);
  --chart-5: oklch(0 0 0);
}