This 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:
TierSource TypeExamples1Official Data/APIsCompany filings, government databases, central banks2Research InstitutionsMcKinsey, BCG, Goldman Sachs, Morgan Stanley, IMF, World Bank3Industry ReportsGartner, Statista, CB Insights, PitchBook4News OrganizationsReuters, Bloomberg, Financial Times5Company WebsitesOfficial press releases, investor relations
Execute multiple targeted searches:
For every piece of data collected, record:
MANDATORY minimums before completing research:
AVOID:
text
## 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.
ElementColor NameHexUsageMain BackgroundWhite#FFFFFFPrimary slide background (MANDATORY DEFAULT)Title Bar/HeaderDeep Navy Blue#0B1F3ATop header bar (0.6" height)Primary AccentCobalt Blue#1B5AB5Primary chart series, emphasis elements, insight textBody Text/LabelsDark Gray#2D2D2DPrimary body text, data labelsSecondary Text/FootnotesMedium Gray#8C8C8CSecondary text, footnotes, sourcesGrid Lines/DividersLight Gray#E0E0E0Chart grid lines, separators
OptionHex CodeEffectText ColorWhite#FFFFFFClean, minimal, modernNavy #0B1F3ANavy Blue#0B1F3AProfessional, authoritativeWhite #FFFFFFCobalt Blue#1B5AB5Bold, confidentWhite #FFFFFFCyan#2E8BC0Fresh, innovativeWhite #FFFFFFEmerald Green#3AAF6CGrowth, sustainabilityWhite #FFFFFFGray#4A4A4ANeutral, sophisticatedWhite #FFFFFF
GradientCSS ExampleNavy to Darkbackground: linear-gradient(180deg, #0B1F3A 0%, #1B3A5C 100%);Blue to Navybackground: linear-gradient(180deg, #1B5AB5 0%, #0B1F3A 100%);
Note: Gradients are ONLY allowed on cover pages and section dividers. Content pages MUST NOT use gradients.
SeriesColor NameHex1Cobalt Blue#1B5AB52Cyan Blue#2E8BC03Amber Gold#D4A8434Coral Red#E052525Emerald Green#3AAF6C6Purple Gray#7B6D9E
PurposeColorHexPositive DataGreen#3AAF6CNegative DataRed#E05252
RULE: Maximum 2 accent colors per page. This is NON-NEGOTIABLE.
TypeColorsCan Use FreelyBase ColorsNavy #0B1F3A, White #FFFFFF, Grays (#2D2D2D, #8C8C8C, #E0E0E0)✅ YesPrimary AccentCobalt Blue #1B5AB5✅ Always allowedSecondary 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:
#NameColorsStyleUse Cases2Modern Health#006d77 #83c5be #edf6f9 #ffddd2 #e29578Fresh, healingHealthcare, wellness3Business Authority#2b2d42 #8d99ae #edf2f4 #ef233c #d90429Serious, classicAnnual reports, government4Nature Outdoor#606c38 #283618 #fefae0 #dda15e #bc6c25Earthy, groundedEnvironmental, agriculture5Dynamic Tech#8ecae6 #219ebc #023047 #ffb703 #fb8500High energyStartup pitches6Pure Tech Blue#03045e #0077b6 #00b4d8 #90e0ef #caf0f8FuturisticCloud/AI, clean energy7Platinum White Gold#0a0a0a #0070F3 #D4AF37 #f5f5f5 #ffffffPremiumFintech, luxury brands
LanguageFontNotesChineseMicrosoft YaHeiUse for all titles and body textEnglishArial / Arial BlackArial Black for titles, Arial for body
CSS font-family declaration: "Microsoft YaHei", Arial, sans-serif
ElementFontSizeColorNotesPage Title (Header Bar)Arial Black24px#FFFFFFWhite text on dark navy headerInsight/SubtitleArial Bold16px#1B5AB5Blue text, one-line key insightChart TitleArial Bold12px#2D2D2DAbove each chartBody/Data LabelsArial10–12px#2D2D2DChart labels and bodyChart LegendArial9px#2D2D2DBelow or right of chartFootnotes/SourcesArial8px#8C8C8CBottom of slide
ElementMax SizeNotesPage Title24pxIn header barInsight Text16pxBelow headerStat Callout48pxLarge numbers onlyChart Title12pxAbove chartsBody Text10–12pxCompact for densityLabels9–10pxChart labelsFootnotes8pxSource citations
NO element should exceed 48px except in rare stat callout situations.
❌ ForbiddenReason✅ Use InsteadRounded corners ( border-radius)Looks casual/playfulSquare corners ( border-radius: 0)Generated imagesDecorative, unprofessionalSVG charts, data visualizationsOversized fonts (>48px for body)Looks like a billboardCompact, data-dense typographyDrop shadowsLooks dated/gimmickyClean flat designGradients on content elementsDistractingSolid colorsAnimations/transitionsUnprofessional for consultingStatic contentDecorative iconsClutteredMinimal functional icons onlyBright/saturated colorsLooks unprofessionalMuted, business colors
css
/* 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:
text
Source: [Organization Name(s)] | [Data Period] | [Optional: Disclaimer]
Examples:
TypeExampleFinancial`Source: Wind, CSRC, PBoCResearch`Source: Goldman Sachs, Morgan Stanley, JP Morgan, IMFCompany`Source: Company Annual Report 2025Industry`Source: Statista, IDC, GartnerGovernment`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.
text
┌─────────────────────────────────────────┐
│ │
│ │
│ PRESENTATION TITLE │
│ ───────────────── │
│ Subtitle Here │
│ │
│ Presenter | Date | Company │
│ │
└─────────────────────────────────────────┘
ElementRecommended SizeRatio to BaseMain Title72–120px3x–5xSubtitle28–40px1.5x–2xSupporting Text18–24px1x (base)Meta Info (date, name)14–18px0.7x–1x
html
<!-- 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:
text
┌─────────────────────────────────────────────────────────┐
│ 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" paddinghtml
<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>
#1B5AB5html
<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>
#8C8C8Chtml
<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.
text
┌─────────────────┬─────────────────┐
│ Zone 1 │ Zone 2 │
│ [Chart/Stats] │ [Bullet List] │
├─────────────────┼─────────────────┤
│ Zone 3 │ Zone 4 │
│ [Key Finding] │ [Comparison] │
└─────────────────┴─────────────────┘
text
┌─────────────────────────────────────┐
│ Zone 1: Hero Chart │
├───────────┬───────────┬─────────────┤
│ Zone 2 │ Zone 3 │ Zone 4 │
│ Detail 1 │ Detail 2 │ Detail 3 │
└───────────┴───────────┴─────────────┘
FormatWhen to UseProse paragraphsContext, analysis, explanations (2–4 sentences)Data tablesComparisons, specifications, metricsBullet listsAction items, key takeaways, featuresCharts/GraphsTrends, distributions, relationshipsCallout statsHighlight 1–3 key numbersProcess flowsSequential steps, workflows
Example of good zone variety on one page:
1. Numbered Vertical List (best for 3–5 sections)
text
| 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)
ElementRecommended SizePage Title ("Table of Contents" / "Agenda")36–44pxSection Number28–36pxSection Title20–28pxSection Description14–16px
Design: Elegant & Minimal — same style as cover pages.
text
┌─────────────────────────────────────────┐
│ │
│ 02 │
│ SECTION TITLE │
│ Optional intro line │
│ │
└─────────────────────────────────────────┘
ElementRecommended SizeNotesSection Number72–120pxBold, accent color or semi-transparentSection Title36–48pxBold, clear, primary text colorIntro Text16–20pxLight 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
ElementRecommended SizeClosing Title ("Thank You" / "Summary")48–72pxTakeaway / Action Item18–24pxSupporting Text14–16pxContact Info14–16px
Page Number Badge is MANDATORY (see Appendix G).
#E0E0E0)rx/ ry attributeshtml
<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>
html
<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>
html
<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:
html
<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 Ahtml
<!-- ✅ 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.
html
<!-- ✅ 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/Zhtml
<!-- ⚠️ 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>html
<!-- ✅ 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>
html
<!-- 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>
html
<!-- 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"html
<!-- ✅ 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.
CheckRequirementContent CoverageAt least 70% of the content area must contain meaningful contentGap SizeNo single empty gap larger than 1" (52px) in any directionZone BalanceAll 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.