Getting started

SLAB.

A neo-brutalist design system - high-contrast, raw, deliberately unpolished. SLAB rejects soft gradients, blurred shadows, and timid minimalism in favor of thick ink borders, hard offset shadows, and 100%-saturated color.

Vibe: bold, rebellious, structural, a little loud. Think Gumroad, Figma's design-system marketing, BeReal, Codecademy's AI Builder.

The fictional product surface used to demo the system is SLAB Studio - an AI site and asset builder. There is no underlying codebase; SLAB is an original neo-brutalist library.

Core principles

  • Thick ink borders. 2–6px solid, always #0B0B0B. The single most defining trait.
  • Hard offset shadows. Zero blur. Npx Npx 0 #0B0B0B. Shadows are structural, not atmospheric.
  • Full-strength color. No tinting or softening. Primaries at 100% saturation, flat, against black borders.
  • Snap motion. 90–150ms with a slight overshoot. Physical, mechanical - not smooth or floaty.
  • Warm neutrals. Paper is #FBF7EE, never cold gray. Ink is #0B0B0B, never pure black.

Getting started

Content Voice

Copy in SLAB matches the visual energy - imperative, punchy, confident. Short declaratives. Verbs first.

Writing rules

Rule Guidance Example
Voice Imperative, punchy, confident "Build it. Make it loud." "Ship it."
Person Speaks to you; 1st plural for product "Your storefront" / "our platform"
Casing Sentence case for headlines UPPERCASE for mono labels & eyebrows only
Numerals Raw and proud - don't spell out $48 in mono · ★ 1,280
Emoji None. Geometric glyphs only. ▸ → ★ · ✦
Punctuation Arrows & middots as structural separators SLAB STUDIO · AI BUILDER

Visual Foundations

Color

Full-saturation primaries used flat at full strength - no tinting, no shading, no softening. Colors live against black borders, never gradients.

Brand primaries

Lime
Pink
Violet
Yellow
Blue
Coral
Teal
Neon

Structural neutrals

Ink
Dark
Paper
Paper-2
White
Smoke

Pairing rule

  • Dark fills (violet / pink / coral / ink) → white or lime text
  • Bright fills (lime / yellow / blue) → ink-black text
  • Never tint or shade - use colors at full strength only
/* Semantic aliases */ --surface-canvas: var(--slab-paper); --surface-card: var(--slab-white); --text-strong: var(--slab-black); --text-muted: var(--slab-smoke); --border-ink: var(--slab-black); --action-primary: var(--slab-violet); /* State + foreground pairs */ --state-success: var(--slab-neon); --state-warning: var(--slab-yellow); --state-danger: var(--slab-coral); --state-info: var(--slab-blue); --state-success-on: var(--slab-black); /* ink on neon */ --state-warning-on: var(--slab-black); /* ink on yellow */ --state-danger-on: var(--slab-white); /* white on coral */ --state-info-on: var(--slab-black); /* ink on blue */

Visual Foundations

Typography

Two families only. Archivo for all UI and display - heavy weights, tight tracking, tight leading. Space Mono for labels, metadata, prices, code, and eyebrows - uppercase with wide tracking. No serif anywhere.

Hero SLAB.
Display Build it. Ship it.
H1 · 40px Component directory
H2 · 30px Visual foundations
Body · 16px The best UIs don't apologize for their presence.
Mono label NEO-BRUTALIST · v1.0 · 21 COMPONENTS
TokenValueUse
--font-display"Archivo"All UI, headlines, buttons
--font-body"Archivo"Body copy, descriptions
--font-mono"Space Mono"Labels, eyebrows, code, prices
--type-heroclamp(48px, 7vw, 96px)Landing / hero titles
--type-h140pxPage titles
--type-h230pxSection headers
--type-base16pxBody text
--tracking-label0.08emUppercase mono labels

Visual Foundations

Borders & Radii

The defining trait of SLAB. Ink-black, 2–6px, always solid. 3px is the workhorse. Ghost/empty states use a dashed border. Radii are minimal - square is the default mood.

TokenValueUse
--border-thin2pxDividers, secondary rules
--border-base3pxComponents - the workhorse
--border-thick4pxEmphasis, selected states
--border-mega6pxHero containers, top chrome
--radius-none0pxHard-edged tiles
--radius-sm4pxButtons, inputs, chips
--radius-md8pxCards, modals
--radius-lg14pxLarger cards only
--radius-pill999pxChips, suggestion buttons only
!
Ghost states - empty states and placeholder elements use a dashed ink or violet border, echoing Figma's selection box aesthetic.

Visual Foundations

Shadows

Hard offset, zero blur - Npx Npx 0 #0B0B0B. Shadows are structural, not atmospheric. There are no blurred or ambient shadows in this system, ever.

xs · 2px
sm · 4px
md · 6px
lg · 8px
xl · 12px
pink
violet
lime
yellow
coral
blue
--shadow-xs: 2px 2px 0 var(--slab-black); --shadow-sm: 4px 4px 0 var(--slab-black); --shadow-md: 6px 6px 0 var(--slab-black); --shadow-lg: 8px 8px 0 var(--slab-black); --shadow-xl: 12px 12px 0 var(--slab-black); /* Colored accent variants */ --shadow-pink: 6px 6px 0 var(--slab-pink); --shadow-violet: 6px 6px 0 var(--slab-violet); --shadow-lime: 6px 6px 0 var(--slab-lime-deep); --shadow-yellow: 6px 6px 0 var(--slab-yellow-deep); --shadow-coral: 6px 6px 0 var(--slab-coral); --shadow-blue: 6px 6px 0 var(--slab-blue-deep); --shadow-none: none;

Visual Foundations

Motion

Snappy with a touch of overshoot. Everything is mechanical and physical - not smooth or floaty. Hover lifts. Press slams.

