Wedge for shadcn/ui

Wedge is a shadcn/ui theme built around a muted cyan primary color (#b4c4ca) with muted light cyan accents (#d2d8da). The light mode uses a neutral background (#fbfdfd). Dark mode keeps the muted cyan primary (#b4c4ca) on a neutral background (#010304).

Color palette

TokenLightDark
Background
#fbfdfdwhite
#010304black
Foreground
#030d11black
#f6f8f9whitesmoke
Card
#f8fbfcghostwhite
#020608black
Card foreground
#020a0dblack
#f9fafbghostwhite
Popover
#fbfdfdwhite
#010304black
Popover foreground
#030d11black
#f6f8f9whitesmoke
Primary
#b4c4casilver
#b4c4casilver
Primary foreground
#20292ddarkslategray
#20292ddarkslategray
Secondary
#d2d8dalightgrey
#12191cblack
Secondary foreground
#374043darkslategray
#a0b7c0darkgray
Muted
#d9dcdegainsboro
#212526darkslategray
Muted foreground
#45484adarkslategray
#b5b9basilver
Accent
#d2d8dalightgrey
#12191cblack
Accent foreground
#374043darkslategray
#a0b7c0darkgray
Destructive
#9c1d11firebrick
#e73727crimson
Destructive foreground
#fce6e3mistyrose
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#b4c4casilver
#b4c4casilver

Contrast

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

Light mode
Text on background19.24:1AAA
Text on card19.17:1AAA
Primary button8.27:1AAA
Secondary button7.38:1AAA
Muted text6.70:1AA
Accent7.38:1AAA
Destructive6.76:1AA
Dark mode
Text on background19.38:1AAA
Text on card19.43:1AAA
Primary button8.27:1AAA
Secondary button8.48:1AAA
Muted text7.82:1AAA
Accent8.48:1AAA
Destructive4.21:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.993 0.002 221.319);
  --foreground: oklch(0.152 0.019 219.807);
  --muted: oklch(0.893 0.004 221.347);
  --muted-foreground: oklch(0.401 0.005 221.407);
  --popover: oklch(0.993 0.002 221.319);
  --popover-foreground: oklch(0.152 0.019 219.807);
  --card: oklch(0.986 0.003 221.333);
  --card-foreground: oklch(0.137 0.017 216.78);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.811 0.019 221.537);
  --primary-foreground: oklch(0.275 0.015 221.959);
  --secondary: oklch(0.879 0.007 221.376);
  --secondary-foreground: oklch(0.365 0.013 221.69);
  --accent: oklch(0.879 0.007 221.376);
  --accent-foreground: oklch(0.365 0.013 221.69);
  --destructive: oklch(0.45 0.164 29.961);
  --destructive-foreground: oklch(0.941 0.025 23.855);
  --ring: oklch(0.811 0.019 221.537);
  --chart-1: oklch(0.811 0.019 221.537);
  --chart-2: oklch(0.879 0.007 221.376);
  --chart-3: oklch(0.879 0.007 221.376);
  --chart-4: oklch(0.902 0.006 221.361);
  --chart-5: oklch(0.812 0.023 221.585);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.094 0.009 216.623);
  --foreground: oklch(0.978 0.003 221.331);
  --muted: oklch(0.261 0.006 221.524);
  --muted-foreground: oklch(0.782 0.004 221.347);
  --popover: oklch(0.094 0.009 216.623);
  --popover-foreground: oklch(0.978 0.003 221.331);
  --card: oklch(0.118 0.011 216.623);
  --card-foreground: oklch(0.985 0.002 221.322);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.811 0.019 221.537);
  --primary-foreground: oklch(0.275 0.015 221.959);
  --secondary: oklch(0.208 0.011 221.958);
  --secondary-foreground: oklch(0.766 0.028 221.701);
  --accent: oklch(0.208 0.011 221.958);
  --accent-foreground: oklch(0.766 0.028 221.701);
  --destructive: oklch(0.609 0.214 29.767);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.811 0.019 221.537);
  --chart-1: oklch(0.811 0.019 221.537);
  --chart-2: oklch(0.208 0.011 221.958);
  --chart-3: oklch(0.208 0.011 221.958);
  --chart-4: oklch(0.242 0.014 222.048);
  --chart-5: oklch(0.812 0.023 221.585);
}