DESIGN.md@claude/skills/visualize/design-systems/brutalist · git:20261007.b0c13a7 · 2026-10-07 · sha256 2bf3453daecff4c9
DESIGN.md@claude/skills/visualize/design-systems/brutalist git:20261007.b0c13a7A
Immutable. This exact content never changes and is served at /api/v1/blob/2bf3453daecff4c9.
---
name: Brutalist
description: Raw / high-contrast / grid-heavy / manifesto register. Light-canonical, pure white + near-pure black + cadmium-red shout. Hard borders, zero radius, tightest leading.
# Colors carry the shadcn-semantic slug names visualize templates already
# read. OKLCH per the visualize palette convention; Stitch's linter
# validates hex sRGB only and will warn on these strings — accepted
# trade for one source of truth and wide-gamut fidelity. Light-mode
# values here are the canonical Brutalist register; dark-mode is the
# inverted-binary register and lives in the sidecar `tokens.css`.
canonical-canvas: light
selection:
mood: [high-contrast, industrial, spatial, monochrome]
tone: [dramatic, bold, irreverent, experimental]
formality: medium
density: low
canonical_canvas: light
best_for: |
Use for high-impact, low-copy artifacts that need a dramatic, bold, irreverent, experimental register with high-contrast, industrial, spatial, monochrome visual cues. Strongest when the reference can preserve its light canonical canvas instead of forcing the opposite polarity.
avoid_for: |
Avoid for reference-heavy reports, dense comparison tables, or artifacts where readers need many facts per screen.
colors:
background: "oklch(1 0 0)"
foreground: "oklch(0.10 0 0)"
card: "oklch(1 0 0)"
card-foreground: "oklch(0.10 0 0)"
popover: "oklch(1 0 0)"
popover-foreground: "oklch(0.10 0 0)"
primary: "oklch(0.55 0.22 25)"
primary-foreground: "oklch(1 0 0)"
secondary: "oklch(0.95 0 0)"
secondary-foreground: "oklch(0.10 0 0)"
muted: "oklch(0.95 0 0)"
muted-foreground: "oklch(0.40 0 0)"
accent: "oklch(0.92 0 0)"
accent-foreground: "oklch(0.10 0 0)"
destructive: "oklch(0.45 0.22 25)"
destructive-foreground: "oklch(1 0 0)"
border: "oklch(0.10 0 0)"
input: "oklch(0.10 0 0)"
ring: "oklch(0.55 0.22 25)"
chart-1: "oklch(0.55 0.22 25)"
chart-2: "oklch(0.10 0 0)"
chart-3: "oklch(0.45 0 0)"
chart-4: "oklch(0.70 0 0)"
chart-5: "oklch(0.35 0.10 25)"
sidebar: "oklch(0.97 0 0)"
sidebar-foreground: "oklch(0.10 0 0)"
sidebar-primary: "oklch(0.55 0.22 25)"
sidebar-primary-foreground: "oklch(1 0 0)"
sidebar-accent: "oklch(0.92 0 0)"
sidebar-accent-foreground: "oklch(0.10 0 0)"
sidebar-border: "oklch(0.10 0 0)"
sidebar-ring: "oklch(0.55 0.22 25)"
typography:
display:
fontFamily: "var(--font-sans)"
fontSize: "clamp(2.5rem, 6vw, 4rem)"
fontWeight: 900
lineHeight: 1.0
letterSpacing: "-0.02em"
heading:
fontFamily: "var(--font-sans)"
fontSize: "1.75rem"
fontWeight: 800
lineHeight: 1.05
letterSpacing: "-0.02em"
title:
fontFamily: "var(--font-sans)"
fontSize: "1.125rem"
fontWeight: 700
lineHeight: 1.2
letterSpacing: "-0.01em"
body:
fontFamily: "var(--font-sans)"
fontSize: "16px"
fontWeight: 400
lineHeight: 1.5
letterSpacing: "-0.02em"
label:
fontFamily: "var(--font-sans)"
fontSize: "0.8125rem"
fontWeight: 700
letterSpacing: "0.04em"
mono:
fontFamily: "var(--font-mono)"
fontSize: "0.875rem"
fontWeight: 400
rounded:
sm: "0"
md: "0"
lg: "0"
xl: "0"
spacing:
xs: "0.25rem"
sm: "0.5rem"
md: "1rem"
lg: "1.5rem"
xl: "2rem"
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.primary-foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.75rem 1.5rem"
button-primary-hover:
backgroundColor: "{colors.foreground}"
textColor: "{colors.primary-foreground}"
button-secondary:
backgroundColor: "{colors.background}"
textColor: "{colors.foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.75rem 1.5rem"
card:
backgroundColor: "{colors.card}"
textColor: "{colors.card-foreground}"
rounded: "{rounded.md}"
padding: "1.5rem"
input-text:
backgroundColor: "{colors.background}"
textColor: "{colors.foreground}"
rounded: "{rounded.md}"
padding: "0.625rem 0.875rem"
nav-link:
textColor: "{colors.foreground}"
typography: "{typography.label}"
nav-link-hover:
textColor: "{colors.primary}"
---
# Design System: Brutalist
## 1. Overview: The Manifesto Page
**Creative North Star: "The Manifesto Page"**
Brutalist is visualize's raw / high-contrast / grid-heavy / manifesto register — the aesthetic reference is late-2010s web brutalism on a confident day. Pure white background, near-pure-black foreground (oklch 0.10 — not the soft black of Clean's 0.145), a single cadmium-red `--primary` (hue 25, chroma 0.22 — exceeding the usual genre-reflex ceiling by design), hard borders carrying full-strength foreground, zero radius across the entire scale, the tightest leading in the catalogue (1.0 on display), and aggressive tracking (-0.02em) on the manifesto-headline stack.
This is the system for **opinionated reader-jobs** where the artifact has a point of view: manifesto-style One-pagers, raw-register Pitch decks (37signals-class brand fit), Comparison rolls with binary cell-states, grid-heavy Roadmap timelines, opinionated Release announcements. UPPERCASE display headings at 900 weight are the single load-bearing typographic move; reverting to sentence-case + 700 weight reads as "Clean with red trim," not manifesto.
Brutalist explicitly rejects: soft / pastel borders, rounded corners anywhere, gradient washes, multi-hue chart palettes, and conversational warmth in prose chrome. The hard-monochrome-plus-one-shout is the identity — anything that softens the contrast pulls the artifact out of register.
**Key Characteristics:**
- Pure-white background + near-pure-black foreground (oklch 0.10) — harder contrast than Clean (0.145) by design.
- Single cadmium-red `--primary` (hue 25, chroma 0.22) — the *single shout* of colour, deliberately exceeding the usual genre-reflex ceiling.
- Borders carry full-strength foreground (`--border` = `--foreground`) — hard-ruled blocks, not softened gray separators.
- Zero radius (`--radius: 0`) across the entire scale.
- Tightest leading in the catalogue: 1.0 on display, 1.5 on body. Aggressive tracking (-0.02em) on display.
- Hard-drop flat-offset shadows — zero-blur solid-color offsets evoking xerox-poster aesthetic. Cards sit *on* the page, not float above it.
## 2. Colors: The Black, White, and Shout
A binary palette: pure-white surface + near-pure-black foreground + a single cadmium-red shout. The chart palette stays monochrome with the red shout cameoing as chart-1.
### Primary
- **Cadmium Red** (`oklch(0.55 0.22 25)`): The single shout. Eyebrow chip on h1 + executive-summary, primary CTAs, inline emphasis, the rare red-pencil moment. Chroma 0.22 deliberately exceeds the usual genre-reflex cap — high chroma is the *point* of this register.
### Neutral
- **Pure White Background** (`oklch(1 0 0)`): Body surface. Not warm, not cream — pure white.
- **Near-Pure-Black Foreground** (`oklch(0.10 0 0)`): Primary text. Distinct from Clean's softer 0.145 — Brutalist is harder.
- **Pure Muted** (`oklch(0.95 0 0)`): Secondary surfaces, ambient panels.
- **Mid Gray Muted Foreground** (`oklch(0.40 0 0)`): Captions, supporting text.
- **Foreground Border** (`oklch(0.10 0 0)`): Borders share the foreground value — hard rules at full strength, not softened separators.
### State
- **Deeper Cadmium** (`oklch(0.45 0.22 25)`): Destructive actions. Same hue, deeper lightness — saturated enough that destructive feels load-bearing.
### Chart Palette (monochrome + the red shout)
- **`--chart-1` Cadmium Red** (`oklch(0.55 0.22 25)`, matches `--primary`), **`--chart-2` Black** (`oklch(0.10 0 0)`), **`--chart-3` Mid Gray** (`oklch(0.45 0 0)`), **`--chart-4` Light Gray** (`oklch(0.70 0 0)`), **`--chart-5` Dim Red** (`oklch(0.35 0.10 25)`): Monochrome chart palette with the red shout as chart-1. Categorical coding lives in weight + position, not hue.
### Named Rules
**The Single-Shout Rule.** Cadmium red is the only chroma in the system. `--chart-1` and the dim-red chart-5 are the same hue; every other surface and chart token stays 0-chroma. A second hue pulls Brutalist into "Clean with red trim" register — the manifesto identity dies.
**The Hard-Border Rule.** Borders share `--foreground` value (oklch 0.10). Softening borders to lighter gray reads as Clean; hard rules at full foreground strength are what makes the manifesto manifesto.
**The Genre-Reflex Opt-Out.** Brutalist's chroma-0.22 on `--primary` exceeds the usual ceiling by design. The opt-out is register-driven (high chroma IS the point), but template-by-template the genre-reflex guard still applies — *a Postmortem rendered on Brutalist must keep the calm retrospective register* (no full-bleed red escalate banner, no saturated red-fill destructive section).
## 3. Typography: UPPERCASE WEIGHT 900
**Display Font:** sans stack (Inter / Space Grotesk / IBM Plex Sans Condensed)
**Body Font:** same sans
**Mono Font:** mono stack (JetBrains Mono / Space Mono / ui-monospace)
**Character:** Sans everywhere. The manifesto identity comes from weight (900 on display, 800 on heading), tightest-in-catalogue leading (1.0 on display), aggressive tracking (-0.02em), and intentional UPPERCASE on display headings + section labels. Not from a face swap, not from a serif. Templates pair heavy weight with the cadmium-red eyebrow chip on opening sections.
### Hierarchy
- **Display** (sans, weight 900, `clamp(2.5rem, 6vw, 4rem)`, leading 1.0, tracking -0.02em): Hero manifesto titles. UPPERCASE is the convention here, not optional.
- **Heading** (sans, weight 800, 1.75rem, leading 1.05, tracking -0.02em): Section headings.
- **Title** (sans, weight 700, 1.125rem, leading 1.2, tracking -0.01em): Sub-section heads.
- **Body** (sans, weight 400, 16px, leading 1.5, tracking -0.02em): Paragraph copy. Tighter than Clean (-0.02em vs 0).
- **Label** (sans, weight 700, 0.8125rem, `letter-spacing: 0.04em`): UPPERCASE eyebrow / chip labels. Letter-spaced for the manifesto-chip feel.
- **Mono** (mono, weight 400, 0.875rem): Inline code.
### Named Rules
**The UPPERCASE-900-Rule.** Display headings render UPPERCASE at weight 900. Reverting to sentence-case or weight 700 reads as Clean with red trim — see Section 1. The manifesto-headline stack is identity-load-bearing.
**The Tightest-Leading Rule.** Display leading is 1.0. Tighter than Deck (1.05), tighter than every other system. Headlines stack as a wall of words.
## 4. Elevation
Hard-drop flat-offset shadows. Brutalist rejects soft blurred drop shadows — the shadow scale collapses to zero-blur solid-color offsets ("hard drop") evoking xerox-poster / risograph aesthetic. Cards sit *on* the page, not float above it.
### Shadow Vocabulary
- **`--shadow-sm`** (`0 2px 0 0 oklch(0.10 0 0)`): A 2px solid-black offset. The hairline manifesto card lift.
- **`--shadow-md`** (`0 6px 0 0 oklch(0.10 0 0)`), **`--shadow-lg`** (`0 8px 0 0`), **`--shadow-xl`** (`0 12px 0 0`), **`--shadow-2xl`** (`0 16px 0 0`): Stepped solid-color offsets.
### Named Rules
**The Hard-Drop Rule.** Shadows are zero-blur solid-color offsets. Soft blurred drop shadows belong to Clean / Editorial / Deck; Brutalist's shadows read as risograph / xerox poster, not as elevated chrome.
## 5. Components
### Buttons
- **Shape:** Square (`--radius: 0`). Brutalist has no rounded corners.
- **Primary:** Cadmium-red background, white text, weight 700 UPPERCASE label, padding 0.75rem 1.5rem. The CTA is the shout.
- **Hover:** Shifts to near-pure-black background.
- **Secondary:** White background, black text, full-foreground border. The ghost button with hard rules.
- **Focus:** Cadmium-red `--ring` outline.
### Cards & Containers
- **Corner Style:** Square (0). Cards rely on hard borders for separation.
- **Background:** `--card` (pure white, same as `--background`).
- **Border:** 1px or thicker in `--border` (= `--foreground`). Hard rules carry the structure.
- **Internal Padding:** 1.5rem default.
- **Hard-Drop Shadow:** Optional — `--shadow-sm` (2px solid-black offset) gives the manifesto-poster card lift.
### Inputs / Fields
- **Style:** Square (0 radius), 1px `--border` (full foreground), `--background`.
- **Focus:** Cadmium-red `--ring` border.
### Navigation
- **Style:** UPPERCASE sans label, weight 700, letter-spacing 0.04em.
- **States:** Default near-pure-black `--foreground`; hover shifts to cadmium-red `--primary`.
### Chart Palette + Inverted Panels
Monochrome + red-shout palette. Inverted panels ("EXECUTIVE SUMMARY") use foreground-fill background with primary-foreground text — the highest-contrast moment in any Brutalist artifact. Full-red-fill destructive alerts use `--destructive` as a fill, not a red-bordered card; the color does the work.
## 6. Do's and Don'ts
### Do:
- **Do** keep `--background` pure white and `--foreground` near-pure-black (oklch 0.10). The hard contrast is identity — harder than Clean's softer 0.145 by design.
- **Do** use UPPERCASE weight-900 display headings — see The UPPERCASE-900-Rule. Sentence-case + 700 weight reads as Clean with red trim.
- **Do** use the cadmium-red `--primary` as the single shout — eyebrow chip on h1 / executive-summary, primary CTAs, the one accent moment. The chroma-0.22 ceiling-bust is intentional.
- **Do** keep borders at full-foreground strength — hard ruled blocks, not soft separators.
- **Do** zero radius everywhere. Brutalist has no rounded corners.
- **Do** use hard-drop flat-offset shadows for card lift — see The Hard-Drop Rule.
- **Do** invert the executive-summary panel — foreground-fill background with primary-foreground text. Highest-contrast moment.
### Don't:
- **Don't** soften borders or use rounded corners. The hard rule + square edge IS the identity.
- **Don't** add gradient washes or backdrop-filter glassmorphism. Cadmium-red is the only chroma; everything else stays monochrome.
- **Don't** use multi-hue chart palettes. Monochrome plus the red-shout cameo as `--chart-1` is the move.
- **Don't** use soft blurred drop shadows. Hard-drop solid-color offsets only — see The Hard-Drop Rule.
- **Don't** soften the manifesto-headline stack to sentence-case + lighter weight. The UPPERCASE / 900 weight / tight leading is non-negotiable.
- **Don't** drop the genre-reflex guard for incident retrospectives. A Brutalist Postmortem keeps the calm register — no full-bleed red escalate banner.
- **Don't** pair Brutalist with conversational-warmth templates (Meeting notes, Onboarding module). The raw aesthetic undermines warm registers; reach for Editorial / Paper-ink instead.