# Mckinsey Deck

> >

- **Type:** Skill
- **Install:** `agentstack add skill-norahe0304-art-30x-mckinsey-research-deck-mckinsey-deck`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [norahe0304-art](https://agentstack.voostack.com/s/norahe0304-art)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [norahe0304-art](https://github.com/norahe0304-art)
- **Source:** https://github.com/norahe0304-art/30x-mckinsey-research-deck/tree/master/skills/mckinsey-deck
- **Website:** https://norahe0304-art.github.io/30x-mckinsey-research-deck/

## Install

```sh
agentstack add skill-norahe0304-art-30x-mckinsey-research-deck-mckinsey-deck
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# McKinsey-Style Deck (the style + engine skill)

Build a research-grade-looking, page-turning deck from content the user gives you.
Reviewed on screen as an HTML presentation; shared as a print-clean PDF. The whole engine
is one file — `assets/deck_engine.py` — copy it into the project and compose `build()`.

**This skill owns the canonical engine.** `mckinsey-market-research-deck` (and any future
deck skill) consumes `assets/deck_engine.py` from HERE — engine fixes land in this file only,
never in a project-local or sibling-skill fork. One engine, zero drift.

## How to use

1. Copy `assets/deck_engine.py` into the working dir. Set `BRAND` (the footer line) and `OUT_HTML`.
2. Compose the deck inside `build()` using the renderers (below). Feed them the user's content
   directly, or load from a JSON if the content is structured.
3. Render + export:
   ```bash
   python3 deck_engine.py
   "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --disable-gpu \
     --no-pdf-header-footer --print-to-pdf="Deck.pdf" "Deck.html"
   ```
   (Windows/Linux: swap the Chrome path for `chrome`/`google-chrome`.)
4. QC (below), fix, re-render, then deliver.

## Renderers (all in deck_engine.py)
- `cover(title_html, subtitle)` — navy hero (uses `product-images/cover-hero.png` if present), title + one subtitle.
- `answer_slide(title, deck, governing, pillars, src)` — the executive-summary page (Pyramid Principle: answer first). One-sentence governing thought + 3–4 pillar conclusions, each optionally with a serif key stat. Place right after the cover; reading only the headlines from here to the end must form one persuasive essay (horizontal logic).
- `divider(no, title, points)` — full-navy section break; big sky-blue number; optional duotone image (`divider-.png`).
- `heroes([(num, label), ...])` — 4-up serif stat strip.
- `prose_slide(title, deck, themes, src, cols=2, note=None)` — "bold theme + paragraph" blocks (the McKinsey prose page). `themes=[(heading, paragraph_html), ...]`.
- `essay_slide(title, deck, lead, paras, src, side=None)` — flowing two-column prose + optional side rail.
- `table_slide(title, deck, columns, rows, src, note=None, fill=True, bold_keys=(), extra=None)` — navy-header table, uniform row heights (header 34px / rows 52px, never stretched); `bold_keys` highlights total rows; `extra=` takes a content block (e.g. `heroes([...])`) to fill a sparse page by composition.
- `decision_slide(page, src)` — renders a structured exhibit (buildup/breakdown/scenarios + assumptions + READ).
- `donut_block(...)`, `bars_chart(...)`, `heatmap_block(...)` — titled chart blocks for a page's side rail (charts ride beside their analysis; never alone on a page); `charts_slide(...)` for the rare full-canvas exhibit. Low-level: `donut_svg(...)`, heatmap `hcell(...)`.
- `sources_register(url_set, selected_rows, src)` — the numbered, clickable source appendix.
- `render(slides)` — assembles the page-turning HTML and prints the div-balance check.

Headline = a full-sentence conclusion (the takeaway), never a topic label.

## Hard design laws (never violate)
- **No eyebrow/kicker labels** — no small letter-spaced ALL-CAPS tags above titles or on the cover.
- **Cover is minimal:** title + one italic subtitle only. No KPI band, no date, no method block.
- **Action-title headlines** — the headline states the conclusion.
- **Notes pinned to a uniform bottom** (`margin-top:auto`) on every page.
- **Nothing overlaps the footer.** `.pad` reserves bottom clearance.
- **Fill by composition, not by stretching.** Essay/prose type auto-scales across 3 tiers by
  content length. **Table row heights are uniform deck-wide (header 34px / rows 52px) and never
  stretch** — fill a sparse table page via `table_slide(..., extra=heroes([...]))` or more rows.
  If a page is still thin at the top tier, add content — never inflate type or rows.
- **No mid-word truncation** — use `clipw()`, never raw `[:n]`.
- **Flat** — no shadows/bevels (navy cover/divider are the only image-shadow exception).
- **Images** — clean cutout on pure white, no shadow, blended via `mix-blend-mode:multiply`; every image gets an italic caption. Cover/divider images: anchored bottom-right, `height:100%` (never >100%, or the PDF clips the subject), left-edge gradient mask so the square dissolves into navy.

## Palette (baked into the engine CSS)
navy `#051C2C` · blue `#1F6FB2` · sky `#5AA9E0` · ink `#23272E` · muted `#7B8593` · hairline `#E3E6EB`.
Headlines Georgia; body Inter. Color is rationed: navy structure + grays, blue/sky as small accents.

## QC before delivery (always self-run)
```bash
# structure — must be 0, or an unclosed div breaks pagination
python3 -c "h=open('Deck.html').read();print('div diff:',h.count(''))"
pdfinfo Deck.pdf | grep Pages
# visual — render every page and eyeball
pdftoppm -png -r 92 Deck.pdf _q   # then look at _q-*.png
```
Check each page: no footer overlap · no mid-word "…metal o" cuts · ">…` — Chrome's
`--print-to-pdf` turns them into clickable PDF link annotations (verify: the PDF bytes contain `/URI`).

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [norahe0304-art](https://github.com/norahe0304-art)
- **Source:** [norahe0304-art/30x-mckinsey-research-deck](https://github.com/norahe0304-art/30x-mckinsey-research-deck)
- **License:** MIT
- **Homepage:** https://norahe0304-art.github.io/30x-mckinsey-research-deck/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-norahe0304-art-30x-mckinsey-research-deck-mckinsey-deck
- Seller: https://agentstack.voostack.com/s/norahe0304-art
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
