shadcnthemes
All themes

Jade Linen

Jade Linen is a green shadcn/ui theme with sharp corners and monospace typography, in light and dark modes.

Sans
JetBrains Mono
Serif
System
Mono
JetBrains Mono
Radius
0rem
Create project
Deploy your new project in one click.
Visitors
January – June
+12.5%
Buttons
Typography
The theme's three font families.
Sans · JetBrains Mono
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.9868 0.0035 174.48);
  --foreground: oklch(0.272 0.053 165.65);
  --card: oklch(0.9735 0.007 174.38);
  --card-foreground: oklch(0.272 0.053 165.65);
  --popover: oklch(0.9735 0.007 174.38);
  --popover-foreground: oklch(0.272 0.053 165.65);
  --primary: oklch(0.6373 0.1362 162.52);
  --primary-foreground: oklch(0.9915 0.0116 174.24);
  --secondary: oklch(0.9302 0.0118 174.21);
  --secondary-foreground: oklch(0.4274 0.0886 163.53);
  --muted: oklch(0.9268 0.0059 174.4);
  --muted-foreground: oklch(0.5271 0.0265 173.03);
  --accent: oklch(0.9248 0.028 173.68);
  --accent-foreground: oklch(0.4997 0.1051 163.07);
  --destructive: oklch(0.6356 0.2082 25.38);
  --destructive-foreground: oklch(0.9848 0 0);
  --border: oklch(0.875 0.0465 172.93);
  --input: oklch(0.9061 0.035 173.41);
  --ring: oklch(0.6373 0.1362 162.52);
  --chart-1: oklch(0.6373 0.1362 162.52);
  --chart-2: oklch(0.7303 0.1378 170.28);
  --chart-3: oklch(0.7521 0.1557 160.22);
  --chart-4: oklch(0.7791 0.0991 181.34);
  --chart-5: oklch(0.8441 0.058 172.4);
  --sidebar: oklch(0.9603 0.0105 174.27);
  --sidebar-foreground: oklch(0.3142 0.0494 168.25);
  --sidebar-primary: oklch(0.6373 0.1362 162.52);
  --sidebar-primary-foreground: oklch(1 0 0);
  --sidebar-accent: oklch(0.9204 0.0211 173.9);
  --sidebar-accent-foreground: oklch(0.4575 0.0843 166.16);
  --sidebar-border: oklch(0.895 0.0178 174);
  --sidebar-ring: oklch(0.6373 0.1362 162.52);
  --font-sans: JetBrains Mono, monospace;
  --font-serif: Georgia, serif;
  --font-mono: JetBrains Mono, monospace;
  --radius: 0rem;
  --spacing: 0.25rem;
  --tracking-normal: 0.02em;
  --shadow-color: oklch(0.2464 0.0358 168.98);
  --shadow-opacity: 0.1;
  --shadow-blur: 0px;
  --shadow-spread: 0px;
  --shadow-offset-x: 2px;
  --shadow-offset-y: 2px;
  --shadow-2xs: 2px 2px 0px 0px hsl(160 50% 10% / 0.05);
  --shadow-xs: 2px 2px 0px 0px hsl(160 50% 10% / 0.05);
  --shadow-sm: 2px 2px 0px 0px hsl(160 50% 10% / 0.10), 2px 1px 2px -1px hsl(160 50% 10% / 0.10);
  --shadow: 2px 2px 0px 0px hsl(160 50% 10% / 0.10), 2px 1px 2px -1px hsl(160 50% 10% / 0.10);
  --shadow-md: 2px 2px 0px 0px hsl(160 50% 10% / 0.10), 2px 2px 4px -1px hsl(160 50% 10% / 0.10);
  --shadow-lg: 2px 2px 0px 0px hsl(160 50% 10% / 0.10), 2px 4px 6px -1px hsl(160 50% 10% / 0.10);
  --shadow-xl: 2px 2px 0px 0px hsl(160 50% 10% / 0.10), 2px 8px 10px -1px hsl(160 50% 10% / 0.10);
  --shadow-2xl: 2px 2px 0px 0px hsl(160 50% 10% / 0.25);
}

.dark {
  --background: oklch(0.1234 0.0134 174.8);
  --foreground: oklch(0.7678 0.1655 162.19);
  --card: oklch(0.1577 0.018 172.36);
  --card-foreground: oklch(0.7678 0.1655 162.19);
  --popover: oklch(0.1414 0.0154 174.49);
  --popover-foreground: oklch(0.7678 0.1655 162.19);
  --primary: oklch(0.7678 0.1655 162.19);
  --primary-foreground: oklch(0.1234 0.0134 174.8);
  --secondary: oklch(0.2393 0.0298 170.08);
  --secondary-foreground: oklch(0.7678 0.1655 162.19);
  --muted: oklch(0.2123 0.0248 170.45);
  --muted-foreground: oklch(0.4814 0.0721 168.72);
  --accent: oklch(0.304 0.0414 169.49);
  --accent-foreground: oklch(0.8309 0.1796 162.07);
  --destructive: oklch(0.4344 0.1466 25.78);
  --destructive-foreground: oklch(0.9848 0 0);
  --border: oklch(0.4274 0.0886 163.53);
  --input: oklch(0.3519 0.0714 164.26);
  --ring: oklch(0.7678 0.1655 162.19);
  --chart-1: oklch(0.7678 0.1655 162.19);
  --chart-2: oklch(0.8052 0.1423 171.76);
  --chart-3: oklch(0.7935 0.133 163.15);
  --chart-4: oklch(0.6201 0.0963 179.72);
  --chart-5: oklch(0.4814 0.0721 168.72);
  --sidebar: oklch(0.0979 0.0106 174.8);
  --sidebar-foreground: oklch(0.7678 0.1655 162.19);
  --sidebar-primary: oklch(0.7678 0.1655 162.19);
  --sidebar-primary-foreground: oklch(0.1234 0.0134 174.8);
  --sidebar-accent: oklch(0.2393 0.0298 170.08);
  --sidebar-accent-foreground: oklch(0.8309 0.1796 162.07);
  --sidebar-border: oklch(0.3519 0.0714 164.26);
  --sidebar-ring: oklch(0.7678 0.1655 162.19);
  --font-sans: JetBrains Mono, monospace;
  --font-serif: Georgia, serif;
  --font-mono: JetBrains Mono, monospace;
  --radius: 0rem;
  --spacing: 0.25rem;
  --tracking-normal: 0.02em;
  --shadow-color: oklch(0 0 0);
  --shadow-opacity: 0;
  --shadow-blur: 0px;
  --shadow-spread: 0px;
  --shadow-offset-x: 0px;
  --shadow-offset-y: 0px;
  --shadow-2xs: 0px 0px 0px 0px hsl(0 0% 0% / 0.00);
  --shadow-xs: 0px 0px 0px 0px hsl(0 0% 0% / 0.00);
  --shadow-sm: 0px 0px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00);
  --shadow: 0px 0px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00);
  --shadow-md: 0px 0px 0px 0px hsl(0 0% 0% / 0.00), 0px 2px 4px -1px hsl(0 0% 0% / 0.00);
  --shadow-lg: 0px 0px 0px 0px hsl(0 0% 0% / 0.00), 0px 4px 6px -1px hsl(0 0% 0% / 0.00);
  --shadow-xl: 0px 0px 0px 0px hsl(0 0% 0% / 0.00), 0px 8px 10px -1px hsl(0 0% 0% / 0.00);
  --shadow-2xl: 0px 0px 0px 0px hsl(0 0% 0% / 0.00);
}

@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