shadcnthemes
All themes

Violet Dusk 2

Violet Dusk 2 is a purple shadcn/ui theme with pill corners and sans-serif typography, in light and dark modes.

Sans
Plus Jakarta Sans
Serif
System
Mono
JetBrains Mono
Radius
1rem
Create project
Deploy your new project in one click.
Visitors
January – June
+12.5%
Buttons
Typography
The theme's three font families.
Sans · Plus Jakarta Sans
The quick brown fox
Serif · System
jumps over the lazy dog.
Mono · JetBrains Mono
npx shadcn add button
Account
Notifications
Choose what you want to hear about.
Product updates
New features and releases
Security alerts
Sign-ins from new devices
Marketing
Tips, offers and news
Payment method
Team
Invite your teammates to collaborate.
SDJLINWK
OwnerEditorViewerSuspended
Storage7.2 of 10 GB
Volume64%
Invoices
InvoiceStatusAmount
INV001Paid$250.00
INV002Pending$150.00
INV003Unpaid$350.00
INV004Paid$450.00
FAQ

Yes. It adheres to the WAI-ARIA design pattern.

Colors

Click any swatch to copy its OKLCH value.

Base
Brand
Lines
Charts
Sidebar
StatusOptional, generated to match

Use this theme

Install it with the shadcn CLI, paste the CSS, or export tokens for your design tool.

Paste into app/globals.css, replacing the existing :root and .dark blocks.

:root {
  --background: oklch(0.9838 0.0035 247.86);
  --foreground: oklch(0.1284 0.0267 261.59);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.1284 0.0267 261.59);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(0.1284 0.0267 261.59);
  --primary: oklch(0.4865 0.2423 291.87);
  --primary-foreground: oklch(0.9838 0.0035 247.86);
  --secondary: oklch(0.9486 0.0085 303.51);
  --secondary-foreground: oklch(0.341 0.1625 292.95);
  --muted: oklch(0.9679 0.0027 264.54);
  --muted-foreground: oklch(0.5503 0.0235 264.36);
  --accent: oklch(0.9546 0.0227 303.29);
  --accent-foreground: oklch(0.4865 0.2423 291.87);
  --destructive: oklch(0.6356 0.2082 25.38);
  --destructive-foreground: oklch(0.9838 0.0035 247.86);
  --border: oklch(0.9278 0.0058 264.53);
  --input: oklch(0.9278 0.0058 264.53);
  --ring: oklch(0.4865 0.2423 291.87);
  --chart-1: oklch(0.4865 0.2423 291.87);
  --chart-2: oklch(0.7216 0.1282 217.87);
  --chart-3: oklch(0.6356 0.1398 156.15);
  --chart-4: oklch(0.6192 0.2037 312.73);
  --chart-5: oklch(0.6532 0.2114 353.94);
  --sidebar: oklch(1 0 0);
  --sidebar-foreground: oklch(0.1284 0.0267 261.59);
  --sidebar-primary: oklch(0.4865 0.2423 291.87);
  --sidebar-primary-foreground: oklch(0.9838 0.0035 247.86);
  --sidebar-accent: oklch(0.9486 0.0085 303.51);
  --sidebar-accent-foreground: oklch(0.4865 0.2423 291.87);
  --sidebar-border: oklch(0.9278 0.0058 264.53);
  --sidebar-ring: oklch(0.4865 0.2423 291.87);
  --font-sans: Plus Jakarta Sans, Inter, system-ui, sans-serif;
  --font-serif: Georgia, serif;
  --font-mono: JetBrains Mono, monospace;
  --radius: 1rem;
  --spacing: 0.25rem;
  --tracking-normal: -0.02em;
  --shadow-color: oklch(0.4865 0.2423 291.87);
  --shadow-opacity: 0.08;
  --shadow-blur: 30px;
  --shadow-spread: 0px;
  --shadow-offset-x: 0px;
  --shadow-offset-y: 8px;
  --shadow-2xs: 0px 8px 30px 0px hsl(263 70% 50% / 0.04);
  --shadow-xs: 0px 8px 30px 0px hsl(263 70% 50% / 0.04);
  --shadow-sm: 0px 8px 30px 0px hsl(263 70% 50% / 0.08), 0px 1px 2px -1px hsl(263 70% 50% / 0.08);
  --shadow: 0px 8px 30px 0px hsl(263 70% 50% / 0.08), 0px 1px 2px -1px hsl(263 70% 50% / 0.08);
  --shadow-md: 0px 8px 30px 0px hsl(263 70% 50% / 0.08), 0px 2px 4px -1px hsl(263 70% 50% / 0.08);
  --shadow-lg: 0px 8px 30px 0px hsl(263 70% 50% / 0.08), 0px 4px 6px -1px hsl(263 70% 50% / 0.08);
  --shadow-xl: 0px 8px 30px 0px hsl(263 70% 50% / 0.08), 0px 8px 10px -1px hsl(263 70% 50% / 0.08);
  --shadow-2xl: 0px 8px 30px 0px hsl(263 70% 50% / 0.20);
}

