@taloswork/ose-shared 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/skills/document/SKILL.md +32 -17
- package/skills/document/art-directions/base.css +23 -0
- package/skills/document/art-directions/cinematic-depth.css +6 -0
- package/skills/document/art-directions/collage-paper.css +8 -0
- package/skills/document/art-directions/editorial-cut.css +8 -0
- package/skills/document/art-directions/geometric-pop.css +9 -0
- package/skills/document/art-directions/gradient-mesh.css +6 -0
- package/skills/document/art-directions/illustrated-doodle.css +8 -0
- package/skills/document/art-directions/luxury-ornament.css +6 -0
- package/skills/document/art-directions/maximalist-blocks.css +9 -0
- package/skills/document/art-directions/technical-grid.css +6 -0
- package/skills/document/assets/fonts/fonts.json +2 -2
- package/skills/document/bin/deck-build.cjs +266 -10
- package/skills/document/bin/doc-convert.cjs +66 -28
- package/skills/document/bin/doc-gen.cjs +6 -4
- package/skills/document/bin/html2pptx.cjs +243 -22
- package/skills/document/catalog.json +11 -0
- package/skills/document/components/base.css +45 -0
- package/skills/document/components/profiles/clean.css +2 -0
- package/skills/document/components/profiles/editorial.css +3 -0
- package/skills/document/components/profiles/glass.css +2 -0
- package/skills/document/components/profiles/luxury.css +3 -0
- package/skills/document/components/profiles/organic.css +2 -0
- package/skills/document/components/profiles/poster.css +3 -0
- package/skills/document/content-pipeline.md +55 -48
- package/skills/document/deck-design.md +24 -15
- package/skills/document/layouts/README.md +33 -12
- package/skills/document/layouts/business-model.tpl +6 -0
- package/skills/document/layouts/customer-proof.tpl +6 -0
- package/skills/document/layouts/funding-ask.tpl +5 -0
- package/skills/document/layouts/market-rings.tpl +5 -0
- package/skills/document/layouts/pitch-problem.tpl +6 -0
- package/skills/document/layouts/pitch-solution.tpl +5 -0
- package/skills/document/layouts/pricing-tiers.tpl +5 -0
- package/skills/document/layouts/product-device.tpl +6 -0
- package/skills/document/layouts/profiles.json +24 -0
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/layouts/team-founders.tpl +5 -0
- package/skills/document/layouts/traction-milestones.tpl +6 -0
- package/skills/document/media-styles/cinematic.css +2 -0
- package/skills/document/media-styles/clean-product.css +2 -0
- package/skills/document/media-styles/cutout-collage.css +3 -0
- package/skills/document/media-styles/device-stage.css +3 -0
- package/skills/document/media-styles/editorial-photo.css +3 -0
- package/skills/document/media-styles/illustrated.css +2 -0
- package/skills/document/media-styles/spatial-3d.css +3 -0
- package/skills/document/motion/mckinsey-photo.json +22 -0
- package/skills/document/motion/prismatic-3d.json +31 -0
- package/skills/document/packs/README.md +7 -3
- package/skills/document/packs/mckinsey-photo/backdrop.html +6 -0
- package/skills/document/packs/mckinsey-photo/layouts/cover-image.tpl +5 -0
- package/skills/document/packs/mckinsey-photo/layouts/cover.tpl +5 -0
- package/skills/document/packs/mckinsey-photo/layouts/image-left.tpl +5 -0
- package/skills/document/packs/mckinsey-photo/layouts/numbered-brief.tpl +5 -0
- package/skills/document/packs/mckinsey-photo/pack.css +27 -0
- package/skills/document/packs/prismatic-3d/backdrop.html +4 -0
- package/skills/document/packs/prismatic-3d/layouts/big-stat.tpl +6 -0
- package/skills/document/packs/prismatic-3d/layouts/cover.tpl +9 -0
- package/skills/document/packs/prismatic-3d/layouts/section-image.tpl +6 -0
- package/skills/document/packs/prismatic-3d/pack.css +28 -0
- package/skills/document/recipes/agency-pitch.json +13 -0
- package/skills/document/recipes/product-launch.json +13 -0
- package/skills/document/recipes/startup-fundraising.json +19 -0
- package/skills/document/styles/README.md +13 -6
- package/skills/document/styles/_contract-defaults.css +1 -1
- package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
- package/skills/document/styles/_samples/_groups/creative.webp +0 -0
- package/skills/document/styles/_samples/_groups/editorial.webp +0 -0
- package/skills/document/styles/_samples/_groups/minimal.webp +0 -0
- package/skills/document/styles/_samples/_groups/natural.webp +0 -0
- package/skills/document/styles/_samples/_groups/tech-future.webp +0 -0
- package/skills/document/styles/_samples/bistro-warm.webp +0 -0
- package/skills/document/styles/_samples/board-brief.webp +0 -0
- package/skills/document/styles/_samples/bold-clash.webp +0 -0
- package/skills/document/styles/_samples/campus-teal.webp +0 -0
- package/skills/document/styles/_samples/clinic-care.webp +0 -0
- package/skills/document/styles/_samples/dark-glass.webp +0 -0
- package/skills/document/styles/_samples/gov-brief.webp +0 -0
- package/skills/document/styles/_samples/grid-tech.webp +0 -0
- package/skills/document/styles/_samples/legal-slate.webp +0 -0
- package/skills/document/styles/_samples/mckinsey-photo.webp +0 -0
- package/skills/document/styles/_samples/memphis.webp +0 -0
- package/skills/document/styles/_samples/neon-cyber.webp +0 -0
- package/skills/document/styles/_samples/organic-earth.webp +0 -0
- package/skills/document/styles/_samples/pastel-saas.webp +0 -0
- package/skills/document/styles/_samples/portfolio-noir.webp +0 -0
- package/skills/document/styles/_samples/press-room.webp +0 -0
- package/skills/document/styles/_samples/prismatic-3d.webp +0 -0
- package/skills/document/styles/_samples/retro-press.webp +0 -0
- package/skills/document/styles/_samples/sport-arena.webp +0 -0
- package/skills/document/styles/_samples/wedding-blush.webp +0 -0
- package/skills/document/styles/dark-glass/backdrop.html +7 -3
- package/skills/document/styles/dark-glass/skin.css +1 -0
- package/skills/document/styles/portfolio-noir/skin.css +3 -0
- package/skills/document/theme-system.json +68 -0
- package/skills/document/theme-system.md +101 -0
- package/skills/{image-compose → image-layout}/SKILL.md +17 -2
- package/skills/{image-compose → image-layout}/bin/html2img.cjs +2 -2
- /package/skills/{image-compose → image-layout}/LICENSE.txt +0 -0
|
@@ -14,8 +14,10 @@ a blank slide** — authoring every slide from zero is the #1 "AI-generated" tel
|
|
|
14
14
|
|
|
15
15
|
## Execution discipline (whole pipeline)
|
|
16
16
|
|
|
17
|
-
1. **Sequential**: phases run in order
|
|
18
|
-
`slide-outline.md`
|
|
17
|
+
1. **Sequential**: phases run in order. `deck-brief.md` is a persisted echo of
|
|
18
|
+
already-confirmed inputs, not another approval round. `slide-outline.md` is the
|
|
19
|
+
single substantive approval gate before authoring. Only pause on the brief when
|
|
20
|
+
it introduces a material assumption the user has not already approved.
|
|
19
21
|
2. **State echo**: each phase start, one line — `[Phase N] <name> — inputs: OK/missing`.
|
|
20
22
|
3. **No fabrication**: never invent a value that must come from a tool (a stat, a
|
|
21
23
|
citation, a palette). Missing → halt and get it.
|
|
@@ -31,15 +33,13 @@ Two entry modes:
|
|
|
31
33
|
|
|
32
34
|
## Phase 0 — Clarify & Brief (MANDATORY gate)
|
|
33
35
|
|
|
34
|
-
Before any research or generation, confirm requirements and persist a brief.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
jump from this call straight to an outline or a "确认生成" gate. Even for a small/quick
|
|
42
|
-
deck, even if the style seems "obvious", all four are asked (only "你决定" bypasses).
|
|
36
|
+
Before any research or generation, confirm requirements and persist a brief. Follow
|
|
37
|
+
the canonical interaction contract in `SKILL.md`: ask only for missing values among
|
|
38
|
+
content source, scenario, and slide count in **ONE AskUserQuestion call with at most
|
|
39
|
+
THREE questions**. Do not re-ask values already supplied. The scenario-ranked style
|
|
40
|
+
picker is a separate single-question image-card call after the scenario is known,
|
|
41
|
+
unless the user already selected a catalog entry, supplied a style template, or
|
|
42
|
+
explicitly authorized automatic selection.
|
|
43
43
|
|
|
44
44
|
1. **Content source** — 提供材料 / 联网调研 / 自由创作. (Provided → request the materials now.
|
|
45
45
|
When you ask the user for a FILE — a template/materials .pptx/.docx/.pdf — set
|
|
@@ -49,44 +49,40 @@ deck, even if the style seems "obvious", all four are asked (only "你决定" by
|
|
|
49
49
|
in the chosen skin; NEVER reuse its look.** In particular a **`.pptx` handed in as
|
|
50
50
|
content** → read its text (the `.txt` sidecar or `bin/doc-text`) and treat it like
|
|
51
51
|
any other source; do **NOT** `pptx-tokenize`/`pptx-theme` it (those reuse the deck's
|
|
52
|
-
STYLE — a
|
|
53
|
-
when the user picks that as their **style** (
|
|
52
|
+
STYLE — a separate style-picker decision, see below). Reusing an uploaded deck's look is ONLY triggered
|
|
53
|
+
when the user picks that as their **style** ("复用这份 PPT 的风格"), never merely
|
|
54
54
|
because the content happened to arrive as a `.pptx`.
|
|
55
55
|
2. **Scenario** — the deck's use case (pitch / 内审 / 销售 / 讲座 / 发布会 / 培训 / 大会 /
|
|
56
56
|
工作汇报 / 述职 / 项目评审 / 年度总结 / 商业计划书 / 投标 / 政务汇报 / 公司产品介绍 …
|
|
57
57
|
— the full 15 with their logic live in the **Scenario matrix** below). AskUserQuestion
|
|
58
58
|
caps at 4 **TEXT** options, so **for THIS scenario question** present the **3–4 best-fit
|
|
59
|
-
for the topic** + let the user type Other (any scenario, listed or not).
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
for the topic** + let the user type Other (any scenario, listed or not). This text-option
|
|
60
|
+
cap does not apply to the separate image-card style picker; follow `SKILL.md` for its
|
|
61
|
+
current catalog-backed recommendation and browse-all contract. Then look the choice up in the matrix (unlisted →
|
|
62
62
|
map to the nearest row). Record as a short phrase. Scenario is NOT just wording — it
|
|
63
63
|
locks **five** things at once (tone · density · **required roles** · narrative shape ·
|
|
64
64
|
page range). Carry them through: required roles = a checklist Phase 2 MUST satisfy
|
|
65
|
-
(MECE), density feeds Phase 4 §4.2 P2, narrative picks the Phase 2 pyramid, pages seed
|
|
66
|
-
3. **
|
|
67
|
-
**all 13 (anthropic · apple · black-gold · branding · cinereel · cool · hand-drawn ·
|
|
68
|
-
ivory-gold · magazine-ink · mckinsey · mono · olive-gold · swiss-grid), NOT a 3–5
|
|
69
|
-
shortlist.** Image-card picks are capped at **16**, so the
|
|
70
|
-
4-option TEXT cap does NOT apply here — emit one card per skin every time —
|
|
71
|
-
one option per skin `{ label: skin 名, description: <the skin's **picker one-liner**
|
|
72
|
-
from styles/README.md, VERBATIM — one short line, no 首选/风/keynote padding>, imagePath: <absolute
|
|
73
|
-
path to styles/_samples/<skin>.webp under the skill dir> }`. The sample images are
|
|
74
|
-
**PRE-RENDERED** WebP (a fixed cover + content page stacked per skin, all the same size)
|
|
75
|
-
and shipped with the skill — use them directly, don't render anything at question
|
|
76
|
-
time. (The picker UI lays the cards out itself; you only supply the options + images.)
|
|
77
|
-
`styles/README.md` gives each skin's 适用场景 + light/dark; order the cards
|
|
78
|
-
best-fit-for-scenario first but show them all. **When the user says 你决定 → `cool`**
|
|
79
|
-
(酷炫深色); `mckinsey`/`mono` for clean/formal/light; match the rest by 适用场景.
|
|
80
|
-
After confirmation, save the deck-skin preference to memory.
|
|
81
|
-
**Custom style (其他/自定义)** — prefer **B (derive a bespoke look)**: from an existing
|
|
82
|
-
deck → `pptx-tokenize` (reuse its layouts/master) or `pptx-theme` (its palette → our
|
|
83
|
-
layouts); from a reference image → build a `styles/<name>/skin.css`. (Fallbacks: map to
|
|
84
|
-
the nearest of the 9, or tweak one.) A deck given HERE is used for its STYLE — distinct
|
|
85
|
-
from a deck given as **content** (Q1), which is text-only. Full routing in SKILL.md.
|
|
86
|
-
4. **Slide count** — default = the chosen scenario's **默认页数** column in the Scenario
|
|
65
|
+
(MECE), density feeds Phase 4 §4.2 P2, narrative picks the Phase 2 pyramid, pages seed the slide-count choice.
|
|
66
|
+
3. **Slide count** — default = the chosen scenario's **默认页数** column in the Scenario
|
|
87
67
|
matrix (e.g. pitch 10–12 · 内审 6–8 · keynote 15–20 · 工作汇报 5–10 · BP 15–25 · 投标
|
|
88
68
|
15–30); clamp 3–30, double-check outside.
|
|
89
69
|
|
|
70
|
+
**Separate style picker — pick ONE current catalog entry after scenario is known.**
|
|
71
|
+
Read `catalog.json` immediately before asking and use the scenario-ranked picker
|
|
72
|
+
contract in `SKILL.md`: show at most eight recommended final entries, then
|
|
73
|
+
“查看全部风格” and the custom-template card. If the user expands, show every current
|
|
74
|
+
`catalog.entries` item in catalog order. Never use a hard-coded skin count or stale
|
|
75
|
+
id list. Samples are pre-rendered WebP assets — use `entry.sample` directly and do
|
|
76
|
+
not render anything during the question. Rank by catalog metadata and the confirmed
|
|
77
|
+
scenario; do not hardcode a default family. After confirmation, save the deck-skin
|
|
78
|
+
preference to memory.
|
|
79
|
+
|
|
80
|
+
**Custom style (其他/自定义)** — prefer **B (derive a bespoke look)**: from an existing
|
|
81
|
+
deck → `pptx-tokenize` (reuse its layouts/master) or `pptx-theme` (its palette → our
|
|
82
|
+
layouts); from a reference image → build a `styles/<name>/skin.css`. Fallbacks: map
|
|
83
|
+
to the nearest catalog family or tweak one. A deck given here is used for its STYLE —
|
|
84
|
+
distinct from a deck given as **content**, which is text-only. Full routing in `SKILL.md`.
|
|
85
|
+
|
|
90
86
|
**Scenario matrix** (each row locks tone · density · required roles · narrative ·
|
|
91
87
|
pages). The required roles are a HARD checklist — Phase 2 must include them all:
|
|
92
88
|
|
|
@@ -108,13 +104,15 @@ pages). The required roles are a HARD checklist — Phase 2 must include them al
|
|
|
108
104
|
| **政务/党政汇报** | 严肃 · 规范 | 中偏密 | 背景/依据 · 工作举措 · 成效数据 · 存在问题 · 下步部署 | 结论先行 | 8–15 |
|
|
109
105
|
| **公司/产品介绍** | 品牌 · 自信 · 利益导向 | 中 · 重视觉 | 公司/愿景 · 核心能力 · 产品/方案 · 标杆案例 · 数据 · 合作邀请 | 问题-方案 | 8–15 |
|
|
110
106
|
|
|
111
|
-
Tone also biases the
|
|
107
|
+
Tone also biases the catalog style ranking: 张力/情绪(pitch·发布会·大会)→ 深色酷炫(cool/apple/
|
|
112
108
|
black-gold);务实(内审·销售)→ 白底咨询(mckinsey);清晰(讲座·培训)→ 中性/教育风.
|
|
113
109
|
If the user's scenario isn't listed, map it to the nearest row's tone/density/narrative.
|
|
114
110
|
|
|
115
111
|
**Persist `deck-brief.md`**: Topic · Scenario · Source · Style(name + 2–3 sentence
|
|
116
112
|
palette/type/motif) · Theme file · Template style · Slide Count · (assumptions).
|
|
117
|
-
|
|
113
|
+
Persist it and continue. Do not ask the user to approve information they just supplied.
|
|
114
|
+
If the brief adds a material assumption that changes scope, show only that assumption
|
|
115
|
+
and pause for approval before continuing.
|
|
118
116
|
(Offline / no web tool → say so; source can only be 提供材料 or 自由创作.)
|
|
119
117
|
|
|
120
118
|
---
|
|
@@ -291,12 +289,21 @@ this **priority order** — P1 outranks P2 outranks P3; never trade layout-fit f
|
|
|
291
289
|
|
|
292
290
|
---
|
|
293
291
|
|
|
294
|
-
## Phase 5 —
|
|
292
|
+
## Phase 5 — Fast preview + final adversarial QA
|
|
293
|
+
|
|
294
|
+
Use a two-stage loop; do not pay the Office cold-start cost on every visual edit:
|
|
295
|
+
|
|
296
|
+
1. **Authoring loop (HTML, fast):** render `deck.html` directly with
|
|
297
|
+
`bin/html2pptx.cjs deck.html --preview-dir <dir> [--preview-pages <spec>]` and inspect every page on
|
|
298
|
+
the first pass. Fix HTML/CSS, then preview only changed pages. Repeat until the HTML
|
|
299
|
+
composition is clean.
|
|
300
|
+
2. **Delivery loop (PPTX, once after HTML is clean):** generate the PPTX, run
|
|
301
|
+
`deck-qa --json` and `doc-validate --strict`, fixing objective findings before
|
|
302
|
+
visual review. Then perform one faithful `doc-convert → pdf-render all` pass to
|
|
303
|
+
catch PPTX/Office-only drift. If that final pass finds drift, fix and rerun only as
|
|
304
|
+
required; never use PPTX→PDF as the routine authoring preview.
|
|
295
305
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
cross-slide inconsistency (palette / dark positions / type hierarchy). Fix →
|
|
301
|
-
re-render the affected slides → repeat until a clean pass. Do NOT declare done before
|
|
302
|
-
one full fix-and-verify cycle. Finish with `doc-validate --strict`.
|
|
306
|
+
Assume there are defects and inspect text overflow/clipping, collisions, tofu/blank
|
|
307
|
+
CJK, cramped gaps, low contrast, leftover placeholders, and cross-slide consistency.
|
|
308
|
+
Finish only after the generated PPTX has one clean structural, mechanical, and faithful
|
|
309
|
+
visual pass.
|
|
@@ -447,8 +447,8 @@ Two rules:
|
|
|
447
447
|
## Fonts — bundled faces reach the render, not the native text layer
|
|
448
448
|
|
|
449
449
|
`assets/fonts/fonts.json` is the single source of truth for the skill's font set.
|
|
450
|
-
`html2pptx` base64-injects every face from it at render; `scripts/deck-skin-samples.mjs`
|
|
451
|
-
and `scripts/deck-fidelity.mjs` serve the same files from disk. **Add a face there and
|
|
450
|
+
`html2pptx` base64-injects every face from it at render; `scripts/deck/deck-skin-samples.mjs`
|
|
451
|
+
and `scripts/deck/deck-fidelity.mjs` serve the same files from disk. **Add a face there and
|
|
452
452
|
drop the `.woff2` beside it — never inline a base64 `@font-face` into a `skin.css`.**
|
|
453
453
|
|
|
454
454
|
The part that trips people up: an injected `@font-face` styles the **browser** render —
|
|
@@ -694,11 +694,10 @@ p.writeFile({ fileName: "deck.pptx" }).then(() => console.log("ok"));
|
|
|
694
694
|
|
|
695
695
|
## Verify before delivering (MANDATORY automated visual-QA loop)
|
|
696
696
|
|
|
697
|
-
**Assume there are problems — your job is to find them.**
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
fix loop** — never spend vision on defects a machine already caught.
|
|
697
|
+
**Assume there are problems — your job is to find them.** Treat QA as a bug hunt,
|
|
698
|
+
not a confirmation step. Use the cheapest faithful surface for each stage: direct
|
|
699
|
+
HTML screenshots while authoring, then PPTX checks and one Office-rendered final pass.
|
|
700
|
+
Do not launch LibreOffice after every CSS/content edit.
|
|
702
701
|
|
|
703
702
|
**Gate 1 — structural + schema** (blocking): `doc-validate.cjs deck.pptx
|
|
704
703
|
--strict` — exit 1 = fix the reported part, never deliver (`--strict` = full
|
|
@@ -716,20 +715,30 @@ are objective bugs and free to detect, so they must never reach the vision pass
|
|
|
716
715
|
delivery. (This is the same lint as `doc-validate --design-lint`, JSON-shaped for
|
|
717
716
|
the loop.)
|
|
718
717
|
|
|
719
|
-
**The loop** (≤2 rounds, then report residuals — never silently ship):
|
|
720
|
-
|
|
721
|
-
1. **
|
|
722
|
-
`
|
|
718
|
+
**The loop** (≤2 delivery rounds, then report residuals — never silently ship):
|
|
719
|
+
|
|
720
|
+
1. **Fast authoring preview:** before generating the delivery PPTX, run
|
|
721
|
+
`html2pptx.cjs deck.html --preview-dir /tmp/deck-preview --style <id> ...`.
|
|
722
|
+
The first pass renders every slide; after a fix add `--preview-pages 3,7-8` to
|
|
723
|
+
capture only changed slides. Inspect and iterate on these HTML-faithful images.
|
|
724
|
+
2. **Build + machine gates:** generate `deck.pptx`, then run Gate 1 and Gate 2 above.
|
|
725
|
+
Fix every objective finding before the expensive final render.
|
|
726
|
+
3. **Final Office render:** once HTML preview and machine gates are clean, run
|
|
727
|
+
`doc-convert.cjs deck.pptx /tmp/deck.pdf --cache-dir /tmp/talos-office-cache` then
|
|
728
|
+
`pdf-render.cjs /tmp/deck.pdf all 1` → one PNG per slide. This happens once in
|
|
729
|
+
the normal path and verifies PPTX/Office-only drift; rerun it only after fixing
|
|
730
|
+
drift found in this final pass.
|
|
723
731
|
**Reading the previews is the single most token-expensive step in the whole
|
|
724
732
|
deck flow** (an image costs ≈ w×h∕750 tokens; a full-res 1280×720 slide ≈ 1.2k
|
|
725
733
|
each, ~15k for a 12-page deck — and you re-read every round). The trailing `1`
|
|
726
734
|
renders at ≈72dpi (¼ the pixels of the default `2`) — **≈¼ the vision tokens**,
|
|
727
735
|
and slide composition/color/hierarchy read fine at that size. Two ways to spend
|
|
728
736
|
even less: (a) Gates 1–2 are token-FREE — never send a slide to vision that a
|
|
729
|
-
machine already flagged; (b)
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
737
|
+
machine already flagged; (b) use `--preview-pages` during HTML iteration and
|
|
738
|
+
read only changed slides. `pdf-render 3-3` saves PNG work but does **not** avoid
|
|
739
|
+
the whole-deck Office conversion, so reserve it for a genuine final-PPTX rerun.
|
|
740
|
+
Bump scale back to `2` only when fine print genuinely needs it.
|
|
741
|
+
4. **Vision critic — the part only a model can do.** LOOK at every slide image
|
|
733
742
|
(not "glance"); **if sub-agent dispatch is available, critique slides in
|
|
734
743
|
parallel — one fresh-eyes agent per slide** (they catch what you, having
|
|
735
744
|
authored it, will not). Pass each critic the slide's `deck-qa` findings so it
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
# Layout library (structure) — pick by role + P1/P2/P3
|
|
2
2
|
|
|
3
3
|
**Layouts are structure only** — grid, positions, semantic classes, `data-layout` id,
|
|
4
|
-
**zero color** (they pass `lintHardcodedColors`).
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
**zero color** (they pass `lintHardcodedColors`). Theme V2 composes family paint,
|
|
5
|
+
component profile, media treatment and art direction; the layout remains independently selected by
|
|
6
|
+
content intent. See `../theme-system.md` and machine-readable `profiles.json`.
|
|
7
7
|
|
|
8
8
|
## How to pick (the deterministic selection)
|
|
9
9
|
|
|
10
|
-
**
|
|
11
|
-
|
|
10
|
+
**Theme — once per deck.** Choose ONE catalog style id. Set `themeVersion:2` for modern
|
|
11
|
+
entries and optionally override `mediaStyle`; entries in catalog collection `original-13`
|
|
12
|
+
are frozen as `classic-v1`, so omit both fields and avoid `themeV2Layouts`. Never mix base
|
|
13
|
+
Themes within one deck.
|
|
14
|
+
|
|
15
|
+
**Scene — automatic from intent.** `deck-build` maps intent to `hero`, `content`,
|
|
16
|
+
`data`, `media`, or `closing`, then balances `decorDensity` across adjacent pages.
|
|
17
|
+
Normally omit both fields; override them only when the automatic art rhythm is wrong.
|
|
12
18
|
|
|
13
19
|
**Layout — per page, by matching this table:**
|
|
14
20
|
- **P1 structure / image** (most important): does the page have an image? left/right?
|
|
@@ -52,7 +58,7 @@ Plain list layouts take rows too: `team-row.members{name,role}` ·
|
|
|
52
58
|
|
|
53
59
|
Anything the spec gets wrong — unknown layout/slot/field, a repeat block with no rows, a
|
|
54
60
|
figure row missing its numbers — **fails the build** (exit 1, nothing written) rather than
|
|
55
|
-
shipping the template's demo content. Regenerate the index with `node scripts/gen-slots.mjs`
|
|
61
|
+
shipping the template's demo content. Regenerate the index with `node scripts/deck/gen-slots.mjs`
|
|
56
62
|
after touching a `.tpl`.
|
|
57
63
|
|
|
58
64
|
## Catalog
|
|
@@ -126,6 +132,16 @@ Each slide carries `data-layout="<id>"` (drives the diversity lint + traceabilit
|
|
|
126
132
|
| `brand-values` | content | value cards (rows) | medium (2–4) | text-only | 品牌主张(编号圆+准则×3) |
|
|
127
133
|
| `team-row` | content | portrait slots + name/role (rows) | medium (3–5) | **photo slots** | 团队成员(一排 3–5 人像 + 姓名/职位) |
|
|
128
134
|
| `quote-aside` | content | oversized quote glyph left + text block right (asymmetric) | light (1 quote) | text-only | 金句页,但版面要有方向感:引号当锚点、引文靠右挂,署名右对齐收尾。`quote` 是居中对称的另一种读法 |
|
|
135
|
+
| `pitch-problem` | pitch · problem | hero claim + stat + 3 pains | light (3) | text-only | 投资人问题页 |
|
|
136
|
+
| `pitch-solution` | pitch · solution | claim + 3 solution pillars | medium (3) | optional | 价值主张 / 方案支柱 |
|
|
137
|
+
| `market-rings` | pitch · market | TAM/SAM/SOM concentric rings | light (3) | diagram | 市场规模 |
|
|
138
|
+
| `product-device` | pitch · product | copy + feature list + device stage | medium (3) | **product media** | 产品演示 / App / SaaS |
|
|
139
|
+
| `traction-milestones` | pitch · traction | 3 metrics + 4 milestones | medium (7) | text-only | 牵引力与增长历程 |
|
|
140
|
+
| `business-model` | pitch · model | 3 revenue streams + 2 economics | medium (5) | text-only | 商业模式 / 单位经济 |
|
|
141
|
+
| `pricing-tiers` | pitch · pricing | 3 tier cards | medium (3) | text-only | 定价与套餐 |
|
|
142
|
+
| `customer-proof` | pitch · proof | testimonial + 2 metrics + logos | medium (6) | optional | 客户证言与社会证明 |
|
|
143
|
+
| `team-founders` | pitch · team | 3 founder cards | medium (3) | optional | 创始团队 |
|
|
144
|
+
| `funding-ask` | pitch · ask | hero ask + 3 use-of-funds bars | light (4) | text-only | 融资需求与资金用途 |
|
|
129
145
|
|
|
130
146
|
## Semantic class contract (what a skin must define)
|
|
131
147
|
|
|
@@ -154,9 +170,14 @@ deck.html 时逐页决定要不要加这个类,skin 只需在自己的 `--slide-
|
|
|
154
170
|
一般保持不变)。浅色皮肤才需要实现它;深色皮肤可以不定义(no-op)。
|
|
155
171
|
`cover-minimal` 只用既有通用 class(`.rule`/`.accent-bar`/`.cover-title`/`.cover-sub`/`.deck-footer`),无需新增。
|
|
156
172
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
173
|
+
Theme V2 adds `.component-card` / `.metric-card` / `.feature-card` / `.price-card` /
|
|
174
|
+
`.proof-card` / `.team-card`, `.badge` / `.tag`, `.media-frame` / `.media-cutout` /
|
|
175
|
+
`.device-frame`, `.quote-*`, `.logo-tile`, `.fund-*`, `.timeline-node` and
|
|
176
|
+
`.avatar-frame`. Neutral behavior lives in `components/base.css`; profiles and media
|
|
177
|
+
styles change their visual grammar without changing layout HTML.
|
|
178
|
+
|
|
179
|
+
Adding a **Theme binding** = one entry in `theme-system.json`; adding a **layout** = one
|
|
180
|
+
`layouts/<id>.tpl` plus a candidate role in `profiles.json`. Regenerate `slots.json`.
|
|
160
181
|
|
|
161
182
|
## 反向通道 —— 包内版式如何进入共享库
|
|
162
183
|
|
|
@@ -174,7 +195,7 @@ skins render it.
|
|
|
174
195
|
格式没变)——**是不是结构性创新仍需人来判**,脚本不代劳。任一条不满足就拒绝写入
|
|
175
196
|
(不移动文件),并逐条报出缺什么。
|
|
176
197
|
|
|
177
|
-
校验通过后脚本会:把 `.tpl` 移到 `layouts/`、重跑 `scripts/gen-slots.mjs` 重生成
|
|
198
|
+
校验通过后脚本会:把 `.tpl` 移到 `layouts/`、重跑 `scripts/deck/gen-slots.mjs` 重生成
|
|
178
199
|
`slots.json`、在本文件的 Catalog 表格里插入一行占位(`role`/`structure`/`density`/
|
|
179
200
|
`has-image`/`pick when` 均为 `TODO`,附 `promoted from packs/<packId>`)。写入中途
|
|
180
201
|
任何一步失败都会整体回滚(删掉刚写的 `.tpl`,`slots.json`/本文件复原),不会留下
|
|
@@ -182,8 +203,8 @@ skins render it.
|
|
|
182
203
|
|
|
183
204
|
提升不是终点,脚本打印的四步收尾都要做:补全本文件里那一行的全部 `TODO`、从
|
|
184
205
|
`packs/<packId>/layouts/` 删掉原文件(否则同名遮蔽会让包永远看不到共享版本、也
|
|
185
|
-
永远吃不到后续对共享版式的修复)、`node scripts/deck-skin-samples.mjs && node
|
|
186
|
-
scripts/deck-fidelity.mjs` 确认它在所有皮肤下都成立、再跑
|
|
206
|
+
永远吃不到后续对共享版式的修复)、`node scripts/deck/deck-skin-samples.mjs && node
|
|
207
|
+
scripts/deck/deck-fidelity.mjs` 确认它在所有皮肤下都成立、再跑
|
|
187
208
|
`TALOS_TEST_SCOPE=unit npx vitest run tests/unit/deck-layouts.test.ts`。
|
|
188
209
|
|
|
189
210
|
新版式若用到契约外的 class,先扩 `styles/_contract-defaults.css`(本脚本不代劳)——
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- layouts/business-model — Theme V2. role=pitch.business-model; streams=3; economics=2. -->
|
|
2
|
+
<section class="slide" data-layout="business-model" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:66px">{{eyebrow|BUSINESS MODEL}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:106px;width:760px;font-size:calc(50px * var(--type-scale,1))">{{title|经常性收入,随客户价值同步增长}}</h2><span class="tag tag--accent" style="position:absolute;right:80px;top:118px">{{tag|LAND & EXPAND}}</span>
|
|
4
|
+
<div class="component-grid" style="position:absolute;left:80px;right:430px;top:244px;grid-template-columns:repeat(3,1fr)"><div class="component-card"><div class="component-label">{{stream1_label|PLATFORM}}</div><div class="metric-value" style="font-size:30px;margin-top:18px">{{stream1_value|70%}}</div><p class="component-copy" style="margin-top:12px">{{stream1_body|年度平台订阅}}</p></div><div class="component-card"><div class="component-label">{{stream2_label|USAGE}}</div><div class="metric-value" style="font-size:30px;margin-top:18px">{{stream2_value|20%}}</div><p class="component-copy" style="margin-top:12px">{{stream2_body|按量计费}}</p></div><div class="component-card"><div class="component-label">{{stream3_label|SERVICES}}</div><div class="metric-value" style="font-size:30px;margin-top:18px">{{stream3_value|10%}}</div><p class="component-copy" style="margin-top:12px">{{stream3_body|实施与增值服务}}</p></div></div>
|
|
5
|
+
<div style="position:absolute;right:80px;top:244px;width:292px;display:grid;gap:18px"><div class="metric-card metric-card--hero"><div class="metric-label">{{econ1_label|GROSS MARGIN}}</div><div class="metric-value" style="margin-top:16px">{{econ1|82%}}</div></div><div class="metric-card"><div class="metric-label">{{econ2_label|CAC PAYBACK}}</div><div class="metric-value" style="margin-top:16px">{{econ2|8 mo}}</div></div></div>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / BUSINESS MODEL}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|07}}</div></section>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- layouts/customer-proof — Theme V2. role=pitch.proof; logos=4; metrics=2. -->
|
|
2
|
+
<section class="slide" data-layout="customer-proof" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:66px">{{eyebrow|CUSTOMER PROOF}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:106px;font-size:calc(48px * var(--type-scale,1))">{{title|客户用结果替我们说话}}</h2>
|
|
4
|
+
<div class="proof-card" style="position:absolute;left:80px;top:212px;width:620px;height:318px"><div class="quote-mark">“</div><div class="quote-copy" style="margin-top:30px">{{quote|上线六周后,我们把关键流程周期缩短了一半。}}</div><div style="margin-top:34px"><b class="component-title">{{person|李明}}</b><div class="component-copy">{{role|运营副总裁 · Acme}}</div></div></div>
|
|
5
|
+
<div class="component-grid" style="position:absolute;right:80px;top:212px;width:420px;grid-template-columns:1fr 1fr"><div class="metric-card"><div class="metric-label">{{metric1_label|TIME SAVED}}</div><div class="metric-value" style="font-size:36px;margin-top:16px">{{metric1|52%}}</div></div><div class="metric-card"><div class="metric-label">{{metric2_label|NPS}}</div><div class="metric-value" style="font-size:36px;margin-top:16px">{{metric2|72}}</div></div><div class="logo-tile">{{logo1|ACME}}</div><div class="logo-tile">{{logo2|NORTHSTAR}}</div><div class="logo-tile">{{logo3|ORBIT}}</div><div class="logo-tile">{{logo4|PULSE}}</div></div>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / PROOF}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|10}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- layouts/funding-ask — Theme V2. role=pitch.ask; allocation=3. -->
|
|
2
|
+
<section class="slide" data-layout="funding-ask" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:66px">{{eyebrow|THE ASK}}</div><div class="metric-card metric-card--hero" style="position:absolute;left:80px;top:112px;width:460px;height:440px;display:flex;flex-direction:column;justify-content:center"><div class="metric-label">{{round|SERIES A}}</div><div class="metric-value" style="font-size:86px;margin-top:22px">{{ask|$12M}}</div><p class="component-copy" style="font-size:18px;margin-top:24px">{{runway|18–24 个月跑道,用于产品、市场与团队扩张。}}</p></div>
|
|
4
|
+
<div style="position:absolute;left:610px;right:80px;top:116px"><h2 class="deck-title" style="font-size:calc(46px * var(--type-scale,1))">{{title|资金将把已验证增长变成规模}}</h2><div style="display:grid;gap:28px;margin-top:58px"><div><div style="display:flex;justify-content:space-between"><b class="component-title">{{use1|产品与工程}}</b><span class="data-chip">{{pct1|45%}}</span></div><div class="fund-track" style="margin-top:10px"><div class="fund-fill" style="width:45%"></div></div></div><div><div style="display:flex;justify-content:space-between"><b class="component-title">{{use2|销售与市场}}</b><span class="data-chip">{{pct2|35%}}</span></div><div class="fund-track" style="margin-top:10px"><div class="fund-fill" style="width:35%"></div></div></div><div><div style="display:flex;justify-content:space-between"><b class="component-title">{{use3|运营与储备}}</b><span class="data-chip">{{pct3|20%}}</span></div><div class="fund-track" style="margin-top:10px"><div class="fund-fill" style="width:20%"></div></div></div></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / FUNDING}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|12}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- layouts/market-rings — Theme V2. role=pitch.market; density=low; exact-metrics=3. -->
|
|
2
|
+
<section class="slide" data-layout="market-rings" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:68px">{{eyebrow|MARKET OPPORTUNITY}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:108px;width:500px;font-size:calc(52px * var(--type-scale,1))">{{title|从明确切口进入大市场}}</h2><p class="component-copy" style="position:absolute;left:80px;top:306px;width:390px;font-size:18px">{{body|先拿下高频、高价值的核心用户,再沿同一工作流向相邻市场扩展。}}</p><span class="tag tag--accent" style="position:absolute;left:80px;top:424px">{{growth|CAGR 18.4%}}</span>
|
|
4
|
+
<div style="position:absolute;right:92px;top:94px;width:560px;height:520px"><div style="position:absolute;inset:0;border:1px solid var(--hair);border-radius:50%;display:flex;align-items:flex-start;justify-content:center;padding-top:54px"><div style="text-align:center"><div class="component-label">{{tam_label|TAM}}</div><div class="metric-value">{{tam|$48B}}</div></div></div><div style="position:absolute;inset:94px;border:2px solid var(--accent);border-radius:50%;display:flex;align-items:flex-start;justify-content:center;padding-top:50px;background:var(--slide-bg)"><div style="text-align:center"><div class="component-label">{{sam_label|SAM}}</div><div class="metric-value" style="font-size:38px">{{sam|$12B}}</div></div></div><div style="position:absolute;inset:188px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--accent);color:var(--slide-bg)"><div style="text-align:center"><div class="component-label" style="color:inherit">{{som_label|SOM}}</div><div class="metric-value" style="font-size:32px;color:inherit">{{som|$1.8B}}</div></div></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / MARKET}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|04}}</div></section>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- layouts/pitch-problem — Theme V2. role=pitch.problem; density=low; max-points=3. -->
|
|
2
|
+
<section class="slide" data-layout="pitch-problem" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow-row" style="position:absolute;left:84px;top:66px;display:flex;gap:12px;align-items:center"><span class="accent-bar" style="width:28px;height:2px"></span><span class="eyebrow">{{eyebrow|THE PROBLEM}}</span></div><h2 class="deck-title" style="position:absolute;left:80px;top:104px;width:760px;font-size:calc(54px * var(--type-scale,1))">{{title|客户正在为一个昂贵的问题买单}}</h2>
|
|
4
|
+
<div class="metric-card metric-card--hero" style="position:absolute;right:80px;top:92px;width:276px;height:180px"><div class="metric-label">{{stat_label|年度损失}}</div><div class="metric-value" style="margin-top:28px">{{stat|$4.2B}}</div><p class="component-copy" style="margin-top:10px">{{stat_note|来自低效流程与信息断层}}</p></div>
|
|
5
|
+
<div class="component-grid" style="position:absolute;left:80px;right:80px;top:338px;grid-template-columns:repeat(3,1fr)"><div class="component-card"><div class="component-label">01</div><h3 class="component-title" style="font-size:22px;margin-top:14px">{{point1_title|耗时}}</h3><p class="component-copy" style="font-size:15px;margin-top:10px">{{point1_body|核心任务被大量手工步骤拖慢。}}</p></div><div class="component-card"><div class="component-label">02</div><h3 class="component-title" style="font-size:22px;margin-top:14px">{{point2_title|昂贵}}</h3><p class="component-copy" style="font-size:15px;margin-top:10px">{{point2_body|团队用人力填补系统之间的缺口。}}</p></div><div class="component-card"><div class="component-label">03</div><h3 class="component-title" style="font-size:22px;margin-top:14px">{{point3_title|不可控}}</h3><p class="component-copy" style="font-size:15px;margin-top:10px">{{point3_body|缺少统一数据导致决策滞后。}}</p></div></div>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / PROBLEM}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|02}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- layouts/pitch-solution — Theme V2. role=pitch.solution; density=medium; max-pillars=3. -->
|
|
2
|
+
<section class="slide" data-layout="pitch-solution" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<span class="badge badge--accent" style="position:absolute;left:80px;top:66px">{{badge|OUR SOLUTION}}</span><h2 class="deck-title" style="position:absolute;left:80px;top:116px;width:760px;font-size:calc(52px * var(--type-scale,1))">{{title|把复杂工作压缩成一条清晰路径}}</h2><p class="component-copy" style="position:absolute;right:80px;top:128px;width:300px;font-size:17px">{{lead|统一数据、自动执行,并把结果送回团队每天使用的工作界面。}}</p>
|
|
4
|
+
<div class="component-grid" style="position:absolute;left:80px;right:80px;top:298px;grid-template-columns:repeat(3,1fr)"><div class="feature-card"><span class="data-chip">01</span><h3 class="component-title" style="font-size:24px;margin-top:22px">{{pillar1_title|连接}}</h3><p class="component-copy" style="margin-top:12px">{{pillar1_body|接入现有系统与上下文。}}</p></div><div class="feature-card component-card--strong"><span class="data-chip">02</span><h3 class="component-title" style="font-size:24px;margin-top:22px">{{pillar2_title|理解}}</h3><p class="component-copy" style="margin-top:12px">{{pillar2_body|把信息转成可执行判断。}}</p></div><div class="feature-card"><span class="data-chip">03</span><h3 class="component-title" style="font-size:24px;margin-top:22px">{{pillar3_title|行动}}</h3><p class="component-copy" style="margin-top:12px">{{pillar3_body|自动完成流程并留下审计记录。}}</p></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / SOLUTION}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|03}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- layouts/pricing-tiers — Theme V2. role=pitch.pricing; tiers=3. -->
|
|
2
|
+
<section class="slide" data-layout="pricing-tiers" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:64px">{{eyebrow|PRICING}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:104px;font-size:calc(50px * var(--type-scale,1))">{{title|简单定价,为扩张留出空间}}</h2>
|
|
4
|
+
<div class="component-grid" style="position:absolute;left:80px;right:80px;top:218px;grid-template-columns:repeat(3,1fr)"><div class="price-card"><div class="component-label">{{tier1|STARTER}}</div><div class="metric-value" style="margin-top:22px">{{price1|$99}}</div><div class="component-copy">{{unit1|/ month}}</div><h3 class="component-title" style="margin-top:34px">{{tier1_title|小团队起步}}</h3><p class="component-copy" style="margin-top:12px">{{tier1_body|核心工作流与标准集成。}}</p></div><div class="price-card price-card--featured"><span class="badge" style="position:absolute;right:18px;top:18px">{{featured|POPULAR}}</span><div class="component-label">{{tier2|GROWTH}}</div><div class="metric-value" style="margin-top:22px">{{price2|$399}}</div><div class="component-copy">{{unit2|/ month}}</div><h3 class="component-title" style="margin-top:34px">{{tier2_title|规模化增长}}</h3><p class="component-copy" style="margin-top:12px">{{tier2_body|高级自动化、分析与权限。}}</p></div><div class="price-card"><div class="component-label">{{tier3|ENTERPRISE}}</div><div class="metric-value" style="margin-top:22px">{{price3|Custom}}</div><div class="component-copy">{{unit3|annual contract}}</div><h3 class="component-title" style="margin-top:34px">{{tier3_title|企业级部署}}</h3><p class="component-copy" style="margin-top:12px">{{tier3_body|专属支持、安全与治理。}}</p></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / PRICING}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|08}}</div></section>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- layouts/product-device — Theme V2. role=pitch.product; media=device; features=3. -->
|
|
2
|
+
<section class="slide" data-layout="product-device" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:68px">{{eyebrow|PRODUCT}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:108px;width:490px;font-size:calc(50px * var(--type-scale,1))">{{title|产品在真实工作流里完成闭环}}</h2><p class="component-copy" style="position:absolute;left:80px;top:300px;width:430px;font-size:17px">{{body|从输入到决策再到行动,用户无需在多个工具之间切换。}}</p>
|
|
4
|
+
<div style="position:absolute;left:80px;top:398px;width:440px;display:grid;gap:12px"><div class="component-card" style="padding:13px 18px"><b class="component-title">{{feature1|自然语言发起任务}}</b></div><div class="component-card" style="padding:13px 18px"><b class="component-title">{{feature2|自动调用业务系统}}</b></div><div class="component-card" style="padding:13px 18px"><b class="component-title">{{feature3|全程可追踪与复核}}</b></div></div>
|
|
5
|
+
<div class="device-frame" style="position:absolute;right:92px;top:80px;width:570px;height:540px;display:flex;align-items:center;justify-content:center;background:var(--card-bg,transparent)"><div style="text-align:center;padding:50px"><div class="component-label">{{media_label|PRODUCT SCREEN}}</div><div class="metric-value" style="font-size:30px;margin-top:18px">{{screen_title|产品截图 / Demo}}</div><p class="component-copy" style="margin-top:12px">{{screen_note|用真实界面替换这个媒体槽。}}</p></div></div>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / PRODUCT}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|05}}</div></section>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"themeV2Layouts": ["pitch-problem","pitch-solution","market-rings","product-device","traction-milestones","business-model","pricing-tiers","funding-ask","customer-proof","team-founders"],
|
|
4
|
+
"intents": {
|
|
5
|
+
"cover": {"candidates":["cover","cover-statement","cover-image","cover-minimal"],"density":"low","maxItems":2,"media":"optional","scene":"hero","decorDensity":"high"},
|
|
6
|
+
"problem": {"candidates":["pitch-problem","problem-solution-banner","big-stat"],"density":"low","maxItems":3,"media":"none","scene":"hero","decorDensity":"high"},
|
|
7
|
+
"solution": {"candidates":["pitch-solution","problem-solution","cards-3"],"density":"medium","maxItems":3,"media":"optional","scene":"content","decorDensity":"medium"},
|
|
8
|
+
"product-demo": {"candidates":["product-device","image-left","image-full"],"density":"low","maxItems":3,"media":"required","scene":"media","decorDensity":"high"},
|
|
9
|
+
"market-size": {"candidates":["market-rings","ring-progress","big-stat"],"density":"low","maxItems":3,"media":"none","scene":"data","decorDensity":"medium"},
|
|
10
|
+
"market-growth": {"candidates":["chart-kpi","chart-full","stats-chart"],"density":"medium","maxItems":6,"media":"none","scene":"data","decorDensity":"medium"},
|
|
11
|
+
"competition": {"candidates":["matrix-2x2","comparison","versus"],"density":"medium","maxItems":6,"media":"none","scene":"data","decorDensity":"low"},
|
|
12
|
+
"business-model": {"candidates":["business-model","cards-3","funnel"],"density":"medium","maxItems":5,"media":"none","scene":"content","decorDensity":"low"},
|
|
13
|
+
"pricing": {"candidates":["pricing-tiers","comparison","data-table"],"density":"medium","maxItems":3,"media":"none","scene":"data","decorDensity":"medium"},
|
|
14
|
+
"traction": {"candidates":["traction-milestones","three-kpi","chart-kpi"],"density":"medium","maxItems":7,"media":"none","scene":"data","decorDensity":"medium"},
|
|
15
|
+
"go-to-market": {"candidates":["funnel","steps","timeline"],"density":"medium","maxItems":5,"media":"optional","scene":"content","decorDensity":"medium"},
|
|
16
|
+
"unit-economics": {"candidates":["two-kpi","three-kpi","data-table"],"density":"medium","maxItems":6,"media":"none","scene":"data","decorDensity":"medium"},
|
|
17
|
+
"financials": {"candidates":["chart-kpi","stats-chart","data-table"],"density":"high","maxItems":8,"media":"none","scene":"data","decorDensity":"low"},
|
|
18
|
+
"customer-proof": {"candidates":["customer-proof","quote-aside","quote"],"density":"low","maxItems":6,"media":"optional","scene":"media","decorDensity":"medium"},
|
|
19
|
+
"team": {"candidates":["team-founders","team-row","org-tree"],"density":"medium","maxItems":5,"media":"optional","scene":"media","decorDensity":"low"},
|
|
20
|
+
"funding-ask": {"candidates":["funding-ask","big-stat","section-stat"],"density":"low","maxItems":4,"media":"none","scene":"closing","decorDensity":"high"},
|
|
21
|
+
"use-of-funds": {"candidates":["funding-ask","ring-progress","data-table"],"density":"medium","maxItems":5,"media":"none","scene":"data","decorDensity":"medium"},
|
|
22
|
+
"close": {"candidates":["ending-contact","ending","cover-statement"],"density":"low","maxItems":3,"media":"optional","scene":"closing","decorDensity":"high"}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"banner-columns":{"slots":["banner","col1_title","b1","b2","col2_title","b3","b4","col3_title","b5"],"chart":false},"bento":{"slots":["eyebrow","title","big_title","big_num","big_unit","big_body","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","footer","pageno"],"chart":false},"big-stat":{"slots":["eyebrow","title","stat","unit","lead","note","footer","pageno"],"chart":false},"blocks-2x2":{"slots":["eyebrow","title","intro","block1_title","block1_body","block2_title","block2_body","block3_title","block3_body","block4_title","block4_body","quote","quote_attr","refs","footer","pageno"],"chart":false},"brand-values":{"slots":["eyebrow","title","footer","pageno"],"rows":{"values":["name","body"]},"chart":false},"cards-3":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","footer","pageno"],"chart":false},"cards-grid":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","card5_title","card5_body","card6_title","card6_body","footer","pageno"],"chart":false},"chart-full":{"slots":["eyebrow","title","lead","source","footer","pageno"],"chart":true},"chart-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_label","kpi2_num","kpi2_unit","kpi2_label","footer","pageno"],"chart":true},"color-palette":{"slots":["eyebrow","title","footer","pageno"],"rows":{"swatches":["name","hex"]},"chart":false},"comparison":{"slots":["eyebrow","title","colA_title","dim1","colA_v1","dim2","colA_v2","dim3","colA_v3","badge","colB_title","colB_v1","colB_v2","colB_v3","colC_title","colC_v1","colC_v2","colC_v3","footer","pageno"],"chart":false},"concept-hub":{"slots":["eyebrow","title","center_title","center_body","node1_title","node1_body","node2_title","node2_body","node3_title","node3_body","node4_title","node4_body","footer","pageno"],"chart":false},"cover-centered":{"slots":["eyebrow","title","subtitle","meta"],"chart":false},"cover-image":{"slots":["image_label","eyebrow","title","subtitle"],"chart":false},"cover-minimal":{"slots":["title","subtitle","meta"],"chart":false},"cover-statement":{"slots":["eyebrow","statement","meta"],"chart":false},"cover":{"slots":["eyebrow","title","subtitle","presenter","date"],"chart":false},"data-table":{"slots":["eyebrow","title","col0","col1","col2","col3","r1_key","r1c1","r1c2","r1c3","r2_key","r2c1","r2c2","r2c3","r3_key","r3c1","r3c2","r3c3","r4_key","r4c1","r4c2","r4c3","footer","pageno"],"chart":false},"dos-donts":{"slots":["eyebrow","do_head","do1","do2","do3","do4","dont_head","dont1","dont2","dont3","dont4","footer","pageno"],"chart":false},"editorial-panel":{"slots":["eyebrow","title","lead1","lead2","quote","quote_attr","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","list_title","list1","list2","list3","list4","note"],"chart":false},"ending-contact":{"slots":["eyebrow","title","email","phone","web","addr"],"chart":false},"ending":{"slots":["eyebrow","title","sub","contact"],"chart":false},"funnel":{"slots":["eyebrow","title","s1_label","s1_val","s2_label","s2_val","s3_label","s3_val","s4_label","s4_val","rate_label","rate","footer","pageno"],"chart":false},"gantt":{"slots":["eyebrow","title","footer","pageno"],"rows":{"cols":["label"],"tasks":["name","from","to"]},"chart":false},"hero":{"slots":["eyebrow","title","sub"],"chart":false},"icon-row":{"slots":["eyebrow","title","item1_title","item1_body","item2_title","item2_body","item3_title","item3_body","item4_title","item4_body","footer","pageno"],"chart":false},"image-full":{"slots":["image_label","eyebrow","title","caption","pageno"],"chart":false},"image-grid":{"slots":["eyebrow","title","img1_label","img1_title","img1_body","img2_label","img2_title","img2_body","img3_label","img3_title","img3_body","footer","pageno"],"chart":false},"image-left":{"slots":["eyebrow","title","image_label","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","footer","pageno"],"chart":false},"list":{"slots":["eyebrow","title","item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","footer","pageno"],"chart":false},"logo-guidelines":{"slots":["eyebrow","title","wordmark","tagline","v1_label","v2_label","v3_label","footer","pageno"],"chart":false},"map-distribution":{"slots":["eyebrow","title","footer","pageno"],"rows":{"pins":["x","y"],"regions":["name","pct"]},"chart":false},"map-quad":{"slots":["title","q1_num","q1_unit","q1_label","q1_note","q2_num","q2_unit","q2_label","q2_note","q3_num","q3_unit","q3_label","q3_note","q4_num","q4_unit","q4_label","q4_note","footer","pageno"],"chart":false},"matrix-2x2":{"slots":["eyebrow","title","q1_title","q1_body","q2_title","q2_body","q3_title","q3_body","q4_title","q4_body","footer","pageno"],"chart":false},"numbered-brief":{"slots":["title","para1","para2","quote","source","right_title","item1_title","item2_title","item3_title","item4_title","source_label","source_note","pageno"],"chart":false},"org-tree":{"slots":["eyebrow","title","top","dept1_title","dept1_body","dept2_title","dept2_body","dept3_title","dept3_body","footer","pageno"],"chart":false},"problem-solution-banner":{"slots":["problem_label","problem_body","image_label","solution_body","solution_label"],"chart":false},"problem-solution":{"slots":["eyebrow","title","problem_title","problem_1","problem_2","problem_3","solution_title","solution_1","solution_2","solution_3","footer","pageno"],"chart":false},"pyramid":{"slots":["eyebrow","title","level1","level2","level3","level4","footer","pageno"],"chart":false},"quote-aside":{"slots":["quote","source","footer","pageno"],"chart":false},"quote":{"slots":["eyebrow","quote","source","footer","pageno"],"chart":false},"radar":{"slots":["eyebrow","title","footer","pageno"],"rows":{"metrics":["name","score"]},"chart":"derived"},"ring-progress":{"slots":["eyebrow","title","footer","pageno"],"rows":{"rings":["label","pct","note"]},"chart":false},"section-fullbleed":{"slots":["image_label","desc","index","title"],"chart":false},"section-image":{"slots":["index","eyebrow","title","desc","image_label","footer","pageno"],"chart":false},"section-stat":{"slots":["eyebrow","title","desc","stat","unit","stat_label","footer","pageno"],"chart":false},"section":{"slots":["index","eyebrow","title","desc","footer","pageno"],"chart":false},"split-two-col":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","image_label","footer","pageno"],"chart":false},"stats-chart":{"slots":["brand1","brand2","brand3","title","note"],"chart":true},"steps-serpentine":{"slots":["eyebrow","title","step1_title","step1_body","step2_title","step2_body","step3_title","step3_body","step4_title","step4_body","step5_title","step5_body","step6_title","step6_body","step7_title","step7_body","step8_title","step8_body"],"chart":false},"steps-vertical":{"slots":["eyebrow","title","footer","pageno"],"rows":{"steps":["name","body"]},"chart":false},"steps":{"slots":["eyebrow","title","step1_title","step1_body","step2_title","step2_body","step3_title","step3_body","step4_title","step4_body","footer","pageno"],"chart":false},"team-row":{"slots":["eyebrow","title","footer","pageno"],"rows":{"members":["name","role"]},"chart":false},"three-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_name","kpi1_desc","kpi2_num","kpi2_unit","kpi2_name","kpi2_desc","kpi3_num","kpi3_unit","kpi3_name","kpi3_desc","footer","pageno"],"chart":false},"timeline":{"slots":["eyebrow","title","item1_date","item1_title","item1_desc","item2_date","item2_title","item2_desc","item3_date","item3_title","item3_desc","item4_date","item4_title","item4_desc","footer","pageno"],"chart":false},"title-meta":{"slots":["index","eyebrow","title","subtitle","meta"],"chart":false},"title":{"slots":["eyebrow","title"],"chart":false},"toc-agenda":{"slots":["eyebrow","title","item1_title","item1_dur","item2_title","item2_dur","item3_title","item3_dur","item4_title","item4_dur","item5_title","item5_dur","footer","pageno"],"chart":false},"toc-editorial":{"slots":["item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","title","desc","footer","pageno"],"chart":false},"toc-panel":{"slots":["brand1","brand2","brand3","title"],"rows":{"entries":["name","desc"]},"chart":false},"toc":{"slots":["eyebrow","title","item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","footer","pageno"],"chart":false},"transition":{"slots":["eyebrow","number","title"],"chart":false},"two-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_label","kpi2_num","kpi2_unit","kpi2_label","footer","pageno"],"chart":false},"type-specimen":{"slots":["eyebrow","title","specimen","font_name","weights","heading_label","heading_sample","body_label","body_sample","charset","footer","pageno"],"chart":false},"versus":{"slots":["eyebrow","title","before_title","before_num","before_body","after_title","after_num","after_body","footer","pageno"],"chart":false}}
|
|
1
|
+
{"banner-columns":{"slots":["banner","col1_title","b1","b2","col2_title","b3","b4","col3_title","b5"],"chart":false},"bento":{"slots":["eyebrow","title","big_title","big_num","big_unit","big_body","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","footer","pageno"],"chart":false},"big-stat":{"slots":["eyebrow","title","stat","unit","lead","note","footer","pageno"],"chart":false},"blocks-2x2":{"slots":["eyebrow","title","intro","block1_title","block1_body","block2_title","block2_body","block3_title","block3_body","block4_title","block4_body","quote","quote_attr","refs","footer","pageno"],"chart":false},"brand-values":{"slots":["eyebrow","title","footer","pageno"],"rows":{"values":["name","body"]},"chart":false},"business-model":{"slots":["eyebrow","title","tag","stream1_label","stream1_value","stream1_body","stream2_label","stream2_value","stream2_body","stream3_label","stream3_value","stream3_body","econ1_label","econ1","econ2_label","econ2","footer","pageno"],"chart":false},"cards-3":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","footer","pageno"],"chart":false},"cards-grid":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","card5_title","card5_body","card6_title","card6_body","footer","pageno"],"chart":false},"chart-full":{"slots":["eyebrow","title","lead","source","footer","pageno"],"chart":true},"chart-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_label","kpi2_num","kpi2_unit","kpi2_label","footer","pageno"],"chart":true},"color-palette":{"slots":["eyebrow","title","footer","pageno"],"rows":{"swatches":["name","hex"]},"chart":false},"comparison":{"slots":["eyebrow","title","colA_title","dim1","colA_v1","dim2","colA_v2","dim3","colA_v3","badge","colB_title","colB_v1","colB_v2","colB_v3","colC_title","colC_v1","colC_v2","colC_v3","footer","pageno"],"chart":false},"concept-hub":{"slots":["eyebrow","title","center_title","center_body","node1_title","node1_body","node2_title","node2_body","node3_title","node3_body","node4_title","node4_body","footer","pageno"],"chart":false},"cover-centered":{"slots":["eyebrow","title","subtitle","meta"],"chart":false},"cover-image":{"slots":["image_label","eyebrow","title","subtitle"],"chart":false},"cover-minimal":{"slots":["title","subtitle","meta"],"chart":false},"cover-statement":{"slots":["eyebrow","statement","meta"],"chart":false},"cover":{"slots":["eyebrow","title","subtitle","presenter","date"],"chart":false},"customer-proof":{"slots":["eyebrow","title","quote","person","role","metric1_label","metric1","metric2_label","metric2","logo1","logo2","logo3","logo4","footer","pageno"],"chart":false},"data-table":{"slots":["eyebrow","title","col0","col1","col2","col3","r1_key","r1c1","r1c2","r1c3","r2_key","r2c1","r2c2","r2c3","r3_key","r3c1","r3c2","r3c3","r4_key","r4c1","r4c2","r4c3","footer","pageno"],"chart":false},"dos-donts":{"slots":["eyebrow","do_head","do1","do2","do3","do4","dont_head","dont1","dont2","dont3","dont4","footer","pageno"],"chart":false},"editorial-panel":{"slots":["eyebrow","title","lead1","lead2","quote","quote_attr","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","card4_title","card4_body","list_title","list1","list2","list3","list4","note"],"chart":false},"ending-contact":{"slots":["eyebrow","title","email","phone","web","addr"],"chart":false},"ending":{"slots":["eyebrow","title","sub","contact"],"chart":false},"funding-ask":{"slots":["eyebrow","round","ask","runway","title","use1","pct1","use2","pct2","use3","pct3","footer","pageno"],"chart":false},"funnel":{"slots":["eyebrow","title","s1_label","s1_val","s2_label","s2_val","s3_label","s3_val","s4_label","s4_val","rate_label","rate","footer","pageno"],"chart":false},"gantt":{"slots":["eyebrow","title","footer","pageno"],"rows":{"cols":["label"],"tasks":["name","from","to"]},"chart":false},"hero":{"slots":["eyebrow","title","sub"],"chart":false},"icon-row":{"slots":["eyebrow","title","item1_title","item1_body","item2_title","item2_body","item3_title","item3_body","item4_title","item4_body","footer","pageno"],"chart":false},"image-full":{"slots":["image_label","eyebrow","title","caption","pageno"],"chart":false},"image-grid":{"slots":["eyebrow","title","img1_label","img1_title","img1_body","img2_label","img2_title","img2_body","img3_label","img3_title","img3_body","footer","pageno"],"chart":false},"image-left":{"slots":["eyebrow","title","image_label","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","footer","pageno"],"chart":false},"list":{"slots":["eyebrow","title","item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","footer","pageno"],"chart":false},"logo-guidelines":{"slots":["eyebrow","title","wordmark","tagline","v1_label","v2_label","v3_label","footer","pageno"],"chart":false},"map-distribution":{"slots":["eyebrow","title","footer","pageno"],"rows":{"pins":["x","y"],"regions":["name","pct"]},"chart":false},"map-quad":{"slots":["title","q1_num","q1_unit","q1_label","q1_note","q2_num","q2_unit","q2_label","q2_note","q3_num","q3_unit","q3_label","q3_note","q4_num","q4_unit","q4_label","q4_note","footer","pageno"],"chart":false},"market-rings":{"slots":["eyebrow","title","body","growth","tam_label","tam","sam_label","sam","som_label","som","footer","pageno"],"chart":false},"matrix-2x2":{"slots":["eyebrow","title","q1_title","q1_body","q2_title","q2_body","q3_title","q3_body","q4_title","q4_body","footer","pageno"],"chart":false},"numbered-brief":{"slots":["title","para1","para2","quote","source","right_title","item1_title","item2_title","item3_title","item4_title","source_label","source_note","pageno"],"chart":false},"org-tree":{"slots":["eyebrow","title","top","dept1_title","dept1_body","dept2_title","dept2_body","dept3_title","dept3_body","footer","pageno"],"chart":false},"pitch-problem":{"slots":["eyebrow","title","stat_label","stat","stat_note","point1_title","point1_body","point2_title","point2_body","point3_title","point3_body","footer","pageno"],"chart":false},"pitch-solution":{"slots":["badge","title","lead","pillar1_title","pillar1_body","pillar2_title","pillar2_body","pillar3_title","pillar3_body","footer","pageno"],"chart":false},"pricing-tiers":{"slots":["eyebrow","title","tier1","price1","unit1","tier1_title","tier1_body","featured","tier2","price2","unit2","tier2_title","tier2_body","tier3","price3","unit3","tier3_title","tier3_body","footer","pageno"],"chart":false},"problem-solution-banner":{"slots":["problem_label","problem_body","image_label","solution_body","solution_label"],"chart":false},"problem-solution":{"slots":["eyebrow","title","problem_title","problem_1","problem_2","problem_3","solution_title","solution_1","solution_2","solution_3","footer","pageno"],"chart":false},"product-device":{"slots":["eyebrow","title","body","feature1","feature2","feature3","media_label","screen_title","screen_note","footer","pageno"],"chart":false},"pyramid":{"slots":["eyebrow","title","level1","level2","level3","level4","footer","pageno"],"chart":false},"quote-aside":{"slots":["quote","source","footer","pageno"],"chart":false},"quote":{"slots":["eyebrow","quote","source","footer","pageno"],"chart":false},"radar":{"slots":["eyebrow","title","footer","pageno"],"rows":{"metrics":["name","score"]},"chart":"derived"},"ring-progress":{"slots":["eyebrow","title","footer","pageno"],"rows":{"rings":["label","pct","note"]},"chart":false},"section-fullbleed":{"slots":["image_label","desc","index","title"],"chart":false},"section-image":{"slots":["index","eyebrow","title","desc","image_label","footer","pageno"],"chart":false},"section-stat":{"slots":["eyebrow","title","desc","stat","unit","stat_label","footer","pageno"],"chart":false},"section":{"slots":["index","eyebrow","title","desc","footer","pageno"],"chart":false},"split-two-col":{"slots":["eyebrow","title","card1_title","card1_body","card2_title","card2_body","card3_title","card3_body","image_label","footer","pageno"],"chart":false},"stats-chart":{"slots":["brand1","brand2","brand3","title","note"],"chart":true},"steps-serpentine":{"slots":["eyebrow","title","step1_title","step1_body","step2_title","step2_body","step3_title","step3_body","step4_title","step4_body","step5_title","step5_body","step6_title","step6_body","step7_title","step7_body","step8_title","step8_body"],"chart":false},"steps-vertical":{"slots":["eyebrow","title","footer","pageno"],"rows":{"steps":["name","body"]},"chart":false},"steps":{"slots":["eyebrow","title","step1_title","step1_body","step2_title","step2_body","step3_title","step3_body","step4_title","step4_body","footer","pageno"],"chart":false},"team-founders":{"slots":["eyebrow","title","lead","f1_initials","f1_name","f1_role","f1_bio","f2_initials","f2_name","f2_role","f2_bio","f3_initials","f3_name","f3_role","f3_bio","footer","pageno"],"chart":false},"team-row":{"slots":["eyebrow","title","footer","pageno"],"rows":{"members":["name","role"]},"chart":false},"three-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_name","kpi1_desc","kpi2_num","kpi2_unit","kpi2_name","kpi2_desc","kpi3_num","kpi3_unit","kpi3_name","kpi3_desc","footer","pageno"],"chart":false},"timeline":{"slots":["eyebrow","title","item1_date","item1_title","item1_desc","item2_date","item2_title","item2_desc","item3_date","item3_title","item3_desc","item4_date","item4_title","item4_desc","footer","pageno"],"chart":false},"title-meta":{"slots":["index","eyebrow","title","subtitle","meta"],"chart":false},"title":{"slots":["eyebrow","title"],"chart":false},"toc-agenda":{"slots":["eyebrow","title","item1_title","item1_dur","item2_title","item2_dur","item3_title","item3_dur","item4_title","item4_dur","item5_title","item5_dur","footer","pageno"],"chart":false},"toc-editorial":{"slots":["item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","title","desc","footer","pageno"],"chart":false},"toc-panel":{"slots":["brand1","brand2","brand3","title"],"rows":{"entries":["name","desc"]},"chart":false},"toc":{"slots":["eyebrow","title","item1_title","item1_desc","item2_title","item2_desc","item3_title","item3_desc","item4_title","item4_desc","footer","pageno"],"chart":false},"traction-milestones":{"slots":["eyebrow","title","metric1_label","metric1","metric2_label","metric2","metric3_label","metric3","m1_date","m1","m2_date","m2","m3_date","m3","m4_date","m4","footer","pageno"],"chart":false},"transition":{"slots":["eyebrow","number","title"],"chart":false},"two-kpi":{"slots":["eyebrow","title","kpi1_num","kpi1_unit","kpi1_label","kpi2_num","kpi2_unit","kpi2_label","footer","pageno"],"chart":false},"type-specimen":{"slots":["eyebrow","title","specimen","font_name","weights","heading_label","heading_sample","body_label","body_sample","charset","footer","pageno"],"chart":false},"versus":{"slots":["eyebrow","title","before_title","before_num","before_body","after_title","after_num","after_body","footer","pageno"],"chart":false}}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- layouts/team-founders — Theme V2. role=pitch.team; founders=3. -->
|
|
2
|
+
<section class="slide" data-layout="team-founders" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:66px">{{eyebrow|FOUNDING TEAM}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:106px;width:700px;font-size:calc(50px * var(--type-scale,1))">{{title|为这个问题而生的团队}}</h2><p class="component-copy" style="position:absolute;right:80px;top:120px;width:330px">{{lead|兼具行业经验、技术能力与规模化商业执行。}}</p>
|
|
4
|
+
<div class="component-grid" style="position:absolute;left:80px;right:80px;top:248px;grid-template-columns:repeat(3,1fr)"><div class="team-card"><div class="avatar-frame" style="width:74px;height:74px;display:flex;align-items:center;justify-content:center;background:var(--hair)"><span class="data-chip">{{f1_initials|AL}}</span></div><h3 class="component-title" style="font-size:24px;margin-top:20px">{{f1_name|Alex Lin}}</h3><div class="component-label" style="margin-top:6px">{{f1_role|CEO}}</div><p class="component-copy" style="font-size:14px;margin-top:18px">{{f1_bio|曾负责行业产品与商业化,拥有十年一线经验。}}</p></div><div class="team-card"><div class="avatar-frame" style="width:74px;height:74px;display:flex;align-items:center;justify-content:center;background:var(--hair)"><span class="data-chip">{{f2_initials|MY}}</span></div><h3 class="component-title" style="font-size:24px;margin-top:20px">{{f2_name|Mina Yu}}</h3><div class="component-label" style="margin-top:6px">{{f2_role|CTO}}</div><p class="component-copy" style="font-size:14px;margin-top:18px">{{f2_bio|构建过大规模数据与 AI 平台,带领多学科团队。}}</p></div><div class="team-card"><div class="avatar-frame" style="width:74px;height:74px;display:flex;align-items:center;justify-content:center;background:var(--hair)"><span class="data-chip">{{f3_initials|RC}}</span></div><h3 class="component-title" style="font-size:24px;margin-top:20px">{{f3_name|Ray Chen}}</h3><div class="component-label" style="margin-top:6px">{{f3_role|CRO}}</div><p class="component-copy" style="font-size:14px;margin-top:18px">{{f3_bio|从零搭建企业销售体系并完成全球市场扩张。}}</p></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / TEAM}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|11}}</div></section>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- layouts/traction-milestones — Theme V2. role=pitch.traction; metrics=3; milestones=4. -->
|
|
2
|
+
<section class="slide" data-layout="traction-milestones" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="eyebrow" style="position:absolute;left:80px;top:64px">{{eyebrow|TRACTION}}</div><h2 class="deck-title" style="position:absolute;left:80px;top:104px;font-size:calc(50px * var(--type-scale,1))">{{title|增长已经发生,而且正在加速}}</h2>
|
|
4
|
+
<div class="component-grid" style="position:absolute;left:80px;right:80px;top:206px;grid-template-columns:repeat(3,1fr)"><div class="metric-card"><div class="metric-label">{{metric1_label|ARR}}</div><div class="metric-value" style="margin-top:16px">{{metric1|$3.2M}}</div></div><div class="metric-card metric-card--hero"><div class="metric-label">{{metric2_label|YoY GROWTH}}</div><div class="metric-value" style="margin-top:16px">{{metric2|214%}}</div></div><div class="metric-card"><div class="metric-label">{{metric3_label|NET RETENTION}}</div><div class="metric-value" style="margin-top:16px">{{metric3|132%}}</div></div></div>
|
|
5
|
+
<div style="position:absolute;left:104px;right:104px;top:472px;height:2px;background:var(--hair)"></div><div style="position:absolute;left:80px;right:80px;top:444px;display:grid;grid-template-columns:repeat(4,1fr);gap:24px"><div><span class="timeline-node" style="display:block;margin:22px 0 18px"></span><b class="component-title">{{m1_date|Q1 2025}}</b><p class="component-copy" style="font-size:13px;margin-top:6px">{{m1|产品上线}}</p></div><div><span class="timeline-node" style="display:block;margin:22px 0 18px"></span><b class="component-title">{{m2_date|Q2 2025}}</b><p class="component-copy" style="font-size:13px;margin-top:6px">{{m2|首批付费客户}}</p></div><div><span class="timeline-node" style="display:block;margin:22px 0 18px"></span><b class="component-title">{{m3_date|Q4 2025}}</b><p class="component-copy" style="font-size:13px;margin-top:6px">{{m3|规模化销售}}</p></div><div><span class="timeline-node" style="display:block;margin:22px 0 18px"></span><b class="component-title">{{m4_date|Q2 2026}}</b><p class="component-copy" style="font-size:13px;margin-top:6px">{{m4|进入新市场}}</p></div></div>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:80px;bottom:30px">{{footer|PITCH DECK / TRACTION}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:30px">{{pageno|06}}</div></section>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
:root{--cmp-media-radius:2px;--cmp-media-fit:cover;--cmp-media-filter:saturate(.72) contrast(1.16);--cmp-media-shadow:0 24px 54px rgba(0,0,0,.34)}
|
|
2
|
+
.media-frame:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(0,0,0,.52));pointer-events:none}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
:root{--cmp-media-radius:28px;--cmp-media-fit:cover;--cmp-media-filter:none;--cmp-media-shadow:0 28px 64px rgba(0,0,0,.28)}
|
|
2
|
+
.device-frame{border:8px solid var(--title);outline:1px solid var(--hair)}
|
|
3
|
+
.device-frame:after{content:"";position:absolute;left:50%;top:7px;transform:translateX(-50%);width:22%;height:5px;border-radius:99px;background:var(--muted)}
|