Archer for shadcn/ui

Archer is a shadcn/ui theme built around a near-white primary color (#f7f8fd) with muted light blue accents (#cbcedc). The light mode uses a neutral background (#fbfcfe). Dark mode keeps the near-white primary (#f7f8fd) on a neutral background (#010204).

Color palette

TokenLightDark
Background
#fbfcfewhite
#010204black
Foreground
#060814black
#fcfcfdwhite
Card
#fbfcfewhite
#010204black
Card foreground
#060814black
#fcfcfdwhite
Popover
#fbfcfewhite
#010204black
Popover foreground
#060814black
#fcfcfdwhite
Primary
#f7f8fdghostwhite
#f7f8fdghostwhite
Primary foreground
#2c3f96darkslateblue
#2c3f96darkslateblue
Secondary
#cbcedclightgrey
#181b25black
Secondary foreground
#303446darkslategray
#a9afc6silver
Muted
#dee0edlavender
#121421black
Muted foreground
#414558darkslategray
#a7abbedarkgray
Accent
#cbcedclightgrey
#181b25black
Accent foreground
#303446darkslategray
#a9afc6silver
Destructive
#923401saddlebrown
#fd610dorangered
Destructive foreground
#ffffffwhite
#000000black
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#f7f8fdghostwhite
#f7f8fdghostwhite

Contrast

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

Light mode
Text on background19.40:1AAA
Text on card19.40:1AAA
Primary button8.77:1AAA
Secondary button7.88:1AAA
Muted text7.23:1AAA
Accent7.88:1AAA
Destructive7.70:1AAA
Dark mode
Text on background20.26:1AAA
Text on card20.26:1AAA
Primary button8.77:1AAA
Secondary button7.89:1AAA
Muted text8.00:1AAA
Accent7.89:1AAA
Destructive6.86:1AA

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.99 0.003 276.131);
  --foreground: oklch(0.139 0.026 270.894);
  --muted: oklch(0.91 0.018 275.904);
  --muted-foreground: oklch(0.395 0.032 274.952);
  --popover: oklch(0.99 0.003 276.131);
  --popover-foreground: oklch(0.139 0.026 270.894);
  --card: oklch(0.99 0.003 276.131);
  --card-foreground: oklch(0.139 0.026 270.894);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.98 0.006 276.083);
  --primary-foreground: oklch(0.407 0.144 269.348);
  --secondary: oklch(0.854 0.019 275.869);
  --secondary-foreground: oklch(0.328 0.033 274.633);
  --accent: oklch(0.854 0.019 275.869);
  --accent-foreground: oklch(0.328 0.033 274.633);
  --destructive: oklch(0.456 0.137 41.731);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.98 0.006 276.083);
  --chart-1: oklch(0.98 0.006 276.083);
  --chart-2: oklch(0.854 0.019 275.869);
  --chart-3: oklch(0.854 0.019 275.869);
  --chart-4: oklch(0.881 0.015 275.932);
  --chart-5: oklch(0.98 0.007 276.079);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.082 0.012 270.304);
  --foreground: oklch(0.991 0.002 276.143);
  --muted: oklch(0.197 0.026 274.022);
  --muted-foreground: oklch(0.745 0.027 275.659);
  --popover: oklch(0.082 0.012 270.304);
  --popover-foreground: oklch(0.991 0.002 276.143);
  --card: oklch(0.082 0.012 270.304);
  --card-foreground: oklch(0.991 0.002 276.143);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.98 0.006 276.083);
  --primary-foreground: oklch(0.407 0.144 269.348);
  --secondary: oklch(0.223 0.02 274.83);
  --secondary-foreground: oklch(0.756 0.034 275.537);
  --accent: oklch(0.223 0.02 274.83);
  --accent-foreground: oklch(0.756 0.034 275.537);
  --destructive: oklch(0.686 0.205 41.488);
  --destructive-foreground: oklch(0 0 0);
  --ring: oklch(0.98 0.006 276.083);
  --chart-1: oklch(0.98 0.006 276.083);
  --chart-2: oklch(0.223 0.02 274.83);
  --chart-3: oklch(0.223 0.02 274.83);
  --chart-4: oklch(0.252 0.024 274.719);
  --chart-5: oklch(0.98 0.007 276.079);
}