# Ipê City — Deck Templates

> Machine-readable slide-template reference for AI agents and LLMs.
> Human version: https://ipe.city/deck
> Brand reference: https://ipe.city/brand.md
> Editable file: https://ipe.city/Ipe-Village-Deck-Templates.pptx

---

## How to use this file

This is a system of **30 reusable slide layouts** ("templates") for building on-brand
Ipê presentations. Each template has a stable `id`, a primary **tone**, and the content
slots it expects. The output is a **self-presenting, animated** `.html` deck (keyboard nav +
entrance animations). To assemble: pick a layout per slide, fill its slots with the user's
content, and **alternate tones** so consecutive slides don't look the same.

Every slide is a **16:9 frame** rendered as a CSS container, so all sizing uses
`cqw` units (1cqw = 1% of slide width) and scales at any resolution.

---

## Output contract — what to produce

When asked to "make an Ipê deck," produce **one self-contained `.html` file** from the
scaffold below: it loads the brand fonts, recreates the brand theme, and **presents itself**
— one slide at a time, fit to the viewport, advanced with the keyboard (Enter / Space / →).
Paste one slide per `<section class="deck-slide slide--{id}">`, tones alternating per the
rhythm rules. Opened in any browser it runs as a deck; a 16:9 PDF (one slide per page) is
optional via Print.

**Rules of engagement for the agent:**
1. **Content first** — use the content you were given; do not invent stats, names, dates, or
   claims. Adapt text only to fit a slide, or fix grammar.
2. Pick a layout from the **30 templates** below and fill its `{{SLOTS}}`. If a slide fits
   none, design one in the same system (frame + `cqw` + tokens) — never off-brand.
3. Do **not** invent colors, fonts, gradients, or assets — use the `ipe-*` palette,
   `font-serif`/`font-sans`, and the asset URLs in **brand.md**.
4. Keep `cqw` sizing as written; only change slot text and the repeat-count of repeated items.
5. Obey the tone rhythm: never two consecutive slides of the same tone, and vary the canvas.
6. Motion is opt-in and subtle: `data-anim` on a few key parts, `data-count` on a hero number,
   `data-grow` on chart bars, `data-draw` on a timeline line.

### The scaffold (copy verbatim; paste slide blocks where marked)

```html
<!doctype html>
<!--
  Ipê deck scaffold — a SELF-PRESENTING, animated deck. Open in any browser: it shows one
  slide at a time, fit to the viewport, navigated with the keyboard (no build step).
  - Paste one slide per <section class="deck-slide slide--{id}"> in the marked zone.
  - Motion (replays each time a slide is shown): data-anim (fade+rise, staggered),
    data-count="170" (count-up, optional data-prefix/data-suffix), data-grow (SVG <rect>
    bar grows from baseline), data-draw="0" (SVG <line>/<path> draws on). Tag a few key parts.
  - Controls: Enter/Space/→/↓ next · ←/↑/Backspace prev · Home/End · O overview · F fullscreen.
  - PDF is OPTIONAL: print reveals every slide, one 16:9 page each.
  Do NOT edit the <head> theme or the engine <style>/<script> — only add slides.
-->
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Ipê Deck</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=Chakra+Petch:wght@300;400;500;600;700&family=DM+Sans:opsz,wght@9..40,100..1000&display=swap" rel="stylesheet" />
  <!-- Tailwind v4 — same engine the live site uses (container queries + cqw work out of the box) -->
  <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
  <style type="text/tailwindcss">
    @theme {
      --font-sans: 'DM Sans', sans-serif;
      --font-serif: 'Chakra Petch', sans-serif;
      --color-ipe-navy: #002642;
      --color-ipe-lime: #A2D729;
      --color-ipe-blue: #3AA5FF;
      --color-ipe-yellow: #FFB600;
      --color-ipe-white: #EFF2F1;
      --color-ipe-black: #000000;
    }
  </style>
  <style>
    /* ---- presentation engine ---- */
    html, body { height: 100%; margin: 0; background: #000; font-family: 'DM Sans', sans-serif; overflow: hidden; }
    .stage { position: fixed; inset: 0; display: grid; place-items: center; overflow: hidden; }
    .deck-slide { grid-area: 1 / 1; width: min(100vw, calc(100vh * 16 / 9)); opacity: 0; visibility: hidden; transition: opacity .45s ease; }
    .deck-slide.is-active { opacity: 1; visibility: visible; }
    .deck-slide [data-anim] { opacity: 0; transform: translateY(14px); }
    .deck-slide.is-active [data-anim] { opacity: 1; transform: none; transition: opacity .55s ease, transform .55s cubic-bezier(.2,.7,.2,1); transition-delay: calc(var(--i, 0) * 80ms); }
    .deck-slide [data-grow] { transform: scaleY(0); transform-box: fill-box; transform-origin: bottom; }
    .deck-slide.is-active [data-grow] { transform: scaleY(1); transition: transform .85s cubic-bezier(.2,.7,.2,1); transition-delay: calc(var(--i, 0) * 90ms + 120ms); }
    .deck-slide [data-draw] { stroke-dashoffset: var(--len, 0); }
    @media (prefers-reduced-motion: reduce) {
      .deck-slide, .deck-slide [data-anim], .deck-slide [data-grow] { transition: none !important; }
      .deck-slide [data-grow] { transform: none !important; }
      .deck-slide [data-draw] { stroke-dashoffset: 0 !important; }
    }
    .deck-ui { position: fixed; z-index: 10; font-family: 'DM Sans', sans-serif; color: #fff; opacity: .45; font-size: 13px; letter-spacing: .04em; pointer-events: none; }
    #counter { right: 18px; bottom: 14px; }
    #hint { left: 18px; bottom: 14px; }
    body.overview { overflow: auto; }
    body.overview .stage { position: static; display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; padding: 22px; place-items: stretch; }
    body.overview .deck-slide { grid-area: auto; width: 100%; opacity: 1; visibility: visible; cursor: pointer; outline: 2px solid transparent; border-radius: 8px; }
    body.overview .deck-slide.is-active { outline-color: var(--color-ipe-lime, #A2D729); }
    body.overview .deck-slide [data-anim], body.overview .deck-slide [data-grow] { opacity: 1; transform: none; }
    body.overview .deck-slide [data-draw] { stroke-dashoffset: 0; }
    body.overview .deck-ui { display: none; }
    @media print {
      @page { size: 1280px 720px; margin: 0; }
      html, body { overflow: visible; background: #fff; }
      .stage { position: static; display: block; }
      .deck-slide { width: 1280px; height: 720px; opacity: 1 !important; visibility: visible !important; break-after: page; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
      .deck-slide:last-child { break-after: auto; }
      .deck-slide [data-anim] { opacity: 1 !important; transform: none !important; }
      .deck-ui { display: none; }
    }
  </style>
</head>
<body>
  <div class="stage">

    <!-- ===== PASTE SLIDES BELOW — one <section class="deck-slide slide--{id}"> each ===== -->

    <section class="deck-slide slide--cover">
      <!-- slide 1: paste a filled template block (the inner @container div) here -->
    </section>

    <section class="deck-slide slide--statement">
      <!-- slide 2: next slide (contrast the neighbour) -->
    </section>

    <!-- …one <section class="deck-slide slide--{id}"> per slide… -->

  </div>

  <div class="deck-ui" id="counter"></div>
  <div class="deck-ui" id="hint">→ / Space &nbsp;·&nbsp; O overview &nbsp;·&nbsp; F fullscreen</div>

  <script>
    (function () {
      var slides = Array.prototype.slice.call(document.querySelectorAll('.deck-slide'));
      if (!slides.length) return;
      var counter = document.getElementById('counter');
      var i = 0;
      slides.forEach(function (s) { s.querySelectorAll('[data-anim]').forEach(function (el, k) { el.style.setProperty('--i', k); }); });
      function countUp(el) {
        var target = parseFloat(el.getAttribute('data-count')); if (isNaN(target)) return;
        var pre = el.getAttribute('data-prefix') || '', suf = el.getAttribute('data-suffix') || '', dur = 900, t0 = performance.now();
        function step(t) { var p = Math.min(1, (t - t0) / dur), v = Math.round(target * (1 - Math.pow(1 - p, 3))); el.textContent = pre + v.toLocaleString() + suf; if (p < 1) requestAnimationFrame(step); }
        requestAnimationFrame(step);
      }
      function activate(n) {
        i = Math.max(0, Math.min(slides.length - 1, n));
        slides.forEach(function (s, k) { s.classList.toggle('is-active', k === i); });
        var s = slides[i];
        s.querySelectorAll('[data-count]').forEach(countUp);
        s.querySelectorAll('[data-draw]').forEach(function (el) {
          try { var len = el.getTotalLength(); el.style.setProperty('--len', len); el.style.strokeDasharray = len; el.style.transition = 'none'; el.style.strokeDashoffset = len; el.getBoundingClientRect(); var d = parseFloat(el.getAttribute('data-draw')) || 0; el.style.transition = 'stroke-dashoffset 1.1s ease ' + (120 + d * 90) + 'ms'; el.style.strokeDashoffset = 0; } catch (e) {}
        });
        if (counter) counter.textContent = (i + 1) + ' / ' + slides.length;
        if (history.replaceState) history.replaceState(null, '', '#' + (i + 1));
      }
      function next() { if (i < slides.length - 1) activate(i + 1); }
      function prev() { if (i > 0) activate(i - 1); }
      document.addEventListener('keydown', function (e) {
        var k = e.key;
        if (k === 'Enter' || k === ' ' || k === 'ArrowRight' || k === 'ArrowDown' || k === 'PageDown') { e.preventDefault(); next(); }
        else if (k === 'ArrowLeft' || k === 'ArrowUp' || k === 'PageUp' || k === 'Backspace') { e.preventDefault(); prev(); }
        else if (k === 'Home') { e.preventDefault(); activate(0); }
        else if (k === 'End') { e.preventDefault(); activate(slides.length - 1); }
        else if (k === 'o' || k === 'O') { document.body.classList.toggle('overview'); }
        else if (k === 'f' || k === 'F') { if (!document.fullscreenElement) { document.documentElement.requestFullscreen && document.documentElement.requestFullscreen(); } else { document.exitFullscreen && document.exitFullscreen(); } }
      });
      document.addEventListener('click', function (e) {
        if (document.body.classList.contains('overview')) { var sec = e.target.closest('.deck-slide'); if (sec) { document.body.classList.remove('overview'); activate(slides.indexOf(sec)); } return; }
        if (!e.target.closest('a, button')) next();
      });
      var wheelLock = false;
      document.addEventListener('wheel', function (e) {
        if (document.body.classList.contains('overview') || wheelLock) return;
        if (Math.abs(e.deltaY) < 12) return;
        wheelLock = true; setTimeout(function () { wheelLock = false; }, 500);
        if (e.deltaY > 0) next(); else prev();
      }, { passive: true });
      var start = parseInt((location.hash || '').slice(1), 10);
      activate(start > 0 ? start - 1 : 0);
    })();
  </script>
</body>
</html>
```

