Airtable Design System

Structured database workflow · Editorial grids with vibrant signature bands...
Back to Home
01

Visual Theme & Atmosphere

Airtable's marketing surfaces are quietly editorial. The base atmosphere is white canvas, dark ink type, generous whitespace, and a near-black pill CTA — nothing is fighting for attention until a section needs to. The brand voltage doesn't come from gradient washes or accent walls; it comes from full-bleed signature cards in {colors.signature-coral}, {colors.signature-forest}, and {colors.surface-dark} that punctuate long-scroll explainer pages every two or three screens. Between those signature bands, the page reads like a print magazine: a headline, supporting copy, a small image cluster, then breathing room.

Type voice is Haas Grotesk at modest weights (400 for display, 500 for sub-titles and buttons). Display headlines never go bolder than 500 — emphasis comes from size and color contrast, not from weight. Body copy stays at 14px / 400 throughout. The pricing surface runs its own dialect: Inter Display at unusual mid-weights (475 / 575) and pill-shaped buttons ({rounded.pill}) that don't appear on any other page — a deliberate sub-system signaling "this page is about commercial precision."

Key Characteristics:

  • Primary CTA is {colors.primary} (near-black ink) with white text and a {rounded.lg} (12px) corner — it reads as confident and final, never decorative.
  • ...

Live Visual Theme Representation:

Signature Card: Workflow Collaboration
02

Color Palette & Roles

