Minimalist UI Protocol
Premium Utilitarian Minimalism & Editorial UI — refined, document-style interfaces with deliberate constraints.
Core Aesthetic
A high-contrast warm monochrome palette, bespoke typographic hierarchies, meticulous structural macro-whitespace, bento-grid layouts, and an ultra-flat component architecture.
Mantra: Every element must justify its existence. If it doesn't communicate, remove it.
Typographic Foundation
Font Selection
| Role |
Options |
Notes |
| Body/UI |
SF Pro Display, Geist Sans, Switzer |
Geometric sans-serif |
| Headings |
Lyon Text, Newsreader, Playfair Display |
Editorial serif, tight tracking |
| Metadata/Mono |
Geist Mono, JetBrains Mono |
Data, timestamps, labels |
Never use: Inter, Roboto, Open Sans — too generic.
Typography Rules
- Off-black text:
#111111 (never pure #000000)
- Heading tracking: tight (
letter-spacing: -0.02em)
- Body line height: 1.6–1.7
- Maximum 2 type sizes in any single component
Color Palette
| Role |
Value |
Usage |
| Canvas |
#F7F6F3 |
Warm off-white background |
| Text primary |
#111111 |
Body text, headings |
| Text secondary |
#666666 |
Labels, metadata |
| Borders |
#EAEAEA |
Card borders, dividers |
| Accent |
Sparse pastel |
ONE desaturated accent only |
Accent colors: pale red, pale blue, pale green, pale yellow — never saturated.
Component Specifications
Cards
.card {
border: 1px solid #EAEAEA;
border-radius: 8px; /* never > 12px */
background: #FFFFFF;
padding: 1.5rem;
}
.card:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); /* ultra-soft, not harsh */
}
CTAs / Buttons
.btn-primary {
background: #111111;
color: #FFFFFF;
border-radius: 6px;
padding: 0.625rem 1.25rem;
transition: opacity 0.15s ease;
}
.btn-primary:hover {
opacity: 0.85; /* not scale, not color change — just opacity */
}
Prohibited Elements
- No Inter/Roboto/Open Sans
- No Tailwind heavy shadows (
shadow-lg, shadow-xl)
- No gradients (linear or radial)
- No neon or saturated accent colors
- No pill-shaped buttons
- No emojis anywhere — not in code, markup, headings, or alt text
- No glassmorphism
- No three-column equal feature grids
Motion — Ultra-Subtle Only
/* Entry animation */
@keyframes fade-in {
from { opacity: 0; transform: translateY(4px); }
to { opacity: 1; transform: translateY(0); }
}
.card { animation: fade-in 0.2s ease-out; }
/* Hover */
.card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
Rules:
- Animate only
transform and opacity
- Maximum 200ms duration for hover states
- No bouncing, spring physics, or overshooting in minimalist contexts
Iconography
- Use single-weight, minimal icon sets (Phosphor Thin, Lucide)
- Icons at 16–20px, never larger in body content
- Icon + label always — never icon alone
- SVG preferred, no icon fonts
Bento Grid
.bento-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 1rem;
}
/* Cards span different column widths for visual rhythm */
.card-wide { grid-column: span 8; }
.card-narrow { grid-column: span 4; }
Execution Protocol
- Establish typographic hierarchy before any color decisions
- Set spacing scale (base 4px or 8px)
- Layout in grayscale first — no color until structure is right
- Add single accent color last
- Remove anything not earning its place
Pre-Output Checklist
1---2name: minimalist-ui3description: Create clean editorial-style interfaces with warm monochrome palette, typographic contrast, flat bento grids, and muted pastels. Use when the user wants minimalist design, editorial style, clean typography-driven UI, or "less is more" aesthetic.4---56# Minimalist UI Protocol78**Premium Utilitarian Minimalism & Editorial UI** — refined, document-style interfaces with deliberate constraints.910## Core Aesthetic1112A high-contrast warm monochrome palette, bespoke typographic hierarchies, meticulous structural macro-whitespace, bento-grid layouts, and an ultra-flat component architecture.1314**Mantra:** Every element must justify its existence. If it doesn't communicate, remove it.1516## Typographic Foundation1718### Font Selection1920| Role | Options | Notes |21|------|---------|-------|22| **Body/UI** | SF Pro Display, Geist Sans, Switzer | Geometric sans-serif |23| **Headings** | Lyon Text, Newsreader, Playfair Display | Editorial serif, tight tracking |24| **Metadata/Mono** | Geist Mono, JetBrains Mono | Data, timestamps, labels |2526**Never use**: Inter, Roboto, Open Sans — too generic.2728### Typography Rules29- Off-black text: `#111111` (never pure `#000000`)30- Heading tracking: tight (`letter-spacing: -0.02em`)31- Body line height: 1.6–1.732- Maximum 2 type sizes in any single component3334## Color Palette3536| Role | Value | Usage |37|------|-------|-------|38| **Canvas** | `#F7F6F3` | Warm off-white background |39| **Text primary** | `#111111` | Body text, headings |40| **Text secondary** | `#666666` | Labels, metadata |41| **Borders** | `#EAEAEA` | Card borders, dividers |42| **Accent** | Sparse pastel | ONE desaturated accent only |4344Accent colors: pale red, pale blue, pale green, pale yellow — never saturated.4546## Component Specifications4748### Cards49```css50.card {51 border: 1px solid #EAEAEA;52 border-radius: 8px; /* never > 12px */53 background: #FFFFFF;54 padding: 1.5rem;55}5657.card:hover {58 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); /* ultra-soft, not harsh */59}60```6162### CTAs / Buttons63```css64.btn-primary {65 background: #111111;66 color: #FFFFFF;67 border-radius: 6px;68 padding: 0.625rem 1.25rem;69 transition: opacity 0.15s ease;70}7172.btn-primary:hover {73 opacity: 0.85; /* not scale, not color change — just opacity */74}75```7677## Prohibited Elements7879- No Inter/Roboto/Open Sans80- No Tailwind heavy shadows (`shadow-lg`, `shadow-xl`)81- No gradients (linear or radial)82- No neon or saturated accent colors83- No pill-shaped buttons84- **No emojis anywhere — not in code, markup, headings, or alt text**85- No glassmorphism86- No three-column equal feature grids8788## Motion — Ultra-Subtle Only8990```css91/* Entry animation */92@keyframes fade-in {93 from { opacity: 0; transform: translateY(4px); }94 to { opacity: 1; transform: translateY(0); }95}9697.card { animation: fade-in 0.2s ease-out; }9899/* Hover */100.card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }101```102103Rules:104- Animate only `transform` and `opacity`105- Maximum 200ms duration for hover states106- No bouncing, spring physics, or overshooting in minimalist contexts107108## Iconography109110- Use single-weight, minimal icon sets (Phosphor Thin, Lucide)111- Icons at 16–20px, never larger in body content112- Icon + label always — never icon alone113- SVG preferred, no icon fonts114115## Bento Grid116117```css118.bento-grid {119 display: grid;120 grid-template-columns: repeat(12, 1fr);121 gap: 1rem;122}123124/* Cards span different column widths for visual rhythm */125.card-wide { grid-column: span 8; }126.card-narrow { grid-column: span 4; }127```128129## Execution Protocol1301311. Establish typographic hierarchy before any color decisions1322. Set spacing scale (base 4px or 8px)1333. Layout in grayscale first — no color until structure is right1344. Add single accent color last1355. Remove anything not earning its place136137## Pre-Output Checklist138139- [ ] No emojis140- [ ] No pure black (#000000)141- [ ] No generic fonts (Inter/Roboto/Open Sans)142- [ ] No heavy shadows143- [ ] No gradients144- [ ] Single accent color only, desaturated145- [ ] Cards use exactly `border: 1px solid #EAEAEA`146- [ ] Animations ≤ 200ms, transform/opacity only147- [ ] Mobile layout uses `w-full px-4 py-8`