Developer Tools

Supabase

Supabase Design System

brand-green-accent-on-darksingle-typeface-circularflat-border-defined-elevation8px-base-grid-rhythmdual-theme-symmetric

Supabase uses a dual-theme (light/dark) developer-focused design system anchored by a single custom typeface — Circular — across all text roles. The brand identity is expressed through a vivid green (#3ecf8e / #3fcf8e) used exclusively for accent text, CTA buttons, and logo marks against near-black or near-white surfaces. Elevation is communicated entirely through border contrast (1px borders in #2e2e2e dark / #dfdfdf light) rather than shadows, creating a flat, structured aesthetic. Spacing follows an 8px base grid with consistent multiples (8, 16, 24, 32, 96px). Border radii cluster at 6–8px for interactive elements and 12–16px for cards and panels.

19Colors
9Type styles
12Spacing
5Radii

Colors

Light Theme

Brand

Border Defaultprimary
Default border for nav, cards, dividers, and inputs in light mode

Surface

Background Basebackground
Primary page background in light mode
Surface Cardbackground
Card and panel surface fills in light mode
Brand Green Lightbackground
Hover states and lighter green tints on brand elements

Text

Text Primarytext
Primary body and heading text in light mode
Text Secondarytext
Secondary and subdued text in light mode
Text Mutedtext
Muted/tertiary text, captions, and metadata in light mode
Brand Greentext
Primary CTA button fill, hero headline accent, logo mark

Border

Border Subtleborder
Subtle input and component borders in light mode

Dark Theme

Brand

Border Defaultprimary
Default border for nav, cards, dividers, and inputs in dark mode

Surface

Background Basebackground
Primary page background in dark mode
Surface Cardbackground
Card and panel surface fills in dark mode
Surface Elevatedbackground
Elevated surface or hover state backgrounds in dark mode
Brand Green Darkbackground
Deep green tint used for brand button hover or pressed states

Text

Text Primarytext
Primary body and heading text in dark mode
Text Secondarytext
Secondary and subdued text in dark mode
Text Mutedtext
Muted/tertiary text, captions, and metadata in dark mode
Brand Greentext
Primary CTA button fill, hero headline accent, logo mark in dark mode

Border

Border Subtleborder
Subtle secondary borders in dark mode

Typography

Hero headline — largest display text on the page
The quick brown fox jumps
Circular72px · 400 · 72px
Section-level headings and feature titles
The quick brown fox jumps
Circular36px · 400 · 43.2px
Card titles and sub-section headings
The quick brown fox jumps
Circular24px · 400 · 32px · -0.16px
Hero body copy and introductory paragraphs
The quick brown fox jumps
Circular18px · 400 · 28px
Default body text, nav items, and general content
The quick brown fox jumps
Circular16px · 400 · 24px
Secondary body text, descriptions, and metadata
The quick brown fox jumps
Circular14px · 400 · 20px
Button labels, nav links, and interactive element labels
The quick brown fox jumps
Circular14px · 500 · 20px
Badges, tags, and small UI labels
The quick brown fox jumps
Circular12px · 400 · 16px
Inline code snippets and code block content
The quick brown fox jumps
Source Code Pro12px · 400 · 16px · 1.2px

Fonts

CircularCustom
Source Code ProGoogle

Spacing & Shape

Spacing

space-1
4px
space-2
8px
space-3
12px
space-4
16px
space-5
20px
space-6
24px
space-8
32px
space-10
40px
space-12
48px
space-16
64px
space-24
96px
space-32
128px

Border Radius

radius-sm6px
radius-md8px
radius-lg12px
radius-xl16px
radius-pill11px
---
version: alpha
name: "Supabase Design System"
description: "Supabase uses a dual-theme (light/dark) developer-focused design system anchored by a single custom typeface. Circular. across all text roles. The brand identity is expressed through a vivid green (#3ecf8e / #3fcf8e) used exclusively for accent text, CTA buttons, and logo marks against near-black or near-white surfaces. Elevation is communicated entirely through border contrast (1px borders in #2e2e2e dark / #dfdfdf light) rather than shadows, creating a flat, structured aesthetic. Spacing follows an 8px base grid with consistent multiples (8, 16, 24, 32, 96px). Border radii cluster at 6–8px for interactive elements and 12–16px for cards and panels."
colors:
  border-default: "#2e2e2e"
  background-base: "#121212"
  brand-green-dark: "#006239"
  surface-card: "#171717"
  surface-elevated: "#242424"
  brand-green: "#3ecf8e"
  text-muted: "#898989"
  text-primary: "#fafafa"
  text-secondary: "#b4b4b4"
  border-subtle: "#393939"
  brand-green-light: "#72e3ad"
typography:
  hero-display:
    fontFamily: "Circular"
    fontSize: "72px"
    fontWeight: "400"
    lineHeight: "72px"
  section-heading:
    fontFamily: "Circular"
    fontSize: "36px"
    fontWeight: "400"
    lineHeight: "43.2px"
  subheading:
    fontFamily: "Circular"
    fontSize: "24px"
    fontWeight: "400"
    lineHeight: "32px"
    letterSpacing: "-0.16px"
  large-body:
    fontFamily: "Circular"
    fontSize: "18px"
    fontWeight: "400"
    lineHeight: "28px"
  body-default:
    fontFamily: "Circular"
    fontSize: "16px"
    fontWeight: "400"
    lineHeight: "24px"
  body-medium:
    fontFamily: "Circular"
    fontSize: "14px"
    fontWeight: "400"
    lineHeight: "20px"
  label-medium:
    fontFamily: "Circular"
    fontSize: "14px"
    fontWeight: "500"
    lineHeight: "20px"
  label-small:
    fontFamily: "Circular"
    fontSize: "12px"
    fontWeight: "400"
    lineHeight: "16px"
  code:
    fontFamily: "Source Code Pro"
    fontSize: "12px"
    fontWeight: "400"
    lineHeight: "16px"
    letterSpacing: "1.2px"
rounded:
  radius-sm: "6px"
  radius-md: "8px"
  radius-lg: "12px"
  radius-xl: "16px"
  radius-pill: "11px"
spacing:
  space-1: "4px"
  space-2: "8px"
  space-3: "12px"
  space-4: "16px"
  space-5: "20px"
  space-6: "24px"
  space-8: "32px"
  space-10: "40px"
  space-12: "48px"
  space-16: "64px"
  space-24: "96px"
  space-32: "128px"
---

## Overview

Supabase uses a dual-theme (light/dark) developer-focused design system anchored by a single custom typeface. Circular. across all text roles. The brand identity is expressed through a vivid green (#3ecf8e / #3fcf8e) used exclusively for accent text, CTA buttons, and logo marks against near-black or near-white surfaces. Elevation is communicated entirely through border contrast (1px borders in #2e2e2e dark / #dfdfdf light) rather than shadows, creating a flat, structured aesthetic. Spacing follows an 8px base grid with consistent multiples (8, 16, 24, 32, 96px). Border radii cluster at 6–8px for interactive elements and 12–16px for cards and panels.

**Signature traits:**
- Dual typeface system: Pairs Circular and Source Code Pro across the type hierarchy.

## Colors

The palette uses 19 validated color tokens across 2 theme profiles. Semantic roles stay attached to observed usage so generation agents can choose accents without inventing new color meaning.

**Semantic naming:**
- **surface-background** maps to `background-base`: Role "background" is grounded by usage context "Primary page background in light mode".
- **content-text** maps to `text-primary`: Role "text" is grounded by usage context "Primary body and heading text in light mode".
- **border-primary** maps to `border-default`: Role "primary" is grounded by usage context "Default border for nav, cards, dividers, and inputs in light mode".
- **border-border** maps to `border-subtle`: Role "border" is grounded by usage context "Subtle input and component borders in light mode".

### Dark Theme

### Primary Brand
- **Border Default** (#2e2e2e): Default border for nav, cards, dividers, and inputs in dark mode. Role: primary. {authored: rgb(46, 46, 46), space: rgb}

### Text Scale
- **Brand Green** (#3ecf8e): Primary CTA button fill, hero headline accent, logo mark in dark mode. Role: text. {authored: rgb(62, 207, 142), space: rgb}
- **Text Muted** (#898989): Muted/tertiary text, captions, and metadata in dark mode. Role: text. {authored: rgb(137, 137, 137), space: rgb}
- **Text Primary** (#fafafa): Primary body and heading text in dark mode. Role: text. {authored: rgb(250, 250, 250), space: rgb}
- **Text Secondary** (#b4b4b4): Secondary and subdued text in dark mode. Role: text. {authored: rgb(180, 180, 180), space: rgb}

### Interactive
- **Border Subtle** (#393939): Subtle secondary borders in dark mode. Role: border. {authored: rgb(57, 57, 57), space: rgb}

### Surface & Shadows
- **Background Base** (#121212): Primary page background in dark mode. Role: background. {authored: rgb(18, 18, 18), space: rgb}
- **Brand Green Dark** (#006239): Deep green tint used for brand button hover or pressed states. Role: background. {authored: rgb(0, 98, 57), space: rgb}
- **Surface Card** (#171717): Card and panel surface fills in dark mode. Role: background. {authored: rgb(23, 23, 23), space: rgb}
- **Surface Elevated** (#242424): Elevated surface or hover state backgrounds in dark mode. Role: background. {authored: rgb(36, 36, 36), space: rgb}

### Light Theme

### Primary Brand
- **Border Default** (#dfdfdf): Default border for nav, cards, dividers, and inputs in light mode. Role: primary. {authored: rgb(223, 223, 223), space: rgb}

### Text Scale
- **Brand Green** (#3fcf8e): Primary CTA button fill, hero headline accent, logo mark. Role: text. {authored: rgb(63, 207, 142), space: rgb}
- **Text Muted** (#707070): Muted/tertiary text, captions, and metadata in light mode. Role: text. {authored: rgb(112, 112, 112), space: rgb}
- **Text Primary** (#171717): Primary body and heading text in light mode. Role: text. {authored: rgb(23, 23, 23), space: rgb}
- **Text Secondary** (#525252): Secondary and subdued text in light mode. Role: text. {authored: rgb(82, 82, 82), space: rgb}

### Interactive
- **Border Subtle** (#c7c7c7): Subtle input and component borders in light mode. Role: border. {authored: rgb(199, 199, 199), space: rgb}

### Surface & Shadows
- **Background Base** (#fcfcfc): Primary page background in light mode. Role: background. {authored: rgb(252, 252, 252), space: rgb}
- **Brand Green Light** (#72e3ad): Hover states and lighter green tints on brand elements. Role: background. {authored: rgb(114, 227, 173), space: rgb}
- **Surface Card** (#ffffff): Card and panel surface fills in light mode. Role: background. {authored: rgb(255, 255, 255), space: rgb}

## Typography

Typography uses Circular, Source Code Pro across extracted hierarchy roles. Keep hierarchy mapped to these token rows before adding decorative type styles.

Mixes Circular and Source Code Pro for visual contrast. Weight range spans regular, medium. Sizes range from 12px to 72px.

### Font Roles
- **Headline Font**: Circular
- **Body Font**: Circular

### Type Scale Evidence
| Role | Font | Size | Weight | Line Height | Letter Spacing | Stack / Features | Notes |
|------|------|------|--------|-------------|----------------|------------------|-------|
| Hero headline — largest display text on the page | Circular | 72px | 400 | 72px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Section-level headings and feature titles | Circular | 36px | 400 | 43.2px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Card titles and sub-section headings | Circular | 24px | 400 | 32px | -0.16px | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Hero body copy and introductory paragraphs | Circular | 18px | 400 | 28px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Default body text, nav items, and general content | Circular | 16px | 400 | 24px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Secondary body text, descriptions, and metadata | Circular | 14px | 400 | 20px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Button labels, nav links, and interactive element labels | Circular | 14px | 500 | 20px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Badges, tags, and small UI labels | Circular | 12px | 400 | 16px | normal | Circular, custom-font, Helvetica Neue, Helvetica, Arial, sans-serif | Extracted token |
| Inline code snippets and code block content | Source Code Pro | 12px | 400 | 16px | 1.2px | Source Code Pro, Office Code Pro, Menlo, monospace | Extracted token |

## Layout

Responsive system uses 2 breakpoint tier(s): mobile, desktop.

This system uses a 8px base grid with scale values 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 96, 128.

### Responsive Strategy
- **mobile (<= 600px)**: Constrain layout for small viewports and prioritize vertical stacking.
- **desktop (Unknown)**: Expand layout density and horizontal composition for wide viewports.

### Spacing System
| Token | Value | Px | Notes |
|------|-------|----|-------|
| space-1 | 4px | 4 | Extracted spacing token |
| space-2 | 8px | 8 | Extracted spacing token |
| space-3 | 12px | 12 | Extracted spacing token |
| space-4 | 16px | 16 | Extracted spacing token |
| space-5 | 20px | 20 | Extracted spacing token |
| space-6 | 24px | 24 | Extracted spacing token |
| space-8 | 32px | 32 | Extracted spacing token |
| space-10 | 40px | 40 | Extracted spacing token |
| space-12 | 48px | 48 | Extracted spacing token |
| space-16 | 64px | 64 | Extracted spacing token |
| space-24 | 96px | 96 | Extracted spacing token |
| space-32 | 128px | 128 | Extracted spacing token |

## Elevation & Depth

Keep depth flat unless validated shadow or interaction evidence appears in the extraction payload. Do not invent shadows beyond this evidence boundary.

### Shadow Evidence
| Shadow Token | Layers | Details |
|--------------|--------|---------|
| n/a | 0 | No validated shadow payload |

### Interaction Signals
| Theme | Signal | Evidence |
|-------|--------|----------|
| Light | backdrop-filter | blur(4px) |
| Light | outline-color | rgb(23, 23, 23) ; rgb(112, 112, 112) ; rgb(178, 178, 178) |
| Light | outline-width | 3px ; 0px |
| Light | outline-offset | 0px |
| Light | transform | matrix(1, 0, 0, 1, -120.764, 0) ; matrix(1, 0, 0, 1, -223.991, 0) ; matrix(1, 0, 0, 1, -305.438, 0) |
| Dark | backdrop-filter | blur(4px) |
| Dark | outline-color | rgb(250, 250, 250) ; rgb(137, 137, 137) ; rgb(77, 77, 77) |
| Dark | outline-width | 3px ; 0px |
| Dark | outline-offset | 0px |
| Dark | transform | matrix(1, 0, 0, 1, -144.845, 0) ; matrix(1, 0, 0, 1, -268.655, 0) ; matrix(1, 0, 0, 1, -305.438, 0) |

## Shapes

Shape language maps directly to rounded tokens. Keep component corners consistent with the role mapping below before introducing bespoke geometry.

### Radius Roles
| Token | Value | Px | Role Mapping |
|------|-------|----|--------------|
| radius-sm | 6px | 6 | Subtle corner |
| radius-md | 8px | 8 | Control corner |
| radius-pill | 11px | 11 | Control corner |
| radius-lg | 12px | 12 | Control corner |
| radius-xl | 16px | 16 | Card corner |

### Geometry Evidence
| Radius Token | Shape | Units |
|--------------|-------|-------|
| radius-sm | 6px | px |
| radius-md | 8px | px |
| radius-lg | 12px | px |
| radius-xl | 16px | px |
| radius-pill | 11px | px |

## Components

(none detected)

## Do's and Don'ts

Guardrails protect Dual typeface system without adding unsupported visual claims.

| Do | Don't |
|----|---------|
| Do maintain consistent spacing using the base grid | Don't make unsupported claims about absent visual features |
| Do maintain WCAG AA contrast ratios (4.5:1 for normal text) | Don't mix rounded and sharp corners in the same view |
| Do use the primary color only for the single most important action per screen |  |
| Do verify evidence before writing new design-system guidance |  |

## Responsive Evidence

### Breakpoints
| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <= 600px | (max-width: 600px) |
| Breakpoint 2 | Unknown | (prefers-reduced-motion) |

## Agent Prompt Guide

### Example Component Prompts
- Create button component using validated primary color role and spacing tokens.
- Create card component with mapped radius role and evidence-backed elevation.
- Create form input component using inferred typography hierarchy and border roles.

### Iteration Guide
1. Start with extracted palette and typography roles only.
2. Map spacing and radius directly from token tables before visual polish.
3. Apply component patterns one section at a time and compare against source intent.
4. Keep elevation claims tied to explicit evidence in output.
5. Iterate with smallest diffs and re-check section hierarchy after each change.
Design Extractor

Turn any website into a structured design spec that AI coding agents can use to build pixel-perfect UI.

© 2026 Design Extractor. All rights reserved.

Supabase — Design Tokens & System | Design Extractor