<!--
ROLE: You are a senior product designer + frontend engineer pair.
TASK: Treat the DESIGN.md below as the SINGLE SOURCE OF TRUTH for visual style.
Every component you produce in this codebase must:
  • Reuse the color tokens declared in YAML frontmatter (no ad-hoc hex values)
  • Use the typography scale (display / h1 / h2 / body / label / mono) verbatim
  • Match the radius scale (button / card / pill) to the named tier
  • Honor the elevation table for shadows
  • Respect the motion section (durations, easings, reduced-motion)
  • Pass the contrast pairs in the accessibility section
INPUT: Project files at ${CWD}.
OUTPUT: Code, not paragraphs. Quote the relevant section number when you cite a token (e.g. "per §3 Typography Rules").
PRINCIPLE: A token used once is a one-off; a token used three times is a system. Prefer system fidelity over local cleverness.
-->

---
name: Todoist
tagline: Warm-white canvas, Graphik sans, signature Todoist-red CTA — a task manager that feels calm, friendly, and quietly productive.
updated_at: 2026-05-29T21:45:00.495Z
published_at: 2026-05-29T21:45:00.495Z
author: webdesignhot
source_url: https://www.todoist.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [saas]
tags: [light, warm, sans, friendly, soft, productive, approachable]
preview_swatch: ['#fefdfc', '#e44232', '#fae8d6']
related: [things-app, notion, linear]
description: 'Todoist''s marketing site is warm productivity made visible. The canvas is a barely-there warm-white (`#fefdfc`) — paper, not screen — and the type is Graphik, a humanist grotesque set in warm near-black ink (`#25221e`) that reads softer than the cold `#000` most SaaS reaches for. The single saturated voltage is Todoist-red (`#e44432`, `--color-td-primary`) — the brand''s lifelong signature — carried on the "Start for free" CTA at an 8px radius. Warm peach secondary surfaces (`#fae8d6`, `--color-td-secondary-dark`) and a graduated cream stack (`#fff5eb` → `#fff9f3`) tint feature bands so the page never goes stark. The register is friendly, approachable, and calm — Todoist sells the relief of an organized day, and the site feels like that relief.'


# 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
  muted: text-muted
  border: border
  ring: brand

colors:
  bg: '#fefdfc'                  # warm-white canvas — paper, not screen (rgb 254,253,252)
  bg-warm: '#fcf8f3'             # warmest beige tint band (--color-beige-01)
  surface: '#ffffff'            # pure-white card surface lifting off the warm canvas
  surface-card: '#fcfcfc'        # near-white idle card (--card-background-idle)
  surface-cream: '#fff9f3'       # lightest cream secondary band (--color-td-secondary-light)
  surface-cream-mid: '#fff5eb'   # mid cream secondary band (--color-td-secondary-mid)
  surface-peach: '#fae8d6'       # warm peach secondary surface (--color-td-secondary-dark / --accents-creme)
  text: '#25221e'               # warm near-black ink — primary copy (rgb 37,34,30)
  text-muted: '#565656'          # 66% black on canvas — secondary copy (--color-black-07)
  text-soft: '#8c8b8b'           # 45% black on canvas — captions, meta (--color-black-06)
  text-faint: '#c1c0c0'          # 24% black — disabled / placeholder (--color-black-05)
  brand: '#e44432'              # SIGNATURE TODOIST RED — primary CTA & accent (--color-td-primary)
  brand-hover: '#ee5244'         # CTA hover — lighter red (--color-td-cta-hover)
  brand-active: '#d1453b'        # CTA pressed — deeper red (--color-td-cta-active)
  brand-tint-100: '#fef6ef'      # palest red-warm tint (--primary-100)
  brand-tint-200: '#fdf0e4'      # pale red-warm tint (--primary-200)
  brand-tint-300: '#fbe8d7'      # soft red-warm tint (--primary-300)
  brand-deep: '#9a3b00'          # deepest warm-brown red, dense text on tint (--primary-700)
  on-brand: '#ffffff'            # white text on Todoist-red
  accent-yellow: '#ffc93e'       # warm gold accent dot / illustration (--accents-yellow / perceptional-yellow)
  accent-green: '#6b8767'        # muted sage accent (--accents-green / perceptional-green)
  accent-pink: '#ffada4'         # soft coral-pink accent (--accents-pink / perceptional-pink)
  accent-blue: '#316fea'         # Twist cross-product blue (--color-tw-primary) — rare on Todoist surface
  ghost-bg: '#25221e12'          # 7% warm-black ghost-button fill (rgba 37,34,30,.07)
  border: '#eae9e8'             # default hairline — 8% black on canvas (--color-black-03)
  border-soft: '#f1f0ef'         # subtlest divider — 5% black (--color-black-02)
  border-strong: '#dadad9'       # stronger border — 14% black (--color-black-04)
  prio-1: '#ffd6d3'              # product-UI priority-1 (red) chip
  prio-2: '#fbe7ce'              # product-UI priority-2 (orange) chip
  prio-3: '#dde6f9'              # product-UI priority-3 (blue) chip
  prio-4: '#f2efed'              # product-UI priority-4 (neutral) chip
  scrim: 'rgba(34, 40, 41, 0.80)'  # overlay backdrop (--overlay-background-idle)
  shadow-color: 'rgba(0, 0, 0, 0.24)'  # base shadow tint (--shadow-color)
  success: '#3a7400'             # confirmation green (--display-onlight-color-green)
  success-soft: '#f6f9f7'        # pale green surface (--color-green-01)
  warning: '#f7b84f'             # advisory gold (--color-gold-04)
  warning-soft: '#fff9f0'        # pale gold box (--box-highlight-background)
  danger: '#de483a'             # error red (--accents-red)
  danger-soft: '#fdf5f0'         # pale error box (--box-warning-background)
  info: '#316fea'                # informational blue (--color-blue-04)
  info-soft: '#f1f7fe'           # pale info surface (--color-blue-01)

