duply
Preview of Attio

Attio

A precise, near-monochrome SaaS interface for an AI CRM — bright white canvas with pure-black headlines and primary CTAs, Inter Display typography set tight with negative tracking, and soft hairline-bordered product cards (~12px radius) that show real CRM chrome at small scale. The system reads as engineered, dense, and quietly confident — color is almost entirely grayscale, with a single blue (#266df0) and a single green (#0fc27b) surfacing only inside product UI fragments.

---
version: alpha
name: Attio-design-analysis
description: A precise, near-monochrome SaaS interface for an AI CRM — bright white canvas with pure-black headlines and primary CTAs, Inter Display typography set tight with negative tracking, and soft hairline-bordered product cards (~12px radius) that show real CRM chrome at small scale. The system reads as engineered, dense, and quietly confident — color is almost entirely grayscale, with a single blue (#266df0) and a single green (#0fc27b) surfacing only inside product UI fragments.

colors:
  primary: "#000000"
  ink: "#000000"
  ink-soft: "#242629"
  ink-soft-alt: "#232529"
  body: "#5c5e63"
  body-alt: "#505154"
  body-alt-2: "#505155"
  muted: "#75777c"
  muted-soft: "#9fa1a7"
  muted-blue: "#8f99a8"
  border: "#cad0d9"
  hairline: "#e4e7ec"
  hairline-soft: "#eeeff1"
  surface-tint: "#edeff3"
  surface-soft: "#f4f5f6"
  surface-faint: "#fafafb"
  surface-strong: "#e6e7ea"
  canvas: "#ffffff"
  on-primary: "#ffffff"
  accent-blue: "#266df0"
  success: "#0fc27b"
  accent-maroon: "#672322"

typography:
  display-xl:
    fontFamily: "Inter Display, Inter, sans-serif"
    fontSize: 64px
    fontWeight: 600
    lineHeight: 1.0
    letterSpacing: -1.28px
  display-lg:
    fontFamily: "Inter Display, Inter, sans-serif"
    fontSize: 56px
    fontWeight: 600
    lineHeight: 1.071
    letterSpacing: -0.84px
  display-md:
    fontFamily: "Inter Display, Inter, sans-serif"
    fontSize: 32px
    fontWeight: 600
    lineHeight: 1.188
    letterSpacing: -0.32px
  eyebrow:
    fontFamily: "Inter Display, Inter, sans-serif"
    fontSize: 12px
    fontWeight: 600
    lineHeight: 1.167
    letterSpacing: 0.72px
  button:
    fontFamily: "Inter, sans-serif"
    fontSize: 15px
    fontWeight: 500
    lineHeight: 1.467
    letterSpacing: -0.16px

rounded:
  xs: 6px
  sm: 8px
  md: 10px
  lg: 12px
  xl: 14px

spacing:
  xxs: 4px
  xs: 6px
  sm: 8px
  md: 12px
  lg: 16px
  xl: 24px
  xxl: 32px
  xxxl: 36px

components:
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 0px 8px 0px 12px
  button-primary-active:
    backgroundColor: "{colors.ink-soft}"
    textColor: "{colors.on-primary}"
    rounded: "{rounded.md}"
  button-secondary:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 0px 8px 0px 12px
  nav-link:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
  top-nav:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
  eyebrow-pill:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 8px 12px
  hero-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-xl}"
  section-tab:
    backgroundColor: transparent
    textColor: "{colors.muted}"
    typography: "{typography.button}"
    padding: 12px 16px
  section-tab-active:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
  card:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    rounded: "{rounded.lg}"
  product-mockup-card:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    rounded: "{rounded.lg}"
    padding: 16px
  feature-card:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-md}"
    rounded: "{rounded.lg}"
    padding: 24px
  cta-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-lg}"
  logo-strip:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.muted}"
---

## Overview

Attio's marketing surface is a precise, near-monochrome interface for an AI CRM. The page floor is pure white (`{colors.canvas}`#ffffff), headlines and primary CTAs are pure black (`{colors.primary}`#000000), and the supporting palette is an almost-entirely grayscale ramp running from `{colors.ink-soft}` (#242629) through `{colors.body}` (#5c5e63) down to `{colors.muted-soft}` (#9fa1a7). The system reads as engineered and quietly confident — there is no decorative color at the marketing layer; the only chromatic moments (`{colors.accent-blue}`#266df0, `{colors.success}`#0fc27b) appear inside the embedded product UI.

