Build presentation materials as HTML through a two-phase process: brainstorm first, build second. Never produce slides before the narrative structure is solid.
Conduct a structured dialogue before writing any code.
Audience & Format:
Content Core:
Narrative Intent:
Continue dialogue until:
Separate concerns into three files for maintainability:
text
project/
presentation.html # Semantic structure only, no inline styles except layout-specific
css/style.css # All visual styling, animations, component patterns
js/deck.js # Navigation, interactions, TOC, expandable logic
images/ # Screenshots, avatars, demo videos
The presentation is NOT a static slide deck. It uses interactive detail-on-demand patterns:
1. Tab Cards — Clickable cards that switch a shared detail area below
html
<div class="grid-3">
<div class="card tab-card active" data-tab="topic-a">Summary A</div>
<div class="card tab-card" data-tab="topic-b">Summary B</div>
</div>
<div class="tab-detail-area">
<div class="tab-detail active" data-tab="topic-a">...full detail...</div>
<div class="tab-detail" data-tab="topic-b">...full detail...</div>
</div>
Use when: Multiple sub-topics exist under one slide, each with rich detail.
2. Expandable Details — Cards that expand to reveal deeper content
html
<div class="card expandable" data-expand-target="detail-id">Summary</div>
<div class="expand-content-full" id="detail-id">
<div class="expand-inner">...detailed content...</div>
</div>
Use when: A slide has layered information — show summary by default, expand for evidence/examples. Supports data-default-open attribute.
3. Left-Tab + Right-Detail Panel — Vertical tab list with adjacent detail pane
Use when: Each tab has substantial content (code blocks, diagrams) that benefits from full-width display. Example: security isolation details.
ComponentCSS ClassUsageCards.card .card-accent .card-{color}Discrete points, categorized itemsTags.tag .tag-{color}Labels, keywords, status badgesGrids.grid-2 .grid-3Parallel comparisonsQuote.quoteKey insights, memorable one-linersArchitecture boxes.arch-box .arch-box.primarySystem diagramsCode blocks<pre> with .comment .keyword .string .func .op spansSyntax-highlighted dark codeComparison.compare-box .compare-before .compare-afterBefore/after with positioned labelsTimeline.timeline .timeline-itemSequential events with time markersPitfall insight.pitfall-step .pitfall-insightHighlighted takeaway badgesBig numbers.big-numberMetrics with placeholder __ for pending data
css
--primary: #1a73e8; /* neutral/default/architecture */
--accent: #ea4335; /* problem/danger/before */
--accent-green: #34a853; /* solution/success/after */
--accent-yellow: #fbbc04; /* caution/intermediate */
--accent-purple: #9334e6; /* advanced/depth/evaluator */
.fade-in .fade-in-d1 through .fade-in-d6 for progressive reveal.anim-step + .anim-flow container, revealed sequentially by JS.flow-node + .flow-connector revealed node-by-node with delays@keyframes tabFadeIn for smooth panel switching.slide-title): Gradient background, white text.slide-section): Large faded number + heading.arch-box nodes.compare-before / .compare-after side-by-side.big-number with __ placeholders for pending metricstext
deck.js handles:
- Slide navigation (keyboard ←→/Space/PgUp/PgDn, touch swipe, ESC for TOC)
- Progress bar + counter update
- Tab card switching (click → toggle active class on cards and detail panels)
- Expandable toggle (click → open/close with accordion behavior)
- Security panel switching
- Animated flow triggering (reset + staggered reveal on slide enter)
- Default-open restoration on slide enter
- Expand state cleanup on slide leave
data-title on section/key slides for TOC generation