[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-pptx":3,"mdc--ofie4w-key":32,"related-repo-anthropic-pptx":3356,"related-org-anthropic-pptx":3474},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":27,"sourceUrl":30,"mdContent":31},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17],{"name":14,"slug":15,"type":16},"Presentations","presentations","tag",{"name":18,"slug":19,"type":16},"PowerPoint","powerpoint",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-07-18T05:16:24.1471","Proprietary. LICENSE.txt has complete terms",19131,[26],"agent-skills",{"repoUrl":21,"stars":20,"forks":24,"topics":28,"description":29},[26],"Public repository for Agent Skills","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fpptx","---\nname: pptx\ndescription: \"Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \\\"deck,\\\" \\\"slides,\\\" \\\"presentation,\\\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.\"\nlicense: Proprietary. LICENSE.txt has complete terms\n---\n\n# PPTX creation, editing, and analysis\n\nA `.pptx` is a ZIP archive of XML files. Choose your approach by task:\n\n| Task | Approach |\n|---|---|\n| **Create** a new deck | Write a `pptxgenjs` script — see gotchas below |\n| **Edit** an existing deck, or build from a template | unzip → edit `ppt\u002Fslides\u002FslideN.xml` → zip |\n| **Read** content | `markitdown deck.pptx` (one block per slide under `\u003C!-- Slide number: N -->` markers); visual grid: `python scripts\u002Fthumbnail.py deck.pptx` |\n\n## Scripts\n\nPaths are relative to this skill's directory. Everything else is plain Python, `node`, or shell.\n\n| Script | What it does |\n|---|---|\n| `scripts\u002Fthumbnail.py deck.pptx [prefix]` | Labeled grid of every slide, for picking template layouts. `.pptx` only. Pass `prefix` — it defaults to `thumbnails`, which overwrites the grids of any other deck done in the same directory |\n| `scripts\u002Fadd_slide.py unpacked\u002F slide2.xml [--after slideN.xml]` | Duplicate a slide (or a `slideLayoutN.xml`) with all the package bookkeeping. Also takes a `.pptx` directly with `-o out.pptx` |\n| `scripts\u002Fclean.py unpacked\u002F` | Delete slides, media, and rels no longer referenced. Run **after** `\u003Cp:sldIdLst>` is final |\n| `scripts\u002Foffice\u002Fvalidate.py deck.pptx [--original src.pptx]` | Schema, relationship, content-type, chart and slide checks; each failure names its fix. Pass `--original` for any template-derived deck — it baselines the schema checks against the template, so the template's own XSD errors don't read as yours |\n| `scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pdf deck.pptx` | LibreOffice wrapper — bare `soffice` hangs in this sandbox |\n\n## Creating with pptxgenjs — gotchas\n\n`pptxgenjs` is preinstalled — do not run `npm install` first; write the script and `require('pptxgenjs')` directly. Only if that require fails: `npm install pptxgenjs`. The model knows the API; these are the footguns:\n\n- **Set `pres.layout` before adding slides.** The default canvas is `LAYOUT_16x9` = **10\" × 5.625\"**, not 13.3\" wide. Coordinates past the edge are written, not clamped — the shape just isn't on the slide. (`LAYOUT_WIDE` is 13.3\" × 7.5\".)\n- **Hex colors: never `#`, never 8 digits.** `color: \"FF0000\"`. Both `\"#FF0000\"` and alpha baked into the hex (`\"00000020\"`) **corrupt the file**. For translucency: `transparency: 0-100` on fills and images, `opacity: 0.0-1.0` on shadows — each is silently ignored on the other.\n- **pptxgenjs mutates option objects in place** (converts values to EMU on first use). Never share one `shadow`\u002Foptions object across two `add*` calls — build a fresh object each time.\n- **Shadow `offset` must be ≥ 0** — a negative offset corrupts the file. To cast a shadow upward, use `angle: 270` with a positive offset.\n- **`letterSpacing` is silently ignored** — the real option is `charSpacing`.\n- **Lists:** `bullet: true` on each item, never a literal `•` (renders double bullets). Set `breakLine: true` on every array item except the last. Space bulleted paragraphs with `paraSpaceAfter`, not `lineSpacing` (huge gaps).\n- **One `new pptxgen()` per output file** — never reuse an instance.\n- **`rectRadius` only works on `ROUNDED_RECTANGLE`**, not `RECTANGLE`.\n- **Gradient fills aren't supported** — use a gradient image as the background instead.\n- **Text boxes have built-in internal padding** — set `margin: 0` whenever text must align with a shape, line, or icon at the same x.\n- **Speaker notes go in `slide.addNotes(\"...\")`** (plain text, once per slide), never in a text box on the slide.\n- **Keep charts native.** Use `addChart()` for everything PowerPoint can chart (pass an array of `{type, data, options}` for combos). For PowerPoint-native features the library doesn't expose (trendlines, error bars), compute the extra series yourself or post-process the generated OOXML — do not fall back to a rendered image. Only chart types PowerPoint has no native form for (Sankey, network, chord) go in as images.\n- **Default charts render bare** — no title, no data labels, dated palette. Set `showTitle` + `title`, `showValue: true` + `dataLabelPosition`, `chartColors: [...]` from your palette, and quiet the frame (`catAxisLabelColor`\u002F`valAxisLabelColor`, `valGridLine: { color, size }`, `catGridLine: { style: \"none\" }`, `showLegend: false` for a single series).\n- **On a stacked bar or column chart, `dataLabelPosition` must be `ctr`, `inEnd`, or `inBase`.** `outEnd` **corrupts the file**.\n- **A combo series using `secondaryValAxis`\u002F`secondaryCatAxis` needs both `valAxes` and `catAxes` on the chart options, two entries each.** Without them pptxgenjs writes axis *ids* it never declares, and PowerPoint **discards that chart** and reports the file as corrupt. Supplying only `valAxes` is not enough.\n- **After `writeFile()`, run `python scripts\u002Foffice\u002Fvalidate.py deck.pptx`.** It reports the two chart faults above and the slide-XML defects PowerPoint refuses, and names the fix for each. Fix them in your generator, not by hand-editing the packed XML.\n- **Never reorder the children of `\u003Cp:presentation>`.** pptxgenjs writes `\u003Cp:notesMasterIdLst>` right after `\u003Cp:sldIdLst>` and points both masters at one theme part. PowerPoint reads that happily — move the element and the same deck becomes unopenable.\n- **Icons:** render `react-icons` to SVG (`ReactDOMServer.renderToStaticMarkup`), rasterize with `sharp` at ≥256px, and insert via `addImage({ data: \"image\u002Fpng;base64,\" + buf.toString(\"base64\") })` — the `image\u002Fpng;base64,` prefix is required (`react-icons`, `react`, `react-dom`, and `sharp` are preinstalled — `npm install react-icons react react-dom sharp` only if a require fails).\n\n## Editing existing decks and templates\n\nPick layouts first: `python scripts\u002Fthumbnail.py template.pptx template-thumbs` writes a labeled grid of every slide and prints the file(s) it created — `template-thumbs.jpg`, split into `template-thumbs-N.jpg` past 12 slides. **Always pass that second argument, named after the deck.** It defaults to `thumbnails`, so two decks thumbnailed in one directory silently overwrite each other's grids — the first deck's are simply gone (template analysis only — visual QA needs the full-resolution renders from [Converting to Images](#converting-to-images); it only accepts `.pptx`, so copy a `.potx` to a `.pptx` name first). Use it with `markitdown` to map each content section onto a template slide, and vary the layouts — don't put every section on the same title-and-bullets slide.\n\n```bash\npython3 -c \"import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')\" deck.pptx\npython scripts\u002Fadd_slide.py unpacked\u002F slide2.xml --after slide2.xml   # duplicate a slide (or slideLayoutN.xml); prints the new slide's path\n# reorder \u002F delete slides = edit \u003Cp:sldIdLst> in ppt\u002Fpresentation.xml\npython scripts\u002Fclean.py unpacked\u002F                                     # after deletions: removes orphaned slides, media, rels\n# edit slide content in ppt\u002Fslides\u002FslideN.xml\n(cd unpacked && rm -f ..\u002Fout.pptx && zip -Xr ..\u002Fout.pptx .)           # zip from INSIDE the dir; rm first or deleted parts survive\npython scripts\u002Foffice\u002Fvalidate.py out.pptx --original deck.pptx\n```\n\n- **Do all structural work — add, delete, reorder — before editing any slide's content.** `add_slide.py` copies a slide file verbatim, so duplicating after you edit clones the edited content; and `clean.py` deletes any slide missing from `\u003Cp:sldIdLst>`, including one you just wrote.\n- **Never copy a slide file by hand** — `add_slide.py` does every registration a new slide needs and reports what it made (`Created ppt\u002Fslides\u002Fslide17.xml from slide2.xml`). It also works directly on a file: `add_slide.py deck.pptx slide2.xml -o out.pptx` — **pass `-o`, or it rewrites the input deck in place.** A duplicated slide still *references* its source's chart\u002FSmartArt\u002Fembedded-object parts rather than cloning them, so editing one slide's chart changes the other's.\n- **If you use `python-pptx`**, three things it won't do: duplicate a slide (its only entry point is `add_slide(layout)`), preserve formatting through `text_frame.text = \"...\"` (that collapses the paragraph to a single unstyled run — assign `run.text` instead), or read the SVG\u002FEMF most template art uses (`add_picture` raises `UnidentifiedImageError`).\n- Legacy `.ppt` must be converted first: `python scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pptx file.ppt`. `.potx` templates unpack and pack identically — keep the `.potx` extension on the output.\n- To reuse a template icon or image, duplicate a slide or layout that already contains it.\n\nWhen filling in a template:\n\n- If you script an XML transform, parse with `defusedxml.minidom` — round-tripping OOXML through `xml.etree.ElementTree` rewrites namespace prefixes and corrupts the deck.\n- **Template slots ≠ source items.** If the template shows 4 team members and you have 3, delete the 4th member's entire group (image + text boxes), not just its text — then check for orphaned visuals in QA.\n- One `\u003Ca:p>` per list item — never concatenate items into a single paragraph. Copy the sibling `\u003Ca:pPr>` to preserve spacing, and put `b=\"1\"` on the `\u003Ca:rPr>` of titles, section headers, and inline labels (`Status:`, `Owner:`).\n- Let bullets inherit from the layout; only add `\u003Ca:buChar>`, `\u003Ca:buAutoNum>` (numbered), or `\u003Ca:buNone>` to override — never a literal `•` in the text.\n- Text with leading or trailing spaces needs `xml:space=\"preserve\"` on its `\u003Ca:t>`.\n\n## Design Ideas\n\n**Don't create boring slides.** Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.\n\n### Before Starting\n\n- **Pick a bold, content-informed color palette**: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still \"work,\" you haven't made specific enough choices.\n- **Dominance over equality**: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.\n- **Dark\u002Flight contrast**: Dark backgrounds for title + conclusion slides, light for content (\"sandwich\" structure). Or commit to dark throughout for a premium feel.\n- **Commit to a visual motif**: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles. Carry it across every slide. **Do not use a color bar or accent stripe as your motif** (see Avoid list).\n\n### Color Palettes\n\nChoose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:\n\n| Theme | Primary | Secondary | Accent |\n|-------|---------|-----------|--------|\n| **Midnight Executive** | `1E2761` (navy) | `CADCFC` (ice blue) | `FFFFFF` (white) |\n| **Forest & Moss** | `2C5F2D` (forest) | `97BC62` (moss) | `F5F5F5` (cream) |\n| **Coral Energy** | `F96167` (coral) | `F9E795` (gold) | `2F3C7E` (navy) |\n| **Warm Terracotta** | `B85042` (terracotta) | `E7E8D1` (sand) | `A7BEAE` (sage) |\n| **Ocean Gradient** | `065A82` (deep blue) | `1C7293` (teal) | `21295C` (midnight) |\n| **Charcoal Minimal** | `36454F` (charcoal) | `F2F2F2` (off-white) | `212121` (black) |\n| **Teal Trust** | `028090` (teal) | `00A896` (seafoam) | `02C39A` (mint) |\n| **Berry & Cream** | `6D2E46` (berry) | `A26769` (dusty rose) | `ECE2D0` (cream) |\n| **Sage Calm** | `84B59F` (sage) | `69A297` (eucalyptus) | `50808E` (slate) |\n| **Cherry Bold** | `990011` (cherry) | `FCF6F5` (off-white) | `2F3C7E` (navy) |\n\n### For Each Slide\n\n**Every slide needs a visual element** — image, chart, icon, or shape. Text-only slides are forgettable.\n\n**Layout options:**\n- Two-column (text left, illustration on right)\n- Icon + text rows (icon in colored circle, bold header, description below)\n- 2x2 or 2x3 grid (image on one side, grid of content blocks on other)\n- Half-bleed image (full left or right side) with content overlay\n\n**Data display:**\n- Large stat callouts (big numbers 60-72pt with small labels below)\n- Comparison columns (before\u002Fafter, pros\u002Fcons, side-by-side options)\n- Timeline or process flow (numbered steps, arrows)\n\n**Visual polish:**\n- Icons in small colored circles next to section headers\n- Italic accent text for key stats or taglines\n\n### Typography\n\n**Font names you write into the .pptx are rendered by the user's PowerPoint, not by this environment.** Your visual QA renders via LibreOffice, which substitutes fonts it doesn't have — and for some fonts the substitute has different widths, so your QA preview can show text overflow (or fit) that the real deck won't have. To keep your QA trustworthy:\n\n- **Safe fonts** (render true-to-width in QA *and* ship with Office): **Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook**. Use these for body text and anything where fit matters.\n- **Headers with personality at zero QA risk**: pair a safe-list serif header (Cambria, Bookman Old Style, Century Schoolbook) with a safe-list sans body (Calibri or Arial). You get visual contrast without giving up reliable overflow checks.\n- **If the user asks for a font outside the safe list** (e.g. Georgia or Trebuchet MS): use it where the user asked, but size those containers with extra slack (~10%) and don't trust QA text-fit on those elements — the preview of that font is approximate. If the user hasn't specified, prefer safe-list fonts for body text.\n- **QA-unreliable fonts** (substitute has different widths — overflow checks can be wrong): Georgia, Trebuchet MS, Impact, Arial Black, Garamond, Consolas, Palatino Linotype. Calibri Light substitution varies by environment; treat as QA-unreliable. Fine for titles\u002Faccents with slack; don't trust QA text-fit on these.\n- **Never default to Aptos** — Office's post-2023 default has no metric-compatible substitute here *and* is missing from older Office installs, so it's unreliable on both ends.\n\n| Element | Size |\n|---------|------|\n| Slide title | 36-44pt bold |\n| Section header | 20-24pt bold |\n| Body text | 14-16pt |\n| Captions | 10-12pt muted |\n\n### Spacing\n\n- 0.5\" minimum margins\n- 0.3-0.5\" between content blocks\n- Leave breathing room—don't fill every inch\n\n### Avoid (Common Mistakes)\n\n- **Don't repeat the same layout** — vary columns, cards, and callouts across slides\n- **Don't center body text** — left-align paragraphs and lists; center only titles\n- **Don't skimp on size contrast** — titles need 36pt+ to stand out from 14-16pt body\n- **Don't default to blue** — pick colors that reflect the specific topic\n- **Don't mix spacing randomly** — choose 0.3\" or 0.5\" gaps and use consistently\n- **Don't style one slide and leave the rest plain** — commit fully or keep it simple throughout\n- **Don't create text-only slides** — add images, icons, charts, or visual elements; avoid plain title + bullets\n- **Don't forget text box padding** — when aligning lines or shapes with text edges, set `margin: 0` on the text box or offset the shape to account for padding\n- **Don't use low-contrast elements** — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds\n- **NEVER use accent lines under titles** — these are a hallmark of AI-generated slides; use whitespace or background color instead\n- **NEVER add decorative color bars or accent stripes** — this includes: header\u002Ffooter bars spanning the slide width, vertical sidebar stripes down one edge of the slide, thin accent stripes along one edge of a card or content block, and \"single-side borders\" on rectangles. These read as AI-generated filler. If you want to set a card apart, use a subtle background tint, a drop shadow, or an icon — not an edge stripe.\n- **Don't default to cream\u002Fbeige backgrounds** — when no background is specified, use white (`FFFFFF`) or the user's brand palette; avoid warm-neutral defaults like `F5F5DC`, `FAF0E6`, `FAEBD7`, `FFF8E1`\n- **Don't ship text that overflows its shape** — if text doesn't fit, reduce font size, split across slides, or enlarge the container; never leave content cut off or spilling past bounds\n\n## QA (Required)\n\nYour first render usually has a few real issues — overlaps, overflow, misalignment. Find and fix those, re-render only the slides you changed, and stop.\n\n### Content QA\n\n```bash\nmarkitdown output.pptx\n```\n\nCheck for missing content, typos, wrong order.\n\n**When using templates, check for leftover placeholder text:**\n\n```bash\nmarkitdown output.pptx | grep -iE \"\\bx{3,}\\b|lorem|ipsum|\\bTODO|\\[insert|this.*(page|slide).*layout\"\n```\n\nIf grep returns results, fix them before declaring success.\n\n### File QA (required)\n\n```bash\npython scripts\u002Foffice\u002Fvalidate.py output.pptx                      # built from scratch\npython scripts\u002Foffice\u002Fvalidate.py output.pptx --original src.pptx  # built from a template\n```\n\n**If the deck came from a template, always pass `--original`.** A template may itself\ncontain parts the XSD rejects, so a bare run can report failures you never caused — and\na genuine regression can hide among them. `--original` baselines\nthe schema and slide checks against the template, suppressing errors it already had.\nThe structural checks — relationships, content types, charts — ignore `--original` and\nreport template-inherited problems either way, so read those on their own merits.\n\npptxgenjs emits chart XML PowerPoint refuses to open, and every other tool\naccepts: python-pptx opens those decks, LibreOffice renders them, the XSD\npasses them. Every failure names its fix. Fix it in the generator and rebuild.\n\n### Visual QA\n\nConvert the slides to images (see [Converting to Images](#converting-to-images)) and inspect every one. After staring at the generating code you tend to see what you expect rather than what rendered, so look at the images fresh (a subagent works well for this if you have one). User-visible defects to look for:\n\n- **Text overflow or text cut off at a box or slide boundary — check this first.** It is the most common defect and always user-visible. (For a font the previewer renders unreliably per Typography, the preview is approximate: trust the ~10% slack you left, not its apparent fit.)\n- Overlapping elements (text through shapes, lines through words, stacked elements)\n- Source citations or footers colliding with content above\n- Elements too close (\u003C 0.3\" gaps) or cards\u002Fsections nearly touching\n- Uneven gaps (large empty area in one place, cramped in another)\n- Insufficient margin from slide edges (\u003C 0.5\")\n- Columns or similar elements not aligned consistently\n- Low-contrast text (e.g., light gray text on cream-colored background)\n- Template decoration mispositioned after text replacement — e.g., a title underline positioned for one line, but the replaced title wrapped to two\n- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)\n- Text boxes too narrow causing excessive wrapping\n- Leftover placeholder content\n\n## Converting to Images\n\nConvert presentations to individual slide images for visual inspection:\n\n```bash\npython scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pdf output.pptx\nrm -f slide-*.jpg\npdftoppm -jpeg -r 150 output.pdf slide\nls -1 \"$PWD\"\u002Fslide-*.jpg\n```\n\n**Pass the absolute paths printed above directly to the view tool.** The `rm` clears stale images from prior runs. `pdftoppm` zero-pads based on page count: `slide-1.jpg` for decks under 10 pages, `slide-01.jpg` for 10-99, `slide-001.jpg` for 100+.\n\n**After fixes, rerun all four commands above** — the PDF must be regenerated from the edited `.pptx` before `pdftoppm` can reflect your changes.\n\n## Dependencies\n\n`pptxgenjs` (npm, preinstalled — install only if `require('pptxgenjs')` fails) · `markitdown[pptx]`, `Pillow`, `defusedxml`, `lxml` (pip — text dump, thumbnail, clean, validate) · LibreOffice (`soffice`, auto-configured for sandboxed environments via `scripts\u002Foffice\u002Fsoffice.py`) · `pdftoppm` (Poppler)\n",{"data":33,"body":34},{"name":4,"description":6,"license":23},{"type":35,"children":36},"root",[37,46,61,180,187,200,382,388,422,1115,1121,1203,1432,1617,1622,1761,1767,1777,1784,1834,1840,1845,2310,2316,2326,2334,2357,2365,2383,2391,2404,2410,2420,2493,2567,2573,2591,2597,2771,2777,2782,2788,2807,2812,2820,2868,2873,2879,2935,2965,2970,2976,2987,3055,3060,3065,3204,3252,3276,3282,3350],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"pptx-creation-editing-and-analysis",[43],{"type":44,"value":45},"text","PPTX creation, editing, and analysis",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50,52,59],{"type":44,"value":51},"A ",{"type":38,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":44,"value":58},".pptx",{"type":44,"value":60}," is a ZIP archive of XML files. Choose your approach by task:",{"type":38,"tag":62,"props":63,"children":64},"table",{},[65,84],{"type":38,"tag":66,"props":67,"children":68},"thead",{},[69],{"type":38,"tag":70,"props":71,"children":72},"tr",{},[73,79],{"type":38,"tag":74,"props":75,"children":76},"th",{},[77],{"type":44,"value":78},"Task",{"type":38,"tag":74,"props":80,"children":81},{},[82],{"type":44,"value":83},"Approach",{"type":38,"tag":85,"props":86,"children":87},"tbody",{},[88,116,142],{"type":38,"tag":70,"props":89,"children":90},{},[91,103],{"type":38,"tag":92,"props":93,"children":94},"td",{},[95,101],{"type":38,"tag":96,"props":97,"children":98},"strong",{},[99],{"type":44,"value":100},"Create",{"type":44,"value":102}," a new deck",{"type":38,"tag":92,"props":104,"children":105},{},[106,108,114],{"type":44,"value":107},"Write a ",{"type":38,"tag":53,"props":109,"children":111},{"className":110},[],[112],{"type":44,"value":113},"pptxgenjs",{"type":44,"value":115}," script — see gotchas below",{"type":38,"tag":70,"props":117,"children":118},{},[119,129],{"type":38,"tag":92,"props":120,"children":121},{},[122,127],{"type":38,"tag":96,"props":123,"children":124},{},[125],{"type":44,"value":126},"Edit",{"type":44,"value":128}," an existing deck, or build from a template",{"type":38,"tag":92,"props":130,"children":131},{},[132,134,140],{"type":44,"value":133},"unzip → edit ",{"type":38,"tag":53,"props":135,"children":137},{"className":136},[],[138],{"type":44,"value":139},"ppt\u002Fslides\u002FslideN.xml",{"type":44,"value":141}," → zip",{"type":38,"tag":70,"props":143,"children":144},{},[145,155],{"type":38,"tag":92,"props":146,"children":147},{},[148,153],{"type":38,"tag":96,"props":149,"children":150},{},[151],{"type":44,"value":152},"Read",{"type":44,"value":154}," content",{"type":38,"tag":92,"props":156,"children":157},{},[158,164,166,172,174],{"type":38,"tag":53,"props":159,"children":161},{"className":160},[],[162],{"type":44,"value":163},"markitdown deck.pptx",{"type":44,"value":165}," (one block per slide under ",{"type":38,"tag":53,"props":167,"children":169},{"className":168},[],[170],{"type":44,"value":171},"\u003C!-- Slide number: N -->",{"type":44,"value":173}," markers); visual grid: ",{"type":38,"tag":53,"props":175,"children":177},{"className":176},[],[178],{"type":44,"value":179},"python scripts\u002Fthumbnail.py deck.pptx",{"type":38,"tag":181,"props":182,"children":184},"h2",{"id":183},"scripts",[185],{"type":44,"value":186},"Scripts",{"type":38,"tag":47,"props":188,"children":189},{},[190,192,198],{"type":44,"value":191},"Paths are relative to this skill's directory. Everything else is plain Python, ",{"type":38,"tag":53,"props":193,"children":195},{"className":194},[],[196],{"type":44,"value":197},"node",{"type":44,"value":199},", or shell.",{"type":38,"tag":62,"props":201,"children":202},{},[203,219],{"type":38,"tag":66,"props":204,"children":205},{},[206],{"type":38,"tag":70,"props":207,"children":208},{},[209,214],{"type":38,"tag":74,"props":210,"children":211},{},[212],{"type":44,"value":213},"Script",{"type":38,"tag":74,"props":215,"children":216},{},[217],{"type":44,"value":218},"What it does",{"type":38,"tag":85,"props":220,"children":221},{},[222,262,300,332,357],{"type":38,"tag":70,"props":223,"children":224},{},[225,234],{"type":38,"tag":92,"props":226,"children":227},{},[228],{"type":38,"tag":53,"props":229,"children":231},{"className":230},[],[232],{"type":44,"value":233},"scripts\u002Fthumbnail.py deck.pptx [prefix]",{"type":38,"tag":92,"props":235,"children":236},{},[237,239,244,246,252,254,260],{"type":44,"value":238},"Labeled grid of every slide, for picking template layouts. ",{"type":38,"tag":53,"props":240,"children":242},{"className":241},[],[243],{"type":44,"value":58},{"type":44,"value":245}," only. Pass ",{"type":38,"tag":53,"props":247,"children":249},{"className":248},[],[250],{"type":44,"value":251},"prefix",{"type":44,"value":253}," — it defaults to ",{"type":38,"tag":53,"props":255,"children":257},{"className":256},[],[258],{"type":44,"value":259},"thumbnails",{"type":44,"value":261},", which overwrites the grids of any other deck done in the same directory",{"type":38,"tag":70,"props":263,"children":264},{},[265,274],{"type":38,"tag":92,"props":266,"children":267},{},[268],{"type":38,"tag":53,"props":269,"children":271},{"className":270},[],[272],{"type":44,"value":273},"scripts\u002Fadd_slide.py unpacked\u002F slide2.xml [--after slideN.xml]",{"type":38,"tag":92,"props":275,"children":276},{},[277,279,285,287,292,294],{"type":44,"value":278},"Duplicate a slide (or a ",{"type":38,"tag":53,"props":280,"children":282},{"className":281},[],[283],{"type":44,"value":284},"slideLayoutN.xml",{"type":44,"value":286},") with all the package bookkeeping. Also takes a ",{"type":38,"tag":53,"props":288,"children":290},{"className":289},[],[291],{"type":44,"value":58},{"type":44,"value":293}," directly with ",{"type":38,"tag":53,"props":295,"children":297},{"className":296},[],[298],{"type":44,"value":299},"-o out.pptx",{"type":38,"tag":70,"props":301,"children":302},{},[303,312],{"type":38,"tag":92,"props":304,"children":305},{},[306],{"type":38,"tag":53,"props":307,"children":309},{"className":308},[],[310],{"type":44,"value":311},"scripts\u002Fclean.py unpacked\u002F",{"type":38,"tag":92,"props":313,"children":314},{},[315,317,322,324,330],{"type":44,"value":316},"Delete slides, media, and rels no longer referenced. Run ",{"type":38,"tag":96,"props":318,"children":319},{},[320],{"type":44,"value":321},"after",{"type":44,"value":323}," ",{"type":38,"tag":53,"props":325,"children":327},{"className":326},[],[328],{"type":44,"value":329},"\u003Cp:sldIdLst>",{"type":44,"value":331}," is final",{"type":38,"tag":70,"props":333,"children":334},{},[335,344],{"type":38,"tag":92,"props":336,"children":337},{},[338],{"type":38,"tag":53,"props":339,"children":341},{"className":340},[],[342],{"type":44,"value":343},"scripts\u002Foffice\u002Fvalidate.py deck.pptx [--original src.pptx]",{"type":38,"tag":92,"props":345,"children":346},{},[347,349,355],{"type":44,"value":348},"Schema, relationship, content-type, chart and slide checks; each failure names its fix. Pass ",{"type":38,"tag":53,"props":350,"children":352},{"className":351},[],[353],{"type":44,"value":354},"--original",{"type":44,"value":356}," for any template-derived deck — it baselines the schema checks against the template, so the template's own XSD errors don't read as yours",{"type":38,"tag":70,"props":358,"children":359},{},[360,369],{"type":38,"tag":92,"props":361,"children":362},{},[363],{"type":38,"tag":53,"props":364,"children":366},{"className":365},[],[367],{"type":44,"value":368},"scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pdf deck.pptx",{"type":38,"tag":92,"props":370,"children":371},{},[372,374,380],{"type":44,"value":373},"LibreOffice wrapper — bare ",{"type":38,"tag":53,"props":375,"children":377},{"className":376},[],[378],{"type":44,"value":379},"soffice",{"type":44,"value":381}," hangs in this sandbox",{"type":38,"tag":181,"props":383,"children":385},{"id":384},"creating-with-pptxgenjs-gotchas",[386],{"type":44,"value":387},"Creating with pptxgenjs — gotchas",{"type":38,"tag":47,"props":389,"children":390},{},[391,396,398,404,406,412,414,420],{"type":38,"tag":53,"props":392,"children":394},{"className":393},[],[395],{"type":44,"value":113},{"type":44,"value":397}," is preinstalled — do not run ",{"type":38,"tag":53,"props":399,"children":401},{"className":400},[],[402],{"type":44,"value":403},"npm install",{"type":44,"value":405}," first; write the script and ",{"type":38,"tag":53,"props":407,"children":409},{"className":408},[],[410],{"type":44,"value":411},"require('pptxgenjs')",{"type":44,"value":413}," directly. Only if that require fails: ",{"type":38,"tag":53,"props":415,"children":417},{"className":416},[],[418],{"type":44,"value":419},"npm install pptxgenjs",{"type":44,"value":421},". The model knows the API; these are the footguns:",{"type":38,"tag":423,"props":424,"children":425},"ul",{},[426,468,532,558,584,608,657,675,703,713,731,747,773,858,909,972,997,1029],{"type":38,"tag":427,"props":428,"children":429},"li",{},[430,443,445,451,453,458,460,466],{"type":38,"tag":96,"props":431,"children":432},{},[433,435,441],{"type":44,"value":434},"Set ",{"type":38,"tag":53,"props":436,"children":438},{"className":437},[],[439],{"type":44,"value":440},"pres.layout",{"type":44,"value":442}," before adding slides.",{"type":44,"value":444}," The default canvas is ",{"type":38,"tag":53,"props":446,"children":448},{"className":447},[],[449],{"type":44,"value":450},"LAYOUT_16x9",{"type":44,"value":452}," = ",{"type":38,"tag":96,"props":454,"children":455},{},[456],{"type":44,"value":457},"10\" × 5.625\"",{"type":44,"value":459},", not 13.3\" wide. Coordinates past the edge are written, not clamped — the shape just isn't on the slide. (",{"type":38,"tag":53,"props":461,"children":463},{"className":462},[],[464],{"type":44,"value":465},"LAYOUT_WIDE",{"type":44,"value":467}," is 13.3\" × 7.5\".)",{"type":38,"tag":427,"props":469,"children":470},{},[471,484,485,491,493,499,501,507,509,514,516,522,524,530],{"type":38,"tag":96,"props":472,"children":473},{},[474,476,482],{"type":44,"value":475},"Hex colors: never ",{"type":38,"tag":53,"props":477,"children":479},{"className":478},[],[480],{"type":44,"value":481},"#",{"type":44,"value":483},", never 8 digits.",{"type":44,"value":323},{"type":38,"tag":53,"props":486,"children":488},{"className":487},[],[489],{"type":44,"value":490},"color: \"FF0000\"",{"type":44,"value":492},". Both ",{"type":38,"tag":53,"props":494,"children":496},{"className":495},[],[497],{"type":44,"value":498},"\"#FF0000\"",{"type":44,"value":500}," and alpha baked into the hex (",{"type":38,"tag":53,"props":502,"children":504},{"className":503},[],[505],{"type":44,"value":506},"\"00000020\"",{"type":44,"value":508},") ",{"type":38,"tag":96,"props":510,"children":511},{},[512],{"type":44,"value":513},"corrupt the file",{"type":44,"value":515},". For translucency: ",{"type":38,"tag":53,"props":517,"children":519},{"className":518},[],[520],{"type":44,"value":521},"transparency: 0-100",{"type":44,"value":523}," on fills and images, ",{"type":38,"tag":53,"props":525,"children":527},{"className":526},[],[528],{"type":44,"value":529},"opacity: 0.0-1.0",{"type":44,"value":531}," on shadows — each is silently ignored on the other.",{"type":38,"tag":427,"props":533,"children":534},{},[535,540,542,548,550,556],{"type":38,"tag":96,"props":536,"children":537},{},[538],{"type":44,"value":539},"pptxgenjs mutates option objects in place",{"type":44,"value":541}," (converts values to EMU on first use). Never share one ",{"type":38,"tag":53,"props":543,"children":545},{"className":544},[],[546],{"type":44,"value":547},"shadow",{"type":44,"value":549},"\u002Foptions object across two ",{"type":38,"tag":53,"props":551,"children":553},{"className":552},[],[554],{"type":44,"value":555},"add*",{"type":44,"value":557}," calls — build a fresh object each time.",{"type":38,"tag":427,"props":559,"children":560},{},[561,574,576,582],{"type":38,"tag":96,"props":562,"children":563},{},[564,566,572],{"type":44,"value":565},"Shadow ",{"type":38,"tag":53,"props":567,"children":569},{"className":568},[],[570],{"type":44,"value":571},"offset",{"type":44,"value":573}," must be ≥ 0",{"type":44,"value":575}," — a negative offset corrupts the file. To cast a shadow upward, use ",{"type":38,"tag":53,"props":577,"children":579},{"className":578},[],[580],{"type":44,"value":581},"angle: 270",{"type":44,"value":583}," with a positive offset.",{"type":38,"tag":427,"props":585,"children":586},{},[587,598,600,606],{"type":38,"tag":96,"props":588,"children":589},{},[590,596],{"type":38,"tag":53,"props":591,"children":593},{"className":592},[],[594],{"type":44,"value":595},"letterSpacing",{"type":44,"value":597}," is silently ignored",{"type":44,"value":599}," — the real option is ",{"type":38,"tag":53,"props":601,"children":603},{"className":602},[],[604],{"type":44,"value":605},"charSpacing",{"type":44,"value":607},".",{"type":38,"tag":427,"props":609,"children":610},{},[611,616,617,623,625,631,633,639,641,647,649,655],{"type":38,"tag":96,"props":612,"children":613},{},[614],{"type":44,"value":615},"Lists:",{"type":44,"value":323},{"type":38,"tag":53,"props":618,"children":620},{"className":619},[],[621],{"type":44,"value":622},"bullet: true",{"type":44,"value":624}," on each item, never a literal ",{"type":38,"tag":53,"props":626,"children":628},{"className":627},[],[629],{"type":44,"value":630},"•",{"type":44,"value":632}," (renders double bullets). Set ",{"type":38,"tag":53,"props":634,"children":636},{"className":635},[],[637],{"type":44,"value":638},"breakLine: true",{"type":44,"value":640}," on every array item except the last. Space bulleted paragraphs with ",{"type":38,"tag":53,"props":642,"children":644},{"className":643},[],[645],{"type":44,"value":646},"paraSpaceAfter",{"type":44,"value":648},", not ",{"type":38,"tag":53,"props":650,"children":652},{"className":651},[],[653],{"type":44,"value":654},"lineSpacing",{"type":44,"value":656}," (huge gaps).",{"type":38,"tag":427,"props":658,"children":659},{},[660,673],{"type":38,"tag":96,"props":661,"children":662},{},[663,665,671],{"type":44,"value":664},"One ",{"type":38,"tag":53,"props":666,"children":668},{"className":667},[],[669],{"type":44,"value":670},"new pptxgen()",{"type":44,"value":672}," per output file",{"type":44,"value":674}," — never reuse an instance.",{"type":38,"tag":427,"props":676,"children":677},{},[678,695,696,702],{"type":38,"tag":96,"props":679,"children":680},{},[681,687,689],{"type":38,"tag":53,"props":682,"children":684},{"className":683},[],[685],{"type":44,"value":686},"rectRadius",{"type":44,"value":688}," only works on ",{"type":38,"tag":53,"props":690,"children":692},{"className":691},[],[693],{"type":44,"value":694},"ROUNDED_RECTANGLE",{"type":44,"value":648},{"type":38,"tag":53,"props":697,"children":699},{"className":698},[],[700],{"type":44,"value":701},"RECTANGLE",{"type":44,"value":607},{"type":38,"tag":427,"props":704,"children":705},{},[706,711],{"type":38,"tag":96,"props":707,"children":708},{},[709],{"type":44,"value":710},"Gradient fills aren't supported",{"type":44,"value":712}," — use a gradient image as the background instead.",{"type":38,"tag":427,"props":714,"children":715},{},[716,721,723,729],{"type":38,"tag":96,"props":717,"children":718},{},[719],{"type":44,"value":720},"Text boxes have built-in internal padding",{"type":44,"value":722}," — set ",{"type":38,"tag":53,"props":724,"children":726},{"className":725},[],[727],{"type":44,"value":728},"margin: 0",{"type":44,"value":730}," whenever text must align with a shape, line, or icon at the same x.",{"type":38,"tag":427,"props":732,"children":733},{},[734,745],{"type":38,"tag":96,"props":735,"children":736},{},[737,739],{"type":44,"value":738},"Speaker notes go in ",{"type":38,"tag":53,"props":740,"children":742},{"className":741},[],[743],{"type":44,"value":744},"slide.addNotes(\"...\")",{"type":44,"value":746}," (plain text, once per slide), never in a text box on the slide.",{"type":38,"tag":427,"props":748,"children":749},{},[750,755,757,763,765,771],{"type":38,"tag":96,"props":751,"children":752},{},[753],{"type":44,"value":754},"Keep charts native.",{"type":44,"value":756}," Use ",{"type":38,"tag":53,"props":758,"children":760},{"className":759},[],[761],{"type":44,"value":762},"addChart()",{"type":44,"value":764}," for everything PowerPoint can chart (pass an array of ",{"type":38,"tag":53,"props":766,"children":768},{"className":767},[],[769],{"type":44,"value":770},"{type, data, options}",{"type":44,"value":772}," for combos). For PowerPoint-native features the library doesn't expose (trendlines, error bars), compute the extra series yourself or post-process the generated OOXML — do not fall back to a rendered image. Only chart types PowerPoint has no native form for (Sankey, network, chord) go in as images.",{"type":38,"tag":427,"props":774,"children":775},{},[776,781,783,789,791,797,799,805,806,812,813,819,821,827,829,835,836,842,843,849,850,856],{"type":38,"tag":96,"props":777,"children":778},{},[779],{"type":44,"value":780},"Default charts render bare",{"type":44,"value":782}," — no title, no data labels, dated palette. Set ",{"type":38,"tag":53,"props":784,"children":786},{"className":785},[],[787],{"type":44,"value":788},"showTitle",{"type":44,"value":790}," + ",{"type":38,"tag":53,"props":792,"children":794},{"className":793},[],[795],{"type":44,"value":796},"title",{"type":44,"value":798},", ",{"type":38,"tag":53,"props":800,"children":802},{"className":801},[],[803],{"type":44,"value":804},"showValue: true",{"type":44,"value":790},{"type":38,"tag":53,"props":807,"children":809},{"className":808},[],[810],{"type":44,"value":811},"dataLabelPosition",{"type":44,"value":798},{"type":38,"tag":53,"props":814,"children":816},{"className":815},[],[817],{"type":44,"value":818},"chartColors: [...]",{"type":44,"value":820}," from your palette, and quiet the frame (",{"type":38,"tag":53,"props":822,"children":824},{"className":823},[],[825],{"type":44,"value":826},"catAxisLabelColor",{"type":44,"value":828},"\u002F",{"type":38,"tag":53,"props":830,"children":832},{"className":831},[],[833],{"type":44,"value":834},"valAxisLabelColor",{"type":44,"value":798},{"type":38,"tag":53,"props":837,"children":839},{"className":838},[],[840],{"type":44,"value":841},"valGridLine: { color, size }",{"type":44,"value":798},{"type":38,"tag":53,"props":844,"children":846},{"className":845},[],[847],{"type":44,"value":848},"catGridLine: { style: \"none\" }",{"type":44,"value":798},{"type":38,"tag":53,"props":851,"children":853},{"className":852},[],[854],{"type":44,"value":855},"showLegend: false",{"type":44,"value":857}," for a single series).",{"type":38,"tag":427,"props":859,"children":860},{},[861,895,896,902,903,908],{"type":38,"tag":96,"props":862,"children":863},{},[864,866,871,873,879,880,886,888,894],{"type":44,"value":865},"On a stacked bar or column chart, ",{"type":38,"tag":53,"props":867,"children":869},{"className":868},[],[870],{"type":44,"value":811},{"type":44,"value":872}," must be ",{"type":38,"tag":53,"props":874,"children":876},{"className":875},[],[877],{"type":44,"value":878},"ctr",{"type":44,"value":798},{"type":38,"tag":53,"props":881,"children":883},{"className":882},[],[884],{"type":44,"value":885},"inEnd",{"type":44,"value":887},", or ",{"type":38,"tag":53,"props":889,"children":891},{"className":890},[],[892],{"type":44,"value":893},"inBase",{"type":44,"value":607},{"type":44,"value":323},{"type":38,"tag":53,"props":897,"children":899},{"className":898},[],[900],{"type":44,"value":901},"outEnd",{"type":44,"value":323},{"type":38,"tag":96,"props":904,"children":905},{},[906],{"type":44,"value":907},"corrupts the file",{"type":44,"value":607},{"type":38,"tag":427,"props":910,"children":911},{},[912,948,950,956,958,963,965,970],{"type":38,"tag":96,"props":913,"children":914},{},[915,917,923,924,930,932,938,940,946],{"type":44,"value":916},"A combo series using ",{"type":38,"tag":53,"props":918,"children":920},{"className":919},[],[921],{"type":44,"value":922},"secondaryValAxis",{"type":44,"value":828},{"type":38,"tag":53,"props":925,"children":927},{"className":926},[],[928],{"type":44,"value":929},"secondaryCatAxis",{"type":44,"value":931}," needs both ",{"type":38,"tag":53,"props":933,"children":935},{"className":934},[],[936],{"type":44,"value":937},"valAxes",{"type":44,"value":939}," and ",{"type":38,"tag":53,"props":941,"children":943},{"className":942},[],[944],{"type":44,"value":945},"catAxes",{"type":44,"value":947}," on the chart options, two entries each.",{"type":44,"value":949}," Without them pptxgenjs writes axis ",{"type":38,"tag":951,"props":952,"children":953},"em",{},[954],{"type":44,"value":955},"ids",{"type":44,"value":957}," it never declares, and PowerPoint ",{"type":38,"tag":96,"props":959,"children":960},{},[961],{"type":44,"value":962},"discards that chart",{"type":44,"value":964}," and reports the file as corrupt. Supplying only ",{"type":38,"tag":53,"props":966,"children":968},{"className":967},[],[969],{"type":44,"value":937},{"type":44,"value":971}," is not enough.",{"type":38,"tag":427,"props":973,"children":974},{},[975,995],{"type":38,"tag":96,"props":976,"children":977},{},[978,980,986,988,994],{"type":44,"value":979},"After ",{"type":38,"tag":53,"props":981,"children":983},{"className":982},[],[984],{"type":44,"value":985},"writeFile()",{"type":44,"value":987},", run ",{"type":38,"tag":53,"props":989,"children":991},{"className":990},[],[992],{"type":44,"value":993},"python scripts\u002Foffice\u002Fvalidate.py deck.pptx",{"type":44,"value":607},{"type":44,"value":996}," It reports the two chart faults above and the slide-XML defects PowerPoint refuses, and names the fix for each. Fix them in your generator, not by hand-editing the packed XML.",{"type":38,"tag":427,"props":998,"children":999},{},[1000,1012,1014,1020,1022,1027],{"type":38,"tag":96,"props":1001,"children":1002},{},[1003,1005,1011],{"type":44,"value":1004},"Never reorder the children of ",{"type":38,"tag":53,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":44,"value":1010},"\u003Cp:presentation>",{"type":44,"value":607},{"type":44,"value":1013}," pptxgenjs writes ",{"type":38,"tag":53,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":44,"value":1019},"\u003Cp:notesMasterIdLst>",{"type":44,"value":1021}," right after ",{"type":38,"tag":53,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":44,"value":329},{"type":44,"value":1028}," and points both masters at one theme part. PowerPoint reads that happily — move the element and the same deck becomes unopenable.",{"type":38,"tag":427,"props":1030,"children":1031},{},[1032,1037,1039,1045,1047,1053,1055,1061,1063,1069,1071,1077,1079,1084,1085,1091,1092,1098,1100,1105,1107,1113],{"type":38,"tag":96,"props":1033,"children":1034},{},[1035],{"type":44,"value":1036},"Icons:",{"type":44,"value":1038}," render ",{"type":38,"tag":53,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":44,"value":1044},"react-icons",{"type":44,"value":1046}," to SVG (",{"type":38,"tag":53,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":44,"value":1052},"ReactDOMServer.renderToStaticMarkup",{"type":44,"value":1054},"), rasterize with ",{"type":38,"tag":53,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":44,"value":1060},"sharp",{"type":44,"value":1062}," at ≥256px, and insert via ",{"type":38,"tag":53,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":44,"value":1068},"addImage({ data: \"image\u002Fpng;base64,\" + buf.toString(\"base64\") })",{"type":44,"value":1070}," — the ",{"type":38,"tag":53,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":44,"value":1076},"image\u002Fpng;base64,",{"type":44,"value":1078}," prefix is required (",{"type":38,"tag":53,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":44,"value":1044},{"type":44,"value":798},{"type":38,"tag":53,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":44,"value":1090},"react",{"type":44,"value":798},{"type":38,"tag":53,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":44,"value":1097},"react-dom",{"type":44,"value":1099},", and ",{"type":38,"tag":53,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":44,"value":1060},{"type":44,"value":1106}," are preinstalled — ",{"type":38,"tag":53,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":44,"value":1112},"npm install react-icons react react-dom sharp",{"type":44,"value":1114}," only if a require fails).",{"type":38,"tag":181,"props":1116,"children":1118},{"id":1117},"editing-existing-decks-and-templates",[1119],{"type":44,"value":1120},"Editing existing decks and templates",{"type":38,"tag":47,"props":1122,"children":1123},{},[1124,1126,1132,1134,1140,1142,1148,1150,1155,1157,1162,1164,1171,1173,1178,1180,1186,1188,1193,1195,1201],{"type":44,"value":1125},"Pick layouts first: ",{"type":38,"tag":53,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":44,"value":1131},"python scripts\u002Fthumbnail.py template.pptx template-thumbs",{"type":44,"value":1133}," writes a labeled grid of every slide and prints the file(s) it created — ",{"type":38,"tag":53,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":44,"value":1139},"template-thumbs.jpg",{"type":44,"value":1141},", split into ",{"type":38,"tag":53,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":44,"value":1147},"template-thumbs-N.jpg",{"type":44,"value":1149}," past 12 slides. ",{"type":38,"tag":96,"props":1151,"children":1152},{},[1153],{"type":44,"value":1154},"Always pass that second argument, named after the deck.",{"type":44,"value":1156}," It defaults to ",{"type":38,"tag":53,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":44,"value":259},{"type":44,"value":1163},", so two decks thumbnailed in one directory silently overwrite each other's grids — the first deck's are simply gone (template analysis only — visual QA needs the full-resolution renders from ",{"type":38,"tag":1165,"props":1166,"children":1168},"a",{"href":1167},"#converting-to-images",[1169],{"type":44,"value":1170},"Converting to Images",{"type":44,"value":1172},"; it only accepts ",{"type":38,"tag":53,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":44,"value":58},{"type":44,"value":1179},", so copy a ",{"type":38,"tag":53,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":44,"value":1185},".potx",{"type":44,"value":1187}," to a ",{"type":38,"tag":53,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":44,"value":58},{"type":44,"value":1194}," name first). Use it with ",{"type":38,"tag":53,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":44,"value":1200},"markitdown",{"type":44,"value":1202}," to map each content section onto a template slide, and vary the layouts — don't put every section on the same title-and-bullets slide.",{"type":38,"tag":1204,"props":1205,"children":1210},"pre",{"className":1206,"code":1207,"language":1208,"meta":1209,"style":1209},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python3 -c \"import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')\" deck.pptx\npython scripts\u002Fadd_slide.py unpacked\u002F slide2.xml --after slide2.xml   # duplicate a slide (or slideLayoutN.xml); prints the new slide's path\n# reorder \u002F delete slides = edit \u003Cp:sldIdLst> in ppt\u002Fpresentation.xml\npython scripts\u002Fclean.py unpacked\u002F                                     # after deletions: removes orphaned slides, media, rels\n# edit slide content in ppt\u002Fslides\u002FslideN.xml\n(cd unpacked && rm -f ..\u002Fout.pptx && zip -Xr ..\u002Fout.pptx .)           # zip from INSIDE the dir; rm first or deleted parts survive\npython scripts\u002Foffice\u002Fvalidate.py out.pptx --original deck.pptx\n","bash","",[1211],{"type":38,"tag":53,"props":1212,"children":1213},{"__ignoreMap":1209},[1214,1253,1292,1301,1323,1332,1405],{"type":38,"tag":1215,"props":1216,"children":1219},"span",{"class":1217,"line":1218},"line",1,[1220,1226,1232,1238,1243,1248],{"type":38,"tag":1215,"props":1221,"children":1223},{"style":1222},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1224],{"type":44,"value":1225},"python3",{"type":38,"tag":1215,"props":1227,"children":1229},{"style":1228},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1230],{"type":44,"value":1231}," -c",{"type":38,"tag":1215,"props":1233,"children":1235},{"style":1234},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1236],{"type":44,"value":1237}," \"",{"type":38,"tag":1215,"props":1239,"children":1240},{"style":1228},[1241],{"type":44,"value":1242},"import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall('unpacked')",{"type":38,"tag":1215,"props":1244,"children":1245},{"style":1234},[1246],{"type":44,"value":1247},"\"",{"type":38,"tag":1215,"props":1249,"children":1250},{"style":1228},[1251],{"type":44,"value":1252}," deck.pptx\n",{"type":38,"tag":1215,"props":1254,"children":1256},{"class":1217,"line":1255},2,[1257,1262,1267,1272,1277,1282,1286],{"type":38,"tag":1215,"props":1258,"children":1259},{"style":1222},[1260],{"type":44,"value":1261},"python",{"type":38,"tag":1215,"props":1263,"children":1264},{"style":1228},[1265],{"type":44,"value":1266}," scripts\u002Fadd_slide.py",{"type":38,"tag":1215,"props":1268,"children":1269},{"style":1228},[1270],{"type":44,"value":1271}," unpacked\u002F",{"type":38,"tag":1215,"props":1273,"children":1274},{"style":1228},[1275],{"type":44,"value":1276}," slide2.xml",{"type":38,"tag":1215,"props":1278,"children":1279},{"style":1228},[1280],{"type":44,"value":1281}," --after",{"type":38,"tag":1215,"props":1283,"children":1284},{"style":1228},[1285],{"type":44,"value":1276},{"type":38,"tag":1215,"props":1287,"children":1289},{"style":1288},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1290],{"type":44,"value":1291},"   # duplicate a slide (or slideLayoutN.xml); prints the new slide's path\n",{"type":38,"tag":1215,"props":1293,"children":1295},{"class":1217,"line":1294},3,[1296],{"type":38,"tag":1215,"props":1297,"children":1298},{"style":1288},[1299],{"type":44,"value":1300},"# reorder \u002F delete slides = edit \u003Cp:sldIdLst> in ppt\u002Fpresentation.xml\n",{"type":38,"tag":1215,"props":1302,"children":1304},{"class":1217,"line":1303},4,[1305,1309,1314,1318],{"type":38,"tag":1215,"props":1306,"children":1307},{"style":1222},[1308],{"type":44,"value":1261},{"type":38,"tag":1215,"props":1310,"children":1311},{"style":1228},[1312],{"type":44,"value":1313}," scripts\u002Fclean.py",{"type":38,"tag":1215,"props":1315,"children":1316},{"style":1228},[1317],{"type":44,"value":1271},{"type":38,"tag":1215,"props":1319,"children":1320},{"style":1288},[1321],{"type":44,"value":1322},"                                     # after deletions: removes orphaned slides, media, rels\n",{"type":38,"tag":1215,"props":1324,"children":1326},{"class":1217,"line":1325},5,[1327],{"type":38,"tag":1215,"props":1328,"children":1329},{"style":1288},[1330],{"type":44,"value":1331},"# edit slide content in ppt\u002Fslides\u002FslideN.xml\n",{"type":38,"tag":1215,"props":1333,"children":1335},{"class":1217,"line":1334},6,[1336,1341,1347,1352,1357,1362,1367,1372,1376,1381,1386,1390,1395,1400],{"type":38,"tag":1215,"props":1337,"children":1338},{"style":1234},[1339],{"type":44,"value":1340},"(",{"type":38,"tag":1215,"props":1342,"children":1344},{"style":1343},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1345],{"type":44,"value":1346},"cd",{"type":38,"tag":1215,"props":1348,"children":1349},{"style":1228},[1350],{"type":44,"value":1351}," unpacked",{"type":38,"tag":1215,"props":1353,"children":1354},{"style":1234},[1355],{"type":44,"value":1356}," &&",{"type":38,"tag":1215,"props":1358,"children":1359},{"style":1222},[1360],{"type":44,"value":1361}," rm",{"type":38,"tag":1215,"props":1363,"children":1364},{"style":1228},[1365],{"type":44,"value":1366}," -f",{"type":38,"tag":1215,"props":1368,"children":1369},{"style":1228},[1370],{"type":44,"value":1371}," ..\u002Fout.pptx",{"type":38,"tag":1215,"props":1373,"children":1374},{"style":1234},[1375],{"type":44,"value":1356},{"type":38,"tag":1215,"props":1377,"children":1378},{"style":1222},[1379],{"type":44,"value":1380}," zip",{"type":38,"tag":1215,"props":1382,"children":1383},{"style":1228},[1384],{"type":44,"value":1385}," -Xr",{"type":38,"tag":1215,"props":1387,"children":1388},{"style":1228},[1389],{"type":44,"value":1371},{"type":38,"tag":1215,"props":1391,"children":1392},{"style":1228},[1393],{"type":44,"value":1394}," .",{"type":38,"tag":1215,"props":1396,"children":1397},{"style":1234},[1398],{"type":44,"value":1399},")",{"type":38,"tag":1215,"props":1401,"children":1402},{"style":1288},[1403],{"type":44,"value":1404},"           # zip from INSIDE the dir; rm first or deleted parts survive\n",{"type":38,"tag":1215,"props":1406,"children":1408},{"class":1217,"line":1407},7,[1409,1413,1418,1423,1428],{"type":38,"tag":1215,"props":1410,"children":1411},{"style":1222},[1412],{"type":44,"value":1261},{"type":38,"tag":1215,"props":1414,"children":1415},{"style":1228},[1416],{"type":44,"value":1417}," scripts\u002Foffice\u002Fvalidate.py",{"type":38,"tag":1215,"props":1419,"children":1420},{"style":1228},[1421],{"type":44,"value":1422}," out.pptx",{"type":38,"tag":1215,"props":1424,"children":1425},{"style":1228},[1426],{"type":44,"value":1427}," --original",{"type":38,"tag":1215,"props":1429,"children":1430},{"style":1228},[1431],{"type":44,"value":1252},{"type":38,"tag":423,"props":1433,"children":1434},{},[1435,1467,1521,1577,1612],{"type":38,"tag":427,"props":1436,"children":1437},{},[1438,1443,1444,1450,1452,1458,1460,1465],{"type":38,"tag":96,"props":1439,"children":1440},{},[1441],{"type":44,"value":1442},"Do all structural work — add, delete, reorder — before editing any slide's content.",{"type":44,"value":323},{"type":38,"tag":53,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":44,"value":1449},"add_slide.py",{"type":44,"value":1451}," copies a slide file verbatim, so duplicating after you edit clones the edited content; and ",{"type":38,"tag":53,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":44,"value":1457},"clean.py",{"type":44,"value":1459}," deletes any slide missing from ",{"type":38,"tag":53,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":44,"value":329},{"type":44,"value":1466},", including one you just wrote.",{"type":38,"tag":427,"props":1468,"children":1469},{},[1470,1475,1477,1482,1484,1490,1492,1498,1499,1512,1514,1519],{"type":38,"tag":96,"props":1471,"children":1472},{},[1473],{"type":44,"value":1474},"Never copy a slide file by hand",{"type":44,"value":1476}," — ",{"type":38,"tag":53,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":44,"value":1449},{"type":44,"value":1483}," does every registration a new slide needs and reports what it made (",{"type":38,"tag":53,"props":1485,"children":1487},{"className":1486},[],[1488],{"type":44,"value":1489},"Created ppt\u002Fslides\u002Fslide17.xml from slide2.xml",{"type":44,"value":1491},"). It also works directly on a file: ",{"type":38,"tag":53,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":44,"value":1497},"add_slide.py deck.pptx slide2.xml -o out.pptx",{"type":44,"value":1476},{"type":38,"tag":96,"props":1500,"children":1501},{},[1502,1504,1510],{"type":44,"value":1503},"pass ",{"type":38,"tag":53,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":44,"value":1509},"-o",{"type":44,"value":1511},", or it rewrites the input deck in place.",{"type":44,"value":1513}," A duplicated slide still ",{"type":38,"tag":951,"props":1515,"children":1516},{},[1517],{"type":44,"value":1518},"references",{"type":44,"value":1520}," its source's chart\u002FSmartArt\u002Fembedded-object parts rather than cloning them, so editing one slide's chart changes the other's.",{"type":38,"tag":427,"props":1522,"children":1523},{},[1524,1535,1537,1543,1545,1551,1553,1559,1561,1567,1569,1575],{"type":38,"tag":96,"props":1525,"children":1526},{},[1527,1529],{"type":44,"value":1528},"If you use ",{"type":38,"tag":53,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":44,"value":1534},"python-pptx",{"type":44,"value":1536},", three things it won't do: duplicate a slide (its only entry point is ",{"type":38,"tag":53,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":44,"value":1542},"add_slide(layout)",{"type":44,"value":1544},"), preserve formatting through ",{"type":38,"tag":53,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":44,"value":1550},"text_frame.text = \"...\"",{"type":44,"value":1552}," (that collapses the paragraph to a single unstyled run — assign ",{"type":38,"tag":53,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":44,"value":1558},"run.text",{"type":44,"value":1560}," instead), or read the SVG\u002FEMF most template art uses (",{"type":38,"tag":53,"props":1562,"children":1564},{"className":1563},[],[1565],{"type":44,"value":1566},"add_picture",{"type":44,"value":1568}," raises ",{"type":38,"tag":53,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":44,"value":1574},"UnidentifiedImageError",{"type":44,"value":1576},").",{"type":38,"tag":427,"props":1578,"children":1579},{},[1580,1582,1588,1590,1596,1598,1603,1605,1610],{"type":44,"value":1581},"Legacy ",{"type":38,"tag":53,"props":1583,"children":1585},{"className":1584},[],[1586],{"type":44,"value":1587},".ppt",{"type":44,"value":1589}," must be converted first: ",{"type":38,"tag":53,"props":1591,"children":1593},{"className":1592},[],[1594],{"type":44,"value":1595},"python scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pptx file.ppt",{"type":44,"value":1597},". ",{"type":38,"tag":53,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":44,"value":1185},{"type":44,"value":1604}," templates unpack and pack identically — keep the ",{"type":38,"tag":53,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":44,"value":1185},{"type":44,"value":1611}," extension on the output.",{"type":38,"tag":427,"props":1613,"children":1614},{},[1615],{"type":44,"value":1616},"To reuse a template icon or image, duplicate a slide or layout that already contains it.",{"type":38,"tag":47,"props":1618,"children":1619},{},[1620],{"type":44,"value":1621},"When filling in a template:",{"type":38,"tag":423,"props":1623,"children":1624},{},[1625,1646,1656,1706,1741],{"type":38,"tag":427,"props":1626,"children":1627},{},[1628,1630,1636,1638,1644],{"type":44,"value":1629},"If you script an XML transform, parse with ",{"type":38,"tag":53,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":44,"value":1635},"defusedxml.minidom",{"type":44,"value":1637}," — round-tripping OOXML through ",{"type":38,"tag":53,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":44,"value":1643},"xml.etree.ElementTree",{"type":44,"value":1645}," rewrites namespace prefixes and corrupts the deck.",{"type":38,"tag":427,"props":1647,"children":1648},{},[1649,1654],{"type":38,"tag":96,"props":1650,"children":1651},{},[1652],{"type":44,"value":1653},"Template slots ≠ source items.",{"type":44,"value":1655}," If the template shows 4 team members and you have 3, delete the 4th member's entire group (image + text boxes), not just its text — then check for orphaned visuals in QA.",{"type":38,"tag":427,"props":1657,"children":1658},{},[1659,1660,1666,1668,1674,1676,1682,1684,1690,1692,1698,1699,1705],{"type":44,"value":664},{"type":38,"tag":53,"props":1661,"children":1663},{"className":1662},[],[1664],{"type":44,"value":1665},"\u003Ca:p>",{"type":44,"value":1667}," per list item — never concatenate items into a single paragraph. Copy the sibling ",{"type":38,"tag":53,"props":1669,"children":1671},{"className":1670},[],[1672],{"type":44,"value":1673},"\u003Ca:pPr>",{"type":44,"value":1675}," to preserve spacing, and put ",{"type":38,"tag":53,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":44,"value":1681},"b=\"1\"",{"type":44,"value":1683}," on the ",{"type":38,"tag":53,"props":1685,"children":1687},{"className":1686},[],[1688],{"type":44,"value":1689},"\u003Ca:rPr>",{"type":44,"value":1691}," of titles, section headers, and inline labels (",{"type":38,"tag":53,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":44,"value":1697},"Status:",{"type":44,"value":798},{"type":38,"tag":53,"props":1700,"children":1702},{"className":1701},[],[1703],{"type":44,"value":1704},"Owner:",{"type":44,"value":1576},{"type":38,"tag":427,"props":1707,"children":1708},{},[1709,1711,1717,1718,1724,1726,1732,1734,1739],{"type":44,"value":1710},"Let bullets inherit from the layout; only add ",{"type":38,"tag":53,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":44,"value":1716},"\u003Ca:buChar>",{"type":44,"value":798},{"type":38,"tag":53,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":44,"value":1723},"\u003Ca:buAutoNum>",{"type":44,"value":1725}," (numbered), or ",{"type":38,"tag":53,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":44,"value":1731},"\u003Ca:buNone>",{"type":44,"value":1733}," to override — never a literal ",{"type":38,"tag":53,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":44,"value":630},{"type":44,"value":1740}," in the text.",{"type":38,"tag":427,"props":1742,"children":1743},{},[1744,1746,1752,1754,1760],{"type":44,"value":1745},"Text with leading or trailing spaces needs ",{"type":38,"tag":53,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":44,"value":1751},"xml:space=\"preserve\"",{"type":44,"value":1753}," on its ",{"type":38,"tag":53,"props":1755,"children":1757},{"className":1756},[],[1758],{"type":44,"value":1759},"\u003Ca:t>",{"type":44,"value":607},{"type":38,"tag":181,"props":1762,"children":1764},{"id":1763},"design-ideas",[1765],{"type":44,"value":1766},"Design Ideas",{"type":38,"tag":47,"props":1768,"children":1769},{},[1770,1775],{"type":38,"tag":96,"props":1771,"children":1772},{},[1773],{"type":44,"value":1774},"Don't create boring slides.",{"type":44,"value":1776}," Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.",{"type":38,"tag":1778,"props":1779,"children":1781},"h3",{"id":1780},"before-starting",[1782],{"type":44,"value":1783},"Before Starting",{"type":38,"tag":423,"props":1785,"children":1786},{},[1787,1797,1807,1817],{"type":38,"tag":427,"props":1788,"children":1789},{},[1790,1795],{"type":38,"tag":96,"props":1791,"children":1792},{},[1793],{"type":44,"value":1794},"Pick a bold, content-informed color palette",{"type":44,"value":1796},": The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still \"work,\" you haven't made specific enough choices.",{"type":38,"tag":427,"props":1798,"children":1799},{},[1800,1805],{"type":38,"tag":96,"props":1801,"children":1802},{},[1803],{"type":44,"value":1804},"Dominance over equality",{"type":44,"value":1806},": One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.",{"type":38,"tag":427,"props":1808,"children":1809},{},[1810,1815],{"type":38,"tag":96,"props":1811,"children":1812},{},[1813],{"type":44,"value":1814},"Dark\u002Flight contrast",{"type":44,"value":1816},": Dark backgrounds for title + conclusion slides, light for content (\"sandwich\" structure). Or commit to dark throughout for a premium feel.",{"type":38,"tag":427,"props":1818,"children":1819},{},[1820,1825,1827,1832],{"type":38,"tag":96,"props":1821,"children":1822},{},[1823],{"type":44,"value":1824},"Commit to a visual motif",{"type":44,"value":1826},": Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles. Carry it across every slide. ",{"type":38,"tag":96,"props":1828,"children":1829},{},[1830],{"type":44,"value":1831},"Do not use a color bar or accent stripe as your motif",{"type":44,"value":1833}," (see Avoid list).",{"type":38,"tag":1778,"props":1835,"children":1837},{"id":1836},"color-palettes",[1838],{"type":44,"value":1839},"Color Palettes",{"type":38,"tag":47,"props":1841,"children":1842},{},[1843],{"type":44,"value":1844},"Choose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:",{"type":38,"tag":62,"props":1846,"children":1847},{},[1848,1874],{"type":38,"tag":66,"props":1849,"children":1850},{},[1851],{"type":38,"tag":70,"props":1852,"children":1853},{},[1854,1859,1864,1869],{"type":38,"tag":74,"props":1855,"children":1856},{},[1857],{"type":44,"value":1858},"Theme",{"type":38,"tag":74,"props":1860,"children":1861},{},[1862],{"type":44,"value":1863},"Primary",{"type":38,"tag":74,"props":1865,"children":1866},{},[1867],{"type":44,"value":1868},"Secondary",{"type":38,"tag":74,"props":1870,"children":1871},{},[1872],{"type":44,"value":1873},"Accent",{"type":38,"tag":85,"props":1875,"children":1876},{},[1877,1921,1965,2008,2052,2096,2140,2183,2226,2269],{"type":38,"tag":70,"props":1878,"children":1879},{},[1880,1888,1899,1910],{"type":38,"tag":92,"props":1881,"children":1882},{},[1883],{"type":38,"tag":96,"props":1884,"children":1885},{},[1886],{"type":44,"value":1887},"Midnight Executive",{"type":38,"tag":92,"props":1889,"children":1890},{},[1891,1897],{"type":38,"tag":53,"props":1892,"children":1894},{"className":1893},[],[1895],{"type":44,"value":1896},"1E2761",{"type":44,"value":1898}," (navy)",{"type":38,"tag":92,"props":1900,"children":1901},{},[1902,1908],{"type":38,"tag":53,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":44,"value":1907},"CADCFC",{"type":44,"value":1909}," (ice blue)",{"type":38,"tag":92,"props":1911,"children":1912},{},[1913,1919],{"type":38,"tag":53,"props":1914,"children":1916},{"className":1915},[],[1917],{"type":44,"value":1918},"FFFFFF",{"type":44,"value":1920}," (white)",{"type":38,"tag":70,"props":1922,"children":1923},{},[1924,1932,1943,1954],{"type":38,"tag":92,"props":1925,"children":1926},{},[1927],{"type":38,"tag":96,"props":1928,"children":1929},{},[1930],{"type":44,"value":1931},"Forest & Moss",{"type":38,"tag":92,"props":1933,"children":1934},{},[1935,1941],{"type":38,"tag":53,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":44,"value":1940},"2C5F2D",{"type":44,"value":1942}," (forest)",{"type":38,"tag":92,"props":1944,"children":1945},{},[1946,1952],{"type":38,"tag":53,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":44,"value":1951},"97BC62",{"type":44,"value":1953}," (moss)",{"type":38,"tag":92,"props":1955,"children":1956},{},[1957,1963],{"type":38,"tag":53,"props":1958,"children":1960},{"className":1959},[],[1961],{"type":44,"value":1962},"F5F5F5",{"type":44,"value":1964}," (cream)",{"type":38,"tag":70,"props":1966,"children":1967},{},[1968,1976,1987,1998],{"type":38,"tag":92,"props":1969,"children":1970},{},[1971],{"type":38,"tag":96,"props":1972,"children":1973},{},[1974],{"type":44,"value":1975},"Coral Energy",{"type":38,"tag":92,"props":1977,"children":1978},{},[1979,1985],{"type":38,"tag":53,"props":1980,"children":1982},{"className":1981},[],[1983],{"type":44,"value":1984},"F96167",{"type":44,"value":1986}," (coral)",{"type":38,"tag":92,"props":1988,"children":1989},{},[1990,1996],{"type":38,"tag":53,"props":1991,"children":1993},{"className":1992},[],[1994],{"type":44,"value":1995},"F9E795",{"type":44,"value":1997}," (gold)",{"type":38,"tag":92,"props":1999,"children":2000},{},[2001,2007],{"type":38,"tag":53,"props":2002,"children":2004},{"className":2003},[],[2005],{"type":44,"value":2006},"2F3C7E",{"type":44,"value":1898},{"type":38,"tag":70,"props":2009,"children":2010},{},[2011,2019,2030,2041],{"type":38,"tag":92,"props":2012,"children":2013},{},[2014],{"type":38,"tag":96,"props":2015,"children":2016},{},[2017],{"type":44,"value":2018},"Warm Terracotta",{"type":38,"tag":92,"props":2020,"children":2021},{},[2022,2028],{"type":38,"tag":53,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":44,"value":2027},"B85042",{"type":44,"value":2029}," (terracotta)",{"type":38,"tag":92,"props":2031,"children":2032},{},[2033,2039],{"type":38,"tag":53,"props":2034,"children":2036},{"className":2035},[],[2037],{"type":44,"value":2038},"E7E8D1",{"type":44,"value":2040}," (sand)",{"type":38,"tag":92,"props":2042,"children":2043},{},[2044,2050],{"type":38,"tag":53,"props":2045,"children":2047},{"className":2046},[],[2048],{"type":44,"value":2049},"A7BEAE",{"type":44,"value":2051}," (sage)",{"type":38,"tag":70,"props":2053,"children":2054},{},[2055,2063,2074,2085],{"type":38,"tag":92,"props":2056,"children":2057},{},[2058],{"type":38,"tag":96,"props":2059,"children":2060},{},[2061],{"type":44,"value":2062},"Ocean Gradient",{"type":38,"tag":92,"props":2064,"children":2065},{},[2066,2072],{"type":38,"tag":53,"props":2067,"children":2069},{"className":2068},[],[2070],{"type":44,"value":2071},"065A82",{"type":44,"value":2073}," (deep blue)",{"type":38,"tag":92,"props":2075,"children":2076},{},[2077,2083],{"type":38,"tag":53,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":44,"value":2082},"1C7293",{"type":44,"value":2084}," (teal)",{"type":38,"tag":92,"props":2086,"children":2087},{},[2088,2094],{"type":38,"tag":53,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":44,"value":2093},"21295C",{"type":44,"value":2095}," (midnight)",{"type":38,"tag":70,"props":2097,"children":2098},{},[2099,2107,2118,2129],{"type":38,"tag":92,"props":2100,"children":2101},{},[2102],{"type":38,"tag":96,"props":2103,"children":2104},{},[2105],{"type":44,"value":2106},"Charcoal Minimal",{"type":38,"tag":92,"props":2108,"children":2109},{},[2110,2116],{"type":38,"tag":53,"props":2111,"children":2113},{"className":2112},[],[2114],{"type":44,"value":2115},"36454F",{"type":44,"value":2117}," (charcoal)",{"type":38,"tag":92,"props":2119,"children":2120},{},[2121,2127],{"type":38,"tag":53,"props":2122,"children":2124},{"className":2123},[],[2125],{"type":44,"value":2126},"F2F2F2",{"type":44,"value":2128}," (off-white)",{"type":38,"tag":92,"props":2130,"children":2131},{},[2132,2138],{"type":38,"tag":53,"props":2133,"children":2135},{"className":2134},[],[2136],{"type":44,"value":2137},"212121",{"type":44,"value":2139}," (black)",{"type":38,"tag":70,"props":2141,"children":2142},{},[2143,2151,2161,2172],{"type":38,"tag":92,"props":2144,"children":2145},{},[2146],{"type":38,"tag":96,"props":2147,"children":2148},{},[2149],{"type":44,"value":2150},"Teal Trust",{"type":38,"tag":92,"props":2152,"children":2153},{},[2154,2160],{"type":38,"tag":53,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":44,"value":2159},"028090",{"type":44,"value":2084},{"type":38,"tag":92,"props":2162,"children":2163},{},[2164,2170],{"type":38,"tag":53,"props":2165,"children":2167},{"className":2166},[],[2168],{"type":44,"value":2169},"00A896",{"type":44,"value":2171}," (seafoam)",{"type":38,"tag":92,"props":2173,"children":2174},{},[2175,2181],{"type":38,"tag":53,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":44,"value":2180},"02C39A",{"type":44,"value":2182}," (mint)",{"type":38,"tag":70,"props":2184,"children":2185},{},[2186,2194,2205,2216],{"type":38,"tag":92,"props":2187,"children":2188},{},[2189],{"type":38,"tag":96,"props":2190,"children":2191},{},[2192],{"type":44,"value":2193},"Berry & Cream",{"type":38,"tag":92,"props":2195,"children":2196},{},[2197,2203],{"type":38,"tag":53,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":44,"value":2202},"6D2E46",{"type":44,"value":2204}," (berry)",{"type":38,"tag":92,"props":2206,"children":2207},{},[2208,2214],{"type":38,"tag":53,"props":2209,"children":2211},{"className":2210},[],[2212],{"type":44,"value":2213},"A26769",{"type":44,"value":2215}," (dusty rose)",{"type":38,"tag":92,"props":2217,"children":2218},{},[2219,2225],{"type":38,"tag":53,"props":2220,"children":2222},{"className":2221},[],[2223],{"type":44,"value":2224},"ECE2D0",{"type":44,"value":1964},{"type":38,"tag":70,"props":2227,"children":2228},{},[2229,2237,2247,2258],{"type":38,"tag":92,"props":2230,"children":2231},{},[2232],{"type":38,"tag":96,"props":2233,"children":2234},{},[2235],{"type":44,"value":2236},"Sage Calm",{"type":38,"tag":92,"props":2238,"children":2239},{},[2240,2246],{"type":38,"tag":53,"props":2241,"children":2243},{"className":2242},[],[2244],{"type":44,"value":2245},"84B59F",{"type":44,"value":2051},{"type":38,"tag":92,"props":2248,"children":2249},{},[2250,2256],{"type":38,"tag":53,"props":2251,"children":2253},{"className":2252},[],[2254],{"type":44,"value":2255},"69A297",{"type":44,"value":2257}," (eucalyptus)",{"type":38,"tag":92,"props":2259,"children":2260},{},[2261,2267],{"type":38,"tag":53,"props":2262,"children":2264},{"className":2263},[],[2265],{"type":44,"value":2266},"50808E",{"type":44,"value":2268}," (slate)",{"type":38,"tag":70,"props":2270,"children":2271},{},[2272,2280,2291,2301],{"type":38,"tag":92,"props":2273,"children":2274},{},[2275],{"type":38,"tag":96,"props":2276,"children":2277},{},[2278],{"type":44,"value":2279},"Cherry Bold",{"type":38,"tag":92,"props":2281,"children":2282},{},[2283,2289],{"type":38,"tag":53,"props":2284,"children":2286},{"className":2285},[],[2287],{"type":44,"value":2288},"990011",{"type":44,"value":2290}," (cherry)",{"type":38,"tag":92,"props":2292,"children":2293},{},[2294,2300],{"type":38,"tag":53,"props":2295,"children":2297},{"className":2296},[],[2298],{"type":44,"value":2299},"FCF6F5",{"type":44,"value":2128},{"type":38,"tag":92,"props":2302,"children":2303},{},[2304,2309],{"type":38,"tag":53,"props":2305,"children":2307},{"className":2306},[],[2308],{"type":44,"value":2006},{"type":44,"value":1898},{"type":38,"tag":1778,"props":2311,"children":2313},{"id":2312},"for-each-slide",[2314],{"type":44,"value":2315},"For Each Slide",{"type":38,"tag":47,"props":2317,"children":2318},{},[2319,2324],{"type":38,"tag":96,"props":2320,"children":2321},{},[2322],{"type":44,"value":2323},"Every slide needs a visual element",{"type":44,"value":2325}," — image, chart, icon, or shape. Text-only slides are forgettable.",{"type":38,"tag":47,"props":2327,"children":2328},{},[2329],{"type":38,"tag":96,"props":2330,"children":2331},{},[2332],{"type":44,"value":2333},"Layout options:",{"type":38,"tag":423,"props":2335,"children":2336},{},[2337,2342,2347,2352],{"type":38,"tag":427,"props":2338,"children":2339},{},[2340],{"type":44,"value":2341},"Two-column (text left, illustration on right)",{"type":38,"tag":427,"props":2343,"children":2344},{},[2345],{"type":44,"value":2346},"Icon + text rows (icon in colored circle, bold header, description below)",{"type":38,"tag":427,"props":2348,"children":2349},{},[2350],{"type":44,"value":2351},"2x2 or 2x3 grid (image on one side, grid of content blocks on other)",{"type":38,"tag":427,"props":2353,"children":2354},{},[2355],{"type":44,"value":2356},"Half-bleed image (full left or right side) with content overlay",{"type":38,"tag":47,"props":2358,"children":2359},{},[2360],{"type":38,"tag":96,"props":2361,"children":2362},{},[2363],{"type":44,"value":2364},"Data display:",{"type":38,"tag":423,"props":2366,"children":2367},{},[2368,2373,2378],{"type":38,"tag":427,"props":2369,"children":2370},{},[2371],{"type":44,"value":2372},"Large stat callouts (big numbers 60-72pt with small labels below)",{"type":38,"tag":427,"props":2374,"children":2375},{},[2376],{"type":44,"value":2377},"Comparison columns (before\u002Fafter, pros\u002Fcons, side-by-side options)",{"type":38,"tag":427,"props":2379,"children":2380},{},[2381],{"type":44,"value":2382},"Timeline or process flow (numbered steps, arrows)",{"type":38,"tag":47,"props":2384,"children":2385},{},[2386],{"type":38,"tag":96,"props":2387,"children":2388},{},[2389],{"type":44,"value":2390},"Visual polish:",{"type":38,"tag":423,"props":2392,"children":2393},{},[2394,2399],{"type":38,"tag":427,"props":2395,"children":2396},{},[2397],{"type":44,"value":2398},"Icons in small colored circles next to section headers",{"type":38,"tag":427,"props":2400,"children":2401},{},[2402],{"type":44,"value":2403},"Italic accent text for key stats or taglines",{"type":38,"tag":1778,"props":2405,"children":2407},{"id":2406},"typography",[2408],{"type":44,"value":2409},"Typography",{"type":38,"tag":47,"props":2411,"children":2412},{},[2413,2418],{"type":38,"tag":96,"props":2414,"children":2415},{},[2416],{"type":44,"value":2417},"Font names you write into the .pptx are rendered by the user's PowerPoint, not by this environment.",{"type":44,"value":2419}," Your visual QA renders via LibreOffice, which substitutes fonts it doesn't have — and for some fonts the substitute has different widths, so your QA preview can show text overflow (or fit) that the real deck won't have. To keep your QA trustworthy:",{"type":38,"tag":423,"props":2421,"children":2422},{},[2423,2447,2457,2467,2477],{"type":38,"tag":427,"props":2424,"children":2425},{},[2426,2431,2433,2438,2440,2445],{"type":38,"tag":96,"props":2427,"children":2428},{},[2429],{"type":44,"value":2430},"Safe fonts",{"type":44,"value":2432}," (render true-to-width in QA ",{"type":38,"tag":951,"props":2434,"children":2435},{},[2436],{"type":44,"value":2437},"and",{"type":44,"value":2439}," ship with Office): ",{"type":38,"tag":96,"props":2441,"children":2442},{},[2443],{"type":44,"value":2444},"Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook",{"type":44,"value":2446},". Use these for body text and anything where fit matters.",{"type":38,"tag":427,"props":2448,"children":2449},{},[2450,2455],{"type":38,"tag":96,"props":2451,"children":2452},{},[2453],{"type":44,"value":2454},"Headers with personality at zero QA risk",{"type":44,"value":2456},": pair a safe-list serif header (Cambria, Bookman Old Style, Century Schoolbook) with a safe-list sans body (Calibri or Arial). You get visual contrast without giving up reliable overflow checks.",{"type":38,"tag":427,"props":2458,"children":2459},{},[2460,2465],{"type":38,"tag":96,"props":2461,"children":2462},{},[2463],{"type":44,"value":2464},"If the user asks for a font outside the safe list",{"type":44,"value":2466}," (e.g. Georgia or Trebuchet MS): use it where the user asked, but size those containers with extra slack (~10%) and don't trust QA text-fit on those elements — the preview of that font is approximate. If the user hasn't specified, prefer safe-list fonts for body text.",{"type":38,"tag":427,"props":2468,"children":2469},{},[2470,2475],{"type":38,"tag":96,"props":2471,"children":2472},{},[2473],{"type":44,"value":2474},"QA-unreliable fonts",{"type":44,"value":2476}," (substitute has different widths — overflow checks can be wrong): Georgia, Trebuchet MS, Impact, Arial Black, Garamond, Consolas, Palatino Linotype. Calibri Light substitution varies by environment; treat as QA-unreliable. Fine for titles\u002Faccents with slack; don't trust QA text-fit on these.",{"type":38,"tag":427,"props":2478,"children":2479},{},[2480,2485,2487,2491],{"type":38,"tag":96,"props":2481,"children":2482},{},[2483],{"type":44,"value":2484},"Never default to Aptos",{"type":44,"value":2486}," — Office's post-2023 default has no metric-compatible substitute here ",{"type":38,"tag":951,"props":2488,"children":2489},{},[2490],{"type":44,"value":2437},{"type":44,"value":2492}," is missing from older Office installs, so it's unreliable on both ends.",{"type":38,"tag":62,"props":2494,"children":2495},{},[2496,2512],{"type":38,"tag":66,"props":2497,"children":2498},{},[2499],{"type":38,"tag":70,"props":2500,"children":2501},{},[2502,2507],{"type":38,"tag":74,"props":2503,"children":2504},{},[2505],{"type":44,"value":2506},"Element",{"type":38,"tag":74,"props":2508,"children":2509},{},[2510],{"type":44,"value":2511},"Size",{"type":38,"tag":85,"props":2513,"children":2514},{},[2515,2528,2541,2554],{"type":38,"tag":70,"props":2516,"children":2517},{},[2518,2523],{"type":38,"tag":92,"props":2519,"children":2520},{},[2521],{"type":44,"value":2522},"Slide title",{"type":38,"tag":92,"props":2524,"children":2525},{},[2526],{"type":44,"value":2527},"36-44pt bold",{"type":38,"tag":70,"props":2529,"children":2530},{},[2531,2536],{"type":38,"tag":92,"props":2532,"children":2533},{},[2534],{"type":44,"value":2535},"Section header",{"type":38,"tag":92,"props":2537,"children":2538},{},[2539],{"type":44,"value":2540},"20-24pt bold",{"type":38,"tag":70,"props":2542,"children":2543},{},[2544,2549],{"type":38,"tag":92,"props":2545,"children":2546},{},[2547],{"type":44,"value":2548},"Body text",{"type":38,"tag":92,"props":2550,"children":2551},{},[2552],{"type":44,"value":2553},"14-16pt",{"type":38,"tag":70,"props":2555,"children":2556},{},[2557,2562],{"type":38,"tag":92,"props":2558,"children":2559},{},[2560],{"type":44,"value":2561},"Captions",{"type":38,"tag":92,"props":2563,"children":2564},{},[2565],{"type":44,"value":2566},"10-12pt muted",{"type":38,"tag":1778,"props":2568,"children":2570},{"id":2569},"spacing",[2571],{"type":44,"value":2572},"Spacing",{"type":38,"tag":423,"props":2574,"children":2575},{},[2576,2581,2586],{"type":38,"tag":427,"props":2577,"children":2578},{},[2579],{"type":44,"value":2580},"0.5\" minimum margins",{"type":38,"tag":427,"props":2582,"children":2583},{},[2584],{"type":44,"value":2585},"0.3-0.5\" between content blocks",{"type":38,"tag":427,"props":2587,"children":2588},{},[2589],{"type":44,"value":2590},"Leave breathing room—don't fill every inch",{"type":38,"tag":1778,"props":2592,"children":2594},{"id":2593},"avoid-common-mistakes",[2595],{"type":44,"value":2596},"Avoid (Common Mistakes)",{"type":38,"tag":423,"props":2598,"children":2599},{},[2600,2610,2620,2630,2640,2650,2660,2670,2687,2697,2707,2717,2761],{"type":38,"tag":427,"props":2601,"children":2602},{},[2603,2608],{"type":38,"tag":96,"props":2604,"children":2605},{},[2606],{"type":44,"value":2607},"Don't repeat the same layout",{"type":44,"value":2609}," — vary columns, cards, and callouts across slides",{"type":38,"tag":427,"props":2611,"children":2612},{},[2613,2618],{"type":38,"tag":96,"props":2614,"children":2615},{},[2616],{"type":44,"value":2617},"Don't center body text",{"type":44,"value":2619}," — left-align paragraphs and lists; center only titles",{"type":38,"tag":427,"props":2621,"children":2622},{},[2623,2628],{"type":38,"tag":96,"props":2624,"children":2625},{},[2626],{"type":44,"value":2627},"Don't skimp on size contrast",{"type":44,"value":2629}," — titles need 36pt+ to stand out from 14-16pt body",{"type":38,"tag":427,"props":2631,"children":2632},{},[2633,2638],{"type":38,"tag":96,"props":2634,"children":2635},{},[2636],{"type":44,"value":2637},"Don't default to blue",{"type":44,"value":2639}," — pick colors that reflect the specific topic",{"type":38,"tag":427,"props":2641,"children":2642},{},[2643,2648],{"type":38,"tag":96,"props":2644,"children":2645},{},[2646],{"type":44,"value":2647},"Don't mix spacing randomly",{"type":44,"value":2649}," — choose 0.3\" or 0.5\" gaps and use consistently",{"type":38,"tag":427,"props":2651,"children":2652},{},[2653,2658],{"type":38,"tag":96,"props":2654,"children":2655},{},[2656],{"type":44,"value":2657},"Don't style one slide and leave the rest plain",{"type":44,"value":2659}," — commit fully or keep it simple throughout",{"type":38,"tag":427,"props":2661,"children":2662},{},[2663,2668],{"type":38,"tag":96,"props":2664,"children":2665},{},[2666],{"type":44,"value":2667},"Don't create text-only slides",{"type":44,"value":2669}," — add images, icons, charts, or visual elements; avoid plain title + bullets",{"type":38,"tag":427,"props":2671,"children":2672},{},[2673,2678,2680,2685],{"type":38,"tag":96,"props":2674,"children":2675},{},[2676],{"type":44,"value":2677},"Don't forget text box padding",{"type":44,"value":2679}," — when aligning lines or shapes with text edges, set ",{"type":38,"tag":53,"props":2681,"children":2683},{"className":2682},[],[2684],{"type":44,"value":728},{"type":44,"value":2686}," on the text box or offset the shape to account for padding",{"type":38,"tag":427,"props":2688,"children":2689},{},[2690,2695],{"type":38,"tag":96,"props":2691,"children":2692},{},[2693],{"type":44,"value":2694},"Don't use low-contrast elements",{"type":44,"value":2696}," — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds",{"type":38,"tag":427,"props":2698,"children":2699},{},[2700,2705],{"type":38,"tag":96,"props":2701,"children":2702},{},[2703],{"type":44,"value":2704},"NEVER use accent lines under titles",{"type":44,"value":2706}," — these are a hallmark of AI-generated slides; use whitespace or background color instead",{"type":38,"tag":427,"props":2708,"children":2709},{},[2710,2715],{"type":38,"tag":96,"props":2711,"children":2712},{},[2713],{"type":44,"value":2714},"NEVER add decorative color bars or accent stripes",{"type":44,"value":2716}," — this includes: header\u002Ffooter bars spanning the slide width, vertical sidebar stripes down one edge of the slide, thin accent stripes along one edge of a card or content block, and \"single-side borders\" on rectangles. These read as AI-generated filler. If you want to set a card apart, use a subtle background tint, a drop shadow, or an icon — not an edge stripe.",{"type":38,"tag":427,"props":2718,"children":2719},{},[2720,2725,2727,2732,2734,2740,2741,2747,2748,2754,2755],{"type":38,"tag":96,"props":2721,"children":2722},{},[2723],{"type":44,"value":2724},"Don't default to cream\u002Fbeige backgrounds",{"type":44,"value":2726}," — when no background is specified, use white (",{"type":38,"tag":53,"props":2728,"children":2730},{"className":2729},[],[2731],{"type":44,"value":1918},{"type":44,"value":2733},") or the user's brand palette; avoid warm-neutral defaults like ",{"type":38,"tag":53,"props":2735,"children":2737},{"className":2736},[],[2738],{"type":44,"value":2739},"F5F5DC",{"type":44,"value":798},{"type":38,"tag":53,"props":2742,"children":2744},{"className":2743},[],[2745],{"type":44,"value":2746},"FAF0E6",{"type":44,"value":798},{"type":38,"tag":53,"props":2749,"children":2751},{"className":2750},[],[2752],{"type":44,"value":2753},"FAEBD7",{"type":44,"value":798},{"type":38,"tag":53,"props":2756,"children":2758},{"className":2757},[],[2759],{"type":44,"value":2760},"FFF8E1",{"type":38,"tag":427,"props":2762,"children":2763},{},[2764,2769],{"type":38,"tag":96,"props":2765,"children":2766},{},[2767],{"type":44,"value":2768},"Don't ship text that overflows its shape",{"type":44,"value":2770}," — if text doesn't fit, reduce font size, split across slides, or enlarge the container; never leave content cut off or spilling past bounds",{"type":38,"tag":181,"props":2772,"children":2774},{"id":2773},"qa-required",[2775],{"type":44,"value":2776},"QA (Required)",{"type":38,"tag":47,"props":2778,"children":2779},{},[2780],{"type":44,"value":2781},"Your first render usually has a few real issues — overlaps, overflow, misalignment. Find and fix those, re-render only the slides you changed, and stop.",{"type":38,"tag":1778,"props":2783,"children":2785},{"id":2784},"content-qa",[2786],{"type":44,"value":2787},"Content QA",{"type":38,"tag":1204,"props":2789,"children":2791},{"className":1206,"code":2790,"language":1208,"meta":1209,"style":1209},"markitdown output.pptx\n",[2792],{"type":38,"tag":53,"props":2793,"children":2794},{"__ignoreMap":1209},[2795],{"type":38,"tag":1215,"props":2796,"children":2797},{"class":1217,"line":1218},[2798,2802],{"type":38,"tag":1215,"props":2799,"children":2800},{"style":1222},[2801],{"type":44,"value":1200},{"type":38,"tag":1215,"props":2803,"children":2804},{"style":1228},[2805],{"type":44,"value":2806}," output.pptx\n",{"type":38,"tag":47,"props":2808,"children":2809},{},[2810],{"type":44,"value":2811},"Check for missing content, typos, wrong order.",{"type":38,"tag":47,"props":2813,"children":2814},{},[2815],{"type":38,"tag":96,"props":2816,"children":2817},{},[2818],{"type":44,"value":2819},"When using templates, check for leftover placeholder text:",{"type":38,"tag":1204,"props":2821,"children":2823},{"className":1206,"code":2822,"language":1208,"meta":1209,"style":1209},"markitdown output.pptx | grep -iE \"\\bx{3,}\\b|lorem|ipsum|\\bTODO|\\[insert|this.*(page|slide).*layout\"\n",[2824],{"type":38,"tag":53,"props":2825,"children":2826},{"__ignoreMap":1209},[2827],{"type":38,"tag":1215,"props":2828,"children":2829},{"class":1217,"line":1218},[2830,2834,2839,2844,2849,2854,2858,2863],{"type":38,"tag":1215,"props":2831,"children":2832},{"style":1222},[2833],{"type":44,"value":1200},{"type":38,"tag":1215,"props":2835,"children":2836},{"style":1228},[2837],{"type":44,"value":2838}," output.pptx",{"type":38,"tag":1215,"props":2840,"children":2841},{"style":1234},[2842],{"type":44,"value":2843}," |",{"type":38,"tag":1215,"props":2845,"children":2846},{"style":1222},[2847],{"type":44,"value":2848}," grep",{"type":38,"tag":1215,"props":2850,"children":2851},{"style":1228},[2852],{"type":44,"value":2853}," -iE",{"type":38,"tag":1215,"props":2855,"children":2856},{"style":1234},[2857],{"type":44,"value":1237},{"type":38,"tag":1215,"props":2859,"children":2860},{"style":1228},[2861],{"type":44,"value":2862},"\\bx{3,}\\b|lorem|ipsum|\\bTODO|\\[insert|this.*(page|slide).*layout",{"type":38,"tag":1215,"props":2864,"children":2865},{"style":1234},[2866],{"type":44,"value":2867},"\"\n",{"type":38,"tag":47,"props":2869,"children":2870},{},[2871],{"type":44,"value":2872},"If grep returns results, fix them before declaring success.",{"type":38,"tag":1778,"props":2874,"children":2876},{"id":2875},"file-qa-required",[2877],{"type":44,"value":2878},"File QA (required)",{"type":38,"tag":1204,"props":2880,"children":2882},{"className":1206,"code":2881,"language":1208,"meta":1209,"style":1209},"python scripts\u002Foffice\u002Fvalidate.py output.pptx                      # built from scratch\npython scripts\u002Foffice\u002Fvalidate.py output.pptx --original src.pptx  # built from a template\n",[2883],{"type":38,"tag":53,"props":2884,"children":2885},{"__ignoreMap":1209},[2886,2906],{"type":38,"tag":1215,"props":2887,"children":2888},{"class":1217,"line":1218},[2889,2893,2897,2901],{"type":38,"tag":1215,"props":2890,"children":2891},{"style":1222},[2892],{"type":44,"value":1261},{"type":38,"tag":1215,"props":2894,"children":2895},{"style":1228},[2896],{"type":44,"value":1417},{"type":38,"tag":1215,"props":2898,"children":2899},{"style":1228},[2900],{"type":44,"value":2838},{"type":38,"tag":1215,"props":2902,"children":2903},{"style":1288},[2904],{"type":44,"value":2905},"                      # built from scratch\n",{"type":38,"tag":1215,"props":2907,"children":2908},{"class":1217,"line":1255},[2909,2913,2917,2921,2925,2930],{"type":38,"tag":1215,"props":2910,"children":2911},{"style":1222},[2912],{"type":44,"value":1261},{"type":38,"tag":1215,"props":2914,"children":2915},{"style":1228},[2916],{"type":44,"value":1417},{"type":38,"tag":1215,"props":2918,"children":2919},{"style":1228},[2920],{"type":44,"value":2838},{"type":38,"tag":1215,"props":2922,"children":2923},{"style":1228},[2924],{"type":44,"value":1427},{"type":38,"tag":1215,"props":2926,"children":2927},{"style":1228},[2928],{"type":44,"value":2929}," src.pptx",{"type":38,"tag":1215,"props":2931,"children":2932},{"style":1288},[2933],{"type":44,"value":2934},"  # built from a template\n",{"type":38,"tag":47,"props":2936,"children":2937},{},[2938,2949,2951,2956,2958,2963],{"type":38,"tag":96,"props":2939,"children":2940},{},[2941,2943,2948],{"type":44,"value":2942},"If the deck came from a template, always pass ",{"type":38,"tag":53,"props":2944,"children":2946},{"className":2945},[],[2947],{"type":44,"value":354},{"type":44,"value":607},{"type":44,"value":2950}," A template may itself\ncontain parts the XSD rejects, so a bare run can report failures you never caused — and\na genuine regression can hide among them. ",{"type":38,"tag":53,"props":2952,"children":2954},{"className":2953},[],[2955],{"type":44,"value":354},{"type":44,"value":2957}," baselines\nthe schema and slide checks against the template, suppressing errors it already had.\nThe structural checks — relationships, content types, charts — ignore ",{"type":38,"tag":53,"props":2959,"children":2961},{"className":2960},[],[2962],{"type":44,"value":354},{"type":44,"value":2964}," and\nreport template-inherited problems either way, so read those on their own merits.",{"type":38,"tag":47,"props":2966,"children":2967},{},[2968],{"type":44,"value":2969},"pptxgenjs emits chart XML PowerPoint refuses to open, and every other tool\naccepts: python-pptx opens those decks, LibreOffice renders them, the XSD\npasses them. Every failure names its fix. Fix it in the generator and rebuild.",{"type":38,"tag":1778,"props":2971,"children":2973},{"id":2972},"visual-qa",[2974],{"type":44,"value":2975},"Visual QA",{"type":38,"tag":47,"props":2977,"children":2978},{},[2979,2981,2985],{"type":44,"value":2980},"Convert the slides to images (see ",{"type":38,"tag":1165,"props":2982,"children":2983},{"href":1167},[2984],{"type":44,"value":1170},{"type":44,"value":2986},") and inspect every one. After staring at the generating code you tend to see what you expect rather than what rendered, so look at the images fresh (a subagent works well for this if you have one). User-visible defects to look for:",{"type":38,"tag":423,"props":2988,"children":2989},{},[2990,3000,3005,3010,3015,3020,3025,3030,3035,3040,3045,3050],{"type":38,"tag":427,"props":2991,"children":2992},{},[2993,2998],{"type":38,"tag":96,"props":2994,"children":2995},{},[2996],{"type":44,"value":2997},"Text overflow or text cut off at a box or slide boundary — check this first.",{"type":44,"value":2999}," It is the most common defect and always user-visible. (For a font the previewer renders unreliably per Typography, the preview is approximate: trust the ~10% slack you left, not its apparent fit.)",{"type":38,"tag":427,"props":3001,"children":3002},{},[3003],{"type":44,"value":3004},"Overlapping elements (text through shapes, lines through words, stacked elements)",{"type":38,"tag":427,"props":3006,"children":3007},{},[3008],{"type":44,"value":3009},"Source citations or footers colliding with content above",{"type":38,"tag":427,"props":3011,"children":3012},{},[3013],{"type":44,"value":3014},"Elements too close (\u003C 0.3\" gaps) or cards\u002Fsections nearly touching",{"type":38,"tag":427,"props":3016,"children":3017},{},[3018],{"type":44,"value":3019},"Uneven gaps (large empty area in one place, cramped in another)",{"type":38,"tag":427,"props":3021,"children":3022},{},[3023],{"type":44,"value":3024},"Insufficient margin from slide edges (\u003C 0.5\")",{"type":38,"tag":427,"props":3026,"children":3027},{},[3028],{"type":44,"value":3029},"Columns or similar elements not aligned consistently",{"type":38,"tag":427,"props":3031,"children":3032},{},[3033],{"type":44,"value":3034},"Low-contrast text (e.g., light gray text on cream-colored background)",{"type":38,"tag":427,"props":3036,"children":3037},{},[3038],{"type":44,"value":3039},"Template decoration mispositioned after text replacement — e.g., a title underline positioned for one line, but the replaced title wrapped to two",{"type":38,"tag":427,"props":3041,"children":3042},{},[3043],{"type":44,"value":3044},"Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)",{"type":38,"tag":427,"props":3046,"children":3047},{},[3048],{"type":44,"value":3049},"Text boxes too narrow causing excessive wrapping",{"type":38,"tag":427,"props":3051,"children":3052},{},[3053],{"type":44,"value":3054},"Leftover placeholder content",{"type":38,"tag":181,"props":3056,"children":3058},{"id":3057},"converting-to-images",[3059],{"type":44,"value":1170},{"type":38,"tag":47,"props":3061,"children":3062},{},[3063],{"type":44,"value":3064},"Convert presentations to individual slide images for visual inspection:",{"type":38,"tag":1204,"props":3066,"children":3068},{"className":1206,"code":3067,"language":1208,"meta":1209,"style":1209},"python scripts\u002Foffice\u002Fsoffice.py --headless --convert-to pdf output.pptx\nrm -f slide-*.jpg\npdftoppm -jpeg -r 150 output.pdf slide\nls -1 \"$PWD\"\u002Fslide-*.jpg\n",[3069],{"type":38,"tag":53,"props":3070,"children":3071},{"__ignoreMap":1209},[3072,3103,3131,3165],{"type":38,"tag":1215,"props":3073,"children":3074},{"class":1217,"line":1218},[3075,3079,3084,3089,3094,3099],{"type":38,"tag":1215,"props":3076,"children":3077},{"style":1222},[3078],{"type":44,"value":1261},{"type":38,"tag":1215,"props":3080,"children":3081},{"style":1228},[3082],{"type":44,"value":3083}," scripts\u002Foffice\u002Fsoffice.py",{"type":38,"tag":1215,"props":3085,"children":3086},{"style":1228},[3087],{"type":44,"value":3088}," --headless",{"type":38,"tag":1215,"props":3090,"children":3091},{"style":1228},[3092],{"type":44,"value":3093}," --convert-to",{"type":38,"tag":1215,"props":3095,"children":3096},{"style":1228},[3097],{"type":44,"value":3098}," pdf",{"type":38,"tag":1215,"props":3100,"children":3101},{"style":1228},[3102],{"type":44,"value":2806},{"type":38,"tag":1215,"props":3104,"children":3105},{"class":1217,"line":1255},[3106,3111,3115,3120,3126],{"type":38,"tag":1215,"props":3107,"children":3108},{"style":1222},[3109],{"type":44,"value":3110},"rm",{"type":38,"tag":1215,"props":3112,"children":3113},{"style":1228},[3114],{"type":44,"value":1366},{"type":38,"tag":1215,"props":3116,"children":3117},{"style":1228},[3118],{"type":44,"value":3119}," slide-",{"type":38,"tag":1215,"props":3121,"children":3123},{"style":3122},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[3124],{"type":44,"value":3125},"*",{"type":38,"tag":1215,"props":3127,"children":3128},{"style":1228},[3129],{"type":44,"value":3130},".jpg\n",{"type":38,"tag":1215,"props":3132,"children":3133},{"class":1217,"line":1294},[3134,3139,3144,3149,3155,3160],{"type":38,"tag":1215,"props":3135,"children":3136},{"style":1222},[3137],{"type":44,"value":3138},"pdftoppm",{"type":38,"tag":1215,"props":3140,"children":3141},{"style":1228},[3142],{"type":44,"value":3143}," -jpeg",{"type":38,"tag":1215,"props":3145,"children":3146},{"style":1228},[3147],{"type":44,"value":3148}," -r",{"type":38,"tag":1215,"props":3150,"children":3152},{"style":3151},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3153],{"type":44,"value":3154}," 150",{"type":38,"tag":1215,"props":3156,"children":3157},{"style":1228},[3158],{"type":44,"value":3159}," output.pdf",{"type":38,"tag":1215,"props":3161,"children":3162},{"style":1228},[3163],{"type":44,"value":3164}," slide\n",{"type":38,"tag":1215,"props":3166,"children":3167},{"class":1217,"line":1303},[3168,3173,3178,3182,3187,3191,3196,3200],{"type":38,"tag":1215,"props":3169,"children":3170},{"style":1222},[3171],{"type":44,"value":3172},"ls",{"type":38,"tag":1215,"props":3174,"children":3175},{"style":1228},[3176],{"type":44,"value":3177}," -1",{"type":38,"tag":1215,"props":3179,"children":3180},{"style":1234},[3181],{"type":44,"value":1237},{"type":38,"tag":1215,"props":3183,"children":3184},{"style":3122},[3185],{"type":44,"value":3186},"$PWD",{"type":38,"tag":1215,"props":3188,"children":3189},{"style":1234},[3190],{"type":44,"value":1247},{"type":38,"tag":1215,"props":3192,"children":3193},{"style":1228},[3194],{"type":44,"value":3195},"\u002Fslide-",{"type":38,"tag":1215,"props":3197,"children":3198},{"style":3122},[3199],{"type":44,"value":3125},{"type":38,"tag":1215,"props":3201,"children":3202},{"style":1228},[3203],{"type":44,"value":3130},{"type":38,"tag":47,"props":3205,"children":3206},{},[3207,3212,3214,3219,3221,3226,3228,3234,3236,3242,3244,3250],{"type":38,"tag":96,"props":3208,"children":3209},{},[3210],{"type":44,"value":3211},"Pass the absolute paths printed above directly to the view tool.",{"type":44,"value":3213}," The ",{"type":38,"tag":53,"props":3215,"children":3217},{"className":3216},[],[3218],{"type":44,"value":3110},{"type":44,"value":3220}," clears stale images from prior runs. ",{"type":38,"tag":53,"props":3222,"children":3224},{"className":3223},[],[3225],{"type":44,"value":3138},{"type":44,"value":3227}," zero-pads based on page count: ",{"type":38,"tag":53,"props":3229,"children":3231},{"className":3230},[],[3232],{"type":44,"value":3233},"slide-1.jpg",{"type":44,"value":3235}," for decks under 10 pages, ",{"type":38,"tag":53,"props":3237,"children":3239},{"className":3238},[],[3240],{"type":44,"value":3241},"slide-01.jpg",{"type":44,"value":3243}," for 10-99, ",{"type":38,"tag":53,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":44,"value":3249},"slide-001.jpg",{"type":44,"value":3251}," for 100+.",{"type":38,"tag":47,"props":3253,"children":3254},{},[3255,3260,3262,3267,3269,3274],{"type":38,"tag":96,"props":3256,"children":3257},{},[3258],{"type":44,"value":3259},"After fixes, rerun all four commands above",{"type":44,"value":3261}," — the PDF must be regenerated from the edited ",{"type":38,"tag":53,"props":3263,"children":3265},{"className":3264},[],[3266],{"type":44,"value":58},{"type":44,"value":3268}," before ",{"type":38,"tag":53,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":44,"value":3138},{"type":44,"value":3275}," can reflect your changes.",{"type":38,"tag":181,"props":3277,"children":3279},{"id":3278},"dependencies",[3280],{"type":44,"value":3281},"Dependencies",{"type":38,"tag":47,"props":3283,"children":3284},{},[3285,3290,3292,3297,3299,3305,3306,3312,3313,3319,3320,3326,3328,3333,3335,3341,3343,3348],{"type":38,"tag":53,"props":3286,"children":3288},{"className":3287},[],[3289],{"type":44,"value":113},{"type":44,"value":3291}," (npm, preinstalled — install only if ",{"type":38,"tag":53,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":44,"value":411},{"type":44,"value":3298}," fails) · ",{"type":38,"tag":53,"props":3300,"children":3302},{"className":3301},[],[3303],{"type":44,"value":3304},"markitdown[pptx]",{"type":44,"value":798},{"type":38,"tag":53,"props":3307,"children":3309},{"className":3308},[],[3310],{"type":44,"value":3311},"Pillow",{"type":44,"value":798},{"type":38,"tag":53,"props":3314,"children":3316},{"className":3315},[],[3317],{"type":44,"value":3318},"defusedxml",{"type":44,"value":798},{"type":38,"tag":53,"props":3321,"children":3323},{"className":3322},[],[3324],{"type":44,"value":3325},"lxml",{"type":44,"value":3327}," (pip — text dump, thumbnail, clean, validate) · LibreOffice (",{"type":38,"tag":53,"props":3329,"children":3331},{"className":3330},[],[3332],{"type":44,"value":379},{"type":44,"value":3334},", auto-configured for sandboxed environments via ",{"type":38,"tag":53,"props":3336,"children":3338},{"className":3337},[],[3339],{"type":44,"value":3340},"scripts\u002Foffice\u002Fsoffice.py",{"type":44,"value":3342},") · ",{"type":38,"tag":53,"props":3344,"children":3346},{"className":3345},[],[3347],{"type":44,"value":3138},{"type":44,"value":3349}," (Poppler)",{"type":38,"tag":3351,"props":3352,"children":3353},"style",{},[3354],{"type":44,"value":3355},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3357,"total":3473},[3358,3377,3389,3401,3420,3433,3454],{"slug":3359,"name":3359,"fn":3360,"description":3361,"org":3362,"tags":3363,"stars":20,"repoUrl":21,"updatedAt":3376},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3364,3367,3370,3373],{"name":3365,"slug":3366,"type":16},"Creative","creative",{"name":3368,"slug":3369,"type":16},"Design","design",{"name":3371,"slug":3372,"type":16},"Generative Art","generative-art",{"name":3374,"slug":3375,"type":16},"JavaScript","javascript","2026-04-06T17:56:15.455818",{"slug":3378,"name":3378,"fn":3379,"description":3380,"org":3381,"tags":3382,"stars":20,"repoUrl":21,"updatedAt":3388},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3383,3386,3387],{"name":3384,"slug":3385,"type":16},"Branding","branding",{"name":3368,"slug":3369,"type":16},{"name":2409,"slug":2406,"type":16},"2026-04-06T17:56:05.042852",{"slug":3390,"name":3390,"fn":3391,"description":3392,"org":3393,"tags":3394,"stars":20,"repoUrl":21,"updatedAt":3400},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3395,3396,3397],{"name":3365,"slug":3366,"type":16},{"name":3368,"slug":3369,"type":16},{"name":3398,"slug":3399,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":3402,"name":3402,"fn":3403,"description":3404,"org":3405,"tags":3406,"stars":20,"repoUrl":21,"updatedAt":3419},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3407,3410,3411,3414,3416],{"name":3408,"slug":3409,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":3412,"slug":3413,"type":16},"Anthropic SDK","anthropic-sdk",{"name":3415,"slug":3402,"type":16},"Claude API",{"name":3417,"slug":3418,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":3421,"name":3421,"fn":3422,"description":3423,"org":3424,"tags":3425,"stars":20,"repoUrl":21,"updatedAt":3432},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3426,3429],{"name":3427,"slug":3428,"type":16},"Documentation","documentation",{"name":3430,"slug":3431,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":3434,"name":3434,"fn":3435,"description":3436,"org":3437,"tags":3438,"stars":20,"repoUrl":21,"updatedAt":3453},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3439,3442,3444,3447,3450],{"name":3440,"slug":3441,"type":16},"Documents","documents",{"name":3443,"slug":3434,"type":16},"DOCX",{"name":3445,"slug":3446,"type":16},"Office","office",{"name":3448,"slug":3449,"type":16},"Templates","templates",{"name":3451,"slug":3452,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":3455,"name":3455,"fn":3456,"description":3457,"org":3458,"tags":3459,"stars":20,"repoUrl":21,"updatedAt":3472},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3460,3461,3464,3466,3469],{"name":3368,"slug":3369,"type":16},{"name":3462,"slug":3463,"type":16},"Frontend","frontend",{"name":3465,"slug":1090,"type":16},"React",{"name":3467,"slug":3468,"type":16},"Tailwind CSS","tailwind-css",{"name":3470,"slug":3471,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",17,{"items":3475,"total":3582},[3476,3483,3489,3495,3503,3508,3516,3524,3538,3553,3561,3566],{"slug":3359,"name":3359,"fn":3360,"description":3361,"org":3477,"tags":3478,"stars":20,"repoUrl":21,"updatedAt":3376},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3479,3480,3481,3482],{"name":3365,"slug":3366,"type":16},{"name":3368,"slug":3369,"type":16},{"name":3371,"slug":3372,"type":16},{"name":3374,"slug":3375,"type":16},{"slug":3378,"name":3378,"fn":3379,"description":3380,"org":3484,"tags":3485,"stars":20,"repoUrl":21,"updatedAt":3388},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3486,3487,3488],{"name":3384,"slug":3385,"type":16},{"name":3368,"slug":3369,"type":16},{"name":2409,"slug":2406,"type":16},{"slug":3390,"name":3390,"fn":3391,"description":3392,"org":3490,"tags":3491,"stars":20,"repoUrl":21,"updatedAt":3400},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3492,3493,3494],{"name":3365,"slug":3366,"type":16},{"name":3368,"slug":3369,"type":16},{"name":3398,"slug":3399,"type":16},{"slug":3402,"name":3402,"fn":3403,"description":3404,"org":3496,"tags":3497,"stars":20,"repoUrl":21,"updatedAt":3419},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3498,3499,3500,3501,3502],{"name":3408,"slug":3409,"type":16},{"name":9,"slug":8,"type":16},{"name":3412,"slug":3413,"type":16},{"name":3415,"slug":3402,"type":16},{"name":3417,"slug":3418,"type":16},{"slug":3421,"name":3421,"fn":3422,"description":3423,"org":3504,"tags":3505,"stars":20,"repoUrl":21,"updatedAt":3432},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3506,3507],{"name":3427,"slug":3428,"type":16},{"name":3430,"slug":3431,"type":16},{"slug":3434,"name":3434,"fn":3435,"description":3436,"org":3509,"tags":3510,"stars":20,"repoUrl":21,"updatedAt":3453},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3511,3512,3513,3514,3515],{"name":3440,"slug":3441,"type":16},{"name":3443,"slug":3434,"type":16},{"name":3445,"slug":3446,"type":16},{"name":3448,"slug":3449,"type":16},{"name":3451,"slug":3452,"type":16},{"slug":3455,"name":3455,"fn":3456,"description":3457,"org":3517,"tags":3518,"stars":20,"repoUrl":21,"updatedAt":3472},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3519,3520,3521,3522,3523],{"name":3368,"slug":3369,"type":16},{"name":3462,"slug":3463,"type":16},{"name":3465,"slug":1090,"type":16},{"name":3467,"slug":3468,"type":16},{"name":3470,"slug":3471,"type":16},{"slug":3525,"name":3525,"fn":3526,"description":3527,"org":3528,"tags":3529,"stars":20,"repoUrl":21,"updatedAt":3537},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3530,3533,3534],{"name":3531,"slug":3532,"type":16},"Communications","communications",{"name":3448,"slug":3449,"type":16},{"name":3535,"slug":3536,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":3539,"name":3539,"fn":3540,"description":3541,"org":3542,"tags":3543,"stars":20,"repoUrl":21,"updatedAt":3552},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3544,3545,3548,3549],{"name":3408,"slug":3409,"type":16},{"name":3546,"slug":3547,"type":16},"API Development","api-development",{"name":3417,"slug":3418,"type":16},{"name":3550,"slug":3551,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":3399,"name":3399,"fn":3554,"description":3555,"org":3556,"tags":3557,"stars":20,"repoUrl":21,"updatedAt":3560},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3558,3559],{"name":3440,"slug":3441,"type":16},{"name":3398,"slug":3399,"type":16},"2026-04-06T17:56:02.483316",{"slug":4,"name":4,"fn":5,"description":6,"org":3562,"tags":3563,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3564,3565],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":3567,"name":3567,"fn":3568,"description":3569,"org":3570,"tags":3571,"stars":20,"repoUrl":21,"updatedAt":3581},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3572,3573,3574,3577,3580],{"name":3408,"slug":3409,"type":16},{"name":3427,"slug":3428,"type":16},{"name":3575,"slug":3576,"type":16},"Evals","evals",{"name":3578,"slug":3579,"type":16},"Performance","performance",{"name":3430,"slug":3431,"type":16},"2026-04-19T06:45:40.804",490]