Figma Design System

Collaborative design platform · Vibrant accent tones on a clean canvas...
Back to Home
01

Visual Theme & Atmosphere

Figma's marketing canvas is, at the system level, an editor-clean black-and-white frame. The chrome — top nav, body type, footer, primary CTA — is monochrome. Headlines are oversized {typography.display-xl} set in figmaSans with aggressive negative tracking, body copy hovers around weight 320–340 of the same variable family, and small mono {typography.eyebrow} and {typography.caption} labels (figmaMono, all-caps, positive tracking) act as section markers. Every CTA is a pill — {rounded.pill} — and the primary action across the entire site is the same black {components.button-primary} paired with the same white {components.button-secondary}.

What makes the design unique is what happens between those monochrome bookends: the page repeatedly drops into oversized pastel color-block sections — lime, lavender, cream, mint, pink, coral, and a deep navy — that span the full content width with {rounded.lg} corners and {spacing.xxl} interior padding. These blocks are where the storytelling lives. They aren't accents tucked into a card; they take over a whole viewport's worth of vertical space, like a designer arranging giant sticky notes on a clean wall. FigJam is the most pastel-saturated, the home page rotates through the full set, and the pricing page ends with a lime FAQ panel — same vocabulary, different rhythm per route.

...

Key Characteristics:

  • Monochrome system core: {colors.primary} (black) and {colors.canvas} (white) carry every CTA, every body line, every footer link.
  • ...

Live Visual Theme Representation:

Visual Theme Example

02

Color Palette & Roles

> Source pages: figma.com (home), /design/, /figjam/brainstorming-tool/, /pricing/, /contact/.

Brand & Accent

  • Black ({colors.primary}): The system primary. Every primary CTA, every headline, every body line, the marquee strip, the inverse canvas of dark sections.
  • White ({colors.on-primary}): Inverse text on black surfaces; also the canvas color used as the foreground of secondary pill buttons ({components.button-secondary}).
  • ...

Surface

  • Canvas ({colors.canvas}): Default page background and the body of every white card.
  • Inverse Canvas ({colors.inverse-canvas}): Footer, marquee strip, and a subset of "ship products"-style story sections.
  • ...

Text

  • Ink ({colors.ink}): All headline, body, and caption type on light surfaces. There is no softer mid-gray text role on marketing — body copy is always black at weight 320–340, and weight (not opacity) carries the hierarchy.
  • Inverse Ink ({colors.inverse-ink}): Type on inverse-canvas surfaces (footer, marquee strip, navy color block).
  • ...

Semantic

  • Success Green ({colors.semantic-success}): Comparison-table checkmarks on pricing. Used as a glyph fill, not a surface.
  • Overlay Scrim ({colors.overlay-scrim}): Black used at ~60% opacity behind modal / video-overlay surfaces (token captures the base; opacity applied at render time).
primary
#000000
on-primary
#ffffff
ink
#000000
canvas
#ffffff
inverse-canvas
#000000
inverse-ink
#ffffff
on-inverse-soft
#ffffff
hairline
#e6e6e6
hairline-soft
#f1f1f1
surface-soft
#f7f7f5
block-lime
#dceeb1
block-lilac
#c5b0f4
block-cream
#f4ecd6
block-pink
#efd4d4
block-mint
#c8e6cd
block-coral
#f3c9b6
block-navy
#1f1d3d
accent-magenta
#ff3d8b
semantic-success
#1ea64a
overlay-scrim
#000000
03

Typography Rules

Font Family

  • figmaSans — Figma's proprietary variable typeface; fallback stack figmaSans Fallback, SF Pro Display, system-ui, helvetica. Variable weight axis is exercised at unusually fine increments (320, 330, 340, 450, 480, 540, 700) — the design system reads as a single voice modulating rather than a stepped weight family.
  • figmaMono — Proprietary monospace; fallback figmaMono Fallback, SF Mono, menlo. Used exclusively for eyebrow labels and captions, always uppercase with positive letter-spacing.
OpenType kern is enabled across every role.

Hierarchy

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

Principles

  • Weight, not size, carries hierarchy on body copy. A 20px paragraph at weight 330 sits next to a 20px link at weight 480 — the eye reads emphasis without scale change.
  • Negative letter-spacing scales with size. Display-xl pulls -1.72px; subhead pulls only -0.26px. Body copy stays near-zero. The result is editorial-feeling display type without sacrificing readability at body size.
  • ...

Note on Font Substitutes

If implementing without access to figmaSans / figmaMono, suitable open-source substitutes are Inter (or Geist) for the sans, and JetBrains Mono (or Geist Mono) for the mono. Inter at variable weights closely matches the fine-grained weight axis figmaSans uses; expect to manually adjust line-heights down by ~0.02 to compensate for Inter's slightly taller x-height.

