dark · sans · structured · developer · sandbox · cool · bright

DESIGN.md inspired by StackBlitz

Electric blue `#1574ef` on a graphite `#1c1f25` canvas — the in-browser IDE that built Bolt.

By webdesignhot · stackblitz.com
$ npx @webdesignhot/design-md add stackblitz
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #1c1f25
  • bg-deep #15181d
  • bg-darker #101216
  • surface #24272e
  • surface-high #2c3038
  • surface-low #1f2127
  • surface-elev #363b45
  • text AAA · 16.5 #ffffff
  • text-strong #ffffff
  • text-body #e4e7ec
  • text-muted #9ba3b4
  • text-soft #7d8694
  • text-faint — · 2.5 #565d6b
  • text-on-brand #ffffff
  • brand AA·LG · 3.8 #1574ef
  • brand-hover #2b80f0
  • brand-deep #0f5fcc
  • brand-soft rgba(21,116,239,0.16)
  • brand-tint rgba(21,116,239,0.08)
  • accent-bolt #1574ef
  • accent-purple #8b5cf6
  • accent-purple-soft rgba(139,92,246,0.16)
  • accent-cyan #22d3ee
  • on-brand #ffffff
  • border — · 1.3 rgba(255,255,255,0.08)
  • border-strong — · 1.5 rgba(255,255,255,0.14)
  • border-soft rgba(255,255,255,0.04)
  • border-brand rgba(21,116,239,0.45)
  • signin-bg rgba(49,61,94,0.24)
  • signin-text rgba(255,255,255,0.8)
  • link #1574ef
  • link-hover #2b80f0
  • success #34d399
  • success-bg rgba(52,211,153,0.15)
  • warning #fbbf24
  • warning-bg rgba(251,191,36,0.15)
  • danger #f87171
  • danger-bg rgba(248,113,113,0.15)
  • info #1574ef
  • shadow-deep rgba(0,0,0,0.45)
  • shadow-soft rgba(0,0,0,0.25)
  • shadow-glow rgba(21,116,239,0.28)
Typography
Ship faster than ever.
display-hero Manrope 94px w600 -0.03em
Ship faster than ever.
display-lg Manrope 64px w700 -0.025em
Ship faster than ever.
h1 Manrope 48px w700 -0.02em
Built for teams that ship.
h2 Manrope 36px w600 -0.015em
A complete kit
h3 Manrope 28px w600 -0.01em
The quick brown fox jumps over the lazy dog.
h4 Manrope 22px w600 -0.005em
The quick brown fox jumps over the lazy dog.
h5 Manrope 18px w600 0
The quick brown fox jumps over the lazy dog.
body-large Inter 18px w400 0
The quick brown fox jumps over the lazy dog.
body Inter 16px w400 0
The quick brown fox jumps over the lazy dog.
button Inter 15px w600 0
The quick brown fox jumps over the lazy dog.
body-small Inter 14px w400 0
The quick brown fox jumps over the lazy dog.
nav Inter 14px w500 0
npx @webdesignhot/design-md add stripe
code ui-monospace 14px w400 0
The quick brown fox jumps over the lazy dog.
button-small Inter 13px w600 0
OUR DESIGN SYSTEM
caption Inter 13px w400 0
OUR DESIGN SYSTEM
label Inter 12px w600 0.04em
npx @webdesignhot/design-md add stripe
code-small ui-monospace 12px w400 0
OUR DESIGN SYSTEM
label-uppercase Inter 11px w600 0.08em
The quick brown fox jumps over the lazy dog.
micro ui-monospace 11px w500 0.02em
Spacing
  • step-0 0px
  • step-1 4px
  • step-2 8px
  • step-3 12px
  • step-4 16px
  • step-5 20px
  • step-6 24px
  • step-7 32px
  • step-8 40px
  • step-9 48px
  • step-10 64px
  • step-11 80px
  • step-12 96px
  • step-13 128px
Radius
  • micro 2px
  • sm 4px
  • md 8px
  • lg 10px
  • xl 12px
  • xxl 16px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 8/8 mapped · webdesignhot/0.1

Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.

  • background bg
  • foreground text
  • primary brand
  • primary-foreground on-brand
  • accent accent-bolt
  • muted text-muted
  • border border
  • ring border-brand
Lineage & influences

StackBlitz's marketing aesthetic is the in-browser IDE turned into a landing page. The canvas is a cool graphite #1c1f25 — a neutral, slightly blue-grey near-black that reads as "editor chrome" rather than Vercel's pure void or Replit's navy ink — and the single brand colour is an electric, software-honest blue #1574ef (rgb 21,116,239) that does every piece of action work, from the flagship `Try Bolt.new` CTA to links and focus rings. That same blue is the through-line to Bolt.new, the AI app-builder StackBlitz shipped on top of its WebContainer technology, so the marketing colour and the product colour are one and the same. The type system pairs Manrope — a rounded-geometric grotesque — for display, hitting a towering 94px at weight 600 on the hero, with Inter for body and UI at a comfortable 16px / 1.6. There is no custom foundry typeface and no serif; the identity is geometric-sans display over neutral-sans body. The defining visual move is the live editor: StackBlitz pioneered the in-browser dev environment (WebContainers run Node.js entirely client-side), so the hero shows a real, booting editor + preview rather than a static screenshot. The secondary chromatic energy comes from AI-feature contexts — a violet #8b5cf6 and a cyan #22d3ee appear in Bolt and AI moments — but the action layer stays blue, always.

  • StackBlitz's own AI app-builder — shares the electric blue and supplies the marketing's flagship CTA
  • The client-side Node.js runtime that makes the live in-browser editor possible — the technical reason the hero can boot a real environment
  • The neutral UI/body typeface — workhorse for running text and interface labels
  • The rounded-geometric grotesque used for display headlines — gives the hero its confident, modern character
  • Dark-mode marketing discipline — flat near-black canvas, single saturated brand accent, generous product real estate
  • Sibling cloud-IDE — shared "editor-as-marketing" visual heritage, dark canvas with one saturated action colour
Export 4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

:root { --bg, --text, --brand, … } you can paste anywhere

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: StackBlitz
tagline: Electric blue `#1574ef` on a graphite `#1c1f25` canvas — the in-browser IDE that built Bolt.
updated_at: 2026-05-29T00:00:00.000Z
published_at: 2026-05-28T23:12:19.064Z
author: webdesignhot
source_url: https://stackblitz.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [dev-tools, ai, saas]
tags: [dark, sans, structured, developer, sandbox, cool, bright]
preview_swatch: ['#1c1f25', '#1574ef', '#ffffff']
related: [replit, vercel, cursor]
description: 'StackBlitz''s marketing site runs on a cool graphite `#1c1f25` canvas with a single electric blue `#1574ef` doing all the action work — the same blue that powers its breakout product, Bolt.new. The type system pairs Manrope for display (a rounded-geometric grotesque, h1 at a towering 94px / 600) with Inter for body, and the layout leans dense and product-forward: faux-IDE frames, instant-boot demos, and a confident "Click. Code. Done." cadence. Where Replit goes navy-ink with saturated cyan, StackBlitz goes neutral graphite with a true product blue — the blue reads as software-honest rather than neon, signalling "this is the editor, not a brochure."'


# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  primary-foreground: on-brand
  accent: accent-bolt
  muted: text-muted
  border: border
  ring: border-brand
colors:
  bg: '#1c1f25'
  bg-deep: '#15181d'
  bg-darker: '#101216'
  surface: '#24272e'
  surface-high: '#2c3038'
  surface-low: '#1f2127'
  surface-elev: '#363b45'
  text: '#ffffff'
  text-strong: '#ffffff'
  text-body: '#e4e7ec'
  text-muted: '#9ba3b4'
  text-soft: '#7d8694'
  text-faint: '#565d6b'
  text-on-brand: '#ffffff'
  brand: '#1574ef'
  brand-hover: '#2b80f0'
  brand-deep: '#0f5fcc'
  brand-soft: 'rgba(21,116,239,0.16)'
  brand-tint: 'rgba(21,116,239,0.08)'
  accent-bolt: '#1574ef'
  accent-purple: '#8b5cf6'
  accent-purple-soft: 'rgba(139,92,246,0.16)'
  accent-cyan: '#22d3ee'
  on-brand: '#ffffff'
  border: 'rgba(255,255,255,0.08)'
  border-strong: 'rgba(255,255,255,0.14)'
  border-soft: 'rgba(255,255,255,0.04)'
  border-brand: 'rgba(21,116,239,0.45)'
  signin-bg: 'rgba(49,61,94,0.24)'
  signin-text: 'rgba(255,255,255,0.8)'
  link: '#1574ef'
  link-hover: '#2b80f0'
  success: '#34d399'
  success-bg: 'rgba(52,211,153,0.15)'
  warning: '#fbbf24'
  warning-bg: 'rgba(251,191,36,0.15)'
  danger: '#f87171'
  danger-bg: 'rgba(248,113,113,0.15)'
  info: '#1574ef'
  shadow-deep: 'rgba(0,0,0,0.45)'
  shadow-soft: 'rgba(0,0,0,0.25)'
  shadow-glow: 'rgba(21,116,239,0.28)'

