
Ppt Skill
- 1 installs
- 2 repo stars
- Updated May 28, 2026
- wechat-gggithub/all-in-one-ppt
Generates production-grade HTML slideshows from a topic, outline, or document, asking clarifying questions first and offering visual previews before generating.
About
This skill creates usable presentations as HTML slideshows with optional PDF export, refusing to skip clarification before generating. A developer uses it to make or edit slides from a topic, outline, or uploaded document in any language.
- Clarifies via Socratic questions before writing any outline
- Shows visual previews and writes native, information-carrying titles
Ppt Skill by the numbers
- 1 all-time installs (skills.sh)
- Ranked #565 of 688 Office & Documents skills by installs in the Skillselion catalog
- Data as of Jul 27, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wechat-gggithub/all-in-one-ppt --skill ppt-skillAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 2 |
| Last updated | May 28, 2026 |
| Repository | wechat-gggithub/all-in-one-ppt ↗ |
What it does
Generates production-grade HTML slideshows from a topic, outline, or document, asking clarifying questions first and offering visual previews before generating.
Files
PPT Skill — Production-Grade, Actually-Usable Presentations
Core Philosophy
Useful, not fast. Every other AI PPT tool optimizes for speed and produces decks that "应付用" (just barely usable). This skill optimizes for actual usability — the kind a person would walk into a meeting with.
Four rules that override everything else:
1. Clarify before generating. Never write outline or slide content until Phase 1 is complete. 2. Show, don't tell, for visuals. Never describe styles in words. Generate previews and let the user pick. 3. Titles carry information, not labels. Cover the body and read titles only — the reader must grasp what each slide is about. Empty noun-phrase labels ("Market Analysis" / "Our Solution" / "Background") fail this test. For persuasive and reporting scenarios, write action titles that state the takeaway. For academic, educational, and reference slides, a precise topic phrase is fine. Forcing every title into a full sentence triggers Rule 4's translator-ese trap. 4. Write like a native, not a translator. Generated text must read as if a native speaker wrote it from scratch. AI's default output in Chinese (and other non-English languages) tends toward 翻译腔 / "AI 文风" — grammatically correct, but no native would actually say it that way. This is the #1 quality killer for non-English decks. See references/patterns.md § Language-Native Phrasing.
Path Conventions
Two path values drive every reference. Both are placeholders, not shell variables — substitute the resolved literal path before running.
- `{SKILL_DIR}` — the skill's install root (the directory holding this
SKILL.md), typically/Users/<you>/.claude/skills/ppt-skillon macOS. Resolve once per session. - `{RUN_DIR}` — the per-run working directory for intermediate artifacts. Create at session start:
mkdir -p "./ppt-workspace/runs/$(date +%Y%m%d-%H%M%S)"/{extracted,template_thumbs,style_previews,qa_thumbs,unpacked}Why placeholders, not shell variables: Claude Code's Bash tool does not persist shell state across calls — export SKILL_DIR=… in one Bash call is gone by the next. Placeholders (curly braces without $) make it obvious these are author-time substitutions.
Where things live (cwd-relative by default): inputs wherever the user supplied them; intermediates under {RUN_DIR}/; final deliverables in the current working directory (./<slides-slug>.html, optionally ./<slides-slug>.pdf) unless the user asked otherwise.
Mode Routing
Identify the mode from the first message + uploaded files. Read the matching reference file before proceeding — it contains mode-specific Phase 0 details.
| Signal | Mode | Reference |
|---|---|---|
| Uploaded .docx / .pdf / .md / image / .xlsx / .csv / .json / .pptx or provided a URL, asks for slides | from-files | references/modes/from-files.md |
| No file, just a topic, an outline, or a long pasted text body | from-prompt | references/modes/from-prompt.md |
| Image-only upload, no other content | from-prompt (Phase 0 classifies image: content / style / illustration) | references/modes/from-prompt.md |
User references a previously-generated deck from this session ({RUN_DIR}/slides.md exists) | iterate | references/modes/iterate.md |
Note on .pptx uploads: Uploaded .pptx files are treated as from-files input. The skill extracts text, images, and layout information via extract_pptx.py and uses them as source content for a new HTML deck. The skill does not edit .pptx files in place.
Ambiguous? Ask. Especially: from-prompt with images (intent classification per Phase 0); multiple file uploads (which is primary content). For from-files vs iterate specifically — if {RUN_DIR}/slides.md exists from this session → iterate (edit slides.md, re-render); if user uploaded a fresh file → from-files. If both, ask which is canonical.
The Six Phases
Every mode runs phases in order — do not skip. 0: Context Inspection (mode-specific) → 1: Socratic Clarification (most important) → 2: Narrative & Outline → 3: Visual Style Selection → 4: Content Deep Expansion → 5: Format → Render → QA.
Exceptions: iterate skips Phases 1-3 (prior run already settled them — load slides.md, apply diff in Phase 4, re-render in Phase 5).
Phase 0: Context Inspection
Mode-specific — don't ask the user things you can find out yourself. Each mode reference describes its own Phase 0 in detail (file extraction, URL fetching via WebFetch or auth-source skills like dingtalk-docs, .pptx extraction via extract_pptx.py, data-file summary stats, etc.). Read the matching mode reference before continuing.
Phase 1: Socratic Clarification (MANDATORY)
Do NOT generate any outline, slide content, narrative, or visual until Phase 1 is complete.
Walk through 7 base dimensions. For each: if the user already answered → skip; if unclear → ask ONE multiple-choice question via AskUserQuestion (proper option chips). Wait for the answer before the next dimension.
| # | Dimension | Suggested options |
|---|---|---|
| 1 | Purpose | Make a decision / Understand a concept / Be persuaded / Be moved / Learn to do something |
| 2 | Audience | Colleagues / Boss or leadership / Clients or investors / Students / General public / Mixed |
| 3 | Setting | Live presentation / Big screen / Email attachment / Printed handout / Web page |
| 4 | Length | ~5 min (≤8 slides) / ~15 min (≤15 slides) / ~30 min (20-30) / Open |
| 5 | Key facts | What must absolutely appear (data, names, quotes, dates) — open-ended |
| 6 | Tone | Formal & rigorous / Professional & calm / Warm & friendly / Bold & striking / Quiet & human |
| 7 | Existing assets | Data, images, brand guidelines, reference material — open-ended |
from-prompt adds an 8th dimension — "likely pushback" — for pitches/proposals/consequential recommendations only. Defined in references/modes/from-prompt.md. Do NOT ask in from-files or iterate.
Rules for asking: one question per message; multiple-choice with 2-5 options; priority order 1 → 2 → 3 → 5 → 6 → 4 → 7, stop early when you have enough; don't ask what's already clear from uploaded files; ambiguous answers warrant follow-ups.
After clarification, present a brief summary back. Optionally classify a `scenario` (one of: business_pitch / work_report / product_intro / academic / education / creative_proposal / data_analysis / personal_sharing) — it is recorded in slides.md frontmatter and used to pick narrative arcs in Phase 2. If none cleanly fits, say so explicitly and propose the closest with reasoning. Wait for explicit confirmation before Phase 2.
Phase 2: Narrative & Outline
Stage 2a — narrative arc (2-3 alternatives). Based on scenario, propose 2-3 narrative arcs. Read references/patterns.md § "Narrative Arcs by Scenario" for curated arcs per scenario.
Do not skip 2a just because the user gave a structure. A section list is not a narrative arc. "deck has 4 parts: market / product / team / ask" is a table of contents — the arc question is still open (open with market pain? bold product claim? founder story?). Treat user-provided structure as content scope, then still ask which arc to use. Only skip 2a when the user explicitly named an arc.
Stage 2b — outline. After the arc is chosen, generate slide-by-slide outline with: slide number + slide kind in user-facing language (cover / divider / content / data / Q&A / closing — translate; never expose the internal slide_type enum); action title for every content/data slide (full sentence stating takeaway, never a noun-phrase label — single biggest quality lever); 1-3 sentences describing the slide. Chunk the outline when there are natural stage boundaries or when length × complexity overwhelms a single review pass.
Wait for outline approval before Phase 3.
Phase 3: Visual Style Selection (Show, Don't Tell)
Never let the user describe a style in words. "Modern" / "clean" / "professional" mean something different to every user. Instead: pick 3 candidates from assets/styles/_index.md (42 presets), render the same sample slide in each, combine into one compare.html via combine_style_previews.py, auto-open in the browser, ask via AskUserQuestion with 4 fixed slots (3 presets + "Browse all 42"; "Other" auto-slot handles custom descriptions like "MUJI" / "ink wash"). Full procedure including custom-style persistence in assets/styles/_index.md. Record the chosen preset in slides.md frontmatter style_preset:.
Phase 4: Content Deep Expansion
Expand the Phase-2 outline into full per-slide content. Trust the model on this step, but give it good context and good principles — and flag the high-risk information explicitly for the user to verify. Full procedure in references/patterns.md § "Phase 4 Expansion Principles & Checklists":
- Four positive principles (convergence not divergence; source-priority; elaboration allowed, fabrication forbidden; depth tracks source density).
- Key Information Checklist (10 categories the user must verify — numerals, direct quotes, person+title, org/product names, dates, source attributions; rankings, causal claims, scope, comparison numbers).
- High-risk slides table (data / case-study / quote / conclusion / cover).
- Delivery callout to paste at Phase 5e along with the file paths.
Image placement: see references/images.md (single source of truth — intent classification, content vs decorative filter, rules by slide_type, size budgets).
Scope: from-files and from-prompt. iterate skips (only iterates affected slides).
Phase 5: Format → Render → QA
5a. Pick a format — two-way choice:
- A. HTML slideshow — browser, keyboard arrows, easy link-share.
- B. HTML + PDF — same HTML plus a 1280×720
.pdf(one slide per page) for email/Wechat/handout.
Defaults: from-files → HTML + PDF; from-prompt → HTML (or HTML+PDF if Phase 1 dim 3 said "email attachment"). Record in slides.md frontmatter output_format: ([html] / [html, pdf]) so iterate re-renders in the same format. HTML + PDF mechanics in references/render/html.md § "HTML + PDF output".
5b. Build slides.md — Markdown body + YAML frontmatter, ## sN slide blocks. Spec in references/slides-md-spec.md.
5c. Render — read the HTML rendering reference (references/render/html.md), including the Layout Playbook section and the CJK Content Adaptation section (mandatory when deck content is ≥30% Chinese/Japanese/Korean — see the four rules in that section). For each slide: apply the layout selection matrix to pick the right layout, run content triage against capacity rules, and enforce visual hierarchy before generating HTML.
- HTML: generate directly using the style preset file
assets/styles/<preset>.md(contains CSS variables, typography scale, component HTML recipes, layout patterns, Do's/Don'ts, and CJK notes). Single self-contained HTML, 1280×720, inline CSS/JS, keyboard nav, print rules.
5d. Visual QA — references/render/html.md has the QA loop. HTML: python {SKILL_DIR}/scripts/qa/qa_serve.py <deck.html>. Fix obvious issues; re-verify in proportion to what changed.
Self-check before delivery (in addition to visual QA):
- Read
takeawayof every content/data slide in order. Any topic-label rather than a claim → fix per Phase 4 rules. - Skim test: titles alone should narrate the deck.
- Chart consistency: for each data slide, verify takeaway count claims ("5 大场景", "three key drivers") match the chart's x_labels count and enumeration.
- Image completeness (from-files mode only): if
extracted/images_manifest.jsonexists, verify every image is either referenced in a slide body or deliberately taggededitorial: "skip"with a reason in the manifest. - Image rendering audit (HARD RULE): if
images_manifest.jsonexists, run this check on the generated HTML:
EXPECTED=$(python3 -c "import json; m=json.load(open('{RUN_DIR}/extracted/images_manifest.json')); print(sum(1 for x in m if x.get('editorial')!='skip'))")
ACTUAL=$(grep -c 'data:image\|<img src=' "./<deck-slug>.html")
echo "Expected ≥ $EXPECTED images in HTML, found $ACTUAL"If ACTUAL < EXPECTED, images were lost during rendering. Go back to the Image Preparation step in references/render/html.md, regenerate images_ready.json, and re-render the missing images into the HTML. Do not deliver until this check passes.
- Spot-check the high-risk categories from Phase 4 against the source.
5e. Deliver — paste the file path(s) in chat (default ./<slides-slug>.html and optionally ./<slides-slug>.pdf). Don't try to attach binaries. Paste the delivery callout from references/patterns.md § "Delivery callout" to align expectations on what the user must spot-check.
---
Critical Reminders
- The user can interrupt and change direction at any point. Mid-Phase-4 "let's restart" → go back to Phase 1.
- If unsure at any phase, ask. Asking is cheap. Building the wrong thing is expensive.
- Don't narrate the phases to the user ("Now entering Phase 3"). Just do the work.
- Don't use this skill's terminology in user-facing messages (
slide_type,action_title,takeaway,slides.md, "ghost deck test" stay internal). - Languages: respond in whatever language the user uses; keep deck content in the user's language.
Reference Files (Progressive Disclosure)
Read only when the matching phase needs them — don't preload.
| File | When to read |
|---|---|
references/modes/<mode>.md | Phase 0, after mode is identified |
references/extract/*.md | from-files, per file type (docx, pdf, md, images, pptx, xlsx, json) |
references/patterns.md | Phase 2 (narrative arcs) + Phase 4 (expansion principles, anti-patterns, language-native phrasing, delivery callout) |
references/images.md | Phase 4 image placement rules |
assets/styles/_index.md | Phase 3, to pick 3 candidates and run the preview procedure |
assets/styles/<preset>.md | Phase 5c HTML, for CSS variables, typography scale, component recipes, layout patterns, Do's/Don'ts, CJK notes |
references/slides-md-spec.md | Phase 5b, before writing slides.md |
references/fixtures/slides_minimal_valid.md | Anytime you need a canonical validating example |
references/render/html.md | Phase 5c HTML rendering + QA |
assets/viewport-base.css | Phase 5c HTML, viewport scaling system |
Dependencies
- Bundled scripts (under
scripts/):extract/extract_docx.py/extract/extract_pdf.py/extract/extract_pptx.py,qa/combine_style_previews.py,qa/qa_serve.py. - Python:
python-docx,pdfplumber,pymupdf,defusedxml,pandas(for .xlsx/.csv extraction). - Optional: Playwright for HTML→PDF.
Note: HTML rendering is done by you (the AI) — no external script needed. Read the style and component references and generate the HTML directly.
.DS_Store
ppt-workspace/
*.html
!assets/preview/*.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Activist Poster — Three Pillars</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Alfa+Slab+One&family=Archivo+Narrow:wght@400;500;600;700&family=Caveat+Brush&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--blue: #2C2CDC;
--blue-deep: #1B1BB0;
--orange: #F2A03A;
--orange-deep: #E89321;
--red: #E83A2A;
--red-deep: #B7281C;
--cream: #F4E9D6;
--paper: #F5F2EA;
--ink: #0E0E14;
--font-display: 'Alfa Slab One', serif;
--font-body: 'Archivo Narrow', sans-serif;
--font-script: 'Caveat Brush', cursive;
--font-mono: 'DM Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--ink);
color: var(--ink);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
position: relative; overflow: hidden;
background: var(--paper);
}
.slide::before {
content: ""; position: absolute; inset: 0; pointer-events: none;
background-image:
radial-gradient(rgba(0,0,0,.06) 1px, transparent 1px),
radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px);
background-size: 3px 3px, 5px 5px;
background-position: 0 0, 1px 2px;
mix-blend-mode: multiply; opacity: .5;
}
.head {
padding: 36px 56px 16px;
display: flex; justify-content: space-between; align-items: flex-end;
border-bottom: 4px solid var(--ink);
}
.head h2 {
font-family: var(--font-display); font-size: 76px; line-height: .9;
color: var(--blue); text-shadow: 4px 4px 0 var(--red); text-transform: uppercase;
}
.head .lede {
max-width: 340px; padding-left: 30px;
font-family: var(--font-body); font-weight: 500;
font-size: 17px; line-height: 1.35; color: var(--ink);
border-left: 3px solid var(--ink);
}
.grid {
display: grid; grid-template-columns: repeat(3, 1fr);
position: absolute; left: 0; right: 0; top: 180px; bottom: 0;
}
.col {
padding: 32px 28px 28px;
border-right: 4px solid var(--ink);
display: flex; flex-direction: column;
}
.col:last-child { border-right: none; }
.col .num {
font-family: var(--font-display); font-size: 110px; line-height: .88;
color: var(--orange); text-shadow: 4px 4px 0 var(--red);
}
.col .tag {
font-family: var(--font-mono); font-size: 14px; letter-spacing: .18em;
color: var(--ink); margin-top: 8px; padding-top: 10px;
border-top: 2px solid var(--ink); align-self: flex-start;
}
.col h3 {
margin: 16px 0 12px; font-family: var(--font-display);
font-size: 34px; line-height: 1; color: var(--blue); text-transform: uppercase;
}
.col p {
font-family: var(--font-body); font-weight: 500;
font-size: 16px; line-height: 1.4; color: var(--ink); max-width: 280px;
}
.col.alt { background: var(--blue); }
.col.alt .tag { color: var(--cream); border-top-color: var(--cream); }
.col.alt h3 { color: var(--orange); text-shadow: 3px 3px 0 var(--red); }
.col.alt p { color: var(--cream); }
</style>
</head>
<body>
<div class="slide">
<div class="head">
<h2>Three<br>Priorities.</h2>
<div class="lede">The work falls into three buckets this quarter. Each has a clear owner and deliverable.</div>
</div>
<div class="grid">
<div class="col">
<div class="num">01</div>
<div class="tag">— FOCUS —</div>
<h3>Ship the core flow.</h3>
<p>Cut three legacy paths and double down on the one that drives 90% of activations.</p>
</div>
<div class="col alt">
<div class="num">02</div>
<div class="tag">— LEARN —</div>
<h3>Talk to ten teams.</h3>
<p>Standing weekly research with target customers. Findings briefed every Friday.</p>
</div>
<div class="col">
<div class="num">03</div>
<div class="tag">— SHIP —</div>
<h3>One launch, not five.</h3>
<p>Combine the four small drops into a single, well-told release with shared positioning.</p>
</div>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bento Apple — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0A0A0C;
--surface: #16161A;
--surface-2: #1F1F26;
--text-primary: #F5F5F7;
--text-muted: #98989F;
--accent: #2997FF;
--accent-2: #FF7A45;
--accent-3: #30D158;
--border: rgba(255,255,255,0.08);
--font-display: 'SF Pro Display', 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 64px 64px;
display: flex; flex-direction: column; gap: 28px;
}
.head { display: flex; justify-content: space-between; align-items: baseline; }
.eyebrow {
font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase;
color: var(--text-muted); font-weight: 600;
}
.title {
font-size: 44px;
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.02em;
max-width: 760px;
}
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 18px;
}
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 24px;
padding: 28px 30px;
display: flex; flex-direction: column;
overflow: hidden;
position: relative;
}
.c1 { grid-column: 1 / 4; grid-row: 1; } /* wide top-left */
.c2 { grid-column: 4 / 5; grid-row: 1; } /* small */
.c3 { grid-column: 5 / 7; grid-row: 1 / 3; background: var(--accent); color: #001E3F; } /* tall right */
.c4 { grid-column: 1 / 3; grid-row: 2; } /* wide bottom-left */
.c5 { grid-column: 3 / 5; grid-row: 2; } /* mid bottom */
.label {
font-size: 12px; letter-spacing: 0.14em;
text-transform: uppercase; font-weight: 600;
color: var(--text-muted);
}
.c3 .label { color: rgba(0,30,63,0.7); }
.stat {
font-size: 76px; font-weight: 700;
line-height: 1; letter-spacing: -0.03em;
margin-top: 10px;
}
.c1 .stat { color: var(--accent-3); }
.c2 .stat { font-size: 56px; color: var(--accent-2); }
.c3 .stat { font-size: 96px; }
.copy {
margin-top: auto;
font-size: 15px;
color: var(--text-muted);
line-height: 1.5;
font-weight: 500;
}
.c3 .copy { color: rgba(0,30,63,0.85); }
.icon {
width: 36px; height: 36px;
border-radius: 10px;
background: var(--accent-2);
display: grid; place-items: center;
color: #1A0A05;
font-size: 20px;
font-weight: 800;
margin-bottom: 14px;
}
.footer {
display: flex; justify-content: space-between;
font-size: 12px; color: var(--text-muted);
letter-spacing: 0.1em;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Field · Spring Release</span>
<span class="eyebrow">May 2026</span>
</div>
<div class="title">Three things got faster — and one of them changes how the team works.</div>
<div class="grid">
<div class="card c1">
<div class="label">Build times</div>
<div class="stat">2.4×</div>
<div class="copy">Median CI build, across the 200 most-active repos this quarter.</div>
</div>
<div class="card c2">
<div class="label">P95 cold start</div>
<div class="stat">182<span style="font-size:32px">ms</span></div>
<div class="copy">Down from 480ms.</div>
</div>
<div class="card c3">
<div class="label">Daily users</div>
<div class="stat">1.6M</div>
<div class="copy">Average over the last 30 days — the first month above the prior peak.</div>
</div>
<div class="card c4">
<div class="icon">↻</div>
<div class="label">Live reload</div>
<div class="stat" style="font-size:36px;color:var(--text-primary)">Now default</div>
<div class="copy">Every new project ships with hot-swap on by default.</div>
</div>
<div class="card c5">
<div class="label">Customer NPS</div>
<div class="stat" style="font-size:56px;color:var(--accent-3)">+58</div>
<div class="copy">Up 14 points from the Q4 baseline.</div>
</div>
</div>
<div class="footer">
<span>field.dev/spring</span>
<span>03 / 24</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Biennale Yellow — Data Slide</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--paper: #E9E5DB;
--paper-deep: #DCD6C4;
--sun: #F1EE2E;
--sun-soft: #F8F39B;
--ink: #1B2566;
--ember: #E26B4A;
--haze: #F0DA7C;
--line: #1B2566;
--font-display: 'Instrument Serif', 'Georgia', 'PingFang SC', serif;
--font-body: 'Archivo', 'Helvetica Neue', 'PingFang SC', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--paper);
color: var(--ink);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
position: relative;
background: var(--paper);
}
.glow {
position: absolute; inset: 0; pointer-events: none;
background: radial-gradient(ellipse 50% 40% at 92% 8%, rgba(241,238,46,0.55) 0%, rgba(241,238,46,0) 70%);
}
.frame {
position: absolute;
top: 56px; bottom: 80px; left: 64px; right: 64px;
display: grid;
grid-template-columns: 1fr 1.4fr;
grid-template-rows: auto 1fr;
gap: 36px;
z-index: 4;
}
.head {
grid-column: 1 / 3;
display: flex; align-items: flex-end; justify-content: space-between; gap: 32px;
border-bottom: 1px solid var(--ink);
padding-bottom: 18px;
}
.head .h {
font-family: var(--font-display);
font-size: 48px; line-height: 1; color: var(--ink);
}
.head .lab {
font-family: var(--font-body);
font-weight: 600; text-transform: uppercase;
letter-spacing: 0.2em; font-size: 12px; color: var(--ink);
}
.col-a {
display: flex; flex-direction: column;
justify-content: center; gap: 32px;
}
.stat { display: flex; flex-direction: column; gap: 4px; }
.stat .v {
font-family: var(--font-display);
font-size: 108px; line-height: 0.92; color: var(--ink);
letter-spacing: -0.01em;
}
.stat .v sup { font-size: 0.42em; vertical-align: super; opacity: 0.7; font-style: italic; }
.stat .lab2 {
font-family: var(--font-body);
font-weight: 500; text-transform: uppercase;
letter-spacing: 0.18em; font-size: 12px; color: var(--ink);
}
.stat .desc {
font-family: var(--font-body);
font-size: 15px; line-height: 1.45; color: var(--ink);
max-width: 32ch; margin-top: 4px;
}
.chart {
display: flex; flex-direction: column;
gap: 14px; justify-content: center;
}
.row {
display: grid;
grid-template-columns: 64px 1fr 80px;
align-items: center; gap: 18px;
}
.row .yr {
font-family: var(--font-mono);
font-size: 14px; color: var(--ink); letter-spacing: 0.04em;
}
.row .val {
font-family: var(--font-mono);
font-size: 14px; color: var(--ink); text-align: right; letter-spacing: 0.02em;
}
.bar {
height: 20px; background: var(--ink); position: relative;
}
.bar.lit {
background: var(--sun); border: 1px solid var(--ink);
}
.pagenum {
position: absolute; right: 64px; bottom: 36px;
font-family: var(--font-mono);
font-size: 12px; color: var(--ink);
letter-spacing: 0.08em; opacity: 0.75;
}
</style>
</head>
<body>
<div class="slide">
<div class="glow"></div>
<div class="frame">
<div class="head">
<div class="h">Public attendance</div>
<div class="lab">Open programme · 2022—2026</div>
</div>
<div class="col-a">
<div class="stat">
<div class="v">182<sup>k</sup></div>
<div class="lab2">Visitors · Year four</div>
<div class="desc">A 2.4x rise on the inaugural year, drawn from a programme that grew slower than the audience.</div>
</div>
<div class="stat">
<div class="v">74<sup>%</sup></div>
<div class="lab2">Returning audience</div>
<div class="desc">Three quarters of last year's visitors came back.</div>
</div>
</div>
<div class="chart">
<div class="row"><div class="yr">2022</div><div class="bar" style="width:32%"></div><div class="val">76,400</div></div>
<div class="row"><div class="yr">2023</div><div class="bar" style="width:48%"></div><div class="val">112,800</div></div>
<div class="row"><div class="yr">2024</div><div class="bar" style="width:62%"></div><div class="val">141,200</div></div>
<div class="row"><div class="yr">2025</div><div class="bar" style="width:72%"></div><div class="val">164,900</div></div>
<div class="row"><div class="yr">2026</div><div class="bar lit" style="width:86%"></div><div class="val">182,300</div></div>
</div>
</div>
<div class="pagenum">05 / 08</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>BlockFrame — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--pink: #FE90E8;
--blue: #C0F7FE;
--green: #99E885;
--yellow: #F7CB46;
--cream: #FFDC8B;
--black: #000000;
--white: #FFFFFF;
--offwhite: #FFFDF5;
--border: 4px solid var(--black);
--shadow: 8px 8px 0px var(--black);
--shadow-sm: 4px 4px 0px var(--black);
--font-display: 'Space Grotesk', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', system-ui, sans-serif;
--font-body: 'Inter', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--offwhite);
color: var(--black);
font-family: var(--font-body);
overflow: hidden;
}
.slide {
width: 1280px; height: 720px;
padding: 48px 60px;
display: flex; flex-direction: column; justify-content: center;
background: var(--green);
position: relative;
}
.slide-header { margin-bottom: 32px; position: relative; z-index: 2; }
.label {
display: inline-block;
border: 3px solid var(--black);
padding: 6px 16px;
font-family: var(--font-display);
font-size: 13px;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
background: var(--blue);
box-shadow: var(--shadow-sm);
}
.chart-frame {
border: var(--border);
background: var(--white);
box-shadow: var(--shadow);
padding: 28px 36px;
width: 100%;
max-width: 1100px;
display: flex;
flex-direction: column;
gap: 16px;
position: relative;
z-index: 2;
}
.chart-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.chart-title {
font-family: var(--font-body);
font-weight: 700;
font-size: 28px;
letter-spacing: -0.01em;
}
.chart-legend { display: flex; gap: 16px; }
.legend-item {
display: flex; align-items: center; gap: 6px;
font-family: var(--font-display);
font-size: 13px; font-weight: 600;
}
.legend-swatch {
width: 16px; height: 16px;
border: 2px solid var(--black);
}
.chart-body {
display: flex; gap: 28px; align-items: stretch;
}
.chart-svg {
flex: 1; display: block; width: 100%; height: 100%;
}
.data-column {
display: flex; flex-direction: column; gap: 12px;
flex: 0 0 200px;
}
.data-box {
flex: 1;
border: 3px solid var(--black);
background: var(--cream);
padding: 14px 18px;
text-align: center;
display: flex; flex-direction: column; justify-content: center;
}
.data-num {
font-family: var(--font-body);
font-weight: 900;
font-size: 32px;
display: block;
margin-bottom: 4px;
}
.data-label {
font-family: var(--font-display);
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
}
.deco-square {
position: absolute;
top: -14px; right: 24px;
width: 44px; height: 44px;
border: 3px solid var(--black);
background: var(--yellow);
transform: rotate(12deg);
z-index: 1;
}
</style>
</head>
<body>
<div class="slide">
<div class="deco-square"></div>
<div class="slide-header">
<div class="label">Performance Data</div>
</div>
<div class="chart-frame">
<div class="chart-header">
<div class="chart-title">Quarterly Growth Metrics</div>
<div class="chart-legend">
<div class="legend-item"><div class="legend-swatch" style="background:var(--pink)"></div>Revenue</div>
<div class="legend-item"><div class="legend-swatch" style="background:var(--blue)"></div>Users</div>
<div class="legend-item"><div class="legend-swatch" style="background:var(--green)"></div>Retention</div>
</div>
</div>
<div class="chart-body">
<svg class="chart-svg" viewBox="0 0 700 280">
<line x1="50" y1="20" x2="50" y2="230" stroke="#000" stroke-width="3"/>
<line x1="50" y1="230" x2="680" y2="230" stroke="#000" stroke-width="3"/>
<line x1="50" y1="75" x2="680" y2="75" stroke="#000" stroke-width="1" stroke-dasharray="4,4" opacity="0.25"/>
<line x1="50" y1="130" x2="680" y2="130" stroke="#000" stroke-width="1" stroke-dasharray="4,4" opacity="0.25"/>
<rect x="80" y="160" width="28" height="70" fill="#FE90E8" stroke="#000" stroke-width="2"/>
<rect x="210" y="120" width="28" height="110" fill="#FE90E8" stroke="#000" stroke-width="2"/>
<rect x="340" y="80" width="28" height="150" fill="#FE90E8" stroke="#000" stroke-width="2"/>
<rect x="470" y="50" width="28" height="180" fill="#FE90E8" stroke="#000" stroke-width="2"/>
<rect x="600" y="35" width="28" height="195" fill="#FE90E8" stroke="#000" stroke-width="2"/>
<rect x="114" y="180" width="28" height="50" fill="#C0F7FE" stroke="#000" stroke-width="2"/>
<rect x="244" y="150" width="28" height="80" fill="#C0F7FE" stroke="#000" stroke-width="2"/>
<rect x="374" y="110" width="28" height="120" fill="#C0F7FE" stroke="#000" stroke-width="2"/>
<rect x="504" y="80" width="28" height="150" fill="#C0F7FE" stroke="#000" stroke-width="2"/>
<rect x="634" y="60" width="28" height="170" fill="#C0F7FE" stroke="#000" stroke-width="2"/>
<text x="120" y="260" text-anchor="middle" font-family="Space Grotesk, monospace" font-size="16" font-weight="700">Q1</text>
<text x="250" y="260" text-anchor="middle" font-family="Space Grotesk, monospace" font-size="16" font-weight="700">Q2</text>
<text x="380" y="260" text-anchor="middle" font-family="Space Grotesk, monospace" font-size="16" font-weight="700">Q3</text>
<text x="510" y="260" text-anchor="middle" font-family="Space Grotesk, monospace" font-size="16" font-weight="700">Q4</text>
<text x="640" y="260" text-anchor="middle" font-family="Space Grotesk, monospace" font-size="16" font-weight="700">Q5</text>
</svg>
<div class="data-column">
<div class="data-box">
<span class="data-num">+142%</span>
<span class="data-label">Revenue Growth</span>
</div>
<div class="data-box">
<span class="data-num">2.4M</span>
<span class="data-label">Active Users</span>
</div>
<div class="data-box">
<span class="data-num">94%</span>
<span class="data-label">Retention Rate</span>
</div>
</div>
</div>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bold Signal — Preview</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0B0B0F;
--surface: #16161D;
--accent: #FF2E88;
--text-primary: #FFFFFF;
--text-muted: #9A9AA8;
--font-display: 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 64px 64px;
display: flex; flex-direction: column; gap: 32px;
}
.head { display: flex; justify-content: space-between; align-items: baseline; }
.eyebrow {
font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase;
color: var(--text-muted); font-weight: 600;
}
.title {
font-size: 48px; font-weight: 700; line-height: 1.1;
letter-spacing: -0.02em; max-width: 760px;
}
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.card {
background: var(--surface);
border-radius: 16px;
padding: 32px 28px;
display: flex; flex-direction: column;
}
.label {
font-size: 12px; letter-spacing: 0.14em;
text-transform: uppercase; font-weight: 600;
color: var(--text-muted);
}
.stat {
font-size: 56px; font-weight: 700;
line-height: 1; letter-spacing: -0.03em;
margin-top: 12px; color: var(--accent);
}
.copy {
margin-top: auto;
font-size: 15px; color: var(--text-muted);
line-height: 1.5;
}
.footer {
display: flex; justify-content: space-between;
font-size: 12px; color: var(--text-muted);
letter-spacing: 0.1em;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Bold Signal · Preview</span>
<span class="eyebrow">Style Preset</span>
</div>
<div class="title">This is a fallback preview for the Bold Signal style preset.</div>
<div class="grid">
<div class="card">
<div class="label">Metric One</div>
<div class="stat">2.4x</div>
<div class="copy">A sample metric showing the color scheme of this preset.</div>
</div>
<div class="card">
<div class="label">Metric Two</div>
<div class="stat">98%</div>
<div class="copy">Another data point rendered in the style's typeface.</div>
</div>
<div class="card">
<div class="label">Metric Three</div>
<div class="stat">+42</div>
<div class="copy">The accent color helps highlight important numbers.</div>
</div>
</div>
<div class="footer">
<span>bold_signal</span>
<span>Preview</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Claymorphic — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #f7eee6;
--surface: #fff8f1;
--fg: #2b211c;
--fg-2: #5a4b43;
--muted: #8a7a70;
--accent: #b46a46;
--accent-2: #6ea8a0;
--accent-3: #d4a05a;
--border: #dac8b9;
--font-display: 'Quicksand', 'Noto Sans SC', 'PingFang SC', system-ui, sans-serif;
--font-body: 'Nunito', 'Noto Sans SC', 'PingFang SC', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--fg);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 48px 60px 56px;
display: flex; flex-direction: column; gap: 28px;
}
.head { display: flex; justify-content: space-between; align-items: baseline; }
.eyebrow {
font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase;
color: var(--muted); font-weight: 700; font-family: var(--font-display);
}
.title {
font-size: 40px; font-weight: 700; line-height: 1.15;
color: var(--fg); max-width: 760px;
font-family: var(--font-display);
}
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 20px;
}
.clay {
background: var(--surface);
border-radius: 24px;
box-shadow:
8px 10px 24px rgba(128, 92, 70, 0.18),
-6px -6px 18px rgba(255, 255, 255, 0.70),
inset 2px 2px 6px rgba(255, 255, 255, 0.60),
inset -2px -2px 6px rgba(128, 92, 70, 0.08);
padding: 26px 28px;
display: flex; flex-direction: column;
overflow: hidden;
position: relative;
}
.c-wide { grid-column: 1 / 3; }
.label {
font-size: 11px; letter-spacing: 0.10em;
text-transform: uppercase; font-weight: 700;
color: var(--muted); font-family: var(--font-display);
}
.stat {
font-size: 60px; font-weight: 700;
line-height: 1; margin-top: 10px;
color: var(--accent);
font-family: var(--font-display);
}
.c-wide .stat { color: var(--accent-2); }
.stat-sm { font-size: 44px; }
.copy {
margin-top: auto;
font-size: 14px; color: var(--fg-2);
line-height: 1.5; font-weight: 400;
}
.icon-clay {
width: 44px; height: 44px;
border-radius: 14px;
background: var(--accent-3);
box-shadow:
inset 2px 2px 4px rgba(255, 255, 255, 0.50),
inset -1px -1px 3px rgba(128, 92, 70, 0.12);
display: grid; place-items: center;
color: #fff;
font-size: 20px; font-weight: 700;
margin-bottom: 12px;
font-family: var(--font-display);
}
.footer {
display: flex; justify-content: space-between;
font-size: 11px; color: var(--muted);
letter-spacing: 0.08em; font-family: var(--font-display);
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Wellness App · Year in Review</span>
<span class="eyebrow">December 2025</span>
</div>
<div class="title">A year of small habits that added up to something big.</div>
<div class="grid">
<div class="clay c-wide">
<div class="label">Active days</div>
<div class="stat">312</div>
<div class="copy">That's 86% of the year — up from 201 active days last year.</div>
</div>
<div class="clay">
<div class="label">Avg. session</div>
<div class="stat stat-sm">18<span style="font-size:22px">min</span></div>
<div class="copy">Most popular time: 7:00 AM.</div>
</div>
<div class="clay">
<div class="icon-clay">🌿</div>
<div class="label">Streak record</div>
<div class="stat stat-sm" style="color:var(--accent-3)">47 days</div>
<div class="copy">Set in October, still unbroken.</div>
</div>
<div class="clay">
<div class="label">Goals completed</div>
<div class="stat stat-sm" style="color:var(--accent-2)">89%</div>
<div class="copy">Of 36 goals set in January.</div>
</div>
<div class="clay">
<div class="label">Community</div>
<div class="stat stat-sm">1.2K</div>
<div class="copy">Friends made through group challenges.</div>
</div>
</div>
<div class="footer">
<span>wellness.app/review</span>
<span>08 / 14</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Cobalt Grid — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--paper: #F0EBDE;
--paper-2: #E6E0CE;
--ink: #1F2BE0;
--ink-soft: #5560E5;
--grid: rgba(31, 43, 224, 0.10);
--rule: #1F2BE0;
--font-display: 'Newsreader', Georgia, serif;
--font-body: 'Hanken Grotesk', sans-serif;
--font-mono: 'DM Mono', ui-monospace, monospace;
}
html, body { width: 100%; height: 100%; overflow: hidden; }
body { background: var(--paper); color: var(--ink); font-family: var(--font-body); }
.slide {
width: 1280px; height: 720px;
position: relative;
background: var(--paper);
display: flex; flex-direction: column;
}
/* Graph-paper grid */
.slide::before {
content: ''; position: absolute; inset: 0;
background-image:
linear-gradient(to right, var(--grid) 1px, transparent 1px),
linear-gradient(to bottom, var(--grid) 1px, transparent 1px);
background-size: 36px 36px;
pointer-events: none; z-index: 1;
}
/* Hairlines */
.slide::after {
content: ''; position: absolute; left: 72px; right: 72px; bottom: 28px;
height: 1.5px; background: var(--ink); z-index: 4; pointer-events: none;
}
.topline {
position: absolute; left: 72px; right: 72px; top: 44px;
height: 1.5px; background: var(--ink); z-index: 4;
}
.frame {
position: absolute;
top: 100px; left: 72px; right: 72px; bottom: 120px;
display: grid; grid-template-rows: auto 1fr;
gap: 24px; z-index: 5;
}
.topbar {
display: flex; align-items: flex-end; justify-content: space-between;
border-bottom: 1.5px solid var(--ink);
padding-bottom: 16px; gap: 30px;
}
.topbar .h {
font-family: var(--font-display); font-style: italic;
font-size: 56px; line-height: 0.95; color: var(--ink);
}
.topbar .tag {
font-family: var(--font-body); font-weight: 600;
text-transform: uppercase; letter-spacing: 0.18em;
font-size: 13px; color: var(--ink); text-align: right;
}
.body-row {
display: grid; grid-template-columns: 0.8fr 1.6fr;
gap: 48px;
}
.col-a {
display: flex; flex-direction: column; justify-content: center;
gap: 28px;
}
.vbig {
font-family: var(--font-display); font-style: italic;
font-size: 96px; line-height: 0.92; color: var(--ink);
letter-spacing: -0.015em;
}
.vbig-sm {
font-family: var(--font-display); font-style: italic;
font-size: 64px; line-height: 0.92; color: var(--ink);
}
.lab {
font-family: var(--font-body); font-weight: 600;
text-transform: uppercase; letter-spacing: 0.16em;
font-size: 14px; color: var(--ink); margin-top: 6px;
}
.desc {
font-family: var(--font-body); font-size: 15px;
line-height: 1.5; color: var(--ink); max-width: 30ch; margin-top: 6px;
}
.chart { display: flex; flex-direction: column; justify-content: end; gap: 12px; }
.bars {
display: grid; grid-template-columns: repeat(8, 1fr);
gap: 12px; align-items: end; height: 100%; min-height: 320px;
}
.stack { display: flex; flex-direction: column-reverse; gap: 3px; height: 100%; }
.cell { flex: 1 1 0; min-height: 6px; background: rgba(31,43,224,0.10); }
.cell.on { background: var(--ink); }
.ticks {
display: grid; grid-template-columns: repeat(8, 1fr);
gap: 12px; border-top: 1.5px solid var(--ink); padding-top: 10px;
}
.ticklab {
font-family: var(--font-mono); font-size: 13px;
color: var(--ink); letter-spacing: 0.04em; text-align: center;
}
.pagenum {
position: absolute; right: 72px; bottom: 48px;
font-family: var(--font-mono); font-size: 12px;
color: var(--ink); letter-spacing: 0.06em; z-index: 9;
}
</style>
</head>
<body>
<div class="slide">
<div class="topline"></div>
<div class="frame">
<div class="topbar">
<div class="h">Reader response, by quarter.</div>
<div class="tag">Newsletter opens · 2024 Q1 — 2026 Q1</div>
</div>
<div class="body-row">
<div class="col-a">
<div>
<div class="vbig">82%</div>
<div class="lab">Open rate · Q1 2026</div>
<div class="desc">A 2.1x lift on the inaugural issue, driven mostly by long-form chapters.</div>
</div>
<div>
<div class="vbig-sm">11k</div>
<div class="lab">Active subscribers</div>
<div class="desc">Quiet, mostly-not-on-social, paying readers.</div>
</div>
</div>
<div class="chart">
<div class="bars">
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div><div class="cell"></div></div>
<div class="stack"><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell on"></div><div class="cell"></div></div>
</div>
<div class="ticks">
<div class="ticklab">Q1 24</div>
<div class="ticklab">Q2 24</div>
<div class="ticklab">Q3 24</div>
<div class="ticklab">Q4 24</div>
<div class="ticklab">Q1 25</div>
<div class="ticklab">Q2 25</div>
<div class="ticklab">Q4 25</div>
<div class="ticklab">Q1 26</div>
</div>
</div>
</div>
</div>
<div class="pagenum">05 / 08</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Consulting (McKinsey-style) — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #FFFFFF;
--surface-2: #F4F6F8;
--text-primary: #0B2545;
--text-muted: #5A6D81;
--accent: #0E4F8A;
--accent-2: #4FA3A0;
--accent-3: #E2A23A;
--border: rgba(11,37,69,0.18);
--font-body: 'Inter', 'Helvetica Neue', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 36px 56px 32px;
display: flex; flex-direction: column;
border-top: 4px solid var(--accent);
}
.top {
display: flex; justify-content: space-between;
align-items: baseline;
padding-bottom: 8px;
border-bottom: 1px solid var(--border);
font-size: 11px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--text-muted);
font-weight: 600;
}
.title {
margin-top: 18px;
font-size: 24px;
font-weight: 700;
line-height: 1.3;
letter-spacing: -0.01em;
max-width: 1100px;
}
.takeaway {
margin-top: 12px;
border-left: 3px solid var(--accent-2);
background: var(--surface-2);
padding: 12px 16px;
font-size: 14px;
color: var(--text-primary);
font-weight: 500;
line-height: 1.5;
max-width: 1100px;
}
.body {
flex: 1;
margin-top: 24px;
display: grid;
grid-template-columns: 1.4fr 1fr;
gap: 36px;
}
/* Chart */
.chart { display: flex; flex-direction: column; gap: 8px; }
.chart-title { font-size: 12px; font-weight: 700; color: var(--text-primary); }
.chart-area {
height: 320px;
position: relative;
border-left: 1px solid var(--border);
border-bottom: 1px solid var(--border);
display: flex; align-items: flex-end; gap: 14px;
padding: 8px 4px 0;
}
.bar {
flex: 1;
display: flex; flex-direction: column;
align-items: center;
gap: 4px;
}
.bar .v {
width: 100%;
background: var(--accent);
position: relative;
}
.bar .v.h { background: var(--accent-3); }
.bar .v::after {
content: attr(data-v);
position: absolute; top: -18px; left: 0; right: 0;
text-align: center;
font-size: 11px;
font-weight: 700;
color: var(--text-primary);
}
.bar .l { font-size: 11px; color: var(--text-muted); margin-top: 6px; }
/* Table */
.table { display: flex; flex-direction: column; }
.table-title { font-size: 12px; font-weight: 700; margin-bottom: 8px; }
table { width: 100%; border-collapse: collapse; font-size: 12px; }
th, td { padding: 8px 10px; text-align: left; border-bottom: 1px solid var(--border); }
th { background: var(--surface-2); font-weight: 700; color: var(--text-primary); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; }
tr.h td { font-weight: 700; color: var(--accent-3); }
td.r { text-align: right; font-variant-numeric: tabular-nums; }
.source {
margin-top: 14px;
font-size: 10px;
font-style: italic;
color: var(--text-muted);
}
.footer {
display: flex; justify-content: space-between;
margin-top: 14px;
padding-top: 8px;
border-top: 1px solid var(--border);
font-size: 10px;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--text-muted);
font-weight: 600;
}
</style>
</head>
<body>
<div class="slide">
<div class="top">
<span>Project Argo · Diligence Read-out</span>
<span>Confidential — Draft</span>
</div>
<div class="title">SMB segment is now the company's only growing channel — and it's also where unit economics are weakest.</div>
<div class="takeaway"><strong>Implication:</strong> Investment thesis depends on whether SMB CAC payback can be brought below 14 months; current trajectory is 22 months.</div>
<div class="body">
<div class="chart">
<div class="chart-title">Net new ARR by segment ($M, FY23 — FY25)</div>
<div class="chart-area">
<div class="bar"><div class="v" data-v="48" style="height:60%"></div><div class="l">FY23 Ent</div></div>
<div class="bar"><div class="v" data-v="42" style="height:52%"></div><div class="l">FY24 Ent</div></div>
<div class="bar"><div class="v" data-v="29" style="height:36%"></div><div class="l">FY25 Ent</div></div>
<div class="bar"><div class="v h" data-v="18" style="height:22%"></div><div class="l">FY23 SMB</div></div>
<div class="bar"><div class="v h" data-v="34" style="height:42%"></div><div class="l">FY24 SMB</div></div>
<div class="bar"><div class="v h" data-v="61" style="height:76%"></div><div class="l">FY25 SMB</div></div>
</div>
<div class="source">Source: Company financials; segment definitions per management; figures in $M.</div>
</div>
<div class="table">
<div class="table-title">Unit economics by segment, FY25</div>
<table>
<thead><tr><th>Metric</th><th>Enterprise</th><th>SMB</th></tr></thead>
<tbody>
<tr><td>CAC ($)</td><td class="r">62,000</td><td class="r">3,400</td></tr>
<tr><td>ACV ($)</td><td class="r">94,000</td><td class="r">2,200</td></tr>
<tr><td>Gross margin</td><td class="r">82%</td><td class="r">71%</td></tr>
<tr class="h"><td>CAC payback (months)</td><td class="r">9.7</td><td class="r">22.0</td></tr>
<tr><td>Net retention (24m)</td><td class="r">118%</td><td class="r">94%</td></tr>
</tbody>
</table>
<div class="source">Source: Internal cohort analysis; n = 1,420 accounts; trailing 24 months.</div>
</div>
</div>
<div class="footer">
<span>Section 03 of 07 — Segment economics</span>
<span>11 / 28</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Creative Voltage — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0E1FAD;
--surface: #0930A8;
--text-primary: #FFFFFF;
--accent: #F2FF49;
--accent-2: #FF5C8A;
--font-display: 'Archivo', 'Bebas Neue', 'Helvetica Neue Condensed', sans-serif;
--font-body: 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
}
.slide {
width: 1280px; height: 720px;
position: relative;
padding: 72px 80px;
display: flex; flex-direction: column; justify-content: space-between;
}
.slab {
position: absolute;
top: 0; right: 0;
width: 360px; height: 100%;
background: var(--accent);
}
.slab::after {
content: ""; position: absolute;
left: -1px; top: 60%;
width: 80px; height: 80px;
background: var(--accent-2);
border-radius: 50%;
}
.eyebrow {
font-family: var(--font-display);
font-size: 22px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--accent);
font-weight: 700;
position: relative; z-index: 2;
}
.title {
font-family: var(--font-display);
font-size: 112px;
font-weight: 900;
line-height: 0.94;
letter-spacing: -0.03em;
text-transform: uppercase;
max-width: 780px;
position: relative; z-index: 2;
}
.title em { color: var(--accent); font-style: normal; }
.meta {
font-size: 14px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--text-primary);
display: flex; gap: 32px;
position: relative; z-index: 2;
}
.meta span::before {
content: "■"; color: var(--accent); margin-right: 8px;
}
</style>
</head>
<body>
<div class="slide">
<div class="slab"></div>
<div class="eyebrow">Spring Campaign · 2026</div>
<div class="title">Don't talk about<br/>the planet.<br/><em>Show the people<br/>who chose it.</em></div>
<div class="meta">
<span>Insight</span><span>Big Idea</span><span>Execution</span><span>Impact</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Daisy Days — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
@import url('https://fonts.googleapis.com/css2?family=Fredoka+One&family=Quicksand:wght@400;500;600;700&display=swap');
:root {
--cream: #F5F0E6;
--turquoise: #7ECDC0;
--soft-pink: #F7C8D4;
--butter: #FDE68A;
--mint: #A8E6CF;
--lavender: #D4A5E8;
--peach: #FFCBA4;
--sky: #A8D8F0;
--coral: #F8635F;
--text-dark: #2D2D2D;
--text-muted: #6B6B6B;
--border: #2D2D2D;
--border-width: 3px;
--radius: 20px;
--radius-lg: 28px;
--shadow: 6px 6px 0 var(--border);
--shadow-sm: 4px 4px 0 var(--border);
--font-display: 'Fredoka One', cursive;
--font-body: 'Quicksand', sans-serif;
}
html, body { width: 100%; height: 100%; overflow: hidden; }
body { background: var(--cream); color: var(--text-dark); font-family: var(--font-body); }
.slide {
width: 1280px; height: 720px;
padding: 40px 60px;
display: flex; flex-direction: column;
align-items: center; justify-content: center;
background: var(--cream);
position: relative;
}
.slide-title {
text-align: center;
margin-bottom: 32px;
position: relative;
z-index: 2;
}
.slide-title h2 {
font-family: var(--font-display);
font-size: 32px;
font-weight: 400;
letter-spacing: 0.02em;
color: var(--text-dark);
}
.cards-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
width: 100%;
max-width: 820px;
position: relative;
z-index: 2;
}
.info-card {
background: #fff;
border: var(--border-width) solid var(--border);
border-radius: var(--radius);
padding: 28px;
box-shadow: var(--shadow-sm);
display: flex;
flex-direction: column;
gap: 10px;
}
.card-icon {
width: 44px; height: 44px;
border-radius: 50%;
border: var(--border-width) solid var(--border);
display: flex; align-items: center; justify-content: center;
font-family: var(--font-display);
font-size: 1.2rem;
margin-bottom: 4px;
}
.card-icon.i1 { background: var(--soft-pink); }
.card-icon.i2 { background: var(--mint); }
.card-icon.i3 { background: var(--sky); }
.card-icon.i4 { background: var(--lavender); }
.info-card h4 {
font-family: var(--font-display);
font-size: 1.15rem;
font-weight: 400;
letter-spacing: 0.02em;
}
.info-card p {
font-size: 0.88rem;
color: var(--text-muted);
font-weight: 500;
line-height: 1.5;
}
/* Simple decorative star */
.deco-star {
position: absolute;
z-index: 1;
pointer-events: none;
}
.deco-star::before {
content: '*';
font-size: 80px;
color: var(--butter);
-webkit-text-stroke: 2px var(--border);
}
.star-1 { top: 8%; left: 5%; }
.star-2 { bottom: 12%; right: 6%; }
.star-1::before { font-size: 70px; color: var(--soft-pink); }
</style>
</head>
<body>
<div class="slide">
<div class="deco-star star-1"></div>
<div class="deco-star star-2"></div>
<div class="slide-title">
<h2>What Makes Us Special</h2>
</div>
<div class="cards-grid">
<div class="info-card">
<div class="card-icon i1">A</div>
<h4>Creative Play</h4>
<p>We believe the best ideas come from letting curiosity lead the way.</p>
</div>
<div class="info-card">
<div class="card-icon i2">B</div>
<h4>Kind Design</h4>
<p>Every detail is chosen to make people feel welcome and cared for.</p>
</div>
<div class="info-card">
<div class="card-icon i3">C</div>
<h4>Growing Together</h4>
<p>Learning is better when it is shared. We build community into everything.</p>
</div>
<div class="info-card">
<div class="card-icon i4">D</div>
<h4>Sunshine Vibes</h4>
<p>A positive outlook changes everything. We bring warmth to every project.</p>
</div>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Dark Botanical — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #14201B;
--surface: #1B2A23;
--text-primary: #F2EAD8;
--text-muted: #A39B85;
--accent: #C9A961;
--font-display: 'Cormorant Garamond', 'Playfair Display', Georgia, serif;
--font-body: 'Inter', 'Source Sans Pro', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 96px 110px;
display: flex; flex-direction: column; gap: 48px;
position: relative;
}
.rule {
width: 64px; height: 1px;
background: var(--accent);
margin-bottom: 8px;
}
.eyebrow {
font-size: 13px;
letter-spacing: 0.32em;
text-transform: uppercase;
color: var(--accent);
font-weight: 500;
}
.title {
font-family: var(--font-display);
font-size: 56px;
font-weight: 500;
line-height: 1.18;
color: var(--text-primary);
max-width: 940px;
}
.title em { color: var(--accent); font-style: italic; font-weight: 500; }
.body {
display: grid; grid-template-columns: 1fr 1fr; gap: 64px;
flex: 1; align-items: center;
}
.quote {
font-family: var(--font-display);
font-style: italic;
font-size: 26px;
line-height: 1.55;
color: var(--text-primary);
border-left: 1px solid var(--accent);
padding-left: 28px;
}
.quote-attr { font-size: 13px; color: var(--text-muted); margin-top: 14px; letter-spacing: 0.1em; }
.photo {
height: 360px;
background: linear-gradient(135deg, #2a3d33, #1b2a23);
border-radius: 4px;
border: 1px solid var(--border, rgba(201,169,97,0.2));
position: relative;
display: flex; align-items: flex-end; justify-content: flex-end;
padding: 16px;
}
.photo .caption { font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--text-muted); }
.leaf {
position: absolute; bottom: 40px; right: 40px;
width: 110px; height: 1px;
background: var(--accent);
opacity: 0.6;
}
.leaf::after {
content: ""; position: absolute; right: -1px; top: -3px;
width: 6px; height: 6px; border-radius: 50%; background: var(--accent);
}
</style>
</head>
<body>
<div class="slide">
<div>
<div class="rule"></div>
<div class="eyebrow">A tribute · for Marian</div>
</div>
<div class="title">She kept the porch light on for everyone — <em>especially the ones who were running late.</em></div>
<div class="body">
<div class="quote">
"If you were lost, hungry, or just driving through, you ended up at her kitchen table. She made it look like nothing."
<div class="quote-attr">— Tom, her brother</div>
</div>
<div class="photo"><span class="caption">Summer, 1998 · Lake Placid</span></div>
</div>
<div class="leaf"></div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Editorial Tri-Tone — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--pink: #F2B6C6;
--cream: #F2D86A;
--burgundy: #7A1F35;
--ink: #7A1F35;
--butter: #F2D86A;
--lime: #F2D86A;
--font-display: 'Bricolage Grotesque', system-ui, sans-serif;
--font-serif: 'Instrument Serif', Georgia, serif;
--font-mono: 'JetBrains Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--burgundy);
color: var(--cream);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 64px;
display: flex; flex-direction: column;
position: relative;
}
.head { display: flex; justify-content: space-between; align-items: flex-start; }
.kicker {
font-family: var(--font-mono);
font-size: 11px; letter-spacing: 0.18em;
text-transform: uppercase; font-weight: 500;
color: var(--butter);
}
.title {
font-size: 48px; font-weight: 700;
line-height: 1.05; letter-spacing: -0.02em;
color: var(--pink);
max-width: 640px; margin-top: 12px;
}
.grid {
flex: 1; display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px; margin-top: 28px;
}
.card {
border-radius: 28px; padding: 24px 24px 26px;
display: flex; flex-direction: column;
justify-content: space-between;
position: relative; overflow: hidden;
}
.card-dark { background: var(--burgundy); color: var(--butter); }
.card-light { background: var(--butter); color: var(--burgundy); }
.num {
font-family: var(--font-mono);
font-size: 11px; letter-spacing: 0.15em; opacity: 0.7;
}
.card h4 {
font-size: 24px; line-height: 1; font-weight: 600;
letter-spacing: -0.02em; margin: 0;
}
.card p { font-size: 13px; line-height: 1.4; margin: 0; opacity: 0.85; }
.footer {
display: flex; justify-content: space-between;
font-size: 10px; color: var(--butter);
font-family: var(--font-mono);
letter-spacing: 0.1em; opacity: 0.6;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<div>
<div class="kicker">Section 03 — Principles</div>
<div class="title">Four principles, loosely held.</div>
</div>
</div>
<div class="grid">
<div class="card card-dark">
<div class="num">/ 01</div>
<h4>Slow looking</h4>
<p>Restraint as a posture. Two sentences is plenty.</p>
</div>
<div class="card card-light">
<div class="num">/ 02</div>
<h4>Open kitchen</h4>
<p>Process in public. Show the seams.</p>
</div>
<div class="card card-dark">
<div class="num">/ 03</div>
<h4>Borrowed light</h4>
<p>Cite generously. Name the room you walked into.</p>
</div>
<div class="card card-light">
<div class="num">/ 04</div>
<h4>Fewer, finer</h4>
<p>Three considered objects beat thirty hurried ones.</p>
</div>
</div>
<div class="footer">
<span>editorial.co/spring</span>
<span>03 / 08</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Electric Studio — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0A0E27;
--surface: #141A36;
--text-primary: #FFFFFF;
--text-muted: #8892B0;
--accent: #64FFDA;
--font-display: 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-display);
-webkit-font-smoothing: antialiased;
overflow: hidden;
}
.slide {
width: 1280px; height: 720px;
padding: 72px 80px;
display: flex; flex-direction: column; gap: 48px;
}
.eyebrow {
font-size: 14px;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--accent);
font-weight: 600;
}
.title {
font-size: 46px;
font-weight: 700;
line-height: 1.15;
max-width: 1080px;
letter-spacing: -0.01em;
}
.body {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 56px;
flex: 1;
align-items: center;
}
.points { display: flex; flex-direction: column; gap: 22px; }
.point { display: flex; flex-direction: column; gap: 4px; }
.point .head { font-size: 22px; font-weight: 600; color: var(--text-primary); }
.point .sub { font-size: 17px; color: var(--text-muted); line-height: 1.55; }
.chart {
background: var(--surface);
border: 1px solid rgba(100,255,218,0.12);
border-radius: 12px;
padding: 28px;
height: 360px;
display: flex; flex-direction: column; gap: 16px;
}
.chart .label { font-size: 13px; color: var(--text-muted); letter-spacing: 0.1em; text-transform: uppercase; }
.bars { display: flex; align-items: flex-end; gap: 14px; flex: 1; }
.bar { flex: 1; background: rgba(255,255,255,0.08); border-radius: 4px 4px 0 0; }
.bar.hero { background: var(--accent); }
.axis { display: flex; gap: 14px; font-size: 12px; color: var(--text-muted); }
.axis span { flex: 1; text-align: center; }
.footer {
display: flex; justify-content: space-between;
color: var(--text-muted); font-size: 13px;
}
</style>
</head>
<body>
<div class="slide">
<div class="eyebrow">Performance · Q3 benchmark</div>
<div class="title">P95 latency dropped from 412ms to 138ms after the indexing rewrite.</div>
<div class="body">
<div class="points">
<div class="point"><span class="head">66% reduction</span><span class="sub">measured across all production reads, week 36-40.</span></div>
<div class="point"><span class="head">No change to write path</span><span class="sub">throughput unchanged at 12.4k QPS sustained.</span></div>
<div class="point"><span class="head">Cost neutral</span><span class="sub">memory delta < 4% per node; no instance upsizing.</span></div>
</div>
<div class="chart">
<div class="label">P95 read latency, ms</div>
<div class="bars">
<div class="bar" style="height: 78%"></div>
<div class="bar" style="height: 82%"></div>
<div class="bar" style="height: 75%"></div>
<div class="bar" style="height: 70%"></div>
<div class="bar hero" style="height: 28%"></div>
</div>
<div class="axis"><span>W36</span><span>W37</span><span>W38</span><span>W39</span><span>W40</span></div>
</div>
</div>
<div class="footer"><span>Platform Eng</span><span>06 / 14</span></div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Framer Studio — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #000000;
--surface: #090909;
--fg: #FFFFFF;
--fg-2: #A6A6A6;
--muted: rgba(255,255,255,0.6);
--border: rgba(0,153,255,0.15);
--accent: #0099FF;
--frost: rgba(255,255,255,0.1);
--font-display: 'Inter', -apple-system, 'Segoe UI', Arial, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--fg);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 48px 64px;
display: flex; flex-direction: column; gap: 36px;
background: radial-gradient(ellipse at 50% 30%, rgba(0,153,255,0.06) 0%, transparent 60%);
}
.head { display: flex; justify-content: space-between; align-items: baseline; }
.eyebrow {
font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
color: var(--accent); font-weight: 500;
}
.title {
font-size: 64px;
font-weight: 700;
line-height: 0.95;
letter-spacing: -0.04em;
max-width: 900px;
color: var(--fg);
}
.grid {
flex: 1;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 14px;
}
.card {
background: var(--surface);
border-radius: 12px;
padding: 24px;
display: flex; flex-direction: column;
overflow: hidden;
position: relative;
box-shadow: rgba(0,153,255,0.15) 0px 0px 0px 1px;
}
.card:hover { box-shadow: rgba(0,153,255,0.25) 0px 0px 0px 1px, rgba(0,0,0,0.25) 0px 10px 30px; }
.c1 { grid-column: 1 / 3; grid-row: 1; }
.c2 { grid-column: 3; grid-row: 1; }
.c3 { grid-column: 1; grid-row: 2; }
.c4 { grid-column: 2 / 4; grid-row: 2; }
.label {
font-size: 10px; letter-spacing: 0.14em;
text-transform: uppercase; font-weight: 600;
color: var(--muted);
}
.stat {
font-size: 56px; font-weight: 700;
line-height: 1; letter-spacing: -0.03em;
margin-top: 12px;
color: var(--fg);
}
.c2 .stat { color: var(--accent); font-size: 48px; }
.copy {
margin-top: auto;
font-size: 14px;
color: var(--fg-2);
line-height: 1.3;
font-weight: 400;
}
.pill-primary {
display: inline-flex;
background: var(--fg);
color: #000000;
border-radius: 100px;
padding: 10px 20px;
font-size: 14px;
font-weight: 600;
margin-top: 16px;
width: fit-content;
}
.pill-frost {
display: inline-flex;
background: var(--frost);
color: var(--fg);
border-radius: 40px;
padding: 8px 16px;
font-size: 13px;
font-weight: 400;
margin-top: 8px;
width: fit-content;
}
.footer {
display: flex; justify-content: space-between;
font-size: 11px; color: rgba(255,255,255,0.4);
letter-spacing: 0.08em;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Design Tools</span>
<span class="eyebrow">Framer 2026</span>
</div>
<div class="title">Design your site.<br>Ship it. No code required.</div>
<div class="grid">
<div class="card c1">
<div class="label">Sites published</div>
<div class="stat">2.1M</div>
<div class="copy">Websites launched this year using the visual builder.</div>
<div class="pill-primary">Start building</div>
</div>
<div class="card c2">
<div class="label">Load speed</div>
<div class="stat">98</div>
<div class="copy">Lighthouse performance score average.</div>
</div>
<div class="card c3">
<div class="label">Components</div>
<div class="stat" style="font-size:36px;color:var(--fg)">500+</div>
<div class="pill-frost">Browse all</div>
</div>
<div class="card c4">
<div class="label">Conversion lift</div>
<div class="stat">+42%</div>
<div class="copy">Average conversion improvement when switching to Framer-optimized layouts.</div>
</div>
</div>
<div class="footer">
<span>framer.com</span>
<span>05 / 16</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Glassmorphic — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #eef6ff;
--surface: rgba(255, 255, 255, 0.55);
--surface-strong: rgba(255, 255, 255, 0.74);
--fg: #102033;
--fg-2: #34465f;
--muted: #60708a;
--accent: #4f8cff;
--accent-2: #a78bfa;
--accent-3: #22c55e;
--border: rgba(255, 255, 255, 0.50);
--font-display: 'Inter', 'Noto Sans SC', 'PingFang SC', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 40%, #4f8cff 100%);
color: var(--fg);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 48px 60px 56px;
display: flex; flex-direction: column; gap: 24px;
}
.head { display: flex; justify-content: space-between; align-items: baseline; }
.eyebrow {
font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase;
color: rgba(255,255,255,0.75); font-weight: 600;
}
.title {
font-size: 42px; font-weight: 700; line-height: 1.12;
letter-spacing: -0.025em; color: #ffffff;
max-width: 780px;
text-shadow: 0 2px 12px rgba(0,0,0,0.15);
}
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 18px;
}
.glass {
background: var(--surface);
backdrop-filter: blur(24px) saturate(180%);
-webkit-backdrop-filter: blur(24px) saturate(180%);
border: 1px solid var(--border);
border-radius: 20px;
box-shadow: 0 8px 32px rgba(79, 140, 255, 0.12);
padding: 24px 26px;
display: flex; flex-direction: column;
overflow: hidden;
position: relative;
}
.c-wide { grid-column: 1 / 3; }
.label {
font-size: 11px; letter-spacing: 0.12em;
text-transform: uppercase; font-weight: 600;
color: var(--muted);
}
.stat {
font-size: 64px; font-weight: 700;
line-height: 1; letter-spacing: -0.03em;
margin-top: 8px; color: var(--accent);
}
.c-wide .stat { color: var(--accent-3); }
.stat-sm { font-size: 48px; }
.copy {
margin-top: auto;
font-size: 14px; color: var(--fg-2);
line-height: 1.5; font-weight: 400;
}
.icon-glass {
width: 40px; height: 40px;
border-radius: 12px;
background: rgba(79, 140, 255, 0.18);
backdrop-filter: blur(8px);
display: grid; place-items: center;
color: var(--accent);
font-size: 20px; font-weight: 700;
margin-bottom: 12px;
}
.footer {
display: flex; justify-content: space-between;
font-size: 11px; color: rgba(255,255,255,0.55);
letter-spacing: 0.08em;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Cloud Platform · Q1 Review</span>
<span class="eyebrow">January 2026</span>
</div>
<div class="title">Infrastructure that scales itself — and the numbers show it.</div>
<div class="grid">
<div class="glass c-wide">
<div class="label">Uptime</div>
<div class="stat">99.97%</div>
<div class="copy">Across 12 regions, measured over 90 days.</div>
</div>
<div class="glass">
<div class="label">P99 latency</div>
<div class="stat stat-sm">48<span style="font-size:24px">ms</span></div>
<div class="copy">Down from 210ms last quarter.</div>
</div>
<div class="glass">
<div class="icon-glass">⚡</div>
<div class="label">Auto-scale events</div>
<div class="stat stat-sm" style="color:var(--accent-2)">2,847</div>
<div class="copy">Zero manual interventions.</div>
</div>
<div class="glass">
<div class="label">Cost savings</div>
<div class="stat stat-sm" style="color:var(--accent-3)">-34%</div>
<div class="copy">Spot instance adoption drove the drop.</div>
</div>
<div class="glass">
<div class="label">Deploy frequency</div>
<div class="stat stat-sm">186<span style="font-size:24px">/wk</span></div>
<div class="copy">Up 3.2x from the same period last year.</div>
</div>
</div>
<div class="footer">
<span>platform.internal/q1</span>
<span>05 / 12</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Mid Century — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--c-bg: #232e26;
--c-bg-light: #ede6d0;
--c-fg: #f0e8d2;
--c-fg-2: rgba(240,232,210,0.58);
--c-accent: #c07030;
--c-border: rgba(240,232,210,0.12);
--f-display: 'Bricolage Grotesque', system-ui, sans-serif;
--f-body: 'DM Sans', system-ui, sans-serif;
--f-mono: 'DM Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--c-bg);
color: var(--c-fg);
font-family: var(--f-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 64px 64px;
display: flex; flex-direction: column;
position: relative; overflow: hidden;
}
.slide::before {
content: ''; position: absolute; bottom: -10%; right: -5%;
width: 55%; height: 70%; pointer-events: none; z-index: 0;
background: radial-gradient(ellipse at 70% 80%, rgba(122,78,36,0.28) 0%, rgba(80,50,20,0.14) 40%, transparent 70%);
}
.slide > * { position: relative; z-index: 1; }
.chrome {
display: flex; justify-content: space-between; align-items: center;
padding-bottom: 8px; border-bottom: 1px solid var(--c-border);
margin-bottom: 20px;
}
.chrome span {
font-family: var(--f-mono); font-size: 10px;
letter-spacing: 0.12em; text-transform: uppercase;
color: var(--c-fg-2);
}
.headline {
font-family: var(--f-display); font-weight: 700;
font-size: 36px; line-height: 1; letter-spacing: -0.02em;
color: var(--c-fg); max-width: 640px; margin-bottom: 32px;
}
.stats {
flex: 1; display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0; align-items: stretch;
}
.stat {
display: flex; flex-direction: column; gap: 8px;
padding: 16px 48px 16px 0;
border-right: 1px solid var(--c-border);
}
.stat:nth-child(2) { padding: 16px 48px; }
.stat:last-child { border-right: none; padding-right: 0; padding-left: 48px; }
.stat-val {
font-family: var(--f-display); font-weight: 800;
font-size: 64px; line-height: 1; letter-spacing: -0.025em;
color: var(--c-fg);
}
.stat-val em { font-style: normal; color: var(--c-accent); }
.stat-label {
font-family: var(--f-body); font-size: 14px;
color: var(--c-fg-2); line-height: 1.5;
}
.foot {
display: flex; justify-content: space-between;
padding-top: 8px; border-top: 1px solid var(--c-border);
margin-top: 20px;
}
.foot span {
font-family: var(--f-mono); font-size: 10px;
letter-spacing: 0.12em; text-transform: uppercase;
color: var(--c-fg-2);
}
</style>
</head>
<body>
<div class="slide">
<div class="chrome">
<span>By the Numbers</span>
<span>04</span>
</div>
<div class="headline">The numbers that define the category.</div>
<div class="stats">
<div class="stat">
<div class="stat-val">4.7<em>k</em></div>
<div class="stat-label">Units sold in the first 90 days, across 12 countries.</div>
</div>
<div class="stat">
<div class="stat-val">3.2<em>x</em></div>
<div class="stat-label">Longer lifespan than the leading competitor in tests.</div>
</div>
<div class="stat">
<div class="stat-val">#<em>1</em></div>
<div class="stat-label">Top-rated in the category for two consecutive years.</div>
</div>
</div>
<div class="foot">
<span>Studio · Product Brief</span>
<span>Design Studio</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Neo Grid Bold — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #ECECE8;
--ink: #0A0A0A;
--paper: #F5F4EF;
--accent: #E6FF3D;
--muted: #8A8A85;
--font-display: 'Space Grotesk', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--ink);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
position: relative; overflow: hidden;
background: var(--bg);
}
.frame {
position: absolute; inset: 32px;
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: repeat(8, 1fr);
gap: 10px;
}
.card { background: var(--paper); position: relative; overflow: hidden; }
.card.ink { background: var(--ink); color: var(--paper); }
.card.lemon { background: var(--accent); color: var(--ink); }
.head {
grid-column: 1 / span 12; grid-row: 1 / span 2;
padding: 20px 24px; display: flex; align-items: center;
justify-content: space-between; background: var(--paper);
}
.head h2 { font-size: 56px; font-weight: 700; text-transform: uppercase; letter-spacing: -0.015em; }
.head .label {
font-family: var(--font-mono); font-size: 14px;
letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.7;
}
.feat {
grid-column: span 4; grid-row: span 6;
background: var(--paper); padding: 20px;
display: flex; flex-direction: column; gap: 14px;
}
.feat .pic {
aspect-ratio: 16/10; background: #111; position: relative;
display: flex; align-items: center; justify-content: center;
font-family: var(--font-mono); font-size: 11px;
letter-spacing: 0.08em; color: rgba(255,255,255,0.4);
}
.feat .pic .tag {
position: absolute; left: 6px; top: 6px;
background: var(--accent); color: var(--ink);
font-family: var(--font-mono); font-size: 16px;
padding: 3px 8px; letter-spacing: 0.08em;
}
.feat h3 { font-size: 22px; font-weight: 700; text-transform: uppercase; letter-spacing: -0.005em; }
.feat p { font-size: 16px; line-height: 1.4; }
.pagenum {
position: absolute; left: 0; bottom: 0;
background: var(--paper); color: var(--ink);
font-family: var(--font-mono); font-size: 16px;
padding: 10px 18px; letter-spacing: 0.04em;
}
</style>
</head>
<body>
<div class="slide">
<div class="frame">
<div class="head">
<h2>Key features</h2>
<div class="label">Three primitives</div>
</div>
<div class="feat">
<div class="pic"><div class="tag">01</div>IMAGE</div>
<h3>Seamless transactions</h3>
<p>Effortless and secure digital payments with real-time processing.</p>
</div>
<div class="feat lemon">
<div class="pic"><div class="tag">02</div>IMAGE</div>
<h3>Data insights</h3>
<p>Leverage advanced analytics to uncover patterns and unlock opportunities.</p>
</div>
<div class="feat">
<div class="pic"><div class="tag">03</div>IMAGE</div>
<h3>Risk modelling</h3>
<p>Predictive models score risk in milliseconds so teams can act fast.</p>
</div>
</div>
<div class="pagenum">04 / 12</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Neon Cyber — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #07071A;
--surface: #0F0F2D;
--text-primary: #E8E8FF;
--text-muted: #8A8AB0;
--accent: #00F0FF;
--accent-2: #FF2EE6;
--accent-3: #B14EFF;
--font-display: 'Space Grotesk', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 64px 80px;
position: relative;
display: flex; flex-direction: column; gap: 36px;
background:
radial-gradient(ellipse at top right, rgba(177,78,255,0.18), transparent 55%),
radial-gradient(ellipse at bottom left, rgba(0,240,255,0.10), transparent 55%),
var(--bg);
}
.scanline {
position: absolute; inset: 0;
background: repeating-linear-gradient(0deg, rgba(255,255,255,0.02) 0 1px, transparent 1px 3px);
pointer-events: none;
}
.header {
display: flex; justify-content: space-between;
font-family: var(--font-mono);
font-size: 12px;
letter-spacing: 0.18em;
color: var(--accent);
}
.title {
font-size: 72px;
font-weight: 700;
line-height: 1.05;
letter-spacing: -0.02em;
max-width: 1080px;
z-index: 1;
}
.title em {
background: linear-gradient(90deg, var(--accent), var(--accent-2));
-webkit-background-clip: text; background-clip: text;
-webkit-text-fill-color: transparent;
font-style: normal;
}
.body {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
z-index: 1;
}
.card {
background: var(--surface);
border: 1px solid var(--accent);
border-radius: 14px;
padding: 24px;
box-shadow: 0 0 24px rgba(0,240,255,0.18), inset 0 0 16px rgba(0,240,255,0.08);
display: flex; flex-direction: column; gap: 10px;
}
.card.c2 { border-color: var(--accent-2); box-shadow: 0 0 24px rgba(255,46,230,0.18), inset 0 0 16px rgba(255,46,230,0.08); }
.card.c3 { border-color: var(--accent-3); box-shadow: 0 0 24px rgba(177,78,255,0.18), inset 0 0 16px rgba(177,78,255,0.08); }
.card .label { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; color: var(--text-muted); }
.card .n { font-size: 56px; font-weight: 700; line-height: 1; color: var(--accent); }
.card.c2 .n { color: var(--accent-2); }
.card.c3 .n { color: var(--accent-3); }
.card .s { font-size: 14px; color: var(--text-muted); line-height: 1.55; }
.footer {
position: absolute; bottom: 32px; left: 80px; right: 80px;
display: flex; justify-content: space-between;
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.18em;
color: var(--text-muted);
}
</style>
</head>
<body>
<div class="slide">
<div class="scanline"></div>
<div class="header">
<span>// SYSTEM_BRIEF · 2026.05.20</span>
<span>NORTHGRID PROTOCOL</span>
</div>
<div class="title">A network you don't have to trust — <em>because no one party can break it.</em></div>
<div class="body">
<div class="card">
<div class="label">Validators online</div>
<div class="n">12,408</div>
<div class="s">Distributed across 47 jurisdictions; no single AS controls more than 4.2%.</div>
</div>
<div class="card c2">
<div class="label">Time to finality</div>
<div class="n">1.8s</div>
<div class="s">Median across the last 30 days, including network-load events.</div>
</div>
<div class="card c3">
<div class="label">Annualized cost</div>
<div class="n">$0.04</div>
<div class="s">Per transaction at current load — 200× cheaper than the legacy chain.</div>
</div>
</div>
<div class="footer">
<span>NORTHGRID v3.0</span>
<span>05 / 14</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Nike Athletic — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #ffffff;
--surface: #f5f5f5;
--surface-2: #e5e5e5;
--text-primary: #111111;
--text-muted: #707072;
--accent: #111111;
--accent-2: #ff5000;
--border: #cacacb;
--font-display: 'Oswald', 'Impact', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', system-ui, sans-serif;
--font-body: 'Inter', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 48px 64px;
display: flex; flex-direction: column;
}
.head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 32px; }
.eyebrow {
font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase;
color: var(--text-muted); font-weight: 500;
}
.hero-title {
font-family: var(--font-display);
font-size: 72px;
font-weight: 500;
line-height: 0.90;
letter-spacing: -0.02em;
text-transform: uppercase;
color: var(--text-primary);
max-width: 820px;
margin-bottom: 24px;
}
.hero-title .accent { color: var(--accent-2); }
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-top: auto;
}
.card {
background: var(--surface);
border-radius: 20px;
padding: 28px 24px;
display: flex; flex-direction: column;
justify-content: space-between;
}
.card-label {
font-size: 11px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-muted);
font-weight: 500;
margin-bottom: 12px;
}
.card-stat {
font-family: var(--font-display);
font-size: 56px;
font-weight: 500;
line-height: 1;
letter-spacing: -0.02em;
color: var(--text-primary);
text-transform: uppercase;
}
.card-stat .unit {
font-size: 24px;
color: var(--text-muted);
font-family: var(--font-body);
text-transform: none;
}
.card-stat.highlight { color: var(--accent-2); }
.card-desc {
margin-top: 14px;
font-size: 14px;
line-height: 1.5;
color: var(--text-muted);
font-weight: 400;
}
.footer {
display: flex; justify-content: space-between;
font-size: 11px; color: var(--text-muted);
letter-spacing: 0.08em;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="eyebrow">Performance · Season Review</span>
<span class="eyebrow">FY2026</span>
</div>
<div class="hero-title">Results that <span class="accent">move fast.</span></div>
<div class="grid">
<div class="card">
<div class="card-label">Revenue</div>
<div class="card-stat">$51<span class="unit">B</span></div>
<div class="card-desc">Full-year revenue, up 12% from prior year.</div>
</div>
<div class="card">
<div class="card-label">Digital Growth</div>
<div class="card-stat highlight">26<span class="unit">%</span></div>
<div class="card-desc">NIKE Direct digital commerce revenue increase.</div>
</div>
<div class="card">
<div class="card-label">Members</div>
<div class="card-stat">300<span class="unit">M+</span></div>
<div class="card-desc">Active NIKE Members across all regions.</div>
</div>
</div>
<div class="footer">
<span>nike.com/investors</span>
<span>01 / 06</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Noir Luxe — Stats</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--ink: #060507;
--paper: #F5EDF1;
--pink: #ED3D8C;
--pink-2: #FF66A8;
--pink-deep: #B81D67;
--line: rgba(237,61,140,.32);
--mute: rgba(245,237,241,.55);
--hair: rgba(245,237,241,.14);
--font-display: 'Instrument Serif', serif;
--font-body: 'Inter', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: #000;
font-family: var(--font-body);
color: var(--paper);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
position: relative; overflow: hidden;
background:
radial-gradient(ellipse 90% 70% at 30% 30%, #1A1218 0%, #0A0709 55%, #050306 100%);
}
.slide::after {
content: ""; position: absolute; inset: 24px; pointer-events: none;
border: 1px solid var(--hair);
}
.runner {
position: absolute; left: 40px; right: 40px; top: 40px;
display: flex; align-items: baseline; justify-content: space-between;
font-family: var(--font-mono); font-size: 14px; letter-spacing: .14em;
text-transform: uppercase; color: var(--mute); z-index: 5;
}
.runner .brand { color: var(--pink); }
.body {
position: absolute; inset: 90px 40px 90px 40px;
display: grid; grid-template-columns: 1fr 1.05fr; gap: 40px;
}
.left { display: flex; flex-direction: column; justify-content: space-between; padding-right: 14px; }
.left .kicker { font-family: var(--font-mono); font-size: 14px; letter-spacing: .18em; text-transform: uppercase; color: var(--pink); }
.left h2 { font-family: var(--font-display); font-style: italic; font-size: 84px; line-height: 1.06; color: var(--paper); padding-bottom: .1em; }
.left h2 em { color: var(--pink); font-style: italic; }
.left p { font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: var(--paper); opacity: .75; max-width: 36ch; font-weight: 300; }
.right { display: flex; flex-direction: column; gap: 14px; }
.stat { display: grid; grid-template-columns: 160px 1fr; align-items: center; gap: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--hair); }
.stat:last-child { border-bottom: 0; padding-bottom: 0; }
.stat .figure { font-family: var(--font-display); font-style: italic; font-size: 76px; line-height: .9; color: var(--pink); display: flex; align-items: baseline; }
.stat .figure sup { font-size: 24px; color: var(--paper); vertical-align: top; margin-left: 2px; line-height: 1; align-self: flex-start; padding-top: 12px; }
.stat .meta .lab { font-family: var(--font-mono); font-size: 14px; letter-spacing: .14em; text-transform: uppercase; color: var(--paper); }
.stat .meta .desc { font-family: var(--font-body); font-size: 15px; color: var(--mute); margin-top: 6px; line-height: 1.45; font-weight: 300; }
.footer {
position: absolute; left: 40px; right: 40px; bottom: 40px;
display: flex; align-items: baseline; justify-content: space-between;
font-family: var(--font-mono); font-size: 14px; letter-spacing: .14em;
text-transform: uppercase; color: var(--mute); z-index: 5;
}
.footer .pageno em { color: var(--pink); font-style: normal; }
</style>
</head>
<body>
<div class="slide">
<div class="runner">
<span class="brand">Chapter 01</span>
<span>By the Numbers</span>
</div>
<div class="body">
<div class="left">
<div class="kicker">By the Numbers</div>
<div>
<h2>A season told in <em>five</em> figures.</h2>
</div>
<p>Read top to bottom. Every figure was reported by directors during the eight-week preview window.</p>
</div>
<div class="right">
<div class="stat">
<div class="figure">42<sup>%</sup></div>
<div class="meta">
<div class="lab">Repeat Clients</div>
<div class="desc">Patrons who returned within ninety days for a second commission.</div>
</div>
</div>
<div class="stat">
<div class="figure">3.8<sup>x</sup></div>
<div class="meta">
<div class="lab">Throughput</div>
<div class="desc">Pieces released per machinist per week, vs. prior season.</div>
</div>
</div>
<div class="stat">
<div class="figure">86<sup>%</sup></div>
<div class="meta">
<div class="lab">Reservation Rate</div>
<div class="desc">Show seats filled before the public window opened.</div>
</div>
</div>
</div>
</div>
<div class="footer">
<span>Source · Q1 Ledger</span>
<span class="pageno"><em>03</em> / 09</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Notebook Tabs — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #FAF7F0;
--surface: #FFFFFF;
--text-primary: #1F1B16;
--text-muted: #6B6256;
--accent: #C8553D;
--accent-2: #2D6A4F;
--accent-3: #E0A458;
--border: rgba(31,27,22,0.12);
--font-display: 'Source Serif Pro', Georgia, serif;
--font-body: 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 80px 64px;
display: flex; flex-direction: column; gap: 32px;
position: relative;
}
.tabs {
display: flex; gap: 4px;
border-bottom: 1px solid var(--border);
padding-bottom: 0;
}
.tab {
padding: 8px 18px;
font-size: 13px;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--text-muted);
border-radius: 6px 6px 0 0;
background: transparent;
border: 1px solid transparent;
border-bottom: none;
}
.tab.active {
background: var(--surface);
color: var(--text-primary);
border-color: var(--border);
border-bottom-color: var(--surface);
margin-bottom: -1px;
}
.tab .dot { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:8px; vertical-align: middle; }
.tab.t1 .dot { background: var(--accent); }
.tab.t2 .dot { background: var(--accent-2); }
.tab.t3 .dot { background: var(--accent-3); }
.title {
font-family: var(--font-display);
font-size: 42px;
font-weight: 600;
line-height: 1.2;
max-width: 980px;
}
.body { display: grid; grid-template-columns: 2fr 1fr; gap: 48px; flex: 1; }
.points { display: flex; flex-direction: column; gap: 22px; }
.point { padding-left: 18px; border-left: 2px solid var(--accent); }
.point .head { font-size: 18px; font-weight: 600; }
.point .sub { font-size: 16px; color: var(--text-muted); line-height: 1.55; margin-top: 2px; }
.margin {
padding: 20px;
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
font-style: italic;
font-size: 14px;
color: var(--text-muted);
line-height: 1.6;
}
.footer {
display: flex; justify-content: space-between;
font-size: 12px; color: var(--text-muted);
letter-spacing: 0.08em; text-transform: uppercase;
}
</style>
</head>
<body>
<div class="slide">
<div class="tabs">
<div class="tab t1 active"><span class="dot"></span>Findings</div>
<div class="tab t2"><span class="dot"></span>Method</div>
<div class="tab t3"><span class="dot"></span>Caveats</div>
</div>
<div class="title">Conversion dropped 11% on mobile — but desktop held steady.</div>
<div class="body">
<div class="points">
<div class="point"><div class="head">Mobile fell 16% (n = 62k)</div><div class="sub">Decline begins on the new checkout step, not at cart entry.</div></div>
<div class="point"><div class="head">Desktop unchanged</div><div class="sub">Within noise across all four cohorts.</div></div>
<div class="point"><div class="head">AOV held flat both platforms</div><div class="sub">No upstream effect on basket composition.</div></div>
</div>
<div class="margin">
Note: the mobile UA mix in the test skewed iOS-heavy. We're rerunning the slice in week 41 to confirm.
</div>
</div>
<div class="footer"><span>Q3 Checkout Test</span><span>05 / 12</span></div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Notion Clean — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #ffffff;
--surface: #f6f5f4;
--fg: rgba(0, 0, 0, 0.95);
--text-muted: #615d59;
--text-meta: #a39e98;
--accent: #0075de;
--accent-hover: #005bab;
--border: rgba(0, 0, 0, 0.1);
--font-display: 'Inter', 'Noto Sans SC', system-ui, sans-serif;
--font-body: 'Inter', 'Noto Sans SC', system-ui, sans-serif;
--card-shadow: rgba(0,0,0,0.04) 0px 4px 18px, rgba(0,0,0,0.027) 0px 2px 7.85px, rgba(0,0,0,0.02) 0px 0.8px 2.93px;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--fg);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 64px 48px;
display: flex; flex-direction: column; gap: 32px;
}
.head { display: flex; justify-content: space-between; align-items: center; }
.badge {
font-size: 12px; font-weight: 600; letter-spacing: 0.125px;
background: #f2f9ff; color: #097fe8; padding: 4px 10px;
border-radius: 9999px;
}
.title {
font-family: var(--font-display);
font-size: 44px;
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.02em;
color: var(--fg);
}
.grid {
flex: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 1fr 1fr;
gap: 20px;
}
.card {
background: var(--bg);
border: 1px solid var(--border);
border-radius: 12px;
padding: 28px 24px;
display: flex; flex-direction: column;
box-shadow: var(--card-shadow);
}
.card--accent {
background: var(--surface);
}
.card-label {
font-size: 12px; letter-spacing: 0.1em;
text-transform: uppercase; font-weight: 600;
color: var(--text-meta);
}
.card-stat {
font-family: var(--font-display);
font-size: 48px; font-weight: 700;
line-height: 1; letter-spacing: -0.02em;
color: var(--fg);
margin-top: 12px;
}
.card-stat--blue { color: var(--accent); }
.card-desc {
margin-top: auto;
font-size: 15px;
color: var(--text-muted);
line-height: 1.5;
}
.footer {
display: flex; justify-content: space-between;
font-size: 12px; color: var(--text-meta);
}
</style>
</head>
<body>
<div class="slide">
<div class="head">
<span class="badge">Q2 Review</span>
<span class="badge">Internal</span>
</div>
<div class="title">Team velocity doubled this quarter</div>
<div class="grid">
<div class="card">
<div class="card-label">Sprint velocity</div>
<div class="card-stat card-stat--blue">2.1x</div>
<div class="card-desc">Average story points per sprint, up from 34.</div>
</div>
<div class="card card--accent">
<div class="card-label">Bug resolution</div>
<div class="card-stat">48h</div>
<div class="card-desc">Median time to close critical bugs, down from 5 days.</div>
</div>
<div class="card">
<div class="card-label">Deploy frequency</div>
<div class="card-stat">14/wk</div>
<div class="card-desc">Daily deploys became the default across 3 teams.</div>
</div>
<div class="card card--accent" style="grid-column: 1 / 3;">
<div class="card-label">Customer NPS</div>
<div class="card-stat">+42</div>
<div class="card-desc">Highest ever recorded, driven by the onboarding rewrite and faster support response. Key driver: "The product feels reliable now."</div>
</div>
<div class="card">
<div class="card-label">Uptime</div>
<div class="card-stat">99.97%</div>
<div class="card-desc">Zero critical incidents this quarter.</div>
</div>
</div>
<div class="footer">
<span>Team Operations / Q2 2026</span>
<span>03 / 12</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Paper & Ink — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #F4EFE5;
--text-primary: #2A2218;
--text-muted: #6B5F4D;
--accent: #8B2E1F;
--border: rgba(42,34,24,0.18);
--font-display: 'Source Serif Pro', 'Tiempos Headline', Georgia, serif;
--font-body: 'Source Serif Pro', Georgia, serif;
--font-meta: 'Inter', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 56px 120px 56px;
display: flex; flex-direction: column;
position: relative;
}
.running {
display: flex; justify-content: space-between;
border-bottom: 1px solid var(--border);
padding-bottom: 10px;
font-family: var(--font-meta);
font-size: 11px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--text-muted);
}
.title {
font-family: var(--font-display);
font-size: 38px;
font-weight: 600;
line-height: 1.2;
letter-spacing: -0.01em;
margin: 36px 0 28px;
max-width: 880px;
}
.accent-rule {
width: 40px; height: 3px;
background: var(--accent);
margin-bottom: 20px;
}
.body {
column-count: 2;
column-gap: 56px;
font-size: 17px;
line-height: 1.75;
}
.body p { margin-bottom: 16px; text-align: justify; hyphens: auto; }
.dropcap::first-letter {
font-family: var(--font-display);
font-size: 76px;
font-weight: 700;
color: var(--accent);
float: left;
line-height: 0.9;
margin: 8px 8px 0 0;
}
.pullquote {
break-inside: avoid;
margin: 8px 0 16px;
padding: 4px 0 4px 16px;
border-left: 3px solid var(--accent);
font-family: var(--font-display);
font-style: italic;
font-size: 22px;
line-height: 1.45;
color: var(--text-primary);
}
.pagenum {
position: absolute;
bottom: 28px; left: 0; right: 0;
text-align: center;
font-family: var(--font-meta);
font-size: 11px;
letter-spacing: 0.22em;
color: var(--text-muted);
}
</style>
</head>
<body>
<div class="slide">
<div class="running">
<span>The Quiet Issue</span>
<span>Chapter II — On Workplaces</span>
</div>
<div class="accent-rule"></div>
<div class="title">When the building emptied, no one rang an alarm.</div>
<div class="body">
<p class="dropcap">There is a particular kind of decline that does not announce itself. The lights stay on. The coffee is still ordered. The quarterly memo still circulates, and at the bottom of the memo there is still a paragraph about "the energy of being together." But the desks, if you walked between them on a Wednesday, were mostly empty.</p>
<div class="pullquote">"We didn't decide to kill it. We just stopped renewing leases."</div>
<p>For three years, I asked real-estate leads at thirty large companies the same question, and got, with small variations, the same answer. The end of the open-plan office is not a decision. It is the absence of one — a long string of leases not renewed, of buildouts not commissioned, of new hires onboarded without a desk anyone could point to.</p>
</div>
<div class="pagenum">— 14 —</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Pastel Geometry — Example</title>
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #FFF8EE;
--surface: #FFE5D4;
--surface-2: #D6E6F2;
--text-primary: #2A2A3D;
--text-muted: #6E6E85;
--accent: #FFB4A2;
--accent-2: #B5D6E0;
--accent-3: #C8E6C9;
--font-display: 'Nunito', 'Quicksand', system-ui, sans-serif;
}
html, body {
width: 100%; height: 100%;
background: var(--bg);
color: var(--text-primary);
font-family: var(--font-display);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
padding: 80px 96px;
display: flex; flex-direction: column; gap: 36px;
position: relative;
overflow: hidden;
}
.blob {
position: absolute;
border-radius: 50%;
filter: blur(0.5px);
z-index: 0;
}
.blob.b1 { width: 220px; height: 220px; top: -60px; right: -60px; background: var(--accent); }
.blob.b2 { width: 140px; height: 140px; bottom: 60px; right: 240px; background: var(--accent-3); }
.blob.b3 { width: 90px; height: 90px; top: 180px; left: -30px; background: var(--accent-2); }
.blob.b4 { width: 60px; height: 60px; bottom: 90px; left: 90px; background: var(--accent); opacity: .7; }
.pill {
display: inline-block;
padding: 8px 18px;
border-radius: 999px;
background: var(--surface-2);
font-size: 14px; font-weight: 700;
letter-spacing: 0.05em;
color: var(--text-primary);
z-index: 1; position: relative;
align-self: flex-start;
}
.title {
font-size: 56px;
font-weight: 800;
line-height: 1.18;
max-width: 880px;
z-index: 1; position: relative;
}
.title em { color: var(--accent); font-style: normal; }
.body {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 28px;
z-index: 1; position: relative;
flex: 1; align-items: stretch;
}
.card {
background: var(--surface);
border-radius: 24px;
padding: 28px;
display: flex; flex-direction: column; gap: 12px;
}
.card.c2 { background: var(--surface-2); }
.card.c3 { background: var(--accent-3); }
.card .num {
width: 40px; height: 40px;
border-radius: 50%;
background: var(--bg);
color: var(--text-primary);
display: grid; place-items: center;
font-weight: 800; font-size: 18px;
}
.card .h { font-size: 22px; font-weight: 800; line-height: 1.25; }
.card .s { font-size: 15px; color: var(--text-muted); line-height: 1.55; font-weight: 500; }
</style>
</head>
<body>
<div class="slide">
<div class="blob b1"></div>
<div class="blob b2"></div>
<div class="blob b3"></div>
<div class="blob b4"></div>
<span class="pill">SQL · Lesson 3</span>
<div class="title">A JOIN combines rows from two tables — <em>here are the three you'll use most.</em></div>
<div class="body">
<div class="card">
<div class="num">1</div>
<div class="h">INNER JOIN</div>
<div class="s">Keep only rows that have a match in both tables. Default for most queries.</div>
</div>
<div class="card c2">
<div class="num">2</div>
<div class="h">LEFT JOIN</div>
<div class="s">Keep every row from the left table, even when there is no match on the right.</div>
</div>
<div class="card c3">
<div class="num">3</div>
<div class="h">FULL OUTER</div>
<div class="s">Keep everything from both sides; fill in nulls where there's no match.</div>
</div>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Pin Paper — Stats</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Caveat:wght@500;600;700&family=Space+Grotesk:wght@400;500;600;700&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--paper: #EFE56A;
--paper-2: #F5ECA0;
--cream: #F8F1D6;
--ink: #1F3A8A;
--red: #C2342B;
--font-display: 'Caveat', cursive;
--font-body: 'Space Grotesk', sans-serif;
--font-mono: 'DM Mono', monospace;
}
html, body {
width: 100%; height: 100%;
background: #1a1a1a;
color: var(--ink);
font-family: var(--font-body);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.slide {
width: 1280px; height: 720px;
position: relative; overflow: hidden;
background:
radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,.18), transparent 60%),
radial-gradient(140% 100% at 80% 95%, rgba(0,0,0,.05), transparent 55%),
var(--paper);
}
.top {
position: absolute; top: 28px; left: 40px; right: 40px;
display: flex; align-items: center; justify-content: space-between;
font-family: var(--font-mono); font-weight: 500; font-size: 12px;
letter-spacing: .12em; text-transform: uppercase;
}
.top .meta { display: flex; gap: 24px; opacity: .7; }
.head {
position: absolute; left: 40px; right: 40px; top: 70px;
display: flex; align-items: flex-start; justify-content: space-between; gap: 30px;
}
.head h2 {
font-family: var(--font-body); font-weight: 700;
font-size: 58px; line-height: .9; letter-spacing: -.035em;
}
.head h2 em { font-family: var(--font-display); font-style: normal; }
.head .sub { font-size: 14px; line-height: 1.5; max-width: 36ch; opacity: .85; margin-top: 8px; }
.grid {
position: absolute; left: 40px; right: 40px; top: 280px; bottom: 60px;
display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
}
.stat {
background: var(--cream); border: 1.5px solid var(--ink);
border-radius: 3px; padding: 24px 22px;
display: flex; flex-direction: column; gap: 10px;
position: relative;
box-shadow: 4px 5px 0 0 var(--ink);
}
.stat.alt { background: var(--paper-2); }
.stat.alt2 { background: #FBE6A4; }
.stat .big {
font-family: var(--font-body); font-weight: 700;
font-size: 110px; line-height: .85; letter-spacing: -.04em;
margin-top: 10px;
}
.stat .big small {
font-family: var(--font-display); font-weight: 700;
font-size: 40px; vertical-align: top; margin-left: 4px;
}
.stat h3 {
font-family: var(--font-body); font-weight: 700;
font-size: 18px; letter-spacing: -.015em;
margin: auto 0 0; line-height: 1.05;
}
.stat p { font-size: 13px; line-height: 1.45; margin: 0; }
.footer {
position: absolute; left: 40px; right: 40px; bottom: 22px;
display: flex; justify-content: space-between;
font-family: var(--font-mono); font-weight: 500; font-size: 11px;
letter-spacing: .14em; text-transform: uppercase; opacity: .65;
}
</style>
</head>
<body>
<div class="slide">
<div class="top">
<span>Pin & Paper</span>
<div class="meta"><span>Field Office</span><span>Evidence</span></div>
</div>
<div class="head">
<h2>The case,<br><em>by the numbers.</em></h2>
<div class="sub">Three figures we will report against every cycle. If one stops moving, the bet is over.</div>
</div>
<div class="grid">
<div class="stat">
<div class="big">2.4<small>x</small></div>
<h3>Retention multiple</h3>
<p>Cohort with written welcome + human reply vs. templated control.</p>
</div>
<div class="stat alt">
<div class="big">$4.1<small>M</small></div>
<h3>Projected retained ARR</h3>
<p>Modelled on current quarter signup cohort, all else held constant.</p>
</div>
<div class="stat alt2">
<div class="big">72<small>hr</small></div>
<h3>The window that matters</h3>
<p>Behavior after the first 72 hours predicts 18-month retention.</p>
</div>
</div>
<div class="footer">
<span>Field Office</span>
<span>09 / 11</span>
</div>
</div>
</body>
</html><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Retro Windows — Metrics</title>
<link href="https://fonts.googleapis.com/css2?family=VT323&family=Press+Start+2P&display=swap" rel="stylesheet">
<style>
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg-gray: #c0c0c0; --bg-light: #d4d0c8; --blue-navy: #000080; --blue-bright: #0000a0;
--white: #ffffff; --black: #000000; --text-dark: #222222;
--btn-face: #d4d0c8; --btn-highlight: #ffffff; --btn-shadow: #404040; --btn-dark-shadow: #000000;
--green-retro: #008000;
--font-display: 'Press Start 2P', cursive;
--font-body: 'MS Sans Serif', 'Segoe UI', Tahoma, sans-serif;
--font-mono: 'VT323', monospace;
}
html, body { width: 100%; height: 100%; background: var(--bg-dark, #808080); font-family: var(--font-body); font-size: 16px; color: var(--text-dark); overflow: hidden; }
.slide { width: 1280px; height: 720px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 18px 24px 36px; background: var(--bg-dark, #808080); }
.win-window {
background: var(--bg-light); border: 2px solid var(--white);
border-right-color: var(--btn-dark-shadow); border-bottom-color: var(--btn-dark-shadow);
box-shadow: inset 1px 1px 0 var(--btn-highlight), inset -1px -1px 0 var(--btn-shadow);
display: flex; flex-direction: column; width: 100%; height: 100%;
}
.win-titlebar {
background: linear-gradient(90deg, var(--blue-navy) 0%, var(--blue-bright) 100%);
color: var(--white); padding: 4px 8px; display: flex; align-items: center;
justify-content: space-between; font-weight: bold; font-size: 14px; letter-spacing: .5px; flex-shrink: 0;
}
.win-title-left { display: flex; align-items: center; gap: 8px; }
.win-icon { width: 18px; height: 18px; background: var(--white); border: 1px solid var(--black); display: flex; align-items: center; justify-content: center; font-size: 11px; color: var(--blue-navy); font-weight: bold; }
.win-buttons { display: flex; gap: 3px; }
.win-btn { width: 20px; height: 18px; background: var(--bg-light); border: 2px solid var(--btn-highlight); border-right-color: var(--btn-dark-shadow); border-bottom-color: var(--btn-dark-shadow); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: bold; color: var(--text-dark); line-height: 1; padding-bottom: 2px; }
.win-body { padding: 16px 20px; flex: 1; overflow: hidden; display: flex; flex-direction: column; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.group-box { border: 2px solid var(--btn-shadow); border-right-color: var(--btn-highlight); border-bottom-color: var(--btn-highlight); padding: 16px 14px 12px; position: relative; background: var(--bg-light); text-align: center; }
.group-box-title { position: absolute; top: -10px; left: 10px; background: var(--bg-light); padding: 0 6px; font-size: 13px; font-weight: bold; color: var(--text-dark); }
.group-box .value { font-size: 28px; margin: 8px 0; color: var(--blue-navy); font-weight: bold; }
.change { font-size: 13px; font-weight: bold; }
.change.up { color: var(--green-retro); }
.sub { font-size: 11px; color: #555; margin-top: 4px; }
.panel-raised { background: var(--bg-light); border: 2px solid var(--btn-highlight); border-right-color: var(--btn-dark-shadow); border-bottom-color: var(--btn-dark-shadow); padding: 12px; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.kpi-row { display: flex; justify-content: space-between; font-size: 14px; padding: 6px 0; border-bottom: 1px solid #ddd; }
.kpi-row:last-child { border-bottom: none; }
.kpi-row span:last-child { font-weight: bold; }
hr.retro { border: none; border-top: 1px solid var(--btn-shadow); border-bottom: 1px solid var(--btn-highlight); margin: 10px 0; flex-shrink: 0; }
.footer-bar { margin-top: 12px; display: flex; justify-content: space-between; font-size: 12px; color: #555; }
.status-dot { color: var(--green-retro); font-weight: bold; }
</style>
</head>
<body>
<div class="slide">
<div class="win-window">
<div class="win-titlebar">
<div class="win-title-left"><div class="win-icon">M</div><span>METRICS.LOG</span></div>
<div class="win-buttons"><div class="win-btn">_</div><div class="win-btn">[]</div><div class="win-btn">X</div></div>
</div>
<div class="win-body">
<div style="flex-shrink:0">
<p style="font-size:18px;color:var(--blue-navy);font-weight:bold;margin-bottom:4px">Performance Metrics Dashboard</p>
<hr class="retro">
</div>
<div class="grid-4" style="flex-shrink:0;margin-top:8px">
<div class="group-box">
<span class="group-box-title">Revenue</span>
<p class="value">$2.1M</p>
<p class="change up">+18.3%</p>
<p class="sub">vs previous quarter</p>
</div>
<div class="group-box">
<span class="group-box-title">Customers</span>
<p class="value">1,482</p>
<p class="change up">+124</p>
<p class="sub">new this quarter</p>
</div>
<div class="group-box">
<span class="group-box-title">Retention</span>
<p class="value">94.2%</p>
<p class="change up">+2.1%</p>
<p class="sub">annual rate</p>
</div>
<div class="group-box">
<span class="group-box-title">NPS Score</span>
<p class="value">72</p>
<p class="change up">+5</p>
<p class="sub">industry avg: 45</p>
</div>
</div>
<div class="grid-2" style="flex:1;margin-top:16px;min-height:0">
<div class="panel-raised" style="display:flex;flex-direction:column;gap:8px">
<p style="font-size:14px;font-weight:bold">Operational KPIs</p>
<div class="kpi-row"><span>Avg. Response Time</span><span>124ms</span></div>
<div class="kpi-row"><span>System Uptime</span><span class="status-dot">99.97%</span></div>
<div class="kpi-row"><span>Support Tickets</span><span>342 (-12%)</span></div>
<div class="kpi-row"><span>Feature Adoption</span><span>68%</span></div>
<div class="kpi-row"><span>API Calls / Day</span><span>4.2M</span></div>
</div>
<div class="panel-raised" style="display:flex;flex-direction:column">
<p style="font-size:14px;font-weight:bold;margin-bottom:8px">Monthly Active Users</p>
<div style="flex:1;background:var(--white);border:2px solid var(--btn-shadow);border-right-color:var(--btn-highlight);border-bottom-color:var(--btn-highlight);padding:12px;display:flex;align-items:flex-end;gap:12px">
<div style="width:14%;background:var(--blue-navy);height:42%"></div>
<div style="width:14%;background:var(--blue-navy);height:48%"></div>
<div style="width:14%;background:var(--blue-navy);height:55%"></div>
<div style="width:14%;background:var(--blue-navy);height:62%"></div>
<div style="width:14%;background:var(--blue-navy);height:71%"></div>
<div style="width:14%;background:var(--blue-navy);height:78%"></div>
</div>
</div>
</div>
<div class="footer-bar">
<span>Data source: Internal reporting</span>
<span>Updated: May 2026</span>
<span>All systems operational <span class="status-dot">LIVE</span></span>
</div>
</div>
</div>
</div>
</body>
</html>