light · sans · friendly · blue · productivity · soft

DESIGN.md inspired by Loom

White canvas, Charlie Display sans, and a confident Atlassian blue pill — async video that feels like a calm, friendly workspace.

By webdesignhot · www.loom.com
$ npx @webdesignhot/design-md add loom
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #ffffff
  • bg-soft #f8f8f8
  • bg-muted #f0f1f2
  • surface #ffffff
  • surface-blue #e9f2fe
  • surface-violet #f8eefe
  • text AAA · 14.3 #292a2e
  • text-heading #101214
  • text-strong #1e1f21
  • text-secondary #505258
  • text-tertiary #6c6f77
  • text-muted #8c8f97
  • text-faint — · 2.0 #b7b9be
  • brand AA · 5.2 #1868db
  • brand-hover #1558bc
  • brand-active #123263
  • brand-soft #e9f2fe
  • brand-tint #cfe1fd
  • brand-mid #4d8ced
  • brand-outline #a3c3f1
  • on-brand #ffffff
  • accent-violet #d8a0f7
  • accent-violet-soft #f8eefe
  • accent-violet-mid #bf63f3
  • accent-violet-deep #964ac0
  • accent-record #ff613d
  • accent-record-soft #ff613d20
  • link #1868db
  • link-hover #1558bc
  • selected-bg #e9f2fe
  • disabled #b7b9be
  • border — · 1.3 #e4e2e7
  • border-soft #f1f0f3
  • border-strong — · 1.3 #dddee1
  • border-input #b7b9be
  • border-brand #1868db
  • success-bg #efffd6
  • success-text #4c6b1f
  • success-solid #94c748
  • warning-bg #fff5d4
  • warning-text #8a5700
  • warning-solid #ffc716
  • danger-bg #ff613d20
  • danger-text #c77b00
  • danger-solid #ff613d
  • info-bg #e9f2fe
  • info-text #1558bc
Typography
Ship faster than ever.
display-hero "Charlie Display" 80px w700 -0.03em
Ship faster than ever.
display-lg "Charlie Display" 63px w700 -0.02em
Ship faster than ever.
h1 "Charlie Display" 44px w700 -0.018em
Built for teams that ship.
h2 "Charlie Display" 32px w700 -0.012em
A complete kit
h3 "Charlie Display" 24px w600 -0.005em
The quick brown fox jumps over the lazy dog.
h4 "Charlie Display" 20px w600 0
The quick brown fox jumps over the lazy dog.
h5 "Charlie Text" 18px w600 0
The quick brown fox jumps over the lazy dog.
body-lg "Charlie Text" 18px w400 0
The quick brown fox jumps over the lazy dog.
body "Charlie Text" 16px w400 0
The quick brown fox jumps over the lazy dog.
body-medium "Charlie Text" 16px w500 0
The quick brown fox jumps over the lazy dog.
button "Charlie Text" 16px w600 0
The quick brown fox jumps over the lazy dog.
body-sm "Charlie Text" 14px w400 0
npx @webdesignhot/design-md add stripe
code ui-monospace 14px w400 0
The quick brown fox jumps over the lazy dog.
eyebrow "Charlie Text" 13px w600 0.06em
OUR DESIGN SYSTEM
label "Charlie Text" 13px w500 0
OUR DESIGN SYSTEM
caption "Charlie Text" 12px w500 0.02em
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
Radius
  • micro 2px
  • sm 4px
  • md 8px
  • lg 12px
  • xl 16px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 8/8 mapped · webdesignhot/0.1

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

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

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

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

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: Loom
tagline: White canvas, Charlie Display sans, and a confident Atlassian blue pill — async video that feels like a calm, friendly workspace.
updated_at: 2026-05-29T21:44:31.560Z
published_at: 2026-05-29T21:44:31.560Z
author: webdesignhot
source_url: https://www.loom.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [saas, ai, media]
tags: [light, sans, friendly, blue, productivity, soft]
preview_swatch: ['#ffffff', '#1868db', '#d8a0f7']
related: [descript, notion, linear]
description: 'Loom''s marketing site is calm, friendly productivity software rendered in a clean white canvas (`#ffffff`), the custom Charlie Display + Charlie Text sans family, and one confident Atlassian-inherited blue (`#1868db`, the `--thd-color-blue-70`) carried on full-pill CTAs. After the Atlassian acquisition Loom''s palette converged on Atlassian''s tokenized blue (the `--thd-color-*` design-token namespace exposes a full 10-step blue, violet, grey, yellow, green ladder), so the page reads as enterprise-grade trust rather than indie-creator playfulness. Headlines land in Charlie Display at ~63px / 700 in near-black `#101214`; body copy sits in Charlie Text at 16px / 1.55 in a softer grey-near-black `#292a2e`. The signature secondary accent is a soft violet `#d8a0f7` (`--thd-color-violet-30`) used for AI / Rovo surfaces, and a hot coral `#ff613d` record dot signals the act of recording. Where Descript ships beauty-editorial cream-pink and Runway ships chrome-on-black, Loom ships the reassuring white-and-blue of a tool your whole company already trusts — friendly enough for a creator, calm enough for IT to approve. CTAs are full-pill (9999px radius) — the rounded, approachable shape is the whole register: nothing sharp, nothing aggressive, just "press record and send."'


# 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-violet
  muted: text-muted
  border: border
  ring: brand
colors:
  # Primary
  bg: '#ffffff'                          # white page canvas (rgb 255,255,255)
  bg-soft: '#f8f8f8'                     # grey-10, softest panel wash
  bg-muted: '#f0f1f2'                    # grey-20, nested section band
  surface: '#ffffff'                     # raised white card on white — defined by border, not fill
  surface-blue: '#e9f2fe'               # blue-10, soft-blue feature surface / secondary CTA bg
  surface-violet: '#f8eefe'             # violet-10, AI / Rovo surface wash
  text: '#292a2e'                        # grey-100, primary body copy (soft near-black)
  text-heading: '#101214'               # black — headlines, leans true-black
  text-strong: '#1e1f21'                # black-neutral, emphasized copy
  text-secondary: '#505258'             # grey-80, secondary copy
  text-tertiary: '#6c6f77'              # grey-70, captions / metadata
  text-muted: '#8c8f97'                 # grey-50, helper / placeholder
  text-faint: '#b7b9be'                 # grey-40, disabled microcopy
  # Brand (Atlassian-inherited blue ladder)
  brand: '#1868db'                       # blue-70, primary CTA + links (--thd-color-button-fr)
  brand-hover: '#1558bc'                # blue-80, hover / pressed
  brand-active: '#123263'              # blue-90, active / deep press
  brand-soft: '#e9f2fe'                 # blue-10, soft hover wash / chip bg
  brand-tint: '#cfe1fd'                 # blue-20, mid tint
  brand-mid: '#4d8ced'                  # blue-50, mid-bright accent
  brand-outline: '#a3c3f1'             # --thd-color-button-ol, outline-button border
  on-brand: '#ffffff'                    # white label on blue
  # Accent (violet — AI / Rovo layer)
  accent-violet: '#d8a0f7'             # violet-30, signature secondary accent
  accent-violet-soft: '#f8eefe'        # violet-10, soft violet wash
  accent-violet-mid: '#bf63f3'         # violet-50, brighter violet
  accent-violet-deep: '#964ac0'        # violet-70, deep violet
  accent-record: '#ff613d'             # --thd-color-record, coral record dot
  accent-record-soft: '#ff613d20'      # 12% coral wash behind record state
  # Interactive
  link: '#1868db'                        # blue-70 links in body
  link-hover: '#1558bc'                # blue-80 on hover
  selected-bg: '#e9f2fe'               # blue-10 selected nav / row state
  disabled: '#b7b9be'                   # grey-40 disabled control text
  # Borders
  border: '#e4e2e7'                      # --thd-color-light-border, default hairline
  border-soft: '#f1f0f3'               # --thd-color-border-grey, quietest separation
  border-strong: '#dddee1'             # grey-30, emphasized separation
  border-input: '#b7b9be'              # grey-40, input resting border
  border-brand: '#1868db'              # blue-70, focused / active border
  # Semantic
  success-bg: '#efffd6'                 # green-10 wash
  success-text: '#4c6b1f'              # green-80
  success-solid: '#94c748'            # green-40, solid success
  warning-bg: '#fff5d4'                # yellow-10 wash
  warning-text: '#8a5700'             # yellow-80
  warning-solid: '#ffc716'            # yellow-30, solid warning
  danger-bg: '#ff613d20'              # 12% coral wash
  danger-text: '#c77b00'             # darkest amber-leaning danger text fallback
  danger-solid: '#ff613d'            # coral, used for record + destructive
  info-bg: '#e9f2fe'                   # blue-10 wash
  info-text: '#1558bc'               # blue-80

