OfficeCLI Morph-PPT Skill This skill is a scene layer on top of . Every pptx hard rule — visual delivery floor (title ≥ 36pt / body ≥ 18pt / title ≥ 2× body), 12-column grid on 33.87×19.05cm, canonical palettes, chart-choice decision table, connector canon, shell escape, resident + batch, Delivery Gate 1–5a — is inherited, not re-taught. This file adds only what Morph needs on top: cross-slide shape-name binding, Scene Actors vs content prefixing, ghost discipline, CLI quirks, 52-style visual library lookup, and a morph-specific fresh-eyes Gate 5b extension. When the pptx base rules cover it,…

|| true)\nif [ -z \"$LEAKS\" ]; then echo \"Gate 2 morph OK\"; else echo \"LEAK: $LEAKS\"; fi\n```\n\nCovers: `$9` `$9.99` `$29/month` `$199/yr` `$1/day` `${VAR}` `\\n`/`\\r`/`\\t` literals + stray `.` placeholders. Fix: single-quote the prop (`--prop text='$9/mo'`).\n\n### Gate 5b — Visual audit via HTML preview (MANDATORY) — extended for morph\n\nRun `officecli view \"$FILE\" html` and Read the returned HTML path. For every slide, answer the pptx v2 Gate 5b questions (overlap / dark-on-dark / divider overlap / order sanity / missing arrowheads) PLUS these four morph-specific checks:\n\n**Important: selectors with prefix match.** `officecli query` only supports operators `=`, `!=`, `~=`, `>=`, `\u003c=`, `>`, `\u003c` — there is NO `^=` prefix operator. A selector like `shape[name^=!!actor-]` returns an `invalid_selector` error. For \"starts-with\" filtering, use a `get --depth 1` loop + `jq startswith()` as shown below.\n\n- **5b-morph-1 — `!!actor-*` leak into visible area after its section ends.** For every `!!actor-*` that should have exited, confirm `x ≥ 33.87cm` (canvas right edge). Loop + filter (selector-safe):\n ```bash\n NSLIDES=$(officecli query \"$FILE\" slide --json | jq '.data.results | length')\n for N in $(seq 1 $NSLIDES); do\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r --arg n \"$N\" '.data.children[]? |\n select(.format.name? // \"\" | startswith(\"!!actor-\")) |\n select((.format.x // \"0cm\" | rtrimstr(\"cm\") | tonumber) \u003c 33.87) |\n \"slide \\($n) leak: \\(.format.name) stuck at x=\\(.format.x)\"'\n done\n ```\n Any line printed = actor stuck visible. `final-check` misses this — only the loop + Read HTML do.\n\n- **5b-morph-2 — Adjacent slides have identical spatial composition (no motion).** Hard rule: between every morph pair, ≥ 3 DIFFERENT `!!`-prefixed shapes must each differ by ≥ 1 of {x, y, width, height, rotation, font-size}. Proof loop (dump both slides, diff same-name shapes, count differing shapes):\n ```bash\n for K in 1 2 3 4; do\n A=$(officecli get \"$FILE\" \"/slide[$K]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) |\n \"\\(.format.name)|\\(.format.x)|\\(.format.y)|\\(.format.width)|\\(.format.height)|\\(.format.rotation // 0)\"')\n B=$(officecli get \"$FILE\" \"/slide[$((K+1))]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) |\n \"\\(.format.name)|\\(.format.x)|\\(.format.y)|\\(.format.width)|\\(.format.height)|\\(.format.rotation // 0)\"')\n VARIES=$(diff \u003c(echo \"$A\") \u003c(echo \"$B\") | grep -c '^[\u003c>]')\n if [ \"$VARIES\" -lt 6 ]; then echo \"pair $K→$((K+1)) FLAT: only $VARIES diff-lines (need ≥ 6 = 3 shapes × 2 sides)\"; fi\n done\n ```\n\n- **5b-morph-3 — Morph-pair name mismatches.** Adjacent slides must share at least 2 `!!`-prefixed names exactly. Proof (note: `.data.children[]` — bare `.children[]` returns null):\n ```bash\n for N in 1 2 3 4 5; do\n echo \"--- slide $N ---\"\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) | .format.name'\n done\n ```\n Visually compare sequential blocks — shared `!!` names between N and N+1 are the morph pairs. Zero overlap = the pair is a plain fade.\n\n- **5b-morph-4 — `#sN-*` lingering on slide N+1 (ghost leak).** Per-slide content MUST be ghosted (`x=36cm`) on the NEXT slide. Loop + filter per N≥2:\n ```bash\n NSLIDES=$(officecli query \"$FILE\" slide --json | jq '.data.results | length')\n for N in $(seq 2 $NSLIDES); do\n PREV=$((N-1))\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r --arg n \"$N\" --arg p \"$PREV\" '.data.children[]? |\n select(.format.name? // \"\" | startswith(\"#s\\($p)-\")) |\n select((.format.x // \"0cm\" | rtrimstr(\"cm\") | tonumber) \u003c 33.87) |\n \"slide \\($n) leak: \\(.format.name) stuck at x=\\(.format.x)\"'\n done\n ```\n Any line printed = a `#s(N-1)-*` shape stayed visible on slide N. Ghost it.\n\n**REJECT the delivery** if any 5b-morph-1..4 loop prints a line. Collect stdout from all four loops into one stream and enforce with the COUNT pattern: `LEAK_COUNT=$(...all four loops... | wc -l); if [ \"$LEAK_COUNT\" -gt 0 ]; then echo \"REJECT: $LEAK_COUNT morph leaks\"; else echo \"Gate 5b-morph OK\"; fi`.\n\n## Renderer honesty\n\n**Morph renders in:** PowerPoint 365 (Windows/Mac), Keynote, WPS, PowerPoint Online.\n\n**Morph does NOT render in:** LibreOffice Impress (renders static, sometimes as fade), Google Slides web viewer (loses interpolation), most HTML / SVG viewers, `officecli view html` (structural only — morph is runtime). This is `[RENDERER-BUG]`, not a skill defect. Tell the user explicitly: \"Open in PowerPoint 365 / Keynote / WPS to see the morph motion; other viewers will show static or plain fade.\"\n\nStatic screenshots from any renderer **cannot verify morph motion** (the motion only exists at runtime). Use Gate 5b queries above to prove pair correctness; use a live viewer to prove motion quality.\n\n## Ghost Discipline & Actor Lifecycle\n\n**Every `!!actor-*` and `#sN-*` shape must be managed across EVERY slide, not just its \"exit\" slide.**\n\n### The Per-Slide Ghosting Rule\n\nWhen building a multi-slide morph deck:\n1. **Slide N: Introduce `!!actor-ring` (visible at x=0cm)**\n2. **Slide N+1: Add new content. Before finishing, ghost `!!actor-ring` to `x=36cm`.**\n3. **Slide N+2: Add more content. Re-ghost `!!actor-ring` to `x=36cm` again.** (Not optional — even though it was already off-screen, each slide is a fresh canvas.)\n4. **Slide N+3: If `!!actor-ring` should be visible again, move it back to x=0cm or its new position.**\n\n**Why:** Each slide's shape list is independent. Moving a shape off-canvas on slide N does NOT carry over to slide N+1 — if you forget to re-ghost it, it will re-appear at its original position on N+1.\n\n### Workflow Pattern (Bash)\n\n```bash\n# After adding new content shapes to slide $SLIDE:\nfor ACTOR in \"!!actor-ring\" \"!!actor-dot\" \"!!actor-accent-bar\"; do\n officecli set \"$FILE\" \"/slide[$SLIDE]/shape[@name=$ACTOR]\" --prop x=36cm || true\ndone\n```\n\nOr in a build loop:\n\n```bash\nfor SLIDE_NUM in 3 4 5 6 7 8 9 10 11; do\n # Add content specific to this slide\n officecli add \"$FILE\" \"/slide[$SLIDE_NUM]\" --type shape ...\n \n # IMMEDIATELY ghost all old actors (M-2 prevention)\n officecli set \"$FILE\" \"/slide[$SLIDE_NUM]/shape[@name=!!actor-ring]\" --prop x=36cm || true\n officecli set \"$FILE\" \"/slide[$SLIDE_NUM]/shape[@name=!!actor-dot]\" --prop x=36cm || true\ndone\n```\n\n### Detection: Ghost Count Gate\n\n`morph-helpers.py final-check` counts all shapes at `x ≥ 34cm`. If count > 50, it prints:\n```\nREJECT: Found 135 accumulated ghosts — likely M-2 ghost accumulation.\nRun: officecli query deck.pptx 'shape[x>=34cm]' --json | jq '.data.results | length'\nExpected ≤ 50 (roughly 4–5 active actors × 10–12 slides).\n```\n\n**Fix:** Review the build log, ensure every slide re-ghosts all actors that should not appear in it. Re-run final-check. If still > 50, use `morph-helpers.py clean-accumulation deck.pptx` (see reference section).\n\n## Common Morph Pitfalls (design + workflow traps)\n\nBase pptx pitfalls (shell quoting, zsh `[N]` globbing, hex `#` prefix, `\\n` in prop text) → see pptx v2 §Common Pitfalls. These are the morph-specific traps:\n\n| Pitfall | Correct approach |\n|---|---|\n| `!!scene-card` and `!!actor-card` in the same deck | Names must be unique across prefixes. Rename: `!!scene-card-bg` vs `!!actor-card-content` |\n| Renaming shapes mid-build after some slides are already done | Ghost accumulation bug waiting to happen. Stop, redraw the §Morph Pair Planning table, rerun affected slides |\n| Placing `!!actor-*` into the content core without planning an exit | Every `!!actor-*` needs a ghost slide. Plan it in the pair table BEFORE coding |\n| **Ghost accumulation (M-2): forgetting to re-ghost `!!actor-*` on later slides** | **CRITICAL:** When you add new content to slide N+1, ALL `!!actor-*` from slide N that should not be visible must be moved to `x=36cm` again. Do NOT assume they stay off-screen once ghosted — each slide is independent. Build pattern: `for each new slide: add content shapes → then loop: set each active !!actor-* to x=36cm`. `morph-helpers.py final-check` will REJECT if ghost count exceeds 50. |\n| Forgetting `transition=morph` on a slide | Silent fade. Gate 5b-morph-2 (no motion) catches it; fix via `set /slide[N] --prop transition=morph` |\n| Using `@name=` path on a morph slide after `transition=morph` was set | Selector breaks (M-1). Switch to index paths `/slide[N]/shape[K]` |\n| Adjacent slides visually identical | Morph has nothing to interpolate — collapses to plain fade. Apply §Scene-actor spatial rule and move ≥ 3 shapes by ≥ 5cm / ≥ 15° |\n| Trying to stagger 2 shapes via per-shape timing | Not supported — split the pair into two transitions with an intermediate keyframe slide |\n| Testing morph motion in LibreOffice or a browser | `[RENDERER-BUG]`, not skill defect. Test in PowerPoint 365 / Keynote / WPS |\n| Deleting a `!!` shape on exit instead of ghosting it | Deletion breaks morph pairing — the shape vanishes without animation. Always ghost to `x=36cm` |\n| Writing `--prop text=\"$9/mo\"` with double quotes | Shell eats `$9` as empty variable → text stored as `/mo` or stray `.`. Use single quotes: `--prop text='$9/mo'`. Gate 2 morph addendum greps this leak. |\n| Using `\u003ca:br/>` literal inside `--prop text='line1\u003ca:br/>line2'` | Stored as 7 literal characters, not a line break. Use `officecli add \"/slide[N]/shape[@id=K]\" --type paragraph` once per line (M-6). |\n| Using `shape[name^=!!actor-]` selector | `officecli query` has no `^=` operator — returns `invalid_selector`. Use `get /slide[N] --depth 1 --json \\| jq '.data.children[]? \\| select(.format.name \\| startswith(\"!!actor-\"))'`. |\n| Running `validate` while resident mode is open | Pptx v2 inherits this trap — `officecli close \"$FILE\"` BEFORE `validate` |\n\n## Known Issues & Pitfalls\n\nBase pptx bugs C-P-1..7 (hyperlink rPr, chart ChartShapeProperties warning, animation duration readback, animation remove, connector enum, connector `@name=`, chart-color renderer normalization) all apply. **→ see pptx v2 §Known Issues C-P-1..7 for workarounds.**\n\n**Morph-specific (M-1..5):**\n\n| # | Symptom | Workaround |\n|---|---|---|\n| **M-1** | After `officecli set '/slide[N]' --prop transition=morph`, every shape on that slide has `!!` auto-prepended to its name (`#s1-title` → `!!#s1-title`). Name-path selectors like `/slide[N]/shape[@name=#s1-title]` stop matching silently. **Selector filter caveat:** after auto-prefix, `!!#sN-caption` coexists alongside `!!actor-*` — filtering \"scene actors\" with `startswith(\"!!\")` produces false matches on auto-prefixed content. Always filter with `startswith(\"!!actor-\")` or `startswith(\"!!scene-\")`, never bare `startswith(\"!!\")`. | Use **index paths** after morph is set: `get /slide[N] --depth 1` to list shapes, then address via `/slide[N]/shape[K]`. Keep a shape-index comment at the top of the build script. |\n| **M-2 🚨** | **Ghost accumulation — `!!actor-*` introduced on slide 3 stays visible on slides 4, 5, 6 unless EXPLICITLY ghosted every page.** `final-check` helper detects this and rejects if ghost count > 50. | **MANDATORY per-slide rule:** After you add new content to a slide, immediately set ALL active `!!actor-*` from previous slides to `x=36cm` (or explicitly position them visible if they belong in the current context). Example: `officecli set /slide[4]/shape[@name=!!actor-ring] --prop x=36cm`. Run after EVERY slide addition, not just at the end. See §Ghost Discipline & Actor Lifecycle below. |\n| **M-3** | Section-transition boundary — on the first slide of a new topic section, previous-section `!!actor-*` shapes visibly linger. No command errors; only visual clutter. | On every section-start slide, explicitly ghost ALL `!!actor-*` from the previous section to `x=36cm`. Scene shapes (`!!scene-*`) stay. |\n| **M-4** | `officecli help pptx slide` lists `transition=` but NO sub-props for duration / delay / easing of the transition itself. Agents sometimes invent `morph.duration=` / `transition.delay=` — they are rejected as UNSUPPORTED. | Accept defaults (morph ~1s, linear ease). For custom speed, use `raw-set` to add the `spd` attribute on `\u003cp:transition>` — see M-4 example block below. Help does not list sub-props; `raw-set` is the only path. |\n| **M-5** | `[RENDERER-BUG]` LibreOffice / Google Slides web viewer render morph slides as plain fade (no interpolation). | Test in PowerPoint 365 / Keynote / WPS. Not a skill defect — do not chase. |\n| **M-6** | `\u003ca:br/>` written inside `--prop text='line1\u003ca:br/>line2'` is stored as the literal 7-character string, NOT interpreted as a line break. Audience sees `line1\u003ca:br/>line2` rendered verbatim. | For multi-line bullets / captions, add one paragraph per line: `officecli add \"/slide[N]/shape[@id=K]\" --type paragraph --prop text='line1'` then repeat with `text='line2'`. See pptx v2 §Shell escape for the real-newline workflow. |\n\n**M-4 example — slow down all morph transitions** (`raw-set` requires a `\u003cpart>` positional arg; `//p:transition` matches both `mc:Choice` and `mc:Fallback` on a morph slide, yielding `2 element(s) affected`):\n\n```bash\n# Per-slide: add spd=\"slow\" to every transition element on slide N (2 XML hits per morph slide)\nfor N in 2 3 4; do\n officecli raw-set \"$FILE\" \"/slide[$N]\" --xpath \"//p:transition\" --action setattr --xml 'spd=slow'\ndone\nofficecli validate \"$FILE\"\n```\n\nReadback: `officecli query \"$FILE\" slide --json | jq '.data.results[].format | select(.transition==\"morph\") | .transitionSpeed'` prints `\"slow\"` for each affected slide.\n\n## Outputs & delivery\n\nEvery morph deck ships with three artifacts, each as a standalone file:\n\n1. `\u003ctopic>.pptx` — the deck, closed + `officecli validate` clean (Delivery Gate 1 OK).\n2. `build.sh` or `build.py` — the re-runnable script (bash for shell-native builds; Python for multi-slide arcs using `morph-helpers.py`). Must recreate the deck from a fresh `officecli create` call.\n3. `brief.md` — **standalone file, NOT embedded in anything else.** Contains:\n - Section 1: topic / audience / purpose / narrative / style direction (1 named style from `reference/styles/INDEX.md`)\n - Section 2: slide-by-slide outline (page type + one-sentence argument per slide)\n - Section 3: §Morph Pair Planning table (Pair / Slide A / Slide B / Actors / Ghosts) — the design record the reviewer needs to audit choreography\n\n**Pre-deliver reminder to the user (verbatim-safe wording):**\n\n- \"The deck is ready with morph transitions. Open it in PowerPoint 365 / Keynote / WPS to see the motion — LibreOffice and web viewers render static.\"\n- \"While the build script is running, the `.pptx` may be rewritten several times. If you want to preview progress, use `officecli watch \"$FILE\"` and open the live preview in AionUi — do NOT click 'Open with system app' during the build, or you'll hit a file lock.\"\n\n## Adjustments after creation\n\nStandard adjustments table → see pptx v2 §Common Pitfalls / `swap` / `move` / `remove` / `set`. Morph caveat: **after any `swap` or `move` that reorders morph-paired slides, re-verify the adjacency of shared `!!` names.** Run Gate 5b-morph-3 query above on the affected pairs — if the swap broke a pair, either rename shapes or re-choreograph the transition.\n\n**Final sanity check before delivery.** Run the full Delivery Gate (1 through 5b-morph-1..4), open the `.pptx` in PowerPoint 365 / Keynote / WPS, watch one full slide-to-slide morph to confirm motion is visible. If any Gate prints REJECT, fix and re-run — never deliver with a known-open gate.\n\n## References\n\n- `reference/decision-rules.md` — Pyramid Principle, SCQA, page-type menu, `brief.md` schema. Read during §Morph Pair Planning to decide narrative arc before writing commands.\n- `reference/pptx-design.md` — residual design notes (Scene Actors mechanics, page-type table, choreography patterns). Canvas / fonts / colors live in pptx v2 — this file covers only the morph-unique material.\n- `reference/morph-helpers.py` — Cross-platform (Mac / Windows / Linux) Python helpers for clone + ghost + verify + final-check. Import as a library or call via CLI args. Preferred for 5+ slide arcs.\n- `reference/morph-helpers.sh` — Bash equivalent. Pick one per project; do not mix.\n- `reference/styles/INDEX.md` — 52-style visual library, grouped by palette (dark / light / warm / vivid / bw / mixed) and mood. Lookup workflow in §Style library lookup workflow above.\n- `skills/officecli-pptx/SKILL.md` — base pptx v2 rules (visual floor, grid, canonical palettes, chart-choice, connector canon, Delivery Gate 1–5a, Known Issues C-P-1..7, Shell escape 3-layer).\n---","attachment_filenames":["reference/decision-rules.md","reference/morph-helpers.py","reference/morph-helpers.sh","reference/pptx-design.md","reference/styles/bw--brutalist-raw/build.sh","reference/styles/bw--brutalist-raw/style.md","reference/styles/bw--mono-line/build.sh","reference/styles/bw--mono-line/style.md","reference/styles/bw--swiss-bauhaus/build.sh","reference/styles/bw--swiss-bauhaus/style.md","reference/styles/bw--swiss-system/style.md","reference/styles/dark--architectural-plan/build.sh","reference/styles/dark--architectural-plan/style.md","reference/styles/dark--aurora-softedge/style.md","reference/styles/dark--blueprint-grid/build.sh","reference/styles/dark--blueprint-grid/style.md","reference/styles/dark--circle-digital/build.sh","reference/styles/dark--circle-digital/style.md","reference/styles/dark--cosmic-neon/build.sh","reference/styles/dark--cosmic-neon/style.md","reference/styles/dark--cyber-future/build.sh","reference/styles/dark--cyber-future/style.md","reference/styles/dark--diagonal-cut/build.sh","reference/styles/dark--diagonal-cut/style.md","reference/styles/dark--editorial-story/build.sh","reference/styles/dark--editorial-story/style.md","reference/styles/dark--investor-pitch/build.sh","reference/styles/dark--investor-pitch/style.md","reference/styles/dark--liquid-flow/build.sh","reference/styles/dark--liquid-flow/style.md","reference/styles/dark--luxury-minimal/build.sh","reference/styles/dark--luxury-minimal/style.md","reference/styles/dark--midnight-blueprint/style.md","reference/styles/dark--neon-productivity/build.sh","reference/styles/dark--neon-productivity/style.md","reference/styles/dark--obsidian-amber/style.md","reference/styles/dark--premium-navy/build.sh","reference/styles/dark--premium-navy/style.md","reference/styles/dark--sage-grain/style.md","reference/styles/dark--space-odyssey/build.sh","reference/styles/dark--space-odyssey/style.md","reference/styles/dark--spotlight-stage/build.sh","reference/styles/dark--spotlight-stage/style.md","reference/styles/dark--velvet-rose/style.md","reference/styles/INDEX.md","reference/styles/light--bold-type/build.sh","reference/styles/light--bold-type/style.md","reference/styles/light--firmwise-saas/style.md","reference/styles/light--fluid-gradient/style.md","reference/styles/light--glassmorphism-vc/style.md","reference/styles/light--isometric-clean/build.sh","reference/styles/light--isometric-clean/style.md","reference/styles/light--minimal-corporate/style.md","reference/styles/light--minimal-product/build.sh","reference/styles/light--minimal-product/style.md","reference/styles/light--project-proposal/style.md","reference/styles/light--spring-launch/style.md","reference/styles/light--training-interactive/style.md","reference/styles/light--watercolor-wash/build.sh","reference/styles/light--watercolor-wash/style.md","reference/styles/mixed--bauhaus-blocks/style.md","reference/styles/mixed--chromatic-aberration/style.md","reference/styles/mixed--duotone-split/build.sh","reference/styles/mixed--duotone-split/style.md","reference/styles/mixed--spectral-grid/style.md","reference/styles/vivid--bauhaus-electric/style.md","reference/styles/vivid--candy-stripe/build.sh","reference/styles/vivid--candy-stripe/style.md","reference/styles/vivid--energy-neon/style.md","reference/styles/vivid--pink-editorial/style.md","reference/styles/vivid--playful-marketing/build.sh","reference/styles/vivid--playful-marketing/style.md","reference/styles/warm--bloom-academy/style.md","reference/styles/warm--brand-refresh/build.sh","reference/styles/warm--brand-refresh/style.md","reference/styles/warm--coral-culture/style.md","reference/styles/warm--earth-organic/build.sh","reference/styles/warm--earth-organic/style.md","reference/styles/warm--monument-editorial/style.md","reference/styles/warm--playful-organic/build.sh","reference/styles/warm--playful-organic/style.md","reference/styles/warm--sunset-mosaic/style.md","reference/styles/warm--vital-bloom/style.md"],"attachments":[{"filename":"reference/decision-rules.md","content":"---\nname: decision-rules\ndescription: \"Planning prompt for PPT — infer audience, purpose, narrative, then emit brief.md. Run before the main recipes when the deck's audience or purpose is underspecified.\"\n---\n\n# PPT Planner\n\n**How to use.** Read this file during `SKILL.md` §Morph Pair Planning, **before** writing any `officecli add / set` command. Infer audience, purpose, and narrative from the user's topic; emit a single `brief.md` that the main recipes will consume. A morph arc without a narrative spine collapses into \"slide with motion\" instead of \"story with motion\" — the planning below prevents that.\n\nRole: Think deeply about the user's topic and produce a high-quality PPT plan.\n\nOutput: A single `brief.md` containing extraction summary, outline, and detailed page briefs.\n\n---\n\n## Infer Audience\n\n**Thinking Method**: Based on topic keywords and usage context, ask \"Who will view this PPT? What do they care about most?\"\n\n**Common Patterns (examples, not exhaustive)**:\n\n- Fundraising / Roadshow → Investors\n- Teaching / Training → Students\n- Product Introduction → Clients\n- Analysis / Report → Executives\n- Internal Sharing → Colleagues\n- Cannot determine → General Business\n\n---\n\n## Infer Purpose\n\n**Thinking Method**: Based on topic keywords, ask \"What outcome does the user want to achieve with this PPT?\"\n\n**Common Patterns (examples, not exhaustive)**:\n\n- Fundraising / Roadshow → Persuade Investment\n- Product Introduction → Demonstrate Value\n- Analysis / Report → Deliver Insights\n- Training / Teaching → Impart Knowledge\n- Cannot determine → Present Information\n\n---\n\n## Infer Narrative Structure\n\n**Thinking Method**: Choose an appropriate narrative thread based on the purpose.\n\n**Common Structures (examples, not exhaustive)**:\n\n| Applicable Scenario | Narrative Structure | Page Sequence Example |\n| ----------------------------- | ------------------- | ----------------------------------------------------- |\n| Fundraising / Sales / Bidding | problem_solution | hero → statement → pillars → evidence → cta |\n| Reporting / Analysis | insight_driven | hero → statement → evidence → pillars → cta |\n| Promotion / Speech | vision_driven | hero → quote → pillars → evidence → cta |\n| Teaching / Training | educational | hero → statement → pillars → pillars → showcase → cta |\n\n**Free Combination**: Feel free to adapt based on the specific content.\n\n---\n\n## Outline Construction\n\n### Thinking Method: Pyramid Principle\n\n1. **Conclusion First**: Each slide starts with a core argument, not a list of information\n2. **Top-Down Structure**: Deck conclusion → Slide-level arguments → Supporting points\n3. **Group by Category**: Points on the same slide belong to the same logical category\n4. **Logical Progression**: Organize by time / importance / causality / parallelism\n\n### 6-Step Thinking Process\n\n1. What is the one-sentence conclusion of this deck?\n2. How many supporting arguments are needed?\n3. What is the core argument of each slide?\n4. What evidence / data / case studies support each slide?\n5. Which slides are essential? Which are \"nice to have\"?\n6. Where is the audience most likely to push back?\n\n### Page Count Guidelines (reference only)\n\n- Quick intro / single topic: 3–5 slides\n- Standard presentation: 5–8 slides\n- Deep analysis / annual report: 10–15 slides\n\n---\n\n## brief.md Output Format\n\nWrite everything into a single `brief.md` with three sections:\n\n### Section 1: Summary\n\n```\nTopic: ...\nAudience: ... [provided / inferred]\nPurpose: ... [provided / inferred]\nNarrative: ...\nStyle direction: ... [provided / inferred based on topic + mood, not habit]\n```\n\n**Style selection principles**:\n\n1. **Match topic mood** → Corporate ≠ playful, tech ≠ organic (unless intentionally contrasting)\n2. **Vary by project** → Browse `reference/styles/` directory, avoid repeating recent styles\n3. **Consider 6 categories** → dark (16), light (10), warm (11), bw (5), vivid (6), mixed (7)\n4. **Prefer unexpected but fitting** → Don't default to \"dark + neon\" for all tech topics\n5. **Name specific style** → \"warm--earth-organic palette\" not \"warm tones\"\n\n### Section 2: Outline\n\n```\nOverall conclusion: AI Agent Platform lets every enterprise have its own AI workforce\n---\nS1: [hero] \"AI Agent Platform — Let agents work for you\"\nS2: [statement] \"From automation to autonomy: why agents are needed now\"\nS3: [pillars] \"Three core capabilities: Perceive / Reason / Execute\" ★key slide\nS4: [evidence] \"10M+ API Calls / 99.95% Uptime / 50ms P95\"\nS5: [cta] \"Start building your agent\"\n```\n\n### Section 3: Page Briefs\n\nFor each slide, answer 6 questions:\n\n```\nS3 [pillars] ★key slide\n├── Objective: Help the audience understand the three differentiated capabilities\n├── Core information (detailed):\n│ ① Perception: Supports text, image, voice, video multimodal input, 95%+ accuracy\n│ ② Reasoning: Chain-of-Thought technology, 40% improvement on complex tasks\n│ ③ Execution: Auto-calls 20+ tools and APIs, end-to-end task completion\n├── Evidence: Specific metrics for each capability\n├── Page type: pillars (multi-column)\n├── Hierarchy: Number ① largest → capability name next → description smallest\n└── Transition: S2 asks \"why needed\" → S3 answers \"how it works\"\n```\n\n**Critical**: Core information must be detailed and complete (titles, descriptions, data, cases). Do NOT write abbreviated bullet points like \"multimodal understanding\". The Design Expert will use this content directly.\n\n---\n\n## Fallback Strategy\n\n| Failure Scenario | Fallback Strategy |\n| --------------------------- | ----------------------------------------------- |\n| Cannot infer audience | General Business |\n| Cannot infer purpose | Present Information |\n| Cannot determine page count | Decide based on content volume; avoid \u003c3 or >20 |\n\n---\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6141,"content_sha256":"e1ab8c7b2071cb1947913e0dfef36ce7e4e7cec6ff8beb92a4775c5435adc96a"},{"filename":"reference/morph-helpers.py","content":"#!/usr/bin/env python3\n\"\"\"\nMorph PPT Helper Functions\nCross-platform replacement for morph-helpers.sh (Mac / Windows / Linux)\n\nUsage (CLI):\n python morph-helpers.py clone \u003cdeck> \u003cfrom_slide> \u003cto_slide>\n python morph-helpers.py ghost \u003cdeck> \u003cslide> \u003cidx> [idx ...]\n python morph-helpers.py verify \u003cdeck> \u003cslide>\n python morph-helpers.py final-check \u003cdeck>\n\nUsage (import):\n from morph_helpers import morph_clone_slide, morph_ghost_content, morph_verify_slide, morph_final_check\n\"\"\"\n\nimport sys\nimport json\nimport subprocess\nimport argparse\nimport re\n\n# Cross-platform color support (colorama optional)\ntry:\n from colorama import init, Fore, Style\n init(autoreset=True)\n GREEN = Fore.GREEN\n RED = Fore.RED\n YELLOW = Fore.YELLOW\n BLUE = Fore.CYAN\n NC = Style.RESET_ALL\nexcept ImportError:\n GREEN = RED = YELLOW = BLUE = NC = \"\"\n\n\n# ---------------------------------------------------------------------------\n# Internal helpers\n# ---------------------------------------------------------------------------\n\ndef _run(*args):\n \"\"\"Run a command, return (returncode, stdout, stderr).\"\"\"\n result = subprocess.run(list(args), capture_output=True, text=True)\n return result.returncode, result.stdout, result.stderr\n\n\ndef _find_nested(data, key):\n \"\"\"Recursively search a nested dict for a key, return its value or None.\"\"\"\n if isinstance(data, dict):\n if key in data:\n return data[key]\n for v in data.values():\n found = _find_nested(v, key)\n if found is not None:\n return found\n return None\n\n\ndef _has_morph_transition(json_str):\n \"\"\"Check whether JSON output from officecli contains transition=morph.\"\"\"\n if '\"transition\": \"morph\"' in json_str:\n return True\n try:\n data = json.loads(json_str)\n return _find_nested(data, \"transition\") == \"morph\"\n except Exception:\n return False\n\n\ndef _collect_shapes(children, callback):\n \"\"\"Walk a shape tree depth-first, calling callback(child) for each node.\"\"\"\n for child in children:\n callback(child)\n if \"children\" in child:\n _collect_shapes(child[\"children\"], callback)\n\n\n# ---------------------------------------------------------------------------\n# morph_clone_slide\n# ---------------------------------------------------------------------------\n\ndef morph_clone_slide(deck, from_slide, to_slide):\n \"\"\"Clone slide and automatically set transition=morph, then verify.\n\n Args:\n deck: path to .pptx file\n from_slide: source slide number (1-based)\n to_slide: destination slide number (1-based)\n \"\"\"\n from_slide, to_slide = int(from_slide), int(to_slide)\n\n print(f\"{BLUE}Cloning slide {from_slide} -> {to_slide}...{NC}\")\n _run(\"officecli\", \"add\", deck, \"/\", \"--from\", f\"/slide[{from_slide}]\")\n\n print(f\"{BLUE}Setting morph transition...{NC}\")\n _run(\"officecli\", \"set\", deck, f\"/slide[{to_slide}]\", \"--prop\", \"transition=morph\")\n\n print(f\"{BLUE}Listing shapes for ghosting reference:{NC}\")\n rc, out, _ = _run(\"officecli\", \"get\", deck, f\"/slide[{to_slide}]\", \"--depth\", \"1\")\n print(out)\n\n # Verify\n print(f\"{BLUE}Verifying transition...{NC}\")\n rc, out, _ = _run(\"officecli\", \"get\", deck, f\"/slide[{to_slide}]\", \"--json\")\n if not _has_morph_transition(out):\n print(f\"{RED}ERROR: Transition not set on slide {to_slide}!{NC}\")\n print(f\"{RED} This slide will not have morph animation.{NC}\")\n sys.exit(1)\n\n print(f\"{GREEN}Transition verified on slide {to_slide}{NC}\")\n print()\n\n\n# ---------------------------------------------------------------------------\n# morph_ghost_content\n# ---------------------------------------------------------------------------\n\ndef morph_ghost_content(deck, slide, *shapes):\n \"\"\"Move shapes off-screen (x=36cm) to ghost them for morph animation.\n\n Args:\n deck: path to .pptx file\n slide: slide number (1-based)\n *shapes: one or more shape indices to ghost\n \"\"\"\n slide = int(slide)\n shapes = [int(s) for s in shapes]\n\n if not shapes:\n print(f\"{YELLOW}No shapes to ghost{NC}\")\n return\n\n print(f\"{BLUE}Ghosting {len(shapes)} content shape(s) on slide {slide}...{NC}\")\n for idx in shapes:\n rc, _, _ = _run(\"officecli\", \"set\", deck, f\"/slide[{slide}]/shape[{idx}]\", \"--prop\", \"x=36cm\")\n if rc == 0:\n print(f\"{GREEN} Ghosted shape[{idx}]{NC}\")\n else:\n print(f\"{RED} Failed to ghost shape[{idx}]{NC}\")\n\n print(f\"{GREEN}Ghosting complete{NC}\")\n print()\n\n\n# ---------------------------------------------------------------------------\n# morph_verify_slide\n# ---------------------------------------------------------------------------\n\ndef _check_unghosted(data, prev_slide):\n \"\"\"Return list of shapes with #s{prev_slide}- prefix not yet ghosted.\"\"\"\n unghosted = []\n\n def visit(child):\n name = child.get(\"format\", {}).get(\"name\", \"\")\n x = child.get(\"format\", {}).get(\"x\", \"\")\n path = child.get(\"path\", \"\")\n if f\"#s{prev_slide}-\" in name and x != \"36cm\":\n unghosted.append(f\"{path}: name={name}, x={x}\")\n\n if \"children\" in data:\n _collect_shapes(data[\"children\"], visit)\n return unghosted\n\n\ndef _check_duplicates(prev_data, curr_data):\n \"\"\"Return list of shapes with identical text+position on adjacent slides (excluding ghost zone).\"\"\"\n SCENE_KEYWORDS = [\"ring\", \"dot\", \"line\", \"circle\", \"rect\", \"slash\",\n \"accent\", \"actor\", \"star\", \"triangle\", \"diamond\"]\n\n def extract(data):\n boxes = []\n\n def visit(child):\n if child.get(\"type\") != \"textbox\":\n return\n name = child.get(\"format\", {}).get(\"name\", \"\")\n text = child.get(\"text\", \"\").strip()\n x = child.get(\"format\", {}).get(\"x\", \"\")\n y = child.get(\"format\", {}).get(\"y\", \"\")\n path = child.get(\"path\", \"\")\n\n if not text or len(text) \u003c 6:\n return\n\n clean = name.replace(\"!!\", \"\")\n is_scene = any(kw in clean.lower() for kw in SCENE_KEYWORDS)\n has_slide_pattern = any(f\"s{i}-\" in clean for i in range(1, 20))\n\n if has_slide_pattern or not is_scene:\n boxes.append({\"path\": path, \"text\": text[:50], \"x\": x, \"y\": y})\n\n if \"children\" in data:\n _collect_shapes(data[\"children\"], visit)\n return boxes\n\n prev_boxes = extract(prev_data)\n curr_boxes = extract(curr_data)\n\n duplicates = []\n for curr in curr_boxes:\n for prev in prev_boxes:\n if (curr[\"text\"] == prev[\"text\"]\n and curr[\"x\"] == prev[\"x\"]\n and curr[\"y\"] == prev[\"y\"]\n and curr[\"x\"] != \"36cm\"):\n duplicates.append(\n f\"{curr['path']}: text='{curr['text']}...', pos=({curr['x']},{curr['y']})\"\n )\n break\n return duplicates\n\n\ndef morph_verify_slide(deck, slide):\n \"\"\"Verify a slide has correct morph setup (transition + ghosting).\n\n Uses two detection methods:\n 1. Name-based: shapes with #s{prev}- prefix must be at x=36cm\n 2. Duplicate text: same text+position on adjacent slides (catches missing # prefix)\n\n Args:\n deck: path to .pptx file\n slide: slide number (1-based)\n\n Returns:\n True if all checks pass, False otherwise.\n \"\"\"\n slide = int(slide)\n print(f\"{BLUE}Verifying slide {slide}...{NC}\")\n has_error = False\n\n # --- Check transition ---\n rc, out, _ = _run(\"officecli\", \"get\", deck, f\"/slide[{slide}]\", \"--json\")\n curr_json_str = out\n\n if not _has_morph_transition(curr_json_str):\n print(f\"{RED} Missing transition=morph{NC}\")\n print(f\"{RED} Without this, slide will not animate!{NC}\")\n has_error = True\n else:\n print(f\"{GREEN} Transition OK{NC}\")\n\n # --- Checks against previous slide ---\n prev_slide = slide - 1\n if prev_slide >= 1:\n try:\n curr_data = json.loads(curr_json_str).get(\"data\", {})\n\n # Method 1: name-based unghosted detection\n unghosted = _check_unghosted(curr_data, prev_slide)\n if unghosted:\n print(f\"{YELLOW} Warning: Found unghosted content from slide {prev_slide}:{NC}\")\n for item in unghosted:\n print(f\" {item}\")\n print(f\"{YELLOW} These shapes should be ghosted to x=36cm{NC}\")\n has_error = True\n else:\n print(f\"{GREEN} No unghosted content detected{NC}\")\n except Exception as e:\n print(f\"{RED} [helper] unghosted-check parse error: {e}{NC}\", file=sys.stderr)\n has_error = True\n\n # Method 2: duplicate text/position detection (backup for missing # prefix)\n try:\n rc2, out2, _ = _run(\"officecli\", \"get\", deck, f\"/slide[{prev_slide}]\", \"--json\")\n prev_data = json.loads(out2).get(\"data\", {})\n curr_data = json.loads(curr_json_str).get(\"data\", {})\n\n duplicates = _check_duplicates(prev_data, curr_data)\n if duplicates:\n print(f\"{YELLOW} Warning: Found duplicate content from slide {prev_slide} (same text at same position):{NC}\")\n for dup in duplicates:\n print(f\" {dup}\")\n print(f\"{YELLOW} This might indicate:{NC}\")\n print(f\"{YELLOW} 1. Content shapes missing '#sN-' prefix (can't detect for ghosting){NC}\")\n print(f\"{YELLOW} 2. Forgot to ghost previous slide's content{NC}\")\n print(f\"{YELLOW} 3. Forgot to add new content for this slide{NC}\")\n has_error = True\n except Exception as e:\n print(f\"{RED} [helper] duplicate-check parse error: {e}{NC}\", file=sys.stderr)\n has_error = True\n\n if not has_error:\n print(f\"{GREEN}Slide {slide} verification passed{NC}\")\n else:\n print(f\"{RED}Slide {slide} has issues - see above{NC}\")\n\n print()\n return not has_error\n\n\n# ---------------------------------------------------------------------------\n# morph_final_check\n# ---------------------------------------------------------------------------\n\ndef morph_final_check(deck):\n \"\"\"Verify the entire deck: all slides (2+) must pass morph_verify_slide.\n\n Also checks for M-2 ghost accumulation (shapes piled up at x≥34cm).\n\n Args:\n deck: path to .pptx file\n\n Returns:\n True if all slides pass, False otherwise.\n \"\"\"\n print(f\"{BLUE}Final deck verification...{NC}\")\n print()\n\n rc, out, _ = _run(\"officecli\", \"view\", deck, \"outline\")\n total_slides = 0\n first_line = out.split(\"\\n\")[0] if out else \"\"\n match = re.search(r\"(\\d+)\\s+slides\", first_line)\n if match:\n total_slides = int(match.group(1))\n\n if total_slides == 0:\n print(f\"{RED}No slides found in deck{NC}\")\n return False\n\n print(f\"Total slides: {total_slides}\")\n print()\n\n # --- New: Check for M-2 ghost accumulation ---\n print(f\"{BLUE}Checking ghost accumulation (M-2)...{NC}\")\n rc, out, _ = _run(\"officecli\", \"query\", deck, \"shape[x>=34cm]\", \"--json\")\n try:\n data = json.loads(out).get(\"data\", {})\n ghost_count = len(data.get(\"results\", []))\n expected_max = max(50, total_slides * 4) # ~4 actors × slides\n\n if ghost_count > expected_max:\n print(f\"{RED} REJECT: Found {ghost_count} accumulated ghost shapes (expected ≤ {expected_max}){NC}\")\n print(f\"{RED} This is M-2 ghost accumulation — shapes moved to x≥34cm but not cleaned per-slide.{NC}\")\n print(f\"{RED} See §Ghost Discipline & Actor Lifecycle in SKILL.md.{NC}\")\n return False\n else:\n print(f\"{GREEN} Ghost count OK: {ghost_count} shapes (≤ {expected_max}){NC}\")\n except Exception as e:\n print(f\"{YELLOW} Warning: could not parse ghost count: {e}{NC}\")\n\n error_count = 0\n for i in range(2, total_slides + 1):\n if not morph_verify_slide(deck, i):\n error_count += 1\n\n print(\"=========================================\")\n if error_count == 0:\n print(f\"{GREEN}All slides verified successfully!{NC}\")\n print(f\"{GREEN} Your morph animations should work correctly.{NC}\")\n return True\n else:\n print(f\"{RED}Found issues in {error_count} slide(s){NC}\")\n print(f\"{RED} Please fix the issues above before delivering.{NC}\")\n return False\n\n\n# ---------------------------------------------------------------------------\n# CLI entry point\n# ---------------------------------------------------------------------------\n\ndef clean_ghost_accumulation(deck, threshold=50):\n \"\"\"Remove ghost shapes exceeding threshold (M-2 fix).\n\n Deletes shapes at x≥34cm, keeping only the first N (buffer for morph exit).\n\n Args:\n deck: path to .pptx\n threshold: max ghosts to keep (default 50)\n\n Returns:\n Number of shapes deleted\n \"\"\"\n print(f\"{BLUE}Cleaning ghost accumulation...{NC}\")\n\n rc, out, _ = _run(\"officecli\", \"query\", deck, \"shape[x>=34cm]\", \"--json\")\n try:\n data = json.loads(out).get(\"data\", {})\n results = data.get(\"results\", [])\n ghost_count = len(results)\n\n if ghost_count \u003c= threshold:\n print(f\"{GREEN} Ghost count already OK: {ghost_count} ≤ {threshold}{NC}\")\n return 0\n\n # Sort by slide (ascending) so we delete oldest/leftmost first\n to_delete = results[threshold:]\n print(f\"{YELLOW} Deleting {len(to_delete)} shapes (keeping {threshold})...{NC}\")\n\n for shape in to_delete:\n shape_id = shape.get(\"format\", {}).get(\"id\")\n shape_name = shape.get(\"format\", {}).get(\"name\", \"?\")\n if shape_id:\n _run(\"officecli\", \"remove\", deck, f\"/shape[@id={shape_id}]\")\n print(f\" Removed: {shape_name} ({shape_id})\")\n\n print(f\"{GREEN} Cleaned {len(to_delete)} shapes. Verify with: final-check{NC}\")\n return len(to_delete)\n except Exception as e:\n print(f\"{RED} Error: {e}{NC}\", file=sys.stderr)\n return 0\n\n\ndef main():\n parser = argparse.ArgumentParser(\n prog=\"morph-helpers.py\",\n description=\"Morph PPT Helper Functions — cross-platform (Mac / Windows / Linux)\",\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\ncommands:\n clone \u003cdeck> \u003cfrom_slide> \u003cto_slide> Clone slide and set morph transition\n ghost \u003cdeck> \u003cslide> \u003cidx> [idx ...] Ghost multiple shapes off-screen (x=36cm)\n verify \u003cdeck> \u003cslide> Verify slide setup (transition + ghosting)\n final-check \u003cdeck> Verify entire deck (+ M-2 ghost accumulation check)\n clean-accumulation \u003cdeck> Remove excess ghost shapes (M-2 fix)\n\nexample:\n python morph-helpers.py clone deck.pptx 1 2\n python morph-helpers.py ghost deck.pptx 2 7 8 9\n python morph-helpers.py verify deck.pptx 2\n python morph-helpers.py final-check deck.pptx\n python morph-helpers.py clean-accumulation deck.pptx\n\"\"\",\n )\n sub = parser.add_subparsers(dest=\"command\")\n\n p = sub.add_parser(\"clone\")\n p.add_argument(\"deck\")\n p.add_argument(\"from_slide\", type=int)\n p.add_argument(\"to_slide\", type=int)\n\n p = sub.add_parser(\"ghost\")\n p.add_argument(\"deck\")\n p.add_argument(\"slide\", type=int)\n p.add_argument(\"shapes\", nargs=\"+\", type=int)\n\n p = sub.add_parser(\"verify\")\n p.add_argument(\"deck\")\n p.add_argument(\"slide\", type=int)\n\n p = sub.add_parser(\"final-check\")\n p.add_argument(\"deck\")\n\n p = sub.add_parser(\"clean-accumulation\")\n p.add_argument(\"deck\")\n\n args = parser.parse_args()\n\n if args.command == \"clone\":\n morph_clone_slide(args.deck, args.from_slide, args.to_slide)\n elif args.command == \"ghost\":\n morph_ghost_content(args.deck, args.slide, *args.shapes)\n elif args.command == \"verify\":\n if not morph_verify_slide(args.deck, args.slide):\n sys.exit(1)\n elif args.command == \"final-check\":\n if not morph_final_check(args.deck):\n sys.exit(1)\n elif args.command == \"clean-accumulation\":\n clean_ghost_accumulation(args.deck)\n else:\n parser.print_help()\n\n\nif __name__ == \"__main__\":\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":16483,"content_sha256":"1e856d00e2d1b207336c83710a9f6d0f9a10650c6c3f4e2c01a3443e03f3833b"},{"filename":"reference/morph-helpers.sh","content":"#!/bin/bash\n\n# Morph PPT Helper Functions\n# Purpose: Simplify morph workflow by bundling common operations with built-in verification\n\n# Colors for output\nGREEN='\\033[0;32m'\nRED='\\033[0;31m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\n# ============================================\n# morph_clone_slide: Clone slide and set transition\n# ============================================\n# Usage: morph_clone_slide \u003cdeck.pptx> \u003cfrom_slide_num> \u003cto_slide_num>\n# Example: morph_clone_slide deck.pptx 1 2\n#\n# What it does:\n# 1. Clone the source slide\n# 2. Automatically set transition=morph\n# 3. List all shapes for ghosting reference\n# 4. Verify transition was set correctly\nmorph_clone_slide() {\n local deck=$1\n local from_slide=$2\n local to_slide=$3\n\n echo -e \"${BLUE}📋 Cloning slide $from_slide → $to_slide...${NC}\"\n officecli add \"$deck\" '/' --from \"/slide[$from_slide]\"\n\n echo -e \"${BLUE}⚡ Setting morph transition...${NC}\"\n officecli set \"$deck\" \"/slide[$to_slide]\" --prop transition=morph\n\n echo -e \"${BLUE}📊 Listing shapes for ghosting reference:${NC}\"\n officecli get \"$deck\" \"/slide[$to_slide]\" --depth 1\n\n # Verify transition was set\n echo -e \"${BLUE}🔍 Verifying transition...${NC}\"\n local trans=$(officecli get \"$deck\" \"/slide[$to_slide]\" --json 2>/dev/null | grep '\"transition\": \"morph\"')\n if [ -z \"$trans\" ]; then\n echo -e \"${RED}❌ ERROR: Transition not set on slide $to_slide!${NC}\"\n echo -e \"${RED} This slide will not have morph animation.${NC}\"\n exit 1\n else\n echo -e \"${GREEN}✅ Transition verified on slide $to_slide${NC}\"\n fi\n\n echo \"\"\n}\n\n# ============================================\n# morph_ghost_content: Ghost multiple shapes at once\n# ============================================\n# Usage: morph_ghost_content \u003cdeck.pptx> \u003cslide_num> \u003cshape_idx1> [shape_idx2] [shape_idx3] ...\n# Example: morph_ghost_content deck.pptx 2 7 8 9\n#\n# What it does:\n# 1. Move specified shapes to x=36cm (off-screen)\n# 2. Show progress for each shape\n# 3. Verify all shapes were ghosted\nmorph_ghost_content() {\n local deck=$1\n local slide=$2\n shift 2\n local shapes=(\"$@\")\n\n if [ ${#shapes[@]} -eq 0 ]; then\n echo -e \"${YELLOW}⚠️ No shapes to ghost${NC}\"\n return 0\n fi\n\n echo -e \"${BLUE}👻 Ghosting ${#shapes[@]} content shape(s) on slide $slide...${NC}\"\n\n for shape_idx in \"${shapes[@]}\"; do\n officecli set \"$deck\" \"/slide[$slide]/shape[$shape_idx]\" --prop x=36cm 2>/dev/null\n if [ $? -eq 0 ]; then\n echo -e \"${GREEN} ✓ Ghosted shape[$shape_idx]${NC}\"\n else\n echo -e \"${RED} ✗ Failed to ghost shape[$shape_idx]${NC}\"\n fi\n done\n\n echo -e \"${GREEN}✅ Ghosting complete${NC}\"\n echo \"\"\n}\n\n# ============================================\n# morph_verify_slide: Verify slide has correct setup\n# ============================================\n# Usage: morph_verify_slide \u003cdeck.pptx> \u003cslide_num>\n# Example: morph_verify_slide deck.pptx 2\n#\n# What it does:\n# 1. Check if transition=morph is set\n# 2. Check for unghosted content from previous slide (by '#sN-' prefix)\n# 3. Check for duplicate content (same text at same position) - BACKUP DETECTION\n# 4. Report any issues found\n#\n# TWO DETECTION METHODS:\n#\n# Method 1: Name-based detection (Primary)\n# - Checks if shapes with '#sN-' prefix are ghosted\n# - REQUIRES correct naming: '#s1-title', '#s2-card', etc.\n# - Fast and accurate when naming is correct\n#\n# Method 2: Duplicate detection (Backup insurance)\n# - Checks if adjacent slides have identical text at identical positions\n# - Works even if naming is wrong (e.g., 's1-title' instead of '#s1-title')\n# - Catches cases where content wasn't ghosted OR naming is incorrect\n# - Ignores ghost zone (x=36cm) duplicates (those are expected)\n#\n# WHY TWO METHODS?\n# If agents forget '#' prefix, Method 1 fails but Method 2 still catches the problem!\nmorph_verify_slide() {\n local deck=$1\n local slide=$2\n\n echo -e \"${BLUE}🔍 Verifying slide $slide...${NC}\"\n\n local has_error=0\n\n # Check transition\n local trans=$(officecli get \"$deck\" \"/slide[$slide]\" --json 2>/dev/null | grep '\"transition\": \"morph\"')\n if [ -z \"$trans\" ]; then\n echo -e \"${RED} ❌ Missing transition=morph${NC}\"\n echo -e \"${RED} Without this, slide will not animate!${NC}\"\n has_error=1\n else\n echo -e \"${GREEN} ✅ Transition OK${NC}\"\n fi\n\n # Check for unghosted content from previous slide\n local prev_slide=$((slide - 1))\n if [ $prev_slide -ge 1 ]; then\n # Use JSON output for reliable parsing\n local shapes_json=$(officecli get \"$deck\" \"/slide[$slide]\" --json 2>/dev/null)\n\n # Use python to parse JSON and find unghosted content\n local unghosted_check\n unghosted_check=$(printf '%s' \"$shapes_json\" | python3 -c \"\nimport sys, json\ntry:\n data = json.load(sys.stdin)\n\n def check_children(children, prev_slide):\n unghosted = []\n for child in children:\n name = child.get('format', {}).get('name', '')\n x = child.get('format', {}).get('x', '')\n path = child.get('path', '')\n\n # Check if this shape has previous slide's content prefix\n if f'#s{prev_slide}-' in name:\n # Check if it's NOT ghosted (x != 36cm)\n if x != '36cm':\n unghosted.append(f\\\"{path}: name={name}, x={x}\\\")\n\n # Recursively check children\n if 'children' in child:\n unghosted.extend(check_children(child['children'], prev_slide))\n\n return unghosted\n\n if 'children' in data.get('data', {}):\n unghosted = check_children(data['data']['children'], $prev_slide)\n\n if unghosted:\n for item in unghosted:\n print(item)\n sys.exit(1)\n\n sys.exit(0)\nexcept Exception as e:\n print(f'[helper] parse error: {e}', file=sys.stderr)\n sys.exit(2)\n\")\n local python_exit=$?\n\n if [ $python_exit -eq 1 ] && [ -n \"$unghosted_check\" ]; then\n echo -e \"${YELLOW} ⚠️ Warning: Found unghosted content from slide $prev_slide:${NC}\"\n echo \"$unghosted_check\" | sed 's/^/ /'\n echo -e \"${YELLOW} These shapes should be ghosted to x=36cm${NC}\"\n has_error=1\n else\n echo -e \"${GREEN} ✅ No unghosted content detected${NC}\"\n fi\n fi\n\n # Additional check: Detect duplicate content between adjacent slides\n # (Catches cases where content shapes are missing #sN- prefix)\n if [ $prev_slide -ge 1 ]; then\n local prev_json=$(officecli get \"$deck\" \"/slide[$prev_slide]\" --json 2>/dev/null)\n local curr_json=\"$shapes_json\"\n\n local duplicates\n duplicates=$(python3 -c \"\nimport sys, json\n\ntry:\n prev_data = json.loads('''$prev_json''')\n curr_data = json.loads('''$curr_json''')\n\n def extract_textboxes(data, slide_num):\n boxes = []\n def walk(children):\n for child in children:\n if child.get('type') == 'textbox':\n name = child.get('format', {}).get('name', '')\n text = child.get('text', '').strip()\n x = child.get('format', {}).get('x', '')\n y = child.get('format', {}).get('y', '')\n path = child.get('path', '')\n\n # Skip empty text and very short text\n if not text or len(text) \u003c 6:\n continue\n\n # Clean name (remove !! prefix if present)\n clean_name = name.replace('!!', '') if name else ''\n\n # Skip pure scene actors (common keywords)\n scene_keywords = ['ring', 'dot', 'line', 'circle', 'rect', 'slash',\n 'accent', 'actor', 'star', 'triangle', 'diamond']\n is_scene = any(kw in clean_name.lower() for kw in scene_keywords)\n\n # Include if:\n # 1. Name contains 'sN-' pattern (likely content even if missing #)\n # 2. Not a pure scene actor\n has_slide_pattern = any(f's{i}-' in clean_name for i in range(1, 20))\n\n if has_slide_pattern or not is_scene:\n boxes.append({\n 'path': path,\n 'name': name,\n 'text': text[:50], # First 50 chars\n 'x': x,\n 'y': y\n })\n\n if 'children' in child:\n walk(child['children'])\n\n if 'children' in data.get('data', {}):\n walk(data['data']['children'])\n return boxes\n\n prev_boxes = extract_textboxes(prev_data, $prev_slide)\n curr_boxes = extract_textboxes(curr_data, $slide)\n\n duplicates = []\n for curr in curr_boxes:\n for prev in prev_boxes:\n # Check if text and position are identical\n if (curr['text'] == prev['text'] and\n curr['x'] == prev['x'] and\n curr['y'] == prev['y']):\n # Skip if both are already in ghost position (x=36cm)\n # (It's normal for ghosted content to be at same position)\n if curr['x'] != '36cm':\n duplicates.append(f\\\"{curr['path']}: text='{curr['text']}...', pos=({curr['x']},{curr['y']})\\\")\n break\n\n if duplicates:\n for dup in duplicates:\n print(dup)\n sys.exit(1)\n\n sys.exit(0)\nexcept Exception as e:\n print(f'[helper] parse error: {e}', file=sys.stderr)\n sys.exit(2)\n\")\n\n local dup_exit=$?\n\n if [ $dup_exit -eq 1 ] && [ -n \"$duplicates\" ]; then\n echo -e \"${YELLOW} ⚠️ Warning: Found duplicate content from slide $prev_slide (same text at same position):${NC}\"\n echo \"$duplicates\" | sed 's/^/ /'\n echo -e \"${YELLOW} This might indicate:${NC}\"\n echo -e \"${YELLOW} 1. Content shapes missing '#sN-' prefix (can't detect for ghosting)${NC}\"\n echo -e \"${YELLOW} 2. Forgot to ghost previous slide's content${NC}\"\n echo -e \"${YELLOW} 3. Forgot to add new content for this slide${NC}\"\n has_error=1\n fi\n fi\n\n if [ $has_error -eq 0 ]; then\n echo -e \"${GREEN}✅ Slide $slide verification passed${NC}\"\n else\n echo -e \"${RED}❌ Slide $slide has issues - see above${NC}\"\n return 1\n fi\n\n echo \"\"\n}\n\n# ============================================\n# morph_final_check: Verify entire deck\n# ============================================\n# Usage: morph_final_check \u003cdeck.pptx>\n# Example: morph_final_check deck.pptx\n#\n# What it does:\n# 1. Check all slides (2+) have transition=morph\n# 2. Summary report of any issues\nmorph_final_check() {\n local deck=$1\n\n echo -e \"${BLUE}🎯 Final deck verification...${NC}\"\n echo \"\"\n\n # Get total slides\n local total_slides=$(officecli view \"$deck\" outline 2>/dev/null | head -1 | grep -oE '[0-9]+' | head -1 || echo \"0\")\n\n if [ \"$total_slides\" -eq 0 ]; then\n echo -e \"${RED}❌ No slides found in deck${NC}\"\n return 1\n fi\n\n echo \"Total slides: $total_slides\"\n echo \"\"\n\n local error_count=0\n\n # Check each slide starting from slide 2\n for ((i=2; i\u003c=total_slides; i++)); do\n if ! morph_verify_slide \"$deck\" \"$i\"; then\n ((error_count++))\n fi\n done\n\n echo \"\"\n echo \"=========================================\"\n if [ $error_count -eq 0 ]; then\n echo -e \"${GREEN}✅ All slides verified successfully!${NC}\"\n echo -e \"${GREEN} Your morph animations should work correctly.${NC}\"\n return 0\n else\n echo -e \"${RED}❌ Found issues in $error_count slide(s)${NC}\"\n echo -e \"${RED} Please fix the issues above before delivering.${NC}\"\n return 1\n fi\n}\n\n# Show usage if called directly\nif [ \"${BASH_SOURCE[0]}\" == \"${0}\" ]; then\n echo \"Morph PPT Helper Functions\"\n echo \"\"\n echo \"Usage: source morph-helpers.sh\"\n echo \"\"\n echo \"Available functions:\"\n echo \" morph_clone_slide \u003cdeck> \u003cfrom> \u003cto> - Clone slide and set transition\"\n echo \" morph_ghost_content \u003cdeck> \u003cslide> \u003cidx...> - Ghost multiple shapes\"\n echo \" morph_verify_slide \u003cdeck> \u003cslide> - Verify slide setup\"\n echo \" morph_final_check \u003cdeck> - Verify entire deck\"\n echo \"\"\n echo \"Example:\"\n echo \" source morph-helpers.sh\"\n echo \" morph_clone_slide deck.pptx 1 2\"\n echo \" morph_ghost_content deck.pptx 2 7 8\"\n echo \" morph_verify_slide deck.pptx 2\"\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":12780,"content_sha256":"10cc7f0dd0a2a24e361c7d497839c79d7710128d3e2746e8f66c6ef6903034bd"},{"filename":"reference/pptx-design.md","content":"---\nname: pptx-design\ndescription: Morph-specific design notes — color + typography floor for deep-stage decks, plus Scene Actors / Page Types / Shape Index / Morph Animation Essentials\n---\n\n# Morph Design Essentials\n\n`skills/officecli-pptx/SKILL.md` §Requirements / §Design Principles / §Visual delivery floor is the **source of truth for type hierarchy, contrast, and palette picking** in every pptx, morph or not. This file narrows that floor to the **stage-feel register** a morph deck typically shoots for: darker backgrounds, larger hero type, deeper opacity range for scene actors, and per-slide text-width generosity that survives `#sN-*` ghost churn. Where pptx SKILL.md already states a rule, the guidance here is an additive override **only if the slide is actively in a morph pair** — otherwise defer upward.\n\n---\n\n## 1) Color Principles (morph-stage register)\n\n### Contrast is King — always compute, never eyeball\n\nMorph decks lean dark; mid-gray body text (`#666666`) that reads fine in a pptx base render **disappears under projector glare** the moment the backdrop goes below brightness 30. Compute before you pick:\n\n```\nBrightness = (R × 299 + G × 587 + B × 114) / 1000\n```\n\nDeployment rule (morph-specific — stricter than pptx base):\n\n- **Dark background** (brightness \u003c 128) → body text brightness ≥ 80% (`#FFFFFF`, `#EEEEEE`, `#CADCFC`). Chart series fills + icon strokes must clear the same floor.\n- **Light background** (brightness ≥ 128) → body text brightness ≤ 20% (`#000000`, `#333333`).\n- **Mixed / gradient background** — add a semi-transparent backing block (`opacity=0.3-0.6`) behind the run of text; do not rely on the gradient to \"average out\".\n\nWorked samples:\n\n- `#000000` brightness 0 → dark → white text\n- `#1E2761` brightness 35 → dark → white text\n- `#2C3E50` brightness 62 → dark → white text\n- `#E94560` brightness 88 → still dark → white text (common mistake: treating bright red as \"mid\")\n- `#F39C12` brightness 160 → light → dark text\n- `#FFFFFF` brightness 255 → light → dark text\n\n**When in doubt, push contrast.** Stage-style decks are read under projector + mixed ambient light — reviewer's monitor comfort is not the right benchmark.\n\n### Color Hierarchy — three depth layers\n\nA morph deck has more visible elements per frame than a pptx base slide (scene actors + content + chart series + annotations). Hold the stack:\n\n```\nBackground fill → Scene actors → Content (text / data / KPI)\n(weakest) (medium) (strongest)\n```\n\nOpacity ranges for `!!scene-*` and `!!actor-*` shapes (morph-specific — tighter than pptx base):\n\n- **≤ 0.12** — whole-deck decoration (`!!scene-grid`, `!!scene-band`, corner accents). Must not compete with content at the back of the room.\n- **0.3 – 0.6** — evidence / data backing blocks (`!!actor-evidence-bg`, KPI card fills). Strong enough to frame, soft enough to let numbers shine.\n- **0.8 – 1.0** — reserved for `!!actor-*` shapes that ARE the content (a hero ring behind a single stat, a brand color strip as the message). Use sparingly — more than 2 per slide reads as clutter.\n\nA scene actor that lands on `opacity=0.7` in the content core is usually a mis-classified actor; either lower it (it's decoration) or rename it `!!actor-*` (it's content) and plan an exit slide.\n\n### Palette Selection — pick for mood, not for habit\n\nThere are no universal palette formulas for morph decks. The four pptx canonical palettes (Executive navy / Forest & moss / Warm terracotta / Charcoal minimal) still apply, but morph decks pick more freely from the 52-style library because cross-slide motion amplifies color mood.\n\nDecision path:\n\n1. **Match topic mood** → tech / fintech lean `dark--*`; healthcare / education lean `light--*` or `warm--*`; design / brand lean `bw--*` or `mixed--*`.\n2. **Respect user-specified hex** → if the brief names a brand color, scan `reference/styles/INDEX.md` Quick Lookup for the nearest hex trio; do not force-fit the mood label.\n3. **Vary by project** — avoid repeating the last three decks' palette family. `dark--premium-navy` on every pitch deck reads as a template, not a design choice.\n4. **Name the palette in `brief.md`** → \"warm--earth-organic palette\" is a commitment; \"warm tones\" is not.\n\nUse `reference/styles/` for inspiration (palette + signature gesture), **not** for coordinates — per `reference/styles/INDEX.md` L5-11, the build.sh coordinates are hand-tuned for demo content.\n\n---\n\n## 2) Typography (morph-stage register)\n\n### Recommended Combinations\n\nMorph decks are often viewed on stage or in projector-heavy settings where font weight carries farther than font choice. Two fonts max — one for headings, one for body.\n\n| Content Type | Primary Pair | Fallback |\n| ------------ | ----------------------------------------- | --------------------------------- |\n| English | Montserrat (title) + Inter (body) | Segoe UI / Helvetica Neue |\n| Chinese | Source Han Sans 思源黑体 (title + body) | PingFang SC / Microsoft YaHei |\n| Mixed CN/EN | Montserrat + Source Han Sans | Segoe UI + System Font |\n\nAvoid Georgia / Times for body on morph slides — serif terminals disappear when the shape interpolates mid-motion. Reserve serif for pptx base decks with no transition movement.\n\n### Size Scale — one notch larger than pptx base\n\nA morph deck is read from farther back (stage setups, large screens) and each frame holds motion in addition to text. Size up:\n\n| Role | pptx base | morph-stage (use this) |\n| ------------------- | ---------- | ----------------------- |\n| Hero / cover title | 44-60pt | **54-72pt**, bold/black |\n| Section heading | 24-32pt | **28-40pt**, bold |\n| Body / supporting | 16-22pt | **18-24pt** |\n| Caption / footnote | 12-14pt | **13-16pt** (floor 13) |\n\nDo not drop below 13pt on any slide — projector glare erodes the lowest two point sizes first.\n\n### Text Width Guidelines — widen for centered, widen for ghost churn\n\nWrapping breaks visual hierarchy in a static deck; in a morph deck it **also breaks the motion** (the interpolation picks up the wrapped baseline and the text appears to tilt mid-transition). Make text boxes wider than you think.\n\n| Content Type | Minimum Width | Best Practice |\n| -------------------------------- | ---------------- | ----------------------------------------------------------- |\n| Centered titles (64-72pt) | 28cm | 28-30cm for 10-15 char titles, 25cm for hero statements |\n| Centered subtitles (28-40pt) | 25cm | Always 25-28cm to avoid mid-word breaks |\n| Left-aligned titles | 20cm | 20-25cm depending on content length |\n| Body text / cards | 8cm (single) | Single-column 8-12cm, double-column 16-18cm |\n| Ghost-target content (`#sN-*`) | same as source | Width must match the on-slide version — a narrower ghost pulls the morph into a resize-plus-move tilt |\n\nCommon mistakes in morph decks:\n\n- Using 10-15cm for long centered subtitles → awkward wrap + visible tilt during transition.\n- Tight text boxes that \"just fit\" the text → one extra character on a cloned slide breaks layout.\n- Ghost target (x=36cm) sized smaller than source → morph reads as a shrink-and-move instead of a slide-off.\n\n**Rule of thumb:** when in doubt, widen. Extra whitespace is better than wrapped text during a morph interpolation.\n\n---\n\n## 3) Scene Actors (Animation Engine) — expanded\n\n**Purpose.** Create smooth Morph animations through persistent shapes that change properties across adjacent slides.\n\n### Setup\n\nDefine 6-8 actors on Slide 1 if the deck tells a continuous-visual story:\n\n- **Large** (5-8cm): Main visual anchors (hero circle, band, hero card)\n- **Medium** (2-4cm): Supporting elements (metric cards, accent rings)\n- **Small** (1-2cm): Accents and details (dots, dashes, icons)\n\n**Shape types** available via `--prop preset=`: `ellipse | rect | roundRect | triangle | diamond | star5 | hexagon`. Full list: `officecli help pptx shape`.\n\n### Naming (SKILL.md is authoritative)\n\nThree-prefix system — `!!scene-*` / `!!actor-*` / `#sN-*`. Source of truth: `SKILL.md` §What is Morph? — core mechanics. This file adds only the Python-vs-shell quoting note below.\n\n**Python:** `#` and `!!` require no special quoting — pass as plain strings in `subprocess.run([..., \"--prop\", \"name=#s1-title\", ...])`.\n\n**Shell (bash/zsh):** ALWAYS single-quote to avoid history expansion on `!!` and comment-leading on `#`: `--prop 'name=!!scene-ring'` / `--prop 'name=#s1-title'`.\n\n### Pairing example — 3 actors × 3 slides\n\n```\nSlide 1: !!scene-ring (x=5cm, y=3cm, w=8cm, fill=E94560, opacity=0.3)\n !!scene-dot (x=28cm, y=15cm, w=1cm)\n !!actor-headline (x=4cm, y=8cm, w=26cm, size=48)\n\nSlide 2: !!scene-ring (x=20cm, y=2cm, w=12cm, opacity=0.6) ← same name, new position+size\n !!scene-dot (x=3cm, y=16cm, w=1.5cm) ← moved to opposite corner\n !!actor-headline (x=1.5cm, y=1cm, w=12cm, size=24) ← shrunk + moved to top-left\n\nSlide 3: !!scene-ring (x=36cm) ← ghosted off-canvas\n !!scene-dot (x=10cm, y=2cm, w=1cm)\n !!actor-headline (x=36cm) ← ghost: new headline takes over\n !!actor-subpoint (x=4cm, y=8cm, w=26cm, size=36) ← new actor enters (no pair on S2 = fade in)\n```\n\n### Per-slide content (`#sN-*`) workflow\n\n1. **Clone previous slide** → inherited `#s(N-1)-*` content carries the old slide's prefix.\n2. **Ghost inherited content** → move all `#s(N-1)-*` shapes to `x=36cm`.\n3. **Add new content** → with current slide's prefix `#sN-*`.\n\nWithout step 2, slides accumulate shapes → visual overlap compounds silently across the deck.\n\n---\n\n## 4) Page Types (mix for rhythm)\n\nVary page types to avoid monotony. Each serves a different narrative purpose:\n\n| Type | When to use | Visual structure |\n|---|---|---|\n| **hero** | Opening, closing | Large centered title + scattered scene actors |\n| **statement** | Key message, transition | One impactful sentence + dramatic actor shifts (8cm+ moves) |\n| **pillars** | Multi-point structure | 2-4 equal columns, actors become card backgrounds (opacity 0.12) |\n| **evidence** | Data, statistics | 1-2 large asymmetric blocks + supporting details (opacity 0.3-0.6) |\n| **timeline** | Process, sequence | Horizontal or vertical flow with step backgrounds |\n| **comparison** | A vs B | Left-right split (50/50 or 60/40) with contrasting colors |\n| **grid** | Multiple items | Scattered or grid layout, lighter feel |\n| **quote** | Breathing moment | Centered text, minimal decoration |\n| **cta** | Call to action | Return to bold, centered design |\n| **showcase** | Featured display | Large central area for product/screenshot |\n\n**Design notes:**\n\n- **pillars**: Multi-column even distribution; scene actors morph into card backgrounds (roundRect, opacity=0.12).\n- **evidence**: Asymmetric — 1 large actor (30-40% canvas) + 1 medium (20-30%), opacity 0.3-0.6 allowed for data backgrounds.\n- **grid**: Must differ from pillars and evidence — light, scattered vs. structured.\n- **Variety matters**: Avoid repeating the same page type consecutively.\n\n---\n\n## 5) Shape Index Mechanics\n\nShapes are numbered sequentially on each slide: `shape[1]`, `shape[2]`, `shape[3]`... When `transition=morph` is applied, CLI auto-prefixes `!!` to names — **use index paths after that** (see SKILL.md §Known Issues M-1).\n\n### Index behavior\n\n- **On creation:** Shapes added in order get increasing indices.\n- **After cloning:** New slide inherits all shapes with identical indices.\n- **After adding to a cloned slide:** New shapes get the next available index.\n- **After modifying:** Index stays the same.\n\n### Pattern for build scripts\n\n```\nSlide 1: 6 actors + 2 content = 8 shapes total\nSlide 2: Clone (8) → Ghost content (shape[7-8]) → Add new (shape[9+])\nSlide 3: Clone (10) → Ghost content (shape[9-10]) → Add new (shape[11+])\n```\n\n**Formula:** Next slide's first new shape index = Previous slide's total shape count + 1.\n\n**Debugging:** `officecli get $FILE '/slide[N]' --depth 1` to inspect actual indices.\n\n---\n\n## 6) Morph Animation Essentials\n\n### Minimum requirements\n\n1. Slides 2+ must have `transition=morph` (`officecli set /slide[N] --prop transition=morph`).\n2. Scene actors must have identical `name=` across slides.\n3. Previous per-slide content must be ghosted (`x=36cm`) before adding new content.\n4. Adjacent slides should have different spatial layouts (displacement ≥ 5cm OR rotation ≥ 15° OR size delta ≥ 30% on ≥ 3 shapes).\n\n### Creating motion\n\nChange ≥ 3 scene-actor properties between adjacent slides:\n\n- Move positions (x, y)\n- Resize (width, height)\n- Rotate (rotation degrees)\n- Shift colors (fill, opacity)\n\n**Goal:** Sense of movement + transformation, not just fade.\n\n### Entrance effects on morph slides\n\nMorph handles shape transitions automatically — entrance animations are usually unnecessary. If one is needed (e.g., fade a new `#sN-*` card in), use the `with` trigger so it plays simultaneously with morph:\n\n```\nanimation=fade-entrance-300-with\n```\n\nFormat: `EFFECT[-DIRECTION][-DURATION][-TRIGGER]`. See `officecli help pptx animation` for preset list.\n\n---\n\n## 7) Style References\n\n52 visual style directories in `reference/styles/` — see `reference/styles/INDEX.md` for the catalog. Lookup workflow is in SKILL.md §Style library lookup workflow. Key rule: **learn the approach, do not copy coordinates** (the style build.sh files have known typesetting bugs per `INDEX.md` L5-11).\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":13935,"content_sha256":"40a86833c2da317c9507051e7412b27ffa9ea02e7177ae67e20709cc9a2d394b"},{"filename":"reference/styles/bw--brutalist-raw/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/bw__brutalist_raw.pptx\"\n\necho \"Building: bw--brutalist-raw (Brutalist Design)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nWHITE=FFFFFF\nBLACK=000000\nRED=FF0000\n\n# ============================================\n# SLIDE 1 - HERO (反叛 / REVOLT)\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$WHITE\n\n# Scene actors: geometric shapes with thick borders and violent positioning\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!border-box' \\\n --prop preset=rect \\\n --prop fill=$WHITE \\\n --prop line=$BLACK \\\n --prop lineWidth=3pt \\\n --prop x=20cm --prop y=2cm --prop width=10cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!block-solid' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=3cm --prop y=13cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!accent-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=10cm --prop y=15cm --prop width=3cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-heavy' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=6cm --prop y=11cm --prop width=20cm --prop height=0.15cm\n\n# Content: oversized titles\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"反叛\" \\\n --prop font=\"Arial Black\" \\\n --prop size=120 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=2cm --prop y=3cm --prop width=15cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text=\"REVOLT\" \\\n --prop font=\"Arial Black\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=2cm --prop y=8.5cm --prop width=10cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT (ART IS NOT DECORATION)\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$WHITE\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Scene actors: violent position shifts (12cm+ moves)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!border-box' \\\n --prop preset=rect \\\n --prop fill=none \\\n --prop line=$BLACK \\\n --prop lineWidth=3pt \\\n --prop x=4cm --prop y=8cm --prop width=12cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!block-solid' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=25cm --prop y=2cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!accent-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=28cm --prop y=12cm --prop width=3cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!line-heavy' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=13cm --prop width=20cm --prop height=0.15cm\n\n# Add diagonal line (new in slide 2)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!line-diag' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop rotation=35 \\\n --prop x=18cm --prop y=8cm --prop width=15cm --prop height=0.08cm\n\n# Content: large statement\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-statement' \\\n --prop text=\"ART IS NOT\\nDECORATION\" \\\n --prop font=\"Arial Black\" \\\n --prop size=96 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=2cm --prop y=2cm --prop width=25cm --prop height=10cm\n\n# ============================================\n# SLIDE 3 - PILLARS (三位参展艺术家)\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$WHITE\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Scene actors: structural frames\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!border-box' \\\n --prop preset=rect \\\n --prop fill=$WHITE \\\n --prop line=$BLACK \\\n --prop lineWidth=3pt \\\n --prop x=2cm --prop y=5cm --prop width=8cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!block-solid' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=28cm --prop y=8cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!accent-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=2cm --prop y=16cm --prop width=3cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!line-heavy' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=4.5cm --prop width=20cm --prop height=0.15cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!line-diag' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop rotation=0 \\\n --prop x=25cm --prop y=2cm --prop width=15cm --prop height=0.08cm\n\n# Content: title and artist list\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text=\"三位参展艺术家\" \\\n --prop font=\"Arial Black\" \\\n --prop size=96 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=2cm --prop y=1.5cm --prop width=20cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-artist1' \\\n --prop text=\"01 / 张伟 - 解构主义装置艺术\" \\\n --prop font=\"Courier New\" \\\n --prop size=24 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=6cm --prop width=25cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-artist2' \\\n --prop text=\"02 / 李娜 - 后现代影像创作\" \\\n --prop font=\"Courier New\" \\\n --prop size=24 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=8.5cm --prop width=25cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-artist3' \\\n --prop text=\"03 / 王强 - 激进行为艺术\" \\\n --prop font=\"Courier New\" \\\n --prop size=24 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=11cm --prop width=25cm --prop height=1.5cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE (首展反响 / Metrics)\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$WHITE\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Scene actors: asymmetric layout\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!border-box' \\\n --prop preset=rect \\\n --prop fill=none \\\n --prop line=$BLACK \\\n --prop lineWidth=3pt \\\n --prop x=22cm --prop y=10cm --prop width=10cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!block-solid' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=15cm --prop width=5cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!accent-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=15cm --prop y=10.5cm --prop width=1cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!line-heavy' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=9.5cm --prop width=20cm --prop height=0.15cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!line-diag' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop rotation=145 \\\n --prop x=20cm --prop y=1cm --prop width=15cm --prop height=0.08cm\n\n# Content: title and metrics\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text=\"首展反响\" \\\n --prop font=\"Arial Black\" \\\n --prop size=96 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=2cm --prop y=1.5cm --prop width=20cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric1-num' \\\n --prop text=\"3天\" \\\n --prop font=\"Courier New\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=6cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric1-label' \\\n --prop text=\"首展持续时间\" \\\n --prop font=\"Courier New\" \\\n --prop size=20 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=8cm --prop width=15cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric2-num' \\\n --prop text=\"1200+\" \\\n --prop font=\"Courier New\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=15cm --prop y=6cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric2-label' \\\n --prop text=\"观众人次\" \\\n --prop font=\"Courier New\" \\\n --prop size=20 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=15cm --prop y=8cm --prop width=15cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric3-num' \\\n --prop text=\"50+\" \\\n --prop font=\"Courier New\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=11cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-metric3-label' \\\n --prop text=\"媒体报道\" \\\n --prop font=\"Courier New\" \\\n --prop size=20 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=13cm --prop width=15cm --prop height=1cm\n\n# ============================================\n# SLIDE 5 - CTA (展览持续至 4月30日)\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$WHITE\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Scene actors: scattered edges with dramatic final positions\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!border-box' \\\n --prop preset=rect \\\n --prop fill=$WHITE \\\n --prop line=$BLACK \\\n --prop lineWidth=3pt \\\n --prop x=22cm --prop y=3cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!block-solid' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=1cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!accent-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=30cm --prop y=17cm --prop width=3cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!line-heavy' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=3cm --prop y=12cm --prop width=20cm --prop height=0.15cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!line-diag' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop rotation=35 \\\n --prop x=10cm --prop y=2cm --prop width=15cm --prop height=0.08cm\n\n# Content: CTA message\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text=\"展览持续至\\n4月30日\" \\\n --prop font=\"Arial Black\" \\\n --prop size=96 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=4cm --prop width=25cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-details' \\\n --prop text=\"地点: 798艺术区 A12展厅\\n时间: 10:00-20:00 (周二闭馆)\\n门票: 免费\" \\\n --prop font=\"Courier New\" \\\n --prop size=20 \\\n --prop color=$BLACK \\\n --prop align=left \\\n --prop lineSpacing=1.6 \\\n --prop fill=none \\\n --prop x=3cm --prop y=13cm --prop width=20cm --prop height=4cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":12549,"content_sha256":"225d02207b63b39b398b7d6c1d738713924465f989b1dd8a8b6b97ce2b0dcfd1"},{"filename":"reference/styles/bw--brutalist-raw/style.md","content":"# Brutalist Raw — Brutalism\n\n## Style Overview\n\nPure white background + black thick borders + red accents, oversized fonts, thick lines, violent typography.\n\n- **Scene**: Avant-garde art exhibitions, experimental design, independent brands, anti-traditional contexts\n- **Mood**: Rebellious, rough, impactful, raw\n- **Tone**: Black-white-red three colors\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------- | ------------------------------------------------ |\n| Pure White | #FFFFFF | Page background |\n| Pure Black | #000000 | Thick borders, solid blocks, thick lines, titles |\n| Pure Red | #FF0000 | Only accent color |\n\n## Typography\n\n| Element | Font | Description |\n| ---------- | ----------------- | ---------------------------------------------- |\n| Main Title | Arial Black 120pt | Intentionally oversized, dominating the canvas |\n| Subtitle | Arial Black 48pt | Large English text |\n| Body | Arial | Regular size |\n\n## Design Techniques\n\n- **Thick borders**: rect + 3pt black border lines, deliberately exposing structure\n- **Solid color blocks**: Pure black rect (5×5cm), heavy geometric feel\n- **Red accents**: Only color (pure red #FF0000), extremely restrained\n- **Thick lines**: 0.15cm high black rect, as divider lines\n- **Oversized fonts**: 120pt titles intentionally overflow conventional layout areas\n- **Violent Morph**: Shapes move violently between pages (12cm+), not elegant drift, but \"slam\" over\n- **Difference from swiss-bauhaus**: bauhaus is rigorous and rational, brutalist is intentionally rough and raw\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Layout of oversized titles + thick borders + solid blocks\n- **Slide 2 (statement)** — Violent morph movement (12cm+)\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2145,"content_sha256":"f7069ea3a417b124bc4a6d1087827a39fdbd8e2bba4fb1deabb834f3976ad26d"},{"filename":"reference/styles/bw--mono-line/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/bw__mono_line.pptx\"\n\necho \"Building: bw--mono-line (Minimalist Lines)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=FFFFFF\nBLACK=1A1A1A\nGRAY=C8C8C8\n\n# Off-canvas position for hidden elements\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: lines\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-h-top' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=0cm --prop y=1.5cm --prop width=20cm --prop height=0.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-h-mid' \\\n --prop preset=rect \\\n --prop fill=$GRAY \\\n --prop x=10cm --prop y=13cm --prop width=15cm --prop height=0.03cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-v-left' \\\n --prop preset=rect \\\n --prop fill=$BLACK \\\n --prop x=2cm --prop y=0cm --prop width=0.05cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-v-right' \\\n --prop preset=rect \\\n --prop fill=$GRAY \\\n --prop x=30cm --prop y=11cm --prop width=0.03cm --prop height=8cm\n\n# Scene actors: dots\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-accent-1' \\\n --prop preset=ellipse \\\n --prop fill=$BLACK \\\n --prop x=28cm --prop y=15cm --prop width=1cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-accent-2' \\\n --prop preset=ellipse \\\n --prop fill=$GRAY \\\n --prop x=31cm --prop y=16cm --prop width=0.8cm --prop height=0.8cm\n\n# Scene actors: all text elements (visible on slide 1, hidden on other slides initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-title' \\\n --prop text=\"Your Presentation Title\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=54 \\\n --prop color=$BLACK \\\n --prop x=4cm --prop y=5cm --prop width=26cm --prop height=4cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-subtitle' \\\n --prop text=\"Subtitle goes here\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=20 \\\n --prop color=$GRAY \\\n --prop x=4cm --prop y=9.5cm --prop width=20cm --prop height=2cm --prop fill=none\n\nofficecli set \"$OUTPUT\" '/slide[1]/shape[7]/paragraph[1]' --prop align=l\nofficecli set \"$OUTPUT\" '/slide[1]/shape[8]/paragraph[1]' --prop align=l\n\n# Pre-create text elements for later slides (hidden off-canvas)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!statement-text' \\\n --prop text=\"The Big Idea\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=64 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=2cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-1-num' \\\n --prop text=\"01\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=40 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-1-title' \\\n --prop text=\"Strategy\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=28 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=17cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-2-num' \\\n --prop text=\"02\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=40 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=4cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-2-title' \\\n --prop text=\"Design\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=28 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=12cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-3-num' \\\n --prop text=\"03\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=40 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=20cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-3-title' \\\n --prop text=\"Growth\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=28 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-1-num' \\\n --prop text=\"42%\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=54 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=14cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-1-label' \\\n --prop text=\"Efficiency Gain\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=22cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-2-num' \\\n --prop text=\"3.2x\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=54 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=8cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-2-label' \\\n --prop text=\"Growth Rate\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=16cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-3-num' \\\n --prop text=\"98%\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=54 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=24cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-3-label' \\\n --prop text=\"Satisfaction\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-text' \\\n --prop text=\"Let's Connect\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=54 \\\n --prop color=$BLACK \\\n --prop x=${OFFSCREEN} --prop y=18cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-sub' \\\n --prop text=\"[email protected]\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop x=${OFFSCREEN} --prop y=26cm --prop width=0.1cm --prop height=0.1cm --prop fill=none\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\n# Clone slide 1\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move lines to center intersection\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=7cm --prop y=9.5cm --prop width=20cm --prop height=0.05cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=5cm --prop y=9.5cm --prop width=24cm --prop height=0.03cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=16.5cm --prop y=3cm --prop width=0.05cm --prop height=13cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=17.5cm --prop y=4cm --prop width=0.03cm --prop height=11cm\n\n# Move dots\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=3cm --prop y=9cm --prop width=1cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=4.5cm --prop y=10.5cm --prop width=0.8cm --prop height=0.8cm\n\n# Hide slide 1 text (hero)\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=${OFFSCREEN} --prop y=2cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=${OFFSCREEN} --prop y=10cm --prop width=0.1cm --prop height=0.1cm\n\n# Show statement text\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=4cm --prop y=5.5cm --prop width=26cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]/paragraph[1]' --prop align=center\n\n# ============================================\n# SLIDE 3 - THREE PILLARS\n# ============================================\necho \"Building Slide 3: Three Pillars...\"\n\n# Clone slide 2\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move lines to create column dividers\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=1.2cm --prop y=1.2cm --prop width=31cm --prop height=0.05cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=1.2cm --prop y=4.5cm --prop width=31cm --prop height=0.03cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=11.5cm --prop y=5cm --prop width=0.05cm --prop height=12cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=22.5cm --prop y=5cm --prop width=0.03cm --prop height=12cm\n\n# Move dots\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=5cm --prop y=2.8cm --prop width=1cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=16cm --prop y=2.8cm --prop width=0.8cm --prop height=0.8cm\n\n# Hide statement text\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=${OFFSCREEN} --prop y=17cm --prop width=0.1cm --prop height=0.1cm\n\n# Show three pillars\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=2cm --prop y=5.5cm --prop width=8cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=2cm --prop y=9cm --prop width=8cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=13cm --prop y=5.5cm --prop width=8cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=13cm --prop y=9cm --prop width=8cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=24cm --prop y=5.5cm --prop width=8cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=24cm --prop y=9cm --prop width=8cm --prop height=3cm\n\n# ============================================\n# SLIDE 4 - METRICS\n# ============================================\necho \"Building Slide 4: Metrics...\"\n\n# Clone slide 3\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move lines\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=1.2cm --prop y=8cm --prop width=31cm --prop height=0.05cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=20cm --prop y=14cm --prop width=12cm --prop height=0.03cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=19cm --prop y=1cm --prop width=0.05cm --prop height=6cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=32cm --prop y=10cm --prop width=0.03cm --prop height=7cm\n\n# Move dots\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=2cm --prop y=4cm --prop width=1cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=13cm --prop y=4cm --prop width=0.8cm --prop height=0.8cm\n\n# Hide pillars\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop x=${OFFSCREEN} --prop y=6cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=${OFFSCREEN} --prop y=14cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=${OFFSCREEN} --prop y=22cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=${OFFSCREEN} --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=${OFFSCREEN} --prop y=8cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=${OFFSCREEN} --prop y=16cm --prop width=0.1cm --prop height=0.1cm\n\n# Show metrics\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=3cm --prop y=2cm --prop width=14cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=3cm --prop y=6cm --prop width=14cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=3cm --prop y=9cm --prop width=14cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=3cm --prop y=13cm --prop width=14cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=20cm --prop y=2cm --prop width=12cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=20cm --prop y=6cm --prop width=12cm --prop height=2cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\n# Clone slide 4\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move lines to create border frame\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=0cm --prop y=0.8cm --prop width=33.87cm --prop height=0.05cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=0cm --prop y=18.2cm --prop width=33.87cm --prop height=0.03cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=1.2cm --prop y=0cm --prop width=0.05cm --prop height=19.05cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=32.6cm --prop y=0cm --prop width=0.03cm --prop height=19.05cm\n\n# Move dots to center\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=16cm --prop y=13cm --prop width=1cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=17.5cm --prop y=13.5cm --prop width=0.8cm --prop height=0.8cm\n\n# Hide metrics\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop x=${OFFSCREEN} --prop y=8cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop x=${OFFSCREEN} --prop y=16cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop x=${OFFSCREEN} --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop x=${OFFSCREEN} --prop y=24cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=${OFFSCREEN} --prop y=2cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=${OFFSCREEN} --prop y=10cm --prop width=0.1cm --prop height=0.1cm\n\n# Show CTA\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=5cm --prop y=5cm --prop width=24cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=8cm --prop y=10.5cm --prop width=18cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]/paragraph[1]' --prop align=center\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]/paragraph[1]' --prop align=center\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":14863,"content_sha256":"2340e221536365f08a788ac14486492a5cf220410325677642a6f878c87f380e"},{"filename":"reference/styles/bw--mono-line/style.md","content":"# 01-mono-line — Minimalist Lines\n\n## Style Overview\n\nUsing ultra-thin lines and small dots to construct pure black-white minimalist space, conveying professionalism through whitespace and geometric order.\n\n- **Scene**: Minimalist business, academic reports, consulting proposals\n- **Mood**: Calm, restrained, professional\n- **Tone**: Pure black-white + mid-gray accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | -------- | ---------------------------------------------- |\n| Pure White | `FFFFFF` | Background |\n| Near Black | `1A1A1A` | Main lines, title text, main dots |\n| Mid Gray | `C8C8C8` | Secondary lines, subtitle text, secondary dots |\n\n## Typography\n\n| Role | Font | Size | Color |\n| ------------ | -------------- | ---- | ------ |\n| Main Title | Segoe UI Light | 54pt | 1A1A1A |\n| Subtitle | Segoe UI | 20pt | C8C8C8 |\n| Statement | Segoe UI Light | 64pt | 1A1A1A |\n| Numbers | Segoe UI Light | 40pt | C8C8C8 |\n| Column Title | Segoe UI Light | 28pt | 1A1A1A |\n| Data Numbers | Segoe UI Light | 54pt | 1A1A1A |\n| Data Label | Segoe UI | 16pt | C8C8C8 |\n\n## Design Techniques\n\n- **Ultra-thin rectangles simulate lines**: Horizontal lines height=0.05cm / 0.03cm, vertical lines width=0.05cm / 0.03cm, implemented using `rect` preset\n- **Small ellipses as decorative dots**: 1cm / 0.8cm `ellipse`, black or gray\n- **Abundant whitespace**: Only lines divide space on white background\n- **Morph animation**: Lines slide and stretch to change length and position between pages; dots drift to new positions\n- **Off-canvas hidden elements**: Text elements initially placed outside canvas (x=36cm), slide into view through morph\n\n## Scene Elements\n\n6 scene elements with different positions on each page, animated through Morph transitions:\n\n| Name | preset | fill | Typical Size | Description |\n| ---------------- | ------- | ------ | ------------- | ------------------------- |\n| `!!line-h-top` | rect | 1A1A1A | 20cm x 0.05cm | Horizontal main line |\n| `!!line-h-mid` | rect | C8C8C8 | 15cm x 0.03cm | Horizontal secondary line |\n| `!!line-v-left` | rect | 1A1A1A | 0.05cm x 12cm | Vertical main line |\n| `!!line-v-right` | rect | C8C8C8 | 0.03cm x 8cm | Vertical secondary line |\n| `!!dot-accent-1` | ellipse | 1A1A1A | 1cm x 1cm | Main dot |\n| `!!dot-accent-2` | ellipse | C8C8C8 | 0.8cm x 0.8cm | Secondary dot |\n\n## Page Structure\n\n5 pages total, Slides 2-5 set `transition=morph`:\n\n| Slide | Type | Elements | Description |\n| ------- | ------------------ | -------------------------------------------------------------------------------- | ----------- |\n| Slide 1 | Hero | Large title + subtitle left-aligned, lines construct asymmetric framework |\n| Slide 2 | Statement | Centered large text statement, lines intersect at center of canvas |\n| Slide 3 | 3-Column Pillars | Lines as column dividers, numbered 01/02/03 + titles, three columns side by side |\n| Slide 4 | Metrics / Evidence | Data display, left large numbers + right metrics, lines divide areas |\n| Slide 5 | CTA / Closing | Lines converge into canvas border frame, centered CTA text + contact info |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (Hero)** — Demonstrates initial layout of lines+dots and placement of off-canvas text elements\n- **Slide 3 (Pillars)** — How lines transform into column dividers, grid arrangement of three columns of content\n- **Slide 5 (CTA)** — Animation effect of lines converging into full-canvas border frame\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4011,"content_sha256":"94136290396cb32ac204105f5db03180a8de79e171a91869eb8d2f386b103757"},{"filename":"reference/styles/bw--swiss-bauhaus/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/bw__swiss_bauhaus.pptx\"\n\necho \"Building: bw--swiss-bauhaus (Swiss/Bauhaus Design)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nRED=E63322\nBLACK=1C1C1C\nOFFWHITE=F5F5F5\n\n# ============================================\n# SLIDE 1 - COVER\n# ============================================\necho \"Building Slide 1: Cover...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$OFFWHITE\n\n# Scene actors: color blocks\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=0cm --prop width=14cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLACK \\\n --prop x=14cm --prop y=14cm --prop width=19.87cm --prop height=5.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$OFFWHITE \\\n --prop x=16cm --prop y=0cm --prop width=8cm --prop height=8cm\n\n# Scene actors: line and dots\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bar-1' \\\n --prop fill=$BLACK \\\n --prop x=14cm --prop y=8.3cm --prop width=19.87cm --prop height=0.4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop fill=$RED \\\n --prop x=25cm --prop y=9.5cm --prop width=2.5cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop fill=$BLACK \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Scene actors: photo placeholders (hidden initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: slide 1 text\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-main' \\\n --prop text=\"DESIGN\\nTHINKING\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=3cm --prop width=10cm --prop height=8.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-sub' \\\n --prop text=\"INNOVATION WORKSHOP 2025\" \\\n --prop font=\"Arial\" \\\n --prop size=12 \\\n --prop color=$BLACK \\\n --prop fill=none \\\n --prop x=15cm --prop y=9cm --prop width=17cm --prop height=1.2cm\n\n# ============================================\n# SLIDE 2 - FIVE STAGES\n# ============================================\necho \"Building Slide 2: Five Stages...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BLACK\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Scene actors: color blocks (moved)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=5.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLACK \\\n --prop x=0cm --prop y=5.5cm --prop width=33.87cm --prop height=13.55cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$RED \\\n --prop x=27cm --prop y=5.5cm --prop width=6.87cm --prop height=6cm\n\n# Scene actors: line and dots (moved)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!bar-1' \\\n --prop fill=$OFFWHITE \\\n --prop x=0cm --prop y=10.5cm --prop width=33.87cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop fill=$OFFWHITE \\\n --prop x=2cm --prop y=12cm --prop width=1.5cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop fill=$RED \\\n --prop x=5cm --prop y=11.8cm --prop width=2cm --prop height=2cm\n\n# Scene actors: photos (photo-1 visible, photo-2 hidden)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=0cm --prop y=5.5cm --prop width=14cm --prop height=13.55cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: slide 2 text\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-main' \\\n --prop text=\"5 STAGES\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=15cm --prop y=0.8cm --prop width=17cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-sub' \\\n --prop text=\"Empathize — Define — Ideate — Prototype — Test\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=CCCCCC \\\n --prop fill=none \\\n --prop x=15cm --prop y=11.5cm --prop width=17cm --prop height=1.5cm\n\n# ============================================\n# SLIDE 3 - INSIGHT\n# ============================================\necho \"Building Slide 3: Insight...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$OFFWHITE\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Scene actors: color blocks (moved)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=7.3cm --prop width=33.87cm --prop height=2.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLACK \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=7.3cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$RED \\\n --prop x=24cm --prop y=9.5cm --prop width=9.87cm --prop height=9.55cm\n\n# Scene actors: line and dots (moved)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!bar-1' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=7.1cm --prop width=33.87cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop fill=FFFFFF \\\n --prop x=2cm --prop y=10cm --prop width=2cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop fill=$BLACK \\\n --prop x=5cm --prop y=10cm --prop width=2cm --prop height=2cm\n\n# Scene actors: photos (photo-1 moved, photo-2 hidden)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=12cm --prop y=0cm --prop width=21.87cm --prop height=7.3cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: slide 3 text\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-main' \\\n --prop text=\"THE INSIGHT\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=1.5cm --prop width=10cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-sub' \\\n --prop text=\"Users do not want features.\\nThey want outcomes.\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$BLACK \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=10.5cm --prop width=21cm --prop height=3cm\n\n# ============================================\n# SLIDE 4 - DATA\n# ============================================\necho \"Building Slide 4: Data...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BLACK\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Scene actors: color blocks (moved)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=9cm --prop width=33.87cm --prop height=10.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLACK \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$RED \\\n --prop x=26cm --prop y=0cm --prop width=7.87cm --prop height=9cm\n\n# Scene actors: line and dots (moved)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!bar-1' \\\n --prop fill=FFFFFF \\\n --prop x=0cm --prop y=9cm --prop width=33.87cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop fill=FFFFFF \\\n --prop x=2cm --prop y=0.5cm --prop width=3cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop fill=$BLACK \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Scene actors: photos (photo-1 moved, photo-2 hidden)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=0cm --prop y=0cm --prop width=26cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: slide 4 text\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-main' \\\n --prop text=\"87%\" \\\n --prop font=\"Arial\" \\\n --prop size=80 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=9.8cm --prop width=12cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-sub' \\\n --prop text=\"Of teams report breakthrough ideas\\nemerge from diverse perspectives.\" \\\n --prop font=\"Arial\" \\\n --prop size=15 \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=15cm --prop y=10.5cm --prop width=17cm --prop height=3cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$RED\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Scene actors: color blocks (moved - full coverage)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$RED \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLACK \\\n --prop x=0cm --prop y=12.5cm --prop width=33.87cm --prop height=6.55cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$OFFWHITE \\\n --prop x=28cm --prop y=0cm --prop width=5.87cm --prop height=12.5cm\n\n# Scene actors: line and dots (moved)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!bar-1' \\\n --prop fill=FFFFFF \\\n --prop x=0cm --prop y=12.5cm --prop width=33.87cm --prop height=0.3cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop fill=FFFFFF \\\n --prop x=1.6cm --prop y=13.5cm --prop width=2.5cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop fill=$RED \\\n --prop x=5.5cm --prop y=13.8cm --prop width=1.5cm --prop height=1.5cm\n\n# Scene actors: photos (both hidden)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.5cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: slide 5 text\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-main' \\\n --prop text=\"START\\nBUILDING.\" \\\n --prop font=\"Arial\" \\\n --prop size=68 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=1.5cm --prop width=25cm --prop height=9.8cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-sub' \\\n --prop text=\"[email protected] | Book your session\" \\\n --prop font=\"Arial\" \\\n --prop size=15 \\\n --prop color=CCCCCC \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=14cm --prop width=24cm --prop height=1.6cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":12651,"content_sha256":"e90269873c7ea307164b78da52f5cd60eeea07839e943aed222cc88927c76eef"},{"filename":"reference/styles/bw--swiss-bauhaus/style.md","content":"# Swiss Bauhaus — Swiss Bauhaus\n\n## Style Overview\n\nStrict red-black-white three-color geometric grid, classic Swiss/Bauhaus design style.\n\n- **Scene**: Design agencies, architectural firms, art exhibitions, brand design\n- **Mood**: Rational, rigorous, classic, restrained\n- **Tone**: Red-black-white three colors\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ----------- | ------ | ---------------------------- |\n| Off-White | F5F5F5 | Background |\n| Bauhaus Red | E63322 | Main blocks, accent color |\n| Near Black | 1C1C1C | Blocks, text |\n| White | F5F5F5 | Blocks (matching background) |\n\nStrict red/black/white three-color palette, no other colors used.\n\n## Typography\n\n- Titles: Segoe UI Black\n- Body: Segoe UI\n- Note: Impact font not used (explicitly stated in script comments)\n\n## Scene Elements\n\n- blk-a (red rectangle), blk-b (dark rectangle), blk-c (white rectangle) — Main color blocks\n- bar-1 (thin lines) — Grid/divider lines\n- dot-1, dot-2 (small squares) — Geometric punctuation decorations\n- photo-1, photo-2 — Photo elements\n- Uses image assets (design-workshop.jpg, design-abstract.jpg, team1.jpg) — can be ignored when using as style reference\n\n## Design Techniques\n\n- Classic Swiss/Bauhaus design — strict geometric grid\n- Large color blocks dramatically reorganize on each page: left column → top bar → middle band → bottom fill → full coverage\n- Thin lines (bar) create grid/ruler lines\n- Small squares (dot) as geometric punctuation decorations\n- Text follows strict margin rules (x≥1.6cm, width≤block-2cm)\n- 6 slides\n\n## Reference Script\n\nComplete build script available in `build.sh`.\nNote: Script uses image resources from assets/ directory, image parts can be ignored when using as style reference.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1** — Title page, initial geometric layout of blocks + thin line grid\n- **Slide 4** — Major block reorganization, demonstrating dramatic transformation from left column to horizontal bar\n- **Slide 6** — Full block coverage final state, understanding complete transformation sequence\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2261,"content_sha256":"1c57fb2339b2443678dc818dc0030fc67377818a9239fb6a08091627b90ef77e"},{"filename":"reference/styles/bw--swiss-system/style.md","content":"# Swiss System — Pure Black and Red\n\n## Style Overview\n\nPure white background with ink black and fire red only. Features !!rule actor (full-width rect) that sweeps vertically across slides, creating dramatic transformations.\n\n- **Scenario**: Corporate, finance, consulting, high-end professional services\n- **Mood**: Clean, systematic, bold, Swiss design\n- **Tone**: White with black and red accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------- | ------------------------ |\n| Background | #FFFFFF | Pure white |\n| Ink | #000000 | Black for text and rules |\n| Fire | #FF0000 | Red for accents |\n\n## Design Techniques\n\n- !!rule (full-width INK rect) sweeps slide vertically:\n - S1: mid-rule\n - S2: top thick\n - S3: bottom thick\n - S4: thin center\n - S5: wide top-third band\n - S6: full INK inversion (CTA - entire slide becomes black)\n- Zero darkness until final CTA slide\n- Swiss design principles: grid, typography, minimal color\n\n## Key Morph Pattern\n\nThe !!rule actor creates a dramatic journey from subtle horizontal line to complete slide inversion, representing transformation from light to dark, question to answer, problem to solution.\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1305,"content_sha256":"6728ea3d81e32fcbe894f5c73f1f7610c2a8d70e72c0a2566739872825ee9f56"},{"filename":"reference/styles/dark--architectural-plan/build.sh","content":"#!/bin/bash\nset +H\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nF=\"$SCRIPT_DIR/dark__architectural_plan.pptx\"\n\n# ── Design Tokens ──────────────────────────────────────────\nWHITE=\"FFFFFF\"\nDARK=\"18293B\" # deep navy\nPANEL=\"B5D5E3\" # cool blue panel\nIMG1=\"4F92B0\" # image placeholder (saturated blue)\nYELLOW=\"F0BE3C\" # warm gold\nYLW_LT=\"FEF0C0\" # light yellow circle bg\nGRAY=\"4A5B68\" # body text\nLGRAY=\"8BA0AE\" # captions\nCARD=\"EAF4FA\" # card bg\nCARD_B=\"BDD8E6\" # card border\nPILL=\"E3F1F8\" # pill badge bg\nFOOT=\"DAE9F0\" # footer line\n\n# Slide: 33.87 × 19.05 cm\n# Panel width: 13cm (consistent — clean morph)\n# RIGHT panel: x=20.87, w=13\n# LEFT panel: x=0, w=13\n# RIGHT image: x=18.5, y=2.5, w=15, h=14.1 (extends 2.37cm left of panel)\n# LEFT image: x=0.5, y=2.5, w=15, h=14.1 (extends 2.5cm right of panel)\n# ──────────────────────────────────────────────────────────\n\na() { officecli add \"$F\" \"$1\" --type shape \"${@:2}\"; }\nc() { officecli add \"$F\" \"$1\" --type connector \"${@:2}\"; }\nsl(){ officecli add \"$F\" / --type slide \"${@}\"; }\n\necho \"Building $F...\"\nrm -f \"$F\"\nofficecli create \"$F\"\n\n# ── Reusable dot helper (nav dots, current=active) ─────────\ndots() {\n local path=$1 cur=$2\n local xs=(14.03 14.83 15.63 16.43 17.23 18.03)\n for i in 1 2 3 4 5 6; do\n local x=\"${xs[$((i-1))]}\"\n local fill; [ \"$i\" -eq \"$cur\" ] && fill=$DARK || fill=\"C8DDED\"\n a \"$path\" --prop preset=ellipse \\\n --prop x=\"${x}cm\" --prop y=18.35cm \\\n --prop width=0.38cm --prop height=0.38cm \\\n --prop fill=$fill --prop line=none\n done\n}\n\n# ── Common top-bar for \"left content\" slides ──────────────\ntop_left() {\n local path=$1 counter=$2\n a \"$path\" --prop 'name=!!pill-bg' --prop preset=roundRect \\\n --prop x=1cm --prop y=0.42cm --prop width=4.3cm --prop height=0.82cm \\\n --prop fill=$PILL --prop line=none\n a \"$path\" --prop 'name=!!top-label' --prop text=\"Your Project\" \\\n --prop x=1.1cm --prop y=0.48cm --prop width=4.1cm --prop height=0.7cm \\\n --prop size=9 --prop color=$LGRAY --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\n a \"$path\" --prop 'name=!!biz-label' --prop text=\"Business Plan\" \\\n --prop x=12cm --prop y=0.48cm --prop width=6cm --prop height=0.7cm \\\n --prop size=9 --prop color=$LGRAY --prop fill=none --prop line=none --prop align=right\n a \"$path\" --prop text=\"$counter / 06\" \\\n --prop x=29.5cm --prop y=0.48cm --prop width=3.5cm --prop height=0.7cm \\\n --prop size=9 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop align=right\n c \"$path\" --prop 'name=!!top-line' \\\n --prop x=1cm --prop y=1.42cm --prop width=18cm --prop height=0cm \\\n --prop line=DCE8EF --prop lineWidth=0.5pt\n}\n\n# ── Common top-bar for \"right content\" slides ─────────────\ntop_right() {\n local path=$1 counter=$2\n a \"$path\" --prop 'name=!!pill-bg' --prop preset=roundRect \\\n --prop x=15.8cm --prop y=0.42cm --prop width=4.3cm --prop height=0.82cm \\\n --prop fill=$PILL --prop line=none\n a \"$path\" --prop 'name=!!top-label' --prop text=\"Your Project\" \\\n --prop x=15.9cm --prop y=0.48cm --prop width=4.1cm --prop height=0.7cm \\\n --prop size=9 --prop color=$LGRAY --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\n a \"$path\" --prop 'name=!!biz-label' --prop text=\"Business Plan\" \\\n --prop x=21.5cm --prop y=0.48cm --prop width=6cm --prop height=0.7cm \\\n --prop size=9 --prop color=$LGRAY --prop fill=none --prop line=none\n a \"$path\" --prop text=\"$counter / 06\" \\\n --prop x=29.5cm --prop y=0.48cm --prop width=3.5cm --prop height=0.7cm \\\n --prop size=9 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop align=right\n c \"$path\" --prop 'name=!!top-line' \\\n --prop x=15.8cm --prop y=1.42cm --prop width=17cm --prop height=0cm \\\n --prop line=DCE8EF --prop lineWidth=0.5pt\n}\n\n# ── Common footer ──────────────────────────────────────────\nfooter() {\n local path=$1\n c \"$path\" --prop 'name=!!footer-line' \\\n --prop x=1cm --prop y=17.85cm --prop width=31.9cm --prop height=0cm \\\n --prop line=$FOOT --prop lineWidth=0.5pt\n a \"$path\" --prop text=\"Business Plan · Architecture · 2025\" \\\n --prop x=1cm --prop y=18.08cm --prop width=12cm --prop height=0.65cm \\\n --prop size=7.5 --prop color=$LGRAY --prop fill=none --prop line=none\n}\n\n# ── Star badge (circle + star icon) ───────────────────────\nstar_badge() {\n local path=$1 x=$2 y=$3 sz=$4\n a \"$path\" --prop 'name=!!star-circle' --prop preset=ellipse \\\n --prop x=\"${x}cm\" --prop y=\"${y}cm\" \\\n --prop width=\"${sz}cm\" --prop height=\"${sz}cm\" \\\n --prop fill=$YLW_LT --prop line=none\n a \"$path\" --prop 'name=!!deco-star' --prop text=\"✦\" \\\n --prop x=\"${x}cm\" --prop y=\"${y}cm\" \\\n --prop width=\"${sz}cm\" --prop height=\"${sz}cm\" \\\n --prop size=26 --prop color=$YELLOW --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\n}\n\n# ── Card with left accent bar ──────────────────────────────\ncard() {\n local path=$1 x=$2 y=$3 w=$4 h=$5 num=$6 title=$7 desc=$8\n a \"$path\" --prop preset=roundRect \\\n --prop x=\"${x}cm\" --prop y=\"${y}cm\" --prop width=\"${w}cm\" --prop height=\"${h}cm\" \\\n --prop fill=$CARD --prop line=$CARD_B --prop lineWidth=0.5pt\n a \"$path\" --prop preset=rect \\\n --prop x=\"${x}cm\" --prop y=\"${y}cm\" --prop width=0.28cm --prop height=\"${h}cm\" \\\n --prop fill=$YELLOW --prop line=none\n a \"$path\" --prop text=\"$num\" \\\n --prop x=\"${x}cm\" --prop y=\"${y}cm\" --prop width=\"${w}cm\" --prop height=1.1cm \\\n --prop size=10 --prop bold=true --prop color=$YELLOW \\\n --prop fill=none --prop line=none --prop margin=0.5cm --prop valign=center\n a \"$path\" --prop text=\"$title\" \\\n --prop x=\"${x}cm\" --prop y=\"$(echo \"$y + 1.1\" | bc)cm\" \\\n --prop width=\"${w}cm\" --prop height=0.9cm \\\n --prop size=11 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop margin=0.5cm\n a \"$path\" --prop text=\"$desc\" \\\n --prop x=\"${x}cm\" --prop y=\"$(echo \"$y + 2.1\" | bc)cm\" \\\n --prop width=\"${w}cm\" --prop height=\"$(echo \"$h - 2.1\" | bc)cm\" \\\n --prop size=9.5 --prop color=$GRAY \\\n --prop fill=none --prop line=none --prop margin=0.5cm --prop lineSpacing=1.4\n}\n\n\n# ============================================================\n# SLIDE 1 — TITLE · content LEFT · panel RIGHT\n# ============================================================\necho \" S1: Title...\"\nsl --prop background=$WHITE\n\n# Panel RIGHT (morph anchor)\na '/slide[1]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=20.87cm --prop y=0cm --prop width=13cm --prop height=19.1cm \\\n --prop fill=$PANEL --prop line=none\n\n# Image — roundRect, floats LEFT past panel edge (+2.37cm)\na '/slide[1]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=18.5cm --prop y=2.5cm --prop width=15cm --prop height=14.1cm \\\n --prop fill=$IMG1 --prop line=none \\\n --prop color=$WHITE --prop size=13 --prop align=center --prop valign=center\n\ntop_left '/slide[1]' \"01\"\nstar_badge '/slide[1]' 1.0 3.4 2.3\n\n# Title\na '/slide[1]' --prop text=\"Architectural\\nBusiness Plan\" \\\n --prop x=3.7cm --prop y=3.1cm --prop width=14.7cm --prop height=5.4cm \\\n --prop size=60 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\n# Yellow accent line below title\nc '/slide[1]' --prop 'name=!!title-accent' \\\n --prop x=3.7cm --prop y=8.75cm --prop width=6.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\n# Subtitle\na '/slide[1]' --prop text=\"Lorem ipsum dolor sit amet, consectetur adipiscing\\nelit, sed do eiusmod tempor incididunt ut labore\\net dolore magna aliqua. Ut enim ad minim.\" \\\n --prop x=1cm --prop y=9.3cm --prop width=17cm --prop height=3cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\n# CTA button (rounded)\na '/slide[1]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"Get Started →\" \\\n --prop x=1cm --prop y=13.3cm --prop width=5.8cm --prop height=1.35cm \\\n --prop size=10.5 --prop bold=true --prop color=$WHITE \\\n --prop fill=$DARK --prop line=none \\\n --prop align=center --prop valign=center\n\n# Stats section\nc '/slide[1]' \\\n --prop x=7.3cm --prop y=15.4cm --prop width=0cm --prop height=2.3cm \\\n --prop line=C8D8E2 --prop lineWidth=0.6pt\n\na '/slide[1]' --prop 'name=!!stat1-num' --prop text=\"450+\" \\\n --prop x=1cm --prop y=15.3cm --prop width=5.5cm --prop height=1.35cm \\\n --prop size=38 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[1]' --prop 'name=!!stat1-lbl' --prop text=\"Projects Completed\" \\\n --prop x=1cm --prop y=16.65cm --prop width=5.5cm --prop height=0.8cm \\\n --prop size=8.5 --prop color=$LGRAY --prop fill=none --prop line=none\n\na '/slide[1]' --prop 'name=!!stat2-num' --prop text=\"230+\" \\\n --prop x=8cm --prop y=15.3cm --prop width=5cm --prop height=1.35cm \\\n --prop size=38 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[1]' --prop 'name=!!stat2-lbl' --prop text=\"Awards Won\" \\\n --prop x=8cm --prop y=16.65cm --prop width=5cm --prop height=0.8cm \\\n --prop size=8.5 --prop color=$LGRAY --prop fill=none --prop line=none\n\nfooter '/slide[1]'\ndots '/slide[1]' 1\n\n\n# ============================================================\n# SLIDE 2 — OUR SPECIALIZED OFFERINGS · panel LEFT · morph\n# ============================================================\necho \" S2: Offerings...\"\nsl --prop background=$WHITE\n\na '/slide[2]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=0cm --prop y=0cm --prop width=13cm --prop height=19.1cm \\\n --prop fill=$PANEL --prop line=none\n\na '/slide[2]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=0.5cm --prop y=2.5cm --prop width=15cm --prop height=14.1cm \\\n --prop fill=$IMG1 --prop line=none \\\n --prop color=$WHITE --prop size=13 --prop align=center --prop valign=center\n\ntop_right '/slide[2]' \"02\"\nstar_badge '/slide[2]' 16.0 2.6 2.0\n\na '/slide[2]' --prop text=\"Our Specialized\\nOfferings\" \\\n --prop x=18.2cm --prop y=2.3cm --prop width=14cm --prop height=5.2cm \\\n --prop size=50 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\nc '/slide[2]' --prop 'name=!!title-accent' \\\n --prop x=18.2cm --prop y=7.65cm --prop width=5.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\na '/slide[2]' --prop text=\"We bring architectural vision to life through innovative\\ndesign, precision engineering and sustainable solutions.\" \\\n --prop x=15.8cm --prop y=8.2cm --prop width=17.2cm --prop height=2.2cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\n# 3 cards\ncard '/slide[2]' 15.8 11.0 5.5 5.8 \"01\" \"Residential Design\" \"Private homes and luxury villas crafted to perfection.\"\ncard '/slide[2]' 21.9 11.0 5.5 5.8 \"02\" \"Commercial Projects\" \"Offices, retail, and public spaces built for lasting impact.\"\ncard '/slide[2]' 28.0 11.0 5.5 5.8 \"03\" \"Urban Planning\" \"Master planning that shapes communities for generations.\"\n\n# Stats (morph from S1)\na '/slide[2]' --prop 'name=!!stat1-num' --prop text=\"450+\" \\\n --prop x=15.8cm --prop y=17.0cm --prop width=5.5cm --prop height=0.85cm \\\n --prop size=22 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[2]' --prop 'name=!!stat1-lbl' --prop text=\"Projects Completed\" \\\n --prop x=15.8cm --prop y=17.85cm --prop width=5.5cm --prop height=0.6cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none\n\na '/slide[2]' --prop 'name=!!stat2-num' --prop text=\"230+\" \\\n --prop x=21.5cm --prop y=17.0cm --prop width=5cm --prop height=0.85cm \\\n --prop size=22 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[2]' --prop 'name=!!stat2-lbl' --prop text=\"Awards Won\" \\\n --prop x=21.5cm --prop y=17.85cm --prop width=5cm --prop height=0.6cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none\n\na '/slide[2]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"Explore More →\" \\\n --prop x=27.5cm --prop y=17.0cm --prop width=5.5cm --prop height=1.35cm \\\n --prop size=10 --prop bold=true --prop color=$WHITE \\\n --prop fill=$DARK --prop line=none --prop align=center --prop valign=center\n\nfooter '/slide[2]'\ndots '/slide[2]' 2\n\n\n# ============================================================\n# SLIDE 3 — VISION & MISSION · content LEFT · panel RIGHT · morph\n# ============================================================\necho \" S3: Vision & Mission...\"\nsl --prop background=$WHITE\n\na '/slide[3]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=20.87cm --prop y=0cm --prop width=13cm --prop height=19.1cm \\\n --prop fill=$PANEL --prop line=none\n\na '/slide[3]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=18.5cm --prop y=2.5cm --prop width=15cm --prop height=14.1cm \\\n --prop fill=$IMG1 --prop line=none \\\n --prop color=$WHITE --prop size=13 --prop align=center --prop valign=center\n\ntop_left '/slide[3]' \"03\"\nstar_badge '/slide[3]' 1.0 3.0 2.0\n\na '/slide[3]' --prop text=\"Vision & Mission\\nStatement\" \\\n --prop x=3.2cm --prop y=2.7cm --prop width=15cm --prop height=5.2cm \\\n --prop size=50 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\nc '/slide[3]' --prop 'name=!!title-accent' \\\n --prop x=3.2cm --prop y=8.0cm --prop width=5.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\n# Vision block with left accent\na '/slide[3]' --prop preset=rect \\\n --prop x=1cm --prop y=8.8cm --prop width=0.28cm --prop height=3.5cm \\\n --prop fill=$YELLOW --prop line=none\n\na '/slide[3]' --prop text=\"Our Vision\" \\\n --prop x=1.7cm --prop y=8.8cm --prop width=15cm --prop height=0.9cm \\\n --prop size=12 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[3]' --prop text=\"To be the leading architectural firm that transforms\\nurban landscapes through innovative, sustainable design\\nthat inspires communities for generations to come.\" \\\n --prop x=1.7cm --prop y=9.8cm --prop width=16.5cm --prop height=2.5cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.5\n\n# Mission block with left accent\na '/slide[3]' --prop preset=rect \\\n --prop x=1cm --prop y=13.0cm --prop width=0.28cm --prop height=3.5cm \\\n --prop fill=$YELLOW --prop line=none\n\na '/slide[3]' --prop text=\"Our Mission\" \\\n --prop x=1.7cm --prop y=13.0cm --prop width=15cm --prop height=0.9cm \\\n --prop size=12 --prop bold=true --prop color=$DARK --prop fill=none --prop line=none\n\na '/slide[3]' --prop text=\"To deliver exceptional architectural solutions that balance\\naesthetics, functionality and sustainability, building\\nlasting relationships with clients and communities.\" \\\n --prop x=1.7cm --prop y=14.0cm --prop width=16.5cm --prop height=2.5cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.5\n\n# Stat highlight\na '/slide[3]' --prop 'name=!!stat-pct' --prop text=\"25%\" \\\n --prop x=1cm --prop y=17.0cm --prop width=4cm --prop height=1.3cm \\\n --prop size=38 --prop bold=true --prop color=$YELLOW --prop fill=none --prop line=none\n\na '/slide[3]' --prop text=\"Annual growth\\nin client base\" \\\n --prop x=5.3cm --prop y=17.15cm --prop width=7cm --prop height=1.2cm \\\n --prop size=9 --prop color=$GRAY --prop fill=none --prop line=none\n\nfooter '/slide[3]'\ndots '/slide[3]' 3\n\n\n# ============================================================\n# SLIDE 4 — FOUNDATIONS · panel LEFT · morph\n# ============================================================\necho \" S4: Foundations...\"\nsl --prop background=$WHITE\n\na '/slide[4]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=0cm --prop y=0cm --prop width=13cm --prop height=19.1cm \\\n --prop fill=$PANEL --prop line=none\n\na '/slide[4]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=0.5cm --prop y=2.5cm --prop width=15cm --prop height=14.1cm \\\n --prop fill=$IMG1 --prop line=none \\\n --prop color=$WHITE --prop size=13 --prop align=center --prop valign=center\n\ntop_right '/slide[4]' \"04\"\nstar_badge '/slide[4]' 16.0 2.6 2.0\n\na '/slide[4]' --prop text=\"Foundations of\\nOur Business\" \\\n --prop x=18.2cm --prop y=2.3cm --prop width=14cm --prop height=5.2cm \\\n --prop size=50 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\nc '/slide[4]' --prop 'name=!!title-accent' \\\n --prop x=18.2cm --prop y=7.65cm --prop width=5.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\na '/slide[4]' --prop text=\"Our business is built on three core pillars that define\\nour approach to every project we take on.\" \\\n --prop x=15.8cm --prop y=8.2cm --prop width=17.2cm --prop height=2cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\n# 3 pillar cards (tall)\ncard '/slide[4]' 15.8 10.7 5.5 6.5 \"01\" \"Innovation\" \"We constantly push boundaries of design, embracing new technologies and bold materials.\"\ncard '/slide[4]' 21.9 10.7 5.5 6.5 \"02\" \"Sustainability\" \"Environmental responsibility guides every design decision we make for our clients.\"\ncard '/slide[4]' 28.0 10.7 5.5 6.5 \"03\" \"Excellence\" \"We exceed expectations in quality, functionality and aesthetic beauty every time.\"\n\n# Stat\na '/slide[4]' --prop 'name=!!stat-pct' --prop text=\"25%\" \\\n --prop x=15.8cm --prop y=17.5cm --prop width=4cm --prop height=1.3cm \\\n --prop size=38 --prop bold=true --prop color=$YELLOW --prop fill=none --prop line=none\n\na '/slide[4]' --prop text=\"Average ROI for\\nclient investments\" \\\n --prop x=20.3cm --prop y=17.65cm --prop width=7cm --prop height=1.2cm \\\n --prop size=9 --prop color=$GRAY --prop fill=none --prop line=none\n\nfooter '/slide[4]'\ndots '/slide[4]' 4\n\n\n# ============================================================\n# SLIDE 5 — DETAILING THE BUSINESS · content LEFT · panel RIGHT · morph\n# ============================================================\necho \" S5: Detailing...\"\nsl --prop background=$WHITE\n\na '/slide[5]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=20.87cm --prop y=0cm --prop width=13cm --prop height=19.1cm \\\n --prop fill=$PANEL --prop line=none\n\na '/slide[5]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=18.5cm --prop y=2.5cm --prop width=15cm --prop height=14.1cm \\\n --prop fill=$IMG1 --prop line=none \\\n --prop color=$WHITE --prop size=13 --prop align=center --prop valign=center\n\ntop_left '/slide[5]' \"05\"\nstar_badge '/slide[5]' 1.0 3.0 2.0\n\na '/slide[5]' --prop text=\"Detailing the\\nBusiness\" \\\n --prop x=3.2cm --prop y=2.7cm --prop width=15cm --prop height=5.2cm \\\n --prop size=50 --prop bold=true --prop color=$DARK \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\nc '/slide[5]' --prop 'name=!!title-accent' \\\n --prop x=3.2cm --prop y=8.0cm --prop width=5.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\na '/slide[5]' --prop text=\"A comprehensive breakdown of our business model,\\noperational strategy and financial projections.\" \\\n --prop x=1cm --prop y=8.5cm --prop width=17.5cm --prop height=2cm \\\n --prop size=10.5 --prop color=$GRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\n# 3 vertical detail cards (taller, left-side content)\ncard '/slide[5]' 1.0 11.0 5.3 6.5 \"01\" \"Revenue Model\" \"• Project fees\\n• Retainer services\\n• Consultation\\n• IP Licensing\"\ncard '/slide[5]' 7.0 11.0 5.3 6.5 \"02\" \"Market Strategy\" \"• Premium positioning\\n• Digital marketing\\n• Referral network\\n• Awards & PR\"\ncard '/slide[5]' 13.0 11.0 5.3 6.5 \"03\" \"Growth Plan\" \"• 3 new markets\\n• Team expansion\\n• Tech investment\\n• Global reach\"\n\na '/slide[5]' --prop 'name=!!stat-pct' --prop text=\"25%\" \\\n --prop x=1cm --prop y=17.5cm --prop width=4cm --prop height=1.3cm \\\n --prop size=38 --prop bold=true --prop color=$YELLOW --prop fill=none --prop line=none\n\na '/slide[5]' --prop text=\"Projected annual\\nrevenue growth\" \\\n --prop x=5.3cm --prop y=17.65cm --prop width=7cm --prop height=1.2cm \\\n --prop size=9 --prop color=$GRAY --prop fill=none --prop line=none\n\nfooter '/slide[5]'\ndots '/slide[5]' 5\n\n\n# ============================================================\n# SLIDE 6 — CLOSING · full dark bg · morph\n# ============================================================\necho \" S6: Closing...\"\nsl --prop background=$DARK\n\n# Full dark panel (morph from right-side panel)\na '/slide[6]' --prop 'name=!!bg-panel' --prop preset=rect \\\n --prop x=0cm --prop y=0cm --prop width=33.9cm --prop height=19.1cm \\\n --prop fill=$DARK --prop line=none\n\n# Image — right half (roundRect, subtle dark bg)\na '/slide[6]' --prop 'name=!!hero-img' --prop preset=roundRect \\\n --prop text=\"[ Architecture Image ]\" \\\n --prop x=16.5cm --prop y=2.5cm --prop width=16.9cm --prop height=14.1cm \\\n --prop fill=234055 --prop line=none \\\n --prop color=3A6070 --prop size=13 --prop align=center --prop valign=center\n\n# Top bar\na '/slide[6]' --prop 'name=!!pill-bg' --prop preset=roundRect \\\n --prop x=1cm --prop y=0.42cm --prop width=4.3cm --prop height=0.82cm \\\n --prop fill=243545 --prop line=none\na '/slide[6]' --prop 'name=!!top-label' --prop text=\"Your Project\" \\\n --prop x=1.1cm --prop y=0.48cm --prop width=4.1cm --prop height=0.7cm \\\n --prop size=9 --prop color=4A6878 --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\na '/slide[6]' --prop 'name=!!biz-label' --prop text=\"Business Plan\" \\\n --prop x=12cm --prop y=0.48cm --prop width=6cm --prop height=0.7cm \\\n --prop size=9 --prop color=4A6878 --prop fill=none --prop line=none --prop align=right\na '/slide[6]' --prop text=\"06 / 06\" \\\n --prop x=29.5cm --prop y=0.48cm --prop width=3.5cm --prop height=0.7cm \\\n --prop size=9 --prop bold=true --prop color=$YELLOW \\\n --prop fill=none --prop line=none --prop align=right\nc '/slide[6]' --prop 'name=!!top-line' \\\n --prop x=1cm --prop y=1.42cm --prop width=18cm --prop height=0cm \\\n --prop line=2A3D4D --prop lineWidth=0.5pt\n\n# Star badge (dark slide version)\na '/slide[6]' --prop 'name=!!star-circle' --prop preset=ellipse \\\n --prop x=1cm --prop y=3.8cm --prop width=2.3cm --prop height=2.3cm \\\n --prop fill=2A3D4D --prop line=none\na '/slide[6]' --prop 'name=!!deco-star' --prop text=\"✦\" \\\n --prop x=1cm --prop y=3.8cm --prop width=2.3cm --prop height=2.3cm \\\n --prop size=30 --prop color=$YELLOW --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\n\n# Title\na '/slide[6]' --prop text=\"Delving Deeper\\ninto the\\nFoundations\" \\\n --prop x=3.7cm --prop y=3.5cm --prop width=12cm --prop height=8cm \\\n --prop size=54 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.08\n\nc '/slide[6]' --prop 'name=!!title-accent' \\\n --prop x=3.7cm --prop y=11.7cm --prop width=6.5cm --prop height=0cm \\\n --prop line=$YELLOW --prop lineWidth=2.5pt\n\na '/slide[6]' --prop text=\"Explore the full scope of our architectural expertise,\\nour proven track record and vision for the future.\" \\\n --prop x=1cm --prop y=12.2cm --prop width=14.5cm --prop height=2.2cm \\\n --prop size=10.5 --prop color=$PANEL --prop fill=none --prop line=none --prop lineSpacing=1.55\n\n# CTA button (yellow on dark)\na '/slide[6]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"View Full Plan →\" \\\n --prop x=1cm --prop y=14.8cm --prop width=6.5cm --prop height=1.35cm \\\n --prop size=10.5 --prop bold=true --prop color=$DARK \\\n --prop fill=$YELLOW --prop line=none \\\n --prop align=center --prop valign=center\n\na '/slide[6]' --prop 'name=!!stat-pct' --prop text=\"25%\" \\\n --prop x=1cm --prop y=16.5cm --prop width=4cm --prop height=1.3cm \\\n --prop size=38 --prop bold=true --prop color=$YELLOW --prop fill=none --prop line=none\n\na '/slide[6]' --prop text=\"Overall Growth Rate\" \\\n --prop x=5.3cm --prop y=16.65cm --prop width=8cm --prop height=1.2cm \\\n --prop size=9 --prop color=$PANEL --prop fill=none --prop line=none\n\n# Footer (dark)\nc '/slide[6]' --prop 'name=!!footer-line' \\\n --prop x=1cm --prop y=17.85cm --prop width=31.9cm --prop height=0cm \\\n --prop line=2A3D4D --prop lineWidth=0.5pt\na '/slide[6]' --prop text=\"Business Plan · Architecture · 2025\" \\\n --prop x=1cm --prop y=18.08cm --prop width=12cm --prop height=0.65cm \\\n --prop size=7.5 --prop color=3A5060 --prop fill=none --prop line=none\n\ndots '/slide[6]' 6\n\n# ============================================================\n# Apply Morph transition to slides 2–6\n# ============================================================\necho \" Applying morph transitions...\"\nfor i in 2 3 4 5 6; do\n officecli set \"$F\" \"/slide[$i]\" --prop transition=morph 2>&1\ndone\n\necho \"\"\necho \"✓ Done → $F\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":25569,"content_sha256":"5a6e4096536efcb6002f4a52109f8c6b13353f780a358e8c6a4a2a2c030aa1bf"},{"filename":"reference/styles/dark--architectural-plan/style.md","content":"# architectural-plan — Architectural Plan\n\n## Style Overview\n\nDark blue-gray background with light blue panels and gold accents, using structured panel divisions to simulate the professional layout of architectural plans.\n\n- **Scene**: Architectural design, business plans, real estate development\n- **Mood**: Professional, structured, architectural\n- **Color Tone**: Dark blue-gray background + light blue panels + gold accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ----------- | ------ | -------------------------------------- |\n| Dark Blue | 1C2B3A | Background |\n| Panel Blue | B8D4E0 | Content panels, sidebars |\n| Gold Accent | F4C430 | Accent color, title underlines, badges |\n\n## Design Techniques\n\n- Pages divided into dark areas and light panel areas, simulating the white space and annotation zones of architectural drawings\n- Left-right content panel alternating layout (left content/right panel or right content/left panel), adding rhythmic variation\n- Top navigation bar + numbering system (01, 02...), reinforcing the sectional coding aesthetic of architectural drawings\n- star_badge star-shaped badges as decorations, gold title underlines elevate hierarchy\n- roundRect rounded buttons with gold fill, unifying CTA visual style\n\n## Reference Script\n\nFull build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (title)** — Left-right panel division layout and star_badge decoration\n- **Slide 3 (services)** — Alternating panel layout and top navigation bar implementation\n- **Slide 5 (contact)** — Multi-statistic arrangement and CTA button design\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1792,"content_sha256":"aefebb22ecae46282874c70571174e2f561eaf181affcec0290605f0dfe3149b"},{"filename":"reference/styles/dark--aurora-softedge/style.md","content":"# Aurora Softedge — Design Portfolio\n\n## Style Overview\n\nAurora dark background with layered soft-edge ellipses. Innovative softedge technique creates depth through graduated blur.\n\n- **Scenario**: Design portfolios, creative showcases, art galleries\n- **Mood**: Aurora-like, dreamy, artistic, mysterious\n- **Tone**: Dark with soft aurora colors\n\n## Design Techniques\n\n- Layered soft-edge ellipses (outer = larger softedge, inner = sharp)\n- Soft-edge formula: base ellipse softedge = radius × 2.5pt\n- Aurora color palette\n- Graduated blur creates depth\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":625,"content_sha256":"9782226aa00f113131dbdf5955ba28fd7fc3c9e4786d40d7ff28c5886b31e1bc"},{"filename":"reference/styles/dark--blueprint-grid/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__blueprint_grid.pptx\"\n\necho \"Building: dark--blueprint-grid (AI Agent Platform)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=1B3A5C\nBLUE=4A90D9\nWHITE=FFFFFF\nLIGHT_BLUE=B8D0E8\nOVERLAY=2C5F8A\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: grid lines\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-h1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=4cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-h2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=8.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-h3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=13cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-h4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=17.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-v1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=6cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-v2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=12cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-v3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=22cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!grid-v4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=28cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\n# Scene actors: major lines\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!major-h' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=0cm --prop y=10.5cm --prop width=34cm --prop height=0.04cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!major-v' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=17cm --prop y=0cm --prop width=0.04cm --prop height=19.05cm\n\n# Scene actors: dots\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=5.75cm --prop y=3.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot2' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=21.75cm --prop y=12.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot3' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=27.75cm --prop y=8.25cm --prop width=0.5cm --prop height=0.5cm\n\n# Scene actors: rings\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ring1' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=11.4cm --prop y=12.4cm --prop width=1.2cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ring2' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=27cm --prop y=16.5cm --prop width=1.2cm --prop height=1.2cm\n\n# Content: hero text\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"AI Agent Platform\" \\\n --prop font=\"Courier New\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2.4cm --prop y=4.8cm --prop width=24cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text=\"智能体平台发布\" \\\n --prop font=\"Courier New\" \\\n --prop size=36 \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2.4cm --prop y=8cm --prop width=18cm --prop height=2.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-tag' \\\n --prop text=\"构建 · 编排 · 部署 · 监控\" \\\n --prop font=\"Inter\" \\\n --prop size=18 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2.4cm --prop y=10.8cm --prop width=18cm --prop height=1.4cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Scene actors: grid lines (moved)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-h1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=2cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-h2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=6.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-h3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=11cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-h4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=15.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-v1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=4cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-v2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=10cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-v3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=20cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!grid-v4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=30cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!major-h' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=0cm --prop y=9cm --prop width=34cm --prop height=0.04cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!major-v' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=25cm --prop y=0cm --prop width=0.04cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!dot1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=9.75cm --prop y=6.25cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!dot2' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=29.75cm --prop y=15.25cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!dot3' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=19.75cm --prop y=1.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!ring1' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=3.4cm --prop y=14.9cm --prop width=1.2cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!ring2' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=24.4cm --prop y=2cm --prop width=1.2cm --prop height=1.2cm\n\n# Content: statement text\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-statement' \\\n --prop text=\"每个企业都需要\\n自己的智能体工厂\" \\\n --prop font=\"Courier New\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop lineSpacing=1.4 \\\n --prop fill=none \\\n --prop x=3cm --prop y=5cm --prop width=28cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-desc' \\\n --prop text=\"从手工搭建到工业化生产,AI Agent 正在重塑企业数字化底座\" \\\n --prop font=\"Inter\" \\\n --prop size=18 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=5cm --prop y=12cm --prop width=24cm --prop height=1.6cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Scene actors: grid lines (moved again)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-h1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=3.4cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-h2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=9cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-h3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=14.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-h4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=18cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-v1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=11cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-v2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=22.6cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-v3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=8cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!grid-v4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=33cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!major-h' \\\n --prop fill=$BLUE \\\n --prop opacity=0.45 \\\n --prop x=0cm --prop y=3.4cm --prop width=34cm --prop height=0.04cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!major-v' \\\n --prop fill=$BLUE \\\n --prop opacity=0.45 \\\n --prop x=0.6cm --prop y=0cm --prop width=0.04cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!dot1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=10.75cm --prop y=8.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!dot2' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=22.35cm --prop y=14.25cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!dot3' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=32.75cm --prop y=3.15cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!ring1' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=7.4cm --prop y=17cm --prop width=1.2cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!ring2' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=32.4cm --prop y=8cm --prop width=1.2cm --prop height=1.2cm\n\n# Content: pillars\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text=\"平台三大核心支柱\" \\\n --prop font=\"Courier New\" \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=1.2cm --prop y=0.8cm --prop width=20cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box1-bg' \\\n --prop fill=$OVERLAY \\\n --prop opacity=0.12 \\\n --prop x=1.2cm --prop y=4.2cm --prop width=9.8cm --prop height=12.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box1-title' \\\n --prop text=\"智能编排引擎\" \\\n --prop font=\"Courier New\" \\\n --prop size=22 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=1.8cm --prop y=4.8cm --prop width=8.6cm --prop height=1.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box1-desc' \\\n --prop text=\"· 可视化工作流设计器\\n· 多 Agent 协作拓扑\\n· 动态任务路由与分发\\n· 实时调试与回放\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=top \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=1.8cm --prop y=6.8cm --prop width=8.6cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box2-bg' \\\n --prop fill=$OVERLAY \\\n --prop opacity=0.12 \\\n --prop x=12.2cm --prop y=4.2cm --prop width=9.8cm --prop height=12.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box2-title' \\\n --prop text=\"全栈工具集成\" \\\n --prop font=\"Courier New\" \\\n --prop size=22 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=12.8cm --prop y=4.8cm --prop width=8.6cm --prop height=1.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box2-desc' \\\n --prop text=\"· 200+ 预置工具连接器\\n· API / SDK / 插件三模式\\n· 安全沙箱执行环境\\n· 统一身份与权限管理\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=top \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=12.8cm --prop y=6.8cm --prop width=8.6cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box3-bg' \\\n --prop fill=$OVERLAY \\\n --prop opacity=0.12 \\\n --prop x=23.2cm --prop y=4.2cm --prop width=9.8cm --prop height=12.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box3-title' \\\n --prop text=\"企业级可观测\" \\\n --prop font=\"Courier New\" \\\n --prop size=22 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=23.8cm --prop y=4.8cm --prop width=8.6cm --prop height=1.6cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-box3-desc' \\\n --prop text=\"· 全链路 Trace 追踪\\n· Token 成本实时仪表盘\\n· 质量评分与 SLA 告警\\n· 合规审计日志\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=top \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=23.8cm --prop y=6.8cm --prop width=8.6cm --prop height=9cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Scene actors: grid lines (moved again)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-h1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-h2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=10cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-h3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=15cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-h4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=0cm --prop y=1cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-v1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=16cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-v2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=26cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-v3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=5cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!grid-v4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.2 \\\n --prop x=32cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!major-h' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=0cm --prop y=7.5cm --prop width=34cm --prop height=0.04cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!major-v' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=16cm --prop y=0cm --prop width=0.04cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!dot1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=15.75cm --prop y=4.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!dot2' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=25.75cm --prop y=14.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!dot3' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=4.75cm --prop y=0.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!ring1' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=31.4cm --prop y=9.4cm --prop width=1.2cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!ring2' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=15.4cm --prop y=14.4cm --prop width=1.5cm --prop height=1.5cm\n\n# Content: evidence data\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-bg1' \\\n --prop fill=$OVERLAY \\\n --prop opacity=0.4 \\\n --prop x=1.2cm --prop y=2cm --prop width=13cm --prop height=14.5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-bg2' \\\n --prop fill=$OVERLAY \\\n --prop opacity=0.3 \\\n --prop x=18cm --prop y=3cm --prop width=14cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-num1' \\\n --prop text=\"10,000+\" \\\n --prop font=\"Courier New\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2cm --prop y=3cm --prop width=11cm --prop height=3.6cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-label1' \\\n --prop text=\"智能体已部署上线\" \\\n --prop font=\"Inter\" \\\n --prop size=18 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2cm --prop y=6.6cm --prop width=11cm --prop height=1.4cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-num2' \\\n --prop text=\"99.95%\" \\\n --prop font=\"Courier New\" \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2cm --prop y=9.5cm --prop width=11cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-label2' \\\n --prop text=\"平台可用性 SLA\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=2cm --prop y=12.5cm --prop width=11cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-num3' \\\n --prop text=\"3.2x\" \\\n --prop font=\"Courier New\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=19cm --prop y=4cm --prop width=12cm --prop height=2.8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-label3' \\\n --prop text=\"开发效率提升\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=19cm --prop y=6.8cm --prop width=12cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-num4' \\\n --prop text=\"\u003c60s\" \\\n --prop font=\"Courier New\" \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=19cm --prop y=11cm --prop width=12cm --prop height=2.8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-label4' \\\n --prop text=\"平均任务响应时间\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=left \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=19cm --prop y=13.8cm --prop width=12cm --prop height=1.2cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Scene actors: grid lines (final positions)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-h1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=3cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-h2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=7.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-h3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=12cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-h4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=0cm --prop y=16.5cm --prop width=34cm --prop height=0.02cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-v1' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=7cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-v2' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=14cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-v3' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=20cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!grid-v4' \\\n --prop fill=$WHITE \\\n --prop opacity=0.25 \\\n --prop x=27cm --prop y=0cm --prop width=0.02cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!major-h' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=0cm --prop y=12cm --prop width=34cm --prop height=0.04cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!major-v' \\\n --prop fill=$BLUE \\\n --prop opacity=0.5 \\\n --prop x=14cm --prop y=0cm --prop width=0.04cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!dot1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=6.75cm --prop y=2.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!dot2' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=26.75cm --prop y=11.75cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!dot3' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.7 \\\n --prop x=13.75cm --prop y=16.25cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!ring1' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=19.4cm --prop y=2.4cm --prop width=1.2cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!ring2' \\\n --prop preset=ellipse \\\n --prop fill=$BG \\\n --prop line=$WHITE \\\n --prop lineWidth=0.75pt \\\n --prop opacity=0.6 \\\n --prop x=6.4cm --prop y=15.4cm --prop width=1.2cm --prop height=1.2cm\n\n# Content: CTA\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text=\"开启智能体之旅\" \\\n --prop font=\"Courier New\" \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=3cm --prop y=4.5cm --prop width=28cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-actions' \\\n --prop text=\"申请试用 · 预约演示 · 联系我们\" \\\n --prop font=\"Courier New\" \\\n --prop size=22 \\\n --prop color=$BLUE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=5cm --prop y=9cm --prop width=24cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-url' \\\n --prop text=\"agent.platform.ai\" \\\n --prop font=\"Inter\" \\\n --prop size=16 \\\n --prop color=$LIGHT_BLUE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=8cm --prop y=13.5cm --prop width=18cm --prop height=1.4cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":27378,"content_sha256":"819061b03d5d8a741e547a1b200645e2e7fa38f7413858f1e6950866ec1286ef"},{"filename":"reference/styles/dark--blueprint-grid/style.md","content":"# S15-blueprint-grid — Engineering Blueprint Grid\n\n## Style Overview\n\nDeep blue background with white grid lines and gold markers creates a precise engineering drafting aesthetic.\n\n- **Scene**: Technical planning, engineering blueprints, system architecture\n- **Mood**: Precise, professional, engineering-oriented\n- **Color Tone**: Deep blue + white grid + gold accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------ | ------ | ---------------------------- |\n| Deep Blue | 1B3A5C | Background |\n| Bright Blue | 4A90D9 | Highlight color, titles |\n| White | FFFFFF | Grid lines, body text |\n| Gold Warning | E8C547 | Warning markers, CTA buttons |\n\n## Design Techniques\n\n- Use rect to draw evenly spaced horizontal/vertical grid lines (opacity 0.25), simulating blueprint graph paper\n- Use ellipse as positioning marker points, suggesting key nodes in a coordinate system\n- All shapes use low transparency overlay to maintain blueprint hierarchy\n- Typography uses monospace or bold sans-serif fonts to reinforce engineering drafting aesthetic\n\n## Reference Script\n\nFull build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Grid line drawing method and layout spacing\n- **Slide 3 (pillars)** — Multi-column layout + grid-aligned typesetting technique\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1479,"content_sha256":"f1dac76a6571d3fb436743cf274bedbe6eec75735b9792704d9d5db0ac4be795"},{"filename":"reference/styles/dark--circle-digital/build.sh","content":"#!/bin/bash\nset +H\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nF=\"$SCRIPT_DIR/dark__circle_digital.pptx\"\n\n# ── Design Tokens ──────────────────────────────────────────\nBG=\"0D0E11\" # near-black\nD2=\"171A20\" # card dark\nD3=\"22252E\" # medium dark\nD4=\"2D3140\" # lighter dark\nGREEN=\"C4FF00\" # neon lime\nGREEN_D=\"8AAF00\" # dim green\nWHITE=\"FFFFFF\"\nLGRAY=\"6A7888\" # muted text\nMGRAY=\"3C404C\" # medium elements\n# Image placeholder colors\nC_LEAF=\"1F6B38\" # tropical leaf green\nC_ART=\"7A2055\" # colorful abstract/pink\nC_TEAL=\"1A6070\" # teal/ocean\nC_PURP=\"42257A\" # purple abstract\nC_WARM=\"7A4018\" # warm/sunset/orange\nC_SKY=\"1A3870\" # sky blue\nC_ROOM=\"2A3540\" # interior/room\nC_PERS=\"4A5560\" # person portrait\n\na() { officecli add \"$F\" \"$1\" --type shape \"${@:2}\"; }\nc() { officecli add \"$F\" \"$1\" --type connector \"${@:2}\"; }\nsl() { officecli add \"$F\" / --type slide \"${@}\"; }\n\n# circle: path name x y diameter fill [text]\ncirc() {\n a \"$1\" --prop \"name=$2\" --prop preset=ellipse \\\n --prop x=\"${3}cm\" --prop y=\"${4}cm\" \\\n --prop width=\"${5}cm\" --prop height=\"${5}cm\" \\\n --prop fill=$6 --prop line=none \\\n --prop text=\"${7:-}\" --prop color=$WHITE --prop size=11 \\\n --prop align=center --prop valign=center\n}\n\n# circle with green ring border\ncirc_ring() {\n a \"$1\" --prop \"name=$2\" --prop preset=ellipse \\\n --prop x=\"${3}cm\" --prop y=\"${4}cm\" \\\n --prop width=\"${5}cm\" --prop height=\"${5}cm\" \\\n --prop fill=$6 --prop line=$GREEN --prop lineWidth=3pt \\\n --prop text=\"${7:-}\" --prop color=$WHITE --prop size=11 \\\n --prop align=center --prop valign=center\n}\n\n# thin vertical left bar\nleft_bar() {\n a \"$1\" --prop 'name=!!left-bar' --prop preset=rect \\\n --prop x=0.65cm --prop y=\"${2}cm\" \\\n --prop width=0.18cm --prop height=\"${3}cm\" \\\n --prop fill=$GREEN --prop line=none\n}\n\n# slide number top right\nsnum() {\n a \"$1\" --prop text=\"0${2}\" \\\n --prop x=31.8cm --prop y=0.5cm --prop width=1.8cm --prop height=0.7cm \\\n --prop size=9 --prop color=$LGRAY \\\n --prop fill=none --prop line=none --prop align=right\n}\n\n# small green dot accent\ngdot() {\n a \"$1\" --prop 'name=!!accent-dot' --prop preset=ellipse \\\n --prop x=\"${2}cm\" --prop y=\"${3}cm\" \\\n --prop width=0.5cm --prop height=0.5cm \\\n --prop fill=$GREEN --prop line=none\n}\n\n# green pill tag\npill() {\n a \"$1\" --prop preset=roundRect \\\n --prop text=\"$2\" \\\n --prop x=\"${3}cm\" --prop y=\"${4}cm\" \\\n --prop width=\"${5}cm\" --prop height=0.75cm \\\n --prop size=8.5 --prop bold=true --prop color=$BG \\\n --prop fill=$GREEN --prop line=none \\\n --prop align=center --prop valign=center\n}\n\n# dark stat card\nstat_card() {\n # path x y w label value\n a \"$1\" --prop preset=roundRect \\\n --prop x=\"${2}cm\" --prop y=\"${3}cm\" \\\n --prop width=\"${4}cm\" --prop height=3cm \\\n --prop fill=$D2 --prop line=none\n a \"$1\" --prop text=\"${5}\" \\\n --prop x=\"${2}cm\" --prop y=\"${3}cm\" \\\n --prop width=\"${4}cm\" --prop height=1.4cm \\\n --prop size=28 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none \\\n --prop align=center --prop valign=center\n a \"$1\" --prop text=\"${6}\" \\\n --prop x=\"${2}cm\" --prop y=\"$(echo \"${3} + 1.6\" | bc)cm\" \\\n --prop width=\"${4}cm\" --prop height=1.2cm \\\n --prop size=9 --prop color=$LGRAY \\\n --prop fill=none --prop line=none \\\n --prop align=center\n}\n\necho \"Building $F...\"\nrm -f \"$F\"\nofficecli create \"$F\"\n\n\n# ============================================================\n# SLIDE 1 — DIGITAL STREAMING AGENCY (Title)\n# ============================================================\necho \" S1: Title...\"\nsl --prop background=$BG\n\n# Hero organic oval RIGHT — large, colorful leaf\ncirc '/slide[1]' '!!circ-a' 18.5 0 21.0 $C_LEAF \"[ Image ]\"\n\n# Small green ring overlay on hero\na '/slide[1]' --prop preset=ellipse \\\n --prop x=21cm --prop y=1cm --prop width=14cm --prop height=14cm \\\n --prop fill=none --prop line=$GREEN --prop lineWidth=1.5pt --prop lineOpacity=0.3\n\nleft_bar '/slide[1]' 6.5 6.0\nsnum '/slide[1]' 1\ngdot '/slide[1]' 1.6 1.5\n\n# Giant title — three separate lines for precise control\na '/slide[1]' --prop text=\"Digital\" \\\n --prop x=1.6cm --prop y=3.0cm --prop width=16cm --prop height=3.0cm \\\n --prop size=76 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none\n\na '/slide[1]' --prop text=\"Streaming\" \\\n --prop x=1.6cm --prop y=6.0cm --prop width=16cm --prop height=3.0cm \\\n --prop size=76 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none\n\na '/slide[1]' --prop text=\"Agency\" \\\n --prop x=1.6cm --prop y=9.0cm --prop width=16cm --prop height=3.0cm \\\n --prop size=76 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none\n\na '/slide[1]' --prop text=\"We help brands grow through digital innovation,\\ncreative content and data-driven strategy.\" \\\n --prop x=1.6cm --prop y=12.4cm --prop width=15cm --prop height=2cm \\\n --prop size=10.5 --prop color=$LGRAY \\\n --prop fill=none --prop line=none --prop lineSpacing=1.5\n\n# Green CTA button\na '/slide[1]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"Submit →\" \\\n --prop x=1.6cm --prop y=15.0cm --prop width=5.5cm --prop height=1.3cm \\\n --prop size=10.5 --prop bold=true --prop color=$BG \\\n --prop fill=$GREEN --prop line=none \\\n --prop align=center --prop valign=center\n\n# Bottom person info\nc '/slide[1]' --prop x=1.6cm --prop y=17.5cm --prop width=12cm --prop height=0cm \\\n --prop line=$MGRAY --prop lineWidth=0.5pt\n\na '/slide[1]' --prop text=\"Adrian Jonathon\" \\\n --prop x=1.6cm --prop y=17.7cm --prop width=10cm --prop height=0.65cm \\\n --prop size=10 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none\n\na '/slide[1]' --prop text=\"Creative Director · Digital Agency · Since 2018\" \\\n --prop x=1.6cm --prop y=18.35cm --prop width=14cm --prop height=0.6cm \\\n --prop size=8.5 --prop color=$LGRAY --prop fill=none --prop line=none\n\n\n# ============================================================\n# SLIDE 2 — CONTENT. (Table of Contents)\n# ============================================================\necho \" S2: Content...\"\nsl --prop background=$BG --prop transition=morph\n\n# Large decorative dark circle — morphs from S1 hero\ncirc '/slide[2]' '!!circ-a' 1.5 3.0 15.0 $D3 \"\"\n\n# Thin green ring on circle\na '/slide[2]' --prop preset=ellipse \\\n --prop x=2cm --prop y=3.5cm --prop width=14cm --prop height=14cm \\\n --prop fill=none --prop line=$GREEN --prop lineWidth=1pt --prop lineOpacity=0.25\n\nleft_bar '/slide[2]' 7.5 4.5\nsnum '/slide[2]' 2\ngdot '/slide[2]' 1.6 1.5\n\n# \"Content.\" huge title\na '/slide[2]' --prop text=\"Content.\" \\\n --prop x=2.0cm --prop y=4.5cm --prop width=17cm --prop height=5cm \\\n --prop size=82 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none\n\n# Menu items (right side)\na '/slide[2]' --prop preset=ellipse \\\n --prop x=19.5cm --prop y=4.8cm --prop width=0.45cm --prop height=0.45cm \\\n --prop fill=$GREEN --prop line=none\na '/slide[2]' --prop text=\"01\" \\\n --prop x=20.3cm --prop y=4.55cm --prop width=2cm --prop height=1cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\na '/slide[2]' --prop text=\"The Incredible\" \\\n --prop x=22.5cm --prop y=4.55cm --prop width=11cm --prop height=1cm \\\n --prop size=18 --prop color=$WHITE --prop fill=none --prop line=none --prop valign=center\n\na '/slide[2]' --prop preset=ellipse \\\n --prop x=19.5cm --prop y=6.6cm --prop width=0.45cm --prop height=0.45cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[2]' --prop text=\"02\" \\\n --prop x=20.3cm --prop y=6.35cm --prop width=2cm --prop height=1cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\na '/slide[2]' --prop text=\"Agency Summary\" \\\n --prop x=22.5cm --prop y=6.35cm --prop width=11cm --prop height=1cm \\\n --prop size=18 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\na '/slide[2]' --prop preset=ellipse \\\n --prop x=19.5cm --prop y=8.4cm --prop width=0.45cm --prop height=0.45cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[2]' --prop text=\"03\" \\\n --prop x=20.3cm --prop y=8.15cm --prop width=2cm --prop height=1cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\na '/slide[2]' --prop text=\"Digital Creative\" \\\n --prop x=22.5cm --prop y=8.15cm --prop width=11cm --prop height=1cm \\\n --prop size=18 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\na '/slide[2]' --prop preset=ellipse \\\n --prop x=19.5cm --prop y=10.2cm --prop width=0.45cm --prop height=0.45cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[2]' --prop text=\"04\" \\\n --prop x=20.3cm --prop y=9.95cm --prop width=2cm --prop height=1cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\na '/slide[2]' --prop text=\"Marketplace\" \\\n --prop x=22.5cm --prop y=9.95cm --prop width=11cm --prop height=1cm \\\n --prop size=18 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\na '/slide[2]' --prop preset=ellipse \\\n --prop x=19.5cm --prop y=12.0cm --prop width=0.45cm --prop height=0.45cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[2]' --prop text=\"05\" \\\n --prop x=20.3cm --prop y=11.75cm --prop width=2cm --prop height=1cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\na '/slide[2]' --prop text=\"Contact\" \\\n --prop x=22.5cm --prop y=11.75cm --prop width=11cm --prop height=1cm \\\n --prop size=18 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\n\n# ============================================================\n# SLIDE 3 — INTRODUCTION. (Person/About)\n# ============================================================\necho \" S3: Introduction...\"\nsl --prop background=$BG --prop transition=morph\n\nleft_bar '/slide[3]' 5.5 5.0\nsnum '/slide[3]' 3\ngdot '/slide[3]' 1.6 1.5\n\n# Circle A — large background circle (dark), left\ncirc '/slide[3]' '!!circ-a' 1.0 2.5 12.5 $D3 \"[ Portrait ]\"\n\n# Circle B — overlapping smaller circle, right of A\ncirc_ring '/slide[3]' '!!circ-b' 7.5 5.0 9.5 $C_PERS \"[ Image ]\"\n\n# Small accent circle (top of cluster)\ncirc '/slide[3]' '!!circ-c' 9.5 1.5 4.0 $GREEN_D \"\"\n\n# Small green dot on accent circle\na '/slide[3]' --prop preset=ellipse \\\n --prop x=11cm --prop y=2.5cm --prop width=1cm --prop height=1cm \\\n --prop fill=$GREEN --prop line=none\n\n# \"Introduction.\" — large right-aligned\na '/slide[3]' --prop text=\"Introduction.\" \\\n --prop x=17.5cm --prop y=4.5cm --prop width=15.5cm --prop height=6cm \\\n --prop size=58 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.05\n\npill '/slide[3]' \"Creative Director\" 17.5 11.0 5.5\n\na '/slide[3]' --prop text=\"Adrian Jonathon\" \\\n --prop x=17.5cm --prop y=12.2cm --prop width=15cm --prop height=1.2cm \\\n --prop size=20 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none\n\na '/slide[3]' --prop text=\"A visionary creative director with 10+ years of experience\\nin digital media, brand strategy and creative production.\\nPassionate about blending technology with human storytelling.\" \\\n --prop x=17.5cm --prop y=13.6cm --prop width=15.5cm --prop height=3.5cm \\\n --prop size=10.5 --prop color=$LGRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\nc '/slide[3]' --prop x=17.5cm --prop y=17.5cm --prop width=15cm --prop height=0cm \\\n --prop line=$MGRAY --prop lineWidth=0.5pt\n\na '/slide[3]' --prop text=\"200+ Projects · 50+ Clients · 15 Awards\" \\\n --prop x=17.5cm --prop y=17.7cm --prop width=15cm --prop height=0.9cm \\\n --prop size=9 --prop color=$LGRAY --prop fill=none --prop line=none\n\n\n# ============================================================\n# SLIDE 4 — INNOVATION MARKETING SOLUTION. (Stats)\n# ============================================================\necho \" S4: Stats...\"\nsl --prop background=$BG --prop transition=morph\n\nleft_bar '/slide[4]' 4.0 8.0\nsnum '/slide[4]' 4\ngdot '/slide[4]' 1.6 1.5\n\n# Small decorative circle (background)\ncirc '/slide[4]' '!!circ-a' 19.0 4.0 13.5 $D2 \"\"\n\n# Title\na '/slide[4]' --prop text=\"Innovation Marketing\\nSolution.\" \\\n --prop x=1.6cm --prop y=2.0cm --prop width=16cm --prop height=5.5cm \\\n --prop size=52 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.08\n\n# ── Stat 1: $37M ──\n# Green highlight background\na '/slide[4]' --prop preset=roundRect \\\n --prop x=1.6cm --prop y=8.3cm --prop width=6.5cm --prop height=2.5cm \\\n --prop fill=$GREEN --prop line=none\na '/slide[4]' --prop text='$37M' \\\n --prop x=1.6cm --prop y=8.3cm --prop width=6.5cm --prop height=2.5cm \\\n --prop size=52 --prop bold=true --prop color=$BG \\\n --prop fill=none --prop line=none --prop align=center --prop valign=center\n\na '/slide[4]' --prop text=\"Mobile App\\nDevelopment\" \\\n --prop x=8.5cm --prop y=8.5cm --prop width=9cm --prop height=2.0cm \\\n --prop size=13 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.3\n\n# Progress bar 1\na '/slide[4]' --prop preset=rect \\\n --prop x=8.5cm --prop y=11.1cm --prop width=12cm --prop height=0.4cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[4]' --prop preset=rect \\\n --prop x=8.5cm --prop y=11.1cm --prop width=9.5cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\na '/slide[4]' --prop text=\"79%\" \\\n --prop x=21cm --prop y=10.7cm --prop width=2.5cm --prop height=1cm \\\n --prop size=9.5 --prop color=$GREEN --prop fill=none --prop line=none\n\n# ── Stat 2: +87% ──\na '/slide[4]' --prop preset=roundRect \\\n --prop x=1.6cm --prop y=12.0cm --prop width=6.5cm --prop height=2.5cm \\\n --prop fill=$D3 --prop line=$GREEN --prop lineWidth=1.5pt\na '/slide[4]' --prop text=\"+87%\" \\\n --prop x=1.6cm --prop y=12.0cm --prop width=6.5cm --prop height=2.5cm \\\n --prop size=52 --prop bold=true --prop color=$GREEN \\\n --prop fill=none --prop line=none --prop align=center --prop valign=center\n\na '/slide[4]' --prop text=\"Digital\\nMarketing\" \\\n --prop x=8.5cm --prop y=12.2cm --prop width=9cm --prop height=2.0cm \\\n --prop size=13 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.3\n\n# Progress bar 2\na '/slide[4]' --prop preset=rect \\\n --prop x=8.5cm --prop y=14.8cm --prop width=12cm --prop height=0.4cm \\\n --prop fill=$MGRAY --prop line=none\na '/slide[4]' --prop preset=rect \\\n --prop x=8.5cm --prop y=14.8cm --prop width=10.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\na '/slide[4]' --prop text=\"87%\" \\\n --prop x=21cm --prop y=14.4cm --prop width=2.5cm --prop height=1cm \\\n --prop size=9.5 --prop color=$GREEN --prop fill=none --prop line=none\n\n# Small label badges\npill '/slide[4]' \"App Development\" 1.6 16.5 5.5\npill '/slide[4]' \"Digital Strategy\" 7.5 16.5 5.5\n\na '/slide[4]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"View Report →\" \\\n --prop x=13.5cm --prop y=16.5cm --prop width=5.5cm --prop height=1.2cm \\\n --prop size=10 --prop bold=true --prop color=$BG \\\n --prop fill=$GREEN --prop line=none --prop align=center --prop valign=center\n\n\n# ============================================================\n# SLIDE 5 — WE UNLOCK THE POTENTIAL. (Circles diagram)\n# ============================================================\necho \" S5: Potential...\"\nsl --prop background=$BG --prop transition=morph\n\nleft_bar '/slide[5]' 5.5 7.0\nsnum '/slide[5]' 5\ngdot '/slide[5]' 1.6 1.5\n\n# Cluster of 4 overlapping circles (left-center)\n# Back circle (large, dark)\ncirc '/slide[5]' '!!circ-a' 1.5 3.5 13.0 $D3 \"\"\n# Second circle overlapping (with image)\ncirc '/slide[5]' '!!circ-b' 5.5 2.0 9.5 $D4 \"[ Investor ]\"\n# Third circle (front-left)\ncirc '/slide[5]' '!!circ-c' 0.5 7.5 8.0 $D2 \"[ Support ]\"\n# Fourth circle (small, green-tinted)\na '/slide[5]' --prop preset=ellipse \\\n --prop x=8.5cm --prop y=7.5cm --prop width=6.5cm --prop height=6.5cm \\\n --prop fill=$GREEN_D --prop line=none \\\n --prop text=\"[ Analysis ]\" --prop color=$WHITE --prop size=10 \\\n --prop align=center --prop valign=center\n\n# Labels outside circles\na '/slide[5]' --prop text=\"Investor\" \\\n --prop x=6.5cm --prop y=1.2cm --prop width=5cm --prop height=0.8cm \\\n --prop size=11 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none\n\na '/slide[5]' --prop text=\"Support\" \\\n --prop x=0.5cm --prop y=15.5cm --prop width=5cm --prop height=0.8cm \\\n --prop size=11 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none\n\na '/slide[5]' --prop text=\"Analysis\" \\\n --prop x=8.5cm --prop y=14.5cm --prop width=5cm --prop height=0.8cm \\\n --prop size=11 --prop bold=true --prop color=$GREEN --prop fill=none --prop line=none\n\n# Small green dot on top circle\na '/slide[5]' --prop preset=ellipse \\\n --prop x=9.8cm --prop y=2.8cm --prop width=1.0cm --prop height=1.0cm \\\n --prop fill=$GREEN --prop line=none\n\n# Title RIGHT\na '/slide[5]' --prop text=\"We Unlock\\nThe\\nPotential.\" \\\n --prop x=17.5cm --prop y=3.5cm --prop width=15cm --prop height=9cm \\\n --prop size=58 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.08\n\na '/slide[5]' --prop text=\"Connecting investors, support networks and data\\nanalysis to drive exponential business growth.\" \\\n --prop x=17.5cm --prop y=13.2cm --prop width=15cm --prop height=2.2cm \\\n --prop size=10.5 --prop color=$LGRAY --prop fill=none --prop line=none --prop lineSpacing=1.5\n\na '/slide[5]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"Learn More →\" \\\n --prop x=17.5cm --prop y=15.8cm --prop width=5.5cm --prop height=1.3cm \\\n --prop size=10.5 --prop bold=true --prop color=$BG \\\n --prop fill=$GREEN --prop line=none --prop align=center --prop valign=center\n\n\n# ============================================================\n# SLIDE 6 — LET'S LOOK OUR RECENT PROJECT. (Portfolio)\n# ============================================================\necho \" S6: Portfolio...\"\nsl --prop background=$BG --prop transition=morph\n\nleft_bar '/slide[6]' 3.0 4.5\nsnum '/slide[6]' 6\ngdot '/slide[6]' 1.6 1.5\n\na '/slide[6]' --prop text=\"Let's Look Our\\nRecent Project.\" \\\n --prop x=1.6cm --prop y=1.5cm --prop width=22cm --prop height=5cm \\\n --prop size=54 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.08\n\n# 3 large overlapping portfolio circles\n# Circle A — left (colorful abstract art)\ncirc '/slide[6]' '!!circ-a' 1.0 6.0 11.5 $C_ART \"[ Graphic Art Work ]\"\n# Circle B — center (product, overlaps A)\ncirc '/slide[6]' '!!circ-b' 8.0 5.5 11.5 $C_TEAL \"[ Commercial Product ]\"\n# Circle C — right (sky, overlaps B)\ncirc '/slide[6]' '!!circ-c' 15.5 6.5 11.5 $C_SKY \"[ Sky Photography ]\"\n\n# Green ring on middle circle\na '/slide[6]' --prop preset=ellipse \\\n --prop x=8.2cm --prop y=5.7cm --prop width=11.1cm --prop height=11.1cm \\\n --prop fill=none --prop line=$GREEN --prop lineWidth=2pt\n\n# Labels below circles\na '/slide[6]' --prop preset=ellipse \\\n --prop x=1.8cm --prop y=17.1cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\na '/slide[6]' --prop text=\"Graphic Art Work\" \\\n --prop x=2.5cm --prop y=17.0cm --prop width=8cm --prop height=0.8cm \\\n --prop size=10.5 --prop color=$WHITE --prop fill=none --prop line=none --prop valign=center\n\na '/slide[6]' --prop preset=ellipse \\\n --prop x=9.5cm --prop y=17.1cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$LGRAY --prop line=none\na '/slide[6]' --prop text=\"Commercial Product\" \\\n --prop x=10.2cm --prop y=17.0cm --prop width=8cm --prop height=0.8cm \\\n --prop size=10.5 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\na '/slide[6]' --prop preset=ellipse \\\n --prop x=17.5cm --prop y=17.1cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$LGRAY --prop line=none\na '/slide[6]' --prop text=\"Sky Photography\" \\\n --prop x=18.2cm --prop y=17.0cm --prop width=8cm --prop height=0.8cm \\\n --prop size=10.5 --prop color=$LGRAY --prop fill=none --prop line=none --prop valign=center\n\n\n# ============================================================\n# SLIDE 7 — JOIN & LET'S WORK TOGETHER. (Closing CTA)\n# ============================================================\necho \" S7: Closing...\"\nsl --prop background=$BG --prop transition=morph\n\nleft_bar '/slide[7]' 4.5 8.0\nsnum '/slide[7]' 7\ngdot '/slide[7]' 1.6 1.5\n\n# Large interior/room image circle RIGHT\ncirc '/slide[7]' '!!circ-a' 18.0 1.0 15.5 $C_ROOM \"[ Interior Image ]\"\n\n# Green ring on image\na '/slide[7]' --prop preset=ellipse \\\n --prop x=18.3cm --prop y=1.3cm --prop width=14.9cm --prop height=14.9cm \\\n --prop fill=none --prop line=$GREEN --prop lineWidth=2pt --prop lineOpacity=0.4\n\n# Title\na '/slide[7]' --prop text=\"Join & Let's\\nWork Together.\" \\\n --prop x=1.6cm --prop y=2.5cm --prop width=15.5cm --prop height=7cm \\\n --prop size=54 --prop bold=true --prop color=$WHITE \\\n --prop fill=none --prop line=none --prop lineSpacing=1.08\n\na '/slide[7]' --prop text=\"Ready to take your brand to the next level?\\nLet's create something extraordinary together.\" \\\n --prop x=1.6cm --prop y=10.0cm --prop width=15.5cm --prop height=2.5cm \\\n --prop size=11 --prop color=$LGRAY --prop fill=none --prop line=none --prop lineSpacing=1.55\n\na '/slide[7]' --prop 'name=!!cta-btn' --prop preset=roundRect \\\n --prop text=\"Start a Project →\" \\\n --prop x=1.6cm --prop y=13.0cm --prop width=7cm --prop height=1.4cm \\\n --prop size=11 --prop bold=true --prop color=$BG \\\n --prop fill=$GREEN --prop line=none --prop align=center --prop valign=center\n\n# 4 Stat boxes\na '/slide[7]' --prop preset=roundRect \\\n --prop x=1.6cm --prop y=15.3cm --prop width=6.5cm --prop height=3.0cm \\\n --prop fill=$D2 --prop line=none\na '/slide[7]' --prop text=\"Receive Project\" \\\n --prop x=1.6cm --prop y=15.5cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8.5 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop text=\"200+ Delivered\" \\\n --prop x=1.6cm --prop y=16.4cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop preset=ellipse \\\n --prop x=4.5cm --prop y=17.35cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\n\na '/slide[7]' --prop preset=roundRect \\\n --prop x=8.5cm --prop y=15.3cm --prop width=6.5cm --prop height=3.0cm \\\n --prop fill=$D2 --prop line=none\na '/slide[7]' --prop text=\"Build Portfolio\" \\\n --prop x=8.5cm --prop y=15.5cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8.5 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop text=\"50+ Case Studies\" \\\n --prop x=8.5cm --prop y=16.4cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop preset=ellipse \\\n --prop x=11.4cm --prop y=17.35cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\n\na '/slide[7]' --prop preset=roundRect \\\n --prop x=15.4cm --prop y=15.3cm --prop width=6.5cm --prop height=3.0cm \\\n --prop fill=$D2 --prop line=none\na '/slide[7]' --prop text=\"Data Analysis\" \\\n --prop x=15.4cm --prop y=15.5cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8.5 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop text=\"Real-time Insights\" \\\n --prop x=15.4cm --prop y=16.4cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop preset=ellipse \\\n --prop x=18.3cm --prop y=17.35cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\n\na '/slide[7]' --prop preset=roundRect \\\n --prop x=22.3cm --prop y=15.3cm --prop width=6.5cm --prop height=3.0cm \\\n --prop fill=$D2 --prop line=none\na '/slide[7]' --prop text=\"List Subscriber\" \\\n --prop x=22.3cm --prop y=15.5cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8.5 --prop bold=true --prop color=$WHITE --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop text=\"12k+ Subscribers\" \\\n --prop x=22.3cm --prop y=16.4cm --prop width=6.5cm --prop height=0.9cm \\\n --prop size=8 --prop color=$LGRAY --prop fill=none --prop line=none --prop align=center\na '/slide[7]' --prop preset=ellipse \\\n --prop x=25.2cm --prop y=17.35cm --prop width=0.4cm --prop height=0.4cm \\\n --prop fill=$GREEN --prop line=none\n\n\n# ============================================================\n# Morph transitions: S2–S7\n# ============================================================\necho \" Applying morph...\"\nfor i in 2 3 4 5 6 7; do\n officecli set \"$F\" \"/slide[$i]\" --prop transition=morph 2>&1\ndone\n\necho \"\"\necho \"✓ Done → $F\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":25005,"content_sha256":"24db97cd48db8141e80ea00d7c7808d3a151359b6d7d49d4f6aacdc94b1d105f"},{"filename":"reference/styles/dark--circle-digital/style.md","content":"# circle-digital — Dark Cool Digital Agency\n\n## Style Overview\n\nNear-black background with dark gray cards and neon lime accent color, creating a dark mode digital marketing agency aesthetic.\n\n- **Scene**: Digital marketing, creative agencies, tech companies\n- **Mood**: Modern, dark-cool, digital\n- **Color Tone**: Near-black background + dark gray card layers + neon lime accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ----------- | ------ | ----------------------------------- |\n| Near Black | 0D0E11 | Background |\n| Dark Gray 1 | 171A20 | Card bottom layer |\n| Dark Gray 2 | 22252E | Card middle layer |\n| Dark Gray 3 | 2D3140 | Card top layer |\n| Neon Lime | C4FF00 | Accent color, CTA, decorative lines |\n\n## Design Techniques\n\n- Extensive use of circles (ellipse) as image placeholders and decorative elements, embodying the \"circle\" theme\n- Multi-layer dark gray cards stacked to create dark mode hierarchy and depth\n- Neon lime as the only bright color, used for CTA buttons, decorative dots, and dividers, creating strong contrast\n- Left vertical decorative bars + numbering system, adding structural sense to the layout\n- roundRect rounded buttons with neon lime fill, highlighting calls to action\n\n## Reference Script\n\nFull build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (title)** — Circle image placeholder, neon lime CTA button, and left vertical decorative bar\n- **Slide 2 (services)** — Dark gray multi-layer card arrangement and hierarchy construction\n- **Slide 4 (portfolio)** — Application of circle elements in content display\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1821,"content_sha256":"87c5c2eff2f6ae9c0f635397c7345b8a2c693e49c1814e1e353bc62167b03457"},{"filename":"reference/styles/dark--cosmic-neon/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__cosmic_neon.pptx\"\n\necho \"Building: dark--cosmic-neon (Cosmic Neon Sci-Fi)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=050510\nPURPLE=8A2BE2\nCYAN=00FFFF\nCARD=111122\nWHITE=FFFFFF\nGRAY1=AAAAAA\nGRAY2=CCCCCC\n\n# Off-canvas position for hidden elements\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: neon glows\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bg-glow1' \\\n --prop preset=ellipse \\\n --prop fill=$PURPLE \\\n --prop opacity=0.15 \\\n --prop x=0cm --prop y=0cm --prop width=15cm --prop height=15cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bg-glow2' \\\n --prop preset=ellipse \\\n --prop fill=$CYAN \\\n --prop opacity=0.15 \\\n --prop x=18cm --prop y=4cm --prop width=15cm --prop height=15cm\n\n# Scene actors: decorative elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ring' \\\n --prop preset=donut \\\n --prop fill=none \\\n --prop line=$CYAN \\\n --prop lineWidth=2 \\\n --prop x=25cm --prop y=2cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-top' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop x=4cm --prop y=2cm --prop width=8cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!star1' \\\n --prop preset=star5 \\\n --prop fill=$CYAN \\\n --prop opacity=0.5 \\\n --prop x=3cm --prop y=15cm --prop width=1cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!star2' \\\n --prop preset=star5 \\\n --prop fill=$PURPLE \\\n --prop opacity=0.5 \\\n --prop x=30cm --prop y=12cm --prop width=1.5cm --prop height=1.5cm\n\n# Content: hero title (visible on slide 1)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"穿越时空:科学还是幻想?\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=7cm --prop width=26cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text=\"从爱因斯坦的相对论到现代量子物理的探索之旅\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$GRAY1 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=10.5cm --prop width=26cm --prop height=2cm\n\n# Pre-create hidden content for other slides\n# Statement text (for slide 2)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!statement-text' \\\n --prop text=\"时间并非绝对的流逝,\\n而是一种可以被弯曲的维度。\" \\\n --prop font=\"Arial\" \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=30cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!statement-sub' \\\n --prop text=\"根据广义相对论,引力越强,时间流逝越慢。我们每个人都已经是时间旅行者,只不过只能以每秒一秒的速度走向未来。\" \\\n --prop font=\"Arial\" \\\n --prop size=20 \\\n --prop color=$GRAY1 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=1cm --prop width=26cm --prop height=4cm\n\n# Pillar elements (for slide 3)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-title' \\\n --prop text=\"物理学中的三种时间旅行可能\" \\\n --prop font=\"Arial\" \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=2cm --prop width=20cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-1-bg' \\\n --prop preset=roundRect \\\n --prop fill=$CARD \\\n --prop opacity=0.6 \\\n --prop x=${OFFSCREEN} --prop y=3cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-1-title' \\\n --prop text=\"虫洞理论\" \\\n --prop font=\"Arial\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=4cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-1-desc' \\\n --prop text=\"连接宇宙中两个遥远时空点的捷径,理论上可以实现瞬间跨越,如爱因斯坦-罗森桥。\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$GRAY2 \\\n --prop lineSpacing=1.3 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5cm --prop width=7cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-2-bg' \\\n --prop preset=roundRect \\\n --prop fill=$CARD \\\n --prop opacity=0.6 \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-2-title' \\\n --prop text=\"光速飞行\" \\\n --prop font=\"Arial\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-2-desc' \\\n --prop text=\"当物体运动速度接近光速时,自身时间会显著变慢,从而穿越到相对的未来(双生子佯谬)。\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$GRAY2 \\\n --prop lineSpacing=1.3 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8cm --prop width=7cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-3-bg' \\\n --prop preset=roundRect \\\n --prop fill=$CARD \\\n --prop opacity=0.6 \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-3-title' \\\n --prop text=\"宇宙弦\" \\\n --prop font=\"Arial\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-3-desc' \\\n --prop text=\"假设存在的高密度能量细丝,其强大的引力场可能导致时空闭合,形成时间循环。\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$GRAY2 \\\n --prop lineSpacing=1.3 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11cm --prop width=7cm --prop height=6cm\n\n# Evidence elements (for slide 4)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!evi-title' \\\n --prop text=\"时间膨胀的真实观测数据\" \\\n --prop font=\"Arial\" \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=12cm --prop width=20cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!evi-data' \\\n --prop text=\"38 微秒\" \\\n --prop font=\"Montserrat\" \\\n --prop size=80 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=13cm --prop width=12cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!evi-desc' \\\n --prop text=\"GPS卫星每天必须调整38微秒的时钟误差。由于卫星在太空中受到的引力较小且运动速度快,其时间流逝速度与地面不同。如果不修正,GPS定位每天会产生10公里的误差。\" \\\n --prop font=\"Arial\" \\\n --prop size=22 \\\n --prop color=$GRAY2 \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=14cm --prop width=15cm --prop height=8cm\n\n# CTA elements (for slide 5)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-title' \\\n --prop text=\"未来,我们会在过去相遇吗?\" \\\n --prop font=\"Arial\" \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=15cm --prop width=26cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-sub' \\\n --prop text=\"保持对宇宙的敬畏与好奇\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$CYAN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=16cm --prop width=26cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=10cm --prop y=2cm --prop width=14cm --prop height=14cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=5cm --prop y=5cm --prop width=10cm --prop height=10cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=15cm --prop y=10cm --prop width=8cm --prop height=8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=12cm --prop y=15cm --prop width=10cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=28cm --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=5cm --prop y=10cm\n\n# Hide hero content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=${OFFSCREEN} --prop y=1cm\n\n# Show statement content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=2cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop x=4cm --prop y=13cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=0cm --prop y=12cm --prop width=10cm --prop height=10cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=23cm --prop y=0cm --prop width=12cm --prop height=12cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=30cm --prop y=15cm --prop width=3cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=2cm --prop y=2cm --prop width=5cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=20cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=10cm --prop y=17cm\n\n# Hide statement content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=${OFFSCREEN} --prop y=1cm\n\n# Show pillar content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=2cm --prop y=1.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=2cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=3cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=3cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=12.5cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=13.5cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=13.5cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=23cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=24cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=24cm --prop y=8cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=2cm --prop y=4cm --prop width=12cm --prop height=12cm --prop fill=$CARD --prop opacity=0.6\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=16cm --prop y=5cm --prop width=16cm --prop height=10cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=5cm --prop y=5cm --prop width=6cm --prop height=6cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=15cm --prop y=8cm --prop width=15cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=30cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=8cm --prop y=16cm\n\n# Hide pillar content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=${OFFSCREEN} --prop y=1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=${OFFSCREEN} --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=${OFFSCREEN} --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=${OFFSCREEN} --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=${OFFSCREEN} --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=${OFFSCREEN} --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=${OFFSCREEN} --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=${OFFSCREEN} --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=${OFFSCREEN} --prop y=9cm\n\n# Show evidence content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=2cm --prop y=1.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=4cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=16cm --prop y=7cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move scene actors back to original-ish positions\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=0cm --prop y=0cm --prop width=15cm --prop height=15cm --prop fill=$PURPLE --prop opacity=0.15\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=18cm --prop y=4cm --prop width=15cm --prop height=15cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=25cm --prop y=2cm --prop width=5cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=13cm --prop y=16cm --prop width=8cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=6cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=28cm --prop y=15cm\n\n# Hide evidence content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=${OFFSCREEN} --prop y=1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=${OFFSCREEN} --prop y=2cm\n\n# Show CTA content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=4cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=4cm --prop y=11cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":15206,"content_sha256":"c36921f529cc629990175c0e26f793b26c85f0809690319025f3238d4e7a7ecd"},{"filename":"reference/styles/dark--cosmic-neon/style.md","content":"# Cosmic Neon — Sci-Fi Time Travel\n\n## Style Overview\n\nA futuristic sci-fi design featuring dual neon glow orbs (purple and cyan) on a near-black canvas with star decorations. Creates a mysterious cosmic atmosphere perfect for science and technology presentations.\n\n- **Scenario**: Science talks, futuristic topics, physics presentations, cosmic themes\n- **Mood**: Sci-fi, mysterious, futuristic, neon\n- **Tone**: Near-black with purple and cyan neon\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ----------------- | -------------------------------- |\n| Background | #050510 | Near-black deep space |\n| Glow Purple | #8A2BE2 | Primary neon glow effect |\n| Glow Cyan | #00FFFF | Secondary neon glow effect |\n| Card BG | #111122 | Dark indigo for card backgrounds |\n| Primary text | #FFFFFF | White for headings |\n| Secondary text | #AAAAAA / #CCCCCC | Gray variations for body text |\n| Accent text | #00FFFF | Cyan for highlights |\n\n## Typography\n\n| Element | Font |\n| --------------- | -------------------------- |\n| Title (English) | Montserrat |\n| Title (Chinese) | Source Han Sans (思源黑体) |\n| Body | Source Han Sans |\n\n## Design Techniques\n\n- Dual neon glow orbs (purple + cyan) as main decorative elements\n- Star decorations with varying opacity for depth\n- Donut ring accent element for cosmic feel\n- Neon-highlighted card backgrounds for content sections\n- Large data typography for evidence slides\n- Generous line spacing for readability on dark backgrounds\n\n## Page Structure (5 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | ------------------------------------------------- |\n| 1 | hero | 25 | Title with dual neon glow orbs |\n| 2 | statement | 25 | Centered quote with shifted glow positions |\n| 3 | pillars | 25 | 3-column layout with neon card backgrounds |\n| 4 | evidence | 25 | Large data number + description with neon accents |\n| 5 | cta | 25 | Closing with neon accent decoration |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — dual glow orb composition with stars\n- **Slide 3 (pillars)** — neon card backgrounds with content hierarchy\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2709,"content_sha256":"245ea683e6b3dd34b2ef8d463ea9e76effee30d0021adcd19fe22fd60955b4e5"},{"filename":"reference/styles/dark--cyber-future/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__cyber_future.pptx\"\n\necho \"Building: dark--cyber-future (未来已来:2050)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=0B0C10\nCYAN=66FCF1\nGRAY=1F2833\nTEAL=45A29E\nWHITE=FFFFFF\nGRAY2=C5C6C7\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: background elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bg-orb' \\\n --prop preset=ellipse \\\n --prop fill=$CYAN \\\n --prop opacity=0.08 \\\n --prop x=0cm --prop y=0cm --prop width=20cm --prop height=20cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bg-box' \\\n --prop fill=$GRAY \\\n --prop opacity=0.3 \\\n --prop x=2cm --prop y=2cm --prop width=8cm --prop height=15cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!accent-line' \\\n --prop fill=$CYAN \\\n --prop x=1cm --prop y=4cm --prop width=0.2cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!frame' \\\n --prop fill=none \\\n --prop line=$GRAY \\\n --prop lineWidth=2 \\\n --prop x=1.2cm --prop y=0.8cm --prop width=31.47cm --prop height=17.45cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-1' \\\n --prop preset=ellipse \\\n --prop fill=$TEAL \\\n --prop x=5cm --prop y=10cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-2' \\\n --prop preset=ellipse \\\n --prop fill=$CYAN \\\n --prop x=30cm --prop y=15cm --prop width=1cm --prop height=1cm\n\n# Slide 1 headline actors (visible on hero)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-title' \\\n --prop text=\"未来已来:2050\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=4cm --prop y=6cm --prop width=25cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-sub' \\\n --prop text=\"全息时代的一天\" \\\n --prop font=\"Arial\" \\\n --prop size=36 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=4.2cm --prop y=10.5cm --prop width=15cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-tag' \\\n --prop text=\"THE BOUNDARY DISSOLVES\" \\\n --prop font=\"Montserrat\" \\\n --prop size=16 \\\n --prop color=$CYAN \\\n --prop bold=true \\\n --prop fill=none \\\n --prop x=4.2cm --prop y=13cm --prop width=15cm --prop height=1.5cm\n\n# Slide 2 statement actors (hidden initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stmt-text' \\\n --prop text=\"物理与数字的边界彻底消融\" \\\n --prop font=\"Arial\" \\\n --prop size=54 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7cm --prop width=28cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stmt-sub' \\\n --prop text=\"智能代理、脑机接口与空间计算重塑了我们的每一秒\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$TEAL \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=12cm --prop width=28cm --prop height=2cm\n\n# Slide 3 pillar content actors (hidden initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p1-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GRAY \\\n --prop opacity=0.4 \\\n --prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p1-time' \\\n --prop text=\"07:00\" \\\n --prop font=\"Montserrat\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p1-title' \\\n --prop text=\"基因营养与唤醒\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7.5cm --prop width=7.5cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p1-desc' \\\n --prop text=\"AI管家实时读取体征,合成专属营养早餐,温和唤醒意识。\" \\\n --prop font=\"Arial\" \\\n --prop size=16 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p2-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GRAY \\\n --prop opacity=0.4 \\\n --prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p2-time' \\\n --prop text=\"14:00\" \\\n --prop font=\"Montserrat\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p2-title' \\\n --prop text=\"全息远程协同\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7.5cm --prop width=7.5cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p2-desc' \\\n --prop text=\"在虚拟火星基地与全球团队开启三维会议,数据触手可及。\" \\\n --prop font=\"Arial\" \\\n --prop size=16 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p3-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GRAY \\\n --prop opacity=0.4 \\\n --prop x=${OFFSCREEN} --prop y=4.5cm --prop width=9cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p3-time' \\\n --prop text=\"21:00\" \\\n --prop font=\"Montserrat\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p3-title' \\\n --prop text=\"沉浸式潜意识休眠\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7.5cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!p3-desc' \\\n --prop text=\"脑机接口连接潜意识网络,在深睡中完成知识载入与精神放松。\" \\\n --prop font=\"Arial\" \\\n --prop size=16 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=7cm --prop height=4cm\n\n# Slide 4 evidence actors (hidden initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-bg' \\\n --prop fill=$TEAL \\\n --prop opacity=0.3 \\\n --prop x=${OFFSCREEN} --prop y=3cm --prop width=15cm --prop height=13cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-num' \\\n --prop text=\"98.5%\" \\\n --prop font=\"Montserrat\" \\\n --prop size=96 \\\n --prop bold=true \\\n --prop color=$CYAN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5cm --prop width=15cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-label' \\\n --prop text=\"全球人口脑机接口接入率\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11cm --prop width=13cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev2-bg' \\\n --prop fill=$GRAY \\\n --prop opacity=0.5 \\\n --prop x=${OFFSCREEN} --prop y=8cm --prop width=12cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev2-num' \\\n --prop text=\"12.4 hrs\" \\\n --prop font=\"Montserrat\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9.5cm --prop width=10cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev2-label' \\\n --prop text=\"平均每日混合现实驻留时长\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=13.5cm --prop width=10cm --prop height=2cm\n\n# Slide 5 CTA actors (hidden initially)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-title' \\\n --prop text=\"准备好迎接你的未来了吗?\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7cm --prop width=26cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-btn' \\\n --prop text=\"EXPLORE 2050\" \\\n --prop preset=roundRect \\\n --prop font=\"Montserrat\" \\\n --prop size=18 \\\n --prop bold=true \\\n --prop color=$BG \\\n --prop fill=$CYAN \\\n --prop align=center \\\n --prop x=${OFFSCREEN} --prop y=11.5cm --prop width=6cm --prop height=1.5cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=20cm --prop y=8cm --prop opacity=0.05 --prop fill=$TEAL\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=14cm --prop y=2cm --prop width=18cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=2cm --prop y=2cm --prop width=30cm --prop height=0.2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=31cm --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=3cm --prop y=16cm\n\n# Hide hero text\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=${OFFSCREEN} --prop y=0cm\n\n# Show statement text\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop x=2.9cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[11]' --prop x=2.9cm --prop y=12cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=10cm --prop y=0cm --prop opacity=0.08 --prop fill=$CYAN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=2cm --prop y=2cm --prop width=30cm --prop height=2cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=31cm --prop y=4cm --prop width=0.2cm --prop height=5cm\n\n# Hide statement text\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=${OFFSCREEN} --prop y=0cm\n\n# Show pillar 1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=2.5cm --prop y=4.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=3.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=3.5cm --prop y=7.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=3.5cm --prop y=10cm\n\n# Show pillar 2\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=12.5cm --prop y=4.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=13.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=13.5cm --prop y=7.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=13.5cm --prop y=10cm\n\n# Show pillar 3\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=22.5cm --prop y=4.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[21]' --prop x=23.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[22]' --prop x=23.5cm --prop y=7.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[23]' --prop x=23.5cm --prop y=10cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=15cm --prop y=10cm --prop opacity=0.05\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=2cm --prop y=4cm --prop width=4cm --prop height=11cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=2cm --prop y=15.5cm --prop width=12cm --prop height=0.2cm\n\n# Hide pillars\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=${OFFSCREEN} --prop y=0cm\n\n# Show evidence\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=4cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=5cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[26]' --prop x=5cm --prop y=12cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[27]' --prop x=20cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[28]' --prop x=21cm --prop y=9.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[29]' --prop x=21cm --prop y=13.5cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=8cm --prop y=0cm --prop width=15cm --prop height=15cm --prop opacity=0.08\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=12cm --prop y=10cm --prop width=10cm --prop height=6cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=16.5cm --prop y=16cm --prop width=0.8cm --prop height=0.2cm\n\n# Hide evidence\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=${OFFSCREEN} --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[29]' --prop x=${OFFSCREEN} --prop y=0cm\n\n# Show CTA\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=3.9cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[31]' --prop x=13.9cm --prop y=11.5cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":15863,"content_sha256":"8e12ac2cf74144455faadb19f845b85e1ec263c7dd91c81a02de0cae161df972"},{"filename":"reference/styles/dark--cyber-future/style.md","content":"# Cyber Future — Cyberpunk 2050\n\n## Style Overview\n\nFuturistic cyberpunk aesthetic with glowing neon cyan elements against near-black backgrounds. Features a glowing orb as the main scene element with geometric accents, creating an immersive sci-fi atmosphere.\n\n- **Scenario**: Futuristic topics, tech vision, cyberpunk aesthetics, AI/robotics presentations\n- **Mood**: Futuristic, cyberpunk, immersive, sci-fi\n- **Tone**: Near-black with electric cyan and teal\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | ------------------------------ |\n| Background | #0B0C10 | Near-black charcoal canvas |\n| Primary accent | #66FCF1 | Electric cyan for highlights |\n| Secondary | #45A29E | Teal for supporting elements |\n| Card BG | #1F2833 | Dark gray for content grouping |\n| Primary text | #FFFFFF | White for main text |\n| Secondary text | #C5C6C7 | Light gray for secondary text |\n\n## Typography\n\n| Element | Font |\n| ---------- | -------------------------- |\n| Title (EN) | Montserrat |\n| Title (CN) | Source Han Sans (思源黑体) |\n| Body | Source Han Sans |\n\n## Design Techniques\n\n- Glowing orb as main scene element\n- Dark card backgrounds for content grouping\n- Electric cyan accent for highlights and data\n- Clean geometric scene actors (lines, dots, frames)\n- Morph transitions with scene actor position shifts\n- Cyberpunk color palette (dark + neon cyan)\n\n## Page Structure (5 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | --------------------------------------------- |\n| 1 | hero | 20 | Title with glowing orb and geometric elements |\n| 2 | statement | 20 | Centered statement with shifted scene actors |\n| 3 | pillars | 20 | 3-column layout for key concepts |\n| 4 | evidence | 20 | Data display with cyan numbers on dark cards |\n| 5 | cta | 20 | Closing slide with call to action |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — glowing orb + geometric elements establishing cyberpunk atmosphere\n- **Slide 4 (evidence)** — cyan data numbers on dark cards demonstrating neon accent usage\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2448,"content_sha256":"bbd014dcb3fda27de0c1a52d009b1d97303e4abfa68d437525a0a59c6e148708"},{"filename":"reference/styles/dark--diagonal-cut/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__diagonal_cut.pptx\"\n\necho \"Building: dark--diagonal-cut (Industrial Design)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=1A1A1A\nORANGE=FF6600\nYELLOW=FFCC00\nWHITE=FFFFFF\nGRAY=333333\nLIGHT_GRAY=CCCCCC\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: diagonal slashes\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!slash-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=0.9 \\\n --prop x=0cm --prop y=2cm --prop width=30cm --prop height=6cm --prop rotation=35\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!slash-white' \\\n --prop preset=rect \\\n --prop fill=$WHITE \\\n --prop opacity=0.15 \\\n --prop x=5cm --prop y=8cm --prop width=25cm --prop height=4cm --prop rotation=-30\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!slash-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=0.85 \\\n --prop x=18cm --prop y=12cm --prop width=20cm --prop height=3cm --prop rotation=40\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!slash-gray' \\\n --prop preset=rect \\\n --prop fill=$GRAY \\\n --prop opacity=0.7 \\\n --prop x=0cm --prop y=10cm --prop width=28cm --prop height=5cm --prop rotation=-35\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cut-line-1' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=1.0 \\\n --prop x=0cm --prop y=6cm --prop width=34cm --prop height=0.15cm --prop rotation=30\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cut-line-2' \\\n --prop preset=rect \\\n --prop fill=$WHITE \\\n --prop opacity=0.3 \\\n --prop x=2cm --prop y=14cm --prop width=34cm --prop height=0.1cm --prop rotation=-25\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-orange' \\\n --prop preset=ellipse \\\n --prop fill=$ORANGE \\\n --prop opacity=0.9 \\\n --prop x=29cm --prop y=1cm --prop width=3cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-yellow' \\\n --prop preset=ellipse \\\n --prop fill=$YELLOW \\\n --prop opacity=0.8 \\\n --prop x=1.2cm --prop y=15cm --prop width=2cm --prop height=2cm\n\n# Slide 1 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-title' \\\n --prop text='CUT THROUGH' \\\n --prop font='Segoe UI Black' \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=2cm --prop y=4.5cm --prop width=26cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-subtitle' \\\n --prop text='Industrial Design Co.' \\\n --prop font='Segoe UI' \\\n --prop size=24 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=2cm --prop y=10cm --prop width=20cm --prop height=2.5cm\n\n# Pre-create all other slide text content (off-canvas)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-title' \\\n --prop text='Precision Meets Power' \\\n --prop font='Segoe UI Black' \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=28cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-subtitle' \\\n --prop text='Where engineering excellence meets bold design' \\\n --prop font='Segoe UI' \\\n --prop size=20 \\\n --prop color=$LIGHT_GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=11cm --prop width=24cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-pillar-title' \\\n --prop text='What We Build' \\\n --prop font='Segoe UI Black' \\\n --prop size=40 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=0.8cm --prop width=20cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-num' \\\n --prop text='01' \\\n --prop font='Segoe UI Black' \\\n --prop size=48 \\\n --prop color=$ORANGE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-title' \\\n --prop text='Engineer' \\\n --prop font='Segoe UI Black' \\\n --prop size=28 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-desc' \\\n --prop text='Structural integrity through precision engineering' \\\n --prop font='Segoe UI' \\\n --prop size=14 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-num' \\\n --prop text='02' \\\n --prop font='Segoe UI Black' \\\n --prop size=48 \\\n --prop color=$YELLOW \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-title' \\\n --prop text='Design' \\\n --prop font='Segoe UI Black' \\\n --prop size=28 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-desc' \\\n --prop text='Bold aesthetics that command attention' \\\n --prop font='Segoe UI' \\\n --prop size=14 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-num' \\\n --prop text='03' \\\n --prop font='Segoe UI Black' \\\n --prop size=48 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-title' \\\n --prop text='Deliver' \\\n --prop font='Segoe UI Black' \\\n --prop size=28 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-desc' \\\n --prop text='On time, on spec, every single build' \\\n --prop font='Segoe UI' \\\n --prop size=14 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-evidence-title' \\\n --prop text='Our Numbers' \\\n --prop font='Segoe UI Black' \\\n --prop size=40 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=1cm --prop width=16cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev1-num' \\\n --prop text='500+' \\\n --prop font='Segoe UI Black' \\\n --prop size=64 \\\n --prop color=$ORANGE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5cm --prop width=14cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev1-label' \\\n --prop text='Units Manufactured' \\\n --prop font='Segoe UI' \\\n --prop size=20 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev2-num' \\\n --prop text='99.8%' \\\n --prop font='Segoe UI Black' \\\n --prop size=64 \\\n --prop color=$YELLOW \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3cm --prop width=14cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev2-label' \\\n --prop text='Quality Control Pass Rate' \\\n --prop font='Segoe UI' \\\n --prop size=20 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.5cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev3-num' \\\n --prop text='24/7' \\\n --prop font='Segoe UI Black' \\\n --prop size=64 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12cm --prop width=14cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-ev3-label' \\\n --prop text='Operations Running' \\\n --prop font='Segoe UI' \\\n --prop size=20 \\\n --prop color=$LIGHT_GRAY \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=15.5cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-cta-title' \\\n --prop text='Build With Us' \\\n --prop font='Segoe UI Black' \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=28cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-cta-contact' \\\n --prop text='[email protected]' \\\n --prop font='Segoe UI' \\\n --prop size=24 \\\n --prop color=$ORANGE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=28cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-cta-tagline' \\\n --prop text='Precision. Power. Performance.' \\\n --prop font='Segoe UI' \\\n --prop size=18 \\\n --prop color=$LIGHT_GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12.5cm --prop width=28cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph scene actors - dramatic shift\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=8cm --prop y=0cm --prop rotation=55\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=0cm --prop y=5cm --prop rotation=-5\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=22cm --prop y=14cm --prop rotation=15\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=10cm --prop y=0cm --prop rotation=-60\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=0cm --prop y=12cm --prop rotation=55\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=6cm --prop y=2cm --prop rotation=-50\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=2cm --prop y=14cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=30cm --prop y=2cm\n\n# Hide slide 1 content, show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[11]' --prop x=3cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[12]' --prop x=5cm --prop y=11cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph scene actors - become vertical dividers\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=9cm --prop y=0cm --prop width=3cm --prop height=24cm --prop rotation=8 --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=20.5cm --prop y=0cm --prop width=3cm --prop height=24cm --prop rotation=-8 --prop opacity=0.08\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.4cm --prop height=19.05cm --prop rotation=0 --prop opacity=0.7\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=0cm --prop y=17cm --prop width=33.87cm --prop height=2.5cm --prop rotation=-3 --prop opacity=0.5\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=0cm --prop y=4.5cm --prop width=33.87cm --prop rotation=2 --prop opacity=0.8\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=0cm --prop y=16cm --prop width=33.87cm --prop rotation=-1 --prop opacity=0.2\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=31cm --prop y=0.8cm --prop width=2cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=16cm --prop y=16.5cm --prop width=1.5cm --prop height=1.5cm --prop opacity=0.7\n\n# Hide previous content, show slide 3 content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=1.2cm --prop y=0.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=1.2cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=1.2cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=1.2cm --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=12.4cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=12.4cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=12.4cm --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=23.6cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[21]' --prop x=23.6cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[22]' --prop x=23.6cm --prop y=10cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph scene actors - asymmetric frame\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=0cm --prop y=0cm --prop rotation=-40 --prop opacity=0.5\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=16cm --prop y=6cm --prop rotation=45 --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=20cm --prop y=2cm --prop rotation=-25 --prop opacity=0.45\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=0cm --prop y=14cm --prop rotation=20 --prop opacity=0.6\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=2cm --prop y=0cm --prop rotation=-35\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=0cm --prop y=8cm --prop rotation=40\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=14cm --prop y=1cm --prop width=3.5cm --prop height=3.5cm --prop opacity=0.8\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=28cm --prop y=15cm --prop width=2.5cm --prop height=2.5cm --prop opacity=0.7\n\n# Hide previous content, show slide 4 content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=1.2cm --prop y=1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=1.2cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=1.2cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[26]' --prop x=19cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[27]' --prop x=19cm --prop y=6.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[28]' --prop x=8cm --prop y=12cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[29]' --prop x=8cm --prop y=15.5cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph scene actors - return to bold pattern\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=4cm --prop y=6cm --prop rotation=-35 --prop opacity=0.9\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=0cm --prop y=12cm --prop rotation=30 --prop opacity=0.15\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=0cm --prop y=0cm --prop rotation=-40 --prop opacity=0.85\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=12cm --prop y=4cm --prop rotation=35 --prop opacity=0.7\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=0cm --prop y=3cm --prop rotation=-30\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=0cm --prop y=16cm --prop rotation=25\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop x=1cm --prop y=2cm --prop width=3cm --prop height=3cm --prop opacity=0.9\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=30cm --prop y=14cm --prop opacity=0.8\n\n# Hide previous content, show slide 5 content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[29]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=3cm --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[31]' --prop x=3cm --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[32]' --prop x=3cm --prop y=12.5cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":19207,"content_sha256":"ef6f3436ee955c0039e1e923da3996762760cde2a285c3b8765c8d2dd0dc94f7"},{"filename":"reference/styles/dark--diagonal-cut/style.md","content":"# 09 Diagonal Cut — Industrial Diagonal Cut\n\n## Style Overview\n\nBold diagonal rectangle cuts and sharp lines on a near-black background create an industrial sense of power.\n\n- **Scene**: Industrial, engineering, architecture, manufacturing\n- **Mood**: Rugged, powerful, industrial, bold\n- **Color Tone**: Dark background, high-contrast warm accent colors\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ----------------- | ------- | ------------------------------------------------ |\n| Near Black | #1A1A1A | Page background |\n| Industrial Orange | #FF6600 | Primary accent color, diagonal strips, cut lines |\n| Pure White | #FFFFFF | Title text, secondary diagonal strips |\n| Warning Yellow | #FFCC00 | Secondary accent color, diagonal strips |\n| Dark Gray | #333333 | Secondary diagonal strips |\n| Light Gray | #CCCCCC | Body/subtitle text |\n\n## Typography\n\n| Element | Font | Size |\n| -------------- | -------------- | ------- |\n| Main Title | Segoe UI Black | 64-72pt |\n| Data Numbers | Segoe UI Black | 48-64pt |\n| Section Titles | Segoe UI Black | 28-40pt |\n| Body/Subtitle | Segoe UI | 14-24pt |\n\n## Design Techniques\n\n- **Diagonal rectangles**: 4 large rect elements rotated 30-45 degrees spanning across the canvas, creating diagonal cut effects\n- **Cut lines**: 2 ultra-thin rects (height 0.1-0.15cm) crossing the full width, simulating industrial cutting marks\n- **Circle decorations**: 2 ellipses as corner accents, balancing geometric composition\n- **Morph choreography**: Diagonal strips rotate 20-25 degrees + shift 8-12cm between pages, producing dynamic \"cut-flip\" effects; Slide 3 diagonal strips transform into nearly vertical column dividers, creating a \"scattered → orderly\" transformation\n- **Transparency layering**: Primary colors 0.85-0.9, secondary colors 0.15-0.3, gray 0.5-0.7, creating depth hierarchy\n\n## Scene Elements\n\n| Name | Type | Description |\n| ---------------- | ----------------- | --------------------------------------------------------- |\n| `!!slash-orange` | rect | Primary orange diagonal strip, largest and most prominent |\n| `!!slash-white` | rect | White semi-transparent diagonal strip, creating depth |\n| `!!slash-yellow` | rect | Yellow diagonal strip, secondary accent |\n| `!!slash-gray` | rect | Dark gray diagonal strip, adding layers |\n| `!!cut-line-1` | rect (ultra-thin) | Orange crossing cut line |\n| `!!cut-line-2` | rect (ultra-thin) | White semi-transparent cut line |\n| `!!dot-orange` | ellipse | Orange circle decoration |\n| `!!dot-yellow` | ellipse | Yellow circle decoration |\n\n## Page Structure (5 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------------------------------------------------------------------------------------------- | ----------- |\n| S1 | hero | Cover — diagonal strips scattered + centered large title \"CUT THROUGH\" |\n| S2 | statement | Statement — diagonal strips rotate and shift significantly + centered text |\n| S3 | pillars | Three columns — diagonal strips become nearly vertical column dividers, three-column content |\n| S4 | evidence | Data — diagonal strips asymmetrically frame data, three groups of large numbers |\n| S5 | cta | Closing — diagonal strips return to scattered diagonal orientation, call to action |\n\n## Reference Script\n\nFull build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Initial layout and rotation angles of 8 scene actors\n- **Slide 3 (pillars)** — How diagonal strips transform into nearly vertical column dividers, understanding morph transformation magnitude\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4395,"content_sha256":"e7a05ce8c769094c06ca055e6e4b6197f8edd3dad7c6e411a6dbe07074d0806c"},{"filename":"reference/styles/dark--editorial-story/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__editorial_story.pptx\"\n\necho \"Building: dark--editorial-story (Editorial Magazine)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=FFFFFF\nDARK=2C3E50\nRED=E74C3C\nGRAY_BG=F5F5F5\nTEXT_DARK=2D3436\nTEXT_GRAY=666666\nTEXT_LIGHT=999999\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors (8 shapes: shape[1-8])\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-1' \\\n --prop preset=ellipse \\\n --prop fill=$RED \\\n --prop opacity=0.08 \\\n --prop x=24cm --prop y=8cm --prop width=8cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-2' \\\n --prop preset=ellipse \\\n --prop fill=$DARK \\\n --prop opacity=0.05 \\\n --prop x=3cm --prop y=12cm --prop width=5cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!top-bar' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bottom-bar' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=0cm --prop y=18.25cm --prop width=33.87cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!left-accent' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=1cm --prop y=3cm --prop width=0.3cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!frame-border' \\\n --prop preset=rect \\\n --prop fill=none \\\n --prop line=$DARK \\\n --prop lineWidth=2pt \\\n --prop x=0.5cm --prop y=0.5cm --prop width=32.87cm --prop height=18.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bg-panel' \\\n --prop preset=rect \\\n --prop fill=$GRAY_BG \\\n --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-3' \\\n --prop preset=ellipse \\\n --prop fill=$RED \\\n --prop opacity=0.06 \\\n --prop x=26cm --prop y=10cm --prop width=6cm --prop height=6cm\n\n# Slide 1 content (11 shapes: shape[9-19])\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-label-bg' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=26cm --prop y=2cm --prop width=5cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-label-text' \\\n --prop text='VOL.06' \\\n --prop font='Arial Black' \\\n --prop size=18 \\\n --prop color=$BG \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=26cm --prop y=2.3cm --prop width=5cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title-cn' \\\n --prop text='编辑故事' \\\n --prop font='Microsoft YaHei' \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=5cm --prop width=20cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title-en' \\\n --prop text='EDITORIAL STORY' \\\n --prop font='Georgia' \\\n --prop size=28 \\\n --prop color=$RED \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=8.5cm --prop width=18cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-divider' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=3cm --prop y=11cm --prop width=12cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle-cn' \\\n --prop text='探索故事的力量' \\\n --prop font='Microsoft YaHei' \\\n --prop size=20 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=11.5cm --prop width=12cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle-en' \\\n --prop text='The Power of Storytelling' \\\n --prop font='Georgia' \\\n --prop size=14 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=12.8cm --prop width=15cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-image-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GRAY_BG \\\n --prop x=20cm --prop y=4cm --prop width=12cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-image-line' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=20cm --prop y=4cm --prop width=0.2cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-image-text' \\\n --prop text='图片区域' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=20cm --prop y=8.5cm --prop width=12cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-date' \\\n --prop text='2026年3月刊' \\\n --prop font='Microsoft YaHei' \\\n --prop size=12 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=3cm --prop y=16cm --prop width=6cm --prop height=0.6cm\n\n# Slide 2 content off-canvas (11 shapes: shape[20-30])\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-chapter-bg' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=$OFFSCREEN --prop y=1.5cm --prop width=3cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-chapter-text' \\\n --prop text='CHAPTER 01' \\\n --prop font='Arial Black' \\\n --prop size=12 \\\n --prop color=$BG \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=1.65cm --prop width=3cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-image-bg' \\\n --prop preset=roundRect \\\n --prop fill=$BG \\\n --prop opacity=0.95 \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=15cm --prop height=14cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-image-line' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=15cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-image-text' \\\n --prop text='配图区域' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=15cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-title-cn' \\\n --prop text='一个改变世界的故事' \\\n --prop font='Microsoft YaHei' \\\n --prop size=42 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3cm --prop width=14cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-title-en' \\\n --prop text='A Story That Changed The World' \\\n --prop font='Georgia' \\\n --prop size=18 \\\n --prop color=$RED \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=14cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-divider' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=$OFFSCREEN --prop y=7cm --prop width=6cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-body-1' \\\n --prop text='在这个充满变革的时代,故事的力量从未如此重要。每一个伟大的想法背后,都有一个令人动容的故事。' \\\n --prop font='Microsoft YaHei' \\\n --prop size=16 \\\n --prop color=333333 \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-body-2' \\\n --prop text='我们相信,好的故事能够跨越时空,连接人心,创造无限可能。' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-body-3' \\\n --prop text='无论是品牌的成长历程,还是产品的诞生故事,每一个细节都值得被讲述、被铭记。' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12.5cm --prop width=14cm --prop height=2cm\n\n# Note: Total shapes so far = 8 + 11 + 11 = 30\n\n# Slide 3 content off-canvas (10 shapes: shape[31-40])\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-quote-mark' \\\n --prop text='\"' \\\n --prop font='Georgia' \\\n --prop size=320 \\\n --prop color=$RED \\\n --prop opacity=0.15 \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=0cm --prop width=10cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-quote-cn' \\\n --prop text='好的设计是诚实的。' \\\n --prop font='Microsoft YaHei' \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=24cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-quote-en' \\\n --prop text='Good design is honest.' \\\n --prop font='Georgia' \\\n --prop size=28 \\\n --prop color=$RED \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=20cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-divider' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=$OFFSCREEN --prop y=11cm --prop width=6cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-card' \\\n --prop preset=roundRect \\\n --prop fill=$BG \\\n --prop opacity=0.95 \\\n --prop x=$OFFSCREEN --prop y=12.5cm --prop width=14cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-line' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=$OFFSCREEN --prop y=12.5cm --prop width=14cm --prop height=0.12cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-avatar' \\\n --prop preset=ellipse \\\n --prop fill=$DARK \\\n --prop x=$OFFSCREEN --prop y=13.5cm --prop width=1.5cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-name-cn' \\\n --prop text='迪特·拉姆斯' \\\n --prop font='Microsoft YaHei' \\\n --prop size=20 \\\n --prop bold=true \\\n --prop color=$TEXT_DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=13.8cm --prop width=10cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-name-en' \\\n --prop text='Dieter Rams' \\\n --prop font='Georgia' \\\n --prop size=14 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=15cm --prop width=10cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-author-title' \\\n --prop text='德国工业设计大师' \\\n --prop font='Microsoft YaHei' \\\n --prop size=12 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=15.8cm --prop width=10cm --prop height=0.6cm\n\n# Total shapes so far = 30 + 10 = 40\n\n# Slide 4 content off-canvas (minimal - we'll reuse slide 2 layout)\n# Skip for now - will use slide 2 shapes repositioned\n\n# Slide 5 content off-canvas (minimal - we'll use simple text)\n# Skip for now\n\n# Slide 6 content off-canvas (6 shapes: shape[41-46])\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-thanks-cn' \\\n --prop text='感谢阅读' \\\n --prop font='Microsoft YaHei' \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$BG \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5cm --prop width=15cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-thanks-en' \\\n --prop text='THANK YOU FOR READING' \\\n --prop font='Georgia' \\\n --prop size=24 \\\n --prop color=$RED \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=15cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-divider' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=8cm --prop height=0.15cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-contact-label' \\\n --prop text='联系我们' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12cm --prop width=6cm --prop height=0.6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-email' \\\n --prop text='[email protected]' \\\n --prop font='Georgia' \\\n --prop size=16 \\\n --prop color=$BG \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=13cm --prop width=12cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-website' \\\n --prop text='www.editorialstory.com' \\\n --prop font='Georgia' \\\n --prop size=16 \\\n --prop color=$BG \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=14.2cm --prop width=12cm --prop height=0.8cm\n\n# Total shapes = 8 + 11 + 11 + 10 + 6 = 46\n\n# ============================================\n# SLIDE 2 - STORY\n# ============================================\necho \"Building Slide 2: Story...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=26cm --prop y=10cm --prop width=6cm --prop height=6cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=3cm --prop y=14cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop y=18.55cm --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\n# Hide slide 1 content\nfor i in {9..19}; do\n officecli set \"$OUTPUT\" \"/slide[2]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[20]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[21]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[22]' --prop x=1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[23]' --prop x=1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[24]' --prop x=1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[25]' --prop x=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[26]' --prop x=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[27]' --prop x=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[28]' --prop x=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[29]' --prop x=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[30]' --prop x=18cm\n\n# ============================================\n# SLIDE 3 - QUOTE\n# ============================================\necho \"Building Slide 3: Quote...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=26cm --prop y=12cm --prop width=6cm --prop height=6cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=5cm --prop y=12cm --prop width=4cm --prop height=4cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=0cm --prop y=0cm --prop width=1.5cm --prop height=19.05cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=19.05cm --prop fill=$GRAY_BG\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\n# Hide previous content\nfor i in {9..30}; do\n officecli set \"$OUTPUT\" \"/slide[3]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 3 content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[31]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[32]' --prop x=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[33]' --prop x=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[34]' --prop x=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[35]' --prop x=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[36]' --prop x=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[37]' --prop x=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[38]' --prop x=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[39]' --prop x=8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[40]' --prop x=8cm\n\n# ============================================\n# SLIDE 4 - SIMPLIFIED\n# ============================================\necho \"Building Slide 4: Team (simplified)...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph scene actors back\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=28cm --prop y=2cm --prop width=4cm --prop height=4cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=3cm --prop y=14cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop y=18.55cm --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\n# Hide all content\nfor i in {9..40}; do\n officecli set \"$OUTPUT\" \"/slide[4]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Reuse slide 2 title as placeholder\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=3cm --prop y=7cm --prop text='编辑团队'\n\n# ============================================\n# SLIDE 5 - SIMPLIFIED\n# ============================================\necho \"Building Slide 5: Data (simplified)...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=26cm --prop y=10cm --prop width=5cm --prop height=5cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=3cm --prop y=14cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop y=18.55cm --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=1cm --prop y=2cm --prop width=0.2cm --prop height=14cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop x=0cm --prop y=0.5cm --prop width=8cm --prop height=18.55cm --prop fill=$GRAY_BG\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\n# Hide all content\nfor i in {9..40}; do\n officecli set \"$OUTPUT\" \"/slide[5]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Reuse slide 2 title as placeholder\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=10cm --prop y=2cm --prop text='数据洞察'\n\n# ============================================\n# SLIDE 6 - THANKS\n# ============================================\necho \"Building Slide 6: Thanks...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[6]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[6]/shape[1]' --prop x=5cm --prop y=12cm --prop width=4cm --prop height=4cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[6]/shape[2]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[4]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[5]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[6]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[7]' --prop x=0cm --prop y=0cm --prop width=20cm --prop height=19.05cm --prop fill=$DARK\nofficecli set \"$OUTPUT\" '/slide[6]/shape[8]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\n\n# Hide all previous content\nfor i in {9..40}; do\n officecli set \"$OUTPUT\" \"/slide[6]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 6 content\nofficecli set \"$OUTPUT\" '/slide[6]/shape[41]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[42]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[43]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[44]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[45]' --prop x=3cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[46]' --prop x=3cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":22309,"content_sha256":"436545698738c5d33af7125f984be64512b3ddede64ec41e81aa65118985f6a4"},{"filename":"reference/styles/dark--editorial-story/style.md","content":"# 06-editorial-story — Editorial Magazine Story\n\n## Style Overview\n\nDeep blue-gray with red emphasis in editorial magazine style, using magazine grid + image-text side-by-side layout, suitable for storytelling, brand stories, magazine content and similar scenarios\n\n- **Scene**: Storytelling, brand stories, editorial magazines, content publishing\n- **Mood**: Professional, narrative, literary, premium, media\n- **Tone**: Cool tones, low saturation, high contrast\n- **Industry**: Media, publishing, advertising, branding\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #FFFFFF | background |\n| Primary | #2C3E50 | primary |\n| Accent | #E74C3C | accent |\n| Auxiliary | #636E72 | secondary |\n| Primary Text | #2C3E50 | text_primary |\n| Secondary Text | #666666 | text_secondary |\n| Muted Text | #999999 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Georgia |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Deep blue-gray with red emphasis color scheme\n- Magazine grid layout\n- Image-text side-by-side design\n- Decorative quotation mark elements\n- Issue number label design\n- Morph transition animation\n- Standardized decorative elements\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ------ | -------- | --------------------------------------------------------- |\n| S1 | hero | 45 | Cover page - Magazine cover layout + Issue number label |\n| S2 | story | 50 | Story page - Left image, right text layout |\n| S3 | quote | 50 | Quote page - Full-page quote + Decorative quotation marks |\n| S4 | team | 55 | Team page - Four-grid magazine layout |\n| S5 | data | 50 | Data page - Left decoration + Data cards |\n| S6 | thanks | 45 | Thanks page - Magazine closing page style |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - Magazine cover layout + Issue number label\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2439,"content_sha256":"dca552c3743553db5631b0db62e0d84e9dd980a38799a1592e53a4518a77e3c1"},{"filename":"reference/styles/dark--investor-pitch/build.sh","content":"#!/bin/bash\n# Investor Pitch Professional Template - Build Script\n# 投资路演专业风格PPT模板 - 丰富版 300+ 元素\nset -e\nOUTPUT=\"template.pptx\"\necho \"Creating $OUTPUT ...\"\nofficecli create \"$OUTPUT\"\nfor i in 1 2 3 4 5 6; do\n officecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=1A1A2E\ndone\necho \"Created 6 slides\"\n\n# ============================================\n# SLIDE 1 - HERO (封面页) - 52 shapes\n# ============================================\necho \"Building Slide 1...\"\n\n# 背景装饰块\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.3 --prop x=0cm --prop y=0cm --prop width=10cm --prop height=19.05cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=16213E --prop opacity=0.5 --prop x=26cm --prop y=0cm --prop width=7.87cm --prop height=8cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.2 --prop x=22cm --prop y=12cm --prop width=11.87cm --prop height=7.05cm\n\n# 装饰线条\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=E94560 --prop x=2cm --prop y=1cm --prop width=6cm --prop height=0.08cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=2cm --prop y=1.3cm --prop width=4cm --prop height=0.08cm\n\n# 装饰圆点群 - 左侧\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.4 --prop x=0.5cm --prop y=$((i))cm --prop width=0.3cm --prop height=0.3cm\n officecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.5 --prop x=1.2cm --prop y=$((i+1))cm --prop width=0.25cm --prop height=0.25cm\n officecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.2 --prop x=1.8cm --prop y=$((i+2))cm --prop width=0.2cm --prop height=0.2cm\ndone\n\n# Logo区域\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=2cm --prop y=3cm --prop width=4cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"LOGO\" --prop font=\"Arial Black\" --prop size=16 --prop color=FFFFFF --prop align=center --prop x=2cm --prop y=3.6cm --prop width=4cm --prop height=0.8cm --prop fill=none\n\n# 融资轮次标签\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=roundRect --prop fill=E94560 --prop x=7cm --prop y=3.5cm --prop width=3cm --prop height=1cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"A轮融资\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=FFFFFF --prop align=center --prop x=7cm --prop y=3.7cm --prop width=3cm --prop height=0.6cm --prop fill=none\n\n# 主标题区\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"创新科技\" --prop font=\"Microsoft YaHei\" --prop size=56 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=12cm --prop y=5cm --prop width=20cm --prop height=2.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"INNOVATIVE TECH\" --prop font=\"Arial Black\" --prop size=24 --prop color=E94560 --prop align=left --prop x=12cm --prop y=7.8cm --prop width=15cm --prop height=1cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=E94560 --prop x=12cm --prop y=9.2cm --prop width=8cm --prop height=0.12cm\n\n# 融资信息卡片\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=12cm --prop y=10.5cm --prop width=18cm --prop height=5.5cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=E94560 --prop x=12cm --prop y=10.5cm --prop width=0.15cm --prop height=5.5cm\n\n# 融资金额\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"融资金额\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=13cm --prop y=11cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"¥5,000万\" --prop font=\"Arial Black\" --prop size=32 --prop color=E94560 --prop align=left --prop x=13cm --prop y=11.5cm --prop width=8cm --prop height=1.5cm --prop fill=none\n\n# 融资用途\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"资金用途\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=13cm --prop y=13.2cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"产品研发 40% | 市场拓展 35% | 团队建设 25%\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=B8B8D1 --prop align=left --prop x=13cm --prop y=13.8cm --prop width=16cm --prop height=0.8cm --prop fill=none\n\n# 底部信息\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"日期\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=6B6B8D --prop align=left --prop x=12cm --prop y=16.5cm --prop width=3cm --prop height=0.4cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"2026.03.21\" --prop font=\"Arial Black\" --prop size=14 --prop color=FFFFFF --prop align=left --prop x=12cm --prop y=17cm --prop width=6cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"地点\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=6B6B8D --prop align=left --prop x=20cm --prop y=16.5cm --prop width=3cm --prop height=0.4cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"上海 | 深圳 | 北京\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=17cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 底部装饰线\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=E94560 --prop x=0cm --prop y=18.8cm --prop width=33.87cm --prop height=0.25cm\n\necho \"Slide 1 complete\"\n\n# ============================================\n# SLIDE 2 - PROBLEM (问题页) - 50 shapes\n# ============================================\necho \"Building Slide 2...\"\n\n# 背景装饰\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.2 --prop x=0cm --prop y=0cm --prop width=8cm --prop height=19.05cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=16213E --prop opacity=0.4 --prop x=28cm --prop y=10cm --prop width=5.87cm --prop height=9.05cm\n\n# 问号装饰\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"?\" --prop font=\"Arial Black\" --prop size=180 --prop color=E94560 --prop opacity=0.1 --prop align=left --prop x=26cm --prop y=0cm --prop width=10cm --prop height=10cm --prop fill=none\n\n# 装饰圆点群\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.3 --prop x=1cm --prop y=$((i))cm --prop width=0.4cm --prop height=0.4cm\n officecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.4 --prop x=2cm --prop y=$((i+2))cm --prop width=0.3cm --prop height=0.3cm\ndone\n\n# 标题区\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"PROBLEM\" --prop font=\"Arial Black\" --prop size=36 --prop color=E94560 --prop align=left --prop x=10cm --prop y=1.5cm --prop width=10cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"行业痛点\" --prop font=\"Microsoft YaHei\" --prop size=28 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=10cm --prop y=3.2cm --prop width=10cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=E94560 --prop x=10cm --prop y=4.6cm --prop width=5cm --prop height=0.1cm\n\n# 三个痛点卡片\n# 卡片1\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=10cm --prop y=5.5cm --prop width=7cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=E94560 --prop x=10cm --prop y=5.5cm --prop width=7cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.2 --prop x=13cm --prop y=6.2cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"01\" --prop font=\"Arial Black\" --prop size=20 --prop color=E94560 --prop align=center --prop x=13cm --prop y=6.6cm --prop width=1.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"效率低下\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=FFFFFF --prop align=center --prop x=10cm --prop y=8cm --prop width=7cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"传统方式耗时耗力\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=10.5cm --prop y=9cm --prop width=6cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"平均处理时间3-5天\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=center --prop x=10.5cm --prop y=9.8cm --prop width=6cm --prop height=0.5cm --prop fill=none\n\n# 卡片2\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=17.5cm --prop y=5.5cm --prop width=7cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=17.5cm --prop y=5.5cm --prop width=7cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.3 --prop x=20.5cm --prop y=6.2cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"02\" --prop font=\"Arial Black\" --prop size=20 --prop color=0F3460 --prop align=center --prop x=20.5cm --prop y=6.6cm --prop width=1.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"成本高昂\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=FFFFFF --prop align=center --prop x=17.5cm --prop y=8cm --prop width=7cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"运营成本持续攀升\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=18cm --prop y=9cm --prop width=6cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"年均增长15%+\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=center --prop x=18cm --prop y=9.8cm --prop width=6cm --prop height=0.5cm --prop fill=none\n\n# 卡片3\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=25cm --prop y=5.5cm --prop width=7cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=E94560 --prop x=25cm --prop y=5.5cm --prop width=7cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.2 --prop x=28cm --prop y=6.2cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"03\" --prop font=\"Arial Black\" --prop size=20 --prop color=E94560 --prop align=center --prop x=28cm --prop y=6.6cm --prop width=1.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"体验不佳\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=FFFFFF --prop align=center --prop x=25cm --prop y=8cm --prop width=7cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"用户满意度持续下降\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=25.5cm --prop y=9cm --prop width=6cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"NPS仅-15分\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=center --prop x=25.5cm --prop y=9.8cm --prop width=6cm --prop height=0.5cm --prop fill=none\n\n# 市场机会卡片\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=10cm --prop y=11.5cm --prop width=22cm --prop height=4.5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"市场机会\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=E94560 --prop align=left --prop x=11cm --prop y=12cm --prop width=6cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"千亿级市场规模,年增长率超过25%\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=FFFFFF --prop align=left --prop x=11cm --prop y=13cm --prop width=20cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"行业数字化转型需求迫切,头部企业率先受益\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=B8B8D1 --prop align=left --prop x=11cm --prop y=14cm --prop width=20cm --prop height=0.6cm --prop fill=none\n\n# 底部装饰\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=0cm --prop y=18.8cm --prop width=33.87cm --prop height=0.25cm\n\necho \"Slide 2 complete\"\n\n# ============================================\n# SLIDE 3 - SOLUTION (方案页) - 52 shapes\n# ============================================\necho \"Building Slide 3...\"\n\n# 背景装饰\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.15 --prop x=22cm --prop y=0cm --prop width=11.87cm --prop height=10cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.1 --prop x=0cm --prop y=14cm --prop width=15cm --prop height=5.05cm\n\n# 装饰圆点群\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.25 --prop x=1cm --prop y=$((i))cm --prop width=0.35cm --prop height=0.35cm\n officecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.35 --prop x=2cm --prop y=$((i+1))cm --prop width=0.25cm --prop height=0.25cm\n officecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.15 --prop x=2.6cm --prop y=$((i+2))cm --prop width=0.2cm --prop height=0.2cm\ndone\n\n# 标题区\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"SOLUTION\" --prop font=\"Arial Black\" --prop size=36 --prop color=E94560 --prop align=left --prop x=4cm --prop y=1.5cm --prop width=10cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"解决方案\" --prop font=\"Microsoft YaHei\" --prop size=28 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=4cm --prop y=3.2cm --prop width=10cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=E94560 --prop x=4cm --prop y=4.6cm --prop width=5cm --prop height=0.1cm\n\n# 产品展示区\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=4cm --prop y=5.5cm --prop width=12cm --prop height=8cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.15 --prop x=7cm --prop y=8cm --prop width=6cm --prop height=6cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.2 --prop x=9cm --prop y=9.5cm --prop width=4cm --prop height=4cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"产品截图\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=6B6B8D --prop align=center --prop x=4cm --prop y=9cm --prop width=12cm --prop height=1cm --prop fill=none\n\n# 功能特点卡片\n# 卡片1\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=17cm --prop y=5.5cm --prop width=14cm --prop height=2.3cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.2 --prop x=18cm --prop y=6cm --prop width=1.2cm --prop height=1.2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"01\" --prop font=\"Arial Black\" --prop size=14 --prop color=E94560 --prop align=center --prop x=18cm --prop y=6.3cm --prop width=1.2cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"智能算法引擎\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=5.9cm --prop width=10cm --prop height=0.7cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"AI驱动,效率提升10倍\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=left --prop x=20cm --prop y=6.8cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 卡片2\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=17cm --prop y=8.2cm --prop width=14cm --prop height=2.3cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.3 --prop x=18cm --prop y=8.7cm --prop width=1.2cm --prop height=1.2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"02\" --prop font=\"Arial Black\" --prop size=14 --prop color=0F3460 --prop align=center --prop x=18cm --prop y=9cm --prop width=1.2cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"一站式平台\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=8.6cm --prop width=10cm --prop height=0.7cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"全流程覆盖,无缝衔接\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=left --prop x=20cm --prop y=9.5cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 卡片3\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=17cm --prop y=10.9cm --prop width=14cm --prop height=2.3cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.2 --prop x=18cm --prop y=11.4cm --prop width=1.2cm --prop height=1.2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"03\" --prop font=\"Arial Black\" --prop size=14 --prop color=E94560 --prop align=center --prop x=18cm --prop y=11.7cm --prop width=1.2cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"灵活部署\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=11.3cm --prop width=10cm --prop height=0.7cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"公有云/私有云/混合云\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=left --prop x=20cm --prop y=12.2cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 技术优势区\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=4cm --prop y=14.2cm --prop width=27cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"技术优势\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=E94560 --prop align=left --prop x=5cm --prop y=14.7cm --prop width=6cm --prop height=0.6cm --prop fill=none\n\n# 技术指标\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"99.9%\" --prop font=\"Arial Black\" --prop size=28 --prop color=E94560 --prop align=center --prop x=5cm --prop y=15.5cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"系统可用性\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=5cm --prop y=16.8cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"\u003c100ms\" --prop font=\"Arial Black\" --prop size=28 --prop color=0F3460 --prop align=center --prop x=12cm --prop y=15.5cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"响应时间\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=12cm --prop y=16.8cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"10x\" --prop font=\"Arial Black\" --prop size=28 --prop color=E94560 --prop align=center --prop x=19cm --prop y=15.5cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"效率提升\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=19cm --prop y=16.8cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"50+\" --prop font=\"Arial Black\" --prop size=28 --prop color=0F3460 --prop align=center --prop x=26cm --prop y=15.5cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"专利技术\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=26cm --prop y=16.8cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\necho \"Slide 3 complete\"\n\n# ============================================\n# SLIDE 4 - MARKET (市场页) - 54 shapes\n# ============================================\necho \"Building Slide 4...\"\n\n# 背景装饰\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.2 --prop x=0cm --prop y=0cm --prop width=10cm --prop height=19.05cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=16213E --prop opacity=0.3 --prop x=25cm --prop y=8cm --prop width=8.87cm --prop height=11.05cm\n\n# 装饰圆点群\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.3 --prop x=1cm --prop y=$((i))cm --prop width=0.4cm --prop height=0.4cm\n officecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.4 --prop x=2cm --prop y=$((i+2))cm --prop width=0.3cm --prop height=0.3cm\ndone\n\n# 标题区\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"MARKET\" --prop font=\"Arial Black\" --prop size=36 --prop color=E94560 --prop align=left --prop x=12cm --prop y=1.5cm --prop width=10cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"市场规模\" --prop font=\"Microsoft YaHei\" --prop size=28 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=12cm --prop y=3.2cm --prop width=10cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=E94560 --prop x=12cm --prop y=4.6cm --prop width=5cm --prop height=0.1cm\n\n# TAM/SAM/SOM 图示\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.15 --prop x=12cm --prop y=5.5cm --prop width=12cm --prop height=8cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.25 --prop x=14cm --prop y=6.5cm --prop width=8cm --prop height=6cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=16213E --prop opacity=0.4 --prop x=16cm --prop y=7.5cm --prop width=4cm --prop height=4cm\n\n# TAM标签\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"TAM\" --prop font=\"Arial Black\" --prop size=14 --prop color=E94560 --prop align=left --prop x=24.5cm --prop y=6cm --prop width=3cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"¥5000亿\" --prop font=\"Arial Black\" --prop size=20 --prop color=FFFFFF --prop align=left --prop x=24.5cm --prop y=6.6cm --prop width=5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"潜在市场总额\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=left --prop x=24.5cm --prop y=7.4cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\n# SAM标签\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"SAM\" --prop font=\"Arial Black\" --prop size=14 --prop color=0F3460 --prop align=left --prop x=24.5cm --prop y=9cm --prop width=3cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"¥1200亿\" --prop font=\"Arial Black\" --prop size=20 --prop color=FFFFFF --prop align=left --prop x=24.5cm --prop y=9.6cm --prop width=5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"可服务市场\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=left --prop x=24.5cm --prop y=10.4cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\n# SOM标签\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"SOM\" --prop font=\"Arial Black\" --prop size=14 --prop color=E94560 --prop align=left --prop x=24.5cm --prop y=12cm --prop width=3cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"¥50亿\" --prop font=\"Arial Black\" --prop size=20 --prop color=FFFFFF --prop align=left --prop x=24.5cm --prop y=12.6cm --prop width=5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"目标市场份额\" --prop font=\"Microsoft YaHei\" --prop size=11 --prop color=6B6B8D --prop align=left --prop x=24.5cm --prop y=13.4cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\n# 增长数据卡片\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=12cm --prop y=14.5cm --prop width=7cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=E94560 --prop x=12cm --prop y=14.5cm --prop width=7cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"年增长率\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=12.5cm --prop y=15cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"28%\" --prop font=\"Arial Black\" --prop size=32 --prop color=E94560 --prop align=left --prop x=12.5cm --prop y=15.8cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=19.5cm --prop y=14.5cm --prop width=7cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=19.5cm --prop y=14.5cm --prop width=7cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"目标客户\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=20cm --prop y=15cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"5000+\" --prop font=\"Arial Black\" --prop size=32 --prop color=0F3460 --prop align=left --prop x=20cm --prop y=15.8cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=27cm --prop y=14.5cm --prop width=6cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=E94560 --prop x=27cm --prop y=14.5cm --prop width=6cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"3年目标\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=27.5cm --prop y=15cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"TOP 3\" --prop font=\"Arial Black\" --prop size=32 --prop color=E94560 --prop align=left --prop x=27.5cm --prop y=15.8cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\necho \"Slide 4 complete\"\n\n# ============================================\n# SLIDE 5 - FINANCIAL (财务页) - 50 shapes\n# ============================================\necho \"Building Slide 5...\"\n\n# 背景装饰\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.1 --prop x=0cm --prop y=0cm --prop width=6cm --prop height=19.05cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.15 --prop x=28cm --prop y=0cm --prop width=5.87cm --prop height=19.05cm\n\n# 装饰圆点群\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=E94560 --prop opacity=0.25 --prop x=1cm --prop y=$((i))cm --prop width=0.35cm --prop height=0.35cm\n officecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.3 --prop x=2cm --prop y=$((i+1))cm --prop width=0.25cm --prop height=0.25cm\ndone\n\n# 标题区\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"FINANCIAL\" --prop font=\"Arial Black\" --prop size=36 --prop color=E94560 --prop align=left --prop x=8cm --prop y=1.5cm --prop width=10cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"财务数据\" --prop font=\"Microsoft YaHei\" --prop size=28 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=8cm --prop y=3.2cm --prop width=10cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop x=8cm --prop y=4.6cm --prop width=5cm --prop height=0.1cm\n\n# 收入增长图表区\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=8cm --prop y=5.5cm --prop width=22cm --prop height=6cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"营收增长趋势 (单位: 万元)\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=9cm --prop y=6cm --prop width=10cm --prop height=0.5cm --prop fill=none\n\n# 柱状图\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.6 --prop x=10cm --prop y=8cm --prop width=2cm --prop height=2.5cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.7 --prop x=14cm --prop y=7cm --prop width=2cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop opacity=0.8 --prop x=18cm --prop y=6cm --prop width=2cm --prop height=4.5cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop x=22cm --prop y=6cm --prop width=2cm --prop height=5cm\n\n# 年份标签\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"2023\" --prop font=\"Arial Black\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=10cm --prop y=10.7cm --prop width=2cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"2024\" --prop font=\"Arial Black\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=14cm --prop y=10.7cm --prop width=2cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"2025\" --prop font=\"Arial Black\" --prop size=12 --prop color=B8B8D1 --prop align=center --prop x=18cm --prop y=10.7cm --prop width=2cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"2026E\" --prop font=\"Arial Black\" --prop size=12 --prop color=E94560 --prop align=center --prop x=22cm --prop y=10.7cm --prop width=2cm --prop height=0.5cm --prop fill=none\n\n# 数据标签\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"500\" --prop font=\"Arial Black\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=10cm --prop y=7.5cm --prop width=2cm --prop height=0.4cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"1200\" --prop font=\"Arial Black\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=14cm --prop y=6.5cm --prop width=2cm --prop height=0.4cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"2800\" --prop font=\"Arial Black\" --prop size=11 --prop color=B8B8D1 --prop align=center --prop x=18cm --prop y=5.5cm --prop width=2cm --prop height=0.4cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"5000\" --prop font=\"Arial Black\" --prop size=11 --prop color=E94560 --prop align=center --prop x=22cm --prop y=5.5cm --prop width=2cm --prop height=0.4cm --prop fill=none\n\n# 关键指标卡片\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=8cm --prop y=12cm --prop width=6.5cm --prop height=2.8cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop x=8cm --prop y=12cm --prop width=6.5cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"毛利率\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=8.5cm --prop y=12.5cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"68%\" --prop font=\"Arial Black\" --prop size=28 --prop color=E94560 --prop align=left --prop x=8.5cm --prop y=13.3cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=15cm --prop y=12cm --prop width=6.5cm --prop height=2.8cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=15cm --prop y=12cm --prop width=6.5cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"客户留存\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=15.5cm --prop y=12.5cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"92%\" --prop font=\"Arial Black\" --prop size=28 --prop color=0F3460 --prop align=left --prop x=15.5cm --prop y=13.3cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=22cm --prop y=12cm --prop width=6.5cm --prop height=2.8cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=E94560 --prop x=22cm --prop y=12cm --prop width=6.5cm --prop height=0.15cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"LTV/CAC\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=22.5cm --prop y=12.5cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"5.8x\" --prop font=\"Arial Black\" --prop size=28 --prop color=E94560 --prop align=left --prop x=22.5cm --prop y=13.3cm --prop width=5cm --prop height=1.2cm --prop fill=none\n\n# 盈利预测\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=8cm --prop y=15.2cm --prop width=22cm --prop height=2.5cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"盈利预测: 2026年实现盈利,预计净利润率15%+\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=FFFFFF --prop align=left --prop x=9cm --prop y=16cm --prop width=20cm --prop height=0.8cm --prop fill=none\n\necho \"Slide 5 complete\"\n\n# ============================================\n# SLIDE 6 - FUNDRAISING (融资页) - 48 shapes\n# ============================================\necho \"Building Slide 6...\"\n\n# 背景装饰\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=E94560 --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=7cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=0F3460 --prop opacity=0.5 --prop x=22cm --prop y=7cm --prop width=11.87cm --prop height=12.05cm\n\n# 装饰圆点群\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do\n officecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.1 --prop x=$((i*2))cm --prop y=1cm --prop width=0.4cm --prop height=0.4cm\n officecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.15 --prop x=$((i*2))cm --prop y=4cm --prop width=0.3cm --prop height=0.3cm\ndone\n\nfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do\n officecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=0F3460 --prop opacity=0.3 --prop x=30cm --prop y=$((i))cm --prop width=0.4cm --prop height=0.4cm\ndone\n\n# 大标题\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"融资计划\" --prop font=\"Microsoft YaHei\" --prop size=48 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=4cm --prop y=1.5cm --prop width=15cm --prop height=2.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"FUNDRAISING\" --prop font=\"Arial Black\" --prop size=24 --prop color=FFFFFF --prop opacity=0.7 --prop align=left --prop x=4cm --prop y=4.2cm --prop width=15cm --prop height=1cm --prop fill=none\n\n# 融资金额卡片\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=4cm --prop y=8.5cm --prop width=14cm --prop height=8.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=E94560 --prop x=4cm --prop y=8.5cm --prop width=14cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"融资金额\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=E94560 --prop align=left --prop x=5cm --prop y=9.2cm --prop width=6cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"¥5,000万\" --prop font=\"Arial Black\" --prop size=40 --prop color=FFFFFF --prop align=left --prop x=5cm --prop y=10cm --prop width=12cm --prop height=1.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"出让股权: 10%\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=B8B8D1 --prop align=left --prop x=5cm --prop y=12cm --prop width=10cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"投前估值: ¥4.5亿\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=B8B8D1 --prop align=left --prop x=5cm --prop y=12.8cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 资金用途\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"资金用途\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=E94560 --prop align=left --prop x=5cm --prop y=14cm --prop width=6cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"产品研发 40%\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=FFFFFF --prop align=left --prop x=5cm --prop y=14.8cm --prop width=8cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"市场拓展 35%\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=left --prop x=5cm --prop y=15.4cm --prop width=8cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"团队建设 25%\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=5cm --prop y=16cm --prop width=8cm --prop height=0.5cm --prop fill=none\n\n# 联系方式卡片\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=16213E --prop x=19cm --prop y=8.5cm --prop width=12cm --prop height=8.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=0F3460 --prop x=19cm --prop y=8.5cm --prop width=12cm --prop height=0.2cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"联系我们\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=0F3460 --prop align=left --prop x=20cm --prop y=9.2cm --prop width=6cm --prop height=0.6cm --prop fill=none\n\n# 联系信息\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"CEO\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=20cm --prop y=10.2cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"张三 | [email protected]\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=10.8cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"电话\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=20cm --prop y=12cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"138-0000-0000\" --prop font=\"Arial Black\" --prop size=14 --prop color=FFFFFF --prop align=left --prop x=20cm --prop y=12.6cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"地址\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=6B6B8D --prop align=left --prop x=20cm --prop y=13.8cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"上海市浦东新区张江高科技园区\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=B8B8D1 --prop align=left --prop x=20cm --prop y=14.4cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 二维码占位\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=FFFFFF --prop x=27cm --prop y=15cm --prop width=3cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"扫码关注\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=6B6B8D --prop align=center --prop x=27cm --prop y=15.5cm --prop width=3cm --prop height=0.4cm --prop fill=none\n\necho \"Slide 6 complete\"\n\n# ============================================\n# MORPH TRANSITIONS\n# ============================================\necho \"Adding Morph transitions...\"\nfor i in 2 3 4 5 6; do\n officecli set \"$OUTPUT\" \"/slide[$i]\" --prop transition=morph\ndone\n\n# ============================================\n# VALIDATION\n# ============================================\necho \"Validating...\"\nofficecli validate \"$OUTPUT\"\n\necho \"Complete: $OUTPUT\"\necho \"Total shapes: 403\"\necho \"Slides: 6\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":43207,"content_sha256":"889b29f32388a19a4255fc72cc69cfcf20d4fc861505786a98feb0a0f8342d15"},{"filename":"reference/styles/dark--investor-pitch/style.md","content":"# 08-investor-pitch — Investor Pitch Professional\n\n## Style Overview\n\nDeep blue professional tone with red emphasis, suitable for investor pitches, fundraising presentations, business plans and similar scenarios\n\n- **Scene**: Investor pitches, fundraising presentations, business plans, startup showcases\n- **Mood**: Professional, trustworthy, stable, progressive\n- **Tone**: Dark tones, cool colors, professional blue-red pairing\n- **Industry**: Venture capital, tech, finance, enterprise services\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------- | ------- | -------------- |\n| Background | #1A1A2E | background |\n| Card Background | #16213E | card |\n| Auxiliary | #0F3460 | secondary |\n| Accent | #E94560 | accent |\n| Primary Text | #FFFFFF | text_primary |\n| Secondary Text | #B8B8D1 | text_secondary |\n| Muted Text | #6B6B8D | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial Black |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Deep blue professional tone\n- Red emphasis on key data\n- Data visualization charts\n- Geometric line decoration\n- Clear information hierarchy\n- Morph transition animation\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ----------- | -------- | -------------------------------------------------------- |\n| S1 | hero | 68 | Cover page - Company Logo + Project Name + Funding Info |\n| S2 | problem | 56 | Problem page - Industry pain points + Market opportunity |\n| S3 | solution | 75 | Solution page - Solution + Product showcase |\n| S4 | market | 55 | Market page - Market size + Competitive landscape |\n| S5 | financial | 57 | Financial page - Financial data + Growth forecast |\n| S6 | fundraising | 72 | Fundraising page - Funding needs + Contact info |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - Company Logo + Project Name + Funding Info\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2397,"content_sha256":"da078ccc3949c13a4a3756b462b2a79a36fabc48ceb801b22c1b512e63a3c2b6"},{"filename":"reference/styles/dark--liquid-flow/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__liquid_flow.pptx\"\n\necho \"Building: dark--liquid-flow (LUXE Brand Visual Upgrade)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=0F0F2D\nVIOLET=6C63FF\nMINT=48E5C2\nCORAL=FF6B8A\nEBLUE=3D5AFE\nAMBER=F5AF19\nTITLE=F5F5FF\nBODY=C8C8FF\nMUTED=8888CC\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: large fluid blobs (4 main blobs)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.35 \\\n --prop rotation=15 \\\n --prop x=2cm --prop y=3cm --prop width=12cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.28 \\\n --prop rotation=25 \\\n --prop x=20cm --prop y=2cm --prop width=10cm --prop height=14cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.32 \\\n --prop rotation=18 \\\n --prop x=8cm --prop y=10cm --prop width=13cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.38 \\\n --prop rotation=22 \\\n --prop x=24cm --prop y=11cm --prop width=9cm --prop height=11cm\n\n# Scene actors: additional blob (hidden initially, appears in slide 3 & 5)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=8cm --prop height=11cm\n\n# Scene actors: small droplets (3 droplets)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.55 \\\n --prop rotation=12 \\\n --prop x=15cm --prop y=5cm --prop width=3.5cm --prop height=2.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.58 \\\n --prop rotation=28 \\\n --prop x=18cm --prop y=14cm --prop width=4cm --prop height=3.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.52 \\\n --prop rotation=35 \\\n --prop x=6cm --prop y=16cm --prop width=2.8cm --prop height=3.8cm\n\n# Content: title text\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"LUXE\" \\\n --prop font=\"Arial\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=6cm --prop width=28cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text=\"品牌视觉升级 2025\" \\\n --prop font=\"Arial\" \\\n --prop size=42 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=9.5cm --prop width=28cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move blobs (rotated and moved)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.40 \\\n --prop rotation=45 \\\n --prop x=4cm --prop y=1cm --prop width=15cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.33 \\\n --prop rotation=52 \\\n --prop x=18cm --prop y=8cm --prop width=13cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.36 \\\n --prop rotation=48 \\\n --prop x=1cm --prop y=9cm --prop width=10cm --prop height=13cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.42 \\\n --prop rotation=58 \\\n --prop x=22cm --prop y=3cm --prop width=11cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=8cm --prop height=11cm\n\n# Move droplets\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.60 \\\n --prop rotation=38 \\\n --prop x=12cm --prop y=8cm --prop width=4.2cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.56 \\\n --prop rotation=55 \\\n --prop x=25cm --prop y=12cm --prop width=3.2cm --prop height=4.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.54 \\\n --prop rotation=62 \\\n --prop x=8cm --prop y=15cm --prop width=3.8cm --prop height=2.6cm\n\n# Content: statement text\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-statement1' \\\n --prop text=\"从经典到未来\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=6cm --prop width=24cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-statement2' \\\n --prop text=\"流动不止\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=9cm --prop width=24cm --prop height=2cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move blobs (further transformed)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.30 \\\n --prop rotation=70 \\\n --prop x=1cm --prop y=4cm --prop width=9cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.35 \\\n --prop rotation=78 \\\n --prop x=10cm --prop y=1cm --prop width=12cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.28 \\\n --prop rotation=65 \\\n --prop x=23cm --prop y=2cm --prop width=10cm --prop height=13cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.38 \\\n --prop rotation=82 \\\n --prop x=15cm --prop y=10cm --prop width=14cm --prop height=9cm\n\n# Show blob-5 on slide 3\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.32 \\\n --prop rotation=72 \\\n --prop x=3cm --prop y=14cm --prop width=8cm --prop height=11cm\n\n# Move droplets (only 2 visible)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.58 \\\n --prop rotation=68 \\\n --prop x=20cm --prop y=6cm --prop width=3.8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.56 \\\n --prop rotation=85 \\\n --prop x=27cm --prop y=14cm --prop width=3.2cm --prop height=4.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=3.8cm --prop height=2.6cm\n\n# Content: pillars\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text=\"三大升级维度\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=2cm --prop width=26cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p1-title' \\\n --prop text=\"色彩体系\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=7cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p2-title' \\\n --prop text=\"字体系统\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=13cm --prop y=7cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p3-title' \\\n --prop text=\"动态标识\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=21cm --prop y=7cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p1-desc' \\\n --prop text=\"现代渐变与流动配色\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$MUTED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=9cm --prop width=8cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p2-desc' \\\n --prop text=\"优雅衬线与几何无衬线\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$MUTED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=13cm --prop y=9cm --prop width=8cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-p3-desc' \\\n --prop text=\"响应式动效标志\" \\\n --prop font=\"Arial\" \\\n --prop size=18 \\\n --prop color=$MUTED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=21cm --prop y=9cm --prop width=8cm --prop height=1.2cm\n\n# ============================================\n# SLIDE 4 - SHOWCASE\n# ============================================\necho \"Building Slide 4: Showcase...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move blobs (new positions)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.35 \\\n --prop rotation=95 \\\n --prop x=22cm --prop y=1cm --prop width=11cm --prop height=9cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.30 \\\n --prop rotation=105 \\\n --prop x=2cm --prop y=2cm --prop width=13cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.40 \\\n --prop rotation=92 \\\n --prop x=12cm --prop y=9cm --prop width=9cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.33 \\\n --prop rotation=110 \\\n --prop x=24cm --prop y=10cm --prop width=10cm --prop height=8cm\n\n# Hide blob-5 on slide 4\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=8cm --prop height=11cm\n\n# Move droplets (all 3 visible again)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.58 \\\n --prop rotation=100 \\\n --prop x=17cm --prop y=4cm --prop width=3.5cm --prop height=4.3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.60 \\\n --prop rotation=88 \\\n --prop x=8cm --prop y=13cm --prop width=4.2cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.55 \\\n --prop rotation=115 \\\n --prop x=20cm --prop y=15cm --prop width=2.8cm --prop height=3.6cm\n\n# Content: showcase\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text=\"产品应用展示\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=3cm --prop width=26cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-subtitle' \\\n --prop text=\"包装设计 | 数字界面 | 空间体验\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=8cm --prop width=24cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-desc1' \\\n --prop text=\"全新视觉系统已应用于产品包装、移动应用、\" \\\n --prop font=\"Arial\" \\\n --prop size=20 \\\n --prop color=$MUTED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=6cm --prop y=11cm --prop width=22cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-desc2' \\\n --prop text=\"线下门店及品牌传播的各个触点\" \\\n --prop font=\"Arial\" \\\n --prop size=20 \\\n --prop color=$MUTED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=6cm --prop y=12.5cm --prop width=22cm --prop height=1.2cm\n\n# ============================================\n# SLIDE 5 - EVIDENCE\n# ============================================\necho \"Building Slide 5: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move blobs (data visualization feel)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.32 \\\n --prop rotation=135 \\\n --prop x=12cm --prop y=3cm --prop width=10cm --prop height=13cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.38 \\\n --prop rotation=125 \\\n --prop x=3cm --prop y=8cm --prop width=8cm --prop height=11cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.35 \\\n --prop rotation=118 \\\n --prop x=23cm --prop y=7cm --prop width=9cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.28 \\\n --prop rotation=142 \\\n --prop x=1cm --prop y=1cm --prop width=12cm --prop height=9cm\n\n# Show blob-5 again on slide 5\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.40 \\\n --prop rotation=130 \\\n --prop x=20cm --prop y=1cm --prop width=11cm --prop height=8cm\n\n# Move droplets (only 2 visible)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.58 \\\n --prop rotation=138 \\\n --prop x=16cm --prop y=10cm --prop width=3.6cm --prop height=2.9cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.56 \\\n --prop rotation=122 \\\n --prop x=6cm --prop y=15cm --prop width=4cm --prop height=3.4cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=2.8cm --prop height=3.6cm\n\n# Content: evidence\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text=\"市场成果\" \\\n --prop font=\"Arial\" \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=2cm --prop width=26cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-metric1-num' \\\n --prop text=\"+45%\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$MINT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=6cm --prop y=7cm --prop width=10cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-metric2-num' \\\n --prop text=\"+120%\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$CORAL \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=18cm --prop y=7cm --prop width=10cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-metric1-label' \\\n --prop text=\"品牌认知度提升\" \\\n --prop font=\"Arial\" \\\n --prop size=20 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=6cm --prop y=10cm --prop width=10cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-metric2-label' \\\n --prop text=\"社交媒体互动增长\" \\\n --prop font=\"Arial\" \\\n --prop size=20 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=18cm --prop y=10cm --prop width=10cm --prop height=1.2cm\n\n# ============================================\n# SLIDE 6 - CTA\n# ============================================\necho \"Building Slide 6: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[6]' --prop transition=morph\n\n# Move blobs (return to center, calmer)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!blob-1' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.30 \\\n --prop rotation=155 \\\n --prop x=5cm --prop y=2cm --prop width=10cm --prop height=14cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!blob-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.35 \\\n --prop rotation=165 \\\n --prop x=18cm --prop y=1cm --prop width=13cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!blob-3' \\\n --prop preset=ellipse \\\n --prop fill=$CORAL \\\n --prop opacity=0.28 \\\n --prop rotation=148 \\\n --prop x=2cm --prop y=11cm --prop width=12cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!blob-4' \\\n --prop preset=ellipse \\\n --prop fill=$EBLUE \\\n --prop opacity=0.38 \\\n --prop rotation=172 \\\n --prop x=22cm --prop y=10cm --prop width=9cm --prop height=11cm\n\n# Hide blob-5 on slide 6\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!blob-5' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.01 \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=11cm --prop height=8cm\n\n# Move droplets (all 3 visible)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!drop-1' \\\n --prop preset=ellipse \\\n --prop fill=$AMBER \\\n --prop opacity=0.60 \\\n --prop rotation=160 \\\n --prop x=12cm --prop y=6cm --prop width=3.2cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!drop-2' \\\n --prop preset=ellipse \\\n --prop fill=$MINT \\\n --prop opacity=0.55 \\\n --prop rotation=150 \\\n --prop x=24cm --prop y=7cm --prop width=3.8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=!!drop-3' \\\n --prop preset=ellipse \\\n --prop fill=$VIOLET \\\n --prop opacity=0.58 \\\n --prop rotation=178 \\\n --prop x=8cm --prop y=16cm --prop width=2.9cm --prop height=3.5cm\n\n# Content: CTA\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=#s6-title' \\\n --prop text=\"开启品牌新纪元\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$TITLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=7cm --prop width=26cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape \\\n --prop 'name=#s6-subtitle' \\\n --prop text=\"LUXE — 流动的美学 · 未来的经典\" \\\n --prop font=\"Arial\" \\\n --prop size=22 \\\n --prop color=$BODY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=5cm --prop y=10.5cm --prop width=24cm --prop height=1.5cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":21322,"content_sha256":"cf1b82a95e747175b3f192029f8f0630dd110c07b13d8e26f23f986f0c162020"},{"filename":"reference/styles/dark--liquid-flow/style.md","content":"# Liquid Flow — Fluid Light Effects\n\n## Style Overview\n\nDeep purple background with multicolor fluid light spots, large ellipses with low transparency overlapping to create a liquid flow effect.\n\n- **Scene**: Brand visual upgrade, creative launches, fashion showcases, premium products\n- **Mood**: Flowing, dreamy, premium, avant-garde\n- **Tone**: Dark tones, multicolor gradient light effects\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ----------------- | ------- | -------------------- |\n| Deep Purple Night | #0F0F2D | Page background |\n| Violet | #6C63FF | Primary light spot |\n| Mint Green | #48E5C2 | Auxiliary light spot |\n| Coral Pink | #FF6B8A | Auxiliary light spot |\n| Electric Blue | #3D5AFE | Auxiliary light spot |\n| Amber | #F5AF19 | Small droplets |\n| Title White | #F5F5FF | Title text |\n| Body Blue | #C8C8FF | Body text |\n| Auxiliary Gray | #8888CC | Auxiliary text |\n\n## Design Techniques\n\n- **Fluid light spots**: 4 large ellipses (12-14cm) + 3 small droplets (3-4cm), different colors, different transparency (0.28-0.55), with rotation\n- **Liquid flow effect**: Ellipses overlap each other, color mixing creates depth effect\n- **Morph choreography**: Light spots shift significantly between pages (10-15cm) + rotation changes, creating a sense of flow\n- **Characteristics**: Irregular fluid light spots + multicolor layering, creating liquid flow effect\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Fluid light spot layout and layering effects\n- **Slide 3 (pillars)** — How light spots complement content cards\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1842,"content_sha256":"d15e323d6e699227f0d8eb6e97637ec47d68e7b53af7ed4f6ec45c28c8fdbe9b"},{"filename":"reference/styles/dark--luxury-minimal/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__luxury_minimal.pptx\"\n\necho \"Building: dark--luxury-minimal (AURA COFFEE)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=111111\nGOLD=D4AF37\nWHITE=FFFFFF\nGRAY1=888888\nGRAY2=555555\nGRAY3=333333\nGRAY4=CCCCCC\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: golden line + all text elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!deco-line' \\\n --prop fill=$GOLD \\\n --prop x=4cm --prop y=8.5cm --prop width=2cm --prop height=0.1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!brand-title' \\\n --prop text=\"AURA COFFEE\" \\\n --prop font=\"Helvetica\" \\\n --prop size=60 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=4cm --prop y=9cm --prop width=25cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!brand-sub' \\\n --prop text=\"纯 粹 之 境 | 极简高级精品咖啡\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$GRAY1 \\\n --prop lineSpacing=1.5 \\\n --prop fill=none \\\n --prop x=4.2cm --prop y=12cm --prop width=25cm --prop height=1cm\n\n# Pre-create all other actors (hidden off-canvas)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!statement-main' \\\n --prop text=\"少即是多,剥离繁杂,只为一杯纯粹好咖啡。\" \\\n --prop font=\"Helvetica\" \\\n --prop size=36 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=0cm --prop width=25cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!statement-sub' \\\n --prop text=\"在喧嚣的都市中,我们坚持做减法。\\n拒绝过度包装与人工添加,让咖啡回归最本真的风味,\\n这是 AURA 的美学,也是对品质的极致专注。\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$GRAY1 \\\n --prop lineSpacing=1.8 \\\n --prop valign=top \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=1cm --prop width=20cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pillar-title' \\\n --prop text=\"三大核心原则\" \\\n --prop font=\"Helvetica\" \\\n --prop size=24 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=2cm --prop width=25cm --prop height=1.5cm\n\n# Pillar 1\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box1-line' \\\n --prop fill=$GRAY3 \\\n --prop x=${OFFSCREEN} --prop y=3cm --prop width=0.1cm --prop height=7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box1-title' \\\n --prop text=\"01. 严苛寻豆\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=4cm --prop width=8cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box1-desc' \\\n --prop text=\"深入埃塞俄比亚、哥伦比亚等原产地,仅甄选海拔 1500 米以上的 SCA 85+ 级精品生豆。\" \\\n --prop font=\"Helvetica\" \\\n --prop size=14 \\\n --prop color=$GRAY1 \\\n --prop lineSpacing=1.6 \\\n --prop valign=top \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5cm --prop width=7.5cm --prop height=5cm\n\n# Pillar 2\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box2-line' \\\n --prop fill=$GRAY3 \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=0.1cm --prop height=7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box2-title' \\\n --prop text=\"02. 精准烘焙\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=7cm --prop width=8cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box2-desc' \\\n --prop text=\"采用德国 Probat 烘焙机,结合气象数据微调曲线,激发每一支豆子的风土之味。\" \\\n --prop font=\"Helvetica\" \\\n --prop size=14 \\\n --prop color=$GRAY1 \\\n --prop lineSpacing=1.6 \\\n --prop valign=top \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8cm --prop width=7.5cm --prop height=5cm\n\n# Pillar 3\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box3-line' \\\n --prop fill=$GRAY3 \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=0.1cm --prop height=7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box3-title' \\\n --prop text=\"03. 科学萃取\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10cm --prop width=8cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!box3-desc' \\\n --prop text=\"精准控制 93°C 水温与 9 Bar 压力,金杯法则护航,确保每一杯出品的稳定与完美。\" \\\n --prop font=\"Helvetica\" \\\n --prop size=14 \\\n --prop color=$GRAY1 \\\n --prop lineSpacing=1.6 \\\n --prop valign=top \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11cm --prop width=7.5cm --prop height=5cm\n\n# Evidence elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-number' \\\n --prop text=\"1%\" \\\n --prop font=\"Arial\" \\\n --prop size=110 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=12cm --prop width=10cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-title' \\\n --prop text=\"全球前 1% 极微批次特选\" \\\n --prop font=\"Helvetica\" \\\n --prop size=20 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=13cm --prop width=12cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-desc1' \\\n --prop text=\"• 年度限量供应 500kg 庄园级瑰夏\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$GRAY4 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=14cm --prop width=15cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-desc2' \\\n --prop text=\"• 100% 环保可降解极简材质包装\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$GRAY4 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=15cm --prop width=15cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ev-desc3' \\\n --prop text=\"• 多位 Q-Grader 国际品鉴师严格把控\" \\\n --prop font=\"Helvetica\" \\\n --prop size=16 \\\n --prop color=$GRAY4 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=16cm --prop width=15cm --prop height=1.5cm\n\n# CTA elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-title' \\\n --prop text=\"品味纯粹,即刻启程\" \\\n --prop font=\"Helvetica\" \\\n --prop size=44 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=17cm --prop width=25cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-web' \\\n --prop text=\"www.auracoffee.com\" \\\n --prop font=\"Helvetica\" \\\n --prop size=14 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=18cm --prop width=10cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-email' \\\n --prop text=\"[email protected]\" \\\n --prop font=\"Helvetica\" \\\n --prop size=14 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=18.5cm --prop width=10cm --prop height=1cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=4cm --prop y=7cm --prop width=1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=4cm --prop y=2cm --prop width=10cm --prop height=1cm --prop size=14 --prop color=$GRAY2\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=${OFFSCREEN}\n\n# Show statement\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=4cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=4cm --prop y=11cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=4cm --prop y=4.5cm --prop width=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=4cm --prop y=2cm\n\n# Hide statement\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=${OFFSCREEN}\n\n# Show pillars\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=4cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=4cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=4.5cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=4.5cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=13.5cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=14cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=14cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=23cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=23.5cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=23.5cm --prop y=8.5cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=15cm --prop y=10.5cm --prop width=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=4cm --prop y=2cm\n\n# Hide pillars\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=${OFFSCREEN}\n\n# Show evidence\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=4cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=4cm --prop y=12cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=15cm --prop y=7cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=15cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=15cm --prop y=12cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=4cm --prop y=7cm --prop width=2cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=4cm --prop y=12cm --prop width=15cm --prop height=1.5cm --prop size=20\n\n# Hide evidence\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=${OFFSCREEN}\n\n# Show CTA\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=4cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=4cm --prop y=14cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=10cm --prop y=14cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":12577,"content_sha256":"eee117aff4e9d4534dc708e0c727ffc4a7697c096e190141a8c32b4630433849"},{"filename":"reference/styles/dark--luxury-minimal/style.md","content":"# Luxury Minimal — Black & Gold Premium\n\n## Style Overview\n\nAn ultra-minimalist design system with pure black canvas, white typography, and strategic gold accents. Epitomizes luxury and sophistication through restraint and precision.\n\n- **Scenario**: Luxury brands, premium product launches, high-end corporate presentations\n- **Mood**: Luxurious, minimalist, sophisticated, premium\n- **Tone**: Pure black with gold accent\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | ---------------------------------- |\n| Background | #111111 | Near-black canvas |\n| Primary text | #FFFFFF | White for all primary text |\n| Accent | #D4AF37 | Metallic gold for decorative lines |\n| Secondary text | #888888 | Mid-gray for supporting text |\n| Muted text | #555555 | Dark gray for subtle elements |\n\n## Typography\n\n| Element | Font |\n| --------------- | ----------------- |\n| Title (English) | Helvetica |\n| Body (English) | Helvetica / Arial |\n| Body (Chinese) | Helvetica |\n\n## Design Techniques\n\n- Ultra-minimalist with single gold line decoration\n- Ghost mechanism with opacity=0 for hidden actors\n- Black canvas with white typography + gold accents\n- Numbered pillar layout (01/02/03) for structured content\n- Large percentage data display for impact\n- Clean separation with gold divider lines\n\n## Page Structure (5 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | ------------------------------------------- |\n| 1 | hero | 23 | Brand title with gold accent line |\n| 2 | statement | 23 | Centered statement with minimal decoration |\n| 3 | pillars | 23 | Numbered 3-column layout with gold dividers |\n| 4 | evidence | 23 | Large data percentage + bullet points |\n| 5 | cta | 23 | Closing with contact information |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — gold line + white title on black canvas\n- **Slide 3 (pillars)** — numbered layout with gold dividers\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2358,"content_sha256":"c7e615a2b4ed6ba3db4cfef55df14a2ddadba8fabce591c182eb7a9c75b178a8"},{"filename":"reference/styles/dark--midnight-blueprint/style.md","content":"# Midnight Blueprint — Architecture Professional\n\n## Style Overview\n\nSophisticated architecture and professional services design with navy gradient background, ghost numbers, and textFill fade effects. Features asymmetric corner glows and stark metrics layouts for high-end corporate presentations.\n\n- **Scenario**: Architecture firms, professional services, corporate showcases, luxury real estate, high-end consultancies\n- **Mood**: Sophisticated, professional, premium, architectural\n- **Tone**: Deep navy gradient with electric blue and gold accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------- | --------------------------------- | -------------------------------- |\n| Background | #080B2A → #181B55 (gradient 135°) | Navy gradient |\n| Ghost | #131650 | Barely visible numbers (on navy) |\n| Electric Blue | #4B7FFF | Primary accent, glows |\n| Gold | #F5B942 | Secondary accent |\n| White | #FFFFFF | Primary text |\n| Dim | #7A80BB | Supporting text |\n| Pale | #B8C0F0 | Light blue for accents |\n| Mid | #0F1242 | Card backgrounds |\n\n## Typography\n\n| Element | Font | Size |\n| ------------- | -------------- | ------- |\n| Hero title | Segoe UI Black | 56pt |\n| Stats | Segoe UI Black | 52pt |\n| Section title | Segoe UI Black | 32pt |\n| Body | Segoe UI | 13-14pt |\n| Labels | Segoe UI | 10pt |\n\n## Design Techniques\n\n- **Ghost numbers**: Massive 200pt numbers in barely-visible color (#131650 on #080B2A)\n- **TextFill fade**: Title text fades into background using gradient fill\n- **Asymmetric corner glows**: Two ellipse actors with low opacity (0.06-0.13) that reposition across slides\n- **Thin accent lines**: 0.14cm height rects in electric blue/gold\n- **Stark metrics layout**: Vertical dividers creating clean 3-column stat display\n- **Vertical bar cluster**: Decorative thin bars (0.25cm width) as architectural detail\n\n## Key Morph Actors\n\n- `!!glow-a`: Electric blue ellipse, repositions for asymmetric lighting effect\n- `!!glow-b`: Purple ellipse, creates depth and atmosphere\n- `!!accent`: Thin horizontal rect that moves and resizes as visual anchor\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2660,"content_sha256":"463dfaa751cb0dac3eb9130324a457a07fdc23d52927376f42eb525613f7f62d"},{"filename":"reference/styles/dark--neon-productivity/build.sh","content":"#!/usr/bin/env bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUT=\"$SCRIPT_DIR/dark__neon_productivity.pptx\"\n\necho \"Building: dark--neon-productivity (注意力预算)\"\n\nrm -f \"$OUT\"\n\nofficecli create \"$OUT\"\nofficecli add \"$OUT\" '/' --type slide --prop layout=blank --prop background=0B0F1A --prop transition=morph\n\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[1]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-blob-1\",\"preset\":\"ellipse\",\"fill\":\"2BE4A8\",\"opacity\":\"0.10\",\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"14cm\",\"height\":\"14cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-blob-2\",\"preset\":\"ellipse\",\"fill\":\"FFB020\",\"opacity\":\"0.08\",\"x\":\"22cm\",\"y\":\"9.8cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-slab\",\"preset\":\"roundRect\",\"fill\":\"5B6CFF\",\"opacity\":\"0.07\",\"x\":\"28cm\",\"y\":\"2cm\",\"width\":\"6cm\",\"height\":\"12cm\",\"rotation\":\"10\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-line-1\",\"preset\":\"rect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"x\":\"1.2cm\",\"y\":\"1.0cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-line-2\",\"preset\":\"rect\",\"fill\":\"2BE4A8\",\"opacity\":\"0.08\",\"x\":\"5cm\",\"y\":\"15.2cm\",\"width\":\"25cm\",\"height\":\"0.2cm\",\"rotation\":\"-12\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-dot\",\"preset\":\"ellipse\",\"fill\":\"FF4D6D\",\"opacity\":\"0.18\",\"x\":\"30cm\",\"y\":\"3cm\",\"width\":\"1.4cm\",\"height\":\"1.4cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-ring\",\"preset\":\"ellipse\",\"fill\":\"000000\",\"opacity\":\"0.01\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.22\",\"x\":\"24cm\",\"y\":\"0.8cm\",\"width\":\"8cm\",\"height\":\"8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"bg-chip\",\"preset\":\"roundRect\",\"fill\":\"FFB020\",\"opacity\":\"0.10\",\"x\":\"1.2cm\",\"y\":\"16.2cm\",\"width\":\"5.6cm\",\"height\":\"2.2cm\",\"rotation\":\"0\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"hero-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"注意力预算\",\"font\":\"PingFang SC\",\"size\":\"72\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"4cm\",\"y\":\"6.2cm\",\"width\":\"25.9cm\",\"height\":\"2.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"hero-subtitle\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"把手机时间变成创造时间\",\"font\":\"PingFang SC\",\"size\":\"36\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"4cm\",\"y\":\"9.6cm\",\"width\":\"25.9cm\",\"height\":\"1.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"hero-tagline\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"7 天可执行练习 · 无需任何 App\",\"font\":\"PingFang SC\",\"size\":\"18\",\"bold\":\"false\",\"color\":\"7F93AA\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"4cm\",\"y\":\"12.0cm\",\"width\":\"25.9cm\",\"height\":\"1.0cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"statement-main\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"你不是没时间,你是被碎片买走了\",\"font\":\"PingFang SC\",\"size\":\"56\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.2cm\",\"width\":\"27.4cm\",\"height\":\"2.4cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"statement-sub\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"每一次下意识打开,都在付一笔“重启成本”\",\"font\":\"PingFang SC\",\"size\":\"24\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"11.8cm\",\"width\":\"23.8cm\",\"height\":\"1.2cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillars-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"三件事,立刻把注意力收回来\",\"font\":\"PingFang SC\",\"size\":\"40\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"1.2cm\",\"width\":\"31.47cm\",\"height\":\"1.4cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar1-bg\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.18\",\"x\":\"36cm\",\"y\":\"5.0cm\",\"width\":\"9.6cm\",\"height\":\"12.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar1-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"① 识别触发器\",\"font\":\"PingFang SC\",\"size\":\"28\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.0cm\",\"width\":\"8.4cm\",\"height\":\"1.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar1-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"把“无聊/压力/等待/社交”写成清单;每次打开前问:我现在要解决什么?\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"7.6cm\",\"width\":\"8.4cm\",\"height\":\"6.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar2-bg\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.18\",\"x\":\"36cm\",\"y\":\"5.0cm\",\"width\":\"9.6cm\",\"height\":\"12.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar2-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"② 设定预算\",\"font\":\"PingFang SC\",\"size\":\"28\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.0cm\",\"width\":\"8.4cm\",\"height\":\"1.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar2-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"给娱乐/社交一个固定额度(示例:30 分钟);用完就停,把想刷的内容写到明天清单。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"7.6cm\",\"width\":\"8.4cm\",\"height\":\"6.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar3-bg\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.18\",\"x\":\"36cm\",\"y\":\"5.0cm\",\"width\":\"9.6cm\",\"height\":\"12.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar3-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"③ 保护深度区\",\"font\":\"PingFang SC\",\"size\":\"28\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.0cm\",\"width\":\"8.4cm\",\"height\":\"1.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"pillar3-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"每天至少留 1 个 90 分钟无打扰区块;手机离身,通知改成预约(集中 2 次处理)。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"7.6cm\",\"width\":\"8.4cm\",\"height\":\"6.0cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"timeline-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"一天 4 步流程:把预算花在对的地方\",\"font\":\"PingFang SC\",\"size\":\"36\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"1.2cm\",\"width\":\"31.47cm\",\"height\":\"1.4cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"timeline-line\",\"preset\":\"rect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.08\",\"x\":\"36cm\",\"y\":\"6.1cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step1-num\",\"preset\":\"ellipse\",\"fill\":\"2BE4A8\",\"opacity\":\"1\",\"text\":\"1\",\"font\":\"PingFang SC\",\"size\":\"20\",\"bold\":\"true\",\"color\":\"0B0F1A\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"5.3cm\",\"width\":\"1.6cm\",\"height\":\"1.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step1-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"启动(2 分钟)\",\"font\":\"PingFang SC\",\"size\":\"22\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.4cm\",\"width\":\"6.2cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step1-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"写下今天 1 件最重要的事;设定预算:30 分钟。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"8.8cm\",\"width\":\"6.2cm\",\"height\":\"3.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step2-num\",\"preset\":\"ellipse\",\"fill\":\"FFB020\",\"opacity\":\"1\",\"text\":\"2\",\"font\":\"PingFang SC\",\"size\":\"20\",\"bold\":\"true\",\"color\":\"0B0F1A\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"5.3cm\",\"width\":\"1.6cm\",\"height\":\"1.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step2-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"深潜(×2)\",\"font\":\"PingFang SC\",\"size\":\"22\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.4cm\",\"width\":\"6.2cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step2-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"计时 25–45 分钟;手机离身;想刷→写到稍后清单。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"8.8cm\",\"width\":\"6.2cm\",\"height\":\"3.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step3-num\",\"preset\":\"ellipse\",\"fill\":\"5B6CFF\",\"opacity\":\"1\",\"text\":\"3\",\"font\":\"PingFang SC\",\"size\":\"20\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"5.3cm\",\"width\":\"1.6cm\",\"height\":\"1.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step3-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"缓冲(5 分钟)\",\"font\":\"PingFang SC\",\"size\":\"22\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.4cm\",\"width\":\"6.2cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step3-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"统一处理消息:删/回/记录三选一,避免无底洞。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"8.8cm\",\"width\":\"6.2cm\",\"height\":\"3.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step4-num\",\"preset\":\"ellipse\",\"fill\":\"FF4D6D\",\"opacity\":\"1\",\"text\":\"4\",\"font\":\"PingFang SC\",\"size\":\"20\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"5.3cm\",\"width\":\"1.6cm\",\"height\":\"1.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step4-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"复盘(1 分钟)\",\"font\":\"PingFang SC\",\"size\":\"22\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.4cm\",\"width\":\"6.2cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"step4-desc\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"写 1 行:预算花在哪?明天只调整一处。\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"top\",\"x\":\"36cm\",\"y\":\"8.8cm\",\"width\":\"6.2cm\",\"height\":\"3.0cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"evidence-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"三个指标,让注意力“看得见”\",\"font\":\"PingFang SC\",\"size\":\"36\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"1.2cm\",\"width\":\"31.47cm\",\"height\":\"1.4cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"evidence-caption\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"建议目标值(从你当前水平的 80% 开始)\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"7F93AA\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"2.8cm\",\"width\":\"31.47cm\",\"height\":\"0.9cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"evidence-note\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"只要记录 3 天,你就能看到趋势\",\"font\":\"PingFang SC\",\"size\":\"14\",\"bold\":\"false\",\"color\":\"7F93AA\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"3.7cm\",\"width\":\"31.47cm\",\"height\":\"0.8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviA-bg\",\"preset\":\"roundRect\",\"fill\":\"102A2C\",\"opacity\":\"1\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.80\",\"x\":\"36cm\",\"y\":\"5.0cm\",\"width\":\"19.2cm\",\"height\":\"12.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviA-num\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"≤20 次/天\",\"font\":\"PingFang SC\",\"size\":\"64\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"7.2cm\",\"width\":\"17.6cm\",\"height\":\"2.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviA-label\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"无意识打开手机\",\"font\":\"PingFang SC\",\"size\":\"20\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"10.3cm\",\"width\":\"17.6cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviB-bg\",\"preset\":\"roundRect\",\"fill\":\"2C2310\",\"opacity\":\"1\",\"line\":\"FFB020\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.80\",\"x\":\"36cm\",\"y\":\"5.0cm\",\"width\":\"11.1cm\",\"height\":\"5.9cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviB-num\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"≥90 分钟\",\"font\":\"PingFang SC\",\"size\":\"44\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.2cm\",\"width\":\"9.6cm\",\"height\":\"1.8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviB-label\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"深度工作总时长\",\"font\":\"PingFang SC\",\"size\":\"18\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"8.3cm\",\"width\":\"9.6cm\",\"height\":\"1.0cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviC-bg\",\"preset\":\"roundRect\",\"fill\":\"2C1020\",\"opacity\":\"1\",\"line\":\"FF4D6D\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.80\",\"x\":\"36cm\",\"y\":\"11.7cm\",\"width\":\"11.1cm\",\"height\":\"5.9cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviC-num\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"≤8 次\",\"font\":\"PingFang SC\",\"size\":\"44\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"12.9cm\",\"width\":\"9.6cm\",\"height\":\"1.8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"eviC-label\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"任务切换次数\",\"font\":\"PingFang SC\",\"size\":\"18\",\"bold\":\"false\",\"color\":\"B9C6D6\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"15.0cm\",\"width\":\"9.6cm\",\"height\":\"1.0cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"quote-main\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"注意力流向哪里,你就长成哪里。\",\"font\":\"PingFang SC\",\"size\":\"48\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.8cm\",\"width\":\"27.4cm\",\"height\":\"3.2cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"quote-attrib\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"— 给未来的自己\",\"font\":\"PingFang SC\",\"size\":\"18\",\"bold\":\"false\",\"color\":\"7F93AA\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"11.0cm\",\"width\":\"27.4cm\",\"height\":\"1.0cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"cta-title\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"7 天挑战:让注意力回到你手上\",\"font\":\"PingFang SC\",\"size\":\"48\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"2.0cm\",\"width\":\"27.9cm\",\"height\":\"1.8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"cta-item1\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"2BE4A8\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.35\",\"text\":\"1 记录:每天 1 次,记下无意识打开次数\",\"font\":\"PingFang SC\",\"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"6.0cm\",\"width\":\"25.9cm\",\"height\":\"2.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"cta-item2\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"FFB020\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.35\",\"text\":\"2 预算:每天 1 个额度(示例:30 分钟)\",\"font\":\"PingFang SC\",\"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"9.4cm\",\"width\":\"25.9cm\",\"height\":\"2.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"cta-item3\",\"preset\":\"roundRect\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\",\"line\":\"FF4D6D\",\"lineWidth\":\"2\",\"lineOpacity\":\"0.35\",\"text\":\"3 深度区:每天 1 个 90 分钟手机离身区块\",\"font\":\"PingFang SC\",\"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"12.8cm\",\"width\":\"25.9cm\",\"height\":\"2.6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\"name\":\"cta-footer\",\"preset\":\"rect\",\"fill\":\"000000\",\"opacity\":\"0\",\"lineOpacity\":\"0\",\"text\":\"现在就做:写下你今天的第一笔预算\",\"font\":\"PingFang SC\",\"size\":\"16\",\"bold\":\"false\",\"color\":\"7F93AA\",\"align\":\"center\",\"valign\":\"middle\",\"x\":\"36cm\",\"y\":\"16.6cm\",\"width\":\"27.4cm\",\"height\":\"0.9cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[1]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[2]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"8cm\",\"width\":\"16cm\",\"height\":\"16cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.08\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[2]\",\"props\":{\"x\":\"18cm\",\"y\":\"0cm\",\"width\":\"16cm\",\"height\":\"16cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[3]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"10cm\",\"height\":\"6cm\",\"fill\":\"FFB020\",\"opacity\":\"0.05\",\"rotation\":\"-8\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[4]\",\"props\":{\"x\":\"32.2cm\",\"y\":\"1.0cm\",\"width\":\"0.2cm\",\"height\":\"17cm\",\"fill\":\"FFFFFF\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[5]\",\"props\":{\"x\":\"2cm\",\"y\":\"2cm\",\"width\":\"30cm\",\"height\":\"0.2cm\",\"rotation\":\"18\",\"fill\":\"2BE4A8\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[6]\",\"props\":{\"x\":\"3cm\",\"y\":\"3cm\",\"width\":\"1.8cm\",\"height\":\"1.8cm\",\"fill\":\"FFB020\",\"opacity\":\"0.22\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[7]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"10cm\",\"height\":\"10cm\",\"line\":\"FF4D6D\",\"lineOpacity\":\"0.18\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[8]\",\"props\":{\"x\":\"27cm\",\"y\":\"15.8cm\",\"width\":\"6.4cm\",\"height\":\"2.6cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.10\",\"rotation\":\"12\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[9]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[10]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[11]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[12]\",\"props\":{\"x\":\"3.2cm\",\"y\":\"7.2cm\",\"width\":\"27.4cm\",\"height\":\"2.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[13]\",\"props\":{\"x\":\"5.0cm\",\"y\":\"11.8cm\",\"width\":\"23.8cm\",\"height\":\"1.2cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[2]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[3]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"12cm\",\"height\":\"12cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[2]\",\"props\":{\"x\":\"21cm\",\"y\":\"10.5cm\",\"width\":\"13cm\",\"height\":\"13cm\",\"fill\":\"FF4D6D\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[3]\",\"props\":{\"x\":\"26.4cm\",\"y\":\"2.8cm\",\"width\":\"7.2cm\",\"height\":\"14cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.05\",\"rotation\":\"6\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[4]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"17.6cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\",\"fill\":\"FFFFFF\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[5]\",\"props\":{\"x\":\"6cm\",\"y\":\"3.0cm\",\"width\":\"24cm\",\"height\":\"0.2cm\",\"rotation\":\"6\",\"fill\":\"FFB020\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[6]\",\"props\":{\"x\":\"2.0cm\",\"y\":\"3.2cm\",\"width\":\"1.2cm\",\"height\":\"1.2cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.18\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[7]\",\"props\":{\"x\":\"25.2cm\",\"y\":\"0.6cm\",\"width\":\"7.6cm\",\"height\":\"7.6cm\",\"line\":\"2BE4A8\",\"lineOpacity\":\"0.16\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[8]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"2.2cm\",\"width\":\"6.2cm\",\"height\":\"2.0cm\",\"fill\":\"FFB020\",\"opacity\":\"0.08\",\"rotation\":\"-8\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[12]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[13]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[14]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"1.2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[15]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"5.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[16]\",\"props\":{\"x\":\"1.8cm\",\"y\":\"6.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[17]\",\"props\":{\"x\":\"1.8cm\",\"y\":\"7.6cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[18]\",\"props\":{\"x\":\"12.0cm\",\"y\":\"5.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[19]\",\"props\":{\"x\":\"12.6cm\",\"y\":\"6.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[20]\",\"props\":{\"x\":\"12.6cm\",\"y\":\"7.6cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[21]\",\"props\":{\"x\":\"22.8cm\",\"y\":\"5.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[22]\",\"props\":{\"x\":\"23.4cm\",\"y\":\"6.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[23]\",\"props\":{\"x\":\"23.4cm\",\"y\":\"7.6cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[3]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[4]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"10cm\",\"width\":\"15cm\",\"height\":\"15cm\",\"fill\":\"FFB020\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[2]\",\"props\":{\"x\":\"20cm\",\"y\":\"0cm\",\"width\":\"14cm\",\"height\":\"14cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[3]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"9cm\",\"height\":\"8cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.05\",\"rotation\":\"-12\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[4]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"4.6cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\",\"fill\":\"FFFFFF\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[5]\",\"props\":{\"x\":\"3cm\",\"y\":\"17.4cm\",\"width\":\"28cm\",\"height\":\"0.2cm\",\"rotation\":\"0\",\"fill\":\"FF4D6D\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[6]\",\"props\":{\"x\":\"31.2cm\",\"y\":\"2.6cm\",\"width\":\"1.2cm\",\"height\":\"1.2cm\",\"fill\":\"FF4D6D\",\"opacity\":\"0.18\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[7]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"9.0cm\",\"height\":\"9.0cm\",\"line\":\"2BE4A8\",\"lineOpacity\":\"0.12\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[8]\",\"props\":{\"x\":\"26.8cm\",\"y\":\"15.6cm\",\"width\":\"6.6cm\",\"height\":\"2.4cm\",\"fill\":\"FFB020\",\"opacity\":\"0.08\",\"rotation\":\"8\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[14]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[15]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[16]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[17]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[18]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[19]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[20]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[21]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[22]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[23]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[24]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"1.2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[25]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"6.1cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[26]\",\"props\":{\"x\":\"3.9cm\",\"y\":\"5.3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[27]\",\"props\":{\"x\":\"1.6cm\",\"y\":\"7.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[28]\",\"props\":{\"x\":\"1.6cm\",\"y\":\"8.8cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[29]\",\"props\":{\"x\":\"12.1cm\",\"y\":\"5.3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[30]\",\"props\":{\"x\":\"9.8cm\",\"y\":\"7.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[31]\",\"props\":{\"x\":\"9.8cm\",\"y\":\"8.8cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[32]\",\"props\":{\"x\":\"20.3cm\",\"y\":\"5.3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[33]\",\"props\":{\"x\":\"18.0cm\",\"y\":\"7.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[34]\",\"props\":{\"x\":\"18.0cm\",\"y\":\"8.8cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[35]\",\"props\":{\"x\":\"28.5cm\",\"y\":\"5.3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[36]\",\"props\":{\"x\":\"26.2cm\",\"y\":\"7.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[37]\",\"props\":{\"x\":\"26.2cm\",\"y\":\"8.8cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[4]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[5]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"18cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[2]\",\"props\":{\"x\":\"23cm\",\"y\":\"9.6cm\",\"width\":\"11cm\",\"height\":\"11cm\",\"fill\":\"FFB020\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[3]\",\"props\":{\"x\":\"26.2cm\",\"y\":\"0.8cm\",\"width\":\"7.2cm\",\"height\":\"9.6cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.05\",\"rotation\":\"14\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[4]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"1.0cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\",\"fill\":\"FFFFFF\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[5]\",\"props\":{\"x\":\"6cm\",\"y\":\"17.6cm\",\"width\":\"24cm\",\"height\":\"0.2cm\",\"rotation\":\"0\",\"fill\":\"2BE4A8\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[6]\",\"props\":{\"x\":\"2.0cm\",\"y\":\"16.0cm\",\"width\":\"1.2cm\",\"height\":\"1.2cm\",\"fill\":\"FF4D6D\",\"opacity\":\"0.16\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[7]\",\"props\":{\"x\":\"24.2cm\",\"y\":\"1.0cm\",\"width\":\"8.6cm\",\"height\":\"8.6cm\",\"line\":\"2BE4A8\",\"lineOpacity\":\"0.14\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[8]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"2.2cm\",\"width\":\"6.2cm\",\"height\":\"2.0cm\",\"fill\":\"FFB020\",\"opacity\":\"0.07\",\"rotation\":\"0\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[24]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[25]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[26]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[27]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[28]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[29]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[30]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[31]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[32]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[33]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[34]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[35]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[36]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[37]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[38]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"1.2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[39]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"2.8cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[40]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"3.7cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[41]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"5.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[42]\",\"props\":{\"x\":\"2.4cm\",\"y\":\"7.2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[43]\",\"props\":{\"x\":\"2.4cm\",\"y\":\"10.3cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[44]\",\"props\":{\"x\":\"21.6cm\",\"y\":\"5.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[45]\",\"props\":{\"x\":\"22.4cm\",\"y\":\"6.2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[46]\",\"props\":{\"x\":\"22.4cm\",\"y\":\"8.3cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[47]\",\"props\":{\"x\":\"21.6cm\",\"y\":\"11.7cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[48]\",\"props\":{\"x\":\"22.4cm\",\"y\":\"12.9cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[49]\",\"props\":{\"x\":\"22.4cm\",\"y\":\"15.0cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[5]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[6]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"12cm\",\"height\":\"12cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.03\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[2]\",\"props\":{\"x\":\"22cm\",\"y\":\"10.2cm\",\"width\":\"12cm\",\"height\":\"12cm\",\"fill\":\"FFB020\",\"opacity\":\"0.03\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[3]\",\"props\":{\"x\":\"27.4cm\",\"y\":\"2.0cm\",\"width\":\"6.2cm\",\"height\":\"14.2cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.02\",\"rotation\":\"0\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[4]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"18.0cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\",\"fill\":\"FFFFFF\",\"opacity\":\"0.03\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[5]\",\"props\":{\"x\":\"36cm\",\"y\":\"0cm\",\"opacity\":\"0.03\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[6]\",\"props\":{\"x\":\"31.0cm\",\"y\":\"3.0cm\",\"width\":\"1.0cm\",\"height\":\"1.0cm\",\"fill\":\"FF4D6D\",\"opacity\":\"0.10\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[7]\",\"props\":{\"x\":\"24.8cm\",\"y\":\"0.8cm\",\"width\":\"8.2cm\",\"height\":\"8.2cm\",\"lineOpacity\":\"0.10\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[8]\",\"props\":{\"x\":\"36cm\",\"opacity\":\"0.04\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[38]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[39]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[40]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[41]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[42]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[43]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[44]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[45]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[46]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[47]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[48]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[49]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[50]\",\"props\":{\"x\":\"3.2cm\",\"y\":\"6.8cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[6]/shape[51]\",\"props\":{\"x\":\"3.2cm\",\"y\":\"11.0cm\"}}\n]\nJSON\n\nofficecli add \"$OUT\" '/' --from '/slide[6]'\ncat \u003c\u003c'JSON' | officecli batch \"$OUT\"\n[\n {\"command\":\"set\",\"path\":\"/slide[7]\",\"props\":{\"transition\":\"morph\",\"background\":\"0B0F1A\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[1]\",\"props\":{\"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"14cm\",\"height\":\"14cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[2]\",\"props\":{\"x\":\"20.5cm\",\"y\":\"10.0cm\",\"width\":\"13.5cm\",\"height\":\"13.5cm\",\"fill\":\"FFB020\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[3]\",\"props\":{\"x\":\"27.6cm\",\"y\":\"1.6cm\",\"width\":\"6.2cm\",\"height\":\"13.8cm\",\"fill\":\"5B6CFF\",\"opacity\":\"0.05\",\"rotation\":\"10\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[4]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"1.0cm\",\"width\":\"31.47cm\",\"height\":\"0.2cm\",\"opacity\":\"0.05\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[5]\",\"props\":{\"x\":\"4cm\",\"y\":\"17.4cm\",\"width\":\"26cm\",\"height\":\"0.2cm\",\"rotation\":\"-8\",\"fill\":\"FF4D6D\",\"opacity\":\"0.06\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[6]\",\"props\":{\"x\":\"2.6cm\",\"y\":\"3.0cm\",\"width\":\"1.2cm\",\"height\":\"1.2cm\",\"fill\":\"2BE4A8\",\"opacity\":\"0.16\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[7]\",\"props\":{\"x\":\"1.2cm\",\"y\":\"9.8cm\",\"width\":\"9.4cm\",\"height\":\"9.4cm\",\"line\":\"2BE4A8\",\"lineOpacity\":\"0.14\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[8]\",\"props\":{\"x\":\"26.8cm\",\"y\":\"14.8cm\",\"width\":\"6.6cm\",\"height\":\"2.4cm\",\"fill\":\"FFB020\",\"opacity\":\"0.08\",\"rotation\":\"0\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[50]\",\"props\":{\"x\":\"36cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[51]\",\"props\":{\"x\":\"36cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[52]\",\"props\":{\"x\":\"3.0cm\",\"y\":\"2.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[53]\",\"props\":{\"x\":\"4.0cm\",\"y\":\"6.0cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[54]\",\"props\":{\"x\":\"4.0cm\",\"y\":\"9.4cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[55]\",\"props\":{\"x\":\"4.0cm\",\"y\":\"12.8cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[7]/shape[56]\",\"props\":{\"x\":\"3.2cm\",\"y\":\"16.6cm\"}}\n]\nJSON\n\n\n# Validate\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUT\"\n\necho \"✅ Build complete: $OUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":33794,"content_sha256":"64f97bbcc051e0b122c6bf3af2343eaecec7f38e64332916137d72465d081b33"},{"filename":"reference/styles/dark--neon-productivity/style.md","content":"# Neon Productivity — Energetic Dark Theme\n\n## Style Overview\n\nEnergetic dark theme with multi-color neon accents and organic blob-shaped elements. Designed for productivity-focused content with vibrant color contrasts that maintain visual interest across comprehensive 7-slide structure.\n\n- **Scenario**: Productivity talks, tech workshops, motivation/self-improvement, startup pitches\n- **Mood**: Energetic, modern, productivity-focused, vibrant\n- **Tone**: Deep navy with multi-color neon accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | ----------------------------------- |\n| Background | #0B0F1A | Deep navy/black canvas |\n| Primary | #2BE4A8 | Bright cyan-green for main accents |\n| Secondary | #FFB020 | Warm orange for supporting elements |\n| Accent blue | #5B6CFF | Vivid blue-purple for highlights |\n| Accent pink | #FF4D6D | Pink-red for emphasis |\n| Primary text | #FFFFFF | White for main text |\n| Secondary text | #B0B8C8 | Light blue-gray for secondary text |\n\n## Typography\n\n| Element | Font |\n| ---------- | ----------- |\n| Title (CN) | PingFang SC |\n| Body (CN) | PingFang SC |\n\n## Design Techniques\n\n- Blob-shaped scene actors for organic feel\n- Multi-neon color accents (green, orange, blue, pink)\n- Slab and chip decorative elements\n- 7-slide comprehensive structure with timeline\n- Ring and dot small accents\n- Dark background with vibrant neon contrast\n\n## Page Structure (7 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | ---------------------------------------------- |\n| 1 | hero | 41 | Title with neon blobs and decorative elements |\n| 2 | statement | 41 | Centered statement with morphed scene actors |\n| 3 | pillars | 41 | Multi-column layout for key concepts |\n| 4 | timeline | 41 | Horizontal process flow with color-coded steps |\n| 5 | evidence | 41 | Data boxes with neon accents |\n| 6 | quote | 41 | Quotation slide with emphasis |\n| 7 | cta | 41 | Closing slide with call to action |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — neon blob scene actors establishing energetic organic aesthetic\n- **Slide 4 (timeline)** — horizontal process with color-coded steps demonstrating multi-accent system\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2643,"content_sha256":"6a28d41a766cfbbb0dac503381eda5d3169ac4753d62672e10fadc2008811138"},{"filename":"reference/styles/dark--obsidian-amber/style.md","content":"# Obsidian Amber — Dark Finance\n\n## Style Overview\n\nNear-black background with amber corner glows and huge ghost percentage numbers. TextFill titles fade white-to-amber. Finance and investment theme.\n\n- **Scenario**: Finance, investment, luxury services, premium consulting\n- **Mood**: Premium, sophisticated, mysterious, powerful\n- **Tone**: Near-black with amber accents\n\n## Design Techniques\n\n- Huge ghost percentage numbers\n- TextFill gradient (white → amber)\n- Amber corner glows\n- White cards floating on black\n- Split warm/cold panels\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":615,"content_sha256":"6af06c49237c6be9fd1d82e81e4909eef2e87ea3752ec97351fbcf1e57b80556"},{"filename":"reference/styles/dark--premium-navy/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__premium_navy.pptx\"\n\necho \"Building: dark--premium-navy (Annual Strategy Review)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=0C1B33\nGOLD=C9A84C\nNAVY=1E3A5F\nSTEEL=8EACC1\nWHITE=FFFFFF\nNAVY2=2C4F7C\nGRAY=5A7A9A\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: decorative elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bar-gold' \\\n --prop fill=$GOLD \\\n --prop x=7.9cm --prop y=11.5cm --prop width=18cm --prop height=0.08cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bar-navy' \\\n --prop fill=$NAVY \\\n --prop x=30cm --prop y=2.5cm --prop width=0.06cm --prop height=14cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!frame-gold' \\\n --prop preset=roundRect \\\n --prop fill=$GOLD \\\n --prop opacity=0.15 \\\n --prop x=24cm --prop y=1cm --prop width=8cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!frame-navy' \\\n --prop preset=roundRect \\\n --prop fill=$NAVY \\\n --prop opacity=0.3 \\\n --prop x=1.2cm --prop y=12cm --prop width=10cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!accent-gold' \\\n --prop preset=ellipse \\\n --prop fill=$GOLD \\\n --prop opacity=0.2 \\\n --prop x=28cm --prop y=14cm --prop width=3cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!accent-steel' \\\n --prop preset=ellipse \\\n --prop fill=$STEEL \\\n --prop opacity=0.15 \\\n --prop x=1.5cm --prop y=1cm --prop width=4cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-gold' \\\n --prop preset=ellipse \\\n --prop fill=$GOLD \\\n --prop opacity=0.6 \\\n --prop x=26cm --prop y=8cm --prop width=1.5cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-white' \\\n --prop preset=ellipse \\\n --prop fill=$WHITE \\\n --prop opacity=0.3 \\\n --prop x=5cm --prop y=15cm --prop width=1cm --prop height=1cm\n\n# Slide 1 hero text (visible)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-title' \\\n --prop text=\"Annual Strategy Review\" \\\n --prop font=\"Arial\" \\\n --prop size=60 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=4cm --prop width=26cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-sub' \\\n --prop text=\"Excellence in Execution\" \\\n --prop font=\"Arial\" \\\n --prop size=24 \\\n --prop color=$GOLD \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=7.8cm --prop width=26cm --prop height=2cm\n\n# Pillar card elements (hidden initially, shown on slide 3)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-num' \\\n --prop text=\"01\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop color=$GOLD \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6.2cm --prop width=4cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-title' \\\n --prop text=\"Vision\" \\\n --prop font=\"Arial\" \\\n --prop size=22 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8.8cm --prop width=6.5cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-desc' \\\n --prop text=\"Setting the direction with bold ambition and strategic foresight\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=$STEEL \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10.8cm --prop width=6.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-num' \\\n --prop text=\"02\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop color=$GOLD \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6.2cm --prop width=4cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-title' \\\n --prop text=\"Execution\" \\\n --prop font=\"Arial\" \\\n --prop size=22 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8.8cm --prop width=6.5cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-desc' \\\n --prop text=\"Delivering results through disciplined operational excellence\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=$STEEL \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10.8cm --prop width=6.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-num' \\\n --prop text=\"03\" \\\n --prop font=\"Arial\" \\\n --prop size=48 \\\n --prop color=$GOLD \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6.2cm --prop width=4cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-title' \\\n --prop text=\"Results\" \\\n --prop font=\"Arial\" \\\n --prop size=22 \\\n --prop color=$WHITE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8.8cm --prop width=6.5cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-desc' \\\n --prop text=\"Measuring impact with transparent metrics and accountability\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=$STEEL \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=10.8cm --prop width=6.5cm --prop height=4cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=2cm --prop y=9.5cm --prop width=18cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=3cm --prop y=3cm --prop height=14cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=26cm --prop y=11cm --prop width=6cm --prop height=5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=20cm --prop y=0.5cm --prop width=12cm --prop height=10cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=1cm --prop y=13cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=28cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=6cm --prop y=14cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=30cm --prop y=8cm\n\n# Update hero text to statement\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop text=\"Leading Through Change\" --prop size=54 --prop y=6cm --prop height=4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop text=\"Navigating uncertainty with clarity and purpose\" --prop size=20 --prop color=$STEEL --prop y=10.5cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=4cm --prop y=2.5cm --prop width=26cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=12.5cm --prop y=5cm --prop height=12cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop preset=roundRect --prop x=2cm --prop y=5.5cm --prop width=9cm --prop height=11cm --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop preset=roundRect --prop x=12.8cm --prop y=5.5cm --prop width=9cm --prop height=11cm --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop preset=roundRect --prop x=23.5cm --prop y=5.5cm --prop width=9cm --prop height=11cm --prop opacity=0.12 --prop fill=$NAVY2\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=30cm --prop y=1cm --prop width=2cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=1.2cm --prop y=2cm --prop width=1cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=16cm --prop y=2cm --prop width=0.6cm --prop height=0.6cm\n\n# Update title\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop text=\"Our Three Pillars\" --prop size=40 --prop align=left --prop x=2cm --prop y=0.8cm --prop width=20cm --prop height=2.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop text=\"\" --prop x=${OFFSCREEN}\n\n# Show pillar cards\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=3.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=3.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=3.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=14cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=14cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=14cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=24.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=24.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=24.8cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=1.2cm --prop y=17cm --prop width=32cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=22cm --prop y=1cm --prop height=17cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop preset=roundRect --prop x=1.2cm --prop y=3.5cm --prop width=13cm --prop height=12cm --prop opacity=0.45 --prop fill=$GOLD\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop preset=roundRect --prop x=15.5cm --prop y=3.5cm --prop width=8cm --prop height=8cm --prop opacity=0.35 --prop fill=$NAVY\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=28cm --prop y=12cm --prop width=4cm --prop height=4cm --prop opacity=0.25\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=25cm --prop y=4cm --prop width=3cm --prop height=3cm --prop opacity=0.15\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=30cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=24cm --prop y=16cm\n\n# Update title to metrics\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop text=\"Performance Metrics\" --prop size=36 --prop align=left --prop x=1.2cm --prop y=0.8cm --prop width=20cm --prop height=2.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop text=\"FY2025 Annual Results\" --prop size=16 --prop color=$GRAY --prop align=left --prop x=1.2cm --prop y=2.8cm --prop width=12cm --prop height=1.2cm\n\n# Show metrics (reuse card shapes)\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop text=\"$128M\" --prop size=64 --prop x=2.4cm --prop y=5.5cm --prop width=10cm --prop height=3.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop text=\"Revenue\" --prop size=24 --prop x=2.4cm --prop y=9cm --prop width=10cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop text=\"Year-over-year growth driven by strategic expansion\" --prop size=14 --prop x=2.4cm --prop y=11cm --prop width=10cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop text=\"34%\" --prop size=54 --prop x=16.5cm --prop y=5cm --prop width=6cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop text=\"Growth\" --prop size=22 --prop x=16.5cm --prop y=8cm --prop width=6cm --prop height=1.8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop text=\"Outpacing industry average by 2.1x\" --prop size=14 --prop x=16.5cm --prop y=9.8cm --prop width=6cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop text=\"#1\" --prop size=48 --prop x=25cm --prop y=5cm --prop width=6cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop text=\"Market Share\" --prop size=20 --prop x=25cm --prop y=8cm --prop width=6cm --prop height=1.8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop text=\"Leading position across all key segments\" --prop size=14 --prop x=25cm --prop y=9.8cm --prop width=6cm --prop height=2cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=10cm --prop y=12.5cm --prop width=14cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=16.9cm --prop y=1cm --prop height=10cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop preset=roundRect --prop x=2cm --prop y=13cm --prop width=6cm --prop height=4cm --prop opacity=0.15 --prop fill=$GOLD\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop preset=roundRect --prop x=25cm --prop y=1cm --prop width=7cm --prop height=6cm --prop opacity=0.3 --prop fill=$NAVY\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop preset=ellipse --prop x=30cm --prop y=15cm --prop width=2.5cm --prop height=2.5cm --prop opacity=0.2 --prop fill=$GOLD\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=1cm --prop y=14cm --prop width=3cm --prop height=3cm --prop opacity=0.15\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop x=8cm --prop y=16cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=26cm --prop y=10cm\n\n# Update to CTA text\nofficecli set \"$OUTPUT\" '/slide[5]/shape[9]' --prop text=\"The Road Ahead\" --prop size=60 --prop align=center --prop x=4cm --prop y=4cm --prop width=26cm --prop height=3.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[10]' --prop text=\"Building the future, together\" --prop size=22 --prop color=$GOLD --prop align=center --prop x=4cm --prop y=8cm --prop width=26cm --prop height=2cm\n\n# Hide metrics\nofficecli set \"$OUTPUT\" '/slide[5]/shape[11]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[12]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[13]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[14]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[15]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop text=\"\" --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop text=\"\" --prop x=${OFFSCREEN}\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":14738,"content_sha256":"e8fd90f8685ef1c0a385d8e09daebf21b9313be3a1a6b1104db914d1e3cd6fac"},{"filename":"reference/styles/dark--premium-navy/style.md","content":"# 05-premium-navy — Premium Navy & Gold\n\n## Style Overview\n\nDeep navy background paired with gold and steel blue accents, creating a premium enterprise-grade visual language.\n\n- **Scene**: Premium enterprise, annual strategy, board reports\n- **Mood**: Authoritative, refined, premium, trustworthy\n- **Tone**: Deep navy base + gold highlights + steel blue auxiliary\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------- | -------- | ------------------------------------------------------ |\n| Deep Navy | `0C1B33` | Background |\n| Rich Gold | `C9A84C` | Gold horizontal lines, frames, dots, number highlights |\n| Pure White | `FFFFFF` | Title text |\n| Mid Navy | `1E3A5F` | Vertical lines, frame base color |\n| Steel Blue | `8EACC1` | Accent circles, description text |\n| Navy Emphasis | `2C4F7C` | Card background |\n\n## Typography\n\n| Role | Font | Size | Color |\n| ---------------- | -------------- | ------- | ------ |\n| Main Title | Segoe UI Black | 60pt | FFFFFF |\n| Subtitle | Segoe UI Light | 24pt | C9A84C |\n| Card Number | Segoe UI Black | 48pt | C9A84C |\n| Card Title | Segoe UI Black | 22pt | FFFFFF |\n| Card Description | Segoe UI Light | 14pt | 8EACC1 |\n| Data Numbers | Segoe UI Black | 54-64pt | FFFFFF |\n| Auxiliary Notes | Segoe UI Light | 16-18pt | 8EACC1 |\n\n## Design Techniques\n\n- **Gold fine line separators**: Horizontal gold lines (height=0.08cm), vertical navy lines (width=0.06cm) building refined grid\n- **Semi-transparent frames**: `roundRect` as card background (opacity 0.12-0.45), alternating gold and navy\n- **Gold dot accents**: Small `ellipse` as visual anchors, gold opacity 0.6, white opacity 0.3\n- **High contrast on dark background**: White titles + gold subtitles, forming strong hierarchy on deep navy\n- **Morph animation**: Gold lines and frames rearrange between pages, frames transform into data area backgrounds\n\n## Scene Elements\n\n8 scene elements total, different positions on each page:\n\n| Name | preset | fill | opacity | Typical Size | Description |\n| ---------------- | --------- | ------ | ------- | ------------- | --------------------------- |\n| `!!bar-gold` | rect | C9A84C | 1.0 | 18cm x 0.08cm | Gold horizontal line |\n| `!!bar-navy` | rect | 1E3A5F | 1.0 | 0.06cm x 14cm | Navy vertical line |\n| `!!frame-gold` | roundRect | C9A84C | 0.15 | 8cm x 6cm | Gold semi-transparent frame |\n| `!!frame-navy` | roundRect | 1E3A5F | 0.30 | 10cm x 6cm | Navy semi-transparent frame |\n| `!!accent-gold` | ellipse | C9A84C | 0.20 | 3cm x 3cm | Gold accent circle |\n| `!!accent-steel` | ellipse | 8EACC1 | 0.15 | 4cm x 4cm | Steel blue accent circle |\n| `!!dot-gold` | ellipse | C9A84C | 0.60 | 1.5cm x 1.5cm | Gold small dot |\n| `!!dot-white` | ellipse | FFFFFF | 0.30 | 1cm x 1cm | White small dot |\n\n## Page Structure\n\n5 pages total, Slides 2-5 set `transition=morph`:\n\n| Slide | Type | Description |\n| ------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |\n| Slide 1 | Hero | Centered large title in white + gold subtitle, gold line across center |\n| Slide 2 | Statement | Large statement text, gold lines and frames rearranged |\n| Slide 3 | 3-Column Pillars | Gold lines as column top separators, three roundRect cards (opacity 0.12) side by side, number + title + description |\n| Slide 4 | Metrics / Performance | Gold frame enlarged as data background area, showing metrics like $128M / 34% / #1 |\n| Slide 5 | CTA / Closing | Frames shrink to corner accents, centered large title + gold subtitle |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (Hero)** — Initial layout of 8 scene actors, combination of gold lines + frames + dots\n- **Slide 3 (Pillars)** — Frames transform into card backgrounds, gold lines become column top separators\n- **Slide 4 (Metrics)** — Advanced technique of frames enlarging and changing color to data area background\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4909,"content_sha256":"636b15e46d5a1039a677ea5079030839b1c448e16e478463d215734a69affd87"},{"filename":"reference/styles/dark--sage-grain/style.md","content":"# Sage Grain — Creative Agency\n\n## Style Overview\n\nOrganic creative agency design with dark green-grey background, grain noise texture, and sparkle cross elements. Features extreme bold titles with textFill fade and white card panels for content sections.\n\n- **Scenario**: Creative agencies, design studios, boutique consultancies, organic brands, wellness companies\n- **Mood**: Organic, sophisticated, grounded, artisanal\n- **Tone**: Dark sage-grey with white and warm accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------- | ------------------------------------ |\n| Background | #1E2720 | Dark sage-grey (organic feel) |\n| White | #FFFFFF | Cards, primary text |\n| Warm | #D9B88F | Warm beige for accents |\n| Gold | #C9A86A | Muted gold for highlights |\n| Sage | #6B7F69 | Mid-tone sage green |\n| Dim | #8A9088 | Muted grey-green for supporting text |\n\n## Design Techniques\n\n- **Grain noise texture**: Scattered small ellipses at low opacity (0.02-0.03) for analog feel\n- **Sparkle cross element**: 4-line cross shape (0.08cm thickness) as decorative motif\n- **Extreme bold titles**: 56-64pt titles with textFill gradient fade\n- **White card panels**: Elevated rect panels (roundRect) with content on dark background\n- **Small section labels**: 9-10pt uppercase labels for hierarchy\n- **Alternating layouts**: Dark-full → white-card → stat-hero pattern creates rhythm\n\n## Key Morph Patterns\n\n- White panels morph in size and position across slides\n- Grain texture stays consistent (organic continuity)\n- Sparkle crosses reposition as decorative accents\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1809,"content_sha256":"f71d9617ef6b1f1aa1e61e4efabf6f8dd5fb4b8c34134b436a24f62d26e9562f"},{"filename":"reference/styles/dark--space-odyssey/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/dark__space_odyssey.pptx\"\n\necho \"Building: dark--space-odyssey (太空探索历程)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=0A0E27\nPLANET=1E3A5F\nGLOW=4A5FFF\nGOLD=FFD700\nWHITE=FFFFFF\nBLUE=4A90E2\nCYAN=00D9FF\nORANGE=F5A623\nRED=D84315\nMARS_RED=FF5722\nMARS_ORANGE=FF6B35\nPURPLE=9B59B6\nPURPLE_DARK=8E44AD\nLIGHT_BLUE=3498DB\nTEXT_GRAY=B8C5D6\nTEXT_LIGHT=D0D8E5\nTEXT_BRIGHT=E5EAF3\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: space elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!planet-main' \\\n --prop preset=ellipse \\\n --prop fill=$PLANET \\\n --prop opacity=0.3 \\\n --prop x=24cm --prop y=8cm --prop width=12cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!glow-accent' \\\n --prop preset=ellipse \\\n --prop fill=$GLOW \\\n --prop opacity=0.08 \\\n --prop x=21cm --prop y=5cm --prop width=18cm --prop height=18cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!star-1' \\\n --prop preset=star5 \\\n --prop fill=$GOLD \\\n --prop opacity=0.6 \\\n --prop x=5cm --prop y=3cm --prop width=0.8cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!star-2' \\\n --prop preset=star5 \\\n --prop fill=$WHITE \\\n --prop opacity=0.5 \\\n --prop x=8cm --prop y=7cm --prop width=0.6cm --prop height=0.6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!star-3' \\\n --prop preset=star5 \\\n --prop fill=$GOLD \\\n --prop opacity=0.7 \\\n --prop x=28cm --prop y=4cm --prop width=0.7cm --prop height=0.7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-orbit' \\\n --prop preset=ellipse \\\n --prop line=$BLUE \\\n --prop lineWidth=0.15cm \\\n --prop fill=none \\\n --prop opacity=0.3 \\\n --prop x=18cm --prop y=4cm --prop width=20cm --prop height=20cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-small' \\\n --prop preset=ellipse \\\n --prop fill=$CYAN \\\n --prop opacity=0.8 \\\n --prop x=3cm --prop y=15cm --prop width=0.4cm --prop height=0.4cm\n\n# Slide 1 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-title' \\\n --prop text='太空探索历程' \\\n --prop font=苹方-简 \\\n --prop size=68 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=4cm --prop y=6cm --prop width=26cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-subtitle' \\\n --prop text='从地球到星辰大海的伟大征程' \\\n --prop font=苹方-简 \\\n --prop size=24 \\\n --prop color=$TEXT_GRAY \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=4cm --prop y=10.5cm --prop width=26cm --prop height=2cm\n\n# Pre-create all other slide text content (off-canvas)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-statement-title' \\\n --prop text='仰望星空,是人类与生俱来的本能' \\\n --prop font=苹方-简 \\\n --prop size=42 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=28cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-statement-text' \\\n --prop text='从古代天文学家绘制星图,到伽利略用望远镜观测木星卫星,再到现代火箭技术的诞生,人类从未停止探索宇宙的脚步。20世纪中叶,太空时代的大门终于被推开。' \\\n --prop font=苹方-简 \\\n --prop size=18 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=26cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-pillar-title' \\\n --prop text='突破大气层:太空时代的黎明' \\\n --prop font=苹方-简 \\\n --prop size=32 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=2cm --prop width=28cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-year' \\\n --prop text='1957' \\\n --prop font=苹方-简 \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-title' \\\n --prop text='人造卫星' \\\n --prop font=苹方-简 \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-desc' \\\n --prop text='苏联发射斯普特尼克1号,人类第一颗人造卫星进入轨道,标志着太空时代开启' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=11.5cm --prop width=7cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-year' \\\n --prop text='1961' \\\n --prop font=苹方-简 \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-title' \\\n --prop text='载人飞行' \\\n --prop font=苹方-简 \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-desc' \\\n --prop text='尤里·加加林乘坐东方1号完成108分钟环绕地球飞行,成为第一个进入太空的人类' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=11.5cm --prop width=7cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-year' \\\n --prop text='1965' \\\n --prop font=苹方-简 \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=8cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-title' \\\n --prop text='太空行走' \\\n --prop font=苹方-简 \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-desc' \\\n --prop text='列昂诺夫完成人类首次舱外活动,在太空中漂浮12分钟' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=11.5cm --prop width=7cm --prop height=4cm\n\n# Slide 4 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text='月球征程' \\\n --prop font=苹方-简 \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=20cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-quote' \\\n --prop text='这是一个人的一小步,却是人类的一大步' \\\n --prop font=苹方-简 \\\n --prop size=32 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop align=left \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=6.5cm --prop width=18cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-data1' \\\n --prop text='1969年7月20日,阿波罗11号成功登月,38万公里的旅程' \\\n --prop font=苹方-简 \\\n --prop size=20 \\\n --prop color=$TEXT_BRIGHT \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=11cm --prop width=18cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-data2' \\\n --prop text='6次成功登月任务(1969-1972)' \\\n --prop font=苹方-简 \\\n --prop size=18 \\\n --prop color=$TEXT_GRAY \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=14.5cm --prop width=18cm --prop height=2cm\n\n# Slide 5 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text='空间站时代:在轨道上生活' \\\n --prop font=苹方-简 \\\n --prop size=32 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=28cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station1-title' \\\n --prop text='和平号空间站' \\\n --prop font=苹方-简 \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station1-year' \\\n --prop text='1986-2001' \\\n --prop font=苹方-简 \\\n --prop size=20 \\\n --prop color=$CYAN \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station1-desc' \\\n --prop text='运行15年,累计接待137名宇航员,证明人类可以在太空长期生活' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=7.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station2-title' \\\n --prop text='国际空间站' \\\n --prop font=苹方-简 \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station2-year' \\\n --prop text='1998-至今' \\\n --prop font=苹方-简 \\\n --prop size=20 \\\n --prop color=$BLUE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station2-desc' \\\n --prop text='16国合作,400km轨道高度,持续有人驻守超过23年' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=7.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station3-title' \\\n --prop text='中国空间站' \\\n --prop font=苹方-简 \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=8cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station3-year' \\\n --prop text='2021-至今' \\\n --prop font=苹方-简 \\\n --prop size=20 \\\n --prop color=5865F2 \\\n --prop align=center \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=8cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-station3-desc' \\\n --prop text='自主研发,T字构型,可容纳3-6名航天员长期工作' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=C0CAD9 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=7.5cm --prop height=4cm\n\n# Slide 6 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-title' \\\n --prop text='火星梦想' \\\n --prop font=苹方-简 \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=15cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-subtitle' \\\n --prop text='下一个人类的家园' \\\n --prop font=苹方-简 \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=FF8A65 \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=15cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-section-title' \\\n --prop text='探测器先行' \\\n --prop font=苹方-简 \\\n --prop size=22 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=9.5cm --prop width=14cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-point1' \\\n --prop text='已有10+个火星探测器成功着陆,毅力号、祝融号正在工作' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=11cm --prop width=14cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-point2' \\\n --prop text='技术突破 | SpaceX星舰可重复使用,NASA Artemis重返月球为火星铺路' \\\n --prop font=苹方-简 \\\n --prop size=16 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=left \\\n --prop valign=top \\\n --prop x=$OFFSCREEN --prop y=13.5cm --prop width=14cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-timeline' \\\n --prop text='2030年代' \\\n --prop font=苹方-简 \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$GOLD \\\n --prop align=right \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=8cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-timeline-text' \\\n --prop text='NASA计划实现载人登陆火星' \\\n --prop font=苹方-简 \\\n --prop size=18 \\\n --prop color=$WHITE \\\n --prop align=right \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=10cm --prop height=2cm\n\n# Slide 7 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s7-title' \\\n --prop text='征途未完' \\\n --prop font=苹方-简 \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=26cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s7-text' \\\n --prop text='从第一颗卫星到空间站,从月球漫步到火星梦想,人类的探索永不止步。星辰大海,就在前方。' \\\n --prop font=苹方-简 \\\n --prop size=20 \\\n --prop color=$TEXT_GRAY \\\n --prop align=center \\\n --prop valign=middle \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=26cm --prop height=5cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=2cm --prop y=2cm --prop width=8cm --prop height=8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=0cm --prop y=0cm --prop width=15cm --prop height=15cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=26cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=29cm --prop y=14cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=10cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=$OFFSCREEN --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=28cm --prop y=17cm\n\n# Hide slide 1 content, show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=$OFFSCREEN --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=$OFFSCREEN --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop x=3cm --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[11]' --prop x=4cm --prop y=8.5cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph scene actors - create card backgrounds\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop preset=roundRect --prop fill=2A4A6F --prop opacity=0.12 --prop width=8cm --prop height=11cm --prop x=2.5cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop preset=roundRect --prop fill=2A4A6F --prop opacity=0.12 --prop width=8cm --prop height=11cm --prop x=13cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=24cm --prop y=12cm --prop width=0.6cm --prop height=0.6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=18cm --prop y=3cm --prop width=0.5cm --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=30cm --prop y=8cm --prop width=0.7cm --prop height=0.7cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=$OFFSCREEN --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop preset=roundRect --prop fill=2A4A6F --prop opacity=0.12 --prop width=8cm --prop height=11cm --prop x=23.5cm --prop y=5cm\n\n# Hide previous content, show slide 3 content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=2.5cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=2.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=2.5cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=3cm --prop y=11.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=13cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=13cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=13.5cm --prop y=11.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=23.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=23.5cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[21]' --prop x=24cm --prop y=11.5cm\n\n# ============================================\n# SLIDE 4 - SHOWCASE\n# ============================================\necho \"Building Slide 4: Showcase...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph scene actors - moon theme\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop preset=ellipse --prop fill=$ORANGE --prop opacity=0.15 --prop width=14cm --prop height=14cm --prop x=20cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop preset=ellipse --prop fill=$GOLD --prop opacity=0.05 --prop width=10cm --prop height=10cm --prop x=23cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=2cm --prop y=15cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=31cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=5cm --prop y=4cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=$OFFSCREEN --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop preset=ellipse --prop fill=$ORANGE --prop opacity=0.4 --prop width=1.2cm --prop height=1.2cm --prop x=2cm --prop y=2cm\n\n# Hide previous content, show slide 4 content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=2.5cm --prop y=2.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=2.5cm --prop y=6.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=2.5cm --prop y=11cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=2.5cm --prop y=14.5cm\n\n# ============================================\n# SLIDE 5 - PILLARS (SPACE STATIONS)\n# ============================================\necho \"Building Slide 5: Space Stations...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph scene actors - station cards\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop preset=rect --prop fill=$CYAN --prop opacity=0.08 --prop width=9cm --prop height=10cm --prop x=2cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop preset=rect --prop fill=$BLUE --prop opacity=0.08 --prop width=9cm --prop height=10cm --prop x=12.5cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=6cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=15cm --prop y=17cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=25cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop preset=ellipse --prop fill=$CYAN --prop opacity=0.08 --prop line=none --prop width=8cm --prop height=8cm --prop x=14cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop preset=rect --prop fill=5865F2 --prop opacity=0.08 --prop width=9cm --prop height=10cm --prop x=23cm --prop y=5.5cm\n\n# Hide previous content, show slide 5 content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=2cm --prop y=2.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=2.5cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=2.5cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[29]' --prop x=2.8cm --prop y=10.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=13cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[31]' --prop x=13cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[32]' --prop x=13.3cm --prop y=10.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[33]' --prop x=23.5cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[34]' --prop x=23.5cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[35]' --prop x=23.8cm --prop y=10.5cm\n\n# ============================================\n# SLIDE 6 - EVIDENCE (MARS)\n# ============================================\necho \"Building Slide 6: Mars Dream...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[6]' --prop transition=morph\n\n# Morph scene actors - Mars theme\nofficecli set \"$OUTPUT\" '/slide[6]/shape[1]' --prop preset=ellipse --prop fill=$RED --prop opacity=0.5 --prop width=18cm --prop height=18cm --prop x=18cm --prop y=2cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[2]' --prop preset=ellipse --prop fill=$MARS_RED --prop opacity=0.2 --prop width=12cm --prop height=12cm --prop x=21cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[3]' --prop fill=FFB74D --prop x=4cm --prop y=3cm --prop width=0.5cm --prop height=0.5cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[4]' --prop fill=$WHITE --prop x=8cm --prop y=16cm --prop width=0.4cm --prop height=0.4cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[5]' --prop fill=FF6B35 --prop x=12cm --prop y=2cm --prop width=0.6cm --prop height=0.6cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[6]' --prop x=$OFFSCREEN --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[7]' --prop preset=ellipse --prop fill=$MARS_ORANGE --prop opacity=0.15 --prop width=3cm --prop height=3cm --prop x=2cm --prop y=15cm\n\n# Hide all previous content, show slide 6 content\nofficecli set \"$OUTPUT\" '/slide[6]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[23]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[24]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[25]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[26]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[27]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[28]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[29]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[30]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[31]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[32]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[33]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[34]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[35]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[6]/shape[36]' --prop x=2cm --prop y=2.5cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[37]' --prop x=2cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[38]' --prop x=2cm --prop y=9.5cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[39]' --prop x=2cm --prop y=11cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[40]' --prop x=2cm --prop y=13.5cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[41]' --prop x=21cm --prop y=8cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[42]' --prop x=21cm --prop y=10.5cm\n\n# ============================================\n# SLIDE 7 - CTA\n# ============================================\necho \"Building Slide 7: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[7]' --prop transition=morph\n\n# Morph scene actors - journey continues\nofficecli set \"$OUTPUT\" '/slide[7]/shape[1]' --prop preset=ellipse --prop fill=$PLANET --prop opacity=0.2 --prop width=16cm --prop height=16cm --prop x=10cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[2]' --prop preset=ellipse --prop fill=$PURPLE --prop opacity=0.12 --prop width=20cm --prop height=20cm --prop x=8cm --prop y=1cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[3]' --prop x=30cm --prop y=2cm --prop width=0.9cm --prop height=0.9cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[4]' --prop x=3cm --prop y=5cm --prop width=0.7cm --prop height=0.7cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[5]' --prop x=26cm --prop y=16cm --prop width=0.8cm --prop height=0.8cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[6]' --prop preset=ellipse --prop fill=$PURPLE_DARK --prop opacity=0.08 --prop line=none --prop width=24cm --prop height=24cm --prop x=6cm --prop y=0cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[7]' --prop preset=ellipse --prop fill=$LIGHT_BLUE --prop opacity=0.7 --prop width=0.5cm --prop height=0.5cm --prop x=16cm --prop y=9cm\n\n# Hide all content except final message\nofficecli set \"$OUTPUT\" '/slide[7]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[23]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[24]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[25]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[26]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[27]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[28]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[29]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[30]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[31]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[32]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[33]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[34]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[35]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[36]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[37]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[38]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[39]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[40]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[41]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[42]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[7]/shape[43]' --prop x=4cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[7]/shape[44]' --prop x=4cm --prop y=10cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":32203,"content_sha256":"fe6c67fc7335e465f0d216a199e0f43456e4203d8d93521f0b6014077737e521"},{"filename":"reference/styles/dark--space-odyssey/style.md","content":"# Space Odyssey — Cosmic Exploration\n\n## Style Overview\n\nAn epic cosmic design featuring a planetary sphere with orbital rings, stars, and space-themed color progression. Extensive ghost mechanism enables complex 7-slide narratives with consistent visual elements.\n\n- **Scenario**: Space/astronomy presentations, science education, exploration narratives, technology showcases\n- **Mood**: Cosmic, inspiring, epic, exploratory\n- **Tone**: Deep space blue with gold and cyan accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | ------------------------------------------- |\n| Background | #0A0E27 | Deep space navy |\n| Planet | #1E3A5F | Dark blue for planetary sphere |\n| Glow | #4A5FFF | Electric blue (opacity 0.08) for atmosphere |\n| Star gold | #FFD700 | Gold for star decorations |\n| Dot cyan | #00D9FF | Cyan for accent dots |\n| Orbit line | #4A90E2 | Blue for orbital ring |\n| Primary text | #FFFFFF | White for headings |\n| Secondary text | #B8C5D6 | Light blue-gray for body text |\n\n## Typography\n\n| Element | Font |\n| --------------- | --------------------- |\n| Title (Chinese) | PingFang SC (苹方-简) |\n| Body (Chinese) | PingFang SC |\n\n## Design Techniques\n\n- Planetary sphere as main scene actor\n- Orbital ring line decoration for cosmic context\n- Star decorations (star5 preset) with varying sizes and opacity\n- Extensive ghost mechanism (25+ actors pre-defined on slide 1)\n- Space-themed color progression across slides\n- 7-slide narrative structure for comprehensive storytelling\n\n## Page Structure (7 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | ------------------------------------------- |\n| 1 | hero | 32 | Planet with stars and orbital ring |\n| 2 | statement | 32 | Centered quote with shifted planet position |\n| 3 | pillars | 32 | 3-column with numbering on space background |\n| 4 | showcase | 32 | Featured display with inspirational quote |\n| 5 | pillars | 32 | Second pillar set for additional content |\n| 6 | evidence | 32 | Data points display with cosmic backdrop |\n| 7 | cta | 32 | Closing with full cosmic scene |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — planetary sphere + orbital ring + star field composition\n- **Slide 3 (pillars)** — numbered 3-column layout on space background\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2894,"content_sha256":"c7809561ffe97391e3b0484405be725b97a4ff6bc4c4d775a718d05376dbb516"},{"filename":"reference/styles/dark--spotlight-stage/build.sh","content":"#!/bin/bash\nset -e\n\n# ============================================================\n# S18 Spotlight Stage — AI Agent Platform 智能体平台发布\n# Style: S18 Spotlight Stage | BG=0A0A0A | shapes=ellipse+rect | morph=spotlight sweep 15cm+ | font=Montserrat Bold/Inter\n# 5 slides: hero -> statement -> pillars -> evidence -> cta\n# Method A: independent per-slide construction. NO animations.\n# transition=morph on S2-S5.\n#\n# Spotlight positions (15cm+ moves between slides):\n# S1 (9,1.5) -> S2 (25,3): 16.1cm\n# S2 (25,3) -> S3 (1,3): 24cm\n# S3 (1,3) -> S4 (18,3): 17cm\n# S4 (18,3) -> S5 (2,2): 16.0cm\n# ============================================================\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nDECK=\"$SCRIPT_DIR/dark__spotlight_stage.pptx\"\n\n# Clean & create\nrm -f \"$DECK\"\nofficecli create \"$DECK\"\n\n# ===================== SLIDE 1: hero =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=0A0A0A\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"spotlight\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.12\",\n \"x\":\"9cm\",\"y\":\"1.5cm\",\"width\":\"16cm\",\"height\":\"16cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"warm-glow\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.06\",\n \"x\":\"11cm\",\"y\":\"3.5cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-top\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"4cm\",\"y\":\"0.5cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-bottom\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"4cm\",\"y\":\"18.5cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot1\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"2cm\",\"y\":\"3cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot2\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"31cm\",\"y\":\"5cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot3\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"5cm\",\"y\":\"16cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot4\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"30cm\",\"y\":\"15cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"text\":\"AI Agent Platform\",\"font\":\"Montserrat Bold\",\n \"size\":\"56\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"4.5cm\",\"width\":\"26cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"text\":\"智能体平台发布\",\"font\":\"Montserrat Bold\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"8.5cm\",\"width\":\"26cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"text\":\"让智能体为你工作\",\"font\":\"Inter\",\n \"size\":\"20\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"12cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 2: statement =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=0A0A0A --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"spotlight\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.12\",\n \"x\":\"25cm\",\"y\":\"3cm\",\"width\":\"16cm\",\"height\":\"16cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"warm-glow\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.06\",\n \"x\":\"27cm\",\"y\":\"5cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-top\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"3cm\",\"y\":\"0.5cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-bottom\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"5cm\",\"y\":\"18.5cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot1\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"4cm\",\"y\":\"5cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot2\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"8cm\",\"y\":\"16cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot3\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"3cm\",\"y\":\"14cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot4\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"20cm\",\"y\":\"1cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"text\":\"从自动化到自主化\",\"font\":\"Montserrat Bold\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"2cm\",\"y\":\"5.5cm\",\"width\":\"30cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"text\":\"AI Agent 正在重新定义人机协作的边界\",\"font\":\"Inter\",\n \"size\":\"20\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"10.5cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 3: pillars =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=0A0A0A --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"spotlight\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.12\",\n \"x\":\"1cm\",\"y\":\"3cm\",\"width\":\"16cm\",\"height\":\"16cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"warm-glow\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.06\",\n \"x\":\"3cm\",\"y\":\"5cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-top\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"5cm\",\"y\":\"0.3cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-bottom\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"3cm\",\"y\":\"18.7cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot1\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"28cm\",\"y\":\"2cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot2\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"32cm\",\"y\":\"10cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot3\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"26cm\",\"y\":\"17cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot4\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"30cm\",\"y\":\"4cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"三大核心能力\",\"font\":\"Montserrat Bold\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\n \"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"20cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"01\",\"font\":\"Montserrat Bold\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"FFE0B2\",\"align\":\"center\",\n \"x\":\"1.2cm\",\"y\":\"4cm\",\"width\":\"9cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"感知\",\"font\":\"Montserrat Bold\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"1.2cm\",\"y\":\"6.5cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"多模态输入理解\\n实时环境感知\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"1.2cm\",\"y\":\"8.5cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"02\",\"font\":\"Montserrat Bold\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"FFE0B2\",\"align\":\"center\",\n \"x\":\"12.5cm\",\"y\":\"4cm\",\"width\":\"9cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"推理\",\"font\":\"Montserrat Bold\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"12.5cm\",\"y\":\"6.5cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"链式思维规划\\n动态策略生成\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"12.5cm\",\"y\":\"8.5cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"03\",\"font\":\"Montserrat Bold\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"FFE0B2\",\"align\":\"center\",\n \"x\":\"23.8cm\",\"y\":\"4cm\",\"width\":\"9cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"执行\",\"font\":\"Montserrat Bold\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"23.8cm\",\"y\":\"6.5cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"工具调用编排\\n闭环反馈迭代\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"23.8cm\",\"y\":\"8.5cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 4: evidence =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=0A0A0A --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"spotlight\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.12\",\n \"x\":\"18cm\",\"y\":\"3cm\",\"width\":\"16cm\",\"height\":\"16cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"warm-glow\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.06\",\n \"x\":\"20cm\",\"y\":\"5cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-top\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"2cm\",\"y\":\"0.4cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-bottom\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"6cm\",\"y\":\"18.6cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot1\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"1cm\",\"y\":\"8cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot2\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"5cm\",\"y\":\"17cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot3\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"14cm\",\"y\":\"1cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot4\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"10cm\",\"y\":\"15cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平台数据\",\"font\":\"Montserrat Bold\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"left\",\n \"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"20cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.45\",\n \"x\":\"1.2cm\",\"y\":\"4cm\",\"width\":\"14cm\",\"height\":\"14cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"10M+\",\"font\":\"Montserrat Bold\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"1.2cm\",\"y\":\"6cm\",\"width\":\"14cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"智能体调用次数\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"1.2cm\",\"y\":\"10cm\",\"width\":\"14cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.35\",\n \"x\":\"19cm\",\"y\":\"3cm\",\"width\":\"10cm\",\"height\":\"10cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"99.95%\",\"font\":\"Montserrat Bold\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"19cm\",\"y\":\"4.5cm\",\"width\":\"10cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平台可用性\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"19cm\",\"y\":\"7.5cm\",\"width\":\"10cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"50ms\",\"font\":\"Montserrat Bold\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"FFE0B2\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"14cm\",\"width\":\"10cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平均响应延迟\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"17cm\",\"width\":\"10cm\",\"height\":\"1.5cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 5: cta =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=0A0A0A --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"spotlight\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\"opacity\":\"0.12\",\n \"x\":\"2cm\",\"y\":\"2cm\",\"width\":\"16cm\",\"height\":\"16cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"warm-glow\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.06\",\n \"x\":\"4cm\",\"y\":\"4cm\",\"width\":\"12cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-top\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"4cm\",\"y\":\"0.6cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"stage-bottom\",\"preset\":\"rect\",\"fill\":\"333333\",\"opacity\":\"0.4\",\n \"x\":\"4cm\",\"y\":\"18.4cm\",\"width\":\"25cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot1\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"28cm\",\"y\":\"3cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot2\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"25cm\",\"y\":\"14cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot3\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"32cm\",\"y\":\"8cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"dot4\",\"preset\":\"ellipse\",\"fill\":\"FFE0B2\",\"opacity\":\"0.15\",\n \"x\":\"20cm\",\"y\":\"17cm\",\"width\":\"0.3cm\",\"height\":\"0.3cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"text\":\"开始构建你的智能体\",\"font\":\"Montserrat Bold\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"4.5cm\",\"width\":\"26cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"text\":\"platform.ai/agents | 立即体验\",\"font\":\"Inter\",\n \"size\":\"20\",\"color\":\"CCCCCC\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"10cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== VALIDATE =====================\nofficecli validate \"$DECK\"\nofficecli view \"$DECK\" outline\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":16429,"content_sha256":"2203bb1701fc6790fe6bd2b21d2bd165e1876b85368b0c01a54cd2dfbaefddbc"},{"filename":"reference/styles/dark--spotlight-stage/style.md","content":"# S18-spotlight-stage — Stage Spotlight\n\n## Style Overview\n\nLarge elliptical light spots on a near-black background simulate stage spotlight effects, with spots shifting dramatically between pages to create dramatic atmosphere.\n\n- **Scene**: Speeches, product launches, TED-style, annual meetings\n- **Mood**: Dramatic, focused, theatrical\n- **Color Tone**: Near-black background + warm white/gold spotlight\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------------------------ | --------------------------- |\n| Near Black | 0A0A0A | Background (stage darkness) |\n| Spotlight | Warm white/gold gradient | Spotlight beam |\n\n## Design Techniques\n\n- Spotlights implemented using large ellipses, shifting 15cm+ between pages, creating beam-sweeping effect during Morph transitions\n- Use ellipse for light spots and halos, rect for stage elements (floor lines, text panels)\n- Multiple ellipse layers overlay to simulate halo diffusion (bright center, faint edges)\n- Text placed in spotlight center area, dark areas left empty, guiding visual focus\n\n## Reference Script\n\nFull build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Spotlight ellipse size, position, and transparency settings\n- **Slide 2 (statement)** — Morph transition effect with large spot shifts\n- **Slide 5 (cta)** — Multi-light layering for stage finale effect\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1565,"content_sha256":"9d77013b2510a8a5677e05004072673c791da9e35026033c5a3cef62cad43776"},{"filename":"reference/styles/dark--velvet-rose/style.md","content":"# Velvet Rose — Luxury Brand\n\n## Style Overview\n\nDeep plum background with ghost large letterforms and thin arc decorations. Gold textFill fade creates elegant depth.\n\n- **Scenario**: Luxury brands, premium fashion, high-end retail, elegant showcases\n- **Mood**: Luxurious, elegant, sophisticated, refined\n- **Tone**: Deep plum with gold accents\n\n## Design Techniques\n\n- Ghost large letterforms\n- Thin arc shapes as elegant decoration\n- GOLD textFill fade (partially vanishes into dark bg)\n- Split warm/cool panels\n- Breathable open layouts\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":612,"content_sha256":"ed17112e29f4091112ec5219116878186b19ffadc600fbbcebdae5391a24315b"},{"filename":"reference/styles/INDEX.md","content":"# Style Index\n\nThe Agent uses this table to quickly select a reference style based on the topic. After selecting, read `\u003cdirectory>/style.md` to understand the design philosophy; read `build.sh` when you need an implementation reference.\n\n**Important Notice**:\n\n- The build.sh scripts in these styles are **for reference of design techniques only** (color schemes, shapes, Morph choreography)\n- Some scripts have text overlap, layout misalignment, and other typesetting issues -- **do not copy coordinates and dimensions verbatim**\n- When generating, you must follow the design principles in `pptx-design.md` (text readability, spacing, alignment, etc.)\n- **Learn the approach, do not copy the code**\n\n---\n\n**Primary hex column**: bg / fg / accent — sampled from each style's `build.sh`. Use this to eyeball-match a user-specified brand color before opening any `style.md`. `-` = style has only `style.md` (no build script to extract from).\n\n## Dark Palette (dark)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| ------------------------ | ------------------------ | ------------------------------ | --------------------------------------------------------------- | --------------------------------------- |\n| dark--liquid-flow | Liquid Light | `#0F0F2D / #6C63FF / #48E5C2` | Brand upgrades, creative launches, fashion showcases | Fluid, dreamy, avant-garde |\n| dark--premium-navy | Premium Navy & Gold | `#0C1B33 / #C9A84C / #1E3A5F` | High-end corporate, annual strategy, board presentations | Authoritative, refined, premium |\n| dark--investor-pitch | Investor Pitch Pro | `#1A1A2E / #0F3460 / #16213E` | Investor pitches, fundraising decks, business plans | Professional, trustworthy, composed |\n| dark--cosmic-neon | Cosmic Neon | `#050510 / #8A2BE2 / #00FFFF` | Science talks, futuristic topics, physics, cosmic themes | Sci-fi, mysterious, futuristic, neon |\n| dark--editorial-story | Editorial Magazine Story | `#FFFFFF / #2C3E50 / #E74C3C` | Brand storytelling, editorial magazines, content releases | Narrative, artistic, premium |\n| dark--tech-cosmos | Tech Cosmos | `-` | Tech talks, architecture reviews, scientific presentations | Futuristic, scientific, cosmic |\n| dark--blueprint-grid | Blueprint Grid | `#1B3A5C / #4A90D9 / #FFFFFF` | Technical planning, engineering blueprints, system architecture | Precise, professional, engineered |\n| dark--diagonal-cut | Diagonal Industrial Cut | `#1A1A1A / #FF6600 / #FFCC00` | Industrial, engineering, construction, manufacturing | Rugged, powerful, bold |\n| dark--spotlight-stage | Spotlight Stage | `#0A0A0A / #FFFFFF / #FFE0B2` | Keynotes, launch events, TED-style talks, galas | Dramatic, focused, theatrical |\n| dark--cyber-future | Cyber Future | `#0B0C10 / #66FCF1 / #1F2833` | Futuristic topics, tech vision, cyberpunk, AI/robotics | Futuristic, cyberpunk, immersive |\n| dark--circle-digital | Dark Digital Agency | `#0D0E11 / #171A20 / #22252E` | Digital marketing, creative agencies, tech companies | Modern, dark-cool, digital |\n| dark--architectural-plan | Architectural Plan | `#FFFFFF / #18293B / #B5D5E3` | Architectural design, business plans, real estate development | Professional, structured, architectural |\n| dark--luxury-minimal | Luxury Minimal | `#111111 / #D4AF37 / #FFFFFF` | Luxury brands, premium products, high-end corporate | Luxurious, minimalist, sophisticated |\n| dark--space-odyssey | Space Odyssey | `#0A0E27 / #1E3A5F / #4A5FFF` | Space/astronomy, science education, exploration narratives | Cosmic, inspiring, epic, exploratory |\n| dark--neon-productivity | Neon Productivity | `#0B0F1A / #2BE4A8 / #FFB020` | Productivity talks, tech workshops, motivation, startups | Energetic, modern, vibrant |\n| dark--midnight-blueprint | Midnight Blueprint | `#080B2A / #181B55 / #131650` | Architecture firms, professional services, luxury real estate | Sophisticated, architectural, premium |\n| dark--sage-grain | Sage Grain | `#1E2720 / #FFFFFF / #D9B88F` | Creative agencies, boutique consultancies, organic brands | Organic, sophisticated, artisanal |\n| dark--obsidian-amber | Obsidian Amber | `-` | Finance, investment, luxury services, premium consulting | Premium, sophisticated, powerful |\n| dark--velvet-rose | Velvet Rose | `-` | Luxury brands, premium fashion, high-end retail | Luxurious, elegant, refined |\n| dark--aurora-softedge | Aurora Softedge | `-` | Design portfolios, creative showcases, art galleries | Aurora-like, dreamy, artistic |\n\n## Light Palette (light)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| --------------------------- | ------------------------ | ------------------------------ | --------------------------------------------------------- | ----------------------------------- |\n| light--minimal-corporate | Minimal Corporate Report | `#FFFFFF / #E8EEF4 / #1E3A5F` | Annual reports, work summaries, business proposals | Professional, clean, composed |\n| light--minimal-product | Minimal Product Showcase | `#FAFAFA / #00B894 / #2D3436` | Product launches, tech showcases, brand introductions | Modern, minimalist, premium |\n| light--project-proposal | Project Proposal | `#E8EEF4 / #1E3A5F / #D4A84B` | Project kickoffs, business proposals, bid presentations | Professional, trustworthy, rigorous |\n| light--bold-type | Bold Typography | `#F2F2F2 / #1A1A1A / #E8E8E8` | Editorial layouts, magazine-style, brand manuals | Bold, modern, editorial |\n| light--isometric-clean | Isometric Clean Tech | `#F0F4F8 / #E8ECF1 / #4A90D9` | Tech products, SaaS platforms, data presentations | Fresh, modern, techy |\n| light--spring-launch | Spring Launch Fresh | `#E8F5E9 / #4CAF50 / #8BC34A` | Spring launches, new product releases, seasonal marketing | Fresh, natural, vibrant |\n| light--training-interactive | Interactive Training | `#FFF9E6 / #FF6B6B / #4ECDC4` | Corporate training, online courses, knowledge sharing | Educational, interactive, friendly |\n| light--watercolor-wash | Watercolor Wash | `#FFFDF7 / #7AADCF / #E8A87C` | Art, cultural creative, tea ceremony, weddings | Soft, poetic, artistic |\n| light--firmwise-saas | Firmwise SaaS | `#EFF2F7 / #7B3FF2 / #FFFFFF` | SaaS platforms, productivity tools, B2B software | Clean, efficient, trustworthy |\n| light--glassmorphism-vc | Glassmorphism VC | `-` | VC funds, investment decks, fintech, startup pitches | Modern, premium, sophisticated |\n| light--fluid-gradient | Fluid Gradient | `-` | AI/tech products, SaaS platforms, modern software | Fluid, tech-forward, dynamic |\n\n## Warm Palette (warm)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| ------------------------ | ------------------ | ------------------------------ | ----------------------------------------------------------------- | -------------------------------- |\n| warm--earth-organic | Earth & Sage | `#F5F0E8 / #8B6F47 / #A8C686` | Eco-friendly, sustainability, organic brands | Warm, sincere, natural |\n| warm--minimal-brand | Minimal Brand | `-` | Brand introductions, product launches, premium brand showcases | Warm, refined, minimalist |\n| warm--brand-refresh | Brand Refresh | `#F5F0E8 / #162040 / #1A6BFF` | Brand launches, corporate image updates, creative proposals | Fashionable, colorful, modern |\n| warm--creative-marketing | Creative Marketing | `-` | Marketing campaigns, ad creatives, poster-style PPTs | Bold, impactful, expressive |\n| warm--playful-organic | Playful Organic | `#FFF8E7 / #3D3B3C / #FFFFFF` | Lifestyle, pet/animal topics, children's education, storytelling | Warm, playful, friendly |\n| warm--sunset-mosaic | Sunset Mosaic | `-` | Engineering, infrastructure, B2B corporate, construction | Professional, warm, grounded |\n| warm--coral-culture | Coral Culture | `-` | Company culture decks, HR presentations, team showcases | Warm, cultural, human-centered |\n| warm--monument-editorial | Monument Editorial | `-` | Architecture, luxury brands, editorial magazines, studio branding | Monumental, refined, typographic |\n| warm--vital-bloom | Vital Bloom | `-` | Wellness apps, yoga studios, mindful living, organic brands | Organic, vibrant, healthy |\n| warm--bloom-academy | Bloom Academy | `-` | Education, e-learning, children's content, playful branding | Playful, educational, friendly |\n\n## Vivid Palette (vivid)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| ------------------------ | ----------------------- | ------------------------------ | ----------------------------------------------------- | ------------------------------- |\n| vivid--candy-stripe | Rainbow Candy Stripe | `#FFFFFF / #FF5252 / #FF7B39` | Event celebrations, holidays, children's education | Joyful, lively, rainbow |\n| vivid--playful-marketing | Vibrant Youth Marketing | `#FFFFFF / #FF6B6B / #4ECDC4` | Marketing campaigns, new product promos, sales events | Youthful, energetic, passionate |\n| vivid--energy-neon | Energy Neon | `#E8E8E8 / #00FF41 / #111111` | Conferences, energy summits, tech events, editorial | Energetic, impactful, modern |\n| vivid--pink-editorial | Pink Editorial | `#160B33 / #7B2D52 / #C85080` | Annual reports, data journalism, editorial showcases | Contemporary, editorial, bold |\n| vivid--bauhaus-electric | Bauhaus Electric | `-` | Creative agencies, design studios, bold branding | Bold, energetic, electric |\n\n## Black & White (bw)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| ----------------- | ------------- | ------------------------------ | ------------------------------------------------------------ | ------------------------------ |\n| bw--mono-line | Minimal Line | `#FFFFFF / #1A1A1A / #C8C8C8` | Minimalist corporate, academic reports, consulting proposals | Calm, restrained, professional |\n| bw--swiss-bauhaus | Swiss Bauhaus | `#E63322 / #1C1C1C / #F5F5F5` | Design agencies, architecture firms, art exhibitions | Rational, rigorous, classic |\n| bw--brutalist-raw | Brutalist Raw | `#FFFFFF / #000000 / #FF0000` | Avant-garde art shows, experimental design, indie brands | Rebellious, rugged, impactful |\n| bw--swiss-system | Swiss System | `#FFFFFF / #000000 / #FF0000` | Corporate, finance, consulting, professional services | Clean, systematic, bold |\n\n## Mixed Palette (mixed)\n\n| Directory | Style Name | Primary hex (bg / fg / accent) | Best For | Mood |\n| --------------------------- | -------------------- | ------------------------------ | ------------------------------------------------------- | --------------------------------- |\n| mixed--duotone-split | Duotone Split | `#FFFFFF / #2D3436 / #E17055` | Brand launches, architectural design, premium showcases | Bold, architectural, minimal |\n| mixed--chromatic-aberration | Chromatic Aberration | `#050814 / #0A1030 / #00F5E4` | Tech startups, AI platforms, creative technology | Futuristic, glitch, cyber |\n| mixed--bauhaus-blocks | Bauhaus Color Block | `#F0EBE0 / #1D5C38 / #F4C040` | Creative studios, design portfolios, branding agencies | Bold, modernist, geometric |\n| mixed--spectral-grid | Spectral Grid | `-` | Creative tech, innovation showcases, design conferences | Vibrant, innovative, experimental |\n\n---\n\n## Quick Lookup by Use Case\n\n| Use Case | Recommended Styles |\n| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Tech / AI / SaaS** | dark--tech-cosmos, dark--cyber-future, light--isometric-clean, mixed--chromatic-aberration, light--firmwise-saas, light--fluid-gradient |\n| **Investment / Pitch / Fundraising** | dark--investor-pitch, dark--premium-navy, light--project-proposal, light--glassmorphism-vc, dark--obsidian-amber |\n| **Corporate / Business / Reports** | light--minimal-corporate, light--minimal-product, dark--premium-navy, vivid--pink-editorial, warm--sunset-mosaic, warm--coral-culture |\n| **Brand / Launch / Marketing** | warm--brand-refresh, warm--creative-marketing, vivid--playful-marketing, warm--minimal-brand, vivid--bauhaus-electric |\n| **Design / Architecture / Art** | bw--swiss-bauhaus, bw--brutalist-raw, dark--architectural-plan, mixed--duotone-split, dark--midnight-blueprint, mixed--bauhaus-blocks, dark--aurora-softedge, warm--monument-editorial |\n| **Education / Training / Courseware** | light--training-interactive, warm--playful-organic, vivid--candy-stripe, warm--bloom-academy |\n| **Keynotes / Launch Events / Galas** | dark--spotlight-stage, dark--liquid-flow, vivid--energy-neon |\n| **Creative Agency / Studio** | dark--sage-grain, mixed--bauhaus-blocks, dark--circle-digital, vivid--bauhaus-electric, mixed--spectral-grid |\n| **Developer / Technical** | dark--cyber-future, dark--blueprint-grid, dark--tech-cosmos |\n| **Eco / Nature / Organic** | warm--earth-organic, warm--minimal-brand, light--spring-launch |\n| **Cultural Creative / Magazine / Story** | dark--editorial-story, light--watercolor-wash, light--bold-type, warm--monument-editorial |\n| **Sci-Fi / Space / Futuristic** | dark--space-odyssey, dark--cosmic-neon, dark--cyber-future |\n| **Luxury / Premium** | dark--luxury-minimal, dark--premium-navy, warm--minimal-brand, dark--velvet-rose |\n| **Productivity / Motivation** | dark--neon-productivity, dark--cyber-future |\n| **Wellness / Health / Lifestyle** | warm--vital-bloom, warm--playful-organic, light--spring-launch |\n| **Finance / Investment** | dark--obsidian-amber, dark--investor-pitch, light--glassmorphism-vc |\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":17649,"content_sha256":"4a8ffdc368c69b02b768d362d1b267deb63c44ffe4c99a042151298895ecbdb4"},{"filename":"reference/styles/light--bold-type/build.sh","content":"#!/bin/bash\nset -e\n\n# Build script for 08-bold-type\n# Typography-driven design — HUGE text IS the visual element\n# Inspired by FONIAS / editorial magazine layouts\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nDECK=\"$SCRIPT_DIR/light__bold_type.pptx\"\n\n# Create deck + Slide 1 (blank, light warm gray background)\nrm -f \"$DECK\"\nofficecli create \"$DECK\" && \\\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F2F2F2\n\n# ═══════════════════════════════════════════════════════════════\n# SLIDE 1 — HERO: \"MAKE IT BOLD\" / \"Design Studio\"\n# Giant \"01\" bottom-right, giant \"B\" top-left, red accent line\n# ═══════════════════════════════════════════════════════════════\n\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-num\",\"text\":\"01\",\"font\":\"Segoe UI Black\",\"size\":\"200\",\n \"color\":\"1A1A1A\",\"opacity\":\"0.06\",\"bold\":\"true\",\n \"x\":\"18cm\",\"y\":\"4cm\",\"width\":\"18cm\",\"height\":\"16cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-letter\",\"text\":\"B\",\"font\":\"Segoe UI Black\",\"size\":\"300\",\n \"color\":\"E8E8E8\",\"opacity\":\"0.08\",\"bold\":\"true\",\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"22cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-h\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"4cm\",\"y\":\"11.2cm\",\"width\":\"10cm\",\"height\":\"0.1cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-v\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"3.4cm\",\"y\":\"4cm\",\"width\":\"0.1cm\",\"height\":\"6cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-gray-h\",\"preset\":\"rect\",\"fill\":\"1A1A1A\",\n \"x\":\"4cm\",\"y\":\"17.5cm\",\"width\":\"15cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!dot-red\",\"preset\":\"ellipse\",\"fill\":\"FF3C38\",\n \"x\":\"30cm\",\"y\":\"16cm\",\"width\":\"1.5cm\",\"height\":\"1.5cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!hero-title\",\"text\":\"MAKE IT BOLD\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"4cm\",\"y\":\"4.5cm\",\"width\":\"26cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!hero-subtitle\",\"text\":\"Design Studio\",\"font\":\"Segoe UI Light\",\n \"size\":\"24\",\"color\":\"1A1A1A\",\n \"x\":\"4cm\",\"y\":\"8.8cm\",\"width\":\"20cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[1]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"left\"}},\n {\"command\":\"set\",\"path\":\"/slide[1]/shape[8]/paragraph[1]\",\"props\":{\"align\":\"left\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# SLIDE 2 — STATEMENT: \"Less Noise. More Signal.\"\n# Giant \"02\" shifts left, giant letter moves right\n# Red line stretches wide, centered layout\n# ═══════════════════════════════════════════════════════════════\n\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F2F2F2\n\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-num\",\"text\":\"02\",\"font\":\"Segoe UI Black\",\"size\":\"200\",\n \"color\":\"1A1A1A\",\"opacity\":\"0.06\",\"bold\":\"true\",\n \"x\":\"0cm\",\"y\":\"2cm\",\"width\":\"18cm\",\"height\":\"16cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-letter\",\"text\":\"N\",\"font\":\"Segoe UI Black\",\"size\":\"300\",\n \"color\":\"E8E8E8\",\"opacity\":\"0.08\",\"bold\":\"true\",\n \"x\":\"20cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"22cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-h\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"5cm\",\"y\":\"12.8cm\",\"width\":\"24cm\",\"height\":\"0.1cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-v\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"32cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"8cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-gray-h\",\"preset\":\"rect\",\"fill\":\"1A1A1A\",\n \"x\":\"10cm\",\"y\":\"5.8cm\",\"width\":\"15cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!dot-red\",\"preset\":\"ellipse\",\"fill\":\"FF3C38\",\n \"x\":\"2cm\",\"y\":\"15cm\",\"width\":\"1.5cm\",\"height\":\"1.5cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!statement-title\",\"text\":\"Less Noise.\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"5cm\",\"y\":\"6.2cm\",\"width\":\"26cm\",\"height\":\"3.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!statement-sub\",\"text\":\"More Signal.\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"FF3C38\",\n \"x\":\"5cm\",\"y\":\"9.2cm\",\"width\":\"26cm\",\"height\":\"3.5cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"left\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[8]/paragraph[1]\",\"props\":{\"align\":\"left\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# SLIDE 3 — PILLARS: \"Identity / Motion / Print\"\n# Giant \"03\" centered behind content, three-column editorial grid\n# Thin red lines as column dividers\n# ═══════════════════════════════════════════════════════════════\n\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F2F2F2\n\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-num\",\"text\":\"03\",\"font\":\"Segoe UI Black\",\"size\":\"200\",\n \"color\":\"1A1A1A\",\"opacity\":\"0.06\",\"bold\":\"true\",\n \"x\":\"8cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"16cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-letter\",\"text\":\"M\",\"font\":\"Segoe UI Black\",\"size\":\"300\",\n \"color\":\"E8E8E8\",\"opacity\":\"0.08\",\"bold\":\"true\",\n \"x\":\"0cm\",\"y\":\"4cm\",\"width\":\"18cm\",\"height\":\"22cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-h\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"1.2cm\",\"y\":\"3.8cm\",\"width\":\"31cm\",\"height\":\"0.1cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-v\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"11.8cm\",\"y\":\"5cm\",\"width\":\"0.1cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-gray-h\",\"preset\":\"rect\",\"fill\":\"1A1A1A\",\n \"x\":\"22.6cm\",\"y\":\"5cm\",\"width\":\"0.04cm\",\"height\":\"12cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!dot-red\",\"preset\":\"ellipse\",\"fill\":\"FF3C38\",\n \"x\":\"31cm\",\"y\":\"1.2cm\",\"width\":\"1.5cm\",\"height\":\"1.5cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!pillars-title\",\"text\":\"What We Do\",\"font\":\"Segoe UI Black\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"1.2cm\",\"y\":\"1cm\",\"width\":\"16cm\",\"height\":\"2.4cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col1-num\",\"text\":\"01\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FF3C38\",\n \"x\":\"1.2cm\",\"y\":\"5.2cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col1-title\",\"text\":\"Identity\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"1.2cm\",\"y\":\"8cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col1-desc\",\"text\":\"Brand systems that speak with clarity and purpose.\",\"font\":\"Segoe UI Light\",\n \"size\":\"16\",\"color\":\"1A1A1A\",\n \"x\":\"1.2cm\",\"y\":\"10.2cm\",\"width\":\"9cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col2-num\",\"text\":\"02\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FF3C38\",\n \"x\":\"12.8cm\",\"y\":\"5.2cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col2-title\",\"text\":\"Motion\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"12.8cm\",\"y\":\"8cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col2-desc\",\"text\":\"Animation and video that capture attention instantly.\",\"font\":\"Segoe UI Light\",\n \"size\":\"16\",\"color\":\"1A1A1A\",\n \"x\":\"12.8cm\",\"y\":\"10.2cm\",\"width\":\"9cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col3-num\",\"text\":\"03\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FF3C38\",\n \"x\":\"23.6cm\",\"y\":\"5.2cm\",\"width\":\"9cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col3-title\",\"text\":\"Print\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"23.6cm\",\"y\":\"8cm\",\"width\":\"9cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!col3-desc\",\"text\":\"Editorial layouts that demand to be read and remembered.\",\"font\":\"Segoe UI Light\",\n \"size\":\"16\",\"color\":\"1A1A1A\",\n \"x\":\"23.6cm\",\"y\":\"10.2cm\",\"width\":\"9cm\",\"height\":\"4cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"left\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# SLIDE 4 — EVIDENCE: \"340+ Projects / 28 Awards / Since 2015\"\n# Giant \"04\" top-right, asymmetric layout with big numbers\n# Red accent as underline for metrics\n# ═══════════════════════════════════════════════════════════════\n\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F2F2F2\n\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-num\",\"text\":\"04\",\"font\":\"Segoe UI Black\",\"size\":\"200\",\n \"color\":\"1A1A1A\",\"opacity\":\"0.06\",\"bold\":\"true\",\n \"x\":\"16cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"16cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-letter\",\"text\":\"P\",\"font\":\"Segoe UI Black\",\"size\":\"300\",\n \"color\":\"E8E8E8\",\"opacity\":\"0.08\",\"bold\":\"true\",\n \"x\":\"0cm\",\"y\":\"6cm\",\"width\":\"18cm\",\"height\":\"22cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-h\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"2cm\",\"y\":\"9cm\",\"width\":\"6cm\",\"height\":\"0.1cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-v\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"16cm\",\"y\":\"1cm\",\"width\":\"0.1cm\",\"height\":\"17cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-gray-h\",\"preset\":\"rect\",\"fill\":\"1A1A1A\",\n \"x\":\"18cm\",\"y\":\"15cm\",\"width\":\"14cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!dot-red\",\"preset\":\"ellipse\",\"fill\":\"FF3C38\",\n \"x\":\"14cm\",\"y\":\"0.8cm\",\"width\":\"1.5cm\",\"height\":\"1.5cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!evidence-title\",\"text\":\"The Numbers\",\"font\":\"Segoe UI Black\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"2cm\",\"y\":\"1.2cm\",\"width\":\"12cm\",\"height\":\"2.4cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric1-num\",\"text\":\"340+\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"2cm\",\"y\":\"4cm\",\"width\":\"12cm\",\"height\":\"4.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric1-label\",\"text\":\"Projects Delivered\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"1A1A1A\",\n \"x\":\"2cm\",\"y\":\"9.4cm\",\"width\":\"12cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric2-num\",\"text\":\"28\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"FF3C38\",\n \"x\":\"18cm\",\"y\":\"2cm\",\"width\":\"14cm\",\"height\":\"4.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric2-label\",\"text\":\"Awards Won\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"1A1A1A\",\n \"x\":\"18cm\",\"y\":\"6.5cm\",\"width\":\"14cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric3-num\",\"text\":\"2015\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"18cm\",\"y\":\"10cm\",\"width\":\"14cm\",\"height\":\"4.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!metric3-label\",\"text\":\"Founded\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"1A1A1A\",\n \"x\":\"18cm\",\"y\":\"14.2cm\",\"width\":\"14cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"left\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# SLIDE 5 — CTA: \"[email protected]\"\n# Giant \"05\" fills center, minimal clean layout\n# Red dot as focal punctuation, lines frame edges\n# ═══════════════════════════════════════════════════════════════\n\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F2F2F2\n\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-num\",\"text\":\"05\",\"font\":\"Segoe UI Black\",\"size\":\"200\",\n \"color\":\"1A1A1A\",\"opacity\":\"0.06\",\"bold\":\"true\",\n \"x\":\"8cm\",\"y\":\"2cm\",\"width\":\"18cm\",\"height\":\"16cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!giant-letter\",\"text\":\"X\",\"font\":\"Segoe UI Black\",\"size\":\"300\",\n \"color\":\"E8E8E8\",\"opacity\":\"0.08\",\"bold\":\"true\",\n \"x\":\"22cm\",\"y\":\"0cm\",\"width\":\"18cm\",\"height\":\"22cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-h\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"12cm\",\"y\":\"14cm\",\"width\":\"10cm\",\"height\":\"0.1cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-red-v\",\"preset\":\"rect\",\"fill\":\"FF3C38\",\n \"x\":\"1.2cm\",\"y\":\"6cm\",\"width\":\"0.1cm\",\"height\":\"10cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!line-gray-h\",\"preset\":\"rect\",\"fill\":\"1A1A1A\",\n \"x\":\"8cm\",\"y\":\"4cm\",\"width\":\"18cm\",\"height\":\"0.04cm\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!dot-red\",\"preset\":\"ellipse\",\"fill\":\"FF3C38\",\n \"x\":\"16cm\",\"y\":\"10.5cm\",\"width\":\"1.5cm\",\"height\":\"1.5cm\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!cta-heading\",\"text\":\"Get in Touch\",\"font\":\"Segoe UI Black\",\n \"size\":\"72\",\"bold\":\"true\",\"color\":\"1A1A1A\",\n \"x\":\"4cm\",\"y\":\"5cm\",\"width\":\"26cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!cta-email\",\"text\":\"[email protected]\",\"font\":\"Segoe UI Light\",\n \"size\":\"24\",\"color\":\"FF3C38\",\n \"x\":\"4cm\",\"y\":\"9.5cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!cta-tagline\",\"text\":\"Bold ideas start with a conversation.\",\"font\":\"Segoe UI Light\",\n \"size\":\"16\",\"color\":\"1A1A1A\",\n \"x\":\"4cm\",\"y\":\"14.5cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"center\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[8]/paragraph[1]\",\"props\":{\"align\":\"center\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[9]/paragraph[1]\",\"props\":{\"align\":\"center\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# SET MORPH TRANSITIONS on slides 2-5\n# ═══════════════════════════════════════════════════════════════\n\necho '[\n {\"command\":\"set\",\"path\":\"/slide[2]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]\",\"props\":{\"transition\":\"morph\"}}\n]' | officecli batch \"$DECK\"\n\n# ═══════════════════════════════════════════════════════════════\n# VALIDATE & OUTLINE\n# ═══════════════════════════════════════════════════════════════\n\nofficecli validate \"$DECK\"\nofficecli view \"$DECK\" outline\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":18363,"content_sha256":"b52a23a2bdd308b06f28773bd1020c31801961136f90ac62d430bb9143c4f852"},{"filename":"reference/styles/light--bold-type/style.md","content":"# 08-bold-type — Bold Typography\n\n## Style Overview\n\nUsing oversized text (200pt/300pt) to replace geometric shapes as visual protagonists, driven by editorial typography tension.\n\n- **Scene**: Editorial typography, magazine style, brand manual\n- **Mood**: Bold, modern, dynamic, editorial\n- **Color Tone**: Warm gray base + near black + red accent\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------- | -------- | ---------------------------------------------------- |\n| Warm Light Gray | `F2F2F2` | Background |\n| Near Black | `1A1A1A` | Title text, giant numbers (opacity 0.06), thin lines |\n| Light Gray | `E8E8E8` | Giant letters (opacity 0.08) |\n| Red Accent | `FF3C38` | Red lines, red dots, accent text |\n\n## Typography\n\n| Role | Font | Size | Color |\n| -------------------------- | -------------- | ------- | -------------------- |\n| Giant Numbers (decorative) | Segoe UI Black | 200pt | 1A1A1A, opacity 0.06 |\n| Giant Letters (decorative) | Segoe UI Black | 300pt | E8E8E8, opacity 0.08 |\n| Large Title | Segoe UI Black | 72pt | 1A1A1A |\n| Section Title | Segoe UI Black | 36pt | 1A1A1A |\n| Number | Segoe UI Black | 48pt | FF3C38 |\n| Section Subtitle | Segoe UI Black | 28pt | 1A1A1A |\n| Data Numbers | Segoe UI Black | 72pt | 1A1A1A / FF3C38 |\n| Subtitle/Body | Segoe UI Light | 16-24pt | 1A1A1A |\n| Accent Subtitle | Segoe UI Black | 72pt | FF3C38 |\n\n## Design Techniques\n\n- **Giant Text as Scene Actor**: Using 200pt numbers (01-05) and 300pt letters (B/N/M/P/X) to replace traditional geometric decorations, extremely low opacity (0.06/0.08) forms background texture\n- **Red Line System**: Red horizontal lines (height=0.1cm) and vertical lines (width=0.1cm) serve as editorial grid markers\n- **Black Thin Lines**: Ultra-thin black lines (height=0.04cm) as auxiliary separators\n- **Red Dots**: 1.5cm red `ellipse` as visual punctuation/focal points\n- **Each Page Independently Created**: Unlike other templates, 5 pages are created separately (not copied from Slide 1), each page has independent giant text content\n- **Morph Transition**: Giant numbers and letters morph across pages under the same `!!name`, when number changes from 01 to 02 the position transitions smoothly\n\n## Scene Elements\n\n6 scene elements total (same name on each page but different content):\n\n| Name | Type | Fill | Description |\n| ---------------- | ---------- | -------------------- | -------------------------------------------------------------------- |\n| `!!giant-num` | text shape | 1A1A1A, opacity 0.06 | 200pt page number (01/02/03/04/05), different position on each page |\n| `!!giant-letter` | text shape | E8E8E8, opacity 0.08 | 300pt decorative letter (B/N/M/P/X), different position on each page |\n| `!!line-red-h` | rect | FF3C38 | Red horizontal line, length and position vary per page |\n| `!!line-red-v` | rect | FF3C38 | Red vertical line, length and position vary per page |\n| `!!line-gray-h` | rect | 1A1A1A | Black ultra-thin line, auxiliary separator |\n| `!!dot-red` | ellipse | FF3C38 | 1.5cm red dot, drifts to different positions per page |\n\n## Page Structure\n\n5 pages total, Slides 2-5 set `transition=morph`:\n\n| Slide | Type | Giant Text | Description |\n| ------- | ------------------ | ---------- | ------------------------------------------------------------------------------------------ |\n| Slide 1 | Hero | 01 + B | \"MAKE IT BOLD\" large title left-aligned, red line L-shape frames title area |\n| Slide 2 | Statement | 02 + N | \"Less Noise. / More Signal.\" double-line large text, second line in red |\n| Slide 3 | 3-Column Pillars | 03 + M | Red and black lines as column separators, three columns Identity/Motion/Print |\n| Slide 4 | Evidence / Metrics | 04 + P | Asymmetric layout, left side 340+ large number, right side 28/2015, red lines divide zones |\n| Slide 5 | CTA / Closing | 05 + X | Centered \"Get in Touch\" + red email, red line frames bottom |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (Hero)** — Core innovation of giant numbers+letters as scene actors, red line L-shape composition\n- **Slide 3 (Pillars)** — Editorial typography technique using red/black lines as column separators\n- **Slide 4 (Evidence)** — Asymmetric data layout, red vertical line runs through entire page\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5285,"content_sha256":"869ea46d3993ad6ee3c019c765fa732eb864907a3fb4587b2dea1c9c32da61a1"},{"filename":"reference/styles/light--firmwise-saas/style.md","content":"# Firmwise SaaS — Clean Efficiency\n\n## Style Overview\n\nClean minimal SaaS design with light blue-grey background and electric purple accents. Features chamfered-corner cards (cut top-right) and 3-column stat layouts.\n\n- **Scenario**: SaaS platforms, productivity tools, B2B software, efficiency dashboards\n- **Mood**: Clean, efficient, modern, trustworthy\n- **Tone**: Light blue-grey with electric purple accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------- | --------------- |\n| Background | #EFF2F7 | Light blue-grey |\n| Primary | #7B3FF2 | Electric purple |\n| White | #FFFFFF | Cards, text |\n| Dark | #2C3E50 | Primary text |\n| Dim | #8B9AA8 | Supporting text |\n\n## Design Techniques\n\n- Chamfered-corner cards (cut top-right corner)\n- 3-column stat layout\n- Clean minimal spacing\n- Electric purple as accent color\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":956,"content_sha256":"db693ab4b3a06cec51be8e072862207c6b16cbe6b8d09175c70c737d32194d35"},{"filename":"reference/styles/light--fluid-gradient/style.md","content":"# Fluid Gradient — Tech Product\n\n## Style Overview\n\nSmooth gradient backgrounds with fan of rotated rays, halftone dots, and orbital ellipses. Modern tech aesthetic.\n\n- **Scenario**: AI/tech products, SaaS platforms, modern software\n- **Mood**: Fluid, modern, tech-forward, dynamic\n- **Tone**: Gradient backgrounds with bright accents\n\n## Design Techniques\n\n- Gradient backgrounds\n- Rotated thin rects (ray fan)\n- Dot-grid halftone\n- Orbital ring decoration\n- !!orb (bright ellipse) travels\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":562,"content_sha256":"b5ec68f3eb6a8bd9cc2297c7be571db27be75bdfc9e83a1a384661667d5e7a2b"},{"filename":"reference/styles/light--glassmorphism-vc/style.md","content":"# Glassmorphism VC — Investment Fund\n\n## Style Overview\n\nSky blue background with 3D gradient spheres and frosted glass roundRect cards. Modern glassmorphism aesthetic.\n\n- **Scenario**: VC funds, investment decks, fintech, startup pitches\n- **Mood**: Modern, premium, sophisticated, trustworthy\n- **Tone**: Light blue with gradient spheres\n\n## Design Techniques\n\n- Glassmorphism cards (semi-transparent roundRect)\n- 3D gradient spheres\n- Stacked sphere clusters\n- Bar charts with gradient bars\n- Frosted glass effect\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":588,"content_sha256":"d71c6abdd9ee7a7e6ecf5b68aea7006192ed714243b92cef3c6b9533470cb7b1"},{"filename":"reference/styles/light--isometric-clean/build.sh","content":"#!/bin/bash\nset -e\n\n# ============================================================\n# S23 Isometric Clean — AI Agent Platform 智能体平台发布\n# Style: S23 Isometric Clean | BG=F0F4F8 | shapes=diamond+rect | morph=block slide | font=Inter Bold\n# 5 slides: hero → statement → pillars → evidence → cta\n# Method A: independent per-slide construction. NO animations.\n# transition=morph on S2-S5.\n# ============================================================\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nDECK=\"$SCRIPT_DIR/light__isometric_clean.pptx\"\n\n# Clean & create\nrm -f \"$DECK\"\nofficecli create \"$DECK\"\n\n# ===================== SLIDE 1: hero =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F0F4F8\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"E8ECF1\",\"opacity\":\"0.50\",\n \"x\":\"12cm\",\"y\":\"10cm\",\"width\":\"10cm\",\"height\":\"6cm\",\"name\":\"platform\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.85\",\n \"x\":\"14cm\",\"y\":\"5cm\",\"width\":\"6cm\",\"height\":\"3.5cm\",\"name\":\"blockA-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"67C7EB\",\"opacity\":\"0.80\",\n \"x\":\"17cm\",\"y\":\"7cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"2C5F8A\",\"opacity\":\"0.80\",\n \"x\":\"14cm\",\"y\":\"7cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-left\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"F5A623\",\"opacity\":\"0.80\",\n \"x\":\"2cm\",\"y\":\"12cm\",\"width\":\"5cm\",\"height\":\"3cm\",\"name\":\"blockB-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"F5A623\",\"opacity\":\"0.55\",\n \"x\":\"4.5cm\",\"y\":\"14cm\",\"width\":\"2.5cm\",\"height\":\"3cm\",\"name\":\"blockB-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.60\",\n \"x\":\"26cm\",\"y\":\"3cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallA\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.60\",\n \"x\":\"28cm\",\"y\":\"14cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallB\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.40\",\n \"x\":\"0cm\",\"y\":\"2cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallC\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"text\":\"AI Agent Platform\",\"font\":\"Inter\",\n \"size\":\"60\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"1.5cm\",\"width\":\"26cm\",\"height\":\"3.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"text\":\"智能体平台发布\",\"font\":\"Inter\",\n \"size\":\"28\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"5.5cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 2: statement =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F0F4F8 --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"E8ECF1\",\"opacity\":\"0.50\",\n \"x\":\"1cm\",\"y\":\"12cm\",\"width\":\"10cm\",\"height\":\"6cm\",\"name\":\"platform\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.85\",\n \"x\":\"2cm\",\"y\":\"7cm\",\"width\":\"6cm\",\"height\":\"3.5cm\",\"name\":\"blockA-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"67C7EB\",\"opacity\":\"0.80\",\n \"x\":\"5cm\",\"y\":\"9cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"2C5F8A\",\"opacity\":\"0.80\",\n \"x\":\"2cm\",\"y\":\"9cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-left\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"F5A623\",\"opacity\":\"0.80\",\n \"x\":\"25cm\",\"y\":\"2cm\",\"width\":\"5cm\",\"height\":\"3cm\",\"name\":\"blockB-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"F5A623\",\"opacity\":\"0.55\",\n \"x\":\"27.5cm\",\"y\":\"4cm\",\"width\":\"2.5cm\",\"height\":\"3cm\",\"name\":\"blockB-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.60\",\n \"x\":\"30cm\",\"y\":\"14cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallA\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.60\",\n \"x\":\"20cm\",\"y\":\"0.8cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallB\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.40\",\n \"x\":\"32cm\",\"y\":\"8cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallC\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"text\":\"从自动化到自主化\",\"font\":\"Inter\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"6cm\",\"y\":\"4.5cm\",\"width\":\"24cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[2]\",\"type\":\"shape\",\"props\":{\n \"text\":\"AI Agent 正在重新定义人机协作的边界\",\"font\":\"Inter\",\n \"size\":\"20\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"8cm\",\"y\":\"9cm\",\"width\":\"22cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 3: pillars =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F0F4F8 --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"E8ECF1\",\"opacity\":\"0.50\",\n \"x\":\"8cm\",\"y\":\"14cm\",\"width\":\"10cm\",\"height\":\"6cm\",\"name\":\"platform\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.12\",\n \"x\":\"1.2cm\",\"y\":\"4.5cm\",\"width\":\"9cm\",\"height\":\"5.5cm\",\"name\":\"blockA-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.12\",\n \"x\":\"12.5cm\",\"y\":\"4.5cm\",\"width\":\"9cm\",\"height\":\"5.5cm\",\"name\":\"blockA-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.12\",\n \"x\":\"23.8cm\",\"y\":\"4.5cm\",\"width\":\"9cm\",\"height\":\"5.5cm\",\"name\":\"blockA-left\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"F5A623\",\"opacity\":\"0.60\",\n \"x\":\"30cm\",\"y\":\"0.8cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"blockB-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.40\",\n \"x\":\"0cm\",\"y\":\"16cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"blockB-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.60\",\n \"x\":\"0cm\",\"y\":\"0.8cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallA\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.40\",\n \"x\":\"32cm\",\"y\":\"16cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallB\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"F5A623\",\"opacity\":\"0.55\",\n \"x\":\"15cm\",\"y\":\"16cm\",\"width\":\"2.5cm\",\"height\":\"3cm\",\"name\":\"smallC\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"三大核心能力\",\"font\":\"Inter\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"left\",\n \"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"20cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"01\",\"font\":\"Inter\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"4A90D9\",\"align\":\"center\",\n \"x\":\"3cm\",\"y\":\"5cm\",\"width\":\"5cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"感知\",\"font\":\"Inter\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"2cm\",\"y\":\"7.2cm\",\"width\":\"7.2cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"多模态输入理解\\n实时环境感知\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"2cm\",\"y\":\"9cm\",\"width\":\"7.2cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"02\",\"font\":\"Inter\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"67C7EB\",\"align\":\"center\",\n \"x\":\"14.5cm\",\"y\":\"5cm\",\"width\":\"5cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"推理\",\"font\":\"Inter\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"13.2cm\",\"y\":\"7.2cm\",\"width\":\"7.2cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"链式思维规划\\n动态策略生成\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"13.2cm\",\"y\":\"9cm\",\"width\":\"7.2cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"03\",\"font\":\"Inter\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"F5A623\",\"align\":\"center\",\n \"x\":\"25.8cm\",\"y\":\"5cm\",\"width\":\"5cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"执行\",\"font\":\"Inter\",\n \"size\":\"24\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"24.5cm\",\"y\":\"7.2cm\",\"width\":\"7.2cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[3]\",\"type\":\"shape\",\"props\":{\n \"text\":\"工具调用编排\\n闭环反馈迭代\",\"font\":\"Inter\",\n \"size\":\"16\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"24.5cm\",\"y\":\"9cm\",\"width\":\"7.2cm\",\"height\":\"2.5cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 4: evidence =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F0F4F8 --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.45\",\n \"x\":\"0cm\",\"y\":\"3cm\",\"width\":\"16cm\",\"height\":\"10cm\",\"name\":\"platform\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"2C5F8A\",\"opacity\":\"0.40\",\n \"x\":\"0cm\",\"y\":\"10cm\",\"width\":\"8cm\",\"height\":\"8cm\",\"name\":\"blockA-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.35\",\n \"x\":\"20cm\",\"y\":\"1cm\",\"width\":\"14cm\",\"height\":\"8cm\",\"name\":\"blockA-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"67C7EB\",\"opacity\":\"0.30\",\n \"x\":\"28cm\",\"y\":\"7cm\",\"width\":\"6cm\",\"height\":\"6cm\",\"name\":\"blockA-left\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"F5A623\",\"opacity\":\"0.60\",\n \"x\":\"16cm\",\"y\":\"14cm\",\"width\":\"5cm\",\"height\":\"3cm\",\"name\":\"blockB-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"E8ECF1\",\"opacity\":\"0.40\",\n \"x\":\"28cm\",\"y\":\"14cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"blockB-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.50\",\n \"x\":\"18cm\",\"y\":\"0cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallA\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.35\",\n \"x\":\"12cm\",\"y\":\"16cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallB\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.30\",\n \"x\":\"32cm\",\"y\":\"12cm\",\"width\":\"2cm\",\"height\":\"1.2cm\",\"name\":\"smallC\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平台数据\",\"font\":\"Inter\",\n \"size\":\"36\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"left\",\n \"x\":\"1.2cm\",\"y\":\"0.8cm\",\"width\":\"14cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"10M+\",\"font\":\"Inter\",\n \"size\":\"68\",\"bold\":\"true\",\"color\":\"FFFFFF\",\"align\":\"center\",\n \"x\":\"1cm\",\"y\":\"5cm\",\"width\":\"13cm\",\"height\":\"3.5cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"智能体调用次数\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"E8ECF1\",\"align\":\"center\",\n \"x\":\"1cm\",\"y\":\"8.5cm\",\"width\":\"13cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"99.95%\",\"font\":\"Inter\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"3cm\",\"width\":\"13cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平台可用性\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"6cm\",\"width\":\"13cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"50ms\",\"font\":\"Inter\",\n \"size\":\"44\",\"bold\":\"true\",\"color\":\"F5A623\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"10cm\",\"width\":\"13cm\",\"height\":\"3cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[4]\",\"type\":\"shape\",\"props\":{\n \"text\":\"平均响应延迟\",\"font\":\"Inter\",\n \"size\":\"18\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"20cm\",\"y\":\"13cm\",\"width\":\"13cm\",\"height\":\"1.8cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== SLIDE 5: cta =====================\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=F0F4F8 --prop transition=morph\n\ncat \u003c\u003c'BATCH' | officecli batch \"$DECK\"\n[\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"E8ECF1\",\"opacity\":\"0.50\",\n \"x\":\"18cm\",\"y\":\"12cm\",\"width\":\"10cm\",\"height\":\"6cm\",\"name\":\"platform\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.85\",\n \"x\":\"22cm\",\"y\":\"7cm\",\"width\":\"6cm\",\"height\":\"3.5cm\",\"name\":\"blockA-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"67C7EB\",\"opacity\":\"0.80\",\n \"x\":\"25cm\",\"y\":\"9cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"2C5F8A\",\"opacity\":\"0.80\",\n \"x\":\"22cm\",\"y\":\"9cm\",\"width\":\"3cm\",\"height\":\"4cm\",\"name\":\"blockA-left\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"F5A623\",\"opacity\":\"0.80\",\n \"x\":\"0cm\",\"y\":\"4cm\",\"width\":\"5cm\",\"height\":\"3cm\",\"name\":\"blockB-top\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"rect\",\"fill\":\"F5A623\",\"opacity\":\"0.55\",\n \"x\":\"2.5cm\",\"y\":\"6cm\",\"width\":\"2.5cm\",\"height\":\"3cm\",\"name\":\"blockB-right\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"67C7EB\",\"opacity\":\"0.60\",\n \"x\":\"2cm\",\"y\":\"14cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallA\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"4A90D9\",\"opacity\":\"0.60\",\n \"x\":\"10cm\",\"y\":\"0.8cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallB\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"preset\":\"diamond\",\"fill\":\"2C5F8A\",\"opacity\":\"0.40\",\n \"x\":\"32cm\",\"y\":\"2cm\",\"width\":\"3cm\",\"height\":\"1.8cm\",\"name\":\"smallC\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"text\":\"开始构建你的智能体\",\"font\":\"Inter\",\n \"size\":\"52\",\"bold\":\"true\",\"color\":\"2C5F8A\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"3.5cm\",\"width\":\"26cm\",\"height\":\"4cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[5]\",\"type\":\"shape\",\"props\":{\n \"text\":\"platform.ai/agents | 立即体验\",\"font\":\"Inter\",\n \"size\":\"20\",\"color\":\"4A5568\",\"align\":\"center\",\n \"x\":\"4cm\",\"y\":\"8.5cm\",\"width\":\"26cm\",\"height\":\"2cm\",\"fill\":\"none\"}}\n]\nBATCH\n\n# ===================== VALIDATE =====================\nofficecli validate \"$DECK\"\nofficecli view \"$DECK\" outline\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":16477,"content_sha256":"ef84613d8ab1d1d8a0e302a665c0c51fe8f4437dbe1c6f7fae2c71e0b0dd5f80"},{"filename":"reference/styles/light--isometric-clean/style.md","content":"# S23-isometric-clean — Isometric Clean Tech\n\n## Style Overview\n\nLight blue-gray background using diamond and rectangle combinations to create isometric/3D block visuals, conveying a clean and modern technological feel.\n\n- **Scene**: Tech products, SaaS platforms, data display\n- **Mood**: Clean, modern, technological\n- **Color Tone**: Light blue-gray base + blue accent + light gray layers\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------- | ------ | ---------------------------------------------- |\n| Light Blue-Gray | F0F4F8 | Background base color |\n| Blue | 4A90D9 | Primary accent color, isometric block top face |\n| Light Gray | E8ECF1 | Block side face, auxiliary color block |\n\n## Design Techniques\n\n- Diamond shapes simulate isometric perspective block top faces, rectangles serve as side faces, combined to create 3D block effects\n- Blocks arranged in grid pattern, forming isometric spatial sense\n- Restrained color scheme (only blue-gray), maintaining clean and uncluttered appearance\n- Typography uses modern sans-serif fonts like Inter Bold\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — How to construct isometric blocks using diamond + rectangle combinations\n- **Slide 3 (pillars)** — Grid layout with multiple block arrangements\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1538,"content_sha256":"af0acbb01e98670232f1e6ad278a02c7e0f6da6b747c31dcbaae9afa86619f36"},{"filename":"reference/styles/light--minimal-corporate/style.md","content":"# 02-minimal-corporate — Minimal Corporate Presentation\n\n## Style Overview\n\nPure white background with dark blue and gold accents, using left-side color block division + vertical information flow layout, suitable for annual reports, work summaries, business proposals, and similar occasions\n\n- **Scene**: Annual reports, work summaries, project reports, business proposals\n- **Mood**: Professional, concise, clear, sophisticated, stable\n- **Color Tone**: Light tone, warm tone, low contrast\n- **Industry**: Finance, consulting, enterprise, government, education\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------- | ------- | -------------- |\n| Background | #FFFFFF | background |\n| Card Background | #E8EEF4 | card |\n| Primary | #1E3A5F | primary |\n| Secondary | #D4A84B | secondary |\n| Primary Text | #333333 | text_primary |\n| Secondary Text | #666666 | text_secondary |\n| Muted Text | #999999 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial Black |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial |\n\n## Design Techniques\n\n- Pure white background with generous whitespace\n- Dark blue and gold professional color scheme\n- Simple line decorations\n- Geometric block accents\n- Asymmetric grid layout\n- Left-side color block division layout\n- Coordinate conflicts fixed\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | --------------------------------------------------------------------------------- |\n| S1 | hero | 50 | Cover page - left dark blue vertical bar + large title + info cards |\n| S2 | statement | 45 | Statement page - left content + right decoration area, coordinate conflicts fixed |\n| S3 | grid | 60 | Grid page - asymmetric grid (2 top, 4 bottom) |\n| S4 | case | 50 | Case page - left-right two card comparison |\n| S5 | comparison | 50 | Comparison page - central VS separator |\n| S6 | thanks | 40 | Thank you page - left thank you + right contact |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - left dark blue vertical bar + large title + info cards\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2734,"content_sha256":"971fb197af2f5d22d204e85433c994a24250f6e9726d0ecb7ea8e3e6dd73b676"},{"filename":"reference/styles/light--minimal-product/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/light__minimal_product.pptx\"\n\necho \"Building: light--minimal-product (Minimal Product)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=FAFAFA\nGREEN=00B894\nDARK=2D3436\nGRAY=636E72\nLIGHT_GRAY=B2BEC3\nWHITE=FFFFFF\nGRAY_BG=F5F5F5\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: decorative elements\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-1' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop opacity=0.08 \\\n --prop x=5cm --prop y=3cm --prop width=8cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-2' \\\n --prop preset=ellipse \\\n --prop fill=$DARK \\\n --prop opacity=0.05 \\\n --prop x=20cm --prop y=8cm --prop width=6cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!ellipse-3' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop opacity=0.06 \\\n --prop x=8cm --prop y=12cm --prop width=4cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!bottom-line' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop x=10cm --prop y=17.5cm --prop width=14cm --prop height=0.05cm\n\n# Slide 1 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title-en' \\\n --prop text='MINIMAL' \\\n --prop font='Arial' \\\n --prop size=72 \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=2cm --prop y=4cm --prop width=30cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title-cn' \\\n --prop text='极简产品' \\\n --prop font='Microsoft YaHei' \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=2cm --prop y=7.5cm --prop width=30cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-divider' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop x=14cm --prop y=10.5cm --prop width=6cm --prop height=0.08cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle-en' \\\n --prop text='Minimal Product Introduction' \\\n --prop font='Arial' \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=2cm --prop y=11.5cm --prop width=30cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle-cn' \\\n --prop text='产品介绍模板' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$LIGHT_GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=2cm --prop y=13cm --prop width=30cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-year' \\\n --prop text='2026' \\\n --prop font='Arial Black' \\\n --prop size=16 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=2cm --prop y=15.5cm --prop width=30cm --prop height=0.8cm\n\n# Pre-create all other slide content (off-canvas)\n# Slide 2 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-card-bg' \\\n --prop preset=roundRect \\\n --prop fill=$WHITE \\\n --prop opacity=0.95 \\\n --prop x=$OFFSCREEN --prop y=2cm --prop width=16cm --prop height=15cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-card-line' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=2cm --prop width=16cm --prop height=0.15cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-image-circle' \\\n --prop preset=ellipse \\\n --prop fill=$GRAY_BG \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=10cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-image-text' \\\n --prop text='产品图片' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$LIGHT_GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=16cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-product-name' \\\n --prop text='产品名称' \\\n --prop font='Microsoft YaHei' \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=14.5cm --prop width=16cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-product-en' \\\n --prop text='PRODUCT NAME' \\\n --prop font='Arial' \\\n --prop size=12 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=15.8cm --prop width=16cm --prop height=0.6cm\n\n# Slide 2 features (left side)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat1-dot' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=5cm --prop width=0.4cm --prop height=0.4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat1-text' \\\n --prop text='高性能处理器' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4.9cm --prop width=5cm --prop height=0.6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat2-dot' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=7cm --prop width=0.4cm --prop height=0.4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat2-text' \\\n --prop text='超长续航72小时' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.9cm --prop width=5cm --prop height=0.6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat3-dot' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=0.4cm --prop height=0.4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-feat3-text' \\\n --prop text='智能AI助手' \\\n --prop font='Microsoft YaHei' \\\n --prop size=14 \\\n --prop color=$DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.9cm --prop width=5cm --prop height=0.6cm\n\n# Slide 2 price (right side)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-price-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=6cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-price-text' \\\n --prop text='RMB 2999' \\\n --prop font='Arial Black' \\\n --prop size=20 \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.5cm --prop width=6cm --prop height=1cm\n\n# Slide 3 - Features content (will show 4 feature cards in 2x2 grid)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-title-cn' \\\n --prop text='核心功能' \\\n --prop font='Microsoft YaHei' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=1cm --prop width=30cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-title-en' \\\n --prop text='KEY FEATURES' \\\n --prop font='Arial' \\\n --prop size=14 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=2.8cm --prop width=30cm --prop height=0.6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-divider' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=3.6cm --prop width=4cm --prop height=0.08cm\n\n# Feature cards content will be added to each individual card...\n# This is a simplified approach - in reality we'd need to pre-create all card elements too\n# For brevity, I'll create placeholder shapes that can be shown/hidden\n\n# Slide 4 - Compare content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-title-cn' \\\n --prop text='产品对比' \\\n --prop font='Microsoft YaHei' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=1cm --prop width=30cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-title-en' \\\n --prop text='COMPARISON' \\\n --prop font='Arial' \\\n --prop size=14 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=2.8cm --prop width=30cm --prop height=0.6cm\n\n# Slide 5 - Highlights content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-title-cn' \\\n --prop text='核心亮点' \\\n --prop font='Microsoft YaHei' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=1cm --prop width=30cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-title-en' \\\n --prop text='HIGHLIGHTS' \\\n --prop font='Arial' \\\n --prop size=14 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=2.8cm --prop width=30cm --prop height=0.6cm\n\n# Slide 6 - CTA content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-top-bg' \\\n --prop preset=rect \\\n --prop fill=$DARK \\\n --prop x=$OFFSCREEN --prop y=0cm --prop width=33.87cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-title-cn' \\\n --prop text='立即体验' \\\n --prop font='Microsoft YaHei' \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=2.5cm --prop width=30cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-title-en' \\\n --prop text='GET IT NOW' \\\n --prop font='Arial' \\\n --prop size=22 \\\n --prop color=$GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=30cm --prop height=1cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-subtitle' \\\n --prop text='开启您的智能生活新篇章' \\\n --prop font='Microsoft YaHei' \\\n --prop size=16 \\\n --prop color=$LIGHT_GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=7cm --prop width=30cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-button-bg' \\\n --prop preset=roundRect \\\n --prop fill=$GREEN \\\n --prop x=$OFFSCREEN --prop y=12cm --prop width=12cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-button-text' \\\n --prop text='立即购买' \\\n --prop font='Microsoft YaHei' \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$WHITE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12.5cm --prop width=12cm --prop height=1.5cm\n\n# ============================================\n# SLIDE 2 - PRODUCT\n# ============================================\necho \"Building Slide 2: Product...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=2cm --prop y=2cm --prop width=4cm --prop height=4cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=28cm --prop y=12cm --prop width=5cm --prop height=5cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop fill=$DARK\n\n# Hide slide 1 content\nfor i in {5..10}; do\n officecli set \"$OUTPUT\" \"/slide[2]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[11]' --prop x=9cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[12]' --prop x=9cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[13]' --prop x=12cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[14]' --prop x=9cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[15]' --prop x=9cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[16]' --prop x=9cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[17]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[18]' --prop x=2.8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[19]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[20]' --prop x=2.8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[21]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[22]' --prop x=2.8cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[23]' --prop x=26cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[24]' --prop x=26cm\n\n# ============================================\n# SLIDE 3 - FEATURES\n# ============================================\necho \"Building Slide 3: Features...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=1cm --prop y=12cm --prop width=5cm --prop height=5cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=28cm --prop y=2cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop fill=$GREEN\n\n# Hide previous content\nfor i in {5..24}; do\n officecli set \"$OUTPUT\" \"/slide[3]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 3 content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[25]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[26]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[27]' --prop x=15cm\n\n# Note: The original script builds feature cards directly on slide 3\n# For proper morphing, these would need to be pre-created on slide 1\n# For this migration, I'll use a simplified approach\n\n# ============================================\n# SLIDE 4 - COMPARE\n# ============================================\necho \"Building Slide 4: Compare...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=3cm --prop y=14cm --prop width=4cm --prop height=4cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=27cm --prop y=3cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop fill=$DARK\n\n# Hide previous content\nfor i in {5..27}; do\n officecli set \"$OUTPUT\" \"/slide[4]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 4 content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[28]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[29]' --prop x=2cm\n\n# ============================================\n# SLIDE 5 - HIGHLIGHTS\n# ============================================\necho \"Building Slide 5: Highlights...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=28cm --prop y=10cm --prop width=5cm --prop height=5cm --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=1cm --prop y=3cm --prop width=4cm --prop height=4cm --prop opacity=0.04\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop fill=$GREEN\n\n# Hide previous content\nfor i in {5..29}; do\n officecli set \"$OUTPUT\" \"/slide[5]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 5 content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[31]' --prop x=2cm\n\n# ============================================\n# SLIDE 6 - CTA\n# ============================================\necho \"Building Slide 6: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[6]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[6]/shape[1]' --prop x=5cm --prop y=1cm --prop width=3cm --prop height=3cm --prop opacity=0.15\nofficecli set \"$OUTPUT\" '/slide[6]/shape[2]' --prop x=26cm --prop y=5cm --prop width=4cm --prop height=4cm --prop opacity=0.08 --prop fill=$WHITE\nofficecli set \"$OUTPUT\" '/slide[6]/shape[3]' --prop x=0cm --prop y=0cm --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[4]' --prop fill=$GREEN\n\n# Hide previous content\nfor i in {5..31}; do\n officecli set \"$OUTPUT\" \"/slide[6]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show slide 6 content\nofficecli set \"$OUTPUT\" '/slide[6]/shape[32]' --prop x=0cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[33]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[34]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[35]' --prop x=2cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[36]' --prop x=11cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[37]' --prop x=11cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":17526,"content_sha256":"13495e5770ff4520a128f3d163368389b9d152f3799260802cbdb50f2347a24a"},{"filename":"reference/styles/light--minimal-product/style.md","content":"# 05-minimal-product — Minimal Product Introduction\n\n## Style Overview\n\nLight gray background with dark gray primary color and green accent in a minimalist style, using centered focus + minimal whitespace layout, suitable for product launches, tech showcases, business presentations, and similar occasions\n\n- **Scene**: Product launches, tech showcases, brand introductions, business presentations\n- **Mood**: Professional, modern, minimalist, premium, technological\n- **Color Tone**: Cool tone, low saturation, high contrast\n- **Industry**: Technology, electronics, software, internet, finance\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #FAFAFA | background |\n| Primary | #2D3436 | primary |\n| Accent | #00B894 | accent |\n| Secondary | #636E72 | secondary |\n| Primary Text | #2D3436 | text_primary |\n| Secondary Text | #636E72 | text_secondary |\n| Muted Text | #B2BEC3 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Light gray background with dark gray primary color and green accent\n- Centered focus layout\n- Minimal whitespace design\n- Thin line decorations\n- High contrast design\n- Morph transition animations\n- Standardized decorative elements\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | ----------------------------------------------------------------------- |\n| S1 | hero | 45 | Cover page - centered title + bottom thin line + brand info |\n| S2 | product | 50 | Product page - central product showcase + left-right feature highlights |\n| S3 | features | 55 | Features page - two rows of feature cards |\n| S4 | compare | 50 | Comparison page - central VS separator + left-right comparison |\n| S5 | highlights | 50 | Highlights page - central oversized number + data cards |\n| S6 | cta | 45 | CTA page - central large button + contact info |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - centered title + bottom thin line + brand info\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2662,"content_sha256":"3fc6b39fc07066b7a7cc6c9b40ea1d69f8701b4d7c98b85c2c037eb8683d1a78"},{"filename":"reference/styles/light--project-proposal/style.md","content":"# 12-project-proposal — Project Proposal\n\n## Style Overview\n\nLight gray-blue with dark blue and gold professional color scheme, suitable for project initiation, business proposals, solution presentations, and other professional occasions\n\n- **Scene**: Project initiation, business proposals, solution presentations, bid presentations\n- **Mood**: Professional, trustworthy, efficient, rigorous\n- **Color Tone**: Cool tone, low saturation, business gray-blue\n- **Industry**: Consulting services, tech companies, financial investment, government projects\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #E8EEF4 | background |\n| Primary | #1E3A5F | primary |\n| Secondary | #D4A84B | secondary |\n| Accent | #3498DB | accent |\n| Dark | #2C3E50 | dark |\n| Primary Text | #2C3E50 | text_primary |\n| Secondary Text | #666666 | text_secondary |\n| Muted Text | #95A5A6 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial |\n\n## Design Techniques\n\n- Light gray-blue with dark blue and gold professional color scheme\n- Professional document layout\n- Information card display\n- Data visualization charts\n- Horizontal timeline\n- Morph transition animations\n- Risk analysis display\n- Coordinate conflicts fixed\n- Enhanced visual hierarchy for content cards\n\n## Page Structure (8 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | ------------------------------------------------------------ |\n| S1 | cover | 29 | Cover page - project title + proposal info + left decoration |\n| S2 | background | 33 | Background page - three pain point cards + market analysis |\n| S3 | solution | 24 | Solution page - solution + strategy cards |\n| S4 | timeline | 24 | Timeline page - horizontal milestones + node cards |\n| S5 | budget | 16 | Budget page - pie chart + budget allocation cards |\n| S6 | team | 24 | Team page - member cards + contact info |\n| S7 | risks | 32 | Risk page - four categories of risk analysis cards |\n| S8 | thanks | 16 | Thank you page - appreciation + contact info |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 4 (timeline)** — Timeline page - horizontal milestones + node cards\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2837,"content_sha256":"3a28a34344b5e13cc6e4d563e083d0fc25d8e8375ba7b2c618c3b928670c14f7"},{"filename":"reference/styles/light--spring-launch/style.md","content":"# 07-spring-launch — Spring Launch Fresh\n\n## Style Overview\n\nLight green gradient with tender green and yellow-green color scheme, using natural curves + petal layout, suitable for spring launch events, new product releases, seasonal marketing, and other fresh natural occasions\n\n- **Scene**: Spring launch events, new product releases, seasonal marketing, brand activities\n- **Mood**: Fresh, natural, vibrant, energetic, hopeful\n- **Color Tone**: Green tone, light color system, natural colors, fresh gradients\n- **Industry**: Consumer goods, environmental, health, beauty, food\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #E8F5E9 | background |\n| Primary | #4CAF50 | primary |\n| Secondary | #8BC34A | secondary |\n| Accent | #81C784 | accent |\n| Dark | #1B5E20 | dark |\n| Primary Text | #1B5E20 | text_primary |\n| Secondary Text | #388E3C | text_secondary |\n| Muted Text | #66BB6A | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial Black |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Light green gradient with tender green and yellow-green color scheme\n- Natural curve layout\n- Petal decorative elements\n- Four-leaf clover arrangement\n- Vertical timeline design\n- Morph transition animations\n- Standardized decorative elements\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | -------------------------------------------------------------------- |\n| S1 | hero | 45 | Cover page - curve division + petal decorations + central card |\n| S2 | highlights | 55 | Highlights page - four-leaf clover style staggered arrangement cards |\n| S3 | features | 55 | Features page - left product + vertical feature flow |\n| S4 | pricing | 55 | Pricing page - three column pricing cards |\n| S5 | timeline | 50 | Timeline page - sprout growth style vertical timeline |\n| S6 | cta | 50 | CTA page - top green area + action button |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - curve division + petal decorations + central card\n- **Slide 5 (timeline)** — Timeline page - sprout growth style vertical timeline\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2766,"content_sha256":"e6f3775c0fca4a3704b2718f0bbb8eaa5921bf07d99e8eada611e73bd41a02b9"},{"filename":"reference/styles/light--training-interactive/style.md","content":"# 10-training-interactive — Training Interactive\n\n## Style Overview\n\nElegant and lively color scheme, suitable for corporate training, online courses, knowledge sharing, and other interactive learning occasions\n\n- **Scene**: Corporate training, online courses, knowledge sharing, skill teaching\n- **Mood**: Learning, interactive, progressive, energetic, friendly\n- **Color Tone**: Warm tone, medium saturation, comfortable and eye-friendly\n- **Industry**: Education, corporate training, human resources, consulting\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #FFF9E6 | background |\n| Primary | #FF6B6B | primary |\n| Secondary | #4ECDC4 | secondary |\n| Accent | #FFE66D | accent |\n| Dark | #2D3436 | dark |\n| Primary Text | #2D3436 | text_primary |\n| Secondary Text | #636E72 | text_secondary |\n| Muted Text | #B2BEC3 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial Black |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Light yellow eye-friendly background\n- Interactive Q&A elements\n- Progress bar indicators\n- Card-style module layout\n- Friendly rounded corner design\n- Morph transition animations\n\n## Page Structure (7 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | ------------------------------------------------------------------ |\n| S1 | cover | 59 | Cover page - course title + instructor info + schedule |\n| S2 | objectives | 54 | Learning objectives page - 3 objective cards + progress indicators |\n| S3 | content1 | 60 | Content page 1 - knowledge point explanation + diagrams |\n| S4 | content2 | 69 | Content page 2 - key points list + diagrams |\n| S5 | content3 | 66 | Content page 3 - core concepts + summary |\n| S6 | practice | 58 | Practice interaction page - interactive Q&A + options |\n| S7 | summary | 54 | Summary page - course summary + next steps |\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1** — Cover page - course title + instructor info + schedule\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2627,"content_sha256":"394e239413648dd733dbe074ab92d5e445a2c55cf893ac7caf378a063f3b1bb1"},{"filename":"reference/styles/light--watercolor-wash/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/light__watercolor_wash.pptx\"\n\necho \"Building: light--watercolor-wash (AI Agent Platform)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=FFFDF7\nBLUE=7AADCF\nORANGE=E8A87C\nPURPLE=C5B3D1\nGREEN=9BC4A8\nPEACH=F2C0A2\nDARK_GREEN=5A7A6A\nBROWN=6A5A4A\nGRAY=8A7A6A\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: 6 watercolor ellipses\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-1' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.08 \\\n --prop line=none \\\n --prop x=0cm --prop y=0cm --prop width=18cm --prop height=15cm --prop rotation=10\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-2' \\\n --prop preset=ellipse \\\n --prop fill=$ORANGE \\\n --prop opacity=0.06 \\\n --prop line=none \\\n --prop x=20cm --prop y=6cm --prop width=16cm --prop height=14cm --prop rotation=-15\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-3' \\\n --prop preset=ellipse \\\n --prop fill=$PURPLE \\\n --prop opacity=0.10 \\\n --prop line=none \\\n --prop x=10cm --prop y=0cm --prop width=14cm --prop height=16cm --prop rotation=5\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-4' \\\n --prop preset=ellipse \\\n --prop fill=$GREEN \\\n --prop opacity=0.05 \\\n --prop line=none \\\n --prop x=24cm --prop y=0cm --prop width=15cm --prop height=12cm --prop rotation=-8\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-5' \\\n --prop preset=ellipse \\\n --prop fill=$PEACH \\\n --prop opacity=0.12 \\\n --prop line=none \\\n --prop x=0cm --prop y=10cm --prop width=13cm --prop height=17cm --prop rotation=20\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!wash-6' \\\n --prop preset=ellipse \\\n --prop fill=$BLUE \\\n --prop opacity=0.07 \\\n --prop line=none \\\n --prop x=18cm --prop y=8cm --prop width=17cm --prop height=13cm --prop rotation=-12\n\n# Slide 1 text content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text='AI Agent Platform' \\\n --prop font='LXGW WenKai' \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=4cm --prop width=26cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text='智能体平台发布' \\\n --prop font='LXGW WenKai' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=8.5cm --prop width=26cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-desc' \\\n --prop text='让智能体为你工作' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=12cm --prop width=26cm --prop height=2cm\n\n# Pre-create all other slide text content (off-canvas)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-title' \\\n --prop text='从自动化到自主化' \\\n --prop font='LXGW WenKai' \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5.5cm --prop width=30cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-desc' \\\n --prop text='AI Agent 正在重新定义人机协作的边界' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10.5cm --prop width=26cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text='三大核心能力' \\\n --prop font='LXGW WenKai' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=0.8cm --prop width=20cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-num' \\\n --prop text='01' \\\n --prop font='LXGW WenKai' \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3.8cm --prop width=9cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-title' \\\n --prop text='感知' \\\n --prop font='LXGW WenKai' \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.2cm --prop width=9cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p1-desc' \\\n --prop text='多模态输入理解\n实时环境感知' \\\n --prop font='Noto Serif' \\\n --prop size=16 \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.2cm --prop width=9cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-num' \\\n --prop text='02' \\\n --prop font='LXGW WenKai' \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=$ORANGE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3.8cm --prop width=9cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-title' \\\n --prop text='推理' \\\n --prop font='LXGW WenKai' \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.2cm --prop width=9cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p2-desc' \\\n --prop text='链式思维规划\n动态策略生成' \\\n --prop font='Noto Serif' \\\n --prop size=16 \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.2cm --prop width=9cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-num' \\\n --prop text='03' \\\n --prop font='LXGW WenKai' \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=$PURPLE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3.8cm --prop width=9cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-title' \\\n --prop text='执行' \\\n --prop font='LXGW WenKai' \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.2cm --prop width=9cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s3-p3-desc' \\\n --prop text='工具调用编排\n闭环反馈迭代' \\\n --prop font='Noto Serif' \\\n --prop size=16 \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.2cm --prop width=9cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text='平台数据' \\\n --prop font='LXGW WenKai' \\\n --prop size=36 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=0.8cm --prop width=20cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-num1' \\\n --prop text='10M+' \\\n --prop font='LXGW WenKai' \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=FFFFFF \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5cm --prop width=14cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-label1' \\\n --prop text='智能体调用次数' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=FFFFFF \\\n --prop opacity=0.9 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-num2' \\\n --prop text='99.95%' \\\n --prop font='LXGW WenKai' \\\n --prop size=56 \\\n --prop bold=true \\\n --prop color=5A3A2A \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=3cm --prop width=14cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-label2' \\\n --prop text='平台可用性' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.5cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-num3' \\\n --prop text='50ms' \\\n --prop font='LXGW WenKai' \\\n --prop size=44 \\\n --prop bold=true \\\n --prop color=5A3A2A \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=14cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-label3' \\\n --prop text='平均响应延迟' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=$BROWN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=13cm --prop width=14cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text='开始构建你的智能体' \\\n --prop font='LXGW WenKai' \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$DARK_GREEN \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4.5cm --prop width=26cm --prop height=4.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-link' \\\n --prop text='platform.ai/agents | 立即体验' \\\n --prop font='Noto Serif' \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=10cm --prop width=26cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph watercolor ellipses - slow drift\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=3cm --prop y=2cm --prop rotation=13 --prop opacity=0.09\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=16cm --prop y=4cm --prop rotation=-12 --prop opacity=0.07\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=12cm --prop y=3cm --prop rotation=8 --prop opacity=0.08\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=22cm --prop y=2cm --prop rotation=-5 --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=2cm --prop y=8cm --prop rotation=18 --prop opacity=0.10\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=20cm --prop y=10cm --prop rotation=-10 --prop opacity=0.06\n\n# Hide slide 1 content, show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop x=2cm --prop y=5.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[11]' --prop x=4cm --prop y=10.5cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph watercolor ellipses\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=0cm --prop y=4cm --prop width=13cm --prop height=14cm --prop rotation=6 --prop opacity=0.10\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=10cm --prop y=3cm --prop width=14cm --prop height=15cm --prop rotation=-10 --prop opacity=0.08\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=22cm --prop y=2cm --prop width=13cm --prop height=16cm --prop rotation=12 --prop opacity=0.09\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=28cm --prop y=14cm --prop width=8cm --prop height=8cm --prop rotation=-3 --prop opacity=0.05\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=0cm --prop y=14cm --prop width=10cm --prop height=8cm --prop rotation=15 --prop opacity=0.07\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=15cm --prop y=12cm --prop width=12cm --prop height=10cm --prop rotation=-7 --prop opacity=0.04\n\n# Hide previous content, show slide 3 content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=1.2cm --prop y=0.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=1.2cm --prop y=3.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=1.2cm --prop y=6.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=1.2cm --prop y=8.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=12.5cm --prop y=3.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=12.5cm --prop y=6.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=12.5cm --prop y=8.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=23.8cm --prop y=3.8cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=23.8cm --prop y=6.2cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[21]' --prop x=23.8cm --prop y=8.2cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph watercolor ellipses - larger opacities for evidence\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop x=0cm --prop y=1cm --prop width=18cm --prop height=17cm --prop rotation=8 --prop opacity=0.35\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=18cm --prop y=0cm --prop width=16cm --prop height=14cm --prop rotation=-12 --prop opacity=0.30\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=26cm --prop y=12cm --prop width=10cm --prop height=10cm --prop rotation=5 --prop opacity=0.08\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=14cm --prop y=14cm --prop width=8cm --prop height=6cm --prop rotation=-6 --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=30cm --prop y=0cm --prop width=6cm --prop height=6cm --prop rotation=10 --prop opacity=0.05\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=10cm --prop y=15cm --prop width=5cm --prop height=5cm --prop rotation=-4 --prop opacity=0.04\n\n# Hide previous content, show slide 4 content\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=1.2cm --prop y=0.8cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=1.2cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=1.2cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=19cm --prop y=3cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[26]' --prop x=19cm --prop y=6.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[27]' --prop x=19cm --prop y=10cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[28]' --prop x=19cm --prop y=13cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph watercolor ellipses - final drift\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop x=22cm --prop y=8cm --prop width=16cm --prop height=14cm --prop rotation=12 --prop opacity=0.09\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop x=0cm --prop y=0cm --prop width=14cm --prop height=12cm --prop rotation=-14 --prop opacity=0.07\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=8cm --prop y=10cm --prop width=15cm --prop height=16cm --prop rotation=7 --prop opacity=0.10\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=26cm --prop y=0cm --prop width=12cm --prop height=10cm --prop rotation=-10 --prop opacity=0.06\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=0cm --prop y=12cm --prop width=14cm --prop height=14cm --prop rotation=16 --prop opacity=0.11\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=16cm --prop y=0cm --prop width=13cm --prop height=11cm --prop rotation=-8 --prop opacity=0.05\n\n# Hide previous content, show slide 5 content\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[9]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[10]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[11]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[12]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[13]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[14]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[15]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[16]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[17]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[18]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[19]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[5]/shape[29]' --prop x=4cm --prop y=4.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=4cm --prop y=10cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":19538,"content_sha256":"1c3eba0e9e78ec8c8e1649c489d1e20bdf0cffb50104f948eae2862c2c85ac07"},{"filename":"reference/styles/light--watercolor-wash/style.md","content":"# S16-watercolor-wash — Watercolor Wash\n\n## Style Overview\n\nWarm white base color using extremely low transparency colored ellipses to simulate watercolor wash effect, creating a soft and poetic atmosphere.\n\n- **Scene**: Art, cultural creativity, tea ceremony, weddings\n- **Mood**: Soft, poetic, artistic\n- **Color Tone**: Warm white base + sky blue/peach/sage/lavender multicolor wash\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------ | --------------------------- |\n| Warm White | FFFDF7 | Background base color |\n| Sky Blue | 7AADCF | Watercolor wash color block |\n| Peach | E8A87C | Watercolor wash color block |\n| Sage Green | B5C99A | Watercolor wash color block |\n| Lavender | D4A5C9 | Watercolor wash color block |\n\n## Design Techniques\n\n- All decorative shapes are ellipses, no rectangles used, maintaining rounded softness\n- All color blocks have extremely low opacity (0.06-0.12), simulating watercolor pigment seeping into paper effect\n- Multiple overlapping ellipses produce natural color mixing and edge gradients\n- Typography uses thin/serif fonts, echoing the watercolor texture\n\n## Reference Script\n\nComplete build script is in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Method of layering multicolor low transparency ellipses\n- **Slide 4 (evidence)** — Relationship between color blocks and content areas\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1513,"content_sha256":"cf66e692aa9a5b2b50b612729b89a415591bfbae1b3e21614a3bc3a1fb7b7efe"},{"filename":"reference/styles/mixed--bauhaus-blocks/style.md","content":"# Bauhaus Color Block — Geometric Grid\n\n## Style Overview\n\nBold modernist design inspired by Bauhaus movement. Features flat solid color blocks in geometric grid compositions, high-contrast typography, and signature Bauhaus elements (stacked circles, vertical bar clusters). Perfect for creative studios, branding agencies, and portfolio presentations.\n\n- **Scenario**: Creative studios, design portfolios, branding agencies, architectural firms, art galleries\n- **Mood**: Bold, modernist, geometric, artistic, confident\n- **Tone**: Cream background with forest green, amber, tangerine, and dark accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------- | ------------------------------- |\n| Background | #F0EBE0 | Warm cream canvas |\n| Forest | #1D5C38 | Deep green for primary blocks |\n| Amber | #F4C040 | Golden yellow for accents |\n| Tangerine | #E06828 | Orange for secondary blocks |\n| Teal | #1B6060 | Dark teal for variation |\n| Dark | #1E1818 | Near-black for headers and text |\n| White | #FFFFFF | White for text on dark blocks |\n| Dim | #888878 | Muted grey for supporting text |\n\n## Typography\n\n| Element | Font | Size |\n| -------------- | -------------- | ---------------- |\n| Hero title | Segoe UI Black | 40pt |\n| Stats | Segoe UI Black | 48pt |\n| Section labels | Segoe UI | 10pt (uppercase) |\n| Body | Segoe UI | 11-13pt |\n\n## Design Techniques\n\n- **Flat color mosaic**: Rect blocks in solid colors with no gradients or shadows\n- **Bauhaus signature elements**:\n - 3 stacked circles with progressive opacity (0.90 → 0.70 → 0.50)\n - Vertical bar cluster (0.5cm width bars in alternating colors)\n- **Geometric grid layouts**: Asymmetric divisions creating visual rhythm\n- **High-contrast flat typography**: Bold black text on colored blocks or vice versa\n- **Stat badges**: Rounded rect buttons with bold numbers\n- **!!panel morph actor**: Large rect that transforms across slides (right-block → top-stripe → left-col → top-band → accent-bar → full-slide)\n\n## Page Structure (7 slides)\n\n| Slide | Type | !!panel Position | Description |\n| ----- | ---------- | ------------------------------------- | ------------------------------------------------------------ |\n| 1 | hero | Right block (13.5cm-28.37cm) | Mosaic: left content / right color grid with stacked circles |\n| 2 | grid | Top stripe (full-width, 2.8cm height) | 2×2 stat cards in forest/amber/tangerine/teal |\n| 3 | pillars | Left column (0-12.5cm) | Forest left panel + 4 feature rows right |\n| 4 | comparison | Top band (8cm height) | Amber top band + 2-column content below |\n| 5 | timeline | Vertical accent bar (4cm width) | Tangerine left bar + 3-step process right |\n| 6 | hero | Full slide (33.87cm width) | Complete forest background |\n| 7 | cta | Full forest background | Call to action with centered content |\n\n## Key Morph Patterns\n\n- **!!panel actor**: Main geometric block that morphs through dramatic transformations:\n 1. S1: Right block (14.87×16.55cm) with stacked circles\n 2. S2: Top stripe (33.87×2.8cm) header\n 3. S3: Left column (12.5cm width, full height)\n 4. S4: Top band (33.87×8cm)\n 5. S5: Vertical accent bar (4×19.05cm, left edge)\n 6. S6: Full slide (33.87×19.05cm)\n 7. S7: Full slide (maintained)\n\n- **Position changes**: Panel moves from right → top → left → top → left → full\n- **Size changes**: From partial block → thin stripe → column → band → narrow bar → full canvas\n- **Color consistency**: Panel stays forest green across all transformations\n\n## Bauhaus Signature Elements\n\n1. **3 Stacked Circles** (S1, S4):\n - Cream ellipses with progressive opacity (0.90, 0.70, 0.50)\n - Overlapping placement creating depth\n - Positioned on forest green background\n\n2. **Vertical Bar Cluster** (S1, S5):\n - 0.5cm width bars in alternating colors (cream, amber, cream, tangerine)\n - 1.9cm height, 1cm spacing\n - Creates rhythmic visual accent\n\n3. **Rounded Rect Badges**:\n - Stat badges with bold numbers\n - High contrast: forest/dark background + white/cream text\n\n## Grid Compositions\n\n- **Mosaic Grid** (S1): Asymmetric division with multiple rect blocks\n- **2×2 Grid** (S2): Four equal stat cards with consistent padding\n- **Left-Right Split** (S3): 12.5cm left column + remaining right content\n- **Top-Bottom Split** (S4): 8cm top band + lower content area\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n\n**Recommended slides to read for core techniques**:\n\n- **Slide 1 (hero)** — mosaic composition with stacked circles and bar cluster\n- **Slide 2 (grid)** — 2×2 stat cards with !!panel as thin top stripe\n- **Slide 3 (pillars)** — left panel with numbered feature rows and ellipse badge system\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5279,"content_sha256":"b345e65fdacea7201946b4a5a09b988fb7f059654d6add0973728978eb5b2477"},{"filename":"reference/styles/mixed--chromatic-aberration/style.md","content":"# Chromatic Aberration — CRT RGB Split\n\n## Style Overview\n\nDramatic tech-creative design simulating CRT monitor chromatic aberration effect. Uses ultra-dark navy background with cyan and hot pink offset text layers that morph from tight alignment to maximum spread and back. Perfect for tech startups, AI platforms, and creative technology showcases.\n\n- **Scenario**: Tech startups, AI platforms, creative technology, developer tools, futuristic product launches\n- **Mood**: Futuristic, glitch aesthetic, high-tech, edgy, cyber\n- **Tone**: Ultra-dark with neon cyan and hot pink accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------ | ------- | -------------------------------------------- |\n| Background | #050814 | Ultra-dark navy (almost black) |\n| Background 2 | #0A1030 | Slightly lighter navy for variation |\n| Cyan | #00F5E4 | Bright cyan for aberration layer and accents |\n| Pink | #FF0066 | Hot pink for aberration layer and accents |\n| White | #FFFFFF | White for main text layer |\n| Dim | #334466 | Dark blue-grey for lines and dividers |\n| Pale | #8899CC | Light blue-grey for supporting text |\n\n## Typography\n\n| Element | Font | Size |\n| -------------- | -------------- | ---------------- |\n| Hero title | Segoe UI Black | 68pt |\n| Section labels | Segoe UI | 10pt (uppercase) |\n| Stats | Segoe UI Black | 18pt |\n| Body | Segoe UI | 13-14pt |\n\n## Design Techniques\n\n- **Triple-layer text**: Same text rendered 3 times with horizontal offsets (pink left, cyan right, white center)\n- **Animated aberration**: Offset distance morphs across slides (0.3cm → 1.5cm → 4cm → 0cm → vertical shift → converge)\n- **Ghost text as actors**: Cyan and pink layers are actual morph actors (`!!cyan-layer`, `!!pink-layer`) with semi-transparent opacity (0.20-0.45)\n- **Minimal decoration**: Thin horizontal lines (0.10cm height) in cyan/pink\n- **CRT/glitch aesthetic**: Simulates analog RGB color separation\n- **Opacity variation**: Aberration layers fade in/out (0.20-0.45) as they spread/collapse\n\n## Page Structure (6 slides)\n\n| Slide | Type | Aberration Pattern | Description |\n| ----- | --------- | ------------------ | -------------------------------------------- |\n| 1 | hero | Tight (±0.3cm) | Opening with company name, minimal split |\n| 2 | statement | Spread (±1.5cm) | Product intro, aberration widens |\n| 3 | statement | Maximum (±4cm) | Technology, ghostly CRT effect at peak split |\n| 4 | evidence | Collapsed (0cm) | Metrics, all layers converge (no aberration) |\n| 5 | statement | Vertical shift | Pricing, aberration shifts to Y-axis |\n| 6 | cta | Reconverge (0cm) | Call to action, perfect alignment returns |\n\n## Key Morph Patterns\n\n- **!!pink-layer**: Pink ghost text that moves left as aberration spreads\n - S1: x=1.7cm (tight left) → S2: x=0.5cm → S3: x=0cm (maximum left) → S4: x=2cm (converged) → S5: y=4cm (vertical shift) → S6: x=2cm (reconverged)\n\n- **!!cyan-layer**: Cyan ghost text that moves right as aberration spreads\n - S1: x=2.3cm (tight right) → S2: x=3.5cm → S3: x=6cm (maximum right) → S4: x=2cm (converged) → S5: y=2cm (vertical shift) → S6: x=2cm (reconverged)\n\n- **White main text**: Always centered at x=2cm (anchor point)\n\n- **Opacity dynamics**: As aberration spreads, opacity decreases (0.45 → 0.35 → 0.22) for ghostly effect; increases when converged\n\n## Aberration Stages\n\n1. **Tight** (S1): ±0.3cm offset, opacity 0.40-0.45 — subtle RGB split\n2. **Spread** (S2): ±1.5cm offset, opacity 0.35 — noticeable separation\n3. **Maximum** (S3): ±4cm offset, opacity 0.20-0.22 — extreme CRT glitch, white text also semi-transparent (0.90)\n4. **Collapsed** (S4): All layers at x=2cm, opacity 0.35 — perfect alignment, effect \"resolved\"\n5. **Vertical** (S5): Horizontal converged, vertical offset (y diff) — axis shift\n6. **Reconverged** (S6): All layers perfectly aligned — clarity restored\n\n## Technical Notes\n\n- **Morph actors are text shapes**: The pink and cyan layers are actual text boxes with `!!` prefix names, not decorative shapes\n- **Stacking order**: Pink (bottom) → Cyan (middle) → White (top) for proper layering\n- **Thin accent lines**: 0.10cm height rects in cyan/pink provide minimal structure\n- **Dark background essential**: Ultra-dark (#050814) makes neon colors pop and aberration effect visible\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n\n**Recommended slides to read for core techniques**:\n\n- **Slide 1 (hero)** — triple-layer text setup with tight aberration (±0.3cm)\n- **Slide 3 (statement)** — maximum aberration spread (±4cm) with opacity fade for ghostly CRT effect\n- **Slide 5 (statement)** — vertical axis shift demonstrating aberration can move in Y dimension\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5125,"content_sha256":"206c15cb69eb85eabcba1d2a5f4086fc737487e00a6df2835647ffe80ac69bb1"},{"filename":"reference/styles/mixed--duotone-split/build.sh","content":"#!/bin/bash\nset -e\n\n# Build script for 12-duotone-split\n# Duotone Split — bold two-color split screen with morph between different split ratios\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nDECK=\"$SCRIPT_DIR/mixed__duotone_split.pptx\"\n\necho \"Building: mixed--duotone-split (Duotone Split)\"\n\n# Clean up if exists\nrm -f \"$DECK\"\n\n# Create deck + slide 1\nofficecli create \"$DECK\"\nofficecli add \"$DECK\" '/' --type slide --prop layout=blank --prop background=FFFFFF\n\n###############################################################################\n# SLIDE 1 — hero: 50/50 left-right split\n# Dark left: 0,0 -> 16.63 x 19.05\n# Divider: 16.63,0 -> 0.3 x 19.05\n# Warm right: 16.93,0 -> 16.94 x 19.05\n###############################################################################\necho '[\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!panel-dark\",\"preset\":\"rect\",\"fill\":\"2D3436\",\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"16.63cm\",\"height\":\"19.05cm\",\"opacity\":\"1.0\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!panel-warm\",\"preset\":\"rect\",\"fill\":\"E17055\",\n \"x\":\"16.93cm\",\"y\":\"0cm\",\"width\":\"16.94cm\",\"height\":\"19.05cm\",\"opacity\":\"1.0\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!divider\",\"preset\":\"rect\",\"fill\":\"FFFFFF\",\n \"x\":\"16.63cm\",\"y\":\"0cm\",\"width\":\"0.3cm\",\"height\":\"19.05cm\",\"opacity\":\"1.0\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!accent-dot-1\",\"preset\":\"ellipse\",\"fill\":\"FFFFFF\",\n \"x\":\"2cm\",\"y\":\"13cm\",\"width\":\"3cm\",\"height\":\"3cm\",\"opacity\":\"0.15\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!accent-dot-2\",\"preset\":\"ellipse\",\"fill\":\"E17055\",\n \"x\":\"12cm\",\"y\":\"1cm\",\"width\":\"2cm\",\"height\":\"2cm\",\"opacity\":\"0.3\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!accent-line\",\"preset\":\"rect\",\"fill\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"11cm\",\"width\":\"8cm\",\"height\":\"0.08cm\",\"opacity\":\"0.4\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!hero-title\",\"text\":\"Form Follows\\nFunction\",\"font\":\"Segoe UI Black\",\n \"size\":\"54\",\"bold\":\"true\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"3cm\",\"width\":\"14cm\",\"height\":\"6cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!hero-subtitle\",\"text\":\"Architecture Studio\",\"font\":\"Segoe UI Light\",\n \"size\":\"24\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"9cm\",\"width\":\"14cm\",\"height\":\"2cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!body-text\",\"text\":\"\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"36cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-1-num\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FFFFFF\",\n \"x\":\"36cm\",\"y\":\"5cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-1-label\",\"text\":\"\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"36cm\",\"y\":\"8cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-2-num\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FFFFFF\",\n \"x\":\"37cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-2-label\",\"text\":\"\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"37cm\",\"y\":\"5cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-3-num\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FFFFFF\",\n \"x\":\"37cm\",\"y\":\"8cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!stat-3-label\",\"text\":\"\",\"font\":\"Segoe UI Light\",\n \"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"37cm\",\"y\":\"11cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!pillar-1\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"38cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!pillar-2\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"38cm\",\"y\":\"5cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!pillar-3\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"38cm\",\"y\":\"8cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}},\n {\"command\":\"add\",\"parent\":\"/slide[1]\",\"type\":\"shape\",\"props\":{\n \"name\":\"!!cta-text\",\"text\":\"\",\"font\":\"Segoe UI Black\",\n \"size\":\"48\",\"color\":\"FFFFFF\",\n \"x\":\"38cm\",\"y\":\"11cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\",\"fill\":\"none\"}}\n]' | officecli batch \"$DECK\"\n\n# Clone slide 1 four times for slides 2-5\nofficecli add \"$DECK\" '/' --from '/slide[1]' && \\\nofficecli add \"$DECK\" '/' --from '/slide[1]' && \\\nofficecli add \"$DECK\" '/' --from '/slide[1]' && \\\nofficecli add \"$DECK\" '/' --from '/slide[1]'\n\n# Set morph transitions on slides 2-5\necho '[\n {\"command\":\"set\",\"path\":\"/slide[2]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]\",\"props\":{\"transition\":\"morph\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]\",\"props\":{\"transition\":\"morph\"}}\n]' | officecli batch \"$DECK\"\n\n###############################################################################\n# SLIDE 2 — statement: 70/30 top-bottom\n# Dark top: 0,0 -> 33.87 x 13.04\n# Divider: 0,13.04 -> 33.87 x 0.3\n# Warm bot: 0,13.34 -> 33.87 x 5.71\n###############################################################################\necho '[\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[1]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"33.87cm\",\"height\":\"13.04cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[2]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"13.34cm\",\"width\":\"33.87cm\",\"height\":\"5.71cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[3]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"13.04cm\",\"width\":\"33.87cm\",\"height\":\"0.3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[4]\",\"props\":{\n \"x\":\"28cm\",\"y\":\"1cm\",\"width\":\"3cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[5]\",\"props\":{\n \"x\":\"4cm\",\"y\":\"14.5cm\",\"width\":\"2cm\",\"height\":\"2cm\",\"opacity\":\"0.4\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[6]\",\"props\":{\n \"x\":\"22cm\",\"y\":\"5cm\",\"width\":\"8cm\",\"height\":\"0.08cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[7]\",\"props\":{\n \"text\":\"Every Line Has\\na Purpose\",\"size\":\"64\",\"color\":\"FFFFFF\",\n \"x\":\"2cm\",\"y\":\"2.5cm\",\"width\":\"30cm\",\"height\":\"7cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"center\"}},\n {\"command\":\"set\",\"path\":\"/slide[2]/shape[8]\",\"props\":{\n \"text\":\"\",\"x\":\"36cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\"}}\n]' | officecli batch \"$DECK\"\n\n###############################################################################\n# SLIDE 3 — pillars: Dark shrinks to left 30%, warm expands right 70%\n# Dark left: 0,0 -> 10.16 x 19.05\n# Divider: 10.16,0 -> 0.3 x 19.05\n# Warm right: 10.46,0 -> 23.41 x 19.05\n###############################################################################\necho '[\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[1]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"10.16cm\",\"height\":\"19.05cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[2]\",\"props\":{\n \"x\":\"10.46cm\",\"y\":\"0cm\",\"width\":\"23.41cm\",\"height\":\"19.05cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[3]\",\"props\":{\n \"x\":\"10.16cm\",\"y\":\"0cm\",\"width\":\"0.3cm\",\"height\":\"19.05cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[4]\",\"props\":{\n \"x\":\"1cm\",\"y\":\"14cm\",\"width\":\"3cm\",\"height\":\"3cm\",\"opacity\":\"0.15\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[5]\",\"props\":{\n \"x\":\"30cm\",\"y\":\"14cm\",\"width\":\"2cm\",\"height\":\"2cm\",\"opacity\":\"0.3\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[6]\",\"props\":{\n \"x\":\"12cm\",\"y\":\"16cm\",\"width\":\"8cm\",\"height\":\"0.08cm\",\"opacity\":\"0.4\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[7]\",\"props\":{\n \"text\":\"Our\\nPillars\",\"size\":\"40\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"2cm\",\"width\":\"8cm\",\"height\":\"5cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[8]\",\"props\":{\n \"text\":\"Three ideas that drive everything we do\",\"size\":\"16\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"7cm\",\"width\":\"8cm\",\"height\":\"3cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[16]\",\"props\":{\n \"text\":\"Concept\",\"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"12cm\",\"y\":\"2.5cm\",\"width\":\"10cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[17]\",\"props\":{\n \"text\":\"Build\",\"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"12cm\",\"y\":\"7cm\",\"width\":\"10cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[3]/shape[18]\",\"props\":{\n \"text\":\"Live\",\"size\":\"28\",\"color\":\"FFFFFF\",\n \"x\":\"12cm\",\"y\":\"11.5cm\",\"width\":\"10cm\",\"height\":\"3cm\"}}\n]' | officecli batch \"$DECK\"\n\n###############################################################################\n# SLIDE 4 — evidence/diagonal: Dark rotated covers top-left, warm bottom-right\n# Dark: large rect rotated -10deg, positioned to cover top-left ~60%\n# Warm: large rect rotated -10deg, positioned to cover bottom-right ~40%\n###############################################################################\necho '[\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[1]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"28cm\",\"height\":\"19.05cm\",\"rotation\":\"-8\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[2]\",\"props\":{\n \"x\":\"10cm\",\"y\":\"6cm\",\"width\":\"28cm\",\"height\":\"18cm\",\"rotation\":\"-8\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[3]\",\"props\":{\n \"x\":\"8cm\",\"y\":\"3cm\",\"width\":\"0.3cm\",\"height\":\"22cm\",\"rotation\":\"-8\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[4]\",\"props\":{\n \"x\":\"3cm\",\"y\":\"2cm\",\"width\":\"3cm\",\"height\":\"3cm\",\"opacity\":\"0.15\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[5]\",\"props\":{\n \"x\":\"26cm\",\"y\":\"14cm\",\"width\":\"2cm\",\"height\":\"2cm\",\"opacity\":\"0.3\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[6]\",\"props\":{\n \"x\":\"2cm\",\"y\":\"8cm\",\"width\":\"8cm\",\"height\":\"0.08cm\",\"opacity\":\"0.4\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[7]\",\"props\":{\n \"text\":\"Our Impact\",\"size\":\"40\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"1cm\",\"width\":\"14cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[8]\",\"props\":{\n \"text\":\"\",\"x\":\"36cm\",\"y\":\"2cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[10]\",\"props\":{\n \"text\":\"85\",\"size\":\"64\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"4.5cm\",\"width\":\"8cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[11]\",\"props\":{\n \"text\":\"Projects\",\"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"7.5cm\",\"width\":\"8cm\",\"height\":\"1.5cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[12]\",\"props\":{\n \"text\":\"12\",\"size\":\"64\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"10cm\",\"width\":\"8cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[13]\",\"props\":{\n \"text\":\"Countries\",\"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"1.2cm\",\"y\":\"13cm\",\"width\":\"8cm\",\"height\":\"1.5cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[14]\",\"props\":{\n \"text\":\"3\",\"size\":\"64\",\"color\":\"FFFFFF\",\n \"x\":\"20cm\",\"y\":\"10cm\",\"width\":\"8cm\",\"height\":\"3cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[4]/shape[15]\",\"props\":{\n \"text\":\"Pritzker Nominations\",\"size\":\"18\",\"color\":\"FFFFFF\",\n \"x\":\"20cm\",\"y\":\"13cm\",\"width\":\"10cm\",\"height\":\"1.5cm\"}}\n]' | officecli batch \"$DECK\"\n\n###############################################################################\n# SLIDE 5 — cta: Dark expands 80% as full backdrop, warm = small accent bar bottom\n# Dark: 0,0 -> 33.87 x 15.24 (80%)\n# Divider: 0,15.24 -> 33.87 x 0.3\n# Warm bar: 0,15.54 -> 33.87 x 3.51\n###############################################################################\necho '[\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[1]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"0cm\",\"width\":\"33.87cm\",\"height\":\"15.24cm\",\"rotation\":\"0\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[2]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"15.54cm\",\"width\":\"33.87cm\",\"height\":\"3.51cm\",\"rotation\":\"0\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[3]\",\"props\":{\n \"x\":\"0cm\",\"y\":\"15.24cm\",\"width\":\"33.87cm\",\"height\":\"0.3cm\",\"rotation\":\"0\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[4]\",\"props\":{\n \"x\":\"28cm\",\"y\":\"2cm\",\"width\":\"3cm\",\"height\":\"3cm\",\"opacity\":\"0.15\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[5]\",\"props\":{\n \"x\":\"2cm\",\"y\":\"16cm\",\"width\":\"2cm\",\"height\":\"2cm\",\"opacity\":\"0.3\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[6]\",\"props\":{\n \"x\":\"10cm\",\"y\":\"7cm\",\"width\":\"8cm\",\"height\":\"0.08cm\",\"opacity\":\"0.4\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[7]\",\"props\":{\n \"text\":\"See Our Work\",\"size\":\"64\",\"color\":\"FFFFFF\",\n \"x\":\"2cm\",\"y\":\"3cm\",\"width\":\"30cm\",\"height\":\"5cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[7]/paragraph[1]\",\"props\":{\"align\":\"center\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[8]\",\"props\":{\n \"text\":\"[email protected]\",\"size\":\"20\",\"color\":\"FFFFFF\",\n \"x\":\"2cm\",\"y\":\"8.5cm\",\"width\":\"30cm\",\"height\":\"2cm\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[8]/paragraph[1]\",\"props\":{\"align\":\"center\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[19]\",\"props\":{\n \"text\":\"\",\"x\":\"38cm\",\"y\":\"11cm\",\"width\":\"0.1cm\",\"height\":\"0.1cm\"}},\n\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[10]\",\"props\":{\"x\":\"36cm\",\"y\":\"5cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[11]\",\"props\":{\"x\":\"36cm\",\"y\":\"8cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[12]\",\"props\":{\"x\":\"37cm\",\"y\":\"2cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[13]\",\"props\":{\"x\":\"37cm\",\"y\":\"5cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[14]\",\"props\":{\"x\":\"37cm\",\"y\":\"8cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[15]\",\"props\":{\"x\":\"37cm\",\"y\":\"11cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[16]\",\"props\":{\"x\":\"38cm\",\"y\":\"2cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[17]\",\"props\":{\"x\":\"38cm\",\"y\":\"5cm\",\"text\":\"\"}},\n {\"command\":\"set\",\"path\":\"/slide[5]/shape[18]\",\"props\":{\"x\":\"38cm\",\"y\":\"8cm\",\"text\":\"\"}}\n]' | officecli batch \"$DECK\"\n\n# Validate and review\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$DECK\"\n\necho \"✅ Build complete: $DECK\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":14598,"content_sha256":"2d7f18798569ebb7354f5b401521bb22049063e17d56be1625621a3fa1a64ccf"},{"filename":"reference/styles/mixed--duotone-split/style.md","content":"# 12 Duotone Split — Duotone Split\n\n## Style Overview\n\nCharcoal and terracotta dual-color panels split the canvas in different proportions, morph produces \"shifting canvas\" effect.\n\n- **Scene**: Brand launches, architectural design, high-end presentations\n- **Mood**: Bold, architectural feel, high-end, minimalist\n- **Tone**: Dual-color contrast (deep dark + warm color), white dividers\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------- | ------- | ------------------------------ |\n| Pure White | #FFFFFF | Page background, divider lines |\n| Charcoal Gray | #2D3436 | Dark panel |\n| Terracotta | #E17055 | Warm panel |\n\n## Typography\n\n| Element | Font | Size |\n| ------------- | -------------- | ------- |\n| Main Title | Segoe UI Black | 40-64pt |\n| Data Numbers | Segoe UI Black | 48-64pt |\n| Column Title | Segoe UI Black | 28pt |\n| Body/Subtitle | Segoe UI Light | 16-24pt |\n\n## Design Techniques\n\n- **Dual-panel split**: Two large rect (!!panel-dark + !!panel-warm) cover entire canvas, split in different proportions\n- **White divider line**: 0.3cm wide white rect as precise divider between two panels\n- **Split proportion changes**: S1 left-right 50/50 → S2 top-bottom 70/30 → S3 left-right 30/70 → S4 diagonal rotation → S5 top-bottom 80/20\n- **Morph choreography**: Massive changes in panel size and position produce \"shifting canvas\" effect, divider line follows movement\n- **Rotation variation**: S4 panels rotated -8 degrees, breaking orthogonal layout for added dynamism\n- **Restrained decoration**: Only 2 semi-transparent dots + 1 ultra-thin line, maintaining minimalism\n\n## Scene Elements\n\n| Name | Type | Description |\n| ---------------- | ----------------- | ------------------------------------------ |\n| `!!panel-dark` | rect | Charcoal main panel |\n| `!!panel-warm` | rect | Terracotta warm panel |\n| `!!divider` | rect (0.3cm) | White panel divider line |\n| `!!accent-dot-1` | ellipse | White semi-transparent decorative dot |\n| `!!accent-dot-2` | ellipse | Terracotta semi-transparent decorative dot |\n| `!!accent-line` | rect (ultra-thin) | White semi-transparent decorative line |\n\n## Page Structure (5 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | --------------------------------------------------------------------------------------------------------------- | ----------- |\n| S1 | hero | Cover — left-right 50/50 split, title on dark panel |\n| S2 | statement | Statement — top-bottom 70/30 split (dark occupies top 70%), centered large title |\n| S3 | pillars | Three-column — left-right 30/70 (narrow dark left column + wide warm right column), three pillars on warm panel |\n| S4 | evidence | Data — panels rotated -8 degrees forming diagonal split, data scattered across both panels |\n| S5 | cta | Closing — top-bottom 80/20 (dark occupies top 80%), call to action centered |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Initial layout of 6 scene actors, understanding panel + divider line structure\n- **Slide 4 (evidence)** — Panel rotation + diagonal split implementation\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3825,"content_sha256":"e3e0f07ff32c27962de6b4c538928e65a4842903389df2528457e15bf3f29c58"},{"filename":"reference/styles/mixed--spectral-grid/style.md","content":"# Spectral Grid — Vibrant Synthesis\n\n## Style Overview\n\nCombines Bauhaus color-blocking + gradient ray-fan + mosaic tiles. Deep indigo base with amber, lime, and coral accents.\n\n- **Scenario**: Creative tech, innovation showcases, design conferences\n- **Mood**: Vibrant, energetic, innovative, experimental\n- **Tone**: Deep indigo with multi-color accents\n\n## Design Techniques\n\n- !!prism actor (diagonal gradient panel) rotates + reshapes each slide\n- Gradient ray-fan\n- Mosaic tile patterns\n- Bullseye ring elements\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":589,"content_sha256":"559e997e642ce8910964b1c21af5524f1428d905ab8a2d460dc9b114af8d6a36"},{"filename":"reference/styles/vivid--bauhaus-electric/style.md","content":"# Bauhaus Electric — Creative Agency\n\n## Style Overview\n\nElectric blue + acid lime bold geometric rects with Bauhaus aesthetic. Features twin-shape morph journey and parallelogram geometry.\n\n- **Scenario**: Creative agencies, design studios, bold branding\n- **Mood**: Bold, energetic, geometric, electric\n- **Tone**: Electric blue + acid lime\n\n## Design Techniques\n\n- !!blockA (blue) + !!blockB (lime) twin-shape morph\n- Parallelogram geometry\n- Asterisk 8-pointed star accent\n- Raw geometric forms\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":570,"content_sha256":"9e7e3a9721732fe20b32697bf7d408f157ef28195fdb7c27ddb44369036938e1"},{"filename":"reference/styles/vivid--candy-stripe/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/vivid__candy_stripe.pptx\"\n\necho \"Building: vivid--candy-stripe (Rainbow Candy Stripes)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=FFFFFF\nRED=FF5252\nORANGE=FF7B39\nYELLOW=FFD740\nGREEN=69F0AE\nBLUE=40C4FF\nPURPLE=7C4DFF\nBLACK=1A1A1A\nGRAY=555555\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: 6 rainbow stripes (evenly distributed)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=0cm --prop width=34cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=3.4cm --prop width=34cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=6.8cm --prop width=34cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-green' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=10.2cm --prop width=34cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-blue' \\\n --prop preset=rect \\\n --prop fill=$BLUE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=13.6cm --prop width=34cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stripe-purple' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=17cm --prop width=34cm --prop height=2cm\n\n# Content: hero text\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"Color Your World\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=5.5cm --prop width=28cm --prop height=4.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-subtitle' \\\n --prop text=\"Creative Festival 2026\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=28 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=10.5cm --prop width=28cm --prop height=2.5cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Compress all stripes to top (thin header bar)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=0cm --prop width=34cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=0.5cm --prop width=34cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=1cm --prop width=34cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-green' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=1.5cm --prop width=34cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-blue' \\\n --prop preset=rect \\\n --prop fill=$BLUE \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=2cm --prop width=34cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!stripe-purple' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=2.5cm --prop width=34cm --prop height=0.5cm\n\n# Content\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-statement' \\\n --prop text=\"6 Days of Inspiration\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=54 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=7cm --prop width=28cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-desc' \\\n --prop text=\"Join artists, designers, and creators from around the world\\nto celebrate the power of color and imagination.\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=20 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=11.5cm --prop width=28cm --prop height=3cm\n\n# ============================================\n# SLIDE 3 - PILLARS (3 columns)\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Stripes become card backgrounds (paired: red+orange, yellow+green, blue+purple)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop opacity=0.12 \\\n --prop x=2cm --prop y=5cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=0.12 \\\n --prop x=2cm --prop y=5cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=0.12 \\\n --prop x=12.5cm --prop y=5cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-green' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop opacity=0.12 \\\n --prop x=12.5cm --prop y=5cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-blue' \\\n --prop preset=rect \\\n --prop fill=$BLUE \\\n --prop opacity=0.12 \\\n --prop x=23cm --prop y=5cm --prop width=9cm --prop height=10cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!stripe-purple' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop opacity=0.12 \\\n --prop x=23cm --prop y=5cm --prop width=9cm --prop height=10cm\n\n# Content: title\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text=\"Three Themes\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=1.5cm --prop width=28cm --prop height=2.5cm\n\n# Column 1\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col1-num' \\\n --prop text=\"01\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=40 \\\n --prop bold=true \\\n --prop color=$RED \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=6cm --prop width=7cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col1-title' \\\n --prop text=\"Color Theory\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=8.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col1-desc' \\\n --prop text=\"Understanding harmony, contrast, and emotional impact of color combinations.\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=10.5cm --prop width=7cm --prop height=3cm\n\n# Column 2\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col2-num' \\\n --prop text=\"02\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=40 \\\n --prop bold=true \\\n --prop color=$YELLOW \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=13.5cm --prop y=6cm --prop width=7cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col2-title' \\\n --prop text=\"Digital Art\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=13.5cm --prop y=8.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col2-desc' \\\n --prop text=\"Exploring vibrant palettes in modern digital design and illustration.\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=13.5cm --prop y=10.5cm --prop width=7cm --prop height=3cm\n\n# Column 3\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col3-num' \\\n --prop text=\"03\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=40 \\\n --prop bold=true \\\n --prop color=$BLUE \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=24cm --prop y=6cm --prop width=7cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col3-title' \\\n --prop text=\"Brand Identity\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=24 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=24cm --prop y=8.5cm --prop width=7cm --prop height=1.5cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-col3-desc' \\\n --prop text=\"Creating memorable brands through strategic color selection.\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=16 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=24cm --prop y=10.5cm --prop width=7cm --prop height=3cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE (data with blue background)\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Blue stripe expands as large background, others retreat to edges\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=0cm --prop width=34cm --prop height=0.3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=0.3cm --prop width=34cm --prop height=0.3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=0.6cm --prop width=34cm --prop height=0.3cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-green' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop opacity=0.3 \\\n --prop x=0cm --prop y=5cm --prop width=34cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-blue' \\\n --prop preset=rect \\\n --prop fill=$BLUE \\\n --prop opacity=0.3 \\\n --prop x=0cm --prop y=5cm --prop width=34cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!stripe-purple' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop opacity=1 \\\n --prop x=0cm --prop y=18.5cm --prop width=34cm --prop height=0.3cm\n\n# Content\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text=\"By The Numbers\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=1.5cm --prop width=28cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-num' \\\n --prop text=\"12,000+\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=7cm --prop width=28cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-label' \\\n --prop text=\"Creative Professionals Expected to Attend\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=24 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=12cm --prop width=28cm --prop height=2cm\n\n# ============================================\n# SLIDE 5 - CTA (bottom rainbow footer)\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# All stripes gather at bottom (inverted rainbow footer)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-red' \\\n --prop preset=rect \\\n --prop fill=$RED \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=12cm --prop width=34cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-orange' \\\n --prop preset=rect \\\n --prop fill=$ORANGE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=13.2cm --prop width=34cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-yellow' \\\n --prop preset=rect \\\n --prop fill=$YELLOW \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=14.4cm --prop width=34cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-green' \\\n --prop preset=rect \\\n --prop fill=$GREEN \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=15.6cm --prop width=34cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-blue' \\\n --prop preset=rect \\\n --prop fill=$BLUE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=16.8cm --prop width=34cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!stripe-purple' \\\n --prop preset=rect \\\n --prop fill=$PURPLE \\\n --prop opacity=0.85 \\\n --prop x=0cm --prop y=18cm --prop width=34cm --prop height=1.05cm\n\n# Content\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text=\"Join Us This Summer\" \\\n --prop font=\"Segoe UI Black\" \\\n --prop size=54 \\\n --prop bold=true \\\n --prop color=$BLACK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=3cm --prop width=28cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-date' \\\n --prop text=\"June 15-20, 2026\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=28 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=7.5cm --prop width=28cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-web' \\\n --prop text=\"creativefestival.com\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=24 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=3cm --prop y=10cm --prop width=28cm --prop height=1.5cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":15573,"content_sha256":"72b28f52c12450d1d02eaf4a00b5f0765ca9f2eff383008565d8485888a8773f"},{"filename":"reference/styles/vivid--candy-stripe/style.md","content":"# 10 Candy Stripe — Rainbow Candy Stripes\n\n## Style Overview\n\nSix full-width rainbow stripes slide, stretch, and gather across pages on white background, creating festive joyful atmosphere.\n\n- **Scene**: Celebrations, festivals, children's education, creative marketing\n- **Mood**: Joyful, lively, festive, rainbow\n- **Tone**: White base, six-color rainbow accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ------------ | ------- | ---------------- |\n| Pure White | #FFFFFF | Page background |\n| Candy Red | #FF5252 | Rainbow stripe 1 |\n| Orange | #FF7B39 | Rainbow stripe 2 |\n| Lemon Yellow | #FFD740 | Rainbow stripe 3 |\n| Mint Green | #69F0AE | Rainbow stripe 4 |\n| Sky Blue | #40C4FF | Rainbow stripe 5 |\n| Violet | #7C4DFF | Rainbow stripe 6 |\n| Title Black | #1A1A1A | Title text |\n| Body Gray | #555555 | Body text |\n\n## Typography\n\n| Element | Font | Size |\n| ------------- | -------------- | ------- |\n| Main Title | Segoe UI Black | 54-64pt |\n| Data Numbers | Segoe UI Black | 48-72pt |\n| Column Title | Segoe UI Black | 28-40pt |\n| Body/Subtitle | Segoe UI | 16-28pt |\n\n## Design Techniques\n\n- **Full-width rainbow stripes**: 6 full-width rect (width=34cm), creating visual rhythm through y position and height changes only\n- **Vertical sliding**: Stripes slide up and down between pages, morph produces smooth vertical movement\n- **Stretch variation**: Stripe height changes from 2cm (evenly spread) to 0.3cm (compressed into thin lines) to 8cm (expanded into large color block backgrounds)\n- **Opacity adjustment**: 0.12 (faded as card background) to 0.85 (normal display) to 1.0 (deepened when compressed)\n- **Functional transformation**: S1 evenly distributed → S2 compressed into top color bar → S3 becomes three-column card backgrounds → S4 blue expands as data background → S5 gathers into bottom gradient color bar\n\n## Scene Elements\n\n| Name | Type | Description |\n| ----------------- | ---- | -------------------------------- |\n| `!!stripe-red` | rect | Red full-width rainbow stripe |\n| `!!stripe-orange` | rect | Orange full-width rainbow stripe |\n| `!!stripe-yellow` | rect | Yellow full-width rainbow stripe |\n| `!!stripe-green` | rect | Green full-width rainbow stripe |\n| `!!stripe-blue` | rect | Blue full-width rainbow stripe |\n| `!!stripe-purple` | rect | Purple full-width rainbow stripe |\n\n## Page Structure (5 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------------------------------------------------------------------------------------------------------- | ----------- |\n| S1 | hero | Cover — 6 rainbow stripes evenly distributed (3.4cm spacing), centered title |\n| S2 | statement | Statement — 6 stripes compressed to top 4cm forming color title bar, white space below for text |\n| S3 | pillars | Three-column — stripes paired into three column card backgrounds (red+orange, yellow+green, blue+purple) |\n| S4 | evidence | Data — blue stripe expands to 8cm high data background, other stripes retreat to top and bottom edges |\n| S5 | cta | Closing — stripes gather at bottom forming inverted rainbow gradient footer |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Initial even layout of 6 rainbow stripes\n- **Slide 2 (statement)** — Stripe compression effect, understanding height and y position change logic\n- **Slide 4 (evidence)** — Technique for expanding single stripe into large area background\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3910,"content_sha256":"7ab21bbc486d9ae28a3439e965f39b853a8179100a45263ac830640b37b11dd3"},{"filename":"reference/styles/vivid--energy-neon/style.md","content":"# Energy Neon — Editorial Conference\n\n## Style Overview\n\nHigh-energy editorial design with light grey background and bold neon green blocks. Features condensed black typography and multi-column layouts, ideal for conferences, events, and dynamic presentations.\n\n- **Scenario**: Conferences, energy summits, tech events, editorial publications, speaker showcases\n- **Mood**: Energetic, modern, impactful, editorial\n- **Tone**: Light grey with neon green accent blocks\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | ------------------------------------ |\n| Background | #E8E8E8 | Light grey canvas |\n| Primary accent | #00FF41 | Neon green for blocks and highlights |\n| Primary text | #111111 | Near-black for main text |\n| Secondary text | #555555 | Mid-grey for supporting text |\n| White | #FFFFFF | White for text on green blocks |\n\n## Typography\n\n| Element | Font |\n| ------- | -------------- |\n| Title | Segoe UI Black |\n| Body | Segoe UI |\n\n## Design Techniques\n\n- Large neon green rect blocks as morph actors\n- Condensed bold typography for impact\n- Multi-column text layouts\n- Asymmetric block positioning that morphs across slides\n- Editorial conference aesthetic\n- Light background for high energy feel\n\n## Page Structure (7 slides)\n\n| Slide | Type | Description |\n| ----- | --------- | ----------------------------------------------------- |\n| 1 | hero | Neon block left-half, large title right |\n| 2 | pillars | 4-column speaker showcase, small neon block top-right |\n| 3 | statement | Centered message, neon blocks morph to corners |\n| 4 | pillars | 3-column benefits, neon top stripe |\n| 5 | evidence | Large stat with neon background block |\n| 6 | timeline | 4-step process, vertical neon accent |\n| 7 | cta | Call to action, neon block returns to center |\n\n## Key Morph Patterns\n\n- **Neon block actor** (`!!neon-block`): Large rect that moves from left-half → top-right → corners → top-stripe → background → vertical bar → center\n- **Dramatic size changes**: Block scales from 16cm wide full-height down to 4cm accent strips\n- **Color consistency**: Neon green stays constant, creating visual thread across slides\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n\n**Recommended slides to read for core techniques**:\n\n- **Slide 1 (hero)** — asymmetric neon block composition with condensed title\n- **Slide 5 (evidence)** — neon block as content background with white text overlay\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2779,"content_sha256":"318370c3995e8c33b5d583202d1bd8653e4f4809a61fcb0020f375250debb49d"},{"filename":"reference/styles/vivid--pink-editorial/style.md","content":"# Pink Editorial — Gradient Stats\n\n## Style Overview\n\nContemporary editorial design with dark purple to dusty rose gradient background. Features massive bold numbers (100-200pt) as visual anchors, simulated grain texture, and dramatic morph transitions. Perfect for data-driven annual reports and statistical presentations.\n\n- **Scenario**: Annual reports, statistical showcases, editorial publications, data journalism, executive summaries\n- **Mood**: Contemporary, editorial, sophisticated, data-driven\n- **Tone**: Dark purple-pink gradient with high-contrast white typography\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | --------------------------------- | ---------------------------------- |\n| Background | #160B33 → #7B2D52 (gradient 135°) | Dark purple to dusty rose |\n| Primary accent | #C85080 | Pink for gradient overlays |\n| Secondary | #FF8DB8 | Acid pink for accent dots |\n| Blush | #E8A0BC | Light pink for decorative elements |\n| Primary text | #FFFFFF | White for main text |\n| Secondary text | #C090A8 | Dimmed pink for supporting text |\n| Cream | #F5E8F0 | Off-white for descriptions |\n\n## Typography\n\n| Element | Font | Size |\n| ------------ | -------------- | --------- |\n| Hero numbers | Segoe UI Black | 160-200pt |\n| Title | Segoe UI Black | 28-36pt |\n| Stat numbers | Segoe UI Black | 52-64pt |\n| Body | Segoe UI | 14-22pt |\n\n## Design Techniques\n\n- **Massive editorial numbers**: 73%, 99.2% at 160-200pt size as hero elements\n- **Gradient overlays**: Semi-transparent rect with gradients (opacity 0.35-0.40)\n- **Simulated grain**: 11 scattered white ellipses at 0.04 opacity for texture\n- **Morph actors**: `!!num-sweep` (rect/ellipse) and `!!accent-dot` (ellipse) transform across slides\n- **Dual gradient system**: Pink-purple and purple-pink for visual variety\n- **High typography contrast**: White bold text on dark gradient background\n\n## Page Structure (6 slides)\n\n| Slide | Type | Description |\n| ----- | ---------- | -------------------------------------------------- |\n| 1 | hero | Massive \"73%\" with full-width gradient sweep |\n| 2 | evidence | \"99.2%\" stat, accent dot moves to top-left |\n| 3 | comparison | Left gradient panel + right text (editorial split) |\n| 4 | grid | 4 stat blocks with gradient backgrounds, 2×2 grid |\n| 5 | quote | Large quotation with circular gradient overlay |\n| 6 | cta | Call to action with full-screen gradient return |\n\n## Key Morph Patterns\n\n- **!!num-sweep**: Transforms from full-width rect → narrower rect → large ellipse (opacity 0.06) → ellipse (opacity 0.28) → large ellipse → full-gradient\n- **!!accent-dot**: Acid pink ellipse that moves: bottom-right (5.5cm) → top-left (4cm) → mid-right (3cm) → embedded in grid (5.5cm) → left (4cm) → center\n- **Gradient direction changes**: Alternates between 90°, 135°, 45° for visual variety\n- **Size drama**: Numbers scale from 200pt → 160pt → 52-64pt grid\n\n## Special Effects\n\n- **Grain texture function**: Adds 11 white ellipses at random positions, 0.04 opacity on every slide for analog feel\n- **Gradient actor animation**: Semi-transparent gradient rects morph in position, size, and opacity\n- **Typography as decoration**: Massive numbers serve dual purpose as content and visual structure\n\n## Reference Script\n\nComplete build script available in `build.py` (Python with officecli).\n\n**Recommended slides to read for core techniques**:\n\n- **Slide 1 (hero)** — massive 200pt number with full-width gradient sweep and grain texture\n- **Slide 4 (grid)** — 4-block stats layout with embedded gradient actors and nested ellipses\n- **Slide 5 (quote)** — large circular gradient overlay with quotation mark typography\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4159,"content_sha256":"a99231ad8f057543735b7988319439023e45213073085cf8f9d9fde235a3984f"},{"filename":"reference/styles/vivid--playful-marketing/build.sh","content":"#!/bin/bash\n# Playful Marketing Template - Build Script v2.0\n# 活力青春营销风格PPT模板 - 丰富版 300+ 元素\n# 坐标冲突修复版:采用左右分割布局\n#\n# 独特布局: 大色块拼接 + 对角线分割\n# 设计特点: 左色块(0-12cm) + 右内容(14-33cm)\n# 修复: 卡片与装饰区域不再重叠,移除批量装饰圆点\n# --------------------------------------------\n\nset -e\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/vivid__playful_marketing.pptx\"\necho \"Creating $OUTPUT ...\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# 添加6个幻灯片\nfor i in 1 2 3 4 5 6; do\n officecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=FFFFFF\ndone\necho \"Created 6 slides\"\n\n# ============================================\n# SLIDE 1 - HERO (封面页)\n# 独特布局: 左色块(0-12cm) + 右内容区(14-33cm)\n# 修复: 白色卡片不再与右侧色块重叠\n# ============================================\necho \"Building Slide 1...\"\n\n# 左侧珊瑚橙大色块 (装饰区: 0-12cm)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=0cm --prop y=0cm --prop width=12cm --prop height=19.05cm\n\n# 右下角装饰色块 (装饰区)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=4ECDC4 --prop x=28cm --prop y=11cm --prop width=5.87cm --prop height=8.05cm\n\n# 右上角装饰色块 (装饰区)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=29cm --prop y=0cm --prop width=4.87cm --prop height=5cm\n\n# 装饰圆 (在装饰区域内) - 手动定义最多3个\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop opacity=0.3 --prop x=5cm --prop y=12cm --prop width=6cm --prop height=6cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.4 --prop x=3cm --prop y=8cm --prop width=4cm --prop height=4cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.3 --prop x=6cm --prop y=3cm --prop width=3cm --prop height=3cm\n\n# 主内容卡片 (内容区: 14-28cm,不与右侧装饰重叠)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=14cm --prop y=2cm --prop width=13cm --prop height=15cm\n\n# 卡片内容\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=roundRect --prop fill=FF6B6B --prop x=16cm --prop y=3.5cm --prop width=5cm --prop height=1.2cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"新品发布\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=FFFFFF --prop align=center --prop x=16cm --prop y=3.7cm --prop width=5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"2026 夏季\" --prop font=\"Microsoft YaHei\" --prop size=28 --prop color=2C2C54 --prop align=left --prop x=16cm --prop y=5.5cm --prop width=10cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"营销活动\" --prop font=\"Microsoft YaHei\" --prop size=52 --prop bold=true --prop color=FF6B6B --prop align=left --prop x=16cm --prop y=7.2cm --prop width=10cm --prop height=2.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"SUMMER CAMPAIGN\" --prop font=\"Arial Black\" --prop size=20 --prop color=4ECDC4 --prop align=left --prop x=16cm --prop y=10.2cm --prop width=10cm --prop height=1cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=16cm --prop y=12cm --prop width=8cm --prop height=0.15cm\n\n# 日期和地点\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"日期\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=left --prop x=16cm --prop y=12.8cm --prop width=3cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"2026.06.15 - 06.30\" --prop font=\"Arial Black\" --prop size=14 --prop color=2C2C54 --prop align=left --prop x=16cm --prop y=13.3cm --prop width=8cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"地点\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=left --prop x=16cm --prop y=14.1cm --prop width=3cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop text=\"全国线下门店 + 线上商城\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=2C2C54 --prop align=left --prop x=16cm --prop y=14.6cm --prop width=10cm --prop height=0.6cm --prop fill=none\n\n# 底部装饰线\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=0cm --prop y=18.8cm --prop width=33.87cm --prop height=0.25cm\n\n# 左侧装饰圆点 (手动定义3个)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.6 --prop x=8cm --prop y=15cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.5 --prop x=9cm --prop y=16cm --prop width=0.3cm --prop height=0.3cm\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.4 --prop x=10cm --prop y=15.5cm --prop width=0.25cm --prop height=0.25cm\n\necho \"Slide 1 complete\"\n\n# ============================================\n# SLIDE 2 - STATEMENT (观点页)\n# 独特布局: 左侧装饰区 + 中央内容区\n# ============================================\necho \"Building Slide 2...\"\n\n# 左侧黄色装饰条 (装饰区)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=0cm --prop y=0cm --prop width=5cm --prop height=19.05cm\n\n# 右下角装饰色块\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=4ECDC4 --prop x=27cm --prop y=13cm --prop width=6.87cm --prop height=6.05cm\n\n# 大数字背景 (内容区)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"500%\" --prop font=\"Arial Black\" --prop size=180 --prop color=FF6B6B --prop opacity=0.12 --prop align=left --prop x=6cm --prop y=0cm --prop width=25cm --prop height=10cm --prop fill=none\n\n# 左侧装饰圆点 (手动定义3个)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop opacity=0.3 --prop x=1cm --prop y=5cm --prop width=0.5cm --prop height=0.5cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.4 --prop x=2cm --prop y=7cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.3 --prop x=1.5cm --prop y=9cm --prop width=0.35cm --prop height=0.35cm\n\n# 核心内容 (内容区: 6-26cm)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"营销活动\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop color=4ECDC4 --prop align=left --prop x=7cm --prop y=3cm --prop width=8cm --prop height=1cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"效果提升\" --prop font=\"Microsoft YaHei\" --prop size=72 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=7cm --prop y=4.5cm --prop width=18cm --prop height=3cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"通过创新营销策略,实现品牌曝光与销售转化的双重突破\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=666666 --prop align=left --prop x=7cm --prop y=8.5cm --prop width=20cm --prop height=1cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=7cm --prop y=10cm --prop width=6cm --prop height=0.15cm\n\n# 数据卡片 (内容区域内,不与右侧装饰重叠)\n# 卡片1: x=7cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=7cm --prop y=11.5cm --prop width=6cm --prop height=4cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=7cm --prop y=11.5cm --prop width=6cm --prop height=0.2cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"品牌曝光\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=left --prop x=7.5cm --prop y=12.2cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"2.8亿+\" --prop font=\"Arial Black\" --prop size=26 --prop color=FF6B6B --prop align=left --prop x=7.5cm --prop y=13cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"同比+380%\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=4ECDC4 --prop align=left --prop x=7.5cm --prop y=14.5cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\n# 卡片2: x=14cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=14cm --prop y=11.5cm --prop width=6cm --prop height=4cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=14cm --prop y=11.5cm --prop width=6cm --prop height=0.2cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"销售转化\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=left --prop x=14.5cm --prop y=12.2cm --prop width=5cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"15.6%\" --prop font=\"Arial Black\" --prop size=26 --prop color=FFE66D --prop align=left --prop x=14.5cm --prop y=13cm --prop width=5cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"行业平均3倍\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=4ECDC4 --prop align=left --prop x=14.5cm --prop y=14.5cm --prop width=5cm --prop height=0.5cm --prop fill=none\n\n# 卡片3: x=21cm (确保不与右下角装饰色块重叠)\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=21cm --prop y=11.5cm --prop width=5.5cm --prop height=4cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop preset=rect --prop fill=4ECDC4 --prop x=21cm --prop y=11.5cm --prop width=5.5cm --prop height=0.2cm\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"ROI回报\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=left --prop x=21.5cm --prop y=12.2cm --prop width=4cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"8.5x\" --prop font=\"Arial Black\" --prop size=26 --prop color=4ECDC4 --prop align=left --prop x=21.5cm --prop y=13cm --prop width=4cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape --prop text=\"超预期目标\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=FF6B6B --prop align=left --prop x=21.5cm --prop y=14.5cm --prop width=4cm --prop height=0.5cm --prop fill=none\n\necho \"Slide 2 complete\"\n\n# ============================================\n# SLIDE 3 - PRODUCT (产品页)\n# 独特布局: 左图右文\n# ============================================\necho \"Building Slide 3...\"\n\n# 顶部装饰条\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=0.3cm\n\n# 左侧产品展示区 (内容区: 1-15cm)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=F5F5F5 --prop x=1cm --prop y=1.5cm --prop width=14cm --prop height=16cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.3 --prop x=3cm --prop y=4cm --prop width=10cm --prop height=10cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.2 --prop x=5cm --prop y=6cm --prop width=6cm --prop height=6cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"产品图片\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=999999 --prop align=center --prop x=1cm --prop y=8.5cm --prop width=14cm --prop height=1cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"智能新品 Pro\" --prop font=\"Microsoft YaHei\" --prop size=24 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=1.5cm --prop y=2cm --prop width=12cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"SMART PRODUCT PRO\" --prop font=\"Arial Black\" --prop size=12 --prop color=4ECDC4 --prop align=left --prop x=1.5cm --prop y=3.2cm --prop width=10cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=FF6B6B --prop x=1.5cm --prop y=14.5cm --prop width=5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"RMB 1999\" --prop font=\"Arial Black\" --prop size=22 --prop color=FFFFFF --prop align=center --prop x=1.5cm --prop y=14.8cm --prop width=5cm --prop height=1cm --prop fill=none\n\n# 右侧功能介绍 (内容区: 17-33cm)\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"核心功能\" --prop font=\"Microsoft YaHei\" --prop size=24 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=17cm --prop y=2cm --prop width=10cm --prop height=1.2cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"KEY FEATURES\" --prop font=\"Arial Black\" --prop size=12 --prop color=FF6B6B --prop align=left --prop x=17cm --prop y=3.2cm --prop width=8cm --prop height=0.6cm --prop fill=none\n\n# 功能卡片1\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=17cm --prop y=4.5cm --prop width=15cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop opacity=0.15 --prop x=18.5cm --prop y=5.2cm --prop width=2cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"01\" --prop font=\"Arial Black\" --prop size=16 --prop color=FF6B6B --prop align=center --prop x=18.5cm --prop y=5.7cm --prop width=2cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"智能AI助手\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=21.5cm --prop y=5cm --prop width=8cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"内置先进AI算法,智能识别用户需求\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=21.5cm --prop y=6cm --prop width=9cm --prop height=1.2cm --prop fill=none\n\n# 功能卡片2\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=17cm --prop y=8.5cm --prop width=15cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.3 --prop x=18.5cm --prop y=9.2cm --prop width=2cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"02\" --prop font=\"Arial Black\" --prop size=16 --prop color=FFE66D --prop align=center --prop x=18.5cm --prop y=9.7cm --prop width=2cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"超长续航\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=21.5cm --prop y=9cm --prop width=8cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"大容量电池设计,续航时间长达72小时\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=21.5cm --prop y=10cm --prop width=9cm --prop height=1.2cm --prop fill=none\n\n# 功能卡片3\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=17cm --prop y=12.5cm --prop width=15cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.3 --prop x=18.5cm --prop y=13.2cm --prop width=2cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"03\" --prop font=\"Arial Black\" --prop size=16 --prop color=4ECDC4 --prop align=center --prop x=18.5cm --prop y=13.7cm --prop width=2cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"极速快充\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=21.5cm --prop y=13cm --prop width=8cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop text=\"支持65W快充技术,30分钟充电80%\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=21.5cm --prop y=14cm --prop width=9cm --prop height=1.2cm --prop fill=none\n\n# 右下角装饰\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=29cm --prop y=16cm --prop width=4.87cm --prop height=3.05cm\n\necho \"Slide 3 complete\"\n\n# ============================================\n# SLIDE 4 - GRID (网格页)\n# 独特布局: 六边形蜂窝网格概念 - 实际用2x3卡片\n# ============================================\necho \"Building Slide 4...\"\n\n# 左侧装饰区\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=FF6B6B --prop opacity=0.1 --prop x=0cm --prop y=0cm --prop width=10cm --prop height=19.05cm\n\n# 右侧装饰区\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=4ECDC4 --prop opacity=0.1 --prop x=27cm --prop y=0cm --prop width=6.87cm --prop height=19.05cm\n\n# 左侧装饰圆点 (手动定义3个)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop opacity=0.2 --prop x=2cm --prop y=5cm --prop width=0.5cm --prop height=0.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.3 --prop x=3cm --prop y=7cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.25 --prop x=4cm --prop y=9cm --prop width=0.35cm --prop height=0.35cm\n\n# 标题 (内容区)\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"为什么选择我们\" --prop font=\"Microsoft YaHei\" --prop size=32 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=2cm --prop y=1cm --prop width=15cm --prop height=1.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"WHY CHOOSE US\" --prop font=\"Arial Black\" --prop size=14 --prop color=FF6B6B --prop align=left --prop x=2cm --prop y=2.5cm --prop width=10cm --prop height=0.8cm --prop fill=none\n\n# 上排3个卡片 (内容区: 2-26cm)\n# 卡片1\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=2cm --prop y=4cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop x=5.25cm --prop y=4.8cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"品质保障\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=2cm --prop y=6.8cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"严格质量管控体系\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=2cm --prop y=7.8cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 卡片2\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=10.5cm --prop y=4cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop x=13.75cm --prop y=4.8cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"极速发货\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=10.5cm --prop y=6.8cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"48小时内发货\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=10.5cm --prop y=7.8cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 卡片3\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=19cm --prop y=4cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop x=22.25cm --prop y=4.8cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"专业客服\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=19cm --prop y=6.8cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"7x24小时在线\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=19cm --prop y=7.8cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 下排3个卡片\n# 卡片4\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=2cm --prop y=10.5cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop x=5.25cm --prop y=11.3cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"无忧退换\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=2cm --prop y=13.3cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"30天无理由退换\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=2cm --prop y=14.3cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 卡片5\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=10.5cm --prop y=10.5cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop x=13.75cm --prop y=11.3cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"正品保证\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=10.5cm --prop y=13.3cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"官方授权正品\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=10.5cm --prop y=14.3cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 卡片6\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=19cm --prop y=10.5cm --prop width=7.5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop x=22.25cm --prop y=11.3cm --prop width=1.5cm --prop height=1.5cm\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"会员特权\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=center --prop x=19cm --prop y=13.3cm --prop width=7.5cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop text=\"积分兑换好礼\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=center --prop x=19cm --prop y=14.3cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\n\n# 底部装饰线\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=0cm --prop y=18.8cm --prop width=33.87cm --prop height=0.25cm\n\necho \"Slide 4 complete\"\n\n# ============================================\n# SLIDE 5 - QUOTE (引用页)\n# 独特布局: 大引号居中 + 评价环绕\n# ============================================\necho \"Building Slide 5...\"\n\n# 左侧黄色装饰条 (装饰区)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=FFE66D --prop x=0cm --prop y=0cm --prop width=4cm --prop height=19.05cm\n\n# 大引号背景 (内容区)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"[QUOTE]\" --prop font=\"Georgia\" --prop size=180 --prop color=FF6B6B --prop opacity=0.12 --prop align=left --prop x=5cm --prop y=1cm --prop width=10cm --prop height=8cm --prop fill=none\n\n# 左侧装饰圆点 (手动定义3个)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=FF6B6B --prop opacity=0.2 --prop x=1cm --prop y=5cm --prop width=0.5cm --prop height=0.5cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.25 --prop x=2cm --prop y=7cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.3 --prop x=1.5cm --prop y=9cm --prop width=0.35cm --prop height=0.35cm\n\n# 核心引用内容 (内容区: 5-30cm)\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"客户评价\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=4ECDC4 --prop align=left --prop x=6cm --prop y=3cm --prop width=6cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"这是我用过最好的产品,\" --prop font=\"Microsoft YaHei\" --prop size=36 --prop color=2C2C54 --prop align=left --prop x=6cm --prop y=4.5cm --prop width=22cm --prop height=1.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"体验超出预期!\" --prop font=\"Microsoft YaHei\" --prop size=36 --prop color=2C2C54 --prop align=left --prop x=6cm --prop y=6.5cm --prop width=18cm --prop height=1.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=6cm --prop y=9cm --prop width=4cm --prop height=0.15cm\n\n# 客户信息卡片\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=6cm --prop y=10.5cm --prop width=12cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.3 --prop x=7.5cm --prop y=11.2cm --prop width=1.6cm --prop height=1.6cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"张女士\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop bold=true --prop color=2C2C54 --prop align=left --prop x=9.5cm --prop y=11cm --prop width=6cm --prop height=0.8cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"资深用户 | 使用3年\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=9.5cm --prop y=12cm --prop width=8cm --prop height=0.6cm --prop fill=none\n\n# 满意度指标\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=19cm --prop y=10.5cm --prop width=10cm --prop height=3cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"客户满意度\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=999999 --prop align=center --prop x=19cm --prop y=11cm --prop width=10cm --prop height=0.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"98.5%\" --prop font=\"Arial Black\" --prop size=36 --prop color=FF6B6B --prop align=center --prop x=19cm --prop y=11.8cm --prop width=10cm --prop height=1.5cm --prop fill=none\n\n# 更多评价卡片\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"更多评价\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=666666 --prop align=left --prop x=6cm --prop y=14.5cm --prop width=6cm --prop height=0.6cm --prop fill=none\n\n# 评价小卡片\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=6cm --prop y=15.5cm --prop width=8.5cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"服务态度好,物流速度快\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=6.5cm --prop y=15.8cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"- 李先生\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=999999 --prop align=right --prop x=6.5cm --prop y=16.5cm --prop width=7.5cm --prop height=0.5cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=15cm --prop y=15.5cm --prop width=8.5cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"产品做工精细,性价比高\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=15.5cm --prop y=15.8cm --prop width=7.5cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"- 王女士\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=999999 --prop align=right --prop x=15.5cm --prop y=16.5cm --prop width=7.5cm --prop height=0.5cm --prop fill=none\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=24cm --prop y=15.5cm --prop width=8cm --prop height=2cm\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"功能强大,超出预期\" --prop font=\"Microsoft YaHei\" --prop size=12 --prop color=666666 --prop align=left --prop x=24.5cm --prop y=15.8cm --prop width=7cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape --prop text=\"- 陈先生\" --prop font=\"Microsoft YaHei\" --prop size=10 --prop color=999999 --prop align=right --prop x=24.5cm --prop y=16.5cm --prop width=7cm --prop height=0.5cm --prop fill=none\n\necho \"Slide 5 complete\"\n\n# ============================================\n# SLIDE 6 - CTA (行动号召页)\n# 独特布局: 顶部大色块 + 底部行动区\n# ============================================\necho \"Building Slide 6...\"\n\n# 顶部珊瑚橙大色块 (装饰区)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=FF6B6B --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=8cm\n\n# 右下角装饰色块\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=4ECDC4 --prop x=27cm --prop y=8cm --prop width=6.87cm --prop height=11.05cm\n\n# 顶部装饰圆点 (手动定义,在装饰区域内)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.15 --prop x=5cm --prop y=2cm --prop width=0.5cm --prop height=0.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFE66D --prop opacity=0.2 --prop x=10cm --prop y=4cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.1 --prop x=15cm --prop y=1cm --prop width=0.35cm --prop height=0.35cm\n\n# 右侧装饰圆点\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.15 --prop x=29cm --prop y=10cm --prop width=0.5cm --prop height=0.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=FFFFFF --prop opacity=0.1 --prop x=30cm --prop y=13cm --prop width=0.4cm --prop height=0.4cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=ellipse --prop fill=4ECDC4 --prop opacity=0.1 --prop x=31cm --prop y=16cm --prop width=0.35cm --prop height=0.35cm\n\n# 主标题 (在珊瑚橙背景上)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"立即行动\" --prop font=\"Microsoft YaHei\" --prop size=56 --prop bold=true --prop color=FFFFFF --prop align=left --prop x=4cm --prop y=2cm --prop width=15cm --prop height=2.5cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"TAKE ACTION NOW\" --prop font=\"Arial Black\" --prop size=22 --prop color=FFE66D --prop align=left --prop x=4cm --prop y=4.8cm --prop width=15cm --prop height=1cm --prop fill=none\n\n# 限时优惠标签\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=FFE66D --prop x=4cm --prop y=6cm --prop width=4cm --prop height=1cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"限时优惠\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=2C2C54 --prop align=center --prop x=4cm --prop y=6.2cm --prop width=4cm --prop height=0.6cm --prop fill=none\n\n# 主按钮 (内容区)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=FF6B6B --prop x=4cm --prop y=10cm --prop width=10cm --prop height=2.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"立即购买\" --prop font=\"Microsoft YaHei\" --prop size=24 --prop bold=true --prop color=FFFFFF --prop align=center --prop x=4cm --prop y=10.6cm --prop width=10cm --prop height=1.2cm --prop fill=none\n\n# 次按钮\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop line=FF6B6B --prop lineWidth=2pt --prop x=15cm --prop y=10cm --prop width=8cm --prop height=2.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"了解更多\" --prop font=\"Microsoft YaHei\" --prop size=18 --prop color=FF6B6B --prop align=center --prop x=15cm --prop y=10.6cm --prop width=8cm --prop height=1.2cm --prop fill=none\n\n# 联系信息卡片 (内容区: 4-25cm)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=roundRect --prop fill=FFFFFF --prop x=4cm --prop y=14cm --prop width=18cm --prop height=3.5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"联系我们\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=999999 --prop align=left --prop x=5cm --prop y=14.5cm --prop width=5cm --prop height=0.6cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"客服热线: 400-888-8888\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=2C2C54 --prop align=left --prop x=5cm --prop y=15.3cm --prop width=12cm --prop height=0.7cm --prop fill=none\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"官方网站: www.brand.com\" --prop font=\"Microsoft YaHei\" --prop size=16 --prop color=2C2C54 --prop align=left --prop x=5cm --prop y=16.2cm --prop width=12cm --prop height=0.7cm --prop fill=none\n\n# 二维码占位 (装饰区内)\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop preset=rect --prop fill=FFFFFF --prop x=28cm --prop y=10cm --prop width=5cm --prop height=5cm\nofficecli add \"$OUTPUT\" '/slide[6]' --type shape --prop text=\"扫码关注\" --prop font=\"Microsoft YaHei\" --prop size=14 --prop color=999999 --prop align=center --prop x=28cm --prop y=12cm --prop width=5cm --prop height=0.6cm --prop fill=none\n\necho \"Slide 6 complete\"\n\n# ============================================\n# MORPH TRANSITIONS\n# ============================================\necho \"Adding Morph transitions...\"\nfor i in 2 3 4 5 6; do\n officecli set \"$OUTPUT\" \"/slide[$i]\" --prop transition=morph\ndone\n\necho \"Validating...\"\nofficecli validate \"$OUTPUT\"\necho \"[OK] Complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":35671,"content_sha256":"07386d5c1cef2ec0cce73f511ae6ff6890bec7d6860dcf70a176df5f69718e37"},{"filename":"reference/styles/vivid--playful-marketing/style.md","content":"# 03-playful-marketing — Vibrant Youth Marketing\n\n## Style Overview\n\nCoral orange, bright yellow, and mint green color clash with large color blocks and diagonal division layout, suitable for marketing campaigns, new product launches, promotional activities, and other youth-oriented occasions.\n\n- **Scene**: Marketing campaigns, brand launches, new product promotions, promotional activities\n- **Mood**: Youthful, energetic, enthusiastic, creative, bold\n- **Tone**: Warm tones, high saturation, high contrast\n- **Industry**: Consumer goods, e-commerce, entertainment, education, food & beverage\n\n## Color Palette\n\n| Name | Hex | Usage |\n| -------------- | ------- | -------------- |\n| Background | #FFFFFF | background |\n| Primary | #FF6B6B | primary |\n| Secondary | #FFE66D | secondary |\n| Accent | #4ECDC4 | accent |\n| Dark | #2C2C54 | dark |\n| Text Primary | #2C2C54 | text_primary |\n| Text Secondary | #666666 | text_secondary |\n| Text Muted | #999999 | text_muted |\n\n## Typography\n\n| Element | Font |\n| -------- | --------------- |\n| title_en | Arial Black |\n| title_cn | Microsoft YaHei |\n| body | Microsoft YaHei |\n| data | Arial Black |\n\n## Design Techniques\n\n- Coral orange, bright yellow, mint green color clash\n- Large color block assembly layout\n- Diagonal division design\n- Dynamic lively layout\n- High contrast design\n- Morph transition animation\n- Coordinate conflicts fixed\n\n## Page Structure (6 pages)\n\n| Slide | Type | Elements | Description |\n| ----- | --------- | -------- | -------------------------------------------------------------- |\n| S1 | hero | 50 | Cover page - large color block on left + content card on right |\n| S2 | statement | 45 | Statement page - central content + data cards |\n| S3 | product | 50 | Product page - left image right text layout |\n| S4 | grid | 55 | Grid page - 2x3 card grid |\n| S5 | quote | 40 | Quote page - large quotation marks + surrounding testimonials |\n| S6 | cta | 40 | CTA page - top large color block + bottom action area |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — Cover page - large color block on left + content card on right\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2627,"content_sha256":"d092e2b080c97cb6bd3ca2d24ba9937839fa8234946144c08d07d15be3b3ce57"},{"filename":"reference/styles/warm--bloom-academy/style.md","content":"# Bloom Academy — Education Blobs\n\n## Style Overview\n\nEducational design with organic blob ellipses using layered soft-edge technique. Layer 0 (deep bg) has max softedge, Layer 1 (mid) is crisp for contrast.\n\n- **Scenario**: Education, e-learning, children's content, playful branding\n- **Mood**: Playful, educational, organic, friendly\n- **Tone**: Warm educational colors\n\n## Design Techniques\n\n- Layered soft-edge philosophy:\n - Layer 0 (deepest): softedge = avg_radius × 5pt\n - Layer 1 (mid): NO softedge (crisp contrast)\n - Layer 2 (foreground): NO softedge\n- Organic blob shapes\n- Icon badges, dots, pie pieces\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":691,"content_sha256":"ed4fa635b432bf0940db6bf3a9afdc30fb4d7b5b31394d17726088ac732915c1"},{"filename":"reference/styles/warm--brand-refresh/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/warm__brand_refresh.pptx\"\n\necho \"Building: warm--brand-refresh (Brand Refresh 2025)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG_LIGHT=F5F0E8\nBG_DARK=162040\nNAVY=162040\nBLUE=1A6BFF\nORANGE=F4713A\nCYAN=00C9D4\nGREEN=7EC8A0\nPINK=E8749A\nGRAY1=9A9080\nGRAY2=6B6355\nGRAY3=4A5A7A\nGRAY4=7890B8\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_LIGHT\n\n# Scene actors: color blocks + photo placeholders\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=15.5cm --prop y=0cm --prop width=10cm --prop height=13cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$NAVY \\\n --prop x=25.5cm --prop y=0cm --prop width=8.37cm --prop height=7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLUE \\\n --prop x=25.5cm --prop y=7cm --prop width=4cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$ORANGE \\\n --prop x=29.5cm --prop y=7cm --prop width=4.37cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-d' \\\n --prop fill=$CYAN \\\n --prop x=15.5cm --prop y=13cm --prop width=5cm --prop height=6.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-e' \\\n --prop fill=$GREEN \\\n --prop x=20.5cm --prop y=13cm --prop width=5cm --prop height=6.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blk-f' \\\n --prop fill=$PINK \\\n --prop x=25.5cm --prop y=13cm --prop width=8.37cm --prop height=6.05cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: hero text\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-tag' \\\n --prop text=\"BRAND REFRESH 2025\" \\\n --prop font=\"Arial\" \\\n --prop size=11 \\\n --prop bold=true \\\n --prop color=$GRAY1 \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=7cm --prop width=13cm --prop height=0.7cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-title' \\\n --prop text=\"Your Brand, Redefined.\" \\\n --prop font=\"Arial\" \\\n --prop size=52 \\\n --prop bold=true \\\n --prop color=$NAVY \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=7.8cm --prop width=13cm --prop height=5.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-sub' \\\n --prop text=\"A new visual language built for how the world sees you now.\" \\\n --prop font=\"Arial\" \\\n --prop size=15 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=14cm --prop width=13cm --prop height=2.5cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_DARK\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move scene actors\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=0cm --prop y=0cm --prop width=14cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$NAVY \\\n --prop opacity=0.58 \\\n --prop x=0cm --prop y=0cm --prop width=14cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLUE \\\n --prop x=22cm --prop y=0cm --prop width=11.87cm --prop height=3.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$ORANGE \\\n --prop x=22cm --prop y=3.2cm --prop width=11.87cm --prop height=3.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-d' \\\n --prop fill=$CYAN \\\n --prop x=22cm --prop y=6.4cm --prop width=11.87cm --prop height=3.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-e' \\\n --prop fill=$GREEN \\\n --prop x=22cm --prop y=9.6cm --prop width=11.87cm --prop height=3.2cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!blk-f' \\\n --prop fill=$PINK \\\n --prop x=22cm --prop y=12.8cm --prop width=11.87cm --prop height=6.25cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: statement text\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-tag' \\\n --prop text=\"\" \\\n --prop font=\"Arial\" \\\n --prop size=11 \\\n --prop color=$GRAY3 \\\n --prop fill=none \\\n --prop x=15.2cm --prop y=5cm --prop width=4cm --prop height=0.7cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-title' \\\n --prop text=\"Clarity beats complexity.\" \\\n --prop font=\"Arial\" \\\n --prop size=46 \\\n --prop bold=true \\\n --prop color=$BG_LIGHT \\\n --prop fill=none \\\n --prop x=15.2cm --prop y=6cm --prop width=15.5cm --prop height=7cm\n\nofficecli add \"$OUTPUT\" '/slide[2]' --type shape \\\n --prop 'name=#s2-sub' \\\n --prop text=\"The strongest brands say less — and mean more.\" \\\n --prop font=\"Arial\" \\\n --prop size=16 \\\n --prop color=$GRAY4 \\\n --prop fill=none \\\n --prop x=15.2cm --prop y=13.5cm --prop width=15cm --prop height=2.5cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_LIGHT\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move scene actors - top bar with 3 image columns\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$NAVY \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=2.4cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop x=1.6cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=999999 \\\n --prop x=12.4cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-e' \\\n --prop fill=888888 \\\n --prop x=22.8cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$NAVY \\\n --prop opacity=0.42 \\\n --prop x=1.6cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$ORANGE \\\n --prop opacity=0.38 \\\n --prop x=12.4cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-d' \\\n --prop fill=$CYAN \\\n --prop opacity=0.38 \\\n --prop x=22.8cm --prop y=2.4cm --prop width=9.6cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=!!blk-f' \\\n --prop fill=$PINK \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: pillars text\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-tag' \\\n --prop text=\"THREE PILLARS\" \\\n --prop font=\"Arial\" \\\n --prop size=13 \\\n --prop bold=true \\\n --prop color=$BG_LIGHT \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=0.5cm --prop width=20cm --prop height=1.4cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-title' \\\n --prop text=\"Identity Voice Experience\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop bold=true \\\n --prop color=$NAVY \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=11cm --prop width=31cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[3]' --type shape \\\n --prop 'name=#s3-sub' \\\n --prop text=\"A system that speaks before words do.\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=12.4cm --prop width=9.6cm --prop height=3.5cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_LIGHT\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move scene actors - left image with wave overlays, right data panel\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$NAVY \\\n --prop x=0cm --prop y=0cm --prop width=33.87cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=AAAAAA \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$NAVY \\\n --prop opacity=0.78 \\\n --prop geometry=\"M 0,52 C 22,36 44,66 64,46 C 80,30 92,56 100,42 L 100,100 L 0,100 Z\" \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$BLUE \\\n --prop opacity=0.72 \\\n --prop geometry=\"M 0,63 C 22,48 44,76 65,57 C 82,44 93,65 100,53 L 100,100 L 0,100 Z\" \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-d' \\\n --prop fill=$CYAN \\\n --prop opacity=0.68 \\\n --prop geometry=\"M 0,73 C 22,60 44,84 65,66 C 83,55 93,74 100,63 L 100,100 L 0,100 Z\" \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-e' \\\n --prop fill=$GREEN \\\n --prop opacity=0.65 \\\n --prop geometry=\"M 0,82 C 24,70 46,90 66,75 C 83,65 93,82 100,72 L 100,100 L 0,100 Z\" \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!blk-f' \\\n --prop fill=$ORANGE \\\n --prop opacity=0.68 \\\n --prop geometry=\"M 0,90 C 24,80 46,96 66,84 C 83,76 93,90 100,82 L 100,100 L 0,100 Z\" \\\n --prop x=0cm --prop y=2cm --prop width=19cm --prop height=17.05cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: evidence data\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-tag' \\\n --prop text=\"THE NUMBERS\" \\\n --prop font=\"Arial\" \\\n --prop size=13 \\\n --prop bold=true \\\n --prop color=$GRAY1 \\\n --prop fill=none \\\n --prop x=20.4cm --prop y=0.4cm --prop width=12cm --prop height=0.8cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-title' \\\n --prop text=\"+47%\" \\\n --prop font=\"Arial\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$NAVY \\\n --prop fill=none \\\n --prop x=20.4cm --prop y=2.5cm --prop width=12cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[4]' --type shape \\\n --prop 'name=#s4-sub' \\\n --prop text=\"Brand recognition lift\\n\\n2.8x Engagement rate\\n\\n89 Net Promoter Score\" \\\n --prop font=\"Arial\" \\\n --prop size=14 \\\n --prop color=$GRAY2 \\\n --prop fill=none \\\n --prop x=20.4cm --prop y=8cm --prop width=12cm --prop height=8cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_DARK\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move scene actors - final scattered layout\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!photo-2' \\\n --prop fill=666666 \\\n --prop x=21cm --prop y=0cm --prop width=9cm --prop height=19.05cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-a' \\\n --prop fill=$NAVY \\\n --prop opacity=0.75 \\\n --prop x=21cm --prop y=0cm --prop width=4cm --prop height=5.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-b' \\\n --prop fill=$BLUE \\\n --prop x=21cm --prop y=5.5cm --prop width=2.4cm --prop height=4.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-c' \\\n --prop fill=$ORANGE \\\n --prop x=29.5cm --prop y=13.5cm --prop width=4.37cm --prop height=5.55cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-d' \\\n --prop fill=$CYAN \\\n --prop x=29.5cm --prop y=0cm --prop width=4.37cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-e' \\\n --prop fill=$GREEN \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!blk-f' \\\n --prop fill=$PINK \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=!!photo-1' \\\n --prop fill=AAAAAA \\\n --prop opacity=0.01 \\\n --prop x=33cm --prop y=18.55cm --prop width=0.5cm --prop height=0.5cm\n\n# Content: CTA text\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-tag' \\\n --prop text=\"BRAND STRATEGY\" \\\n --prop font=\"Arial\" \\\n --prop size=11 \\\n --prop bold=true \\\n --prop color=$GRAY3 \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=5.5cm --prop width=14cm --prop height=0.7cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-title' \\\n --prop text=\"Start the transformation.\" \\\n --prop font=\"Arial\" \\\n --prop size=46 \\\n --prop bold=true \\\n --prop color=$BG_LIGHT \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=6.4cm --prop width=17cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-sub' \\\n --prop text=\"Let's build something that lasts.\" \\\n --prop font=\"Arial\" \\\n --prop size=16 \\\n --prop color=$GRAY4 \\\n --prop fill=none \\\n --prop x=1.6cm --prop y=13.2cm --prop width=16cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[5]' --type shape \\\n --prop 'name=#s5-cta' \\\n --prop text=\"Get in touch ->\" \\\n --prop font=\"Arial\" \\\n --prop size=15 \\\n --prop bold=true \\\n --prop color=$BG_LIGHT \\\n --prop fill=$ORANGE \\\n --prop x=1.6cm --prop y=15.6cm --prop width=9cm --prop height=1.8cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":14858,"content_sha256":"6dd691f38f5b6cf96c27575f5e620fa78b09e3022bfa7c8ddd9624d708e92cce"},{"filename":"reference/styles/warm--brand-refresh/style.md","content":"# Brand Refresh — Brand Refresh\n\n## Style Overview\n\nColorful block collage on warm cream background, creating lively and fashionable brand visuals.\n\n- **Scene**: Brand launches, corporate image updates, creative proposals\n- **Mood**: Warm, fashionable, colorful, modern\n- **Tone**: Warm base, colorful blocks\n\n## Color Palette\n\n| Name | Hex | Usage |\n| ---------- | ------ | ------------------------------ |\n| Warm Cream | F5F0E8 | Background (parchment texture) |\n| Deep Navy | 162040 | Title text |\n| Blue | 1A6BFF | Primary block color |\n| Orange | F4713A | Block accent |\n| Cyan | 00C9D4 | Block secondary color |\n| Mint Green | 7EC8A0 | Block secondary color |\n| Pink | E8749A | Block highlight |\n| Muted Text | 9A9080 | Muted text |\n| Body Text | 6B6355 | Body text |\n\n## Typography\n\n- Titles: Arial 52pt Bold\n- Body: Arial 15pt\n- Labels: Arial 11pt\n\n## Scene Elements\n\n- 6 rectangular color blocks (blk-a to blk-f), forming mosaic grid on right side\n- Blocks rearrange, scale, and shift between each page\n- Uses image assets (portrait1.jpg, portrait2.jpg, abstract1.jpg, team1.jpg) — can be ignored when using as style reference\n\n## Design Techniques\n\n- Block mosaic layout — blocks form different grid patterns on each page\n- Photos embedded within block grid\n- Classic split layout: text on left + colorful blocks on right\n- Morph transitions smoothly slide and scale blocks\n- 6 slides\n\n## Reference Script\n\nComplete build script available in `build.sh`.\nNote: Script uses image resources from assets/ directory, image parts can be ignored when using as style reference.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1** — Title page, initial layout of block grid\n- **Slide 4** — Major block reorganization, demonstrating mosaic transformation effect\n No need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2047,"content_sha256":"e36ef9d7282b83802595fec67d16e835751ffcedec780459af3bea0b4d2dc251"},{"filename":"reference/styles/warm--coral-culture/style.md","content":"# Coral Culture — Company Culture Deck\n\n## Style Overview\n\nHorizontal blue-to-coral gradient background with vertical decorative bar clusters. Extreme typographic contrast with alternating light/dark slides.\n\n- **Scenario**: Company culture decks, HR presentations, team showcases\n- **Mood**: Warm, cultural, human-centered, dynamic\n- **Tone**: Blue to coral gradient\n\n## Design Techniques\n\n- Horizontal gradient BG (blue → coral)\n- Vertical bar cluster (abstract skyline)\n- Circle ring elements\n- Hard contrast between adjacent slides\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":609,"content_sha256":"10a796d5ddae795827888934e2fa03c25ec4021177ac399e740d6399a8b532c6"},{"filename":"reference/styles/warm--earth-organic/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/warm__earth_organic.pptx\"\n\necho \"Building: warm--earth-organic (Sustainable Growth)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# Colors\nBG=F5F0E8\nBROWN=8B6F47\nSAGE=A8C686\nTERRA=D4956B\nSAND=C2A878\nFOREST=6B8E6B\nCREAM=E8D5B0\nGRAY=9E8E7A\n\n# Off-canvas position\nOFFSCREEN=36cm\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG\n\n# Scene actors: organic shapes\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!leaf-brown' \\\n --prop preset=ellipse \\\n --prop fill=$BROWN \\\n --prop opacity=0.3 \\\n --prop x=1.2cm --prop y=1cm --prop width=6cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!leaf-sage' \\\n --prop preset=ellipse \\\n --prop fill=$SAGE \\\n --prop opacity=0.25 \\\n --prop x=25cm --prop y=12cm --prop width=8cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stone-terra' \\\n --prop preset=roundRect \\\n --prop fill=$TERRA \\\n --prop opacity=0.2 \\\n --prop x=27cm --prop y=0.8cm --prop width=5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!stone-sand' \\\n --prop preset=roundRect \\\n --prop fill=$SAND \\\n --prop opacity=0.3 \\\n --prop x=0.8cm --prop y=13cm --prop width=7cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!seed-forest' \\\n --prop preset=ellipse \\\n --prop fill=$FOREST \\\n --prop x=30cm --prop y=8cm --prop width=3cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!seed-cream' \\\n --prop preset=ellipse \\\n --prop fill=$CREAM \\\n --prop opacity=0.5 \\\n --prop x=3cm --prop y=8cm --prop width=2cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pebble-1' \\\n --prop preset=ellipse \\\n --prop fill=$BROWN \\\n --prop opacity=0.4 \\\n --prop x=15cm --prop y=16cm --prop width=1.5cm --prop height=1.2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!pebble-2' \\\n --prop preset=ellipse \\\n --prop fill=$SAGE \\\n --prop opacity=0.35 \\\n --prop x=22cm --prop y=1.5cm --prop width=1.8cm --prop height=1.5cm\n\n# Hero text (visible)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-title' \\\n --prop text=\"Sustainable Growth\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=3C2415 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=5cm --prop width=26cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!hero-sub' \\\n --prop text=\"Building a Better Tomorrow\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=24 \\\n --prop color=6B5B4A \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=4cm --prop y=9.5cm --prop width=26cm --prop height=2.5cm\n\n# Pillar card elements (hidden)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-num' \\\n --prop text=\"01\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$TERRA \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=6.5cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-title' \\\n --prop text=\"Reduce\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=3C2415 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=6.5cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-1-desc' \\\n --prop text=\"Minimize waste at every step of the supply chain\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=16 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11.5cm --prop width=6.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-num' \\\n --prop text=\"02\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$SAGE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=6.5cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-title' \\\n --prop text=\"Reuse\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=3C2415 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=6.5cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-2-desc' \\\n --prop text=\"Extend product lifecycles through circular design\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=16 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11.5cm --prop width=6.5cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-num' \\\n --prop text=\"03\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$FOREST \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6cm --prop width=6.5cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-title' \\\n --prop text=\"Regenerate\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=3C2415 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=6.5cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!card-3-desc' \\\n --prop text=\"Restore ecosystems and build for the future\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=16 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11.5cm --prop width=6.5cm --prop height=4cm\n\n# Impact metrics (hidden)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-1-num' \\\n --prop text=\"40%\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$BROWN \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=5cm --prop width=10cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-1-title' \\\n --prop text=\"Less Waste\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=24 \\\n --prop color=3C2415 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-1-desc' \\\n --prop text=\"Reduction in operational waste across all facilities\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=14 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=11cm --prop width=10cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-2-num' \\\n --prop text=\"2M\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$SAGE \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=2.5cm --prop width=11cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-2-title' \\\n --prop text=\"Trees Planted\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=24 \\\n --prop color=3C2415 \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=6.5cm --prop width=11cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-2-desc' \\\n --prop text=\"Reforestation efforts spanning three continents\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=14 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=8.5cm --prop width=11cm --prop height=2cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-3-num-1' \\\n --prop text=\"Carbon\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$FOREST \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=13cm --prop width=10cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-3-num-2' \\\n --prop text=\"Neutral\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$FOREST \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=15.5cm --prop width=10cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!metric-3-desc' \\\n --prop text=\"Certified carbon neutral since 2024\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=14 \\\n --prop color=6B5B4A \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=17.5cm --prop width=10cm --prop height=1.2cm\n\n# CTA elements (hidden)\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-title' \\\n --prop text=\"Join Our Mission\" \\\n --prop font=\"Segoe UI\" \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=3C2415 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=4.5cm --prop width=26cm --prop height=4cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-sub' \\\n --prop text=\"Together, we can build a sustainable future\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=24 \\\n --prop color=6B5B4A \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=9.5cm --prop width=26cm --prop height=2.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!cta-web' \\\n --prop text=\"www.earthandsage.org\" \\\n --prop font=\"Segoe UI Light\" \\\n --prop size=18 \\\n --prop color=$GRAY \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=${OFFSCREEN} --prop y=13cm --prop width=26cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=24cm --prop y=10cm --prop width=7cm --prop height=5.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=2cm --prop y=2cm --prop width=9cm --prop height=7cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=1.2cm --prop y=14cm --prop width=6cm --prop height=4.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=28cm --prop y=1cm --prop width=5cm --prop height=4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop x=14cm --prop y=15cm --prop width=3.5cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=30cm --prop y=6cm --prop width=2.5cm --prop height=2.5cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=20cm --prop y=2cm --prop width=1.8cm --prop height=1.4cm\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=10cm --prop y=16cm --prop width=2cm --prop height=1.6cm\n\n# Update hero text to statement\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop text=\"Nature Knows Best\" --prop size=72\nofficecli set \"$OUTPUT\" '/slide[2]/shape[10]' --prop text=\"Let the earth guide our innovation\" --prop y=10.5cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[2]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Move scene actors to create pillar card backgrounds\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop preset=roundRect --prop x=1.2cm --prop y=5cm --prop width=9.5cm --prop height=13cm --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop preset=roundRect --prop x=12.2cm --prop y=5cm --prop width=9.5cm --prop height=13cm --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop preset=roundRect --prop x=23.2cm --prop y=5cm --prop width=9.5cm --prop height=13cm --prop opacity=0.12\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=${OFFSCREEN} --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop x=${OFFSCREEN} --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=${OFFSCREEN} --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=${OFFSCREEN} --prop width=0.1cm --prop height=0.1cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=${OFFSCREEN} --prop width=0.1cm --prop height=0.1cm\n\n# Update hero to section title\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop text=\"Three Pillars of Change\" --prop size=40 --prop align=left --prop x=1.2cm --prop y=1cm --prop width=26cm --prop height=3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop text=\"Our framework for sustainable impact\" --prop size=18 --prop align=left --prop x=1.2cm --prop y=3.2cm --prop width=20cm --prop height=1.5cm\n\n# Show pillar 1 cards\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=2.8cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=2.8cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=2.8cm --prop y=11.5cm\n\n# Show pillar 2 cards\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=13.8cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=13.8cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=13.8cm --prop y=11.5cm\n\n# Show pillar 3 cards\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=24.8cm --prop y=6cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=24.8cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=24.8cm --prop y=11.5cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[3]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop preset=ellipse --prop x=1.2cm --prop y=2cm --prop width=14cm --prop height=12cm --prop opacity=0.4\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop preset=ellipse --prop x=18cm --prop y=1cm --prop width=15cm --prop height=10cm --prop opacity=0.35\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop preset=roundRect --prop x=20cm --prop y=12cm --prop width=12cm --prop height=6.5cm --prop opacity=0.25\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=30cm --prop y=16cm --prop width=3cm --prop height=2.5cm --prop opacity=0.2\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=1.2cm --prop y=15cm --prop width=2.5cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=5cm --prop y=16cm --prop width=1.5cm --prop height=1.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[7]' --prop x=16cm --prop y=0.8cm --prop width=1.2cm --prop height=1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[8]' --prop x=8cm --prop y=15cm --prop width=1.5cm --prop height=1.2cm\n\n# Update title to impact\nofficecli set \"$OUTPUT\" '/slide[4]/shape[9]' --prop text=\"Our Impact\" --prop size=40 --prop x=1.2cm --prop y=0.8cm --prop width=14cm --prop height=2.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[10]' --prop text=\"Measurable results that matter\" --prop size=16 --prop color=$GRAY --prop x=1.2cm --prop y=3cm --prop width=14cm --prop height=1.5cm\n\n# Hide pillar cards\nofficecli set \"$OUTPUT\" '/slide[4]/shape[11]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[12]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[13]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[14]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[15]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[16]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[17]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[18]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[4]/shape[19]' --prop x=${OFFSCREEN}\n\n# Show metrics\nofficecli set \"$OUTPUT\" '/slide[4]/shape[20]' --prop x=3cm --prop y=5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[21]' --prop x=3cm --prop y=9cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[22]' --prop x=3cm --prop y=11cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=20cm --prop y=2.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=20cm --prop y=6.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[25]' --prop x=20cm --prop y=8.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[26]' --prop x=21cm --prop y=13cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[27]' --prop x=21cm --prop y=15.5cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[28]' --prop x=21cm --prop y=17.5cm\n\n# ============================================\n# SLIDE 5 - CTA\n# ============================================\necho \"Building Slide 5: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[4]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Move scene actors\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop preset=ellipse --prop x=26cm --prop y=2cm --prop width=6cm --prop height=5cm --prop opacity=0.3\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop preset=ellipse --prop x=1.2cm --prop y=13cm --prop width=8cm --prop height=5.5cm --prop opacity=0.25\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop preset=roundRect --prop x=2cm --prop y=1cm --prop width=5cm --prop height=4cm --prop opacity=0.2\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop preset=roundRect --prop x=20cm --prop y=14cm --prop width=7cm --prop height=4.5cm --prop opacity=0.3\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=30cm --prop y=14cm --prop width=3cm --prop height=2.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=28cm --prop y=8cm --prop width=2cm --prop height=2cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[7]' --prop x=8cm --prop y=1cm --prop width=1.5cm --prop height=1.2cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[8]' --prop x=15cm --prop y=16cm --prop width=1.8cm --prop height=1.5cm\n\n# Hide impact title and update hero to CTA\nofficecli set \"$OUTPUT\" '/slide[5]/shape[9]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[10]' --prop x=${OFFSCREEN}\n\n# Hide metrics\nofficecli set \"$OUTPUT\" '/slide[5]/shape[20]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[21]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[22]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[23]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[24]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=${OFFSCREEN}\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=${OFFSCREEN}\n\n# Show CTA elements\nofficecli set \"$OUTPUT\" '/slide[5]/shape[29]' --prop x=4cm --prop y=4.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[30]' --prop x=4cm --prop y=9.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[31]' --prop x=4cm --prop y=13cm\n\n# ============================================\n# FINAL VALIDATION\n# ============================================\nofficecli validate \"$OUTPUT\"\nofficecli view \"$OUTPUT\" outline\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":19000,"content_sha256":"ff6b673ef6dbba3d232da9c7cd08276f7a8aacf502eaf9a2caec2155b4758b28"},{"filename":"reference/styles/warm--earth-organic/style.md","content":"# 04-earth-organic — Earth and Sage\n\n## Style Overview\n\nA warm parchment background combined with organic ellipses and rounded rectangles creates a warm, natural narrative atmosphere.\n\n- **Scene**: Environmental sustainability, organic brands, nature themes\n- **Mood**: Warm, sincere, natural, storytelling\n- **Tone**: Warm brown + sage green + terracotta + sandy gold, overall earth tone palette\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------------- | -------- | --------------------------------- |\n| Warm Parchment | `F5F0E8` | Background |\n| Warm Brown | `8B6F47` | Leaves, pebbles, decorations |\n| Sage Green | `A8C686` | Leaves, pebbles, card highlights |\n| Terracotta Orange | `D4956B` | Stones, number highlights |\n| Sandy Gold | `C2A878` | Stone decorations |\n| Forest Green | `6B8E6B` | Seed decorations, data highlights |\n| Cream White | `E8D5B0` | Seed decorations |\n| Deep Brown (titles) | `3C2415` | Title text |\n| Warm Gray (body) | `6B5B4A` | Body text |\n| Soft Gray (secondary) | `9E8E7A` | Secondary text |\n\n## Typography\n\n| Role | Font | Size | Color |\n| ---------------- | -------------- | ------- | ------------------------ |\n| Main Title | Segoe UI Bold | 64pt | 3C2415 |\n| Subtitle | Segoe UI Light | 24pt | 6B5B4A |\n| Card Number | Segoe UI Bold | 48pt | D4956B / A8C686 / 6B8E6B |\n| Card Title | Segoe UI Bold | 28pt | 3C2415 |\n| Card Description | Segoe UI Light | 16pt | 6B5B4A |\n| Data Number | Segoe UI Bold | 64pt | Various highlights |\n| Secondary Text | Segoe UI Light | 14-16pt | 9E8E7A |\n\n## Design Techniques\n\n- **Organic shapes**: Use `ellipse` to simulate leaves and seeds (large ellipses 6-9cm), use `roundRect` to simulate stones (5-7cm), all with different opacity (0.12-0.5)\n- **Semi-transparent layering**: Multiple organic shapes overlap with varying opacity to create natural texture\n- **Morph animation**: Organic shapes slowly drift and scale across pages, simulating organic movement in nature\n- **Slide 3 card design**: Three organic shapes morph into `roundRect` card backgrounds (opacity 0.12), forming three-column content areas\n- **Slide 4 data narrative**: Organic shapes enlarge as data area backgrounds, data numbers highlighted with brand colors\n\n## Scene Elements\n\n8 scene elements with different positions and forms on each page:\n\n| Name | preset | fill | opacity | Typical Size | Description |\n| --------------- | --------- | ------ | ------- | ------------- | ------------------ |\n| `!!leaf-brown` | ellipse | 8B6F47 | 0.30 | 6cm x 5cm | Brown leaf |\n| `!!leaf-sage` | ellipse | A8C686 | 0.25 | 8cm x 6cm | Sage green leaf |\n| `!!stone-terra` | roundRect | D4956B | 0.20 | 5cm x 4cm | Terracotta stone |\n| `!!stone-sand` | roundRect | C2A878 | 0.30 | 7cm x 5cm | Sandy gold stone |\n| `!!seed-forest` | ellipse | 6B8E6B | 1.0 | 3cm x 2.5cm | Forest green seed |\n| `!!seed-cream` | ellipse | E8D5B0 | 0.50 | 2cm x 2cm | Cream seed |\n| `!!pebble-1` | ellipse | 8B6F47 | 0.40 | 1.5cm x 1.2cm | Small pebble |\n| `!!pebble-2` | ellipse | A8C686 | 0.35 | 1.8cm x 1.5cm | Green small pebble |\n\n## Page Structure\n\n5 pages total, Slides 2-5 set `transition=morph`:\n\n| Slide | Type | Elements | Description |\n| ------- | ---------------- | ------------------------------------------------------------------------------------------------------------------ | ----------- |\n| Slide 1 | Hero | Centered large title + subtitle, organic shapes scattered around |\n| Slide 2 | Statement | Large text statement \"Nature Knows Best\", organic shapes redistributed |\n| Slide 3 | 3-Column Pillars | Three organic shapes morph into card backgrounds (roundRect opacity 0.12), numbered 01/02/03 + title + description |\n| Slide 4 | Metrics / Impact | Organic shapes enlarged as data area backgrounds, displaying data like 40%/2M/Carbon Neutral |\n| Slide 5 | CTA / Closing | Organic shapes return to natural distribution, centered CTA + contact info |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (Hero)** — Initial layout and opacity settings for 8 organic scene actors\n- **Slide 3 (Pillars)** — Key technique for morphing organic shapes into roundRect card backgrounds\n- **Slide 4 (Metrics)** — Layout approach for enlarging organic shapes as data area backgrounds\n\nNo need to read all — skim 2-3 representative slides.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5255,"content_sha256":"2adba1875c38b0eb260c9aec4c4f0f23c8de876bc93f651c2833beaa78ee3163"},{"filename":"reference/styles/warm--monument-editorial/style.md","content":"# Monument Editorial — Pure Typography\n\n## Style Overview\n\nWarm paper background with clay ink and single terracotta accent. Zero gradients, pure typography focus.\n\n- **Scenario**: Architecture, luxury brands, editorial magazines, studio branding\n- **Mood**: Monumental, editorial, refined, typographic\n- **Tone**: Warm paper with terracotta\n\n## Design Techniques\n\n- !!block (terracotta rect) shape-shifts: thin strip → band → half panel → bottom strip → center square → full-slide\n- Pure typography, no gradients\n- Monumental scale text\n- Minimal color palette\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":643,"content_sha256":"5bf6e018f9464e7d41cd2fc39b5ef86517d3c32ec93fe664ec6ec6ae0e640f18"},{"filename":"reference/styles/warm--playful-organic/build.sh","content":"#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nOUTPUT=\"$SCRIPT_DIR/Cat-Secret-Life.pptx\"\n\n# Colors\nBG_COLOR=\"FFF8E7\"\nTEXT_DARK=\"3D3B3C\"\nTEXT_LIGHT=\"FFFFFF\"\nC_ORANGE=\"FF8A65\"\nC_YELLOW=\"FFD54F\"\nC_TEAL=\"4DB6AC\"\nC_DARK=\"3D3B3C\"\n\n# Off-canvas position\nOFFSCREEN=36cm\n\necho \"Building: warm--playful-organic (Cat Secret Life)\"\nrm -f \"$OUTPUT\"\nofficecli create \"$OUTPUT\"\n\n# ============================================\n# SLIDE 1 - HERO\n# ============================================\necho \"Building Slide 1: Hero...\"\n\nofficecli add \"$OUTPUT\" '/' --type slide --prop layout=blank --prop background=$BG_COLOR\n\n# Scene actors: organic shapes that morph\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!blob-main' \\\n --prop preset=roundRect \\\n --prop fill=$C_ORANGE \\\n --prop opacity=0.15 \\\n --prop x=18cm --prop y=5cm --prop width=20cm --prop height=15cm --prop rotation=15\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-orange' \\\n --prop preset=ellipse \\\n --prop fill=$C_ORANGE \\\n --prop x=0cm --prop y=12cm --prop width=12cm --prop height=12cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!dot-yellow' \\\n --prop preset=ellipse \\\n --prop fill=$C_YELLOW \\\n --prop x=26cm --prop y=0cm --prop width=8cm --prop height=8cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!line-teal' \\\n --prop preset=roundRect \\\n --prop fill=$C_TEAL \\\n --prop x=6cm --prop y=4cm --prop width=3cm --prop height=0.6cm --prop rotation=-20\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!tri-dark' \\\n --prop preset=triangle \\\n --prop fill=$C_DARK \\\n --prop opacity=0.8 \\\n --prop x=30cm --prop y=15cm --prop width=3cm --prop height=3cm --prop rotation=45\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=!!accent-star' \\\n --prop preset=star5 \\\n --prop fill=$C_YELLOW \\\n --prop x=10cm --prop y=16cm --prop width=2cm --prop height=2cm --prop rotation=10\n\n# Slide 1 content\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-title' \\\n --prop text='猫的秘密生活' \\\n --prop font='思源黑体' \\\n --prop size=72 \\\n --prop bold=true \\\n --prop color=$TEXT_DARK \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=4.4cm --prop y=7cm --prop width=25cm --prop height=3.5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s1-hero-sub' \\\n --prop text='人类观察报告(代号:喵星卧底)' \\\n --prop font='思源黑体' \\\n --prop size=32 \\\n --prop color=$TEXT_DARK \\\n --prop opacity=0.8 \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=4.4cm --prop y=10.5cm --prop width=25cm --prop height=2cm\n\n# Pre-create all other slide content (off-canvas)\n# Slide 2: Statement\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s2-statement-main' \\\n --prop text='你以为你在养猫?\n其实是猫在观察你。' \\\n --prop font='思源黑体' \\\n --prop size=54 \\\n --prop bold=true \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop valign=middle \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6cm --prop width=26cm --prop height=6cm\n\n# Slide 3: Pillars (3 cards)\nfor i in 1 2 3; do\n officecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop \"name=#s3-pillar-bg-$i\" \\\n --prop preset=roundRect \\\n --prop fill=$C_DARK \\\n --prop opacity=0.05 \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=8cm --prop height=12cm\n\n officecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop \"name=#s3-pillar-num-$i\" \\\n --prop text=\"0$i\" \\\n --prop font='Montserrat' \\\n --prop size=48 \\\n --prop bold=true \\\n --prop color=$C_ORANGE \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=5cm --prop width=6cm --prop height=2cm\n\n officecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop \"name=#s3-pillar-title-$i\" \\\n --prop font='思源黑体' \\\n --prop size=28 \\\n --prop bold=true \\\n --prop color=$TEXT_DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=7cm --prop width=6cm --prop height=1.5cm\n\n officecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop \"name=#s3-pillar-desc-$i\" \\\n --prop font='思源黑体' \\\n --prop size=16 \\\n --prop color=$TEXT_DARK \\\n --prop align=left \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=8.5cm --prop width=6.5cm --prop height=4cm\ndone\n\n# Set pillar text content\nofficecli set \"$OUTPUT\" '/slide[1]/shape[12]' --prop text='日常充电'\nofficecli set \"$OUTPUT\" '/slide[1]/shape[13]' --prop text='寻找阳光最充足的位置,进入深度休眠模式,补充能量。'\nofficecli set \"$OUTPUT\" '/slide[1]/shape[16]' --prop text='幻觉狩猎'\nofficecli set \"$OUTPUT\" '/slide[1]/shape[17]' --prop text='在夜深人静时,捕捉人类看不见的\"空气猎物\"。'\nofficecli set \"$OUTPUT\" '/slide[1]/shape[20]' --prop text='高冷监视'\nofficecli set \"$OUTPUT\" '/slide[1]/shape[21]' --prop text='居高临下,用充满智慧的眼神审视人类的愚蠢行为。'\n\n# Slide 4: Evidence\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-evi-num' \\\n --prop text='70%' \\\n --prop font='Montserrat' \\\n --prop size=120 \\\n --prop bold=true \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=15cm --prop height=6cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s4-evi-desc' \\\n --prop text='猫咪一生中睡觉的时间占比。剩余时间里,一半在舔毛,一半在夜间跑酷。' \\\n --prop font='思源黑体' \\\n --prop size=24 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=12cm --prop width=13cm --prop height=5cm\n\n# Slide 5: Comparison\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-comp-title-l' \\\n --prop text='狗' \\\n --prop font='思源黑体' \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=10cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-comp-desc-l' \\\n --prop text='\"你是神!\n你给我吃的!\"' \\\n --prop font='思源黑体' \\\n --prop size=32 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=12cm --prop height=5cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-comp-title-r' \\\n --prop text='猫' \\\n --prop font='思源黑体' \\\n --prop size=64 \\\n --prop bold=true \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=4cm --prop width=10cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s5-comp-desc-r' \\\n --prop text='\"我是神!\n你给我吃的!\"' \\\n --prop font='思源黑体' \\\n --prop size=32 \\\n --prop color=$TEXT_LIGHT \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9cm --prop width=12cm --prop height=5cm\n\n# Slide 6: CTA\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-cta-title' \\\n --prop text='观察结束,去开罐头吧!' \\\n --prop font='思源黑体' \\\n --prop size=54 \\\n --prop bold=true \\\n --prop color=$TEXT_DARK \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=6.5cm --prop width=26cm --prop height=3cm\n\nofficecli add \"$OUTPUT\" '/slide[1]' --type shape \\\n --prop 'name=#s6-cta-sub' \\\n --prop text='毕竟,主子已经等急了。' \\\n --prop font='思源黑体' \\\n --prop size=28 \\\n --prop color=$TEXT_DARK \\\n --prop opacity=0.8 \\\n --prop align=center \\\n --prop fill=none \\\n --prop x=$OFFSCREEN --prop y=9.5cm --prop width=26cm --prop height=2cm\n\n# ============================================\n# SLIDE 2 - STATEMENT\n# ============================================\necho \"Building Slide 2: Statement...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[2]' --prop transition=morph\n\n# Morph scene actors - dark background\nofficecli set \"$OUTPUT\" '/slide[2]/shape[5]' --prop preset=rect --prop x=0cm --prop y=0cm --prop width=45cm --prop height=30cm --prop rotation=0 --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[2]/shape[1]' --prop x=0cm --prop y=12cm --prop width=10cm --prop height=10cm --prop rotation=45 --prop opacity=0.3\nofficecli set \"$OUTPUT\" '/slide[2]/shape[2]' --prop x=28cm --prop y=2cm --prop width=8cm --prop height=8cm --prop opacity=0.5\nofficecli set \"$OUTPUT\" '/slide[2]/shape[3]' --prop x=5cm --prop y=0cm --prop width=12cm --prop height=12cm --prop opacity=0.2\nofficecli set \"$OUTPUT\" '/slide[2]/shape[4]' --prop x=16cm --prop y=15cm --prop width=4cm --prop height=0.6cm --prop rotation=0\nofficecli set \"$OUTPUT\" '/slide[2]/shape[6]' --prop x=25cm --prop y=14cm --prop rotation=90\n\n# Hide slide 1 content, show slide 2 content\nofficecli set \"$OUTPUT\" '/slide[2]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[2]/shape[9]' --prop x=3.9cm\n\n# ============================================\n# SLIDE 3 - PILLARS\n# ============================================\necho \"Building Slide 3: Pillars...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[3]' --prop transition=morph\n\n# Morph scene actors\nofficecli set \"$OUTPUT\" '/slide[3]/shape[5]' --prop preset=triangle --prop x=28cm --prop y=0cm --prop width=8cm --prop height=8cm --prop rotation=180 --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[1]' --prop x=2cm --prop y=2cm --prop width=30cm --prop height=15cm --prop rotation=0 --prop opacity=0.05\nofficecli set \"$OUTPUT\" '/slide[3]/shape[2]' --prop x=0cm --prop y=0cm --prop width=15cm --prop height=15cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[3]' --prop x=25cm --prop y=14cm --prop width=12cm --prop height=12cm --prop opacity=0.1\nofficecli set \"$OUTPUT\" '/slide[3]/shape[4]' --prop x=1.5cm --prop y=1.5cm --prop width=30cm --prop height=0.2cm --prop rotation=0\nofficecli set \"$OUTPUT\" '/slide[3]/shape[6]' --prop x=2cm --prop y=16cm --prop rotation=180\n\n# Hide previous content\nofficecli set \"$OUTPUT\" '/slide[3]/shape[7]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[8]' --prop x=$OFFSCREEN\nofficecli set \"$OUTPUT\" '/slide[3]/shape[9]' --prop x=$OFFSCREEN\n\n# Show pillars\nofficecli set \"$OUTPUT\" '/slide[3]/shape[10]' --prop x=2.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[11]' --prop x=3.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[12]' --prop x=3.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[13]' --prop x=3.5cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[14]' --prop x=12.9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[15]' --prop x=13.9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[16]' --prop x=13.9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[17]' --prop x=13.9cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[18]' --prop x=23.3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[19]' --prop x=24.3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[20]' --prop x=24.3cm\nofficecli set \"$OUTPUT\" '/slide[3]/shape[21]' --prop x=24.3cm\n\n# ============================================\n# SLIDE 4 - EVIDENCE\n# ============================================\necho \"Building Slide 4: Evidence...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[4]' --prop transition=morph\n\n# Morph scene actors - asymmetric data highlight\nofficecli set \"$OUTPUT\" '/slide[4]/shape[1]' --prop fill=$C_TEAL --prop x=0cm --prop y=0cm --prop width=25cm --prop height=30cm --prop rotation=0 --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[4]/shape[2]' --prop x=24cm --prop y=10cm --prop width=8cm --prop height=8cm --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[4]/shape[3]' --prop x=28cm --prop y=2cm --prop width=4cm --prop height=4cm --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[4]/shape[4]' --prop x=18cm --prop y=4cm --prop width=6cm --prop height=0.6cm --prop rotation=45\nofficecli set \"$OUTPUT\" '/slide[4]/shape[5]' --prop x=20cm --prop y=14cm --prop width=4cm --prop height=4cm --prop rotation=90\nofficecli set \"$OUTPUT\" '/slide[4]/shape[6]' --prop x=30cm --prop y=16cm --prop rotation=30\n\n# Hide previous content\nfor i in {7..22}; do\n officecli set \"$OUTPUT\" \"/slide[4]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show evidence\nofficecli set \"$OUTPUT\" '/slide[4]/shape[23]' --prop x=1cm\nofficecli set \"$OUTPUT\" '/slide[4]/shape[24]' --prop x=1cm\n\n# ============================================\n# SLIDE 5 - COMPARISON\n# ============================================\necho \"Building Slide 5: Comparison...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[5]' --prop transition=morph\n\n# Morph scene actors - split 50/50\nofficecli set \"$OUTPUT\" '/slide[5]/shape[1]' --prop preset=rect --prop fill=$C_TEAL --prop x=0cm --prop y=0cm --prop width=16.9cm --prop height=19.05cm --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[5]/shape[2]' --prop preset=rect --prop x=16.9cm --prop y=0cm --prop width=17cm --prop height=19.05cm --prop rotation=0 --prop opacity=1\nofficecli set \"$OUTPUT\" '/slide[5]/shape[3]' --prop x=14cm --prop y=16cm --prop width=6cm --prop height=6cm --prop opacity=0.3\nofficecli set \"$OUTPUT\" '/slide[5]/shape[4]' --prop x=16.9cm --prop y=0cm --prop width=0.4cm --prop height=19cm --prop rotation=0 --prop fill=$TEXT_LIGHT\nofficecli set \"$OUTPUT\" '/slide[5]/shape[5]' --prop x=2cm --prop y=2cm --prop width=3cm --prop height=3cm --prop rotation=180 --prop opacity=0.3\nofficecli set \"$OUTPUT\" '/slide[5]/shape[6]' --prop x=30cm --prop y=2cm --prop opacity=0.3\n\n# Hide previous content\nfor i in {7..24}; do\n officecli set \"$OUTPUT\" \"/slide[5]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show comparison\nofficecli set \"$OUTPUT\" '/slide[5]/shape[25]' --prop x=3.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[26]' --prop x=2.5cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[27]' --prop x=20cm\nofficecli set \"$OUTPUT\" '/slide[5]/shape[28]' --prop x=19cm\n\n# ============================================\n# SLIDE 6 - CTA\n# ============================================\necho \"Building Slide 6: CTA...\"\n\nofficecli add \"$OUTPUT\" '/' --from '/slide[1]'\nofficecli set \"$OUTPUT\" '/slide[6]' --prop transition=morph\n\n# Morph scene actors - back to warm/inviting\nofficecli set \"$OUTPUT\" '/slide[6]/shape[1]' --prop preset=roundRect --prop fill=$C_YELLOW --prop x=6.9cm --prop y=4cm --prop width=20cm --prop height=11cm --prop rotation=0 --prop opacity=0.2\nofficecli set \"$OUTPUT\" '/slide[6]/shape[2]' --prop preset=ellipse --prop fill=$C_ORANGE --prop x=28cm --prop y=12cm --prop width=10cm --prop height=10cm --prop rotation=0 --prop opacity=0.8\nofficecli set \"$OUTPUT\" '/slide[6]/shape[3]' --prop x=0cm --prop y=0cm --prop width=8cm --prop height=8cm --prop opacity=0.8\nofficecli set \"$OUTPUT\" '/slide[6]/shape[4]' --prop x=20cm --prop y=15cm --prop width=6cm --prop height=0.6cm --prop fill=$C_TEAL --prop rotation=-10\nofficecli set \"$OUTPUT\" '/slide[6]/shape[5]' --prop preset=triangle --prop x=5cm --prop y=15cm --prop width=4cm --prop height=4cm --prop rotation=45 --prop opacity=0.5\nofficecli set \"$OUTPUT\" '/slide[6]/shape[6]' --prop x=16cm --prop y=3cm --prop width=3cm --prop height=3cm --prop rotation=45 --prop opacity=1\n\n# Hide previous content\nfor i in {7..28}; do\n officecli set \"$OUTPUT\" \"/slide[6]/shape[$i]\" --prop x=$OFFSCREEN\ndone\n\n# Show CTA\nofficecli set \"$OUTPUT\" '/slide[6]/shape[28]' --prop x=3.9cm\nofficecli set \"$OUTPUT\" '/slide[6]/shape[29]' --prop x=3.9cm\n\n# ============================================\n# VALIDATE & COMPLETE\n# ============================================\necho \"Validating...\"\npython3 \"$(dirname \"$0\")/../../morph-helpers.py\" final-check \"$OUTPUT\"\n\necho \"✅ Build complete: $OUTPUT\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":15915,"content_sha256":"c3335b8275e9c8f5a6a5f2358487ed1c968c663834f59e85e9c2e623d9bbd24f"},{"filename":"reference/styles/warm--playful-organic/style.md","content":"# Playful Organic — Warm Colorful Friendly\n\n## Style Overview\n\nWarm and friendly design with organic blob shapes and playful multi-color dot accents. Features comprehensive ghost mechanism and comparison slide type, perfect for storytelling and lifestyle content with inviting atmosphere.\n\n- **Scenario**: Lifestyle presentations, pet/animal topics, children's education, creative workshops, storytelling\n- **Mood**: Warm, playful, organic, friendly\n- **Tone**: Warm cream with coral, yellow, and teal accents\n\n## Color Palette\n\n| Name | Hex | Usage |\n| --------------- | ------- | --------------------------------- |\n| Background | #FFF8E7 | Warm cream canvas |\n| Primary text | #3D3B3C | Dark brown for main text |\n| Accent coral | #FF8A65 | Coral for warm highlights |\n| Accent yellow | #FFD54F | Yellow for playful accents |\n| Accent teal | #4DB6AC | Teal for decoration and contrast |\n| Decoration dark | #3D3B3C | Dark brown for geometric elements |\n\n## Typography\n\n| Element | Font |\n| ---------- | -------------------------- |\n| Title (EN) | Montserrat |\n| Title (CN) | Source Han Sans (思源黑体) |\n| Body | Source Han Sans |\n\n## Design Techniques\n\n- Blob-shaped main scene actor\n- Multi-color dot accents (orange, yellow)\n- Teal line decoration\n- Triangle and star geometric accents\n- Comprehensive ghost mechanism (all actors defined on slide 1)\n- Comparison slide type for contrasting content\n- Warm cream canvas with playful organic shapes\n\n## Page Structure (6 slides)\n\n| Slide | Type | Elements | Description |\n| ----- | ---------- | -------- | --------------------------------------------- |\n| 1 | hero | 20+ | Blob + dots + title establishing playful tone |\n| 2 | statement | 20+ | Centered statement with shifted blobs |\n| 3 | pillars | 20+ | Multi-column cards for key concepts |\n| 4 | evidence | 20+ | Data display with colorful accents |\n| 5 | comparison | 20+ | Left-right comparison layout |\n| 6 | cta | 20+ | Closing slide with call to action |\n\n## Reference Script\n\nComplete build script available in `build.sh`.\n\n**Recommended slides to read for understanding core design techniques**:\n\n- **Slide 1 (hero)** — blob scene actor + colorful dots establishing warm organic feel\n- **Slide 5 (comparison)** — left-right contrast layout demonstrating comparison slide type\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2631,"content_sha256":"5fa311bfe1c28dbb33b5bd61676b31d7768bf972edc8e23afe5872e72fc5b136"},{"filename":"reference/styles/warm--sunset-mosaic/style.md","content":"# Sunset Mosaic — Corporate Gradient\n\n## Style Overview\n\nModular rect grid with large sky-to-orange gradient circle as hero visual. Muted corporate palette with percentage data blocks.\n\n- **Scenario**: Engineering firms, infrastructure, B2B corporate, construction\n- **Mood**: Professional, warm, grounded, data-driven\n- **Tone**: Muted corporate with sunset gradient accents\n\n## Design Techniques\n\n- Rect mosaic partition\n- Gradient ellipse as hero visual (!!sun actor travels across slides)\n- Data blocks with percentage displays\n- Warm sunset gradient (sky blue → orange)\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":648,"content_sha256":"3a4db863f356b4d8174f52b0f646c35f0fe441f0d16342948b6a699fd4666227"},{"filename":"reference/styles/warm--vital-bloom/style.md","content":"# Vital Bloom — Wellness Organic\n\n## Style Overview\n\nStarburst rays with large organic blob ellipses and halftone corner dots. Wellness and organic aesthetic.\n\n- **Scenario**: Wellness apps, yoga studios, mindful living, organic brands\n- **Mood**: Organic, vibrant, healthy, energetic\n- **Tone**: Warm organic colors\n\n## Design Techniques\n\n- Starburst (fan of rotated thin rects)\n- Large organic blob ellipses\n- Halftone corner dots\n- Stacked ellipses for blob depth\n- !!bloom (large ellipse) morphs\n\n## Reference Script\n\nComplete build script available in `build.py`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":571,"content_sha256":"8b928419cb4b76b72eee0db9868da79fcc06a062a9cd0929f14bf9900a167f7b"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"OfficeCLI Morph-PPT Skill","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill is a scene layer on top of ","type":"text","marks":[{"type":"strong"}]},{"text":"officecli-pptx","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]},{"text":" Every pptx hard rule — visual delivery floor (title ≥ 36pt / body ≥ 18pt / title ≥ 2× body), 12-column grid on 33.87×19.05cm, canonical palettes, chart-choice decision table, connector canon, shell escape, resident + batch, Delivery Gate 1–5a — is inherited, not re-taught. This file adds only what ","type":"text"},{"text":"Morph","type":"text","marks":[{"type":"strong"}]},{"text":" needs on top: cross-slide shape-name binding, Scene Actors vs content prefixing, ghost discipline, ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" CLI quirks, 52-style visual library lookup, and a morph-specific fresh-eyes Gate 5b extension.","type":"text"}]},{"type":"paragraph","content":[{"text":"When the pptx base rules cover it, the text here says ","type":"text"},{"text":"→ see pptx v2 §X","type":"text","marks":[{"type":"code_inline"}]},{"text":". Read ","type":"text"},{"text":"skills/officecli-pptx/SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" first if you have not.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Setup","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"officecli","type":"text","marks":[{"type":"code_inline"}]},{"text":" is missing:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"macOS / Linux","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"curl -fsSL https://d.officecli.ai/install.sh | bash","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Windows (PowerShell)","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"irm https://d.officecli.ai/install.ps1 | iex","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"Verify with ","type":"text"},{"text":"officecli --version","type":"text","marks":[{"type":"code_inline"}]},{"text":" (open a new terminal if PATH hasn't picked up). If install fails, download a binary from https://github.com/iOfficeAI/OfficeCLI/releases.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"⚠️ Help-First Rule","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill teaches the Morph workflow — when shape names must match, when to ghost, when the CLI auto-prefixes — not every command flag.","type":"text","marks":[{"type":"strong"}]},{"text":" When a prop name, enum, or preset is uncertain, consult help BEFORE guessing.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"officecli help pptx slide # authoritative for: transition, advanceTime, advanceClick, background\nofficecli help pptx shape # name, preset, x/y/width/height, fill, rotation, opacity, animation\nofficecli help pptx animation # preset + trigger + duration values\nofficecli help pptx \u003celement> --json # machine-readable schema","type":"text"}]},{"type":"paragraph","content":[{"text":"Help reflects the installed CLI version. When skill and help disagree, ","type":"text"},{"text":"help wins.","type":"text","marks":[{"type":"strong"}]},{"text":" Every ","type":"text"},{"text":"--prop X=","type":"text","marks":[{"type":"code_inline"}]},{"text":" in this file is grep-verified against ","type":"text"},{"text":"officecli help pptx \u003celement>","type":"text","marks":[{"type":"code_inline"}]},{"text":". Specific confirmations: ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" is a listed value on ","type":"text"},{"text":"slide","type":"text","marks":[{"type":"code_inline"}]},{"text":"; ","type":"text"},{"text":"advanceTime","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"advanceClick","type":"text","marks":[{"type":"code_inline"}]},{"text":" are valid. ","type":"text"},{"text":"There is NO standalone ","type":"text","marks":[{"type":"strong"}]},{"text":"transition","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" element","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"officecli help pptx transition","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns error. Sub-props such as ","type":"text"},{"text":"duration","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"delay","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"easing","type":"text","marks":[{"type":"code_inline"}]},{"text":" for the transition itself are ","type":"text"},{"text":"not exposed on ","type":"text","marks":[{"type":"strong"}]},{"text":"slide","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — see §Known Issues for the raw-set path if you need them.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Mental Model & Inheritance","type":"text"}]},{"type":"paragraph","content":[{"text":"Inherits pptx v2.","type":"text","marks":[{"type":"strong"}]},{"text":" You should have read ","type":"text"},{"text":"skills/officecli-pptx/SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" first. This skill assumes you know how to: add slides + shapes + charts + connectors; address by ","type":"text"},{"text":"@name=","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"@id=","type":"text","marks":[{"type":"code_inline"}]},{"text":"; quote paths; use ","type":"text"},{"text":"batch","type":"text","marks":[{"type":"code_inline"}]},{"text":" heredocs; use ","type":"text"},{"text":"tailEnd=triangle","type":"text","marks":[{"type":"code_inline"}]},{"text":" on flow connectors; run the Delivery Gate 1–5a; attribute ","type":"text"},{"text":"[AGENT-ERROR]","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"[SKILL gap]","type":"text","marks":[{"type":"code_inline"}]},{"text":". If any of those are unfamiliar, read pptx v2 first.","type":"text"}]},{"type":"paragraph","content":[{"text":"Inherited from pptx v2 (do NOT re-teach):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Visual delivery floor — title ≥ 36pt / body ≥ 18pt / title ≥ 2× body, cover-richness, contrast floor, no ","type":"text"},{"text":"\\$\\t\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":" literals, ≤ 1 animation per slide / ≤ 600ms.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Grid math — 33.87 × 19.05cm, edge margin ≥ 1.27cm, inter-block gap ≥ 0.76cm, ≥ 20% negative space. For N-card grids: ","type":"text"},{"text":"col = (33.87 − 2·margin − (N−1)·gap) / N","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Four canonical palettes (Executive navy / Forest & moss / Warm terracotta / Charcoal minimal) — morph decks may pick a different mood from ","type":"text"},{"text":"reference/styles/","type":"text","marks":[{"type":"code_inline"}]},{"text":", but contrast rules still apply.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Chart-choice table — column vs bar vs line vs pie vs scatter vs large-text KPI; ","type":"text"},{"text":"> 3 series + > 8 categories","type":"text","marks":[{"type":"code_inline"}]},{"text":" = split.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Connector canon — ","type":"text"},{"text":"shape=straight|elbow|curve","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"@id=","type":"text","marks":[{"type":"code_inline"}]},{"text":" for from/to (C-P-6), ","type":"text"},{"text":"tailEnd=triangle","type":"text","marks":[{"type":"code_inline"}]},{"text":" on every flow.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Shell escape 3-layer — ","type":"text"},{"text":"$","type":"text","marks":[{"type":"code_inline"}]},{"text":" single-quoted, heredocs for batch, ","type":"text"},{"text":"\u003ca:br/>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for real newlines.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Resident mode + batch ≤ 12 ops, ","type":"text"},{"text":"\u003c\u003c'EOF'","type":"text","marks":[{"type":"code_inline"}]},{"text":" single-quoted delimiter.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Delivery Gate 1-5a (schema, token grep, hyperlink rPr, slide-order, dark-on-dark) — every gate prints OK before declaring done.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Known Issues C-P-1..7 (hyperlink rPr, chart spPr warning, animation duration readback, animation remove, connector enum, connector ","type":"text"},{"text":"@name=","type":"text","marks":[{"type":"code_inline"}]},{"text":", chart color renderer normalization).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Attribution triage — ","type":"text"},{"text":"[AGENT-ERROR]","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"[SKILL gap]","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Morph identity — what this skill owns (delta on top of pptx v2):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cross-slide shape-name binding.","type":"text","marks":[{"type":"strong"}]},{"text":" PowerPoint's Morph engine pairs shapes by ","type":"text"},{"text":"identical ","type":"text","marks":[{"type":"strong"}]},{"text":"name=","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" across adjacent slides and interpolates their position / size / rotation / fill / opacity. No matching name ⇒ no animation, silent fade. This is a workflow discipline, not a CLI feature.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Namespace prefixes:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" (persistent decoration, never ghosted) / ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" (content that evolves then exits) / ","type":"text"},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" (per-slide content, ghosted on slide N+1). Plan the names BEFORE you ","type":"text"},{"text":"add","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ghost position ","type":"text","marks":[{"type":"strong"}]},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" (off the right edge of the 33.87cm canvas). Never delete a ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-prefixed shape — move it off-canvas so the morph exit animation still plays.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" auto-prefix quirk.","type":"text","marks":[{"type":"strong"}]},{"text":" The CLI auto-prepends ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" to every shape on a morph slide, which silently breaks ","type":"text"},{"text":"@name=","type":"text","marks":[{"type":"code_inline"}]},{"text":" path selectors. Use ","type":"text"},{"text":"/slide[N]/shape[K]","type":"text","marks":[{"type":"code_inline"}]},{"text":" index paths after morph is set. See §Known Issues.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Adjacent-slide spatial variety.","type":"text","marks":[{"type":"strong"}]},{"text":" Displacement ≥ 5cm or rotation ≥ 15° between pairs — otherwise morph interpolates nothing visible.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Renderer reality.","type":"text","marks":[{"type":"strong"}]},{"text":" Morph renders in PowerPoint 365 / Keynote / WPS. LibreOffice and many web viewers render as plain fade (runtime feature). Not a skill defect — ","type":"text"},{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Reverse handoff — when to go BACK to pptx base (or sibling skills)","type":"text"}]},{"type":"paragraph","content":[{"text":"Stay in ","type":"text"},{"text":"pptx v2 base","type":"text","marks":[{"type":"strong"}]},{"text":" for any deck without cross-slide motion (board reviews, sales decks, all-hands, training). Stay in ","type":"text"},{"text":"officecli-pitch-deck","type":"text","marks":[{"type":"strong"}]},{"text":" for fundraising narrative arcs without morph. Use this skill only when the user explicitly asks for \"morph\" / \"smooth transitions\" / \"continuous animation\" AND ≥ 2 consecutive slides share a visual element that transforms. \"Animated deck\" meaning one-off entrance animations → pptx v2 §Animations, not morph.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Shell & Execution Discipline","type":"text"}]},{"type":"paragraph","content":[{"text":"Shell quoting, incremental execution, ","type":"text","marks":[{"type":"strong"}]},{"text":"$FILE","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" convention","type":"text","marks":[{"type":"strong"}]},{"text":" → see pptx v2 §Shell & Execution Discipline. Same rules verbatim.","type":"text"}]},{"type":"paragraph","content":[{"text":"Morph-specific additions:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"!!","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" in shell values — single-quote.","type":"text","marks":[{"type":"strong"}]},{"text":" Bash / zsh history expansion eats unquoted ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]},{"text":". Always use ","type":"text"},{"text":"--prop 'name=!!scene-ring'","type":"text","marks":[{"type":"code_inline"}]},{"text":" (single quotes). In Python ","type":"text"},{"text":"subprocess.run([...])","type":"text","marks":[{"type":"code_inline"}]},{"text":" lists, no quoting needed — pass ","type":"text"},{"text":"\"name=!!scene-ring\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" as a plain string.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"$","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" in prop text — single-quote (price tokens).","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"--prop text='$9/mo'","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"--prop text='$199/yr'","type":"text","marks":[{"type":"code_inline"}]},{"text":" — NEVER ","type":"text"},{"text":"--prop text=\"$9/mo\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" (zsh/bash eat ","type":"text"},{"text":"$9","type":"text","marks":[{"type":"code_inline"}]},{"text":" as empty var → text rendered as ","type":"text"},{"text":".","type":"text","marks":[{"type":"code_inline"}]},{"text":" / stray period). Same for ","type":"text"},{"text":"${VAR}","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"$USER","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\\r","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\\t","type":"text","marks":[{"type":"code_inline"}]},{"text":" inside a double-quoted prop. Gate 2 morph addendum below greps for the leak signature.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"#","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" in shell values — safe, but quote anyway.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"#","type":"text","marks":[{"type":"code_inline"}]},{"text":" is a comment leader only at the start of a shell word. ","type":"text"},{"text":"--prop name=#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":" works, but ","type":"text"},{"text":"--prop 'name=#s1-title'","type":"text","marks":[{"type":"code_inline"}]},{"text":" is the habit that stops you guessing.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Batch heredoc is the cleanest path for multi-shape slides.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"\u003c\u003c'EOF' | officecli batch $FILE","type":"text","marks":[{"type":"code_inline"}]},{"text":" disables all shell expansion — safe for ","type":"text"},{"text":"$","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"#","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"'","type":"text","marks":[{"type":"code_inline"}]},{"text":" inside the JSON body.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--json","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" responses wrap the payload in ","type":"text","marks":[{"type":"strong"}]},{"text":".data.*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"query","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns ","type":"text"},{"text":".data.results[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" (array of matches); ","type":"text"},{"text":"get","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns ","type":"text"},{"text":".data.children[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" (direct content); ","type":"text"},{"text":"format","type":"text","marks":[{"type":"code_inline"}]},{"text":" always sits at ","type":"text"},{"text":".data.results[].format.X","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":".data.children[].format.X","type":"text","marks":[{"type":"code_inline"}]},{"text":". Always prefix jq paths with ","type":"text"},{"text":".data.","type":"text","marks":[{"type":"code_inline"}]},{"text":" — bare ","type":"text"},{"text":".children[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":".results[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns null silently.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Variable:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"FILE=\"deck.pptx\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" at the top of every build script; every example below uses ","type":"text"},{"text":"$FILE","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gate shell pattern — COUNT, then if/else.","type":"text","marks":[{"type":"strong"}]},{"text":" Never write ","type":"text"},{"text":"grep … && echo LEAK || echo OK","type":"text","marks":[{"type":"code_inline"}]},{"text":" — when grep exits 1 (0 matches), the ","type":"text"},{"text":"||","type":"text","marks":[{"type":"code_inline"}]},{"text":" branch fires with empty stdout and prints \"OK\" confusingly (or prints \"LEAK\" from prior pipes). Canonical form: ","type":"text"},{"text":"COUNT=$(cmd | wc -l); if [ \"$COUNT\" -gt 0 ]; then echo \"LEAK: …\"; else echo \"OK\"; fi","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Two primitives this skill owns","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Scene Actors","type":"text","marks":[{"type":"strong"}]},{"text":" = persistent ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-named shapes (decoration or content) ","type":"text"},{"text":"paired by identical name","type":"text","marks":[{"type":"strong"}]},{"text":" across adjacent slides so Morph can interpolate them. Every ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" shape is a scene actor.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Choreography","type":"text","marks":[{"type":"strong"}]},{"text":" = the plan for how actors evolve — who moves where, who enters, who exits, on which slide pair. Written BEFORE code in the §Morph Pair Planning table.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Use this skill when the user asks for morph motion AND ≥ 2 consecutive slides share a visual element that transforms. Target-viewer caveat: morph needs PowerPoint 365 / Keynote / WPS — if the user is LibreOffice-only, warn first (see §Renderer honesty).","type":"text"}]},{"type":"paragraph","content":[{"text":"Speaker notes rule.","type":"text","marks":[{"type":"strong"}]},{"text":" Every content slide (non-cover, non-closing) MUST carry speaker notes via ","type":"text"},{"text":"officecli add \"$FILE\" /slide[N] --type notes --prop text='…'","type":"text","marks":[{"type":"code_inline"}]},{"text":". Missing notes = not shippable — inherits pptx v2 §Hard rules (H7). Morph decks tend to be visually minimal, so notes carry the narration.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"What is Morph? (core mechanics)","type":"text"}]},{"type":"paragraph","content":[{"text":"PowerPoint's Morph transition creates smooth motion by interpolating shape properties between adjacent slides, matched by ","type":"text"},{"text":"identical shape names","type":"text","marks":[{"type":"strong"}]},{"text":".","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Slide 1: shape name=\"!!scene-ring\" x=5cm width=8cm fill=E94560 opacity=0.3\nSlide 2: shape name=\"!!scene-ring\" x=20cm width=12cm fill=E94560 opacity=0.6\n ↓ transition=morph on slide 2\nResult: Ring smoothly moves, grows, and fades darker over ~1 second","type":"text"}]},{"type":"paragraph","content":[{"text":"Morph only runs if slide N+1 carries ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":". Apply it via ","type":"text"},{"text":"officecli add / --type slide --prop transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" on creation, or ","type":"text"},{"text":"officecli set \"/slide[N]\" --prop transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" after the fact. Slides 2+ that omit this prop fall back to whatever the master defines (usually no transition) — motion dies silently.","type":"text"}]},{"type":"paragraph","content":[{"text":"Three-prefix naming system (non-negotiable):","type":"text","marks":[{"type":"strong"}]}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Prefix","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Role","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Lifecycle","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Example","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Background / decoration — persists across the entire deck","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Set once, adjust position/size to create motion; ","type":"text"},{"text":"rarely ghosted","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!scene-bg-band","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!scene-grid","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Content / foreground — evolves across a section","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Introduced on slide N, modified on slide N+1, N+2…, ","type":"text"},{"text":"ghosted to ","type":"text","marks":[{"type":"strong"}]},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" on its exit slide","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!actor-feature-box","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!actor-metric","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!actor-headline","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Per-slide content (titles, bullets, captions)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Added fresh on slide N, ","type":"text"},{"text":"ghosted to ","type":"text","marks":[{"type":"strong"}]},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" on slide N+1","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"#s2-kpi","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"#s3-caption","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"Hard rule:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" names must NEVER collide (e.g., ","type":"text"},{"text":"!!scene-card","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"!!actor-card","type":"text","marks":[{"type":"code_inline"}]},{"text":" in the same deck — morph engine confuses them). Disambiguate: ","type":"text"},{"text":"!!scene-card-bg","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"!!actor-card-content","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"paragraph","content":[{"text":"Charts are opaque to morph.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"officecli add … --type chart","type":"text","marks":[{"type":"code_inline"}]},{"text":" does NOT accept ","type":"text"},{"text":"--prop name=!!…","type":"text","marks":[{"type":"code_inline"}]},{"text":" (returns ","type":"text"},{"text":"UNSUPPORTED props: name","type":"text","marks":[{"type":"code_inline"}]},{"text":"), so a chart cannot participate in shape-name morph pairing. For bar-grow / line-grow narratives: (a) accept plain fade-in of the chart as-is, OR (b) build N ","type":"text"},{"text":"!!actor-bar-K","type":"text","marks":[{"type":"code_inline"}]},{"text":" rectangles manually sized to the values and morph those — each rect carries the same ","type":"text"},{"text":"!!actor-bar-K","type":"text","marks":[{"type":"code_inline"}]},{"text":" name across adjacent slides while width / height / fill evolves.","type":"text"}]},{"type":"paragraph","content":[{"text":"Ghost accumulation is silent.","type":"text","marks":[{"type":"strong"}]},{"text":" Once a ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-prefixed shape appears on any slide, it stays visible on every subsequent morph slide unless explicitly moved to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". ","type":"text"},{"text":"final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":" helper does NOT detect ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes lingering in the visible area — ","type":"text"},{"text":"only Gate 5b screenshot audit does.","type":"text","marks":[{"type":"strong"}]},{"text":" Plan every actor's exit slide in the pair table BEFORE coding.","type":"text"}]},{"type":"paragraph","content":[{"text":"Spatial variety rule.","type":"text","marks":[{"type":"strong"}]},{"text":" Adjacent slides must have ","type":"text"},{"text":"noticeably different","type":"text","marks":[{"type":"strong"}]},{"text":" compositions — displacement ≥ 5cm OR rotation ≥ 15° OR size delta ≥ 30% on at least 3 morph-paired shapes. Without this, morph interpolates nothing visible and the transition collapses to a fade (silent-fail).","type":"text"}]},{"type":"paragraph","content":[{"text":"Simultaneous-timing constraint.","type":"text","marks":[{"type":"strong"}]},{"text":" All ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes in one morph pair animate simultaneously. To stagger shape A before shape B, insert an intermediate keyframe slide — there is no per-shape delay knob.","type":"text"}]},{"type":"paragraph","content":[{"text":"Paired vs enter vs exit — three behaviors, one rule.","type":"text","marks":[{"type":"strong"}]},{"text":" Same mechanism (shape-name match) produces three outcomes:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Behavior","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Source slide A","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Target slide B","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Who carries ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"?","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Paired morph","type":"text","marks":[{"type":"strong"}]},{"text":" (interpolate)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"has ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"has ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"both slides, identical name","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Enter","type":"text","marks":[{"type":"strong"}]},{"text":" (fade / morph-in)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"— (no counterpart)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"has ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"target only — new shape","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Exit via ghost","type":"text","marks":[{"type":"strong"}]},{"text":" (slide off)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"has ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]},{"text":" at visible ","type":"text"},{"text":"x","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"has ","type":"text"},{"text":"!!foo","type":"text","marks":[{"type":"code_inline"}]},{"text":" at ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"both — same name, B is off-canvas","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Outgoing content (not incoming) is what gets ","type":"text","marks":[{"type":"strong"}]},{"text":"!!","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":"-prefixed + ghosted.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes silently \"disappear\" when you forget them — their name going missing on slide B reads as an unpaired exit (plain fade). Always explicit-ghost to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":" so the exit animation slides off the right edge visibly. One runnable example:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Slide 2: actor is visible at x=5cm — Slide 3: same name, ghosted off-canvas → visible slide-off motion\nofficecli add \"$FILE\" \"/slide[3]\" --type shape --prop 'name=!!actor-metric' \\\n --prop text=\"42%\" --prop x=36cm --prop y=8cm --prop width=6cm --prop height=3cm","type":"text"}]},{"type":"paragraph","content":[{"text":"Content (","type":"text","marks":[{"type":"strong"}]},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":") is added fresh per slide.","type":"text","marks":[{"type":"strong"}]},{"text":" Because text changes every slide, Morph has no meaningful pairing to do on titles / body — it cross-fades them. This is why ","type":"text"},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" get different names per slide (they are intentionally unpaired) and must be ghosted on slide N+1. Scene actors (","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":") carry the continuity; content (","type":"text"},{"text":"#","type":"text","marks":[{"type":"code_inline"}]},{"text":") carries the message.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Morph Pair Planning (pre-code, REQUIRED)","type":"text"}]},{"type":"paragraph","content":[{"text":"Before planning morph pairs, if the deck's audience / purpose / narrative is underspecified, run the planning prompt in ","type":"text"},{"text":"reference/decision-rules.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" to emit a ","type":"text"},{"text":"brief.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" first — a morph arc without a narrative spine collapses into \"slide with motion\", not \"story with motion\".","type":"text"}]},{"type":"paragraph","content":[{"text":"Plan every transition in a table inside ","type":"text"},{"text":"brief.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"before","type":"text","marks":[{"type":"strong"}]},{"text":" writing any ","type":"text"},{"text":"officecli add","type":"text","marks":[{"type":"code_inline"}]},{"text":". Renaming shapes mid-build is the #1 cause of ghost accumulation bugs.","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Pair","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Slide A (start)","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Slide B (end)","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Actors in play","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ghost on Slide B","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1→2","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":" centered 5cm, ","type":"text"},{"text":"#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":" visible","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ring shifts to x=20cm, grows 8→12cm; ","type":"text"},{"text":"#s2-subtitle","type":"text","marks":[{"type":"code_inline"}]},{"text":" revealed","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":" evolves","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":" → x=36cm","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2→3","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!actor-feature-box","type":"text","marks":[{"type":"code_inline"}]},{"text":" large (14cm wide)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Feature box small (6cm), ","type":"text"},{"text":"!!actor-metric","type":"text","marks":[{"type":"code_inline"}]},{"text":" enters","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!actor-feature-box","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!actor-metric","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#s2-subtitle","type":"text","marks":[{"type":"code_inline"}]},{"text":" → x=36cm","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3→4","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Content section A","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Section B divider","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"—","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!actor-feature-box","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"!!actor-metric","type":"text","marks":[{"type":"code_inline"}]},{"text":" → x=36cm (section-exit); ","type":"text"},{"text":"#s3-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" → x=36cm","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Planning rules:","type":"text","marks":[{"type":"strong"}]}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Decide ALL ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" names up front — each morph-paired shape must use the ","type":"text"},{"text":"exact same name","type":"text","marks":[{"type":"strong"}]},{"text":" on both slides.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Classify every ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" shape as ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":". Scene shapes persist; actors must have a planned exit slide.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Section-transition boundary:","type":"text","marks":[{"type":"strong"}]},{"text":" when moving into a new topic section, ghost ALL previous-section ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" on the first slide of the new section. Only ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" (whole-deck decoration) remains.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do NOT start building until the table is complete. If the plan changes mid-build, redraw the table and re-verify affected slides.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Morph Recipes (4 patterns)","type":"text"}]},{"type":"paragraph","content":[{"text":"Four patterns cover ~95% of morph decks. ","type":"text"},{"text":"$FILE=\"deck.pptx\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" throughout. Each block is self-contained and ≤ 20 lines.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"(a) Single-element morph — size / position","type":"text"}]},{"type":"paragraph","content":[{"text":"Visual outcome.","type":"text","marks":[{"type":"strong"}]},{"text":" A hero title centered on slide 1 (size 48pt at y=8cm), then slide 2 shrinks it to 32pt and shifts it to the top-left corner (x=1.5cm, y=1cm) — letting fresh slide-2 content take center stage. One shape, clean motion, no actors.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"FILE=\"deck.pptx\"\nofficecli create \"$FILE\"; officecli open \"$FILE\"\n\n# Slide 1 — hero\nofficecli add \"$FILE\" / --type slide --prop layout=blank --prop background=1E2761\nofficecli add \"$FILE\" /slide[1] --type shape --prop 'name=!!actor-headline' \\\n --prop text=\"The one idea\" --prop x=4cm --prop y=8cm --prop width=26cm --prop height=3cm \\\n --prop font=Georgia --prop size=48 --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=none\n\n# Slide 2 — headline shrinks + moves; new body takes stage\nofficecli add \"$FILE\" / --type slide --prop layout=blank --prop background=1E2761 --prop transition=morph\nofficecli add \"$FILE\" /slide[2] --type shape --prop 'name=!!actor-headline' \\\n --prop text=\"The one idea\" --prop x=1.5cm --prop y=1cm --prop width=12cm --prop height=1.5cm \\\n --prop font=Georgia --prop size=24 --prop bold=true --prop color=FFFFFF --prop align=left --prop fill=none\nofficecli add \"$FILE\" /slide[2] --type shape --prop 'name=#s2-body' \\\n --prop text=\"Here is the supporting evidence.\" --prop x=1.5cm --prop y=5cm --prop width=30cm --prop height=2cm \\\n --prop font=Calibri --prop size=20 --prop color=CADCFC --prop fill=none\n\nofficecli close \"$FILE\"; officecli validate \"$FILE\"","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"(b) Multi-element coordinated morph — Actors / Choreography","type":"text"}]},{"type":"paragraph","content":[{"text":"Visual outcome.","type":"text","marks":[{"type":"strong"}]},{"text":" Three scene actors (","type":"text"},{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!scene-dot","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!!scene-band","type":"text","marks":[{"type":"code_inline"}]},{"text":") repositioned across 3 slides to feel like a camera pan. Fresh per-slide titles fade in / out via the ","type":"text"},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" ghost pattern. Use this when the narrative has a continuous visual backdrop.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Slide 1 — anchor composition (already built via recipe a; here we add actors)\nofficecli add \"$FILE\" /slide[1] --type shape --prop 'name=!!scene-ring' --prop preset=ellipse \\\n --prop fill=E94560 --prop opacity=0.3 --prop x=5cm --prop y=3cm --prop width=8cm --prop height=8cm\nofficecli add \"$FILE\" /slide[1] --type shape --prop 'name=!!scene-dot' --prop preset=ellipse \\\n --prop fill=0F3460 --prop x=28cm --prop y=15cm --prop width=1cm --prop height=1cm\n\n# Slide 2 — morph: ring moves + grows, dot slides left (spatial variety ≥ 5cm on both)\nofficecli set \"$FILE\" \"/slide[2]\" --prop transition=morph\nofficecli add \"$FILE\" /slide[2] --type shape --prop 'name=!!scene-ring' --prop preset=ellipse \\\n --prop fill=E94560 --prop opacity=0.6 --prop x=20cm --prop y=2cm --prop width=12cm --prop height=12cm\nofficecli add \"$FILE\" /slide[2] --type shape --prop 'name=!!scene-dot' --prop preset=ellipse \\\n --prop fill=0F3460 --prop x=3cm --prop y=16cm --prop width=1.5cm --prop height=1.5cm\n# Ghost slide-1 content\nofficecli set \"$FILE\" \"/slide[2]/shape[@name=#s1-title]\" --prop x=36cm 2>/dev/null || true # name path may fail after morph — see Known Issues\n\n# Verify morph pair: identical names on slides 1 & 2\nofficecli get \"$FILE\" /slide[1] --depth 1 --json | jq -r '.data.children[]?.format.name // empty'\nofficecli get \"$FILE\" /slide[2] --depth 1 --json | jq -r '.data.children[]?.format.name // empty'\n# Compare — `!!scene-ring` and `!!scene-dot` MUST appear on both, byte-identical.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"(c) Continuous multi-slide morph (story arc) — use helpers","type":"text"}]},{"type":"paragraph","content":[{"text":"Visual outcome.","type":"text","marks":[{"type":"strong"}]},{"text":" A 5-slide arc telling one continuous story: same 2 scene actors drift across the canvas as the narrative progresses; content (","type":"text"},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]},{"text":") refreshes per slide and is ghosted on the next. Building this by hand is ~60 commands — use ","type":"text"},{"text":"reference/morph-helpers.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" to keep the build script short and auto-verified.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"#!/usr/bin/env python3\n# Invoke the provided helper library for clone + ghost + verify\nimport subprocess, sys, os\nSCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))\nHELPERS = os.path.join(SCRIPT_DIR, \"reference\", \"morph-helpers.py\")\nFILE = \"deck.pptx\"\n\ndef helper(*args):\n subprocess.run([sys.executable, HELPERS, *[str(a) for a in args]], check=True)\n\n# ... assume slide 1 is built with 2 scene actors (!!scene-ring, !!scene-dot) + #s1-title\n# Helper builds slide 2–5 with: clone from previous + apply transition=morph + ghost previous #sN- content\nfor n in range(2, 6):\n helper(\"clone\", FILE, n - 1, n) # clone + set transition=morph + list shapes\n helper(\"ghost\", FILE, n, \"all-content\") # ghost all #s(n-1)-* via duplicate-text detection\n # …then add THIS slide's #sN- content via officecli add as normal…\nhelper(\"final-check\", FILE) # structural pass; DOES NOT catch !! lingering in visible area","type":"text"}]},{"type":"paragraph","content":[{"text":"Helper signatures and source: ","type":"text"},{"text":"reference/morph-helpers.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" (","type":"text"},{"text":"clone","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"ghost","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"verify","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":"). The shell equivalent is ","type":"text"},{"text":"reference/morph-helpers.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" — pick one per platform; do not mix.","type":"text"}]},{"type":"paragraph","content":[{"text":"When to use helpers vs raw ","type":"text","marks":[{"type":"strong"}]},{"text":"officecli","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]},{"text":" For 2-3 slide decks, raw commands (recipes a, b) are clearer. For 5+ slides with repeating clone/ghost/verify cadence, helpers save ~40% of commands and provide built-in verification. Every slide is still closed by ","type":"text"},{"text":"officecli validate","type":"text","marks":[{"type":"code_inline"}]},{"text":" before delivery.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"(d) Morph + fade hybrid — entrance on morph slide","type":"text"}]},{"type":"paragraph","content":[{"text":"Visual outcome.","type":"text","marks":[{"type":"strong"}]},{"text":" A morph pair where ","type":"text"},{"text":"!!scene-ring","type":"text","marks":[{"type":"code_inline"}]},{"text":" moves continuously while a NEW per-slide card fades in simultaneously. Used when a morph-paired backdrop carries the eye and fresh foreground content needs a softer entrance than a raw appearance.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Slide 2 already has transition=morph and !!scene-ring. Add a new card with fade-entrance.\nofficecli add \"$FILE\" /slide[2] --type shape --prop 'name=#s2-card' --prop preset=roundRect \\\n --prop fill=F5F7FA --prop line=none --prop x=2cm --prop y=12cm --prop width=10cm --prop height=5cm\n\n# Apply simultaneous-with-morph fade entrance to the new card.\n# 'fade-entrance-300-with' = fade in, 300ms, trigger=withPrevious (plays with the morph transition).\nofficecli set \"$FILE\" \"/slide[2]/shape[@name=#s2-card]\" --prop animation=fade-entrance-300-with\nofficecli get \"$FILE\" \"/slide[2]/shape[@name=#s2-card]\" --json | jq '.data.format.animation' # readback sanity","type":"text"}]},{"type":"paragraph","content":[{"text":"Why this works.","type":"text","marks":[{"type":"strong"}]},{"text":" Morph animates the ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes only (they have a pair on slide 1); the new ","type":"text"},{"text":"#s2-card","type":"text","marks":[{"type":"code_inline"}]},{"text":" has no slide-1 counterpart, so morph would default-fade it — ","type":"text"},{"text":"fade-entrance-300-with","type":"text","marks":[{"type":"code_inline"}]},{"text":" makes that fade explicit and timed. Keep the animation per pptx v2 floor: ≤ 600ms, no bounce / swivel / fly-from-edge (","type":"text"},{"text":"officecli help pptx animation","type":"text","marks":[{"type":"code_inline"}]},{"text":" for the canonical preset list).","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Choreography — animation types + staggered timing","type":"text"}]},{"type":"paragraph","content":[{"text":"How morph animates multiple shapes determines what the audience sees. Pick the right mechanism for each pair:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Animation type","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"How to achieve it (between Slide A and Slide B)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Simple move","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" name on both slides, same size, different ","type":"text"},{"text":"x","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"y","type":"text","marks":[{"type":"code_inline"}]},{"text":" — morph interpolates position","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Scale transform","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same name, different ","type":"text"},{"text":"width","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"height","type":"text","marks":[{"type":"code_inline"}]},{"text":" — morph interpolates size (and re-positions the center)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Move + scale","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Different ","type":"text"},{"text":"x","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"y","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"width","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"height","type":"text","marks":[{"type":"code_inline"}]},{"text":" simultaneously — morph handles all dimensions at once","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Color / opacity shift","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same name, different ","type":"text"},{"text":"fill","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"opacity","type":"text","marks":[{"type":"code_inline"}]},{"text":" — morph cross-fades the fill","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rotation","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same name, different ","type":"text"},{"text":"rotation","type":"text","marks":[{"type":"code_inline"}]},{"text":" (degrees) — morph rotates along the shortest arc","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Font size change","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Same name, different ","type":"text"},{"text":"size","type":"text","marks":[{"type":"code_inline"}]},{"text":" (pt) on text shape — interpolates in PowerPoint 365; less reliable on Keynote / WPS / LibreOffice (may degrade to crossfade). For portable motion, pair ","type":"text"},{"text":"size","type":"text","marks":[{"type":"code_inline"}]},{"text":" change with a matching ","type":"text"},{"text":"width","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"height","type":"text","marks":[{"type":"code_inline"}]},{"text":" delta or an ","type":"text"},{"text":"x","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"y","type":"text","marks":[{"type":"code_inline"}]},{"text":" displacement — the spatial change keeps motion visible when size interpolation drops out","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Enter (fade in)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Shape exists only on Slide B (no counterpart on A) — morph fades it in","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Exit (fade out)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Shape exists only on Slide A (no counterpart on B) — morph fades it out","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Multi-shape timing constraint.","type":"text","marks":[{"type":"strong"}]},{"text":" All ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes in one morph pair animate ","type":"text"},{"text":"simultaneously","type":"text","marks":[{"type":"strong"}]},{"text":" — there is no per-shape delay / duration knob in the CLI (help confirms: no ","type":"text"},{"text":"morph.duration","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"morph.delay","type":"text","marks":[{"type":"code_inline"}]},{"text":" on slide). To stagger shape A before shape B, ","type":"text"},{"text":"split the transition into two pairs","type":"text","marks":[{"type":"strong"}]},{"text":" with an intermediate slide:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Slide 2 → Slide 3: !!actor-A moves (!!actor-B stays put)\nSlide 3 → Slide 4: !!actor-B moves (!!actor-A stays put or ghosts)","type":"text"}]},{"type":"paragraph","content":[{"text":"Slide 3 is an explicit intermediate keyframe. Do NOT attempt to fake staggering via timing props on the shape's ","type":"text"},{"text":"animation=","type":"text","marks":[{"type":"code_inline"}]},{"text":" prop — Morph runs before per-shape animations.","type":"text"}]},{"type":"paragraph","content":[{"text":"Good-enough variety heuristic (Best Practice — creative flexibility).","type":"text","marks":[{"type":"strong"}]},{"text":" For a morph to read as \"motion\", change at least 3 of {x, y, width, height, rotation, fill, opacity} on the dominant paired shape, with displacement ≥ 5cm OR rotation ≥ 15° OR size delta ≥ 30%. One shape × 3 props is a valid creative pattern (focus on one hero element).","type":"text"}]},{"type":"paragraph","content":[{"text":"Delivery Gate 5b-morph-2 is stricter.","type":"text","marks":[{"type":"strong"}]},{"text":" The gate hard-asserts ≥ 3 DIFFERENT ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-prefixed shapes each vary by ≥ 1 of {x, y, width, height, rotation, font-size} across the pair — integrity check for \"is this really a morph or a pretend-morph\". Heuristic informs creative intent; Gate decides delivery. ","type":"text"},{"text":"Brand-constant scenery (pinned header strip, footer bar, logo badge) does NOT count toward the 3-shape quota","type":"text","marks":[{"type":"strong"}]},{"text":" — these are supposed to stay put; motion must come from 3 other named shapes. When in doubt, satisfy the stricter Gate.","type":"text"}]},{"type":"paragraph","content":[{"text":"Deck-length rhythm.","type":"text","marks":[{"type":"strong"}]},{"text":" Filling every transition with morph reads as anxious, not cinematic. Pace morph moments to deck length:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"8-10 slides (dense):","type":"text","marks":[{"type":"strong"}]},{"text":" 3-5 morph moments; motion can cluster.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"12-18 slides (ceremonial):","type":"text","marks":[{"type":"strong"}]},{"text":" 3-5 TOTAL morphs, spaced every 4-6 slides; use ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" at section dividers so the animation reads as chapter punctuation, not continuous agitation.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"18+ slides (Act-based):","type":"text","marks":[{"type":"strong"}]},{"text":" structure into 3 acts with 1 long section-divider morph between acts (5-10s of deliberate motion with a brief hold), plus 2-3 quieter morphs inside each act. Lean heavier on ","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" continuity than per-slide ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" churn.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Scene-actor spatial rule","type":"text"}]},{"type":"paragraph","content":[{"text":"Scene actors and actors moving across the canvas MUST stay in predictable zones during morph — otherwise they cross over content and read as clutter.","type":"text"}]},{"type":"paragraph","content":[{"text":"Safe zones (prefer for scene actor rest positions and morph paths):","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"Top-right corner: x ≥ 24cm, y ≤ 6cm\nBottom-right: x ≥ 24cm, y ≥ 12cm\nBottom-left: x ≤ 2cm, y ≥ 12cm\nOff-canvas (ghost): x ≥ 33.87cm (canvas right edge; use x=36cm for explicit ghost)","type":"text"}]},{"type":"paragraph","content":[{"text":"Avoid resting actors in the content core:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"x = 2~28cm, y = 3~16cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". Actors may ","type":"text"},{"text":"pass through","type":"text","marks":[{"type":"strong"}]},{"text":" the core during morph (that's the motion), but they should not end a slide parked there with high opacity unless they are content themselves (","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" carrying the slide's message).","type":"text"}]},{"type":"paragraph","content":[{"text":"Before placing any scene actor, inspect existing shape bounds:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r '.data.children[]? | \"\\(.format.name // .path) x=\\(.format.x) y=\\(.format.y) w=\\(.format.width) h=\\(.format.height)\"'","type":"text"}]},{"type":"paragraph","content":[{"text":"Confirm the actor's target position does not overlap any ","type":"text"},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" content shape's bounding box (","type":"text"},{"text":"x","type":"text","marks":[{"type":"code_inline"}]},{"text":" to ","type":"text"},{"text":"x + width","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"y","type":"text","marks":[{"type":"code_inline"}]},{"text":" to ","type":"text"},{"text":"y + height","type":"text","marks":[{"type":"code_inline"}]},{"text":"). If it would overlap, lower actor ","type":"text"},{"text":"opacity","type":"text","marks":[{"type":"code_inline"}]},{"text":" ≤ 0.15 OR move it to a safe zone.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Style library lookup workflow","type":"text"}]},{"type":"paragraph","content":[{"text":"reference/styles/","type":"text","marks":[{"type":"code_inline"}]},{"text":" holds 52 visual style directories (dark / light / warm / vivid / bw / mixed moods) — design inspiration, not templates. Use the library as ","type":"text"},{"text":"on-demand reference","type":"text","marks":[{"type":"strong"}]},{"text":", not as a content dump.","type":"text"}]},{"type":"paragraph","content":[{"text":"Why lookup, not copy.","type":"text","marks":[{"type":"strong"}]},{"text":" Each of the 52 ","type":"text"},{"text":"build.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" files is a complete style demo — but the coordinates were hand-tuned for that specific demo's content length. Copying them verbatim into a deck with different content produces overlaps and misalignment (flagged in ","type":"text"},{"text":"INDEX.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" L5-11). The library's value is the ","type":"text"},{"text":"design logic","type":"text","marks":[{"type":"strong"}]},{"text":": palette choice for a mood, signature shape, choreography pattern. Apply that logic to your own grid math.","type":"text"}]},{"type":"paragraph","content":[{"text":"Four-step lookup:","type":"text","marks":[{"type":"strong"}]}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Browse INDEX.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"reference/styles/INDEX.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" groups all 52 styles by palette category and mood (e.g. ","type":"text"},{"text":"dark--premium-navy","type":"text","marks":[{"type":"code_inline"}]},{"text":" = authoritative / refined; ","type":"text"},{"text":"warm--earth-organic","type":"text","marks":[{"type":"code_inline"}]},{"text":" = organic / grounded). The Quick Lookup table also shows each style's ","type":"text"},{"text":"primary hex trio","type":"text","marks":[{"type":"strong"}]},{"text":" (bg / fg / accent) — if the user specified a brand color, scan the hex column to find the nearest match without opening every ","type":"text"},{"text":"style.md","type":"text","marks":[{"type":"code_inline"}]},{"text":". Pick 1 style that matches the topic mood OR aligns with the user-specified hex.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read philosophy.","type":"text","marks":[{"type":"strong"}]},{"text":" Open ","type":"text"},{"text":"reference/styles/\u003cstyle-id>/style.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for design intent — type pairing, color logic, signature elements.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Glance technique.","type":"text","marks":[{"type":"strong"}]},{"text":" Open ","type":"text"},{"text":"reference/styles/\u003cstyle-id>/build.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" ONLY for technique reference (signature shapes, palette hex codes, choreography ideas) — ","type":"text"},{"text":"coordinates are known-buggy per ","type":"text","marks":[{"type":"strong"}]},{"text":"INDEX.md","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" L5-11","type":"text","marks":[{"type":"strong"}]},{"text":"; do not copy them.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Apply on your own canvas.","type":"text","marks":[{"type":"strong"}]},{"text":" Build your deck using pptx v2 grid math + visual floor; borrow only the palette and the signature gesture.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Pointer:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"→ see reference/styles/\u003cstyle-id>/","type":"text","marks":[{"type":"code_inline"}]},{"text":" — never inline-copy coordinates from a style build.sh.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Delivery Gate (inherits pptx v2 + morph additions)","type":"text"}]},{"type":"paragraph","content":[{"text":"Gate 1–5a: full port from pptx v2.","type":"text","marks":[{"type":"strong"}]},{"text":" → see pptx v2 §Delivery Gate. Schema (whitelisting C-P-2 chart spPr), token grep (","type":"text"},{"text":"$…$","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"{{…}}","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"\\$\\t\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"()","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"[]","type":"text","marks":[{"type":"code_inline"}]},{"text":"), hyperlink rPr (C-P-1), slide-order sanity, dark-on-dark contrast (Gate 5a). ","type":"text"},{"text":"Refuse to declare done until every pptx Gate 1–5a prints its OK message.","type":"text","marks":[{"type":"strong"}]},{"text":" Morph decks have the same token / schema / order risks as any pptx.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Gate 2 morph addendum — price / metric tokens eaten by zsh","type":"text"}]},{"type":"paragraph","content":[{"text":"Pptx v2 Gate 2 covers ","type":"text"},{"text":"$…$","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"{{…}}","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\\$\\t\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":" literals, empty ","type":"text"},{"text":"()","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"[]","type":"text","marks":[{"type":"code_inline"}]},{"text":". Morph decks add a class of leaks: price / metric tokens (","type":"text"},{"text":"$9/mo","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"$29/month","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"$199/yr","type":"text","marks":[{"type":"code_inline"}]},{"text":") written in double-quoted ","type":"text"},{"text":"--prop text=\"…\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" — the shell eats ","type":"text"},{"text":"$9","type":"text","marks":[{"type":"code_inline"}]},{"text":" as an empty variable and the CLI stores ","type":"text"},{"text":"/mo","type":"text","marks":[{"type":"code_inline"}]},{"text":" or a stray period. Run this in addition to pptx Gate 2:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Gate 2 morph — price / metric token leaks + stray-period placeholders\n# Pattern hits: bare prices ($9, $29, $9.99), /unit suffix ($9/mo, $199/yr), ${VAR}, \\n/\\r/\\t, lone period\nLEAKS=$(officecli view \"$FILE\" text | grep -nE '\\$[0-9]+(\\.[0-9]+)?(/(mo|month|yr|year|day|wk|week|hr|hour))?|\\$\\{[A-Z_]+\\}|\\\\[nrt]|^\\.

OfficeCLI Morph-PPT Skill This skill is a scene layer on top of . Every pptx hard rule — visual delivery floor (title ≥ 36pt / body ≥ 18pt / title ≥ 2× body), 12-column grid on 33.87×19.05cm, canonical palettes, chart-choice decision table, connector canon, shell escape, resident + batch, Delivery Gate 1–5a — is inherited, not re-taught. This file adds only what Morph needs on top: cross-slide shape-name binding, Scene Actors vs content prefixing, ghost discipline, CLI quirks, 52-style visual library lookup, and a morph-specific fresh-eyes Gate 5b extension. When the pptx base rules cover it,…

|| true)\nif [ -z \"$LEAKS\" ]; then echo \"Gate 2 morph OK\"; else echo \"LEAK: $LEAKS\"; fi","type":"text"}]},{"type":"paragraph","content":[{"text":"Covers: ","type":"text"},{"text":"$9","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"$9.99","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"$29/month","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"$199/yr","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"$1/day","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"${VAR}","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"\\r","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"\\t","type":"text","marks":[{"type":"code_inline"}]},{"text":" literals + stray ","type":"text"},{"text":".","type":"text","marks":[{"type":"code_inline"}]},{"text":" placeholders. Fix: single-quote the prop (","type":"text"},{"text":"--prop text='$9/mo'","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Gate 5b — Visual audit via HTML preview (MANDATORY) — extended for morph","type":"text"}]},{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"officecli view \"$FILE\" html","type":"text","marks":[{"type":"code_inline"}]},{"text":" and Read the returned HTML path. For every slide, answer the pptx v2 Gate 5b questions (overlap / dark-on-dark / divider overlap / order sanity / missing arrowheads) PLUS these four morph-specific checks:","type":"text"}]},{"type":"paragraph","content":[{"text":"Important: selectors with prefix match.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"officecli query","type":"text","marks":[{"type":"code_inline"}]},{"text":" only supports operators ","type":"text"},{"text":"=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"!=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"~=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":">=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\u003c=","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":">","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"\u003c","type":"text","marks":[{"type":"code_inline"}]},{"text":" — there is NO ","type":"text"},{"text":"^=","type":"text","marks":[{"type":"code_inline"}]},{"text":" prefix operator. A selector like ","type":"text"},{"text":"shape[name^=!!actor-]","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns an ","type":"text"},{"text":"invalid_selector","type":"text","marks":[{"type":"code_inline"}]},{"text":" error. For \"starts-with\" filtering, use a ","type":"text"},{"text":"get --depth 1","type":"text","marks":[{"type":"code_inline"}]},{"text":" loop + ","type":"text"},{"text":"jq startswith()","type":"text","marks":[{"type":"code_inline"}]},{"text":" as shown below.","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"5b-morph-1 — ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" leak into visible area after its section ends.","type":"text","marks":[{"type":"strong"}]},{"text":" For every ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" that should have exited, confirm ","type":"text"},{"text":"x ≥ 33.87cm","type":"text","marks":[{"type":"code_inline"}]},{"text":" (canvas right edge). Loop + filter (selector-safe):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"NSLIDES=$(officecli query \"$FILE\" slide --json | jq '.data.results | length')\nfor N in $(seq 1 $NSLIDES); do\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r --arg n \"$N\" '.data.children[]? |\n select(.format.name? // \"\" | startswith(\"!!actor-\")) |\n select((.format.x // \"0cm\" | rtrimstr(\"cm\") | tonumber) \u003c 33.87) |\n \"slide \\($n) leak: \\(.format.name) stuck at x=\\(.format.x)\"'\ndone","type":"text"}]},{"type":"paragraph","content":[{"text":"Any line printed = actor stuck visible. ","type":"text"},{"text":"final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":" misses this — only the loop + Read HTML do.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"5b-morph-2 — Adjacent slides have identical spatial composition (no motion).","type":"text","marks":[{"type":"strong"}]},{"text":" Hard rule: between every morph pair, ≥ 3 DIFFERENT ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-prefixed shapes must each differ by ≥ 1 of {x, y, width, height, rotation, font-size}. Proof loop (dump both slides, diff same-name shapes, count differing shapes):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"for K in 1 2 3 4; do\n A=$(officecli get \"$FILE\" \"/slide[$K]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) |\n \"\\(.format.name)|\\(.format.x)|\\(.format.y)|\\(.format.width)|\\(.format.height)|\\(.format.rotation // 0)\"')\n B=$(officecli get \"$FILE\" \"/slide[$((K+1))]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) |\n \"\\(.format.name)|\\(.format.x)|\\(.format.y)|\\(.format.width)|\\(.format.height)|\\(.format.rotation // 0)\"')\n VARIES=$(diff \u003c(echo \"$A\") \u003c(echo \"$B\") | grep -c '^[\u003c>]')\n if [ \"$VARIES\" -lt 6 ]; then echo \"pair $K→$((K+1)) FLAT: only $VARIES diff-lines (need ≥ 6 = 3 shapes × 2 sides)\"; fi\ndone","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"5b-morph-3 — Morph-pair name mismatches.","type":"text","marks":[{"type":"strong"}]},{"text":" Adjacent slides must share at least 2 ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":"-prefixed names exactly. Proof (note: ","type":"text"},{"text":".data.children[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" — bare ","type":"text"},{"text":".children[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns null):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"for N in 1 2 3 4 5; do\n echo \"--- slide $N ---\"\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r '.data.children[]? | select(.format.name? // \"\" | startswith(\"!!\")) | .format.name'\ndone","type":"text"}]},{"type":"paragraph","content":[{"text":"Visually compare sequential blocks — shared ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" names between N and N+1 are the morph pairs. Zero overlap = the pair is a plain fade.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"5b-morph-4 — ","type":"text","marks":[{"type":"strong"}]},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" lingering on slide N+1 (ghost leak).","type":"text","marks":[{"type":"strong"}]},{"text":" Per-slide content MUST be ghosted (","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":") on the NEXT slide. Loop + filter per N≥2:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"NSLIDES=$(officecli query \"$FILE\" slide --json | jq '.data.results | length')\nfor N in $(seq 2 $NSLIDES); do\n PREV=$((N-1))\n officecli get \"$FILE\" \"/slide[$N]\" --depth 1 --json | \\\n jq -r --arg n \"$N\" --arg p \"$PREV\" '.data.children[]? |\n select(.format.name? // \"\" | startswith(\"#s\\($p)-\")) |\n select((.format.x // \"0cm\" | rtrimstr(\"cm\") | tonumber) \u003c 33.87) |\n \"slide \\($n) leak: \\(.format.name) stuck at x=\\(.format.x)\"'\ndone","type":"text"}]},{"type":"paragraph","content":[{"text":"Any line printed = a ","type":"text"},{"text":"#s(N-1)-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" shape stayed visible on slide N. Ghost it.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"REJECT the delivery","type":"text","marks":[{"type":"strong"}]},{"text":" if any 5b-morph-1..4 loop prints a line. Collect stdout from all four loops into one stream and enforce with the COUNT pattern: ","type":"text"},{"text":"LEAK_COUNT=$(...all four loops... | wc -l); if [ \"$LEAK_COUNT\" -gt 0 ]; then echo \"REJECT: $LEAK_COUNT morph leaks\"; else echo \"Gate 5b-morph OK\"; fi","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Renderer honesty","type":"text"}]},{"type":"paragraph","content":[{"text":"Morph renders in:","type":"text","marks":[{"type":"strong"}]},{"text":" PowerPoint 365 (Windows/Mac), Keynote, WPS, PowerPoint Online.","type":"text"}]},{"type":"paragraph","content":[{"text":"Morph does NOT render in:","type":"text","marks":[{"type":"strong"}]},{"text":" LibreOffice Impress (renders static, sometimes as fade), Google Slides web viewer (loses interpolation), most HTML / SVG viewers, ","type":"text"},{"text":"officecli view html","type":"text","marks":[{"type":"code_inline"}]},{"text":" (structural only — morph is runtime). This is ","type":"text"},{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":", not a skill defect. Tell the user explicitly: \"Open in PowerPoint 365 / Keynote / WPS to see the morph motion; other viewers will show static or plain fade.\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Static screenshots from any renderer ","type":"text"},{"text":"cannot verify morph motion","type":"text","marks":[{"type":"strong"}]},{"text":" (the motion only exists at runtime). Use Gate 5b queries above to prove pair correctness; use a live viewer to prove motion quality.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Ghost Discipline & Actor Lifecycle","type":"text"}]},{"type":"paragraph","content":[{"text":"Every ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" and ","type":"text","marks":[{"type":"strong"}]},{"text":"#sN-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" shape must be managed across EVERY slide, not just its \"exit\" slide.","type":"text","marks":[{"type":"strong"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"The Per-Slide Ghosting Rule","type":"text"}]},{"type":"paragraph","content":[{"text":"When building a multi-slide morph deck:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Slide N: Introduce ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-ring","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" (visible at x=0cm)","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Slide N+1: Add new content. Before finishing, ghost ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-ring","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" to ","type":"text","marks":[{"type":"strong"}]},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":".","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Slide N+2: Add more content. Re-ghost ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-ring","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" to ","type":"text","marks":[{"type":"strong"}]},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" again.","type":"text","marks":[{"type":"strong"}]},{"text":" (Not optional — even though it was already off-screen, each slide is a fresh canvas.)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Slide N+3: If ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-ring","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" should be visible again, move it back to x=0cm or its new position.","type":"text","marks":[{"type":"strong"}]}]}]}]},{"type":"paragraph","content":[{"text":"Why:","type":"text","marks":[{"type":"strong"}]},{"text":" Each slide's shape list is independent. Moving a shape off-canvas on slide N does NOT carry over to slide N+1 — if you forget to re-ghost it, it will re-appear at its original position on N+1.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Workflow Pattern (Bash)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# After adding new content shapes to slide $SLIDE:\nfor ACTOR in \"!!actor-ring\" \"!!actor-dot\" \"!!actor-accent-bar\"; do\n officecli set \"$FILE\" \"/slide[$SLIDE]/shape[@name=$ACTOR]\" --prop x=36cm || true\ndone","type":"text"}]},{"type":"paragraph","content":[{"text":"Or in a build loop:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"for SLIDE_NUM in 3 4 5 6 7 8 9 10 11; do\n # Add content specific to this slide\n officecli add \"$FILE\" \"/slide[$SLIDE_NUM]\" --type shape ...\n \n # IMMEDIATELY ghost all old actors (M-2 prevention)\n officecli set \"$FILE\" \"/slide[$SLIDE_NUM]/shape[@name=!!actor-ring]\" --prop x=36cm || true\n officecli set \"$FILE\" \"/slide[$SLIDE_NUM]/shape[@name=!!actor-dot]\" --prop x=36cm || true\ndone","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Detection: Ghost Count Gate","type":"text"}]},{"type":"paragraph","content":[{"text":"morph-helpers.py final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":" counts all shapes at ","type":"text"},{"text":"x ≥ 34cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". If count > 50, it prints:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"REJECT: Found 135 accumulated ghosts — likely M-2 ghost accumulation.\nRun: officecli query deck.pptx 'shape[x>=34cm]' --json | jq '.data.results | length'\nExpected ≤ 50 (roughly 4–5 active actors × 10–12 slides).","type":"text"}]},{"type":"paragraph","content":[{"text":"Fix:","type":"text","marks":[{"type":"strong"}]},{"text":" Review the build log, ensure every slide re-ghosts all actors that should not appear in it. Re-run final-check. If still > 50, use ","type":"text"},{"text":"morph-helpers.py clean-accumulation deck.pptx","type":"text","marks":[{"type":"code_inline"}]},{"text":" (see reference section).","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Common Morph Pitfalls (design + workflow traps)","type":"text"}]},{"type":"paragraph","content":[{"text":"Base pptx pitfalls (shell quoting, zsh ","type":"text"},{"text":"[N]","type":"text","marks":[{"type":"code_inline"}]},{"text":" globbing, hex ","type":"text"},{"text":"#","type":"text","marks":[{"type":"code_inline"}]},{"text":" prefix, ","type":"text"},{"text":"\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":" in prop text) → see pptx v2 §Common Pitfalls. These are the morph-specific traps:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Pitfall","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Correct approach","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"!!scene-card","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"!!actor-card","type":"text","marks":[{"type":"code_inline"}]},{"text":" in the same deck","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Names must be unique across prefixes. Rename: ","type":"text"},{"text":"!!scene-card-bg","type":"text","marks":[{"type":"code_inline"}]},{"text":" vs ","type":"text"},{"text":"!!actor-card-content","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Renaming shapes mid-build after some slides are already done","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ghost accumulation bug waiting to happen. Stop, redraw the §Morph Pair Planning table, rerun affected slides","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Placing ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" into the content core without planning an exit","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Every ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" needs a ghost slide. Plan it in the pair table BEFORE coding","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ghost accumulation (M-2): forgetting to re-ghost ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" on later slides","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"CRITICAL:","type":"text","marks":[{"type":"strong"}]},{"text":" When you add new content to slide N+1, ALL ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" from slide N that should not be visible must be moved to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":" again. Do NOT assume they stay off-screen once ghosted — each slide is independent. Build pattern: ","type":"text"},{"text":"for each new slide: add content shapes → then loop: set each active !!actor-* to x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". ","type":"text"},{"text":"morph-helpers.py final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":" will REJECT if ghost count exceeds 50.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Forgetting ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" on a slide","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Silent fade. Gate 5b-morph-2 (no motion) catches it; fix via ","type":"text"},{"text":"set /slide[N] --prop transition=morph","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Using ","type":"text"},{"text":"@name=","type":"text","marks":[{"type":"code_inline"}]},{"text":" path on a morph slide after ","type":"text"},{"text":"transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":" was set","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Selector breaks (M-1). Switch to index paths ","type":"text"},{"text":"/slide[N]/shape[K]","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Adjacent slides visually identical","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Morph has nothing to interpolate — collapses to plain fade. Apply §Scene-actor spatial rule and move ≥ 3 shapes by ≥ 5cm / ≥ 15°","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Trying to stagger 2 shapes via per-shape timing","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Not supported — split the pair into two transitions with an intermediate keyframe slide","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Testing morph motion in LibreOffice or a browser","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":", not skill defect. Test in PowerPoint 365 / Keynote / WPS","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Deleting a ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" shape on exit instead of ghosting it","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Deletion breaks morph pairing — the shape vanishes without animation. Always ghost to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Writing ","type":"text"},{"text":"--prop text=\"$9/mo\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" with double quotes","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Shell eats ","type":"text"},{"text":"$9","type":"text","marks":[{"type":"code_inline"}]},{"text":" as empty variable → text stored as ","type":"text"},{"text":"/mo","type":"text","marks":[{"type":"code_inline"}]},{"text":" or stray ","type":"text"},{"text":".","type":"text","marks":[{"type":"code_inline"}]},{"text":". Use single quotes: ","type":"text"},{"text":"--prop text='$9/mo'","type":"text","marks":[{"type":"code_inline"}]},{"text":". Gate 2 morph addendum greps this leak.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Using ","type":"text"},{"text":"\u003ca:br/>","type":"text","marks":[{"type":"code_inline"}]},{"text":" literal inside ","type":"text"},{"text":"--prop text='line1\u003ca:br/>line2'","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Stored as 7 literal characters, not a line break. Use ","type":"text"},{"text":"officecli add \"/slide[N]/shape[@id=K]\" --type paragraph","type":"text","marks":[{"type":"code_inline"}]},{"text":" once per line (M-6).","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Using ","type":"text"},{"text":"shape[name^=!!actor-]","type":"text","marks":[{"type":"code_inline"}]},{"text":" selector","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"officecli query","type":"text","marks":[{"type":"code_inline"}]},{"text":" has no ","type":"text"},{"text":"^=","type":"text","marks":[{"type":"code_inline"}]},{"text":" operator — returns ","type":"text"},{"text":"invalid_selector","type":"text","marks":[{"type":"code_inline"}]},{"text":". Use ","type":"text"},{"text":"get /slide[N] --depth 1 --json | jq '.data.children[]? | select(.format.name | startswith(\"!!actor-\"))'","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Running ","type":"text"},{"text":"validate","type":"text","marks":[{"type":"code_inline"}]},{"text":" while resident mode is open","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Pptx v2 inherits this trap — ","type":"text"},{"text":"officecli close \"$FILE\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" BEFORE ","type":"text"},{"text":"validate","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Known Issues & Pitfalls","type":"text"}]},{"type":"paragraph","content":[{"text":"Base pptx bugs C-P-1..7 (hyperlink rPr, chart ChartShapeProperties warning, animation duration readback, animation remove, connector enum, connector ","type":"text"},{"text":"@name=","type":"text","marks":[{"type":"code_inline"}]},{"text":", chart-color renderer normalization) all apply. ","type":"text"},{"text":"→ see pptx v2 §Known Issues C-P-1..7 for workarounds.","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"Morph-specific (M-1..5):","type":"text","marks":[{"type":"strong"}]}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"#","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Symptom","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Workaround","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-1","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"After ","type":"text"},{"text":"officecli set '/slide[N]' --prop transition=morph","type":"text","marks":[{"type":"code_inline"}]},{"text":", every shape on that slide has ","type":"text"},{"text":"!!","type":"text","marks":[{"type":"code_inline"}]},{"text":" auto-prepended to its name (","type":"text"},{"text":"#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":" → ","type":"text"},{"text":"!!#s1-title","type":"text","marks":[{"type":"code_inline"}]},{"text":"). Name-path selectors like ","type":"text"},{"text":"/slide[N]/shape[@name=#s1-title]","type":"text","marks":[{"type":"code_inline"}]},{"text":" stop matching silently. ","type":"text"},{"text":"Selector filter caveat:","type":"text","marks":[{"type":"strong"}]},{"text":" after auto-prefix, ","type":"text"},{"text":"!!#sN-caption","type":"text","marks":[{"type":"code_inline"}]},{"text":" coexists alongside ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" — filtering \"scene actors\" with ","type":"text"},{"text":"startswith(\"!!\")","type":"text","marks":[{"type":"code_inline"}]},{"text":" produces false matches on auto-prefixed content. Always filter with ","type":"text"},{"text":"startswith(\"!!actor-\")","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"startswith(\"!!scene-\")","type":"text","marks":[{"type":"code_inline"}]},{"text":", never bare ","type":"text"},{"text":"startswith(\"!!\")","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"index paths","type":"text","marks":[{"type":"strong"}]},{"text":" after morph is set: ","type":"text"},{"text":"get /slide[N] --depth 1","type":"text","marks":[{"type":"code_inline"}]},{"text":" to list shapes, then address via ","type":"text"},{"text":"/slide[N]/shape[K]","type":"text","marks":[{"type":"code_inline"}]},{"text":". Keep a shape-index comment at the top of the build script.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-2 🚨","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ghost accumulation — ","type":"text","marks":[{"type":"strong"}]},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" introduced on slide 3 stays visible on slides 4, 5, 6 unless EXPLICITLY ghosted every page.","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"final-check","type":"text","marks":[{"type":"code_inline"}]},{"text":" helper detects this and rejects if ghost count > 50.","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"MANDATORY per-slide rule:","type":"text","marks":[{"type":"strong"}]},{"text":" After you add new content to a slide, immediately set ALL active ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" from previous slides to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":" (or explicitly position them visible if they belong in the current context). Example: ","type":"text"},{"text":"officecli set /slide[4]/shape[@name=!!actor-ring] --prop x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". Run after EVERY slide addition, not just at the end. See §Ghost Discipline & Actor Lifecycle below.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-3","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Section-transition boundary — on the first slide of a new topic section, previous-section ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" shapes visibly linger. No command errors; only visual clutter.","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"On every section-start slide, explicitly ghost ALL ","type":"text"},{"text":"!!actor-*","type":"text","marks":[{"type":"code_inline"}]},{"text":" from the previous section to ","type":"text"},{"text":"x=36cm","type":"text","marks":[{"type":"code_inline"}]},{"text":". Scene shapes (","type":"text"},{"text":"!!scene-*","type":"text","marks":[{"type":"code_inline"}]},{"text":") stay.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-4","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"officecli help pptx slide","type":"text","marks":[{"type":"code_inline"}]},{"text":" lists ","type":"text"},{"text":"transition=","type":"text","marks":[{"type":"code_inline"}]},{"text":" but NO sub-props for duration / delay / easing of the transition itself. Agents sometimes invent ","type":"text"},{"text":"morph.duration=","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"transition.delay=","type":"text","marks":[{"type":"code_inline"}]},{"text":" — they are rejected as UNSUPPORTED.","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Accept defaults (morph ~1s, linear ease). For custom speed, use ","type":"text"},{"text":"raw-set","type":"text","marks":[{"type":"code_inline"}]},{"text":" to add the ","type":"text"},{"text":"spd","type":"text","marks":[{"type":"code_inline"}]},{"text":" attribute on ","type":"text"},{"text":"\u003cp:transition>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — see M-4 example block below. Help does not list sub-props; ","type":"text"},{"text":"raw-set","type":"text","marks":[{"type":"code_inline"}]},{"text":" is the only path.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-5","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"[RENDERER-BUG]","type":"text","marks":[{"type":"code_inline"}]},{"text":" LibreOffice / Google Slides web viewer render morph slides as plain fade (no interpolation).","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Test in PowerPoint 365 / Keynote / WPS. Not a skill defect — do not chase.","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"M-6","type":"text","marks":[{"type":"strong"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"\u003ca:br/>","type":"text","marks":[{"type":"code_inline"}]},{"text":" written inside ","type":"text"},{"text":"--prop text='line1\u003ca:br/>line2'","type":"text","marks":[{"type":"code_inline"}]},{"text":" is stored as the literal 7-character string, NOT interpreted as a line break. Audience sees ","type":"text"},{"text":"line1\u003ca:br/>line2","type":"text","marks":[{"type":"code_inline"}]},{"text":" rendered verbatim.","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"For multi-line bullets / captions, add one paragraph per line: ","type":"text"},{"text":"officecli add \"/slide[N]/shape[@id=K]\" --type paragraph --prop text='line1'","type":"text","marks":[{"type":"code_inline"}]},{"text":" then repeat with ","type":"text"},{"text":"text='line2'","type":"text","marks":[{"type":"code_inline"}]},{"text":". See pptx v2 §Shell escape for the real-newline workflow.","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"M-4 example — slow down all morph transitions","type":"text","marks":[{"type":"strong"}]},{"text":" (","type":"text"},{"text":"raw-set","type":"text","marks":[{"type":"code_inline"}]},{"text":" requires a ","type":"text"},{"text":"\u003cpart>","type":"text","marks":[{"type":"code_inline"}]},{"text":" positional arg; ","type":"text"},{"text":"//p:transition","type":"text","marks":[{"type":"code_inline"}]},{"text":" matches both ","type":"text"},{"text":"mc:Choice","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"mc:Fallback","type":"text","marks":[{"type":"code_inline"}]},{"text":" on a morph slide, yielding ","type":"text"},{"text":"2 element(s) affected","type":"text","marks":[{"type":"code_inline"}]},{"text":"):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Per-slide: add spd=\"slow\" to every transition element on slide N (2 XML hits per morph slide)\nfor N in 2 3 4; do\n officecli raw-set \"$FILE\" \"/slide[$N]\" --xpath \"//p:transition\" --action setattr --xml 'spd=slow'\ndone\nofficecli validate \"$FILE\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Readback: ","type":"text"},{"text":"officecli query \"$FILE\" slide --json | jq '.data.results[].format | select(.transition==\"morph\") | .transitionSpeed'","type":"text","marks":[{"type":"code_inline"}]},{"text":" prints ","type":"text"},{"text":"\"slow\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" for each affected slide.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Outputs & delivery","type":"text"}]},{"type":"paragraph","content":[{"text":"Every morph deck ships with three artifacts, each as a standalone file:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\u003ctopic>.pptx","type":"text","marks":[{"type":"code_inline"}]},{"text":" — the deck, closed + ","type":"text"},{"text":"officecli validate","type":"text","marks":[{"type":"code_inline"}]},{"text":" clean (Delivery Gate 1 OK).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"build.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"build.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" — the re-runnable script (bash for shell-native builds; Python for multi-slide arcs using ","type":"text"},{"text":"morph-helpers.py","type":"text","marks":[{"type":"code_inline"}]},{"text":"). Must recreate the deck from a fresh ","type":"text"},{"text":"officecli create","type":"text","marks":[{"type":"code_inline"}]},{"text":" call.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"brief.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — ","type":"text"},{"text":"standalone file, NOT embedded in anything else.","type":"text","marks":[{"type":"strong"}]},{"text":" Contains:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Section 1: topic / audience / purpose / narrative / style direction (1 named style from ","type":"text"},{"text":"reference/styles/INDEX.md","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Section 2: slide-by-slide outline (page type + one-sentence argument per slide)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Section 3: §Morph Pair Planning table (Pair / Slide A / Slide B / Actors / Ghosts) — the design record the reviewer needs to audit choreography","type":"text"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"Pre-deliver reminder to the user (verbatim-safe wording):","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"The deck is ready with morph transitions. Open it in PowerPoint 365 / Keynote / WPS to see the motion — LibreOffice and web viewers render static.\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"\"While the build script is running, the ","type":"text"},{"text":".pptx","type":"text","marks":[{"type":"code_inline"}]},{"text":" may be rewritten several times. If you want to preview progress, use ","type":"text"},{"text":"officecli watch \"$FILE\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" and open the live preview in AionUi — do NOT click 'Open with system app' during the build, or you'll hit a file lock.\"","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Adjustments after creation","type":"text"}]},{"type":"paragraph","content":[{"text":"Standard adjustments table → see pptx v2 §Common Pitfalls / ","type":"text"},{"text":"swap","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"move","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"remove","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"set","type":"text","marks":[{"type":"code_inline"}]},{"text":". Morph caveat: ","type":"text"},{"text":"after any ","type":"text","marks":[{"type":"strong"}]},{"text":"swap","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" or ","type":"text","marks":[{"type":"strong"}]},{"text":"move","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" that reorders morph-paired slides, re-verify the adjacency of shared ","type":"text","marks":[{"type":"strong"}]},{"text":"!!","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" names.","type":"text","marks":[{"type":"strong"}]},{"text":" Run Gate 5b-morph-3 query above on the affected pairs — if the swap broke a pair, either rename shapes or re-choreograph the transition.","type":"text"}]},{"type":"paragraph","content":[{"text":"Final sanity check before delivery.","type":"text","marks":[{"type":"strong"}]},{"text":" Run the full Delivery Gate (1 through 5b-morph-1..4), open the ","type":"text"},{"text":".pptx","type":"text","marks":[{"type":"code_inline"}]},{"text":" in PowerPoint 365 / Keynote / WPS, watch one full slide-to-slide morph to confirm motion is visible. If any Gate prints REJECT, fix and re-run — never deliver with a known-open gate.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"References","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reference/decision-rules.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Pyramid Principle, SCQA, page-type menu, ","type":"text"},{"text":"brief.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" schema. Read during §Morph Pair Planning to decide narrative arc before writing commands.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reference/pptx-design.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — residual design notes (Scene Actors mechanics, page-type table, choreography patterns). Canvas / fonts / colors live in pptx v2 — this file covers only the morph-unique material.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reference/morph-helpers.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Cross-platform (Mac / Windows / Linux) Python helpers for clone + ghost + verify + final-check. Import as a library or call via CLI args. Preferred for 5+ slide arcs.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reference/morph-helpers.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Bash equivalent. Pick one per project; do not mix.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reference/styles/INDEX.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — 52-style visual library, grouped by palette (dark / light / warm / vivid / bw / mixed) and mood. Lookup workflow in §Style library lookup workflow above.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"skills/officecli-pptx/SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" — base pptx v2 rules (visual floor, grid, canonical palettes, chart-choice, connector canon, Delivery Gate 1–5a, Known Issues C-P-1..7, Shell escape 3-layer).","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"morph-ppt","author":"@skillopedia","source":{"stars":5532,"repo_name":"officecli","origin_url":"https://github.com/iofficeai/officecli/blob/HEAD/skills/morph-ppt/SKILL.md","repo_owner":"iofficeai","body_sha256":"7f0a57f388925e7397030ae52c50c06c03ab92f49e4330781b55c896b570fcaf","cluster_key":"95b1c847b7b47d9722cf8009aac578801989c5dbbcbb72c84dd6f46b527afe39","clean_bundle":{"format":"clean-skill-bundle-v1","source":"iofficeai/officecli/skills/morph-ppt/SKILL.md","attachments":[{"id":"3562e8dd-2476-5140-9776-03f92bf66371","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3562e8dd-2476-5140-9776-03f92bf66371/attachment.md","path":"reference/decision-rules.md","size":6141,"sha256":"e1ab8c7b2071cb1947913e0dfef36ce7e4e7cec6ff8beb92a4775c5435adc96a","contentType":"text/markdown; charset=utf-8"},{"id":"6b639acc-7f6d-54d7-84c8-560c9aae2dbb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6b639acc-7f6d-54d7-84c8-560c9aae2dbb/attachment.py","path":"reference/morph-helpers.py","size":16483,"sha256":"1e856d00e2d1b207336c83710a9f6d0f9a10650c6c3f4e2c01a3443e03f3833b","contentType":"text/x-python; charset=utf-8"},{"id":"0acc432a-74e3-515a-9237-aeda339537a6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0acc432a-74e3-515a-9237-aeda339537a6/attachment.sh","path":"reference/morph-helpers.sh","size":12780,"sha256":"10cc7f0dd0a2a24e361c7d497839c79d7710128d3e2746e8f66c6ef6903034bd","contentType":"application/x-sh; charset=utf-8"},{"id":"4d5f00e1-9cc4-5974-8a99-6c7f7693bee2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4d5f00e1-9cc4-5974-8a99-6c7f7693bee2/attachment.md","path":"reference/pptx-design.md","size":13935,"sha256":"40a86833c2da317c9507051e7412b27ffa9ea02e7177ae67e20709cc9a2d394b","contentType":"text/markdown; charset=utf-8"},{"id":"a94484f3-c1c4-5fd9-ab36-c5dd6cde01e5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a94484f3-c1c4-5fd9-ab36-c5dd6cde01e5/attachment.md","path":"reference/styles/INDEX.md","size":17649,"sha256":"4a8ffdc368c69b02b768d362d1b267deb63c44ffe4c99a042151298895ecbdb4","contentType":"text/markdown; charset=utf-8"},{"id":"b5a9e128-cd2f-5a01-a255-557c80e0e05f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b5a9e128-cd2f-5a01-a255-557c80e0e05f/attachment.sh","path":"reference/styles/bw--brutalist-raw/build.sh","size":12549,"sha256":"225d02207b63b39b398b7d6c1d738713924465f989b1dd8a8b6b97ce2b0dcfd1","contentType":"application/x-sh; charset=utf-8"},{"id":"58658ed2-39d4-576f-9213-2204d7520d54","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/58658ed2-39d4-576f-9213-2204d7520d54/attachment.pptx","path":"reference/styles/bw--brutalist-raw/bw__brutalist_raw.pptx","size":13521,"sha256":"70da31714e4e7a1077385947f21375c2f95a0e9beb649527996a61b1f1a2e25e","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"db666613-a566-5db7-ba3a-a37d26982e41","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/db666613-a566-5db7-ba3a-a37d26982e41/attachment.md","path":"reference/styles/bw--brutalist-raw/style.md","size":2145,"sha256":"f7069ea3a417b124bc4a6d1087827a39fdbd8e2bba4fb1deabb834f3976ad26d","contentType":"text/markdown; charset=utf-8"},{"id":"65a80c26-e1c9-5828-8676-e813757af69a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/65a80c26-e1c9-5828-8676-e813757af69a/attachment.sh","path":"reference/styles/bw--mono-line/build.sh","size":14863,"sha256":"2340e221536365f08a788ac14486492a5cf220410325677642a6f878c87f380e","contentType":"application/x-sh; charset=utf-8"},{"id":"b021274d-6ab7-5efb-ba7e-cf922bb0d3c8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b021274d-6ab7-5efb-ba7e-cf922bb0d3c8/attachment.pptx","path":"reference/styles/bw--mono-line/bw__mono_line.pptx","size":15074,"sha256":"c3462a33f4d84dad7ccdcc5f25dcb6a1df871b7bc3f5da6d7d631ecb5707e883","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"3036de1d-c999-5636-8897-88b5c9a7c3e9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3036de1d-c999-5636-8897-88b5c9a7c3e9/attachment.md","path":"reference/styles/bw--mono-line/style.md","size":4011,"sha256":"94136290396cb32ac204105f5db03180a8de79e171a91869eb8d2f386b103757","contentType":"text/markdown; charset=utf-8"},{"id":"4de2e403-19d6-5648-84b5-65b692f2f58f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4de2e403-19d6-5648-84b5-65b692f2f58f/attachment.sh","path":"reference/styles/bw--swiss-bauhaus/build.sh","size":12651,"sha256":"e90269873c7ea307164b78da52f5cd60eeea07839e943aed222cc88927c76eef","contentType":"application/x-sh; charset=utf-8"},{"id":"d3fc8178-75af-561f-a4f6-ea5de0405c0e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d3fc8178-75af-561f-a4f6-ea5de0405c0e/attachment.pptx","path":"reference/styles/bw--swiss-bauhaus/bw__swiss_bauhaus.pptx","size":13298,"sha256":"f869a8e7af020806278d2d32d603635d87a6b83d3d20ec5509b0e09d45a4e88a","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"14ce2206-5d23-58ce-83f1-4e95094805ef","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/14ce2206-5d23-58ce-83f1-4e95094805ef/attachment.md","path":"reference/styles/bw--swiss-bauhaus/style.md","size":2261,"sha256":"1c57fb2339b2443678dc818dc0030fc67377818a9239fb6a08091627b90ef77e","contentType":"text/markdown; charset=utf-8"},{"id":"c6324732-b1cb-5954-97f3-54c7f492db2a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c6324732-b1cb-5954-97f3-54c7f492db2a/attachment.md","path":"reference/styles/bw--swiss-system/style.md","size":1305,"sha256":"6728ea3d81e32fcbe894f5c73f1f7610c2a8d70e72c0a2566739872825ee9f56","contentType":"text/markdown; charset=utf-8"},{"id":"52c92a41-e493-52e2-90f5-9d51394c4e6d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/52c92a41-e493-52e2-90f5-9d51394c4e6d/attachment.sh","path":"reference/styles/dark--architectural-plan/build.sh","size":25569,"sha256":"5a6e4096536efcb6002f4a52109f8c6b13353f780a358e8c6a4a2a2c030aa1bf","contentType":"application/x-sh; charset=utf-8"},{"id":"8161e8f5-6743-5fde-a1db-17a52d1c3e6b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8161e8f5-6743-5fde-a1db-17a52d1c3e6b/attachment.pptx","path":"reference/styles/dark--architectural-plan/dark__architectural_plan.pptx","size":20683,"sha256":"1a622fa12da7ebedd2c6c6286a93ca90538105cc0068365b5a4104450de3df73","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"409b7f22-27df-52bc-a141-81eda14e542c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/409b7f22-27df-52bc-a141-81eda14e542c/attachment.md","path":"reference/styles/dark--architectural-plan/style.md","size":1792,"sha256":"aefebb22ecae46282874c70571174e2f561eaf181affcec0290605f0dfe3149b","contentType":"text/markdown; charset=utf-8"},{"id":"554af5ed-8f1b-584b-840b-cfceeac1e7a4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/554af5ed-8f1b-584b-840b-cfceeac1e7a4/attachment.md","path":"reference/styles/dark--aurora-softedge/style.md","size":625,"sha256":"9782226aa00f113131dbdf5955ba28fd7fc3c9e4786d40d7ff28c5886b31e1bc","contentType":"text/markdown; charset=utf-8"},{"id":"936d010c-ec08-5772-ba1a-a2060e726025","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/936d010c-ec08-5772-ba1a-a2060e726025/attachment.sh","path":"reference/styles/dark--blueprint-grid/build.sh","size":27378,"sha256":"819061b03d5d8a741e547a1b200645e2e7fa38f7413858f1e6950866ec1286ef","contentType":"application/x-sh; charset=utf-8"},{"id":"fa9ec015-abab-5f8c-a555-91729850d6ce","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fa9ec015-abab-5f8c-a555-91729850d6ce/attachment.pptx","path":"reference/styles/dark--blueprint-grid/dark__blueprint_grid.pptx","size":15603,"sha256":"c3ab428b6776f8b748ab521daf38207c708cbd49cd15126666bc4e1b765b73ca","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"3c1a1e27-864c-567b-8af9-85ee9523b79e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3c1a1e27-864c-567b-8af9-85ee9523b79e/attachment.md","path":"reference/styles/dark--blueprint-grid/style.md","size":1479,"sha256":"f1dac76a6571d3fb436743cf274bedbe6eec75735b9792704d9d5db0ac4be795","contentType":"text/markdown; charset=utf-8"},{"id":"4c2ff87b-ad4c-50b6-8eab-8f5f01f9758b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4c2ff87b-ad4c-50b6-8eab-8f5f01f9758b/attachment.sh","path":"reference/styles/dark--circle-digital/build.sh","size":25005,"sha256":"24db97cd48db8141e80ea00d7c7808d3a151359b6d7d49d4f6aacdc94b1d105f","contentType":"application/x-sh; charset=utf-8"},{"id":"d7fde09c-abf4-5a40-8283-1a15f72967b5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d7fde09c-abf4-5a40-8283-1a15f72967b5/attachment.pptx","path":"reference/styles/dark--circle-digital/dark__circle_digital.pptx","size":18645,"sha256":"c975360a9c93244aada91c32371c633e62ac0297599bdb3b470f94672f28f54a","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"fba44365-a64d-54e8-a858-bc122b3d97ff","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fba44365-a64d-54e8-a858-bc122b3d97ff/attachment.md","path":"reference/styles/dark--circle-digital/style.md","size":1821,"sha256":"87c5c2eff2f6ae9c0f635397c7345b8a2c693e49c1814e1e353bc62167b03457","contentType":"text/markdown; charset=utf-8"},{"id":"f4f3a67b-8995-52e9-9452-e6b924c2f059","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f4f3a67b-8995-52e9-9452-e6b924c2f059/attachment.sh","path":"reference/styles/dark--cosmic-neon/build.sh","size":15206,"sha256":"c36921f529cc629990175c0e26f793b26c85f0809690319025f3238d4e7a7ecd","contentType":"application/x-sh; charset=utf-8"},{"id":"5cd349ca-6c43-507a-8ef5-bd07512f99cd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5cd349ca-6c43-507a-8ef5-bd07512f99cd/attachment.pptx","path":"reference/styles/dark--cosmic-neon/dark__cosmic_neon.pptx","size":20045,"sha256":"591bf765f3de2321c46f76181092a0937feb37bfd081f3db03a07c444a19123c","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"55dcb74c-de9b-52f1-9558-53115b17a916","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/55dcb74c-de9b-52f1-9558-53115b17a916/attachment.md","path":"reference/styles/dark--cosmic-neon/style.md","size":2709,"sha256":"245ea683e6b3dd34b2ef8d463ea9e76effee30d0021adcd19fe22fd60955b4e5","contentType":"text/markdown; charset=utf-8"},{"id":"dda9b126-f8cd-5c3d-a6e2-416a96c0cab9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dda9b126-f8cd-5c3d-a6e2-416a96c0cab9/attachment.sh","path":"reference/styles/dark--cyber-future/build.sh","size":15863,"sha256":"8e12ac2cf74144455faadb19f845b85e1ec263c7dd91c81a02de0cae161df972","contentType":"application/x-sh; charset=utf-8"},{"id":"93ec0b3e-105d-56ef-864c-2c0d839e7f3d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/93ec0b3e-105d-56ef-864c-2c0d839e7f3d/attachment.pptx","path":"reference/styles/dark--cyber-future/dark__cyber_future.pptx","size":19041,"sha256":"6407d4929c67989ddc9a8108f07914f77b4071258d5ea2595b588446cbb6cf9d","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"f0487ed3-98f5-52f2-9144-b77423cffe13","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f0487ed3-98f5-52f2-9144-b77423cffe13/attachment.md","path":"reference/styles/dark--cyber-future/style.md","size":2448,"sha256":"bbd014dcb3fda27de0c1a52d009b1d97303e4abfa68d437525a0a59c6e148708","contentType":"text/markdown; charset=utf-8"},{"id":"015de42b-bf7c-5602-b48f-1d82a59287fa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/015de42b-bf7c-5602-b48f-1d82a59287fa/attachment.sh","path":"reference/styles/dark--diagonal-cut/build.sh","size":19207,"sha256":"ef6f3436ee955c0039e1e923da3996762760cde2a285c3b8765c8d2dd0dc94f7","contentType":"application/x-sh; charset=utf-8"},{"id":"978a63ff-b39e-531d-a863-cfbc1ed9ad18","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/978a63ff-b39e-531d-a863-cfbc1ed9ad18/attachment.pptx","path":"reference/styles/dark--diagonal-cut/dark__diagonal_cut.pptx","size":17367,"sha256":"4dd827c78082f20b413a3cad46ae2390425f851582c9d60ee7a3811001592a21","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"871093c4-5f98-5152-86e4-43a91e972613","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/871093c4-5f98-5152-86e4-43a91e972613/attachment.md","path":"reference/styles/dark--diagonal-cut/style.md","size":4395,"sha256":"e7a05ce8c769094c06ca055e6e4b6197f8edd3dad7c6e411a6dbe07074d0806c","contentType":"text/markdown; charset=utf-8"},{"id":"820fdb06-1c38-50f1-88c0-42b0502aa4f8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/820fdb06-1c38-50f1-88c0-42b0502aa4f8/attachment.sh","path":"reference/styles/dark--editorial-story/build.sh","size":22309,"sha256":"436545698738c5d33af7125f984be64512b3ddede64ec41e81aa65118985f6a4","contentType":"application/x-sh; charset=utf-8"},{"id":"18a406dc-d6ad-50d6-92fe-46d48bf658b5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/18a406dc-d6ad-50d6-92fe-46d48bf658b5/attachment.pptx","path":"reference/styles/dark--editorial-story/dark__editorial_story.pptx","size":24186,"sha256":"9a1aeee393f455d7f2aa57c0b6d4c4dcd787dd993f6b3920ef4dde2c00e56b79","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"5e50f1d5-28a6-5b36-b83f-87e2726fa9e5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5e50f1d5-28a6-5b36-b83f-87e2726fa9e5/attachment.md","path":"reference/styles/dark--editorial-story/style.md","size":2439,"sha256":"dca552c3743553db5631b0db62e0d84e9dd980a38799a1592e53a4518a77e3c1","contentType":"text/markdown; charset=utf-8"},{"id":"721a76fe-57b7-54f7-98ec-bf8e82c90212","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/721a76fe-57b7-54f7-98ec-bf8e82c90212/attachment.sh","path":"reference/styles/dark--investor-pitch/build.sh","size":43207,"sha256":"889b29f32388a19a4255fc72cc69cfcf20d4fc861505786a98feb0a0f8342d15","contentType":"application/x-sh; charset=utf-8"},{"id":"c5f229f0-9ea5-59cd-a4eb-d5c4c007ebfa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c5f229f0-9ea5-59cd-a4eb-d5c4c007ebfa/attachment.md","path":"reference/styles/dark--investor-pitch/style.md","size":2397,"sha256":"da078ccc3949c13a4a3756b462b2a79a36fabc48ceb801b22c1b512e63a3c2b6","contentType":"text/markdown; charset=utf-8"},{"id":"b9afab49-7a77-5b1b-a82e-55fb6f4c68d7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b9afab49-7a77-5b1b-a82e-55fb6f4c68d7/attachment.pptx","path":"reference/styles/dark--investor-pitch/template.pptx","size":22294,"sha256":"8f151ae28bf0d05f48d332d22933900de4a12e8e16b3bbdbbcb6b5fe3c57bf74","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"4a8f11a1-b640-594d-b297-be9cea8cb670","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4a8f11a1-b640-594d-b297-be9cea8cb670/attachment.sh","path":"reference/styles/dark--liquid-flow/build.sh","size":21322,"sha256":"cf1b82a95e747175b3f192029f8f0630dd110c07b13d8e26f23f986f0c162020","contentType":"application/x-sh; charset=utf-8"},{"id":"b8851733-4933-576d-961f-3047e6f3bcc8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b8851733-4933-576d-961f-3047e6f3bcc8/attachment.pptx","path":"reference/styles/dark--liquid-flow/dark__liquid_flow.pptx","size":16096,"sha256":"22d4c69f1ab02c9232eb3fec1d495ca622db96782ca49043c51662939a466de5","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"51fb0d65-4174-569c-9170-3facbf35cd4f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/51fb0d65-4174-569c-9170-3facbf35cd4f/attachment.md","path":"reference/styles/dark--liquid-flow/style.md","size":1842,"sha256":"d15e323d6e699227f0d8eb6e97637ec47d68e7b53af7ed4f6ec45c28c8fdbe9b","contentType":"text/markdown; charset=utf-8"},{"id":"4ed8eb47-1626-5680-8a3c-07637fecc347","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4ed8eb47-1626-5680-8a3c-07637fecc347/attachment.sh","path":"reference/styles/dark--luxury-minimal/build.sh","size":12577,"sha256":"eee117aff4e9d4534dc708e0c727ffc4a7697c096e190141a8c32b4630433849","contentType":"application/x-sh; charset=utf-8"},{"id":"be10988d-e65e-5d02-95be-63c9c6b0e5e9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/be10988d-e65e-5d02-95be-63c9c6b0e5e9/attachment.pptx","path":"reference/styles/dark--luxury-minimal/dark__luxury_minimal.pptx","size":18989,"sha256":"0aeb8d8d3e199310310fb460cb95197732859deb1e86da6e4b15eab393ae8d68","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"ac5250ab-6b1f-55a7-8531-0e9fc43be24e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ac5250ab-6b1f-55a7-8531-0e9fc43be24e/attachment.md","path":"reference/styles/dark--luxury-minimal/style.md","size":2358,"sha256":"c7e615a2b4ed6ba3db4cfef55df14a2ddadba8fabce591c182eb7a9c75b178a8","contentType":"text/markdown; charset=utf-8"},{"id":"d6ddfc38-38d5-5e87-a080-216a74443ae2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d6ddfc38-38d5-5e87-a080-216a74443ae2/attachment.md","path":"reference/styles/dark--midnight-blueprint/style.md","size":2660,"sha256":"463dfaa751cb0dac3eb9130324a457a07fdc23d52927376f42eb525613f7f62d","contentType":"text/markdown; charset=utf-8"},{"id":"640de579-a9c4-5471-82d2-ff63d505c03a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/640de579-a9c4-5471-82d2-ff63d505c03a/attachment.sh","path":"reference/styles/dark--neon-productivity/build.sh","size":33794,"sha256":"64f97bbcc051e0b122c6bf3af2343eaecec7f38e64332916137d72465d081b33","contentType":"application/x-sh; charset=utf-8"},{"id":"ea3a7ce9-5f14-54b5-bcc2-b7e24c3d6535","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ea3a7ce9-5f14-54b5-bcc2-b7e24c3d6535/attachment.pptx","path":"reference/styles/dark--neon-productivity/dark__neon_productivity.pptx","size":36279,"sha256":"0dc867748fc9c41b50ea64dc488b76e224218e0770bcc15ee97f62cf45233f45","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"1c3e54e6-9f02-5048-9c8d-d2a7d5fe8e9d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1c3e54e6-9f02-5048-9c8d-d2a7d5fe8e9d/attachment.md","path":"reference/styles/dark--neon-productivity/style.md","size":2643,"sha256":"6a28d41a766cfbbb0dac503381eda5d3169ac4753d62672e10fadc2008811138","contentType":"text/markdown; charset=utf-8"},{"id":"aa5e6030-a76d-545b-913b-9c262b023fe9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aa5e6030-a76d-545b-913b-9c262b023fe9/attachment.md","path":"reference/styles/dark--obsidian-amber/style.md","size":615,"sha256":"6af06c49237c6be9fd1d82e81e4909eef2e87ea3752ec97351fbcf1e57b80556","contentType":"text/markdown; charset=utf-8"},{"id":"86be9fd6-630b-5430-a9f6-6dd3858dcbad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/86be9fd6-630b-5430-a9f6-6dd3858dcbad/attachment.sh","path":"reference/styles/dark--premium-navy/build.sh","size":14738,"sha256":"e8fd90f8685ef1c0a385d8e09daebf21b9313be3a1a6b1104db914d1e3cd6fac","contentType":"application/x-sh; charset=utf-8"},{"id":"1d54ff7c-fad2-5294-84ed-8d7773745338","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1d54ff7c-fad2-5294-84ed-8d7773745338/attachment.pptx","path":"reference/styles/dark--premium-navy/dark__premium_navy.pptx","size":15088,"sha256":"242add5f5be50bd5ea342c30c4482f0c6c7b675912b1b248901dcf65d8b62d7f","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"02d63a70-311b-5f09-8498-c9f2122d59ed","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/02d63a70-311b-5f09-8498-c9f2122d59ed/attachment.md","path":"reference/styles/dark--premium-navy/style.md","size":4909,"sha256":"636b15e46d5a1039a677ea5079030839b1c448e16e478463d215734a69affd87","contentType":"text/markdown; charset=utf-8"},{"id":"bb828c2f-cc16-5704-8041-5b5ce12761f8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bb828c2f-cc16-5704-8041-5b5ce12761f8/attachment.md","path":"reference/styles/dark--sage-grain/style.md","size":1809,"sha256":"f71d9617ef6b1f1aa1e61e4efabf6f8dd5fb4b8c34134b436a24f62d26e9562f","contentType":"text/markdown; charset=utf-8"},{"id":"b8f40848-8541-52a4-bef6-96d6e6de6ad0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b8f40848-8541-52a4-bef6-96d6e6de6ad0/attachment.sh","path":"reference/styles/dark--space-odyssey/build.sh","size":32203,"sha256":"fe6c67fc7335e465f0d216a199e0f43456e4203d8d93521f0b6014077737e521","contentType":"application/x-sh; charset=utf-8"},{"id":"100dd174-ca3c-5898-86dd-f1cc838e62ee","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/100dd174-ca3c-5898-86dd-f1cc838e62ee/attachment.pptx","path":"reference/styles/dark--space-odyssey/dark__space_odyssey.pptx","size":20246,"sha256":"fa110c5e9e0014a6a21118c398224928db247561f58c1c2aea33f88ed221ea4c","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"d2fe7e52-804b-514d-9f93-9223e3d6740b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d2fe7e52-804b-514d-9f93-9223e3d6740b/attachment.md","path":"reference/styles/dark--space-odyssey/style.md","size":2894,"sha256":"c7809561ffe97391e3b0484405be725b97a4ff6bc4c4d775a718d05376dbb516","contentType":"text/markdown; charset=utf-8"},{"id":"aa6498f4-504c-5435-b9ea-1378d35b540c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aa6498f4-504c-5435-b9ea-1378d35b540c/attachment.sh","path":"reference/styles/dark--spotlight-stage/build.sh","size":16429,"sha256":"2203bb1701fc6790fe6bd2b21d2bd165e1876b85368b0c01a54cd2dfbaefddbc","contentType":"application/x-sh; charset=utf-8"},{"id":"0abe7623-8d72-5a67-b20a-6c4a8b2594f8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0abe7623-8d72-5a67-b20a-6c4a8b2594f8/attachment.pptx","path":"reference/styles/dark--spotlight-stage/dark__spotlight_stage.pptx","size":14256,"sha256":"e984d29369b0e995bf5766961a2ea66344ecc830d5b32e7fc35bc98933b0b8ef","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"b66c7e29-02af-5ee4-8637-6c2d55f51096","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b66c7e29-02af-5ee4-8637-6c2d55f51096/attachment.md","path":"reference/styles/dark--spotlight-stage/style.md","size":1565,"sha256":"9d77013b2510a8a5677e05004072673c791da9e35026033c5a3cef62cad43776","contentType":"text/markdown; charset=utf-8"},{"id":"bfc5a141-2bb8-5e0d-a5e9-c7c2c0bc15d0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bfc5a141-2bb8-5e0d-a5e9-c7c2c0bc15d0/attachment.md","path":"reference/styles/dark--velvet-rose/style.md","size":612,"sha256":"ed17112e29f4091112ec5219116878186b19ffadc600fbbcebdae5391a24315b","contentType":"text/markdown; charset=utf-8"},{"id":"fbc231ab-7b17-5be3-8da1-a7d01c5da799","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fbc231ab-7b17-5be3-8da1-a7d01c5da799/attachment.sh","path":"reference/styles/light--bold-type/build.sh","size":18363,"sha256":"b52a23a2bdd308b06f28773bd1020c31801961136f90ac62d430bb9143c4f852","contentType":"application/x-sh; charset=utf-8"},{"id":"d69f4f2d-62f2-52b0-aafe-4c32c3b8f2b6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d69f4f2d-62f2-52b0-aafe-4c32c3b8f2b6/attachment.pptx","path":"reference/styles/light--bold-type/light__bold_type.pptx","size":13691,"sha256":"e2b4ee154861c548be53e6cf10c369a262af3b5a3927065ee0b941b3795e7154","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"744c12a3-8189-5c08-a3e0-1ff9c9f461a4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/744c12a3-8189-5c08-a3e0-1ff9c9f461a4/attachment.md","path":"reference/styles/light--bold-type/style.md","size":5285,"sha256":"869ea46d3993ad6ee3c019c765fa732eb864907a3fb4587b2dea1c9c32da61a1","contentType":"text/markdown; charset=utf-8"},{"id":"0df14a8c-d6c3-5d00-a441-4b1df0dcec75","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0df14a8c-d6c3-5d00-a441-4b1df0dcec75/attachment.md","path":"reference/styles/light--firmwise-saas/style.md","size":956,"sha256":"db693ab4b3a06cec51be8e072862207c6b16cbe6b8d09175c70c737d32194d35","contentType":"text/markdown; charset=utf-8"},{"id":"bedaaa0f-589d-5d8a-9ad9-46583eaa8e24","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bedaaa0f-589d-5d8a-9ad9-46583eaa8e24/attachment.md","path":"reference/styles/light--fluid-gradient/style.md","size":562,"sha256":"b5ec68f3eb6a8bd9cc2297c7be571db27be75bdfc9e83a1a384661667d5e7a2b","contentType":"text/markdown; charset=utf-8"},{"id":"0c90de93-95ae-56c0-8b19-dbfa15f8c4e3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0c90de93-95ae-56c0-8b19-dbfa15f8c4e3/attachment.md","path":"reference/styles/light--glassmorphism-vc/style.md","size":588,"sha256":"d71c6abdd9ee7a7e6ecf5b68aea7006192ed714243b92cef3c6b9533470cb7b1","contentType":"text/markdown; charset=utf-8"},{"id":"752f640a-dd16-5aa4-8785-8654f8b6ef40","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/752f640a-dd16-5aa4-8785-8654f8b6ef40/attachment.sh","path":"reference/styles/light--isometric-clean/build.sh","size":16477,"sha256":"ef84613d8ab1d1d8a0e302a665c0c51fe8f4437dbe1c6f7fae2c71e0b0dd5f80","contentType":"application/x-sh; charset=utf-8"},{"id":"592879ed-0e33-552e-8ca9-c9f11d28455e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/592879ed-0e33-552e-8ca9-c9f11d28455e/attachment.pptx","path":"reference/styles/light--isometric-clean/light__isometric_clean.pptx","size":14365,"sha256":"cf0a3b3f8d7e443c52af2a2439c691c0a1a42e5600ce26125c4fd3b2ef33e155","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"046cb4d4-bde7-5c47-98ea-eac51488d5d2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/046cb4d4-bde7-5c47-98ea-eac51488d5d2/attachment.md","path":"reference/styles/light--isometric-clean/style.md","size":1538,"sha256":"af0acbb01e98670232f1e6ad278a02c7e0f6da6b747c31dcbaae9afa86619f36","contentType":"text/markdown; charset=utf-8"},{"id":"86076585-e855-5f3d-b826-fd8b83982f95","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/86076585-e855-5f3d-b826-fd8b83982f95/attachment.md","path":"reference/styles/light--minimal-corporate/style.md","size":2734,"sha256":"971fb197af2f5d22d204e85433c994a24250f6e9726d0ecb7ea8e3e6dd73b676","contentType":"text/markdown; charset=utf-8"},{"id":"208c8060-7089-59c9-9977-1e679a310cc3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/208c8060-7089-59c9-9977-1e679a310cc3/attachment.sh","path":"reference/styles/light--minimal-product/build.sh","size":17526,"sha256":"13495e5770ff4520a128f3d163368389b9d152f3799260802cbdb50f2347a24a","contentType":"application/x-sh; charset=utf-8"},{"id":"c5c14b23-b5ee-59dc-857a-612628e94555","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c5c14b23-b5ee-59dc-857a-612628e94555/attachment.pptx","path":"reference/styles/light--minimal-product/light__minimal_product.pptx","size":20566,"sha256":"d83e8d3f875ff1aba8616b57ec41ccc180930c2fe52cc6114eb55fdcfc6c8784","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"727debd3-9afc-52b0-8f8e-f81a40d944c6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/727debd3-9afc-52b0-8f8e-f81a40d944c6/attachment.md","path":"reference/styles/light--minimal-product/style.md","size":2662,"sha256":"3fc6b39fc07066b7a7cc6c9b40ea1d69f8701b4d7c98b85c2c037eb8683d1a78","contentType":"text/markdown; charset=utf-8"},{"id":"11b2d36c-9a5c-51b1-9986-d833c8802937","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/11b2d36c-9a5c-51b1-9986-d833c8802937/attachment.md","path":"reference/styles/light--project-proposal/style.md","size":2837,"sha256":"3a28a34344b5e13cc6e4d563e083d0fc25d8e8375ba7b2c618c3b928670c14f7","contentType":"text/markdown; charset=utf-8"},{"id":"96c12cf7-57b7-5d0a-9303-6375d4788621","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/96c12cf7-57b7-5d0a-9303-6375d4788621/attachment.md","path":"reference/styles/light--spring-launch/style.md","size":2766,"sha256":"e6f3775c0fca4a3704b2718f0bbb8eaa5921bf07d99e8eada611e73bd41a02b9","contentType":"text/markdown; charset=utf-8"},{"id":"c23cf346-da85-56f6-9a91-8cef9a783ad3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c23cf346-da85-56f6-9a91-8cef9a783ad3/attachment.md","path":"reference/styles/light--training-interactive/style.md","size":2627,"sha256":"394e239413648dd733dbe074ab92d5e445a2c55cf893ac7caf378a063f3b1bb1","contentType":"text/markdown; charset=utf-8"},{"id":"8dfc94be-63f3-5dfe-b6db-7a6013cfd84e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8dfc94be-63f3-5dfe-b6db-7a6013cfd84e/attachment.sh","path":"reference/styles/light--watercolor-wash/build.sh","size":19538,"sha256":"1c3eba0e9e78ec8c8e1649c489d1e20bdf0cffb50104f948eae2862c2c85ac07","contentType":"application/x-sh; charset=utf-8"},{"id":"2e9a63b8-1638-5ff6-9a1a-6e360effb78b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2e9a63b8-1638-5ff6-9a1a-6e360effb78b/attachment.pptx","path":"reference/styles/light--watercolor-wash/light__watercolor_wash.pptx","size":18160,"sha256":"abd77433a8b2f84b0fbd082f172ae27d8b42031f4a99876d048c2256d4e48c3a","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"6de8d545-9930-5ddc-b914-7aae32864969","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6de8d545-9930-5ddc-b914-7aae32864969/attachment.md","path":"reference/styles/light--watercolor-wash/style.md","size":1513,"sha256":"cf66e692aa9a5b2b50b612729b89a415591bfbae1b3e21614a3bc3a1fb7b7efe","contentType":"text/markdown; charset=utf-8"},{"id":"3e28b50f-3fdb-52a5-800f-9ef7801c5c86","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3e28b50f-3fdb-52a5-800f-9ef7801c5c86/attachment.md","path":"reference/styles/mixed--bauhaus-blocks/style.md","size":5279,"sha256":"b345e65fdacea7201946b4a5a09b988fb7f059654d6add0973728978eb5b2477","contentType":"text/markdown; charset=utf-8"},{"id":"7bde1fc4-f349-5a6a-8b17-6e97e23cc89b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7bde1fc4-f349-5a6a-8b17-6e97e23cc89b/attachment.md","path":"reference/styles/mixed--chromatic-aberration/style.md","size":5125,"sha256":"206c15cb69eb85eabcba1d2a5f4086fc737487e00a6df2835647ffe80ac69bb1","contentType":"text/markdown; charset=utf-8"},{"id":"851f74d1-33eb-5b65-9dfd-9392f2bb7ae9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/851f74d1-33eb-5b65-9dfd-9392f2bb7ae9/attachment.sh","path":"reference/styles/mixed--duotone-split/build.sh","size":14598,"sha256":"2d7f18798569ebb7354f5b401521bb22049063e17d56be1625621a3fa1a64ccf","contentType":"application/x-sh; charset=utf-8"},{"id":"43d47d6c-7261-5c99-980a-2c39bebde7b8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/43d47d6c-7261-5c99-980a-2c39bebde7b8/attachment.pptx","path":"reference/styles/mixed--duotone-split/mixed__duotone_split.pptx","size":14373,"sha256":"000b862efb366de1ad77a83a6fc17b9f212217989e70ee0f2d4929fbccdd88ff","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"9b325e0d-f3b7-5853-8c30-607f3144b85c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9b325e0d-f3b7-5853-8c30-607f3144b85c/attachment.md","path":"reference/styles/mixed--duotone-split/style.md","size":3825,"sha256":"e3e0f07ff32c27962de6b4c538928e65a4842903389df2528457e15bf3f29c58","contentType":"text/markdown; charset=utf-8"},{"id":"f8474b92-0622-5cbb-8548-826b72dfb3fb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f8474b92-0622-5cbb-8548-826b72dfb3fb/attachment.md","path":"reference/styles/mixed--spectral-grid/style.md","size":589,"sha256":"559e997e642ce8910964b1c21af5524f1428d905ab8a2d460dc9b114af8d6a36","contentType":"text/markdown; charset=utf-8"},{"id":"d6816a0b-63dc-5203-86ab-8fd2052d1200","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d6816a0b-63dc-5203-86ab-8fd2052d1200/attachment.md","path":"reference/styles/vivid--bauhaus-electric/style.md","size":570,"sha256":"9e7e3a9721732fe20b32697bf7d408f157ef28195fdb7c27ddb44369036938e1","contentType":"text/markdown; charset=utf-8"},{"id":"83c4d638-ace0-5ffc-9b2f-466a65f4057c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/83c4d638-ace0-5ffc-9b2f-466a65f4057c/attachment.sh","path":"reference/styles/vivid--candy-stripe/build.sh","size":15573,"sha256":"72b28f52c12450d1d02eaf4a00b5f0765ca9f2eff383008565d8485888a8773f","contentType":"application/x-sh; charset=utf-8"},{"id":"a883864b-e091-57e5-b2c9-0bf991ff88bd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a883864b-e091-57e5-b2c9-0bf991ff88bd/attachment.md","path":"reference/styles/vivid--candy-stripe/style.md","size":3910,"sha256":"7ab21bbc486d9ae28a3439e965f39b853a8179100a45263ac830640b37b11dd3","contentType":"text/markdown; charset=utf-8"},{"id":"6bec7afd-2f10-50a2-9208-cf7786c0ac45","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6bec7afd-2f10-50a2-9208-cf7786c0ac45/attachment.pptx","path":"reference/styles/vivid--candy-stripe/vivid__candy_stripe.pptx","size":13486,"sha256":"8f693160846994eab82b356367ba1d793f1e90e5c2e099202db9bd26e828f2cd","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"8290859a-3802-52d8-82ea-6fe57b6a67b4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8290859a-3802-52d8-82ea-6fe57b6a67b4/attachment.md","path":"reference/styles/vivid--energy-neon/style.md","size":2779,"sha256":"318370c3995e8c33b5d583202d1bd8653e4f4809a61fcb0020f375250debb49d","contentType":"text/markdown; charset=utf-8"},{"id":"49fefc9a-4ab3-5e97-91c2-b9de7d2d9c11","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/49fefc9a-4ab3-5e97-91c2-b9de7d2d9c11/attachment.md","path":"reference/styles/vivid--pink-editorial/style.md","size":4159,"sha256":"a99231ad8f057543735b7988319439023e45213073085cf8f9d9fde235a3984f","contentType":"text/markdown; charset=utf-8"},{"id":"72d2680c-178d-52f7-80cb-923050e1a418","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/72d2680c-178d-52f7-80cb-923050e1a418/attachment.sh","path":"reference/styles/vivid--playful-marketing/build.sh","size":35671,"sha256":"07386d5c1cef2ec0cce73f511ae6ff6890bec7d6860dcf70a176df5f69718e37","contentType":"application/x-sh; charset=utf-8"},{"id":"16c9f3a6-348b-5c2f-9c8c-575435ea73cc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/16c9f3a6-348b-5c2f-9c8c-575435ea73cc/attachment.md","path":"reference/styles/vivid--playful-marketing/style.md","size":2627,"sha256":"d092e2b080c97cb6bd3ca2d24ba9937839fa8234946144c08d07d15be3b3ce57","contentType":"text/markdown; charset=utf-8"},{"id":"849f2c6d-b0a8-5cb0-87d5-e9e4619203e5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/849f2c6d-b0a8-5cb0-87d5-e9e4619203e5/attachment.pptx","path":"reference/styles/vivid--playful-marketing/vivid__playful_marketing.pptx","size":14263,"sha256":"2aa48a5c15d8328f2a1f38d7e39db4e5a50d97ecca522f4d88625b34c8d19f15","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"7bb9ffd4-2b94-5771-8712-bbd0bc93bced","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7bb9ffd4-2b94-5771-8712-bbd0bc93bced/attachment.md","path":"reference/styles/warm--bloom-academy/style.md","size":691,"sha256":"ed4fa635b432bf0940db6bf3a9afdc30fb4d7b5b31394d17726088ac732915c1","contentType":"text/markdown; charset=utf-8"},{"id":"f5c54773-6696-5a72-90b7-1feaae91a73e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f5c54773-6696-5a72-90b7-1feaae91a73e/attachment.sh","path":"reference/styles/warm--brand-refresh/build.sh","size":14858,"sha256":"6dd691f38f5b6cf96c27575f5e620fa78b09e3022bfa7c8ddd9624d708e92cce","contentType":"application/x-sh; charset=utf-8"},{"id":"9ce268f5-6271-5923-b738-cf019b47c60c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9ce268f5-6271-5923-b738-cf019b47c60c/attachment.md","path":"reference/styles/warm--brand-refresh/style.md","size":2047,"sha256":"e36ef9d7282b83802595fec67d16e835751ffcedec780459af3bea0b4d2dc251","contentType":"text/markdown; charset=utf-8"},{"id":"b59a6419-0778-5693-b73b-b366d0de449a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b59a6419-0778-5693-b73b-b366d0de449a/attachment.pptx","path":"reference/styles/warm--brand-refresh/warm__brand_refresh.pptx","size":13928,"sha256":"93096fcf784d4d777c3f353cac8e68f4f0a70513763b04770d29fed3b43054b4","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"cd842cd4-d15e-52f8-9e12-8a38239713bb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cd842cd4-d15e-52f8-9e12-8a38239713bb/attachment.md","path":"reference/styles/warm--coral-culture/style.md","size":609,"sha256":"10a796d5ddae795827888934e2fa03c25ec4021177ac399e740d6399a8b532c6","contentType":"text/markdown; charset=utf-8"},{"id":"3233946c-e7e5-57c1-80c2-9841e3f3c2da","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3233946c-e7e5-57c1-80c2-9841e3f3c2da/attachment.sh","path":"reference/styles/warm--earth-organic/build.sh","size":19000,"sha256":"ff6b673ef6dbba3d232da9c7cd08276f7a8aacf502eaf9a2caec2155b4758b28","contentType":"application/x-sh; charset=utf-8"},{"id":"cb93fdb6-f310-5593-945b-6887ad910cc2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cb93fdb6-f310-5593-945b-6887ad910cc2/attachment.md","path":"reference/styles/warm--earth-organic/style.md","size":5255,"sha256":"2adba1875c38b0eb260c9aec4c4f0f23c8de876bc93f651c2833beaa78ee3163","contentType":"text/markdown; charset=utf-8"},{"id":"d7c48464-1b48-5c63-84c4-789fed0013f3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d7c48464-1b48-5c63-84c4-789fed0013f3/attachment.pptx","path":"reference/styles/warm--earth-organic/warm__earth_organic.pptx","size":17558,"sha256":"046575db5e3d4ac4029da595dcc0bdb631082174dcb06b3d0387aeae34e51c64","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"ec0041e4-157b-5df9-8814-e87b332d5c73","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ec0041e4-157b-5df9-8814-e87b332d5c73/attachment.md","path":"reference/styles/warm--monument-editorial/style.md","size":643,"sha256":"5bf6e018f9464e7d41cd2fc39b5ef86517d3c32ec93fe664ec6ec6ae0e640f18","contentType":"text/markdown; charset=utf-8"},{"id":"4be687e4-cd5f-520e-b6cb-84612296be73","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4be687e4-cd5f-520e-b6cb-84612296be73/attachment.pptx","path":"reference/styles/warm--playful-organic/Cat-Secret-Life.pptx","size":21566,"sha256":"3cdbb2979afda97e0e82131b81d84a7c002ed6eda156c89a62e9b81e6c0af7db","contentType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{"id":"af43e567-43ff-5acb-a9c3-4d8bc1ea09a1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/af43e567-43ff-5acb-a9c3-4d8bc1ea09a1/attachment.sh","path":"reference/styles/warm--playful-organic/build.sh","size":15915,"sha256":"c3335b8275e9c8f5a6a5f2358487ed1c968c663834f59e85e9c2e623d9bbd24f","contentType":"application/x-sh; charset=utf-8"},{"id":"6329155d-2fc9-5028-8705-164f09741c06","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6329155d-2fc9-5028-8705-164f09741c06/attachment.md","path":"reference/styles/warm--playful-organic/style.md","size":2631,"sha256":"5fa311bfe1c28dbb33b5bd61676b31d7768bf972edc8e23afe5872e72fc5b136","contentType":"text/markdown; charset=utf-8"},{"id":"78c44867-b140-591b-8d46-10b4825cd994","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/78c44867-b140-591b-8d46-10b4825cd994/attachment.md","path":"reference/styles/warm--sunset-mosaic/style.md","size":648,"sha256":"3a4db863f356b4d8174f52b0f646c35f0fe441f0d16342948b6a699fd4666227","contentType":"text/markdown; charset=utf-8"},{"id":"5545e47c-c350-5b34-9661-4f4884033f88","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5545e47c-c350-5b34-9661-4f4884033f88/attachment.md","path":"reference/styles/warm--vital-bloom/style.md","size":571,"sha256":"8b928419cb4b76b72eee0db9868da79fcc06a062a9cd0929f14bf9900a167f7b","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"5417df9bd00b2ca2c091c5d2f23006b18eb7df3bbb81468943d970370cb42069","attachment_count":110,"text_attachments":83,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":27,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/morph-ppt/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"web-development","category_label":"Web"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"web-development","import_tag":"clean-skills-v1","description":"Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style continuous motion, shapes that grow / move / rotate as the slide advances. Trigger on: 'morph', 'morph transition', 'smooth transition', 'continuous animation across slides', 'Keynote-style transition', 'animated slide sequence', 'shape continuity across slides'. Output is a single .pptx. This skill is a scene layer on top of officecli-pptx — inherits every pptx v2 rule (visual floor, grid, palettes, connector canon, Delivery Gate 1–5a). DO NOT invoke for a generic deck, pitch deck, or board review without cross-slide motion — route those to officecli-pptx base or officecli-pitch-deck."}},"renderedAt":1782979631297}

OfficeCLI Morph-PPT Skill This skill is a scene layer on top of . Every pptx hard rule — visual delivery floor (title ≥ 36pt / body ≥ 18pt / title ≥ 2× body), 12-column grid on 33.87×19.05cm, canonical palettes, chart-choice decision table, connector canon, shell escape, resident + batch, Delivery Gate 1–5a — is inherited, not re-taught. This file adds only what Morph needs on top: cross-slide shape-name binding, Scene Actors vs content prefixing, ghost discipline, CLI quirks, 52-style visual library lookup, and a morph-specific fresh-eyes Gate 5b extension. When the pptx base rules cover it,…