light · sans · monochrome · editorial · minimal

DESIGN.md inspired by Relume

Monochrome editorial — warm off-white, near-black, and oversized regular-weight display for an AI website builder.

By webdesignhot · www.relume.io
$ npx @webdesignhot/design-md add relume
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #f1f0ee
  • bg-soft #e9e8e5
  • bg-elev #f7f6f4
  • bg-dark #161616
  • bg-dark-2 #222222
  • surface #ffffff
  • surface-2 #e9e8e5
  • surface-dark #222222
  • text AAA · 15.9 #161616
  • text-strong #000000
  • text-muted #3e3e3e
  • text-soft #6b6b6b
  • text-faint — · 2.5 #9a9a9a
  • text-on-dark #ffffff
  • text-on-dark-muted #b8b8b8
  • text-on-brand #ffffff
  • brand AAA · 15.9 #161616
  • brand-hover #3e3e3e
  • brand-active #000000
  • brand-soft rgba(22,22,22,0.06)
  • on-brand #ffffff
  • border — · 1.3 rgba(22,22,22,0.12)
  • border-strong — · 1.7 rgba(22,22,22,0.24)
  • border-soft rgba(22,22,22,0.06)
  • border-dark rgba(255,255,255,0.14)
  • success #1f7a4d
  • success-bg #e3f0e9
  • warning #8a6d1f
  • warning-bg #f2ecd9
  • danger #9a2a2a
  • danger-bg #f2e0e0
  • info #161616
  • info-bg rgba(22,22,22,0.06)
Typography
Ship faster than ever.
display-hero "Relative Faux" 88px w400 -0.02em
Ship faster than ever.
display-lg "Relative Faux" 64px w400 -0.018em
Ship faster than ever.
h1 "Relative Faux" 56px w400 -0.016em
Built for teams that ship.
h2 "Relative" 40px w500 -0.012em
A complete kit
h3 "Relative" 28px w500 -0.008em
The quick brown fox jumps over the lazy dog.
h4 "Relative" 22px w500 -0.004em
The quick brown fox jumps over the lazy dog.
h5 "Relative" 18px w600 0
The quick brown fox jumps over the lazy dog.
body-lg "Relative" 18px w400 0
The quick brown fox jumps over the lazy dog.
body "Relative" 16px w400 0
The quick brown fox jumps over the lazy dog.
body-sm "Relative" 14px w400 0
OUR DESIGN SYSTEM
label "Relative" 14px w500 0
npx @webdesignhot/design-md add stripe
code ui-monospace 14px w400 0
OUR DESIGN SYSTEM
caption "Relative" 13px w500 0
The quick brown fox jumps over the lazy dog.
eyebrow "Relative" 13px w500 0.04em
Spacing
  • step-0 0px
  • step-1 4px
  • step-2 8px
  • step-3 12px
  • step-4 16px
  • step-5 24px
  • step-6 32px
  • step-7 48px
  • step-8 64px
  • step-9 80px
  • step-10 96px
  • step-11 128px
Radius
  • micro 2px
  • sm 4px
  • md 8px
  • lg 12px
  • xl 16px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 8/8 mapped · webdesignhot/0.1

Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.

  • background bg
  • foreground text
  • primary brand
  • primary-foreground on-brand
  • accent text-soft
  • muted text-muted
  • border border
  • ring brand
Export 4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

:root { --bg, --text, --brand, … } you can paste anywhere

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: Relume
tagline: Monochrome editorial — warm off-white, near-black, and oversized regular-weight display for an AI website builder.
updated_at: 2026-05-29T21:44:54.486Z
published_at: 2026-05-29T21:44:54.486Z
author: webdesignhot
source_url: https://www.relume.io
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [design-tools, dev-tools]
tags: [light, sans, monochrome, editorial, minimal]
preview_swatch: ['#f1f0ee', '#161616', '#3e3e3e']
related: [webflow, framer, figma]
description: 'Relume''s site sits on a warm off-white `#f1f0ee` canvas with near-black `#161616` doing every chromatic job at once — text, brand, and CTA fill. The signature move is oversized display type set in the bespoke "Relative Faux" grotesk at 88px / regular 400 weight, with "Relative" carrying body. No accent colour, no gradient: the whole system is off-white-plus-black monochrome editorial, with a single 8px radius on the black "Start for free" button. It reads like a design-system manual that happens to sell an AI website builder.'


# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  primary-foreground: on-brand
  accent: text-soft
  muted: text-muted
  border: border
  ring: brand
colors:
  # Primary
  bg: '#f1f0ee'                    # warm off-white marketing canvas
  bg-soft: '#e9e8e5'              # slightly deeper off-white stripe
  bg-elev: '#f7f6f4'             # lifted near-white panel
  bg-dark: '#161616'             # near-black inverted band / footer
  bg-dark-2: '#222222'           # softer dark (code block, secondary inversion)
  surface: '#ffffff'             # pure-white card on off-white canvas
  surface-2: '#e9e8e5'           # second-level neutral panel
  surface-dark: '#222222'        # dark-band card

  # Text
  text: '#161616'                # body + headlines, warm near-black
  text-strong: '#000000'         # rare maximal-contrast emphasis
  text-muted: '#3e3e3e'          # captions, secondary copy
  text-soft: '#6b6b6b'           # tertiary / meta
  text-faint: '#9a9a9a'          # disabled / placeholder ink
  text-on-dark: '#ffffff'        # white on near-black band
  text-on-dark-muted: '#b8b8b8'  # muted on dark
  text-on-brand: '#ffffff'       # white on black CTA

  # Brand (monochrome — black IS the brand)
  brand: '#161616'              # near-black — CTA fill, the whole brand surface
  brand-hover: '#3e3e3e'         # CTA hover (matches live --hoverBackground)
  brand-active: '#000000'        # pressed
  brand-soft: 'rgba(22,22,22,0.06)'  # faintest near-black wash for tints
  on-brand: '#ffffff'           # white label on the black button

  # Neutrals / borders
  border: 'rgba(22,22,22,0.12)'  # hairline — near-black at low alpha
  border-strong: 'rgba(22,22,22,0.24)'  # emphasis hairline
  border-soft: 'rgba(22,22,22,0.06)'   # softest divider
  border-dark: 'rgba(255,255,255,0.14)'  # hairline on dark band

  # Semantic (kept neutral-leaning to protect monochrome identity)
  success: '#1f7a4d'
  success-bg: '#e3f0e9'
  warning: '#8a6d1f'
  warning-bg: '#f2ecd9'
  danger: '#9a2a2a'
  danger-bg: '#f2e0e0'
  info: '#161616'
  info-bg: 'rgba(22,22,22,0.06)'

