# Deck kit: In Motion Automation decision decks

Rev 2 · 4 November 2026 · Built from the decks Jake rated "a notch above" (4 Nov 2026). This kit is the house standard for every internal decision deck. Copy it; never restyle it.

Live copy: https://brand.agentsinmotion.ai/research/deck-kit/ · download: https://brand.agentsinmotion.ai/research/deck-kit/deck-kit.zip · reference render: [EXAMPLE-DECK.pdf](EXAMPLE-DECK.pdf)

## What a deck is

A decision deck compresses a finished report. The report comes first and its figures are reused as the same files; the deck never adds research. True 16:9 (13.333 × 7.5 in, 960 × 540 pt), cool vibe, Geist, 10 to 16 slides.

## Use it

| # | Step | Done when |
|---|---|---|
| 1 | Copy `deck-build/` into the pack as `<pack>/deck-build/`. Charts live in `<pack>/figures/`, stills in `<pack>/assets/deck/`. | Folder in place |
| 2 | Set `OUT`, `TITLE`, `BUILT_FROM` and `FIGH` at the top of `build.py`. | Four values set |
| 3 | Write `sources.py` from the report's `references.bib`; label vendor claims, surveys (with sample size) and snippets. | Every `{{s:key}}` resolves |
| 4 | Build `body.html` from the template slides below, one finding per slide. Deck-only classes go in `deck-own.css` with a short prefix. | No new look invented |
| 5 | `python3 build.py && ./export.sh`. The PDF prints through `brand/export.sh --deck-16x9`; set `IMA_EXPORT` if the kit sits outside the vault. | PDF is 960 × 540 pt |
| 6 | Open the contact sheet `export.sh` prints and look at every slide. Fix overlap, cut-off text, a squeezed column, a caption touching the source line, a sources slide spilling past four columns. Rebuild and look again. | Every slide clean |
| 7 | Run the house writing ship check on `body.html` (grep for dashes and banned words) and write `IMA-VOICE-LOCK.md` beside the pack. | Ship check passes |

## Slide patterns (all in `deck-build/body.html`)

| Slide | Pattern | Classes |
|---|---|---|
| Cover | Navy, photo panel on the right with a one-line caption, deck name with the orbit mark, "Decision deck" kicker, the main finding as the display headline, Purpose and Main finding ledes | `ima-slide--navy`, `cover-photo`, `cover-photo-cap`, `ima-display`, `lede` |
| Internal badge | Every internal deck: yellow `Internal` badge after the date on the cover, and the cover number line reads `Confidential · decision research · internal` | `internal-tag` |
| Main message | One plain paragraph and three big numbers or verdicts | `message`, `cols3`, `stat`, `stat-num`, `stat-num verdict` |
| Terms | Up to nine definitions, so every later term is common ground first | `defs3`, `def` |
| Figure and text | Report figure left (same PNG), four short bold-led paragraphs right; fix the left column at 640 px when it holds a grey band | `fig-row`, `fig`, `read`, `read-band` |
| Table and photo | Rows with the verdict in bold at the start of each cell, a still on the right | `with-photo`, `ima-table rules`, `photo`, `photo-cap` |
| Offer | Six jobs in a grid, a price column with setup and monthly | `offer`, `jobs`, `job`, `price` |
| Dated tests | By, test, continue-if | `ima-table tests` |
| Decisions | The Decider's calls in two columns, with our recommendation as a pill | `calls`, `rec` |
| Sources | Numbered by first use, four columns, links in mono | `srcs` |

Every content slide has: the deck name and wordmark at the top, a mono kicker, an H1 that states the slide's finding as one full sentence, a source line with numbered sources, and one slide number.

## Type sizes (do not shrink to fit; cut words instead)

| Element | Size |
|---|---|
| Cover display headline | 38 px |
| Slide H1 | 27 px |
| Main message paragraph | 21 px |
| Big number | 40 px (34 px for verdict words and the price column) |
| Reading text beside a figure | 13.8 px |
| Table text | 12.8 px (rules), 14.2 px (tests) |
| Decisions | 15.5 px |
| Source line | 12 px |

## Charts

Draw them with `figures/house_figures.py` (`finish()` adds the finding title above and the source note below; Geist is bundled in `figures/fonts/`). One chart file serves both the report and the deck. Set each figure's deck height in `FIGH` so the chart fills its column without pushing the caption into the source line (typical: 300 to 380 px). Rules: GUIDE.md, Dataviz.

## Stills (illustrations)

| Rule | Detail |
|---|---|
| Recipe | Overhead time from GUIDE.md: elevated camera, one still person or object, everyone else a long-exposure streak, dusk or night, cyan and magenta light in streaks and reflections, real physical scale |
| Subject | The buyer's world (a shop floor, a flight line, a warehouse, a front office), never a stock-photo handshake |
| Never | Readable text, logos, insignia, tail numbers, a blank screen, the client's real site shown as if photographed |
| Tool | treg `reapi.image-gen.gemini-3-pro-image`, `size: "16:9"`, `resolution: "2K"`, about $0.03 each; poll `reapi.tasks.get`; log the call in the pack's `SPEND.md` |
| Prompt shape | "Photoreal cinematic photograph at dusk, elevated camera, <place>. One <person/object> stands perfectly still <doing what>. Everyone else is a soft long-exposure light streak. <Two or three physical details.> Cyan and violet reflections on <surface>. Real physical scale. No text, no logos, no readable labels." |
| Files | Keep the 2752 px original in `assets/`; put a copy at 1800 px, JPEG quality 78, in `assets/deck/` for embedding |
| Caption | Begins "Illustration:" and names what is in the frame, so no reader takes it for the client's site |
| Count | One for the cover, then two or three inside, beside tables or job grids; charts carry the rest |

## Never

- A4 landscape, Inter, a third look, glow logos on content slides
- A count in a headline that names a list; em or en dashes; consultant slogan headlines
- treg, spend or agent process on slides
- A figure redrawn with different numbers than the report
- An internal deck without the Internal badge