### Image paths — important

Template blocks use root-relative paths like `/branding/the-architect.png` (these resolve
on ipe.city). For a **standalone file**, prefix every asset with the site origin so images
load anywhere:

```
/branding/…   →   https://www.ipe.city/branding/…
```

e.g. `<img src="/branding/bg-02.png">` → `<img src="https://www.ipe.city/branding/bg-02.png">`.
The full asset catalog (gradients `bg-01..06`, visuals, wordmarks, The Architect) with
descriptions and direct URLs is in **brand.md**.

### Export to PDF / PPTX

- **PDF:** open the HTML, Print → "Save as PDF", set margins to None and background graphics
  ON. The `@page` rule already sizes pages to 16:9, one slide per page.
- **PPTX:** import that PDF into Keynote/PowerPoint/Google Slides as full-page images, or
  start from the editable deck at https://ipe.city/Ipe-Village-Deck-Templates.pptx.

---

## Brand tokens (see brand.md for full kit)

| Token | Hex | Tailwind class |
|---|---|---|
| Navy (primary bg) | `#002642` | `bg-ipe-navy` / `text-ipe-navy` |
| Lime (accent) | `#A2D729` | `text-ipe-lime` / `bg-ipe-lime` |
| Blue (secondary) | `#3AA5FF` | `text-ipe-blue` |
| Yellow | `#FFB600` | `text-ipe-yellow` |
| White (light bg) | `#EFF2F1` | `bg-ipe-white` |
| Black | `#000000` | `bg-black` |

- **Display / headings font**: Chakra Petch (`font-serif` in this codebase)
- **Body font**: DM Sans (`font-sans`)
- **Primary combo**: navy background + lime accent + white text.
- **Date badge** convention: `APR 6 — MAY 1` (lime em dash). Village dates; the conference itself runs Apr 23 – May 1.
- **Wordmark**: `/branding/ipe-wordmark-light.svg` (dark bg), `/branding/ipe-wordmark-dark.svg` (light bg).

---

## Tones & visual rhythm

Every template has a primary **tone**. The rhythm rule: **never run two slides of the same tone back to back**. A good 10-slide deck cycles through tones like a piece of music.

| Tone | Background | Used by |
|---|---|---|
| `navy` | `bg-ipe-navy` | section-divider, big-number, stat-grid, globe-statement, mosaic |
| `light` | `bg-ipe-white` | statement, split-image, process-flow |
| `black` | `bg-black` | cover-architect, manifesto |
| `gradient` | `/branding/bg-0X.png` (default `bg-02` open / `bg-05` close) | cover-gradient, closing-cta |
| `split` | half-navy + half-light | location, agenda-day |

Recommended rhythms (pick one per deck):

```
A. gradient → navy → light → navy → black → light → navy → light → split → gradient
B. black → light → navy → split → navy → light → navy → split → light → gradient
```

---

## Shared primitives

### 16:9 slide frames

```html
<!-- Navy frame -->
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="relative h-full w-full p-[5.5cqw]"><!-- slide content --></div>
</div>

<!-- Light frame -->
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="relative h-full w-full p-[5.5cqw]"><!-- slide content --></div>
</div>

<!-- Black frame -->
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <div class="relative h-full w-full p-[5.5cqw]"><!-- slide content --></div>
</div>

<!-- Gradient frame (with dark scrim helper for legibility) -->
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="/branding/bg-02.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
  <div class="absolute inset-0 bg-gradient-to-r from-black/70 via-black/25 to-transparent"></div>
  <div class="relative h-full w-full p-[5.5cqw]"><!-- slide content --></div>
</div>
```

### Small parts

```html
<!-- Eyebrow label -->
<p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">Section label</p>

<!-- Date badge -->
<div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
  <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
</div>

<!-- Lime tick (decorative bar before captions) -->
<span class="h-[0.2cqw] w-[5cqw] bg-ipe-lime"></span>
```

---

## Template picker — choose by job

| You need to… | Template | Tone |
|---|---|---|
| Open with gravitas + a human figure | `cover-architect` | black |
| Open with energy, headline-only | `cover-gradient` | gradient |
| Start a new chapter / section | `section-divider` | navy |
| Make the room go quiet with one quote | `manifesto` | black |
| State one idea + a short paragraph | `statement` | light |
| Land one hero number | `big-number` | navy |
| Pair a claim with a photo/screenshot | `split-image` | light |
| Show 3–6 metrics of traction | `stat-grid` | navy |
| Anchor the audience in a place | `location` | split |
| Make a global / world-scale claim | `globe-statement` | navy |
| Lay out one day's schedule | `agenda-day` | split |
| Show programs/tracks/people (1 hero + supporting) | `mosaic` | navy |
| Explain a 3–4 step process | `process-flow` | light |
| Close with CTA + QR + handles | `closing-cta` | gradient |
| Early overview / contents | `agenda` | navy |
| A few bullet points | `bullet-list` | light |
| Tabular data | `table` | navy |
| Cinematic photo + overlay | `full-bleed-image` | gradient |
| A bar chart | `chart` | light |
| A 2×2 positioning map | `matrix-2x2` | black |
| Problem vs solution | `problem-solution` | light |
| Compare options × attributes | `feature-comparison` | light |
| Pricing tiers | `pricing-tiers` | navy |
| Team / people grid (photos) | `team` | light |
| Sponsor / logo wall | `logo-wall` | black |
| A historical timeline | `timeline` | light |
| A forward roadmap | `roadmap` | navy |
| Boxes-and-arrows diagram | `diagram-architecture` | black |
| A code snippet | `code-block` | black |
| A photo gallery | `photo-grid` | navy |