typography:
  display:
    family: 'Graphik, "Graphik-1bbd4a4c7a2fb472", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif'
    weights: [500, 600, 700]
    opentype-features: ['kern', 'liga']
  body:
    family: 'Graphik, "Graphik-1bbd4a4c7a2fb472", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif'
    weights: [400, 500, 600]
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 80, weight: 700, lineHeight: 1.0,  tracking: '-0.03em',  family: display }
    display-lg:      { size: 64, weight: 700, lineHeight: 1.05, tracking: '-0.025em', family: display }
    h1:              { size: 55, weight: 600, lineHeight: 1.1,  tracking: '-0.02em',  family: display }
    h2:              { size: 38, weight: 600, lineHeight: 1.15, tracking: '-0.015em', family: display }
    h3:              { size: 28, weight: 600, lineHeight: 1.25, tracking: '-0.008em', family: display }
    h4:              { size: 22, weight: 600, lineHeight: 1.3,  tracking: '-0.004em', family: display }
    title-md:        { size: 20, weight: 600, lineHeight: 1.35, tracking: '0',        family: display }
    title-sm:        { size: 18, weight: 600, lineHeight: 1.4,  tracking: '0',        family: body }
    body-lg:         { size: 18, 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 }
    label:           { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    button:          { size: 16, weight: 500, lineHeight: 1.2,  tracking: '0',        family: body }
    nav-link:        { size: 15, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.02em',   family: body }
    overline:        { size: 12, weight: 600, lineHeight: 1.3,  tracking: '0.06em',   family: body, transform: uppercase }

radius:
  micro: 2
  sm: 4
  md: 8           # buttons, inputs — the dominant control radius
  lg: 12          # cards
  xl: 16          # feature panels, large surfaces
  pill: 9999      # badges, avatars, segmented chips

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

layout:
  page-width: 1280
  prose-width: 720
  header-height: 64
  feature-card-min-width: 300

components:
  button-primary:
    bg: '#e44432'
    color: '#ffffff'
    radius: 8
    padding: '12px 20px'
    font: button
    hover: 'background #ee5244'
    active: 'background #d1453b'
    use: '"Start for free" — the signature Todoist-red CTA; the page''s one saturated fill.'
  button-secondary:
    bg: '#25221e12'
    color: '#25221e'
    radius: 8
    padding: '12px 20px'
    font: button
    hover: 'fill deepens to rgba(37,34,30,0.12)'
    use: 'Soft tonal button — "Accept" (cookie), secondary in-page actions; warm-black ghost fill.'
  button-ghost:
    bg: 'transparent'
    color: '#25221e'
    border: '1px solid #dadad9'
    radius: 8
    padding: '12px 20px'
    font: button
    hover: 'border #c1c0c0 + fill rgba(37,34,30,0.03)'
    use: 'Outline button — "Log in", tertiary actions.'
  button-text:
    bg: 'transparent'
    color: '#e44432'
    underline: 'none'
    font: button
    hover: 'underline appears'
    use: 'Inline text link in Todoist-red — "Learn more", "See all features".'
  card:
    bg: '#ffffff'
    border: '1px solid #eae9e8'
    radius: 12
    padding: 24
    shadow: '0px 1px 19px 0px rgba(42,29,48,0.06)'
    use: 'Feature card lifted off the warm canvas; soft purple-tinted ambient shadow.'
  card-cream:
    bg: '#fff5eb'
    border: 'none'
    radius: 16
    padding: 32
    use: 'Cream-tinted feature panel — warm secondary band, no border needed.'
  card-peach:
    bg: '#fae8d6'
    border: 'none'
    radius: 16
    padding: 32
    use: 'Peach feature panel — warmest secondary surface for illustrated bands.'
  input:
    bg: '#ffffff'
    color: '#25221e'
    border: '1px solid #dadad9'
    radius: 8
    padding: '10px 14px'
    height: 44
    focus: 'border thickens to 1.5px #e44432 + faint red ring'
    use: 'Standard form field — signup, email capture.'
  badge-priority:
    bg: '#ffd6d3'
    color: '#9a3b00'
    radius: 9999
    padding: '3px 10px'
    font: caption
    use: 'Priority chip mirroring the product UI — p1 red, p2 peach, p3 blue, p4 neutral.'
  badge-soft:
    bg: '#fdf0e4'
    color: '#9a3b00'
    radius: 9999
    padding: '4px 12px'
    font: caption
    use: 'Inline "New" / category pill — warm red-tint chip.'
  nav-link:
    color: '#25221e'
    font: nav-link
    hover: 'color stays; subtle underline or dropdown opens'
    use: 'Top-nav item — "Made for", "Features", "Pricing", "Resources".'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-out-soft: 'cubic-bezier(0.0, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  button-hover: 'background red shift #e44432 → #ee5244 over 150ms standard'
  card-hover: 'shadow tier deepens + 1px lift over 240ms standard'
  checkbox-complete: 'task checkbox fills with brand red + strike-through over 240ms — the signature product gesture'
  scroll-reveal: 'feature bands fade + rise 12px over 320ms ease-out-soft on viewport entry'
  reduced-motion: 'respects prefers-reduced-motion: reduce — transforms suppressed, fade-only'

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

shadows:
  ambient: '0px 1px 2px 0px rgba(0,0,0,0.04)'
  card: '0px 1px 19px 0px rgba(42,29,48,0.06)'
  elevated: '0px 8px 28px -6px rgba(42,29,48,0.12), 0px 2px 8px -2px rgba(0,0,0,0.06)'
  popover: '0px 12px 32px -8px rgba(0,0,0,0.16)'
  ring: '0 0 0 3px rgba(228,68,50,0.24)'

accessibility:
  contrast-text-on-bg: 15.6          # #25221e on #fefdfc — AAA
  contrast-text-on-white: 15.8       # #25221e on #ffffff — AAA
  contrast-text-on-peach: 13.3       # #25221e on #fae8d6 — AAA
  contrast-text-on-cream: 14.7       # #25221e on #fff5eb — AAA
  contrast-white-on-brand: 4.1       # #ffffff on #e44432 — AA large only; CTA is 16px/500 → large-text pass
  contrast-white-on-cta-active: 4.5  # #ffffff on #d1453b — AA body (hover/active state is the safer pairing)
  contrast-muted-on-bg: 7.1          # #565656 (66% black) on #fefdfc — AAA
  contrast-brand-on-bg: 4.0          # #e44432 on #fefdfc — AA large only; never use red for small body text
  focus-ring: '3px rgba(228,68,50,0.24) ring + 1.5px solid #e44432 border on inputs'
  reduced-motion-honored: true
  touch-target-min: 44

dark-mode: null   # Light-only marketing surface. The Todoist *app* ships full system light/dark themes (and many accent themes); the public marketing site is warm-light only.

lineage:
  summary: 'Todoist''s marketing site is warm minimalism with one loud brand note. It pairs a warm-white paper canvas (`#fefdfc`) and humanist Graphik type — the Swiss-grid, content-first discipline shared by Linear, Stripe and Notion — with a single uncompromising signature: Todoist-red (`#e44432`), the colour the brand has owned since its 2007 origins as a Doist product. Where Things goes cool-Apple-grey and Linear goes near-black, Todoist goes *warm*: peach and cream secondary surfaces (`#fae8d6`, `#fff5eb`) keep the page friendly and human rather than clinical. The result reads as "calm productivity" — Bauhaus restraint warmed up for a consumer audience that wants the relief of an organized day, not an enterprise dashboard.'
  influences:
    - name: 'Doist (the studio behind Todoist & Twist)'
      role: 'Remote-first design studio — the shared system that gives Todoist (red) and Twist (blue) parallel token scales is visible in the CSS variables'
      url: 'https://doist.com'
    - name: 'Graphik by Commercial Type'
      role: 'The humanist grotesque that carries the entire page — warm, neutral, slightly friendlier than Helvetica or Inter'
      url: 'https://commercialtype.com/catalog/graphik'
    - name: 'Swiss / International Typographic Style'
      role: 'Grid discipline, generous whitespace, sans-serif clarity, content-first hierarchy'
      url: 'https://en.wikipedia.org/wiki/International_Typographic_Style'
    - name: 'Stripe'
      role: 'The modern SaaS-marketing template — soft tinted feature bands, restrained palette, one brand voltage, generous type'
      url: 'https://stripe.com'
    - name: 'Notion'
      role: 'Warm, approachable productivity register — friendly illustration, near-white paper canvas, calm rather than corporate'
      url: 'https://www.notion.so'
---

## 1. Visual Theme & Atmosphere

Todoist's marketing site is what calm productivity looks like rendered as a webpage. The canvas is a warm-white `#fefdfc` — not pure white, not screen-grey, but the off-white of good paper, with the faintest peach undertone. Against it, body copy sits in `#25221e`, a warm near-black with a brown-grey cast that reads measurably softer than the cold `#000` most SaaS reaches for. The typeface is **Graphik**, Commercial Type's humanist grotesque — neutral and modern but with rounder, friendlier terminals than Helvetica or Inter. Together the warm paper, warm ink, and humanist sans set an atmosphere that is the opposite of a clinical enterprise dashboard: this is a tool that wants to feel like relief, not work.

The single saturated voltage is **Todoist-red** — `#e44432` (`--color-td-primary`), the colour the brand has owned since Doist first shipped the product. It appears almost nowhere as a wash and everywhere as a *signal*: the "Start for free" CTA fills with it at an 8px radius, the in-product checkbox fills with it the moment a task completes, and inline text links carry it. Red is the brand's heartbeat — a confident, slightly retro, distinctly human red (not a tech-blue, not a startup-purple) that has become as recognizable as the wordmark itself. The site is disciplined about it: one or two red moments per band, never a sea of red.

What keeps the page from going stark is its **warm secondary system**. Feature bands tint to peach (`#fae8d6`, `--color-td-secondary-dark`), to mid-cream (`#fff5eb`), and to the lightest cream (`#fff9f3`) — a graduated warm stack that lets sections alternate without ever introducing a cold grey. Illustrated panels lean on a small set of soft accent hues — warm gold (`#ffc93e`), sage green (`#6b8767`), and coral-pink (`#ffada4`) — used as illustration spot colours rather than UI chrome. Nothing here is loud except the red; everything else is a warm hush.

The layout language is content-first and unhurried. A 1280px container holds a grid of generous feature bands, each with a clear headline, a short deck, and a screenshot or illustration. Cards lift off the warm canvas with a soft purple-tinted ambient shadow (`rgba(42,29,48,0.06)`) — barely there, just enough to separate white card from off-white ground. Corners are gentle: 8px on controls, 12px on cards, 16px on big panels. There is no edge-to-edge drama, no dark-mode hero inversion, no gradient mesh — just warm, organized calm.

The atmosphere, in one phrase, is **friendly competence**. Todoist sells the feeling of a day that's under control, and the site embodies it: warm enough to be approachable, disciplined enough to be trusted, with one red signal that tells you exactly where to press.

**Key Characteristics:**
- Warm-white paper canvas (`#fefdfc`) — never pure white, never cold grey
- Warm near-black ink (`#25221e`) — softer and browner than `#000`
- Graphik humanist grotesque — modern but friendly, the whole type system
- Signature Todoist-red (`#e44432`) as the single saturated voltage — one or two moments per band
- Warm secondary stack: peach (`#fae8d6`) → mid-cream (`#fff5eb`) → light cream (`#fff9f3`)
- Soft illustration accents — warm gold, sage, coral-pink — never as UI chrome
- 8px control radius / 12px card radius / 16px panel radius — gentle, rounded, never sharp
- Soft purple-tinted ambient card shadow (`rgba(42,29,48,0.06)`) — cards lift, barely
- 1280px content-first grid with generous feature bands and big screenshots
- Calm, approachable register — productivity as relief, not as enterprise work

## 2. Color Palette & Roles

### Primary
- **Canvas** (`#fefdfc`): the warm-white paper floor — warm-white with a faint peach undertone (rgb 254,253,252). The single most defining choice; warm where peers go cold.
- **Ink** (`#25221e`): warm near-black, the dominant text colour (rgb 37,34,30). Browner and softer than `#000` — body, headlines, nav.
- **Brand Todoist-red** (`#e44432`) [`--color-td-primary`]: the signature voltage. Primary CTA fill, task-complete checkbox, inline links. One or two moments per band.

### Brand & States
- **Brand Hover** (`#ee5244`) [`--color-td-cta-hover`]: CTA hover — a touch lighter, warmer red.
- **Brand Active** (`#d1453b`) [`--color-td-cta-active`]: CTA pressed — deeper, denser red.
- **Brand Tint 100/200/300** (`#fef6ef` / `#fdf0e4` / `#fbe8d7`) [`--primary-100/200/300`]: palest red-warm tints for soft chips, hover surfaces, and badge fills.
- **Brand Deep** (`#9a3b00`) [`--primary-700`]: deepest warm-brown red — dense text on a red-tint chip; passes AAA on tint surfaces.
- **On-Brand** (`#ffffff`): white text/icons on Todoist-red.

### Accent (illustration spot colours)
- **Gold** (`#ffc93e`) [`--accents-yellow`]: warm gold dots, highlights in illustrations.
- **Sage** (`#6b8767`) [`--accents-green`]: muted green accent — completed / calm states in art.
- **Coral-pink** (`#ffada4`) [`--accents-pink`]: soft pink accent in illustrations.
- **Twist-blue** (`#316fea`) [`--color-tw-primary`]: cross-product blue from Doist's sibling app — rare on Todoist surfaces, used only when referencing Twist.

### Interactive
- **Text link** (`#e44432`): inline links in Todoist-red, no underline at rest; underline on hover.
- **Soft / ghost button fill** (`rgba(37,34,30,0.07)`): warm-black tonal fill for secondary actions ("Accept").
- **Focus ring** (`rgba(228,68,50,0.24)`): 3px red-tint ring on focused controls.
- **Disabled** (`#c1c0c0`, 24% black on canvas): placeholder and disabled text.

### Neutral Scale (warm-black alphas composited on canvas)
- **Ink** (`#25221e`) — primary copy, headlines (rgb 37,34,30)
- **Muted** (`#565656`) [`--color-black-07`, 66%] — secondary copy, decks
- **Soft** (`#8c8b8b`) [`--color-black-06`, 45%] — captions, metadata
- **Faint** (`#c1c0c0`) [`--color-black-05`, 24%] — placeholder, disabled
- **Hairline-strong** (`#dadad9`) [`--color-black-04`, 14%] — input borders
- **Hairline** (`#eae9e8`) [`--color-black-03`, 8%] — default dividers
- **Hairline-soft** (`#f1f0ef`) [`--color-black-02`, 5%] — subtlest dividers

### Surface & Borders
- **Surface** (`#ffffff`) — pure-white cards lifting off the warm canvas
- **Surface-card idle** (`#fcfcfc`) [`--card-background-idle`] — near-white resting card
- **Cream-light** (`#fff9f3`) [`--color-td-secondary-light`] — lightest secondary band
- **Cream-mid** (`#fff5eb`) [`--color-td-secondary-mid`] — mid cream band
- **Peach** (`#fae8d6`) [`--color-td-secondary-dark`] — warmest secondary panel
- **Beige** (`#fcf8f3`) [`--color-beige-01`] — warmest neutral wash
- **Border** (`#eae9e8`) — default hairline (8% black); never a cold solid grey

### Shadow Colors
Todoist's card shadow is **purple-tinted**, not pure black — `rgba(42,29,48,0.06)` (`--product-ui-elevated-pale-pink`). The faint plum cast warms the depth so it never reads as a hard drop shadow against the peach surfaces. The base shadow variable is `rgba(0,0,0,0.24)` (`--shadow-color`) for heavier popovers.

- `0px 1px 2px 0px rgba(0,0,0,0.04)` — ambient
- `0px 1px 19px 0px rgba(42,29,48,0.06)` — signature card shadow (soft, wide, plum-tinted)
- `0px 8px 28px -6px rgba(42,29,48,0.12)` — elevated hover
- `0px 12px 32px -8px rgba(0,0,0,0.16)` — popover / dropdown

### Semantic
- **Success** (`#3a7400` on `#f6f9f7`) [`--display-onlight-color-green`] — confirmation green
- **Warning** (`#f7b84f` on `#fff9f0`) [`--color-gold-04`] — advisory gold
- **Danger** (`#de483a` on `#fdf5f0`) [`--accents-red`] — error red (note: a hair off brand-red, intentionally distinct)
- **Info** (`#316fea` on `#f1f7fe`) [`--color-blue-04`] — informational blue
- **Priority chips** (product-UI): p1 `#ffd6d3` · p2 `#fbe7ce` · p3 `#dde6f9` · p4 `#f2efed` — mirrored from the app for marketing screenshots

## 3. Typography Rules

### Font Family

**Primary**: `Graphik, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif` (the production face self-hosts as `Graphik-1bbd4a4c7a2fb472`). Graphik is Commercial Type's humanist grotesque — a modern, neutral sans with subtly rounded terminals and a generous x-height that reads warmer and friendlier than Helvetica, Inter, or Arial. It carries the entire site: display, headlines, body, nav, and labels all draw from the one family across weights 400–700.

**Mono companion**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace` — used essentially never on the marketing surface (Todoist has no developer-docs band on the homepage).

**OpenType features**: `kern` and `liga` always on. Graphik is set without stylistic-set overrides — the face is used as drawn. Display sizes lean on negative tracking; body sits at zero tracking.

The single typographic decision is *one warm humanist family, many weights, negative tracking only at display sizes*. Graphik does all the work; the warmth comes from the face, not from decoration.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Tracking | Notes |
|------|------|------|--------|-------------|----------|-------|
| display-hero | Graphik | 80 | 700 | 1.0 | -0.03em | Largest marketing display moment |
| display-lg | Graphik | 64 | 700 | 1.05 | -0.025em | Big section opener |
| h1 | Graphik | 55 | 600 | 1.1 | -0.02em | Hero headline (live: 55px / 600) |
| h2 | Graphik | 38 | 600 | 1.15 | -0.015em | Section heading (live: 38px / 600) |
| h3 | Graphik | 28 | 600 | 1.25 | -0.008em | Feature title |
| h4 | Graphik | 22 | 600 | 1.3 | -0.004em | Card title |
| title-md | Graphik | 20 | 600 | 1.35 | 0 | Sub-card title |
| title-sm | Graphik | 18 | 600 | 1.4 | 0 | Inline emphasis title |
| body-lg | Graphik | 18 | 400 | 1.6 | 0 | Hero deck — larger body |
| body | Graphik | 16 | 400 | 1.6 | 0 | Default running text (live: 16px / 400) |
| body-sm | Graphik | 14 | 400 | 1.55 | 0 | Card meta, supporting copy |
| label | Graphik | 13 | 500 | 1.4 | 0 | Form labels, small UI text |
| button | Graphik | 16 | 500 | 1.2 | 0 | CTA / button label |
| nav-link | Graphik | 15 | 500 | 1.4 | 0 | Top-nav item |
| caption | Graphik | 12 | 500 | 1.4 | 0.02em | Timestamps, fine print |
| overline | Graphik | 12 | 600 | 1.3 | 0.06em | Uppercase section eyebrow |

### Principles

- **One family, weight-driven hierarchy.** Graphik at 400 for body, 500 for buttons/labels, 600 for headlines, 700 for display. No second typeface, no serif accent.
- **Headlines at 600, not 700.** The live hero (55px) and section heads (38px) both sit at weight 600 — Todoist keeps headlines confident but not heavy. Reserve 700 for the largest display sizes.
- **Negative tracking scales with size.** Display sits at -0.03em, the hero at -0.02em, section heads at -0.015em; body and small text sit at zero. Larger = tighter.
- **Generous body leading (1.6).** Body and hero deck sit at 1.6 line-height — lush, comfortable, calm. The extra leading is part of the unhurried atmosphere.
- **Warm ink, never pure black.** All type sits at `#25221e` or a warm-black alpha — never `#000`. The browned ink is what makes the page feel friendly.
- **Inter is the closest open substitute** if Graphik is unavailable — but Inter reads slightly colder; soften it with -0.02em on headlines and prefer weight 600 over 700 to keep the friendly register.
- **Red is for signals, not headlines.** Headline copy stays warm-black; red is reserved for CTAs and inline links so it never loses its meaning as "act here".

## 4. Component Stylings

### Buttons

Four button tiers carry the page, all at an **8px radius** and a 16px/500 Graphik label.

**`button-primary`** — The signature CTA. Todoist-red fill (`#e44432`), white text, 8px radius, ~12×20px padding. Hover lightens to `#ee5244`; active deepens to `#d1453b`. This is the page's one saturated fill — "Start for free" is the canonical instance. Use sparingly: typically one per band.

**`button-secondary`** — Soft tonal button. Warm-black ghost fill (`rgba(37,34,30,0.07)`), warm-black text, 8px radius. The "Accept" cookie button and most secondary in-page actions. Hover deepens the fill slightly. Calm, low-voltage, pairs beside the red primary.

**`button-ghost`** — Outline button. Transparent fill, warm-black text, 1px `#dadad9` border, 8px radius. "Log in" and tertiary actions. Hover: border darkens to `#c1c0c0` and a 3% warm-black fill appears.

**`button-text`** — Inline text link in Todoist-red (`#e44432`), no fill, no border. Underline appears on hover. "Learn more", "See all features".

### Cards

**`card`** — The default feature card. Pure-white fill (`#ffffff`) lifting off the warm canvas, 1px `#eae9e8` hairline, 12px radius, 24px padding, and the signature soft plum-tinted ambient shadow (`0px 1px 19px 0px rgba(42,29,48,0.06)`). The card separates from the off-white ground via that wide, soft shadow more than via the faint border.

**`card-cream`** — Cream-tinted feature panel. `#fff5eb` fill, no border, 16px radius, 32px padding. Used for warm secondary bands where a tint alone provides separation — no shadow needed.

**`card-peach`** — Peach feature panel. `#fae8d6` fill (`--color-td-secondary-dark`), no border, 16px radius, 32px padding. The warmest surface, reserved for illustrated bands and emotionally warm moments ("Achieve peace of mind").

### Badges, Tags, Pills

**`badge-priority`** — Priority chip mirroring the product UI. Pill radius, 12px caption, warm-brown text (`#9a3b00`). Backgrounds map to the app priorities: p1 `#ffd6d3` (red), p2 `#fbe7ce` (peach), p3 `#dde6f9` (blue), p4 `#f2efed` (neutral). Appears in product screenshots.

**`badge-soft`** — Inline "New" / category pill. Warm red-tint fill (`#fdf0e4`), warm-brown text (`#9a3b00`), pill radius, 4×12px padding, 12px caption.

### Inputs / Forms

**`input`** — White fill (`#ffffff`), 1px `#dadad9` border, 8px radius, 44px height, 10×14px padding, warm-black text. Placeholder in `#8c8b8b`. On focus the border thickens to 1.5px Todoist-red (`#e44432`) and a faint red ring appears (`0 0 0 3px rgba(228,68,50,0.24)`).

### Navigation

**`top-nav`** — Warm-white surface matching the canvas (no separation at rest), 64px height. Wordmark flush left, primary nav items centred/right ("Made for", "Features", "Pricing", "Resources"), and a "Log in" + red "Start for free" CTA pair flush right. Nav links in 15px/500 warm-black. On scroll, a 1px `#eae9e8` bottom hairline appears to detach the header from the page. Dropdown mega-menus open below the nav items with the popover shadow.

## 5. Layout Principles

### Spacing System

- Base unit: **4px**
- Scale: `0 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96`
- Section padding (vertical): 64–96px between major feature bands — generous, unhurried
- Card internal padding: 24px on white cards; 32px on cream/peach panels
- Inter-card gutters: 24px in multi-column grids

### Grid & Container

- Max content width: **1280px** with comfortable side gutters
- Prose measure: ~720px for long paragraphs — keeps reading line-length comfortable
- Hero: single-column centred or left-text / right-illustration split
- Feature bands: alternating 2-up (text + screenshot) layouts, occasionally a 3-up card grid for feature lists
- Bands alternate surface tints — warm-white → cream → peach → warm-white — so adjacent sections separate by warmth rather than by hard rule

### Whitespace Philosophy

The page is calm and breathable. Generous vertical rhythm (64–96px between bands), 1.6 body leading, and a 720px prose measure all serve the same goal: an unhurried, low-stress read that mirrors the product's promise. Whitespace is warm-white, so even the "empty" space participates in the friendly atmosphere. Sections are clearly delimited but never crowded; there is room to breathe between every claim.

### Section Cadence

A typical Todoist marketing page runs:

1. Warm-white hero (55px/600 headline, 18px deck, red "Start for free" CTA + secondary, product screenshot or illustration)
2. Social-proof strip (logos / award badges / user count) on a faint tint
3. Feature band — text-left / screenshot-right on a cream surface
4. Feature band — screenshot-left / text-right on warm-white (alternating)
5. Peach "emotional payoff" band (illustration-forward — "Achieve peace of mind")
6. Three-up feature card grid (white cards on warm canvas)
7. Closing CTA band — centred headline + red CTA, often on peach
8. Footer — multi-column links in warm-muted text on warm-white

The alternation is *surface warmth* (white / cream / peach), never a light/dark inversion. The page stays warm throughout.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|------|-------|-----|
| Micro | 2px | Tiny internal chrome, checkbox inner marks |
| Small | 4px | Fine controls, small tags |
| Standard | 8px | Buttons, inputs, select fields — the dominant control radius |
| Comfortable | 12px | Cards, dropdowns, smaller panels |
| Featured | 16px | Cream/peach feature panels, large surfaces |
| Pill | 9999px | Badges, priority chips, avatars, segmented controls |

The page's radius personality is **gently rounded**. 8px on every control reads as soft-but-crisp — friendlier than the 4px Linear uses, more disciplined than the 12px+ a consumer toy would reach for. Cards step up to 12px, big warm panels to 16px, and small interactive chips go full pill. There are no sharp 0px corners anywhere on interactive surfaces; the warmth of the palette is reinforced by the softness of the corners. No compound radii — controls round uniformly.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | no shadow | Canvas, cream/peach bands, nav at rest (most surfaces) |
| 1 — Ambient | `0px 1px 2px 0px rgba(0,0,0,0.04)` | Subtle separation, sticky-nav-on-scroll baseline |
| 2 — Card | `0px 1px 19px 0px rgba(42,29,48,0.06)` | White feature cards on warm canvas — the signature soft plum-tinted lift |
| 3 — Elevated | `0px 8px 28px -6px rgba(42,29,48,0.12), 0px 2px 8px -2px rgba(0,0,0,0.06)` | Card hover, raised product previews |
| 4 — Popover | `0px 12px 32px -8px rgba(0,0,0,0.16)` | Nav mega-menus, dropdowns, tooltips |
| 5 — Modal | scrim `rgba(34,40,41,0.80)` + dialog at popover shadow | Sign-up modal, video lightbox |

### Shadow Philosophy

Todoist's depth language is **soft and warm**. The signature card shadow is wide and low-opacity (`0px 1px 19px 0px rgba(42,29,48,0.06)`) with a faint *plum* tint rather than neutral black — the warmth carries into the depth so cards never cast a hard, cold shadow against the peach surfaces. On warm-tinted bands (cream, peach), cards often drop the shadow entirely and lift via surface-colour contrast alone (white card on cream ground). Elevation rises in soft, blurry steps; nothing snaps. The page reads as gently layered paper, not as floating glass panels.

## 8. Interaction & Motion

### Easing

- **Standard**: `cubic-bezier(0.4, 0, 0.2, 1)` — default for button colour shifts, hover states
- **Out-soft**: `cubic-bezier(0.0, 0, 0.2, 1)` — scroll-reveal entrances
- **Emphasized**: `cubic-bezier(0.2, 0, 0, 1)` — modal / mega-menu entry

### Durations

| Bucket | Value | Use |
|--------|-------|-----|
| Fast | 150ms | Button colour swaps, link underline, focus-ring fade |
| Standard | 240ms | Hover transitions, card lift, checkbox complete |
| Slow | 320ms | Scroll-reveal, modal entry, mega-menu |

### Per-Component Recipes

- **Primary CTA hover**: background red shifts `#e44432` → `#ee5244` over 150ms standard; active drops to `#d1453b`. No transform — the colour shift is the feedback.
- **Card hover**: shadow steps from card (level 2) to elevated (level 3) and the card lifts ~1px over 240ms standard.
- **Task-complete checkbox** (the signature product gesture, echoed in marketing screenshots): the empty circle fills with Todoist-red, a white check draws in, and the task text gains a strike-through over 240ms — a small, satisfying "done" moment.
- **Inline text link**: underline fades in over 150ms on hover; colour stays Todoist-red.
- **Scroll-reveal**: feature bands fade in and rise 12px over 320ms ease-out-soft on viewport entry, one-shot per band.
- **Mega-menu**: opens with a fade + 8px downward slide over 320ms emphasized.

### Page Transitions

Navigation is standard page loads (multi-page Astro/static marketing site); anchored in-page links smooth-scroll over ~400ms. The sticky header detaches with a hairline as the page scrolls past the hero.

### Reduced Motion

Respects `prefers-reduced-motion: reduce`. All `translate` and `scale` transforms suppress: scroll-reveal becomes a static render-on-mount, card hover drops the lift (shadow change only), the checkbox-complete strike-through appears instantly, and link underlines toggle immediately. Colour transitions remain (they convey state, not decoration).

## 9. Accessibility & A11y

### Contrast Pairs

| Pair | Ratio | Level |
|------|-------|-------|
| #25221e ink on #fefdfc canvas | 15.6 | AAA |
| #25221e ink on #ffffff card | 15.8 | AAA |
| #25221e ink on #fae8d6 peach | 13.3 | AAA |
| #25221e ink on #fff5eb cream | 14.7 | AAA |
| #565656 muted on #fefdfc canvas | 7.1 | AAA |
| #ffffff on #e44432 brand-red | 4.1 | AA large only |
| #ffffff on #d1453b cta-active | 4.5 | AA body |
| #e44432 brand on #fefdfc canvas | 4.0 | AA large only |
| #9a3b00 deep-red on #fdf0e4 tint | 7.6 | AAA |

The one number to watch is **white on brand-red (`#e44432`) at 4.1** — that passes WCAG AA only for *large* text (≥18px or ≥14px bold). The "Start for free" CTA sits at 16px/500, which qualifies as large-bold and passes; but never set small white body text on a flat brand-red fill. The hover/active reds (`#ee5244` / `#d1453b`) and the deep-red text token (`#9a3b00`) are the safer pairings when contrast matters. Likewise, **brand-red as text on the canvas is large-only (4.0)** — keep red links at link-size or larger, and never use red for small running body text.

### Focus Indicators

Focused inputs thicken their border to 1.5px Todoist-red (`#e44432`) and gain a 3px red-tint ring (`rgba(228,68,50,0.24)`). Focused buttons and links carry a visible 2px focus outline in brand-red with 2px offset. The red ring is the one place the brand colour appears as a pure interactive affordance everywhere on the page.

### ARIA Patterns

- **Top nav**: `<nav aria-label="Primary">` landmark; mega-menus use `aria-expanded` on their triggers and `role="menu"` on the panel.
- **CTA**: `<a>` or `<button>` with text label "Start for free" — no icon-only primary CTAs.
- **Priority chips in screenshots**: decorative within marketing imagery (`aria-hidden`); the surrounding copy carries meaning.
- **Feature cards**: card-level `<a>` when the whole card links; otherwise descriptive inner links ("See all integrations").

### Keyboard Navigation

- Top nav: Tab moves logo → nav items → Log in → Start for free; Enter/Space opens mega-menus, Escape closes.
- Hero: Tab reaches the primary CTA, then the secondary action.
- Modal / lightbox: focus traps inside, Escape closes, focus returns to the trigger.

### Screen Reader Hints

Colour is never the sole carrier of meaning: priority chips and semantic states pair their colour with a label or icon. CTAs use outcome verbs ("Start for free") that read clearly out of context. Decorative warm illustrations and accent dots are marked `aria-hidden`.

### Reduced Motion

All transitions degrade to opacity-only or instant. Scroll-reveal renders static, card hover lift disables (shadow-only), the task-complete gesture skips the draw animation.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Top nav collapses to logo + hamburger; hero stacks (headline → CTA → image); H1 drops 55 → ~34px; feature bands 1-up; CTAs full-width |
| Tablet | 640–1024px | Hamburger or condensed nav; hero settles to single column or tight split; H1 ~44px; 2-up card grids tighten |
| Desktop | 1024–1280px | Full inline nav + mega-menus; hero split text/illustration; H1 at 55px; 2-up and 3-up bands |
| Wide | >1280px | Content caps at 1280px; gutters absorb the extra width; warm canvas extends edge-to-edge |

### Touch Targets

- Primary CTA: ≥44px height — comfortable thumb target
- Nav links: ≥44px hit area even at 15px text
- Priority chips and small controls expand their hit area to 44px on touch

### Collapsing Strategy

- Inline nav + mega-menus collapse into a hamburger sheet below 640px
- Hero split (text + image) stacks vertically; image moves below the CTA
- Multi-column feature grids collapse 3 → 2 → 1
- Cream/peach panels keep their tint and radius; padding tightens from 32 → 24px

### Image Behavior

Product screenshots and illustrations carry intrinsic aspect ratios and downscale proportionally; they never crop awkwardly. Illustrations sit on their warm tinted bands at full width on mobile. Hero device mockups scale by viewport.

### Container Queries

Not required for the marketing surface — viewport breakpoints are sufficient at every width. (The product UI itself uses container-aware layouts, but the marketing page does not.)

## 11. Content & Voice

### Tone

Warm, encouraging, and refreshingly plain. Todoist's voice promises relief, not hustle — it speaks to a person who wants a calmer, more organized life, and it avoids both enterprise jargon ("optimize your workflow velocity") and breathless hype ("10x your productivity!"). Headlines are reassuring and human ("Organize your work and life, finally"; "Achieve peace of mind"); decks explain the benefit in everyday language. The register is a friendly, competent colleague, never a drill sergeant.

### Microcopy Patterns

- **CTA verbs**: "Start for free", "Get started", "Add Todoist to [platform]", "Try Todoist" — outcome- and onboarding-oriented, never "Submit" or "Click here"
- **Empowerment framing**: copy centres the user's day ("your work and life", "your tasks", "peace of mind") rather than the tool's features
- **Error messages**: warm and helpful — "Something went wrong. Try again in a moment." — no blame, no jargon
- **Success confirmations**: small and satisfying — a checked task, "All done for today" — echoing the product's completion feeling

### Empty States

The product's empty states ("Enjoy the calm of an organized mind" / "You've completed everything") set the marketing tone exactly — Todoist treats an empty list as an achievement, not an absence. Marketing copy borrows that optimism: emptiness equals calm.

### CTA Verb Conventions

- Primary action: **"Start for free"** (the canonical red CTA)
- Secondary action: **"Log in"**, **"See pricing"**, **"Learn more"**
- Onboarding: **"Add Todoist to Chrome / iPhone / Mac"** — platform-specific install verbs
- Avoided: "Submit", "Click here", "Buy now" — Todoist uses warm, outcome-led verbs

## 12. Dark Mode & Theming

**Light-only marketing surface.** The public site stays warm-light throughout — there is no dark-mode toggle on the marketing pages (the theme-toggle audit found no dark signals).

The *product*, by contrast, is one of the most theme-rich apps in its category: Todoist ships system light/dark plus a large gallery of accent themes (and special seasonal themes for paying users). Marketing screenshots usually show the warm-light default to match the page, occasionally featuring a dark-app shot to advertise the theme range.

If a dark marketing variant were ever shipped, the natural token swap would be: canvas `#1f1f1f` (`--color-grey-08`), surface `#2a2a2a`, ink `#fefdfc`, secondary surfaces shifting to deep warm-charcoals, and the brand staying at — or slightly brightening toward — `#ee5244` so Todoist-red holds its voltage on a dark ground. The warm character would carry over via warm-charcoal surfaces rather than cold blue-greys.

## 13. Lineage & Influences

Todoist's marketing design sits at the intersection of two traditions. The first is **Swiss / International Typographic Style by way of the modern SaaS template**: a content-first grid, generous whitespace, a single humanist sans (Graphik) doing all the typographic work, and a restrained palette built around one brand voltage. That lineage runs through Stripe, Linear, and Notion — the contemporary template for "serious software, calmly presented". The second is **warmth as differentiation**: where Things goes cool-Apple-grey and Linear goes near-black-and-cold, Todoist deliberately warms everything — warm-white paper instead of screen-white, warm-black ink instead of `#000`, and peach/cream secondary surfaces instead of cold greys. The warmth signals "this is for your life, not just your job".

The throughline is **Todoist-red** (`#e44432`), the colour the brand has owned since Doist first shipped the product in 2007. It is one of the most consistent brand colours in productivity software — instantly recognizable, slightly retro, distinctly human (a true red, not a tech-blue or a startup-purple). The site's discipline is to let that red mean exactly one thing — *act here* — by reserving it almost entirely for CTAs, links, and the task-complete gesture. The presence of a parallel **Twist-blue** scale (`#316fea`) in the same stylesheet reveals Doist's shared design system: Todoist and its sibling chat app Twist run identical token structures (primary / secondary-dark / secondary-mid / secondary-light / cta-hover / cta-active), differing only in hue. That systemic kinship is the studio's signature.

What Todoist rejects: cold greys, pure black, pure white, gradient meshes, dark-mode hero inversions, and feature-list density. The page stays warm, calm, single-voltage, and unhurried — productivity reframed as relief.

**Influences:**
- Doist (the studio behind Todoist & Twist) — remote-first design studio; the shared token system that gives Todoist (red) and Twist (blue) parallel scales — [doist.com](https://doist.com)
- Graphik by Commercial Type — the humanist grotesque carrying the whole page; warm, neutral, friendlier than Helvetica or Inter — [commercialtype.com/catalog/graphik](https://commercialtype.com/catalog/graphik)
- Swiss / International Typographic Style — grid discipline, generous whitespace, sans-serif clarity, content-first hierarchy — [en.wikipedia.org/wiki/International_Typographic_Style](https://en.wikipedia.org/wiki/International_Typographic_Style)
- Stripe — the modern SaaS-marketing template: soft tinted feature bands, restrained palette, one brand voltage — [stripe.com](https://stripe.com)
- Notion — warm, approachable productivity register; near-white paper canvas, calm rather than corporate — [notion.so](https://www.notion.so)

## 14. Do's and Don'ts

**Do**
- Use the warm-white canvas (`#fefdfc`) — never pure white, never cold screen-grey; the warmth is the brand
- Set body ink at warm near-black (`#25221e`), not `#000` — the browned ink is what reads friendly
- Reserve Todoist-red (`#e44432`) for CTAs, inline links, and the task-complete gesture — one or two red moments per band
- Use Graphik (or Inter as a softened substitute) across all weights — one humanist family, weight-driven hierarchy
- Keep headlines at weight 600, reserving 700 for the largest display sizes
- Alternate feature bands by surface warmth — warm-white → cream (`#fff5eb`) → peach (`#fae8d6`) — not by light/dark
- Lift cards with the soft plum-tinted shadow (`rgba(42,29,48,0.06)`) — wide, low-opacity, warm
- Round controls at 8px, cards at 12px, big panels at 16px — gently soft, never sharp
- Set generous 1.6 body leading and a ~720px prose measure — the unhurried, calm read
- Use warm illustration accents (gold, sage, coral-pink) as spot colours in art, not as UI chrome
- Write outcome-led, reassuring copy ("Start for free", "Achieve peace of mind") — warmth over hype

**Don't**
- Don't use cold greys or pure white for backgrounds — they break the warm-paper feel instantly
- Don't use pure black (`#000`) for text — always the warm near-black `#25221e`
- Don't flood the page with red — it loses its "act here" meaning; one or two reds per band maximum
- Don't set small white body text on a flat brand-red fill (4.1 contrast — large text only)
- Don't use red for small running body copy on the canvas (4.0 contrast — large/link sizes only)
- Don't invert to a dark hero or add a dark-mode toggle on marketing — the surface is warm-light only
- Don't introduce a second saturated brand colour — Twist-blue belongs to the sibling app, not Todoist
- Don't use sharp 0px corners on buttons, cards, or inputs — the rounding reinforces the warmth
- Don't compress body line-height below 1.5 — the calm leading is part of the register
- Don't add gradient meshes, neon, or glassmorphism — Todoist's depth is soft warm paper, not glass
- Don't write enterprise jargon or hustle hype — the voice is a calm, competent colleague

## 15. Agent Prompt Guide

### Quick Color Reference

```
Canvas:        #fefdfc   (warm-white paper)
Ink:           #25221e   (warm near-black text)
Brand-red:     #e44432   (--color-td-primary, the signature voltage)
Brand-hover:   #ee5244
Brand-active:  #d1453b
On-brand:      #ffffff
Peach:         #fae8d6   (secondary-dark surface)
Cream-mid:     #fff5eb   (secondary-mid surface)
Cream-light:   #fff9f3   (secondary-light surface)
Muted:         #565656   (66% black — secondary copy)
Soft:          #8c8b8b   (45% black — captions)
Hairline:      #eae9e8   (8% black border)
Card-shadow:   0px 1px 19px 0px rgba(42,29,48,0.06)
```

### Example Component Prompts

- "Create a Todoist-style hero: warm-white canvas (#fefdfc), a 55px / 600 Graphik headline in warm near-black (#25221e) with -0.02em tracking, an 18px / 1.6 deck in muted #565656, then a primary CTA — Todoist-red (#e44432) fill, white text, 8px radius, 'Start for free' — paired with a #25221e ghost-fill secondary button. Right side: a product screenshot card with a soft plum shadow rgba(42,29,48,0.06)."
- "Design a Todoist primary button: Todoist-red fill (#e44432), white 16px / 500 Graphik label, 8px radius, 12×20px padding. Hover lightens to #ee5244, active deepens to #d1453b, transitioning over 150ms cubic-bezier(0.4,0,0.2,1). This is the page's one saturated fill — use it sparingly."
- "Build a Todoist feature band: a cream surface (#fff5eb), 16px radius, 32px padding, no border. Left: a 28px / 600 Graphik title in #25221e and 16px / 1.6 body in #565656 with a red inline 'Learn more' link. Right: an illustration on warm gold (#ffc93e) and coral-pink (#ffada4) accents. The band separates from the next via warmth, not a rule."
- "Create a Todoist feature card: pure-white fill (#ffffff) on a warm-white page, 12px radius, 1px #eae9e8 hairline, 24px padding, soft plum ambient shadow 0px 1px 19px 0px rgba(42,29,48,0.06). Inside: a 22px / 600 Graphik title in #25221e, then 16px / 1.6 body in #565656. On hover the shadow deepens and the card lifts 1px over 240ms."
- "Design a Todoist input: white fill, 1px #dadad9 border, 8px radius, 44px height, 10×14px padding, warm-black text, #8c8b8b placeholder. On focus the border thickens to 1.5px Todoist-red (#e44432) with a 3px red-tint ring rgba(228,68,50,0.24)."
- "Build a Todoist task row (product UI for a screenshot): a circular checkbox that fills with Todoist-red and draws a white check on complete, the task text gaining a strike-through over 240ms, plus a pill priority chip (p1 #ffd6d3, p4 #f2efed) with warm-brown #9a3b00 label."

### Iteration Guide

1. **Warm everything.** Canvas is `#fefdfc` not `#fff`, ink is `#25221e` not `#000`, secondary surfaces are peach/cream not grey. If it feels cold, you've drifted from the brand.
2. **One red, one meaning.** Todoist-red (`#e44432`) means "act here" — CTAs, links, task-complete. Don't spread it across decorative fills or it loses its punch.
3. **Graphik, weight-driven.** One humanist sans across 400–700. Headlines at 600, display at 700, body at 400. If Graphik is unavailable, use Inter softened with -0.02em on headlines.
4. **Alternate by warmth, not by darkness.** Bands go warm-white → cream (`#fff5eb`) → peach (`#fae8d6`). Never invert to dark; the page stays warm-light end to end.
5. **Soft, plum-tinted depth.** Cards lift via the wide, low-opacity `rgba(42,29,48,0.06)` shadow — never a hard black drop shadow. On tinted bands, drop the shadow and lift via surface contrast.
6. **Gently rounded, never sharp.** 8px controls, 12px cards, 16px panels, pill chips. Square corners read cold and break the friendly register.
7. **Calm typography.** 1.6 body leading, ~720px prose measure, generous 64–96px band spacing. The unhurried rhythm is the product's promise made visible.
8. **Mind the red contrast.** White-on-red is large-text-only (4.1) and red-on-canvas is large/link-only (4.0). Keep red text at CTA/link size; use `#9a3b00` deep-red for small text on tints.

---

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