1---2name: create-slides3description: Creates and materially redesigns polished, dependency-free HTML slide decks from five styled templates, with stepped and automatic reveal animations driven by named motion presets, a cross-slide title morph, and PDF plus MP4 export at 1080p, 2K and 4K with reveals optionally timed to a narration/caption track. Use this skill when asked to create, build, redesign, restyle, or export a slide deck, presentation, pitch deck, talk, tutorial/video slides, course slides, slide b-roll for a video, or keynote-style slides as a web page. Do not use for ordinary websites or apps, editing proprietary slide files (PowerPoint, Keynote, Google Slides), research-only requests without a deck deliverable, or generating slide images only.4license: MIT5---67# Create Slides89## Critical rules1011- No libraries, CDNs, frameworks, or build steps in the deck itself. It must12 open directly from a local `index.html`.13- **Never rebuild `core/slides.js`.** Navigation, key handling and the14 `data-enter`/`data-exit` contract are fixed. Extend by layering on15 `SlidesRuntime.controller`, the way `core/morph.js` does.16- **Never edit `core/slides.css` per deck.** It owns structure, archetype17 layout and the reveal presets. Override in `theme.css`, or in `deck.css`.18- Fonts must be inlined as data URIs (`tools/fonts.mjs`). `@font-face` files are19 blocked over `file://`, so a deck opened by double-click loses them.20- Never invent facts, statistics, quotes, images, or licenses. Research current21 claims with the `web-research` skill, cite sources, and record where every22 asset came from.23- Derive tokens and content from the subject; derive the *look* from a template.24 Do not invent a new layout system mid-pass.25- Write semantic HTML: real headings, lists, figures, one26 `<section class="slide">` per slide in DOM order.27- **"Use the space" ≠ stretching boxes to fill the viewport.** It means stable28 hierarchy, content-sized modules, comfortable gaps, and intentional margin.29- **Verify before reporting done.** `npm run qa` for the deck, `npm run audit`30 after any recording. Never call a deck or an export finished on the strength31 of having looked at it.32- **User-owned copy is sacred.** After the user edits text, change layout and33 CSS only — never rewrite their wording unless asked.34- State every assumption explicitly in the final report.3536## Workflow37381. Inspect everything supplied — content, data, brand, delivery mode, and any39 script or captions the deck must back.402. **Ask one grouped question** covering only the real gaps. Always include the41 look unless the user named a template or gave brand direction that settles42 it. Defaults in brackets if you must proceed on assumptions:43 - **Look:** `dark-marker` (courses, tutorials) | `light-editorial` (talks,44 reports) | `midnight-tech` (developer content) | `bold-keynote` (pitches) |45 `minimal-mono` (research talks) — one line each, and say which you'd pick46 - **Delivery:** live talk | **recorded video/tutorial** | self-paced send47 - **Reveal model:** multi-step | **one-step staggered** | none48 - **Density:** sparse keynote | **tutorial-comfortable**493. Research unknown or current facts before writing any slide body.504. Read [`references/design.md`](references/design.md). Outline the deck as51 **titles only** and check that sequence carries the message before writing52 any body copy.535. Scaffold the deck:54 - `assets/core/` → `core/`, `assets/skeleton.html` → `index.html`55 - the chosen `assets/templates/<name>/` → `theme.css`, `fonts.json`56 - `assets/tools/` → `tools/`, `assets/starter/*` → deck root57 (`gitignore` → `.gitignore`)58 - create an empty `deck.css`59 - `npm install && node tools/fonts.mjs`60 - `npm run dev` renders every archetype the template offers — read it before61 writing slides.626. Adapt **tokens only** to the subject, then write the slides. Read63 [`references/web-slides.md`](references/web-slides.md) for the DOM,64 composition and archetype contract, and [`references/motion.md`](references/motion.md)65 before setting any reveal or preset.667. Verify: `npm run qa`, and fix everything it reports.678. Export if asked — [`references/export.md`](references/export.md):68 `npm run pdf`, `npm run record` / `record:2k` / `record:4k`, then69 `npm run audit`. When the deck backs a recorded voiceover, time the reveals70 from the caption file: a sidecar `timings/<video>.json` per video, validated71 with `node tools/record.mjs --timing <file> --plan`. Timings never go in the72 markup — the deck only gains a `data-slide` handle per timed slide.739. Report the files, how to open them, the controls, the template used, every74 assumption, and sources for any researched claim or asset.7576## Resources7778| Path | Read when |79|---|---|80| [`references/design.md`](references/design.md) | Before outlining — audience, story shape, density, anti-patterns |81| [`references/web-slides.md`](references/web-slides.md) | Before editing markup — DOM/state contract, composition, archetypes, presets |82| [`references/templates.md`](references/templates.md) | Choosing, adapting, or authoring a template; the token contract |83| [`references/motion.md`](references/motion.md) | Adding any reveal, preset, morph, or animation |84| [`references/export.md`](references/export.md) | Producing a PDF or video, or timing reveals to narration |85| `assets/core/` | `slides.css`, `slides.js`, `morph.js` — copied verbatim into every deck |86| `assets/optional/` | `router.js` — hash deep links; copy in only when asked ([web-slides.md](references/web-slides.md#url-routing-opt-in)) |87| `assets/skeleton.html` | One deck skeleton, shared by every template |88| `assets/templates/<name>/` | `theme.css`, `fonts.json`, `template.md` |89| `assets/tools/` | `fonts` · `qa` · `export-pdf` · `record` · `audit-video` |90| `assets/starter/` | `package.json`, `vite.config.js`, `gitignore` |91| `scripts/slides-runtime.test.mjs` | Guards the runtime contract; run after any change to it |9293## Assets and provenance9495- Logos: take the vendor's own site icon first. Aggregators go stale — building96 one deck, a major product had no entry at all, another name resolved to an97 unrelated company, and a third offered only a retired one-colour mark.98- Verify the mark is current, record every source in a `CREDITS.md` beside the99 files, and never draw an approximation of a real logo.100- Light-on-dark app icons need a full-bleed tile (`.tool__tile--dark`), not a101 white one.102103## Constraints104105- Do not add presenter consoles, autoplay, URL routing, or touch gestures106 unless asked. When URL routing *is* asked for, copy `assets/optional/router.js`107 rather than writing one — the jump-without-replaying-a-morph handling is the108 hard part.109- Do not fork the runtime contract in `references/web-slides.md` without an110 explicit request; mirror any real runtime change in111 `scripts/slides-runtime.test.mjs`.112- Decks stay self-contained: no network requests at presentation time, no113 telemetry, no remote fonts.