Hull for shadcn/ui

Hull is a shadcn/ui theme built around a vivid deep green primary color (#3e6f02) with vivid deep green accents (#076f02). The light mode uses a neutral background (#ffffff). Dark mode keeps the vivid deep green primary (#3e6f02) on a green-tinted background (#0b0f05).

Color palette

TokenLightDark
Background
#ffffffwhite
#0b0f05black
Foreground
#0b1202black
#fafcf8snow
Card
#fcfcfcsnow
#0d1306black
Card foreground
#080e02black
#fdfdfcwhite
Popover
#ffffffwhite
#0b0f05black
Popover foreground
#0b1202black
#fafcf8snow
Primary
#3e6f02darkolivegreen
#3e6f02darkolivegreen
Primary foreground
#ffffffwhite
#ffffffwhite
Secondary
#6f6902olive
#6f6902olive
Secondary foreground
#ffffffwhite
#ffffffwhite
Muted
#ebeadbbeige
#242314black
Muted foreground
#6c6a51dimgray
#aead93darkgray
Accent
#076f02darkgreen
#076f02darkgreen
Accent foreground
#ffffffwhite
#ffffffwhite
Destructive
#b63b07firebrick
#e24a08orangered
Destructive foreground
#ffffffwhite
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#3e6f02darkolivegreen
#3e6f02darkolivegreen

Contrast

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

Light mode
Text on background19.06:1AAA
Text on card19.13:1AAA
Primary button6.07:1AA
Secondary button5.68:1AA
Muted text4.54:1AA
Accent6.43:1AA
Destructive5.79:1AA
Dark mode
Text on background18.73:1AAA
Text on card18.51:1AAA
Primary button6.07:1AA
Secondary button5.68:1AA
Muted text6.91:1AA
Accent6.43:1AA
Destructive4.02:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(1 0 180);
  --foreground: oklch(0.17 0.037 127.277);
  --muted: oklch(0.934 0.021 104.342);
  --muted-foreground: oklch(0.519 0.038 105.127);
  --popover: oklch(1 0 180);
  --popover-foreground: oklch(0.17 0.037 127.277);
  --card: oklch(0.992 0 161.565);
  --card-foreground: oklch(0.151 0.031 125.787);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.486 0.137 133.242);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.51 0.108 106.069);
  --secondary-foreground: oklch(1 0 180);
  --accent: oklch(0.469 0.157 142.207);
  --accent-foreground: oklch(1 0 180);
  --destructive: oklch(0.526 0.167 38.418);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.486 0.137 133.242);
  --chart-1: oklch(0.486 0.137 133.242);
  --chart-2: oklch(0.51 0.108 106.069);
  --chart-3: oklch(0.469 0.157 142.207);
  --chart-4: oklch(0.558 0.119 106.02);
  --chart-5: oklch(0.491 0.139 133.409);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.161 0.023 127.049);
  --foreground: oklch(0.988 0.005 126.491);
  --muted: oklch(0.254 0.027 105.591);
  --muted-foreground: oklch(0.74 0.035 104.746);
  --popover: oklch(0.161 0.023 127.049);
  --popover-foreground: oklch(0.988 0.005 126.491);
  --card: oklch(0.177 0.027 128.05);
  --card-foreground: oklch(0.994 0.002 126.46);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.486 0.137 133.242);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.51 0.108 106.069);
  --secondary-foreground: oklch(1 0 180);
  --accent: oklch(0.469 0.157 142.207);
  --accent-foreground: oklch(1 0 180);
  --destructive: oklch(0.617 0.199 38.012);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.486 0.137 133.242);
  --chart-1: oklch(0.486 0.137 133.242);
  --chart-2: oklch(0.51 0.108 106.069);
  --chart-3: oklch(0.469 0.157 142.207);
  --chart-4: oklch(0.558 0.119 106.02);
  --chart-5: oklch(0.491 0.139 133.409);
}