The type voice is a single family — **Inter Display** for headlines and **Inter** for UI labels — set tight. The hero h1 runs 64px / weight 600 with -1.28px tracking; section display headlines run 56px with -0.84px tracking. The negative letter-spacing across all display sizes is the signature: condensed, dense, technical.

Brand voltage comes from **real product UI fragments shown directly inside cards** — a CRM workspace with a deal pane, automation flow diagrams, lead-research panels, and reporting charts. Attio doesn't illustrate the product; it embeds the actual app chrome at small scale inside soft hairline-bordered cards. The product itself is the hero image.

**Key Characteristics:**
- Pure-white canvas, pure-black primary CTA (`{colors.primary}`#000000). Buttons are `{rounded.md}` (10px) with Inter 15px / 500 labels and a tight -0.16px tracking.
- Inter Display headlines set with aggressive negative tracking (-0.32px to -1.28px). Dense, condensed, engineered feel.
- A grayscale ramp does almost all the work — five surface tints (#fafafb#e6e7ea), a hairline tone (`{colors.hairline}`#e4e7ec), and four text grays.
- Soft hairline-bordered cards (`{rounded.lg}` 12px), most with no shadow; the hero product card carries a faint elevated shadow.
- Real CRM product chrome embedded in cards — deal panes, automation flows, lead panels, charts. The single blue and single green live only here.
- A horizontal tab row ("Ask Attio / Data model / Workflows / Reporting") with a black underline under the active tab switches the hero product view.
- A logo strip (Granola, Flow, Listen, Obvious, Modal, USV) in muted gray below the hero.

## Colors

### Brand & Action
- **Primary / Ink** (`{colors.primary}`#000000): The dominant color — every headline, the primary CTA fill, the logo wordmark, and nav links. Attio's button is pure black, not a brand hue.
- **Ink Soft** (`{colors.ink-soft}`#242629 and `{colors.ink-soft-alt}`#232529): Near-black tones used for strong secondary text and, derived, the pressed state of the primary button.

### Accent (product chrome only)
- **Accent Blue** (`{colors.accent-blue}`#266df0): The single blue. Appears inside product UI fragments (links, selected states, the faint blue glow shadow). Never on marketing CTAs.
- **Success Green** (`{colors.success}`#0fc27b): Used for positive/recorded indicators inside the embedded CRM chrome (e.g., the green deal-context accent bar).
- **Accent Maroon** (`{colors.accent-maroon}`#672322): A rare deep-red tone observed in product chrome avatars/badges.

### Text
- **Body** (`{colors.body}`#5c5e63, with `{colors.body-alt}`#505154 and `{colors.body-alt-2}`#505155): Default running-text and sub-headline grays.
- **Muted** (`{colors.muted}`#75777c): Secondary labels, inactive tabs, logo-strip text.
- **Muted Soft** (`{colors.muted-soft}`#9fa1a7) and **Muted Blue** (`{colors.muted-blue}`#8f99a8): Tertiary captions and cool-gray micro-labels inside product chrome.
- **On Primary** (`{colors.on-primary}`#ffffff): Text on the black primary button.

### Surface & Lines
- **Canvas** (`{colors.canvas}`#ffffff): The page floor everywhere.
- **Surface Faint** (`{colors.surface-faint}`#fafafb), **Surface Soft** (`{colors.surface-soft}`#f4f5f6), **Surface Tint** (`{colors.surface-tint}`#edeff3), **Hairline Soft** (`{colors.hairline-soft}`#eeeff1), **Surface Strong** (`{colors.surface-strong}`#e6e7ea): The stack of barely-different gray tints used for pill backgrounds, card fills, and section dividers.
- **Hairline** (`{colors.hairline}`#e4e7ec): The 1px border tone — used as the `0 0 0 1px` ring on cards and inputs.
- **Border** (`{colors.border}`#cad0d9): A slightly stronger 1px divider/outline tone.

## Typography

### Font Family
The system runs **Inter Display** for headlines and **Inter** for UI labels — both open-source (no licensed faces were flagged). Inter Display is Inter's display optical size, tuned for larger settings; the fallback stack walks `Inter, sans-serif`. The boundary is functional rather than aesthetic: display optical size for headlines, standard Inter for the 15px button/label text.

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-xl}` | 64px | 600 | 1.0 | -1.28px | Homepage h1 ("The revenue platform engineered for scale.") |
| `{typography.display-lg}` | 56px | 600 | 1.071 | -0.84px | Large section / CTA-band headlines ("Start with 14 days of Pro, for free.") — captured by the analyzer as `body_text` |
| `{typography.display-md}` | 32px | 600 | 1.188 | -0.32px | Sub-section heads / feature-card titles |
| `{typography.eyebrow}` | 12px | 600 | 1.167 | +0.72px | Small uppercase section labels / eyebrow tags (positive tracking — the only positive value in the system) — captured as `h2` |
| `{typography.button}` | 15px | 500 | 1.467 | -0.16px | Buttons, nav links, tab labels, pill text |

### Principles
The display voice is defined by negative tracking that tightens as size grows — from -0.32px at 32px to -1.28px at 64px. This is what makes Attio's headlines read as dense and engineered rather than airy. Display weight is fixed at 600 across all sizes — never 700, never 400. The lone exception to the negative-tracking rule is the 12px eyebrow label, which runs +0.72px positive tracking — the standard uppercase-micro-label treatment.

### Note on Font Substitutes
No licensed faces were detected. Inter and Inter Display are both freely available open-source web fonts and can ship as-is. If Inter Display is unavailable, standard **Inter** at weight 600 with the same negative letter-spacing is a faithful substitute, since Inter Display is the same family at a display optical size.

## Layout

### Spacing System
- **Base unit:** measured spacing clusters tightly around 4px and 6px (the two highest-frequency values), with a coarser 8 / 12 / 16 / 24 / 32 / 36 ramp above.
- **Tokens:** `{spacing.xxs}` 4px · `{spacing.xs}` 6px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.xxxl}` 36px.
- **Dense micro-rhythm:** The high frequency of 4 / 6 / 8 / 12px values reflects the tightly-packed product chrome embedded in cards — list rows, deal panes, and inline badges sit on a 4–6px internal grid.
- **Card internal padding:** product-mockup cards observed around `{spacing.lg}` (16px); feature copy blocks use `{spacing.xl}` (24px).

### Grid & Container
- **Editorial body:** centered single column; hero is fully centered (eyebrow pill → h1 → sub-head → button row).
- **Feature rows:** a left copy column paired with a multi-panel product-chrome grid on the right (observed as 2–3 panels per row on the landing scroll).
- **Logo strip:** single horizontal row of partner logos in `{colors.muted}`.

### Whitespace Philosophy
Attio pairs a roomy, fully-centered hero with dense, information-rich product cards below. The macro rhythm breathes (large vertical gaps between bands); the micro rhythm inside cards is tight (4–8px). This contrast — generous outside, dense inside — mirrors the product itself: a calm marketing shell wrapped around a dense CRM workspace.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border | Body sections, hero band, top nav, logo strip |
| Hairline ring | `0 0 0 1px` ring in `{colors.hairline-soft}` (#eeeff1) or `rgba(0,0,0,0.05)` | Cards, inputs, embedded panels |
| Faint micro-shadow | `rgba(28,40,64,0.18) 0px 0px 2px` + `rgba(0,0,0,0.04)` | Small floating elements (e.g., the cookie consent card) |
| Soft drop shadow | `rgba(28,40,64,0.06) 0px 2px 6px` / `rgba(0,0,0,0.04) 0px 12px 30px` | Elevated product cards / floating panels |
| Hero product card | `rgba(28,40,64,0.08) 0px 10.85px 21.7px -4.34px` layered with two tighter shadows | The marquee CRM workspace card under the hero |
| Blue glow | `rgba(15,107,233,0.12) 0px 2px 4px -2px` | A faint blue accent shadow on a selected/active product element |

The elevation philosophy is **soft and subtle** — most surfaces rely on a 1px hairline ring rather than shadow, and the few real shadows are low-alpha, navy-tinted (rgba(28,40,64,…)), multi-layered, and tight. No heavy shadows, no glassmorphism. The default `card` component carries `shadow: none`.

### Decorative Depth
- The embedded CRM chrome carries its own internal shadows from the product UI — these are content, not system tokens.
- Wireframe/isometric line illustrations (hexagon clusters, cube outlines) appear in feature rows as light decorative geometry rather than filled imagery.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.xs}` | 6px | Small inline chips, dense list-row items inside product chrome |
| `{rounded.sm}` | 8px | The most common radius — buttons-in-chrome, small panels, badges |
| `{rounded.md}` | 10px | Primary + secondary CTA buttons, eyebrow pill |
| `{rounded.lg}` | 12px | Content cards and product-mockup cards (the `card` component) |
| `{rounded.xl}` | 14px | Larger framed panels / outer container corners |

Radius usage is tight and consistent — nothing exceeds 14px. The system never goes fully pill-shaped at the marketing layer; even the eyebrow tag uses a modest `{rounded.md}` (10px). The restrained radius reinforces the engineered, professional tone.

### Photography & Geometry
Attio shows almost no photography at the marketing layer — the visual content is product chrome and thin-line isometric illustrations. Embedded product panels keep their native internal radii (6–8px on list rows and inner buttons). Avatar elements inside the CRM chrome are small circular crops.

## Components

### Top Navigation

**`top-nav`** — White nav bar pinned to the top. Carries the Attio logo + wordmark at left, a horizontal menu (Platform ⌄, Resources ⌄, Customers, Pricing) center-left, and a right cluster with a "Sign in" `{component.button-secondary}` and a black "Start for free" `{component.button-primary}`. Menu items use `{component.nav-link}` (Inter 15px / 500, `{colors.ink}`).

**`nav-link`** — Inline nav menu item. Transparent background, `{colors.ink}` text, `{typography.button}`. Dropdown items carry a small chevron.

### Buttons

**`button-primary`** — The signature CTA ("Start for free"). Background `{colors.primary}` (#000000), text `{colors.on-primary}`, type `{typography.button}` (Inter 15px / 500), rounded `{rounded.md}` (10px), measured padding `0px 8px 0px 12px` (asymmetric to seat a trailing icon/glyph). Pressed state `button-primary-active` shifts to `{colors.ink-soft}` (#242629) — derived from the near-black ink ramp.

**`button-secondary`** — White button with hairline outline ("Talk to sales", "Sign in", "See our plans"). Background `{colors.canvas}`, text `{colors.ink}`, 1px `{colors.hairline}` ring, same radius and label type as primary.

### Pills, Tabs & Eyebrows

**`eyebrow-pill`** — A small rounded pill above the h1 ("Explore GTM frameworks from operators like Elena Verna ›"). Background `{colors.surface-soft}` (#f4f5f6), text `{colors.ink}`, `{typography.button}`, rounded `{rounded.md}`, padding ~8px × 12px, with a trailing chevron.

**`section-tab`** + **`section-tab-active`** — The horizontal product-view switcher ("Ask Attio / Data model / Workflows / Reporting") under the hero. Inactive: transparent background, `{colors.muted}` text. Active: `{colors.ink}` text with a black underline bar. Both use `{typography.button}`, padding ~12px × 16px.

### Cards & Containers

**`card`** — The base card primitive. Background `{colors.canvas}`, rounded `{rounded.lg}` (12px), `shadow: none` by default (relies on a `{colors.hairline}` ring when bordered).

**`product-mockup-card`** — A card showing actual Attio CRM chrome — workspace sidebar, deal pane, automation flow, lead-research panel, or reporting chart. Background `{colors.canvas}`, rounded `{rounded.lg}`, padding ~`{spacing.lg}` (16px). The hero instance carries the layered `rgba(28,40,64,0.08)` drop shadow; in-scroll instances mostly rely on hairline rings. These cards display the product — they don't decorate around it.

**`feature-card`** — A copy + chrome block in the landing scroll ("Revenue agents at your command", "Already there when you arrive", "Continuous context for everyone"). Background `{colors.canvas}`, title in `{typography.display-md}` (32px), body copy in `{colors.body}`, an "Explore →" text link, paired with a product-chrome panel. Rounded `{rounded.lg}`, padding ~`{spacing.xl}` (24px).

### Bands

**`hero-band`** — Centered white hero: `{component.eyebrow-pill}` → h1 in `{typography.display-xl}` → sub-headline in `{colors.body}` → button row (primary + secondary). No background color, no shadow.

**`cta-band`** — A pre-footer prompt ("Start with 14 days of Pro, for free."). Headline in `{typography.display-lg}` (56px), a `{component.button-primary}` plus a `{component.button-secondary}` ("See our plans"), accompanied by thin-line hexagon illustrations.

**`logo-strip`** — Single horizontal row of partner logos (Granola, Flow, Listen, Obvious, Modal, USV) below the hero. Background `{colors.canvas}`, logos rendered in `{colors.muted}` gray.

## Do's and Don'ts

### Do
- Reserve `{colors.primary}` (#000000) for headlines and the primary CTA. Attio's button is pure black, never a brand hue.
- Keep `{colors.accent-blue}` and `{colors.success}` inside embedded product chrome only — they are product-state colors, not marketing accents.
- Set every display headline in Inter Display 600 with negative tracking (-0.32px to -1.28px). The tight tracking is the brand voice.
- Use the grayscale ramp deliberately: `{colors.body}` for running text, `{colors.muted}` for secondary labels and the logo strip, `{colors.muted-soft}` for fine print.
- Embed real CRM chrome inside `{component.product-mockup-card}`. Show the actual app, not an illustration of it.
- Lean on the 1px hairline ring (`{colors.hairline}`) for card separation before reaching for a shadow.
- Keep the eyebrow label at 12px with positive +0.72px tracking — it's the one place positive tracking belongs.

### Don't
- Don't introduce additional accent colors at the marketing layer. The system is grayscale outside the product chrome.
- Don't bold display type past 600 or set it without negative tracking — either reads as off-brand.
- Don't exceed `{rounded.xl}` (14px) on any element. Larger radii break the engineered, professional tone.
- Don't add heavy or high-alpha shadows. Attio's elevation is faint, navy-tinted, and multi-layered.
- Don't put body copy in Inter Display or headlines in plain Inter — keep the display/UI split clean.
- Don't document hover states — primary darkens to `{colors.ink-soft}` on press; nothing else changes.

## Responsive Behavior

The landing and pricing pages were captured at desktop width. The reference shows a centered single-column hero and full horizontal nav. The following collapsing behavior is inferred from standard SaaS patterns and the observed layout; exact breakpoint values were not measured (see Known Gaps).

### Breakpoints (inferred)

| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 768px | Nav likely collapses to a menu trigger; hero h1 scales down from 64px; feature rows stack copy above chrome; logo strip wraps |
| Tablet | 768–1024px | Horizontal nav tightens; feature chrome panels reduce to fewer columns |
| Desktop | 1024px+ | Full nav, centered hero, multi-panel product-chrome feature rows |

### Touch Targets
- `{component.button-primary}` / `{component.button-secondary}` label type is 15px; effective height was not measured.
- `{component.section-tab}` rows have ~12px vertical padding; combined tap area should clear comfortable minimums.

### Collapsing Strategy
- Hero is already centered single-column and collapses cleanly.
- Feature rows (copy + chrome panels) stack vertically on narrow viewports.
- Embedded product cards should scale proportionally so the dense chrome stays legible rather than reflowing.

## Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key directly (`{component.button-primary}`, `{component.product-mockup-card}`).
2. Variants (`-active`, `-secondary`) live as separate entries in `components:`.
3. Use `{token.refs}` everywhere — never inline a hex in a component.
4. Never document hover. Default and Active/Pressed states only.
5. Display headlines stay Inter Display 600 with negative tracking; UI text stays Inter 15px / 500. The split does not blur.
6. The marketing layer is grayscale — keep blue and green confined to product chrome.
7. When in doubt about emphasis: bigger Inter Display before bolder. Weight stays at 600.

## Known Gaps

- The analyzer captured a `body_text` role at 56px / 600 — this is clearly a large display headline, not running body copy. **True body / paragraph text size and weight were not reliably measured**; the `{colors.body}` (#5c5e63) tone is documented from frequency, but its paired font-size is a gap.
- The `h2` role was measured at 12px with positive tracking — this is an eyebrow/label, not a section heading. A mid-tier heading between 32px and 56px may exist but was not captured.
- Footer was not captured on either page; footer surface, structure, and link styling are unknown.
- Pricing-page-specific components (tier cards, plan tables, toggles) were captured visually but not measured as discrete tokens; their padding, fills, and typography are gaps.
- The `{colors.accent-maroon}` (#672322) role is inferred from product-chrome avatars/badges; its exact usage is uncertain.
- Exact button heights, input dimensions, and form-field states were not measured (only button radius and asymmetric padding).
- Responsive breakpoints and mobile nav behavior are inferred, not measured.
- Animation and transition timings (tab switching, product-chrome reveals) are out of scope.

<!-- Documented by duply · real-world design systems as ready-to-use DESIGN.md for AI coding agents · https://duply.ai/attio/design-md -->

Color Palette

Accent

Neutrals

Typography

display-xl64px · 600 · 1
The quick brown fox jumps
display-lg56px · 600 · 1.071
The quick brown fox jumps
display-md32px · 600 · 1.188
The quick brown fox jumps
eyebrow12px · 600 · 1.167
The quick brown fox jumps
button15px · 500 · 1.467
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
xxs4px
xs6px
sm8px
md12px
lg16px
xl24px
xxl32px
xxxl36px

Border Radius

NameValuePreview
xs6px
sm8px
md10px
lg12px
xl14px

More like this

Build in any
design language

Free to browse. Real design systems, documented as DESIGN.md. New designs land weekly.

Browse the libraryHow it works