Create zero-dependency, interactive HTML presentations that run in any browser. Every output is a single self-contained HTML file with built-in navigation, commenting, editing, and presentation capabilities.
Ask ALL questions in a single call:
Question 1 — Purpose (header: "Purpose"): What is this presentation for? Options:
Question 2 — Brand (header: "Brand"): Which brand preset? Options:
Question 3 — Content (header: "Content"): Do you have content ready? Options:
Question 4 — Length (header: "Length"): Approximately how many slides? Options: Short 5-8 / Medium 8-14 / Long 14+
Question 5 — Interactive Features (header: "Features"): Which interactive features to include? Options:
Language handling (NO question needed — apply automatically):
If user selected Custom brand, follow up with:
If user has content, ask them to share it. Then proceed to Phase 2.
Based on user content, plan the slide deck using available slide types and components.
TypeWhen to UseCoverFirst slide — title, date, team, optional logosSection DividerTransition between major topics — colored background, section numberContentMain information slides — header bar + body componentsClosingLast slide — thank you, contact, next steps
Read components.md for full HTML templates.
ComponentBest ForMetrics GridKPI cards (3-column) with values and change indicatorsBi-weekly TablePeriod-over-period comparison with insight cardsFeature TableFeature comparisons, scope definitions, matricesTwo-Column GridFindings vs Actions, Pros vs Cons, Before vs AfterAction ListAction items, scope items, decisions with ownersTimelineRoadmap milestones, project phasesStatus BadgeInline status indicators (on-track, at-risk, done)Screenshot SlotReplaceable image placeholder for operational screenshots (dashed border when empty, auto-shows image when src set)
Slide TypeMaximum ContentCoverTitle + subtitle + metaSection DividerTitle + subtitle + section numberContent (text)1 heading + 1 paragraph + 1 componentContent (table)1 heading + 1 table (up to 12 rows)Content (mixed)1 heading + 2 smaller componentsClosingTitle + subtitle + meta
Content exceeds limits? Split into multiple slides. Never cram, never scroll.
Present the slide plan to the user for confirmation before generating.
--accent-primary, --accent-secondary, --color-navy, fonts, and logo. Keep all other structural tokens unchanged.text
<!DOCTYPE html>
<html lang="zh">
<head>
<!-- Google Fonts (based on brand preset) -->
<style>
/* 1. CSS Custom Properties (from design-tokens.md — brand-resolved) */
/* 2. Reset & Base Typography */
/* 3. Viewport Fitting (MANDATORY — from viewport-chrome.md) */
/* 4. Language Toggle (bilingual only — from viewport-chrome.md) */
/* 5. Sidebar Navigation */
/* 6. Progress Bar */
/* 7. Comment Panel */
/* 8. Zoom Controls */
/* 9. Slide Type Styles (cover, section, content, closing) */
/* 10. Component Styles */
/* 11. Edit Mode */
/* 12. Present Mode */
/* 13. Responsive Breakpoints */
/* 14. Embedded Logos (if applicable) */
</style>
</head>
<body class="lang-cn">
<!-- Chrome: sidebar + toggle (left), progress bar (top, slide area only), horizontal toolbar (top-right: lang→present→zoom→edit→comment), comment panel (right) -->
<!-- SLIDES (each is a <section class="slide">) with lang-en/lang-cn spans -->
<!-- JS: SlidePresentation class -->
</body>
</html>
Before generating, read ALL reference files:
Every user-visible text element must contain both language spans:
html
<h2>
<span class="lang-en">Architecture Overview</span>
<span class="lang-cn">架构概览</span>
</h2>
<p>
<span class="lang-en">Smart acts as a Package Registry.</span>
<span class="lang-cn">Smart 作为 Package Registry。</span>
</p>
Rules:
<span class="lang-en"> and <span class="lang-cn">data-title (CN) and data-title-en (EN) attributes on slides; data-group (CN) and data-group-en (EN) on group headers. Sidebar switches language along with body class.<html lang> attribute should be set to "zh" (CN is the default display language)lang-cn — CN is shown first, user toggles to EN<li>, not the <li> itself<td>/ <th>, not the cell itselfCSS (included in viewport-chrome.md):
css
body.lang-en .lang-cn { display: none; }
body.lang-cn .lang-en { display: none; }
When monolingual: Skip all lang-en/ lang-cn spans, write plain text, omit the language toggle button from the toolbar, and omit the language CSS/JS.
data-title (CN), data-title-en (EN), data-group (CN), and data-group-en (EN) attributes for bilingual sidebar. Monolingual slides only need data-title and data-group.clamp(min, preferred, max) — never fixed px/rem.shopee and .seamoney logos MUST appear, embedded via CSS content: url(data:...). Custom brand — embed user-provided logo(s). Neutral — no logos, text-only headers.prefers-reduced-motion support/* === SECTION NAME === */ comment blocks throughout CSSSave to work/slides/ with a descriptive filename
Open using open [filename].html to launch in browser
Summarize — Tell the user:
L to toggle.F5 or click ▶ — fullscreen, hides all chromeE — click any text to edit, undo/redo in toolbarC — per-slide notes saved to localStorage, Copy All exports as MarkdownFilePurposeWhen to Readdesign-tokens.mdBrand presets, CSS variables, colors, typography, spacingPhase 3 (always)slide-types.mdHTML templates for cover, section, content, closingPhase 3 (always)components.mdReusable component HTML: metrics, tables, timelines, etc.Phase 3 (always)viewport-chrome.mdViewport fitting CSS + interactive chrome HTML/CSSPhase 3 (always)js-controller.mdSlidePresentation JS class with all interactive featuresPhase 3 (always)