Statsig — decoded design system
Statsig's design system, decoded live by Mozaika: measured color roles, type scale, buttons with real hover/focus states, motion and the brand's own tokens.
This is a static, crawlable rendering for search & AI engines. The interactive version — filters, live decode console, copy & export — is at https://mozaika.design/decode/statsig.com.
Decoded design system
Statsig's decoded design system: background #F6F6F6, text #1F2328, accent #1F2328, link #000000, primary #000000; type scale h1 65px / h2 40px / body 14px; 10px spacing base; 0px base radius. The single interactive/action color is #FFFFFF — used only on interactive or must-notice elements (buttons, links, key highlights), never on large fills.
Color roles
| Role | Value |
|---|---|
| bg | #F6F6F6 |
| surface | #E9E9E9 |
| border | #D5D6D7 |
| text | #1F2328 |
| text_muted | #707376 |
| primary | #000000 |
| accent | #1F2328 |
| link | #000000 |
| button_bg | #FFFFFF |
| button_text | #1F2328 |
Using these colors
- Action color
#FFFFFF— the single interactive color; only on things you click or must notice, never large fills. primary,linkare all#000000— one role, not several (the action color).- accent
#1F2328— accent for emphasis — keep it rare on the page.
Typography
- Heading: Geist
- Body: Geist
- Mono: Geist Mono
- h1: 65px
- h2: 40px
- body: 14px
Spacing
- base unit: 10px
- scale: 3px, 5px, 6px, 8px, 10px, 12px, 16px, 20px, 30px, 40px
Radii
- base: 0px
- button: 30px
Shadow
rgb(212, 215, 220) 0px 0px 0px 1px inset
Shadows (elevation)
- card:
rgba(27, 37, 40, 0.05) 0px 0px 20px 0px
Motion
Micro-interactions run at 400ms (dominant) with ease-in-out.
- durations: 400ms · 200ms
- easings:
ease-in-out·ease - animated properties: opacity, box-shadow, border-bottom
Native design tokens
| Token | Value |
|---|---|
--color-white | #fff |
--color-soft-white | #ededed |
--color-gray | #d4d7dc |
--color-dark-gray | #343941 |
--color-black | #1f2328 |
--color-light-blue | #e5f0ff |
--color-medium-blue | #accfff |
--color-blue | #367eed |
--color-dark-blue | #1b63d2 |
--color-background | #f6f6f6 |
…and 26 more measured on the page.
Button states (measured)
- primary focus: outline
1px auto rgb(16, 16, 16)
Motion choreography (measured)
Load order: div.vocColumnScroller×2 → div.vocColumnScroller
Scroll reveal: 3 elements rest at a pre-reveal state.
Responsive (measured)
- breakpoints: 840px
- mobile (390px): hero 40px · nav inline
Install it
Drop this measured system into any shadcn/Tailwind project in one command:
npx shadcn add mozaika.design/r/decode/statsig.com
Or as a Meta Astryx theme — a ready defineTheme file with the measured hover/press states baked in:
curl -o src/themes/statsig.theme.ts https://mozaika.design/api/astryx/decode/statsig.com.ts
registry item · astryx theme · or query it over MCP: get_design_system("Statsig")
Export: DESIGN.md
# Statsig — Design System > light, modern, medium, custom — deep decode (measured live) ## Colors | Role | Value | |------|-------| | bg | `#F6F6F6` | | surface | `#E9E9E9` | | border | `#D5D6D7` | | text | `#1F2328` | | text_muted | `#707376` | | primary | `#000000` | | accent | `#1F2328` | | link | `#000000` | | button_bg | `#FFFFFF` | | button_text | `#1F2328` | **Using these colors** - **Action color** `#FFFFFF` — the single interactive color; it appears only on things you click or must notice (buttons, key highlights), never on large fills or backgrounds. - `primary`, `link` are all `#000000` — one role, not several. - **accent** `#1F2328` — accent for emphasis — keep it rare on the page. - **Page coverage** (full-page screenshot pixels): `#F6F6F6` 87.4% · `#4F73AC` 7.8% · `#E3E8EC` 4.8% ## Typography - Heading: **Geist** - Body: **Geist** - Mono: **Geist Mono** _(measured)_ | Role | Size / weight · line-height · tracking | |------|------------------------------------------| | hero | 65px / 500 · lh 72px · tracking -2px | | h2 | 40px / 600 · lh 50px | | h3 | 32px / 600 · lh 40px | | body | 14px / 400 · lh 24px | - Weight ladder: 400 · 500 · 600 — use these exact measured weights, not the 400/600 defaults. > **Fonts —** Geist — free, on Google. ## Spacing - base unit: 10px (inferred from the measured scale) - measured scale: 3px, 5px, 6px, 8px, 10px, 12px, 16px, 20px, 30px, 40px — snap all gaps/padding to these - section rhythm: 100px top/bottom padding per section (measured) ## Radius - base: 0px - button: 30px - card: 10px ## Buttons | Button | Fill / text | Border | Radius | Padding | Font | Shadow | |--------|-------------|--------|--------|---------|------|--------| | primary | `#FFFFFF` / `#1F2328` | none | 30px | 10px 20px 10px 20px | 600 16px | rgb(212, 215, 220) 0px 0px 0px 1px inset | | secondary | `#1F2328` / `#FFFFFF` | none | 30px | 6px 20px 6px 20px | 600 14px | none | **States (measured, not guessed)** - primary focus: outline `1px auto rgb(16, 16, 16)` ## Shadows (elevation) - card: `rgba(27, 37, 40, 0.05) 0px 0px 20px 0px` - button: `rgb(212, 215, 220) 0px 0px 0px 1px inset` ## Motion - durations: 400ms (dominant) · 200ms - easings: `ease-in-out` (dominant) · `ease` - animated properties: opacity, box-shadow, border-bottom Micro-interactions use the dominant duration + easing; nothing on the page animates slower than the longest duration above — don't invent springier motion. ## Their own tokens (verbatim from :root) | Token | Value | |-------|-------| | `--color-white` | `#fff` | | `--color-soft-white` | `#ededed` | | `--color-gray` | `#d4d7dc` | | `--color-dark-gray` | `#343941` | | `--color-black` | `#1f2328` | | `--color-light-blue` | `#e5f0ff` | | `--color-medium-blue` | `#accfff` | | `--color-blue` | `#367eed` | | `--color-dark-blue` | `#1b63d2` | | `--color-background` | `#f6f6f6` | | `--color-text-primary` | `#1f2328` | | `--color-text-secondary` | `#535963` | _…and 24 more measured on the page._ Prefer these names when extending their system — it's the brand's actual vocabulary. ## Layout (measured) | Section (y) | Height | Cols | Gap | Pad y | Split | |---|---|---|---|---|---| | 100 | 858 | — | — | 100/0 | — | ## Motion choreography (measured) Load order: `div.vocColumnScroller`×2 @0ms → `div.vocColumnScroller` @0ms - scroll reveal: 3 elements rest at a pre-reveal state (3 revealed during the drive). Rebuild the timeline, not just the durations — order, delays and staggers above are the choreography. ## Responsive (measured) - breakpoints: 840px - mobile (390px): hero 40px · body 14px · nav: inline ## How to apply Paste the Tailwind `@theme` (or CSS variables) as your base, then build each section to its spec — verify every color, radius, and font against these tokens. Hover/focus states, shadows and motion timings above are measured from the live page — match them exactly, don't re-guess them. --- > **Decoded with Mozaika** — measured live, not guessed. Full decoded design system + one-command install: mozaika.design/decode/statsig.com
An automated reading of Statsig's publicly-visible CSS (colors, fonts, spacing, motion) — not affiliated with statsig.com. No screenshots stored. Removal requests: hello@mozaika.design.