.dark {
  --background: oklch(0.1091 0.0091 301.7);
  --foreground: oklch(0.9838 0.0035 247.86);
  --card: oklch(0.1376 0.0118 301.06);
  --card-foreground: oklch(0.9838 0.0035 247.86);
  --popover: oklch(0.1486 0.014 299.98);
  --popover-foreground: oklch(0.9838 0.0035 247.86);
  --primary: oklch(0.7914 0.0884 308.33);
  --primary-foreground: oklch(0.1091 0.0091 301.7);
  --secondary: oklch(0.2371 0.0589 299.79);
  --secondary-foreground: oklch(0.8266 0.0933 301.95);
  --muted: oklch(0.2217 0.0242 299.71);
  --muted-foreground: oklch(0.7497 0.0224 301.01);
  --accent: oklch(0.2255 0.0836 296.74);
  --accent-foreground: oklch(0.6083 0.2172 297.12);
  --destructive: oklch(0.6356 0.2082 25.38);
  --destructive-foreground: oklch(0.9838 0.0035 247.86);
  --border: oklch(0.2505 0.0293 299.57);
  --input: oklch(0.2505 0.0293 299.57);
  --ring: oklch(0.6083 0.2172 297.12);
  --chart-1: oklch(0.6083 0.2172 297.12);
  --chart-2: oklch(0.7741 0.1272 215.1);
  --chart-3: oklch(0.7801 0.1859 154.59);
  --chart-4: oklch(0.7001 0.1882 313.29);
  --chart-5: oklch(0.6888 0.2092 353.13);
  --sidebar: oklch(0.1249 0.0104 301.7);
  --sidebar-foreground: oklch(0.9838 0.0035 247.86);
  --sidebar-primary: oklch(0.6083 0.2172 297.12);
  --sidebar-primary-foreground: oklch(0.1091 0.0091 301.7);
  --sidebar-accent: oklch(0.2096 0.0482 299.95);
  --sidebar-accent-foreground: oklch(0.6083 0.2172 297.12);
  --sidebar-border: oklch(0.2217 0.0242 299.71);
  --sidebar-ring: oklch(0.6083 0.2172 297.12);
  --font-sans: Plus Jakarta Sans, Inter, system-ui, sans-serif;
  --font-serif: Georgia, serif;
  --font-mono: JetBrains Mono, monospace;
  --radius: 1rem;
  --spacing: 0.25rem;
  --tracking-normal: -0.02em;
  --shadow-color: oklch(0 0 0);
  --shadow-opacity: 0.6;
  --shadow-blur: 40px;
  --shadow-spread: -10px;
  --shadow-offset-x: 0px;
  --shadow-offset-y: 20px;
  --shadow-2xs: 0px 20px 40px -10px hsl(0 0% 0% / 0.30);
  --shadow-xs: 0px 20px 40px -10px hsl(0 0% 0% / 0.30);
  --shadow-sm: 0px 20px 40px -10px hsl(0 0% 0% / 0.60), 0px 1px 2px -11px hsl(0 0% 0% / 0.60);
  --shadow: 0px 20px 40px -10px hsl(0 0% 0% / 0.60), 0px 1px 2px -11px hsl(0 0% 0% / 0.60);
  --shadow-md: 0px 20px 40px -10px hsl(0 0% 0% / 0.60), 0px 2px 4px -11px hsl(0 0% 0% / 0.60);
  --shadow-lg: 0px 20px 40px -10px hsl(0 0% 0% / 0.60), 0px 4px 6px -11px hsl(0 0% 0% / 0.60);
  --shadow-xl: 0px 20px 40px -10px hsl(0 0% 0% / 0.60), 0px 8px 10px -11px hsl(0 0% 0% / 0.60);
  --shadow-2xl: 0px 20px 40px -10px hsl(0 0% 0% / 1.50);
}

@theme inline {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-card: var(--card);
  --color-card-foreground: var(--card-foreground);
  --color-popover: var(--popover);
  --color-popover-foreground: var(--popover-foreground);
  --color-primary: var(--primary);
  --color-primary-foreground: var(--primary-foreground);
  --color-secondary: var(--secondary);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-muted: var(--muted);
  --color-muted-foreground: var(--muted-foreground);
  --color-accent: var(--accent);
  --color-accent-foreground: var(--accent-foreground);
  --color-destructive: var(--destructive);
  --color-destructive-foreground: var(--destructive-foreground);
  --color-border: var(--border);
  --color-input: var(--input);
  --color-ring: var(--ring);
  --color-chart-1: var(--chart-1);
  --color-chart-2: var(--chart-2);
  --color-chart-3: var(--chart-3);
  --color-chart-4: var(--chart-4);
  --color-chart-5: var(--chart-5);
  --color-sidebar: var(--sidebar);
  --color-sidebar-foreground: var(--sidebar-foreground);
  --color-sidebar-primary: var(--sidebar-primary);
  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
  --color-sidebar-accent: var(--sidebar-accent);
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
  --color-sidebar-border: var(--sidebar-border);
  --color-sidebar-ring: var(--sidebar-ring);

  --font-sans: var(--font-sans);
  --font-mono: var(--font-mono);
  --font-serif: var(--font-serif);

  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);

  --shadow-2xs: var(--shadow-2xs);
  --shadow-xs: var(--shadow-xs);
  --shadow-sm: var(--shadow-sm);
  --shadow: var(--shadow);
  --shadow-md: var(--shadow-md);
  --shadow-lg: var(--shadow-lg);
  --shadow-xl: var(--shadow-xl);
  --shadow-2xl: var(--shadow-2xl);

  --tracking-tighter: calc(var(--tracking-normal) - 0.05em);
  --tracking-tight: calc(var(--tracking-normal) - 0.025em);
  --tracking-normal: var(--tracking-normal);
  --tracking-wide: calc(var(--tracking-normal) + 0.025em);
  --tracking-wider: calc(var(--tracking-normal) + 0.05em);
  --tracking-widest: calc(var(--tracking-normal) + 0.1em);
}

@layer base {
  body {
    letter-spacing: var(--tracking-normal);
  }
}

Similar themes