Pangram Pangram — decoded design system
Pangram Pangram'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/pangrampangram.com.
Decoded design system
Pangram Pangram's decoded design system: background #FAFAFA, text #000000, accent #FF2F00, link #666666, primary #FF2F00; type scale h1 145px / h2 121px / body 14px; 4px spacing base; 20px base radius. The single interactive/action color is #000000 — used only on interactive or must-notice elements (buttons, links, key highlights), never on large fills.
Color roles
| Role | Value |
|---|---|
| bg | #FAFAFA |
| surface | #EBEBEB |
| border | #D4D4D4 |
| text | #000000 |
| text_muted | #5F5F5F |
| primary | #FF2F00 |
| accent | #FF2F00 |
| link | #666666 |
| secondary | #1990C6 |
| button_bg | #000000 |
| button_text | #FFFFFF |
Using these colors
- Action color
#000000— the single interactive color; only on things you click or must notice, never large fills. primary,accentare all#FF2F00— one role, not several (the action color).- accent
#FF2F00— accent for emphasis — keep it rare on the page. - link
#666666— reads as a neutral UI color, not a link accent — verify against the reference (action = #000000). - secondary
#1990C6— optional secondary accent — LOW decode confidence; use rarely (a status color or a single decorative moment) or omit it entirely. Prefer one accent unless the reference clearly shows two.
Typography
- Heading: Neue Montreal
- Body: Neue Montreal
- h1: 145px
- h2: 121px
- body: 14px
Spacing
- base unit: 4px
- scale: 4px, 8px, 12px, 15px, 20px, 23px, 24px, 26px, 31px, 36px
Radii
- base: 20px
- button: 20px
Shadows (elevation)
- card:
rgba(63, 63, 68, 0.4) 0px 4px 10px 0px
Motion
Micro-interactions run at 200ms (dominant) with ease.
- durations: 200ms · 500ms · 100ms
- easings:
ease·cubic-bezier(0.22, 1, 0.36, 1) - animated properties: color, background-color, transform, opacity
Native design tokens
| Token | Value |
|---|---|
--duration-short | .1s |
--duration-default | .2s |
--duration-medium | .3s |
--duration-long | .5s |
--duration-extra-long | .6s |
--duration-extra-longer | .75s |
--duration-extended | 3s |
--ease-in-cubic | cubic-bezier(.32, 0, .67, 0) |
--ease-out-cubic | cubic-bezier(.33, 1, .68, 1) |
--ease-out-sine | cubic-bezier(.61, 1, .88, 1) |
…and 21 more measured on the page.
Layout (measured)
- container max-width:
1260px - nav: 54px absolute
Motion choreography (measured)
Load order: div.loading__spinner×24 → div.mini-carousel__slider → div.section-margin → div.section-margin → div.section__section-header×4 → div.section__section-header×4
Scroll reveal: 18 elements rest at opacity 0, translateY(32px), animate in over 0.75s cubic-bezier(0.22, 1, 0.36, 1).
Stagger: li ×10 — 100ms apart.
Overlay recipe (measured)
dialog panel: #FFB700 · radius 20px
Responsive (measured)
- breakpoints: 375px · 400px · 480px · 700px · 750px · 1200px
- mobile (390px): hero 14px · nav inline
Install it
Drop this measured system into any shadcn/Tailwind project in one command:
npx shadcn add mozaika.design/r/decode/pangrampangram.com
registry item · or query it over MCP: get_design_system("Pangram Pangram")
Export: DESIGN.md
# Pangram Pangram — Design System > light, modern, high, custom — deep decode (measured live) ## Colors | Role | Value | |------|-------| | bg | `#FAFAFA` | | surface | `#EBEBEB` | | border | `#D4D4D4` | | text | `#000000` | | text_muted | `#5F5F5F` | | primary | `#FF2F00` | | accent | `#FF2F00` | | link | `#666666` | | secondary | `#1990C6` | | button_bg | `#000000` | | button_text | `#FFFFFF` | **Using these colors** - **Action color** `#000000` — the single interactive color; it appears only on things you click or must notice (buttons, key highlights), never on large fills or backgrounds. - `primary`, `accent` are all `#FF2F00` — one role, not several. - **accent** `#FF2F00` — accent for emphasis — keep it rare on the page. - **link** `#666666` — reads as a neutral UI color, not a link accent — verify against the reference (action = #000000). - **secondary** `#1990C6` — optional secondary accent — LOW decode confidence; use rarely (a status color or a single decorative moment) or omit it entirely. Prefer one accent unless the reference clearly shows two. - **Page coverage** (full-page screenshot pixels): `#6F7878` 30.3% · `#FAFAFA` 27.4% · `#752C0C` 15.3% · `#261411` 10.9% ## Typography - Heading: **Neue Montreal** _(free fallback: Space Grotesk)_ - Body: **Neue Montreal** _(free fallback: Space Grotesk)_ | Role | Size / weight · line-height · tracking | |------|------------------------------------------| | hero | 145px / 400 · lh 145px | | h2 | 121px / 600 · lh 121px | | h3 | 73px / 600 · lh 73px | | body | 14px / 400 · lh 18px | | small | 12px / 400 · lh 15px | - Weight ladder: 400 · 500 · 530 · 600 · 700 — use these exact measured weights, not the 400/600 defaults. > **Fonts —** Neue Montreal is proprietary — closest free match: Space Grotesk (Google). Load Space Grotesk; keep Neue Montreal first so licensed users still get it. ## Spacing - base unit: 4px (inferred from the measured scale) - measured scale: 4px, 8px, 12px, 15px, 20px, 23px, 24px, 26px, 31px, 36px — snap all gaps/padding to these ## Radius - base: 20px - button: 20px - card: 20px - pill: 9999px - sharp: 3px ## Buttons | Button | Fill / text | Border | Radius | Padding | Font | Shadow | |--------|-------------|--------|--------|---------|------|--------| | primary | `#000000` / `#FFFFFF` | none | 20px | 7.65104px 15.3019px 7.65104px 15.3019px | 400 14px | none | | secondary | `rgba(0, 0, 0, 0)` / `#FFFFFF` | 1px solid rgb(255, 255, 255) | 20px | 7.65104px 22.953px 7.65104px 22.953px | 400 14px | none | **States (measured, not guessed)** - transition: `background-color 0.2s ease` ## Shadows (elevation) - card: `rgba(63, 63, 68, 0.4) 0px 4px 10px 0px` ## Motion - durations: 200ms (dominant) · 500ms · 100ms - easings: `ease` (dominant) · `cubic-bezier(0.22, 1, 0.36, 1)` - animated properties: color, background-color, transform, opacity 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 | |-------|-------| | `--duration-short` | `.1s` | | `--duration-default` | `.2s` | | `--duration-medium` | `.3s` | | `--duration-long` | `.5s` | | `--duration-extra-long` | `.6s` | | `--duration-extra-longer` | `.75s` | | `--duration-extended` | `3s` | | `--ease-in-cubic` | `cubic-bezier(.32, 0, .67, 0)` | | `--ease-out-cubic` | `cubic-bezier(.33, 1, .68, 1)` | | `--ease-out-sine` | `cubic-bezier(.61, 1, .88, 1)` | | `--ease-out-quint` | `cubic-bezier(.22, 1, .36, 1)` | | `--ease-in-quint` | `cubic-bezier(.64, 0, .78, 0)` | _…and 19 more measured on the page._ Prefer these names when extending their system — it's the brand's actual vocabulary. ## Layout (measured) - container max 1260px - nav: 54px absolute | Section (y) | Height | Cols | Gap | Pad y | Split | |---|---|---|---|---|---| | 92 | 519 | — | — | 0/0 | — | | 641 | 519 | — | — | 0/0 | — | | 1191 | 519 | — | — | 0/0 | — | | 1812 | 1414 | — | — | 0/0 | — | | 3329 | 639 | — | — | 0/0 | — | | 4071 | 408 | — | — | 0/0 | — | | 4509 | 220 | — | — | 0/0 | — | ## Motion choreography (measured) Load order: `div.loading__spinner`×24 @0ms → `div.mini-carousel__slider` @220ms → `div.section-margin` @414ms → `div.section-margin` @414ms → `div.section__section-header`×4 @414ms → `div.section__section-header`×4 @414ms - `div.mini-carousel__slider` — transform translate(0px)→translate(-50%) — 30000ms · loops - stagger: `li` ×10 — 100ms apart - scroll reveal: 18 elements rest at opacity 0, translateY(32px), animate in over 0.75s cubic-bezier(0.22, 1, 0.36, 1) (18 revealed during the drive). - overlay dialog (auto-opened): panel #FFB700 · r 20px · shadow rgba(63, 63, 68, 0.5) 0px 5px 10px 0px Rebuild the timeline, not just the durations — order, delays and staggers above are the choreography. ## Components (measured) - card ×6: pad 15.3019px 15.3019px 15.3019px 15.3019px · r 20px · bg #EDEDED - hover: font-weight `400` · letter-spacing `normal` - link: #000000 · underline ## Responsive (measured) - breakpoints: 375px · 400px · 480px · 700px · 750px · 1200px - mobile (390px): hero 14px · 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.
An automated reading of Pangram Pangram's publicly-visible CSS (colors, fonts, spacing, motion) — not affiliated with pangrampangram.com. No screenshots stored. Removal requests: hello@mozaika.design.