#E4F5E7#1AAE39#137D29MINDER · GENERAL DESIGN SYSTEM · NOTION SKIN
Live components. Switching skins in the nav changes tokens only.
01
Every value here is what the stylesheet at the foot of the page ships.
Notion: warm paper canvas, blue CTA, hairline rules.
primary-50 → primary-900#F0F7FDtint background#DBECFA#B8D8F6#85BDEF#4299E7#0075DEbrand · CTA, link#005BABpressed / hover#114697#213183deep indigo#121B48neutral-0 → neutral-1000#FFFFFFsurface#F6F5F4warm paper canvas#EDEDEC#E6E6E6hairline#C8C6C3#A39E98ash · disabled text#7F7A75#615D59stone · secondary text#494744#31302Ewarm charcoal#161615#000000ink · primary texteach ramp carries -light, -default, -dark#E4F5E7#1AAE39#137D29#FBEBE0#DD5B00#9F4200#FAE9EC#D6455F#9A3244#E0EEFB#0075DE#0054A0bg-base · bg-subtle · bg-elevated · bg-overlay#F6F5F4the page itself#FFFFFFcards, fields#FFFFFFmodals, dropdowns — plus shadowrgba(0,0,0,0.24)scrim behind a modaltext-primary → text-link#000000#615D59#A39E98#FFFFFF#0075DEborder-default · border-subtle · border-focus#E6E6E6#EDEDEC#0075DERoboto, one familyMeet the night shift
One tool for your whole company
Plans and features
Build perfect workflows
Your connected workspace
Write, plan, and organize
A calm default for clear, document-like reading.
Compact enough for tables and dense content.
Workspace name
Supporting notes and footnotes.
ESSENTIAL FOR STAYING ORGANIZED
xxs4pxxs8pxsm12pxmd16pxlg24pxxl28pxxxl32px3xl48px4xl64px4pxform fields6pxchips8pxutility buttons12pxcards16pxpanels9999pxCTAs, badges, avatars< 768pxSingle column; nav collapses; CTAs stack full-width768–1023pxGrids collapse toward 2-up; nav condenses1024–1279pxTightened gutters; 3-column grids retained≥ 1280pxFull multi-column grids; centred ~1200px column02
The four pieces a re-vendor would overwrite.
--sweep-intensity 1.00 · --sweep-cycle 18scomposed · ambient-sweepThe light rides the whole outline on a motion path, so it holds one speed the whole way round instead of tearing along the long edges the way a rotating gradient would. Drops onto .systemNav unchanged — --sweep-radius defaults to 0, which is the real bar’s square corner.
--primary-hover-* · --primary-hover-liftcomposed · globals.cssHover picks up a vertical gradient with a lit top edge and an outer glow. The gradient starts at --primary itself, so it can never drift from the resting state it grows out of. Geometry is untouched — only the surface changes.
composed · globals.cssA solid tint rather than a gradient, so the two never compete. Both skies are one set of tokens; only the values swap.
--sweep-toast-tilt -30degcomposed · sonner + ambient-sweepA toast lives about four seconds, so the nav’s 18s cycle would never be seen on one: the light runs once, just after it settles. Status toasts sweep in their own colour — a green toast lit with brand blue would read as two unrelated systems.
lottie · vector, no raster assetscomposed · empty + lottie + skeletoncomposed · empty + lottie03
components/select · native-selectcomponents/calendar + popovercomponents/input[type=file]Shown to everyone in the workspace.
Control first, text beside it.
05
composed · empty + lottie + skeleton06
composed · card + badge| Customer | Owner | Status | Progress |
|---|---|---|---|
| Acme Corp | Hung | Live | 100% |
| Northwind | Mai | Deploying | 62% |
| Globex | Trung | Blocked | 18% |
Updated 12 minutes ago
Running · 3 of 8 steps
composed · markerAn internal operations console.
07
Search for a command to run...
08
Generated from tokens.ts. Follows the active skin.
/* ==========================================================================
Minder general design system — design tokens
Generated from app/design-system/general/tokens.ts
========================================================================== */
:root {
/* Primary / brand */
--color-primary-50: #F0F7FD;
--color-primary-100: #DBECFA;
--color-primary-200: #B8D8F6;
--color-primary-300: #85BDEF;
--color-primary-400: #4299E7;
--color-primary-500: #0075DE;
--color-primary-600: #005BAB;
--color-primary-700: #114697;
--color-primary-800: #213183;
--color-primary-900: #121B48;
/* Neutral */
--color-neutral-0: #FFFFFF;
--color-neutral-50: #F6F5F4;
--color-neutral-100: #EDEDEC;
--color-neutral-200: #E6E6E6;
--color-neutral-300: #C8C6C3;
--color-neutral-400: #A39E98;
--color-neutral-500: #7F7A75;
--color-neutral-600: #615D59;
--color-neutral-700: #494744;
--color-neutral-800: #31302E;
--color-neutral-900: #161615;
--color-neutral-1000: #000000;
/* Semantic */
--color-success-light: #E4F5E7;
--color-success: #1AAE39;
--color-success-dark: #137D29;
--color-warning-light: #FBEBE0;
--color-warning: #DD5B00;
--color-warning-dark: #9F4200;
--color-error-light: #FAE9EC;
--color-error: #D6455F;
--color-error-dark: #9A3244;
--color-info-light: #E0EEFB;
--color-info: #0075DE;
--color-info-dark: #0054A0;
/* Background & surface */
--bg-base: #F6F5F4;
--bg-subtle: #FFFFFF;
--bg-elevated: #FFFFFF;
--bg-overlay: rgba(0,0,0,0.24);
/* Text */
--text-primary: #000000;
--text-secondary: #615D59;
--text-disabled: #A39E98;
--text-inverse: #FFFFFF;
--text-link: #0075DE;
/* Border & divider */
--border-default: #E6E6E6;
--border-subtle: #EDEDEC;
--border-focus: #0075DE;
/* Typography — Roboto, one family */
--font-sans: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--text-display-1: 700 64px/64px var(--font-sans);
--tracking-display-1: -2.125px;
--text-display-2: 700 54px/56px var(--font-sans);
--tracking-display-2: -1.875px;
--text-heading-1: 700 40px/44px var(--font-sans);
--tracking-heading-1: -1px;
--text-heading-2: 700 26px/32px var(--font-sans);
--tracking-heading-2: -0.625px;
--text-heading-3: 700 22px/28px var(--font-sans);
--tracking-heading-3: -0.25px;
--text-title: 600 20px/28px var(--font-sans);
--tracking-title: -0.125px;
--text-body-md: 400 16px/24px var(--font-sans);
--tracking-body-md: 0;
--text-body-sm: 400 15px/20px var(--font-sans);
--tracking-body-sm: 0;
--text-label: 500 14px/20px var(--font-sans);
--tracking-label: 0;
--text-caption: 400 14px/20px var(--font-sans);
--tracking-caption: 0;
--text-eyebrow: 600 12px/16px var(--font-sans);
--tracking-eyebrow: 0.125px;
/* Spacing — 8px base rhythm */
--space-xxs: 4px;
--space-xs: 8px;
--space-sm: 12px;
--space-md: 16px;
--space-lg: 24px;
--space-xl: 28px;
--space-xxl: 32px;
--space-3xl: 48px;
--space-4xl: 64px;
/* Border radius */
--radius-xs: 4px;
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-full: 9999px;
/* Elevation */
--shadow-none: none;
--shadow-soft: 0 .175px 1.041px rgba(0,0,0,.01), 0 .8px 2.925px rgba(0,0,0,.02), 0 2.025px 7.847px rgba(0,0,0,.027), 0 4px 18px rgba(0,0,0,.04);
--shadow-elevated: 0 .5px 1px rgba(0,0,0,.012), 0 2px 5px rgba(0,0,0,.02), 0 5px 12px rgba(0,0,0,.028), 0 11px 26px rgba(0,0,0,.038), 0 23px 52px rgba(0,0,0,.05);
/* Breakpoints */
/* Mobile: < 768px — Single column; nav collapses; CTAs stack full-width */
/* Tablet: 768–1023px — Grids collapse toward 2-up; nav condenses */
/* Laptop: 1024–1279px — Tightened gutters; 3-column grids retained */
/* Desktop: ≥ 1280px — Full multi-column grids; centred ~1200px column */
}
/* --------------------------------------------------------------------------
Base
-------------------------------------------------------------------------- */
body {
background: var(--bg-base);
color: var(--text-primary);
font: var(--text-body-md);
}
a {
color: var(--text-link);
text-decoration: none;
}
a:hover { text-decoration: underline; }
:focus-visible {
outline: 2px solid var(--border-focus);
outline-offset: 2px;
}
.card {
border: 1px solid var(--border-default);
border-radius: var(--radius-lg);
background: var(--bg-subtle);
padding: var(--space-lg);
}
.card--elevated { border-color: transparent; box-shadow: var(--shadow-elevated); }