light · serif · sans · premium · editorial · warm · productivity

DESIGN.md inspired by Craft

Warm-white canvas, an Untitled Serif display over Untitled Sans body, near-black ink, and full-pill CTAs — a notes app dressed as a fine-press editorial.

By webdesignhot · www.craft.do
$ npx @webdesignhot/design-md add craft
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #fcf9f7
  • bg-soft #f7f2ee
  • surface #ffffff
  • surface-elev #fbf7f4
  • text AAA · 19.7 #030302
  • text-strong #030302
  • text-body #3a3835
  • text-secondary #5c5a57
  • text-muted #8a8782
  • brand AAA · 19.7 #030302
  • brand-hover #1c1b19
  • on-brand #ffffff
  • accent-blue #2563eb
  • accent-blue-hover #1d4ed8
  • accent-blue-soft #e8effe
  • accent-blue-deep #1e40af
  • border — · 1.2 rgba(3, 3, 2, 0.09)
  • border-soft rgba(3, 3, 2, 0.05)
  • border-strong — · 1.4 rgba(3, 3, 2, 0.16)
  • shadow-card rgba(36, 30, 24, 0.05)
  • shadow-elev rgba(36, 30, 24, 0.10)
  • scrim rgba(18, 16, 14, 0.45)
  • success #2f7d4f
  • success-soft #e8f3ec
  • warning #9a6212
  • warning-soft #fbf0dc
  • danger #c0382e
  • danger-soft #f9e6e3
  • info #2563eb
  • info-soft #e8effe
Typography
Ship faster than ever.
display-hero "Untitled Serif" 80px w400 -0.02em
Ship faster than ever.
display-lg "Untitled Serif" 66px w400 -0.018em
Ship faster than ever.
h1 "Untitled Serif" 66px w400 -0.018em
Built for teams that ship.
h2 "Untitled Serif" 54px w400 -0.014em
A complete kit
h3 "Untitled Serif" 36px w400 -0.01em
The quick brown fox jumps over the lazy dog.
h4 "Untitled Serif" 24px w500 -0.005em
The quick brown fox jumps over the lazy dog.
title-md "Untitled Sans" 20px w600 0
The quick brown fox jumps over the lazy dog.
body-lg "Untitled Sans" 19px w400 0
The quick brown fox jumps over the lazy dog.
title-sm "Untitled Sans" 17px w600 0
The quick brown fox jumps over the lazy dog.
body "Untitled Sans" 16px w400 0
The quick brown fox jumps over the lazy dog.
link "Untitled Sans" 16px w400 0
The quick brown fox jumps over the lazy dog.
button "Untitled Sans" 15px w500 0
The quick brown fox jumps over the lazy dog.
nav-link "Untitled Sans" 15px w500 0
The quick brown fox jumps over the lazy dog.
body-sm "Untitled Sans" 14px w400 0
npx @webdesignhot/design-md add stripe
code ui-monospace 14px w400 0
OUR DESIGN SYSTEM
caption "Untitled Sans" 13px w500 0
OUR DESIGN SYSTEM
label "Untitled Sans" 12px w600 0.06em
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 96px
  • step-10 128px
Radius
  • micro 4px
  • sm 8px
  • md 12px
  • lg 16px
  • xl 24px
  • 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 accent-blue
  • muted text-muted
  • border border
  • ring border-strong
Lineage & influences

