@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
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
:root{--cmp-media-radius:28px;--cmp-media-fit:contain;--cmp-media-filter:saturate(1.08);--cmp-media-shadow:18px 28px 48px rgba(0,0,0,.24)}
|
|
2
|
+
.media-cutout,.media-frame{transform:perspective(900px) rotateY(-7deg) rotateX(3deg);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--hair));background:color-mix(in srgb,var(--accent) 8%,var(--slide-bg))}
|
|
3
|
+
.media-cutout:after,.media-frame:after{content:"";position:absolute;inset:8%;border-radius:50%;background:var(--accent);filter:blur(42px);opacity:.16;z-index:-1}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"transition": {
|
|
3
|
+
"effect": "fade",
|
|
4
|
+
"durMs": 320
|
|
5
|
+
},
|
|
6
|
+
"entrance": {
|
|
7
|
+
"cover": [
|
|
8
|
+
{
|
|
9
|
+
"sel": ".overlay-title",
|
|
10
|
+
"anim": "fade-up",
|
|
11
|
+
"dur": 620
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"cards": [
|
|
15
|
+
{
|
|
16
|
+
"sel": ".card",
|
|
17
|
+
"anim": "appear",
|
|
18
|
+
"stagger": 90
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"transition": {
|
|
3
|
+
"effect": "push",
|
|
4
|
+
"dir": "l",
|
|
5
|
+
"durMs": 420
|
|
6
|
+
},
|
|
7
|
+
"entrance": {
|
|
8
|
+
"cover": [
|
|
9
|
+
{
|
|
10
|
+
"sel": ".cover-sub",
|
|
11
|
+
"anim": "fade-up",
|
|
12
|
+
"dur": 620,
|
|
13
|
+
"delay": 150
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"section": [
|
|
17
|
+
{
|
|
18
|
+
"sel": ".section-desc",
|
|
19
|
+
"anim": "fly-up",
|
|
20
|
+
"delay": 100
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"stat": [
|
|
24
|
+
{
|
|
25
|
+
"sel": ".stat-note",
|
|
26
|
+
"anim": "appear",
|
|
27
|
+
"delay": 220
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
# packs ——
|
|
1
|
+
# packs —— 旧版组合包(兼容保留)
|
|
2
2
|
|
|
3
|
-
pack =
|
|
3
|
+
V1 pack = `pack.css` **加上**一组包专属签名版式。这个耦合模型为旧 deck
|
|
4
|
+
保留;新 deck 应把视觉 Theme 与 `layoutPack` 分开声明,见 `../theme-system.md`。
|
|
4
5
|
|
|
5
6
|
因为 `pack.css` 实现了契约,共享 `layouts/` 的全部结构版式在包内天然可用;
|
|
6
|
-
|
|
7
|
+
旧 spec 未写 `layoutPack` 时,包自带的同名版式仍**包内优先**;新 spec 可用
|
|
8
|
+
`layoutPack:"none"` 只取该包的视觉,或给另一个 style 显式配这个 layout pack。
|
|
7
9
|
|
|
8
10
|
目录结构见 `docs/superpowers/specs/2026-09-01-ppt-tpl-prod-design.md` §5.3。
|
|
9
11
|
|
|
@@ -20,6 +22,8 @@ pack = 实现完整 class 契约的 `pack.css` **加上**一组包专属签名
|
|
|
20
22
|
|---|---|---|---|
|
|
21
23
|
| **board-brief** 董事会简报 | biz-premium | `cover`(顶部密级条 + 标题压到中轴以下,共享版靠留白撑气势)· `toc-agenda`(编号/议题/时长的表格式议程,共享版是卡片列表) | 四角角标 |
|
|
22
24
|
| **press-room** 报刊头版 | editorial | `cover`(报头通栏 + 三分之二版大标题)· `section`(左栏轴 + 并列刊号,共享版是幽灵数字压在标题后)· `quote`(左侧巨型引号 + 右侧不对称引文,共享版是居中) | 顶部报头条 |
|
|
25
|
+
| **prismatic-3d** 棱镜空间 | tech-future | `cover`(左侧超大标题 + 右侧空间棱面)· `section-image`(三角媒体舞台 + 偏轴章节)· `big-stat`(巨型数字 + 角面地平线) | 紫黑棱面 + `spatial-3d` 媒体 |
|
|
26
|
+
| **mckinsey-photo** 咨询影像 | biz-premium | `cover` / `cover-image`(全幅企业照片 + 信息导轨)· `image-left`(55/45 图证分栏)· `numbered-brief`(渐变结论面板) | mckinsey 式咨询结构 + 照片叙事 |
|
|
23
27
|
|
|
24
28
|
## 新增一个包
|
|
25
29
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: crop-marks -->
|
|
2
|
+
<div style="position:absolute;inset:0;background:#FAFDFF"></div>
|
|
3
|
+
<div style="position:absolute;left:44px;top:44px;border-left:1px solid var(--hair);border-top:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;right:44px;top:44px;border-right:1px solid var(--hair);border-top:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
|
|
5
|
+
<div style="position:absolute;left:44px;bottom:44px;border-left:1px solid var(--hair);border-bottom:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
|
|
6
|
+
<div style="position:absolute;right:44px;bottom:44px;border-right:1px solid var(--hair);border-bottom:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- packs/mckinsey-photo/layouts/cover-image — full-bleed corporate image with disciplined information rail. -->
|
|
2
|
+
<section class="slide" data-layout="cover-image" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="media-frame" style="position:absolute;inset:0;border:0;border-radius:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(120deg,var(--title),var(--c2))"><span class="surface-label" style="color:var(--slide-bg)">{{image_label|替换为全幅企业影像}}</span></div><div style="position:absolute;inset:0;background:linear-gradient(90deg,color-mix(in srgb,var(--title) 92%,transparent) 0%,color-mix(in srgb,var(--title) 72%,transparent) 46%,transparent 78%)"></div>
|
|
4
|
+
<div class="eyebrow" style="position:absolute;left:76px;top:88px;color:var(--slide-bg);letter-spacing:.24em">{{eyebrow|EXECUTIVE PERSPECTIVE}}</div><h1 class="overlay-title" style="position:absolute;left:72px;top:186px;width:700px;font-size:calc(76px * var(--type-scale,1));line-height:1.04;color:var(--slide-bg)">{{title|让战略<br>看得见}}</h1><p class="overlay-sub" style="position:absolute;left:76px;top:424px;width:530px;font-size:calc(20px * var(--type-scale,1));line-height:1.55;color:color-mix(in srgb,var(--slide-bg) 82%,transparent)">{{subtitle|用真实场景承载结论,用咨询结构组织证据。}}</p>
|
|
5
|
+
</section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- packs/mckinsey-photo/layouts/cover — photo-led executive cover using the portable shared cover slots. -->
|
|
2
|
+
<section class="slide" data-layout="cover" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="media-frame" aria-hidden="true" style="position:absolute;inset:0;border:0;border-radius:0;background:linear-gradient(120deg,var(--title),var(--c2))"></div><div aria-hidden="true" style="position:absolute;inset:0;background:linear-gradient(90deg,color-mix(in srgb,var(--title) 94%,transparent) 0%,color-mix(in srgb,var(--title) 70%,transparent) 48%,transparent 80%)"></div>
|
|
4
|
+
<div class="eyebrow" style="position:absolute;left:76px;top:88px;color:var(--slide-bg);letter-spacing:.24em">{{eyebrow|EXECUTIVE PERSPECTIVE}}</div><h1 class="cover-title" style="position:absolute;left:72px;top:184px;width:700px;font-size:calc(76px * var(--type-scale,1));line-height:1.04;color:var(--slide-bg)">{{title|让战略<br>看得见}}</h1><p class="cover-sub" style="position:absolute;left:76px;top:424px;width:530px;font-size:calc(20px * var(--type-scale,1));line-height:1.55;color:color-mix(in srgb,var(--slide-bg) 82%,transparent)">{{subtitle|用真实场景承载结论,用咨询结构组织证据。}}</p>
|
|
5
|
+
<div style="position:absolute;left:76px;bottom:52px;color:color-mix(in srgb,var(--slide-bg) 72%,transparent);font-size:calc(12px * var(--type-scale,1))">{{presenter|TALOS ADVISORY}}</div><div style="position:absolute;left:470px;bottom:52px;color:color-mix(in srgb,var(--slide-bg) 72%,transparent);font-size:calc(12px * var(--type-scale,1))">{{date|2026}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- packs/mckinsey-photo/layouts/image-left — 55/45 split photo and evidence column. -->
|
|
2
|
+
<section class="slide" data-layout="image-left" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="media-frame" style="position:absolute;left:0;top:0;width:676px;height:720px;border:0;border-radius:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,var(--hair),color-mix(in srgb,var(--accent) 18%,var(--slide-bg)))"><span class="surface-label">{{image_label|替换为案例现场照片}}</span></div>
|
|
4
|
+
<div style="position:absolute;left:676px;right:0;top:0;bottom:0;padding:76px 72px 64px 64px"><div class="eyebrow">{{eyebrow|CASE STUDY}}</div><h2 class="deck-title" style="font-size:calc(48px * var(--type-scale,1));line-height:1.08;margin-top:24px">{{title|从现场问题<br>走到业务结果}}</h2><div class="rule" style="height:1px;margin:34px 0 22px"></div><div class="card" style="padding:18px 20px;margin-bottom:14px"><b class="card-title">{{card1_title|背景}}</b><p class="card-body" style="margin-top:6px;line-height:1.5">{{card1_body|一句交代客户与业务语境。}}</p></div><div class="card" style="padding:18px 20px;margin-bottom:14px"><b class="card-title">{{card2_title|行动}}</b><p class="card-body" style="margin-top:6px;line-height:1.5">{{card2_body|一句说明关键方案与路径。}}</p></div><div class="card" style="padding:18px 20px"><b class="card-title">{{card3_title|结果}}</b><p class="card-body" style="margin-top:6px;line-height:1.5">{{card3_body|一句量化最终影响。}}</p></div></div>
|
|
5
|
+
<div class="deck-footer" style="position:absolute;left:740px;bottom:28px">{{footer|CASE STUDY}}</div><div class="deck-pageno" style="position:absolute;right:72px;bottom:28px">{{pageno|02}}</div></section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<!-- packs/mckinsey-photo/layouts/numbered-brief — gradient evidence panel for executive summaries. -->
|
|
2
|
+
<section class="slide" data-layout="numbered-brief" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div style="position:absolute;left:0;top:0;bottom:0;width:520px;padding:72px 64px;background:linear-gradient(150deg,var(--title),color-mix(in srgb,var(--accent) 54%,var(--title)));color:var(--slide-bg)"><div class="num-disc" style="width:56px;height:56px;display:flex;align-items:center;justify-content:center;font-weight:800">01</div><h2 class="deck-title" style="color:var(--slide-bg);font-size:calc(52px * var(--type-scale,1));line-height:1.08;margin-top:42px">{{title|管理层<br>先看结论}}</h2><p style="font-size:calc(17px * var(--type-scale,1));line-height:1.7;margin-top:34px;color:color-mix(in srgb,var(--slide-bg) 78%,transparent)">{{para1|把最重要的判断放进一个稳定、克制的色场。}}</p><div style="position:absolute;left:64px;right:64px;bottom:72px;border-left:3px solid var(--accent);padding-left:18px;font-size:calc(14px * var(--type-scale,1));line-height:1.55">{{quote|“影像提供语境,结构负责说服。”}}</div></div>
|
|
4
|
+
<div style="position:absolute;left:588px;right:76px;top:86px"><div class="eyebrow">{{source_label|EXECUTIVE BRIEF}}</div><h3 class="num-item-title" style="font-size:calc(25px * var(--type-scale,1));margin-top:54px">{{right_title|三条必须带走的信息}}</h3><div style="margin-top:28px;display:grid;gap:18px"><div class="card" style="padding:20px 24px"><b class="card-title">{{item1_title|增长来自核心客户扩张}}</b></div><div class="card" style="padding:20px 24px"><b class="card-title">{{item2_title|交付周期缩短至六周}}</b></div><div class="card" style="padding:20px 24px"><b class="card-title">{{item3_title|组织能力已经可复制}}</b></div><div class="card" style="padding:20px 24px"><b class="card-title">{{item4_title|下一阶段聚焦规模化}}</b></div></div><p class="brief-quote-attr" style="margin-top:24px">{{source_note|来源:项目数据与客户访谈}}</p></div><div class="deck-pageno" style="position:absolute;right:76px;bottom:30px">{{pageno|03}}</div>
|
|
5
|
+
</section>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* packs/mckinsey-photo — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/mckinsey-photo/family.json.
|
|
2
|
+
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
|
+
:root{
|
|
4
|
+
--space-scale:0.88; --type-scale:0.95;
|
|
5
|
+
--accent:#1074A7; --c1:#1074A7; --c2:#645DD4; --c3:#C22B93; --c4:#D02841; --chart-1:#1074A7;
|
|
6
|
+
--title:#003044; --body:#375366; --muted:#687987; --foot:#687987;
|
|
7
|
+
--hair:#CFDCE6; --card-radius:4px;
|
|
8
|
+
--font-head:'IBM Plex Sans','Noto Sans SC',sans-serif;
|
|
9
|
+
--font-body:'IBM Plex Sans','Noto Sans SC',sans-serif;
|
|
10
|
+
--title-color:#003044; --body-color:#375366; --slide-bg:#FAFDFF; --font-heading:var(--font-head);
|
|
11
|
+
}
|
|
12
|
+
.slide{background:#FAFDFF;color:var(--body);font-family:var(--font-body)}
|
|
13
|
+
.slide-backdrop{position:absolute;inset:0;background:#FAFDFF}
|
|
14
|
+
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
|
+
.rule,.rule-foot{background:var(--hair)}
|
|
16
|
+
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.accent-bar{background:var(--accent)}
|
|
18
|
+
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
|
|
19
|
+
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
20
|
+
.card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
|
|
21
|
+
.card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
|
|
22
|
+
.card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
|
|
23
|
+
.card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
|
|
24
|
+
.card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
|
|
25
|
+
.card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
|
|
26
|
+
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)}
|
|
27
|
+
.kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: diagonal-band -->
|
|
2
|
+
<div style="position:absolute;inset:0;background:#270E28"></div>
|
|
3
|
+
<div style="position:absolute;right:-60px;top:-40px;width:260px;height:820px;background:var(--accent);opacity:.14;transform:rotate(18deg);pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;right:96px;top:-40px;width:2px;height:820px;background:var(--accent);opacity:.5;transform:rotate(18deg);pointer-events:none"></div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- packs/prismatic-3d/layouts/big-stat — oversized metric held by an angular horizon. -->
|
|
2
|
+
<section class="slide" data-layout="big-stat" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div aria-hidden="true" style="position:absolute;right:-24px;bottom:-90px;width:720px;height:510px;background:linear-gradient(132deg,color-mix(in srgb,var(--c3) 72%,transparent),color-mix(in srgb,var(--accent) 24%,transparent));clip-path:polygon(26% 0,100% 18%,82% 100%,0 72%);opacity:.52"></div>
|
|
4
|
+
<div class="eyebrow" style="position:absolute;left:82px;top:72px;letter-spacing:.32em">{{eyebrow|SIGNAL}}</div><h2 class="deck-title" style="position:absolute;left:78px;top:108px;width:640px;font-size:calc(52px * var(--type-scale,1));line-height:1.08">{{title|一个数字,建立全场判断}}</h2>
|
|
5
|
+
<div class="stat-num" style="position:absolute;left:74px;top:276px;font-size:calc(230px * var(--type-scale,1));line-height:.78;letter-spacing:-5px;display:flex;align-items:baseline">{{stat|72}}<span class="stat-unit" style="font-size:calc(34px * var(--type-scale,1));font-weight:700;letter-spacing:0;margin-left:18px">{{unit|%}}</span></div>
|
|
6
|
+
<div style="position:absolute;right:84px;top:246px;width:360px"><h3 class="stat-lead" style="font-size:calc(26px * var(--type-scale,1));line-height:1.3">{{lead|关键流程已经自动闭环}}</h3><p class="stat-note" style="font-size:calc(17px * var(--type-scale,1));line-height:1.65;margin-top:22px">{{note|把数据放回语境,让受众知道这个变化为何重要。}}</p></div><div class="deck-footer" style="position:absolute;left:82px;bottom:34px">{{footer|PRISMATIC 3D}}</div><div class="deck-pageno" style="position:absolute;right:82px;bottom:34px">{{pageno|03}}</div></section>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- packs/prismatic-3d/layouts/cover — original faceted hero; uses only shared cover slots. -->
|
|
2
|
+
<section class="slide" data-layout="cover" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div aria-hidden="true" style="position:absolute;right:-80px;top:-90px;width:590px;height:620px;background:linear-gradient(145deg,var(--c2),var(--accent));clip-path:polygon(48% 0,100% 22%,86% 80%,35% 100%,0 54%);opacity:.32;transform:rotate(8deg)"></div>
|
|
4
|
+
<div aria-hidden="true" style="position:absolute;right:140px;top:120px;width:360px;height:360px;background:linear-gradient(145deg,var(--c3),var(--c1));clip-path:polygon(50% 0,100% 100%,0 72%);opacity:.74;filter:drop-shadow(26px 34px 40px color-mix(in srgb,var(--accent) 28%,transparent));transform:perspective(800px) rotateY(-18deg) rotateZ(7deg)"></div>
|
|
5
|
+
<div class="eyebrow" style="position:absolute;left:82px;top:84px;font-size:calc(13px * var(--type-scale,1));letter-spacing:.34em">{{eyebrow|PRISMATIC / 01}}</div>
|
|
6
|
+
<h1 class="cover-title" style="position:absolute;left:78px;top:172px;width:700px;font-size:calc(96px * var(--type-scale,1));line-height:.94;letter-spacing:-1px">{{title|空间智能<br>进入现实}}</h1>
|
|
7
|
+
<p class="cover-sub" style="position:absolute;left:82px;top:444px;width:520px;font-size:calc(20px * var(--type-scale,1));line-height:1.55">{{subtitle|用清晰的结构讲述复杂技术、产品与未来趋势。}}</p>
|
|
8
|
+
<div class="rule" style="position:absolute;left:82px;bottom:88px;width:520px;height:1px"></div><div class="deck-footer" style="position:absolute;left:82px;bottom:56px;font-size:calc(12px * var(--type-scale,1))">{{presenter|TALOS STUDIO}}</div><div class="deck-footer" style="position:absolute;left:470px;bottom:56px;font-size:calc(12px * var(--type-scale,1))">{{date|2026}}</div>
|
|
9
|
+
</section>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- packs/prismatic-3d/layouts/section-image — triangular media stage + offset chapter title. -->
|
|
2
|
+
<section class="slide" data-layout="section-image" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
+
<div class="media-frame" style="position:absolute;left:-36px;top:72px;width:610px;height:576px;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,color-mix(in srgb,var(--c2) 42%,var(--slide-bg)),color-mix(in srgb,var(--accent) 18%,var(--slide-bg)))"><span class="surface-label">{{image_label|替换为章节主视觉}}</span></div>
|
|
4
|
+
<div class="section-ghost" style="position:absolute;right:72px;top:78px;font-size:calc(172px * var(--type-scale,1));line-height:1;font-family:var(--font-head);color:color-mix(in srgb,var(--accent) 18%,transparent)">{{index|01}}</div>
|
|
5
|
+
<div class="eyebrow" style="position:absolute;left:660px;top:238px;font-size:calc(13px * var(--type-scale,1));letter-spacing:.32em">{{eyebrow|CHAPTER}}</div><h2 class="section-title" style="position:absolute;left:654px;right:76px;top:278px;font-size:calc(66px * var(--type-scale,1));line-height:1.02">{{title|构建空间<br>叙事}}</h2><p class="section-desc" style="position:absolute;left:660px;right:98px;top:454px;font-size:calc(18px * var(--type-scale,1));line-height:1.6">{{desc|让图像、数字和观点在同一条视觉轴线上展开。}}</p>
|
|
6
|
+
<div class="deck-footer" style="position:absolute;left:660px;bottom:36px">{{footer|PRISMATIC 3D}}</div><div class="deck-pageno" style="position:absolute;right:80px;bottom:36px">{{pageno|02}}</div></section>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* packs/prismatic-3d — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/prismatic-3d/family.json.
|
|
2
|
+
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
|
+
:root{
|
|
4
|
+
--space-scale:0.98; --type-scale:1.06;
|
|
5
|
+
--accent:#E168CF; --c1:#E168CF; --c2:#8E88FA; --c3:#099DEE; --c4:#1FA3C4; --chart-1:#E168CF;
|
|
6
|
+
--title:#F8F1FA; --body:#C8BDCC; --muted:#938898; --foot:#938898;
|
|
7
|
+
--hair:#523A52; --card-radius:4px;
|
|
8
|
+
--font-head:'Big Shoulders Display','Noto Sans SC',sans-serif;
|
|
9
|
+
--font-body:'Manrope','Noto Sans SC',sans-serif;
|
|
10
|
+
--title-color:#F8F1FA; --body-color:#C8BDCC; --slide-bg:#270E28; --font-heading:var(--font-head);
|
|
11
|
+
}
|
|
12
|
+
.slide{background:#270E28;color:var(--body);font-family:var(--font-body)}
|
|
13
|
+
.slide-backdrop{position:absolute;inset:0;background:#270E28}
|
|
14
|
+
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
|
+
.rule,.rule-foot{background:var(--hair)}
|
|
16
|
+
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.accent-bar{background:var(--accent)}
|
|
18
|
+
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
19
|
+
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
20
|
+
.card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
|
|
21
|
+
.card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
|
|
22
|
+
.card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
|
|
23
|
+
.card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
|
|
24
|
+
.card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
|
|
25
|
+
.card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
|
|
26
|
+
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
|
|
27
|
+
.kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
28
|
+
.media-frame,.media-cutout{border-radius:0;clip-path:polygon(12% 0,100% 0,88% 100%,0 82%);border:1px solid var(--accent)}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "agency-pitch",
|
|
3
|
+
"name_cn": "服务提案",
|
|
4
|
+
"slides": [
|
|
5
|
+
{"intent":"cover","required":true},
|
|
6
|
+
{"intent":"problem","required":true},
|
|
7
|
+
{"intent":"solution","required":true},
|
|
8
|
+
{"intent":"customer-proof","required":true},
|
|
9
|
+
{"intent":"pricing","required":true},
|
|
10
|
+
{"intent":"team","required":false},
|
|
11
|
+
{"intent":"close","required":true}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "product-launch",
|
|
3
|
+
"name_cn": "产品发布",
|
|
4
|
+
"slides": [
|
|
5
|
+
{"intent":"cover","required":true},
|
|
6
|
+
{"intent":"problem","required":true},
|
|
7
|
+
{"intent":"solution","required":true},
|
|
8
|
+
{"intent":"product-demo","required":true},
|
|
9
|
+
{"intent":"customer-proof","required":false},
|
|
10
|
+
{"intent":"pricing","required":false},
|
|
11
|
+
{"intent":"close","required":true}
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "startup-fundraising",
|
|
3
|
+
"name_cn": "创业融资",
|
|
4
|
+
"slides": [
|
|
5
|
+
{"intent":"cover","required":true},
|
|
6
|
+
{"intent":"problem","required":true},
|
|
7
|
+
{"intent":"solution","required":true},
|
|
8
|
+
{"intent":"product-demo","required":true},
|
|
9
|
+
{"intent":"market-size","required":true},
|
|
10
|
+
{"intent":"traction","required":true},
|
|
11
|
+
{"intent":"business-model","required":true},
|
|
12
|
+
{"intent":"competition","required":true},
|
|
13
|
+
{"intent":"go-to-market","required":true},
|
|
14
|
+
{"intent":"financials","required":false},
|
|
15
|
+
{"intent":"team","required":true},
|
|
16
|
+
{"intent":"funding-ask","required":true},
|
|
17
|
+
{"intent":"close","required":true}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Legacy skin catalog + Theme V2 family paint
|
|
2
|
+
|
|
3
|
+
`styles/` remains the stable V1 paint layer and public style-id backing store. Modern decks
|
|
4
|
+
opt into the complete Theme V2 composition through `../theme-system.json`; the 13 entries
|
|
5
|
+
in catalog collection `original-13` are frozen to V1 at commit `7306d8e5`. Do not move or
|
|
6
|
+
rename these directories. See `../theme-system.md` for component/media/art-direction composition and
|
|
7
|
+
the backward-compatibility contract.
|
|
2
8
|
|
|
3
9
|
**族名单的真源是 `catalog.json`**(groups + entries),本文件是人读的说明;新增族
|
|
4
10
|
两边都要更新。`verify-catalog.mjs` **不读本文件** —— 它比对的是 `catalog.json`
|
|
5
11
|
与磁盘(样图/CSS/motion 是否存在、`styles/<id>` 目录有没有漏登记、oneliner 有没有
|
|
6
12
|
超长),所以"目录建了但没登记"抓得住,"登记了但本 README 忘了写"抓不住,只能靠人。
|
|
7
13
|
|
|
8
|
-
A **skin** =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
A V1 **skin** = family paint (colors + fonts + background + core tokens). Theme V2 keeps
|
|
15
|
+
that asset intact and adds a component profile, media treatment and art direction. Pick one family
|
|
16
|
+
for the whole deck; media treatment may be overridden without changing the family.
|
|
17
|
+
|
|
18
|
+
Modern: `html2pptx deck.html out.pptx --style <name> --theme-v2 [--media-style <id>] [--backdrop <variant>]`
|
|
12
19
|
|
|
13
|
-
`html2pptx deck.html out.pptx --style <name> [--backdrop <variant>]`
|
|
20
|
+
Initial classic: `html2pptx deck.html out.pptx --style <name> [--backdrop <variant>]`
|
|
14
21
|
|
|
15
22
|
## The skins
|
|
16
23
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
.cmp-col--rec 的 box-shadow(4/39 —— cinereel 与 magazine-ink 没写)。
|
|
27
27
|
保留下来的 `.cmp-col--rec{border}` 实测 0/39:没写 border 的 swiss-grid 在自己的
|
|
28
28
|
`.cmp-col` 规则里定了边(同特异性、位置在后),仍然赢过兜底。
|
|
29
|
-
改完必须重跑 `node scripts/deck-fidelity.mjs`(它现在会注入本文件,此前不注入,
|
|
29
|
+
改完必须重跑 `node scripts/deck/deck-fidelity.mjs`(它现在会注入本文件,此前不注入,
|
|
30
30
|
所以这个文件曾经完全在像素闸门的视野之外),并按
|
|
31
31
|
`.claude/skills/ppt-tpl-prod/SKILL.md`"改 _contract-defaults.css"一节做
|
|
32
32
|
注入/不注入的对照渲染 —— deck-fidelity 的 32x18 签名对这类细微改动不够敏感。 */
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature:
|
|
1
|
+
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: rail-dots -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#1A252B"></div>
|
|
3
|
-
<div style="position:absolute;left:
|
|
4
|
-
<div style="position:absolute;
|
|
3
|
+
<div style="position:absolute;left:68px;top:104px;bottom:92px;width:2px;background:var(--hair);pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;left:69px;top:150px;width:12px;height:12px;border-radius:50%;background:var(--accent);transform:translate(-50%,-50%);pointer-events:none"></div>
|
|
5
|
+
<div style="position:absolute;left:69px;top:242px;width:8px;height:8px;border-radius:50%;background:var(--hair);transform:translate(-50%,-50%);pointer-events:none"></div>
|
|
6
|
+
<div style="position:absolute;left:69px;top:334px;width:8px;height:8px;border-radius:50%;background:var(--hair);transform:translate(-50%,-50%);pointer-events:none"></div>
|
|
7
|
+
<div style="position:absolute;left:69px;top:426px;width:8px;height:8px;border-radius:50%;background:var(--hair);transform:translate(-50%,-50%);pointer-events:none"></div>
|
|
8
|
+
<div style="position:absolute;left:69px;top:518px;width:8px;height:8px;border-radius:50%;background:var(--hair);transform:translate(-50%,-50%);pointer-events:none"></div>
|
|
@@ -25,3 +25,4 @@
|
|
|
25
25
|
.card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
|
|
26
26
|
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)}
|
|
27
27
|
.kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
28
|
+
.media-frame,.media-cutout{border-radius:50% 50% 0 0 / 62% 62% 0 0;border-bottom:6px solid var(--accent)}
|
|
@@ -25,3 +25,6 @@
|
|
|
25
25
|
.card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
|
|
26
26
|
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)}
|
|
27
27
|
.kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
28
|
+
.badge,.tag{border-radius:7px 7px 7px 1px;background:var(--accent);border-color:var(--accent);color:var(--slide-bg)}
|
|
29
|
+
.quote-card{position:relative;background:color-mix(in srgb,var(--accent) 12%,var(--slide-bg));border:1px solid var(--accent);overflow:visible}
|
|
30
|
+
.quote-card:after{content:"";position:absolute;left:30px;bottom:-15px;border-top:15px solid var(--accent);border-right:18px solid transparent}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"componentBase": "components/base.css",
|
|
4
|
+
"artBase": "art-directions/base.css",
|
|
5
|
+
"componentProfiles": {
|
|
6
|
+
"clean": "components/profiles/clean.css",
|
|
7
|
+
"glass": "components/profiles/glass.css",
|
|
8
|
+
"editorial": "components/profiles/editorial.css",
|
|
9
|
+
"poster": "components/profiles/poster.css",
|
|
10
|
+
"organic": "components/profiles/organic.css",
|
|
11
|
+
"luxury": "components/profiles/luxury.css"
|
|
12
|
+
},
|
|
13
|
+
"mediaStyles": {
|
|
14
|
+
"clean-product": "media-styles/clean-product.css",
|
|
15
|
+
"device-stage": "media-styles/device-stage.css",
|
|
16
|
+
"editorial-photo": "media-styles/editorial-photo.css",
|
|
17
|
+
"cutout-collage": "media-styles/cutout-collage.css",
|
|
18
|
+
"illustrated": "media-styles/illustrated.css",
|
|
19
|
+
"cinematic": "media-styles/cinematic.css",
|
|
20
|
+
"spatial-3d": "media-styles/spatial-3d.css"
|
|
21
|
+
},
|
|
22
|
+
"artDirections": {
|
|
23
|
+
"geometric-pop": "art-directions/geometric-pop.css",
|
|
24
|
+
"gradient-mesh": "art-directions/gradient-mesh.css",
|
|
25
|
+
"editorial-cut": "art-directions/editorial-cut.css",
|
|
26
|
+
"collage-paper": "art-directions/collage-paper.css",
|
|
27
|
+
"illustrated-doodle": "art-directions/illustrated-doodle.css",
|
|
28
|
+
"cinematic-depth": "art-directions/cinematic-depth.css",
|
|
29
|
+
"luxury-ornament": "art-directions/luxury-ornament.css",
|
|
30
|
+
"technical-grid": "art-directions/technical-grid.css",
|
|
31
|
+
"maximalist-blocks": "art-directions/maximalist-blocks.css"
|
|
32
|
+
},
|
|
33
|
+
"bindings": {
|
|
34
|
+
"cool": {"componentProfile":"glass","mediaStyle":"device-stage","artDirection":"gradient-mesh"},
|
|
35
|
+
"neon-cyber": {"componentProfile":"glass","mediaStyle":"cinematic","artDirection":"cinematic-depth"},
|
|
36
|
+
"prismatic-3d": {"componentProfile":"glass","mediaStyle":"spatial-3d","artDirection":"cinematic-depth"},
|
|
37
|
+
"swiss-grid": {"componentProfile":"clean","mediaStyle":"clean-product","artDirection":"geometric-pop"},
|
|
38
|
+
"black-gold": {"componentProfile":"luxury","mediaStyle":"cinematic","artDirection":"luxury-ornament"},
|
|
39
|
+
"olive-gold": {"componentProfile":"luxury","mediaStyle":"editorial-photo","artDirection":"luxury-ornament"},
|
|
40
|
+
"mckinsey": {"componentProfile":"clean","mediaStyle":"clean-product","artDirection":"editorial-cut"},
|
|
41
|
+
"mckinsey-photo": {"componentProfile":"clean","mediaStyle":"editorial-photo","artDirection":"editorial-cut"},
|
|
42
|
+
"apple": {"componentProfile":"clean","mediaStyle":"device-stage","artDirection":"gradient-mesh"},
|
|
43
|
+
"mono": {"componentProfile":"clean","mediaStyle":"editorial-photo","artDirection":"editorial-cut"},
|
|
44
|
+
"ivory-gold": {"componentProfile":"luxury","mediaStyle":"editorial-photo","artDirection":"luxury-ornament"},
|
|
45
|
+
"magazine-ink": {"componentProfile":"editorial","mediaStyle":"editorial-photo","artDirection":"editorial-cut"},
|
|
46
|
+
"anthropic": {"componentProfile":"organic","mediaStyle":"illustrated","artDirection":"illustrated-doodle"},
|
|
47
|
+
"hand-drawn": {"componentProfile":"organic","mediaStyle":"illustrated","artDirection":"illustrated-doodle"},
|
|
48
|
+
"cinereel": {"componentProfile":"editorial","mediaStyle":"cinematic","artDirection":"cinematic-depth"},
|
|
49
|
+
"branding": {"componentProfile":"organic","mediaStyle":"editorial-photo","artDirection":"collage-paper"},
|
|
50
|
+
"dark-glass": {"componentProfile":"glass","mediaStyle":"device-stage","artDirection":"cinematic-depth"},
|
|
51
|
+
"grid-tech": {"componentProfile":"clean","mediaStyle":"device-stage","artDirection":"technical-grid"},
|
|
52
|
+
"pastel-saas": {"componentProfile":"organic","mediaStyle":"clean-product","artDirection":"gradient-mesh"},
|
|
53
|
+
"memphis": {"componentProfile":"poster","mediaStyle":"cutout-collage","artDirection":"maximalist-blocks"},
|
|
54
|
+
"retro-press": {"componentProfile":"editorial","mediaStyle":"cutout-collage","artDirection":"collage-paper"},
|
|
55
|
+
"bold-clash": {"componentProfile":"poster","mediaStyle":"cutout-collage","artDirection":"maximalist-blocks"},
|
|
56
|
+
"organic-earth": {"componentProfile":"organic","mediaStyle":"editorial-photo","artDirection":"illustrated-doodle"},
|
|
57
|
+
"press-room": {"componentProfile":"editorial","mediaStyle":"editorial-photo","artDirection":"editorial-cut"},
|
|
58
|
+
"board-brief": {"componentProfile":"clean","mediaStyle":"clean-product","artDirection":"technical-grid"},
|
|
59
|
+
"campus-teal": {"componentProfile":"organic","mediaStyle":"illustrated","artDirection":"illustrated-doodle"},
|
|
60
|
+
"clinic-care": {"componentProfile":"clean","mediaStyle":"clean-product","artDirection":"geometric-pop"},
|
|
61
|
+
"wedding-blush": {"componentProfile":"organic","mediaStyle":"editorial-photo","artDirection":"illustrated-doodle"},
|
|
62
|
+
"portfolio-noir": {"componentProfile":"luxury","mediaStyle":"editorial-photo","artDirection":"cinematic-depth"},
|
|
63
|
+
"bistro-warm": {"componentProfile":"organic","mediaStyle":"editorial-photo","artDirection":"collage-paper"},
|
|
64
|
+
"gov-brief": {"componentProfile":"clean","mediaStyle":"clean-product","artDirection":"technical-grid"},
|
|
65
|
+
"sport-arena": {"componentProfile":"poster","mediaStyle":"cinematic","artDirection":"maximalist-blocks"},
|
|
66
|
+
"legal-slate": {"componentProfile":"clean","mediaStyle":"editorial-photo","artDirection":"editorial-cut"}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Theme V2 — composable deck design system
|
|
2
|
+
|
|
3
|
+
Theme V2 separates five decisions that the old pack model coupled together:
|
|
4
|
+
|
|
5
|
+
1. **Theme** (`style`) — palette, typography, background and family identity.
|
|
6
|
+
2. **Component profile** — cards, metrics, pricing, quotes, tables, badges and data UI.
|
|
7
|
+
3. **Media style** — product/device, editorial photo, collage, illustration or cinematic treatment.
|
|
8
|
+
4. **Art direction** — large color fields, pattern language, decorative geometry and page atmosphere.
|
|
9
|
+
5. **Layout + recipe** — content geometry per slide and narrative order per deck.
|
|
10
|
+
|
|
11
|
+
`theme-system.json` binds every existing catalog id to one component profile, one
|
|
12
|
+
default media style and one art direction. A deck can override only the media treatment;
|
|
13
|
+
art direction remains part of the Theme identity and layout selection stays separate.
|
|
14
|
+
|
|
15
|
+
Component profiles: `clean`, `glass`, `editorial`, `poster`, `organic`, `luxury`.
|
|
16
|
+
They alter radius, border weight, depth, surface behavior, label typography and emphasis
|
|
17
|
+
patterns across the full semantic component contract (cards, KPI, proof, pricing, quote,
|
|
18
|
+
table, chart, workflow, funding and CTA).
|
|
19
|
+
|
|
20
|
+
Media styles: `clean-product`, `device-stage`, `editorial-photo`, `cutout-collage`,
|
|
21
|
+
`illustrated`, `cinematic`, `spatial-3d`. They can be changed independently for a deck or
|
|
22
|
+
a bespoke page while the Theme's color, type, background and component grammar remain.
|
|
23
|
+
|
|
24
|
+
Art directions: `geometric-pop`, `gradient-mesh`, `editorial-cut`, `collage-paper`,
|
|
25
|
+
`illustrated-doodle`, `cinematic-depth`, `luxury-ornament`, `technical-grid`,
|
|
26
|
+
`maximalist-blocks`. The renderer injects a decoration-only backdrop canvas for these
|
|
27
|
+
profiles. Each uses the selected family's full `--c1`…`--c4` ramp rather than only its
|
|
28
|
+
accent, so Theme differences include composition and motif—not merely hue.
|
|
29
|
+
|
|
30
|
+
## Page scenes and deck rhythm
|
|
31
|
+
|
|
32
|
+
`deck-build` maps each slide intent to one visual scene: `hero`, `content`, `data`,
|
|
33
|
+
`media` or `closing`. The scene controls which art-direction motifs remain visible;
|
|
34
|
+
`decorDensity` (`low`, `medium`, `high`) controls their combined intensity. With the
|
|
35
|
+
default `decorRhythm:"auto"`, adjacent high-intensity pages are softened, long medium
|
|
36
|
+
runs receive a low beat, and repeated scenes cycle deterministic motif variants.
|
|
37
|
+
|
|
38
|
+
Authors normally provide only `intent`. Use a per-slide `scene` or `decorDensity` only
|
|
39
|
+
for a deliberate override. Set top-level `decorRhythm:"steady"` to keep the intent
|
|
40
|
+
profile's density unchanged. These fields require `themeVersion:2` and never select or
|
|
41
|
+
rewrite a layout.
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"style": "cool",
|
|
46
|
+
"themeVersion": 2,
|
|
47
|
+
"decorRhythm": "auto",
|
|
48
|
+
"mediaStyle": "device-stage",
|
|
49
|
+
"layoutPack": "none",
|
|
50
|
+
"slides": [
|
|
51
|
+
{"intent":"problem", "layout":"pitch-problem", "slots":{}},
|
|
52
|
+
{"intent":"product-demo", "layout":"product-device", "slots":{}}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`deck-build` emits the matching render command:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
html2pptx deck.html out.pptx --style cool --theme-v2 --media-style device-stage
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Compatibility
|
|
64
|
+
|
|
65
|
+
- Existing `{style:"cool"}` specs and `html2pptx --style cool` calls remain V1 and
|
|
66
|
+
render exactly as before.
|
|
67
|
+
- `catalog.json` collection `original-13` freezes the initial roster at commit
|
|
68
|
+
`7306d8e5` with `renderMode:"classic-v1"`. Those entries keep current bug/font/contrast
|
|
69
|
+
fixes but reject `themeVersion:2`, `--theme-v2`, media overrides, scene controls and
|
|
70
|
+
Theme V2-only layouts. Their samples and fidelity cover baselines are rendered in V1.
|
|
71
|
+
- `themeVersion:2` adds component, media and art-direction layers; it does not change
|
|
72
|
+
the selected layout.
|
|
73
|
+
- Existing `{style:"press-room"}` keeps the legacy implicit same-name layout pack.
|
|
74
|
+
New specs should state `layoutPack:"press-room"` or `layoutPack:"none"` explicitly.
|
|
75
|
+
- `--theme <theme.json>` is a different legacy document recolor path and is not Theme V2.
|
|
76
|
+
|
|
77
|
+
## Content-first layout selection
|
|
78
|
+
|
|
79
|
+
Use `layouts/profiles.json`. Match `intent`, then check density, item capacity and media
|
|
80
|
+
requirement before selecting a candidate. `deck-build` warns when a slide's explicit
|
|
81
|
+
layout is outside the candidate list and errors on unknown intents. It never forces a
|
|
82
|
+
layout merely because a visual Theme was selected.
|
|
83
|
+
|
|
84
|
+
The ten layouts listed in `themeV2Layouts` use the new semantic component contract and
|
|
85
|
+
therefore require `themeVersion:2`; `deck-build` rejects a V1 attempt before writing HTML.
|
|
86
|
+
All pre-existing layouts remain valid in both V1 and V2.
|
|
87
|
+
|
|
88
|
+
Pitch recipes live in `recipes/`. They describe narrative roles, not fixed visual pages,
|
|
89
|
+
so the same fundraising story can render in a clean consulting Theme, neon product Theme
|
|
90
|
+
or editorial Theme without changing its content contract.
|
|
91
|
+
|
|
92
|
+
## Coverage and provenance
|
|
93
|
+
|
|
94
|
+
The 18 pitch intents cover problem, solution, product, market, competition, business
|
|
95
|
+
model, pricing, traction, go-to-market, economics, financials, proof, team, ask and close.
|
|
96
|
+
The visual archetypes are clean-room abstractions informed by broad category patterns,
|
|
97
|
+
including the SlidesCarnival pitch-deck index: geometric color fields, gradient/3D depth,
|
|
98
|
+
editorial cropping, paper collage, illustration/doodles, ornament, grids and maximalist
|
|
99
|
+
blocks. Do not copy third-party template assets or page geometry. SlidesCarnival templates
|
|
100
|
+
are CC BY 4.0 and embedded photos may carry separate licenses; importing an actual template
|
|
101
|
+
requires preserving attribution and asset credits.
|