Modal Design System
Modal's design language as a DESIGN.md file. Black ground #231c1c, lime CTA #7fee64, Goga display, Inter UI. For React, Next.js, and AI tools.
Add shadcn.io to your AI agent. · Pro It installs blocks, icons and templates in your design system from a prompt, with Pro.
Set up MCP- Primary
- #7fee64
- Typeface
- Goga
- Shape
- Mixed
- Base radius
- 8px
- Colors
- 20
- Type tokens
- 12
- Components
- 17
- Spacing values
- 10
About
About Modal DESIGN.md
Curated by Dov Azencot · Updated May 13, 2026 · Source modal.com (opens in a new tab)
Modal's marketing page is what happens when a serverless-compute brand decides the right reference is not Vercel and not Linear but a console terminal painted in radioactive-lime. The upper canvas is a near-black `#231c1c` ground that reads as warm rather than neutral (a 0.234 lightness with a faint red tilt at hue 18, not the dead `#0a0a0a` most dev-infra brands reach for), and every line of text on that ground is set in a pale-green ink `#ddffdc` — the single highest-frequency color on the page at 411 occurrences, splitting 218 text against 193 border. The hero headline ("AI infrastructure that developers love") runs Goga, a sturdy proprietary grotesque with humanist quirks, at 64px / weight 500 / 64px line / neutral tracking. Below it, the only saturated filled surface on the entire page: a `#7fee64` lime pill CTA at 38px height with a corner radius of `3.35544e+07px`, the brand's float-to-pill Tailwind hack that guarantees perfect capsules regardless of height.
This DESIGN.md packages the system into a single machine-readable file following the Google Labs spec. Inside: 20 colors tokens (the deep operator ground `#231c1c` and its dark-band sibling `#000000`, the pale-green ink `#ddffdc` with 411 page occurrences, the lime CTA `#7fee64` with only 20 occurrences, the dual canvas pivot `#ddffdc` pale-green band, a graded pale-green ladder from `#c8f9b6` through `#677d64` to `#4d614c` for borders and supporting text, a muted-green body color `#8cab87`, plus zinc neutrals `#a3a3a3` and `#697368` for tertiary captions), 9 typography tokens across Goga display and Inter Variable UI, 6 radii from 0px to the float-to-pill 9999px, 9 spacing tokens built around a strong 16px base, and 17 components covering the lime pill CTA, the dark hero band, the pale-green feature band, the eyebrow tag, and the global nav.
Feed the file to Claude, Cursor, or Copilot when you want a React surface that reads as Modal — black operator ground, pale-green text, a single lime conversion target, Goga at neutral tracking. The agent picks up the constraints: never escalate Goga past weight 500, never replace `#ddffdc` with a neutral white, never use `#7fee64` for anything other than the primary CTA pill. Reference the tokens directly in Tailwind config or use the spec as an audit checklist against the page. Where most serverless-compute brands signal speed with electric purple or hot blue, Modal signals it with a green that reads as oscilloscope phosphor — confidence by chromatic restraint and a single voltage point.
What makes it distinct
5
- Radioactive-lime as the only saturated surface`#7fee64` fills a single pill CTA, never a card, never a body color
- Pale-green ink everywhere`#ddffdc` carries 218 text + 193 border occurrences, replacing the white that most dark-canvas brands default to
- Float-to-pill radius`3.35544e+07px` (a Tailwind overflow trick) used 52 times to force perfect capsules at any height
- Goga serif-grotesque at weight 400 ceilinghero 64px, H2 60px, card 24px, all sitting on the same axis with neutral tracking
- Dual-canvas polaritya `#231c1c` near-black operator ground runs the upper page, then flips to `#ddffdc` pale-green for the supporting feature bands
modal.com
Live at modal.com
A snapshot of the brand in production. Scroll the frame to see the whole page.

