Blush & Slate — a shadcn/ui theme for Tailwind v4
Dusty pink against charcoal — a modern agency and portfolio theme.
Blush & Slate is the agency palette: a dusty blush primary against a charcoal slate secondary, with warm-gray neutrals that photograph well behind case-study imagery. It suits studios, freelancer portfolios, and brand sites that want to feel designed.
Creative Agency is the pairing — a bold geometric heading over a quiet body — and the scale is a perfect fourth so section titles carry the page. A larger radius and a lifted shadow give project cards the feel of printed cards on a desk.
The eight color roles
Every shadcn/ui variable in the export derives from these eight. The dark values are not a second theme: they are the light roles with lightness moved, hue and saturation held, and each pair repaired until it meets its WCAG threshold.
| Role | Light | Dark |
|---|---|---|
| primary | #232e3a | #7993ae |
| secondary | #546a7a | #7790a1 |
| accent | #a0b4c4 | #a0b4c4 |
| background | #f7d6d7 | #220707 |
| surface | #f4c5c6 | #380b0c |
| text | #221111 | #f8f1f1 |
| muted | #8f5658 | #3d2425 |
| border | #dac1c1 | #865151 |
Typography
Montserrat for headings, Open Sans for body copy and ui-monospace for code, on a 16px base with a 1.333 modular ratio.
Shape and elevation
A 0.75rem base radius derives the --radius-sm/md/lg/xl steps; the base shadow derives the four-step elevation scale.
Extended tokens
Foregrounds, destructive, a five-step chart ramp and the sidebar set are derived from the roles — exactly the variables a Tailwind v4 shadcn/ui project reads.
The exported globals.css
This is the stylesheet the generator downloads for this preset — a Tailwind v4 @theme block that any shadcn/ui project can replace its own app/globals.css with. Open the preset in the generator to change anything, preview it on a full landing page, and add the derived .dark block or the W3C design-tokens export.
/* Blush & Slate — Tailwind v4 theme (generated from the styling step) */
@import "tailwindcss";
@theme {
--color-primary: #232e3a;
--color-secondary: #546a7a;
--color-accent: #a0b4c4;
--color-background: #f7d6d7;
--color-surface: #f4c5c6;
--color-text: #221111;
--color-muted: #8f5658;
--color-border: #dac1c1;
--color-primary-foreground: #f7d6d7;
--color-secondary-foreground: #221111;
--color-accent-foreground: #221111;
--color-destructive: oklch(0.577 0.245 27.325);
--color-chart-1: #232e3a;
--color-chart-2: #546a7a;
--color-chart-3: #a0b4c4;
--color-chart-4: #8f5658;
--color-chart-5: #dac1c1;
--color-sidebar: #f4c5c6;
--color-sidebar-foreground: #221111;
--color-sidebar-primary: #232e3a;
--color-sidebar-primary-foreground: #f7d6d7;
--color-sidebar-accent: #a0b4c4;
--color-sidebar-accent-foreground: #221111;
--color-sidebar-border: #dac1c1;
--color-sidebar-ring: #232e3a;
--font-heading: Montserrat, 'Century Gothic', sans-serif;
--font-body: 'Open Sans', 'Segoe UI', sans-serif;
--font-mono: ui-monospace, SFMono-Regular, monospace;
--radius-sm: calc(0.75rem * 0.5);
--radius-md: 0.75rem;
--radius-lg: calc(0.75rem * 1.5);
--radius-xl: calc(0.75rem * 2);
--text-xs: 0.5625rem;
--text-sm: 0.75rem;
--text-base: 1rem;
--text-lg: 1.34375rem;
--text-xl: 1.78125rem;
--text-2xl: 2.375rem;
--text-3xl: 3.15625rem;
--text-4xl: 4.21875rem;
--shadow-sm: 0 6.667px 10px -2px rgba(0, 0, 0, 0.1), 0 2.667px 4px -1.333px rgba(0, 0, 0, 0.05);
--shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
--shadow-lg: 0 15px 22.5px -4.5px rgba(0, 0, 0, 0.1), 0 6px 9px -3px rgba(0, 0, 0, 0.05);
--shadow-xl: 0 22.5px 33.75px -6.75px rgba(0, 0, 0, 0.1), 0 9px 13.5px -4.5px rgba(0, 0, 0, 0.05);
--scrollbar-size: 10px;
--scrollbar-radius: 999px;
--scrollbar-track: transparent;
--scrollbar-thumb: #dac1c1;
--scrollbar-thumb-hover: #232e3a;
--scrollbar-thumb-border: #f7d6d7;
--animate-marquee: marquee 25s linear infinite;
}
@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@layer base {
:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.dark { color-scheme: dark; }
html {
scrollbar-width: thin;
scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
}
*::-webkit-scrollbar { width: var(--scrollbar-size); height: var(--scrollbar-size); }
*::-webkit-scrollbar-track { background: var(--scrollbar-track); }
*::-webkit-scrollbar-thumb {
background-color: var(--scrollbar-thumb);
border-radius: var(--scrollbar-radius);
border: 2px solid var(--scrollbar-thumb-border);
}
*::-webkit-scrollbar-thumb:hover { background-color: var(--scrollbar-thumb-hover); }
*::-webkit-scrollbar-corner { background: var(--scrollbar-track); }
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
}
/* Generated with Nodlume — https://nodlume.dev/theme-generator/blush-and-slate */
Make it yours
A preset is a starting point, not a decision. The shadcn/ui theme generator opens this one with every control live — swap the palette, try another of the 67 font pairings, tune the radius — and exports the result. For the thinking behind the roles, read how to build a semantic UI color palette; for how the whole system is generated, read generating custom themes.
Open in the theme generator