Source site
Fintech & Crypto
Stripe
stripe.com
- Extracted pattern
- Payment infrastructure with crisp typography, restrained surfaces, and violet conversion moments.
- Best for
- API docs, fintech onboarding, checkout flows, and B2B SaaS.
- Source
- https://stripe.com/
design.md
---
version: alpha
name: Stripe-design-system
description: "Stripe is a financial infrastructure brand whose surface is a clean white canvas punctuated by a single bold violet primary — #533afd — and a signature multi-stop aurora gradient (lavender through violet through magenta through coral through amber) that sweeps across hero sections as the brand's entire decorative system. A variable-weight geometric sans (sohne-var) carries every headline at weight 300 — deliberately light, almost editorial — and every body line at weight 400. The type is set in deep navy ink on white, with aggressive negative tracking at display sizes. Buttons are square-cornered by financial-platform standards: 4 px radius, never a pill. The brand reads as precise, trustworthy, and quietly modern."
colors:
primary: "#533afd"
on-primary: "#ffffff"
ink: "#061b31"
body: "#061b31"
mute: "#425466"
hairline: "#e6ebf1"
canvas: "#ffffff"
canvas-soft: "#f2f7fe"
canvas-navy: "#061b31"
link: "#533afd"
success: "#00a67e"
error: "#cd3d64"
warning: "#e8a000"
accent-gradient-stop-1: "#bdb4ff"
accent-gradient-stop-2: "#643afd"
accent-gradient-stop-3: "#533afd"
gradient-aurora-lavender: "#bdb4ff"
gradient-aurora-violet: "#533afd"
gradient-aurora-magenta: "#d946a8"
gradient-aurora-coral: "#f97316"
gradient-aurora-amber: "#f59e0b"
on-navy: "#ffffff"
nav-text: "#061b31"
typography:
display-xl:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 48px
fontWeight: 300
lineHeight: 55.2px
letterSpacing: -0.96px
display-lg:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 32px
fontWeight: 300
lineHeight: 35.2px
letterSpacing: -0.64px
display-md:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 26px
fontWeight: 300
lineHeight: 29.12px
letterSpacing: -0.26px
display-sm:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 22px
fontWeight: 300
lineHeight: 26.4px
letterSpacing: -0.22px
body-lg:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 18px
fontWeight: 400
lineHeight: 28px
body-md:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 16px
fontWeight: 400
lineHeight: 24px
body-sm:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 14px
fontWeight: 400
lineHeight: 20px
caption:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 12px
fontWeight: 400
lineHeight: 16px
label-mono:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 12px
fontWeight: 400
lineHeight: 16px
button-md:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 14px
fontWeight: 400
lineHeight: 20px
button-lg:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 16px
fontWeight: 400
lineHeight: 24px
nav-link:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 15px
fontWeight: 400
lineHeight: 20px
stat-display:
fontFamily: sohne-var, "SF Pro Display", sans-serif
fontSize: 13px
fontWeight: 400
lineHeight: 18px
rounded:
none: 0px
button: 4px
card: 6px
md: 8px
lg: 12px
xl: 20px
full: 9999px
spacing:
xxs: 4px
xs: 8px
sm: 12px
md: 16px
lg: 24px
xl: 32px
2xl: 40px
3xl: 48px
4xl: 64px
5xl: 96px
6xl: 128px
section: 160px
components:
nav-bar:
backgroundColor: "{colors.canvas}"
textColor: "{colors.nav-text}"
typography: "{typography.nav-link}"
height: 64px
padding: "{spacing.md} {spacing.xl}"
nav-link:
textColor: "{colors.nav-text}"
typography: "{typography.nav-link}"
padding: "{spacing.xxs} {spacing.xs}"
nav-cta-signin:
backgroundColor: "{colors.canvas}"
textColor: "{colors.primary}"
borderColor: "{colors.primary}"
typography: "{typography.button-md}"
rounded: "{rounded.button}"
padding: "{spacing.xs} {spacing.md}"
nav-cta-contact:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-md}"
rounded: "{rounded.button}"
padding: "{spacing.xs} {spacing.md}"
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-lg}"
rounded: "{rounded.button}"
padding: 15.5px {spacing.lg} 16.5px
button-secondary:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.hairline}"
typography: "{typography.button-lg}"
rounded: "{rounded.button}"
padding: 15.5px {spacing.lg} 16.5px
button-google-oauth:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.hairline}"
typography: "{typography.button-lg}"
rounded: "{rounded.button}"
padding: 15.5px {spacing.lg} 16.5px
hero-band:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.display-xl}"
padding: "{spacing.4xl} {spacing.xl}"
stat-ticker:
backgroundColor: "{colors.canvas}"
textColor: "{colors.mute}"
typography: "{typography.stat-display}"
padding: "{spacing.md} {spacing.xl}"
logo-strip:
backgroundColor: "{colors.canvas}"
textColor: "{colors.mute}"
typography: "{typography.body-sm}"
padding: "{spacing.lg} {spacing.xl}"
feature-card:
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.card}"
padding: "{spacing.3xl} {spacing.md}"
feature-band:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
typography: "{typography.display-lg}"
padding: "{spacing.5xl} {spacing.xl}"
product-card:
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.card}"
padding: "{spacing.lg} {spacing.lg}"
navy-band:
backgroundColor: "{colors.canvas-navy}"
textColor: "{colors.on-navy}"
typography: "{typography.display-lg}"
padding: "{spacing.5xl} {spacing.xl}"
footer:
backgroundColor: "{colors.canvas-navy}"
textColor: "{colors.on-navy}"
typography: "{typography.body-sm}"
padding: "{spacing.4xl} {spacing.xl}"
link-inline:
textColor: "{colors.primary}"
typography: "{typography.body-md}"
badge-stat:
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.mute}"
typography: "{typography.caption}"
rounded: "{rounded.button}"
padding: "{spacing.xxs} {spacing.xs}"
chat-widget:
backgroundColor: "{colors.canvas}"
textColor: "{colors.ink}"
borderColor: "{colors.hairline}"
typography: "{typography.body-sm}"
rounded: "{rounded.card}"
padding: "{spacing.sm} {spacing.md}"
ex-pricing-tier:
description: Default pricing tier card — canvas-soft surface with hairline border and square-cornered chrome.
backgroundColor: "{colors.canvas-soft}"
textColor: "{colors.ink}"
borderColor: "{colors.hairline}"
rounded: "{rounded.card}"
padding: "{spacing.xl}"
ex-pricing-tier-featured:
description: Featured pricing tier — polarity-flipped to primary violet surface with white text.
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
rounded: "{rounded.card}"
padding: "{spacing.xl}"
ex-product-selector:
description: What's Included summary card — canvas-soft surface for SaaS add-on feature tiers.
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
ex-cart-drawer:
description: Subscription summary drawer — line items per add-on on white canvas.
backgroundColor: "{colors.canvas}"
rounded: "{rounded.card}"
padding: "{spacing.lg}"
item-divider: "{colors.hairline}"
ex-app-shell-row:
description: Sidebar nav row. Active state uses primary violet as the left-edge indicator bar.
backgroundColor: "{colors.canvas}"
activeIndicator: "{colors.primary}"
rounded: "{rounded.button}"
padding: "{spacing.xs} {spacing.sm}"
ex-data-table-cell:
description: Data table chrome. Header uses caption typography; body uses body-sm.
headerBackground: "{colors.canvas-soft}"
headerTypography: "{typography.caption}"
bodyTypography: "{typography.body-sm}"
cellPadding: "{spacing.xs} {spacing.sm}"
rowBorder: "{colors.hairline}"
ex-auth-form-card:
description: Sign-in card — canvas-soft surface with form inputs and primary button CTA inside.
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.xl}"
ex-modal-card:
description: Modal dialog surface — white canvas with hairline border and card radius.
backgroundColor: "{colors.canvas}"
rounded: "{rounded.card}"
padding: "{spacing.xl}"
ex-empty-state-card:
description: Empty-state frame — generous padding on canvas-soft.
backgroundColor: "{colors.canvas-soft}"
rounded: "{rounded.card}"
padding: "{spacing.3xl}"
captionTypography: "{typography.body-md}"
ex-toast:
description: Toast notification — white card with hairline border and button radius.
backgroundColor: "{colors.canvas}"
rounded: "{rounded.button}"
padding: "{spacing.sm} {spacing.md}"
typography: "{typography.body-sm}"
---
## Overview
Stripe is a financial infrastructure brand — the page is a developer and business platform whose marketing surface is engineered to inspire confidence in technical buyers and CFOs simultaneously. It achieves this through one of the cleanest restraint systems in fintech: a pure white `{colors.canvas}` canvas, deep-navy `{colors.ink}` copy, and a single violet primary `{colors.primary}` that carries every conversion target. The only moment the brand introduces colour at scale is the signature aurora gradient — a sweeping multi-stop ribbon of lavender through violet through magenta through coral through amber — that occupies the upper-right quadrant of the hero as the page's entire decorative gesture. That gradient is the brand's identity mark at display scale.
Type is the second decisive voice. A variable-weight geometric sans (`sohne-var`) carries every display headline at weight 300 — deliberately lighter than any comparable platform's headline face — and every body paragraph at 400. The result reads as calm authority: the brand never shouts. Display sizes are tracked aggressively negative (`-0.96px` at 48 px hero, `-0.64px` at 32 px section), so the wordmark-level openness is reserved for body text only. Headlines are sentence-case throughout; the brand never uses all-caps marketing headings.
Surfaces use a two-step ladder: `{colors.canvas}` pure white for the hero and primary sections, `{colors.canvas-soft}` `#f2f7fe` (a pale blue-white) for feature cards and inset regions. The deep-navy `{colors.canvas-navy}` `#061b31` serves as the polarity-flipped dark band for footer and closing sections. Buttons are 4 px radius — the brand's most distinctive geometric decision. In a world of pill CTAs, Stripe insists on near-square corners for all interactive controls, which reads as precise and platform-grade rather than soft-consumer. The "Sign up with Google" OAuth button sits alongside the primary CTA as a peer, not a secondary afterthought.
**Key Characteristics:**
- A single violet primary `{colors.primary}` carries every primary CTA. The "Contact sales" nav button and "Get started" hero button are both this violet — conversion and enterprise touchpoints use the same ink.
- The aurora gradient (lavender → violet → magenta → coral → amber) is the entire decorative system at hero scale. It is rendered as a large swept ribbon, never miniaturised, never reduced to a single stop.
- Every button — marketing scale or nav scale — uses `{rounded.button}` 4 px radius. No pill shapes anywhere in the Stripe system.
- Cards use `{rounded.card}` 6 px, just one step softer than the buttons, maintaining the near-square aesthetic throughout.
- The type weight 300 for all display sizes is structurally non-negotiable. Reversing to 600 or 700 breaks the brand entirely.
## Colors
### Brand & Accent
- **Primary Violet** (`{colors.primary}` — `#533afd`): The brand's one true accent. Every primary CTA button, every inline link, every active indicator. The "Get started" hero button, the "Contact sales" nav CTA, and hover states across the product all resolve to this tone.
- **Aurora Lavender** (`{colors.gradient-aurora-lavender}` — `#bdb4ff`): The lightest stop of the hero aurora gradient — the soft lavender at the gradient's upper reach. Also used as the lightest accent-gradient stop (`--accent-gradient-color-stop-1`).
- **Aurora Violet Deep** (`{colors.accent-gradient-stop-2}` — `#643afd`): The mid-point stop, between the lavender and the full primary, used in the gradient sweep.
- **Aurora Magenta** (`{colors.gradient-aurora-magenta}` — `#d946a8`): The warm-pink stop visible in the hero gradient's middle band.
- **Aurora Coral** (`{colors.gradient-aurora-coral}` — `#f97316`): The orange-coral stop visible at the gradient's lower-right reach.
- **Aurora Amber** (`{colors.gradient-aurora-amber}` — `#f59e0b`): The warm amber terminus of the gradient sweep.
### Surface
- **Canvas** (`{colors.canvas}` — `#ffffff`): Pure white. The hero, navigation, and primary content sections all sit on this ground.
- **Canvas Soft** (`{colors.canvas-soft}` — `#f2f7fe`): A cool blue-tinted near-white used for feature cards, product cards, and inset regions. The brand's secondary surface — it signals "contained content" without introducing a strong tonal shift.
- **Canvas Navy** (`{colors.canvas-navy}` — `#061b31`): The deep navy used for the footer band and closing CTA sections. The polarity-flip surface when the brand wants gravity and authority.
- **Hairline** (`{colors.hairline}` — `#e6ebf1`): 1 px borders on cards, inputs, and secondary buttons.
### Text
- **Ink** (`{colors.ink}` — `#061b31`): The primary text colour — a deep navy-near-black, not pure black. Every headline and body paragraph on white or soft surfaces.
- **Mute** (`{colors.mute}` — `#425466`): Secondary text — sub-labels, stat captions, footer secondary lines, nav dropdown descriptors.
- **On Primary / On Navy** (`{colors.on-primary}` / `{colors.on-navy}` — `#ffffff`): All text on violet primary or navy-canvas surfaces.
### Semantic
- **Link** (`{colors.link}` — `#533afd`): Shares the primary violet. Inline links are set in this tone with underline-on-hover.
- **Success** (`{colors.success}` — `#00a67e`): Status indicators for completed payments and live integrations.
- **Error** (`{colors.error}` — `#cd3d64`): Validation and failed-state red-pink, visible in form and dashboard error states.
- **Warning** (`{colors.warning}` — `#e8a000`): Pending or cautionary status indicator.
## Typography
### Font Family
One variable-weight geometric sans — `sohne-var` — carries the entire system. It operates in two weight registers: **300** (light) for every display headline and **400** (regular) for every body paragraph, button label, and nav link. The face never appears at 600 or 700 in any captured marketing surface; the brand's restraint is structural, not accidental.
There is no monospace face in use on the marketing homepage, though Stripe's developer documentation surfaces use a code face for terminal blocks.
### Hierarchy
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-xl}` | 48px | 300 | 55.2px | -0.96px | Hero headline ("Financial infrastructure to grow your revenue.") |
| `{typography.display-lg}` | 32px | 300 | 35.2px | -0.64px | Section headlines, product-category headings |
| `{typography.display-md}` | 26px | 300 | 29.12px | -0.26px | Card cluster headlines, feature-block headings |
| `{typography.display-sm}` | 22px | 300 | 26.4px | -0.22px | Inline sub-headings, product-section eyebrows |
| `{typography.body-lg}` | 18px | 400 | 28px | 0 | Lead paragraphs under section headlines |
| `{typography.body-md}` | 16px | 400 | 24px | 0 | Default body paragraph, card body copy |
| `{typography.body-sm}` | 14px | 400 | 20px | 0 | Secondary body, nav dropdown text, footer links |
| `{typography.caption}` | 12px | 400 | 16px | 0 | Fine print, badge labels, footer secondary lines |
| `{typography.button-lg}` | 16px | 400 | 24px | 0 | Marketing-scale button labels ("Get started", "Contact sales") |
| `{typography.button-md}` | 14px | 400 | 20px | 0 | Nav-scale button labels, small CTAs |
| `{typography.nav-link}` | 15px | 400 | 20px | 0 | Top navigation link items ("Products", "Solutions", "Pricing") |
| `{typography.stat-display}` | 13px | 400 | 18px | 0 | Live ticker labels ("Global GDP running on Stripe: 1.664%") |
### Principles
- **Weight 300 for display is the brand's voice.** Stripe's headlines read as precise and editorial precisely because they are light. Increasing display weight to 500 or 600 collapses the brand into generic SaaS.
- **Negative tracking at display scale.** `-0.96px` at 48 px and `-0.64px` at 32 px are non-negotiable. The brand does not open-track any display size.
- **Sentence-case headlines throughout.** No all-caps. No title case on headlines. The first word capitalised, then natural sentence flow.
- **Weight 400 for everything interactive.** Button labels, nav links, and inline CTAs are all 400 — the brand does not bold its interactive text. The violet colour does the work of signalling interactivity.
- **One face, two weights.** The simplicity of the system — one variable font, two operating weights — is a deliberate brand choice. Do not introduce a second display face.
### Note on Font Substitutes
`sohne-var` is a proprietary variable-weight geometric sans (by Klim Type Foundry, licensed by Stripe). The closest open-source substitute for weight 300 display usage is *Inter* at weight 300 with `font-feature-settings: "cv05", "cv08"` for the more geometric alternates. *Plus Jakarta Sans* at 300 is a second-best option. The variable-font axis (`wght`) must be available for the display-light / body-regular split to work correctly.
## Layout
### Spacing System
- **Base unit**: 4 px. Every captured padding and gap value is a multiple of 4 px.
- **Tokens**: `{spacing.xxs}` 4 px · `{spacing.xs}` 8 px · `{spacing.sm}` 12 px · `{spacing.md}` 16 px · `{spacing.lg}` 24 px · `{spacing.xl}` 32 px · `{spacing.2xl}` 40 px · `{spacing.3xl}` 48 px · `{spacing.4xl}` 64 px · `{spacing.5xl}` 96 px · `{spacing.6xl}` 128 px · `{spacing.section}` 160 px.
- **Hero band padding**: `{spacing.4xl}` 64 px top/bottom to give the aurora gradient room to sweep. The gradient occupies the right half of the hero's visual weight.
- **Card interior padding**: feature cards use `{spacing.3xl}` 48 px top/bottom with `{spacing.md}` 16 px horizontal — generously padded to let single-concept content breathe inside a contained surface.
- **Nav padding**: `{spacing.md}` 16 px vertical, `{spacing.xl}` 32 px horizontal. The nav sits tight relative to the hero's generous padding.
### Grid & Container
- **Max width**: approximately 1200 px, centred with horizontal gutters of `{spacing.xl}` 32 px on desktop, `{spacing.md}` 16 px on mobile.
- **Column patterns**:
- Hero: single-column headline + CTA cluster left-aligned with gradient backdrop right.
- Logo strip: 7–8 logos across in a single flex row, full bleed edge-to-edge.
- Feature card row: 3-up or 4-up grid at desktop, collapsing to 1-up at mobile.
- Product section: 2-up split (copy left, product illustration right).
- Footer: 4–5 column nav grid on navy canvas.
### Whitespace Philosophy
The aurora gradient handles all decorative weight in the hero; whitespace handles section separation everywhere else. Section-to-section spacing is `{spacing.5xl}` 96 px, giving each product cluster its own visual territory. Inside cards the headline/body stack is tight (8 px gap), then a gap before any CTA or link. The page reads as confident and unhurried — large inter-section gaps, tight intra-card stacks.
## Elevation & Depth
| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No shadow, no border. | Full-bleed hero band, footer navy band, logo strip. |
| Level 1 — Hairline | `0 0 0 1px {colors.hairline}` 1 px border. | Feature cards on soft-canvas background; secondary button chrome. |
| Level 2 — Subtle Drop | `0px 2px 8px rgba(6, 27, 49, 0.06)` | Slightly elevated product cards and form inputs. |
| Level 3 — Card Float | `0px 4px 16px rgba(6, 27, 49, 0.08)` | The chat widget, modal dialogs, dropdown menus. |
Stripe's elevation is exceptionally flat — the brand relies on background-colour contrast (`{colors.canvas}` vs `{colors.canvas-soft}`) rather than shadows to separate layers. When shadows appear, they are single-offset and navy-tinted (derived from `{colors.ink}`), never a generic grey drop.
## Shapes
### Border Radius Scale
| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Full-bleed hero and footer bands. |
| `{rounded.button}` | 4px | Every button and interactive control — "Get started", "Sign up with Google", "Sign in", "Contact sales". The brand's most distinctive geometric signature. |
| `{rounded.card}` | 6px | Feature cards, product cards, form inputs, the chat widget. |
| `{rounded.md}` | 8px | Slightly larger container chrome where cards host image or illustration caps. |
| `{rounded.lg}` | 12px | Larger modal or dialog surfaces. |
| `{rounded.xl}` | 20px | Rounded container panels on specific product pages. |
| `{rounded.full}` | 9999px | Avatar circles, icon containers only — never used for CTA buttons. |
The absence of pill buttons is the defining geometric statement of the Stripe system. 4 px is not a design accident — it is a brand position: we are infrastructure, not consumer.
## Components
### Buttons
**`button-primary`** — the canonical violet CTA, marketing scale.
- Background `{colors.primary}`, text `{colors.on-primary}`, label in `{typography.button-lg}` (16 px / 400), padding `15.5px {spacing.lg} 16.5px`, shape `{rounded.button}` 4 px. Renders ~48 px tall in marketing flex layouts.
**`button-secondary`** — the white outlined peer button ("Sign up with Google").
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border, same typography and padding as `button-primary`, shape `{rounded.button}` 4 px.
**`button-google-oauth`** — the Google-branded sign-up button with the Google logo prefix.
- Background `{colors.canvas}`, text `{colors.ink}`, border `{colors.hairline}`, typography `{typography.button-lg}`, shape `{rounded.button}` 4 px. Hosts the Google coloured `G` logomark as a leading icon.
**`nav-cta-signin`** — the "Sign in" nav button, outlined violet.
- Background `{colors.canvas}`, text `{colors.primary}`, border `{colors.primary}`, label in `{typography.button-md}`, shape `{rounded.button}` 4 px.
**`nav-cta-contact`** — the "Contact sales" nav CTA, filled violet.
- Background `{colors.primary}`, text `{colors.on-primary}`, label in `{typography.button-md}`, shape `{rounded.button}` 4 px.
### Navigation
**`nav-bar`** — the sticky top navigation.
- Background `{colors.canvas}`, text `{colors.nav-text}`, height 64 px, padding `{spacing.md} {spacing.xl}`. Layout: Stripe wordmark left, five dropdown link groups centre, "Sign in" + "Contact sales" cluster right.
**`nav-link`** — the dropdown trigger links in the nav row.
- Text `{colors.nav-text}`, set in `{typography.nav-link}`, padding `{spacing.xxs} {spacing.xs}`. Each carries a chevron-down indicator for the dropdown.
### Hero & Bands
**`hero-band`** — the white hero with aurora gradient backdrop.
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.4xl} {spacing.xl}`. Inside: a live stat ticker above the headline, the headline in `{typography.display-xl}` (weight 300, sentence-case), body lead in `{typography.body-lg}`, then a CTA row with `button-primary` ("Get started") + `button-google-oauth` ("Sign up with Google"). The aurora gradient occupies the upper-right region of the hero as a swept ribbon.
**`stat-ticker`** — the "Global GDP running on Stripe: 1.664%" live counter above the hero headline.
- Background `{colors.canvas}`, text split between `{colors.ink}` (label) and `{colors.mute}` (value), set in `{typography.stat-display}`, padding `{spacing.md} {spacing.xl}`.
**`feature-band`** — a white section hosting product feature copy and illustration.
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.5xl} {spacing.xl}`. Section headline in `{typography.display-lg}`; supporting body in `{typography.body-md}`.
**`navy-band`** — the polarity-flipped deep navy closing section.
- Background `{colors.canvas-navy}`, text `{colors.on-navy}`, padding `{spacing.5xl} {spacing.xl}`. Headline in `{typography.display-lg}` white on navy; CTA resolves to the white-outlined `button-secondary` variant.
### Cards & Containers
**`feature-card`** — the canonical product feature card (3-up or 4-up grid sections).
- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.3xl} {spacing.md}` (48 px / 16 px), shape `{rounded.card}` 6 px. Carries a product icon or illustration at top, headline in `{typography.display-md}`, body in `{typography.body-md}`.
**`product-card`** — the more compact product-category tile.
- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.lg} {spacing.lg}`, shape `{rounded.card}` 6 px.
### Supporting Elements
**`logo-strip`** — the customer-logo marquee row (OpenAI, Amazon, NVIDIA, Ford, Coinbase, Google, Shopify, etc.).
- Background `{colors.canvas}`, text `{colors.mute}`, padding `{spacing.lg} {spacing.xl}`. Logos rendered in their native colours or monochrome at consistent height in a single flex row.
**`badge-stat`** — small inline label chips for live data captions.
- Background `{colors.canvas-soft}`, text `{colors.mute}`, set in `{typography.caption}`, padding `{spacing.xxs} {spacing.xs}`, shape `{rounded.button}` 4 px.
**`chat-widget`** — the "Chat with Stripe sales" floating widget in the bottom-right corner.
- Background `{colors.canvas}`, text `{colors.ink}`, border `{colors.hairline}`, set in `{typography.body-sm}`, shape `{rounded.card}` 6 px, padding `{spacing.sm} {spacing.md}`.
**`footer`** — the deep navy footer with multi-column nav.
- Background `{colors.canvas-navy}`, text `{colors.on-navy}`, padding `{spacing.4xl} {spacing.xl}`. Column labels in `{typography.caption}` (uppercase-styled); link rows in `{typography.body-sm}`.
**`link-inline`** — inline body-copy links.
- Text `{colors.link}` (`#533afd`), set in `{typography.body-md}`, underlined on hover.
## Do's and Don'ts
### Do
- Use `{colors.primary}` (`#533afd`) for every primary CTA button, active nav indicator, and inline link. Violet IS the conversion signal.
- Keep every button at `{rounded.button}` 4 px. The near-square shape is the brand's geometric identity — it signals platform infrastructure, not consumer product.
- Set display headlines at weight 300. The light weight paired with negative tracking is the brand's most distinctive typographic statement.
- Use the aurora gradient at hero scale only — the full swept ribbon occupying a generous portion of the hero backdrop. Never reduce it to a small swatch, icon fill, or single-colour extract.
- Cycle page surfaces between `{colors.canvas}` white and `{colors.canvas-soft}` blue-white for feature sections; use `{colors.canvas-navy}` as the closing polarity-flip band.
- Keep card radius at `{rounded.card}` 6 px — one step above the button, maintaining a consistent near-square aesthetic throughout.
- Rely on background-colour contrast (`canvas` vs `canvas-soft`) as the primary depth cue. Shadows are used sparingly and with navy tint, not generic grey.
### Don't
- Don't round CTAs to a pill or any radius above 6 px. A pill-shaped CTA would directly contradict the brand's infrastructure positioning.
- Don't increase display font weight above 300. Weight 500, 600, or 700 in sohne-var makes the brand read as a generic growth-marketing site, not precision infrastructure.
- Don't apply the aurora gradient at icon or badge scale. It belongs to the hero as an atmospheric gesture, not as a colour-fill shortcut for small elements.
- Don't use the aurora gradient's individual colour stops as standalone accents in UI chrome. The gradient is a unified object — only the primary violet `{colors.primary}` is extracted from it as a standalone brand colour.
- Don't introduce a heavy drop-shadow on cards. The brand's elevation is near-flat; cards sit on the page via surface-colour contrast and hairline borders.
- Don't use all-caps or title-case headlines. Sentence-case is non-negotiable across every scale.
- Don't use a second typeface. The sohne-var variable font at two weights is the complete typographic system.
Preview from tokens
AI-enriched