2026-08-09 23:09:06 +08:00
---
version: alpha
name: Intercom-design-analysis
2026-08-10 16:58:16 +08:00
description: "An editorial customer-service marketing canvas built around a soft cream-white ground, charcoal type set in Saans (Intercom's proprietary geometric sans), and a single confident Fin Orange (#ff5600 ) reserved for the Fin AI brand. Cards live as floating white tiles with thin hairline borders and a unified 6px radius. Display headlines run Saans at weight 500 with measured negative tracking. The system reads as a careful, product-led publication: product screenshots dominate, ornament is rare, and the only place chromatic energy enters is the Fin Orange CTA."
2026-08-09 23:09:06 +08:00
colors:
primary: "#111111 "
on-primary: "#ffffff "
ink: "#111111 "
ink-muted: "#626260 "
ink-subtle: "#7b7b78 "
ink-tertiary: "#9c9fa5 "
canvas: "#f5f1ec "
surface-1: "#ffffff "
surface-2: "#ebe7e1 "
inverse-canvas: "#000000 "
inverse-surface-1: "#313130 "
inverse-ink: "#ffffff "
inverse-ink-muted: "#9c9fa5 "
hairline: "#d3cec6 "
hairline-soft: "#ebe7e1 "
fin-orange: "#ff5600 "
report-orange: "#fe4c02 "
report-blue: "#65b5ff "
report-green: "#0bdf50 "
report-pink: "#ff2067 "
report-lime: "#b3e01c "
report-cyan: "#03b2cb "
brand-blue: "#0007cb "
semantic-error: "#c41c1c "
semantic-success: "#0bdf50 "
typography:
display-xl:
fontFamily: Saans
fontSize: 72px
fontWeight: 500
lineHeight: 1.05
letterSpacing: -2.0px
display-lg:
fontFamily: Saans
fontSize: 56px
fontWeight: 500
lineHeight: 1.10
letterSpacing: -1.4px
display-md:
fontFamily: Saans
fontSize: 40px
fontWeight: 500
lineHeight: 1.15
letterSpacing: -0.8px
headline:
fontFamily: Saans
fontSize: 28px
fontWeight: 500
lineHeight: 1.20
letterSpacing: -0.5px
card-title:
fontFamily: Saans
fontSize: 22px
fontWeight: 500
lineHeight: 1.25
letterSpacing: -0.3px
subhead:
fontFamily: Saans
fontSize: 20px
fontWeight: 400
lineHeight: 1.40
letterSpacing: -0.2px
body-lg:
fontFamily: Saans
fontSize: 18px
fontWeight: 400
lineHeight: 1.50
letterSpacing: -0.1px
body:
fontFamily: Saans
fontSize: 16px
fontWeight: 400
lineHeight: 1.50
letterSpacing: 0
body-sm:
fontFamily: Saans
fontSize: 14px
fontWeight: 400
lineHeight: 1.50
letterSpacing: 0
caption:
fontFamily: Saans
fontSize: 12px
fontWeight: 400
lineHeight: 1.40
letterSpacing: 0
button:
fontFamily: Saans
fontSize: 15px
fontWeight: 500
lineHeight: 1.20
letterSpacing: 0
eyebrow:
fontFamily: Saans
fontSize: 14px
fontWeight: 500
lineHeight: 1.30
letterSpacing: 0
mono:
fontFamily: SaansMono
fontSize: 13px
fontWeight: 400
lineHeight: 1.50
letterSpacing: 0
rounded:
2026-08-10 16:58:16 +08:00
xs: 6px
2026-08-09 23:09:06 +08:00
sm: 6px
2026-08-10 16:58:16 +08:00
md: 6px
lg: 6px
xl: 6px
xxl: 6px
pill: 6px
full: 6px
2026-08-09 23:09:06 +08:00
spacing:
xxs: 4px
xs: 8px
sm: 12px
md: 16px
lg: 24px
xl: 32px
xxl: 48px
section: 96px
components:
button-primary:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.button}"
rounded: "{rounded.md}"
padding: 10px 18px
button-primary-pressed:
backgroundColor: "{colors.inverse-canvas}"
textColor: "{colors.on-primary}"
typography: "{typography.button}"
rounded: "{rounded.md}"
button-secondary:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.button}"
rounded: "{rounded.md}"
padding: 10px 18px
button-tertiary:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.button}"
rounded: "{rounded.md}"
padding: 10px 18px
button-fin:
backgroundColor: "{colors.fin-orange}"
textColor: "{colors.on-primary}"
typography: "{typography.button}"
rounded: "{rounded.md}"
padding: 10px 18px
pricing-card:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.lg}"
padding: 24px
pricing-card-featured:
backgroundColor: "{colors.ink}"
textColor: "{colors.on-primary}"
typography: "{typography.body}"
rounded: "{rounded.lg}"
padding: 24px
feature-card:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.lg}"
padding: 24px
product-mockup-card:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.xl}"
padding: 24px
testimonial-card:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body-lg}"
rounded: "{rounded.lg}"
padding: 32px
customer-logo-tile:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink-muted}"
typography: "{typography.caption}"
rounded: "{rounded.xs}"
padding: 16px
text-input:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.md}"
padding: 10px 14px
text-input-focused:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.md}"
padding: 10px 14px
pricing-tab-default:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink-muted}"
typography: "{typography.button}"
2026-08-10 16:58:16 +08:00
rounded: "{rounded.md}"
2026-08-09 23:09:06 +08:00
padding: 8px 16px
pricing-tab-selected:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.button}"
2026-08-10 16:58:16 +08:00
rounded: "{rounded.md}"
2026-08-09 23:09:06 +08:00
padding: 8px 16px
faq-row:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.md}"
padding: 24px
cta-banner:
backgroundColor: "{colors.surface-1}"
textColor: "{colors.ink}"
typography: "{typography.headline}"
rounded: "{rounded.lg}"
padding: 48px
startup-discount-card:
backgroundColor: "{colors.surface-2}"
textColor: "{colors.ink}"
typography: "{typography.body}"
rounded: "{rounded.lg}"
padding: 32px
top-nav:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.body-sm}"
rounded: "{rounded.xs}"
height: 56px
footer:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink-muted}"
typography: "{typography.caption}"
rounded: "{rounded.xs}"
padding: 64px 32px
---
## Overview
Intercom's marketing canvas is a soft cream-white ground (`{colors.canvas}` ≈ #f5f1ec ) — not pure white. The warmth is the brand's signal: this is editorial, calm, and product-focused, not bright SaaS. On top of the cream canvas sit white floating cards (`{colors.surface-1}` ), thin hairline dividers (`{colors.hairline}` ), and charcoal type (`{colors.ink}` #111111 ).
Display type is **Saans** — Intercom's proprietary geometric sans — set at weight 500 with measured negative letter-spacing (-2.0px on 72px display). Body type is the same family at weight 400. The single proprietary mono is **SaansMono** , used sparingly for code snippets and product UI screenshots embedded in the marketing surface.
The single chromatic accent is **Fin Orange** (`{colors.fin-orange}` #ff5600 ) — Intercom's AI-product brand color. It surfaces on the Fin product CTA, the Fin badge in pricing, and a few inline emphasis moments. It is NOT a system primary; the system primary is charcoal `{colors.ink}` . Intercom also maintains a small **report palette** (`{colors.report-blue}` , `{colors.report-green}` , `{colors.report-pink}` , `{colors.report-lime}` ) used inside in-product analytics surfaces shown in mockups.
2026-08-10 16:58:16 +08:00
The page rhythm is heavy on **product mockups** : every section's payload is a high-fidelity screenshot of Intercom's product UI, framed in white cards with a consistent 6px corner radius. The marketing chrome is intentionally quiet so the product can be the protagonist.
2026-08-09 23:09:06 +08:00
**Key Characteristics:**
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- **Cream canvas** (`{colors.canvas}` #f5f1ec ) is the brand's defining surface — neither white nor gray, deliberately warm.
- Product-screenshot-led page rhythm: every section centers a product mockup card, marketing chrome stays minimal.
- **Saans** proprietary sans-serif carries the entire hierarchy; SaansMono for code-only contexts.
- **Charcoal** `{colors.ink}` (#111111 ) is the system primary — buttons, headlines, body type all sit on charcoal.
- **Fin Orange** (`{colors.fin-orange}` #ff5600 ) is the AI product color — used on the Fin CTA and Fin badge, never decoratively.
- Display tracking pulls aggressively negative (-2.0px on 72px); body stays at 0.
2026-08-10 16:58:16 +08:00
- All component corners use the same 6px radius — never pill-rounded and never intentionally square unless a structural edge requires `rounded-none` .
2026-08-09 23:09:06 +08:00
## Colors
> Source pages: intercom.com (home), /pricing, /helpdesk, /customers, /helpdesk/inbox.
### Brand & Accent
2026-08-29 20:36:44 +08:00
2026-08-10 16:58:16 +08:00
- **Charcoal** ({colors.ink}): The system primary surface. Headlines, body type, and primary CTA background — all charcoal.
2026-08-09 23:09:06 +08:00
- **White** ({colors.on-primary}): Text on charcoal CTAs; canvas of floating cards.
- **Fin Orange** ({colors.fin-orange}): The AI-product accent. Used on the Fin CTA, Fin badge, and a small set of inline emphasis moments.
- **Report Orange** ({colors.report-orange}): A slightly different orange used inside the report / analytics palette for in-product mockups.
- **Brand Blue** ({colors.brand-blue}): Saturated brand blue (#0007cb ) — used on a small set of marketing illustrations.
### Surface
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- **Canvas** ({colors.canvas}): Default page background — soft cream-white #f5f1ec .
- **Surface 1** ({colors.surface-1}): Pure white — used for floating cards (pricing, feature, product-mockup).
- **Surface 2** ({colors.surface-2}): Slightly darker cream — startup-discount banner, alt-row stripes.
- **Hairline** ({colors.hairline}): 1px borders on cards — soft warm gray (#d3cec6 ).
- **Hairline Soft** ({colors.hairline-soft}): Even softer dividers between FAQ rows and footer columns.
- **Inverse Canvas** ({colors.inverse-canvas}): Pure black — only on the testimonial / quote callout strip.
- **Inverse Surface 1** ({colors.inverse-surface-1}): One step lighter — hovered footer items in dark contexts.
### Text
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- **Ink** ({colors.ink}): All headlines, body type, button labels — charcoal #111111 .
- **Ink Muted** ({colors.ink-muted}): Secondary type at #626260 — meta info, deselected pricing tabs.
- **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #7b7b78 — footer columns, helper text.
- **Ink Tertiary** ({colors.ink-tertiary}): Quaternary type at #9c9fa5 — disabled, footnotes.
- **Inverse Ink** ({colors.inverse-ink}): White on black — quote-strip type.
- **Inverse Ink Muted** ({colors.inverse-ink-muted}): Light gray on black — quote-strip meta.
### Semantic & Report Palette (in-product mockups)
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- **Error Red** ({colors.semantic-error}): Form validation, destructive states.
- **Success Green** ({colors.semantic-success}): Positive states (also `{colors.report-green}` ).
- **Report Blue** ({colors.report-blue}): Analytics chart blue.
- **Report Pink** ({colors.report-pink}): Analytics chart pink.
- **Report Lime** ({colors.report-lime}): Analytics chart lime.
- **Report Cyan** ({colors.report-cyan}): Phone country selector accent.
The report palette appears INSIDE product UI mockups — these are Intercom's in-product chart colors, not marketing surface colors.
## Typography
### Font Family
- **Saans** — Intercom's proprietary geometric sans, fallback `Saans Fallback, ui-sans-serif, system-ui` . Carries display, body, eyebrow, and button.
- **SaansMono** — Proprietary mono, fallback `SaansMono Fallback, ui-monospace` . Used inside code snippets shown in product mockups.
The same family carries the entire hierarchy. Hierarchy is carried by size + weight + tracking, not by family change.
### Hierarchy
2026-08-29 20:36:44 +08:00
| Token | Size | Weight | Line Height | Letter Spacing | Use |
| ------------------------- | ---- | ------ | ----------- | -------------- | ------------------------------- |
| `{typography.display-xl}` | 72px | 500 | 1.05 | -2.0px | Largest hero headline |
| `{typography.display-lg}` | 56px | 500 | 1.10 | -1.4px | Section opener headlines |
| `{typography.display-md}` | 40px | 500 | 1.15 | -0.8px | Sub-section headlines |
| `{typography.headline}` | 28px | 500 | 1.20 | -0.5px | Pricing tier titles, CTA banner |
| `{typography.card-title}` | 22px | 500 | 1.25 | -0.3px | Card title, feature card |
| `{typography.subhead}` | 20px | 400 | 1.40 | -0.2px | Lead body, intro paragraphs |
| `{typography.body-lg}` | 18px | 400 | 1.50 | -0.1px | Hero subhead, lead paragraphs |
| `{typography.body}` | 16px | 400 | 1.50 | 0 | Default body |
| `{typography.body-sm}` | 14px | 400 | 1.50 | 0 | Card body, footer |
| `{typography.caption}` | 12px | 400 | 1.40 | 0 | Captions, meta |
| `{typography.button}` | 15px | 500 | 1.20 | 0 | Button labels |
| `{typography.eyebrow}` | 14px | 500 | 1.30 | 0 | Section eyebrow (sentence case) |
| `{typography.mono}` | 13px | 400 | 1.50 | 0 | SaansMono for code in mockups |
2026-08-09 23:09:06 +08:00
### Principles
- **Weight 500 carries display.** Saans at 500 reads as confident without bold.
- **Negative letter-spacing scales with size.** -2.0px at 72px (≈3% of size), down to 0 on body.
- **Line-heights tighten on display, relax on body.** 1.05 at display-xl, 1.50 at body.
- **No mono on chrome.** SaansMono lives in product UI; marketing chrome stays in Saans.
- **Eyebrow uses sentence case** at 14px / 500 weight — no all-caps tracking.
### Note on Font Substitutes
If implementing without Saans, suitable substitutes include **Söhne** (paid), **Inter** (free, weight 500), or **Geist Sans** (free). Inter at weight 500 is the closest free substitute; SaansMono can be approximated with **JetBrains Mono** at weight 400.
## Layout
### Spacing System
- **Base unit**: 8px.
- **Tokens (front matter)**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.section}` 96px.
- Card interior padding: `{spacing.lg}` 24px on pricing/feature cards; `{spacing.xl}` 32px on testimonial/discount cards; `{spacing.xxl}` 48px on CTA banners.
2026-08-10 16:58:16 +08:00
- Button padding: 10px vertical · 18px horizontal.
2026-08-09 23:09:06 +08:00
### Grid & Container
- Max content width sits around 1280px.
- Card grids are 3-up at desktop, 2-up at tablet, 1-up at mobile.
- Pricing tier grid is 3-up; comparison strip below shows checkmarks per tier.
- Product mockup cards span full content width — they're the protagonist of every section.
### Whitespace Philosophy
The cream canvas does the work white space would in another brand. Sections separate by ample vertical breathing room (`{spacing.section}` 96px) plus the lift-onto-white cards.
## Elevation & Depth
2026-08-29 20:36:44 +08:00
| Level | Treatment | Use |
| ----------------- | ---------------------------------------------------------------- | --------------------------------------------- |
| 0 (flat) | No shadow, no border | Default for body type, hero text, footer |
2026-08-09 23:09:06 +08:00
| 1 (lift on cream) | `{colors.surface-1}` white background on `{colors.canvas}` cream | Pricing cards, feature cards, product mockups |
2026-08-29 20:36:44 +08:00
| 2 (hairline lift) | `{colors.surface-1}` + 1px `{colors.hairline}` border | Floating tiles with extra definition |
| 3 (deep accent) | `{colors.inverse-canvas}` true black | Quote / testimonial callout strip |
2026-08-09 23:09:06 +08:00
Intercom resists drop shadows. Depth is communicated by the white-on-cream surface change.
### Decorative Depth
- **Product UI mockups** dominate every section's right column or center band — these are screenshots, not illustrations.
- **No atmospheric gradients, no spotlight cards, no pastel section blocks.** The cream + white system is deliberately restrained.
## Shapes
### Border Radius Scale
2026-08-29 20:36:44 +08:00
| Token | Value | Use |
| ---------------- | ----- | -------------------------------------- |
| `{rounded.xs}` | 6px | Small chips, badges |
| `{rounded.sm}` | 6px | Inline tags |
| `{rounded.md}` | 6px | All buttons, form inputs |
| `{rounded.lg}` | 6px | Pricing cards, feature cards, FAQ rows |
| `{rounded.xl}` | 6px | Product mockup cards |
| `{rounded.xxl}` | 6px | Oversized CTA banners |
| `{rounded.pill}` | 6px | Tab toggles (legacy alias) |
| `{rounded.full}` | 6px | Avatar containers (legacy alias) |
2026-08-09 23:09:06 +08:00
### Photography & Illustration Geometry
2026-08-10 16:58:16 +08:00
- Product UI screenshots dominate the marketing surface; they sit in 6px-radius tiles.
2026-08-09 23:09:06 +08:00
- Customer logo tiles render at small sizes (~24– 32px logo height) on `{colors.canvas}` cream with no border.
2026-08-10 16:58:16 +08:00
- Avatar containers in testimonial cards use the same 6px radius at 40– 48px sizes.
2026-08-09 23:09:06 +08:00
## Components
### Buttons
** `button-primary` ** — Charcoal CTA. The default primary CTA across all pages.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.ink}` , text `{colors.on-primary}` , type `{typography.button}` , padding 10px 18px, rounded `{rounded.md}` .
- Pressed state lives in `button-primary-pressed` .
** `button-secondary` ** — White button on cream. Used for secondary CTAs.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.button}` , padding 10px 18px, rounded `{rounded.md}` . 1px `{colors.hairline}` border.
** `button-tertiary` ** — Plain text button.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.canvas}` , text `{colors.ink}` , type `{typography.button}` , rounded `{rounded.md}` , padding 10px 18px.
** `button-fin` ** — Fin Orange CTA — reserved for Fin AI product CTAs.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.fin-orange}` , text `{colors.on-primary}` , type `{typography.button}` , rounded `{rounded.md}` , padding 10px 18px.
### Pricing Tabs
2026-08-10 16:58:16 +08:00
** `pricing-tab-default` ** + ** `pricing-tab-selected` ** — Compact tab toggle on `/pricing` .
2026-08-29 20:36:44 +08:00
2026-08-10 16:58:16 +08:00
- Default: `{colors.canvas}` background, `{colors.ink-muted}` text, rounded `{rounded.md}` (6px).
2026-08-09 23:09:06 +08:00
- Selected: `{colors.surface-1}` white background, `{colors.ink}` text — selected = lift onto white.
### Cards & Containers
** `pricing-card` ** — Each tier on `/pricing` .
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.lg}` , padding 24px.
** `pricing-card-featured` ** — Featured / recommended tier — inverts to charcoal.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.ink}` , text `{colors.on-primary}` , otherwise identical structure.
** `feature-card` ** — Generic feature highlight.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.lg}` , padding 24px.
** `product-mockup-card` ** — The dominant card type — frames a high-fidelity product UI screenshot.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.xl}` , padding 24px.
** `testimonial-card` ** — Customer quote with avatar + name + company.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.body-lg}` , rounded `{rounded.lg}` , padding 32px.
** `startup-discount-card` ** — The "Startups get 90% off" tinted card.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-2}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.lg}` , padding 32px.
** `customer-logo-tile` ** — Small tile in the customer marquee.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.canvas}` , text `{colors.ink-muted}` , type `{typography.caption}` , rounded `{rounded.xs}` , padding 16px.
** `cta-banner` ** — Closing CTA panel near page bottom.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.headline}` , rounded `{rounded.lg}` , padding 48px.
### Inputs & Forms
** `text-input` ** + ** `text-input-focused` ** — Form fields on contact and search overlays.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.surface-1}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.md}` , padding 10px 14px.
### FAQ
** `faq-row` ** — Expandable accordion row in the pricing FAQ.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.canvas}` , text `{colors.ink}` , type `{typography.body}` , rounded `{rounded.md}` , padding 24px. 1px `{colors.hairline-soft}` bottom rule.
### Navigation
** `top-nav` ** — Sticky cream bar with the Intercom wordmark left, nav links centered, log-in + sign-up pair right.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.canvas}` , text `{colors.ink}` , type `{typography.body-sm}` , height 56px.
### Footer
** `footer` ** — Dense link grid on `{colors.canvas}` cream with the Intercom wordmark left.
2026-08-29 20:36:44 +08:00
2026-08-09 23:09:06 +08:00
- Background `{colors.canvas}` , text `{colors.ink-muted}` , type `{typography.caption}` , padding 64px 32px.
## Do's and Don'ts
### Do
- Reserve `{colors.canvas}` cream as the system's anchor surface — never replace with pure white.
- Lift cards from cream onto white (`{colors.surface-1}` ) for hierarchy.
- Use ** `button-fin` ** Fin Orange ONLY on Fin AI product CTAs and Fin badges.
- Pair Saans display at weight 500 with body at 400.
- Use product UI screenshots as the protagonist of every section.
2026-08-10 16:58:16 +08:00
- Use the unified 6px radius for cards, controls, tags, avatars, and product mockup tiles.
2026-08-09 23:09:06 +08:00
- Apply negative tracking proportionally to display sizes.
### Don't
- Don't use pure white as the canvas.
- Don't use Fin Orange as a section background or as a generic primary CTA.
- Don't add drop shadows to floating cards.
- Don't introduce a second display family.
2026-08-10 16:58:16 +08:00
- Don't introduce radius values other than the unified 6px token (except structural `rounded-none` ).
2026-08-09 23:09:06 +08:00
- Don't write all-caps tracked eyebrows.
- Don't promote the report palette colors to brand-level surfaces.
- Don't combine charcoal CTAs and Fin Orange CTAs in the same viewport.
## Responsive Behavior
### Breakpoints
2026-08-29 20:36:44 +08:00
| Name | Width | Key Changes |
| ---------- | ------ | --------------------------------------------------- |
| Desktop-XL | 1440px | Default desktop layout |
| Desktop | 1280px | Card grid 3-up maintained |
| Tablet | 1024px | Card grid 3-up → 2-up |
| Mobile-Lg | 768px | Pricing comparison becomes accordion; nav hamburger |
| Mobile | 480px | Single-column; display-xl scales 72px → ~32px |
2026-08-09 23:09:06 +08:00
### Touch Targets
- CTAs hold ≥40px tap height across viewports.
2026-08-10 16:58:16 +08:00
- Pricing tabs hold ≥40px tap height.
2026-08-09 23:09:06 +08:00
- Form inputs hold ≥44px tap target on touch.
### Collapsing Strategy
- **Top nav**: links collapse to hamburger below 768px; primary CTA stays visible.
- **Card grids**: 3-up → 2-up at 1024px → 1-up below 768px.
- **Pricing comparison**: collapses into per-tier accordion below 768px.
- **Display type**: `{typography.display-xl}` 72px scales toward `{typography.display-md}` 40px on mobile.
### Image Behavior
- Product UI screenshots maintain aspect ratio and never crop.
- Customer logos in the marquee may collapse from 6-up to 3-up below 768px.
## Iteration Guide
1. Focus on ONE component at a time and reference it by its `components:` token name.
2. When introducing a section, decide first whether it sits on `{colors.canvas}` cream (default) or whether it lifts onto a `{colors.surface-1}` white card.
3. Default body to `{typography.body}` at weight 400.
4. Run `npx @google/design.md lint DESIGN.md` after edits.
5. Add new variants as separate component entries.
6. Treat Fin Orange as a product accent: Fin CTA and Fin badge only.
7. Lead every section with a product screenshot.
## Known Gaps
- The **report palette** lives in product analytics dashboards rendered inside marketing mockups; they are documented for completeness but are not brand surface colors.
- Form-field error and validation styling is not visible on the inspected pages.
- Dark mode is not documented because the marketing site does not ship a dark theme.
- The helpdesk / inbox product surfaces show in-product UI states that aren't formal marketing chrome.
- Saans and SaansMono are proprietary; an open-source substitute (Inter, Söhne, Geist) is acceptable.