typography:
  display:
    family: '"Charlie Display", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif'
    weights: [500, 600, 700]
    opentype-features: ['liga', 'kern']
  body:
    family: '"Charlie Text", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif'
    weights: [400, 500, 600]
    opentype-features: ['liga', 'kern']
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, monospace'
    weights: [400, 500]
    opentype-features: ['tnum', 'zero']
  scale:
    display-hero:    { size: 80, weight: 700, lineHeight: 1.0,  tracking: '-0.03em',  family: display }
    display-lg:      { size: 63, weight: 700, lineHeight: 1.05, tracking: '-0.02em',  family: display }
    h1:              { size: 44, weight: 700, lineHeight: 1.1,  tracking: '-0.018em', family: display }
    h2:              { size: 32, weight: 700, lineHeight: 1.2,  tracking: '-0.012em', family: display }
    h3:              { size: 24, weight: 600, lineHeight: 1.25, tracking: '-0.005em', family: display }
    h4:              { size: 20, weight: 600, lineHeight: 1.3,  tracking: '0',        family: display }
    h5:              { size: 18, weight: 600, lineHeight: 1.35, tracking: '0',        family: body }
    eyebrow:         { size: 13, weight: 600, lineHeight: 1.4,  tracking: '0.06em',   family: body, transform: uppercase }
    body-lg:         { size: 18, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body-medium:     { size: 16, weight: 500, lineHeight: 1.55, tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    label:           { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.02em',   family: body }
    button:          { size: 16, weight: 600, lineHeight: 1.0,  tracking: '0',        family: body }
    code:            { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: mono }

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

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

layout:
  page-width: 1280
  prose-width: 720
  site-gutter: 'clamp(20px, 5vw, 64px)'
  header-height: 64
  grid-columns: 12
  section-rhythm: '80-128px'

components:
  button-primary:
    background: '#1868db'
    text: '#ffffff'
    padding: '12px 20px'
    radius: 9999
    border: 'none'
    font: 'Charlie Text 600 / 16px'
    hover-bg: '#1558bc'
    active-bg: '#123263'
    use: 'Primary action — full-pill blue CTA, the brand''s defining button (Get Loom for free)'
  button-secondary:
    background: '#e9f2fe'
    text: '#101214'
    padding: '12px 20px'
    radius: 9999
    border: 'none'
    font: 'Charlie Text 600 / 16px'
    hover-bg: '#cfe1fd'
    use: 'Soft-blue twin — pale blue fill, near-black label (Contact Sales)'
  button-outline:
    background: 'transparent'
    text: '#1868db'
    padding: '12px 20px'
    radius: 9999
    border: '1px solid #a3c3f1'
    font: 'Charlie Text 600 / 16px'
    hover-bg: '#e9f2fe'
    use: 'Outlined tertiary — blue text + blue-tint border, soft-blue hover wash'
  button-ghost:
    background: 'transparent'
    text: '#292a2e'
    padding: '8px 12px'
    radius: 9999
    border: 'none'
    font: 'Charlie Text 500 / 16px'
    hover-text: '#1868db'
    use: 'Quiet quaternary — nav links, footer, inline actions'
  card:
    background: '#ffffff'
    border: '1px solid #e4e2e7'
    radius: 12
    padding: '24px'
    shadow: 'none'
    use: 'Default feature card — white fill, defined by hairline border not shadow'
  card-soft:
    background: '#f8f8f8'
    border: 'none'
    radius: 16
    padding: '24px'
    use: 'Grey-wash surface card for nested feature blocks'
  card-blue:
    background: '#e9f2fe'
    border: 'none'
    radius: 16
    padding: '24px'
    use: 'Soft-blue feature surface — highlights, integrations, plan callouts'
  input:
    background: '#ffffff'
    border: '1px solid #b7b9be'
    radius: 8
    padding: '10px 12px'
    font: 'Charlie Text 400 / 16px'
    placeholder-color: '#8c8f97'
    focus-ring: '0 0 0 2px rgba(24, 104, 219, 0.30)'
    focus-border: '#1868db'
    use: 'Form fields, search, email capture'
  badge-soft-blue:
    background: '#e9f2fe'
    text: '#1558bc'
    padding: '4px 10px'
    radius: 9999
    font: 'Charlie Text 500 / 13px'
    use: 'Soft-blue chip for status / NEW / plan labels'
  badge-violet:
    background: '#f8eefe'
    text: '#964ac0'
    padding: '4px 10px'
    radius: 9999
    font: 'Charlie Text 500 / 13px'
    use: 'AI / Rovo chip — violet wash signals the intelligence layer'
  badge-record:
    background: '#ff613d20'
    text: '#ff613d'
    padding: '4px 10px'
    radius: 9999
    font: 'Charlie Text 600 / 13px'
    use: 'Recording-state chip — coral dot + label, the act-of-recording signal'
  nav-link:
    background: 'transparent'
    text: '#292a2e'
    padding: '8px 12px'
    font: 'Charlie Text 500 / 16px'
    hover-text: '#1868db'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-entrance: 'cubic-bezier(0, 0, 0.2, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  duration-page: 420
  reduced-motion: 'respects prefers-reduced-motion: reduce — transitions become opacity-only, durations halved'

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

shadows:
  none: 'none'
  ambient: 'rgba(16, 18, 20, 0.04) 0 1px 2px'
  card: 'rgba(16, 18, 20, 0.06) 0 2px 8px'
  raised: 'rgba(16, 18, 20, 0.08) 0 4px 16px'
  popover: 'rgba(16, 18, 20, 0.10) 0 8px 24px -4px'
  modal: 'rgba(16, 18, 20, 0.14) 0 16px 48px -8px'
  ring: '0 0 0 2px rgba(24, 104, 219, 0.30)'

accessibility:
  contrast-text-on-bg: 12.4                # #292a2e on #ffffff — AAA at all sizes
  contrast-heading-on-bg: 18.1             # #101214 on #ffffff — AAA at all sizes
  contrast-on-brand: 4.8                   # #ffffff on #1868db — AA at all sizes / AAA at large
  contrast-secondary-on-bg: 7.6            # #505258 on #ffffff — AAA at body sizes
  contrast-muted-on-bg: 3.3                # #8c8f97 on #ffffff — AA large only (placeholders/helper)
  focus-ring: '2px solid #1868db with 2px offset, plus 30% blue glow ring'
  reduced-motion-honored: true
  keyboard-nav: 'visible focus on every interactive surface; tab order matches visual flow'
  prose-line-length: 'capped at ~720px for comfortable reading'

dark-mode: null                            # marketing surface is light-only; the in-product editor ships its own dark theme
---

## 1. Visual Theme & Atmosphere

Loom's marketing site is the visual definition of *calm, trustworthy productivity software*. The canvas is plain white (`#ffffff`) — no cream, no gradient mesh, no dark slab — and onto it Loom places one confident blue (`#1868db`), the custom Charlie sans family, and an abundance of breathing room. The page never raises its voice. Headlines land in **Charlie Display** at roughly 63px / weight 700 in near-black `#101214`; body copy sits in **Charlie Text** at 16px / 1.55 in a slightly softer grey-near-black `#292a2e`. The single loudest move on the page is the blue full-pill CTA — "Get Loom for free" — and even that is friendly rather than aggressive, its 9999px radius making it read as a soft capsule rather than a hard button.

The defining context is the **Atlassian acquisition**. Loom is now an Atlassian product, and its palette has converged on Atlassian's tokenized design system: the page exposes a full `--thd-color-*` token namespace with a 10-step blue ladder (`blue-10` `#e9f2fe` → `blue-100` `#1c2b42`), parallel violet, grey, yellow, and green ladders, and named semantic tokens. This is enterprise-grade chromatic discipline — every color on the page is a rung on a defined scale, not a one-off hex. The result reads as institutional trust: this is a tool your whole company already uses, IT has already approved, and the brand color is the same calm blue you see across Jira and Confluence. Loom traded indie-creator playfulness for the reassurance of being part of a platform.

The third register is **the record signal**. Loom is, at its core, the button you press to start recording your screen. The brand reserves a hot coral `#ff613d` (the `--thd-color-record` token) for exactly this — the record dot, recording-state chips, the live indicator. It is the one warm, urgent color in an otherwise cool palette, and it appears only when something is being captured. Alongside it, a soft violet `#d8a0f7` (`--thd-color-violet-30`) marks the AI / Rovo intelligence layer — auto-titles, summaries, transcripts. So the page has a clean three-part chromatic grammar: **blue for action and trust, violet for AI, coral for recording.** Each color means one thing.

Where Descript ships beauty-editorial cream-pink + serif display, and Runway/Pika ship chrome-on-black for cinematic AI, Loom ships the friendly white-and-blue of a workspace tool. The pill-shaped everything — CTAs, chips, badges, avatars — is the entire emotional register: nothing sharp, nothing intimidating, just rounded, approachable surfaces that say "press record and send." It is software designed to feel like it requires no learning curve.

Atmospheric vocabulary that captures the feeling: *calm-white, Atlassian-blue, friendly-pill, Charlie-sans, record-coral, Rovo-violet, tokenized-trust, async-video, workspace-reassurance, no-learning-curve, breathing-room, enterprise-approachable.* Every surface lands like a clean product screenshot — bright, legible, unhurried, and quietly confident that you already know how to use it.

**Key Characteristics**

- Plain white `#ffffff` canvas — no cream, no gradient, no dark slab; brightness is the brand
- Custom **Charlie Display** headlines at ~63px / 700 in near-black `#101214`
- Custom **Charlie Text** body at 16px / 1.55 in soft grey-near-black `#292a2e`
- One confident **Atlassian blue** `#1868db` for all primary action and links
- **Full-pill** (9999px) CTAs, chips, badges — the rounded, approachable shape is the register
- Soft-blue secondary CTA `#e9f2fe` with near-black label — calm, never competing with primary
- Signature **violet** `#d8a0f7` for the AI / Rovo intelligence layer only
- Hot **coral** `#ff613d` reserved exclusively for the record signal
- Fully **tokenized** palette — every color is a rung on a defined 10-step ladder
- Borders define cards, not shadows — `#e4e2e7` hairlines over white
- Generous whitespace, 80–128px section rhythm — unhurried, screenshot-clean
- Three-color grammar: blue = action, violet = AI, coral = recording — each means one thing

## 2. Color Palette & Roles

### Primary

- **bg** `#ffffff` [→ canvas]: white page canvas, the brand's brightness. RGB (255, 255, 255). Never tinted — the cleanness is the point.
- **text** `#292a2e` [→ `--thd-color-grey-100`]: primary body copy, a soft near-black warmer and gentler than `#000`.
- **text-heading** `#101214` [→ `--thd-color-black`]: headlines, leans true-black for maximum presence against white.
- **bg-soft** `#f8f8f8` [→ `--thd-color-grey-10`]: softest panel wash for nested sections.
- **bg-muted** `#f0f1f2` [→ `--thd-color-grey-20`]: deeper grey band for alternating section emphasis.

### Brand (Atlassian Blue Ladder)

- **brand** `#1868db` [→ `--thd-color-blue-70` / `--thd-color-button-fr`]: primary CTA, links, focus border. The defining chromatic move.
- **brand-hover** `#1558bc` [→ `--thd-color-blue-80`]: hover / pressed state, one step deeper.
- **brand-active** `#123263` [→ `--thd-color-blue-90`]: active / deep-press state.
- **brand-soft** `#e9f2fe` [→ `--thd-color-blue-10`]: soft hover wash, secondary CTA fill, chip background.
- **brand-tint** `#cfe1fd` [→ `--thd-color-blue-20`]: mid tint for hover-on-soft states.
- **brand-mid** `#4d8ced` [→ `--thd-color-blue-50`]: mid-bright accent for illustration / data viz.
- **brand-outline** `#a3c3f1` [→ `--thd-color-button-ol`]: outline-button border color.
- **on-brand** `#ffffff` [→ `--thd-color-white`]: white label on blue. The high-contrast action pair.

### Accent (Violet AI Layer + Coral Record)

- **accent-violet** `#d8a0f7` [→ `--thd-color-violet-30`]: signature secondary accent, marks AI / Rovo surfaces.
- **accent-violet-soft** `#f8eefe` [→ `--thd-color-violet-10`]: soft violet wash background for AI feature blocks.
- **accent-violet-mid** `#bf63f3` [→ `--thd-color-violet-50`]: brighter violet for emphasis within the AI layer.
- **accent-violet-deep** `#964ac0` [→ `--thd-color-violet-70`]: deep violet for violet-on-soft text.
- **accent-record** `#ff613d` [→ `--thd-color-record`]: hot coral record dot — the one warm, urgent color.
- **accent-record-soft** `#ff613d20` [→ `--thd-color-record-20`]: 12% coral wash behind recording-state chips.

The accent layer is **strictly meaning-bound**: violet only ever means "AI / Rovo," coral only ever means "recording / live." Neither is decorative. Using violet for a generic highlight or coral for a CTA breaks the chromatic grammar that lets users read color as state.

### Interactive

- **link** `#1868db` [→ `--thd-color-blue-70`]: blue links in body copy, often underlined on hover.
- **link-hover** `#1558bc` [→ `--thd-color-blue-80`]: deeper blue on hover.
- **selected-bg** `#e9f2fe` [→ `--thd-color-blue-10`]: selected nav item / active row, soft-blue wash.
- **disabled** `#b7b9be` [→ `--thd-color-grey-40`]: disabled control text and icons.

### Neutral Scale (Grey Ladder)

- **grey-10** `#f8f8f8` — softest wash / page-soft surface.
- **grey-20** `#f0f1f2` — section band.
- **grey-30** `#dddee1` — strong separator / divider.
- **grey-40** `#b7b9be` — input resting border, disabled text.
- **grey-50** `#8c8f97` — helper text, placeholders.
- **grey-70** `#6c6f77` — captions, metadata.
- **grey-80** `#505258` — secondary body copy.
- **grey-90** `#3b3d42` — strong secondary copy.
- **grey-100** `#292a2e` — primary body text.
- **black** `#101214` — headings; **black-neutral** `#1e1f21` — emphasized copy.

The grey ladder is **cool-neutral with a faint blue undertone** — it sits comfortably under the blue brand color without ever picking up warmth. Loom never uses a warm grey; a beige or taupe neutral would crack the clean, cool, screenshot-bright temperature.

### Surface & Borders

- **surface-0 (page)** `#ffffff` white.
- **surface-1 (soft)** `#f8f8f8` grey-10 nested panel.
- **surface-2 (band)** `#f0f1f2` grey-20 section band.
- **surface-blue** `#e9f2fe` blue-10 feature surface.
- **surface-violet** `#f8eefe` violet-10 AI surface.
- **border** `#e4e2e7` [→ `--thd-color-light-border`]: default hairline — the primary card-definition device on white.
- **border-soft** `#f1f0f3` [→ `--thd-color-border-grey`]: quietest separation, internal dividers.
- **border-strong** `#dddee1` [→ `--thd-color-grey-30`]: emphasized separator.
- **border-input** `#b7b9be` [→ `--thd-color-grey-40`]: input resting border.
- **border-brand** `#1868db` [→ `--thd-color-blue-70`]: focused / active border.

### Shadow Colors

Loom's depth language is **borders first, shadows second**. On the white canvas, cards are defined primarily by a hairline `#e4e2e7` border; shadows are reserved for genuinely floating elements (popovers, dropdowns, modals) and are soft, neutral black-tinted (`rgba(16, 18, 20, 0.06)` to `0.14`), never colored. The brand never uses blue- or violet-tinted shadows; that would muddy the crisp white temperature. Product screenshots typically float on a subtle ambient shadow with the in-product UI shown at native fidelity — Loom trusts the product's own polish rather than wrapping it in a decorative frame.

### Semantic

- **success** — bg `#efffd6` (green-10 wash), text `#4c6b1f` (green-80), solid `#94c748` (green-40).
- **warning** — bg `#fff5d4` (yellow-10 wash), text `#8a5700` (yellow-80), solid `#ffc716` (yellow-30).
- **danger / destructive** — bg `#ff613d20` (12% coral wash), solid `#ff613d` (the record coral, reused for destructive). Note: Loom's destructive color is the *same coral as the record dot* — the urgent warm hue does double duty as "live" and "careful."
- **info** — bg `#e9f2fe` (blue-10 wash), text `#1558bc` (blue-80). Info reuses the brand blue, reinforcing the single-brand-system discipline.

The notable choice: there is no separate "error red" — the coral record token doubles as the destructive color, and info reuses the brand blue. Semantic colors are drawn from the existing token ladders rather than introducing new hues, which keeps the whole page chromatically coherent.

## 3. Typography Rules

### Font Family

- **Display**: `"Charlie Display", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif` — Atlassian's custom display sans, used at weight 500 / 600 / 700. The face for all headlines.
- **Body**: `"Charlie Text", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif` — Atlassian's custom text sans, optimized for paragraph reading, used at 400 / 500 / 600.
- **Mono**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, monospace` — pragmatic system mono stack for code and tabular data.
- **OpenType features**: `liga`, `kern` on both Charlie faces; `tnum`, `zero` on mono for code and stats.

Charlie Display and Charlie Text are a **matched display/text pair from the same family** — Display is tuned for large sizes (tighter spacing, more contrast), Text for small-size legibility (open apertures, generous spacing). This is the Atlassian house typography, shared across the platform, which is itself part of the "you already trust this" signal.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Display Hero | Charlie Display | 80px | 700 | 1.0 | -0.03em | Largest hero variant |
| Display LG | Charlie Display | 63px | 700 | 1.05 | -0.02em | The canonical Loom hero (measured ~63px) |
| H1 | Charlie Display | 44px | 700 | 1.1 | -0.018em | Page / major section title (measured ~44px H2 on site) |
| H2 | Charlie Display | 32px | 700 | 1.2 | -0.012em | Major section |
| H3 | Charlie Display | 24px | 600 | 1.25 | -0.005em | Sub-section |
| H4 | Charlie Display | 20px | 600 | 1.3 | 0 | Card heading |
| H5 | Charlie Text | 18px | 600 | 1.35 | 0 | Inline emphasis (switches to text face) |
| Eyebrow | Charlie Text | 13px | 600 | 1.4 | 0.06em | Uppercase section pre-label |
| Body Large | Charlie Text | 18px | 400 | 1.55 | 0 | Lede paragraph |
| Body | Charlie Text | 16px | 400 | 1.55 | 0 | Default body copy |
| Body Medium | Charlie Text | 16px | 500 | 1.55 | 0 | Emphasized body |
| Body Small | Charlie Text | 14px | 400 | 1.5 | 0 | Captions, sidebars |
| Label | Charlie Text | 13px | 500 | 1.4 | 0 | UI labels, form labels |
| Caption | Charlie Text | 12px | 500 | 1.4 | 0.02em | Metadata, timestamps |
| Button | Charlie Text | 16px | 600 | 1.0 | 0 | CTA copy |
| Code | Mono | 14px | 400 | 1.55 | 0 | Inline + block |

### Principles

- **One family, two optical sizes.** Charlie Display for headings, Charlie Text for body — same designer's intent, two optical cuts. This single-family approach is calmer than a serif/sans contrast and reinforces the "consistent platform" feel.
- **Headlines at 700, never lighter.** Loom's display weight is bold (700) — the confidence comes from weight, not size or color. Headlines stay near-black `#101214`, body steps down to `#292a2e`.
- **Negative tracking scales with size.** -0.03em at 80px, -0.02em at 63px, -0.018em at 44px, easing to 0 at 20px and below. Large type is optically tightened; body type sits at natural spacing.
- **Body at 16px / 1.55.** The web-standard 16px with a generous 1.55 line-height — comfortable, unremarkable, designed to disappear so the product screenshots carry the story.
- **Two-tone heading/body split.** Headings are true-near-black `#101214`; body is the softer `#292a2e`. The ~2-step grey difference creates hierarchy without changing size or weight.
- **Eyebrows in uppercase Charlie Text 600 / 0.06em.** Short section pre-labels are the only uppercase, tracked-out element — everything else is sentence case.
- **No italics in the system.** Loom's voice is plain and direct; emphasis comes from weight (500 / 600), not slant.
- **Mono only for code and stats.** The system mono stack appears in code blocks and tabular numbers (`tnum`), never as a decorative accent.

## 4. Component Stylings

### Buttons

All Loom buttons are **full-pill (9999px radius)** — the rounded capsule shape is the brand's defining component signature.

**Primary (Blue Pill)**
- Background: `#1868db`. Text: `#ffffff`, Charlie Text 600 / 16px.
- Padding: `12px 20px`. Radius: `9999px` (full pill). No border.
- Hover: bg → `#1558bc`; transition `240ms ease-standard`.
- Active: bg → `#123263`.
- Use: Primary CTA — *Get Loom for free, Start recording, Get started.*

**Secondary (Soft-Blue Pill)**
- Background: `#e9f2fe` blue-10. Text: `#101214` near-black, Charlie Text 600 / 16px.
- Padding: `12px 20px`. Radius: `9999px`. No border.
- Hover: bg → `#cfe1fd` blue-20.
- Use: Twin to primary — *Contact Sales, View pricing.* Calm, never competes with the blue primary.

**Outline (Tertiary)**
- Background: transparent. Text: `#1868db` blue. Border: `1px solid #a3c3f1` (blue-tint outline). Radius: `9999px`.
- Same padding (12×20), font (Charlie Text 600 / 16px).
- Hover: bg → `#e9f2fe` soft-blue wash.
- Use: Lower-emphasis actions in feature sections, secondary nav.

**Ghost (Quiet)**
- Background: transparent. Text: `#292a2e`. No border.
- Padding: `8px 12px`. Charlie Text 500 / 16px.
- Hover: text → `#1868db` blue.
- Use: Nav links, footer, inline secondary actions.

### Cards

**Default Card**
- Background: `#ffffff`. Border: `1px solid #e4e2e7` hairline. Radius: `12px`. Padding: `24px`.
- Shadow: none — the border does the work.
- Hover: subtle `rgba(16,18,20,0.06) 0 2px 8px` shadow lifts the card off white.
- Use: Default feature card — defined by border, not fill.

**Soft Card**
- Background: `#f8f8f8` grey-10. Border: none. Radius: `16px`. Padding: `24px`.
- Use: Nested feature blocks, testimonials — the grey wash separates it from the white page without a border.

**Blue Feature Card**
- Background: `#e9f2fe` blue-10. Border: none. Radius: `16px`. Padding: `24px`.
- Use: Highlights, integration callouts, plan-comparison emphasis blocks. Pairs with the blue brand.

**Violet AI Card**
- Background: `#f8eefe` violet-10. Border: none. Radius: `16px`. Padding: `24px`.
- Use: Rovo / AI feature surfaces only — the violet wash flags the intelligence layer.

### Badges, Tags, Pills

All pill-shaped (9999px radius), small, sentence-case or short-label.

**Soft-Blue Chip** — bg `#e9f2fe`, text `#1558bc` blue-80, padding `4px 10px`, Charlie Text 500 / 13px. Status / NEW / plan labels.

**Violet AI Chip** — bg `#f8eefe`, text `#964ac0` violet-70, padding `4px 10px`, Charlie Text 500 / 13px. Marks AI / Rovo features.

**Record Chip** — bg `#ff613d20` (12% coral), text `#ff613d` coral, padding `4px 10px`, Charlie Text 600 / 13px, with a leading coral dot. The recording-state / live signal.

**Eyebrow Label** — no chrome, just type. Charlie Text 600 / 13px / uppercase / 0.06em tracking, color `#6c6f77` grey-70. Sits above section headlines.

### Inputs / Forms

- Background: `#ffffff`. Border: `1px solid #b7b9be` grey-40. Radius: `8px`. Padding: `10px 12px`.
- Font: Charlie Text 400 / 16px. Placeholder: `#8c8f97` grey-50.
- Focus: `0 0 0 2px rgba(24, 104, 219, 0.30)` blue glow ring, border → `#1868db`.
- Error: border → `#ff613d` coral, helper text in coral below.
- Helper: caption 12px grey-70 below the field.

### Navigation

- Header height `64px`. Background `#ffffff` white (becomes opaque-white with a subtle bottom hairline + shadow on scroll).
- Logo: Loom wordmark + mark, near-black `#101214`.
- Nav links: Charlie Text 500 / 16px, color `#292a2e`, padding `8px 12px`. Hover → `#1868db` blue. Dropdown mega-menus on `Products` / `Solutions`.
- Right-side CTA pair: ghost "Sign in" + blue pill "Get Loom for free".
- Mobile: right-aligned hamburger, full-screen sheet with stacked links and the blue CTA pinned at the bottom.

### Optional Components

**Dropdown / Mega-menu** — bg `#ffffff`, border `1px solid #e4e2e7`, radius `12px`, shadow `rgba(16,18,20,0.10) 0 8px 24px -4px`, padding `16px`. Multi-column with section headers in Charlie Text 600 / 13px.

**Code Block** — Mono 14px, bg `#f8f8f8` grey-10, radius `8px`, padding `16px`, border `#e4e2e7`. Inline code: bg `#f0f1f2`, padding `2px 6px`, radius `4px`.

**Tooltip** — bg `#101214` near-black, text `#ffffff`, radius `8px`, padding `8px 12px`, font Charlie Text 500 / 13px.

**Modal** — bg `#ffffff`, radius `16px`, shadow `rgba(16,18,20,0.14) 0 16px 48px -8px`, max-width `560px`. Backdrop overlay `rgba(0,0,0,0.5)` (the `--thd-color-overlay` token).

**Video Player Chrome** — Loom's signature artifact: a rounded `12px` player with the coral record indicator, soft controls, and a pill-shaped share bar. On the marketing page, demo players sit on an ambient shadow over white.

## 5. Layout Principles

### Spacing System

- **Base unit**: 4px.
- **Scale**: 0, 4, 8, 12, 16, 24, 32, 48, 64, 96 — a clean 4px-based scale with no fractional steps.
- **Density observation**: Loom runs comfortable, unhurried spacing. Headlines float in generous margin; feature cards sit on 24px internal padding and 24–32px gaps. The page never feels cramped.

### Grid & Container

- **Page max width**: `1280px`. Standard SaaS width; content stays centered with white margins beyond.
- **Site gutter**: `clamp(20px, 5vw, 64px)`.
- **Prose width**: capped ~`720px` for comfortable reading.
- **Grid**: 12 columns with 24px gutters. Hero blocks span full width; feature rails span 4–6 columns; integration grids run 3-up or 4-up.
- **Hero treatment**: centered or left-aligned Charlie Display headline, supporting body, blue pill CTA + soft-blue secondary, with a product video / screenshot floating below or beside on ambient shadow.

### Whitespace Philosophy

The white canvas runs edge to edge, broken only by occasional grey-10 (`#f8f8f8`) or blue-10 (`#e9f2fe`) section bands for rhythm. Section gutters run **80–128px** between major blocks; minor blocks sit on 48–64px gaps; intra-section spacing uses 16–32px. The page is structured as a sequence of clean, bright spreads — hero, social proof, feature blocks, AI/Rovo section (violet-washed), use-case grid, testimonial, pricing, footer — each sitting on white or a soft tonal band.

### Section Cadence

- Hero (white + Charlie Display + blue pill + product video) → Logo wall / social proof (grey-10 band) → Feature blocks (white, alternating image-left/image-right) → AI / Rovo section (violet-10 washed) → Use-case grid (3-up cards) → Testimonial (soft card with quote) → Pricing (white, blue-10 highlighted plan) → Footer (white or grey-10, multi-column links).
- Tonal bands (grey-10, blue-10, violet-10) provide rhythm; there are no dark bands on the marketing surface.
- Product videos / screenshots appear repeatedly as the primary visual anchor — Loom shows the product more than it describes it.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Tiny inline chips, decorative ticks |
| Standard (sm) | 4px | Inline code, small tags, checkboxes |
| Comfortable (md) | 8px | Inputs, dropdown items, small buttons |
| Relaxed (lg) | 12px | Cards, video player chrome, dropdowns |
| Large (xl) | 16px | Soft/blue/violet feature cards, modals |
| Pill | 9999px | CTAs, chips, badges, avatars — the brand signature |

Loom's signature radii: **9999px full-pill CTAs / 12px cards / 8px inputs / 16px feature surfaces.** The full-pill on every actionable element is the single strongest shape decision — it sets the friendly, soft, approachable register. Rectangular content surfaces (cards, players) use the comfortable 12–16px ladder so they read as modern-soft without going fully round. Mixed radii within a single primitive are avoided.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 | Flat — no shadow | Default page surface, hero, body sections |
| 1 | Hairline border (`#e4e2e7`) | Default cards, inputs, dividers |
| 2 | `rgba(16,18,20,0.04) 0 1px 2px` ambient | Subtle lift on screenshots |
| 3 | `rgba(16,18,20,0.06) 0 2px 8px` | Card hover, raised tiles |
| 4 | `rgba(16,18,20,0.10) 0 8px 24px -4px` | Dropdowns, popovers, mega-menus |
| 5 | `rgba(16,18,20,0.14) 0 16px 48px -8px` | Modals, dialogs |

### Shadow Philosophy

Loom's depth comes from **borders first, soft neutral shadows second**. On the white canvas, most cards are defined by a `#e4e2e7` hairline rather than a shadow — flat and clean. Shadows are reserved for genuinely floating UI (popovers, dropdowns, modals) and product screenshots, and they are always soft, diffuse, and neutral black-tinted (`rgba(16,18,20,*)`). The brand never uses colored shadows (no blue or violet glow except on focus rings) and never uses hard drop shadows — both would crack the crisp, bright, screenshot-clean temperature. Product videos float on a barely-there ambient shadow that lets the product's own polish carry the elevation.

## 8. Interaction & Motion

### Easing Curves

- `ease-standard`: `cubic-bezier(0.4, 0, 0.2, 1)` — Material-style; default for hover, focus, color transitions.
- `ease-emphasized`: `cubic-bezier(0.2, 0, 0, 1)` — punchier; modal enter, hero reveal.
- `ease-entrance`: `cubic-bezier(0, 0, 0.2, 1)` — decelerate-in; below-fold fade-ups.

### Duration Buckets

- **Fast (150ms)** — color transitions, focus rings, link hovers.
- **Standard (240ms)** — button hover, card hover, dropdown reveal.
- **Slow (320ms)** — modal enter/exit, section fade-in.
- **Page (420ms)** — route transitions, hero reveal sequences.

### Per-Component Micro-States

- **Button hover (blue pill)**: bg `#1868db` → `#1558bc`; transition `240ms ease-standard`. No scale, no lift.
- **Button hover (soft-blue)**: bg `#e9f2fe` → `#cfe1fd`.
- **Card hover**: subtle `rgba(16,18,20,0.06) 0 2px 8px` shadow fades in; no border change.
- **Link hover**: color `#1868db` → `#1558bc` over 150ms; underline may appear.
- **Input focus**: 2px blue glow ring (`rgba(24,104,219,0.30)`) fades in over 150ms; border darkens to blue.
- **Record indicator**: coral dot pulses gently when live — the one deliberately animated brand element.

### Page Transitions

Friendly, restrained reveal: hero text and product video fade in over 420ms with a small 16px translate-up; below-fold sections use `IntersectionObserver` to fade up at ~85% viewport, 320ms, with the `ease-entrance` curve. Loom favors subtle, professional motion — nothing bouncy, nothing dramatic.

### Reduced Motion

`@media (prefers-reduced-motion: reduce)` — all transitions become opacity-only, durations halved. Translate fade-ups, the record-dot pulse, and any scroll-triggered reveals are disabled; sections snap to final state.

## 9. Accessibility & A11y

### Contrast Pairs

- **`#292a2e` text on `#ffffff` bg**: 12.4:1 — AAA at all sizes (primary body).
- **`#101214` heading on `#ffffff` bg**: 18.1:1 — AAA at all sizes (headlines).
- **`#505258` secondary on `#ffffff` bg**: 7.6:1 — AAA at body sizes.
- **`#ffffff` text on `#1868db` blue button**: 4.8:1 — AA at all sizes, AAA at large (≥18px / ≥14px bold). The blue is calibrated to clear AA for button labels.
- **`#1558bc` text on `#e9f2fe` soft-blue chip**: 6.9:1 — AAA at body sizes.
- **`#964ac0` violet on `#f8eefe` chip**: 5.4:1 — AA at body sizes.
- **`#8c8f97` muted on `#ffffff` bg**: 3.3:1 — AA at large only; reserved for placeholders and helper text, never body copy.

### Focus Indicators

- Default focus ring: `0 0 0 2px rgba(24, 104, 219, 0.30)` blue glow plus a `#1868db` border, with 2px offset.
- The exposed `--tw-ring-color: rgba(59,130,246,.5)` confirms a blue translucent ring as the system default.
- All interactive surfaces have a visible focus state — no `outline: none` without a replacement.

### ARIA Patterns

- **Navigation**: `<nav aria-label="Main">` with skip-link to main content; mega-menus use `aria-expanded` / `aria-controls`.
- **Disclosure**: `<button aria-expanded aria-controls>` for collapsible FAQ and feature sections.
- **Dialog**: `role="dialog" aria-modal="true" aria-labelledby` with focus trap and Esc-to-close.
- **Video player**: native `<video>` controls or a custom player with `aria-label` on play/pause/share, captions track, and keyboard scrubbing.
- **Live regions**: `aria-live="polite"` for form validation; the recording indicator should announce state changes.

### Keyboard Navigation

- Tab order matches visual flow: skip-link → nav → hero CTA → main content → footer.
- All buttons, links, inputs reachable via Tab; modals and mega-menus trap focus until dismissed.
- `Esc` closes modals, dropdowns, and the mobile menu sheet.
- Video players support Space (play/pause) and arrow-key scrubbing.

### Screen Reader Hints

- Product screenshots and demo videos have descriptive alt text / captions explaining the in-product flow shown.
- Color-coded states (violet = AI, coral = recording) carry a text label or icon, never color alone.
- Icon-only buttons (share, settings, record) have `aria-label`.
- The Loom wordmark uses `aria-label="Loom"`.

### Reduced Motion

Honored via the global media query. The record-dot pulse, fade-ups, and scroll reveals become opacity-only or are disabled; durations halve.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Use |
|---|---|---|
| Mobile | < 640px | Single column, full-bleed sections, ~36px hero |
| Tablet | 640–1024px | 2-column rails, ~48px hero |
| Desktop | 1024–1280px | Full 12-col grid, ~63px hero, 720px prose |
| Wide | 1280–1536px | Site max width hits |
| Ultra | > 1536px | Page locks to 1280, gutters expand |

### Touch Targets

- Minimum tap target: 44×44px (WCAG AAA).
- Buttons: 44px minimum height on mobile (the pill shape keeps comfortable thumb-room).
- Nav link tap area: 44×44px even when visual padding is smaller.

### Collapsing Strategy

- **Header**: full nav with mega-menus at ≥1024px; right-aligned hamburger sheet below.
- **Hero**: ~63px display → ~48px → ~36px across breakpoints. Charlie Display scales down smoothly.
- **Feature blocks**: side-by-side image+text at desktop stack to image-over-text at mobile.
- **Use-case grid**: 3-up / 4-up at desktop, 2-up at tablet, 1-up at mobile.
- **Body width**: ~720px → fluid 90vw at mobile.
- **Section spacing**: 128px → 96px → 64px across sizes.

### Image & Video Behavior

- Product videos use lazy-loaded posters with `aspect-ratio` enforced to prevent layout shift.
- Screenshots use `srcset` 1x/2x; eager on hero, lazy below the fold.
- The video player preserves its 12px radius and controls at all sizes; full-width on mobile.

### Container Queries

Used inside feature cards to switch icon position (icon-left vs icon-top) when card width crosses ~320px, and inside the pricing table to switch from columns to stacked plan cards.

## 11. Content & Voice

### Tone

**Friendly, clear, low-friction.** Loom writes the way a helpful colleague talks — direct, encouraging, never jargony or urgent. The voice centers the core promise: recording and sharing a video is faster and warmer than writing a long message. It is confident (backed by Atlassian-scale trust) but stays approachable and human, the opposite of enterprise-stiff.

### Microcopy Patterns

- **Button verbs**: "Get Loom for free," "Start recording," "Get started," "Contact Sales," "Watch a demo." Sentence case, never all-caps, never urgent.
- **Error messages**: "Something went wrong — try again, or [contact support]." Calm, low-stakes, solution-oriented.
- **Success confirmations**: "Recording saved." "Link copied." Brief and immediate.
- **Loading / processing states**: "Processing your video…" "Generating transcript…" — context-specific, AI-aware where relevant.

### Empty States

What they say: explain the state and offer the next step. *"No Looms yet. Record your first video to get started."*
What they don't say: "Oops!", "Whoops!", apologetic exclamations. Empty states are normal moments, not failures.

### CTA Verb Conventions

- Primary on hero: "Get Loom for free," "Start recording," "Get started"
- Secondary: "Contact Sales," "Watch a demo," "See pricing"
- Footer: "Read the blog," "Help center," "Sign in," "Download"

The brand never uses "Sign up now!" or scarcity-driven urgency. The pitch is ease and trust ("free," "in seconds"), not pressure.

## 12. Dark Mode & Theming

**Light-only on the marketing surface — no dark variant.** The white canvas is the brand's brightness signal; a dark marketing site would lose the clean, trustworthy, screenshot-bright register that distinguishes Loom. The blue, violet, and coral accents are all calibrated against white; porting them to dark would require re-keying contrast across the entire token system.

The **in-product editor and recorder ship their own dark theme** — the token namespace already includes dark rungs (`grey-100` `#292a2e`, `black-neutral` `#1e1f21`, `blue-100` `#1c2b42`, `violet-100` `#35243f`) and `*-dark` semantic mappings, so a dark theme is fully supported at the product layer. That dark theme is documented at the product level, not on the marketing surface. When product screenshots show the dark editor, they sit on the white marketing canvas as artifacts, preserving the page-level brightness.

If a downstream surface needs a dark companion of the marketing system, the rule would be: keep blue, violet, and coral at full saturation; swap white for `#1e1f21` (black-neutral); lift cards to `#292a2e` (grey-100); and use `border-grey` at low opacity for hairlines. The token ladders already support this, but it is not currently shipped on the marketing site.

## 13. Lineage & Influences

Loom's design DNA is **calm, tokenized, enterprise-friendly productivity software** — and since the 2023 Atlassian acquisition, that DNA has explicitly merged with Atlassian's design system. The `--thd-color-*` token namespace, the Charlie Display / Charlie Text family, and the confident `#1868db` blue are all inherited from or aligned with the Atlassian platform. Loom now reads as "part of the workspace you already trust" rather than a standalone creator tool. The white canvas, single-blue discipline, and full-pill components place it firmly in the modern-SaaS-trust tradition — closer to Linear's clarity and Stripe's restraint than to the playful, indie register of early Loom.

What it inherits: Atlassian's tokenized color ladders and Charlie typeface family (the platform-trust signal); the modern-SaaS convention of one confident brand blue on a clean white canvas (Dropbox, Calendly, Zoom lineage); the full-pill CTA shape that softens the enterprise register into something friendly. What it borrows from contemporaries: Linear's whitespace discipline and screenshot-forward layout; Stripe's hairline-border restraint over heavy shadows; Notion's calm, human microcopy voice. What it rejects: dark canvases, gradient meshes, neon AI aesthetics, and creator-playful illustration — Loom chose institutional calm over indie personality.

**Named influences:**

- **Atlassian Design System** — The parent platform: tokenized color ladders, Charlie typeface family, the `#1868db` blue, and the trust signal of platform consistency. *https://atlassian.design*
- **Linear** — Whitespace discipline, screenshot-forward layout, calm modern-SaaS clarity. *https://linear.app*
- **Stripe** — Hairline-border restraint and soft neutral shadows over heavy elevation. *https://stripe.com*
- **Notion** — Calm, human, low-friction microcopy voice for a productivity tool. *https://www.notion.com*
- **Dropbox / Calendly** — The modern convention of one confident brand color on a clean white canvas for trust-forward SaaS. *https://www.dropbox.com*
- **Material Design** — The `cubic-bezier(0.4, 0, 0.2, 1)` standard easing and translucent ring focus conventions. *https://m3.material.io*

## 14. Do's and Don'ts

### Do

- **Do** keep the canvas pure white `#ffffff` — the brightness is the trust signal. No cream, no gradient.
- **Do** use one confident blue `#1868db` for all primary action and links — discipline over variety.
- **Do** make every actionable element a full pill (9999px). The rounded capsule is the brand fingerprint.
- **Do** set headlines in Charlie Display at 700, near-black `#101214`; body in Charlie Text 400 at softer `#292a2e`.
- **Do** reserve violet `#d8a0f7` exclusively for AI / Rovo surfaces — it is a meaning, not a decoration.
- **Do** reserve coral `#ff613d` exclusively for the record / live signal — the one warm, urgent color.
- **Do** define cards with a `#e4e2e7` hairline border, not a shadow. Borders first.
- **Do** pull every color from the token ladder (blue-10…100, grey-10…100, etc.) — no one-off hexes.
- **Do** keep the secondary CTA soft-blue `#e9f2fe` with a near-black label — calm, never competing with primary.
- **Do** let product videos and screenshots carry the story; show the product more than you describe it.

### Don't

- **Don't** introduce a dark canvas on the marketing surface; white is the brand's brightness.
- **Don't** use violet or coral as a generic accent — they are bound to AI and recording respectively.
- **Don't** make the CTA any color but blue; the soft-blue and outline variants are the only alternates.
- **Don't** square off the CTAs. A rectangular button breaks the friendly full-pill register.
- **Don't** use colored shadows (blue/violet glow) except on the focus ring; shadows are soft neutral black.
- **Don't** use a warm grey neutral. The grey ladder is cool with a faint blue undertone.
- **Don't** add a serif or a third type family. Charlie Display + Charlie Text + mono is the system.
- **Don't** use heavy drop shadows for elevation; borders and soft diffuse shadows are the depth language.
- **Don't** shout in the copy ("Sign up now!", scarcity). The voice is friendly and low-friction.
- **Don't** invent off-ladder hexes; every color should map to a `--thd-color-*` token rung.

## 15. Agent Prompt Guide

### Quick Color Reference

```
bg: #ffffff
bg-soft: #f8f8f8
text: #292a2e
text-heading: #101214
brand-blue: #1868db
brand-blue-hover: #1558bc
brand-soft: #e9f2fe
accent-violet: #d8a0f7
accent-record: #ff613d
border: #e4e2e7
on-brand: #ffffff
```

### Example Component Prompts

1. **"Create a hero in Loom style — pure white `#ffffff` canvas, ~63px headline in Charlie Display at weight 700 in near-black `#101214` with `-0.02em` tracking, 18px Charlie Text lede in soft grey `#292a2e` at 1.55 line-height, a primary full-pill CTA in blue `#1868db` with white label plus a soft-blue `#e9f2fe` secondary pill 'Contact Sales', and a product video floating below on a soft ambient shadow."**

2. **"Design a feature card in Loom style — white `#ffffff` background, 12px radius, 1px `#e4e2e7` hairline border, 24px interior padding, 20px Charlie Display 600 heading in `#101214`, 16px Charlie Text 400 body in `#292a2e`, no shadow at rest, gentle `rgba(16,18,20,0.06) 0 2px 8px` shadow on hover."**

3. **"Build a full-pill primary button in Loom style — blue `#1868db` background, white label in Charlie Text 600 / 16px, `12px 20px` padding, 9999px radius, hover to `#1558bc`, active to `#123263`, no border, no scale on hover."**

4. **"Compose an AI / Rovo feature surface in Loom style — soft violet `#f8eefe` background, 16px radius, 24px padding, a small violet pill chip (bg `#f8eefe`, text `#964ac0`) reading 'AI', heading in Charlie Display 600 `#101214`, body in Charlie Text `#292a2e`. Use violet only here — it signals the intelligence layer."**

5. **"Render a recording-state chip in Loom style — full-pill, 12% coral background `#ff613d20`, coral text `#ff613d`, a leading coral dot, Charlie Text 600 / 13px, label 'Recording'. Coral is reserved for the live / record signal only."**

6. **"Create the primary nav in Loom style — 64px white header, Loom wordmark in near-black, links in Charlie Text 500 / 16px (`#292a2e`, hover `#1868db`), mega-menu dropdowns on Products and Solutions, right-aligned ghost 'Sign in' + blue full-pill 'Get Loom for free'. Opaque white with a bottom hairline on scroll."**

### Iteration Guide

1. **Start with pure white, not cream or grey.** If the bg has any tint, you've drifted toward Descript (cream) or a dark-SaaS register. White brightness is the entry ticket.
2. **One blue, everywhere it acts.** `#1868db` for primary CTA and links. Resist adding a second action color — the discipline is the brand.
3. **Make everything a pill.** CTAs, chips, badges, avatars at 9999px radius. A square button collapses the friendly register instantly.
4. **Charlie Display 700 for headlines, Charlie Text 400 for body.** Same family, two optical sizes; confidence comes from weight, not from a serif or a louder color.
5. **Two-tone the type color.** Headings near-black `#101214`, body softer `#292a2e`. The small grey step does the hierarchy work.
6. **Bind violet and coral to meaning.** Violet `#d8a0f7` only for AI/Rovo; coral `#ff613d` only for recording. If either appears decoratively, you've broken the grammar.
7. **Borders before shadows.** Define cards with a `#e4e2e7` hairline; reserve soft neutral shadows for floating UI only.
8. **Calm the verbs.** "Get Loom for free," "Start recording" — friendly and concrete. Drop any urgency or scarcity language.
---

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

1. Visual Theme & Atmosphere

Loom’s marketing site is the visual definition of calm, trustworthy productivity software. The canvas is plain white (#ffffff) — no cream, no gradient mesh, no dark slab — and onto it Loom places one confident blue (#1868db), the custom Charlie sans family, and an abundance of breathing room. The page never raises its voice. Headlines land in Charlie Display at roughly 63px / weight 700 in near-black #101214; body copy sits in Charlie Text at 16px / 1.55 in a slightly softer grey-near-black #292a2e. The single loudest move on the page is the blue full-pill CTA — “Get Loom for free” — and even that is friendly rather than aggressive, its 9999px radius making it read as a soft capsule rather than a hard button.

The defining context is the Atlassian acquisition. Loom is now an Atlassian product, and its palette has converged on Atlassian’s tokenized design system: the page exposes a full --thd-color-* token namespace with a 10-step blue ladder (blue-10 #e9f2feblue-100 #1c2b42), parallel violet, grey, yellow, and green ladders, and named semantic tokens. This is enterprise-grade chromatic discipline — every color on the page is a rung on a defined scale, not a one-off hex. The result reads as institutional trust: this is a tool your whole company already uses, IT has already approved, and the brand color is the same calm blue you see across Jira and Confluence. Loom traded indie-creator playfulness for the reassurance of being part of a platform.

The third register is the record signal. Loom is, at its core, the button you press to start recording your screen. The brand reserves a hot coral #ff613d (the --thd-color-record token) for exactly this — the record dot, recording-state chips, the live indicator. It is the one warm, urgent color in an otherwise cool palette, and it appears only when something is being captured. Alongside it, a soft violet #d8a0f7 (--thd-color-violet-30) marks the AI / Rovo intelligence layer — auto-titles, summaries, transcripts. So the page has a clean three-part chromatic grammar: blue for action and trust, violet for AI, coral for recording. Each color means one thing.

Where Descript ships beauty-editorial cream-pink + serif display, and Runway/Pika ship chrome-on-black for cinematic AI, Loom ships the friendly white-and-blue of a workspace tool. The pill-shaped everything — CTAs, chips, badges, avatars — is the entire emotional register: nothing sharp, nothing intimidating, just rounded, approachable surfaces that say “press record and send.” It is software designed to feel like it requires no learning curve.

Atmospheric vocabulary that captures the feeling: calm-white, Atlassian-blue, friendly-pill, Charlie-sans, record-coral, Rovo-violet, tokenized-trust, async-video, workspace-reassurance, no-learning-curve, breathing-room, enterprise-approachable. Every surface lands like a clean product screenshot — bright, legible, unhurried, and quietly confident that you already know how to use it.

Key Characteristics

  • Plain white #ffffff canvas — no cream, no gradient, no dark slab; brightness is the brand
  • Custom Charlie Display headlines at ~63px / 700 in near-black #101214
  • Custom Charlie Text body at 16px / 1.55 in soft grey-near-black #292a2e
  • One confident Atlassian blue #1868db for all primary action and links
  • Full-pill (9999px) CTAs, chips, badges — the rounded, approachable shape is the register
  • Soft-blue secondary CTA #e9f2fe with near-black label — calm, never competing with primary
  • Signature violet #d8a0f7 for the AI / Rovo intelligence layer only
  • Hot coral #ff613d reserved exclusively for the record signal
  • Fully tokenized palette — every color is a rung on a defined 10-step ladder
  • Borders define cards, not shadows — #e4e2e7 hairlines over white
  • Generous whitespace, 80–128px section rhythm — unhurried, screenshot-clean
  • Three-color grammar: blue = action, violet = AI, coral = recording — each means one thing

2. Color Palette & Roles

Primary

  • bg #ffffff [→ canvas]: white page canvas, the brand’s brightness. RGB (255, 255, 255). Never tinted — the cleanness is the point.
  • text #292a2e [→ --thd-color-grey-100]: primary body copy, a soft near-black warmer and gentler than #000.
  • text-heading #101214 [→ --thd-color-black]: headlines, leans true-black for maximum presence against white.
  • bg-soft #f8f8f8 [→ --thd-color-grey-10]: softest panel wash for nested sections.
  • bg-muted #f0f1f2 [→ --thd-color-grey-20]: deeper grey band for alternating section emphasis.

Brand (Atlassian Blue Ladder)

  • brand #1868db [→ --thd-color-blue-70 / --thd-color-button-fr]: primary CTA, links, focus border. The defining chromatic move.
  • brand-hover #1558bc [→ --thd-color-blue-80]: hover / pressed state, one step deeper.
  • brand-active #123263 [→ --thd-color-blue-90]: active / deep-press state.
  • brand-soft #e9f2fe [→ --thd-color-blue-10]: soft hover wash, secondary CTA fill, chip background.
  • brand-tint #cfe1fd [→ --thd-color-blue-20]: mid tint for hover-on-soft states.
  • brand-mid #4d8ced [→ --thd-color-blue-50]: mid-bright accent for illustration / data viz.
  • brand-outline #a3c3f1 [→ --thd-color-button-ol]: outline-button border color.
  • on-brand #ffffff [→ --thd-color-white]: white label on blue. The high-contrast action pair.

Accent (Violet AI Layer + Coral Record)

  • accent-violet #d8a0f7 [→ --thd-color-violet-30]: signature secondary accent, marks AI / Rovo surfaces.
  • accent-violet-soft #f8eefe [→ --thd-color-violet-10]: soft violet wash background for AI feature blocks.
  • accent-violet-mid #bf63f3 [→ --thd-color-violet-50]: brighter violet for emphasis within the AI layer.
  • accent-violet-deep #964ac0 [→ --thd-color-violet-70]: deep violet for violet-on-soft text.
  • accent-record #ff613d [→ --thd-color-record]: hot coral record dot — the one warm, urgent color.
  • accent-record-soft #ff613d20 [→ --thd-color-record-20]: 12% coral wash behind recording-state chips.

The accent layer is strictly meaning-bound: violet only ever means “AI / Rovo,” coral only ever means “recording / live.” Neither is decorative. Using violet for a generic highlight or coral for a CTA breaks the chromatic grammar that lets users read color as state.

Interactive

  • link #1868db [→ --thd-color-blue-70]: blue links in body copy, often underlined on hover.
  • link-hover #1558bc [→ --thd-color-blue-80]: deeper blue on hover.
  • selected-bg #e9f2fe [→ --thd-color-blue-10]: selected nav item / active row, soft-blue wash.
  • disabled #b7b9be [→ --thd-color-grey-40]: disabled control text and icons.

Neutral Scale (Grey Ladder)

  • grey-10 #f8f8f8 — softest wash / page-soft surface.
  • grey-20 #f0f1f2 — section band.
  • grey-30 #dddee1 — strong separator / divider.
  • grey-40 #b7b9be — input resting border, disabled text.
  • grey-50 #8c8f97 — helper text, placeholders.
  • grey-70 #6c6f77 — captions, metadata.
  • grey-80 #505258 — secondary body copy.
  • grey-90 #3b3d42 — strong secondary copy.
  • grey-100 #292a2e — primary body text.
  • black #101214 — headings; black-neutral #1e1f21 — emphasized copy.

The grey ladder is cool-neutral with a faint blue undertone — it sits comfortably under the blue brand color without ever picking up warmth. Loom never uses a warm grey; a beige or taupe neutral would crack the clean, cool, screenshot-bright temperature.

Surface & Borders

  • surface-0 (page) #ffffff white.
  • surface-1 (soft) #f8f8f8 grey-10 nested panel.
  • surface-2 (band) #f0f1f2 grey-20 section band.
  • surface-blue #e9f2fe blue-10 feature surface.
  • surface-violet #f8eefe violet-10 AI surface.
  • border #e4e2e7 [→ --thd-color-light-border]: default hairline — the primary card-definition device on white.
  • border-soft #f1f0f3 [→ --thd-color-border-grey]: quietest separation, internal dividers.
  • border-strong #dddee1 [→ --thd-color-grey-30]: emphasized separator.
  • border-input #b7b9be [→ --thd-color-grey-40]: input resting border.
  • border-brand #1868db [→ --thd-color-blue-70]: focused / active border.

Shadow Colors

Loom’s depth language is borders first, shadows second. On the white canvas, cards are defined primarily by a hairline #e4e2e7 border; shadows are reserved for genuinely floating elements (popovers, dropdowns, modals) and are soft, neutral black-tinted (rgba(16, 18, 20, 0.06) to 0.14), never colored. The brand never uses blue- or violet-tinted shadows; that would muddy the crisp white temperature. Product screenshots typically float on a subtle ambient shadow with the in-product UI shown at native fidelity — Loom trusts the product’s own polish rather than wrapping it in a decorative frame.

Semantic

  • success — bg #efffd6 (green-10 wash), text #4c6b1f (green-80), solid #94c748 (green-40).
  • warning — bg #fff5d4 (yellow-10 wash), text #8a5700 (yellow-80), solid #ffc716 (yellow-30).
  • danger / destructive — bg #ff613d20 (12% coral wash), solid #ff613d (the record coral, reused for destructive). Note: Loom’s destructive color is the same coral as the record dot — the urgent warm hue does double duty as “live” and “careful.”
  • info — bg #e9f2fe (blue-10 wash), text #1558bc (blue-80). Info reuses the brand blue, reinforcing the single-brand-system discipline.

The notable choice: there is no separate “error red” — the coral record token doubles as the destructive color, and info reuses the brand blue. Semantic colors are drawn from the existing token ladders rather than introducing new hues, which keeps the whole page chromatically coherent.

3. Typography Rules

Font Family

  • Display: "Charlie Display", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif — Atlassian’s custom display sans, used at weight 500 / 600 / 700. The face for all headlines.
  • Body: "Charlie Text", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif — Atlassian’s custom text sans, optimized for paragraph reading, used at 400 / 500 / 600.
  • Mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, monospace — pragmatic system mono stack for code and tabular data.
  • OpenType features: liga, kern on both Charlie faces; tnum, zero on mono for code and stats.

Charlie Display and Charlie Text are a matched display/text pair from the same family — Display is tuned for large sizes (tighter spacing, more contrast), Text for small-size legibility (open apertures, generous spacing). This is the Atlassian house typography, shared across the platform, which is itself part of the “you already trust this” signal.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Display HeroCharlie Display80px7001.0-0.03emLargest hero variant
Display LGCharlie Display63px7001.05-0.02emThe canonical Loom hero (measured ~63px)
H1Charlie Display44px7001.1-0.018emPage / major section title (measured ~44px H2 on site)
H2Charlie Display32px7001.2-0.012emMajor section
H3Charlie Display24px6001.25-0.005emSub-section
H4Charlie Display20px6001.30Card heading
H5Charlie Text18px6001.350Inline emphasis (switches to text face)
EyebrowCharlie Text13px6001.40.06emUppercase section pre-label
Body LargeCharlie Text18px4001.550Lede paragraph
BodyCharlie Text16px4001.550Default body copy
Body MediumCharlie Text16px5001.550Emphasized body
Body SmallCharlie Text14px4001.50Captions, sidebars
LabelCharlie Text13px5001.40UI labels, form labels
CaptionCharlie Text12px5001.40.02emMetadata, timestamps
ButtonCharlie Text16px6001.00CTA copy
CodeMono14px4001.550Inline + block

Principles

  • One family, two optical sizes. Charlie Display for headings, Charlie Text for body — same designer’s intent, two optical cuts. This single-family approach is calmer than a serif/sans contrast and reinforces the “consistent platform” feel.
  • Headlines at 700, never lighter. Loom’s display weight is bold (700) — the confidence comes from weight, not size or color. Headlines stay near-black #101214, body steps down to #292a2e.
  • Negative tracking scales with size. -0.03em at 80px, -0.02em at 63px, -0.018em at 44px, easing to 0 at 20px and below. Large type is optically tightened; body type sits at natural spacing.
  • Body at 16px / 1.55. The web-standard 16px with a generous 1.55 line-height — comfortable, unremarkable, designed to disappear so the product screenshots carry the story.
  • Two-tone heading/body split. Headings are true-near-black #101214; body is the softer #292a2e. The ~2-step grey difference creates hierarchy without changing size or weight.
  • Eyebrows in uppercase Charlie Text 600 / 0.06em. Short section pre-labels are the only uppercase, tracked-out element — everything else is sentence case.
  • No italics in the system. Loom’s voice is plain and direct; emphasis comes from weight (500 / 600), not slant.
  • Mono only for code and stats. The system mono stack appears in code blocks and tabular numbers (tnum), never as a decorative accent.

4. Component Stylings

Buttons

All Loom buttons are full-pill (9999px radius) — the rounded capsule shape is the brand’s defining component signature.

Primary (Blue Pill)

  • Background: #1868db. Text: #ffffff, Charlie Text 600 / 16px.
  • Padding: 12px 20px. Radius: 9999px (full pill). No border.
  • Hover: bg → #1558bc; transition 240ms ease-standard.
  • Active: bg → #123263.
  • Use: Primary CTA — Get Loom for free, Start recording, Get started.

Secondary (Soft-Blue Pill)

  • Background: #e9f2fe blue-10. Text: #101214 near-black, Charlie Text 600 / 16px.
  • Padding: 12px 20px. Radius: 9999px. No border.
  • Hover: bg → #cfe1fd blue-20.
  • Use: Twin to primary — Contact Sales, View pricing. Calm, never competes with the blue primary.

Outline (Tertiary)

  • Background: transparent. Text: #1868db blue. Border: 1px solid #a3c3f1 (blue-tint outline). Radius: 9999px.
  • Same padding (12×20), font (Charlie Text 600 / 16px).
  • Hover: bg → #e9f2fe soft-blue wash.
  • Use: Lower-emphasis actions in feature sections, secondary nav.

Ghost (Quiet)

  • Background: transparent. Text: #292a2e. No border.
  • Padding: 8px 12px. Charlie Text 500 / 16px.
  • Hover: text → #1868db blue.
  • Use: Nav links, footer, inline secondary actions.

Cards

Default Card

  • Background: #ffffff. Border: 1px solid #e4e2e7 hairline. Radius: 12px. Padding: 24px.
  • Shadow: none — the border does the work.
  • Hover: subtle rgba(16,18,20,0.06) 0 2px 8px shadow lifts the card off white.
  • Use: Default feature card — defined by border, not fill.

Soft Card

  • Background: #f8f8f8 grey-10. Border: none. Radius: 16px. Padding: 24px.
  • Use: Nested feature blocks, testimonials — the grey wash separates it from the white page without a border.

Blue Feature Card

  • Background: #e9f2fe blue-10. Border: none. Radius: 16px. Padding: 24px.
  • Use: Highlights, integration callouts, plan-comparison emphasis blocks. Pairs with the blue brand.

Violet AI Card

  • Background: #f8eefe violet-10. Border: none. Radius: 16px. Padding: 24px.
  • Use: Rovo / AI feature surfaces only — the violet wash flags the intelligence layer.

Badges, Tags, Pills

All pill-shaped (9999px radius), small, sentence-case or short-label.

Soft-Blue Chip — bg #e9f2fe, text #1558bc blue-80, padding 4px 10px, Charlie Text 500 / 13px. Status / NEW / plan labels.

Violet AI Chip — bg #f8eefe, text #964ac0 violet-70, padding 4px 10px, Charlie Text 500 / 13px. Marks AI / Rovo features.

Record Chip — bg #ff613d20 (12% coral), text #ff613d coral, padding 4px 10px, Charlie Text 600 / 13px, with a leading coral dot. The recording-state / live signal.

Eyebrow Label — no chrome, just type. Charlie Text 600 / 13px / uppercase / 0.06em tracking, color #6c6f77 grey-70. Sits above section headlines.

Inputs / Forms

  • Background: #ffffff. Border: 1px solid #b7b9be grey-40. Radius: 8px. Padding: 10px 12px.
  • Font: Charlie Text 400 / 16px. Placeholder: #8c8f97 grey-50.
  • Focus: 0 0 0 2px rgba(24, 104, 219, 0.30) blue glow ring, border → #1868db.
  • Error: border → #ff613d coral, helper text in coral below.
  • Helper: caption 12px grey-70 below the field.
  • Header height 64px. Background #ffffff white (becomes opaque-white with a subtle bottom hairline + shadow on scroll).
  • Logo: Loom wordmark + mark, near-black #101214.
  • Nav links: Charlie Text 500 / 16px, color #292a2e, padding 8px 12px. Hover → #1868db blue. Dropdown mega-menus on Products / Solutions.
  • Right-side CTA pair: ghost “Sign in” + blue pill “Get Loom for free”.
  • Mobile: right-aligned hamburger, full-screen sheet with stacked links and the blue CTA pinned at the bottom.

Optional Components

Dropdown / Mega-menu — bg #ffffff, border 1px solid #e4e2e7, radius 12px, shadow rgba(16,18,20,0.10) 0 8px 24px -4px, padding 16px. Multi-column with section headers in Charlie Text 600 / 13px.

Code Block — Mono 14px, bg #f8f8f8 grey-10, radius 8px, padding 16px, border #e4e2e7. Inline code: bg #f0f1f2, padding 2px 6px, radius 4px.

Tooltip — bg #101214 near-black, text #ffffff, radius 8px, padding 8px 12px, font Charlie Text 500 / 13px.

Modal — bg #ffffff, radius 16px, shadow rgba(16,18,20,0.14) 0 16px 48px -8px, max-width 560px. Backdrop overlay rgba(0,0,0,0.5) (the --thd-color-overlay token).

Video Player Chrome — Loom’s signature artifact: a rounded 12px player with the coral record indicator, soft controls, and a pill-shaped share bar. On the marketing page, demo players sit on an ambient shadow over white.

5. Layout Principles

Spacing System

  • Base unit: 4px.
  • Scale: 0, 4, 8, 12, 16, 24, 32, 48, 64, 96 — a clean 4px-based scale with no fractional steps.
  • Density observation: Loom runs comfortable, unhurried spacing. Headlines float in generous margin; feature cards sit on 24px internal padding and 24–32px gaps. The page never feels cramped.

Grid & Container

  • Page max width: 1280px. Standard SaaS width; content stays centered with white margins beyond.
  • Site gutter: clamp(20px, 5vw, 64px).
  • Prose width: capped ~720px for comfortable reading.
  • Grid: 12 columns with 24px gutters. Hero blocks span full width; feature rails span 4–6 columns; integration grids run 3-up or 4-up.
  • Hero treatment: centered or left-aligned Charlie Display headline, supporting body, blue pill CTA + soft-blue secondary, with a product video / screenshot floating below or beside on ambient shadow.

Whitespace Philosophy

The white canvas runs edge to edge, broken only by occasional grey-10 (#f8f8f8) or blue-10 (#e9f2fe) section bands for rhythm. Section gutters run 80–128px between major blocks; minor blocks sit on 48–64px gaps; intra-section spacing uses 16–32px. The page is structured as a sequence of clean, bright spreads — hero, social proof, feature blocks, AI/Rovo section (violet-washed), use-case grid, testimonial, pricing, footer — each sitting on white or a soft tonal band.

Section Cadence

  • Hero (white + Charlie Display + blue pill + product video) → Logo wall / social proof (grey-10 band) → Feature blocks (white, alternating image-left/image-right) → AI / Rovo section (violet-10 washed) → Use-case grid (3-up cards) → Testimonial (soft card with quote) → Pricing (white, blue-10 highlighted plan) → Footer (white or grey-10, multi-column links).
  • Tonal bands (grey-10, blue-10, violet-10) provide rhythm; there are no dark bands on the marketing surface.
  • Product videos / screenshots appear repeatedly as the primary visual anchor — Loom shows the product more than it describes it.

6. Shapes & Radius Scale

TierValueUse
Micro2pxTiny inline chips, decorative ticks
Standard (sm)4pxInline code, small tags, checkboxes
Comfortable (md)8pxInputs, dropdown items, small buttons
Relaxed (lg)12pxCards, video player chrome, dropdowns
Large (xl)16pxSoft/blue/violet feature cards, modals
Pill9999pxCTAs, chips, badges, avatars — the brand signature

Loom’s signature radii: 9999px full-pill CTAs / 12px cards / 8px inputs / 16px feature surfaces. The full-pill on every actionable element is the single strongest shape decision — it sets the friendly, soft, approachable register. Rectangular content surfaces (cards, players) use the comfortable 12–16px ladder so they read as modern-soft without going fully round. Mixed radii within a single primitive are avoided.

7. Depth & Elevation

LevelTreatmentUse
0Flat — no shadowDefault page surface, hero, body sections
1Hairline border (#e4e2e7)Default cards, inputs, dividers
2rgba(16,18,20,0.04) 0 1px 2px ambientSubtle lift on screenshots
3rgba(16,18,20,0.06) 0 2px 8pxCard hover, raised tiles
4rgba(16,18,20,0.10) 0 8px 24px -4pxDropdowns, popovers, mega-menus
5rgba(16,18,20,0.14) 0 16px 48px -8pxModals, dialogs

Shadow Philosophy

Loom’s depth comes from borders first, soft neutral shadows second. On the white canvas, most cards are defined by a #e4e2e7 hairline rather than a shadow — flat and clean. Shadows are reserved for genuinely floating UI (popovers, dropdowns, modals) and product screenshots, and they are always soft, diffuse, and neutral black-tinted (rgba(16,18,20,*)). The brand never uses colored shadows (no blue or violet glow except on focus rings) and never uses hard drop shadows — both would crack the crisp, bright, screenshot-clean temperature. Product videos float on a barely-there ambient shadow that lets the product’s own polish carry the elevation.

8. Interaction & Motion

Easing Curves

  • ease-standard: cubic-bezier(0.4, 0, 0.2, 1) — Material-style; default for hover, focus, color transitions.
  • ease-emphasized: cubic-bezier(0.2, 0, 0, 1) — punchier; modal enter, hero reveal.
  • ease-entrance: cubic-bezier(0, 0, 0.2, 1) — decelerate-in; below-fold fade-ups.

Duration Buckets

  • Fast (150ms) — color transitions, focus rings, link hovers.
  • Standard (240ms) — button hover, card hover, dropdown reveal.
  • Slow (320ms) — modal enter/exit, section fade-in.
  • Page (420ms) — route transitions, hero reveal sequences.

Per-Component Micro-States

  • Button hover (blue pill): bg #1868db#1558bc; transition 240ms ease-standard. No scale, no lift.
  • Button hover (soft-blue): bg #e9f2fe#cfe1fd.
  • Card hover: subtle rgba(16,18,20,0.06) 0 2px 8px shadow fades in; no border change.
  • Link hover: color #1868db#1558bc over 150ms; underline may appear.
  • Input focus: 2px blue glow ring (rgba(24,104,219,0.30)) fades in over 150ms; border darkens to blue.
  • Record indicator: coral dot pulses gently when live — the one deliberately animated brand element.

Page Transitions

Friendly, restrained reveal: hero text and product video fade in over 420ms with a small 16px translate-up; below-fold sections use IntersectionObserver to fade up at ~85% viewport, 320ms, with the ease-entrance curve. Loom favors subtle, professional motion — nothing bouncy, nothing dramatic.

Reduced Motion

@media (prefers-reduced-motion: reduce) — all transitions become opacity-only, durations halved. Translate fade-ups, the record-dot pulse, and any scroll-triggered reveals are disabled; sections snap to final state.

9. Accessibility & A11y

Contrast Pairs

  • #292a2e text on #ffffff bg: 12.4:1 — AAA at all sizes (primary body).
  • #101214 heading on #ffffff bg: 18.1:1 — AAA at all sizes (headlines).
  • #505258 secondary on #ffffff bg: 7.6:1 — AAA at body sizes.
  • #ffffff text on #1868db blue button: 4.8:1 — AA at all sizes, AAA at large (≥18px / ≥14px bold). The blue is calibrated to clear AA for button labels.
  • #1558bc text on #e9f2fe soft-blue chip: 6.9:1 — AAA at body sizes.
  • #964ac0 violet on #f8eefe chip: 5.4:1 — AA at body sizes.
  • #8c8f97 muted on #ffffff bg: 3.3:1 — AA at large only; reserved for placeholders and helper text, never body copy.

Focus Indicators

  • Default focus ring: 0 0 0 2px rgba(24, 104, 219, 0.30) blue glow plus a #1868db border, with 2px offset.
  • The exposed --tw-ring-color: rgba(59,130,246,.5) confirms a blue translucent ring as the system default.
  • All interactive surfaces have a visible focus state — no outline: none without a replacement.

ARIA Patterns

  • Navigation: <nav aria-label="Main"> with skip-link to main content; mega-menus use aria-expanded / aria-controls.
  • Disclosure: <button aria-expanded aria-controls> for collapsible FAQ and feature sections.
  • Dialog: role="dialog" aria-modal="true" aria-labelledby with focus trap and Esc-to-close.
  • Video player: native <video> controls or a custom player with aria-label on play/pause/share, captions track, and keyboard scrubbing.
  • Live regions: aria-live="polite" for form validation; the recording indicator should announce state changes.

Keyboard Navigation

  • Tab order matches visual flow: skip-link → nav → hero CTA → main content → footer.
  • All buttons, links, inputs reachable via Tab; modals and mega-menus trap focus until dismissed.
  • Esc closes modals, dropdowns, and the mobile menu sheet.
  • Video players support Space (play/pause) and arrow-key scrubbing.

Screen Reader Hints

  • Product screenshots and demo videos have descriptive alt text / captions explaining the in-product flow shown.
  • Color-coded states (violet = AI, coral = recording) carry a text label or icon, never color alone.
  • Icon-only buttons (share, settings, record) have aria-label.
  • The Loom wordmark uses aria-label="Loom".

Reduced Motion

Honored via the global media query. The record-dot pulse, fade-ups, and scroll reveals become opacity-only or are disabled; durations halve.

10. Responsive Behavior

Breakpoints

NameWidthUse
Mobile< 640pxSingle column, full-bleed sections, ~36px hero
Tablet640–1024px2-column rails, ~48px hero
Desktop1024–1280pxFull 12-col grid, ~63px hero, 720px prose
Wide1280–1536pxSite max width hits
Ultra> 1536pxPage locks to 1280, gutters expand

Touch Targets

  • Minimum tap target: 44×44px (WCAG AAA).
  • Buttons: 44px minimum height on mobile (the pill shape keeps comfortable thumb-room).
  • Nav link tap area: 44×44px even when visual padding is smaller.

Collapsing Strategy

  • Header: full nav with mega-menus at ≥1024px; right-aligned hamburger sheet below.
  • Hero: ~63px display → ~48px → ~36px across breakpoints. Charlie Display scales down smoothly.
  • Feature blocks: side-by-side image+text at desktop stack to image-over-text at mobile.
  • Use-case grid: 3-up / 4-up at desktop, 2-up at tablet, 1-up at mobile.
  • Body width: ~720px → fluid 90vw at mobile.
  • Section spacing: 128px → 96px → 64px across sizes.

Image & Video Behavior

  • Product videos use lazy-loaded posters with aspect-ratio enforced to prevent layout shift.
  • Screenshots use srcset 1x/2x; eager on hero, lazy below the fold.
  • The video player preserves its 12px radius and controls at all sizes; full-width on mobile.

Container Queries

Used inside feature cards to switch icon position (icon-left vs icon-top) when card width crosses ~320px, and inside the pricing table to switch from columns to stacked plan cards.

11. Content & Voice

Tone

Friendly, clear, low-friction. Loom writes the way a helpful colleague talks — direct, encouraging, never jargony or urgent. The voice centers the core promise: recording and sharing a video is faster and warmer than writing a long message. It is confident (backed by Atlassian-scale trust) but stays approachable and human, the opposite of enterprise-stiff.

Microcopy Patterns

  • Button verbs: “Get Loom for free,” “Start recording,” “Get started,” “Contact Sales,” “Watch a demo.” Sentence case, never all-caps, never urgent.
  • Error messages: “Something went wrong — try again, or [contact support].” Calm, low-stakes, solution-oriented.
  • Success confirmations: “Recording saved.” “Link copied.” Brief and immediate.
  • Loading / processing states: “Processing your video…” “Generating transcript…” — context-specific, AI-aware where relevant.

Empty States

What they say: explain the state and offer the next step. “No Looms yet. Record your first video to get started.” What they don’t say: “Oops!”, “Whoops!”, apologetic exclamations. Empty states are normal moments, not failures.

CTA Verb Conventions

  • Primary on hero: “Get Loom for free,” “Start recording,” “Get started”
  • Secondary: “Contact Sales,” “Watch a demo,” “See pricing”
  • Footer: “Read the blog,” “Help center,” “Sign in,” “Download”

The brand never uses “Sign up now!” or scarcity-driven urgency. The pitch is ease and trust (“free,” “in seconds”), not pressure.

12. Dark Mode & Theming

Light-only on the marketing surface — no dark variant. The white canvas is the brand’s brightness signal; a dark marketing site would lose the clean, trustworthy, screenshot-bright register that distinguishes Loom. The blue, violet, and coral accents are all calibrated against white; porting them to dark would require re-keying contrast across the entire token system.

The in-product editor and recorder ship their own dark theme — the token namespace already includes dark rungs (grey-100 #292a2e, black-neutral #1e1f21, blue-100 #1c2b42, violet-100 #35243f) and *-dark semantic mappings, so a dark theme is fully supported at the product layer. That dark theme is documented at the product level, not on the marketing surface. When product screenshots show the dark editor, they sit on the white marketing canvas as artifacts, preserving the page-level brightness.

If a downstream surface needs a dark companion of the marketing system, the rule would be: keep blue, violet, and coral at full saturation; swap white for #1e1f21 (black-neutral); lift cards to #292a2e (grey-100); and use border-grey at low opacity for hairlines. The token ladders already support this, but it is not currently shipped on the marketing site.

13. Lineage & Influences

Loom’s design DNA is calm, tokenized, enterprise-friendly productivity software — and since the 2023 Atlassian acquisition, that DNA has explicitly merged with Atlassian’s design system. The --thd-color-* token namespace, the Charlie Display / Charlie Text family, and the confident #1868db blue are all inherited from or aligned with the Atlassian platform. Loom now reads as “part of the workspace you already trust” rather than a standalone creator tool. The white canvas, single-blue discipline, and full-pill components place it firmly in the modern-SaaS-trust tradition — closer to Linear’s clarity and Stripe’s restraint than to the playful, indie register of early Loom.

What it inherits: Atlassian’s tokenized color ladders and Charlie typeface family (the platform-trust signal); the modern-SaaS convention of one confident brand blue on a clean white canvas (Dropbox, Calendly, Zoom lineage); the full-pill CTA shape that softens the enterprise register into something friendly. What it borrows from contemporaries: Linear’s whitespace discipline and screenshot-forward layout; Stripe’s hairline-border restraint over heavy shadows; Notion’s calm, human microcopy voice. What it rejects: dark canvases, gradient meshes, neon AI aesthetics, and creator-playful illustration — Loom chose institutional calm over indie personality.

Named influences:

  • Atlassian Design System — The parent platform: tokenized color ladders, Charlie typeface family, the #1868db blue, and the trust signal of platform consistency. https://atlassian.design
  • Linear — Whitespace discipline, screenshot-forward layout, calm modern-SaaS clarity. https://linear.app
  • Stripe — Hairline-border restraint and soft neutral shadows over heavy elevation. https://stripe.com
  • Notion — Calm, human, low-friction microcopy voice for a productivity tool. https://www.notion.com
  • Dropbox / Calendly — The modern convention of one confident brand color on a clean white canvas for trust-forward SaaS. https://www.dropbox.com
  • Material Design — The cubic-bezier(0.4, 0, 0.2, 1) standard easing and translucent ring focus conventions. https://m3.material.io

14. Do’s and Don’ts

Do

  • Do keep the canvas pure white #ffffff — the brightness is the trust signal. No cream, no gradient.
  • Do use one confident blue #1868db for all primary action and links — discipline over variety.
  • Do make every actionable element a full pill (9999px). The rounded capsule is the brand fingerprint.
  • Do set headlines in Charlie Display at 700, near-black #101214; body in Charlie Text 400 at softer #292a2e.
  • Do reserve violet #d8a0f7 exclusively for AI / Rovo surfaces — it is a meaning, not a decoration.
  • Do reserve coral #ff613d exclusively for the record / live signal — the one warm, urgent color.
  • Do define cards with a #e4e2e7 hairline border, not a shadow. Borders first.
  • Do pull every color from the token ladder (blue-10…100, grey-10…100, etc.) — no one-off hexes.
  • Do keep the secondary CTA soft-blue #e9f2fe with a near-black label — calm, never competing with primary.
  • Do let product videos and screenshots carry the story; show the product more than you describe it.

Don’t

  • Don’t introduce a dark canvas on the marketing surface; white is the brand’s brightness.
  • Don’t use violet or coral as a generic accent — they are bound to AI and recording respectively.
  • Don’t make the CTA any color but blue; the soft-blue and outline variants are the only alternates.
  • Don’t square off the CTAs. A rectangular button breaks the friendly full-pill register.
  • Don’t use colored shadows (blue/violet glow) except on the focus ring; shadows are soft neutral black.
  • Don’t use a warm grey neutral. The grey ladder is cool with a faint blue undertone.
  • Don’t add a serif or a third type family. Charlie Display + Charlie Text + mono is the system.
  • Don’t use heavy drop shadows for elevation; borders and soft diffuse shadows are the depth language.
  • Don’t shout in the copy (“Sign up now!”, scarcity). The voice is friendly and low-friction.
  • Don’t invent off-ladder hexes; every color should map to a --thd-color-* token rung.

15. Agent Prompt Guide

Quick Color Reference

bg: #ffffff
bg-soft: #f8f8f8
text: #292a2e
text-heading: #101214
brand-blue: #1868db
brand-blue-hover: #1558bc
brand-soft: #e9f2fe
accent-violet: #d8a0f7
accent-record: #ff613d
border: #e4e2e7
on-brand: #ffffff

Example Component Prompts

  1. “Create a hero in Loom style — pure white #ffffff canvas, ~63px headline in Charlie Display at weight 700 in near-black #101214 with -0.02em tracking, 18px Charlie Text lede in soft grey #292a2e at 1.55 line-height, a primary full-pill CTA in blue #1868db with white label plus a soft-blue #e9f2fe secondary pill ‘Contact Sales’, and a product video floating below on a soft ambient shadow.”

  2. “Design a feature card in Loom style — white #ffffff background, 12px radius, 1px #e4e2e7 hairline border, 24px interior padding, 20px Charlie Display 600 heading in #101214, 16px Charlie Text 400 body in #292a2e, no shadow at rest, gentle rgba(16,18,20,0.06) 0 2px 8px shadow on hover.”

  3. “Build a full-pill primary button in Loom style — blue #1868db background, white label in Charlie Text 600 / 16px, 12px 20px padding, 9999px radius, hover to #1558bc, active to #123263, no border, no scale on hover.”

  4. “Compose an AI / Rovo feature surface in Loom style — soft violet #f8eefe background, 16px radius, 24px padding, a small violet pill chip (bg #f8eefe, text #964ac0) reading ‘AI’, heading in Charlie Display 600 #101214, body in Charlie Text #292a2e. Use violet only here — it signals the intelligence layer.”

  5. “Render a recording-state chip in Loom style — full-pill, 12% coral background #ff613d20, coral text #ff613d, a leading coral dot, Charlie Text 600 / 13px, label ‘Recording’. Coral is reserved for the live / record signal only.”

  6. “Create the primary nav in Loom style — 64px white header, Loom wordmark in near-black, links in Charlie Text 500 / 16px (#292a2e, hover #1868db), mega-menu dropdowns on Products and Solutions, right-aligned ghost ‘Sign in’ + blue full-pill ‘Get Loom for free’. Opaque white with a bottom hairline on scroll.”

Iteration Guide

  1. Start with pure white, not cream or grey. If the bg has any tint, you’ve drifted toward Descript (cream) or a dark-SaaS register. White brightness is the entry ticket.
  2. One blue, everywhere it acts. #1868db for primary CTA and links. Resist adding a second action color — the discipline is the brand.
  3. Make everything a pill. CTAs, chips, badges, avatars at 9999px radius. A square button collapses the friendly register instantly.
  4. Charlie Display 700 for headlines, Charlie Text 400 for body. Same family, two optical sizes; confidence comes from weight, not from a serif or a louder color.
  5. Two-tone the type color. Headings near-black #101214, body softer #292a2e. The small grey step does the hierarchy work.
  6. Bind violet and coral to meaning. Violet #d8a0f7 only for AI/Rovo; coral #ff613d only for recording. If either appears decoratively, you’ve broken the grammar.
  7. Borders before shadows. Define cards with a #e4e2e7 hairline; reserve soft neutral shadows for floating UI only.
  8. Calm the verbs. “Get Loom for free,” “Start recording” — friendly and concrete. Drop any urgency or scarcity language.

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

Ship with this

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

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