Generate feedback colors (success, warning, error, and info) for shadcn/ui

Go to generator

10000+Themes for shadcn/ui

Dual for shadcn/ui

Dual is a shadcn/ui theme built around a vivid light blue primary color (#add8fa) with vivid light orange accents (#fad0ad). The light mode uses a neutral background (#fbfdfe). Dark mode keeps the vivid light blue primary (#add8fa) on a neutral background (#020303).

Color palette

TokenLightDark
Background
#fbfdfewhite
#020303black
Foreground
#020508black
#ffffffwhite
Card
#f7fafdghostwhite
#040507black
Card foreground
#010304black
#ffffffwhite
Popover
#fbfdfewhite
#020303black
Popover foreground
#020508black
#ffffffwhite
Primary
#add8falightblue
#add8falightblue
Primary foreground
#06406fmidnightblue
#06406fmidnightblue
Secondary
#fad0adnavajowhite
#fad0adnavajowhite
Secondary foreground
#6f3506saddlebrown
#6f3506saddlebrown
Muted
#f2efedwhitesmoke
#120f0dblack
Muted foreground
#514c48darkslategray
#b7b2aedarkgray
Accent
#fad0adnavajowhite
#fad0adnavajowhite
Accent foreground
#6f3506saddlebrown
#6f3506saddlebrown
Destructive
#661100maroon
#f52900orangered
Destructive foreground
#ffaa99lightsalmon
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#add8falightblue
#add8falightblue

Contrast

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

Light mode
Text on background19.97:1AAA
Text on card19.75:1AAA
Primary button7.07:1AAA
Secondary button6.70:1AA
Muted text7.43:1AAA
Accent6.70:1AA
Destructive6.96:1AA
Dark mode
Text on background20.68:1AAA
Text on card20.38:1AAA
Primary button7.07:1AAA
Secondary button6.70:1AA
Muted text9.08:1AAA
Accent6.70:1AA
Destructive4.04:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.992 0.002 242.227);
  --foreground: oklch(0.114 0.012 234.782);
  --muted: oklch(0.955 0.005 62.129);
  --muted-foreground: oklch(0.42 0.01 61.889);
  --popover: oklch(0.992 0.002 242.227);
  --popover-foreground: oklch(0.114 0.012 234.782);
  --card: oklch(0.984 0.005 242.26);
  --card-foreground: oklch(0.09 0.009 234.782);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.862 0.066 243.273);
  --primary-foreground: oklch(0.364 0.097 249.802);
  --secondary: oklch(0.885 0.066 61.083);
  --secondary-foreground: oklch(0.399 0.097 52.51);
  --accent: oklch(0.885 0.066 61.083);
  --accent-foreground: oklch(0.399 0.097 52.51);
  --destructive: oklch(0.332 0.121 33.565);
  --destructive-foreground: oklch(0.817 0.104 31.816);
  --ring: oklch(0.862 0.066 243.273);
  --chart-1: oklch(0.862 0.066 243.273);
  --chart-2: oklch(0.885 0.066 61.083);
  --chart-3: oklch(0.885 0.066 61.083);
  --chart-4: oklch(0.905 0.054 61.335);
  --chart-5: oklch(0.862 0.068 243.314);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.091 0.005 238.084);
  --foreground: oklch(1 0 180);
  --muted: oklch(0.171 0.007 61.618);
  --muted-foreground: oklch(0.767 0.008 62.051);
  --popover: oklch(0.091 0.005 238.084);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0.115 0.006 238.084);
  --card-foreground: oklch(1 0 180);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.862 0.066 243.273);
  --primary-foreground: oklch(0.364 0.097 249.802);
  --secondary: oklch(0.885 0.066 61.083);
  --secondary-foreground: oklch(0.399 0.097 52.51);
  --accent: oklch(0.885 0.066 61.083);
  --accent-foreground: oklch(0.399 0.097 52.51);
  --destructive: oklch(0.622 0.238 31.684);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.862 0.066 243.273);
  --chart-1: oklch(0.862 0.066 243.273);
  --chart-2: oklch(0.885 0.066 61.083);
  --chart-3: oklch(0.885 0.066 61.083);
  --chart-4: oklch(0.905 0.054 61.335);
  --chart-5: oklch(0.862 0.068 243.314);
}