Force for shadcn/ui

Force is a shadcn/ui theme built around a vivid pink primary color (#ef1561) with muted light pink accents (#d1c7cb). The light mode uses a neutral background (#fdfcfc). Dark mode keeps the vivid pink primary (#ef1561) on a neutral background (#070305).

Color palette

TokenLightDark
Background
#fdfcfcsnow
#070305black
Foreground
#110308black
#faf5f7whitesmoke
Card
#fdfcfcsnow
#070305black
Card foreground
#110308black
#faf5f7whitesmoke
Popover
#fdfcfcsnow
#070305black
Popover foreground
#110308black
#faf5f7whitesmoke
Primary
#ef1561crimson
#ef1561crimson
Primary foreground
#ffffffwhite
#ffffffwhite
Secondary
#e1e0e0gainsboro
#161214black
Secondary foreground
#484747darkslategray
#b6a5abdarkgray
Muted
#e9dde1gainsboro
#22161ablack
Muted foreground
#585556dimgray
#aaa7a8darkgray
Accent
#d1c7cblightgrey
#2e1f24darkslategray
Accent foreground
#382e32darkslategray
#cbb3bcsilver
Destructive
#5c150amaroon
#e84930tomato
Destructive foreground
#f5aea3lightpink
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#ef1561crimson
#ef1561crimson

Contrast

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

Light mode
Text on background19.66:1AAA
Text on card19.66:1AAA
Primary button4.24:1AA Large
Secondary button7.03:1AAA
Muted text5.57:1AA
Accent7.95:1AAA
Destructive7.32:1AAA
Dark mode
Text on background18.98:1AAA
Text on card18.98:1AAA
Primary button4.24:1AA Large
Secondary button7.90:1AAA
Muted text7.34:1AAA
Accent8.02:1AAA
Destructive3.86:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.991 0.002 353.636);
  --foreground: oklch(0.132 0.033 355.309);
  --muted: oklch(0.908 0.015 354.035);
  --muted-foreground: oklch(0.453 0.005 353.883);
  --popover: oklch(0.991 0.002 353.636);
  --popover-foreground: oklch(0.132 0.033 355.309);
  --card: oklch(0.991 0.002 353.636);
  --card-foreground: oklch(0.132 0.033 355.309);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.613 0.238 10.45);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.908 0.001 353.597);
  --secondary-foreground: oklch(0.398 0.002 353.724);
  --accent: oklch(0.839 0.011 353.952);
  --accent-foreground: oklch(0.314 0.014 354.852);
  --destructive: oklch(0.317 0.104 31.641);
  --destructive-foreground: oklch(0.815 0.085 28.823);
  --ring: oklch(0.613 0.238 10.45);
  --chart-1: oklch(0.613 0.238 10.45);
  --chart-2: oklch(0.908 0.001 353.597);
  --chart-3: oklch(0.839 0.011 353.952);
  --chart-4: oklch(0.931 0.001 353.591);
  --chart-5: oklch(0.618 0.242 11.149);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.11 0.011 353.36);
  --foreground: oklch(0.974 0.006 353.747);
  --muted: oklch(0.217 0.021 356.267);
  --muted-foreground: oklch(0.73 0.004 353.745);
  --popover: oklch(0.11 0.011 353.36);
  --popover-foreground: oklch(0.974 0.006 353.747);
  --card: oklch(0.11 0.011 353.36);
  --card-foreground: oklch(0.974 0.006 353.747);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.613 0.238 10.45);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.189 0.007 354.645);
  --secondary-foreground: oklch(0.738 0.02 354.359);
  --accent: oklch(0.259 0.024 356.122);
  --accent-foreground: oklch(0.79 0.03 354.641);
  --destructive: oklch(0.628 0.2 31.582);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.613 0.238 10.45);
  --chart-1: oklch(0.613 0.238 10.45);
  --chart-2: oklch(0.189 0.007 354.645);
  --chart-3: oklch(0.259 0.024 356.122);
  --chart-4: oklch(0.222 0.01 354.781);
  --chart-5: oklch(0.618 0.242 11.149);
}