Colors
20 colors
Modal's system runs on #7fee64 as its primary voltage, used in 3 of 17 components. Type is set in Goga across 12 tokens from 12px to 64px, weights 400–700. Shape language is mixed across 17 components, blending pills, soft rounds, and squarer corners.
Brand & Accent
Sparing, CTA-only voltage · 4
Surface
Page and card backgrounds · 6
Text
Headlines, body, captions · 4
Borders & Hairlines
Dividers, outlines, rules · 3
Other
Specialty colors · 3
Typography
12 type tokens
Set in Goga across 12 tokens, from 12px to 64px, weights 400–700. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.
- display-xl64px · weight 500 · lh 64px · tracking normalThe quick brown fox jumps over the lazy dog
- display-lg60px · weight 400 · lh 60px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- display-md54px · weight 400 · lh 59.4px · tracking normalThe quick brown fox jumps over the lazy dog
- display-sm40px · weight 400 · lh 44px · tracking normalThe quick brown fox jumps over the lazy dog
- heading-md24px · weight 400 · lh 31.2px · tracking normalThe quick brown fox jumps over the lazy dog
- heading-sm20px · weight 400 · lh 28px · tracking normalThe quick brown fox jumps over the lazy dog
- body-md16px · weight 500 · lh 24px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- body-sm14px · weight 500 · lh 20px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- body-md-regular16px · weight 400 · lh 24px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- body-md-strong16px · weight 700 · lh 24px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- button-md14px · weight 500 · lh 20px · tracking -0.36pxThe quick brown fox jumps over the lazy dog
- eyebrow12px · weight 500 · lh 16px · tracking 1.2pxThe quick brown fox jumps over the lazy dog
Layout
Radii and spacing
6 corner radii and 10 spacing values. Shape language: mixed.
Radii
- none0px
- sm4px
- md8px
- lg16px
- full9999px
- pill3.35544e+07px
Spacing
- xxs4px
- xs8px
- sm10px
- md12px
- base16px
- lg20px
- xl24px
- 2xl32px
- 3xl48px
- band120px
Components
17 components
Each rendered from its tokens (color, type, radius, padding) on Modal's own canvas.
- Nav Barnav-barNav Bar
- Nav Linknav-linkNav Link
- Button Primarybutton-primaryButton Primary
- Button Primary Hoverbutton-primary-hoverButton Primary Hover
- Button Secondarybutton-secondaryButton Secondary
- Button Ghostbutton-ghostButton Ghost
- Hero Bandhero-bandHero Band
- Dark Feature Banddark-feature-bandDark Feature Band
- Light Feature Bandlight-feature-bandLight Feature Band
- Code Frame Cardcode-frame-cardCode Frame Card
- Feature Cellfeature-cellFeature Cell
- Eyebrow Tageyebrow-tagEyebrow Tag
- Type here…text-inputText Input
- FooterfooterFooter
- Link Inlinelink-inlineLink Inline
- DividerdividerDivider
- Focus Ringfocus-ringFocus Ring
In use
The system, in use
Modal's tokens on the kind of product it builds.
Build something people actually use.
A short paragraph of marketing copy that previews how the brand's display tier and body tier read together. Two sentences is usually enough.
FAQ
Modal design system FAQ
Common questions about Modal's tokens, components, and how to use this DESIGN.md in your project.
Read next
Related reading
Specs, directories, and component libraries that pair with this design system.
- Browse all design systemsThe full directory of DESIGN.md files on shadcn.io, with live mockups for each.shadcn.io
- Modal — official siteRun CPU, GPU, and data-intensive compute at scale on the serverless platform for AI and data teams.modal.com (opens in a new tab)
- The DESIGN.md specificationGoogle Labs' open spec for machine-readable design system files.github.com (opens in a new tab)
Use it
Use Modal in your project
One machine-readable file. Drop it into Claude, Cursor, or any AI tool that reads DESIGN.md.
Download the DESIGN.md
One machine-readable file: every color, type, radius, spacing, and component token of Modal.
Feed it to your AI tool
Drop it into Claude, Cursor, or GitHub Copilot. The agent writes React components and Tailwind classes that match Modal's visual language.
Reference the tokens directly
Or paste the values into your Tailwind config, CSS variables, or component library: every color, size and radius is a quoted, ready-to-copy value.
Read the full DESIGN.md: overview, rationale, do’s and don’ts
Overview
Modal's marketing surface is a serverless-compute brand styled as a near-black operator console — the page sells GPU compute, sandboxes, and batch jobs, but it does it with a warm {colors.canvas} (#231c1c) ground, Goga grotesque headlines in pale-green ink {colors.ink} (#ddffdc), and a single radioactive-lime {colors.primary} (#7fee64) pill button as the only saturated surface on the entire page. The whole composition inverts the category default. Where Vercel commits to grayscale neutrals and Geist Sans at weight 600, where Linear commits to indigo voltage on a slate canvas, Modal commits to a warm-black operator ground, an evenly-weighted Goga headline at neutral tracking, and a phosphor-green CTA pill that runs {rounded.pill} (a 3.35544e+07px float-to-pill radius) at 38px height.
Single-voltage chromatic restraint: most dev-infra brands command attention with two or three saturated colors — a brand hue, a status green, an error red. Modal collapses that into one. {colors.primary} (#7fee64) appears 20 times across the page; the entire rest of the chrome runs on pale-green ink {colors.ink} (#ddffdc) and graded hairlines from {colors.hairline} (#3e4a3c) through {colors.hairline-deep} (#4d614c). The result is a page where every CTA cluster has exactly one conversion target — the lime is the eye magnet, and the rest of the page steps aside.
Neutral tracking as the brand voice: Goga never tracks negative on the marketing surface. The 64px hero, the 60px H2, and the 24px card title all sit at letter-spacing: normal (Inter's -0.36px tracking is reserved for UI copy). Where most display typefaces lean on aggressive negative tracking to feel "designed", Modal lets Goga breathe. The page reads as steadier for it, even at 64px.
Key Characteristics:
- A single saturated lime CTA —
{colors.primary}(#7fee64) — fills theGet Startedpill at 38px height with{rounded.pill}(3.35544e+07px) float-to-pill radius. Every secondary action runs as a{colors.hairline-deep}(#4d614c) bordered ghost on the dark ground. - Pale-green ink —
{colors.ink}(#ddffdc) — is the structural backbone with 411 page occurrences (218 text, 193 border), the single highest-frequency color on the page. It replaces the white that most dark-canvas brands default to. - Goga grotesque at neutral tracking carries every display tier — 64px hero / 60px H2 / 24px card title — all loaded at weight 400-500 with
letter-spacing: normal. Inter Variable carries every UI line at weight 500 with-0.36pxtracking. - Dual-canvas polarity divides the page — upper sections run
{colors.canvas}(#231c1c) near-black with pale-green ink; lower sections flip to{colors.canvas-light}(#ddffdc) pale-green with black ink. The polarity flip itself acts as the section divider. - The float-to-pill
3.35544e+07pxradius value appears 52 times across the page (against only 4 occurrences of standard9999px). It is the brand's preferred capsule trick — guaranteed-perfect pills regardless of element height. - Spacing is built around a 16px base (41 occurrences) with a 48px section base and a 120px band rhythm; card interiors sit at 20-24px padding with 8-16px corner radius.
Colors
The palette splits into three layers: a warm-black structural ground with pale-green ink, a single radioactive-lime accent, and a graded pale-green hairline ladder for borders and supporting text. The pale-green ink does the work that white does in most dark-canvas systems; the lime stays scarce.
Brand & Accent
- Modal Lime (
#7fee64) — frequency 20. Used as bg (8), border (6), text (6). The single saturated filled surface on the page — fills only theGet Startedprimary CTA pill at 38px height. Never used as a card background, never softened to a tint, never paired with a second saturated color. - Accent Pale (
#bbe6ac) — frequency 0 (declared in:rootfor dataviz primary). The pressed / hover variant of the lime CTA, slightly desaturated toward the pale-green ink family. - Accent Dark (
#4c833e) — frequency 0 (declared as--color-icon-accent). The brand's deep-green accent reserved for status icons on the pale-green canvas — never used as a CTA fill on the dark ground.
Surface
- Modal Ground (
#231c1c) — frequency 0 in computed pixels but declared as--color-ground/--color-surface-primaryin:root. Not black, not gray — a near-black with a faint red tilt at hue 18 / oklch 0.234 that reads as warm rather than dead. The page's primary canvas under hero and dark feature bands. - Canvas Band (
#000000) — frequency 232. Used as text (119), bg (11), border (88), gradient (12). The deeper sibling of the ground — fills the centralDesigned to help AI teams deploy fasterdark band and the code-frame card edges. - Canvas Elevated (
#212525) — frequency 7. Used as bg (1), gradient (6). The slightly-lifted surface inside dark gradient overlays — code-frame cards and inline terminal embeds. - Canvas Light (
#ddffdc) — see Text. Also doubles as the polarity-flip section canvas for thePowering any ML workloadband. - Canvas Light Soft (
#def0dd) — frequency 5. Used as bg (5). The slightly-deeper sibling ofcanvas-lightfor feature cells inside the pale-green band.
Text
- Pale-Green Ink (
#ddffdc) — frequency 411. Used as text (218), bg (0), border (193). The structural workhorse — every headline, body paragraph, and nav-link label across the dark band, plus 193 hairline-tinted borders on the same surfaces. Reads as a softened green rather than a neutral white; the tint is what binds it to the rest of the green system. - Ink Strong (
#c8f9b6) — frequency 15. Used as text (7), border (7), bg (1). The brighter pale-green for emphasized headings on the central dark band (theDesigned to help AI teams deploy fasterH2). - Body Muted (
#8cab87) — frequency 8. Used as text (4), border (4). The secondary body color — sub-headings, illustrated-card captions, supporting paragraph copy. Reads as a softened green-gray rather than a neutral mute. - Body Mute Gray (
#869085) — frequency 31. Used as border (31). The hairline-only mute green — appears only as border, never as text or bg. - Tertiary (
#697368) — frequency 4. Used as text (2), border (2). Lowest-priority text — fine print, footer captions, declared as--color-foreground-tertiary. - Zinc Tertiary (
#a3a3a3) — frequency 0 in computed pixels but declared as--color-foreground-secondary. The neutral zinc fallback for secondary text inside the pale-green band where green-on-green would lose contrast.
Hairline Ladder
The brand's structural edges are a graded ladder of pale greens, not neutrals:
- Hairline (
#3e4a3c) — frequency 7. Used as text (3), bg (1), border (3). The default 1px edge color across dark-band cards and dividers, declared as--color-edge-primary. - Hairline Strong (
#485346) — frequency 8. Used as border (8). The next step up — heavier dividers between dark feature panels. - Hairline Deep (
#4d614c) — frequency 17. Used as text (7), bg (3), border (7). The deepest hairline — outlines on the secondary buttons and inline pills. - Caption (
#677d64) — frequency 20. Used as text (10), border (10). Supporting hairline tier — borders on tertiary surfaces and the fine-print caption color.
The hairline ladder all sits in the same 140° hue family as the pale-green ink, with chroma stepping from near-zero up to 0.046 — every edge color on the page is a desaturated green, never a neutral gray.
Typography
Font Family
Two faces carry the entire page:
- Goga — a proprietary humanist grotesque with serif-adjacent terminals on the lowercase descenders. Loaded at weights 400 and 500 across the display tiers — hero at 64px / weight 500 / 64px line / neutral tracking; H2 at 60px / weight 400 /
-0.36pxtracking; mid-tier H2 at 54px / weight 400 / neutral tracking; large H2 at 40px / weight 400 / neutral tracking; card titles at 24px / weight 400 / neutral tracking. Goga never appears below 20px on the marketing surface. - Inter Variable — Rasmus Andersson's open-source grotesque. Loaded at weights 400, 500, 600, and 700 — body paragraphs at 16px / weight 500 /
-0.36pxtracking (the dominant UI weight, 122 occurrences); small body at 14px / weight 500 /-0.36pxtracking; uppercase eyebrows at 12px / weight 500 /1.2pxtracking. Inter never appears above 16px on the marketing surface.
Hierarchy
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
{typography.display-xl} | 64px | 500 | 64px | normal | Hero headline (AI infrastructure that developers love). |
{typography.display-lg} | 60px | 400 | 60px | -0.36px | The single-line dark-band H2. |
{typography.display-md} | 54px | 400 | 59.4px | normal | Section H2 (Designed to help AI teams deploy faster). |
{typography.display-sm} | 40px | 400 | 44px | normal | Light-band H2 inside the pale-green polarity flip. |
{typography.heading-md} | 24px | 400 | 31.2px | normal | Card titles, feature-cell headings, mid-density supporting headlines. |
{typography.heading-sm} | 20px | 400 | 28px | normal | Inline section sub-headings. |
{typography.body-md} | 16px | 500 | 24px | -0.36px | Dominant body text — 122 occurrences across paragraphs, nav-links, and inline labels. |
{typography.body-md-regular} | 16px | 400 | 24px | -0.36px | Regular-weight body inside dense paragraph blocks. |
{typography.body-md-strong} | 16px | 700 | 24px | -0.36px | Inline emphasis inside body paragraphs. |
{typography.body-sm} | 14px | 500 | 20px | -0.36px | Footer copy, small captions, feature-cell metadata. |
{typography.button-md} | 14px | 500 | 20px | -0.36px | Get Started button, secondary button labels. |
{typography.eyebrow} | 12px | 500 | 16px | 1.2px | Uppercase section eyebrow tags, +1.2px tracking. |
Principles
- Goga sits at neutral tracking, Inter sits at
-0.36px. The two faces never share a tracking value. The brand's discipline is in the half-step. - Weight 500 is the Inter ceiling and the Goga floor. Inter never escalates past 500 except for inline body emphasis at 700; Goga drops to 400 below the 64px hero. Both faces stay inside a narrow weight window.
- Goga never appears below 20px. Below 20px belongs to Inter Variable; the role-split is strict.
- Eyebrows are uppercase + tracked. The
1.2pxtracking on 12px uppercase Inter is the brand's only positive letter-spacing — every other token is zero or negative.
Font Substitutes
Goga is proprietary. Close open-source substitutes: GT America Display, PP Neue Montreal, or Söhne Breit at weight 400-500 with neutral tracking. Inter Variable is itself open-source — pull it from Google Fonts or rsms.me directly.
Layout
Spacing System
- Base unit: 4px, with a strong 16px base (the brand's
{spacing.base}, 41 page occurrences) that dominates section padding. A 48px secondary base (33 occurrences) and a 20px sibling (30 occurrences) carry mid-density rhythm. - Tokens:
{spacing.xxs}4px ·{spacing.xs}8px ·{spacing.sm}10px ·{spacing.md}12px ·{spacing.base}16px ·{spacing.lg}20px ·{spacing.xl}24px ·{spacing.2xl}32px ·{spacing.3xl}48px ·{spacing.band}120px. - Section padding: marketing bands stretch to
{spacing.band}(120px) top/bottom — the rhythm that lets each feature scene occupy its own page-height window. - Card interior padding:
code-frame-cardsits at{spacing.lg}(20px); feature-cells at{spacing.lg} {spacing.base}(20px / 16px). - Inline gap: nav rows and feature clusters use
{spacing.md}(12px) to{spacing.lg}(20px) between siblings.
Grid & Container
- Max width: roughly 1100–1240px content column. The hero pulls in further (~603px headline width per the extracted
widthPx: 603). - Column patterns:
- Hero: center-stacked, with the headline / subhead / lime CTA / secondary CTA stack at the page center.
- Dark feature band: 2-up split with the body left and a code-frame or chart card right.
- Light feature band: 5-up icon row across the
Powering any ML workloadstrip; 2-up grid below forBuild on a powerful foundation. - Footer: multi-column link grid above a closing logo strip.
Whitespace Philosophy
Generous vertical space between bands ({spacing.band} 120px) lets each feature scene occupy its own page-height window. Inside a section, the eyebrow-to-headline gap is tight (~16px), then a wider gap before the body-to-CTA cluster. Whitespace, not dividers, separates the bands — the hairline {colors.hairline} (#3e4a3c) is reserved for inside-card structure and 1px horizontal rules.
Responsive Strategy
| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 600px | Hero stacks vertically, 2-up feature bands collapse to single-column with code-frame above text. |
| Tablet | 600–1023px | 2-up dark bands hold; the Powering any ML workload 5-up icon row drops to 3-up. |
| Desktop | ≥ 1024px | Full 2-up alternating dark bands; 5-up icon row; nav row stays horizontal with all links visible. |
Touch targets: the 38px-tall button-primary falls just below the 44px WCAG floor — the live page inflates touch area via padding rather than visual height.
Elevation & Depth
Modal's elevation system is built on hairlines and dark-canvas gradient lifts, not drop-shadows. The hierarchy:
| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No border, no shadow. | Hero band, full-width section backgrounds. |
| Level 1 — Hairline | 1px unbroken {colors.hairline} (#3e4a3c) or {colors.hairline-deep} (#4d614c). | Default card chrome — code-frame cards, feature cells, nav bar, footer dividers, secondary buttons. |
| Level 2 — Gradient Lift | Radial gradient from {colors.canvas-elevated} (#212525) into {colors.canvas-band} (#000000) under code panels and chart cards. | The brand's primary "depth" cue on the dark canvas — replaces shadow with a chromatic step-up. |
| Level 3 — Polarity Flip | Flip from {colors.canvas} (#231c1c) ground to {colors.canvas-light} (#ddffdc) pale-green canvas. | Used once per page as the boundary between operator-pitch and editorial close — the polarity itself is the depth cue. |
Decorative Depth
- Gradient-as-depth: the central dark band uses a radial gradient from
{colors.canvas-elevated}into{colors.canvas-band}to lift code-frame embeds off the surrounding ground. - Hairline as edge: the page reads as composed of stacked rectangles, all separated by 1px hairlines in the pale-green family rather than shadow drops.
- Polarity flip as section punctuation: the
{colors.canvas-light}(#ddffdc) supporting band is the single depth-change cue on the marketing surface — the upper page stays on{colors.canvas}(#231c1c).
Shapes
Border Radius Scale
| Token | Value | Use |
|---|---|---|
{rounded.none} | 0px | Full-bleed bands, headline blocks, body paragraphs. |
{rounded.sm} | 4px | Tightest inline pill — used on inline code marks and metadata chips. |
{rounded.md} | 8px | Default card chrome — 13 occurrences across the page on feature cells and code-frame insets. |
{rounded.lg} | 16px | Large card chrome — 8 occurrences on the primary code-frame-card containers. |
{rounded.full} | 9999px | The conventional pill — 4 occurrences on small badges and the eyebrow tags. |
{rounded.pill} | 3.35544e+07px | The float-to-pill capsule — 52 occurrences, the brand's dominant button radius. Guarantees perfect pills regardless of element height. |
Component Geometry
- Pill CTA: 38px height with
{rounded.pill}(3.35544e+07px) capsule. The9px 21pxpadding holds the label inset. - Code-frame cards: 16px corner radius on the outer container; inline code blocks inside use 4–8px corners.
- Feature cells: 8px corner radius on the inner pale-green band cells.
- Eyebrow tags: full pill at
9999px, tiny padding (4px 12px).
Components
Buttons
button-primary — the canonical lime pill, the only saturated filled surface on the page.
- Background
{colors.primary}(#7fee64), text{colors.primary-on}(#000000), label set in{typography.button-md}(14px / 500), padding9px 21px, shape{rounded.pill}(3.35544e+07px), height 38px. Reserved for the heroGet Startedtarget.
button-primary-hover — the pressed state.
- Background
{colors.accent-pale}(#bbe6ac), text and shape inherit frombutton-primary.
button-secondary — the ghost button paired with primary inside feature clusters.
- Background
{colors.canvas}(#231c1c), text{colors.ink}(#ddffdc), 1px{colors.hairline-deep}(#4d614c) border, same typography / shape / height asbutton-primary.
button-ghost — the borderless variant inside footer or low-emphasis surfaces.
- Background
{colors.canvas}(#231c1c), text{colors.ink}(#ddffdc), no border, same typography / shape / height.
Cards & Containers
code-frame-card — the canonical dark-band code-and-chart panel.
- Background
{colors.canvas-elevated}(#212525), text{colors.ink}(#ddffdc), 1px{colors.hairline-strong}(#485346) border, body in{typography.body-sm}, padding{spacing.lg}(20px), shape{rounded.lg}16px. Hosts code snippets, charts, and inline terminal embeds.
feature-cell — the small feature-grid card under the Build on a powerful foundation cluster.
- Background
{colors.canvas-light-soft}(#def0dd), text{colors.surface-light-ink}(#000000), 1px{colors.hairline}(#3e4a3c) border, body in{typography.body-md-regular}, padding{spacing.lg} {spacing.base}(20px / 16px), shape{rounded.md}8px.
Navigation
nav-bar — the sticky top nav.
- Background
{colors.canvas}(#231c1c), text{colors.ink}(#ddffdc), 1px bottom border{colors.hairline}(#3e4a3c), padding{spacing.md} {spacing.lg}. Layout: logo left, link row center,Log In / Get Startedcluster right.
nav-link — the link row inside nav-bar.
- Text
{colors.ink}(#ddffdc), set in{typography.body-md}(16px / 500), padding0 {spacing.md}, height 23px.
footer — the bottom multi-column nav.
- Background
{colors.canvas}(#231c1c), text{colors.body-mute}(#869085), top border{colors.hairline}(#3e4a3c), padding{spacing.3xl} {spacing.lg}. Column headings in{typography.eyebrow}(uppercase, weight 500,+1.2pxtracking); link rows in{typography.body-sm}.
Signature Components
hero-band — the opening dark band with the lime CTA.
- Background
{colors.canvas}(#231c1c), text{colors.ink}(#ddffdc), padding{spacing.band} {spacing.3xl}(120px / 48px). Inside: a centered 64px Goga headline (AI infrastructure that developers love), a 16px Inter Variable subhead, the limebutton-primary, and a hairline-borderedbutton-secondarypaired right.
dark-feature-band — the central operator-pitch band.
- Background
{colors.canvas-band}(#000000), text{colors.ink-strong}(#c8f9b6), padding{spacing.band} {spacing.3xl}. Hosts theDesigned to help AI teams deploy fasterH2 in{typography.display-lg}(60px Goga / weight 400) plus a 2-up grid ofcode-frame-cardpanels.
light-feature-band — the polarity-flip pale-green band.
- Background
{colors.canvas-light}(#ddffdc), text{colors.surface-light-ink}(#000000), padding{spacing.band} {spacing.3xl}. Hosts a 5-up icon strip (Powering any ML workload) above a 2-upfeature-cellgrid (Build on a powerful foundation).
eyebrow-tag — the small uppercase metadata pill above section headlines.
- Background
{colors.canvas}(#231c1c), text{colors.body-mute}(#869085), label in{typography.eyebrow}(12px / 500 /+1.2pxtracking, uppercase), shape{rounded.full}, padding{spacing.xxs} {spacing.md}.
text-input — the form input on sign-up flows.
- Background
{colors.canvas}(#231c1c), text{colors.ink}(#ddffdc), 1px{colors.hairline-deep}(#4d614c) border, body in{typography.body-md}, padding{spacing.sm} {spacing.md}(10px / 12px), shape{rounded.md}8px, height 38px.
link-inline — body-copy inline links.
- Text
{colors.primary}(#7fee64), body in{typography.body-md}, underlined on hover.
divider — the horizontal hairline rule between sections inside cards.
- Background
{colors.hairline}(#3e4a3c), height 1px.
focus-ring — the accessibility focus indicator.
- Border
{colors.primary}(#7fee64) at 50% opacity,{rounded.pill}corners on pill targets.
Do's and Don'ts
Do
- Set every display headline in Goga at neutral tracking —
display-xl,display-md,display-sm,heading-mdall shareletter-spacing: normal. Onlydisplay-lgruns-0.36px. - Use
{colors.ink}(#ddffdc) — not pure white — for every text element on the{colors.canvas}(#231c1c) ground. The pale-green tint is what binds the dark band into the broader green system. - Render the lime
{colors.primary}(#7fee64) only on the primary CTA pill. Every other call-to-action uses the hairline-borderedbutton-secondary(dark surface,#4d614cborder). - Use the
{rounded.pill}(3.35544e+07px) float-to-pill radius for every capsule. The standard9999pxvalue appears only 4 times on the live page;3.35544e+07pxappears 52 times. - Hold Inter UI copy at
-0.36pxtracking and Goga display copy atnormal. The tracking split is part of the role-split between display and UI.
Don't
- Don't use
{colors.primary}(#7fee64) for body text or card backgrounds — it's a single-button voltage (only 8 bg occurrences on the page, all in the sameGet StartedCTA). Using it for a status badge or a card surface diffuses the conversion target. - Don't replace
{colors.ink}(#ddffdc) with neutral pure white on the dark ground — pure white reads as foreign next to the pale-green hairline ladder (#3e4a3c→#4d614c→#677d64). The tint is what binds the page. - Don't pair
button-primarywith a second saturated color — every adjacent CTA is a{colors.hairline-deep}(#4d614c) bordered ghost. The lime is a single voltage point per viewport. - Don't run Goga at 14px or 12px. The grotesque is reserved for
display-*andheading-*tokens (20px and above); anything below 20px belongs to Inter Variable. - Don't substitute the
{rounded.pill}(3.35544e+07px) value with9999pxand call it equivalent. The float-to-pill value defends against future scale increases without re-tuning — this is a deliberate Tailwind move, not a typo. - Don't introduce a neutral gray hairline like Tailwind's
neutral-700. The hairline ladder{colors.hairline}/{colors.hairline-strong}/{colors.hairline-deep}is built on the same 140° green hue family as the ink; a neutral gray collapses the brand into a generic shadcn dark theme.
Known Gaps
- Hover and focus states: the extraction captured
--color-surface-primary-hoverand--color-surface-primary-activetokens, but per-component hover-state shifts on every component are not documented as tokens here. Thebutton-primary-hoveris inferred from the dataviz-pale variant. - Authenticated dashboard: this DESIGN.md covers only the public marketing surface. The Modal app dashboard (deployment logs, GPU pools, job queues) sits behind authentication and uses a denser surface vocabulary not captured here.
- Code-syntax theme: the inline code-frame cards use a green-on-black syntax theme that is integral to the brand voice but is not extracted as tokens — the syntax highlighting is rendered by a runtime highlighter rather than as DESIGN.md color tokens.
- Motion: subtle scroll-linked transitions and chart-data animations exist on the live page but timing curves and durations are not extracted.
- Dataviz palette: the brand declares a full eight-stop dataviz palette under
--color-c-dataviz-primary-1through--color-c-dataviz-primary-8(pale-green, terracotta, mustard, plum, and more) but only the primary{colors.accent-pale}(#bbe6ac) surface is referenced here — the full chart-color set lives in the brand's internal tokens repo.
Web Infrastructure & Hosting
More systems like this
More DESIGN.md files in Web Infrastructure & Hosting.
Pricing
Build it with Pro
The DESIGN.md files are free. Pro adds 6,000+ blocks, premium templates and the MCP server, so your AI editor builds in your system for you.
4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.
Billing
Billed once a year in USD. Cancel anytime.
- How many people can use the license.
- Client work, SaaS products and anything you charge for.
- Production-ready React sections: hero, pricing, features, dashboards and more.
- Complete multi-page sites you can ship as they are.
- React icons from every major library, installable with one command.
- Presets that restyle every block, in light and dark.
- Lets your AI editor search, preview and install blocks for you.
- Priority requests are answered first.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- Seats: 1 seat
- Commercial use: Personal & open source only
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: Basic usage
- Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
- Seats: Up to 5 seats
- Commercial use: Included
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: High usage
- Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
- Seats: Unlimited seats
- Commercial use: Included
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: Unlimited usage
- Support: Priority
Billed once a year in USD. Cancel anytime.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- How many people can use the license.Seats: 1 seat
- Client work, SaaS products and anything you charge for.Commercial use: Personal & open source only
- Production-ready React sections: hero, pricing, features, dashboards and more.Pro blocks: 6,000+ blocks
- Complete multi-page sites you can ship as they are.Templates: All 14 templates
- React icons from every major library, installable with one command.React icons: 294k+ icons
- Presets that restyle every block, in light and dark.Themes: All 59 themes
- Lets your AI editor search, preview and install blocks for you.MCP server: Basic usage
- Priority requests are answered first.Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
Everything in Individual, plus
- How many people can use the license.Seats: Up to 5 seats
- Client work, SaaS products and anything you charge for.Commercial use: Included
- Lets your AI editor search, preview and install blocks for you.MCP server: High usage
- Priority requests are answered first.Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
Everything in Team, plus
- How many people can use the license.Seats: Unlimited seats
- Lets your AI editor search, preview and install blocks for you.MCP server: Unlimited usage
- Secure checkout via Stripe
- Code lives in your repo
- Keep what you've shipped if you cancel
- License terms
Your system, built for you
Every block, template and icon, installed by your AI agent in your design system. The DESIGN.md files stay free.