Dynamic Preview:
display-xl size: 86px | weight: 340 | height: 1.00 | spacing: -1.72px
The quick brown fox jumps over the lazy dog
display-lg size: 64px | weight: 340 | height: 1.10 | spacing: -0.96px
The quick brown fox jumps over the lazy dog
headline size: 26px | weight: 540 | height: 1.35 | spacing: -0.26px
The quick brown fox jumps over the lazy dog
subhead size: 26px | weight: 340 | height: 1.35 | spacing: -0.26px
The quick brown fox jumps over the lazy dog
card-title size: 24px | weight: 700 | height: 1.45 | spacing: 0
The quick brown fox jumps over the lazy dog
body-lg size: 20px | weight: 330 | height: 1.40 | spacing: -0.14px
The quick brown fox jumps over the lazy dog
body size: 18px | weight: 320 | height: 1.45 | spacing: -0.26px
The quick brown fox jumps over the lazy dog
body-sm size: 16px | weight: 330 | height: 1.45 | spacing: -0.14px
The quick brown fox jumps over the lazy dog
link size: 20px | weight: 480 | height: 1.40 | spacing: -0.10px
The quick brown fox jumps over the lazy dog
button size: 20px | weight: 480 | height: 1.40 | spacing: -0.10px
The quick brown fox jumps over the lazy dog
eyebrow size: 18px | weight: 400 | height: 1.30 | spacing: 0.54px
The quick brown fox jumps over the lazy dog
caption size: 12px | weight: 400 | height: 1.00 | spacing: 0.60px
The quick brown fox jumps over the lazy dog
04

Layout Principles