Craft draws from fine-press editorial publishing — the serif-display / sans-body pairing, the warm paper canvas, and the unhurried measure are lifted from print magazine and book design rather than productivity-SaaS convention. The near-black ink (#030302, not #000) and the warm-white paper (#fcf9f7, not #fff) together telegraph ink-on-paper rather than text-on-screen. Untitled Serif and Untitled Sans (Klim Type Foundry) are the editorial register's backbone — Untitled is a deliberately "neutral" foundry family that reads as the type a careful art director would choose, not a default. The full-pill CTA and the restraint of an almost-monochrome marketing palette borrow from the premium-Apple / Linear school of product marketing, while the literary serif headline distinguishes Craft from the all-sans crowd (Notion, Linear). In-product, Craft pairs this warm-white identity with a blue accent for links and selection — but the marketing site keeps blue almost entirely off the page, letting paper, ink, and pill carry the brand.

  • The editorial type pairing — a literary serif display over a neutral grotesque body — is Klim's Untitled family used as the brand backbone.
  • Adjacent docs/notes contemporary — Craft positions against Notion's denser, all-sans UI by going editorial and serif-led.
  • Premium near-monochrome product-marketing restraint — large quiet type, generous whitespace, a single accent held back.
  • Warm-white canvas, full-pill CTA affordance, soft-grey supporting copy, and product-photography restraint.
  • Writing-as-craft positioning — typography treated as the product, restraint as a statement of taste.
  • Indie-Mac productivity aesthetic — calm, premium, paper-warm surfaces over saturated SaaS color.
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: Craft
tagline: Warm-white canvas, an Untitled Serif display over Untitled Sans body, near-black ink, and full-pill CTAs — a notes app dressed as a fine-press editorial.
updated_at: 2026-05-29T21:45:07.329Z
published_at: 2026-05-29T21:45:07.329Z
author: webdesignhot
source_url: https://www.craft.do
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [saas]
tags: [light, serif, sans, premium, editorial, warm, productivity]
preview_swatch: ['#fcf9f7', '#030302', '#2563eb']
related: [notion, bear-app, things-app]
description: 'Craft''s site is a fine-press editorial that ships a notes app — a warm-white `#fcf9f7` canvas (paper, not screen-white), a 66px Untitled Serif H1 at weight 400 (never bold), Untitled Sans body, and a near-black `#030302` ink that reads as ink-on-paper rather than text-on-screen. The signature move is the serif-display / sans-body pairing: a literary serif for headlines, a clean grotesque for running text, giving the page the register of a well-set magazine. The primary CTA — "Try Craft Free" — is a full-pill (9999px) near-black `#030302` button with white text. The whole page reads premium, editorial, and unhurried; Craft pairs this warm-white identity with a blue accent inside the product, but the marketing surface stays almost monochrome — paper, ink, and pill.'


# 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: accent-blue
  muted: text-muted
  border: border
  ring: border-strong
colors:
  bg: '#fcf9f7'                  # warm-white canvas — paper, not screen-white
  bg-soft: '#f7f2ee'             # slightly deeper warm panel
  surface: '#ffffff'             # pure-white card lifted off the warm canvas
  surface-elev: '#fbf7f4'        # warm nested card surface
  text: '#030302'                # near-black ink — the ink-on-paper voltage
  text-strong: '#030302'         # display ink — same near-black, never tinted
  text-body: '#3a3835'           # secondary running text — warm dark grey
  text-secondary: '#5c5a57'      # supporting copy, sub-labels
  text-muted: '#8a8782'          # captions, metadata (large/secondary use only)
  brand: '#030302'               # near-black brand — the pill CTA fill
  brand-hover: '#1c1b19'         # pressed/hover near-black, fractionally lifted
  on-brand: '#ffffff'            # white text on near-black pill
  accent-blue: '#2563eb'         # in-product blue — links, focus, selection accent
  accent-blue-hover: '#1d4ed8'   # darker blue on hover/press
  accent-blue-soft: '#e8effe'    # soft blue chip / selection wash background
  accent-blue-deep: '#1e40af'    # text on soft-blue chip — passes AAA on soft
  border: 'rgba(3, 3, 2, 0.09)'  # warm hairline — 9% near-black
  border-soft: 'rgba(3, 3, 2, 0.05)'   # 5% near-black for the faintest dividers
  border-strong: 'rgba(3, 3, 2, 0.16)' # 16% near-black for focused inputs
  shadow-card: 'rgba(36, 30, 24, 0.05)'  # warm-tinted ambient lift
  shadow-elev: 'rgba(36, 30, 24, 0.10)'  # heavier hover / floating-panel lift
  scrim: 'rgba(18, 16, 14, 0.45)'        # modal backdrop — warm near-black
  success: '#2f7d4f'             # confirmation green
  success-soft: '#e8f3ec'
  warning: '#9a6212'             # advisory amber
  warning-soft: '#fbf0dc'
  danger: '#c0382e'              # form-error red
  danger-soft: '#f9e6e3'
  info: '#2563eb'               # informational — same as accent-blue
  info-soft: '#e8effe'

typography:
  display:
    family: '"Untitled Serif", "Untitled Serif Font", Georgia, "Times New Roman", serif'
    weights: [400, 500]
    opentype-features: ['kern', 'liga']
  body:
    family: '"Untitled Sans", "Untitled Sans Font", -apple-system, system-ui, "Segoe UI", Roboto, sans-serif'
    weights: [400, 500, 600]
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 80, weight: 400, lineHeight: 1.02, tracking: '-0.02em',  family: display }
    display-lg:      { size: 66, weight: 400, lineHeight: 1.05, tracking: '-0.018em', family: display }
    h1:              { size: 66, weight: 400, lineHeight: 1.05, tracking: '-0.018em', family: display }
    h2:              { size: 54, weight: 400, lineHeight: 1.08, tracking: '-0.014em', family: display }
    h3:              { size: 36, weight: 400, lineHeight: 1.15, tracking: '-0.01em',  family: display }
    h4:              { size: 24, weight: 500, lineHeight: 1.25, tracking: '-0.005em', family: display }
    title-md:        { size: 20, weight: 600, lineHeight: 1.35, tracking: '0',        family: body }
    title-sm:        { size: 17, weight: 600, lineHeight: 1.4,  tracking: '0',        family: body }
    body-lg:         { size: 19, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    caption:         { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    label:           { size: 12, weight: 600, lineHeight: 1.3,  tracking: '0.06em',   family: body, transform: uppercase }
    button:          { size: 15, weight: 500, lineHeight: 1.2,  tracking: '0',        family: body }
    nav-link:        { size: 15, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    link:            { size: 16, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    code:            { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: mono }

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

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

layout:
  page-width: 1200
  prose-width: 680
  header-height: 64

components:
  button-primary: { bg: brand, text: on-brand, padding: '12px 24px', radius: 9999, height: 48, font: button }
  button-ghost:   { bg: transparent, text: text, border: border, padding: '12px 24px', radius: 9999, font: button }
  card:           { bg: surface, border: border, radius: 16, padding: 32 }
  input:          { bg: surface, border: border, text: text, radius: 12, padding: '12px 16px', height: 44 }

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-out-soft: 'cubic-bezier(0.0, 0, 0.2, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  button-hover: 'background lightens to brand-hover over 150ms standard — no transform'
  card-hover: 'warm ambient shadow grows over 240ms standard, optional 1px rise'
  scroll-reveal: 'sections fade + 8px rise over 320ms ease-out-soft on viewport entry'
  reduced-motion: 'respects prefers-reduced-motion: reduce — transforms suppressed, transitions become opacity-only or instant'

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

shadows:
  ambient: 'rgba(36,30,24,0.05) 0 1px 2px 0'
  card: 'rgba(36,30,24,0.05) 0 6px 20px -6px'
  elevated: 'rgba(36,30,24,0.10) 0 16px 40px -12px, rgba(36,30,24,0.05) 0 4px 10px -4px'
  ring: '0 0 0 3px rgba(37,99,235,0.35)'

accessibility:
  contrast-text-on-bg: 19.7         # #030302 on #fcf9f7 — AAA
  contrast-on-brand: 20.6           # #ffffff on #030302 — AAA
  contrast-brand-on-bg: 19.7        # #030302 on #fcf9f7 — AAA
  contrast-secondary-on-bg: 6.6     # #5c5a57 on #fcf9f7 — AA body / AAA large
  contrast-blue-on-bg: 4.9          # #2563eb on #fcf9f7 — AA body / AAA large
  contrast-blue-deep-on-soft: 8.4   # #1e40af on #e8effe — AAA
  focus-ring: '3px rgba(37,99,235,0.35) ring + 2px outline-offset'
  reduced-motion-honored: true
  touch-target-min: 44

dark-mode: null   # Light-only marketing surface. The Craft app ships full light/dark themes (the dark in-app palette is the neutral oklch scale that surfaced in the probe — near-black #0a0a0a surfaces, #e5e5e5 ink, #262626 accents); the public marketing site is warm-white only.

lineage:
  summary: 'Craft draws from fine-press editorial publishing — the serif-display / sans-body pairing, the warm paper canvas, and the unhurried measure are lifted from print magazine and book design rather than productivity-SaaS convention. The near-black ink (#030302, not #000) and the warm-white paper (#fcf9f7, not #fff) together telegraph ink-on-paper rather than text-on-screen. Untitled Serif and Untitled Sans (Klim Type Foundry) are the editorial register''s backbone — Untitled is a deliberately "neutral" foundry family that reads as the type a careful art director would choose, not a default. The full-pill CTA and the restraint of an almost-monochrome marketing palette borrow from the premium-Apple / Linear school of product marketing, while the literary serif headline distinguishes Craft from the all-sans crowd (Notion, Linear). In-product, Craft pairs this warm-white identity with a blue accent for links and selection — but the marketing site keeps blue almost entirely off the page, letting paper, ink, and pill carry the brand.'
  influences:
    - { name: 'Klim Type Foundry (Untitled Serif / Untitled Sans)', role: 'The editorial type pairing — a literary serif display over a neutral grotesque body — is Klim''s Untitled family used as the brand backbone.', url: 'https://klim.co.nz/retail-fonts/untitled-serif/' }
    - { name: 'Notion', role: 'Adjacent docs/notes contemporary — Craft positions against Notion''s denser, all-sans UI by going editorial and serif-led.', url: 'https://www.notion.so' }
    - { name: 'Linear', role: 'Premium near-monochrome product-marketing restraint — large quiet type, generous whitespace, a single accent held back.', url: 'https://linear.app' }
    - { name: 'Apple', role: 'Warm-white canvas, full-pill CTA affordance, soft-grey supporting copy, and product-photography restraint.', url: 'https://www.apple.com' }
    - { name: 'iA Writer', role: 'Writing-as-craft positioning — typography treated as the product, restraint as a statement of taste.', url: 'https://ia.net/writer' }
    - { name: 'Things (Cultured Code)', role: 'Indie-Mac productivity aesthetic — calm, premium, paper-warm surfaces over saturated SaaS color.', url: 'https://culturedcode.com/things/' }
---

## 1. Visual Theme & Atmosphere

Craft's site is a fine-press editorial that happens to sell a notes app. The canvas is a warm-white `#fcf9f7` — paper, not screen-white — and the first thing the page does is set a 66px headline in **Untitled Serif** at weight 400. Not bold. The literary serif at large size, in near-black `#030302` ink, gives the page the register of a well-set magazine spread rather than a productivity dashboard. The body copy that follows is **Untitled Sans**, a clean neutral grotesque, so the page reads as a deliberate editorial pairing: serif to speak, sans to explain.

The atmosphere is **premium, editorial, unhurried**. There is no gradient hero, no animated mesh, no saturated marketing color competing for the eye. The page is almost monochrome — warm paper, near-black ink, and a single high-contrast affordance: the **full-pill "Try Craft Free" CTA**, a `#030302` near-black button with white text and a 9999px radius that makes it read as a lozenge rather than a rectangle. The pill is the only piece of pure geometry on a page otherwise built from type and whitespace.

The near-black is `#030302`, not `#000`. The canvas is `#fcf9f7`, not `#ffffff`. Both choices are deliberate: the warmth pulls the page toward ink-on-paper and away from text-on-screen. It is the same instinct behind a book designer choosing cream stock over bright white — the page should feel printed, considered, easy on the eye across a long read. Against this warm paper, the near-black ink reads softer than a hard black would, which lets Craft set type *large* without the page feeling heavy.

Craft pairs this warm-white identity with a **blue accent** — but almost entirely inside the product. In-app, blue carries links, selection, and the focus state (the neutral oklch scale that surfaced in the probe is the app's *dark* theme; the marketing site is the warm-white twin). On the marketing surface, blue is held back to a whisper — a link here, a focus ring there — so the public page stays paper-and-ink. This is the brand's discipline: the identity is the *pairing* (warm-white + serif + near-black), and color is reserved for the working software.

The result is a page that signals taste before it signals features. Where most productivity sites lead with screenshots, badges, and saturated gradients, Craft leads with a serif sentence on warm paper. The implicit claim — "this is a tool for people who care how things are made" — is carried entirely by the type and the restraint, before a single feature is named.

**Key Characteristics:**
- Warm-white canvas (`#fcf9f7`) — paper, never screen-white, never tinted grey
- Editorial type pairing: **Untitled Serif** display + **Untitled Sans** body (Klim Type Foundry)
- 66px H1 in serif at **weight 400** — never bold; the calm of large light-weight serif is the brand
- Near-black ink (`#030302`) — softer than pure black, reads as ink-on-paper
- Full-pill (9999px) near-black "Try Craft Free" CTA — the page's only hard geometry
- Almost-monochrome marketing palette: paper, ink, pill — blue reserved for in-product use
- Generous, unhurried whitespace — magazine cadence, not dashboard density
- Body copy in soft warm-grey (`#3a3835` / `#5c5a57`), not pure ink, for the running-text layer
- Warm-tinted ambient shadows (`rgba(36,30,24,…)`) on the rare lifted card — never cold grey
- Cards lift off the warm canvas via pure-white (`#ffffff`) surfaces plus hairline borders
- Restraint as positioning — taste signalled by type before features are named

## 2. Color Palette & Roles

### Primary
- **Canvas** (`#fcf9f7`): warm-white paper floor — the entire marketing surface. The ink-on-paper metaphor lives here.
- **Ink** (`#030302`): near-black — the dominant text color. Headlines, body display, primary nav. Reads softer than `#000` against warm paper.
- **Ink Body** (`#3a3835`): warm dark grey — secondary running text and long-form body where pure ink would feel heavy.

### Brand & Dark
- **Brand** (`#030302`): near-black — the pill CTA fill and the brand's structural voltage. The same value as Ink, intentionally; Craft treats type-color and brand-color as one.
- **Brand Hover** (`#1c1b19`): fractionally-lifted near-black for the pressed/hover state on the pill.
- **On-Brand** (`#ffffff`): pure-white text on the near-black pill — 20.6:1 contrast, AAA.

### Accent
- **Accent Blue** (`#2563eb`): the in-product blue — inline links, focus, text selection. Held to a whisper on the marketing surface.
- **Accent Blue Hover** (`#1d4ed8`): darker blue on hover/press for links and interactive blue.
- **Accent Blue Soft** (`#e8effe`): soft blue wash — selection background, soft chips.
- **Accent Blue Deep** (`#1e40af`): text on the soft-blue chip — passes AAA against `#e8effe`.

### Interactive
- **Link** (`#2563eb`): inline body link — blue, underline on hover (rest state may be underline-free in headings).
- **Link Hover** (`#1d4ed8`): darker blue on hover.
- **Selected** (`#2563eb` text on `#e8effe` wash): in-product text-selection highlight.
- **Disabled** (`#8a8782` text on `#f7f2ee` fill): drained warm grey on a warm panel.

### Neutral Scale
- **Ink** (`#030302`) — near-black, the typical heavy-type color
- **Ink Body** (`#3a3835`) — warm dark grey, long-form body
- **Secondary** (`#5c5a57`) — supporting copy, sub-labels
- **Muted** (`#8a8782`) — captions, metadata (large or secondary use only — below AA at body size)

### Surface & Borders
- **Canvas** (`#fcf9f7`) — warm-white page floor
- **Surface Soft** (`#f7f2ee`) — slightly deeper warm panel for banded sections
- **Surface** (`#ffffff`) — pure-white card lifted off the warm canvas
- **Surface Elev** (`#fbf7f4`) — warm nested card surface
- **Hairline** (`rgba(3,3,2,0.09)`) — default 9% near-black border
- **Hairline Soft** (`rgba(3,3,2,0.05)`) — 5% near-black for the faintest dividers
- **Hairline Strong** (`rgba(3,3,2,0.16)`) — 16% near-black for focused inputs

### Shadow Colors
Craft uses **warm-tinted** shadows (`rgba(36,30,24,…)`) rather than cold neutral grey — the warmth matches the paper canvas. Shadows are used sparingly; most surfaces lift via the white-card-on-warm-canvas contrast plus a hairline border, not via elevation.

- `rgba(36,30,24,0.05) 0 1px 2px 0` — ambient
- `rgba(36,30,24,0.05) 0 6px 20px -6px` — card hover
- `rgba(36,30,24,0.10) 0 16px 40px -12px, rgba(36,30,24,0.05) 0 4px 10px -4px` — floating panel / dropdown

### Semantic
- **Success** (`#2f7d4f` on `#e8f3ec`) — confirmation green
- **Warning** (`#9a6212` on `#fbf0dc`) — advisory amber
- **Danger** (`#c0382e` on `#f9e6e3`) — form-error red
- **Info** (`#2563eb` on `#e8effe`) — informational accent — *intentionally* the same as accent-blue.

## 3. Typography Rules

### Font Family

**Display Primary**: `"Untitled Serif"` (Klim Type Foundry) — the editorial serif that carries every headline. Fallback chain: `"Untitled Serif Font", Georgia, "Times New Roman", serif`. Georgia is the closest non-licensed approximation — a screen-readable serif with similar warmth and proportion.

**Body Primary**: `"Untitled Sans"` (Klim Type Foundry) — a neutral grotesque for running text. Fallback chain: `"Untitled Sans Font", -apple-system, system-ui, "Segoe UI", Roboto, sans-serif`. The body sans is deliberately *quiet* so the serif headlines carry the personality.

**Mono**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace` — for code blocks and inline shortcuts inside product demonstrations.

**OpenType features**: `kern` and `liga` always on for the serif. No manually enabled stylistic sets — the families are used as drawn.

The serif-display / sans-body pairing is the brand's central typographic decision. Most productivity sites run all-sans (Notion, Linear) for a "neutral software" feel. Craft instead pairs a literary serif headline with a neutral sans body, which gives the page an editorial register — the serif speaks with character, the sans explains with clarity. The split is the differentiator.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|------|------|------|--------|-------------|----------------|-------|
| display-hero | Untitled Serif | 80 | 400 | 1.02 | -0.02em | Oversized hero moment (large viewports) |
| display-lg / h1 | Untitled Serif | 66 | 400 | 1.05 | -0.018em | The probed hero H1 — peak typographic moment |
| h2 | Untitled Serif | 54 | 400 | 1.08 | -0.014em | The probed section opener |
| h3 | Untitled Serif | 36 | 400 | 1.15 | -0.01em | Sub-section opener |
| h4 | Untitled Serif | 24 | 500 | 1.25 | -0.005em | Feature title — the one serif weight-up |
| title-md | Untitled Sans | 20 | 600 | 1.35 | 0 | Card title (sans, for working UI) |
| title-sm | Untitled Sans | 17 | 600 | 1.40 | 0 | Inline emphasis title |
| body-lg | Untitled Sans | 19 | 400 | 1.60 | 0 | Hero deck — slightly larger body |
| body | Untitled Sans | 16 | 400 | 1.60 | 0 | The probed default running text |
| body-sm | Untitled Sans | 14 | 400 | 1.55 | 0 | Card meta, supporting copy |
| caption | Untitled Sans | 13 | 500 | 1.40 | 0 | Timestamp, byline |
| label | Untitled Sans | 12 | 600 | 1.30 | 0.06em | Section eyebrow — uppercase, tracked |
| button | Untitled Sans | 15 | 500 | 1.20 | 0 | Pill CTA / button label |
| nav-link | Untitled Sans | 15 | 500 | 1.40 | 0 | Top-nav item |
| link | Untitled Sans | 16 | 400 | 1.60 | 0 | Inline body link (matches body) |
| code | mono | 14 | 400 | 1.55 | 0 | Code sample in product demos |

### Principles

- **Serif display at weight 400 is the brand fingerprint.** Craft refuses to bold its serif headlines — the lighter weight at 66px is what gives the page its editorial calm. Pushing the H1 to 600/700 collapses the magazine register into generic SaaS.
- **Serif speaks, sans explains.** Untitled Serif carries headlines and pull-moments; Untitled Sans carries everything that needs to be read fast. Never swap the roles — sans headlines lose the personality, serif body loses the legibility.
- **16px body at 1.60 line-height.** The lush leading is part of the editorial feel; tighter leading reads as a denser dashboard.
- **Near-black ink, never pure black.** `#030302` is warmer and softer than `#000` against the paper canvas; substituting `#000` makes large type feel heavy and "screen-y".
- **Negative tracking on serif display only.** Headlines tighten (-0.018em at 66px); body and labels sit at zero or slightly positive (0.06em on uppercase labels).
- **Body copy steps down to warm grey for long reads.** Pure ink (`#030302`) for headlines and short emphasis; `#3a3835` / `#5c5a57` warm-grey for sustained running text.
- **Georgia is the serif fallback, system-sans the body fallback.** If Untitled is unavailable, Georgia approximates the serif warmth and a system grotesque (-apple-system / Segoe UI / Roboto) covers the body without drama.

## 4. Component Stylings

### Buttons

**`button-primary`** — The signature full-pill CTA ("Try Craft Free"). `#030302` near-black fill, white text at 15px / 500, **9999px radius** (full pill), 12×24px padding, 48px height. The pill is the page's only hard geometry; the radius is what makes it read premium rather than utilitarian.

**`button-primary-hover`** — Pointer hover. Background lifts to `#1c1b19` over 150ms standard. **No transform, no scale, no glow** — color-only, matching the page's restraint.

**`button-ghost`** — Secondary action. Transparent fill, near-black text, 1px hairline border (`rgba(3,3,2,0.09)`), same 9999px pill radius and 12×24px padding. On hover, the border darkens to 16% and a faint warm fill appears.

**`button-text`** — Tertiary / inline action. No fill, no border; near-black or blue (`#2563eb`) text with an underline that appears on hover. Used for "Learn more" / "See pricing" links beside the primary pill.

### Cards

**`card`** — Pure-white feature card. `#ffffff` fill lifted off the warm canvas, **16px radius**, 1px hairline border (`rgba(3,3,2,0.09)`), 32px padding. Default state is flat or near-flat; the white-on-warm contrast plus the hairline does the lifting. Optional warm ambient shadow (`rgba(36,30,24,0.05) 0 6px 20px -6px`) on hover.

**`card-warm`** — Warm nested panel. `#fbf7f4` fill, soft 5% hairline. Used for in-flow content where pure white on warm canvas would feel too stark.

**`testimonial-quote`** — Pull-quote card. White fill, 16px radius, hairline border, 32px padding. Quote set in Untitled Serif at 24px / 400 near-black (the serif carries the human voice), byline beneath in caption secondary with a circular avatar flush left.

### Badges, Tags, Pills

**`badge`** — Soft warm chip. `#f7f2ee` fill, secondary (`#5c5a57`) text, 9999px radius, 4×12px padding, 12px / 600 uppercase label. Used for "New", "Beta", section eyebrows.

**`badge-blue`** — Soft blue chip. `#e8effe` fill, deep-blue (`#1e40af`) text, 9999px radius. The rare moment blue surfaces on the marketing page — used for in-product feature callouts.

### Inputs / Forms

**`input`** — White fill (`#ffffff`), 1px hairline (`rgba(3,3,2,0.09)`), **12px radius**, 44px height, 12×16px padding. Placeholder in 16px / 400 muted. On focus, the border thickens to 16% near-black and a soft blue ring (`0 0 0 3px rgba(37,99,235,0.35)`) appears — blue is the focus voltage even when the page is otherwise paper-and-ink.

**`textarea`** — Same treatment as input, taller, used for the newsletter / waitlist capture.

### Navigation

**`top-nav`** — Warm-white surface (`#fcf9f7`, matching canvas), 64px height, optional 1px bottom hairline on scroll. Wordmark flush left in near-black. Nav links (Product, Pricing, Resources) in 15px / 500 near-black, no underline at rest. Right side: a text "Sign in" link plus the near-black full-pill "Try Craft Free" CTA flush right.

**`nav-link`** — Near-black (`#030302`) or warm grey, no underline at rest; underline or color-soften on hover.

### Decorative

**`section-eyebrow`** — Uppercase 12px / 600 label, tracked 0.06em, in secondary grey — sits above serif section headlines as a quiet category marker (the editorial "kicker" convention).

## 5. Layout Principles

### Spacing System

- Base unit: **4px**
- Scale: `0 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 · 128`
- Section padding (vertical): 96–128px for major bands — generous magazine cadence
- Card internal padding: 32px on feature and testimonial cards; 24px on smaller nested panels
- Inter-card gutters: 24px between cards in a multi-up grid

### Grid & Container

- Max content width: **1200px** outer container; prose columns cap near **680px** for comfortable measure (the editorial line-length convention)
- Hero: single-column, often left-aligned or centered, serif H1 + sans deck + pill CTA stacked vertically
- Feature grid: 3-up at desktop, 2-up at tablet, 1-up at mobile
- Product screenshots float against the warm canvas, framed by their own rounding and a soft warm shadow

### Whitespace Philosophy

The page reads like a magazine spread, not a dashboard. Whitespace is the primary structural device — sections breathe with 96–128px vertical bands, prose holds a 680px measure for readability, and the warm canvas runs edge-to-edge between sections. Surfaces lift via the white-card-on-warm-paper contrast and a hairline border, rarely via stacked shadow. The restraint is the point: the page should feel unhurried.

### Section Cadence

A typical Craft page runs:

1. Warm-white hero (66px serif H1 at weight 400, 19px sans deck, near-black full-pill CTA, product screenshot beneath)
2. Feature spread 1 (editor / docs demo — full-width screenshot, supporting serif sub-head + sans copy)
3. Feature grid (three-up white cards on warm canvas, sans titles + body, serif section opener above)
4. Testimonial / social-proof band (serif pull-quotes on white cards)
5. Use-case or template gallery (warm-panel band, `#f7f2ee`)
6. Closing CTA band (serif H2, near-black full-pill CTA centered)
7. Footer (sans column heads in 17px / 600, links in 14px / 400 secondary)

The page does not light/dark alternate — it stays warm-white throughout. The "alternation" is warm-canvas (`#fcf9f7`) versus warm-panel (`#f7f2ee`) versus white-card (`#ffffff`) surface contrast.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|------|-------|-----|
| Micro | 4px | Inline tags, fine-grained chips |
| Standard | 8px | Small controls, nested inputs |
| Comfortable | 12px | Text inputs, small cards — the working-UI default |
| Relaxed | 16px | Feature cards, testimonial cards — the dominant card rounding |
| Large | 24px | Large feature shells, product-screenshot frames |
| Pill | 9999px | The "Try Craft Free" CTA, badges, chips |

Craft's radius hierarchy is **soft but disciplined** — cards round generously at 16px (warmer than Bear's architectural 8px), inputs at 12px, and the signature CTA goes all the way to a full pill (9999px). The full-pill button against otherwise-rectangular type-and-card layout is the deliberate contrast: one piece of pure geometry on a page of paper and ink.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | no shadow | Canvas, hero, most sections, nav (~80% of surfaces) |
| 1 — Ambient | `rgba(36,30,24,0.05) 0 1px 2px 0` | Subtle inputs, nav at scroll |
| 2 — Card | `rgba(36,30,24,0.05) 0 6px 20px -6px` | Feature card hover, floating screenshot |
| 3 — Elevated | `rgba(36,30,24,0.10) 0 16px 40px -12px, rgba(36,30,24,0.05) 0 4px 10px -4px` | Dropdowns, popovers, floating panels |
| 4 — Modal | scrim `rgba(18,16,14,0.45)` + dialog with elevated shadow | Sign-in / waitlist modal |

### Shadow Philosophy

Craft's shadows are **warm-tinted** (`rgba(36,30,24,…)`) to match the paper canvas — cold neutral-grey shadows would fight the warmth. Elevation is used sparingly: the page's primary lift mechanism is the white-card-on-warm-canvas contrast plus a hairline border, not a shadow stack. When a shadow does appear (a floating product screenshot, a hover on a feature card), it is soft and warm — a diffuse lift rather than a hard drop. The restraint keeps the page reading as printed-flat editorial rather than layered Material-style UI.

## 8. Interaction & Motion

### Easing

- **Standard**: `cubic-bezier(0.4, 0, 0.2, 1)` — default for hover color swaps, hairline transitions
- **Emphasized**: `cubic-bezier(0.2, 0, 0, 1)` — modal entry, larger reveals
- **Out-soft**: `cubic-bezier(0.0, 0, 0.2, 1)` — section scroll-reveals

### Durations

| Bucket | Value | Use |
|--------|-------|-----|
| Fast | 150ms | Button hover, hairline tone swaps, focus-ring fade |
| Standard | 240ms | Card hover lift, link color shifts |
| Slow | 320ms | Modal entry, section scroll-reveal |

### Per-Component Recipes

- **Primary pill hover**: background `#030302` → `#1c1b19` over 150ms standard. **No transform, no scale.** Color-only.
- **Ghost button hover**: border darkens 9% → 16% near-black, faint warm fill appears, over 150ms.
- **Card hover**: a soft warm ambient shadow grows over 240ms; an optional 1px rise on interactive cards. Most static cards stay flat.
- **Link hover (blue)**: color darkens `#2563eb` → `#1d4ed8` over 150ms; underline appears or thickens.
- **Focus ring**: a soft blue ring (`0 0 0 3px rgba(37,99,235,0.35)`) fades in over 150ms with 2px outline-offset.
- **Scroll reveal**: sections fade in and rise 8px over 320ms ease-out-soft on first viewport entry. One-shot per section.

### Page Transitions

Page-to-page navigation uses a brief cross-fade; the warm-white canvas means there is no jarring light/dark flash. Anchored smooth-scroll uses emphasized easing.

### Reduced Motion

Respects `prefers-reduced-motion: reduce`. All `translate` and `scale` transforms suppress; transitions degrade to opacity-only or instant. Scroll-reveal becomes static render-on-mount. Card hover loses its rise; only the focus ring and color swaps remain.

## 9. Accessibility & A11y

### Contrast Pairs

| Pair | Ratio | Level |
|------|-------|-------|
| #030302 ink on #fcf9f7 canvas | 19.7 | AAA |
| #ffffff on #030302 brand pill | 20.6 | AAA |
| #030302 brand on #fcf9f7 canvas | 19.7 | AAA |
| #5c5a57 secondary on #fcf9f7 | 6.6 | AA body / AAA large |
| #2563eb blue on #fcf9f7 | 4.9 | AA body / AAA large |
| #1e40af deep-blue on #e8effe soft-blue | 8.4 | AAA |

The near-black ink on warm paper lands at a generous 19.7:1 — comfortably AAA — which is why Craft can set serif type *large* without fatigue. The secondary warm-grey (`#5c5a57`) is calibrated to pass AA at body size; the lighter muted grey (`#8a8782`) is reserved for large text and metadata, where its 3.4:1 is acceptable but not for body runs. Blue (`#2563eb`) clears AA on the warm canvas for links and large text.

### Focus Indicators

Focus ring is a soft blue (`0 0 0 3px rgba(37,99,235,0.35)`) with 2px outline-offset. Blue is the focus voltage even on the otherwise paper-and-ink page — the brand reserves blue for *interaction* (focus, links, selection) and keeps near-black for *identity* (the pill, the type).

### ARIA Patterns

- **Top nav**: `<nav>` landmark with `aria-label="Primary"`. The wordmark is a link to home with an accessible name.
- **Primary CTA**: `<a>` or `<button>` with a clear accessible name ("Try Craft Free"); the pill shape is decorative, the label carries the meaning.
- **Feature cards**: if the whole card is clickable, the card is a single `<a>` with one accessible name; nested links avoid duplicate tab stops.
- **Section eyebrows**: decorative kickers are associated with their heading, not announced as separate landmarks.
- **Modal** (sign-in / waitlist): focus trap, Esc closes, click-outside closes, focus returns to the trigger.

### Keyboard Navigation

- Top nav: Tab moves logo → nav links → Sign in → Try Craft Free
- Feature cards: Tab moves card → card; the whole card activates on Enter when it is a single link
- Modal: Tab cycles only through interactive elements inside the dialog
- All interactive elements show the blue focus ring; the ring is never suppressed without a replacement

### Screen Reader Hints

Product screenshots carry descriptive alt text naming the visible UI ("Craft document editor with a styled heading, a card block, and the right-hand outline panel visible"). Decorative section eyebrows and ornamental serifs are not separately announced. The serif/sans split is purely visual and carries no semantic weight.

### Reduced Motion

All transitions degrade to opacity-only or instant. Scroll-reveal becomes static. Card hover loses its rise. The focus ring and essential color-state changes remain.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Top nav collapses to logo + hamburger; hero H1 drops 66 → 36px; feature cards 1-up; pill CTA goes full-width or stays inline at 48px height; screenshots scale to viewport-width |
| Tablet | 640–1024px | Top nav keeps inline links; hero H1 settles ~48px; feature cards 2-up; screenshots ~90% viewport-width |
| Desktop | 1024–1280px | Full top nav; hero H1 at 66px; feature cards 3-up; container at 1200px |
| Wide | >1280px | Content caps at 1200px; gutters absorb the rest; hero may scale to the 80px display-hero size |

### Touch Targets

- Primary pill CTA: 48px height — comfortably above the 44px minimum
- Nav links: minimum 44×44px hit area
- Inputs: 44px height
- Inline link tap-target: 44px row height even at 16px / 1.60 body type

### Collapsing Strategy

- Top-nav links collapse into a hamburger sheet below 640px
- Feature grids: 3 → 2 → 1 columns
- Serif headlines scale down but never switch to sans — the serif identity holds at all sizes
- Product screenshots scale by viewport — never crop, never deform; rounding scales proportionally

### Image Behavior

Product screenshots render at 2x with CSS rounding (16–24px) and a soft warm drop shadow. They scale via `width: 100%; height: auto;` to preserve aspect ratio against the warm canvas.

### Container Queries

Used on card grids where a card may appear in a wide or narrow column — the card's internal layout (title / body / icon stacking) responds to its own width rather than the viewport.

## 11. Content & Voice

### Tone

Calm, considered, literate. Craft's voice is closer to a good magazine than a SaaS landing — full sentences, no exclamation marks, no Silicon Valley enthusiasm. The serif headline does the emotional work; the sans body explains plainly. The voice trusts the reader to value craft (the pun is the brand) without being told to.

### Microcopy Patterns

- **Button verbs**: "Try Craft Free", "Get started", "See pricing", "Sign in" — direct, outcome-named
- **Error message recipe**: `[What went wrong] + [What to try]` — e.g., "We couldn't sync that document. Check your connection and try again."
- **Success confirmations**: short, factual — "Saved." / "Synced."
- **Field labels**: minimal — "Email", "Workspace name" — no friendly framing

### Empty States

- Empty document: "Start with a blank page, or pick a template." — names both paths.
- Empty space / workspace: "Nothing here yet. Create your first document." — declarative, single action.

### CTA Verb Conventions

- Primary action: **"Try Craft Free"** (the signature pill), **"Get started"**
- Secondary action: **"See pricing"**, **"Sign in"**, **"Watch the tour"**
- Tertiary text: **"Learn more"**, **"Read the docs"**, **"Explore templates"**
- Avoided: "Submit", "Click here", "Buy now" — Craft uses outcome verbs, never generic ones

## 12. Dark Mode & Theming

**Light-only marketing surface.** The Craft *app* ships full light/dark themes — the neutral oklch scale that surfaced in the probe is the app's dark palette (near-black `#0a0a0a` backgrounds, `#e5e5e5` ink, `#262626` accents, on a cool shadcn-style neutral ramp). The public marketing site, however, is warm-white only — it stays on the `#fcf9f7` paper canvas throughout to preserve the editorial, ink-on-paper identity.

If a future dark marketing variant were shipped, the warm-white identity would invert to a warm near-black rather than the app's cool neutral: canvas `#161412` (warm near-black, not the app's cool `#0a0a0a`), surface `#211e1b`, ink `#f3efea` (warm off-white), brand pill flipped to a warm off-white fill with near-black text, and the blue accent lightened to `#7aa2f7` to clear AA on the dark surface. The key is that the marketing dark theme would stay *warm* to match the brand, where the in-app dark theme is deliberately *cool/neutral* for working comfort.

## 13. Lineage & Influences

Craft's design is a fine-press editorial that ships a notes app. The visual lineage runs through three traditions: **print magazine and book design** (the serif-display / sans-body pairing, the warm paper canvas `#fcf9f7`, the 680px prose measure, the unhurried section cadence); **Klim Type Foundry's editorial register** (Untitled Serif + Untitled Sans, a "neutral" foundry family chosen the way a careful art director chooses type — present but not loud); and the **premium-Apple / Linear school of product marketing** (warm-white canvas, full-pill CTA, near-monochrome restraint, a single accent held almost entirely off the marketing page).

The serif headline is what distinguishes Craft from its all-sans contemporaries. Notion and Linear both lead with neutral grotesque type for a "software" feel; Craft instead leads with a literary serif at weight 400, which gives the page an editorial, almost-bookish character before a single feature is named. The near-black ink (`#030302`, not `#000`) and the warm paper (`#fcf9f7`, not `#ffffff`) reinforce this — the page is tuned to read as ink-on-paper, the same instinct behind iA Writer's writing-as-craft positioning and Things' calm indie-Mac surfaces.

What Craft rejects: saturated marketing gradients, all-sans neutrality, dense dashboard layouts, exclamation-point enthusiasm, and a loud brand color on the marketing page. In-product, Craft pairs the warm-white identity with a blue accent for links and selection — but the public site keeps blue to a whisper, letting paper, ink, and the full-pill CTA carry the brand. The discipline — serif speaks, sans explains, color stays in the working software — is the whole identity.

**Influences:**
- Klim Type Foundry (Untitled Serif / Untitled Sans) — the editorial type pairing that is the brand's backbone, [klim.co.nz/retail-fonts/untitled-serif](https://klim.co.nz/retail-fonts/untitled-serif/)
- Notion — adjacent docs/notes contemporary Craft positions against by going serif-led, [notion.so](https://www.notion.so)
- Linear — premium near-monochrome product-marketing restraint, [linear.app](https://linear.app)
- Apple — warm-white canvas, full-pill CTA affordance, product-photography restraint, [apple.com](https://www.apple.com)
- iA Writer — writing-as-craft positioning, typography treated as the product, [ia.net/writer](https://ia.net/writer)
- Things (Cultured Code) — calm, premium, paper-warm indie-Mac productivity aesthetic, [culturedcode.com/things](https://culturedcode.com/things/)

## 14. Do's and Don'ts

**Do**
- Keep the canvas warm-white (`#fcf9f7`) — paper, never screen-white, never tinted grey
- Set headlines in Untitled Serif at weight 400 (never bold) — the calm of large light-weight serif is the brand
- Pair the serif display with Untitled Sans body — serif speaks, sans explains
- Use near-black ink (`#030302`), not pure `#000` — the warmth reads as ink-on-paper
- Make the primary CTA a full pill (9999px) in near-black with white text — the page's one piece of hard geometry
- Step body copy down to warm grey (`#3a3835` / `#5c5a57`) for long reads
- Use warm-tinted shadows (`rgba(36,30,24,…)`) sparingly — the page lifts via white-on-warm contrast, not shadow stacks
- Round cards generously at 16px and inputs at 12px — soft but disciplined
- Hold the blue accent (`#2563eb`) to a whisper on marketing pages — reserve it for in-product links, focus, selection
- Give sections 96–128px vertical breathing room and prose a ~680px measure — magazine cadence
- Use the blue focus ring (`rgba(37,99,235,0.35)`) even on the paper-and-ink page — blue is the interaction voltage

**Don't**
- Don't use a screen-white `#ffffff` canvas — the warm paper is the brand; white-card surfaces are the exception, not the floor
- Don't bold the serif headlines — weight 400 is what separates Craft from generic SaaS
- Don't set headlines in sans or body in serif — the split roles are non-negotiable
- Don't substitute pure black (`#000`) for the near-black ink — large type goes heavy and "screen-y"
- Don't make the CTA a sharp-cornered rectangle — the full pill is the signature
- Don't flood the marketing page with the blue accent — it belongs inside the product, not on the landing
- Don't add saturated marketing gradients or animated mesh heroes — the restraint is the positioning
- Don't crowd sections — dashboard density collapses the editorial register
- Don't use cold neutral-grey shadows — warmth must match the paper
- Don't import the app's cool dark palette into the marketing site — the marketing surface is warm-white only
- Don't use exclamation marks or "Click here" CTAs — the voice is calm and outcome-named
- Don't tighten body line-height below 1.6 — the lush leading is part of the read

## 15. Agent Prompt Guide

### Quick Color Reference

```
Canvas:        #fcf9f7  (warm-white paper — the brand floor)
Surface-warm:  #f7f2ee  (deeper warm panel for banded sections)
Surface-white: #ffffff  (pure-white card lifted off the warm canvas)
Ink:           #030302  (near-black — headlines, brand, pill fill)
Ink-body:      #3a3835  (warm dark grey — long-form body)
Secondary:     #5c5a57  (supporting copy, sub-labels)
Muted:         #8a8782  (captions, metadata — large/secondary only)
Accent-blue:   #2563eb  (in-product links / focus / selection)
Blue-soft:     #e8effe  (selection wash, soft chip background)
Hairline:      rgba(3,3,2,0.09)
On-brand:      #ffffff  (white text on the near-black pill)
```

### Example Component Prompts

- "Create a Craft-style hero: warm-white canvas (#fcf9f7), a 66px Untitled Serif H1 at weight 400 in near-black #030302 with -0.018em tracking and 1.05 line-height (serif, never bold). Beneath it: a 19px Untitled Sans deck in warm grey #3a3835 at 1.60 line-height. Below: a full-pill (9999px) near-black #030302 'Try Craft Free' button with white text at 15px / 500, 12×24px padding, 48px height. The whole hero reads editorial and unhurried — no gradients, no animated background, just type and whitespace on warm paper."
- "Design a Craft feature card: pure-white fill (#ffffff) lifted off the warm canvas, 16px radius, 1px hairline border at rgba(3,3,2,0.09), 32px padding. Inside: a 20px / 600 Untitled Sans title in near-black #030302, then 16px / 400 Untitled Sans body at 1.60 line-height in warm grey #3a3835. The card lifts via white-on-warm contrast plus the hairline — no shadow at rest; a soft warm shadow (rgba(36,30,24,0.05) 0 6px 20px -6px) only on hover."
- "Build a Craft full-pill CTA: near-black #030302 fill, white text 'Try Craft Free' at 15px / 500 Untitled Sans, 9999px radius (full pill), 12×24px padding, 48px height. On hover, the fill lifts to #1c1b19 over 150ms — color-only, no scale or transform. This is the page's only piece of hard geometry against an otherwise type-and-card layout."
- "Create the Craft nav: 64px tall warm-white surface (#fcf9f7, matching canvas), wordmark left in near-black #030302, three centered nav links (Product, Pricing, Resources) in 15px / 500 #030302 with no underline at rest. Right side: a 'Sign in' text link plus the near-black full-pill 'Try Craft Free' CTA. Add a 1px bottom hairline (rgba(3,3,2,0.09)) only when the page is scrolled."
- "Design a Craft testimonial card: white fill, 16px radius, 1px hairline border, 32px padding. The pull-quote is set in Untitled Serif at 24px / 400 near-black (#030302) with 1.25 line-height — the serif carries the human voice. Beneath: a 40px circular avatar flush left, with name in 14px / 600 Untitled Sans and role in 13px / 500 secondary grey (#5c5a57)."
- "Build a Craft section opener: an uppercase 12px / 600 Untitled Sans eyebrow label, tracked 0.06em, in secondary grey (#5c5a57), sitting above a 54px Untitled Serif H2 at weight 400 in near-black #030302 with -0.014em tracking. Generous 96px vertical padding above. The eyebrow is the editorial 'kicker'; the serif headline does the emotional work."

### Iteration Guide

1. **Canvas warm-white, never screen-white.** `#fcf9f7` is paper; `#ffffff` is the card exception. If the page looks cold, the canvas is wrong.
2. **Serif headlines at weight 400, never bold.** The calm of large light-weight serif is the entire brand. Bolding tips it into generic SaaS.
3. **Serif speaks, sans explains.** Untitled Serif for headlines and pull-quotes; Untitled Sans for everything read fast. Never swap.
4. **Near-black ink, not pure black.** `#030302` is warmer and softer than `#000` against paper — large type stays comfortable.
5. **The CTA is a full pill.** 9999px near-black with white text is the signature; a sharp rectangle loses the premium register.
6. **Hold blue back on marketing.** `#2563eb` belongs to in-product links, focus, and selection — a whisper on the landing, never a flood.
7. **Lift via contrast, not shadow.** White-card-on-warm-canvas plus a hairline does the work; warm shadows appear only on hover, sparingly.
8. **Give it room.** 96–128px section bands and a ~680px prose measure at 1.60 line-height — the editorial cadence is half the brand.
Prose

1. Visual Theme & Atmosphere

Craft’s site is a fine-press editorial that happens to sell a notes app. The canvas is a warm-white #fcf9f7 — paper, not screen-white — and the first thing the page does is set a 66px headline in Untitled Serif at weight 400. Not bold. The literary serif at large size, in near-black #030302 ink, gives the page the register of a well-set magazine spread rather than a productivity dashboard. The body copy that follows is Untitled Sans, a clean neutral grotesque, so the page reads as a deliberate editorial pairing: serif to speak, sans to explain.

The atmosphere is premium, editorial, unhurried. There is no gradient hero, no animated mesh, no saturated marketing color competing for the eye. The page is almost monochrome — warm paper, near-black ink, and a single high-contrast affordance: the full-pill “Try Craft Free” CTA, a #030302 near-black button with white text and a 9999px radius that makes it read as a lozenge rather than a rectangle. The pill is the only piece of pure geometry on a page otherwise built from type and whitespace.

The near-black is #030302, not #000. The canvas is #fcf9f7, not #ffffff. Both choices are deliberate: the warmth pulls the page toward ink-on-paper and away from text-on-screen. It is the same instinct behind a book designer choosing cream stock over bright white — the page should feel printed, considered, easy on the eye across a long read. Against this warm paper, the near-black ink reads softer than a hard black would, which lets Craft set type large without the page feeling heavy.

Craft pairs this warm-white identity with a blue accent — but almost entirely inside the product. In-app, blue carries links, selection, and the focus state (the neutral oklch scale that surfaced in the probe is the app’s dark theme; the marketing site is the warm-white twin). On the marketing surface, blue is held back to a whisper — a link here, a focus ring there — so the public page stays paper-and-ink. This is the brand’s discipline: the identity is the pairing (warm-white + serif + near-black), and color is reserved for the working software.

The result is a page that signals taste before it signals features. Where most productivity sites lead with screenshots, badges, and saturated gradients, Craft leads with a serif sentence on warm paper. The implicit claim — “this is a tool for people who care how things are made” — is carried entirely by the type and the restraint, before a single feature is named.

Key Characteristics:

  • Warm-white canvas (#fcf9f7) — paper, never screen-white, never tinted grey
  • Editorial type pairing: Untitled Serif display + Untitled Sans body (Klim Type Foundry)
  • 66px H1 in serif at weight 400 — never bold; the calm of large light-weight serif is the brand
  • Near-black ink (#030302) — softer than pure black, reads as ink-on-paper
  • Full-pill (9999px) near-black “Try Craft Free” CTA — the page’s only hard geometry
  • Almost-monochrome marketing palette: paper, ink, pill — blue reserved for in-product use
  • Generous, unhurried whitespace — magazine cadence, not dashboard density
  • Body copy in soft warm-grey (#3a3835 / #5c5a57), not pure ink, for the running-text layer
  • Warm-tinted ambient shadows (rgba(36,30,24,…)) on the rare lifted card — never cold grey
  • Cards lift off the warm canvas via pure-white (#ffffff) surfaces plus hairline borders
  • Restraint as positioning — taste signalled by type before features are named

2. Color Palette & Roles

Primary

  • Canvas (#fcf9f7): warm-white paper floor — the entire marketing surface. The ink-on-paper metaphor lives here.
  • Ink (#030302): near-black — the dominant text color. Headlines, body display, primary nav. Reads softer than #000 against warm paper.
  • Ink Body (#3a3835): warm dark grey — secondary running text and long-form body where pure ink would feel heavy.

Brand & Dark

  • Brand (#030302): near-black — the pill CTA fill and the brand’s structural voltage. The same value as Ink, intentionally; Craft treats type-color and brand-color as one.
  • Brand Hover (#1c1b19): fractionally-lifted near-black for the pressed/hover state on the pill.
  • On-Brand (#ffffff): pure-white text on the near-black pill — 20.6:1 contrast, AAA.

Accent

  • Accent Blue (#2563eb): the in-product blue — inline links, focus, text selection. Held to a whisper on the marketing surface.
  • Accent Blue Hover (#1d4ed8): darker blue on hover/press for links and interactive blue.
  • Accent Blue Soft (#e8effe): soft blue wash — selection background, soft chips.
  • Accent Blue Deep (#1e40af): text on the soft-blue chip — passes AAA against #e8effe.

Interactive

  • Link (#2563eb): inline body link — blue, underline on hover (rest state may be underline-free in headings).
  • Link Hover (#1d4ed8): darker blue on hover.
  • Selected (#2563eb text on #e8effe wash): in-product text-selection highlight.
  • Disabled (#8a8782 text on #f7f2ee fill): drained warm grey on a warm panel.

Neutral Scale

  • Ink (#030302) — near-black, the typical heavy-type color
  • Ink Body (#3a3835) — warm dark grey, long-form body
  • Secondary (#5c5a57) — supporting copy, sub-labels
  • Muted (#8a8782) — captions, metadata (large or secondary use only — below AA at body size)

Surface & Borders

  • Canvas (#fcf9f7) — warm-white page floor
  • Surface Soft (#f7f2ee) — slightly deeper warm panel for banded sections
  • Surface (#ffffff) — pure-white card lifted off the warm canvas
  • Surface Elev (#fbf7f4) — warm nested card surface
  • Hairline (rgba(3,3,2,0.09)) — default 9% near-black border
  • Hairline Soft (rgba(3,3,2,0.05)) — 5% near-black for the faintest dividers
  • Hairline Strong (rgba(3,3,2,0.16)) — 16% near-black for focused inputs

Shadow Colors

Craft uses warm-tinted shadows (rgba(36,30,24,…)) rather than cold neutral grey — the warmth matches the paper canvas. Shadows are used sparingly; most surfaces lift via the white-card-on-warm-canvas contrast plus a hairline border, not via elevation.

  • rgba(36,30,24,0.05) 0 1px 2px 0 — ambient
  • rgba(36,30,24,0.05) 0 6px 20px -6px — card hover
  • rgba(36,30,24,0.10) 0 16px 40px -12px, rgba(36,30,24,0.05) 0 4px 10px -4px — floating panel / dropdown

Semantic

  • Success (#2f7d4f on #e8f3ec) — confirmation green
  • Warning (#9a6212 on #fbf0dc) — advisory amber
  • Danger (#c0382e on #f9e6e3) — form-error red
  • Info (#2563eb on #e8effe) — informational accent — intentionally the same as accent-blue.

3. Typography Rules

Font Family

Display Primary: "Untitled Serif" (Klim Type Foundry) — the editorial serif that carries every headline. Fallback chain: "Untitled Serif Font", Georgia, "Times New Roman", serif. Georgia is the closest non-licensed approximation — a screen-readable serif with similar warmth and proportion.

Body Primary: "Untitled Sans" (Klim Type Foundry) — a neutral grotesque for running text. Fallback chain: "Untitled Sans Font", -apple-system, system-ui, "Segoe UI", Roboto, sans-serif. The body sans is deliberately quiet so the serif headlines carry the personality.

Mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace — for code blocks and inline shortcuts inside product demonstrations.

OpenType features: kern and liga always on for the serif. No manually enabled stylistic sets — the families are used as drawn.

The serif-display / sans-body pairing is the brand’s central typographic decision. Most productivity sites run all-sans (Notion, Linear) for a “neutral software” feel. Craft instead pairs a literary serif headline with a neutral sans body, which gives the page an editorial register — the serif speaks with character, the sans explains with clarity. The split is the differentiator.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
display-heroUntitled Serif804001.02-0.02emOversized hero moment (large viewports)
display-lg / h1Untitled Serif664001.05-0.018emThe probed hero H1 — peak typographic moment
h2Untitled Serif544001.08-0.014emThe probed section opener
h3Untitled Serif364001.15-0.01emSub-section opener
h4Untitled Serif245001.25-0.005emFeature title — the one serif weight-up
title-mdUntitled Sans206001.350Card title (sans, for working UI)
title-smUntitled Sans176001.400Inline emphasis title
body-lgUntitled Sans194001.600Hero deck — slightly larger body
bodyUntitled Sans164001.600The probed default running text
body-smUntitled Sans144001.550Card meta, supporting copy
captionUntitled Sans135001.400Timestamp, byline
labelUntitled Sans126001.300.06emSection eyebrow — uppercase, tracked
buttonUntitled Sans155001.200Pill CTA / button label
nav-linkUntitled Sans155001.400Top-nav item
linkUntitled Sans164001.600Inline body link (matches body)
codemono144001.550Code sample in product demos

Principles

  • Serif display at weight 400 is the brand fingerprint. Craft refuses to bold its serif headlines — the lighter weight at 66px is what gives the page its editorial calm. Pushing the H1 to 600/700 collapses the magazine register into generic SaaS.
  • Serif speaks, sans explains. Untitled Serif carries headlines and pull-moments; Untitled Sans carries everything that needs to be read fast. Never swap the roles — sans headlines lose the personality, serif body loses the legibility.
  • 16px body at 1.60 line-height. The lush leading is part of the editorial feel; tighter leading reads as a denser dashboard.
  • Near-black ink, never pure black. #030302 is warmer and softer than #000 against the paper canvas; substituting #000 makes large type feel heavy and “screen-y”.
  • Negative tracking on serif display only. Headlines tighten (-0.018em at 66px); body and labels sit at zero or slightly positive (0.06em on uppercase labels).
  • Body copy steps down to warm grey for long reads. Pure ink (#030302) for headlines and short emphasis; #3a3835 / #5c5a57 warm-grey for sustained running text.
  • Georgia is the serif fallback, system-sans the body fallback. If Untitled is unavailable, Georgia approximates the serif warmth and a system grotesque (-apple-system / Segoe UI / Roboto) covers the body without drama.

4. Component Stylings

Buttons

button-primary — The signature full-pill CTA (“Try Craft Free”). #030302 near-black fill, white text at 15px / 500, 9999px radius (full pill), 12×24px padding, 48px height. The pill is the page’s only hard geometry; the radius is what makes it read premium rather than utilitarian.

button-primary-hover — Pointer hover. Background lifts to #1c1b19 over 150ms standard. No transform, no scale, no glow — color-only, matching the page’s restraint.

button-ghost — Secondary action. Transparent fill, near-black text, 1px hairline border (rgba(3,3,2,0.09)), same 9999px pill radius and 12×24px padding. On hover, the border darkens to 16% and a faint warm fill appears.

button-text — Tertiary / inline action. No fill, no border; near-black or blue (#2563eb) text with an underline that appears on hover. Used for “Learn more” / “See pricing” links beside the primary pill.

Cards

card — Pure-white feature card. #ffffff fill lifted off the warm canvas, 16px radius, 1px hairline border (rgba(3,3,2,0.09)), 32px padding. Default state is flat or near-flat; the white-on-warm contrast plus the hairline does the lifting. Optional warm ambient shadow (rgba(36,30,24,0.05) 0 6px 20px -6px) on hover.

card-warm — Warm nested panel. #fbf7f4 fill, soft 5% hairline. Used for in-flow content where pure white on warm canvas would feel too stark.

testimonial-quote — Pull-quote card. White fill, 16px radius, hairline border, 32px padding. Quote set in Untitled Serif at 24px / 400 near-black (the serif carries the human voice), byline beneath in caption secondary with a circular avatar flush left.

Badges, Tags, Pills

badge — Soft warm chip. #f7f2ee fill, secondary (#5c5a57) text, 9999px radius, 4×12px padding, 12px / 600 uppercase label. Used for “New”, “Beta”, section eyebrows.

badge-blue — Soft blue chip. #e8effe fill, deep-blue (#1e40af) text, 9999px radius. The rare moment blue surfaces on the marketing page — used for in-product feature callouts.

Inputs / Forms

input — White fill (#ffffff), 1px hairline (rgba(3,3,2,0.09)), 12px radius, 44px height, 12×16px padding. Placeholder in 16px / 400 muted. On focus, the border thickens to 16% near-black and a soft blue ring (0 0 0 3px rgba(37,99,235,0.35)) appears — blue is the focus voltage even when the page is otherwise paper-and-ink.

textarea — Same treatment as input, taller, used for the newsletter / waitlist capture.

top-nav — Warm-white surface (#fcf9f7, matching canvas), 64px height, optional 1px bottom hairline on scroll. Wordmark flush left in near-black. Nav links (Product, Pricing, Resources) in 15px / 500 near-black, no underline at rest. Right side: a text “Sign in” link plus the near-black full-pill “Try Craft Free” CTA flush right.

nav-link — Near-black (#030302) or warm grey, no underline at rest; underline or color-soften on hover.

Decorative

section-eyebrow — Uppercase 12px / 600 label, tracked 0.06em, in secondary grey — sits above serif section headlines as a quiet category marker (the editorial “kicker” convention).

5. Layout Principles

Spacing System

  • Base unit: 4px
  • Scale: 0 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 · 128
  • Section padding (vertical): 96–128px for major bands — generous magazine cadence
  • Card internal padding: 32px on feature and testimonial cards; 24px on smaller nested panels
  • Inter-card gutters: 24px between cards in a multi-up grid

Grid & Container

  • Max content width: 1200px outer container; prose columns cap near 680px for comfortable measure (the editorial line-length convention)
  • Hero: single-column, often left-aligned or centered, serif H1 + sans deck + pill CTA stacked vertically
  • Feature grid: 3-up at desktop, 2-up at tablet, 1-up at mobile
  • Product screenshots float against the warm canvas, framed by their own rounding and a soft warm shadow

Whitespace Philosophy

The page reads like a magazine spread, not a dashboard. Whitespace is the primary structural device — sections breathe with 96–128px vertical bands, prose holds a 680px measure for readability, and the warm canvas runs edge-to-edge between sections. Surfaces lift via the white-card-on-warm-paper contrast and a hairline border, rarely via stacked shadow. The restraint is the point: the page should feel unhurried.

Section Cadence

A typical Craft page runs:

  1. Warm-white hero (66px serif H1 at weight 400, 19px sans deck, near-black full-pill CTA, product screenshot beneath)
  2. Feature spread 1 (editor / docs demo — full-width screenshot, supporting serif sub-head + sans copy)
  3. Feature grid (three-up white cards on warm canvas, sans titles + body, serif section opener above)
  4. Testimonial / social-proof band (serif pull-quotes on white cards)
  5. Use-case or template gallery (warm-panel band, #f7f2ee)
  6. Closing CTA band (serif H2, near-black full-pill CTA centered)
  7. Footer (sans column heads in 17px / 600, links in 14px / 400 secondary)

The page does not light/dark alternate — it stays warm-white throughout. The “alternation” is warm-canvas (#fcf9f7) versus warm-panel (#f7f2ee) versus white-card (#ffffff) surface contrast.

6. Shapes & Radius Scale

TierValueUse
Micro4pxInline tags, fine-grained chips
Standard8pxSmall controls, nested inputs
Comfortable12pxText inputs, small cards — the working-UI default
Relaxed16pxFeature cards, testimonial cards — the dominant card rounding
Large24pxLarge feature shells, product-screenshot frames
Pill9999pxThe “Try Craft Free” CTA, badges, chips

Craft’s radius hierarchy is soft but disciplined — cards round generously at 16px (warmer than Bear’s architectural 8px), inputs at 12px, and the signature CTA goes all the way to a full pill (9999px). The full-pill button against otherwise-rectangular type-and-card layout is the deliberate contrast: one piece of pure geometry on a page of paper and ink.

7. Depth & Elevation

LevelTreatmentUse
0 — Flatno shadowCanvas, hero, most sections, nav (~80% of surfaces)
1 — Ambientrgba(36,30,24,0.05) 0 1px 2px 0Subtle inputs, nav at scroll
2 — Cardrgba(36,30,24,0.05) 0 6px 20px -6pxFeature card hover, floating screenshot
3 — Elevatedrgba(36,30,24,0.10) 0 16px 40px -12px, rgba(36,30,24,0.05) 0 4px 10px -4pxDropdowns, popovers, floating panels
4 — Modalscrim rgba(18,16,14,0.45) + dialog with elevated shadowSign-in / waitlist modal

Shadow Philosophy

Craft’s shadows are warm-tinted (rgba(36,30,24,…)) to match the paper canvas — cold neutral-grey shadows would fight the warmth. Elevation is used sparingly: the page’s primary lift mechanism is the white-card-on-warm-canvas contrast plus a hairline border, not a shadow stack. When a shadow does appear (a floating product screenshot, a hover on a feature card), it is soft and warm — a diffuse lift rather than a hard drop. The restraint keeps the page reading as printed-flat editorial rather than layered Material-style UI.

8. Interaction & Motion

Easing

  • Standard: cubic-bezier(0.4, 0, 0.2, 1) — default for hover color swaps, hairline transitions
  • Emphasized: cubic-bezier(0.2, 0, 0, 1) — modal entry, larger reveals
  • Out-soft: cubic-bezier(0.0, 0, 0.2, 1) — section scroll-reveals

Durations

BucketValueUse
Fast150msButton hover, hairline tone swaps, focus-ring fade
Standard240msCard hover lift, link color shifts
Slow320msModal entry, section scroll-reveal

Per-Component Recipes

  • Primary pill hover: background #030302#1c1b19 over 150ms standard. No transform, no scale. Color-only.
  • Ghost button hover: border darkens 9% → 16% near-black, faint warm fill appears, over 150ms.
  • Card hover: a soft warm ambient shadow grows over 240ms; an optional 1px rise on interactive cards. Most static cards stay flat.
  • Link hover (blue): color darkens #2563eb#1d4ed8 over 150ms; underline appears or thickens.
  • Focus ring: a soft blue ring (0 0 0 3px rgba(37,99,235,0.35)) fades in over 150ms with 2px outline-offset.
  • Scroll reveal: sections fade in and rise 8px over 320ms ease-out-soft on first viewport entry. One-shot per section.

Page Transitions

Page-to-page navigation uses a brief cross-fade; the warm-white canvas means there is no jarring light/dark flash. Anchored smooth-scroll uses emphasized easing.

Reduced Motion

Respects prefers-reduced-motion: reduce. All translate and scale transforms suppress; transitions degrade to opacity-only or instant. Scroll-reveal becomes static render-on-mount. Card hover loses its rise; only the focus ring and color swaps remain.

9. Accessibility & A11y

Contrast Pairs

PairRatioLevel
#030302 ink on #fcf9f7 canvas19.7AAA
#ffffff on #030302 brand pill20.6AAA
#030302 brand on #fcf9f7 canvas19.7AAA
#5c5a57 secondary on #fcf9f76.6AA body / AAA large
#2563eb blue on #fcf9f74.9AA body / AAA large
#1e40af deep-blue on #e8effe soft-blue8.4AAA

The near-black ink on warm paper lands at a generous 19.7:1 — comfortably AAA — which is why Craft can set serif type large without fatigue. The secondary warm-grey (#5c5a57) is calibrated to pass AA at body size; the lighter muted grey (#8a8782) is reserved for large text and metadata, where its 3.4:1 is acceptable but not for body runs. Blue (#2563eb) clears AA on the warm canvas for links and large text.

Focus Indicators

Focus ring is a soft blue (0 0 0 3px rgba(37,99,235,0.35)) with 2px outline-offset. Blue is the focus voltage even on the otherwise paper-and-ink page — the brand reserves blue for interaction (focus, links, selection) and keeps near-black for identity (the pill, the type).

ARIA Patterns

  • Top nav: <nav> landmark with aria-label="Primary". The wordmark is a link to home with an accessible name.
  • Primary CTA: <a> or <button> with a clear accessible name (“Try Craft Free”); the pill shape is decorative, the label carries the meaning.
  • Feature cards: if the whole card is clickable, the card is a single <a> with one accessible name; nested links avoid duplicate tab stops.
  • Section eyebrows: decorative kickers are associated with their heading, not announced as separate landmarks.
  • Modal (sign-in / waitlist): focus trap, Esc closes, click-outside closes, focus returns to the trigger.

Keyboard Navigation

  • Top nav: Tab moves logo → nav links → Sign in → Try Craft Free
  • Feature cards: Tab moves card → card; the whole card activates on Enter when it is a single link
  • Modal: Tab cycles only through interactive elements inside the dialog
  • All interactive elements show the blue focus ring; the ring is never suppressed without a replacement

Screen Reader Hints

Product screenshots carry descriptive alt text naming the visible UI (“Craft document editor with a styled heading, a card block, and the right-hand outline panel visible”). Decorative section eyebrows and ornamental serifs are not separately announced. The serif/sans split is purely visual and carries no semantic weight.

Reduced Motion

All transitions degrade to opacity-only or instant. Scroll-reveal becomes static. Card hover loses its rise. The focus ring and essential color-state changes remain.

10. Responsive Behavior

Breakpoints

NameWidthKey Changes
Mobile<640pxTop nav collapses to logo + hamburger; hero H1 drops 66 → 36px; feature cards 1-up; pill CTA goes full-width or stays inline at 48px height; screenshots scale to viewport-width
Tablet640–1024pxTop nav keeps inline links; hero H1 settles ~48px; feature cards 2-up; screenshots ~90% viewport-width
Desktop1024–1280pxFull top nav; hero H1 at 66px; feature cards 3-up; container at 1200px
Wide>1280pxContent caps at 1200px; gutters absorb the rest; hero may scale to the 80px display-hero size

Touch Targets

  • Primary pill CTA: 48px height — comfortably above the 44px minimum
  • Nav links: minimum 44×44px hit area
  • Inputs: 44px height
  • Inline link tap-target: 44px row height even at 16px / 1.60 body type

Collapsing Strategy

  • Top-nav links collapse into a hamburger sheet below 640px
  • Feature grids: 3 → 2 → 1 columns
  • Serif headlines scale down but never switch to sans — the serif identity holds at all sizes
  • Product screenshots scale by viewport — never crop, never deform; rounding scales proportionally

Image Behavior

Product screenshots render at 2x with CSS rounding (16–24px) and a soft warm drop shadow. They scale via width: 100%; height: auto; to preserve aspect ratio against the warm canvas.

Container Queries

Used on card grids where a card may appear in a wide or narrow column — the card’s internal layout (title / body / icon stacking) responds to its own width rather than the viewport.

11. Content & Voice

Tone

Calm, considered, literate. Craft’s voice is closer to a good magazine than a SaaS landing — full sentences, no exclamation marks, no Silicon Valley enthusiasm. The serif headline does the emotional work; the sans body explains plainly. The voice trusts the reader to value craft (the pun is the brand) without being told to.

Microcopy Patterns

  • Button verbs: “Try Craft Free”, “Get started”, “See pricing”, “Sign in” — direct, outcome-named
  • Error message recipe: [What went wrong] + [What to try] — e.g., “We couldn’t sync that document. Check your connection and try again.”
  • Success confirmations: short, factual — “Saved.” / “Synced.”
  • Field labels: minimal — “Email”, “Workspace name” — no friendly framing

Empty States

  • Empty document: “Start with a blank page, or pick a template.” — names both paths.
  • Empty space / workspace: “Nothing here yet. Create your first document.” — declarative, single action.

CTA Verb Conventions

  • Primary action: “Try Craft Free” (the signature pill), “Get started”
  • Secondary action: “See pricing”, “Sign in”, “Watch the tour”
  • Tertiary text: “Learn more”, “Read the docs”, “Explore templates”
  • Avoided: “Submit”, “Click here”, “Buy now” — Craft uses outcome verbs, never generic ones

12. Dark Mode & Theming

Light-only marketing surface. The Craft app ships full light/dark themes — the neutral oklch scale that surfaced in the probe is the app’s dark palette (near-black #0a0a0a backgrounds, #e5e5e5 ink, #262626 accents, on a cool shadcn-style neutral ramp). The public marketing site, however, is warm-white only — it stays on the #fcf9f7 paper canvas throughout to preserve the editorial, ink-on-paper identity.

If a future dark marketing variant were shipped, the warm-white identity would invert to a warm near-black rather than the app’s cool neutral: canvas #161412 (warm near-black, not the app’s cool #0a0a0a), surface #211e1b, ink #f3efea (warm off-white), brand pill flipped to a warm off-white fill with near-black text, and the blue accent lightened to #7aa2f7 to clear AA on the dark surface. The key is that the marketing dark theme would stay warm to match the brand, where the in-app dark theme is deliberately cool/neutral for working comfort.

13. Lineage & Influences

Craft’s design is a fine-press editorial that ships a notes app. The visual lineage runs through three traditions: print magazine and book design (the serif-display / sans-body pairing, the warm paper canvas #fcf9f7, the 680px prose measure, the unhurried section cadence); Klim Type Foundry’s editorial register (Untitled Serif + Untitled Sans, a “neutral” foundry family chosen the way a careful art director chooses type — present but not loud); and the premium-Apple / Linear school of product marketing (warm-white canvas, full-pill CTA, near-monochrome restraint, a single accent held almost entirely off the marketing page).

The serif headline is what distinguishes Craft from its all-sans contemporaries. Notion and Linear both lead with neutral grotesque type for a “software” feel; Craft instead leads with a literary serif at weight 400, which gives the page an editorial, almost-bookish character before a single feature is named. The near-black ink (#030302, not #000) and the warm paper (#fcf9f7, not #ffffff) reinforce this — the page is tuned to read as ink-on-paper, the same instinct behind iA Writer’s writing-as-craft positioning and Things’ calm indie-Mac surfaces.

What Craft rejects: saturated marketing gradients, all-sans neutrality, dense dashboard layouts, exclamation-point enthusiasm, and a loud brand color on the marketing page. In-product, Craft pairs the warm-white identity with a blue accent for links and selection — but the public site keeps blue to a whisper, letting paper, ink, and the full-pill CTA carry the brand. The discipline — serif speaks, sans explains, color stays in the working software — is the whole identity.

Influences:

  • Klim Type Foundry (Untitled Serif / Untitled Sans) — the editorial type pairing that is the brand’s backbone, klim.co.nz/retail-fonts/untitled-serif
  • Notion — adjacent docs/notes contemporary Craft positions against by going serif-led, notion.so
  • Linear — premium near-monochrome product-marketing restraint, linear.app
  • Apple — warm-white canvas, full-pill CTA affordance, product-photography restraint, apple.com
  • iA Writer — writing-as-craft positioning, typography treated as the product, ia.net/writer
  • Things (Cultured Code) — calm, premium, paper-warm indie-Mac productivity aesthetic, culturedcode.com/things

14. Do’s and Don’ts

Do

  • Keep the canvas warm-white (#fcf9f7) — paper, never screen-white, never tinted grey
  • Set headlines in Untitled Serif at weight 400 (never bold) — the calm of large light-weight serif is the brand
  • Pair the serif display with Untitled Sans body — serif speaks, sans explains
  • Use near-black ink (#030302), not pure #000 — the warmth reads as ink-on-paper
  • Make the primary CTA a full pill (9999px) in near-black with white text — the page’s one piece of hard geometry
  • Step body copy down to warm grey (#3a3835 / #5c5a57) for long reads
  • Use warm-tinted shadows (rgba(36,30,24,…)) sparingly — the page lifts via white-on-warm contrast, not shadow stacks
  • Round cards generously at 16px and inputs at 12px — soft but disciplined
  • Hold the blue accent (#2563eb) to a whisper on marketing pages — reserve it for in-product links, focus, selection
  • Give sections 96–128px vertical breathing room and prose a ~680px measure — magazine cadence
  • Use the blue focus ring (rgba(37,99,235,0.35)) even on the paper-and-ink page — blue is the interaction voltage

Don’t

  • Don’t use a screen-white #ffffff canvas — the warm paper is the brand; white-card surfaces are the exception, not the floor
  • Don’t bold the serif headlines — weight 400 is what separates Craft from generic SaaS
  • Don’t set headlines in sans or body in serif — the split roles are non-negotiable
  • Don’t substitute pure black (#000) for the near-black ink — large type goes heavy and “screen-y”
  • Don’t make the CTA a sharp-cornered rectangle — the full pill is the signature
  • Don’t flood the marketing page with the blue accent — it belongs inside the product, not on the landing
  • Don’t add saturated marketing gradients or animated mesh heroes — the restraint is the positioning
  • Don’t crowd sections — dashboard density collapses the editorial register
  • Don’t use cold neutral-grey shadows — warmth must match the paper
  • Don’t import the app’s cool dark palette into the marketing site — the marketing surface is warm-white only
  • Don’t use exclamation marks or “Click here” CTAs — the voice is calm and outcome-named
  • Don’t tighten body line-height below 1.6 — the lush leading is part of the read

15. Agent Prompt Guide

Quick Color Reference

Canvas:        #fcf9f7  (warm-white paper — the brand floor)
Surface-warm:  #f7f2ee  (deeper warm panel for banded sections)
Surface-white: #ffffff  (pure-white card lifted off the warm canvas)
Ink:           #030302  (near-black — headlines, brand, pill fill)
Ink-body:      #3a3835  (warm dark grey — long-form body)
Secondary:     #5c5a57  (supporting copy, sub-labels)
Muted:         #8a8782  (captions, metadata — large/secondary only)
Accent-blue:   #2563eb  (in-product links / focus / selection)
Blue-soft:     #e8effe  (selection wash, soft chip background)
Hairline:      rgba(3,3,2,0.09)
On-brand:      #ffffff  (white text on the near-black pill)

Example Component Prompts

  • “Create a Craft-style hero: warm-white canvas (#fcf9f7), a 66px Untitled Serif H1 at weight 400 in near-black #030302 with -0.018em tracking and 1.05 line-height (serif, never bold). Beneath it: a 19px Untitled Sans deck in warm grey #3a3835 at 1.60 line-height. Below: a full-pill (9999px) near-black #030302 ‘Try Craft Free’ button with white text at 15px / 500, 12×24px padding, 48px height. The whole hero reads editorial and unhurried — no gradients, no animated background, just type and whitespace on warm paper.”
  • “Design a Craft feature card: pure-white fill (#ffffff) lifted off the warm canvas, 16px radius, 1px hairline border at rgba(3,3,2,0.09), 32px padding. Inside: a 20px / 600 Untitled Sans title in near-black #030302, then 16px / 400 Untitled Sans body at 1.60 line-height in warm grey #3a3835. The card lifts via white-on-warm contrast plus the hairline — no shadow at rest; a soft warm shadow (rgba(36,30,24,0.05) 0 6px 20px -6px) only on hover.”
  • “Build a Craft full-pill CTA: near-black #030302 fill, white text ‘Try Craft Free’ at 15px / 500 Untitled Sans, 9999px radius (full pill), 12×24px padding, 48px height. On hover, the fill lifts to #1c1b19 over 150ms — color-only, no scale or transform. This is the page’s only piece of hard geometry against an otherwise type-and-card layout.”
  • “Create the Craft nav: 64px tall warm-white surface (#fcf9f7, matching canvas), wordmark left in near-black #030302, three centered nav links (Product, Pricing, Resources) in 15px / 500 #030302 with no underline at rest. Right side: a ‘Sign in’ text link plus the near-black full-pill ‘Try Craft Free’ CTA. Add a 1px bottom hairline (rgba(3,3,2,0.09)) only when the page is scrolled.”
  • “Design a Craft testimonial card: white fill, 16px radius, 1px hairline border, 32px padding. The pull-quote is set in Untitled Serif at 24px / 400 near-black (#030302) with 1.25 line-height — the serif carries the human voice. Beneath: a 40px circular avatar flush left, with name in 14px / 600 Untitled Sans and role in 13px / 500 secondary grey (#5c5a57).”
  • “Build a Craft section opener: an uppercase 12px / 600 Untitled Sans eyebrow label, tracked 0.06em, in secondary grey (#5c5a57), sitting above a 54px Untitled Serif H2 at weight 400 in near-black #030302 with -0.014em tracking. Generous 96px vertical padding above. The eyebrow is the editorial ‘kicker’; the serif headline does the emotional work.”

Iteration Guide

  1. Canvas warm-white, never screen-white. #fcf9f7 is paper; #ffffff is the card exception. If the page looks cold, the canvas is wrong.
  2. Serif headlines at weight 400, never bold. The calm of large light-weight serif is the entire brand. Bolding tips it into generic SaaS.
  3. Serif speaks, sans explains. Untitled Serif for headlines and pull-quotes; Untitled Sans for everything read fast. Never swap.
  4. Near-black ink, not pure black. #030302 is warmer and softer than #000 against paper — large type stays comfortable.
  5. The CTA is a full pill. 9999px near-black with white text is the signature; a sharp rectangle loses the premium register.
  6. Hold blue back on marketing. #2563eb belongs to in-product links, focus, and selection — a whisper on the landing, never a flood.
  7. Lift via contrast, not shadow. White-card-on-warm-canvas plus a hairline does the work; warm shadows appear only on hover, sparingly.
  8. Give it room. 96–128px section bands and a ~680px prose measure at 1.60 line-height — the editorial cadence is half the brand.
Ship with this

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

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