typography:
  display:
    family: 'Manrope, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [500, 600, 700, 800]
  body:
    family: 'Inter, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600]
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 94, weight: 600, lineHeight: 1.0,  tracking: '-0.03em',  family: display }
    display-lg:      { size: 64, weight: 700, lineHeight: 1.04, tracking: '-0.025em', family: display }
    h1:              { size: 48, weight: 700, lineHeight: 1.08, tracking: '-0.02em',  family: display }
    h2:              { size: 36, weight: 600, lineHeight: 1.15, tracking: '-0.015em', family: display }
    h3:              { size: 28, weight: 600, lineHeight: 1.22, tracking: '-0.01em',  family: display }
    h4:              { size: 22, weight: 600, lineHeight: 1.3,  tracking: '-0.005em', family: display }
    h5:              { size: 18, weight: 600, lineHeight: 1.35, tracking: '0',        family: display }
    body-large:      { size: 18, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body-small:      { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    button:          { size: 15, weight: 600, lineHeight: 1.2,  tracking: '0',        family: body }
    button-small:    { size: 13, weight: 600, lineHeight: 1.2,  tracking: '0',        family: body }
    nav:             { size: 14, weight: 500, lineHeight: 1.2,  tracking: '0',        family: body }
    caption:         { size: 13, weight: 400, lineHeight: 1.45, tracking: '0',        family: body }
    label:           { size: 12, weight: 600, lineHeight: 1.3,  tracking: '0.04em',   family: body }
    label-uppercase: { size: 11, weight: 600, lineHeight: 1.3,  tracking: '0.08em',   family: body }
    code:            { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: mono }
    code-small:      { size: 12, weight: 400, lineHeight: 1.5,  tracking: '0',        family: mono }
    micro:           { size: 11, weight: 500, lineHeight: 1.4,  tracking: '0.02em',   family: mono }

radius:
  micro: 2
  sm: 4
  md: 8
  lg: 10
  xl: 12
  xxl: 16
  pill: 9999

spacing:
  base: 4
  scale: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128]

layout:
  page-width: 1280
  prose-width: 720
  header-height: 64
  gutter: 24
  section-y: 96

components:
  button-primary:
    background: brand
    text: on-brand
    radius: 10
    padding: '11px 18px'
    font: 'Inter 15px / weight 600'
    hover: 'background → #2b80f0; subtle blue glow'
    use: 'Electric blue CTA — white text on `#1574ef`, 10px radius. The flagship is `Try Bolt.new`.'
  button-secondary:
    background: 'rgba(49,61,94,0.24)'
    text: 'rgba(255,255,255,0.8)'
    border: 'none'
    radius: 8
    padding: '11px 18px'
    font: 'Inter 15px / weight 600'
    hover: 'background → rgba(49,61,94,0.4); text → #ffffff'
    use: 'Tinted-fill secondary — the live `Sign in` button. Cool slate wash, no border.'
  button-ghost:
    background: transparent
    text: text
    border: '1px solid rgba(255,255,255,0.14)'
    radius: 8
    padding: '11px 18px'
    hover: 'background → rgba(255,255,255,0.06)'
    use: 'Outlined tertiary on the graphite canvas'
  button-text:
    background: transparent
    text: brand
    border: 'none'
    padding: '8px 12px'
    hover: 'colour → #2b80f0'
    use: 'Inline link-button, often with a trailing arrow →'
  card:
    background: surface
    border: '1px solid rgba(255,255,255,0.08)'
    radius: 12
    padding: '24px'
    shadow: 'none'
    use: 'Feature card on the graphite canvas — flat-on-flat via surface ladder'
  editor-frame:
    background: bg-deep
    border: '1px solid rgba(255,255,255,0.14)'
    radius: 12
    chrome: 'window dots + tab strip with file label; live WebContainer preview pane beside the editor'
    use: 'Faux-IDE / live-boot hero — the defining illustration of an in-browser editor'
  input:
    background: surface-low
    border: '1px solid rgba(255,255,255,0.14)'
    text: text
    radius: 8
    padding: '10px 14px'
    use: 'Search and form fields; focus ring is electric blue'
  badge:
    background: 'rgba(255,255,255,0.08)'
    text: text
    border: 'none'
    radius: 9999
    padding: '4px 10px'
    font: 'Inter 12px / 600 / 0.04em'
    indicator: 'blue / purple dot 6px before label for NEW / AI'
    use: 'NEW / AI / Beta status labels'
  nav:
    background: 'rgba(28,31,37,0.8)'
    border-bottom: '1px solid rgba(255,255,255,0.06)'
    blur: 'backdrop-blur on scroll'
    use: 'Quiet graphite sticky bar — wordmark left, blue `Try Bolt.new` CTA right-pinned'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-snappy: 'cubic-bezier(0.16, 1, 0.3, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  hover-lift: 'translate-Y(-2px) on cards; blue glow on primary CTA'
  reduced-motion: 'respects prefers-reduced-motion: reduce — opacity-only, no translate, no boot-animation loop'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  none: 'none'
  ambient: '0 1px 2px rgba(0,0,0,0.25)'
  soft: '0 4px 12px rgba(0,0,0,0.25)'
  standard: '0 8px 24px rgba(0,0,0,0.35)'
  elevated: '0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25)'
  glow-blue: '0 0 24px rgba(21,116,239,0.28)'
  ring: '0 0 0 2px #1574ef'

accessibility:
  contrast-text-on-bg: 16.5                 # #ffffff on #1c1f25 — AAA
  contrast-text-on-brand: 4.4               # #ffffff on #1574ef — AA (large/UI)
  contrast-brand-on-bg: 3.75                # #1574ef on #1c1f25 — AA Large / UI 3:1
  focus-ring: '2px solid #1574ef, 2px offset'
  reduced-motion-honored: true
  keyboard-nav: 'tab follows DOM; blue focus ring on every interactive element'

lineage:
  summary: |
    StackBlitz's marketing aesthetic is the in-browser IDE turned into a
    landing page. The canvas is a cool graphite #1c1f25 — a neutral,
    slightly blue-grey near-black that reads as "editor chrome" rather than
    Vercel's pure void or Replit's navy ink — and the single brand colour
    is an electric, software-honest blue #1574ef (rgb 21,116,239) that does
    every piece of action work, from the flagship `Try Bolt.new` CTA to
    links and focus rings. That same blue is the through-line to Bolt.new,
    the AI app-builder StackBlitz shipped on top of its WebContainer
    technology, so the marketing colour and the product colour are one and
    the same. The type system pairs Manrope — a rounded-geometric grotesque
    — for display, hitting a towering 94px at weight 600 on the hero, with
    Inter for body and UI at a comfortable 16px / 1.6. There is no custom
    foundry typeface and no serif; the identity is geometric-sans display
    over neutral-sans body. The defining visual move is the live editor:
    StackBlitz pioneered the in-browser dev environment (WebContainers run
    Node.js entirely client-side), so the hero shows a real, booting editor
    + preview rather than a static screenshot. The secondary chromatic
    energy comes from AI-feature contexts — a violet #8b5cf6 and a cyan
    #22d3ee appear in Bolt and AI moments — but the action layer stays
    blue, always.
  influences:
    - name: Bolt.new
      role: StackBlitz's own AI app-builder — shares the electric blue and supplies the marketing's flagship CTA
      url: https://bolt.new
    - name: WebContainers
      role: The client-side Node.js runtime that makes the live in-browser editor possible — the technical reason the hero can boot a real environment
      url: https://webcontainers.io
    - name: Inter
      role: The neutral UI/body typeface — workhorse for running text and interface labels
      url: https://rsms.me/inter
    - name: Manrope
      role: The rounded-geometric grotesque used for display headlines — gives the hero its confident, modern character
      url: https://manropefont.com
    - name: Vercel
      role: Dark-mode marketing discipline — flat near-black canvas, single saturated brand accent, generous product real estate
      url: https://vercel.com
    - name: Replit
      role: Sibling cloud-IDE — shared "editor-as-marketing" visual heritage, dark canvas with one saturated action colour
      url: https://replit.com

dark-mode: native   # StackBlitz marketing is dark-first; the editor product has its own theming
---

## 1. Visual Theme & Atmosphere

StackBlitz's marketing site treats the editor itself as the brand. The canvas is a cool graphite `#1c1f25` — a neutral, faintly blue-grey near-black that reads like the chrome of a code editor rather than a void. On top of it sits a single electric blue `#1574ef` (rgb 21, 116, 239) that carries every piece of action: the flagship `Try Bolt.new` CTA, links, focus rings, and active states. The page reads as *you are looking at the product* — the hero boots a real in-browser environment, not a static mock, because StackBlitz's whole pitch is that the IDE runs in your tab.

The atmosphere is confident and software-honest. Where Vercel's dark mode is monastic pure-black with a white type wall, and Replit pushes a near-neon saturated cyan on navy ink, StackBlitz sits between them: a neutral graphite ground with a true product blue. The blue is bright enough to be the unmistakable focal point but never reads as decorative neon — it is the colour of a "primary" button in actual software, and that honesty is the point. The cool slate tint in the secondary `Sign in` button (`rgba(49,61,94,0.24)`) keeps the whole top bar in the same blue-grey temperature family.

The type system pairs Manrope for display with Inter for body. Manrope is a rounded-geometric grotesque, and StackBlitz pushes it hard: the hero headline lands at a towering **94px at weight 600**, line-height 1.0, with a tight `-0.03em` tracking that makes the wall of type feel architectural and assured. Body and interface text are Inter at 16px on a generous 1.6 line-height — neutral, legible, and quiet enough to let the headline and the blue do the talking. There is no serif anywhere and no custom foundry face; the identity is geometric-sans display over neutral-sans body.

Depth is achieved through a surface ladder rather than heavy shadow. The `#15181d` → `#1c1f25` → `#24272e` → `#2c3038` graphite ladder lets cards and panels lift via a background-step plus a faint white hairline (`rgba(255,255,255,0.08)`, `rgba(255,255,255,0.14)`). Real shadows appear only beneath the floating editor frame, lifting the "app" off the page. The one chromatic depth cue is a soft blue glow on the primary CTA hover — used sparingly so it always lands.

The cadence is product-forward and brisk. The brand's own tagline — *"Click. Code. Done."* — sets the rhythm: short, imperative, no marketing throat-clearing. The site assumes the reader is a developer who wants to see the thing run, so it shows the thing running.

**Key Characteristics:**
- Cool graphite `#1c1f25` canvas — a neutral blue-grey near-black, editor-chrome coloured, not pure void or navy ink
- Single electric blue `#1574ef` (rgb 21,116,239) brand — white text on it, 10px radius — owns the entire action layer
- The brand blue is shared with Bolt.new — marketing colour and product colour are identical
- Manrope display + Inter body — geometric-sans headlines over neutral-sans interface text, no serif
- Towering hero headline: Manrope 94px / 600 / `-0.03em` tracking, line-height 1.0
- Live in-browser editor as hero — WebContainers boot a real environment, not a static screenshot
- Tinted-slate secondary button (`rgba(49,61,94,0.24)`) keeps the top bar in one cool temperature
- Surface-ladder depth instead of shadow — flat-on-flat cards with faint white hairlines
- AI/Bolt accents (violet `#8b5cf6`, cyan `#22d3ee`) appear in feature contexts but never on the main CTA
- Brisk imperative voice — *"Click. Code. Done."*

## 2. Color Palette & Roles

### Primary

- **Bg / Graphite** (`#1c1f25`): the StackBlitz canvas. Cool blue-grey near-black — editor-chrome coloured, intentionally not `#000000`.
- **Brand / Electric Blue** (`#1574ef`): signature product blue (rgb 21,116,239) — does all action work. Always paired with white text on it.
- **Text Strong** (`#ffffff`): display headings and primary type at full white.
- **Text Body** (`#e4e7ec`): running body copy, near-white with a cool cast for slightly softer reading.

### Brand & Dark

- **Bg Deep** (`#15181d`): deeper nested surface — editor frame interior, code blocks beneath the canvas.
- **Bg Darker** (`#101216`): the deepest layer, used rarely for inset terminal/output panels.
- **Surface** (`#24272e`): card and panel base — the workhorse elevated surface.
- **Surface High** (`#2c3038`): hover and elevated panels.
- **Surface Low** (`#1f2127`): subtle stripe, input fill, nested element.
- **Surface Elev** (`#363b45`): selected or pressed panel state.

### Accent

- **Bolt Blue** (`#1574ef`): the action colour is the accent — there is no competing primary accent on the action layer.
- **Purple** (`#8b5cf6`): AI / Bolt feature highlight — gradients and AI-context illustration.
- **Cyan** (`#22d3ee`): tertiary highlight paired with purple in AI/WebContainer moments.

### Interactive

- **Brand** (`#1574ef`): primary CTA, link, active state.
- **Brand Hover** (`#2b80f0`): lighter blue on hover.
- **Brand Deep** (`#0f5fcc`): pressed state.
- **Brand Soft** (`rgba(21,116,239,0.16)`): blue-tinted background for highlighted regions and info banners.
- **Sign-in Fill** (`rgba(49,61,94,0.24)`): cool slate wash for the secondary button — the live `Sign in` style.

### Neutral Scale

- **Strong** (`#ffffff`): display text, primary headings.
- **Body** (`#e4e7ec`): primary running text.
- **Muted** (`#9ba3b4`): secondary copy and metadata.
- **Soft** (`#7d8694`): caption / placeholder.
- **Faint** (`#565d6b`): disabled labels.

### Surface & Borders

- **Border** (`rgba(255,255,255,0.08)`): 8% white hairline — the default rule.
- **Border Strong** (`rgba(255,255,255,0.14)`): 14% white for elevated panels, inputs, and outlined buttons.
- **Border Soft** (`rgba(255,255,255,0.04)`): subtle inset divider.
- **Border Brand** (`rgba(21,116,239,0.45)`): blue-tinted border for focused or selected interactive elements.

### Shadow Colors

- **Shadow Deep** (`rgba(0,0,0,0.45)`): primary depth beneath the floating editor frame.
- **Shadow Soft** (`rgba(0,0,0,0.25)`): subtle lift beneath cards and panels.
- **Shadow Glow Blue** (`rgba(21,116,239,0.28)`): on-hover glow around the primary CTA.

### Semantic

- **Success** background `rgba(52,211,153,0.15)`, text `#34d399`, border `rgba(52,211,153,0.3)`.
- **Warning** background `rgba(251,191,36,0.15)`, text `#fbbf24`, border `rgba(251,191,36,0.3)`.
- **Danger** background `rgba(248,113,113,0.15)`, text `#f87171`, border `rgba(248,113,113,0.3)`.
- **Info** uses the brand blue: background `rgba(21,116,239,0.16)`, text `#1574ef`, border `rgba(21,116,239,0.3)`.

## 3. Typography Rules

### Font Family

- **Display sans**: Manrope — a rounded-geometric grotesque, used for all headings and the towering hero.
- **Display fallback chain**: `Manrope, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif`.
- **Body sans**: Inter — the neutral UI/body workhorse for running text, nav, labels, and buttons.
- **Body fallback chain**: `Inter, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif`.
- **Mono companion**: system UI monospace — `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace`. Used inside the editor frame and for code samples; StackBlitz does not ship a custom mono on the marketing surface.
- **OpenType features** — standard ligatures and kerning; no `ss01`-style discipline. The character comes from Manrope's geometry, not from feature tuning.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|------|------|------|--------|-------------|----------------|-------|
| Display Hero | Manrope | 94 | 600 | 1.0 | -0.03em | Live hero headline — the towering wall of type |
| Display Large | Manrope | 64 | 700 | 1.04 | -0.025em | Secondary flagship statement |
| H1 | Manrope | 48 | 700 | 1.08 | -0.02em | Standard page headline |
| H2 | Manrope | 36 | 600 | 1.15 | -0.015em | Section heading |
| H3 | Manrope | 28 | 600 | 1.22 | -0.01em | Sub-section |
| H4 | Manrope | 22 | 600 | 1.30 | -0.005em | Card title |
| H5 | Manrope | 18 | 600 | 1.35 | 0 | Inline emphasis heading |
| Body Large | Inter | 18 | 400 | 1.60 | 0 | Lead paragraph |
| Body | Inter | 16 | 400 | 1.60 | 0 | Standard reading text |
| Body Small | Inter | 14 | 400 | 1.50 | 0 | Captions, footer |
| Button | Inter | 15 | 600 | 1.20 | 0 | Primary button label |
| Button Small | Inter | 13 | 600 | 1.20 | 0 | Compact buttons |
| Nav | Inter | 14 | 500 | 1.20 | 0 | Top-nav links |
| Caption | Inter | 13 | 400 | 1.45 | 0 | Helper text, image captions |
| Label | Inter | 12 | 600 | 1.30 | 0.04em | Status labels, eyebrows |
| Label Uppercase | Inter | 11 | 600 | 1.30 | 0.08em | "NEW", "BETA", "AI" tags |
| Code | mono | 14 | 400 | 1.55 | 0 | Code blocks, editor content |
| Code Small | mono | 12 | 400 | 1.50 | 0 | Inline code in body |
| Micro | mono | 11 | 500 | 1.40 | 0.02em | File path, metadata |

### Principles

- **Manrope is the display voice, Inter the body voice** — a deliberate two-family split. Manrope's rounded-geometric character carries the headlines; Inter stays neutral so it never competes.
- **The hero goes big and tight** — 94px at weight 600 with line-height 1.0 and `-0.03em` tracking. The size is the statement; the weight stays at 600, not 800, so it reads confident rather than shouty.
- **Tracking tightens with size** — `-0.03em` at 94px, `-0.02em` at 48px, normal at body sizes. Display feels architectural; body feels neutral.
- **Body breathes** — Inter at 16px on a generous 1.6 line-height. Reading comfort is prioritised over density in running copy.
- **No serif anywhere** — the identity is geometric-sans display + neutral-sans body. A serif would break the software-honest feel.
- **Mono is editor-scoped** — monospace appears only inside the editor frame and code samples, not in UI chrome.
- **Weight discipline** — display uses 600/700; body uses 400 (text), 500 (nav), 600 (buttons/labels). Labels and eyebrows go to 600 with positive tracking.

## 4. Component Stylings

### Buttons

**Primary — Electric Blue**
- Background: `#1574ef`
- Text: `#ffffff`
- Padding: `11px 18px`
- Radius: `10px`
- Font: 15px Inter weight 600
- Hover: background → `#2b80f0`; optional blue glow `0 0 24px rgba(21,116,239,0.28)`
- Active: background → `#0f5fcc`
- Use: primary CTA — `Try Bolt.new`, `Start building`, `Open editor`

**Secondary — Tinted Slate (Sign in)**
- Background: `rgba(49,61,94,0.24)` — cool slate wash
- Text: `rgba(255,255,255,0.8)`
- Border: none
- Padding: `11px 18px`
- Radius: `8px`
- Font: 15px Inter weight 600
- Hover: background → `rgba(49,61,94,0.4)`, text → `#ffffff`
- Use: secondary action paired with the blue primary — the live `Sign in` button

**Outlined Ghost**
- Background: transparent
- Text: `#ffffff`
- Border: `1px solid rgba(255,255,255,0.14)`
- Padding: `11px 18px`
- Radius: `8px`
- Hover: background → `rgba(255,255,255,0.06)`, border → `rgba(255,255,255,0.24)`
- Use: tertiary outlined action on the graphite canvas

**Text / Inline**
- Background: transparent
- Text: `#1574ef`
- No border
- Padding: `8px 12px`
- Hover: colour → `#2b80f0`
- Use: inline link-button, often with a trailing arrow `→`

**Disabled**
- Background: `rgba(255,255,255,0.06)`
- Text: `#565d6b`
- Border: `1px solid rgba(255,255,255,0.08)`
- No hover

### Cards & Containers

**Feature Card**
- Background: `#24272e`
- Border: `1px solid rgba(255,255,255,0.08)`
- Radius: `12px`
- Padding: `24px`
- Shadow: none (flat-on-flat)
- Hover: surface → `#2c3038`, border → `rgba(255,255,255,0.14)`, optional `translate-Y(-2px)`

**Editor Frame (live in-browser hero)**
- Background: `#15181d`
- Border: `1px solid rgba(255,255,255,0.14)`
- Radius: `12px`
- Chrome: window dots at top-left, tab strip with the current file label
- Inside: a real editor pane (mono code) beside a live preview pane — StackBlitz boots a WebContainer rather than showing a static image
- Shadow: `0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25)` to lift the "app" off the page
- Use: anchors the hero and feature sections

**Preview / Output Pane**
- Background: `#101216`
- Border: `1px solid rgba(255,255,255,0.08)`
- Radius: `8px`
- Inside: live app render or terminal output; blue accents on highlighted actions

### Badges, Tags, Pills

**Status Badge**
- Background: `rgba(255,255,255,0.08)`
- Text: `#ffffff`
- Border: none
- Radius: `9999px`
- Padding: `4px 10px`
- Font: Inter 12px / 600 / `0.04em`
- Indicator: 6px coloured dot before label — blue (NEW), purple (AI), cyan (Beta)

**Mono Tag**
- Background: `rgba(255,255,255,0.06)`
- Text: `#9ba3b4`
- Border: `1px solid rgba(255,255,255,0.08)`
- Radius: `4px`
- Padding: `2px 8px`
- Font: mono 11px / 500 / `0.08em` uppercase

### Inputs & Forms

- Background: `#1f2127`
- Border: `1px solid rgba(255,255,255,0.14)`
- Radius: `8px`
- Padding: `10px 14px`
- Font: Inter 15px / 400 / `#ffffff`
- Placeholder: `#7d8694`
- Focus: border → `#1574ef`, ring `2px rgba(21,116,239,0.35)`
- Label: Inter 13px / 500 / `#9ba3b4`
- Helper: Inter 12px / 400 / `#9ba3b4`
- Error: border → `#f87171`, helper → `#f87171`

### Navigation

- Background: `rgba(28,31,37,0.8)` — graphite with `backdrop-blur` once the page scrolls
- Border-bottom: `1px solid rgba(255,255,255,0.06)`
- Logo: white wordmark on the left
- Links: Inter 14px / 500 / `#e4e7ec`, hover → `#ffffff`
- CTA cluster: tinted-slate `Sign in` then blue `Try Bolt.new`, right-pinned
- Mobile: hamburger toggle, full-screen drawer on click

### Decorative Elements

- **Blue glow** — `0 0 24px rgba(21,116,239,0.28)` around the primary CTA on hover
- **Surface-ladder bands** — alternating `#1c1f25` and `#15181d` strips for section rhythm
- **Live editor frame** — the strongest visual asset; a booting environment used as illustration in the hero and key feature sections

## 5. Layout Principles

### Spacing System

- Base unit: `4px`
- Scale: `0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128`
- Density observation: medium-dense by marketing standards. StackBlitz packs product detail per scroll but lets running copy breathe at 1.6 line-height. The `4px` base allows fine UI tuning while sections keep a `96px` vertical rhythm.

### Grid & Container

- Max content width: `1280px` with `24px` gutters
- Hero bands give the live editor frame the dominant share of horizontal space
- Feature grids are typically three-column with `#24272e` cards
- Code/editor blocks may break out to wider widths, sometimes near full-bleed
- Vertical rhythm runs `96–128px` between sections

### Whitespace Philosophy

- **Product-forward, not airy** — the editor frame and feature grids earn their space; whitespace frames the product rather than dominating.
- **Editor-pane proportions** — section widths echo IDE pane geometry (editor + preview split) rather than golden-ratio editorial.
- **Reading comfort preserved** — despite the product density, body copy stays at 16px / 1.6 and caps reading width around 720px.

### Section Cadence

- Hero (live editor on `#1c1f25`) → feature grid (3-column on `#1c1f25`) → product-demo band (often `#15181d` for contrast) → logo wall / testimonial → pricing → CTA → footer
- No light-section breaks — the canvas stays graphite-dark throughout
- Surface-ladder swaps (`#1c1f25` ↔ `#15181d`) provide rhythm without breaking the dark discipline

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|------|-------|-----|
| Micro | 2px | Inline highlights, fine corners |
| Standard | 4px | Mono tags, status dots, small chips |
| Comfortable | 8px | Inputs, ghost/secondary buttons, preview panes |
| Relaxed | 10px | Primary CTA — the live `Try Bolt.new` radius |
| Large | 12px | Cards, editor frames |
| Featured | 16px | Hero cards, modal frames |
| Pill | 9999px | Status badges, avatars only |

The radii ladder is `4 / 8 / 10 / 12 / 16`. The notable token is the **10px primary button** — slightly softer than the 8px used on secondary and ghost buttons, giving the blue CTA a touch more presence. Cards and the editor frame land at `12px`. There are no fully-rounded CTAs; the shape vocabulary stays rectangular-with-soft-corners, like real software. Pills (`9999`) appear on tags and badges only.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | No shadow, surface ladder | Page canvas, body cards |
| 1 — Hairline | `1px solid rgba(255,255,255,0.08)` | Default card and panel separation |
| 2 — Surface Lift | Surface bg → next ladder rung + `1px solid rgba(255,255,255,0.14)` | Hover and elevated panels |
| 3 — Soft Shadow | `0 4px 12px rgba(0,0,0,0.25)` plus hairline | Cards and panels lifted off canvas |
| 4 — Elevated | `0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25)` | The live editor frame, modals |
| 5 — Blue Glow | `0 0 24px rgba(21,116,239,0.28)` | Primary CTA hover state |
| 6 — Ring | `2px solid #1574ef` at `2px` offset | Keyboard focus |

**Shadow Philosophy** — depth comes from the surface ladder (`#101216` → `#15181d` → `#1c1f25` → `#24272e` → `#2c3038`) and faint white hairlines (`rgba(255,255,255,0.08)`, `rgba(255,255,255,0.14)`). Real shadows are reserved for one job: lifting the live editor frame off the page so the "app" feels like it is floating in front of the marketing. Cards themselves are flat-on-flat. The blue glow is the single chromatic depth cue and appears only on the primary CTA hover.

## 8. Interaction & Motion

### Easing Curves

- **Standard** `cubic-bezier(0.4, 0, 0.2, 1)` — default for hover and state changes
- **Emphasized** `cubic-bezier(0.2, 0, 0, 1)` — hero entrance, glow expansion
- **Snappy** `cubic-bezier(0.16, 1, 0.3, 1)` — quick, slight overshoot for software-like state changes

### Duration Buckets

- Fast: `150ms` — colour swaps, ring fades
- Standard: `240ms` — button hover, card lift, dropdown open
- Slow: `320ms` — hero reveals, editor-frame boot reveal

### Per-Component Micro-States

- **Button hover (primary)** — background `#1574ef` → `#2b80f0` over 150ms; blue glow expands to `0 0 24px rgba(21,116,239,0.28)` over 240ms.
- **Button hover (secondary)** — slate fill `rgba(49,61,94,0.24)` → `rgba(49,61,94,0.4)`, text `rgba(255,255,255,0.8)` → `#ffffff` over 150ms.
- **Card hover** — background → next surface-ladder rung, border → `rgba(255,255,255,0.14)`, optional `translate-Y(-2px)` over 240ms standard ease.
- **Link hover** — colour `#e4e7ec` → `#ffffff` (nav) or `#1574ef` → `#2b80f0` (inline) over 150ms.
- **Input focus** — border → `#1574ef` plus 2px blue ring `rgba(21,116,239,0.35)` over 150ms.
- **Editor frame entrance** — opacity 0→1 plus `translate-Y(16px)` over 320ms emphasized, triggered by Intersection Observer; the live boot animates the preview pane filling in.

### Page Transitions

- No client-side page transitions on marketing. Standard browser navigation. Hero and feature modules animate in over 320ms once in viewport.

### Reduced Motion Strategy

- `@media (prefers-reduced-motion: reduce)` — opacity-only fades at 150ms linear. Translate, glow pulse, and the editor boot-loop are removed entirely; a static editor + preview render is shown instead.

## 9. Accessibility & A11y

### Contrast Pairs

- `#ffffff` text on `#1c1f25` bg — **16.5:1** (AAA)
- `#e4e7ec` body on `#1c1f25` bg — **14.3:1** (AAA)
- `#9ba3b4` muted on `#1c1f25` bg — **6.5:1** (AA at body sizes)
- `#7d8694` soft on `#1c1f25` bg — **4.5:1** (AA at body sizes)
- `#ffffff` text on `#24272e` surface — **15.0:1** (AAA)
- `#ffffff` text on `#1574ef` brand — **4.4:1** (AA for large text / UI; bold the label at small sizes)
- `#1574ef` brand on `#1c1f25` bg — **3.75:1** (passes 3:1 for UI components and large text)
- `#34d399` success on `#1c1f25` bg — **8.6:1** (AAA)
- `#fbbf24` warning on `#1c1f25` bg — **9.9:1** (AAA)
- `#f87171` danger on `#1c1f25` bg — **6.0:1** (AA)

### Focus Indicators

- Default focus ring: `2px solid #1574ef` at `2px` offset
- On the blue CTA: ring becomes `2px solid #ffffff` for contrast against the blue
- Form inputs use a 2px blue ring inset

### ARIA Patterns

- **Dialog** — `role="dialog"` `aria-modal="true"` with focus trap and `aria-labelledby` pointing to the title
- **Tablist** — `role="tablist"` for the editor frame's tab strip and any file tabs
- **Menu** — `role="menu"` / `menuitem` for nav dropdowns with arrow-key navigation
- **Region** — code/editor blocks marked `<pre><code>` inside `role="region"` with `aria-label="Code example"`
- **Status** — `aria-live="polite"` on the live boot/preview so screen readers are told when the environment is ready

### Keyboard Navigation

- Tab order follows DOM source order
- Skip-to-content link in header (visible on focus only)
- All interactive elements reachable via Tab
- `Esc` closes dropdowns and modals
- Arrow keys move between tabs in the editor-frame tablist

### Screen Reader Hints

- Decorative blue glow and dots `aria-hidden="true"`
- The live editor frame labelled with `aria-label="Live in-browser editor preview"` plus a visible caption
- "NEW" / "BETA" / "AI" badges read aloud as "New feature", "Beta feature", "AI feature"
- The boot/preview state announces "Environment ready" via the polite live region

### Reduced Motion

- Honoured — the editor boot loop and glow pulse are stripped to static. The blue focus ring still appears on focus but does not animate in.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Single column, editor frame stacks editor-over-preview, hero 94→44px |
| Tablet | 640–1024px | 2-column grids, editor frame full-width, hero 94→64px |
| Desktop | 1024–1280px | 3-column feature grids, editor + preview split side by side |
| Wide | ≥1280px | Centred 1280px container with generous margins |

### Touch Targets

- Buttons at `11px 18px` give a comfortable `44px+` tap height
- Nav links and the `Sign in` / `Try Bolt.new` cluster use `44×44px` minimum tap area on mobile
- Status badges grow from `4px 10px` to `6px 12px` on touch devices

### Collapsing Strategy

- Hero: `94px` → `64px` → `44px` across desktop → tablet → mobile
- Body: `16px` holds; lead drops `18px` → `16px` on mobile
- Editor frame: side-by-side editor + preview → stacked editor-over-preview, each pane may scroll internally
- Feature cards: 3-column → 2-column → single column stacked
- Section spacing: `96–128px` → `64px` on mobile
- Nav: horizontal links + CTA cluster → hamburger drawer

### Image Behavior

- Live editor frame maintains `12px` radius and chrome at all sizes
- Blue glow simplifies on mobile (single layer instead of layered glow)
- Logo grids reduce to 2 columns on mobile

### Container Queries

- The editor frame uses container queries to switch from a horizontal split-pane (editor | preview) to a stacked tab layout when its container drops below `560px`.

## 11. Content & Voice

### Tone

Builder-direct, brisk, and product-confident. The brand's own line — *"Click. Code. Done."* — is the whole tone in three words: imperative, no throat-clearing, assumes the reader codes. StackBlitz never explains what an IDE is; it shows one booting. Body copy is technical but plain, naming real frameworks (Next.js, Vite, Node.js) and real capabilities (instant boot, no install) rather than abstractions.

### Microcopy Patterns

- **Button verbs** — `Try Bolt.new`, `Start building`, `Open editor`, `Sign in`. Never `Get started today`, never `Click here`.
- **Error message recipe** — direct and technical: `Install failed: missing dependency. Check your package.json.`
- **Success confirmations** — terse: `Deployed.`, `Saved.`, `Environment ready.`
- **Status labels** — short caps: `NEW`, `BETA`, `AI`.

### Empty States

- Direct and instructive: `No projects yet. Start from a template.`
- Always paired with a primary CTA `Browse templates` and a secondary `New blank project`.
- No mascots, no apologetic copy.

### CTA Verb Conventions

- Primary: `Try Bolt.new`, `Start building`, `Open editor`, `Sign up`
- Secondary: `Sign in`, `See how it works`, `Read the docs`
- Tertiary: `Learn more →`, `View pricing →`

## 12. Dark Mode & Theming

**StackBlitz's marketing is dark-first.** The canvas is the graphite `#1c1f25` from header to footer; there is no light-mode marketing surface. (The editor product has its own theming, independent of the marketing site.)

If a downstream implementation needs a light variant, the recommended swap is:
- `bg` `#1c1f25` → `#ffffff`
- `bg-deep` `#15181d` → `#f8fafc`
- `surface` `#24272e` → `#f1f5f9`
- `text` `#ffffff` → `#15181d`
- `text-muted` `#9ba3b4` → `#64748b`
- `border` `rgba(255,255,255,0.08)` → `rgba(21,25,29,0.1)` (10% graphite)
- `brand` `#1574ef` stays — the colour is brand-locked. On a light canvas the blue still reads strongly; keep white text on the blue CTA.

The colour-locked brand blue means the `Try Bolt.new` CTA looks identical in light and dark — a deliberate continuity signal that ties the marketing to the product (and to Bolt.new).

## 13. Lineage & Influences

StackBlitz's marketing aesthetic is the in-browser IDE turned into a landing page. The canvas is a cool graphite `#1c1f25` — a neutral, slightly blue-grey near-black that reads as editor chrome rather than Vercel's pure void or Replit's navy ink — and the single brand colour is an electric, software-honest blue `#1574ef` (rgb 21, 116, 239) that does every piece of action work, from the flagship `Try Bolt.new` CTA to links and focus rings. That same blue is the through-line to Bolt.new, the AI app-builder StackBlitz shipped on top of its WebContainer technology, so the marketing colour and the product colour are one and the same.

The type system pairs Manrope — a rounded-geometric grotesque — for display, hitting a towering 94px at weight 600 on the hero, with Inter for body and UI at a comfortable 16px / 1.6. There is no custom foundry typeface and no serif; the identity is geometric-sans display over neutral-sans body. The defining visual move is the live editor: StackBlitz pioneered the in-browser dev environment, and WebContainers run Node.js entirely client-side, so the hero shows a real, booting editor + preview rather than a static screenshot. The lineage runs through Vercel's dark-mode marketing discipline and the sibling cloud-IDE Replit's "editor-as-marketing" heritage — but StackBlitz's distinguishing claim is that the editor is *actually running in your tab*, which the marketing demonstrates rather than illustrates.

The brand explicitly rejects: gradient-heavy backgrounds, illustrated mascots, soft pastel palettes, pill-shaped CTAs, serif type anywhere, neon-decorative accents that compete with the action blue, and any visual move that would read as "consumer SaaS" rather than "developer tool." Secondary chromatic energy (violet `#8b5cf6`, cyan `#22d3ee`) appears in AI/Bolt feature contexts but never on the main CTA — the blue owns the action layer, always.

**Named influences:**
- Bolt.new — StackBlitz's own AI app-builder; shares the electric blue and supplies the flagship CTA
- WebContainers — the client-side Node.js runtime that makes the live in-browser editor possible
- Inter — the neutral UI/body typeface
- Manrope — the rounded-geometric grotesque used for display headlines
- Vercel — dark-mode marketing discipline, single saturated brand accent
- Replit — sibling cloud-IDE, shared editor-as-marketing visual heritage

## 14. Do's and Don'ts

### Do

- Use the electric blue `#1574ef` for every action — CTA, link, focus ring. It owns the action layer.
- Put white text on the blue CTA and give it a 10px radius — that's the live `Try Bolt.new` shape.
- Keep the canvas at graphite `#1c1f25` — a cool blue-grey near-black, not pure black, not navy.
- Use Manrope for headlines and Inter for body — the two-family split is the system.
- Go big and tight on the hero — Manrope ~94px / 600 / `-0.03em`, line-height 1.0.
- Show a live or live-looking editor + preview in the hero — running the product is the whole pitch.
- Use the tinted-slate fill (`rgba(49,61,94,0.24)`) for the secondary `Sign in` button — keep the top bar one cool temperature.
- Build depth from the surface ladder (`#15181d` / `#1c1f25` / `#24272e` / `#2c3038`) plus faint white hairlines.
- Reserve real shadows for lifting the editor frame off the page; keep cards flat.
- Apply the blue glow only to the primary CTA hover — its scarcity is what makes it land.
- Let body copy breathe at 16px / 1.6 even within a product-dense layout.

### Don't

- Don't put the AI accents (violet / cyan) on the main CTA — the blue is the only action colour.
- Don't drift to pure black `#000000` or to navy ink — StackBlitz's graphite is intentionally neutral blue-grey.
- Don't use a serif anywhere — Manrope + Inter is the entire type system.
- Don't pill-shape the primary CTA — it's a 10px rounded rectangle, like real software.
- Don't lift cards with shadows; depth is the surface ladder plus a hairline.
- Don't apply gradients to backgrounds — flat graphite is the canvas.
- Don't shrink the hero — the towering 94px Manrope is the brand's confidence.
- Don't spread the blue glow across every hover; reserve it for the primary CTA.
- Don't use a heavy display weight (800) for the hero — 600 is confident, not shouty.
- Don't substitute a generic mid-blue — the exact `#1574ef` (rgb 21,116,239) ties the marketing to Bolt.new.
- Don't show a static screenshot when a live editor is the point — demonstrate the boot.

## 15. Agent Prompt Guide

### Quick Color Reference

- Canvas: Graphite `#1c1f25`
- Surface: `#24272e` (card), `#2c3038` (hover), `#15181d` (deeper / editor interior)
- Text: `#ffffff` strong, `#e4e7ec` body, `#9ba3b4` muted
- Brand: Electric Blue `#1574ef` (rgb 21,116,239) — white text on it, 10px radius
- Brand Hover: `#2b80f0`
- Secondary fill (Sign in): `rgba(49,61,94,0.24)` with `rgba(255,255,255,0.8)` text
- Accent Purple (AI): `#8b5cf6`
- Accent Cyan (AI/Beta): `#22d3ee`
- Border: `rgba(255,255,255,0.08)` (8% white), `rgba(255,255,255,0.14)` (14% white)
- Success: `#34d399`

### Example Component Prompts

- "Create a hero section on `#1c1f25` graphite background. Headline at 94px Manrope weight 600, line-height 1.0, letter-spacing -0.03em, colour `#ffffff`. Subtitle at 18px Inter weight 400, line-height 1.6, colour `#e4e7ec`. Primary CTA `Try Bolt.new`: `#1574ef` background, `#ffffff` text, 10px radius, 11px 18px padding, 15px Inter weight 600. Secondary `Sign in`: `rgba(49,61,94,0.24)` fill, `rgba(255,255,255,0.8)` text, no border, 8px radius."
- "Design a live editor frame hero: `#15181d` background, 12px radius, 1px solid `rgba(255,255,255,0.14)` border. Top chrome with three window dots top-left and a tab strip showing the file name in mono 12px. Inside, a split pane: a code editor (mono 14px) on the left and a live preview render on the right. Drop shadow `0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25)` to float it off the page."
- "Build a status badge: `rgba(255,255,255,0.08)` background, `#ffffff` text, 9999px radius, 4px 10px padding, Inter 12px / 600 / 0.04em. Blue dot indicator (`#1574ef`, 6px) for NEW; purple (`#8b5cf6`) for AI; cyan (`#22d3ee`) for BETA."
- "Create navigation: `rgba(28,31,37,0.8)` graphite background with backdrop-blur on scroll, 1px bottom border `rgba(255,255,255,0.06)`. White wordmark left, links in Inter 14px / 500 / `#e4e7ec`. Right-pinned cluster: tinted-slate `Sign in` then blue `Try Bolt.new` (`#1574ef` bg, white text, 10px radius)."
- "Design a dense feature card: `#24272e` background, 1px solid `rgba(255,255,255,0.08)` border, 12px radius, 24px padding. Title in Manrope 22px / 600, colour `#ffffff`. Body in Inter 16px / 400 / 1.6, colour `#9ba3b4`. Hover: surface → `#2c3038`, border → `rgba(255,255,255,0.14)`, translate-Y(-2px)."
- "Build a focused input: `#1f2127` background, 1px solid `rgba(255,255,255,0.14)` border, 8px radius, 10px 14px padding, Inter 15px `#ffffff`, placeholder `#7d8694`. On focus: border → `#1574ef` and a 2px blue ring `rgba(21,116,239,0.35)`."

### Iteration Guide

1. If the page reads "consumer SaaS" rather than "developer tool," drop pillowy radii (CTA to 10px, cards to 12px) and add a live-looking editor frame.
2. If the blue looks dull, check the canvas — it must be graphite `#1c1f25` (cool blue-grey), not pure black or navy. The blue reads cleaner against neutral graphite.
3. The exact brand blue is `#1574ef` (rgb 21,116,239) — don't substitute a generic mid-blue; the precise value ties the marketing to Bolt.new.
4. White text on the blue CTA only clears AA at large/UI sizes (4.4:1) — keep the label at weight 600 and don't shrink it below 15px.
5. The hero should be big: Manrope ~94px / 600 / `-0.03em` at line-height 1.0. If it feels timid, the size — not the weight — is what to push.
6. Keep the secondary `Sign in` button as a tinted-slate fill (`rgba(49,61,94,0.24)`), not an outline — it keeps the top bar in one cool temperature with the canvas.
7. Resist shadows for card depth — use the surface ladder (`#15181d` → `#1c1f25` → `#24272e` → `#2c3038`) plus a `rgba(255,255,255,0.08)` hairline. Save real shadow for the editor frame.
8. The blue glow is scarce — apply only to the primary CTA hover. Spreading it across every hover dilutes the cue.
Prose

1. Visual Theme & Atmosphere

StackBlitz’s marketing site treats the editor itself as the brand. The canvas is a cool graphite #1c1f25 — a neutral, faintly blue-grey near-black that reads like the chrome of a code editor rather than a void. On top of it sits a single electric blue #1574ef (rgb 21, 116, 239) that carries every piece of action: the flagship Try Bolt.new CTA, links, focus rings, and active states. The page reads as you are looking at the product — the hero boots a real in-browser environment, not a static mock, because StackBlitz’s whole pitch is that the IDE runs in your tab.

The atmosphere is confident and software-honest. Where Vercel’s dark mode is monastic pure-black with a white type wall, and Replit pushes a near-neon saturated cyan on navy ink, StackBlitz sits between them: a neutral graphite ground with a true product blue. The blue is bright enough to be the unmistakable focal point but never reads as decorative neon — it is the colour of a “primary” button in actual software, and that honesty is the point. The cool slate tint in the secondary Sign in button (rgba(49,61,94,0.24)) keeps the whole top bar in the same blue-grey temperature family.

The type system pairs Manrope for display with Inter for body. Manrope is a rounded-geometric grotesque, and StackBlitz pushes it hard: the hero headline lands at a towering 94px at weight 600, line-height 1.0, with a tight -0.03em tracking that makes the wall of type feel architectural and assured. Body and interface text are Inter at 16px on a generous 1.6 line-height — neutral, legible, and quiet enough to let the headline and the blue do the talking. There is no serif anywhere and no custom foundry face; the identity is geometric-sans display over neutral-sans body.

Depth is achieved through a surface ladder rather than heavy shadow. The #15181d#1c1f25#24272e#2c3038 graphite ladder lets cards and panels lift via a background-step plus a faint white hairline (rgba(255,255,255,0.08), rgba(255,255,255,0.14)). Real shadows appear only beneath the floating editor frame, lifting the “app” off the page. The one chromatic depth cue is a soft blue glow on the primary CTA hover — used sparingly so it always lands.

The cadence is product-forward and brisk. The brand’s own tagline — “Click. Code. Done.” — sets the rhythm: short, imperative, no marketing throat-clearing. The site assumes the reader is a developer who wants to see the thing run, so it shows the thing running.

Key Characteristics:

  • Cool graphite #1c1f25 canvas — a neutral blue-grey near-black, editor-chrome coloured, not pure void or navy ink
  • Single electric blue #1574ef (rgb 21,116,239) brand — white text on it, 10px radius — owns the entire action layer
  • The brand blue is shared with Bolt.new — marketing colour and product colour are identical
  • Manrope display + Inter body — geometric-sans headlines over neutral-sans interface text, no serif
  • Towering hero headline: Manrope 94px / 600 / -0.03em tracking, line-height 1.0
  • Live in-browser editor as hero — WebContainers boot a real environment, not a static screenshot
  • Tinted-slate secondary button (rgba(49,61,94,0.24)) keeps the top bar in one cool temperature
  • Surface-ladder depth instead of shadow — flat-on-flat cards with faint white hairlines
  • AI/Bolt accents (violet #8b5cf6, cyan #22d3ee) appear in feature contexts but never on the main CTA
  • Brisk imperative voice — “Click. Code. Done.”

2. Color Palette & Roles

Primary

  • Bg / Graphite (#1c1f25): the StackBlitz canvas. Cool blue-grey near-black — editor-chrome coloured, intentionally not #000000.
  • Brand / Electric Blue (#1574ef): signature product blue (rgb 21,116,239) — does all action work. Always paired with white text on it.
  • Text Strong (#ffffff): display headings and primary type at full white.
  • Text Body (#e4e7ec): running body copy, near-white with a cool cast for slightly softer reading.

Brand & Dark

  • Bg Deep (#15181d): deeper nested surface — editor frame interior, code blocks beneath the canvas.
  • Bg Darker (#101216): the deepest layer, used rarely for inset terminal/output panels.
  • Surface (#24272e): card and panel base — the workhorse elevated surface.
  • Surface High (#2c3038): hover and elevated panels.
  • Surface Low (#1f2127): subtle stripe, input fill, nested element.
  • Surface Elev (#363b45): selected or pressed panel state.

Accent

  • Bolt Blue (#1574ef): the action colour is the accent — there is no competing primary accent on the action layer.
  • Purple (#8b5cf6): AI / Bolt feature highlight — gradients and AI-context illustration.
  • Cyan (#22d3ee): tertiary highlight paired with purple in AI/WebContainer moments.

Interactive

  • Brand (#1574ef): primary CTA, link, active state.
  • Brand Hover (#2b80f0): lighter blue on hover.
  • Brand Deep (#0f5fcc): pressed state.
  • Brand Soft (rgba(21,116,239,0.16)): blue-tinted background for highlighted regions and info banners.
  • Sign-in Fill (rgba(49,61,94,0.24)): cool slate wash for the secondary button — the live Sign in style.

Neutral Scale

  • Strong (#ffffff): display text, primary headings.
  • Body (#e4e7ec): primary running text.
  • Muted (#9ba3b4): secondary copy and metadata.
  • Soft (#7d8694): caption / placeholder.
  • Faint (#565d6b): disabled labels.

Surface & Borders

  • Border (rgba(255,255,255,0.08)): 8% white hairline — the default rule.
  • Border Strong (rgba(255,255,255,0.14)): 14% white for elevated panels, inputs, and outlined buttons.
  • Border Soft (rgba(255,255,255,0.04)): subtle inset divider.
  • Border Brand (rgba(21,116,239,0.45)): blue-tinted border for focused or selected interactive elements.

Shadow Colors

  • Shadow Deep (rgba(0,0,0,0.45)): primary depth beneath the floating editor frame.
  • Shadow Soft (rgba(0,0,0,0.25)): subtle lift beneath cards and panels.
  • Shadow Glow Blue (rgba(21,116,239,0.28)): on-hover glow around the primary CTA.

Semantic

  • Success background rgba(52,211,153,0.15), text #34d399, border rgba(52,211,153,0.3).
  • Warning background rgba(251,191,36,0.15), text #fbbf24, border rgba(251,191,36,0.3).
  • Danger background rgba(248,113,113,0.15), text #f87171, border rgba(248,113,113,0.3).
  • Info uses the brand blue: background rgba(21,116,239,0.16), text #1574ef, border rgba(21,116,239,0.3).

3. Typography Rules

Font Family

  • Display sans: Manrope — a rounded-geometric grotesque, used for all headings and the towering hero.
  • Display fallback chain: Manrope, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif.
  • Body sans: Inter — the neutral UI/body workhorse for running text, nav, labels, and buttons.
  • Body fallback chain: Inter, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif.
  • Mono companion: system UI monospace — ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace. Used inside the editor frame and for code samples; StackBlitz does not ship a custom mono on the marketing surface.
  • OpenType features — standard ligatures and kerning; no ss01-style discipline. The character comes from Manrope’s geometry, not from feature tuning.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Display HeroManrope946001.0-0.03emLive hero headline — the towering wall of type
Display LargeManrope647001.04-0.025emSecondary flagship statement
H1Manrope487001.08-0.02emStandard page headline
H2Manrope366001.15-0.015emSection heading
H3Manrope286001.22-0.01emSub-section
H4Manrope226001.30-0.005emCard title
H5Manrope186001.350Inline emphasis heading
Body LargeInter184001.600Lead paragraph
BodyInter164001.600Standard reading text
Body SmallInter144001.500Captions, footer
ButtonInter156001.200Primary button label
Button SmallInter136001.200Compact buttons
NavInter145001.200Top-nav links
CaptionInter134001.450Helper text, image captions
LabelInter126001.300.04emStatus labels, eyebrows
Label UppercaseInter116001.300.08em”NEW”, “BETA”, “AI” tags
Codemono144001.550Code blocks, editor content
Code Smallmono124001.500Inline code in body
Micromono115001.400.02emFile path, metadata

Principles

  • Manrope is the display voice, Inter the body voice — a deliberate two-family split. Manrope’s rounded-geometric character carries the headlines; Inter stays neutral so it never competes.
  • The hero goes big and tight — 94px at weight 600 with line-height 1.0 and -0.03em tracking. The size is the statement; the weight stays at 600, not 800, so it reads confident rather than shouty.
  • Tracking tightens with size-0.03em at 94px, -0.02em at 48px, normal at body sizes. Display feels architectural; body feels neutral.
  • Body breathes — Inter at 16px on a generous 1.6 line-height. Reading comfort is prioritised over density in running copy.
  • No serif anywhere — the identity is geometric-sans display + neutral-sans body. A serif would break the software-honest feel.
  • Mono is editor-scoped — monospace appears only inside the editor frame and code samples, not in UI chrome.
  • Weight discipline — display uses 600/700; body uses 400 (text), 500 (nav), 600 (buttons/labels). Labels and eyebrows go to 600 with positive tracking.

4. Component Stylings

Buttons

Primary — Electric Blue

  • Background: #1574ef
  • Text: #ffffff
  • Padding: 11px 18px
  • Radius: 10px
  • Font: 15px Inter weight 600
  • Hover: background → #2b80f0; optional blue glow 0 0 24px rgba(21,116,239,0.28)
  • Active: background → #0f5fcc
  • Use: primary CTA — Try Bolt.new, Start building, Open editor

Secondary — Tinted Slate (Sign in)

  • Background: rgba(49,61,94,0.24) — cool slate wash
  • Text: rgba(255,255,255,0.8)
  • Border: none
  • Padding: 11px 18px
  • Radius: 8px
  • Font: 15px Inter weight 600
  • Hover: background → rgba(49,61,94,0.4), text → #ffffff
  • Use: secondary action paired with the blue primary — the live Sign in button

Outlined Ghost

  • Background: transparent
  • Text: #ffffff
  • Border: 1px solid rgba(255,255,255,0.14)
  • Padding: 11px 18px
  • Radius: 8px
  • Hover: background → rgba(255,255,255,0.06), border → rgba(255,255,255,0.24)
  • Use: tertiary outlined action on the graphite canvas

Text / Inline

  • Background: transparent
  • Text: #1574ef
  • No border
  • Padding: 8px 12px
  • Hover: colour → #2b80f0
  • Use: inline link-button, often with a trailing arrow

Disabled

  • Background: rgba(255,255,255,0.06)
  • Text: #565d6b
  • Border: 1px solid rgba(255,255,255,0.08)
  • No hover

Cards & Containers

Feature Card

  • Background: #24272e
  • Border: 1px solid rgba(255,255,255,0.08)
  • Radius: 12px
  • Padding: 24px
  • Shadow: none (flat-on-flat)
  • Hover: surface → #2c3038, border → rgba(255,255,255,0.14), optional translate-Y(-2px)

Editor Frame (live in-browser hero)

  • Background: #15181d
  • Border: 1px solid rgba(255,255,255,0.14)
  • Radius: 12px
  • Chrome: window dots at top-left, tab strip with the current file label
  • Inside: a real editor pane (mono code) beside a live preview pane — StackBlitz boots a WebContainer rather than showing a static image
  • Shadow: 0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25) to lift the “app” off the page
  • Use: anchors the hero and feature sections

Preview / Output Pane

  • Background: #101216
  • Border: 1px solid rgba(255,255,255,0.08)
  • Radius: 8px
  • Inside: live app render or terminal output; blue accents on highlighted actions

Badges, Tags, Pills

Status Badge

  • Background: rgba(255,255,255,0.08)
  • Text: #ffffff
  • Border: none
  • Radius: 9999px
  • Padding: 4px 10px
  • Font: Inter 12px / 600 / 0.04em
  • Indicator: 6px coloured dot before label — blue (NEW), purple (AI), cyan (Beta)

Mono Tag

  • Background: rgba(255,255,255,0.06)
  • Text: #9ba3b4
  • Border: 1px solid rgba(255,255,255,0.08)
  • Radius: 4px
  • Padding: 2px 8px
  • Font: mono 11px / 500 / 0.08em uppercase

Inputs & Forms

  • Background: #1f2127
  • Border: 1px solid rgba(255,255,255,0.14)
  • Radius: 8px
  • Padding: 10px 14px
  • Font: Inter 15px / 400 / #ffffff
  • Placeholder: #7d8694
  • Focus: border → #1574ef, ring 2px rgba(21,116,239,0.35)
  • Label: Inter 13px / 500 / #9ba3b4
  • Helper: Inter 12px / 400 / #9ba3b4
  • Error: border → #f87171, helper → #f87171
  • Background: rgba(28,31,37,0.8) — graphite with backdrop-blur once the page scrolls
  • Border-bottom: 1px solid rgba(255,255,255,0.06)
  • Logo: white wordmark on the left
  • Links: Inter 14px / 500 / #e4e7ec, hover → #ffffff
  • CTA cluster: tinted-slate Sign in then blue Try Bolt.new, right-pinned
  • Mobile: hamburger toggle, full-screen drawer on click

Decorative Elements

  • Blue glow0 0 24px rgba(21,116,239,0.28) around the primary CTA on hover
  • Surface-ladder bands — alternating #1c1f25 and #15181d strips for section rhythm
  • Live editor frame — the strongest visual asset; a booting environment used as illustration in the hero and key feature sections

5. Layout Principles

Spacing System

  • Base unit: 4px
  • Scale: 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128
  • Density observation: medium-dense by marketing standards. StackBlitz packs product detail per scroll but lets running copy breathe at 1.6 line-height. The 4px base allows fine UI tuning while sections keep a 96px vertical rhythm.

Grid & Container

  • Max content width: 1280px with 24px gutters
  • Hero bands give the live editor frame the dominant share of horizontal space
  • Feature grids are typically three-column with #24272e cards
  • Code/editor blocks may break out to wider widths, sometimes near full-bleed
  • Vertical rhythm runs 96–128px between sections

Whitespace Philosophy

  • Product-forward, not airy — the editor frame and feature grids earn their space; whitespace frames the product rather than dominating.
  • Editor-pane proportions — section widths echo IDE pane geometry (editor + preview split) rather than golden-ratio editorial.
  • Reading comfort preserved — despite the product density, body copy stays at 16px / 1.6 and caps reading width around 720px.

Section Cadence

  • Hero (live editor on #1c1f25) → feature grid (3-column on #1c1f25) → product-demo band (often #15181d for contrast) → logo wall / testimonial → pricing → CTA → footer
  • No light-section breaks — the canvas stays graphite-dark throughout
  • Surface-ladder swaps (#1c1f25#15181d) provide rhythm without breaking the dark discipline

6. Shapes & Radius Scale

TierValueUse
Micro2pxInline highlights, fine corners
Standard4pxMono tags, status dots, small chips
Comfortable8pxInputs, ghost/secondary buttons, preview panes
Relaxed10pxPrimary CTA — the live Try Bolt.new radius
Large12pxCards, editor frames
Featured16pxHero cards, modal frames
Pill9999pxStatus badges, avatars only

The radii ladder is 4 / 8 / 10 / 12 / 16. The notable token is the 10px primary button — slightly softer than the 8px used on secondary and ghost buttons, giving the blue CTA a touch more presence. Cards and the editor frame land at 12px. There are no fully-rounded CTAs; the shape vocabulary stays rectangular-with-soft-corners, like real software. Pills (9999) appear on tags and badges only.

7. Depth & Elevation

LevelTreatmentUse
0 — FlatNo shadow, surface ladderPage canvas, body cards
1 — Hairline1px solid rgba(255,255,255,0.08)Default card and panel separation
2 — Surface LiftSurface bg → next ladder rung + 1px solid rgba(255,255,255,0.14)Hover and elevated panels
3 — Soft Shadow0 4px 12px rgba(0,0,0,0.25) plus hairlineCards and panels lifted off canvas
4 — Elevated0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25)The live editor frame, modals
5 — Blue Glow0 0 24px rgba(21,116,239,0.28)Primary CTA hover state
6 — Ring2px solid #1574ef at 2px offsetKeyboard focus

Shadow Philosophy — depth comes from the surface ladder (#101216#15181d#1c1f25#24272e#2c3038) and faint white hairlines (rgba(255,255,255,0.08), rgba(255,255,255,0.14)). Real shadows are reserved for one job: lifting the live editor frame off the page so the “app” feels like it is floating in front of the marketing. Cards themselves are flat-on-flat. The blue glow is the single chromatic depth cue and appears only on the primary CTA hover.

8. Interaction & Motion

Easing Curves

  • Standard cubic-bezier(0.4, 0, 0.2, 1) — default for hover and state changes
  • Emphasized cubic-bezier(0.2, 0, 0, 1) — hero entrance, glow expansion
  • Snappy cubic-bezier(0.16, 1, 0.3, 1) — quick, slight overshoot for software-like state changes

Duration Buckets

  • Fast: 150ms — colour swaps, ring fades
  • Standard: 240ms — button hover, card lift, dropdown open
  • Slow: 320ms — hero reveals, editor-frame boot reveal

Per-Component Micro-States

  • Button hover (primary) — background #1574ef#2b80f0 over 150ms; blue glow expands to 0 0 24px rgba(21,116,239,0.28) over 240ms.
  • Button hover (secondary) — slate fill rgba(49,61,94,0.24)rgba(49,61,94,0.4), text rgba(255,255,255,0.8)#ffffff over 150ms.
  • Card hover — background → next surface-ladder rung, border → rgba(255,255,255,0.14), optional translate-Y(-2px) over 240ms standard ease.
  • Link hover — colour #e4e7ec#ffffff (nav) or #1574ef#2b80f0 (inline) over 150ms.
  • Input focus — border → #1574ef plus 2px blue ring rgba(21,116,239,0.35) over 150ms.
  • Editor frame entrance — opacity 0→1 plus translate-Y(16px) over 320ms emphasized, triggered by Intersection Observer; the live boot animates the preview pane filling in.

Page Transitions

  • No client-side page transitions on marketing. Standard browser navigation. Hero and feature modules animate in over 320ms once in viewport.

Reduced Motion Strategy

  • @media (prefers-reduced-motion: reduce) — opacity-only fades at 150ms linear. Translate, glow pulse, and the editor boot-loop are removed entirely; a static editor + preview render is shown instead.

9. Accessibility & A11y

Contrast Pairs

  • #ffffff text on #1c1f25 bg — 16.5:1 (AAA)
  • #e4e7ec body on #1c1f25 bg — 14.3:1 (AAA)
  • #9ba3b4 muted on #1c1f25 bg — 6.5:1 (AA at body sizes)
  • #7d8694 soft on #1c1f25 bg — 4.5:1 (AA at body sizes)
  • #ffffff text on #24272e surface — 15.0:1 (AAA)
  • #ffffff text on #1574ef brand — 4.4:1 (AA for large text / UI; bold the label at small sizes)
  • #1574ef brand on #1c1f25 bg — 3.75:1 (passes 3:1 for UI components and large text)
  • #34d399 success on #1c1f25 bg — 8.6:1 (AAA)
  • #fbbf24 warning on #1c1f25 bg — 9.9:1 (AAA)
  • #f87171 danger on #1c1f25 bg — 6.0:1 (AA)

Focus Indicators

  • Default focus ring: 2px solid #1574ef at 2px offset
  • On the blue CTA: ring becomes 2px solid #ffffff for contrast against the blue
  • Form inputs use a 2px blue ring inset

ARIA Patterns

  • Dialogrole="dialog" aria-modal="true" with focus trap and aria-labelledby pointing to the title
  • Tablistrole="tablist" for the editor frame’s tab strip and any file tabs
  • Menurole="menu" / menuitem for nav dropdowns with arrow-key navigation
  • Region — code/editor blocks marked <pre><code> inside role="region" with aria-label="Code example"
  • Statusaria-live="polite" on the live boot/preview so screen readers are told when the environment is ready

Keyboard Navigation

  • Tab order follows DOM source order
  • Skip-to-content link in header (visible on focus only)
  • All interactive elements reachable via Tab
  • Esc closes dropdowns and modals
  • Arrow keys move between tabs in the editor-frame tablist

Screen Reader Hints

  • Decorative blue glow and dots aria-hidden="true"
  • The live editor frame labelled with aria-label="Live in-browser editor preview" plus a visible caption
  • “NEW” / “BETA” / “AI” badges read aloud as “New feature”, “Beta feature”, “AI feature”
  • The boot/preview state announces “Environment ready” via the polite live region

Reduced Motion

  • Honoured — the editor boot loop and glow pulse are stripped to static. The blue focus ring still appears on focus but does not animate in.

10. Responsive Behavior

Breakpoints

NameWidthKey Changes
Mobile<640pxSingle column, editor frame stacks editor-over-preview, hero 94→44px
Tablet640–1024px2-column grids, editor frame full-width, hero 94→64px
Desktop1024–1280px3-column feature grids, editor + preview split side by side
Wide≥1280pxCentred 1280px container with generous margins

Touch Targets

  • Buttons at 11px 18px give a comfortable 44px+ tap height
  • Nav links and the Sign in / Try Bolt.new cluster use 44×44px minimum tap area on mobile
  • Status badges grow from 4px 10px to 6px 12px on touch devices

Collapsing Strategy

  • Hero: 94px64px44px across desktop → tablet → mobile
  • Body: 16px holds; lead drops 18px16px on mobile
  • Editor frame: side-by-side editor + preview → stacked editor-over-preview, each pane may scroll internally
  • Feature cards: 3-column → 2-column → single column stacked
  • Section spacing: 96–128px64px on mobile
  • Nav: horizontal links + CTA cluster → hamburger drawer

Image Behavior

  • Live editor frame maintains 12px radius and chrome at all sizes
  • Blue glow simplifies on mobile (single layer instead of layered glow)
  • Logo grids reduce to 2 columns on mobile

Container Queries

  • The editor frame uses container queries to switch from a horizontal split-pane (editor | preview) to a stacked tab layout when its container drops below 560px.

11. Content & Voice

Tone

Builder-direct, brisk, and product-confident. The brand’s own line — “Click. Code. Done.” — is the whole tone in three words: imperative, no throat-clearing, assumes the reader codes. StackBlitz never explains what an IDE is; it shows one booting. Body copy is technical but plain, naming real frameworks (Next.js, Vite, Node.js) and real capabilities (instant boot, no install) rather than abstractions.

Microcopy Patterns

  • Button verbsTry Bolt.new, Start building, Open editor, Sign in. Never Get started today, never Click here.
  • Error message recipe — direct and technical: Install failed: missing dependency. Check your package.json.
  • Success confirmations — terse: Deployed., Saved., Environment ready.
  • Status labels — short caps: NEW, BETA, AI.

Empty States

  • Direct and instructive: No projects yet. Start from a template.
  • Always paired with a primary CTA Browse templates and a secondary New blank project.
  • No mascots, no apologetic copy.

CTA Verb Conventions

  • Primary: Try Bolt.new, Start building, Open editor, Sign up
  • Secondary: Sign in, See how it works, Read the docs
  • Tertiary: Learn more →, View pricing →

12. Dark Mode & Theming

StackBlitz’s marketing is dark-first. The canvas is the graphite #1c1f25 from header to footer; there is no light-mode marketing surface. (The editor product has its own theming, independent of the marketing site.)

If a downstream implementation needs a light variant, the recommended swap is:

  • bg #1c1f25#ffffff
  • bg-deep #15181d#f8fafc
  • surface #24272e#f1f5f9
  • text #ffffff#15181d
  • text-muted #9ba3b4#64748b
  • border rgba(255,255,255,0.08)rgba(21,25,29,0.1) (10% graphite)
  • brand #1574ef stays — the colour is brand-locked. On a light canvas the blue still reads strongly; keep white text on the blue CTA.

The colour-locked brand blue means the Try Bolt.new CTA looks identical in light and dark — a deliberate continuity signal that ties the marketing to the product (and to Bolt.new).

13. Lineage & Influences

StackBlitz’s marketing aesthetic is the in-browser IDE turned into a landing page. The canvas is a cool graphite #1c1f25 — a neutral, slightly blue-grey near-black that reads as editor chrome rather than Vercel’s pure void or Replit’s navy ink — and the single brand colour is an electric, software-honest blue #1574ef (rgb 21, 116, 239) that does every piece of action work, from the flagship Try Bolt.new CTA to links and focus rings. That same blue is the through-line to Bolt.new, the AI app-builder StackBlitz shipped on top of its WebContainer technology, so the marketing colour and the product colour are one and the same.

The type system pairs Manrope — a rounded-geometric grotesque — for display, hitting a towering 94px at weight 600 on the hero, with Inter for body and UI at a comfortable 16px / 1.6. There is no custom foundry typeface and no serif; the identity is geometric-sans display over neutral-sans body. The defining visual move is the live editor: StackBlitz pioneered the in-browser dev environment, and WebContainers run Node.js entirely client-side, so the hero shows a real, booting editor + preview rather than a static screenshot. The lineage runs through Vercel’s dark-mode marketing discipline and the sibling cloud-IDE Replit’s “editor-as-marketing” heritage — but StackBlitz’s distinguishing claim is that the editor is actually running in your tab, which the marketing demonstrates rather than illustrates.

The brand explicitly rejects: gradient-heavy backgrounds, illustrated mascots, soft pastel palettes, pill-shaped CTAs, serif type anywhere, neon-decorative accents that compete with the action blue, and any visual move that would read as “consumer SaaS” rather than “developer tool.” Secondary chromatic energy (violet #8b5cf6, cyan #22d3ee) appears in AI/Bolt feature contexts but never on the main CTA — the blue owns the action layer, always.

Named influences:

  • Bolt.new — StackBlitz’s own AI app-builder; shares the electric blue and supplies the flagship CTA
  • WebContainers — the client-side Node.js runtime that makes the live in-browser editor possible
  • Inter — the neutral UI/body typeface
  • Manrope — the rounded-geometric grotesque used for display headlines
  • Vercel — dark-mode marketing discipline, single saturated brand accent
  • Replit — sibling cloud-IDE, shared editor-as-marketing visual heritage

14. Do’s and Don’ts

Do

  • Use the electric blue #1574ef for every action — CTA, link, focus ring. It owns the action layer.
  • Put white text on the blue CTA and give it a 10px radius — that’s the live Try Bolt.new shape.
  • Keep the canvas at graphite #1c1f25 — a cool blue-grey near-black, not pure black, not navy.
  • Use Manrope for headlines and Inter for body — the two-family split is the system.
  • Go big and tight on the hero — Manrope ~94px / 600 / -0.03em, line-height 1.0.
  • Show a live or live-looking editor + preview in the hero — running the product is the whole pitch.
  • Use the tinted-slate fill (rgba(49,61,94,0.24)) for the secondary Sign in button — keep the top bar one cool temperature.
  • Build depth from the surface ladder (#15181d / #1c1f25 / #24272e / #2c3038) plus faint white hairlines.
  • Reserve real shadows for lifting the editor frame off the page; keep cards flat.
  • Apply the blue glow only to the primary CTA hover — its scarcity is what makes it land.
  • Let body copy breathe at 16px / 1.6 even within a product-dense layout.

Don’t

  • Don’t put the AI accents (violet / cyan) on the main CTA — the blue is the only action colour.
  • Don’t drift to pure black #000000 or to navy ink — StackBlitz’s graphite is intentionally neutral blue-grey.
  • Don’t use a serif anywhere — Manrope + Inter is the entire type system.
  • Don’t pill-shape the primary CTA — it’s a 10px rounded rectangle, like real software.
  • Don’t lift cards with shadows; depth is the surface ladder plus a hairline.
  • Don’t apply gradients to backgrounds — flat graphite is the canvas.
  • Don’t shrink the hero — the towering 94px Manrope is the brand’s confidence.
  • Don’t spread the blue glow across every hover; reserve it for the primary CTA.
  • Don’t use a heavy display weight (800) for the hero — 600 is confident, not shouty.
  • Don’t substitute a generic mid-blue — the exact #1574ef (rgb 21,116,239) ties the marketing to Bolt.new.
  • Don’t show a static screenshot when a live editor is the point — demonstrate the boot.

15. Agent Prompt Guide

Quick Color Reference

  • Canvas: Graphite #1c1f25
  • Surface: #24272e (card), #2c3038 (hover), #15181d (deeper / editor interior)
  • Text: #ffffff strong, #e4e7ec body, #9ba3b4 muted
  • Brand: Electric Blue #1574ef (rgb 21,116,239) — white text on it, 10px radius
  • Brand Hover: #2b80f0
  • Secondary fill (Sign in): rgba(49,61,94,0.24) with rgba(255,255,255,0.8) text
  • Accent Purple (AI): #8b5cf6
  • Accent Cyan (AI/Beta): #22d3ee
  • Border: rgba(255,255,255,0.08) (8% white), rgba(255,255,255,0.14) (14% white)
  • Success: #34d399

Example Component Prompts

  • “Create a hero section on #1c1f25 graphite background. Headline at 94px Manrope weight 600, line-height 1.0, letter-spacing -0.03em, colour #ffffff. Subtitle at 18px Inter weight 400, line-height 1.6, colour #e4e7ec. Primary CTA Try Bolt.new: #1574ef background, #ffffff text, 10px radius, 11px 18px padding, 15px Inter weight 600. Secondary Sign in: rgba(49,61,94,0.24) fill, rgba(255,255,255,0.8) text, no border, 8px radius.”
  • “Design a live editor frame hero: #15181d background, 12px radius, 1px solid rgba(255,255,255,0.14) border. Top chrome with three window dots top-left and a tab strip showing the file name in mono 12px. Inside, a split pane: a code editor (mono 14px) on the left and a live preview render on the right. Drop shadow 0 20px 48px rgba(0,0,0,0.45), 0 4px 12px rgba(0,0,0,0.25) to float it off the page.”
  • “Build a status badge: rgba(255,255,255,0.08) background, #ffffff text, 9999px radius, 4px 10px padding, Inter 12px / 600 / 0.04em. Blue dot indicator (#1574ef, 6px) for NEW; purple (#8b5cf6) for AI; cyan (#22d3ee) for BETA.”
  • “Create navigation: rgba(28,31,37,0.8) graphite background with backdrop-blur on scroll, 1px bottom border rgba(255,255,255,0.06). White wordmark left, links in Inter 14px / 500 / #e4e7ec. Right-pinned cluster: tinted-slate Sign in then blue Try Bolt.new (#1574ef bg, white text, 10px radius).”
  • “Design a dense feature card: #24272e background, 1px solid rgba(255,255,255,0.08) border, 12px radius, 24px padding. Title in Manrope 22px / 600, colour #ffffff. Body in Inter 16px / 400 / 1.6, colour #9ba3b4. Hover: surface → #2c3038, border → rgba(255,255,255,0.14), translate-Y(-2px).”
  • “Build a focused input: #1f2127 background, 1px solid rgba(255,255,255,0.14) border, 8px radius, 10px 14px padding, Inter 15px #ffffff, placeholder #7d8694. On focus: border → #1574ef and a 2px blue ring rgba(21,116,239,0.35).”

Iteration Guide

  1. If the page reads “consumer SaaS” rather than “developer tool,” drop pillowy radii (CTA to 10px, cards to 12px) and add a live-looking editor frame.
  2. If the blue looks dull, check the canvas — it must be graphite #1c1f25 (cool blue-grey), not pure black or navy. The blue reads cleaner against neutral graphite.
  3. The exact brand blue is #1574ef (rgb 21,116,239) — don’t substitute a generic mid-blue; the precise value ties the marketing to Bolt.new.
  4. White text on the blue CTA only clears AA at large/UI sizes (4.4:1) — keep the label at weight 600 and don’t shrink it below 15px.
  5. The hero should be big: Manrope ~94px / 600 / -0.03em at line-height 1.0. If it feels timid, the size — not the weight — is what to push.
  6. Keep the secondary Sign in button as a tinted-slate fill (rgba(49,61,94,0.24)), not an outline — it keeps the top bar in one cool temperature with the canvas.
  7. Resist shadows for card depth — use the surface ladder (#15181d#1c1f25#24272e#2c3038) plus a rgba(255,255,255,0.08) hairline. Save real shadow for the editor frame.
  8. The blue glow is scarce — apply only to the primary CTA hover. Spreading it across every hover dilutes the cue.
Ship with this

Drop stackblitz into your project, then ship the actual sections in an afternoon.

1 · install design
npx @webdesignhot/design-md add stackblitz
2 · ship landing page
npx agentkit init --design stackblitz
How AgentKit reads DESIGN.md