A typical 8–10 slide deck: `cover-* → section-divider → statement/big-number →
stat-grid → split-image/mosaic → globe-statement/manifesto → process-flow →
location → closing-cta`, alternating tones throughout.

---

## Templates

Each template below is a **complete, standalone copy-paste block**. Replace the
`{{SLOT}}` placeholders with real content. Repeat or remove repeated items (stats,
cards, logos, people, rows) as needed. Paste each block inside a
`<section class="deck-slide slide--{id}">` wrapper from the scaffold above, and add
`data-anim` to the parts you want to stagger in (`data-count` for hero numbers). Image grids
(`team`, `logo-wall`, `photo-grid`) take any number of items — set their grid columns to fit.

---

### 1. `cover-architect`
- **Tone**: `black` (with The Architect editorial figure).
- **Purpose**: Opener variant — when the deck needs gravitas and a human face.
- **Slots**: `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime phrase), `{{CAPTION}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="/branding/the-architect.png" alt="" class="absolute right-[-4cqw] bottom-0 h-[96%] w-auto object-contain" />
  <div class="absolute inset-0 bg-gradient-to-r from-black via-black/85 to-transparent"></div>
  <div class="relative flex h-full flex-col justify-between p-[5.5cqw]">
    <div class="flex items-center justify-between">
      <img src="/branding/ipe-wordmark-light.svg" alt="Ipê Village" class="h-[3.4cqw] w-auto" />
      <div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
        <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
      </div>
    </div>
    <div class="max-w-[62%]">
      <h2 class="font-serif text-[5.6cqw] font-bold leading-[1.02] tracking-tight">
        {{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span>
      </h2>
    </div>
    <div class="flex items-center gap-[1.5cqw] font-sans text-[1.5cqw] text-white/70">
      <span class="h-[0.2cqw] w-[5cqw] bg-ipe-lime"></span>
      {{CAPTION}}
    </div>
  </div>
</div>
```

---

### 2. `cover-gradient`
- **Tone**: `gradient` (default `bg-02` — dramatic dark-with-streak).
- **Purpose**: Default opener — energetic, no figure, headline does the work.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime), `{{CAPTION}}`, `{{LOCATION}}`. Swap `bg-02.png` for any `bg-0{{N}}.png` (01–06).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="/branding/bg-02.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
  <div class="absolute inset-0 bg-gradient-to-r from-black/70 via-black/25 to-transparent"></div>
  <div class="relative flex h-full flex-col justify-between p-[5.5cqw]">
    <div class="flex items-center justify-between">
      <img src="/branding/ipe-wordmark-light.svg" alt="Ipê Village" class="h-[3.4cqw] w-auto" />
      <div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
        <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
      </div>
    </div>
    <div class="max-w-[68%]">
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[2cqw] font-serif text-[5.8cqw] font-bold leading-[1.02] tracking-tight">
        {{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span>
      </h2>
    </div>
    <div class="flex items-end justify-between font-sans text-[1.5cqw] text-white/75">
      <div class="flex items-center gap-[1.5cqw]">
        <span class="h-[0.2cqw] w-[5cqw] bg-ipe-lime"></span>
        {{CAPTION}}
      </div>
      <span class="text-white/50">{{LOCATION}}</span>
    </div>
  </div>
</div>
```

---

### 3. `section-divider`
- **Tone**: `navy`.
- **Purpose**: Break the deck into chapters.
- **Slots**: `{{INDEX}}` (e.g. `02`), `{{TITLE}}`, `{{SUBTITLE}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="relative flex h-full flex-col justify-center p-[5.5cqw]">
    <span class="font-serif text-[9cqw] font-bold leading-none text-ipe-lime">{{INDEX}}</span>
    <div class="mt-[2cqw] h-[0.3cqw] w-[10cqw] bg-ipe-lime"></div>
    <h2 class="mt-[2.5cqw] font-serif text-[5cqw] font-bold leading-tight">{{TITLE}}</h2>
    <p class="mt-[1.5cqw] max-w-[55%] font-sans text-[1.9cqw] text-white/60">{{SUBTITLE}}</p>
  </div>
  <div class="absolute bottom-[4cqw] right-[5.5cqw] flex items-center gap-[1cqw] font-serif text-[1.3cqw] tracking-[0.25em] text-white/50">
    <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
  </div>
</div>
```

---

### 4. `manifesto`
- **Tone**: `black` (with low-opacity `visual-heads` behind for texture).
- **Purpose**: A single big quote/statement — the slide that makes the room go quiet.
- **Slots**: `{{QUOTE_PART_1}}`, `{{QUOTE_HIGHLIGHT}}` (lime phrase inline), `{{QUOTE_PART_2}}`, `{{ATTRIBUTION}}`. Swap `visual-heads.svg` for `symbol-white.svg` or `visual-globe-triple.svg` for variation.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="/branding/visual-heads.svg" alt="" class="absolute right-[-8cqw] bottom-[-4cqw] h-[120%] w-auto opacity-[0.08]" />
  <div class="relative flex h-full flex-col justify-center p-[5.5cqw]">
    <span class="font-serif text-[6cqw] leading-none text-ipe-lime">&ldquo;</span>
    <blockquote class="mt-[-2cqw] max-w-[82%] font-serif text-[3.4cqw] font-medium leading-[1.18] text-white">
      {{QUOTE_PART_1}} <span class="text-ipe-lime">{{QUOTE_HIGHLIGHT}}</span> {{QUOTE_PART_2}}
    </blockquote>
    <div class="mt-[3cqw] flex items-center gap-[1.5cqw]">
      <span class="h-[0.2cqw] w-[3cqw] bg-ipe-lime"></span>
      <p class="font-sans text-[1.4cqw] uppercase tracking-[0.25em] text-white/55">{{ATTRIBUTION}}</p>
    </div>
  </div>
</div>
```

---

### 5. `statement`
- **Tone**: `light`.
- **Purpose**: One headline idea + short supporting paragraph. The workhorse slide.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}` (≤16 words), `{{BODY}}` (≤2 sentences).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col justify-center p-[5.5cqw] pb-[10cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[2cqw] max-w-[82%] font-serif text-[4.6cqw] font-bold leading-[1.08]">{{HEADLINE}}</h2>
    <p class="mt-[2.2cqw] max-w-[64%] font-sans text-[2cqw] leading-relaxed text-ipe-navy/70">{{BODY}}</p>
  </div>
  <div class="absolute inset-x-[5.5cqw] bottom-[4cqw] flex items-center justify-between">
    <img src="/branding/ipe-wordmark-dark.svg" alt="Ipê" class="h-[2.6cqw] w-auto opacity-80" />
    <span class="font-sans text-[1.3cqw] text-ipe-navy/45">ipe.city</span>
  </div>
</div>
```

---

### 6. `big-number`
- **Tone**: `navy`.
- **Purpose**: Single hero number — the takeover slide for one piece of proof.
- **Slots**: `{{EYEBROW}}`, `{{VALUE}}` (3–5 chars), `{{SUFFIX}}` (optional, e.g. `M`, `%`, `x`), `{{LABEL}}` (one sentence), `{{SOURCE}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="relative flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <div class="flex flex-1 items-center justify-between gap-[3cqw]">
      <span class="font-serif text-[22cqw] font-bold leading-[0.82] tracking-tight text-ipe-lime">{{VALUE}}{{SUFFIX}}</span>
      <div class="max-w-[31%]">
        <p class="font-sans text-[2cqw] font-semibold leading-snug text-white">{{LABEL}}</p>
        <div class="mt-[1.8cqw] flex items-center gap-[1cqw]"><span class="h-[0.2cqw] w-[2.6cqw] bg-ipe-lime"></span><p class="font-sans text-[1.3cqw] font-medium text-white/55">{{SOURCE}}</p></div>
      </div>
    </div>
  </div>
</div>
```

---

### 7. `stat-grid`
- **Tone**: `navy`.
- **Purpose**: Multi-stat proof / traction (3–6 stats).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; repeated stat cell `{{VALUE}}` / `{{LABEL}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.5cqw] max-w-[70%] font-serif text-[3.4cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    </div>
    <div class="flex flex-1 items-center">
      <div class="grid w-full grid-cols-3 gap-x-[3cqw] gap-y-[3.5cqw]">
        <!-- repeat one cell per stat -->
        <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]">
          <p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">{{VALUE}}</p>
          <p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">{{LABEL}}</p>
        </div>
      </div>
    </div>
  </div>
</div>
```

---

### 8. `split-image`
- **Tone**: `light` (40/60 image-dominant).
- **Purpose**: Pair a claim with a photo or screenshot. Big visual + concise copy.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{BODY}}`, `{{TAG}}`, `{{IMAGE}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="grid h-full grid-cols-[40%_60%]">
    <div class="flex flex-col justify-center p-[5cqw]">
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.8cqw] font-serif text-[3.4cqw] font-bold leading-[1.1]">{{HEADLINE}}</h2>
      <p class="mt-[1.8cqw] font-sans text-[1.6cqw] leading-relaxed text-ipe-navy/70">{{BODY}}</p>
      <div class="mt-[2.5cqw] flex items-center gap-[1cqw]">
        <span class="h-[0.2cqw] w-[3cqw] bg-ipe-lime"></span>
        <span class="font-sans text-[1.3cqw] uppercase tracking-[0.2em] text-ipe-navy/50">{{TAG}}</span>
      </div>
    </div>
    <div class="relative">
      <img src="{{IMAGE}}" alt="" class="absolute inset-0 h-full w-full object-cover" />
    </div>
  </div>
</div>
```

---

### 9. `location`
- **Tone**: `split` (light text panel + navy map panel).
- **Purpose**: Anchor the audience in place. Crucial for a place-based event.
- **Slots**: `{{EYEBROW}}`, `{{CITY}}`, `{{REGION}}`, `{{VENUE}}`, `{{DATES}}`, `{{COORDS}}`, optional `top`/`left` for the lime pin (default: Florianópolis area).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="grid h-full grid-cols-2">
    <div class="flex flex-col justify-center p-[5cqw]">
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.5cqw] font-serif text-[3.6cqw] font-bold leading-tight">{{CITY}}</h2>
      <p class="font-serif text-[2.2cqw] font-medium text-ipe-navy/60">{{REGION}}</p>
      <div class="mt-[3cqw] grid grid-cols-2 gap-[2cqw]">
        <div>
          <p class="font-sans text-[1.2cqw] uppercase tracking-[0.2em] text-ipe-navy/45">Venue</p>
          <p class="mt-[0.4cqw] font-serif text-[1.8cqw] font-bold leading-snug">{{VENUE}}</p>
        </div>
        <div>
          <p class="font-sans text-[1.2cqw] uppercase tracking-[0.2em] text-ipe-navy/45">Dates</p>
          <p class="mt-[0.4cqw] font-serif text-[1.8cqw] font-bold leading-snug">{{DATES}}</p>
        </div>
      </div>
      <div class="mt-[2.5cqw] flex items-center gap-[1cqw] font-sans text-[1.3cqw] text-ipe-navy/55">
        <span class="h-[0.2cqw] w-[3cqw] bg-ipe-lime"></span>
        {{COORDS}}
      </div>
    </div>
    <div class="relative flex items-center justify-center bg-ipe-navy p-[4cqw]">
      <div class="relative h-[40.5cqw]">
        <img src="/branding/visual-map-sc.svg" alt="Santa Catarina" class="h-full w-auto" />
        <span class="absolute h-[1.2cqw] w-[1.2cqw] -translate-x-1/2 -translate-y-1/2 rounded-full bg-ipe-lime ring-[0.4cqw] ring-ipe-lime/25" style="top:58%;left:54%"></span>
      </div>
    </div>
  </div>
</div>
```

---

### 10. `globe-statement`
- **Tone**: `navy` (with wireframe globe as a low-opacity backdrop).
- **Purpose**: Statements about global scope — network states, sovereignty, world-spanning ideas.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime), `{{BODY}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <img src="/branding/visual-globe-sphere.svg" alt="" class="absolute right-[-12cqw] top-1/2 h-[160%] w-auto -translate-y-1/2 opacity-[0.18]" />
  <div class="absolute inset-0 bg-gradient-to-r from-ipe-navy via-ipe-navy/85 to-transparent"></div>
  <div class="relative flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[2cqw] max-w-[62%] font-serif text-[4.6cqw] font-bold leading-[1.06]">
      {{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span>
    </h2>
    <p class="mt-[2cqw] max-w-[52%] font-sans text-[1.8cqw] leading-relaxed text-white/65">{{BODY}}</p>
  </div>
</div>
```

---

### 11. `agenda-day`
- **Tone**: `split` (navy date panel + light schedule panel).
- **Purpose**: A single day's program with time-stamped sessions. Use one per day; for milestone roadmaps use a sequence of these.
- **Slots**: left — `{{EYEBROW}}`, `{{DATE_DAY}}` (e.g. `24`), `{{DATE_MONTH}}` (e.g. `APRIL`), `{{DAY_NAME}}`, `{{DAY_THEME}}`. Right — repeat one row per session: `{{TIME}}`, `{{SESSION}}`, `{{SPEAKER_OR_LOCATION}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="grid h-full grid-cols-[36%_64%]">
    <div class="flex flex-col justify-center bg-ipe-navy p-[4.5cqw] text-white">
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <p class="mt-[2cqw] font-serif text-[7cqw] font-bold leading-none text-ipe-lime">{{DATE_DAY}}</p>
      <p class="mt-[0.5cqw] font-serif text-[2.5cqw] font-bold uppercase tracking-[0.15em] text-white/80">{{DATE_MONTH}}</p>
      <p class="mt-[2cqw] font-sans text-[1.9cqw] font-medium text-white">{{DAY_NAME}}</p>
      <p class="mt-[0.8cqw] font-sans text-[1.4cqw] leading-relaxed text-white/55">{{DAY_THEME}}</p>
    </div>
    <div class="flex flex-col justify-center p-[3.5cqw]">
      <!-- repeat one row per session -->
      <div class="flex gap-[2cqw] border-b border-ipe-navy/10 py-[1.1cqw] last:border-0">
        <span class="w-[8cqw] shrink-0 font-serif text-[1.5cqw] font-bold uppercase tracking-wide text-ipe-blue">{{TIME}}</span>
        <div class="flex-1">
          <p class="font-serif text-[1.7cqw] font-bold leading-tight">{{SESSION}}</p>
          <p class="mt-[0.2cqw] font-sans text-[1.2cqw] text-ipe-navy/55">{{SPEAKER_OR_LOCATION}}</p>
        </div>
      </div>
    </div>
  </div>
</div>
```

---

### 12. `mosaic`
- **Tone**: `navy` (asymmetric editorial grid: 1 big tile + 4 small).
- **Purpose**: Replaces the old `feature-grid` and `people-grid`. Use for tracks, programs, sessions, partners, speakers — anything that's a mix of "one hero + several supporting items."
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; big tile — `{{BIG_IMAGE}}`, `{{BIG_TAG}}`, `{{BIG_TITLE}}`; small tile (repeat 4×) — `{{SMALL_TITLE}}`, `{{SMALL_DESC}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1cqw] max-w-[80%] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    </div>
    <div class="mt-[2.5cqw] grid flex-1 grid-cols-3 grid-rows-2 gap-[1.5cqw]">
      <!-- big tile (spans 2 cols, 2 rows) -->
      <div class="relative col-span-2 row-span-2 overflow-hidden rounded-[1cqw] bg-white/5 ring-1 ring-white/10">
        <img src="{{BIG_IMAGE}}" alt="" class="absolute inset-0 h-full w-full object-cover opacity-50" />
        <div class="absolute inset-0 bg-gradient-to-t from-ipe-navy via-ipe-navy/40 to-transparent"></div>
        <div class="relative flex h-full flex-col justify-end p-[2cqw]">
          <p class="font-serif text-[1.2cqw] uppercase tracking-[0.25em] text-ipe-lime">{{BIG_TAG}}</p>
          <h3 class="mt-[0.6cqw] font-serif text-[2.6cqw] font-bold leading-tight">{{BIG_TITLE}}</h3>
        </div>
      </div>
      <!-- small tile (repeat 4 times to fill the right column + bottom row of the right column) -->
      <div class="rounded-[1cqw] bg-white/5 p-[1.6cqw] ring-1 ring-white/10">
        <div class="h-[0.3cqw] w-[2.5cqw] bg-ipe-lime"></div>
        <h3 class="mt-[1cqw] font-serif text-[1.7cqw] font-bold leading-tight">{{SMALL_TITLE}}</h3>
        <p class="mt-[0.5cqw] font-sans text-[1.15cqw] leading-snug text-white/60">{{SMALL_DESC}}</p>
      </div>
    </div>
  </div>
</div>
```

> **Note**: the 3×2 grid + 2×2 big tile leaves 2 cells for small tiles. For 4 small tiles, change the grid to `grid-cols-4 grid-rows-2` and the big tile to `col-span-2 row-span-2`.

---

### 13. `process-flow`
- **Tone**: `light`.
- **Purpose**: A sequence of 3–4 numbered steps with lime arrows between them. Use for "how it works", application flow, onboarding.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per step — `{{INDEX}}` (01, 02, 03), `{{STEP_TITLE}}`, `{{STEP_DESC}}`. Drop the trailing arrow on the last step.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1cqw] max-w-[75%] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="flex flex-1 items-center">
      <div class="flex w-full items-stretch gap-[1.5cqw]">
        <!-- step (repeat; remove the trailing arrow on the last step) -->
        <div class="flex flex-1 flex-col rounded-[1.2cqw] bg-white p-[2cqw] ring-1 ring-ipe-navy/10">
          <span class="font-serif text-[3cqw] font-bold leading-none text-ipe-lime">{{INDEX}}</span>
          <h3 class="mt-[1.2cqw] font-serif text-[1.8cqw] font-bold leading-tight">{{STEP_TITLE}}</h3>
          <p class="mt-[0.6cqw] font-sans text-[1.25cqw] leading-snug text-ipe-navy/65">{{STEP_DESC}}</p>
        </div>
        <div class="flex shrink-0 items-center font-serif text-[3cqw] text-ipe-lime">→</div>
      </div>
    </div>
  </div>
</div>
```

---

### 14. `closing-cta`
- **Tone**: `gradient` (default `bg-05` — cinematic horizon).
- **Purpose**: The final slide. Replaces the static contact-list closing. Carries a clear CTA + QR + handles.
- **Slots**: `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime), `{{BODY}}`, `{{CTA_LABEL}}` (e.g. `Apply at ipe.city`), `{{CTA_HINT}}` (e.g. `Applications close Mar 15`), `{{HANDLE_1/2/3}}`, `{{QR_CODE_PATH}}`. Swap `bg-05.png` for any `bg-0{{N}}.png`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="/branding/bg-05.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
  <div class="absolute inset-0 bg-gradient-to-t from-black/40 via-transparent to-black/55"></div>
  <div class="relative flex h-full flex-col justify-between p-[5.5cqw]">
    <div class="flex items-center justify-between">
      <img src="/branding/ipe-wordmark-light.svg" alt="Ipê Village" class="h-[3.4cqw] w-auto" />
      <div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
        <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
      </div>
    </div>
    <div class="max-w-[78%]">
      <h2 class="font-serif text-[5cqw] font-bold leading-[1.04]">
        {{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span>
      </h2>
      <p class="mt-[2cqw] max-w-[70%] font-sans text-[1.8cqw] leading-relaxed text-white/75">{{BODY}}</p>
    </div>
    <div class="flex items-end justify-between gap-[3cqw]">
      <div class="flex flex-col items-center">
        <a class="inline-flex items-center gap-[1cqw] rounded-full bg-ipe-lime px-[2.2cqw] py-[1.1cqw] font-serif text-[1.6cqw] font-bold text-ipe-navy">
          <span>{{CTA_LABEL}}</span><span>→</span>
        </a>
        <p class="mt-[1.2cqw] font-sans text-[1.3cqw] text-white/60">{{CTA_HINT}}</p>
      </div>
      <div class="flex items-end gap-[2cqw]">
        <div class="flex flex-col items-end gap-[0.4cqw] font-sans text-[1.3cqw] text-white/75">
          <span>{{HANDLE_1}}</span>
          <span>{{HANDLE_2}}</span>
          <span>{{HANDLE_3}}</span>
        </div>
        <div class="h-[10cqw] w-[10cqw] rounded-[0.8cqw] bg-white p-[0.6cqw]">
          <img src="{{QR_CODE_PATH}}" alt="Scan to learn more" class="h-full w-full" />
        </div>
      </div>
    </div>
  </div>
</div>
```

---

### 15. `agenda`
- **Tone**: `navy`. **Purpose**: early overview of what the deck covers.
- **Slots**: `{{EYEBROW}}`, `{{TITLE}}`; per item — `{{INDEX}}` (`01`), `{{LABEL}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.4cqw] font-serif text-[3.4cqw] font-bold leading-tight">{{TITLE}}</h2>
    <div class="mt-[2.4cqw] flex flex-col">
      <!-- repeat one row per item -->
      <div class="flex items-baseline gap-[2.4cqw] border-t border-white/12 py-[1.35cqw]">
        <span class="w-[5cqw] font-serif text-[2.4cqw] font-bold text-ipe-lime">{{INDEX}}</span>
        <span class="font-serif text-[2.2cqw] font-bold">{{LABEL}}</span>
      </div>
    </div>
  </div>
</div>
```

---

### 16. `bullet-list`
- **Tone**: `light`. **Purpose**: the default text slide — a point in a few bullets.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per bullet — `{{TEXT}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.6cqw] max-w-[72%] font-serif text-[3.6cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[2.6cqw] flex max-w-[78%] flex-col gap-[1.6cqw]">
      <!-- repeat one row per bullet -->
      <div class="flex items-start gap-[1.6cqw]">
        <span class="mt-[0.9cqw] h-[0.25cqw] w-[2.6cqw] shrink-0 bg-ipe-lime"></span>
        <p class="font-sans text-[1.9cqw] leading-snug text-ipe-navy/80">{{TEXT}}</p>
      </div>
    </div>
  </div>
</div>
```

---

### 17. `table`
- **Tone**: `navy` (swap to a dark `bg-0{{N}}` gradient + `bg-black/55` scrim for colour).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; `{{COL}}` headers; per cell `{{CELL}}` (first cell of a row is the bold label).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.4cqw] font-serif text-[3.2cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[2.6cqw]">
      <div class="grid grid-cols-4 border-b-[0.2cqw] border-ipe-lime pb-[1cqw]">
        <span class="font-serif text-[1.4cqw] font-bold uppercase tracking-[0.18em] text-ipe-lime">{{COL_1}}</span>
        <span class="font-serif text-[1.4cqw] font-bold uppercase tracking-[0.18em] text-white/55">{{COL_2}}</span>
        <span class="font-serif text-[1.4cqw] font-bold uppercase tracking-[0.18em] text-white/55">{{COL_3}}</span>
        <span class="font-serif text-[1.4cqw] font-bold uppercase tracking-[0.18em] text-white/55">{{COL_4}}</span>
      </div>
      <!-- repeat one row per record -->
      <div class="grid grid-cols-4 items-center border-b border-white/12 py-[1.5cqw]">
        <span class="font-serif text-[2cqw] font-bold text-white">{{CELL_1}}</span>
        <span class="font-sans text-[1.7cqw] text-white/80">{{CELL_2}}</span>
        <span class="font-sans text-[1.7cqw] text-white/80">{{CELL_3}}</span>
        <span class="font-sans text-[1.7cqw] text-white/80">{{CELL_4}}</span>
      </div>
    </div>
  </div>
</div>
```

---

### 18. `full-bleed-image`
- **Tone**: `gradient`. **Purpose**: cinematic edge-to-edge image with a text overlay.
- **Slots**: `{{IMAGE}}`, `{{EYEBROW}}`, `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime), `{{BODY}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <img src="{{IMAGE}}" alt="" class="absolute inset-0 h-full w-full object-cover" />
  <div class="absolute inset-0 bg-gradient-to-t from-black/85 via-black/20 to-black/30"></div>
  <div class="relative flex h-full flex-col justify-end p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.4cqw] font-serif text-[6cqw] font-bold leading-[1.0] tracking-tight">{{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span></h2>
    <p class="mt-[1.6cqw] max-w-[44%] font-sans text-[1.6cqw] leading-relaxed text-white/75">{{BODY}}</p>
  </div>
</div>
```

---

### 19. `chart`
- **Tone**: `light`. **Purpose**: a simple bar chart. Inline SVG (themes via tokens, prints cleanly).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; compute each bar's `x/y/height` for your data. Last bar lime (`#A2D729`); others `#002642`. Add `data-grow` to each `<rect>` so bars grow on entry.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.3cqw] font-serif text-[3.2cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[1cqw] min-h-0 flex-1">
      <svg viewBox="0 0 1120 540" class="h-full w-full" preserveAspectRatio="xMidYMid meet">
        <line x1="120" y1="470" x2="1000" y2="470" stroke="#00264220" stroke-width="2" />
        <!-- one group per bar (x = centre): -->
        <rect data-grow style="--i:0" x="205" y="438" width="150" height="32" rx="8" fill="#002642" fill-opacity=".9" />
        <text x="280" y="416" text-anchor="middle" font-family="Chakra Petch" font-weight="700" font-size="44" fill="#002642">{{VALUE}}</text>
        <text x="280" y="516" text-anchor="middle" font-family="DM Sans" font-size="30" fill="#00264288">{{LABEL}}</text>
        <!-- …repeat; last bar fill="#A2D729" -->
      </svg>
    </div>
  </div>
</div>
```

---

### 20. `matrix-2x2`
- **Tone**: `black`. **Purpose**: positioning map across two axes. Inline SVG; your item is the lime dot.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{BODY}}`; axis + competitor labels; place your dot's `<circle>`/`<text>` (label centred **above** the dot so it never clips).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <div class="flex h-full p-[5.5cqw] gap-[3cqw]">
    <div class="flex w-[33%] flex-col justify-center">
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.4cqw] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
      <p class="mt-[1.6cqw] font-sans text-[1.5cqw] leading-relaxed text-white/60">{{BODY}}</p>
    </div>
    <div class="relative min-w-0 flex-1">
      <svg viewBox="0 0 640 500" class="h-full w-full" preserveAspectRatio="xMidYMid meet">
        <rect x="330" y="40" width="270" height="200" fill="#A2D72912" />
        <line x1="40" y1="250" x2="600" y2="250" stroke="#ffffff22" stroke-width="2" />
        <line x1="320" y1="40" x2="320" y2="460" stroke="#ffffff22" stroke-width="2" />
        <text x="596" y="276" text-anchor="end" font-family="DM Sans" font-size="22" fill="#ffffff66">{{X_HIGH}}</text>
        <text x="44" y="276" font-family="DM Sans" font-size="22" fill="#ffffff66">{{X_LOW}}</text>
        <text x="332" y="36" font-family="DM Sans" font-size="22" fill="#ffffff66">{{Y_HIGH}}</text>
        <text x="332" y="474" font-family="DM Sans" font-size="22" fill="#ffffff66">{{Y_LOW}}</text>
        <!-- competitor: --><circle cx="150" cy="170" r="8" fill="#ffffff80" /><text x="150" y="150" text-anchor="middle" font-family="Chakra Petch" font-weight="600" font-size="23" fill="#ffffffaa">{{ITEM}}</text>
        <!-- you: --><circle cx="470" cy="140" r="14" fill="#A2D729" /><text x="470" y="112" text-anchor="middle" font-family="Chakra Petch" font-weight="700" font-size="30" fill="#fff">{{YOU}}</text>
      </svg>
    </div>
  </div>
</div>
```

---

### 21. `problem-solution`
- **Tone**: `light`. **Purpose**: the classic pairing, side by side.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}` (highlight a word with the lime underline); per side a label + points.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <img src="/branding/bg-light-02.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
  <div class="relative flex h-full flex-col p-[5.5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-navy/55">{{EYEBROW}}</p>
      <h2 class="mt-[1.4cqw] max-w-[70%] font-serif text-[3.2cqw] font-bold leading-tight">{{HEADLINE_1}} <span class="underline decoration-ipe-lime decoration-[0.4cqw] underline-offset-[0.8cqw]">{{HIGHLIGHT}}</span> {{HEADLINE_2}}</h2>
    </div>
    <div class="mt-[1cqw] grid flex-1 grid-cols-2 gap-[5.5cqw]">
      <div class="flex flex-col justify-center">
        <p class="font-sans text-[1.25cqw] uppercase tracking-[0.26em] text-ipe-navy/60">{{PROBLEM_LABEL}}</p>
        <div class="mt-[1.6cqw] space-y-[1.4cqw] font-serif text-[2cqw] font-medium leading-tight text-ipe-navy/70">
          <p>{{PROBLEM_POINT}}</p> <!-- repeat -->
        </div>
      </div>
      <div class="flex flex-col justify-center border-l-[0.15cqw] border-ipe-lime pl-[5.5cqw]">
        <p class="font-sans text-[1.25cqw] uppercase tracking-[0.26em] text-ipe-navy/70">{{SOLUTION_LABEL}}</p>
        <div class="mt-[1.6cqw] space-y-[1.4cqw] font-serif text-[2cqw] font-bold leading-tight text-ipe-navy">
          <p>{{SOLUTION_POINT}}</p> <!-- repeat -->
        </div>
      </div>
    </div>
  </div>
</div>
```

---

### 22. `feature-comparison`
- **Tone**: `light`. **Purpose**: options × attributes, with checks. Your column (last) is lime.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; `{{OPTION}}` headers; per row a `{{ATTRIBUTE}}` + a cell each (`✓` or `—`).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.3cqw] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[2.4cqw]">
      <div class="grid grid-cols-[40%_20%_20%_20%] items-end border-b-[0.2cqw] border-ipe-navy/15 pb-[1cqw]">
        <span></span>
        <span class="text-center font-serif text-[1.5cqw] font-bold text-ipe-navy/55">{{OPTION_1}}</span>
        <span class="text-center font-serif text-[1.5cqw] font-bold text-ipe-navy/55">{{OPTION_2}}</span>
        <span class="text-center font-serif text-[1.5cqw] font-bold text-ipe-lime">{{OPTION_3}}</span>
      </div>
      <!-- repeat one row per attribute; ✓ = font-bold (lime in your column), — = text-ipe-navy/25 -->
      <div class="grid grid-cols-[40%_20%_20%_20%] items-center border-b border-ipe-navy/10 py-[1.4cqw]">
        <span class="font-sans text-[1.7cqw] font-medium">{{ATTRIBUTE}}</span>
        <span class="text-center font-serif text-[2cqw] text-ipe-navy/25">—</span>
        <span class="text-center font-serif text-[2cqw] font-bold text-ipe-navy">✓</span>
        <span class="text-center font-serif text-[2cqw] font-bold text-ipe-lime">✓</span>
      </div>
    </div>
  </div>
</div>
```

---

### 23. `pricing-tiers`
- **Tone**: `navy`. **Purpose**: one column per tier; mark one as highlighted (lime fill).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per tier — `{{NAME}}`, `{{PRICE}}`, `{{PERIOD}}`, `{{FEATURE}}` (repeat). Highlighted tier swaps `bg-white/5 ring-1 ring-white/10` → `bg-ipe-lime text-ipe-navy`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col p-[5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.2cqw] font-serif text-[2.8cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    </div>
    <div class="mt-[2cqw] grid flex-1 grid-cols-3 gap-[2cqw]">
      <!-- repeat one column per tier -->
      <div class="flex flex-col rounded-[1.2cqw] bg-white/5 p-[2.2cqw] ring-1 ring-white/10">
        <p class="font-serif text-[1.4cqw] font-bold uppercase tracking-[0.2em] text-ipe-lime">{{NAME}}</p>
        <div class="mt-[1cqw] flex items-baseline gap-[0.6cqw]"><span class="font-serif text-[3.4cqw] font-bold leading-none">{{PRICE}}</span><span class="font-sans text-[1.2cqw] text-white/55">{{PERIOD}}</span></div>
        <div class="mt-[1.6cqw] flex flex-col gap-[0.7cqw]">
          <p class="font-sans text-[1.25cqw] text-white/75">{{FEATURE}}</p> <!-- repeat -->
        </div>
      </div>
    </div>
  </div>
</div>
```

---

### 24. `team`
- **Tone**: `light`. **Purpose**: people grid (photo + name + role). **Flexible count** — set the grid columns to fit: ≤4 → that many; 5–6 → 3; 7+ → 4.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per member — `{{PHOTO}}`, `{{NAME}}`, `{{ROLE}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col justify-center p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.3cqw] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[3cqw] grid gap-x-[2.4cqw] gap-y-[2.6cqw]" style="grid-template-columns:repeat(3,minmax(0,1fr))">
      <!-- repeat one card per member; change the 3 above to match the count -->
      <div class="flex items-center gap-[1.4cqw]">
        <img src="{{PHOTO}}" alt="" class="h-[5.2cqw] w-[5.2cqw] shrink-0 rounded-full object-cover ring-2 ring-ipe-navy/10" />
        <div><p class="font-serif text-[1.7cqw] font-bold leading-tight">{{NAME}}</p><p class="mt-[0.2cqw] font-sans text-[1.25cqw] text-ipe-navy/55">{{ROLE}}</p></div>
      </div>
    </div>
  </div>
</div>
```

---

### 25. `logo-wall`
- **Tone**: `black`. **Purpose**: partners / sponsors / "backed by". **Flexible count** — set the grid columns to fit (≤4 → that many; 5–6 → 3; 7+ → 4). Use monochrome white logos.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime); per logo — `{{LOGO}}` (a white SVG/PNG).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.4cqw] max-w-[66%] font-serif text-[3.2cqw] font-bold leading-tight">{{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span></h2>
    </div>
    <div class="mt-auto grid gap-[1.4cqw]" style="grid-template-columns:repeat(4,minmax(0,1fr))">
      <!-- repeat one cell per logo; change the 4 above to match the count -->
      <div class="flex items-center justify-center rounded-[1cqw] bg-white/[0.05] py-[2.6cqw] ring-1 ring-white/10">
        <img src="{{LOGO}}" alt="" class="h-[2.6cqw] w-auto opacity-75" />
      </div>
    </div>
  </div>
</div>
```

---

### 26. `timeline`
- **Tone**: `light`. **Purpose**: chronological **past** events. Inline SVG; add `data-draw="0"` to the baseline `<line>` so it draws on. Last node lime.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per event — `{{DATE}}`, `{{LABEL}}` (space node `cx` evenly).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-white text-ipe-navy">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.3cqw] font-serif text-[3.2cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="min-h-0 flex-1">
      <svg viewBox="0 0 1280 420" class="h-full w-full" preserveAspectRatio="xMidYMid meet">
        <line data-draw="0" x1="120" y1="240" x2="1160" y2="240" stroke="#00264235" stroke-width="3" />
        <!-- one group per event (last fill="#A2D729" r="15"): -->
        <circle cx="120" cy="240" r="10" fill="#002642" />
        <text x="120" y="180" text-anchor="middle" font-family="Chakra Petch" font-weight="700" font-size="42" fill="#002642">{{DATE}}</text>
        <text x="120" y="320" text-anchor="middle" font-family="DM Sans" font-size="30" fill="#002642aa">{{LABEL}}</text>
      </svg>
    </div>
  </div>
</div>
```

---

### 27. `roadmap`
- **Tone**: `navy`. **Purpose**: phased **forward** plan with status. Status dot: lime `#A2D729` (now/done) or `#ffffff40` (next).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per phase — `{{PERIOD}}`, `{{TITLE}}`, `{{ITEM}}` (repeat), `{{STATUS_DOT}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col p-[5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1.2cqw] font-serif text-[2.8cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    </div>
    <div class="mt-[2.2cqw] grid flex-1 grid-cols-4 gap-[1.8cqw]">
      <!-- repeat one card per phase -->
      <div class="flex flex-col rounded-[1cqw] bg-white/5 p-[1.8cqw] ring-1 ring-white/10">
        <div class="flex items-center gap-[0.8cqw]"><span class="h-[1cqw] w-[1cqw] rounded-full" style="background:{{STATUS_DOT}}"></span><span class="font-sans text-[1.1cqw] uppercase tracking-[0.2em] text-white/55">{{PERIOD}}</span></div>
        <h3 class="mt-[1cqw] font-serif text-[2cqw] font-bold text-ipe-lime">{{TITLE}}</h3>
        <div class="mt-[1.2cqw] flex flex-col gap-[0.7cqw]"><p class="font-sans text-[1.2cqw] leading-snug text-white/75">{{ITEM}}</p></div>
      </div>
    </div>
  </div>
</div>
```

---

### 28. `diagram-architecture`
- **Tone**: `black`. **Purpose**: boxes-and-arrows for a flow. Numbered node-cards with lime arrows.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{HEADLINE_HIGHLIGHT}}` (lime); per node — `{{N}}` (`01`), `{{TITLE}}`, `{{DESC}}`. Drop the trailing arrow on the last node.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg text-white" style="background:#06141b">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.4cqw] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}} <span class="text-ipe-lime">{{HEADLINE_HIGHLIGHT}}</span></h2>
    <div class="flex flex-1 items-center">
      <div class="flex w-full items-center gap-[1cqw]">
        <!-- node (repeat; remove the trailing arrow on the last) -->
        <div class="flex flex-1 flex-col rounded-[1.2cqw] bg-white/[0.06] p-[1.8cqw] ring-1 ring-white/10">
          <div class="flex h-[3cqw] w-[3cqw] items-center justify-center rounded-full bg-ipe-lime font-serif text-[1.4cqw] font-bold text-ipe-navy">{{N}}</div>
          <h3 class="mt-[1.2cqw] font-serif text-[1.9cqw] font-bold leading-tight">{{TITLE}}</h3>
          <p class="mt-[0.5cqw] font-sans text-[1.2cqw] leading-snug text-white/60">{{DESC}}</p>
        </div>
        <div class="flex shrink-0 items-center font-serif text-[2.4cqw] text-ipe-lime">→</div>
      </div>
    </div>
  </div>
</div>
```

---

### 29. `code-block`
- **Tone**: `black` (dark terminal). **Purpose**: a syntax-highlighted snippet.
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`, `{{FILENAME}}`, `{{CODE}}` (pre-formatted; wrap comments in `text-white/35`, highlights in `text-ipe-lime`).

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg text-white" style="background:#05151f">
  <div class="flex h-full flex-col p-[5.5cqw]">
    <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
    <h2 class="mt-[1.4cqw] font-serif text-[2.8cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    <div class="mt-[2cqw] flex flex-1 flex-col overflow-hidden rounded-[1cqw] bg-[#0a2233] ring-1 ring-white/10">
      <div class="flex items-center gap-[0.8cqw] border-b border-white/10 px-[1.8cqw] py-[1.1cqw]">
        <span class="h-[0.9cqw] w-[0.9cqw] rounded-full bg-white/25"></span><span class="h-[0.9cqw] w-[0.9cqw] rounded-full bg-white/25"></span><span class="h-[0.9cqw] w-[0.9cqw] rounded-full bg-ipe-lime/70"></span>
        <span class="ml-[1cqw] font-mono text-[1.1cqw] text-white/45">{{FILENAME}}</span>
      </div>
      <pre class="flex-1 px-[2cqw] py-[1.6cqw] font-mono text-[1.45cqw] leading-[1.7] text-white/80">{{CODE}}</pre>
    </div>
  </div>
</div>
```

---

### 30. `photo-grid`
- **Tone**: `navy`. **Purpose**: a gallery / moodboard. **Flexible count** — set the grid columns (≤3 → that many; 4–6 → 3; 7+ → 4).
- **Slots**: `{{EYEBROW}}`, `{{HEADLINE}}`; per photo — `{{SRC}}`, `{{CAPTION}}`.

```html
<div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
  <div class="flex h-full flex-col p-[5cqw]">
    <div>
      <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">{{EYEBROW}}</p>
      <h2 class="mt-[1cqw] font-serif text-[3cqw] font-bold leading-tight">{{HEADLINE}}</h2>
    </div>
    <div class="mt-[2cqw] grid flex-1 gap-[1.4cqw]" style="grid-template-columns:repeat(3,minmax(0,1fr))">
      <!-- repeat one cell per photo; change the 3 above to match the count -->
      <div class="relative overflow-hidden rounded-[1cqw]">
        <img src="{{SRC}}" alt="" class="absolute inset-0 h-full w-full object-cover" />
        <div class="absolute inset-0 bg-gradient-to-t from-ipe-navy/80 to-transparent"></div>
        <p class="absolute bottom-[1.1cqw] left-[1.2cqw] font-sans text-[1.15cqw] font-medium text-white/90">{{CAPTION}}</p>
      </div>
    </div>
  </div>
</div>
```

---

## What changed from the previous spec

- **Dropped** `tiers`, `feature-grid`, `people-grid`, `timeline`, `pricing` — they were nearly the same skeleton. Their use cases now live in: `mosaic` (features/people/tracks), `process-flow` (sequence/tiers), `agenda-day` (timeline/roadmap).
- **Added** `cover-gradient`, `manifesto`, `big-number`, `location`, `globe-statement`, `agenda-day`, `mosaic`, `process-flow`, `closing-cta`.
- **Wired up the unused brand kit**: gradients (`bg-02`, `bg-05`), `visual-map-sc`, `visual-globe-sphere`, `visual-heads`. The previous spec used 1 of 15 brand assets; this one uses 8.
- **Tone system** is now first-class — every template is labeled, and the "no two adjacent same-tone slides" rule prevents monotony.

---

## Authoring rules

1. **One idea per slide.** If a slide needs two headlines, split it.
2. **Alternate tones** — never run two slides of the same tone back to back. See the rhythm presets above.
3. Headlines in `font-serif` (Chakra Petch), body in `font-sans` (DM Sans).
4. Lime is an accent, never a background for body text. Navy + white is the base.
5. Use the date badge `APR 6 — MAY 1` on `cover-*`, `section-divider`, and `closing-cta` only — keep it off everywhere else so it stays a signal, not noise.
6. Keep stat values short (`+170`, `$3,610`, `+2M`). Labels ≤4 words.
7. Logos always go on navy with `brightness-0 invert` so every mark is uniform white.
8. On gradient frames, always include a dark scrim under the headline area for legibility — the shared primitive shows the pattern.
9. The chevron `symbol-*.svg` files render as the triple-globe mark at large sizes; only use them at small sizes (logo lockups, watermarks ≤6cqw) — never as a giant background.
10. All measurements inside a slide use `cqw` so the slide scales at any size.

---

## Copy guidelines (filling the slots)

Write like the brand: direct, confident, builder-to-builder, forward-looking (see
brand.md → Voice & Tone). Concrete length limits so slides never overflow their frame:

| Slot type | Limit | Notes |
|---|---|---|
| Eyebrow | 2–4 words, UPPERCASE | A label, not a sentence: `HOW IT WORKS`, `2025 — FIRST EDITION`. |
| Headline | ≤ 12 words | One idea. Put the punch word(s) in `{{HEADLINE_HIGHLIGHT}}` (lime). |
| Body paragraph | ≤ 2 sentences (~30 words) | Supports the headline; don't restate it. |
| Stat value | ≤ 6 chars | `+170`, `$3,610`, `+2M`, `3`. |
| Stat / step / tile label | ≤ 4 words | |
| Quote (manifesto) | ≤ 28 words | Highlight the turn of phrase in lime. |
| CTA label | ≤ 4 words | Verb-first: `Apply at ipe.city`. |

- Exactly **one** lime highlight per headline — it's an accent, not a highlighter.
- Numbers beat adjectives: prefer a `big-number`/`stat-grid` over "huge", "massive".
- If copy won't fit the limit, the slide is doing too much — split it into two.

---

## Worked example (end-to-end)

Three filled slides to paste into the scaffold's paste zone (tones gradient → navy →
gradient). Opened in a browser they present themselves; real decks follow the same pattern.

```html
<!-- paste these <section> blocks inside <div class="stage"> in the scaffold above -->

  <!-- Slide 1 — cover-gradient (tone: gradient) -->
  <section class="deck-slide slide--cover-gradient">
    <div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
      <img src="https://www.ipe.city/branding/bg-02.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
      <div class="absolute inset-0 bg-gradient-to-r from-black/70 via-black/25 to-transparent"></div>
      <div class="relative flex h-full flex-col justify-between p-[5.5cqw]">
        <div class="flex items-center justify-between">
          <img src="https://www.ipe.city/branding/ipe-wordmark-light.svg" alt="Ipê Village" class="h-[3.4cqw] w-auto" />
          <div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
            <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
          </div>
        </div>
        <div class="max-w-[68%]">
          <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">Village 2026</p>
          <h2 class="mt-[2cqw] font-serif text-[5.8cqw] font-bold leading-[1.02] tracking-tight">
            A month-long pop-up village for <span class="text-ipe-lime">the network state.</span>
          </h2>
        </div>
        <div class="flex items-end justify-between font-sans text-[1.5cqw] text-white/75">
          <div class="flex items-center gap-[1.5cqw]">
            <span class="h-[0.2cqw] w-[5cqw] bg-ipe-lime"></span>
            April 6 — May 1, 2026
          </div>
          <span class="text-white/50">Jurerê Internacional, Brazil</span>
        </div>
      </div>
    </div>
  </section>

  <!-- Slide 2 — stat-grid (tone: navy) -->
  <section class="deck-slide slide--stat-grid">
    <div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-ipe-navy text-white">
      <div class="flex h-full flex-col p-[5.5cqw]">
        <div>
          <p class="font-serif text-[1.5cqw] font-medium uppercase tracking-[0.28em] text-ipe-lime">2025 — First edition</p>
          <h2 class="mt-[1.5cqw] max-w-[70%] font-serif text-[3.4cqw] font-bold leading-tight">Brazil's first pop-up village was a massive success.</h2>
        </div>
        <div class="flex flex-1 items-center">
          <div class="grid w-full grid-cols-3 gap-x-[3cqw] gap-y-[3.5cqw]">
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">+170</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">Residents &amp; visitors</p></div>
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">+2M</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">Social media views</p></div>
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">+30</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">Apps created</p></div>
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">$3,610</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">Spent onchain locally</p></div>
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">+10</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">Countries represented</p></div>
            <div class="border-l-[0.3cqw] border-ipe-lime pl-[1.6cqw]"><p class="font-serif text-[5.2cqw] font-bold leading-none text-ipe-lime">3</p><p class="mt-[0.8cqw] font-sans text-[1.5cqw] text-white/65">New couples</p></div>
          </div>
        </div>
      </div>
    </div>
  </section>

  <!-- Slide 3 — closing-cta (tone: gradient) -->
  <section class="deck-slide slide--closing-cta">
    <div class="@container relative w-full aspect-[16/9] overflow-hidden rounded-lg bg-black text-white">
      <img src="https://www.ipe.city/branding/bg-05.png" alt="" class="absolute inset-0 h-full w-full object-cover" />
      <div class="absolute inset-0 bg-gradient-to-t from-black/40 via-transparent to-black/55"></div>
      <div class="relative flex h-full flex-col justify-between p-[5.5cqw]">
        <div class="flex items-center justify-between">
          <img src="https://www.ipe.city/branding/ipe-wordmark-light.svg" alt="Ipê Village" class="h-[3.4cqw] w-auto" />
          <div class="flex items-center gap-[1cqw] font-serif text-[1.4cqw] tracking-[0.25em] text-white/70">
            <span>APR 6</span><span class="text-ipe-lime">—</span><span>MAY 1</span>
          </div>
        </div>
        <div class="max-w-[78%]">
          <h2 class="font-serif text-[5cqw] font-bold leading-[1.04]">See you in <span class="text-ipe-lime">Florianópolis.</span></h2>
          <p class="mt-[2cqw] max-w-[70%] font-sans text-[1.8cqw] leading-relaxed text-white/75">Applications for residents, Hacker House partners, and speakers are open. We pair on a rolling basis until Mar 15.</p>
        </div>
        <div class="flex items-end justify-between gap-[3cqw]">
          <div class="flex flex-col items-center">
            <a class="inline-flex items-center gap-[1cqw] rounded-full bg-ipe-lime px-[2.2cqw] py-[1.1cqw] font-serif text-[1.6cqw] font-bold text-ipe-navy"><span>Apply at ipe.city</span><span>→</span></a>
            <p class="mt-[1.2cqw] font-sans text-[1.3cqw] text-white/60">Applications close Mar 15</p>
          </div>
          <div class="flex flex-col items-end gap-[0.4cqw] font-sans text-[1.3cqw] text-white/75">
            <span>jean@ipe.city</span><span>@ipecity on X</span><span>docs.ipe.city</span>
          </div>
        </div>
      </div>
    </div>
  </section>
```

Dropped into the scaffold and opened in a browser, these present themselves (→ to advance) and
print to a 16:9 PDF. Add the rest the same way — one `<section class="deck-slide slide--{id}">`
per template block, tones alternating and canvases varied — for a complete, world-class deck.
