Heretic — decoded design system
Heretic'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/heretic.quest.
Decoded design system
Heretic's decoded design system: background #080A08, text #E6E4DA; type scale h1 72px / h2 48px / body 14px; 8px spacing base; 0px base radius. The single interactive/action color is #080A08 — used only on interactive or must-notice elements (buttons, links, key highlights), never on large fills.
Color roles
| Role | Value |
|---|---|
| bg | #080A08 |
| surface | #151714 |
| border | #292A27 |
| text | #E6E4DA |
| text_muted | #91918A |
| button_bg | #080A08 |
| button_text | #B4FF39 |
Using these colors
- Action color
#080A08— the single interactive color; only on things you click or must notice, never large fills.
Typography
- Heading: Spectral
- Body: JetBrains Mono
- Mono: JetBrains Mono
- h1: 72px
- h2: 48px
- body: 14px
Spacing
- base unit: 8px
- scale: 2px, 4px, 8px, 12px, 16px, 24px, 32px, 40px, 48px, 64px
Radii
- base: 0px
- button: 0px
Shadows (elevation)
- card:
rgba(180, 255, 57, 0.12) 0px 40px 120px -50px - overlay:
rgba(180, 255, 57, 0.18) 0px 40px 120px -50px
Motion
Micro-interactions run at 640ms (dominant) with cubic-bezier(0.16, 1, 0.3, 1).
- durations: 640ms · 150ms · 240ms
- easings:
cubic-bezier(0.16, 1, 0.3, 1)·cubic-bezier(0.4, 0, 0.2, 1) - animated properties: transform, opacity, color, background-color
Native design tokens
| Token | Value |
|---|---|
--h-ink | #080a08 |
--h-surface | #0a0c0a |
--h-surface-2 | #0b0e0b |
--h-char | #0e120e |
--h-hover | #0c100c |
--h-rule | #141914 |
--h-rule-strong | #1e241c |
--h-rule-soft | #161b15 |
--h-bone | #e6e4da |
--h-bone-dim | #a7a99b |
…and 87 more measured on the page.
Button states (measured)
- primary focus: background
#B4FF39· color#080A08· outline1px solid rgb(180, 255, 57)
Layout (measured)
- container max-width:
1240px - nav: 65px sticky, backdrop
blur(14px) - common grid: 12 columns
Motion choreography (measured)
Load order: div.flex → div.h-rise×4 → span.inline-block → h1.h-rise → div.relative → div.absolute×2
Scroll reveal: 28 elements rest at opacity 0, translateY(16px), animate in over 0.64s cubic-bezier(0.16, 1, 0.3, 1).
Stagger: div ×11 — 80ms apart.
Responsive (measured)
- breakpoints: 640px · 1024px
- mobile (390px): hero 48px · nav hamburger
Install it
Drop this measured system into any shadcn/Tailwind project in one command:
npx shadcn add https://mozaika.design/r/decode/heretic.quest
Or as a Meta Astryx theme — a ready defineTheme file with the measured hover/press states baked in:
curl -o src/themes/heretic.theme.ts https://mozaika.design/api/astryx/decode/heretic.quest.ts
registry item · astryx theme · or query it over MCP: get_design_system("Heretic")
Export: DESIGN.md
# Heretic — Design System > dark — deep decode (measured live) ## Colors | Role | Value | |------|-------| | bg | `#080A08` | | surface | `#151714` | | border | `#292A27` | | text | `#E6E4DA` | | text_muted | `#91918A` | | button_bg | `#080A08` | | button_text | `#B4FF39` | **Using these colors** - **Action color** `#080A08` — the single interactive color; it appears only on things you click or must notice (buttons, key highlights), never on large fills or backgrounds. - **Page coverage** (full-page screenshot pixels): `#080A08` 95.1% · `#42492F` 4.9% ## Typography - Heading: **Spectral** _(free fallback: Newsreader)_ - Body: **JetBrains Mono** - Mono: **JetBrains Mono** _(measured)_ | Role | Size / weight · line-height · tracking | |------|------------------------------------------| | hero | 72px / 200 · lh 73px · tracking -1.8px | | h2 | 48px / 300 · lh 48px · tracking -1.2px | | h3 | 40px / 300 · lh 40px · tracking -1px | | body | 14px / 400 · lh 20px | | small | 12px / 400 · lh 16px · tracking 1.68px | | eyebrow | 12px / 400 · tracking 1.68px | - Weight ladder: 200 · 300 · 400 · 500 — use these exact measured weights, not the 400/600 defaults. > **Fonts —** Spectral may be proprietary — safe free fallback: Newsreader (Google Fonts). JetBrains Mono — free, on Google. ## Spacing - base unit: 8px (inferred from the measured scale) - measured scale: 2px, 4px, 8px, 12px, 16px, 24px, 32px, 40px, 48px, 64px — snap all gaps/padding to these ## Radius - base: 0px - button: 0px ## Buttons | Button | Fill / text | Border | Radius | Padding | Font | Shadow | |--------|-------------|--------|--------|---------|------|--------| | primary | `#080A08` / `#B4FF39` | 1px solid rgb(180, 255, 57) | 0px | 8px 16px 8px 16px | 500 12px / 1.68px | none | **States (measured, not guessed)** - primary focus: background `#B4FF39` · color `#080A08` · outline `1px solid rgb(180, 255, 57)` - transition: `background-color 0.15s cubic-bezier(0.4, 0, 0.2, 1)` ## Shadows (elevation) - card: `rgba(180, 255, 57, 0.12) 0px 40px 120px -50px` - overlay: `rgba(180, 255, 57, 0.18) 0px 40px 120px -50px` ## Motion - durations: 640ms (dominant) · 150ms · 240ms - easings: `cubic-bezier(0.16, 1, 0.3, 1)` (dominant) · `cubic-bezier(0.4, 0, 0.2, 1)` - animated properties: transform, opacity, color, background-color 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 | |-------|-------| | `--h-ink` | `#080a08` | | `--h-surface` | `#0a0c0a` | | `--h-surface-2` | `#0b0e0b` | | `--h-char` | `#0e120e` | | `--h-hover` | `#0c100c` | | `--h-rule` | `#141914` | | `--h-rule-strong` | `#1e241c` | | `--h-rule-soft` | `#161b15` | | `--h-bone` | `#e6e4da` | | `--h-bone-dim` | `#a7a99b` | | `--h-bone-faint` | `#c9ccbe` | | `--h-ash` | `#7c846f` | _…and 85 more measured on the page._ Prefer these names when extending their system — it's the brand's actual vocabulary. ## Layout (measured) - container max 1240px · common grid: 12-col - nav: 65px sticky · backdrop blur(14px) · border-bottom 1px solid rgb(20, 25, 20) · bg rgba(8, 10, 8, 0.78) | Section (y) | Height | Cols | Gap | Pad y | Split | |---|---|---|---|---|---| | 98 | 994 | 12 | 48 | 0/0 | — | | 1092 | 163 | 3 | 1 | 0/0 | — | | 1255 | 756 | 12 | 64 | 0/0 | — | | 2011 | 1191 | 12 | 64 | 0/0 | — | | 3202 | 2146 | 2 | 24 | 0/0 | 39/61 | ## Motion choreography (measured) Load order: `div.flex` @0ms → `div.h-rise`×4 @0ms → `span.inline-block` @0ms → `h1.h-rise` @0ms → `div.relative` @0ms → `div.absolute`×2 @0ms - `div.h-rise` ×4 — opacity 0→1 · transform translateY(16px)→none — 640ms cubic-bezier(0.16, 1, 0.3, 1) - `h1.h-rise` — opacity 0→1 · transform translateY(16px)→none — 640ms cubic-bezier(0.16, 1, 0.3, 1) (delay 80ms) - `p.h-rise` — opacity 0→1 · transform translateY(16px)→none — 640ms cubic-bezier(0.16, 1, 0.3, 1) (delay 160ms) - `div.pointer-events-none` — opacity 0→1 · transform rotate(-3deg) scale(1.5)→rotate(-3deg) scale(1) — 600ms ease-out (delay 500ms) - `span.inline-block` — opacity 1→1 · transform scale(1)→scale(1) — 2400ms ease-in-out · loops - `span.ml-1` — opacity 1→0 — 1100ms steps(1) · loops - stagger: `div` ×11 — 80ms apart - scroll reveal: 28 elements rest at opacity 0, translateY(16px), animate in over 0.64s cubic-bezier(0.16, 1, 0.3, 1) (27 revealed during the drive). Rebuild the timeline, not just the durations — order, delays and staggers above are the choreography. ## Components (measured) - card ×4: pad 24px 24px 24px 24px · r 0px · bg #0A0C0A - hover: font-weight `400` · letter-spacing `normal` ## Responsive (measured) - breakpoints: 640px · 1024px - mobile (390px): hero 48px · body 16px · nav: hamburger ## 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/heretic.quest
Measured changes over time
- 2026-08-24: primary_button.bg rgba(0, 0, 0, 0)→#080A08, motion.dominant_ms 150→640, motion.dominant_easing cubic-bezier(0.4, 0, 0.2, 1)→cubic-bezier(0.16, 1, 0.3, 1)
An automated reading of Heretic's publicly-visible CSS (colors, fonts, spacing, motion) — not affiliated with heretic.quest. No screenshots stored. Removal requests: hello@mozaika.design.