Install
openclaw skills install mckinsey-presentation-generatorMcKinsey consulting-style multi-page HTML presentation generator. Creates data-rich, visually compelling slide decks with rigorous research, SVG charts, and proper source citations. TRIGGERS: McKinsey, consulting deck, presentation, PPT, slide deck, data visualization, business presentation, market analysis slides.
openclaw skills install mckinsey-presentation-generatorThis skill produces professional McKinsey consulting-style HTML slide decks. Every presentation is data-driven, information-dense, and visually rigorous. The workflow covers end-to-end generation: research → planning → slide creation (cover, content, section dividers, TOC, summary) → deployment. All slides are rendered as static HTML with inline SVG charts — no generated images except in rare, data-driven cases.
NEVER skip this step. Data quality determines presentation quality.
Gather comprehensive data before any slide creation:
| Tier | Source Type | Examples |
|---|---|---|
| 1 | Official Data/APIs | Company filings, government databases, central banks |
| 2 | Research Institutions | McKinsey, BCG, Goldman Sachs, Morgan Stanley, IMF, World Bank |
| 3 | Industry Reports | Gartner, Statista, CB Insights, PitchBook |
| 4 | News Organizations | Reuters, Bloomberg, Financial Times |
| 5 | Company Websites | Official press releases, investor relations |
Execute multiple targeted searches:
For every piece of data collected, record:
MANDATORY minimums before completing research:
AVOID:
## RESEARCH SUMMARY
### Topic: [Topic Name]
Research Date: [Current Date]
---
### SLIDE N: [Slide Title]
**Key Data Points:**
1. [Data point 1] - [Value]
2. [Data point 2] - [Value]
**Chart Data (if applicable):**
| Year | Value | YoY Growth |
|------|-------|------------|
| 2023 | $XX | +XX% |
| 2024 | $XX | +XX% |
| 2025 | $XX | +XX% |
**Source Citation:** Source: [Organization 1], [Organization 2] | [Date]
---
### ALL SOURCES
| # | Source Name | Type | Date | URL | Reliability |
|---|-------------|------|------|-----|-------------|
| 1 | [Name] | [Report/News/Official] | [Date] | [URL] | High/Medium |
Based on research findings, plan the slide structure:
Typical 10-slide structure:
See Cover Page Specifications below.
For each content slide:
See Content Page Specifications below.
If needed, generate:
Deploy the completed presentation using deploy_html_presentation.
Professional & Serious: All presentations must be square, formal, and business-appropriate. This is a consulting deck, NOT a creative portfolio.
Data-Driven: Every content slide must be backed by verifiable data with proper source citations.
Information Density: Content pages should maximize information density with at least 4 distinct content zones per slide.
Style: Sharp & Compact — square corners, high information density, professional severity. border-radius: 0 on ALL elements.
| Element | Color Name | Hex | Usage |
|---|---|---|---|
| Main Background | White | #FFFFFF | Primary slide background (MANDATORY DEFAULT) |
| Title Bar/Header | Deep Navy Blue | #0B1F3A | Top header bar (0.6" height) |
| Primary Accent | Cobalt Blue | #1B5AB5 | Primary chart series, emphasis elements, insight text |
| Body Text/Labels | Dark Gray | #2D2D2D | Primary body text, data labels |
| Secondary Text/Footnotes | Medium Gray | #8C8C8C | Secondary text, footnotes, sources |
| Grid Lines/Dividers | Light Gray | #E0E0E0 | Chart grid lines, separators |
| Option | Hex Code | Effect | Text Color |
|---|---|---|---|
| White | #FFFFFF | Clean, minimal, modern | Navy #0B1F3A |
| Navy Blue | #0B1F3A | Professional, authoritative | White #FFFFFF |
| Cobalt Blue | #1B5AB5 | Bold, confident | White #FFFFFF |
| Cyan | #2E8BC0 | Fresh, innovative | White #FFFFFF |
| Emerald Green | #3AAF6C | Growth, sustainability | White #FFFFFF |
| Gray | #4A4A4A | Neutral, sophisticated | White #FFFFFF |
| Gradient | CSS Example |
|---|---|
| Navy to Dark | background: linear-gradient(180deg, #0B1F3A 0%, #1B3A5C 100%); |
| Blue to Navy | background: linear-gradient(180deg, #1B5AB5 0%, #0B1F3A 100%); |
Note: Gradients are ONLY allowed on cover pages and section dividers. Content pages MUST NOT use gradients.
| Series | Color Name | Hex |
|---|---|---|
| 1 | Cobalt Blue | #1B5AB5 |
| 2 | Cyan Blue | #2E8BC0 |
| 3 | Amber Gold | #D4A843 |
| 4 | Coral Red | #E05252 |
| 5 | Emerald Green | #3AAF6C |
| 6 | Purple Gray | #7B6D9E |
| Purpose | Color | Hex |
|---|---|---|
| Positive Data | Green | #3AAF6C |
| Negative Data | Red | #E05252 |
RULE: Maximum 2 accent colors per page. This is NON-NEGOTIABLE.
| Type | Colors | Can Use Freely |
|---|---|---|
| Base Colors | Navy #0B1F3A, White #FFFFFF, Grays (#2D2D2D, #8C8C8C, #E0E0E0) | ✅ Yes |
| Primary Accent | Cobalt Blue #1B5AB5 | ✅ Always allowed |
| Secondary Accent | #2E8BC0, #D4A843, #E05252, #3AAF6C, #7B6D9E | ⚠️ Pick ONLY ONE |
Enforcement:
ONLY EXCEPTION: Multi-series charts with 3+ distinct data categories may use additional colors within that single chart.
Use ONLY when the McKinsey White Theme is not appropriate:
| # | Name | Colors | Style | Use Cases |
|---|---|---|---|---|
| 2 | Modern Health | #006d77 #83c5be #edf6f9 #ffddd2 #e29578 | Fresh, healing | Healthcare, wellness |
| 3 | Business Authority | #2b2d42 #8d99ae #edf2f4 #ef233c #d90429 | Serious, classic | Annual reports, government |
| 4 | Nature Outdoor | #606c38 #283618 #fefae0 #dda15e #bc6c25 | Earthy, grounded | Environmental, agriculture |
| 5 | Dynamic Tech | #8ecae6 #219ebc #023047 #ffb703 #fb8500 | High energy | Startup pitches |
| 6 | Pure Tech Blue | #03045e #0077b6 #00b4d8 #90e0ef #caf0f8 | Futuristic | Cloud/AI, clean energy |
| 7 | Platinum White Gold | #0a0a0a #0070F3 #D4AF37 #f5f5f5 #ffffff | Premium | Fintech, luxury brands |
| Language | Font | Notes |
|---|---|---|
| Chinese | Microsoft YaHei | Use for all titles and body text |
| English | Arial / Arial Black | Arial Black for titles, Arial for body |
CSS font-family declaration: "Microsoft YaHei", Arial, sans-serif
| Element | Font | Size | Color | Notes |
|---|---|---|---|---|
| Page Title (Header Bar) | Arial Black | 24px | #FFFFFF | White text on dark navy header |
| Insight/Subtitle | Arial Bold | 16px | #1B5AB5 | Blue text, one-line key insight |
| Chart Title | Arial Bold | 12px | #2D2D2D | Above each chart |
| Body/Data Labels | Arial | 10–12px | #2D2D2D | Chart labels and body |
| Chart Legend | Arial | 9px | #2D2D2D | Below or right of chart |
| Footnotes/Sources | Arial | 8px | #8C8C8C | Bottom of slide |
| Element | Max Size | Notes |
|---|---|---|
| Page Title | 24px | In header bar |
| Insight Text | 16px | Below header |
| Stat Callout | 48px | Large numbers only |
| Chart Title | 12px | Above charts |
| Body Text | 10–12px | Compact for density |
| Labels | 9–10px | Chart labels |
| Footnotes | 8px | Source citations |
NO element should exceed 48px except in rare stat callout situations.
| ❌ Forbidden | Reason | ✅ Use Instead |
|---|---|---|
Rounded corners (border-radius) | Looks casual/playful | Square corners (border-radius: 0) |
| Generated images | Decorative, unprofessional | SVG charts, data visualizations |
| Oversized fonts (>48px for body) | Looks like a billboard | Compact, data-dense typography |
| Drop shadows | Looks dated/gimmicky | Clean flat design |
| Gradients on content elements | Distracting | Solid colors |
| Animations/transitions | Unprofessional for consulting | Static content |
| Decorative icons | Cluttered | Minimal functional icons only |
| Bright/saturated colors | Looks unprofessional | Muted, business colors |
/* ALL elements must have square corners */
border-radius: 0;
/* Bars and charts - NO rounded corners */
rect { rx: 0; ry: 0; }
/* Progress bars - square ends */
.progress-bar { border-radius: 0; }
/* Cards and boxes - sharp edges */
.card, .box, .zone { border-radius: 0; }
Every slide containing data MUST include a footer citation:
Source: [Organization Name(s)] | [Data Period] | [Optional: Disclaimer]
Examples:
| Type | Example |
|---|---|
| Financial | `Source: Wind, CSRC, PBoC |
| Research | `Source: Goldman Sachs, Morgan Stanley, JP Morgan, IMF |
| Company | `Source: Company Annual Report 2025 |
| Industry | `Source: Statista, IDC, Gartner |
| Government | `Source: National Bureau of Statistics |
Maximum 3 images per entire presentation, only for:
FORBIDDEN:
All other visuals must be SVG charts created in HTML/CSS.
Design: Elegant & Minimal — centered typography only.
┌─────────────────────────────────────────┐
│ │
│ │
│ PRESENTATION TITLE │
│ ───────────────── │
│ Subtitle Here │
│ │
│ Presenter | Date | Company │
│ │
└─────────────────────────────────────────┘
| Element | Recommended Size | Ratio to Base |
|---|---|---|
| Main Title | 72–120px | 3x–5x |
| Subtitle | 28–40px | 1.5x–2x |
| Supporting Text | 18–24px | 1x (base) |
| Meta Info (date, name) | 14–18px | 0.7x–1x |
<!-- Solid color background with centered typography -->
<div style="background: #0B1F3A; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center;">
<h1 style="color: #FFFFFF; font-size: 72px; font-weight: bold;">Presentation Title</h1>
<p style="color: #8C8C8C; font-size: 24px; margin-top: 20px;">Subtitle or Tagline</p>
</div>
Every content slide MUST follow this vertical structure:
┌─────────────────────────────────────────────────────────┐
│ HEADER BAR (Deep Navy #0B1F3A, 0.6" / 32px height) │
│ [Page Title - White, left-aligned] [Page# - right] │
├─────────────────────────────────────────────────────────┤
│ INSIGHT ZONE (0.1" below header) │
│ One-line blue bold text summarizing the key finding │
├─────────────────────────────────────────────────────────┤
│ │
│ CONTENT AREA (4+ zones) │
│ Charts, data, bullet points, comparisons │
│ Left/Right margins: 0.5" (26px) │
│ Inter-chart spacing: 0.2" (10px) │
│ │
├─────────────────────────────────────────────────────────┤
│ FOOTER ZONE (0.4" / 21px height) │
│ [Data source + Date + Disclaimer - Gray #8C8C8C, 8px] │
└─────────────────────────────────────────────────────────┘
#0B1F3A#FFFFFF, left-aligned with 0.5" padding<div style="background: #0B1F3A; height: 32px; padding: 0 26px; display: flex; align-items: center; justify-content: space-between;">
<h1 style="color: #FFFFFF; font-family: Arial Black, sans-serif; font-size: 24px; margin: 0;">Page Title</h1>
<span style="color: #FFFFFF; font-size: 14px;">3</span>
</div>
#1B5AB5<div style="padding: 5px 26px 10px; color: #1B5AB5; font-weight: bold; font-size: 16px;">
Key Insight: Market grew 25% YoY driven by digital transformation initiatives
</div>
#8C8C8C<div style="position: absolute; bottom: 0; left: 0; right: 0; height: 21px; padding: 0 26px; font-size: 8px; color: #8C8C8C; display: flex; align-items: center;">
Source: Goldman Sachs, Morgan Stanley | Forecasts as of early 2026 | Not investment advice
</div>
Every content page MUST have at least 4 distinct content zones.
┌─────────────────┬─────────────────┐
│ Zone 1 │ Zone 2 │
│ [Chart/Stats] │ [Bullet List] │
├─────────────────┼─────────────────┤
│ Zone 3 │ Zone 4 │
│ [Key Finding] │ [Comparison] │
└─────────────────┴─────────────────┘
┌─────────────────────────────────────┐
│ Zone 1: Hero Chart │
├───────────┬───────────┬─────────────┤
│ Zone 2 │ Zone 3 │ Zone 4 │
│ Detail 1 │ Detail 2 │ Detail 3 │
└───────────┴───────────┴─────────────┘
| Format | When to Use |
|---|---|
| Prose paragraphs | Context, analysis, explanations (2–4 sentences) |
| Data tables | Comparisons, specifications, metrics |
| Bullet lists | Action items, key takeaways, features |
| Charts/Graphs | Trends, distributions, relationships |
| Callout stats | Highlight 1–3 key numbers |
| Process flows | Sequential steps, workflows |
Example of good zone variety on one page:
1. Numbered Vertical List (best for 3–5 sections)
| TABLE OF CONTENTS |
| 01 Section Title One |
| 02 Section Title Two |
| 03 Section Title Three |
2. Two-Column Grid (best for 4–6 sections)
3. Sidebar Navigation (modern/corporate)
4. Card-Based Layout (3–4 sections, creative/modern)
| Element | Recommended Size |
|---|---|
| Page Title ("Table of Contents" / "Agenda") | 36–44px |
| Section Number | 28–36px |
| Section Title | 20–28px |
| Section Description | 14–16px |
Design: Elegant & Minimal — same style as cover pages.
┌─────────────────────────────────────────┐
│ │
│ 02 │
│ SECTION TITLE │
│ Optional intro line │
│ │
└─────────────────────────────────────────┘
| Element | Recommended Size | Notes |
|---|---|---|
| Section Number | 72–120px | Bold, accent color or semi-transparent |
| Section Title | 36–48px | Bold, clear, primary text color |
| Intro Text | 16–20px | Light weight, muted color, optional |
Page Number Badge is MANDATORY (see Appendix G).
1. Key Takeaways — 3–5 key points with icons or numbered markers
2. CTA / Next Steps — Clear call-to-action prominently displayed
3. Thank You / Contact — Closing message with contact info
4. Split Recap — Left: key takeaways; Right: CTA/contact
| Element | Recommended Size |
|---|---|
| Closing Title ("Thank You" / "Summary") | 48–72px |
| Takeaway / Action Item | 18–24px |
| Supporting Text | 14–16px |
| Contact Info | 14–16px |
Page Number Badge is MANDATORY (see Appendix G).
#E0E0E0)rx/ry attributes<svg width="300" height="150" viewBox="0 0 300 150">
<!-- Grid lines -->
<line x1="40" y1="20" x2="280" y2="20" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="50" x2="280" y2="50" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="80" x2="280" y2="80" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="110" x2="280" y2="110" stroke="#E0E0E0" stroke-width="1"/>
<!-- Bars (no rounded corners, 70% width) -->
<rect x="50" y="30" width="40" height="80" fill="#1B5AB5"/>
<rect x="110" y="50" width="40" height="60" fill="#2E8BC0"/>
<rect x="170" y="20" width="40" height="90" fill="#D4A843"/>
<rect x="230" y="40" width="40" height="70" fill="#E05252"/>
<!-- Data labels directly on bars -->
<text x="70" y="25" text-anchor="middle" fill="#2D2D2D" font-size="9">85%</text>
<text x="130" y="45" text-anchor="middle" fill="#2D2D2D" font-size="9">62%</text>
<text x="190" y="15" text-anchor="middle" fill="#2D2D2D" font-size="9">92%</text>
<text x="250" y="35" text-anchor="middle" fill="#2D2D2D" font-size="9">71%</text>
<!-- X-axis labels -->
<text x="70" y="125" text-anchor="middle" fill="#2D2D2D" font-size="9">Q1</text>
<text x="130" y="125" text-anchor="middle" fill="#2D2D2D" font-size="9">Q2</text>
<text x="190" y="125" text-anchor="middle" fill="#2D2D2D" font-size="9">Q3</text>
<text x="250" y="125" text-anchor="middle" fill="#2D2D2D" font-size="9">Q4</text>
</svg>
<svg width="300" height="150" viewBox="0 0 300 150">
<line x1="40" y1="20" x2="280" y2="20" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="50" x2="280" y2="50" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="80" x2="280" y2="80" stroke="#E0E0E0" stroke-width="1"/>
<line x1="40" y1="110" x2="280" y2="110" stroke="#E0E0E0" stroke-width="1"/>
<polyline points="50,90 110,70 170,40 230,55" fill="none" stroke="#1B5AB5" stroke-width="2"/>
<circle cx="50" cy="90" r="3" fill="#1B5AB5"/>
<circle cx="110" cy="70" r="3" fill="#1B5AB5"/>
<circle cx="170" cy="40" r="3" fill="#1B5AB5"/>
<circle cx="230" cy="55" r="3" fill="#1B5AB5"/>
<text x="50" y="85" text-anchor="middle" fill="#2D2D2D" font-size="9">$2.1M</text>
<text x="110" y="65" text-anchor="middle" fill="#2D2D2D" font-size="9">$2.8M</text>
<text x="170" y="35" text-anchor="middle" fill="#2D2D2D" font-size="9">$4.2M</text>
<text x="230" y="50" text-anchor="middle" fill="#2D2D2D" font-size="9">$3.5M</text>
</svg>
<div style="margin-bottom: 8px;">
<div style="display: flex; justify-content: space-between; font-size: 10px; color: #2D2D2D; margin-bottom: 3px;">
<span>Market Share</span>
<span>75%</span>
</div>
<!-- NO border-radius - square corners only -->
<div style="background: #E0E0E0; height: 8px; width: 100%; border-radius: 0;">
<div style="background: #1B5AB5; height: 100%; width: 75%; border-radius: 0;"></div>
</div>
</div>
Pie charts MUST be created using the image generation tool. SVG pie charts require arc commands (A) which are forbidden for PPTX conversion. ALL workarounds (layered circles, stroke-dasharray, clip-paths, conic-gradient, rotated segments) WILL FAIL during PPTX conversion.
Every slide HTML file MUST include this snippet:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
background: #000;
}
.slide-content {
width: 960px;
height: 540px;
position: relative;
transform-origin: center center;
}
</style>
<script>
function scaleSlide() {
const slide = document.querySelector('.slide-content');
if (!slide) return;
const slideWidth = 960;
const slideHeight = 540;
const scaleX = window.innerWidth / slideWidth;
const scaleY = window.innerHeight / slideHeight;
const scale = Math.min(scaleX, scaleY);
slide.style.width = slideWidth + 'px';
slide.style.height = slideHeight + 'px';
slide.style.transform = `scale(${scale})`;
slide.style.transformOrigin = 'center center';
slide.style.flexShrink = '0';
}
window.addEventListener('load', scaleSlide);
window.addEventListener('resize', scaleSlide);
</script>
All CSS styles MUST be inline (except the snippet in Appendix A).
<style> blocks outside Appendix A<!-- ✅ Correct: Inline styles -->
<div style="position:absolute; left:60px; top:120px; width:840px; height:240px; background:#023047;"></div>
<!-- ❌ Wrong: Style blocks or classes -->
<style>.card { background:#023047; }</style>
<div class="card"></div>
Do NOT create a full-size background DIV inside .slide-content. Set background directly on .slide-content itself.
<!-- ✅ Correct -->
<div class="slide-content" style="background:#FFFFFF;">
<p style="position:absolute; left:60px; top:140px; ...">Title</p>
</div>
<!-- ❌ Wrong: Nested background DIV -->
<div class="slide-content">
<div style="position:absolute; left:0; top:0; width:960px; height:540px; background:#FFFFFF;"></div>
</div>
Reserve bold (font-weight: 600+) for titles, headings, and key emphasis only. Body text, captions, legends, and footnotes must use normal weight (400–500).
rgba(r,g,b,0.1))linear-gradient(), radial-gradient(), conic-gradient() on content slidesanimation, @keyframes, transition, hover effects, or SVG <animate><rect> — rectangles (with rx/ry for rounded corners)<circle> — circles<ellipse> — ellipses<line> — straight lines<polyline> — connected line segments (stroke only, NO fill)<polygon> — closed polyline (stroke only, NO fill)<path> — ONLY with M/L/H/V/Z commands<pattern> — repeating patterns<path> Command Restrictions (CRITICAL)ONLY these commands are supported:
M/m — moveToL/l — lineToH/h — horizontal lineV/v — vertical lineZ/z — close pathFORBIDDEN commands (will cause SVG to be SKIPPED in PPTX):
Q/q — quadratic Bézier curveC/c — cubic Bézier curveS/s — smooth cubic BézierT/t — smooth quadratic BézierA/a — elliptical arctransform="rotate()" on shapes causes fallback failure<text> in complex SVGs — SVG text becomes rasterized, not editable in PPTX<path> must be rectangles — if a path has fill, it must form a closed rectangle with only M/L/H/V/Z<!-- ⚠️ WORKAROUND: Approximate curves with line segments -->
<svg width="200" height="20">
<path d="M0 10 L12 6 L25 4 L37 6 L50 10" stroke="#dda15e" stroke-width="2"/>
</svg>
transform: scale()<rect> or <path>, NOT CSS background/borderbackground, border, or <hr><!-- ✅ Correct: Text inside SVG -->
<svg width="180" height="52" viewBox="0 0 180 52">
<rect width="180" height="52" rx="26" fill="#fb8500"/>
<text x="90" y="26" text-anchor="middle" dominant-baseline="central"
font-size="16" font-weight="700" fill="#ffffff">LABEL</text>
</svg>
<!-- ❌ Wrong: Text overlaid on SVG (WILL BE LOST in PPTX) -->
<div class="badge">
<svg><rect .../></svg>
<span style="position:absolute;">LABEL</span>
</div>
<!-- Dot grid pattern -->
<svg width="100%" height="100%" style="position:absolute;top:0;left:0;opacity:0.08;pointer-events:none;">
<defs>
<pattern id="dots" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse">
<circle cx="20" cy="20" r="2" fill="currentColor"/>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#dots)"/>
</svg>
<!-- Checkmark icon (polyline - SUPPORTED) -->
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
<polyline points="20 6 9 17 4 12"/>
</svg>
<!-- Simple arrow icon (M/L path - SUPPORTED) -->
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M5 12 L19 12 M12 5 L19 12 L12 19"/>
</svg>
vector-effect="non-scaling-stroke" to keep stroke widths stable under scalingoverflow="visible" when SVG extends beyond its boxaria-hidden="true" for decorative SVGscurrentColor for easy themingpointer-events: none for overlay SVGsbackground-image on div elements<img> element as backgroundp, h1–h6, ul, ol, li must NOT have background, border, or shadowspan, b, i, u, strong, em) must NOT have margins<ul> or <ol> listsdiv — wrap in text tags<span>, <p>) as overlay on SVG — it will be lost in PPTX<text> element inside the SVG<text> must use text-anchor="middle" and dominant-baseline="central"placeholder must have non-zero width and heightAll slides except Cover Page MUST include a page number badge. Shows current slide number in bottom-right corner.
position:absolute; right:32px; bottom:24px;<text>, not overlaid <span>)3 or 03), not "3/12"<!-- ✅ Circle badge (default) -->
<svg style="position:absolute; right:32px; bottom:24px;" width="36" height="36" viewBox="0 0 36 36">
<circle cx="18" cy="18" r="18" fill="#1B5AB5"/>
<text x="18" y="18" text-anchor="middle" dominant-baseline="central"
font-size="14" font-weight="600" fill="#ffffff">3</text>
</svg>
<!-- ✅ Pill badge -->
<svg style="position:absolute; right:32px; bottom:24px;" width="48" height="28" viewBox="0 0 48 28">
<rect width="48" height="28" rx="14" fill="#1B5AB5"/>
<text x="24" y="14" text-anchor="middle" dominant-baseline="central"
font-size="13" font-weight="600" fill="#ffffff">03</text>
</svg>
<!-- ✅ Minimal (number only) -->
<p style="position:absolute; right:36px; bottom:24px; margin:0; font-size:13px; font-weight:500; color:#1B5AB5;">03</p>
Every page must be information-dense. Avoid large empty areas.
| Check | Requirement |
|---|---|
| Content Coverage | At least 70% of the content area must contain meaningful content |
| Gap Size | No single empty gap larger than 1" (52px) in any direction |
| Zone Balance | All 4+ zones should have substantial content, not filler |
During page verification, check for:
Classify every slide as exactly one of these 5 page types:
border-radius: 0After generating each slide's HTML, verify using screenshots:
If ANY issue is found, FIX immediately before proceeding to the next slide.