St. Patrick Koi for shadcn/ui

St. Patrick Koi is a shadcn/ui theme built around a green primary color (#288b4d) with teal accents (#1c9b7c). The light mode uses a neutral background (#ffffff). Dark mode switches to a vivid purple primary (#fe06c4) on a neutral background (#070306).

Color palette

TokenLightDark
Background
#ffffffwhite
#070306black
Foreground
#11040eblack
#faf5f9whitesmoke
Card
#fcfcfcsnow
#0a0509black
Card foreground
#0d030ablack
#fcf8fbsnow
Popover
#fcfcfcsnow
#0a0509black
Popover foreground
#0d030ablack
#fcf8fbsnow
Primary
#288b4dseagreen
#fe06c4deeppink
Primary foreground
#ffffffwhite
#ffffffwhite
Secondary
#176429forestgreen
#06fe40springgreen
Secondary foreground
#fbfbfbsnow
#00380ddarkgreen
Muted
#ffffffwhite
#1f2e22darkslategray
Muted foreground
#576059dimgray
#9fa8a1darkgray
Accent
#1c9b7cdarkcyan
#06fe40springgreen
Accent foreground
#00380ddarkgreen
#00380ddarkgreen
Destructive
#d4331efirebrick
#fb2509orangered
Destructive foreground
#ffe9e6mistyrose
#ffffffwhite
Border
#eae6e9lavender
#272026darkslategray
Input
#eae6e9lavender
#272026darkslategray
Ring
#27b18flightseagreen
#fe06c4deeppink

Contrast

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

Light mode
Text on background20.04:1AAA
Text on card19.86:1AAA
Primary button4.28:1AA Large
Secondary button7.01:1AAA
Muted text6.51:1AA
Accent3.83:1AA Large
Destructive4.21:1AA Large
Dark mode
Text on background18.99:1AAA
Text on card19.20:1AAA
Primary button3.48:1AA Large
Secondary button9.68:1AAA
Muted text5.84:1AA
Accent9.68:1AAA
Destructive3.90:1AA Large

CSS variables

Paste this into your globals.css to use St. Patrick Koi in your shadcn/ui project.

:root {
  --radius: 0.5rem;
  --background: oklch(1 0 180);
  --foreground: oklch(0.136 0.036 335.746);
  --muted: oklch(1 0 180);
  --muted-foreground: oklch(0.48 0.016 152.687);
  --popover: oklch(0.992 0 161.565);
  --popover-foreground: oklch(0.122 0.031 334.671);
  --card: oklch(0.992 0 161.565);
  --card-foreground: oklch(0.122 0.031 334.671);
  --border: oklch(0.929 0.007 333.359);
  --input: oklch(0.929 0.007 333.359);
  --primary: oklch(0.566 0.131 151.819);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.443 0.118 147.138);
  --secondary-foreground: oklch(0.988 0 171.87);
  --accent: oklch(0.617 0.115 170.954);
  --accent-foreground: oklch(0.296 0.089 146.422);
  --destructive: oklch(0.571 0.2 31.032);
  --destructive-foreground: oklch(0.95 0.024 26.628);
  --ring: oklch(0.68 0.123 171.541);
  --chart-1: oklch(0.566 0.131 151.819);
  --chart-2: oklch(0.443 0.118 147.138);
  --chart-3: oklch(0.617 0.115 170.954);
  --chart-4: oklch(0.481 0.129 147.032);
  --chart-5: oklch(0.572 0.136 151.462);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.111 0.013 333.695);
  --foreground: oklch(0.974 0.008 333.37);
  --muted: oklch(0.283 0.03 151.369);
  --muted-foreground: oklch(0.721 0.014 152.911);
  --popover: oklch(0.127 0.015 333.695);
  --popover-foreground: oklch(0.983 0.005 333.326);
  --card: oklch(0.127 0.015 333.695);
  --card-foreground: oklch(0.983 0.005 333.326);
  --border: oklch(0.255 0.015 334.143);
  --input: oklch(0.255 0.015 334.143);
  --primary: oklch(0.67 0.286 342.235);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.866 0.277 144.373);
  --secondary-foreground: oklch(0.296 0.089 146.422);
  --accent: oklch(0.866 0.277 144.373);
  --accent-foreground: oklch(0.296 0.089 146.422);
  --destructive: oklch(0.632 0.244 30.682);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.67 0.286 342.235);
  --chart-1: oklch(0.67 0.286 342.235);
  --chart-2: oklch(0.866 0.277 144.373);
  --chart-3: oklch(0.866 0.277 144.373);
  --chart-4: oklch(0.867 0.269 144.983);
  --chart-5: oklch(0.676 0.29 342.462);
}