Overview
Vercel is a developer-platform brand — the page is a deployment dashboard's marketing surface, written for engineers who already know the syntax. It earns that posture with one of the cleanest stark systems on the web: near-white {colors.canvas-soft} body background, ink-near-black {colors.ink} text, a 200-step gray scale that gives every divider, border, and disabled state its own deliberate step. The only place the brand introduces colour at marketing scale is the multi-stop mesh gradient ({colors.gradient-develop-start} → {colors.gradient-preview-end} → {colors.gradient-ship-start} → cyan / magenta / amber) that floats in atmospheric backdrops, never miniaturised to a swatch. That gradient is the entire decoration system.
Type is the second decisive voice. The brand's own custom geometric sans (Geist) carries display, body, button — everything narrative — at weight 600 for display, 500 for buttons, 400 for body. A matching monospaced face (Geist Mono) carries technical labels: terminal mockups, code blocks, sometimes filename captions. Headlines are sentence-case with aggressive negative letter-spacing (-2.4px at 48 px hero) — the brand never letter-spaces positively, never goes uppercase outside of mono labels.
Surfaces use a four-step ladder: {colors.canvas} (pure white for cards), {colors.canvas-soft} 98% (the page body), {colors.canvas-soft-2} 95% (occasional inset region), {colors.primary} (the deep ink-near-black used as the polarity-flipped band when a section needs the dark mode treatment). Shadows are exceptionally subtle — every elevated card carries a stacked shadow built from 0px 1px 1px #00000005 + 0px 2px 2px #0000000a + an inset border. Cards never float on heavy drop-shadow; they sit on the page held by hairline + soft glow.
Key Characteristics:
- A single black-ink primary CTA
{colors.primary} carries every conversion target, paired with white-on-white button-secondary for the secondary action. The brand uses 100 px pill shape for marketing CTAs and a tight 6 px square shape for in-app nav buttons.
- A multi-stop mesh gradient (cyan-blue-magenta-amber) is the only decorative chrome — used at hero scale and inside feature-band atmospheric backdrops. It is the brand.
- Every section eyebrow and small label uses the monospace face
{typography.caption-mono} or {typography.code}; everything else is in the geometric sans.
- Subtle stacked-shadow elevation — three offsets layered with 4-12 % black opacity — never a single heavy drop-shadow.
- A complete 100–1000 gray + blue + red + amber + green + teal + purple + pink colour scale exists as a system token set, but the marketing surface uses only the
100, 1000, and 700-level tones; the rest stay in the design-system tokens for in-product surfaces.
- An "Active CPU" pricing rhythm:
pricing-card lays out 3-up on the pricing page with pricing-card-featured (Pro tier) polarity-flipped to {colors.primary} against white-card siblings.
Colors
Brand & Accent
- Ink (
{colors.primary} — #171717): The single primary CTA color. Black-near-pure ink that carries every Sign Up pill, every footer CTA, the dark-band polarity-flip. Used as text color throughout the page on light surfaces. (Resolved from --ds-gray-1000.)
- Cyan (
{colors.cyan} — #50e3c2): A signature mint-cyan used in the brand gradient and inside Geist-system spotlight tokens. Visible inside the hero gradient stops.
- Highlight Pink (
{colors.highlight-pink} — #ff0080): The brand's highlight magenta, used as the high-saturation stop in the preview-gradient pair.
- Violet (
{colors.violet} — #7928ca): The deep purple used as the start of the preview-gradient and inside developer-console highlights.
- Link Blue (
{colors.link} — #0070f3): The brand's primary link color and the legacy --geist-success semantic.
Surface
- Canvas (
{colors.canvas} — #ffffff): The pure-white card / dialog / modal surface.
- Canvas Soft (
{colors.canvas-soft} — #fafafa): The default page background — 98 % white. Almost every section sits on this tone.
- Canvas Soft 2 (
{colors.canvas-soft-2} — #f5f5f5): A slightly deeper inset surface for "code editor inner background", template-card hover states, and dropdown menus.
- Hairline (
{colors.hairline} — #ebebeb): 1 px dividers — table rows, card borders, input borders.
- Hairline Strong (
{colors.hairline-strong} — #a1a1a1): The 500-level gray, used as the slightly-stronger divider on light bands and as the deemphasised text color.
Text
- Ink (
{colors.ink} — #171717): Every heading and body paragraph on light surfaces.
- Body (
{colors.body} — #4d4d4d): Secondary text — sub-headings, body captions, nav-link inactive text, footer column body.
- Mute (
{colors.mute} — #888888): Lowest-priority text — placeholder text, fine print, low-key labels.
- On Primary (
{colors.on-primary} — #ffffff): All text on {colors.primary} surfaces.
Semantic
- Success / Link (
{colors.success} — #0070f3): The brand's legacy success indicator doubles as the primary link color. Visible underline-on-hover for inline body links.
- Link Deep (
{colors.link-deep} — #0761d1): The pressed / visited tone for inline links.
- Link Bg Soft (
{colors.link-bg-soft} — #d3e5ff): Soft pastel blue fill for "what's new" pill banners and informational badges.
- Error (
{colors.error} — #ee0000): Validation red for destructive actions and form errors.
- Error Soft (
{colors.error-soft} — #f7d4d6): Soft pastel red for destructive-state backgrounds.
- Error Deep (
{colors.error-deep} — #c50000): Pressed / deep destructive state.
- Warning (
{colors.warning} — #f5a623): Caution / pending status indicator.
- Warning Soft (
{colors.warning-soft} — #ffefcf) / Warning Deep ({colors.warning-deep} — #ab570a): Background + pressed variants.
Brand Gradient
The brand's signature decoration is a three-pair gradient stack:
- Develop (
{colors.gradient-develop-start} #007cf0 → {colors.gradient-develop-end} #00dfd8) — the blue-to-teal pair used to mark the "deploy" / "develop" rhythm.
- Preview (
{colors.gradient-preview-start} #7928ca → {colors.gradient-preview-end} #ff0080) — the violet-to-pink pair used for "preview" surfaces.
- Ship (
{colors.gradient-ship-start} #ff4d4d → {colors.gradient-ship-end} #f9cb28) — the coral-to-amber pair used for "ship" surfaces.
The three pairs collapse into a single multi-color mesh gradient when used as the hero atmospheric backdrop. Treat the gradient as one unified object — do not crop down to a single colour, do not reorder the stops, and do not miniaturise. Used at hero scale only.
Typography
Font Family
Two custom faces carry the entire system:
- A custom geometric sans (extracted as
Geist) for every display, body, button, link, and label. Weights 400 / 500 / 600 are the working set; the face never appears in 700 or heavier. Display sizes are tracked aggressively negative (-2.4 px at 48 px hero, -1.28 px at 32 px section); body stays at neutral or slightly-negative tracking.
- A custom monospaced face (extracted as
Geist Mono) for terminal mockups, code blocks, and small mono-caption labels — anything that wants to signal "technical." Weight 400 only at 12 – 13 px. Tracking neutral.
A condensed display sans (Space Grotesk) is loaded as a third face for occasional editorial moments but does not render as the primary face anywhere in the captured surfaces.
Hierarchy
| Token |
Size |
Weight |
Line Height |
Letter Spacing |
Use |
{typography.display-xl} |
48px |
600 |
48px |
-2.4px |
Hero headline ("Build and deploy on the AI Cloud."). |
{typography.display-lg} |
32px |
600 |
40px |
-1.28px |
Section headlines ("Your frontend, delivered.", "A compute model for all workloads."). |
{typography.display-md} |
24px |
600 |
32px |
-0.96px |
Card-cluster headlines, pricing-tier names. |
{typography.display-sm} |
20px |
600 |
28px |
-0.6px |
Inline display micro-headings. |
{typography.body-lg} |
18px |
400 |
28px |
0 |
Lead paragraphs under section headlines. |
{typography.body-md} |
16px |
400 |
24px |
0 |
Default body paragraph. |
{typography.body-md-strong} |
16px |
500 |
24px |
0 |
Bolded inline body. |
{typography.body-sm} |
14px |
400 |
20px |
-0.28px |
Secondary body, nav-link text, button-md labels. |
{typography.body-sm-strong} |
14px |
500 |
20px |
-0.28px |
Nav CTA labels, table-row emphasis. |
{typography.caption} |
12px |
400 |
16px |
0 |
Footer secondary lines, badge labels. |
{typography.caption-mono} |
12px |
400 |
16px |
0 |
Section eyebrows and label captions that want a technical voice. |
{typography.code} |
13px |
400 |
20px |
0 |
Inline code, terminal mockups, command snippets. |
{typography.button-md} |
14px |
500 |
20px |
0 |
Small / nav-scale button labels. |
{typography.button-lg} |
16px |
500 |
24px |
0 |
Marketing-scale pill button labels. |
Principles
- Negative tracking is part of the voice. Display sizes use aggressive
-2.4 to -0.6 px tracking. Reverting to default tracking breaks the brand.
- Sentence-case headlines, period-terminated. Headlines like "Build and deploy on the AI Cloud." end with a deliberate period — that punctuation is part of the brand's voice.
- Mono for the technical layer only. Section eyebrows, code blocks, terminal mockups. Body paragraphs never set in mono.
- Weight 600 is the display ceiling. The geometric sans never appears at 700 / 800. The brand reads as a calmer system because of this.
Note on Font Substitutes
The two primary faces are proprietary (custom-cut for the brand). Open-source substitutes:
- Geometric sans — Inter (400 / 500 / 600) is the closest stylistic match;
font-feature-settings: "ss01", "ss02" enables the geometric alternates. Satoshi is a passable second choice.
- Monospace — JetBrains Mono (400) at 12 – 13 px matches the technical voice. IBM Plex Mono is the second-best option.
Layout
Spacing System
- Base unit: 4 px. The brand's
--geist-space token is exactly 4 px and every captured value is a multiple of 4.
- 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} 192 px.
- Section padding: marketing bands use
{spacing.4xl} to {spacing.5xl} top/bottom. Hero bands stretch to {spacing.section} to give the mesh gradient room to breathe.
- Card interior padding: marketing cards sit at
{spacing.lg} to {spacing.xl}; template-grid cards stay tighter at {spacing.md} because they sit in a denser grid.
- Inline gap: button rows, nav rows, and chip rows use
{spacing.sm} to {spacing.md} between siblings. The brand's --geist-gap is exactly 24 px.
Grid & Container
- Max width: ~1400 px (
--ds-page-width); the legacy --geist-page-width is 1200 px and still appears on some marketing surfaces. Content centres with horizontal gutters of {spacing.lg} 24 px on desktop, {spacing.md} 16 px on mobile.
- Column patterns:
- Three-feature row: 3-up at desktop, 1-up at mobile (rows like "Web Apps / Composable Commerce / Multi-tenant Platforms").
- Tab pill row: 5-up centred row of
tab-ghost pills.
- Template-grid cluster: 5-up at desktop, scaling to 1-up at mobile.
- Pricing tier grid: 3-up at desktop with the middle tier polarity-flipped.
- Logo strip: ~5 logos wide, single row.
Whitespace Philosophy
The mesh gradient does most of the heavy decorative lifting; whitespace separates the bands. Section spacing is generous — {spacing.4xl} to {spacing.5xl} between bands lets the gradient breathe. Inside a card, the headline/paragraph stack is tight ({spacing.xs} 8 px gap), then a wider gap before the CTA cluster. The page reads as engineered — large gaps + tight interior, never the other way around.
Responsive Strategy
Breakpoints
| Name |
Width |
Key Changes |
| Mobile |
< 600px |
Hero stacks; nav collapses to hamburger; 3-up feature grids drop to 1-up; tab pill row enables horizontal scroll. |
| Tablet |
600–959px |
3-up grids drop to 2-up; nav still horizontal. |
| Desktop |
960–1199px |
Full 3-up grids; pricing 3-up. |
| Wide |
1200–1399px |
Container caps at 1400 px content width. |
| Ultra-wide |
≥ 1400px |
Content stays centred at 1400 px; bands stretch edge-to-edge in colour but content holds the max-width. |
Touch Targets
The button-primary pill renders at ~32 px tall in nav and ~48 px tall in marketing contexts. Marketing CTAs comfortably meet WCAG AAA at all breakpoints; nav buttons inflate touch area through {spacing.xs} padding on mobile to meet the 44 × 44 px floor.
Collapsing Strategy
- Nav: full link row + Ask AI / Log In / Sign Up pills at desktop. Collapses to logo + hamburger at mobile with the menu opening as a full-overlay.
- Hero: mesh gradient stays centred; headline + body stack vertically at all breakpoints (the brand doesn't use a split-hero pattern).
- Three-feature row: 3-up → 2-up → 1-up at the breakpoints above; cards keep their
{rounded.md} 8 px shape across all viewports.
- Pricing card grid: 3-up at desktop, vertical stack at mobile with
pricing-card-featured always sitting in the middle.
- Template grid: 5-up → 3-up → 2-up → 1-up. Each
template-card keeps its 16:9 aspect on the image.
Image Behavior
- Mesh gradient: rendered as inline SVG or canvas-painted gradient; scales fluidly with the hero container; never crops, never tiles.
- Customer logos: rendered as monochrome SVGs in the logo strip; consistent 24 px height.
- Code editor mockup: dark
{colors.primary} rectangle with mono text rendered inside; treated as an image at the layout level.
- Template thumbnails: 16:9 landscape inside
{rounded.md} card chrome; lazy-loaded; consistent grayscale palette in the placeholder state.
Elevation & Depth
| Level |
Treatment |
Use |
| Level 0 — Flat |
No shadow, no border. |
Full-bleed hero bands and the polarity-flipped dark sections. |
| Level 1 — Inset Hairline |
0 0 0 1px #00000014 inset 1 px border. |
Default card chrome — the brand's universal "you can see this card" cue. |
| Level 2 — Subtle Drop |
0px 1px 1px #00000005, 0px 2px 2px #0000000a plus inset hairline. |
Slightly elevated cards (template-grid, marketing-card). |
| Level 3 — Soft Stack |
0px 2px 2px #0000000a, 0px 8px 8px -8px #0000000a plus inset hairline. |
The "medium" elevation — feature-grid cards. |
| Level 4 — Float Stack |
0px 2px 2px #0000000a, 0px 8px 16px -4px #0000000a plus inset hairline. |
"Large" elevation — pricing cards, callout panels. |
| Level 5 — Modal |
0px 1px 1px #00000005, 0px 8px 16px -4px #0000000a, 0px 24px 32px -8px #0000000f plus inset hairline. |
Modal / dialog surfaces and dropdown menus. |
The brand uses STACKED shadows — multiple small offsets layered to fake natural light — never a single 8-px-blur generic drop. Inset hairline rings are always added so the card edge stays crisp.
Decorative Depth
- Mesh gradient as atmospheric depth: the hero's multi-stop gradient is the brand's only "atmospheric" effect — applied as a flat 2-D backdrop rather than a 3-D illustration.
- Polarity-flipped dark band as section-depth: switching the surface from
{colors.canvas-soft} to {colors.primary} (the deep ink) is the brand's chief depth cue between bands.
- Inset-shadow + drop-shadow combo: the cards' combination of an inset 1 px ring and a multi-stop drop produces a "card sits on the page" effect without ever feeling material-heavy.
Shapes
Border Radius Scale
| Token |
Value |
Use |
{rounded.none} |
0px |
Full-bleed hero / footer bands. |
{rounded.xs} |
4px |
Tightest inline pill — the nav-cta-signup 6-px-radius button (mapped to xs/sm). |
{rounded.sm} |
6px |
The brand's --geist-radius token — base UI radius for in-app buttons, form inputs, dropdown menus. |
{rounded.md} |
8px |
The brand's --geist-marketing-radius token — feature cards, template cards. |
{rounded.lg} |
12px |
Slightly larger card chrome (pricing-card variants). |
{rounded.xl} |
16px |
Largest card chrome — when a card hosts a hero image cap. |
{rounded.pill-sm} |
64px |
Tab-ghost pills inside the "AI Apps / Web Apps / Ecommerce / Marketing / Platforms" row. |
{rounded.pill} |
100px |
The marketing CTA pill — button-primary, button-secondary, "Start Deploying" pill. |
{rounded.full} |
9999px |
Icon-button circular containers, nav-link ghost pills. |
Photography Geometry
- Mesh gradient: full-bleed 2-D atmospheric backdrop, never cropped to a frame; treated as the page's wallpaper.
- Customer logos: monochrome SVG, consistent 24 px height in a flex row.
- Code editor mockup: 16:10 dark rectangle,
{rounded.md} corners.
- Template thumbnails: 16:9 landscape inside
{rounded.md} chrome.
- Showcase imagery: 2:1 or 16:9 inside
{rounded.lg} to {rounded.xl} chrome with a stacked shadow.
Components
Buttons
button-primary — the canonical 100-px-radius black pill, marketing scale.
- Background
{colors.primary}, text {colors.on-primary}, label set in {typography.button-lg}, padding 0px {spacing.sm} 12 px, shape {rounded.pill} 100 px. Renders ~48 px tall when paired with the marketing flex layout.
button-secondary — the white pill paired with the black primary inside marketing bands.
- Background
{colors.canvas}, text {colors.ink}, same typography + padding as button-primary, shape {rounded.pill}.
button-primary-sm — the smaller-scale primary pill used inside nav and pricing-card CTAs.
- Background
{colors.primary}, text {colors.on-primary}, label set in {typography.button-md} (14 px / 500), shape {rounded.pill}.
button-secondary-sm — the smaller-scale white pill paired with button-primary-sm.
- Background
{colors.canvas}, text {colors.ink}, same typography + shape as button-primary-sm.
tab-ghost — the centred-row tab pill ("AI Apps / Web Apps / Ecommerce / Marketing / Platforms").
- Background
{colors.canvas}, text {colors.ink}, label set in {typography.body-sm}, padding 0px {spacing.md}, shape {rounded.pill-sm} 64 px.
icon-button-circular — the circular icon container (often a "?" or arrow inside).
- Background
{colors.canvas}, dark icon, 1 px solid hairline border, shape {rounded.full}.
Nav CTAs:
nav-cta-signup — the small black "Sign Up" button in the nav row.
- Background
{colors.primary}, text {colors.on-primary}, label {typography.body-sm-strong}, padding 0px {spacing.xs}, height 28 px, shape {rounded.sm} 6 px (the brand's --geist-radius).
nav-cta-login — the white "Log In" button in the nav.
- Background
{colors.canvas}, text {colors.ink}, same typography / height / shape as nav-cta-signup.
nav-cta-ask-ai — the small "Ask AI" button with a faint border.
- Background
{colors.canvas}, text {colors.ink}, 1 px solid {colors.hairline} border (extracted as 0px solid rgb(235, 235, 235)), same typography / height / shape.
Cards & Containers
card-marketing — the canonical marketing feature card (3-up section cards).
- Background
{colors.canvas}, text {colors.ink}, padding {spacing.lg} 24 px, shape {rounded.md} 8 px (the --geist-marketing-radius). Carries Level 3 soft-stack shadow.
card-marketing-large — the larger marketing card used for "compute model" / "AI Gateway" callouts.
- Background
{colors.canvas}, text {colors.ink}, padding {spacing.xl}, shape {rounded.lg} 12 px. Carries Level 4 float-stack shadow.
card-soft — the soft-tinted card used inside cluster groups (lighter than canvas-soft).
- Background
{colors.canvas-soft}, text {colors.ink}, padding {spacing.lg}, shape {rounded.md}.
template-card — the deploy-template card in the "Deploy your first app" grid.
- Background
{colors.canvas}, text {colors.ink}, padding {spacing.md} 16 px, shape {rounded.md} 8 px. Hosts a 16:9 thumbnail at the top.
code-editor-mockup — the dark code-preview surface inside marketing bands.
- Background
{colors.primary}, text {colors.on-primary}, body in {typography.code} (13 px / Geist Mono), padding {spacing.lg} 24 px, shape {rounded.md} 8 px.
pricing-card — the default pricing-tier card.
- Background
{colors.canvas}, text {colors.ink}, padding {spacing.xl} 32 px, shape {rounded.lg} 12 px. Inside: tier name in {typography.display-md}, price in {typography.display-xl}, feature list in {typography.body-md} rows, CTA at the bottom.
pricing-card-featured — the polarity-flipped "Pro" tier card.
- Background
{colors.primary}, text {colors.on-primary}, same shape + padding as pricing-card. CTA inverts to button-secondary-sm (white pill on black card).
Inputs & Forms
form-input — the canonical text input.
- Background
{colors.canvas}, text {colors.ink}, 1 px solid {colors.hairline} border, body in {typography.body-sm} (14 px), padding 0px {spacing.sm}, height 40 px (the brand's --geist-form-height), shape {rounded.sm} 6 px.
form-input-sm — small-height variant (32 px tall) for tight forms.
- Same as
form-input but height 32 px (the --geist-form-small-height).
form-input-lg — large-height variant (48 px tall) for hero CTAs.
- Same as
form-input but height 48 px (the --geist-form-large-height); body in {typography.body-md} 16 px.
Navigation
nav-bar — the sticky top nav.
- Background
{colors.canvas}, text {colors.ink}, height 64 px (the brand's --header-height), padding {spacing.sm} {spacing.lg}. Layout: logo left, link row centre, "Ask AI / Log In / Sign Up" cluster right.
nav-link — the centred link row inside nav-bar.
- Text
{colors.body}, set in {typography.body-sm}, padding {spacing.xs} {spacing.sm}, shape {rounded.full} (ghost pill — visible only on hover or active, but the radius is documented).
footer — the bottom 4-column nav.
- Background
{colors.canvas}, text {colors.body}, padding {spacing.4xl} {spacing.lg}. Eyebrow column labels in {typography.caption-mono} (uppercase mono effect); link rows in {typography.body-sm}.
Signature Components
hero-band — the white hero with the mesh gradient backdrop.
- Background
{colors.canvas} (or {colors.canvas-soft} on some surfaces), text {colors.ink}, padding {spacing.4xl} {spacing.lg}. Inside: a small mono badge above the headline, the headline in {typography.display-xl} (sentence-case, period-terminated), a body lead in {typography.body-lg}, then a CTA row with button-primary + button-secondary. The mesh gradient sits behind, scaled to occupy roughly the top half of the band.
feature-mesh-band — the secondary section that hosts a mesh-gradient atmospheric backdrop with feature copy on top.
- Background
{colors.canvas}, text {colors.ink}, padding {spacing.5xl} {spacing.lg}. Section headline in {typography.display-lg}; supporting body in {typography.body-md}.
showcase-band-light — a soft-canvas section ("Deploy your first app in seconds").
- Background
{colors.canvas-soft}, text {colors.ink}, padding {spacing.5xl} {spacing.lg}.
showcase-band-dark — the polarity-flipped dark band ("A compute model for all workloads").
- Background
{colors.primary}, text {colors.on-primary}, padding {spacing.5xl} {spacing.lg}. Section headline in {typography.display-lg} (white on black). Often contains a code-editor-mockup flush with the band.
logo-strip — the customer-logo wrapping row near the top of the page.
- Background
{colors.canvas}, text {colors.body}, padding {spacing.lg} {spacing.xl}. Logos rendered as monochrome SVGs at consistent height.
badge-secondary — the small inline metadata pill ("New", "Beta", "Live").
- Background
{colors.canvas-soft}, text {colors.body}, body in {typography.caption}, padding 0px {spacing.xs}, shape {rounded.full}.
banner-marketing — the "Introducing X" announcement pill at the top of pages.
- Background
{colors.canvas-soft}, text {colors.body}, body in {typography.body-sm}, padding {spacing.xs} {spacing.sm}, shape {rounded.full}.
link-inline — body-copy inline links.
- Text
{colors.link} (#0070f3), body in {typography.body-md}, underlined.
Examples (illustrative)
Auto-derived kit-mirror demonstration surfaces (scripts/derive-examples-block.mjs). Each ex-* entry references brand-native primitives so downstream consumers (/preview-design, /generate-kit) re-skin the same 10 surfaces consistently. TO_FILL markers indicate missing primitives — resolve in the LLM judgment pass.
ex-pricing-tier — Default Pricing tier card. Re-uses feature-card chrome with brand canvas-soft surface.
- Properties:
backgroundColor, textColor, borderColor, rounded, padding
ex-pricing-tier-featured — Featured/highlighted tier — polarity-flipped surface (dark fill + light text in light mode, light fill + dark text in dark mode).
- Properties:
backgroundColor, textColor, rounded, padding
ex-product-selector — What's Included summary card — re-purposed for SaaS / B2B verticals (NOT a literal product gallery).
- Properties:
backgroundColor, rounded, padding
ex-cart-drawer — Subscription summary — re-purposed for SaaS / B2B (line items per add-on, not literal cart).
- Properties:
backgroundColor, rounded, padding, item-divider
ex-app-shell-row — Sidebar nav row inside the App Shell example. Active state uses brand primary as the indicator.
- Properties:
backgroundColor, activeIndicator, rounded, padding
ex-data-table-cell — Default data-table th + td chrome. Header uses mono-caps eyebrow typography; body uses body-sm.
- Properties:
headerBackground, headerTypography, bodyTypography, cellPadding, rowBorder
ex-auth-form-card — Sign-in / sign-up card. Re-uses feature-card chrome with text-input primitives inside.
- Properties:
backgroundColor, rounded, padding
ex-modal-card — Modal dialog surface — same chrome as feature-card with elevated shadow.
- Properties:
backgroundColor, rounded, padding
ex-empty-state-card — Empty-state illustration frame.
- Properties:
backgroundColor, rounded, padding, captionTypography
ex-toast — Toast notification surface — feature-card shape + medium shadow.
- Properties:
backgroundColor, rounded, padding, typography
Do's and Don'ts
Do
- Reserve
{colors.primary} (#171717) for primary CTAs across the page. Black ink IS the conversion target.
- Use
{rounded.pill} 100 px for every marketing-scale CTA and {rounded.sm} 6 px for nav-scale buttons. The two pill scales coexist deliberately.
- Set every headline in
{typography.display-*} weight 600, sentence-case, often period-terminated. Aggressive negative tracking is part of the voice.
- Use the brand mesh gradient as atmospheric decoration at hero scale only — never miniaturise it to an icon, never reduce to a single colour.
- Layer stacked shadows (multiple small offsets with inset hairline) rather than single heavy drops. The brand's elevation is calmer than Material.
- Cycle page surfaces in
{colors.canvas-soft} → {colors.canvas} → {colors.primary} polarity-flipped bands; the dark band IS the depth cue.
- Set every code block and technical eyebrow in
{typography.code} / {typography.caption-mono}. Mono is the voice of the platform.
Don't
- Don't introduce a sixth accent colour. The brand operates with ink + gray + the four-pair gradient palette; new accents flatten the voice.
- Don't render headlines in all-caps. Sentence-case + negative tracking is non-negotiable.
- Don't drop a single heavy drop-shadow on cards. The brand's elevation is built from stacked small offsets + inset hairline rings.
- Don't render the brand gradient at icon scale or in a single-colour reduced form. The gradient lives at hero scale only.
- Don't promote the geometric sans to weight 700. The brand's display ceiling is 600.
- Don't pair the marketing 100-px pill CTA shape with the 6-px nav radius on the same screen — pick a scale and stay there.
- Don't set body paragraphs in the mono face. The mono is for code + technical labels only.
1---2name: vercel-inspired-design-analysis3description: Analyzes Vercel's design language, documenting its color system, typography, surface hierarchy, and gradient-based decorative system for use in design systems or brand analysis.4---567## Overview89Vercel is a developer-platform brand — the page is a deployment dashboard's marketing surface, written for engineers who already know the syntax. It earns that posture with one of the cleanest stark systems on the web: near-white `{colors.canvas-soft}` body background, ink-near-black `{colors.ink}` text, a 200-step gray scale that gives every divider, border, and disabled state its own deliberate step. The only place the brand introduces colour at marketing scale is the multi-stop mesh gradient (`{colors.gradient-develop-start}` → `{colors.gradient-preview-end}` → `{colors.gradient-ship-start}` → cyan / magenta / amber) that floats in atmospheric backdrops, never miniaturised to a swatch. That gradient is the entire decoration system.1011Type is the second decisive voice. The brand's own custom geometric sans (Geist) carries display, body, button — everything narrative — at weight 600 for display, 500 for buttons, 400 for body. A matching monospaced face (Geist Mono) carries technical labels: terminal mockups, code blocks, sometimes filename captions. Headlines are sentence-case with aggressive negative letter-spacing (`-2.4px` at 48 px hero) — the brand never letter-spaces positively, never goes uppercase outside of mono labels.1213Surfaces use a four-step ladder: `{colors.canvas}` (pure white for cards), `{colors.canvas-soft}` 98% (the page body), `{colors.canvas-soft-2}` 95% (occasional inset region), `{colors.primary}` (the deep ink-near-black used as the polarity-flipped band when a section needs the dark mode treatment). Shadows are exceptionally subtle — every elevated card carries a stacked shadow built from `0px 1px 1px #00000005` + `0px 2px 2px #0000000a` + an inset border. Cards never float on heavy drop-shadow; they sit on the page held by hairline + soft glow.1415**Key Characteristics:**16- A single black-ink primary CTA `{colors.primary}` carries every conversion target, paired with white-on-white `button-secondary` for the secondary action. The brand uses 100 px pill shape for marketing CTAs and a tight 6 px square shape for in-app nav buttons.17- A multi-stop mesh gradient (cyan-blue-magenta-amber) is the only decorative chrome — used at hero scale and inside feature-band atmospheric backdrops. It is the brand.18- Every section eyebrow and small label uses the monospace face `{typography.caption-mono}` or `{typography.code}`; everything else is in the geometric sans.19- Subtle stacked-shadow elevation — three offsets layered with 4-12 % black opacity — never a single heavy drop-shadow.20- A complete 100–1000 gray + blue + red + amber + green + teal + purple + pink colour scale exists as a system token set, but the marketing surface uses only the `100`, `1000`, and `700`-level tones; the rest stay in the design-system tokens for in-product surfaces.21- An "Active CPU" pricing rhythm: `pricing-card` lays out 3-up on the pricing page with `pricing-card-featured` (Pro tier) polarity-flipped to `{colors.primary}` against white-card siblings.2223## Colors2425### Brand & Accent26- **Ink** (`{colors.primary}` — `#171717`): The single primary CTA color. Black-near-pure ink that carries every Sign Up pill, every footer CTA, the dark-band polarity-flip. Used as text color throughout the page on light surfaces. (Resolved from `--ds-gray-1000`.)27- **Cyan** (`{colors.cyan}` — `#50e3c2`): A signature mint-cyan used in the brand gradient and inside Geist-system spotlight tokens. Visible inside the hero gradient stops.28- **Highlight Pink** (`{colors.highlight-pink}` — `#ff0080`): The brand's highlight magenta, used as the high-saturation stop in the preview-gradient pair.29- **Violet** (`{colors.violet}` — `#7928ca`): The deep purple used as the start of the preview-gradient and inside developer-console highlights.30- **Link Blue** (`{colors.link}` — `#0070f3`): The brand's primary link color and the legacy `--geist-success` semantic.3132### Surface33- **Canvas** (`{colors.canvas}` — `#ffffff`): The pure-white card / dialog / modal surface.34- **Canvas Soft** (`{colors.canvas-soft}` — `#fafafa`): The default page background — 98 % white. Almost every section sits on this tone.35- **Canvas Soft 2** (`{colors.canvas-soft-2}` — `#f5f5f5`): A slightly deeper inset surface for "code editor inner background", template-card hover states, and dropdown menus.36- **Hairline** (`{colors.hairline}` — `#ebebeb`): 1 px dividers — table rows, card borders, input borders.37- **Hairline Strong** (`{colors.hairline-strong}` — `#a1a1a1`): The 500-level gray, used as the slightly-stronger divider on light bands and as the deemphasised text color.3839### Text40- **Ink** (`{colors.ink}` — `#171717`): Every heading and body paragraph on light surfaces.41- **Body** (`{colors.body}` — `#4d4d4d`): Secondary text — sub-headings, body captions, nav-link inactive text, footer column body.42- **Mute** (`{colors.mute}` — `#888888`): Lowest-priority text — placeholder text, fine print, low-key labels.43- **On Primary** (`{colors.on-primary}` — `#ffffff`): All text on `{colors.primary}` surfaces.4445### Semantic46- **Success / Link** (`{colors.success}` — `#0070f3`): The brand's legacy success indicator doubles as the primary link color. Visible underline-on-hover for inline body links.47- **Link Deep** (`{colors.link-deep}` — `#0761d1`): The pressed / visited tone for inline links.48- **Link Bg Soft** (`{colors.link-bg-soft}` — `#d3e5ff`): Soft pastel blue fill for "what's new" pill banners and informational badges.49- **Error** (`{colors.error}` — `#ee0000`): Validation red for destructive actions and form errors.50- **Error Soft** (`{colors.error-soft}` — `#f7d4d6`): Soft pastel red for destructive-state backgrounds.51- **Error Deep** (`{colors.error-deep}` — `#c50000`): Pressed / deep destructive state.52- **Warning** (`{colors.warning}` — `#f5a623`): Caution / pending status indicator.53- **Warning Soft** (`{colors.warning-soft}` — `#ffefcf`) / **Warning Deep** (`{colors.warning-deep}` — `#ab570a`): Background + pressed variants.5455### Brand Gradient56The brand's signature decoration is a three-pair gradient stack:57- **Develop** (`{colors.gradient-develop-start}` `#007cf0` → `{colors.gradient-develop-end}` `#00dfd8`) — the blue-to-teal pair used to mark the "deploy" / "develop" rhythm.58- **Preview** (`{colors.gradient-preview-start}` `#7928ca` → `{colors.gradient-preview-end}` `#ff0080`) — the violet-to-pink pair used for "preview" surfaces.59- **Ship** (`{colors.gradient-ship-start}` `#ff4d4d` → `{colors.gradient-ship-end}` `#f9cb28`) — the coral-to-amber pair used for "ship" surfaces.6061The three pairs collapse into a single multi-color mesh gradient when used as the hero atmospheric backdrop. Treat the gradient as one unified object — do not crop down to a single colour, do not reorder the stops, and do not miniaturise. Used at hero scale only.6263## Typography6465### Font Family66Two custom faces carry the entire system:67681. **A custom geometric sans** (extracted as `Geist`) for every display, body, button, link, and label. Weights 400 / 500 / 600 are the working set; the face never appears in 700 or heavier. Display sizes are tracked aggressively negative (`-2.4 px` at 48 px hero, `-1.28 px` at 32 px section); body stays at neutral or slightly-negative tracking.692. **A custom monospaced face** (extracted as `Geist Mono`) for terminal mockups, code blocks, and small mono-caption labels — anything that wants to signal "technical." Weight 400 only at 12 – 13 px. Tracking neutral.7071A condensed display sans (`Space Grotesk`) is loaded as a third face for occasional editorial moments but does not render as the primary face anywhere in the captured surfaces.7273### Hierarchy7475| Token | Size | Weight | Line Height | Letter Spacing | Use |76|---|---|---|---|---|---|77| `{typography.display-xl}` | 48px | 600 | 48px | -2.4px | Hero headline ("Build and deploy on the AI Cloud."). |78| `{typography.display-lg}` | 32px | 600 | 40px | -1.28px | Section headlines ("Your frontend, delivered.", "A compute model for all workloads."). |79| `{typography.display-md}` | 24px | 600 | 32px | -0.96px | Card-cluster headlines, pricing-tier names. |80| `{typography.display-sm}` | 20px | 600 | 28px | -0.6px | Inline display micro-headings. |81| `{typography.body-lg}` | 18px | 400 | 28px | 0 | Lead paragraphs under section headlines. |82| `{typography.body-md}` | 16px | 400 | 24px | 0 | Default body paragraph. |83| `{typography.body-md-strong}` | 16px | 500 | 24px | 0 | Bolded inline body. |84| `{typography.body-sm}` | 14px | 400 | 20px | -0.28px | Secondary body, nav-link text, button-md labels. |85| `{typography.body-sm-strong}` | 14px | 500 | 20px | -0.28px | Nav CTA labels, table-row emphasis. |86| `{typography.caption}` | 12px | 400 | 16px | 0 | Footer secondary lines, badge labels. |87| `{typography.caption-mono}` | 12px | 400 | 16px | 0 | Section eyebrows and label captions that want a technical voice. |88| `{typography.code}` | 13px | 400 | 20px | 0 | Inline code, terminal mockups, command snippets. |89| `{typography.button-md}` | 14px | 500 | 20px | 0 | Small / nav-scale button labels. |90| `{typography.button-lg}` | 16px | 500 | 24px | 0 | Marketing-scale pill button labels. |9192### Principles93- **Negative tracking is part of the voice.** Display sizes use aggressive `-2.4` to `-0.6` px tracking. Reverting to default tracking breaks the brand.94- **Sentence-case headlines, period-terminated.** Headlines like "Build and deploy on the AI Cloud." end with a deliberate period — that punctuation is part of the brand's voice.95- **Mono for the technical layer only.** Section eyebrows, code blocks, terminal mockups. Body paragraphs never set in mono.96- **Weight 600 is the display ceiling.** The geometric sans never appears at 700 / 800. The brand reads as a calmer system because of this.9798### Note on Font Substitutes99The two primary faces are proprietary (custom-cut for the brand). Open-source substitutes:100- **Geometric sans** — *Inter* (400 / 500 / 600) is the closest stylistic match; `font-feature-settings: "ss01", "ss02"` enables the geometric alternates. *Satoshi* is a passable second choice.101- **Monospace** — *JetBrains Mono* (400) at 12 – 13 px matches the technical voice. *IBM Plex Mono* is the second-best option.102103## Layout104105### Spacing System106- **Base unit**: 4 px. The brand's `--geist-space` token is exactly 4 px and every captured value is a multiple of 4.107- **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}` 192 px.108- **Section padding**: marketing bands use `{spacing.4xl}` to `{spacing.5xl}` top/bottom. Hero bands stretch to `{spacing.section}` to give the mesh gradient room to breathe.109- **Card interior padding**: marketing cards sit at `{spacing.lg}` to `{spacing.xl}`; template-grid cards stay tighter at `{spacing.md}` because they sit in a denser grid.110- **Inline gap**: button rows, nav rows, and chip rows use `{spacing.sm}` to `{spacing.md}` between siblings. The brand's `--geist-gap` is exactly 24 px.111112### Grid & Container113- **Max width**: ~1400 px (`--ds-page-width`); the legacy `--geist-page-width` is 1200 px and still appears on some marketing surfaces. Content centres with horizontal gutters of `{spacing.lg}` 24 px on desktop, `{spacing.md}` 16 px on mobile.114- **Column patterns**:115 - Three-feature row: 3-up at desktop, 1-up at mobile (rows like "Web Apps / Composable Commerce / Multi-tenant Platforms").116 - Tab pill row: 5-up centred row of `tab-ghost` pills.117 - Template-grid cluster: 5-up at desktop, scaling to 1-up at mobile.118 - Pricing tier grid: 3-up at desktop with the middle tier polarity-flipped.119 - Logo strip: ~5 logos wide, single row.120121### Whitespace Philosophy122The mesh gradient does most of the heavy decorative lifting; whitespace separates the bands. Section spacing is generous — `{spacing.4xl}` to `{spacing.5xl}` between bands lets the gradient breathe. Inside a card, the headline/paragraph stack is tight (`{spacing.xs}` 8 px gap), then a wider gap before the CTA cluster. The page reads as engineered — large gaps + tight interior, never the other way around.123124### Responsive Strategy125126#### Breakpoints127128| Name | Width | Key Changes |129|---|---|---|130| Mobile | < 600px | Hero stacks; nav collapses to hamburger; 3-up feature grids drop to 1-up; tab pill row enables horizontal scroll. |131| Tablet | 600–959px | 3-up grids drop to 2-up; nav still horizontal. |132| Desktop | 960–1199px | Full 3-up grids; pricing 3-up. |133| Wide | 1200–1399px | Container caps at 1400 px content width. |134| Ultra-wide | ≥ 1400px | Content stays centred at 1400 px; bands stretch edge-to-edge in colour but content holds the max-width. |135136#### Touch Targets137The `button-primary` pill renders at ~32 px tall in nav and ~48 px tall in marketing contexts. Marketing CTAs comfortably meet WCAG AAA at all breakpoints; nav buttons inflate touch area through `{spacing.xs}` padding on mobile to meet the 44 × 44 px floor.138139#### Collapsing Strategy140- **Nav**: full link row + Ask AI / Log In / Sign Up pills at desktop. Collapses to logo + hamburger at mobile with the menu opening as a full-overlay.141- **Hero**: mesh gradient stays centred; headline + body stack vertically at all breakpoints (the brand doesn't use a split-hero pattern).142- **Three-feature row**: 3-up → 2-up → 1-up at the breakpoints above; cards keep their `{rounded.md}` 8 px shape across all viewports.143- **Pricing card grid**: 3-up at desktop, vertical stack at mobile with `pricing-card-featured` always sitting in the middle.144- **Template grid**: 5-up → 3-up → 2-up → 1-up. Each `template-card` keeps its 16:9 aspect on the image.145146#### Image Behavior147- **Mesh gradient**: rendered as inline SVG or canvas-painted gradient; scales fluidly with the hero container; never crops, never tiles.148- **Customer logos**: rendered as monochrome SVGs in the logo strip; consistent 24 px height.149- **Code editor mockup**: dark `{colors.primary}` rectangle with mono text rendered inside; treated as an image at the layout level.150- **Template thumbnails**: 16:9 landscape inside `{rounded.md}` card chrome; lazy-loaded; consistent grayscale palette in the placeholder state.151152## Elevation & Depth153154| Level | Treatment | Use |155|---|---|---|156| Level 0 — Flat | No shadow, no border. | Full-bleed hero bands and the polarity-flipped dark sections. |157| Level 1 — Inset Hairline | `0 0 0 1px #00000014` inset 1 px border. | Default card chrome — the brand's universal "you can see this card" cue. |158| Level 2 — Subtle Drop | `0px 1px 1px #00000005, 0px 2px 2px #0000000a` plus inset hairline. | Slightly elevated cards (template-grid, marketing-card). |159| Level 3 — Soft Stack | `0px 2px 2px #0000000a, 0px 8px 8px -8px #0000000a` plus inset hairline. | The "medium" elevation — feature-grid cards. |160| Level 4 — Float Stack | `0px 2px 2px #0000000a, 0px 8px 16px -4px #0000000a` plus inset hairline. | "Large" elevation — pricing cards, callout panels. |161| Level 5 — Modal | `0px 1px 1px #00000005, 0px 8px 16px -4px #0000000a, 0px 24px 32px -8px #0000000f` plus inset hairline. | Modal / dialog surfaces and dropdown menus. |162163The brand uses STACKED shadows — multiple small offsets layered to fake natural light — never a single 8-px-blur generic drop. Inset hairline rings are always added so the card edge stays crisp.164165### Decorative Depth166- **Mesh gradient as atmospheric depth**: the hero's multi-stop gradient is the brand's only "atmospheric" effect — applied as a flat 2-D backdrop rather than a 3-D illustration.167- **Polarity-flipped dark band as section-depth**: switching the surface from `{colors.canvas-soft}` to `{colors.primary}` (the deep ink) is the brand's chief depth cue between bands.168- **Inset-shadow + drop-shadow combo**: the cards' combination of an inset 1 px ring and a multi-stop drop produces a "card sits on the page" effect without ever feeling material-heavy.169170## Shapes171172### Border Radius Scale173174| Token | Value | Use |175|---|---|---|176| `{rounded.none}` | 0px | Full-bleed hero / footer bands. |177| `{rounded.xs}` | 4px | Tightest inline pill — the `nav-cta-signup` 6-px-radius button (mapped to `xs/sm`). |178| `{rounded.sm}` | 6px | The brand's `--geist-radius` token — base UI radius for in-app buttons, form inputs, dropdown menus. |179| `{rounded.md}` | 8px | The brand's `--geist-marketing-radius` token — feature cards, template cards. |180| `{rounded.lg}` | 12px | Slightly larger card chrome (pricing-card variants). |181| `{rounded.xl}` | 16px | Largest card chrome — when a card hosts a hero image cap. |182| `{rounded.pill-sm}` | 64px | Tab-ghost pills inside the "AI Apps / Web Apps / Ecommerce / Marketing / Platforms" row. |183| `{rounded.pill}` | 100px | The marketing CTA pill — `button-primary`, `button-secondary`, "Start Deploying" pill. |184| `{rounded.full}` | 9999px | Icon-button circular containers, nav-link ghost pills. |185186### Photography Geometry187- **Mesh gradient**: full-bleed 2-D atmospheric backdrop, never cropped to a frame; treated as the page's wallpaper.188- **Customer logos**: monochrome SVG, consistent 24 px height in a flex row.189- **Code editor mockup**: 16:10 dark rectangle, `{rounded.md}` corners.190- **Template thumbnails**: 16:9 landscape inside `{rounded.md}` chrome.191- **Showcase imagery**: 2:1 or 16:9 inside `{rounded.lg}` to `{rounded.xl}` chrome with a stacked shadow.192193## Components194195### Buttons196197**`button-primary`** — the canonical 100-px-radius black pill, marketing scale.198- Background `{colors.primary}`, text `{colors.on-primary}`, label set in `{typography.button-lg}`, padding `0px {spacing.sm}` 12 px, shape `{rounded.pill}` 100 px. Renders ~48 px tall when paired with the marketing flex layout.199200**`button-secondary`** — the white pill paired with the black primary inside marketing bands.201- Background `{colors.canvas}`, text `{colors.ink}`, same typography + padding as `button-primary`, shape `{rounded.pill}`.202203**`button-primary-sm`** — the smaller-scale primary pill used inside nav and pricing-card CTAs.204- Background `{colors.primary}`, text `{colors.on-primary}`, label set in `{typography.button-md}` (14 px / 500), shape `{rounded.pill}`.205206**`button-secondary-sm`** — the smaller-scale white pill paired with `button-primary-sm`.207- Background `{colors.canvas}`, text `{colors.ink}`, same typography + shape as `button-primary-sm`.208209**`tab-ghost`** — the centred-row tab pill ("AI Apps / Web Apps / Ecommerce / Marketing / Platforms").210- Background `{colors.canvas}`, text `{colors.ink}`, label set in `{typography.body-sm}`, padding `0px {spacing.md}`, shape `{rounded.pill-sm}` 64 px.211212**`icon-button-circular`** — the circular icon container (often a "?" or arrow inside).213- Background `{colors.canvas}`, dark icon, 1 px solid hairline border, shape `{rounded.full}`.214215**Nav CTAs:**216217**`nav-cta-signup`** — the small black "Sign Up" button in the nav row.218- Background `{colors.primary}`, text `{colors.on-primary}`, label `{typography.body-sm-strong}`, padding `0px {spacing.xs}`, height 28 px, shape `{rounded.sm}` 6 px (the brand's `--geist-radius`).219220**`nav-cta-login`** — the white "Log In" button in the nav.221- Background `{colors.canvas}`, text `{colors.ink}`, same typography / height / shape as `nav-cta-signup`.222223**`nav-cta-ask-ai`** — the small "Ask AI" button with a faint border.224- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border (extracted as `0px solid rgb(235, 235, 235)`), same typography / height / shape.225226### Cards & Containers227228**`card-marketing`** — the canonical marketing feature card (3-up section cards).229- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.lg}` 24 px, shape `{rounded.md}` 8 px (the `--geist-marketing-radius`). Carries Level 3 soft-stack shadow.230231**`card-marketing-large`** — the larger marketing card used for "compute model" / "AI Gateway" callouts.232- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.xl}`, shape `{rounded.lg}` 12 px. Carries Level 4 float-stack shadow.233234**`card-soft`** — the soft-tinted card used inside cluster groups (lighter than canvas-soft).235- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.lg}`, shape `{rounded.md}`.236237**`template-card`** — the deploy-template card in the "Deploy your first app" grid.238- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.md}` 16 px, shape `{rounded.md}` 8 px. Hosts a 16:9 thumbnail at the top.239240**`code-editor-mockup`** — the dark code-preview surface inside marketing bands.241- Background `{colors.primary}`, text `{colors.on-primary}`, body in `{typography.code}` (13 px / Geist Mono), padding `{spacing.lg}` 24 px, shape `{rounded.md}` 8 px.242243**`pricing-card`** — the default pricing-tier card.244- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.xl}` 32 px, shape `{rounded.lg}` 12 px. Inside: tier name in `{typography.display-md}`, price in `{typography.display-xl}`, feature list in `{typography.body-md}` rows, CTA at the bottom.245246**`pricing-card-featured`** — the polarity-flipped "Pro" tier card.247- Background `{colors.primary}`, text `{colors.on-primary}`, same shape + padding as `pricing-card`. CTA inverts to `button-secondary-sm` (white pill on black card).248249### Inputs & Forms250251**`form-input`** — the canonical text input.252- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border, body in `{typography.body-sm}` (14 px), padding `0px {spacing.sm}`, height 40 px (the brand's `--geist-form-height`), shape `{rounded.sm}` 6 px.253254**`form-input-sm`** — small-height variant (32 px tall) for tight forms.255- Same as `form-input` but height 32 px (the `--geist-form-small-height`).256257**`form-input-lg`** — large-height variant (48 px tall) for hero CTAs.258- Same as `form-input` but height 48 px (the `--geist-form-large-height`); body in `{typography.body-md}` 16 px.259260### Navigation261262**`nav-bar`** — the sticky top nav.263- Background `{colors.canvas}`, text `{colors.ink}`, height 64 px (the brand's `--header-height`), padding `{spacing.sm} {spacing.lg}`. Layout: logo left, link row centre, "Ask AI / Log In / Sign Up" cluster right.264265**`nav-link`** — the centred link row inside `nav-bar`.266- Text `{colors.body}`, set in `{typography.body-sm}`, padding `{spacing.xs} {spacing.sm}`, shape `{rounded.full}` (ghost pill — visible only on hover or active, but the radius is documented).267268**`footer`** — the bottom 4-column nav.269- Background `{colors.canvas}`, text `{colors.body}`, padding `{spacing.4xl} {spacing.lg}`. Eyebrow column labels in `{typography.caption-mono}` (uppercase mono effect); link rows in `{typography.body-sm}`.270271### Signature Components272273**`hero-band`** — the white hero with the mesh gradient backdrop.274- Background `{colors.canvas}` (or `{colors.canvas-soft}` on some surfaces), text `{colors.ink}`, padding `{spacing.4xl} {spacing.lg}`. Inside: a small mono badge above the headline, the headline in `{typography.display-xl}` (sentence-case, period-terminated), a body lead in `{typography.body-lg}`, then a CTA row with `button-primary` + `button-secondary`. The mesh gradient sits behind, scaled to occupy roughly the top half of the band.275276**`feature-mesh-band`** — the secondary section that hosts a mesh-gradient atmospheric backdrop with feature copy on top.277- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.5xl} {spacing.lg}`. Section headline in `{typography.display-lg}`; supporting body in `{typography.body-md}`.278279**`showcase-band-light`** — a soft-canvas section ("Deploy your first app in seconds").280- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.5xl} {spacing.lg}`.281282**`showcase-band-dark`** — the polarity-flipped dark band ("A compute model for all workloads").283- Background `{colors.primary}`, text `{colors.on-primary}`, padding `{spacing.5xl} {spacing.lg}`. Section headline in `{typography.display-lg}` (white on black). Often contains a `code-editor-mockup` flush with the band.284285**`logo-strip`** — the customer-logo wrapping row near the top of the page.286- Background `{colors.canvas}`, text `{colors.body}`, padding `{spacing.lg} {spacing.xl}`. Logos rendered as monochrome SVGs at consistent height.287288**`badge-secondary`** — the small inline metadata pill ("New", "Beta", "Live").289- Background `{colors.canvas-soft}`, text `{colors.body}`, body in `{typography.caption}`, padding `0px {spacing.xs}`, shape `{rounded.full}`.290291**`banner-marketing`** — the "Introducing X" announcement pill at the top of pages.292- Background `{colors.canvas-soft}`, text `{colors.body}`, body in `{typography.body-sm}`, padding `{spacing.xs} {spacing.sm}`, shape `{rounded.full}`.293294**`link-inline`** — body-copy inline links.295- Text `{colors.link}` (`#0070f3`), body in `{typography.body-md}`, underlined.296297### Examples (illustrative)298299> Auto-derived kit-mirror demonstration surfaces (`scripts/derive-examples-block.mjs`). Each `ex-*` entry references brand-native primitives so downstream consumers (`/preview-design`, `/generate-kit`) re-skin the same 10 surfaces consistently. `TO_FILL` markers indicate missing primitives — resolve in the LLM judgment pass.300301**`ex-pricing-tier`** — Default Pricing tier card. Re-uses feature-card chrome with brand canvas-soft surface.302- Properties: `backgroundColor`, `textColor`, `borderColor`, `rounded`, `padding`303304**`ex-pricing-tier-featured`** — Featured/highlighted tier — polarity-flipped surface (dark fill + light text in light mode, light fill + dark text in dark mode).305- Properties: `backgroundColor`, `textColor`, `rounded`, `padding`306307**`ex-product-selector`** — What's Included summary card — re-purposed for SaaS / B2B verticals (NOT a literal product gallery).308- Properties: `backgroundColor`, `rounded`, `padding`309310**`ex-cart-drawer`** — Subscription summary — re-purposed for SaaS / B2B (line items per add-on, not literal cart).311- Properties: `backgroundColor`, `rounded`, `padding`, `item-divider`312313**`ex-app-shell-row`** — Sidebar nav row inside the App Shell example. Active state uses brand primary as the indicator.314- Properties: `backgroundColor`, `activeIndicator`, `rounded`, `padding`315316**`ex-data-table-cell`** — Default data-table th + td chrome. Header uses mono-caps eyebrow typography; body uses body-sm.317- Properties: `headerBackground`, `headerTypography`, `bodyTypography`, `cellPadding`, `rowBorder`318319**`ex-auth-form-card`** — Sign-in / sign-up card. Re-uses feature-card chrome with text-input primitives inside.320- Properties: `backgroundColor`, `rounded`, `padding`321322**`ex-modal-card`** — Modal dialog surface — same chrome as feature-card with elevated shadow.323- Properties: `backgroundColor`, `rounded`, `padding`324325**`ex-empty-state-card`** — Empty-state illustration frame.326- Properties: `backgroundColor`, `rounded`, `padding`, `captionTypography`327328**`ex-toast`** — Toast notification surface — feature-card shape + medium shadow.329- Properties: `backgroundColor`, `rounded`, `padding`, `typography`330331332## Do's and Don'ts333334### Do335- Reserve `{colors.primary}` (`#171717`) for primary CTAs across the page. Black ink IS the conversion target.336- Use `{rounded.pill}` 100 px for every marketing-scale CTA and `{rounded.sm}` 6 px for nav-scale buttons. The two pill scales coexist deliberately.337- Set every headline in `{typography.display-*}` weight 600, sentence-case, often period-terminated. Aggressive negative tracking is part of the voice.338- Use the brand mesh gradient as atmospheric decoration at hero scale only — never miniaturise it to an icon, never reduce to a single colour.339- Layer stacked shadows (multiple small offsets with inset hairline) rather than single heavy drops. The brand's elevation is calmer than Material.340- Cycle page surfaces in `{colors.canvas-soft}` → `{colors.canvas}` → `{colors.primary}` polarity-flipped bands; the dark band IS the depth cue.341- Set every code block and technical eyebrow in `{typography.code}` / `{typography.caption-mono}`. Mono is the voice of the platform.342343### Don't344- Don't introduce a sixth accent colour. The brand operates with ink + gray + the four-pair gradient palette; new accents flatten the voice.345- Don't render headlines in all-caps. Sentence-case + negative tracking is non-negotiable.346- Don't drop a single heavy drop-shadow on cards. The brand's elevation is built from stacked small offsets + inset hairline rings.347- Don't render the brand gradient at icon scale or in a single-colour reduced form. The gradient lives at hero scale only.348- Don't promote the geometric sans to weight 700. The brand's display ceiling is 600.349- Don't pair the marketing 100-px pill CTA shape with the 6-px nav radius on the same screen — pick a scale and stay there.350- Don't set body paragraphs in the mono face. The mono is for code + technical labels only.