Spacing System

  • Base unit: 8px.
  • Tokens (front matter): {spacing.hair} 1px · {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 sits around 1280px (one of the explicit breakpoints), with side gutters that scale from {spacing.xxl} on desktop down to {spacing.lg} on mobile.
  • Three- and four-column grids on the desktop pricing comparison and FigJam template galleries.
  • ...

Whitespace Philosophy

White space is used to make the color blocks feel deliberate. Between every colored panel and the next, the page returns to white canvas with {spacing.section} of breathing room. Inside a color block, the type itself is given generous side margins (often more than 1/4 of the block's width on each side) so the panel reads as a poster, not a wall of copy.

Grid Layout Wireframe Mockup:

Layout Grid Example

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
.........
Figma's marketing system is shadow-light by design — the color blocks substitute for traditional elevation. Where most SaaS sites use a shadowed white card to draw attention, Figma uses a saturated background panel. This makes the rare actual shadow (e.g., a floating template card hovering over a cream section) feel like an exception worth noticing.

Decorative Depth

  • Color-block sections are the primary depth device. The change from white canvas to lime / lavender / cream is the section break.
  • Sticky-note style component thumbnails in FigJam — slightly off-axis pastel rectangles arranged like notes on a board — read as collage, not card-stack.
  • ...

Elevation Level Showcase:

Elevation Level Example

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 & Illustration Geometry

  • Image frames use {rounded.md} (8px) — generous enough to feel friendly, conservative enough to read as editorial.
  • Template thumbnails on the home grid sit in {rounded.md} tiles with {spacing.md} interior padding around the embedded preview.
  • ...

Buttons

button-primary — The black "Get started for free" pill that appears in the top nav, every hero, and every closing CTA.

  • Background {colors.primary}, text {colors.on-primary}, type {typography.button}, padding 10px 20px, rounded {rounded.pill}.
  • ...
button-secondary — White pill with black text. Used for tertiary navigation actions ("Contact sales") and as the visual counterpart to the primary pill.
  • Background {colors.canvas}, text {colors.ink}, type {typography.button}, padding 8px 18px 10px (asymmetric vertical to optically center the type), rounded {rounded.pill}. No border.
button-tertiary-text — Plain text link styled as a button hit target inside top nav and footer.
  • Background {colors.canvas}, text {colors.ink}, type {typography.link}, rounded {rounded.full} (hit target only), padding {spacing.xs} {spacing.sm}.
button-icon-circular — 40px circular icon button used for carousel controls, social links, and inline actions on light surfaces.
  • Background {colors.surface-soft}, text {colors.ink}, rounded {rounded.full}, size 40px.
button-icon-circular-inverse — Same shape, used on inverse-canvas / dark color blocks.
  • Background {colors.on-inverse-soft} (translucent white), text {colors.inverse-ink}, rounded {rounded.full}, size 40px.
button-magenta-promo — Saturated pink pill used only inside promotional surfaces such as the lilac "Save your spot" Release Notes banner. Reserved for moments where Figma's product team wants the CTA to pop against an already-colored panel.
  • Background {colors.accent-magenta}, text {colors.on-primary}, type {typography.button}, rounded {rounded.pill}, padding 10px 18px.

Pricing Tabs

pricing-tab-default + pricing-tab-selected — The pill-toggle that switches between Starter / Professional / Organization / Enterprise on /pricing/.

  • Default: {colors.canvas} background, {colors.ink} text, rounded {rounded.pill}.
  • ...

Inputs & Forms

text-input + text-input-focused — Form fields on /contact/ and pricing seat-count steppers.

  • Background {colors.canvas}, text {colors.ink}, type {typography.body}, rounded {rounded.md}, padding 12px 14px.
  • ...

Cards & Containers

pricing-card — Each tier on /pricing/.

  • Background {colors.canvas}, text {colors.ink}, type {typography.body}, rounded {rounded.lg}, padding {spacing.lg}. Stroked with {colors.hairline} rather than shadowed.
pricing-card-feature-row — Single row inside the comparison table.
  • Background {colors.canvas}, text {colors.ink}, type {typography.body-sm}. Row separator is {colors.hairline-soft}.
template-card — Thumbnail tile in the home "Explore what people are making" grid and the FigJam template gallery.
  • Background {colors.surface-soft}, text {colors.ink}, type {typography.body-sm}, rounded {rounded.md}, padding {spacing.md}.
feature-illustration-tile — Larger composition tile that holds a product UI mock or pastel illustration.
  • Background {colors.surface-soft}, text {colors.ink}, type {typography.eyebrow}, rounded {rounded.md}, padding {spacing.lg}.

Color-Block Sections (signature)

The defining surface of Figma's marketing. Each is a full-content-width panel with {rounded.lg} corners and {spacing.xxl} interior padding. Variants:

color-block-section — lime ground for "systems" stories (home), pricing FAQ, and the contact form.

  • Background {colors.block-lime}, text {colors.ink}, type {typography.subhead}, rounded {rounded.lg}, padding {spacing.xxl}.
color-block-section-lilac — lavender ground for /design/ hero and FigJam highlight sections.
  • Background {colors.block-lilac}, otherwise identical structure.
color-block-section-navy — deep indigo ground for the home "Ship products" story block. The only inverse color-block surface above the footer.
  • Background {colors.block-navy}, text {colors.inverse-ink}, otherwise identical structure.
(Cream, mint, pink, and coral block variants follow the same shape with their respective {colors.block-*} surface.)

Promo Banner

promo-banner-lilac — The Release Notes / "Save your spot" inline banner that floats above the contact form.

  • Background {colors.block-lilac}, text {colors.ink}, type {typography.body-sm}, rounded {rounded.md}, padding {spacing.md} {spacing.lg}. Carries a button-magenta-promo on the right edge.

Navigation

top-nav — Sticky white bar with logo, primary nav links, sign-in link, and the right-anchored button-secondary ("Contact sales") + button-primary ("Get started for free") pair.

  • Background {colors.canvas}, text {colors.ink}, type {typography.body-sm}, height 56px.
  • ...
marquee-strip — Thin black ribbon directly under the nav that scrolls through customer logos in white.
  • Background {colors.inverse-canvas}, text {colors.inverse-ink}, type {typography.body-sm}, height 36px.

Comparison Glyphs

comparison-checkmark — Green check used in the pricing comparison matrix.

  • Background {colors.canvas}, glyph color {colors.semantic-success}, rounded {rounded.full}, size 16px.

Footer

footer — Dense link grid on white canvas with the wordmark "Figma" set in display weight at the top-left.

  • Background {colors.canvas}, text {colors.ink}, type {typography.caption} for column headings and small links, padding {spacing.section} top/bottom · {spacing.xl} sides.

Interactive Component Demonstrations:

Component Interactive Example

07

Do's and Don'ts

Do

  • Reserve {colors.primary} for genuine primary CTAs and selected states (e.g., pricing-tab-selected). Don't use it as a decorative accent.
  • When introducing a story section, choose one color block from the {colors.block-} family and let it span full content width with {rounded.lg} corners and {spacing.xxl} interior padding.
  • Keep type in figmaSans at variable weights — pick from 320, 330, 340, 480, 540, 700 to express hierarchy. Avoid intermediate weights outside this set.
  • Use figmaMono only for eyebrows and captions, always uppercase, with the documented positive letter-spacing.
  • Compose every CTA as a pill ({rounded.pill}) and every icon button as a circle ({rounded.full}).
  • Allow the page to return to white canvas between every two color blocks so each block reads as deliberate.
  • Pair button-primary and button-secondary whenever a section needs both a primary action and a sales / secondary action — the black-and-white pair is the brand signature.

Don't

  • Don't introduce mid-gray text. Body hierarchy comes from figmaSans weight, not from opacity.
  • Don't add drop shadows to color-block sections — the color is the depth device.
  • Don't introduce new accent colors outside the documented {colors.block-} palette and {colors.accent-magenta}. Adding, e.g., a saturated brand orange would break the system.
  • Don't combine more than one color block visible inside a single viewport — Figma's pacing always lets the white canvas separate them.
  • Don't square off CTAs. Square buttons read as a different brand.
  • Don't put figmaMono in body copy — it's a taxonomy tool, not a reading typeface.
  • Don't replace the pricing-tab-selected black fill with a colored tab; the brand pattern is "selected = primary surface".
✅ Recommended / Do
  • Reserve {colors.primary} for genuine primary CTAs and selected states (e.g., pricing-tab-selected). Don't use it as a decorative accent.
  • When introducing a story section, choose one color block from the {colors.block-*} family and let it span full content width with {rounded.lg} corners and {spacing.xxl} interior padding.
  • Keep type in figmaSans at variable weights — pick from 320, 330, 340, 480, 540, 700 to express hierarchy. Avoid intermediate weights outside this set.
  • Use figmaMono only for eyebrows and captions, always uppercase, with the documented positive letter-spacing.
  • Compose every CTA as a pill ({rounded.pill}) and every icon button as a circle ({rounded.full}).
  • Allow the page to return to white canvas between every two color blocks so each block reads as deliberate.
  • Pair button-primary and button-secondary whenever a section needs both a primary action and a sales / secondary action — the black-and-white pair is the brand signature.
❌ Discouraged / Don't
  • Don't introduce mid-gray text. Body hierarchy comes from figmaSans weight, not from opacity.
  • Don't add drop shadows to color-block sections — the color is the depth device.
  • Don't introduce new accent colors outside the documented {colors.block-*} palette and {colors.accent-magenta}. Adding, e.g., a saturated brand orange would break the system.
  • Don't combine more than one color block visible inside a single viewport — Figma's pacing always lets the white canvas separate them.
  • Don't square off CTAs. Square buttons read as a different brand.
  • Don't put figmaMono in body copy — it's a taxonomy tool, not a reading typeface.
  • Don't replace the pricing-tab-selected black fill with a colored tab; the brand pattern is "selected = primary surface".
08

Responsive Behavior

Breakpoints

NameWidthKey Changes
.........

Touch Targets

  • Pill buttons (button-primary, button-secondary) maintain a minimum 44px tap height across all viewports — achieved by combining {typography.button} 20px line-height with the documented vertical padding.
  • Circular icon buttons (button-icon-circular) are 40px on desktop and grow to 44px on touch viewports.
  • ...

Collapsing Strategy

  • Nav: desktop horizontal nav with two right-anchored pills collapses to a hamburger overlay below 960px. The two pills (Contact sales, Get started for free) stay visible on the bar above 560px and stack in the overlay below.
  • Pricing tier grid: 4-up → 2-up at 960px → 1-up below 768px. The pill toggle stays horizontal and scrolls horizontally if needed below 560px.
  • ...

Image Behavior

  • Product UI mocks inside color blocks scale proportionally and never crop. Below 768px they shrink rather than reflow.
  • Template thumbnails in the home grid use lazy loading and animate in on scroll.
  • ...

Responsive Adaptation Note:

Responsive Behavior Example

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 and reference it by its components: token name (e.g., {components.button-primary}, {components.color-block-section}). 2. When introducing a new section, decide first which {colors.block-} token it sits on; the surface choice is the most consequential decision. ...

Copyable Agent Integration Prompt:

Prompt Guide Copy Box

10

Full System Design Tokens

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

Design TokenHex ValueSystem Palette Role
--primary#000000System color representation for primary
--on-primary#ffffffSystem color representation for on-primary
--ink#000000System color representation for ink
--canvas#ffffffSystem color representation for canvas
--inverse-canvas#000000System color representation for inverse-canvas
--inverse-ink#ffffffSystem color representation for inverse-ink
--on-inverse-soft#ffffffSystem color representation for on-inverse-soft
--hairline#e6e6e6System color representation for hairline
--hairline-soft#f1f1f1System color representation for hairline-soft
--surface-soft#f7f7f5System color representation for surface-soft
--block-lime#dceeb1System color representation for block-lime
--block-lilac#c5b0f4System color representation for block-lilac
--block-cream#f4ecd6System color representation for block-cream
--block-pink#efd4d4System color representation for block-pink
--block-mint#c8e6cdSystem color representation for block-mint
--block-coral#f3c9b6System color representation for block-coral
--block-navy#1f1d3dSystem color representation for block-navy
--accent-magenta#ff3d8bSystem color representation for accent-magenta
--semantic-success#1ea64aSystem color representation for semantic-success
--overlay-scrim#000000System color representation for overlay-scrim