typography:
  display:
    family: '"Relative Faux", "Relative", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600]
  body:
    family: '"Relative", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600]
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 88, weight: 400, lineHeight: 1.0,  tracking: '-0.02em',  family: display }
    display-lg:      { size: 64, weight: 400, lineHeight: 1.05, tracking: '-0.018em', family: display }
    h1:              { size: 56, weight: 400, lineHeight: 1.08, tracking: '-0.016em', family: display }
    h2:              { size: 40, weight: 500, lineHeight: 1.15, tracking: '-0.012em', family: body }
    h3:              { size: 28, weight: 500, lineHeight: 1.25, tracking: '-0.008em', family: body }
    h4:              { size: 22, weight: 500, lineHeight: 1.3,  tracking: '-0.004em', family: body }
    h5:              { size: 18, weight: 600, lineHeight: 1.4,  tracking: '0',        family: body }
    body-lg:         { size: 18, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    label:           { size: 14, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    eyebrow:         { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0.04em',   family: body }
    code:            { size: 14, weight: 400, lineHeight: 1.6,  tracking: '0',        family: mono }

radius:
  micro: 2
  sm: 4
  md: 8
  lg: 12
  xl: 16
  pill: 9999

spacing:
  base: 4
  scale: [0, 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128]

layout:
  page-width: 1280
  prose-width: 720
  header-height: 72
  hero-y: 140
  section-y: 120
  gutter: 32

components:
  button-primary:
    bg: '#161616'
    text: '#ffffff'
    radius: 8
    paddingX: 20
    paddingY: 12
    font: 'Relative 500 / 15px'
    hover: 'bg #3e3e3e'
  button-secondary:
    bg: 'transparent'
    text: '#161616'
    border: '1px solid rgba(22,22,22,0.24)'
    radius: 8
    paddingX: 20
    paddingY: 12
    hover: 'bg rgba(22,22,22,0.06)'
  button-ghost:
    bg: 'transparent'
    text: '#161616'
    radius: 8
    paddingX: 16
    paddingY: 10
    hover: 'bg rgba(22,22,22,0.06)'
  button-inverted:
    bg: '#ffffff'
    text: '#161616'
    radius: 8
    paddingX: 20
    paddingY: 12
    use: 'primary action on the dark #161616 band'
  card-default:
    bg: '#ffffff'
    radius: 12
    padding: 24
    border: '1px solid rgba(22,22,22,0.12)'
    shadow: 'none'
  card-dark:
    bg: '#222222'
    text: '#ffffff'
    radius: 12
    padding: 24
    border: '1px solid rgba(255,255,255,0.14)'
    shadow: 'none'
  input-text:
    bg: '#ffffff'
    border: '1px solid rgba(22,22,22,0.24)'
    radius: 8
    paddingX: 12
    paddingY: 10
    focus: 'border #161616 + ring 2px rgba(22,22,22,0.2)'
    placeholder: 'rgba(22,22,22,0.4)'
  badge:
    bg: 'rgba(22,22,22,0.06)'
    text: '#161616'
    radius: 9999
    paddingX: 10
    paddingY: 4
    font: 'Relative 500 / 12px'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-soft: 'cubic-bezier(0.45, 0, 0.55, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  reduced-motion: 'respects prefers-reduced-motion: reduce — scroll reveals collapse to opacity-only, hover lifts disabled, marquee/auto-scroll halted'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  none: 'none'
  ambient: '0 1px 2px rgba(22,22,22,0.05)'
  standard: '0 4px 16px rgba(22,22,22,0.08)'
  elevated: '0 12px 32px rgba(22,22,22,0.12)'
  ring: '0 0 0 2px rgba(22,22,22,0.4)'
  ring-dark: '0 0 0 2px rgba(255,255,255,0.6)'

accessibility:
  contrast-text-on-bg: 16.0           # AAA — #161616 on #f1f0ee
  contrast-muted-on-bg: 9.6           # AAA — #3e3e3e on #f1f0ee
  contrast-soft-on-bg: 5.2            # AA — #6b6b6b on #f1f0ee
  contrast-on-brand: 16.4             # AAA — #ffffff on #161616
  contrast-text-on-dark: 16.4         # AAA — #ffffff on #161616
  focus-ring: '2px solid #161616 with 2px offset (white on dark band)'
  reduced-motion-honored: true
  keyboard-nav: 'visible focus on every interactive; tab order matches DOM source'

dark-mode: inverted-bands              # off-white canvas with #161616 inverted sections rather than a global toggle
---

## 1. Visual Theme & Atmosphere

Relume's site opens on a warm off-white `#f1f0ee` canvas — not pure white, not cool grey, but a paper-stock cream with a faint warmth that reads as printed broadsheet rather than software UI. Against it, a single warm near-black `#161616` does every chromatic job in the system at once: it sets all the body copy, all the headlines, the hairlines, and the fill of the one button that matters — the black "Start for free" CTA with white label. There is no accent colour. There is no gradient. The entire identity is the off-white-and-black pair, and the discipline of refusing a third hue is the whole point.

The signature gesture is **oversized regular-weight display type**. The hero headline is set in the bespoke "Relative Faux" grotesk at 88px — but at weight 400, not the 700 most marketing sites reach for. That regular-weight giant type is the editorial tell: it reads like a magazine masthead or a design-school thesis cover, confident enough that it does not need to shout in bold. Body type is "Relative" at a calm 16px / 1.55, and section headings (h2) drop to "Relative" at 40px / 500 — slightly heavier, but still restrained. The two-family system is one superfamily: Relative Faux for display, Relative for everything else.

The voice is **design-system-manual-as-product-page**. Relume sells an AI website builder and a component library for Webflow and Figma, so its own marketing has to demonstrate taste before it claims to generate it. The layout is gridded, the vertical rhythm is generous, and the only ornament is the type itself. Where Webflow lets a single indigo-violet gradient in and Framer plays a loud chromatic quartet, Relume goes further toward Vercel's restraint — but warmer, on cream rather than white, and with no chromatic accent at all. The closest reference is a printed type-specimen booklet.

The atmosphere is **warm-editorial-minimal**. The cream canvas softens what would otherwise be a stark black-on-white system; the warmth keeps it human rather than clinical. Inverted `#161616` bands appear for footers, dark feature reveals, and code-adjacent contexts (the live `--code-block-background` is `#222`), flipping the same monochrome pair so white type sits on near-black. The off-white-plus-black partnership is the system; everything else is layout, scale, and the regular-weight grotesk.

**Key Characteristics**
- Warm off-white `#f1f0ee` canvas — paper-cream, never pure white, never cool
- Near-black `#161616` does text, brand, hairlines, and CTA fill all at once
- Oversized **regular-weight** display: Relative Faux 88px / 400 — the editorial tell
- Relative Faux (display) + Relative (body) — a single grotesk superfamily
- Zero accent colour, zero gradient — monochrome is the identity, by refusal
- One black "Start for free" CTA at 8px radius with white label
- Inverted `#161616` bands for footer and dark feature reveals
- Hairlines are near-black at low alpha (`rgba(22,22,22,0.12)`), never grey-blue
- No shadows on cards — depth is hairline + tonal, not elevation
- Reads like a printed type-specimen booklet, not a SaaS landing page

## 2. Color Palette & Roles

### Primary / Canvas

- **bg** (`#f1f0ee`): the warm off-white marketing canvas — the brand's base note
- **bg-soft** (`#e9e8e5`): a slightly deeper off-white for alternating stripes
- **bg-elev** (`#f7f6f4`): a lifted near-white panel for subtle separation
- **bg-dark** (`#161616`): near-black inverted band — footer and dark feature reveals
- **bg-dark-2** (`#222222`): softer dark for code blocks and secondary inversions (live `--code-block-background`)
- **surface** (`#ffffff`): pure white cards, which read crisp against the cream canvas
- **surface-2** (`#e9e8e5`): second-level neutral panel

### Text

- **text** (`#161616`): body and headlines — warm near-black, the workhorse ink
- **text-strong** (`#000000`): rare maximal-contrast emphasis
- **text-muted** (`#3e3e3e`): captions and secondary copy (matches live hover tone)
- **text-soft** (`#6b6b6b`): tertiary and meta labels
- **text-faint** (`#9a9a9a`): disabled and placeholder ink
- **text-on-dark** (`#ffffff`): white on the `#161616` inverted band
- **text-on-brand** (`#ffffff`): white label on the black CTA

### Brand (monochrome — black IS the brand)

- **brand** (`#161616`): near-black — the CTA fill and the entire brand surface
- **brand-hover** (`#3e3e3e`): CTA hover, exactly the live `--hoverBackground` `rgb(62,62,62)`
- **brand-active** (`#000000`): pressed
- **brand-soft** (`rgba(22,22,22,0.06)`): faintest near-black wash for badge/tint backgrounds
- **on-brand** (`#ffffff`): white label on the black button

There is no separate accent hue. Relume's "accent" is the absence of one — emphasis is created with **scale, weight, and the inverted band**, never with colour. Treat any request for a coloured accent as off-brand.

### Interactive

- **link**: `#161616` — same as text, distinguished by underline rather than colour
- **link-hover**: `#3e3e3e` with underline-grow
- **link-on-dark**: `#ffffff` with 1px underline
- **selected**: `rgba(22,22,22,0.06)` — soft near-black tint
- **disabled**: `#9a9a9a` text on `rgba(22,22,22,0.04)` bg

### Neutral Scale

- **text** `#161616` — body
- **text-muted** `#3e3e3e` — captions and meta
- **text-soft** `#6b6b6b` — tertiary
- **text-faint** `#9a9a9a` — disabled
- **border** `rgba(22,22,22,0.12)` — hairline, near-black at low alpha
- **border-strong** `rgba(22,22,22,0.24)` — emphasis hairline
- **border-soft** `rgba(22,22,22,0.06)` — softest divider

### Surface & Borders (Dark Band)

- **surface-dark** `#222222` — dark-band card
- **border-dark** `rgba(255,255,255,0.14)` — hairline on the inverted band
- **text-on-dark** `#ffffff` — white on near-black
- **text-on-dark-muted** `#b8b8b8` — muted white on near-black

### Shadow Colours

Relume's depth is **near-shadowless**. Cards sit on hairlines, not elevation. Where a faint lift is used, the shadow is warm near-black at very low alpha (`rgba(22,22,22,0.08)`) — never cool, never blue-tinted. The default card has *no* shadow at all.

### Semantic

Semantics are kept **neutral-leaning** to protect the monochrome identity — desaturated, dark-toned, used only in product UI (forms, validation), never in marketing.

- **success** `#1f7a4d` on `#e3f0e9`
- **warning** `#8a6d1f` on `#f2ecd9`
- **danger** `#9a2a2a` on `#f2e0e0`
- **info** `#161616` on `rgba(22,22,22,0.06)` — reuses the near-black

## 3. Typography Rules

### Font Family

- **Display**: Relative Faux — bespoke grotesk used for oversized headlines; its defining trait is that it is set at **regular 400 weight even at giant sizes**
- **Body**: Relative — the matching text-weight grotesk; handles all body, label, caption, and most section headings
- **Mono**: system monospace (ui-monospace / SF Mono / Menlo) — code blocks and the `#222` code surface only
- The two faces are one superfamily — Relative Faux is the display cut of Relative, so the pairing is seamless rather than contrasting

### Hierarchy

| Role | Font | Size | Weight | Line H | Tracking | Notes |
|---|---|---|---|---|---|---|
| display-hero | Relative Faux | 88 | 400 | 1.0 | -0.02em | Above-fold hero — the signature regular-weight giant |
| display-lg | Relative Faux | 64 | 400 | 1.05 | -0.018em | Section opener |
| h1 | Relative Faux | 56 | 400 | 1.08 | -0.016em | Page title |
| h2 | Relative | 40 | 500 | 1.15 | -0.012em | Feature header (live h2 = Relative 40/500) |
| h3 | Relative | 28 | 500 | 1.25 | -0.008em | Card title |
| h4 | Relative | 22 | 500 | 1.3 | -0.004em | Inline title |
| h5 | Relative | 18 | 600 | 1.4 | 0 | Component label |
| body-lg | Relative | 18 | 400 | 1.55 | 0 | Hero subhead |
| body | Relative | 16 | 400 | 1.55 | 0 | Default paragraph (live body = Relative 16/400) |
| body-sm | Relative | 14 | 400 | 1.5 | 0 | Captions |
| label | Relative | 14 | 500 | 1.4 | 0 | Form and button labels |
| caption | Relative | 13 | 500 | 1.4 | 0 | Meta below cards |
| eyebrow | Relative | 13 | 500 | 1.4 | 0.04em | Section taglines |
| code | mono | 14 | 400 | 1.6 | 0 | Inline code, code blocks |
| code-micro | mono | 12 | 500 | 1.5 | 0 | Version strings |

### Principles

- **Display stays at weight 400, even at 88px** — the regular-weight giant is the brand's whole typographic signature; reaching for 700 erases it
- **Relative Faux only for display ≥48px** — below that, switch to Relative; the display cut's character lives at scale
- **Headings (h2+) use Relative 500, not Relative Faux** — section headers are the heavier text face, not the lighter display face
- **Tracking is moderate-negative** — `-0.02em` at hero, easing toward 0 by body
- **No serif, no second family** — the superfamily carries everything; contrast comes from scale, not from face-switching
- **Body at 16px / 1.55** — calm, readable, never inflated for cinematic effect
- **Emphasis is scale, not colour** — there is no coloured accent to lean on, so size and weight do all the hierarchy work
- **Eyebrows tracked +0.04em** — the only positive-tracking move, used for small section labels

## 4. Component Stylings

### Buttons

**Primary CTA** — the black rectangle (live: "Start for free")
- bg `#161616`, text `#ffffff`, radius `8px`
- padding `12px 20px`, Relative 500 15px
- hover: bg `#3e3e3e` (live `--hoverBackground`), 240ms ease-standard
- focus: ring `2px solid #161616` + 2px offset
- use: every primary action — "Start for free", "Get started", "Sign up"

**Secondary Button**
- bg transparent, text `#161616`, border `1px solid rgba(22,22,22,0.24)`, radius `8px`
- padding `12px 20px`, Relative 500 15px
- hover: bg `rgba(22,22,22,0.06)`
- use: secondary action — "Book a demo", "See pricing"

**Ghost Button**
- bg transparent, text `#161616`, radius `8px`, no border
- padding `10px 16px`
- hover: bg `rgba(22,22,22,0.06)`
- use: tertiary / inline actions

**Inverted Button** (on the dark `#161616` band)
- bg `#ffffff`, text `#161616`, radius `8px`
- padding `12px 20px`
- hover: bg `#e9e8e5`
- use: primary action sitting on the near-black band — the monochrome pair simply flips

### Cards

**Card Default**
- bg `#ffffff`, radius `12px`, padding `24px`
- border `1px solid rgba(22,22,22,0.12)`, **no shadow** (depth is the hairline)
- hover: border `rgba(22,22,22,0.24)` — colour deepens, no lift

**Card Dark** (on the inverted band)
- bg `#222222`, text `#ffffff`, radius `12px`, padding `24px`
- border `1px solid rgba(255,255,255,0.14)`, no shadow
- hover: bg `#2a2a2a` — tonal, not elevation

**Card Feature** (component-library preview tile)
- bg `#ffffff`, radius `12px`, padding `0` (image bleeds to edge)
- 1px hairline frame, label row in Relative 14 `#3e3e3e` below

### Badges & Tags

**Badge Default**
- bg `rgba(22,22,22,0.06)`, text `#161616`, radius `9999px`
- padding `4px 10px`, Relative 500 12px

**Badge Inverted** (on dark band)
- bg `rgba(255,255,255,0.1)`, text `#ffffff`, radius `9999px`
- padding `4px 10px`, Relative 500 12px

**Tag Eyebrow**
- bg transparent, text `#3e3e3e`, radius `0`
- Relative 13px / 0.04em, used as small section labels

### Inputs & Forms

**Text Input**
- bg `#ffffff`, border `1px solid rgba(22,22,22,0.24)`, radius `8px`
- padding `10px 12px`, Relative 400 16px
- focus: border `#161616` + ring `2px rgba(22,22,22,0.2)`
- placeholder: `rgba(22,22,22,0.4)` (live `--placeholderColor` is `color-mix` of `#161616` at 60% transparent)

**Search Input**
- bg `#ffffff`, border `1px solid rgba(22,22,22,0.12)`, radius `8px`
- inline magnifier left, padding `10px 12px 10px 36px`

### Navigation

**Top Nav**
- bg `#f1f0ee` (transparent over hero, solidifies on scroll), height `72px`, gutters `32px`
- Relume wordmark left, link nav center (Product / Library / Pricing / Resources), CTAs right (black "Start for free" primary + ghost "Log in")
- hairline `rgba(22,22,22,0.12)` bottom on scroll
- mobile: hamburger right-aligned, full-height drawer

**Footer**
- bg `#161616`, padding `96px 32px`
- multi-column white link grid in Relative 14, muted `#b8b8b8` headers
- Relume wordmark + © at bottom — the inverted band closes the page

### Tabs / Tooltips / Toasts

**Tab Group**
- underline-style: 2px `#161616` on active, hairline `rgba(22,22,22,0.12)` on rest
- text `#161616` active, `#6b6b6b` rest

**Tooltip**
- bg `#161616`, text `#ffffff`, radius `8px`, padding `8px 12px`, Relative 500 12px

**Toast**
- bg `#ffffff`, border `1px solid rgba(22,22,22,0.12)`, radius `12px`, shadow standard
- 16px Relative 500 message, 14px muted body

## 5. Layout Principles

### Spacing System

- **base** `4px`, scale `[0, 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128]`
- Density philosophy: **calm-editorial**. Section vertical rhythm holds at 120px — spacious enough to read as a type-specimen booklet, tighter than Framer's cinematic 160.

### Grid & Container

- **page-width** `1280px` with 32px gutters
- 12-column grid; component-library showcases use a denser tile grid
- Hero zones bleed full-width but reset to 1280 for content
- **prose-width** `720px` — for blog, docs, and changelog

### Whitespace Philosophy

Relume's whitespace is **the frame around the type**. The oversized regular-weight display needs air to breathe, so headlines get generous margins above and below. Cards carry 24px internal padding. With no colour to carry attention, whitespace and scale do the visual work — the cream canvas is allowed to dominate.

### Section Cadence

The page alternates the same monochrome pair:
1. Off-white `#f1f0ee` hero with 88px regular-weight headline + black CTA
2. Off-white feature row with hairline-bordered white cards
3. Off-white component-library grid (the product-as-protagonist tiles)
4. Inverted `#161616` dark feature reveal with white type
5. Off-white pricing / testimonial wall
6. Inverted `#161616` footer

The off-white / near-black alternation is the rhythm — never a third tone, never a coloured band.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Inline code corners |
| Small | 4px | Small badges, chips |
| Medium | 8px | **Buttons, inputs** — Relume's default (live CTA = 8px) |
| Large | 12px | **Cards** — the signature card radius |
| XL | 16px | Featured panels, modals |
| Pill | 9999px | Avatars, tag badges |

The radius ladder is **moderate-restrained**. The black CTA's 8px corner is the one hard data point from the live probe; cards step up to 12px. Nothing in the system goes pillow-soft — the editorial register favours crisp, near-square corners over heavy rounding.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 | Flat — no shadow, no border | Display copy on canvas |
| 1 | 1px hairline `rgba(22,22,22,0.12)` | Resting card borders, dividers |
| 2 | Hairline deepens to `rgba(22,22,22,0.24)` | Card hover (no lift) |
| 3 | shadow-ambient `0 1px 2px rgba(22,22,22,0.05)` | Sticky nav on scroll |
| 4 | shadow-standard `0 4px 16px rgba(22,22,22,0.08)` | Dropdowns, toasts |
| 5 | shadow-elevated `0 12px 32px rgba(22,22,22,0.12)` | Modals, overlays |

### Shadow Philosophy

Relume's depth on the off-white canvas is **hairline-first, near-shadowless**. The default card has no shadow at all — it sits in a 1px `rgba(22,22,22,0.12)` near-black hairline, and on hover the hairline deepens rather than the card lifting. This flat, bordered treatment is the editorial discipline: depth reads as printed registration marks, not as floating UI. Shadows appear only on transient overlays (dropdowns, modals, toasts), and even then they are warm near-black at low alpha — never cool, never blue-tinted. Dark-band cards lean entirely on tonal layering (`#222` on `#161616`) with a faint white hairline.

## 8. Interaction & Motion

### Easing Curves

- **ease-standard** `cubic-bezier(0.4, 0, 0.2, 1)` — most state changes
- **ease-emphasized** `cubic-bezier(0.2, 0, 0, 1)` — modal entry, section reveal
- **ease-soft** `cubic-bezier(0.45, 0, 0.55, 1)` — symmetric breathing

### Duration Buckets

- **fast** `150ms` — button hover, link state
- **standard** `240ms` — card hover, dropdown reveal
- **slow** `320ms` — modal entry, scroll section reveal

### Per-Component Recipes

- **Primary CTA hover**: bg `#161616` → `#3e3e3e`, 150ms ease-standard (live hover tone)
- **Card hover**: hairline `rgba(22,22,22,0.12)` → `rgba(22,22,22,0.24)`, 240ms — colour deepens, no translateY
- **Link hover**: underline grow + colour `#161616` → `#3e3e3e`, 150ms
- **Dropdown reveal**: fade + 4px down, 240ms ease-emphasized
- **Section reveal on scroll**: fade-up 12px, 320ms ease-emphasized
- **Component-library marquee**: slow auto-scroll loop of preview tiles (halts under reduced-motion)

### Page Transitions

- Section reveals on scroll: fade-up 12px, 320ms slow
- Sticky nav: off-white bg + hairline fade-in on scroll past hero, 150ms
- Inverted band entry: white type fades up as the `#161616` band scrolls in

### Reduced Motion Strategy

Relume respects `prefers-reduced-motion: reduce`:
- Scroll-triggered reveals: opacity-only, no translate
- Component-library marquee / auto-scroll: halted (static grid)
- Hover lifts: disabled — colour/hairline changes only
- Sticky nav: instant background change

## 9. Accessibility & A11y

### Contrast Pairs

- text `#161616` on bg `#f1f0ee`: **16.0** — AAA all sizes
- text-muted `#3e3e3e` on bg `#f1f0ee`: **9.6** — AAA
- text-soft `#6b6b6b` on bg `#f1f0ee`: **5.2** — AA body, AAA large
- on-brand `#ffffff` on brand `#161616`: **16.4** — AAA (the black CTA)
- text-on-dark `#ffffff` on bg-dark `#161616`: **16.4** — AAA
- text-on-dark-muted `#b8b8b8` on bg-dark `#161616`: **7.6** — AAA
- text `#161616` on surface `#ffffff`: **17.4** — AAA (white cards)

The monochrome system is an accessibility win — every primary text/background pair clears AAA by a wide margin. The only care point is `text-faint` `#9a9a9a` on `#f1f0ee` (~2.6), which must stay reserved for disabled/decorative ink, never functional text.

### Focus Indicators

- 2px solid `#161616` with 2px offset on the off-white canvas
- On the dark band: 2px solid `#ffffff` with 2px offset (live `--buttonFocusColor` is `#ffffff`)
- Visible on every interactive
- Never `outline: none` without a replacement

### ARIA Patterns

- Dropdown nav: `aria-haspopup="menu"` + `aria-expanded`
- Modal dialogs: `role="dialog"` + `aria-modal="true"` + `aria-labelledby` + focus trap
- Tab group: `role="tablist"` + `aria-orientation` + `aria-controls`
- Component-library tiles: each preview as a labelled link/button, not a bare image
- Decorative dividers: `aria-hidden="true"`

### Keyboard Nav

- Tab order matches DOM source
- ENTER/SPACE activate buttons
- ARROW navigates within tab groups and menus
- ESC closes modals/dropdowns
- All interactives reachable in the tab cycle

### Screen Reader Hints

- Relume wordmark SVG: `<title>Relume</title>`
- Component-library previews: `<img alt>` describing the component shown
- Eyebrow labels are semantic spans, not headings
- Skip-to-content link at top, visible on focus

### Reduced Motion

- Honored across the site
- Marquee, parallax, scroll reveals: disabled or opacity-only
- Hover lifts: disabled

## 10. Responsive Behavior

### Breakpoints

| Tier | Min-width | Use |
|---|---|---|
| mobile | 0–639px | Single-column stack |
| tablet | 640–1023px | 2-column feature / tile grid |
| desktop | 1024–1279px | Full 12-column |
| wide | 1280px+ | Container caps at 1280, generous gutters |

### Touch Targets

Minimum 44×44px on mobile. The black CTA scales padding from `12px 20px` (desktop) to `14px 22px` (mobile) for a comfortable 48px tap area.

### Collapsing Strategy

- **Hero display**: 88px → 64px → 48px → 36px down the cascade — but always at weight 400
- **Feature / library grid**: 3-col → 2-col → 1-col
- **Top nav**: full link nav → right-aligned hamburger drawer at <1024px
- **Section vertical rhythm**: 120px → 80px → 56px
- **Inverted bands**: preserved on mobile (the monochrome pair is identity-critical)

### Image Behavior

- Component-library tiles: aspect-ratio 16:10, `object-fit: cover`, 1px hairline frame
- Wordmark and partner logos: monochrome SVG, never coloured
- Avatar images: 40×40 circular

### Container Queries

Component-library grids use container queries so preview tiles reflow by available width (4-up → 3-up → 2-up) independent of the page breakpoint.

## 11. Content & Voice

### Tone

**Designer-direct, quietly confident.** Relume speaks to designers and builders who already have taste and want speed. The copy is plain and craft-anchored — "designed & built faster with AI" rather than "revolutionize your workflow". It states what the tool does and trusts the type and the cream canvas to carry the polish. No exclamation marks, no buzzword stacking.

### Microcopy Patterns

- **Button verbs**: "Start for free", "Book a demo", "Get started", "Log in", "See pricing"
- **Empty states**: "No projects yet — start your first to begin." (Direct invitation.)
- **Errors**: "Something went wrong. Please try again." (Calm, no jargon.)
- **Success**: "Generated." / "Saved." (Past tense, terse.)
- **Loading**: "Generating your site…" (Verb in progress.)

### CTA Verb Conventions

Relume leads with **"Start for free"** as the primary CTA across hero, pricing, and footer — the exact live label, in the black button. Secondary is **"Book a demo"**. For the library: **"Browse components"**, **"Open in Figma"**, **"Open in Webflow"**. The verbs are short and concrete; the AI angle is stated once, not repeated.

### Empty States

Quiet invitations, no illustrations: "No sitemaps yet — generate your first." The design stays functional and type-forward, in keeping with the editorial restraint.

## 12. Dark Mode & Theming

Relume's marketing site ships **inverted monochrome bands** rather than a global dark-mode toggle. The page flips between the off-white `#f1f0ee` canvas and the near-black `#161616` band; the same two-colour system simply inverts, so white type sits on near-black for footers and dark feature reveals. The token swap inside any `<section data-theme="dark">`:

```yaml
colors-dark:
  bg: '#161616'
  bg-elev: '#222222'
  surface: '#222222'
  surface-2: '#2a2a2a'
  text: '#ffffff'
  text-muted: '#b8b8b8'
  text-soft: '#8a8a8a'
  brand: '#ffffff'              # the CTA inverts — white button, black label
  on-brand: '#161616'
  border: 'rgba(255,255,255,0.14)'
  border-strong: 'rgba(255,255,255,0.24)'
```

Because the system is already monochrome, inversion is trivial and lossless — there is no accent hue to remap. On the dark band the primary CTA flips to a white button with `#161616` label; everything else is a straight tonal mirror.

## 13. Lineage & Influences

Relume's marketing reads like the **type-specimen booklet of a studio that happens to sell an AI website builder**. The canvas is a warm off-white `#f1f0ee` — paper-cream rather than screen-white — and a single near-black `#161616` carries text, hairlines, and the one button that matters. There is no accent colour and no gradient; emphasis is built from scale and the inverted band alone. The defining typographic move is oversized **regular-weight** display: Relative Faux at 88px / 400, a confident masthead gesture that owes more to print editorial than to SaaS marketing.

The lineage runs through **Swiss / International Typographic Style** (grid discipline, the type doing the work, restraint as a value), the **broadsheet and type-specimen tradition** (cream stock, large regular-weight display, black ink), and the contemporary **monochrome-builder cohort** — Vercel's achromatic structure pushed warmer onto cream, and the design-tool sibling Webflow stripped of its indigo gradient. Where Webflow lets one gradient in and Framer plays a chromatic quartet, Relume removes colour entirely and lets the bespoke grotesk and the warm canvas be the whole identity. The custom Relative superfamily is the brand's signature instrument, the way Söhne anchors Vercel or Inter anchors so many of its peers.

**Named Influences**
- **Vercel** ([vercel.com](https://vercel.com)) — Achromatic, type-forward restraint; structure over chrome
- **Webflow** ([webflow.com](https://webflow.com)) — Design-tool-as-conference register, product-as-protagonist tiles, the visual-builder sibling
- **Figma** ([figma.com](https://www.figma.com)) — Component-library presentation and the design-system-manual cadence Relume plugs into
- **Klim Type Foundry** ([klim.co.nz](https://klim.co.nz)) — The grotesk-superfamily lineage (Söhne / National) that Relative's display-plus-text pairing echoes
- **Swiss Style** ([en.wikipedia.org/wiki/International_Typographic_Style](https://en.wikipedia.org/wiki/International_Typographic_Style)) — Grid discipline and the conviction that the type carries the message

## 14. Do's and Don'ts

### Do

- Keep the system to two colours — warm off-white `#f1f0ee` and near-black `#161616`; the monochrome is the identity
- Set display type at **regular weight 400**, even at 88px — the regular-weight giant is the signature
- Use Relative Faux for display ≥48px and Relative for everything below — one superfamily, switched by scale
- Fill the primary CTA with `#161616`, white label, 8px radius — the live "Start for free" pattern
- Hover the CTA to `#3e3e3e` (the live `--hoverBackground`), not to a tint of some other hue
- Use the off-white canvas, not pure white — the warmth is what keeps it editorial rather than clinical
- Build depth from hairlines (`rgba(22,22,22,0.12)`), not from shadows — cards default to shadowless
- Flip to the inverted `#161616` band for footers and dark reveals; let the monochrome pair invert cleanly
- Let whitespace and scale do the hierarchy work, since there is no colour to lean on
- Honor reduced motion — halt the component-library marquee and collapse reveals to opacity-only

### Don't

- Introduce an accent colour or a gradient — the moment a third hue appears, it stops being Relume
- Set the hero in bold 700 — that erases the regular-weight-giant signature entirely
- Use pure white `#ffffff` as the page canvas — it loses the warm paper note (white is for cards only)
- Add drop shadows to default cards — depth is the hairline; reserve shadows for transient overlays
- Use cool or blue-tinted hairlines/shadows — Relume's neutrals are warm near-black, never cool
- Round corners past 12px on cards or 8px on buttons — the editorial register stays crisp
- Mix a second type family (serif, second sans) into the system — the Relative superfamily carries everything
- Pack section rhythm tighter than ~80px — the oversized type needs air to breathe
- Tint the CTA or use an outline-only primary on the off-white canvas — primary is the solid black fill
- Add coloured semantic badges to marketing — keep semantics desaturated and confined to product UI

## 15. Agent Prompt Guide

### Quick Color Reference

```
bg:           #f1f0ee (warm off-white canvas)
bg-dark:      #161616 (near-black inverted band)
surface:      #ffffff (white cards)
text:         #161616 (warm near-black)
text-muted:   #3e3e3e
text-soft:    #6b6b6b
brand:        #161616 (black — CTA fill + entire brand surface)
brand-hover:  #3e3e3e
on-brand:     #ffffff (white label on black CTA)
border:       rgba(22,22,22,0.12) (near-black hairline)
```

### Example Component Prompts

1. *"Create a Relume-style hero: warm off-white `#f1f0ee` canvas, headline in Relative Faux at 88px **weight 400** (not bold) reading 'Websites designed & built faster with AI' tracked at -0.02em in `#161616`, Relative 18 body below in `#3e3e3e`, a solid black `#161616` CTA reading 'Start for free' with white label at 8px radius."*
2. *"Design a Relume feature card: pure-white `#ffffff` bg on the off-white canvas, 12px radius, 24px padding, 1px `rgba(22,22,22,0.12)` near-black hairline, **no shadow**. Relative 28 title in `#161616`, Relative 16 body in `#3e3e3e`, small eyebrow label in Relative 13 / 0.04em `#3e3e3e`."*
3. *"Build a Relume primary CTA: solid `#161616` background, white Relative 500 15px label saying 'Start for free', 8px radius, 12px×20px padding, hover background `#3e3e3e`. No gradient, no accent colour."*
4. *"Compose a Relume component-library grid: off-white `#f1f0ee` canvas, 3-up grid of white preview tiles each with a 16:10 component thumbnail and a 1px hairline frame, label row in Relative 14 `#3e3e3e` below each."*
5. *"Create a Relume dark feature reveal: full-bleed near-black `#161616` band, white Relative Faux 64 weight-400 headline, Relative 18 body in `#b8b8b8`, an inverted CTA (white `#ffffff` button, `#161616` label) at 8px radius."*
6. *"Design a Relume footer: near-black `#161616` band, multi-column white link grid in Relative 14 with muted `#b8b8b8` column headers, Relume wordmark and © at the bottom, no colour anywhere."*

### Iteration Guide

1. **Strip the colour.** If any accent hue or gradient has crept in, remove it. Relume is two colours — off-white and near-black — and nothing else.
2. **Drop the headline weight to 400.** If the hero renders in bold, set it to regular. The regular-weight giant is the single most recognisable trait.
3. **Warm the canvas.** If the background is pure white, swap to `#f1f0ee`. The cream warmth is what reads as editorial rather than clinical.
4. **Kill the card shadows.** If cards float on drop shadows, replace with a 1px `rgba(22,22,22,0.12)` hairline and no shadow. Depth is the border.
5. **Make the CTA solid black.** If the primary button is outlined, tinted, or coloured, fill it with `#161616` and a white label at 8px radius.
6. **Hold one superfamily.** If a serif or a second sans appears, collapse back to Relative Faux (display) + Relative (body). Contrast comes from scale, not from face-switching.
7. **Add an inverted band.** If the page is monotonously off-white, drop one full-bleed `#161616` section per major reveal — the same monochrome pair, flipped.
8. **Give the type air.** If sections are packed tight, expand rhythm toward 120px. The oversized display needs whitespace to read as a specimen page.

---

*Theme-toggle audit: score=0, signals=[none]*
Prose

1. Visual Theme & Atmosphere

Relume’s site opens on a warm off-white #f1f0ee canvas — not pure white, not cool grey, but a paper-stock cream with a faint warmth that reads as printed broadsheet rather than software UI. Against it, a single warm near-black #161616 does every chromatic job in the system at once: it sets all the body copy, all the headlines, the hairlines, and the fill of the one button that matters — the black “Start for free” CTA with white label. There is no accent colour. There is no gradient. The entire identity is the off-white-and-black pair, and the discipline of refusing a third hue is the whole point.

The signature gesture is oversized regular-weight display type. The hero headline is set in the bespoke “Relative Faux” grotesk at 88px — but at weight 400, not the 700 most marketing sites reach for. That regular-weight giant type is the editorial tell: it reads like a magazine masthead or a design-school thesis cover, confident enough that it does not need to shout in bold. Body type is “Relative” at a calm 16px / 1.55, and section headings (h2) drop to “Relative” at 40px / 500 — slightly heavier, but still restrained. The two-family system is one superfamily: Relative Faux for display, Relative for everything else.

The voice is design-system-manual-as-product-page. Relume sells an AI website builder and a component library for Webflow and Figma, so its own marketing has to demonstrate taste before it claims to generate it. The layout is gridded, the vertical rhythm is generous, and the only ornament is the type itself. Where Webflow lets a single indigo-violet gradient in and Framer plays a loud chromatic quartet, Relume goes further toward Vercel’s restraint — but warmer, on cream rather than white, and with no chromatic accent at all. The closest reference is a printed type-specimen booklet.

The atmosphere is warm-editorial-minimal. The cream canvas softens what would otherwise be a stark black-on-white system; the warmth keeps it human rather than clinical. Inverted #161616 bands appear for footers, dark feature reveals, and code-adjacent contexts (the live --code-block-background is #222), flipping the same monochrome pair so white type sits on near-black. The off-white-plus-black partnership is the system; everything else is layout, scale, and the regular-weight grotesk.

Key Characteristics

  • Warm off-white #f1f0ee canvas — paper-cream, never pure white, never cool
  • Near-black #161616 does text, brand, hairlines, and CTA fill all at once
  • Oversized regular-weight display: Relative Faux 88px / 400 — the editorial tell
  • Relative Faux (display) + Relative (body) — a single grotesk superfamily
  • Zero accent colour, zero gradient — monochrome is the identity, by refusal
  • One black “Start for free” CTA at 8px radius with white label
  • Inverted #161616 bands for footer and dark feature reveals
  • Hairlines are near-black at low alpha (rgba(22,22,22,0.12)), never grey-blue
  • No shadows on cards — depth is hairline + tonal, not elevation
  • Reads like a printed type-specimen booklet, not a SaaS landing page

2. Color Palette & Roles

Primary / Canvas

  • bg (#f1f0ee): the warm off-white marketing canvas — the brand’s base note
  • bg-soft (#e9e8e5): a slightly deeper off-white for alternating stripes
  • bg-elev (#f7f6f4): a lifted near-white panel for subtle separation
  • bg-dark (#161616): near-black inverted band — footer and dark feature reveals
  • bg-dark-2 (#222222): softer dark for code blocks and secondary inversions (live --code-block-background)
  • surface (#ffffff): pure white cards, which read crisp against the cream canvas
  • surface-2 (#e9e8e5): second-level neutral panel

Text

  • text (#161616): body and headlines — warm near-black, the workhorse ink
  • text-strong (#000000): rare maximal-contrast emphasis
  • text-muted (#3e3e3e): captions and secondary copy (matches live hover tone)
  • text-soft (#6b6b6b): tertiary and meta labels
  • text-faint (#9a9a9a): disabled and placeholder ink
  • text-on-dark (#ffffff): white on the #161616 inverted band
  • text-on-brand (#ffffff): white label on the black CTA

Brand (monochrome — black IS the brand)

  • brand (#161616): near-black — the CTA fill and the entire brand surface
  • brand-hover (#3e3e3e): CTA hover, exactly the live --hoverBackground rgb(62,62,62)
  • brand-active (#000000): pressed
  • brand-soft (rgba(22,22,22,0.06)): faintest near-black wash for badge/tint backgrounds
  • on-brand (#ffffff): white label on the black button

There is no separate accent hue. Relume’s “accent” is the absence of one — emphasis is created with scale, weight, and the inverted band, never with colour. Treat any request for a coloured accent as off-brand.

Interactive

  • link: #161616 — same as text, distinguished by underline rather than colour
  • link-hover: #3e3e3e with underline-grow
  • link-on-dark: #ffffff with 1px underline
  • selected: rgba(22,22,22,0.06) — soft near-black tint
  • disabled: #9a9a9a text on rgba(22,22,22,0.04) bg

Neutral Scale

  • text #161616 — body
  • text-muted #3e3e3e — captions and meta
  • text-soft #6b6b6b — tertiary
  • text-faint #9a9a9a — disabled
  • border rgba(22,22,22,0.12) — hairline, near-black at low alpha
  • border-strong rgba(22,22,22,0.24) — emphasis hairline
  • border-soft rgba(22,22,22,0.06) — softest divider

Surface & Borders (Dark Band)

  • surface-dark #222222 — dark-band card
  • border-dark rgba(255,255,255,0.14) — hairline on the inverted band
  • text-on-dark #ffffff — white on near-black
  • text-on-dark-muted #b8b8b8 — muted white on near-black

Shadow Colours

Relume’s depth is near-shadowless. Cards sit on hairlines, not elevation. Where a faint lift is used, the shadow is warm near-black at very low alpha (rgba(22,22,22,0.08)) — never cool, never blue-tinted. The default card has no shadow at all.

Semantic

Semantics are kept neutral-leaning to protect the monochrome identity — desaturated, dark-toned, used only in product UI (forms, validation), never in marketing.

  • success #1f7a4d on #e3f0e9
  • warning #8a6d1f on #f2ecd9
  • danger #9a2a2a on #f2e0e0
  • info #161616 on rgba(22,22,22,0.06) — reuses the near-black

3. Typography Rules

Font Family

  • Display: Relative Faux — bespoke grotesk used for oversized headlines; its defining trait is that it is set at regular 400 weight even at giant sizes
  • Body: Relative — the matching text-weight grotesk; handles all body, label, caption, and most section headings
  • Mono: system monospace (ui-monospace / SF Mono / Menlo) — code blocks and the #222 code surface only
  • The two faces are one superfamily — Relative Faux is the display cut of Relative, so the pairing is seamless rather than contrasting

Hierarchy

RoleFontSizeWeightLine HTrackingNotes
display-heroRelative Faux884001.0-0.02emAbove-fold hero — the signature regular-weight giant
display-lgRelative Faux644001.05-0.018emSection opener
h1Relative Faux564001.08-0.016emPage title
h2Relative405001.15-0.012emFeature header (live h2 = Relative 40/500)
h3Relative285001.25-0.008emCard title
h4Relative225001.3-0.004emInline title
h5Relative186001.40Component label
body-lgRelative184001.550Hero subhead
bodyRelative164001.550Default paragraph (live body = Relative 16/400)
body-smRelative144001.50Captions
labelRelative145001.40Form and button labels
captionRelative135001.40Meta below cards
eyebrowRelative135001.40.04emSection taglines
codemono144001.60Inline code, code blocks
code-micromono125001.50Version strings

Principles

  • Display stays at weight 400, even at 88px — the regular-weight giant is the brand’s whole typographic signature; reaching for 700 erases it
  • Relative Faux only for display ≥48px — below that, switch to Relative; the display cut’s character lives at scale
  • Headings (h2+) use Relative 500, not Relative Faux — section headers are the heavier text face, not the lighter display face
  • Tracking is moderate-negative-0.02em at hero, easing toward 0 by body
  • No serif, no second family — the superfamily carries everything; contrast comes from scale, not from face-switching
  • Body at 16px / 1.55 — calm, readable, never inflated for cinematic effect
  • Emphasis is scale, not colour — there is no coloured accent to lean on, so size and weight do all the hierarchy work
  • Eyebrows tracked +0.04em — the only positive-tracking move, used for small section labels

4. Component Stylings

Buttons

Primary CTA — the black rectangle (live: “Start for free”)

  • bg #161616, text #ffffff, radius 8px
  • padding 12px 20px, Relative 500 15px
  • hover: bg #3e3e3e (live --hoverBackground), 240ms ease-standard
  • focus: ring 2px solid #161616 + 2px offset
  • use: every primary action — “Start for free”, “Get started”, “Sign up”

Secondary Button

  • bg transparent, text #161616, border 1px solid rgba(22,22,22,0.24), radius 8px
  • padding 12px 20px, Relative 500 15px
  • hover: bg rgba(22,22,22,0.06)
  • use: secondary action — “Book a demo”, “See pricing”

Ghost Button

  • bg transparent, text #161616, radius 8px, no border
  • padding 10px 16px
  • hover: bg rgba(22,22,22,0.06)
  • use: tertiary / inline actions

Inverted Button (on the dark #161616 band)

  • bg #ffffff, text #161616, radius 8px
  • padding 12px 20px
  • hover: bg #e9e8e5
  • use: primary action sitting on the near-black band — the monochrome pair simply flips

Cards

Card Default

  • bg #ffffff, radius 12px, padding 24px
  • border 1px solid rgba(22,22,22,0.12), no shadow (depth is the hairline)
  • hover: border rgba(22,22,22,0.24) — colour deepens, no lift

Card Dark (on the inverted band)

  • bg #222222, text #ffffff, radius 12px, padding 24px
  • border 1px solid rgba(255,255,255,0.14), no shadow
  • hover: bg #2a2a2a — tonal, not elevation

Card Feature (component-library preview tile)

  • bg #ffffff, radius 12px, padding 0 (image bleeds to edge)
  • 1px hairline frame, label row in Relative 14 #3e3e3e below

Badges & Tags

Badge Default

  • bg rgba(22,22,22,0.06), text #161616, radius 9999px
  • padding 4px 10px, Relative 500 12px

Badge Inverted (on dark band)

  • bg rgba(255,255,255,0.1), text #ffffff, radius 9999px
  • padding 4px 10px, Relative 500 12px

Tag Eyebrow

  • bg transparent, text #3e3e3e, radius 0
  • Relative 13px / 0.04em, used as small section labels

Inputs & Forms

Text Input

  • bg #ffffff, border 1px solid rgba(22,22,22,0.24), radius 8px
  • padding 10px 12px, Relative 400 16px
  • focus: border #161616 + ring 2px rgba(22,22,22,0.2)
  • placeholder: rgba(22,22,22,0.4) (live --placeholderColor is color-mix of #161616 at 60% transparent)

Search Input

  • bg #ffffff, border 1px solid rgba(22,22,22,0.12), radius 8px
  • inline magnifier left, padding 10px 12px 10px 36px

Top Nav

  • bg #f1f0ee (transparent over hero, solidifies on scroll), height 72px, gutters 32px
  • Relume wordmark left, link nav center (Product / Library / Pricing / Resources), CTAs right (black “Start for free” primary + ghost “Log in”)
  • hairline rgba(22,22,22,0.12) bottom on scroll
  • mobile: hamburger right-aligned, full-height drawer

Footer

  • bg #161616, padding 96px 32px
  • multi-column white link grid in Relative 14, muted #b8b8b8 headers
  • Relume wordmark + © at bottom — the inverted band closes the page

Tabs / Tooltips / Toasts

Tab Group

  • underline-style: 2px #161616 on active, hairline rgba(22,22,22,0.12) on rest
  • text #161616 active, #6b6b6b rest

Tooltip

  • bg #161616, text #ffffff, radius 8px, padding 8px 12px, Relative 500 12px

Toast

  • bg #ffffff, border 1px solid rgba(22,22,22,0.12), radius 12px, shadow standard
  • 16px Relative 500 message, 14px muted body

5. Layout Principles

Spacing System

  • base 4px, scale [0, 4, 8, 12, 16, 24, 32, 48, 64, 80, 96, 128]
  • Density philosophy: calm-editorial. Section vertical rhythm holds at 120px — spacious enough to read as a type-specimen booklet, tighter than Framer’s cinematic 160.

Grid & Container

  • page-width 1280px with 32px gutters
  • 12-column grid; component-library showcases use a denser tile grid
  • Hero zones bleed full-width but reset to 1280 for content
  • prose-width 720px — for blog, docs, and changelog

Whitespace Philosophy

Relume’s whitespace is the frame around the type. The oversized regular-weight display needs air to breathe, so headlines get generous margins above and below. Cards carry 24px internal padding. With no colour to carry attention, whitespace and scale do the visual work — the cream canvas is allowed to dominate.

Section Cadence

The page alternates the same monochrome pair:

  1. Off-white #f1f0ee hero with 88px regular-weight headline + black CTA
  2. Off-white feature row with hairline-bordered white cards
  3. Off-white component-library grid (the product-as-protagonist tiles)
  4. Inverted #161616 dark feature reveal with white type
  5. Off-white pricing / testimonial wall
  6. Inverted #161616 footer

The off-white / near-black alternation is the rhythm — never a third tone, never a coloured band.

6. Shapes & Radius Scale

TierValueUse
Micro2pxInline code corners
Small4pxSmall badges, chips
Medium8pxButtons, inputs — Relume’s default (live CTA = 8px)
Large12pxCards — the signature card radius
XL16pxFeatured panels, modals
Pill9999pxAvatars, tag badges

The radius ladder is moderate-restrained. The black CTA’s 8px corner is the one hard data point from the live probe; cards step up to 12px. Nothing in the system goes pillow-soft — the editorial register favours crisp, near-square corners over heavy rounding.

7. Depth & Elevation

LevelTreatmentUse
0Flat — no shadow, no borderDisplay copy on canvas
11px hairline rgba(22,22,22,0.12)Resting card borders, dividers
2Hairline deepens to rgba(22,22,22,0.24)Card hover (no lift)
3shadow-ambient 0 1px 2px rgba(22,22,22,0.05)Sticky nav on scroll
4shadow-standard 0 4px 16px rgba(22,22,22,0.08)Dropdowns, toasts
5shadow-elevated 0 12px 32px rgba(22,22,22,0.12)Modals, overlays

Shadow Philosophy

Relume’s depth on the off-white canvas is hairline-first, near-shadowless. The default card has no shadow at all — it sits in a 1px rgba(22,22,22,0.12) near-black hairline, and on hover the hairline deepens rather than the card lifting. This flat, bordered treatment is the editorial discipline: depth reads as printed registration marks, not as floating UI. Shadows appear only on transient overlays (dropdowns, modals, toasts), and even then they are warm near-black at low alpha — never cool, never blue-tinted. Dark-band cards lean entirely on tonal layering (#222 on #161616) with a faint white hairline.

8. Interaction & Motion

Easing Curves

  • ease-standard cubic-bezier(0.4, 0, 0.2, 1) — most state changes
  • ease-emphasized cubic-bezier(0.2, 0, 0, 1) — modal entry, section reveal
  • ease-soft cubic-bezier(0.45, 0, 0.55, 1) — symmetric breathing

Duration Buckets

  • fast 150ms — button hover, link state
  • standard 240ms — card hover, dropdown reveal
  • slow 320ms — modal entry, scroll section reveal

Per-Component Recipes

  • Primary CTA hover: bg #161616#3e3e3e, 150ms ease-standard (live hover tone)
  • Card hover: hairline rgba(22,22,22,0.12)rgba(22,22,22,0.24), 240ms — colour deepens, no translateY
  • Link hover: underline grow + colour #161616#3e3e3e, 150ms
  • Dropdown reveal: fade + 4px down, 240ms ease-emphasized
  • Section reveal on scroll: fade-up 12px, 320ms ease-emphasized
  • Component-library marquee: slow auto-scroll loop of preview tiles (halts under reduced-motion)

Page Transitions

  • Section reveals on scroll: fade-up 12px, 320ms slow
  • Sticky nav: off-white bg + hairline fade-in on scroll past hero, 150ms
  • Inverted band entry: white type fades up as the #161616 band scrolls in

Reduced Motion Strategy

Relume respects prefers-reduced-motion: reduce:

  • Scroll-triggered reveals: opacity-only, no translate
  • Component-library marquee / auto-scroll: halted (static grid)
  • Hover lifts: disabled — colour/hairline changes only
  • Sticky nav: instant background change

9. Accessibility & A11y

Contrast Pairs

  • text #161616 on bg #f1f0ee: 16.0 — AAA all sizes
  • text-muted #3e3e3e on bg #f1f0ee: 9.6 — AAA
  • text-soft #6b6b6b on bg #f1f0ee: 5.2 — AA body, AAA large
  • on-brand #ffffff on brand #161616: 16.4 — AAA (the black CTA)
  • text-on-dark #ffffff on bg-dark #161616: 16.4 — AAA
  • text-on-dark-muted #b8b8b8 on bg-dark #161616: 7.6 — AAA
  • text #161616 on surface #ffffff: 17.4 — AAA (white cards)

The monochrome system is an accessibility win — every primary text/background pair clears AAA by a wide margin. The only care point is text-faint #9a9a9a on #f1f0ee (~2.6), which must stay reserved for disabled/decorative ink, never functional text.

Focus Indicators

  • 2px solid #161616 with 2px offset on the off-white canvas
  • On the dark band: 2px solid #ffffff with 2px offset (live --buttonFocusColor is #ffffff)
  • Visible on every interactive
  • Never outline: none without a replacement

ARIA Patterns

  • Dropdown nav: aria-haspopup="menu" + aria-expanded
  • Modal dialogs: role="dialog" + aria-modal="true" + aria-labelledby + focus trap
  • Tab group: role="tablist" + aria-orientation + aria-controls
  • Component-library tiles: each preview as a labelled link/button, not a bare image
  • Decorative dividers: aria-hidden="true"

Keyboard Nav

  • Tab order matches DOM source
  • ENTER/SPACE activate buttons
  • ARROW navigates within tab groups and menus
  • ESC closes modals/dropdowns
  • All interactives reachable in the tab cycle

Screen Reader Hints

  • Relume wordmark SVG: <title>Relume</title>
  • Component-library previews: <img alt> describing the component shown
  • Eyebrow labels are semantic spans, not headings
  • Skip-to-content link at top, visible on focus

Reduced Motion

  • Honored across the site
  • Marquee, parallax, scroll reveals: disabled or opacity-only
  • Hover lifts: disabled

10. Responsive Behavior

Breakpoints

TierMin-widthUse
mobile0–639pxSingle-column stack
tablet640–1023px2-column feature / tile grid
desktop1024–1279pxFull 12-column
wide1280px+Container caps at 1280, generous gutters

Touch Targets

Minimum 44×44px on mobile. The black CTA scales padding from 12px 20px (desktop) to 14px 22px (mobile) for a comfortable 48px tap area.

Collapsing Strategy

  • Hero display: 88px → 64px → 48px → 36px down the cascade — but always at weight 400
  • Feature / library grid: 3-col → 2-col → 1-col
  • Top nav: full link nav → right-aligned hamburger drawer at <1024px
  • Section vertical rhythm: 120px → 80px → 56px
  • Inverted bands: preserved on mobile (the monochrome pair is identity-critical)

Image Behavior

  • Component-library tiles: aspect-ratio 16:10, object-fit: cover, 1px hairline frame
  • Wordmark and partner logos: monochrome SVG, never coloured
  • Avatar images: 40×40 circular

Container Queries

Component-library grids use container queries so preview tiles reflow by available width (4-up → 3-up → 2-up) independent of the page breakpoint.

11. Content & Voice

Tone

Designer-direct, quietly confident. Relume speaks to designers and builders who already have taste and want speed. The copy is plain and craft-anchored — “designed & built faster with AI” rather than “revolutionize your workflow”. It states what the tool does and trusts the type and the cream canvas to carry the polish. No exclamation marks, no buzzword stacking.

Microcopy Patterns

  • Button verbs: “Start for free”, “Book a demo”, “Get started”, “Log in”, “See pricing”
  • Empty states: “No projects yet — start your first to begin.” (Direct invitation.)
  • Errors: “Something went wrong. Please try again.” (Calm, no jargon.)
  • Success: “Generated.” / “Saved.” (Past tense, terse.)
  • Loading: “Generating your site…” (Verb in progress.)

CTA Verb Conventions

Relume leads with “Start for free” as the primary CTA across hero, pricing, and footer — the exact live label, in the black button. Secondary is “Book a demo”. For the library: “Browse components”, “Open in Figma”, “Open in Webflow”. The verbs are short and concrete; the AI angle is stated once, not repeated.

Empty States

Quiet invitations, no illustrations: “No sitemaps yet — generate your first.” The design stays functional and type-forward, in keeping with the editorial restraint.

12. Dark Mode & Theming

Relume’s marketing site ships inverted monochrome bands rather than a global dark-mode toggle. The page flips between the off-white #f1f0ee canvas and the near-black #161616 band; the same two-colour system simply inverts, so white type sits on near-black for footers and dark feature reveals. The token swap inside any <section data-theme="dark">:

colors-dark:
  bg: '#161616'
  bg-elev: '#222222'
  surface: '#222222'
  surface-2: '#2a2a2a'
  text: '#ffffff'
  text-muted: '#b8b8b8'
  text-soft: '#8a8a8a'
  brand: '#ffffff'              # the CTA inverts — white button, black label
  on-brand: '#161616'
  border: 'rgba(255,255,255,0.14)'
  border-strong: 'rgba(255,255,255,0.24)'

Because the system is already monochrome, inversion is trivial and lossless — there is no accent hue to remap. On the dark band the primary CTA flips to a white button with #161616 label; everything else is a straight tonal mirror.

13. Lineage & Influences

Relume’s marketing reads like the type-specimen booklet of a studio that happens to sell an AI website builder. The canvas is a warm off-white #f1f0ee — paper-cream rather than screen-white — and a single near-black #161616 carries text, hairlines, and the one button that matters. There is no accent colour and no gradient; emphasis is built from scale and the inverted band alone. The defining typographic move is oversized regular-weight display: Relative Faux at 88px / 400, a confident masthead gesture that owes more to print editorial than to SaaS marketing.

The lineage runs through Swiss / International Typographic Style (grid discipline, the type doing the work, restraint as a value), the broadsheet and type-specimen tradition (cream stock, large regular-weight display, black ink), and the contemporary monochrome-builder cohort — Vercel’s achromatic structure pushed warmer onto cream, and the design-tool sibling Webflow stripped of its indigo gradient. Where Webflow lets one gradient in and Framer plays a chromatic quartet, Relume removes colour entirely and lets the bespoke grotesk and the warm canvas be the whole identity. The custom Relative superfamily is the brand’s signature instrument, the way Söhne anchors Vercel or Inter anchors so many of its peers.

Named Influences

  • Vercel (vercel.com) — Achromatic, type-forward restraint; structure over chrome
  • Webflow (webflow.com) — Design-tool-as-conference register, product-as-protagonist tiles, the visual-builder sibling
  • Figma (figma.com) — Component-library presentation and the design-system-manual cadence Relume plugs into
  • Klim Type Foundry (klim.co.nz) — The grotesk-superfamily lineage (Söhne / National) that Relative’s display-plus-text pairing echoes
  • Swiss Style (en.wikipedia.org/wiki/International_Typographic_Style) — Grid discipline and the conviction that the type carries the message

14. Do’s and Don’ts

Do

  • Keep the system to two colours — warm off-white #f1f0ee and near-black #161616; the monochrome is the identity
  • Set display type at regular weight 400, even at 88px — the regular-weight giant is the signature
  • Use Relative Faux for display ≥48px and Relative for everything below — one superfamily, switched by scale
  • Fill the primary CTA with #161616, white label, 8px radius — the live “Start for free” pattern
  • Hover the CTA to #3e3e3e (the live --hoverBackground), not to a tint of some other hue
  • Use the off-white canvas, not pure white — the warmth is what keeps it editorial rather than clinical
  • Build depth from hairlines (rgba(22,22,22,0.12)), not from shadows — cards default to shadowless
  • Flip to the inverted #161616 band for footers and dark reveals; let the monochrome pair invert cleanly
  • Let whitespace and scale do the hierarchy work, since there is no colour to lean on
  • Honor reduced motion — halt the component-library marquee and collapse reveals to opacity-only

Don’t

  • Introduce an accent colour or a gradient — the moment a third hue appears, it stops being Relume
  • Set the hero in bold 700 — that erases the regular-weight-giant signature entirely
  • Use pure white #ffffff as the page canvas — it loses the warm paper note (white is for cards only)
  • Add drop shadows to default cards — depth is the hairline; reserve shadows for transient overlays
  • Use cool or blue-tinted hairlines/shadows — Relume’s neutrals are warm near-black, never cool
  • Round corners past 12px on cards or 8px on buttons — the editorial register stays crisp
  • Mix a second type family (serif, second sans) into the system — the Relative superfamily carries everything
  • Pack section rhythm tighter than ~80px — the oversized type needs air to breathe
  • Tint the CTA or use an outline-only primary on the off-white canvas — primary is the solid black fill
  • Add coloured semantic badges to marketing — keep semantics desaturated and confined to product UI

15. Agent Prompt Guide

Quick Color Reference

bg:           #f1f0ee (warm off-white canvas)
bg-dark:      #161616 (near-black inverted band)
surface:      #ffffff (white cards)
text:         #161616 (warm near-black)
text-muted:   #3e3e3e
text-soft:    #6b6b6b
brand:        #161616 (black — CTA fill + entire brand surface)
brand-hover:  #3e3e3e
on-brand:     #ffffff (white label on black CTA)
border:       rgba(22,22,22,0.12) (near-black hairline)

Example Component Prompts

  1. “Create a Relume-style hero: warm off-white #f1f0ee canvas, headline in Relative Faux at 88px weight 400 (not bold) reading ‘Websites designed & built faster with AI’ tracked at -0.02em in #161616, Relative 18 body below in #3e3e3e, a solid black #161616 CTA reading ‘Start for free’ with white label at 8px radius.”
  2. “Design a Relume feature card: pure-white #ffffff bg on the off-white canvas, 12px radius, 24px padding, 1px rgba(22,22,22,0.12) near-black hairline, no shadow. Relative 28 title in #161616, Relative 16 body in #3e3e3e, small eyebrow label in Relative 13 / 0.04em #3e3e3e.”
  3. “Build a Relume primary CTA: solid #161616 background, white Relative 500 15px label saying ‘Start for free’, 8px radius, 12px×20px padding, hover background #3e3e3e. No gradient, no accent colour.”
  4. “Compose a Relume component-library grid: off-white #f1f0ee canvas, 3-up grid of white preview tiles each with a 16:10 component thumbnail and a 1px hairline frame, label row in Relative 14 #3e3e3e below each.”
  5. “Create a Relume dark feature reveal: full-bleed near-black #161616 band, white Relative Faux 64 weight-400 headline, Relative 18 body in #b8b8b8, an inverted CTA (white #ffffff button, #161616 label) at 8px radius.”
  6. “Design a Relume footer: near-black #161616 band, multi-column white link grid in Relative 14 with muted #b8b8b8 column headers, Relume wordmark and © at the bottom, no colour anywhere.”

Iteration Guide

  1. Strip the colour. If any accent hue or gradient has crept in, remove it. Relume is two colours — off-white and near-black — and nothing else.
  2. Drop the headline weight to 400. If the hero renders in bold, set it to regular. The regular-weight giant is the single most recognisable trait.
  3. Warm the canvas. If the background is pure white, swap to #f1f0ee. The cream warmth is what reads as editorial rather than clinical.
  4. Kill the card shadows. If cards float on drop shadows, replace with a 1px rgba(22,22,22,0.12) hairline and no shadow. Depth is the border.
  5. Make the CTA solid black. If the primary button is outlined, tinted, or coloured, fill it with #161616 and a white label at 8px radius.
  6. Hold one superfamily. If a serif or a second sans appears, collapse back to Relative Faux (display) + Relative (body). Contrast comes from scale, not from face-switching.
  7. Add an inverted band. If the page is monotonously off-white, drop one full-bleed #161616 section per major reveal — the same monochrome pair, flipped.
  8. Give the type air. If sections are packed tight, expand rhythm toward 120px. The oversized display needs whitespace to read as a specimen page.

Theme-toggle audit: score=0, signals=[none]

Ship with this

Drop relume into your project, then ship the actual sections in an afternoon.

1 · install design
npx @webdesignhot/design-md add relume
2 · ship landing page
npx agentkit init --design relume
How AgentKit reads DESIGN.md