Tokens

TokenValueUse
--ease-snapcubic-bezier(.2,.9,.3,1.3)All interactive motion - slight overshoot
--ease-outcubic-bezier(0,0,0.2,1)Standard deceleration - non-interactive reveals
--dur-fast90msHover, press states
--dur-base150msReveals, panel transitions
--dur-slow300msPanels, modals, deliberate transitions

Hover / Press mechanic

  • Hover: element lifts up-left translate(-2px, -2px) and hard shadow grows (xs → sm/md)
  • Press: element slams down into its own shadow - translate(4px, 4px) and shadow collapses to 0
  • No fades, no easing-into-place. Everything is mechanical.

Hover & click each button →

See the full motion reference at guidelines/motion.html →


Visual Foundations

Iconography

Geometric, single-weight glyphs. SLAB uses Unicode geometric symbols as icons, rendered in Archivo/Space Mono.

  • For richer production sets, substitute Lucide (CDN) at 2.5–3px stroke to match border weight
  • Or use Phosphor Bold - same heavy-stroke feel
  • Icons in square chips: ink border + hard shadow when used as app/integration tiles
  • Never draw icons with soft shadows or filled gradients

System

Components

21 components across 4 categories. Each has a spec page with variants, states, props, do/don't, live demos, and usage snippets.

Core

Forms

Feedback

UI / Complex

Browse all components at guidelines/components.html →


System

Guidelines

9 guideline pages covering every aspect of the system - from color to motion to dark mode.


System

UI Kits

5 ready-made product surfaces built entirely with SLAB components and tokens - fork them to start a new design.


Integrations

Integrations

SLAB is plain CSS + HTML - zero build step, zero dependencies. It drops into any toolchain. Here's how to wire it up with the most common tools.

Claude Code AI coding agent

Give Claude Code full SLAB context so it generates on-spec components without guessing token names.

  1. Copy SKILL.md to your project root as CLAUDE.md - Claude reads this file automatically as project instructions.
  2. Keep styles.css in your project scope so Claude can resolve all --slab-* token names before writing any var(--*).
  3. Reference tokens directly in prompts: "use --slab-violet for primary actions, --shadow-md for card elevation."
  4. For new variants, give Claude the spec page path as context: "following guidelines/components/button.html, add a loading state."
# CLAUDE.md - key rules excerpt Design system: SLAB neo-brutalist. - Import: styles.css - Borders: 3px solid var(--slab-black) always - Shadows: hard offset, 0 blur - var(--shadow-sm/md/lg) - Fonts: Archivo (display/UI) · Space Mono (labels) - Motion: var(--ease-snap) var(--dur-fast) on hover/press
Lovable AI app builder

Seed your Lovable project with SLAB's aesthetic rules so the AI generates on-brand components from message one.

  1. Create a new Lovable project and upload styles.css to the project root.
  2. Reference it in your app entry: <link rel="stylesheet" href="styles.css">
  3. In your very first message, paste the SLAB context block below - borders, shadows, fonts, and key colors.
  4. For specific components, paste the HTML source from a spec page in guidelines/components/ as reference.
# Lovable first-message context block Use the SLAB neo-brutalist design system: - Borders: 3px solid #0B0B0B on all interactive elements - Shadows: 4px 4px 0 #0B0B0B - hard offset, NO blur ever - Fonts: Archivo 800–900 (UI), Space Mono 700 (labels) - Colors: violet #5B36F5 · lime #C8F94E · pink #FF2EAE - Canvas: warm paper #FBF7EE, cards: white #FFFFFF - Hover: translate(-2px,-2px) + shadow grows - Press: translate(4px,4px) + shadow collapses to 0

System

Tokens & File Structure

Import styles.css once - it pulls in all token files. Everything is plain CSS custom properties; no build step required.

SLAB/ ├── styles.css ← global entry point - import this ├── tokens/ │ ├── colors.css ← --slab-* brand + semantic aliases │ ├── typography.css ← --font-*, --type-*, --tracking-* │ ├── spacing.css ← --space-*, --border-*, --radius-*, --shadow-* │ ├── fonts.css ← Archivo + Space Mono @font-face │ ├── base.css ← resets │ ├── animations.css ← @keyframes: skeleton, lift, slam, toast-in… │ ├── typography-elements.css ← h1–h6, p, ul, blockquote, code, hr │ ├── responsive.css ← breakpoint helpers │ ├── utilities.css ← containers, surfaces, borders, marquee, tilts │ └── theme-dark.css ← [data-theme="dark"] overrides ├── components/ │ ├── core/ ← Button, Card, Badge, Tag, IconButton │ ├── forms/ ← Input, Checkbox, Switch, Select │ ├── feedback/ ← Avatar, Callout, Tabs, Toast, Progress… │ └── ui/ ← Table, Modal, Tooltip, Stat, Breadcrumb… ├── guidelines/ │ ├── components.html ← searchable component directory │ ├── motion.html ← motion system + live demos │ └── … ← colors, type, spacing, forms, dark-mode └── ui_kits/ ├── studio/ ← SLAB Studio desktop app ├── studio-mobile/ ← responsive mobile layout ├── storefront/ ← e-commerce product surface ├── todo/ ← task manager app └── typography/ ← full type specimen
Fonts are loaded from Google Fonts (Archivo, Space Mono). Swap for self-hosted binaries if you need offline or production guarantees. Icons use geometric Unicode glyphs - wire up Lucide (bold, 2.5px stroke) for production icon sets.
utilities.css ships composable single-purpose classes: .container / .surface-* / .text-* / .border-*, plus the .slab-marquee ticker strip and .slab-tilt-* sticker rotation helpers. Import styles.css and they're ready - no extra import needed.
↑ Back to top