Brand & Accent

  • Primary ({colors.primary} — #181d26): The dominant brand color. Used for the primary CTA background, h1/h2 display type, and the {component.surface-dark} band. Not "blue, then black" — black IS the primary throughout the marketing system.
  • Primary Active ({colors.primary-active} — #0d1218): The press state on primary buttons.

Surface

  • Canvas ({colors.canvas} — #ffffff): The default page surface; the floor of every editorial body.
  • Surface Soft ({colors.surface-soft} — #f8fafc): Tabbed feature cards and the featured pricing tier.
  • ...

Text

  • Ink ({colors.ink} — #181d26): The strongest text — h1/h2 display type and primary button text-on-light. Same hex as {colors.primary} because they are the same role expressed at type and button layers.
  • Body ({colors.body} — #333840): The default running-text color.
  • ...

Signature Card Surfaces

These are the colors that carry Airtable's brand voltage. They appear as full-bleed, full-card surfaces — never as accents on a small element.
  • Coral ({colors.signature-coral} — #aa2d00): The largest signature card on the homepage ("Production apps in prototype speed"). Full-bleed dark coral with white type.
  • Forest ({colors.signature-forest} — #0a2e0e): A deep-green signature card used in the homepage demo-grid cluster.
  • ...

Semantic

  • Link ({colors.link} — #1b61c9): Inline body links and anchor text. Darker on press to {colors.link-active} (#1a3866). Despite the --theme_button-background-primary CSS-variable name, this color is not the primary button color — it is the link color.
  • Info ({colors.info} — #254fad) and Info Border ({colors.info-border} — #458fff): Inline info badges and focused-input outline.
  • ...
primary
#181d26
primary-active
#0d1218
ink
#181d26
body
#333840
muted
#41454d
hairline
#dddddd
border-strong
#9297a0
canvas
#ffffff
surface-soft
#f8fafc
surface-strong
#e0e2e6
surface-dark
#181d26
surface-dark-elevated
#1d1f25
signature-coral
#aa2d00
signature-forest
#0a2e0e
signature-cream
#f5e9d4
signature-peach
#fcab79
signature-mint
#a8d8c4
signature-yellow
#f4d35e
signature-mustard
#d9a441
on-primary
#ffffff
on-dark
#ffffff
link
#1b61c9
link-active
#1a3866
info
#254fad
info-border
#458fff
success
#006400
success-border
#39bf45
pricing-ink
#1d1f25
03

Typography Rules

Font Family

The system runs Haas / Haas Groot Disp (Airtable's licensed display + text type). Haas Groot Disp covers display sizes (h1 / h2); Haas Grotesk covers everything 24px and below. The fallback stack walks -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif.

The pricing surface runs a separate Inter Display stack at mid-weights (475 / 575) — a deliberate sub-system signaling commercial precision.

Hierarchy

TokenSizeWeightLine HeightLetter SpacingUse
..................

Principles

...

Note on Font Substitutes

Dynamic Preview:
display-xl size: 48px | weight: 500 | height: 1.1 | spacing: 0
The quick brown fox jumps over the lazy dog
display-lg size: 40px | weight: 400 | height: 1.2 | spacing: 0
The quick brown fox jumps over the lazy dog
display-md size: 32px | weight: 400 | height: 1.2 | spacing: 0
The quick brown fox jumps over the lazy dog
title-lg size: 24px | weight: 400 | height: 1.35 | spacing: 0.12px
The quick brown fox jumps over the lazy dog
title-md size: 20px | weight: 400 | height: 1.5 | spacing: 0
The quick brown fox jumps over the lazy dog
title-sm size: 18px | weight: 500 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
label-md size: 16px | weight: 500 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
button size: 16px | weight: 500 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
body-md size: 14px | weight: 400 | height: 1.25 | spacing: 0
The quick brown fox jumps over the lazy dog
caption size: 14px | weight: 500 | height: 1.35 | spacing: 0.16px
The quick brown fox jumps over the lazy dog
legal size: 13.12px | weight: 600 | height: 1.2 | spacing: 0
The quick brown fox jumps over the lazy dog
pricing-display size: 44.8px | weight: 475 | height: 1.1 | spacing: 0
The quick brown fox jumps over the lazy dog
pricing-section size: 28px | weight: 475 | height: 1.2 | spacing: 0
The quick brown fox jumps over the lazy dog
pricing-card-title size: 20px | weight: 475 | height: 1.3 | spacing: 0
The quick brown fox jumps over the lazy dog
04

Layout Principles

Spacing System

  • Base unit: 4px (all spacing snaps to 4-multiples).
  • Tokens: {spacing.xxs} 4px · {spacing.xs} 8px · {spacing.sm} 12px · {spacing.md} 16px · {spacing.lg} 24px · {spacing.xl} 32px · {spacing.xxl} 48px · {spacing.section} 96px.
  • ...

Grid & Container

  • Max content width: ~1280px centered, with {spacing.xxl} (48px) horizontal breathing room.
  • Editorial body: Single 8/12-column at large breakpoints, collapsing to single-column on mobile.
  • ...

Whitespace Philosophy

Airtable uses whitespace as the dominant atmospheric tool. Hero sections sit in 96px+ of pure whitespace above and below the headline + sub-headline pair, with no decoration in that whitespace. The hero is intentionally calm — there is no gradient, no aurora, no atmospheric mesh behind the type. The system trusts whitespace alone to do the framing.

Grid Layout Wireframe Mockup:

Field Title Field Value
Task Name Design Review
Layout Wireframe blueprint
1
2
3
4
5
6
7
8
9
10
11
12
Gutter spacing: 16px / 24px
Side Margins: 24px (Mobile) / 48px (Desktop)
Max Container Width: 1200px
05

Depth & Elevation

LevelTreatmentUse
.........
The elevation philosophy is color-block first, shadow second. Shadows are minimal; depth is delegated to the contrast between white canvas and signature surface cards. There is no soft-glow / atmospheric-shadow / heavy-elevation language anywhere in the marketing system.

Decorative Depth

  • Vertical rainbow stripes appear on the articles hero only — multi-color vertical bands sitting on {colors.surface-dark-elevated}. This is a single-page treatment, not a system-wide signature.
  • Photography-as-depth in the demo-card grid: every card carries a real product UI screenshot or mockup, contributing depth through legible artifact density rather than decorative effects.

Elevation Level Showcase:

Flat Surfaces
Airtable utilizes flat surface containers with borders and avoids elevated shadows to focus on dense data.
Flat Surface (Level 0)

Used for background layers, sidebar headers, or baseline borders.

Low Elevation (Level 1 / Card)

Used for floating product elements, cards, and hover states.

High Elevation (Level 2 / Popover & Dropdown)

Used for modals, select menus, code editor tooltips, and overlay headers.

Border Radius & Shape Scale:

radius-sm 4px
radius-md 6px
radius-lg 8px
radius-pill Pill / Tag
06

Component Stylings

Border Radius Scale

TokenValueUse
.........

Photography Geometry

Product UI screenshots inside demo-card grids retain native aspect ratios (typically 4:3 or 16:10) and crop into {rounded.md} containers. Hero illustrations bleed full-width with no rounding. Article-card thumbnails use 16:9 with {rounded.md} corners. Avatars in testimonials use {rounded.full} (perfect circles). Pricing comparison table images stay rectangular with no rounding.

> No hover states documented. Per the global no-hover policy (Step 6), every component spec below documents only Default and Active/Pressed states. Variants live as separate entries in the components: front matter.

top-nav — A 64px-tall white bar pinned to the top of every page. Airtable wordmark sits at left; primary horizontal menu (Platform, Solutions, Resources, Enterprise, Pricing) sits center-left in {typography.body-md}; the right cluster carries a "Book Demo" outline link, "Sign up for free" {component.button-primary}, and "Log In" text link. The nav stays light on every page — Airtable does not invert the nav over dark sections.

Buttons

button-primary — The signature primary CTA. Background {colors.primary} (near-black), text {colors.on-primary}, type {typography.button}, padding 16px × 24px, rounded {rounded.lg} (12px). This is the "Get started for free" / "Sign up for free" button visible on every hero. It reads as confident and final — not decorative — which is why the system uses it sparingly (one per viewport).

  • Active state: button-primary-active darkens to {colors.primary-active} (#0d1218).
button-secondary — White outline button (e.g. "Book demo"). Background {colors.canvas}, text {colors.ink}, type {typography.button}, rounded {rounded.lg} (12px), 1px hairline outline. Sits next to {component.button-primary} as the "less-committed" choice.

button-secondary-on-dark — Same shape as {component.button-secondary} but used on signature coral / forest / dark surfaces. Background {colors.canvas}, text {colors.ink} — the white button stays white over dark surfaces because the system never inverts to a translucent on-dark style on the marketing site.

button-pricing-pill — The pricing-page CTA family. Background {colors.canvas}, text {colors.pricing-ink}, rounded {rounded.pill} (9999px), padding 12px × 24px. The only place pill-shape appears in the marketing system. Treat it as part of the pricing sub-system signaling.

button-legal — Cookie-consent and legal-banner CTAs. Background {colors.link}, text {colors.on-primary}, type {typography.legal} (13.12px / 600), rounded {rounded.xs} (2px), padding 12px × 10px. The 2px corner radius and 600 weight signal "this is a required system surface," not a designed brand surface.

button-icon-circular — 40px × 40px circular button with {colors.canvas} background, hairline border, and {colors.ink} icon. Used for carousel controls, "share", and "back" affordances.

text-link — Inline body links in {colors.link} (#1b61c9, the actual link blue). No underline by default. Type inherits {typography.body-md}.

Cards & Containers

hero-band — The full-page-width white-canvas hero. No surface card, no border, no shadow, no atmospheric gradient — just the headline, sub-headline, and primary + secondary button pair sitting in 96px of whitespace. Vertical padding {spacing.section} (96px).

signature-coral-card — The large full-bleed coral card on the homepage ("Production apps in prototype speed"). Background {colors.signature-coral} (#aa2d00, a dark coral / oxide red), text {colors.on-primary}, rounded {rounded.lg} (12px), internal padding {spacing.xxl} (48px). Carries an h2 in {typography.display-md}, supporting copy in {typography.body-md}, and {component.button-secondary-on-dark} as the CTA.

signature-forest-card — A deep green signature card ({colors.signature-forest} — #0a2e0e) used as a demo-grid sibling to the coral card on the homepage.

hero-card-dark — The dark navy mid-page CTA card (e.g. "The path to 10× every person in your organization"). Background {colors.surface-dark} (#181d26), text {colors.on-dark}, rounded {rounded.lg} (12px), internal padding {spacing.xxl} (48px). The same color as {colors.primary} because the system uses ink as both type color and signature dark surface.

feature-card-tabbed — Light-cream cards (e.g. the "Coke / Pelosi / Conde Nast / Time Inc" tabbed feature card on the homepage). Background {colors.surface-soft}, rounded {rounded.lg} (12px), internal padding {spacing.xl} (32px). Left rail carries vertically-stacked tab labels in {typography.title-md}; right pane shows the active tab's content (illustration + body copy + small CTA).

cream-callout-card — Beige callout cards ({colors.signature-cream}). Rounded {rounded.md} (10px), internal padding {spacing.lg} (24px). Carry product UI fragments or stat callouts — softer than the dark/coral signature cards but still a deliberate brand surface.

demo-grid-card — Used in multi-card grids that punctuate every page. Background {colors.canvas} or one of the demo-grid surfaces ({colors.signature-peach}, {colors.signature-mint}, {colors.signature-yellow}, {colors.signature-mustard}), rounded {rounded.md} (10px), internal padding {spacing.md} (16px). Each card frames a product UI fragment. Card heights vary deliberately to dodge a uniform "spec sheet" feel.

logo-strip — Horizontal monochrome partner-logo row (HBO, Netflix, Amazon, Time, Conde Nast). Logos render in {colors.muted}, surface is {colors.canvas}, vertical padding {spacing.xl} (32px). 6 logos at desktop, 3 at mobile.

article-card — The trending-stories grid on the articles page. Background {colors.canvas}, rounded {rounded.md} (10px), internal padding {spacing.md} (16px). Each card carries a colorful illustrated thumbnail (16:9), a small uppercase category tag, an {typography.title-sm} title, and a meta line. 3-up at desktop.

topic-filter-rail — The left rail on the articles page. 240px wide, {colors.canvas} background, {typography.body-md}, vertically grouped category headings ("Marketing", "Product", "Project management", "Operations") with sub-bullets. Active item carries a small numeric count badge.

Inputs & Forms

text-input — Standard text input. Background {colors.canvas}, text {colors.ink}, type {typography.body-md}, rounded {rounded.sm} (6px), padding 12px × 16px, height 44px. 1px hairline border in {colors.hairline}.

text-input-focus — Focus state. Border thickens or recolors to {colors.info-border}.

Pricing Sub-System

pricing-tier-card — Standard tier card. Background {colors.canvas}, text {colors.pricing-ink}, type {typography.pricing-card-title} for the plan name, rounded {rounded.md} (10px), internal padding {spacing.xl} (32px). Carries the plan name, a price block in {typography.pricing-display} (44.8px / 475), feature checklist, and a {component.button-pricing-pill} at the bottom.

pricing-tier-card-featured — The featured tier (typically "Team" or "Business"). Background shifts to {colors.surface-soft}. No accent border, no badge — the background tone shift is the only signal.

pricing-comparison-row — Each row of the long comparison table at the bottom of the pricing page. Labels in the left column; checkmarks or values across 4 plan columns. 12px vertical padding per row, hairline divider between rows.

Navigation Variants

footer — Light surface ({colors.canvas}), 6-column link list at desktop covering Platform / Solutions / Resources / Learn / Company sub-trees. Vertical padding {spacing.section} divided across upper link block and lower legal row. Type {typography.body-md}.

cta-band-light — The light gray "Start building with Airtable" CTA strip near the footer. Background {colors.surface-strong} (#e0e2e6), text {colors.ink}, rounded {rounded.lg} (12px), padding {spacing.xxl} (48px). Carries an h2 in {typography.display-md} and a {component.button-primary}.

Signature Components

Articles Vertical Rainbow Stripe Hero — The articles-page hero treatment. Multi-color vertical bands at varying widths sitting on {colors.surface-dark-elevated}. The h1 + sub-head + CTA cluster sits center-left on top of the stripes. This is a single-page hero treatment, not a system-wide signature — do not promote it to a multi-page pattern.

Interactive Component Demonstrations:

07

Do's and Don'ts

Do

  • Keep {component.button-primary} near-black. The brand's primary CTA is {colors.primary}, not the link blue. Mixing them up turns a confident hero into a confused one.
  • Reserve {component.button-primary} for one primary action per viewport. The system is designed for scarcity at the brand-action layer.
  • Use {component.button-secondary} (white with hairline outline) as the natural pair with {component.button-primary}. The two together form Airtable's signature button row.
  • Trust whitespace as the hero atmosphere. Hero bands are intentionally calm — no gradient, no mesh, no atmospheric backdrop. Going against this reads as off-brand.
  • Use {component.signature-coral-card}, {component.signature-forest-card}, and {component.hero-card-dark} to break editorial monotony. These are the brand's voltage moments.
  • Keep {component.demo-grid-card} heights uneven within a grid. Uniform heights feel like a spec sheet.
  • Treat the pricing surface as its own dialect: keep {typography.pricing-display}, {typography.pricing-card-title}, and {component.button-pricing-pill} together. Mixing them with Haas Grotesk button type breaks the sub-system's voice.
  • Anchor every editorial band with {spacing.section} (96px) vertical padding.

Don't

  • Don't make {colors.link} (#1b61c9) the primary button color. It is the link color. The primary button is {colors.primary} (#181d26, near-black). Treating link-blue as the brand action is the most common mistake when reading Airtable's CSS variables.
  • Don't add a gradient backdrop to the hero. Airtable's hero is white, full stop. Mesh, aurora, spotlight gradients all read as "another SaaS template" — not Airtable.
  • Don't bold display-weight type. {typography.display-xl} and {typography.display-lg} are intentionally weight 400 / 500 — going to 700 reads as marketing-page-template.
  • Don't use {rounded.pill} outside the pricing surface. It's a sub-system signal, not a general radius option.
  • Don't repeat the same surface mode in two consecutive bands. The editorial pacing depends on rhythm: white → signature card → white → cream → dark → white. Two whites in a row read as a typography blog.
  • Don't add hover state styling beyond what the system already encodes. The system documents Default and Active/Pressed only.
  • Don't introduce additional accent colors beyond the documented signature card palette. The system's voltage already uses coral, forest, dark navy, cream, peach, mint, yellow, and mustard.
✅ Recommended / Do
  • Keep {component.button-primary} near-black. The brand's primary CTA is {colors.primary}, not the link blue. Mixing them up turns a confident hero into a confused one.
  • Reserve {component.button-primary} for one primary action per viewport. The system is designed for scarcity at the brand-action layer.
  • Use {component.button-secondary} (white with hairline outline) as the natural pair with {component.button-primary}. The two together form Airtable's signature button row.
  • Trust whitespace as the hero atmosphere. Hero bands are intentionally calm — no gradient, no mesh, no atmospheric backdrop. Going against this reads as off-brand.
  • Use {component.signature-coral-card}, {component.signature-forest-card}, and {component.hero-card-dark} to break editorial monotony. These are the brand's voltage moments.
  • Keep {component.demo-grid-card} heights uneven within a grid. Uniform heights feel like a spec sheet.
  • Treat the pricing surface as its own dialect: keep {typography.pricing-display}, {typography.pricing-card-title}, and {component.button-pricing-pill} together. Mixing them with Haas Grotesk button type breaks the sub-system's voice.
  • Anchor every editorial band with {spacing.section} (96px) vertical padding.
❌ Discouraged / Don't
  • Don't make {colors.link} (#1b61c9) the primary button color. It is the link color. The primary button is {colors.primary} (#181d26, near-black). Treating link-blue as the brand action is the most common mistake when reading Airtable's CSS variables.
  • Don't add a gradient backdrop to the hero. Airtable's hero is white, full stop. Mesh, aurora, spotlight gradients all read as "another SaaS template" — not Airtable.
  • Don't bold display-weight type. {typography.display-xl} and {typography.display-lg} are intentionally weight 400 / 500 — going to 700 reads as marketing-page-template.
  • Don't use {rounded.pill} outside the pricing surface. It's a sub-system signal, not a general radius option.
  • Don't repeat the same surface mode in two consecutive bands. The editorial pacing depends on rhythm: white → signature card → white → cream → dark → white. Two whites in a row read as a typography blog.
  • Don't add hover state styling beyond what the system already encodes. The system documents Default and Active/Pressed only.
  • Don't introduce additional accent colors beyond the documented signature card palette. The system's voltage already uses coral, forest, dark navy, cream, peach, mint, yellow, and mustard.
08

Responsive Behavior

Breakpoints

NameWidthKey Changes
.........

Touch Targets

  • {component.button-primary} and siblings render at 48 × 48px minimum (16px vertical padding + 16px line-height) — comfortably above WCAG AAA's 44 × 44.
  • {component.button-icon-circular} is exactly 40 × 40px — slightly under WCAG's recommended 44, but the centered icon and dot-radius compensate visually.
  • ...

Collapsing Strategy

  • Top nav collapses to a hamburger at < 768px; the menu opens as a full-screen sheet rather than a dropdown.
  • Card grids reduce columns rather than scaling cards down.
  • ...

Image Behavior

  • Demo-card UI screenshots crop to fit their container rather than scaling up.
  • Hero illustrations bleed full-width on mobile, losing horizontal margin.
  • ...

Responsive Adaptation Note:

📱 On mobile viewports, the grid columns stack vertically into detail page cards for readability.
Interactive Viewport Simulator
Width: 800px (Desktop Mode) Grid Container
Primary Column

Adjusts layout width

Secondary Column

Folds on viewport change

Sidebar Column

Stacks to bottom on mobile

09

Agent Prompt Guide

1. Focus on ONE component at a time. Reference its YAML key directly ({component.button-primary}, {component.signature-coral-card}). 2. When adding a new component, decide first which sub-system it belongs to: the main editorial system (Haas, {rounded.lg}/{rounded.md}) or the pricing sub-system (Inter Display, {rounded.pill}).

  • ...

Copyable Agent Integration Prompt:

"Create a workspace mockup: white canvas, thin grey grid borders, dark text (#181d26), and colorful labels for statuses."
10

Full System Design Tokens

The parsed design tokens extracted from the core stylesheet of this design system:

Design TokenHex ValueSystem Palette Role
--primary#181d26System color representation for primary
--primary-active#0d1218System color representation for primary-active
--ink#181d26System color representation for ink
--body#333840System color representation for body
--muted#41454dSystem color representation for muted
--hairline#ddddddSystem color representation for hairline
--border-strong#9297a0System color representation for border-strong
--canvas#ffffffSystem color representation for canvas
--surface-soft#f8fafcSystem color representation for surface-soft
--surface-strong#e0e2e6System color representation for surface-strong
--surface-dark#181d26System color representation for surface-dark
--surface-dark-elevated#1d1f25System color representation for surface-dark-elevated
--signature-coral#aa2d00System color representation for signature-coral
--signature-forest#0a2e0eSystem color representation for signature-forest
--signature-cream#f5e9d4System color representation for signature-cream
--signature-peach#fcab79System color representation for signature-peach
--signature-mint#a8d8c4System color representation for signature-mint
--signature-yellow#f4d35eSystem color representation for signature-yellow
--signature-mustard#d9a441System color representation for signature-mustard
--on-primary#ffffffSystem color representation for on-primary
--on-dark#ffffffSystem color representation for on-dark
--link#1b61c9System color representation for link
--link-active#1a3866System color representation for link-active
--info#254fadSystem color representation for info
--info-border#458fffSystem color representation for info-border
--success#006400System color representation for success
--success-border#39bf45System color representation for success-border
--pricing-ink#1d1f25System color representation for pricing-ink