Gracious for shadcn/ui

Gracious is a shadcn/ui theme built around a vivid deep green primary color (#051702) with vivid deep red accents (#170205). The light mode uses a neutral background (#ffffff). Dark mode keeps the vivid deep green primary (#051702) on a neutral background (#030703).

Color palette

TokenLightDark
Background
#ffffffwhite
#030703black
Foreground
#010401black
#fcfdfcwhite
Card
#fcfcfcsnow
#050b04black
Card foreground
#000000black
#ffffffwhite
Popover
#fcfcfcsnow
#050b04black
Popover foreground
#000000black
#ffffffwhite
Primary
#051702black
#051702black
Primary foreground
#29d312limegreen
#29d312limegreen
Secondary
#020517black
#020517black
Secondary foreground
#b9c0f9lightsteelblue
#b9c0f9lightsteelblue
Muted
#d4d6e8gainsboro
#17192bblack
Muted foreground
#3e4051darkslategray
#aeb0c1silver
Accent
#170205black
#170205black
Accent foreground
#f15b6csalmon
#f15b6csalmon
Destructive
#d8440echocolate
#dd450eorangered
Destructive foreground
#ffffffwhite
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#051702black
#051702black

Contrast

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

Light mode
Text on background20.60:1AAA
Text on card20.54:1AAA
Primary button9.19:1AAA
Secondary button11.56:1AAA
Muted text7.08:1AAA
Accent6.15:1AA
Destructive4.43:1AA Large
Dark mode
Text on background19.85:1AAA
Text on card19.87:1AAA
Primary button9.19:1AAA
Secondary button11.56:1AAA
Muted text8.06:1AAA
Accent6.15:1AA
Destructive4.26:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(1 0 180);
  --foreground: oklch(0.098 0.019 140.323);
  --muted: oklch(0.88 0.025 279.872);
  --muted-foreground: oklch(0.377 0.028 279.057);
  --popover: oklch(0.992 0 161.565);
  --popover-foreground: oklch(0 0 0);
  --card: oklch(0.992 0 161.565);
  --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.183 0.052 140.159);
  --primary-foreground: oklch(0.755 0.248 141.836);
  --secondary: oklch(0.123 0.045 268.524);
  --secondary-foreground: oklch(0.822 0.08 278.619);
  --accent: oklch(0.14 0.044 13.973);
  --accent-foreground: oklch(0.671 0.184 16.71);
  --destructive: oklch(0.593 0.193 36.892);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.183 0.052 140.159);
  --chart-1: oklch(0.183 0.052 140.159);
  --chart-2: oklch(0.123 0.045 268.524);
  --chart-3: oklch(0.14 0.044 13.973);
  --chart-4: oklch(0.151 0.063 268.733);
  --chart-5: oklch(0.184 0.053 140.088);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.122 0.018 140.757);
  --foreground: oklch(0.993 0.002 142.106);
  --muted: oklch(0.222 0.036 277.329);
  --muted-foreground: oklch(0.762 0.023 279.833);
  --popover: oklch(0.139 0.021 140.768);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0.139 0.021 140.768);
  --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.183 0.052 140.159);
  --primary-foreground: oklch(0.755 0.248 141.836);
  --secondary: oklch(0.123 0.045 268.524);
  --secondary-foreground: oklch(0.822 0.08 278.619);
  --accent: oklch(0.14 0.044 13.973);
  --accent-foreground: oklch(0.671 0.184 16.71);
  --destructive: oklch(0.603 0.196 36.864);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.183 0.052 140.159);
  --chart-1: oklch(0.183 0.052 140.159);
  --chart-2: oklch(0.123 0.045 268.524);
  --chart-3: oklch(0.14 0.044 13.973);
  --chart-4: oklch(0.151 0.063 268.733);
  --chart-5: oklch(0.184 0.053 140.088);
}