Every feature on the next slides is demonstrated live, by the slide itself. This presentation is fully voiced: V toggles the voice, N changes it. Use → to advance. Press ? anytime.
Builds
Keynote-style progressive reveals — the container opts in
data-build on the list — every item steps in order
One attribute, zero per-item classes
Hidden steps hold their space — layout never shifts
Authored once with tokens — recolored by all 46 themes
Charts From Data
Declare the numbers — the theme paints them. No chart library, no images
Charts Build Like Diagrams
data-build="draw" — each series draws in on ⟨CLICK⟩, same machinery as the strokes
Comparison Slides
data-layout="split" — two sibling blocks become the columns
Pros
The columns share a top edge — unequal heights, headings still line up
No per-column flexbox to hand-roll
split-flip mirrors the pair
Cons
Two columns, deliberately — three is another slide
A third block is a footer, not a third column: full width, centred, under both — exactly where a note about the whole comparison belongs.
Auto-Animate
Magic Move between adjacent slides
Extract
Transform
Load
Advance once — the middle box takes over the stage.
Auto-Animate
Zoom into the detail — FLIP-morphed, HTML and SVG alike
Transform
validate the schema
enrich with lookups
Element Animations
Looping attention effects — only while the slide is active
pulsefloatshakespinblink
bounceswingglowbreathe
All of it collapses under prefers-reduced-motion.
Code, Stepped Line by Line
This snippet is the source of the builds slide you just saw
<ul data-build="fade-up">
<li>data-build on the list — every item steps</li>
<li>One attribute, zero per-item classes</li>
<li>Hidden steps hold their space</li>
</ul>
<p data-build="pop">…and leaves can pop in on their own.</p>
Math, Rendered Native
data-math + LaTeX → MathML Core — no webfonts, no build step, no network
Inline math sits right in the sentence — light moves at \(c = 1/\sqrt{\mu_0 \varepsilon_0}\) —
while \$ keeps \$5 five dollars, and a lone $ never trips the parser.
Terminal Recordings
Real PTY output, replayed step by step — never a video
Slides From a Prompt
Describe the slide — an agent writes the Decklight
Kafka: Producer to Consumers
The slide the agent generated — shipped untouched
62 Themes in 5 Packs
Try it now — this deck ships them all
T
theme picker — packs first, Enter drills in, ✳ flattens, type to filter
, / .
cycle themes — crossing a pack asks you to confirm
⌃T
generate a brand-new theme (WCAG-fitted, rule-conforming)
⌃⇧T
save it — localStorage + a portable .css download
[ / ]
cycle the deck's type through nine font stacks
A Theme Is Just a File
No registry, no version number — the unit you share is one CSS file
Added themes join the picker under an Added pack — they cycle, resolve from ?theme=, and bundle like any other
A file that fails leaves the deck byte-for-byte unchanged — no deck ever carries a broken theme
Re-adding the same name replaces it in place: add is the update path
Presenting
Everything a stage needs, no server required
S — speaker view: thumbnails, timer, notes synced to builds
S again — rehearse mode: cue cards instead of prose (this deck has them)
G — slide finder with live preview · / the command palette
O — overview grid · B blackout · F fullscreen
Pinned titles, auto-subtitles, per-slide print, the brand-logo chrome below
The Deck Speaks
V narrates the notes · N picks the voice · C captions it
The voice already on your machine — macOS say, Windows SAPI. No key, no download
Or a cloud voice, or piper offline — decklight tts sets itself up on first run
Recorded tracks stream from a bucket; a signed manifest shows ☁ and its time left
A deck with a voice-over says so — a pill fades in, and clicking it plays
data-narration-pause="2" — a slide that earns a beat gets one
Full-Bleed Backgrounds
One attribute on the section — the deck does the rest
data-background-image — cover by default; contain and position on demand
data-background-dim — a canvas-colored wash keeps the text readable
class="full-bleed" on any <img> — the same treatment for content images
decklight bundle inlines backgrounds like every other image
Background Video
Muted, looping — and honest about print
Plays while the slide is active — paused for real when you move on
data-background-poster — the still that stands in under ?print
Bundles keep the clip external — same policy as character video
Bring the Deck You Already Have
decklight import — PowerPoint, Keynote, or a Google Slides link
Slides, nested bullets, notes, images, tables — and PowerPoint's own per-paragraph builds become data-build
A content importer, not a pixel renderer: the old template's look is replaced by decklight theming, which is what buys you everything else in this deck
What can't come across — SmartArt, charts, embedded media — is named with its slide number and what to rebuild it as. Never a silent drop
One File to Ship
The CLI records, refreshes, exports — and flattens
decklight import talk.pptx # PowerPoint · Keynote · Google Slides
decklight cast demo.term.yaml # record a cast in a real PTY
decklight refresh casts/ # re-record everything, report drift
decklight pdf deck.html # every slide to PDF — overflows named
decklight bundle deck.html --all # ONE self-contained HTML, themes included
This showcase bundles to a single file that works offline — logo, casts, and all 46 themes embedded.
Verified by Construction
Built for authors who can prove their deck works
Overflow guardrail: clipped content marks itself data-overflow — decklight pdf checks a whole deck in one pass and names the offenders
Every theme passes WCAG gates and codified palette rules
Generated themes can't fail validation — property-tested across seeds
Headless-render assertions ship in the repo; SPEC.md is the contract
One HTML File. No Build Step.
Two stylesheets, one script — view source on this deck to start yours
Press O to see everything you just watched, or / to jump back anywhere.
Quizzes
The last thing every presentation needs
What's the last thing everyone needs when they've just followed a presentation? A quiz, of course! So, Decklight:
Options are plain HTML inputs — the theme tokens style them
data-narration="hold" — voice mode waits while you answer
Live re-grading — change an answer, the verdict follows
A podium with bronze · silver · gold — under frantic confetti
Pop Quiz
Twelve questions on what you just watched — 80% to pass
Click an answer on each slide, then → to move on. Your score is tallied on the last slide — nothing is graded until you ask for it.
Question 1 of 12
What attribute turns a container's children into Keynote-style progressive reveals?
Question 2 of 12
Where do the deck's inline SVG diagrams get their color from?
Question 3 of 12
What makes two adjacent slides Magic-Move between each other?
Question 4 of 12
How many looping data-animate effects did the element-animations slide show?
Question 5 of 12
A slide centres its content. What happens when that content is taller than the slide?
Question 6 of 12
How are the deck's terminal recordings stored and replayed?
Question 7 of 12
How many themes, across how many packs, ship with this deck?
Question 8 of 12
Which key opens the theme picker while presenting?
Question 9 of 12
Which CLI command flattens a whole deck — casts, themes and all — into one self-contained HTML file?
Question 10 of 12
What marks a slide whose content doesn't fit, so both humans and headless tests can catch it?
Question 11 of 12
In a data-layout="split" slide, what does a third content block become?
Question 12 of 12
What does decklight import do with a PowerPoint chart it can't convert?