Lavender and cream, generous rounding, friendly and approachable.
A complete design system, ready for your AI coding agent. Every primitive, token, and pattern below is generated straight from DESIGN.md — drop the file in your project and ship matching UI in minutes.
Prose-first token file — decisions live next to their reasoning.
Fine micro-scale (1–5px) for pills, editorial scale (12–21px) for the grid.
The system's own radius tokens — sm for chips and inputs, md for buttons, lg for cards, pill for fully-rounded CTAs.
Tokens describe the resting state. A real product needs every interaction state. Hover, focus, active, disabled, loading — all derived from the system's resting tokens.
1---2name: "Soft Pastel SaaS"3description: "Lavender and cream, generous rounding, friendly and approachable."4tags: [saas, playful, minimal, modern]5colors:6 primary: "#1F1B2E"7 secondary: "#6B6280"8 tertiary: "#A78BFA"9 neutral: "#FEF7ED"10 surface: "#FFFFFF"11typography:12 display: Inter13 body: Inter14 mono: "JetBrains Mono"15radius:16 sm: 8px17 md: 10px18 lg: 12px19buttons:20 primary:21 background: #A78BFA22 color: #1F1B2E23 border: none24 shape: rounded25 padding: 12px 20px26 font: 60027 shadow: 0 1px 2px rgba(167,139,250,0.25)28 secondary:29 background: #FEF7ED30 color: #1F1B2E31 border: none32 shape: rounded33 padding: 12px 20px34 font: 60035 outline:36 background: #FFFFFF37 color: #1F1B2E38 border: 1px solid #EFE6D839 shape: rounded40 padding: 12px 20px41 font: 60042 ghost:43 background: transparent44 color: #A78BFA45 border: none46 shape: rounded47 padding: 10px 14px48 font: 60049fonts_url: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap"50dependencies: ["lucide-react"]51---52 53# Soft Pastel SaaS54 55## AI Build Instructions56 57> **Read this section before writing any code.** The rules below58> are non-negotiable. Every value used in the UI must come from this59> file's frontmatter — never substitute, approximate, or invent new60> colors, fonts, radii, or shadows. If a value is missing, ask the61> user before adding one.62 63### 1 · Your role64 65You are building UI for a project that has adopted **Soft Pastel SaaS** as its66design system. Treat `DESIGN.md` as the single source of truth.67Your job is to translate the user's product requirements into68components and pages that look like they were designed by the same69person who authored this file.70 71### 2 · Token compliance72 73- Pull every color, font family, radius, shadow, and spacing value74 from the frontmatter at the top of this file.75- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never76 hard-code hex values that bypass the system.77- When a token can be expressed as a CSS variable, declare it once78 in your global stylesheet and reference it everywhere downstream.79- The Google Fonts `<link>` is provided in the Typography section.80 Add it to `<head>` before any component renders.81 82### 3 · Component recipes83 84Use these recipes verbatim when building the corresponding component.85 86#### Buttons87 88Four variants are defined. Pick one — never blend variants or invent a fifth.89 90- **Primary** — rounded shape, bg `#A78BFA`, text `#1F1B2E`, padding `12px 20px`, weight `600`, shadow `0 1px 2px rgba(167,139,250,0.25)`.91- **Secondary** — rounded shape, bg `#FEF7ED`, text `#1F1B2E`, padding `12px 20px`, weight `600`.92- **Outline** — rounded shape, bg `#FFFFFF`, text `#1F1B2E`, border `1px solid #EFE6D8`, padding `12px 20px`, weight `600`.93- **Ghost** — rounded shape, text `#A78BFA`, padding `10px 14px`, weight `600`.94 95Reach for **primary** as the single dominant CTA per screen.96**Secondary** for the supporting action. **Outline** for tertiary97actions in toolbars. **Ghost** for inline links and table actions.98 99#### Cards100 101- Background: `#FFFFFF`102- Radius: `radius.lg` (`12px`)103- Internal padding: `20px` for compact cards, `24–28px` for content cards.104 105#### Typography pairings106 107- **Display (`Inter`)** — h1, h2, hero headlines, brand wordmarks.108- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.109- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.110 111### 4 · Hard constraints112 113Never do any of the following without explicit instruction from the user:114 115- Introduce a new color, font, radius, or shadow that isn't declared above.116- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).117- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.118- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.119- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.120 121### 5 · Before you finish — verify122 123Run through this checklist for every screen you produce:124 125- [ ] Every color used appears in the Colors table above.126- [ ] Headlines use the display font; body copy uses the body font.127- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).128- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.129- [ ] Cards and dividers use the declared border + shadow tokens.130- [ ] No values were invented; if you needed something missing, you stopped and asked.131 132---133 134## Overview135A modern SaaS aesthetic with warmth. Pastel lavender on cream — approachable but professional. Rounded corners and soft shadows give the UI a tactile, friendly feel.136 137## Colors138- **Primary #1F1B2E** — deep aubergine, used for text.139- **Secondary #6B6280** — muted text.140- **Tertiary #A78BFA** — lavender accent. Used on primary CTAs and highlights.141- **Neutral #FEF7ED** — cream background.142- **Surface #FFFFFF** — cards.143 144## Typography145**Inter** for everything. Tight tracking on display, comfortable line-height on body.146 147## Spacing1484px grid. Generous: aim for 88px between sections.149 150## Components151Soft 12px radii. Light shadows. Lavender CTAs with dark text for contrast.152 153## Icons154`lucide-react`, stroke width 1.5, 20px default. Inherit text color.155 156## Do's and Don'ts157- ✅ Use lavender on primary actions.158- ✅ Soft shadows (max 4–6px blur).159- ❌ Don't use sharp corners.160- ❌ Don't pair with bright saturated colors.161 162---163 164## Tokens165 166> Generated from the same source the live preview renders from.167> Treat the values below as the contract — never substitute approximations.168 169### Colors170 171| Role | Value |172|-----------|-------|173| primary | `#1F1B2E` |174| secondary | `#6B6280` |175| tertiary | `#A78BFA` |176| neutral | `#FEF7ED` |177| surface | `#FFFFFF` |178 179### Typography180 181- **Display:** Inter182- **Body:** Inter183- **Mono:** JetBrains Mono184 185### Radius186 187- sm: `8px`188- md: `10px`189- lg: `12px`190 191### Buttons192 193Four variants, each fully tokenized. The preview renders from these exact values.194 195#### Primary196 197| Property | Value |198|----------|-------|199| shape | `rounded` |200| background | `#A78BFA` |201| color | `#1F1B2E` |202| border | `none` |203| padding | `12px 20px` |204| fontWeight | `600` |205| shadow | `0 1px 2px rgba(167,139,250,0.25)` |206 207#### Secondary208 209| Property | Value |210|----------|-------|211| shape | `rounded` |212| background | `#FEF7ED` |213| color | `#1F1B2E` |214| border | `none` |215| padding | `12px 20px` |216| fontWeight | `600` |217 218#### Outline219 220| Property | Value |221|----------|-------|222| shape | `rounded` |223| background | `#FFFFFF` |224| color | `#1F1B2E` |225| border | `1px solid #EFE6D8` |226| padding | `12px 20px` |227| fontWeight | `600` |228 229#### Ghost230 231| Property | Value |232|----------|-------|233| shape | `rounded` |234| background | `transparent` |235| color | `#A78BFA` |236| border | `none` |237| padding | `10px 14px` |238| fontWeight | `600` |239 240---241 242## Pro tokens243 244> Production-fidelity tokens. States, density, motion, elevation,245> content rules and a measured WCAG contract — derived from the246> resting tokens unless explicitly authored.247 248### States249 250#### Button251 252- **hover** — shadow: `0 8px 24px -10px rgba(167, 139, 250, 0.35)`, transform: `translateY(-1px)`, filter: `brightness(1.02)`253- **focus** — outline: `2px solid rgba(167, 139, 250, 0.4)`, outline-offset: `3px`254- **active** — transform: `translateY(0) scale(0.98)`255- **disabled** — opacity: `0.4`, filter: `saturate(0.5)`256- **loading** — opacity: `0.65`257- **selected** — bg: `rgba(167, 139, 250, 0.18)`, color: `#A78BFA`258 259#### Input260 261- **hover** — bg: `rgba(167, 139, 250, 0.03)`, border: `1px solid rgba(167, 139, 250, 0.4)`262- **focus** — border: `1px solid rgba(167, 139, 250, 0.6)`, shadow: `0 0 0 4px rgba(167, 139, 250, 0.12)`263- **disabled** — opacity: `0.4`264- **error** — border: `1px solid rgba(244,114,182,0.7)`, shadow: `0 0 0 4px rgba(244,114,182,0.15)`265 266#### Card267 268- **hover** — shadow: `0 16px 40px -16px rgba(167, 139, 250, 0.3)`, transform: `translateY(-3px)`269- **selected** — bg: `rgba(167, 139, 250, 0.04)`, border: `1px solid rgba(167, 139, 250, 0.5)`270- **dragging** — transform: `scale(1.03) rotate(-0.8deg)`, opacity: `0.92`271 272#### Tab273 274- **hover** — bg: `rgba(167, 139, 250, 0.08)`, color: `#A78BFA`275- **focus** — outline: `2px solid rgba(167, 139, 250, 0.4)`, outline-offset: `2px`276- **selected** — bg: `rgba(167, 139, 250, 0.16)`, color: `#A78BFA`277 278### Density279 280| Mode | padding × | row × | body | radius × | Use for |281|------|-----------|-------|------|----------|---------|282| compact | 0.72 | 0.78 | 0.8125rem | 0.85 | Information-dense — tables, IDEs, dashboards |283| comfortable | 1 | 1 | 0.9375rem | — | Default — most product UI |284| spacious | 1.35 | 1.3 | 1rem | 1.15 | Editorial — marketing, long-form, settings |285 286### Motion287 288**Signature — Soft fade.** Long, gentle transitions with a symmetric easing curve. Motion is calming, never intrusive.289 290```css291transition: all 400ms cubic-bezier(0.45, 0.05, 0.55, 0.95);292```293 294| Token | Value |295|-------|-------|296| duration.instant | `120ms` |297| duration.fast | `240ms` |298| duration.base | `400ms` |299| duration.slow | `600ms` |300| easing.standard | `cubic-bezier(0.45, 0.05, 0.55, 0.95)` |301| easing.decelerate | `cubic-bezier(0.0, 0, 0.2, 1)` |302| easing.accelerate | `cubic-bezier(0.4, 0, 1, 1)` |303| easing.spring | `cubic-bezier(0.45, 1.4, 0.55, 1)` |304 305### Elevation306 307Five-level scale, system-specific recipe.308 309| Level | Shadow | Recipe |310|-------|--------|--------|311| level0 | `none` | Flat — the tone separates, not the shadow. |312| level1 | `0 2px 6px -2px rgba(167, 139, 250, 0.12)` | Soft tinted lift. |313| level2 | `0 8px 24px -10px rgba(167, 139, 250, 0.2)` | Floating card — pastel-tinted shadow. |314| level3 | `0 16px 48px -16px rgba(167, 139, 250, 0.28)` | Sheet — visible tinted glow. |315| level4 | `0 32px 80px -24px rgba(167, 139, 250, 0.4)` | Modal — tinted wash, scrim required. |316 317### Content318 319- **measure:** `64ch` (max line length for body prose)320- **paragraph spacing:** `1.35em`321- **list indent:** `1.5em`322- **list gap:** `0.6em`323- **link:** color `#A78BFA`, underline `hover`324- **blockquote:** border `2px solid rgba(167, 139, 250, 0.5)`, padding `0.9em 1.2em`325- **code:** background `rgba(167, 139, 250, 0.1)`, color `#1F1B2E`326 327### Accessibility (WCAG 2.1)328 329**Overall:** FAIL330 331| Pair | Ratio | Required | Grade | Suggested fix |332|------|-------|----------|-------|---------------|333| Body text on surface | 16.74:1 | AA | AAA | — |334| Body text on canvas | 15.74:1 | AA | AAA | — |335| Muted text on surface | 5.7:1 | AA | AA | — |336| Accent on surface | 2.72:1 | AA-Large | FAIL | `#7a50f7` → 4.86:1 (AA) |337| Accent on canvas | 2.56:1 | AA-Large | FAIL | `#7a50f7` → 4.57:1 (AA) |338 # CLAUDE.md Reference @DESIGN.md for all styling decisions. Apply tokens strictly — do not introduce colors, fonts, or radii outside the system. When in doubt, prefer the values declared in DESIGN.md frontmatter.<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Inter"', 'serif'], sans: ['"Inter"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#1F1B2E', secondary: '#6B6280', accent: '#A78BFA', neutral: '#FEF7ED', surface: '#FFFFFF', }, borderRadius: { sm: '8px', md: '10px', lg: '12px', }, }, },};tonal-surface with a teal seed — cool tonal surfaces, full-rounded tonal buttons, Roboto Flex throughout. The tonal-surface spec applied to a calm aqua palette.
Radical two-color: deep indigo and warm bone, nothing else. Cool but editorial — never electric. Considered serif/sans pairing, refined 6px corners, no shadows. Discipline and quiet authority.