@taloswork/ose-shared 0.1.11 → 0.1.12
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 +143 -215
- package/skills/document/art-directions/base.css +27 -2
- package/skills/document/art-directions/cinematic-depth.css +3 -1
- package/skills/document/art-directions/collage-paper.css +5 -1
- package/skills/document/art-directions/editorial-cut.css +5 -1
- package/skills/document/art-directions/geometric-pop.css +6 -0
- package/skills/document/art-directions/gradient-mesh.css +5 -1
- package/skills/document/art-directions/illustrated-doodle.css +5 -0
- package/skills/document/art-directions/luxury-ornament.css +4 -1
- package/skills/document/art-directions/maximalist-blocks.css +6 -0
- package/skills/document/art-directions/technical-grid.css +4 -0
- package/skills/document/assets/fonts/fonts.json +2 -2
- package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Bold.ttf +0 -0
- package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Regular.ttf +0 -0
- package/skills/document/assets/pdf-fonts/OFL.txt +93 -0
- package/skills/document/assets/pdf-fonts/README.md +35 -0
- package/skills/document/assets/tessdata/LICENSE-Apache-2.0.txt +202 -0
- package/skills/document/assets/tessdata/README.md +21 -0
- package/skills/document/assets/tessdata/chi_sim.traineddata.gz +0 -0
- package/skills/document/assets/tessdata/eng.traineddata.gz +0 -0
- package/skills/document/bin/deck-build.cjs +2311 -41
- package/skills/document/bin/deck-chart.cjs +762 -0
- package/skills/document/bin/deck-plan.cjs +802 -0
- package/skills/document/bin/deck-qa.cjs +984 -249
- package/skills/document/bin/deck-scenario.cjs +1346 -0
- package/skills/document/bin/doc-convert.cjs +130 -39
- package/skills/document/bin/doc-fill.cjs +73121 -170
- package/skills/document/bin/doc-gen.cjs +625 -68
- package/skills/document/bin/doc-run.cjs +162 -24
- package/skills/document/bin/doc-scan.cjs +13 -0
- package/skills/document/bin/doc-text.cjs +13 -0
- package/skills/document/bin/doc-validate.cjs +718 -23
- package/skills/document/bin/doc-xml.cjs +9 -5
- package/skills/document/bin/docx-annotate.cjs +95 -19
- package/skills/document/bin/fontkit.cjs +1 -0
- package/skills/document/bin/html2pptx.cjs +1372 -121
- package/skills/document/bin/ocr-worker.cjs +1 -0
- package/skills/document/bin/ocr.cjs +131 -40
- package/skills/document/bin/pdf-form.cjs +674 -177
- package/skills/document/bin/pdf-images.cjs +13 -0
- package/skills/document/bin/pdf-ops.cjs +634 -199
- package/skills/document/bin/pdf-render.cjs +19 -3
- package/skills/document/bin/pdf-tables.cjs +13 -0
- package/skills/document/bin/pptx-clone.cjs +3 -3
- package/skills/document/bin/pptx-slide.cjs +3 -3
- package/skills/document/bin/xlsx-query.cjs +192 -61
- package/skills/document/bin-reference.md +56 -33
- package/skills/document/content-pipeline.md +129 -242
- package/skills/document/deck-design.md +355 -638
- package/skills/document/layouts/README.md +46 -33
- package/skills/document/layouts/capacity.json +1 -0
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/layouts/toc-panel.tpl +1 -1
- package/skills/document/motion/README.md +3 -2
- package/skills/document/office.md +3 -3
- package/skills/document/packs/board-brief/backdrop.html +2 -0
- package/skills/document/packs/board-brief/pack.css +2 -1
- package/skills/document/packs/mckinsey-photo/backdrop.html +2 -0
- package/skills/document/packs/mckinsey-photo/pack.css +2 -1
- package/skills/document/packs/press-room/backdrop.html +2 -0
- package/skills/document/packs/press-room/pack.css +2 -1
- package/skills/document/packs/prismatic-3d/backdrop.html +2 -0
- package/skills/document/packs/prismatic-3d/pack.css +4 -1
- package/skills/document/pdf.md +53 -49
- package/skills/document/rewrite.md +241 -308
- package/skills/document/scenarios.json +1290 -0
- package/skills/document/scenarios.schema.json +103 -0
- package/skills/document/styles/README.md +15 -25
- package/skills/document/styles/_contract-defaults.css +25 -1
- package/skills/document/styles/anthropic/skin.css +6 -3
- package/skills/document/styles/apple/skin.css +4 -3
- package/skills/document/styles/bistro-warm/backdrop.html +2 -0
- package/skills/document/styles/bistro-warm/skin.css +4 -1
- package/skills/document/styles/black-gold/skin.css +6 -5
- package/skills/document/styles/bold-clash/backdrop.html +2 -0
- package/skills/document/styles/bold-clash/skin.css +2 -1
- package/skills/document/styles/branding/skin.css +4 -4
- package/skills/document/styles/campus-teal/backdrop.html +2 -0
- package/skills/document/styles/campus-teal/skin.css +2 -1
- package/skills/document/styles/cinereel/skin.css +7 -3
- package/skills/document/styles/clinic-care/backdrop.html +2 -0
- package/skills/document/styles/clinic-care/skin.css +2 -1
- package/skills/document/styles/cool/skin.css +6 -5
- package/skills/document/styles/dark-glass/backdrop.html +2 -0
- package/skills/document/styles/dark-glass/skin.css +2 -1
- package/skills/document/styles/gov-brief/backdrop.html +2 -0
- package/skills/document/styles/gov-brief/skin.css +2 -1
- package/skills/document/styles/grid-tech/backdrop.html +2 -0
- package/skills/document/styles/grid-tech/skin.css +2 -1
- package/skills/document/styles/hand-drawn/skin.css +3 -3
- package/skills/document/styles/ivory-gold/skin.css +7 -6
- package/skills/document/styles/legal-slate/backdrop.html +2 -0
- package/skills/document/styles/legal-slate/skin.css +2 -1
- package/skills/document/styles/magazine-ink/skin.css +4 -3
- package/skills/document/styles/mckinsey/skin.css +2 -1
- package/skills/document/styles/memphis/backdrop.html +2 -0
- package/skills/document/styles/memphis/skin.css +2 -1
- package/skills/document/styles/mono/skin.css +6 -2
- package/skills/document/styles/neon-cyber/backdrop.html +2 -0
- package/skills/document/styles/neon-cyber/skin.css +2 -1
- package/skills/document/styles/olive-gold/skin.css +7 -6
- package/skills/document/styles/organic-earth/backdrop.html +2 -0
- package/skills/document/styles/organic-earth/skin.css +2 -1
- package/skills/document/styles/pastel-saas/backdrop.html +2 -0
- package/skills/document/styles/pastel-saas/skin.css +2 -1
- package/skills/document/styles/portfolio-noir/backdrop.html +2 -0
- package/skills/document/styles/portfolio-noir/skin.css +2 -1
- package/skills/document/styles/retro-press/backdrop.html +2 -0
- package/skills/document/styles/retro-press/skin.css +2 -1
- package/skills/document/styles/sport-arena/backdrop.html +2 -0
- package/skills/document/styles/sport-arena/skin.css +4 -1
- package/skills/document/styles/swiss-grid/skin.css +10 -5
- package/skills/document/styles/wedding-blush/backdrop.html +2 -0
- package/skills/document/styles/wedding-blush/skin.css +4 -1
- package/skills/document/theme-system.md +85 -77
- package/skills/document/themes/README.md +7 -5
- package/skills/document/vision.md +8 -5
- package/skills/document/xlsx.md +15 -25
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "scenarios.schema.json",
|
|
4
|
+
"title": "Deck scenario matrix",
|
|
5
|
+
"description": "Single source of truth for the deck scenario matrix. The tables in content-pipeline.md and packages/core/src/document/deck-scenarios.data.ts are generated from it (node scripts/deck/gen-scenarios.mjs). Cross-field rules (unique ids, styleBias ids exist, lowercase motion keywords, no '/' inside a term) are enforced by validateScenarioMatrix in packages/core/src/document/deck-scenarios.ts.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["scenarios", "narratives", "styleBias", "motionExtraKeywords"],
|
|
9
|
+
"$defs": {
|
|
10
|
+
"text": { "type": "string", "minLength": 1, "pattern": "^\\S(.*\\S)?$" },
|
|
11
|
+
"textList": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/text" } },
|
|
12
|
+
"keywordList": { "type": "array", "items": { "$ref": "#/$defs/text" } },
|
|
13
|
+
"delivery": { "enum": ["presented", "read"] }
|
|
14
|
+
},
|
|
15
|
+
"properties": {
|
|
16
|
+
"$schema": { "type": "string" },
|
|
17
|
+
"scenarios": {
|
|
18
|
+
"type": "array",
|
|
19
|
+
"minItems": 1,
|
|
20
|
+
"items": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"required": ["id", "tone", "density", "requiredSections", "narrative", "pages"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"id": { "$ref": "#/$defs/text", "description": "Scenario name as the clarify gate records it; no whitespace." },
|
|
26
|
+
"subtitle": { "$ref": "#/$defs/text", "description": "Alias / gloss shown after the bold id in the md row." },
|
|
27
|
+
"tone": { "$ref": "#/$defs/textList" },
|
|
28
|
+
"density": { "$ref": "#/$defs/textList" },
|
|
29
|
+
"densityEmphasis": { "type": "boolean" },
|
|
30
|
+
"requiredSections": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"minItems": 1,
|
|
33
|
+
"items": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"required": ["terms"],
|
|
37
|
+
"properties": {
|
|
38
|
+
"terms": { "$ref": "#/$defs/textList", "description": "A section is present when any outline title contains any term (case-insensitive substring). Write every section bilingual (English + 中文 terms): an English-only row misses every good Chinese outline (a wasted model re-feed each time), and a Chinese-only row misses Chinese decks that really write Problem / Ask / Demo. Pick narrow Chinese terms (\"融资\" alone would let a cover titled 我们的融资故事 satisfy Ask). One term is matched as a whole string, so split 关键成果(STAR) into [\"关键成果\", \"STAR\"]. Use the singular (Module matches Module 1; Modules does not), and give sections that are Chinese by nature their English term too (练习/示例 needs Exercise)." },
|
|
39
|
+
"key": { "type": "boolean", "description": "Bold in the md table — the section this scenario most needs." },
|
|
40
|
+
"content": { "$ref": "#/$defs/text", "description": "What this section must contain: the elements and the evidence, then an optional recommended shape after 「;宜」 (e.g. 融资金额、资金用途占比、到下一轮的里程碑;宜 饼图或拆分). Neutral words only (大数字 / 对比表 / 时间轴), not one renderer's shape ids — Talos and Ada both read it. Printed by bin/deck-scenario.cjs; not rendered into the md tables (the deck path's byte budget)." }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"narrative": { "$ref": "#/$defs/text" },
|
|
45
|
+
"pages": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["min", "max"],
|
|
49
|
+
"properties": { "min": { "type": "integer", "minimum": 1 }, "max": { "type": "integer", "minimum": 1 } }
|
|
50
|
+
},
|
|
51
|
+
"researchFocus": { "$ref": "#/$defs/textList" },
|
|
52
|
+
"motion": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"required": ["delivery", "keywords"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"delivery": { "$ref": "#/$defs/delivery" },
|
|
58
|
+
"keywords": { "$ref": "#/$defs/textList", "description": "Lowercase substrings matched against the spec's scenario." }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"narratives": {
|
|
65
|
+
"description": "Phase 2 narrative shapes. Rendered as the 'Deck type | Structure | Chapter flow' table in content-pipeline.md — that header is an external contract (Ada parses it).",
|
|
66
|
+
"type": "array",
|
|
67
|
+
"minItems": 1,
|
|
68
|
+
"items": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": ["deckType", "structure", "flow"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"deckType": { "$ref": "#/$defs/text" },
|
|
74
|
+
"structure": { "$ref": "#/$defs/text" },
|
|
75
|
+
"flow": { "$ref": "#/$defs/textList", "description": "Chapter flow in order; rendered joined by ' → '." }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"styleBias": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"additionalProperties": false,
|
|
84
|
+
"required": ["tones", "scenarios", "look", "styles"],
|
|
85
|
+
"properties": {
|
|
86
|
+
"tones": { "$ref": "#/$defs/textList" },
|
|
87
|
+
"scenarios": { "$ref": "#/$defs/textList" },
|
|
88
|
+
"look": { "$ref": "#/$defs/text" },
|
|
89
|
+
"styles": { "$ref": "#/$defs/keywordList" }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"motionExtraKeywords": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["presented", "read"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"presented": { "$ref": "#/$defs/keywordList" },
|
|
99
|
+
"read": { "$ref": "#/$defs/keywordList" }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -23,7 +23,7 @@ Initial classic: `html2pptx deck.html out.pptx --style <name> [--backdrop <varia
|
|
|
23
23
|
|
|
24
24
|
| skin | light/dark | 适用场景 | signature |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| **cool**
|
|
26
|
+
| **cool** | dark | 科技 · 发布 · pitch · 主题演讲 | 深蓝 + 蓝青辉光 + 玻璃卡 + **Sora** 几何无衬线 + **右上仪表刻度尺** |
|
|
27
27
|
| **black-gold** | dark | 金融 · 年报 · 路演 · 奢侈品 · 高端商务 | 纯黑 + 金辉光 + **Bodoni Moda** 高反差 didone + **双线证书内框** |
|
|
28
28
|
| **apple** | dark | 产品发布 · 主题演讲 · 极简演示 | 纯黑舞台 + 最大留白(`--space-scale:1.22`)+ **Manrope** + **底部地平线与反射** |
|
|
29
29
|
| **olive-gold** | dark | 高端 · 证书 · 招商 · 品牌 | 深橄榄金 + 亮金 + **Marcellus** 古典罗马体 + **四角雕版角标** |
|
|
@@ -53,27 +53,9 @@ Initial classic: `html2pptx deck.html out.pptx --style <name> [--backdrop <varia
|
|
|
53
53
|
| **legal-slate** | light | 法务 · 合规 · 尽调 · 风险评估 | 石板白 + 墨绿 + **Lora** 衬线 + 宋体系 CJK + **四角裁切框**(生成族) |
|
|
54
54
|
| **swiss-grid** | light | 科技产品 · 数据汇报 · 设计/工程分享 · 年度总结 | 全无衬线 + 克莱因蓝单色高亮 + 极致字号反差(标题细/KPI 粗)+ 零阴影零圆角零渐变 + 点阵网格底纹 |
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
**Picker one-liner** — the option `description` in the style question. Use these
|
|
60
|
-
**VERBATIM** (one short line, must NOT wrap); do NOT append palette/首选/风/keynote
|
|
61
|
-
padding of your own:
|
|
62
|
-
- `cool` → **深蓝辉光 · 科技发布** · `black-gold` → **纯黑金辉 · 高端商务** ·
|
|
63
|
-
`apple` → **纯黑极简 · 产品发布** · `olive-gold` → **橄榄亮金 · 高端招商** ·
|
|
64
|
-
`mckinsey` → **白底藏青 · 咨询评审** · `anthropic` → **奶油珊瑚 · AI 研究** ·
|
|
65
|
-
`branding` → **暖米绿意 · 品牌手册** · `hand-drawn` → **纸感手绘 · 创意教学** ·
|
|
66
|
-
`mono` → **纯白黑灰 · 极简设计** · `ivory-gold` → **奶油青铜 · 奢华极简** ·
|
|
67
|
-
`cinereel` → **黑白胶片 · 影视创意** · `magazine-ink` → **瓷白靛蓝 · 杂志人文** ·
|
|
68
|
-
`swiss-grid` → **克莱因蓝白 · 瑞士国际** · `neon-cyber` → **霓虹品红 · 赛博夜场** ·
|
|
69
|
-
`dark-glass` → **石墨冰蓝 · 产品评审** · `grid-tech` → **近黑荧绿 · 工程评审** ·
|
|
70
|
-
`pastel-saas` → **薰衣草白 · SaaS 提案** · `memphis` → **米白撞色 · 创意提案** ·
|
|
71
|
-
`retro-press` → **旧纸砖红 · 文化叙事** · `bold-clash` → **亮黄墨黑 · 发布造势** ·
|
|
72
|
-
`organic-earth` → **苔绿陶土 · 可持续** · `campus-teal` → **浅青板书 · 教学课件** ·
|
|
73
|
-
`clinic-care` → **洁净浅蓝 · 医疗健康** · `wedding-blush` → **胭脂米白 · 婚礼请柬** ·
|
|
74
|
-
`portfolio-noir` → **炭黑铜金 · 作品集** · `bistro-warm` → **奶油辣椒红 · 餐饮门店** ·
|
|
75
|
-
`gov-brief` → **素白藏蓝 · 政务汇报** · `sport-arena` → **夜场亮橙 · 赛事发布** ·
|
|
76
|
-
`legal-slate` → **石板墨绿 · 法务合规**
|
|
56
|
+
Which skin to offer is decided by SKILL.md's style picker from `catalog.json` (scenario
|
|
57
|
+
ranking, `entry.oneliner` copied verbatim) — this table is background, not a roster or a
|
|
58
|
+
default.
|
|
77
59
|
|
|
78
60
|
## 皮肤靠什么区分(不只是配色)
|
|
79
61
|
|
|
@@ -116,11 +98,12 @@ Pick one with `--backdrop <variant>`: html2pptx checks `styles/<skin>/backdrop-
|
|
|
116
98
|
to `styles/_backdrops/<variant>.html` — so every skin can select every variant, not
|
|
117
99
|
just the ones that happen to have a local copy.
|
|
118
100
|
|
|
119
|
-
Leave `--backdrop` unset and html2pptx **auto-picks** from [the skin's
|
|
120
|
-
`backdrop.html`] ∪ [the shared pool], seeded by the deck's own HTML content — the
|
|
101
|
+
Leave `--backdrop` unset on a V1 render and html2pptx **auto-picks** from [the skin's
|
|
102
|
+
own `backdrop.html`] ∪ [the shared pool], seeded by the deck's own HTML content — the
|
|
121
103
|
same deck.html always resolves to the same variant (stable across the QA
|
|
122
104
|
fix-loop's re-renders), but different decks usually land on a different one, so
|
|
123
|
-
repeat generations of one skin don't all look identical.
|
|
105
|
+
repeat generations of one skin don't all look identical. Under `--theme-v2` there is
|
|
106
|
+
no auto-pick: the art direction owns the backdrop.
|
|
124
107
|
|
|
125
108
|
Opt-outs (auto-pick skips these; `--backdrop` still works explicitly if ever
|
|
126
109
|
needed): `mckinsey`, `mono` → 纯色(no backdrop, by design) · `cinereel` → 常驻胶片
|
|
@@ -141,3 +124,10 @@ saturated). Every skin must define `--chart-1` as a solid hex: a softened, panel
|
|
|
141
124
|
version of the accent (the `deck-layouts` guard enforces it). `stats-chart` also draws
|
|
142
125
|
its panel light (`[data-layout="stats-chart"] .panel`) so the chart reads; the shared
|
|
143
126
|
dark contrast `.panel` stays for `toc-panel`.
|
|
127
|
+
|
|
128
|
+
SVG charts (`chartRender:"svg"`) paint through chart tokens that fall back to the page's:
|
|
129
|
+
`--chart-ink/-muted/-title/-grid/-surface` (→ `--body/--muted/--title/--hair/--slide-bg`),
|
|
130
|
+
`--chart-accent` (→ `--accent`) and `--series-1..4` (→ `--c1..--c4`). A `.panel` whose
|
|
131
|
+
ground differs from the page (a light panel on a dark skin) must redefine them on itself;
|
|
132
|
+
`--series-n` also fixes a ramp whose neighbours are too close for chart lines without
|
|
133
|
+
touching the cards that use `--c1..--c4`. `deck-skin-contrast` measures both.
|
|
@@ -44,9 +44,33 @@
|
|
|
44
44
|
.tl-date{color:var(--title);font-family:var(--font-head)}
|
|
45
45
|
/* concept hub */
|
|
46
46
|
.hub-center{background:transparent;border:1px solid var(--accent);color:var(--title)}
|
|
47
|
-
/* image overlays — 压在图/scrim
|
|
47
|
+
/* image overlays — 压在图/scrim 上,与皮肤明暗无关。.overlay-sub 此前没有兜底:
|
|
48
|
+
生成族皮肤不写它,满版图的副标题/图注就继承浅色皮肤的深色正文色,压在暗渐变上读不出来。
|
|
49
|
+
13 套原版全部自己写了 .overlay-sub 的 color,这条对它们是惰性的。 */
|
|
48
50
|
.scrim{background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.55) 100%)}
|
|
49
51
|
.overlay-title{color:rgba(255,255,255,1)}
|
|
52
|
+
.overlay-sub{color:rgba(255,255,255,.86)}
|
|
53
|
+
/* 满版图压字的"可读底线"—— 本文件里唯一一条**有意**改变所有族观感的规则(只在这三个版式)。
|
|
54
|
+
scrim 只从底部往上压暗(皮肤 .scrim:26% 处起步、底端 .55–.68;另两个版式是 tpl 内联的
|
|
55
|
+
底部渐变),而压图文字并不都在它里面:cover-image 的 eyebrow 在 470px,落在渐变的肩部
|
|
56
|
+
(只有 ~.3 的暗度);image-full 的 eyebrow(顶 64px)和 section-fullbleed 的引子(右上
|
|
57
|
+
100px 起)在渐变完全透明的上半幅。图一亮(或没放图、只剩浅色占位框),浅色字的背后就是
|
|
58
|
+
亮底 —— 实测 1.0–1.8:1。这里在图(.surface)之上、scrim 与文字之下补一层,只盖文字
|
|
59
|
+
所在的区域,保证那里至少 ~.55 的暗度,与图本身多亮无关;皮肤自己的 .scrim 原样保留、
|
|
60
|
+
叠在它上面。tests/integration/deck-skin-overlays.test.ts 用亮图守着这条。 */
|
|
61
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .surface::after{content:"";position:absolute;inset:0;pointer-events:none}
|
|
62
|
+
.slide[data-layout="cover-image"] .surface::after{background:linear-gradient(180deg,rgba(0,0,0,0) 50%,rgba(0,0,0,.45) 62%,rgba(0,0,0,.3) 100%)}
|
|
63
|
+
.slide[data-layout="image-full"] .surface::after{background:linear-gradient(180deg,rgba(0,0,0,.6) 0%,rgba(0,0,0,.55) 18%,rgba(0,0,0,0) 34%)}
|
|
64
|
+
.slide[data-layout="section-fullbleed"] .surface::after{background:radial-gradient(ellipse 86% 64% at 100% 0%,rgba(0,0,0,.7) 0%,rgba(0,0,0,.55) 55%,rgba(0,0,0,.2) 80%,rgba(0,0,0,0) 95%)}
|
|
65
|
+
/* 同一个底线下的眉题:压在暗底上就得是浅色。原版皮肤的眉题是 --accent(mckinsey 藏青、
|
|
66
|
+
anthropic 陶土、magazine-ink 墨色……),在暗底上 1.1–2.4:1;这里给中性的图上浅色,与
|
|
67
|
+
.overlay-sub 同档。皮肤自己写了图上眉题色的(生成族的 accent 提亮色、mono 的白)
|
|
68
|
+
用同一个选择器、排在后面,照旧赢。 */
|
|
69
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:rgba(255,255,255,.86)}
|
|
70
|
+
/* section 的幽灵大编号 —— 只描边、不填色。此前不在契约里:生成族皮肤不写它,幽灵编号
|
|
71
|
+
就继承正文色、实心 430px 压在章节标题上。13 套原版都自己写了 color /
|
|
72
|
+
-webkit-text-stroke / font-family 三项,这条对它们是惰性的。 */
|
|
73
|
+
.section-ghost{color:transparent;-webkit-text-stroke:1px var(--hair);font-family:var(--font-head)}
|
|
50
74
|
/* data table */
|
|
51
75
|
.dt-head{color:var(--title);border-bottom:1px solid var(--hair)}
|
|
52
76
|
/* figures */
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。研究分享:呼吸感。 */
|
|
6
6
|
--space-scale:1.05; --type-scale:1.0;
|
|
7
7
|
--accent:#CC785C; --c1:#CC785C; --c2:#7C9082; --c3:#BD5D3E; --c4:#B7A99A; --chart-1:#C4785C;
|
|
8
|
-
|
|
8
|
+
/* 图表系列色(只给 SVG 图表):--c1 与 --c3 是两种陶土(ΔE_ok 7.2),"我们"和"竞品 B"分不开;
|
|
9
|
+
--c1..--c4 还画卡片 rail,所以另配一组 —— 陶土 / 石板蓝 / 墨 / 鼠尾草。 */
|
|
10
|
+
--series-1:#CC785C; --series-2:#4F6D8C; --series-3:#3D3A33; --series-4:#7C9082;
|
|
11
|
+
--title:#191919; --body:#514B3F; --muted:#6B6558; --foot:#8F8776;
|
|
9
12
|
--hair:#DDD6C7; --card-radius:12px;
|
|
10
13
|
--font-head:'Fraunces','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
11
14
|
--font-body:'Public Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
@@ -94,11 +97,11 @@
|
|
|
94
97
|
.toc-brand{color:var(--title)}
|
|
95
98
|
|
|
96
99
|
/* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
|
|
97
|
-
.num-disc{background:var(--accent);color:#
|
|
100
|
+
.num-disc{background:var(--accent);color:#191919} .num-item-title{color:var(--title)}
|
|
98
101
|
.brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
|
|
99
102
|
|
|
100
103
|
/* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
|
|
101
|
-
.banner{background:var(--accent)} .banner-title{color:#
|
|
104
|
+
.banner{background:var(--accent)} .banner-title{color:#191919}
|
|
102
105
|
.col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
|
|
103
106
|
|
|
104
107
|
/* backdrop 弧线(.bd-arc)作用域:仅结构页 + 单焦点页显示,内容/数据/图片页保持干净 */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
5
5
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。发布会舞台:超大留白,标题略放。 */
|
|
6
6
|
--space-scale:1.22; --type-scale:1.04;
|
|
7
|
-
--accent:#F5F5F7; --c1:#F5F5F7; --c2:#C7C7CC; --c3:#98989D; --c4:#636366; --chart-1:#6E6E73;
|
|
7
|
+
--accent:#F5F5F7; --c1:#F5F5F7; --c2:#C7C7CC; --c3:#98989D; --c4:#636366; --chart-1:#6E6E73; --series-1:#F5F5F7; --series-2:#C2C2C7; --series-3:#929297; --series-4:#646467;
|
|
8
8
|
--title:#F5F5F7; --body:#A1A1A6; --muted:#86868B; --foot:#636366;
|
|
9
9
|
--hair:rgba(255,255,255,.09); --card-radius:20px;
|
|
10
10
|
--font-head:'Manrope','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
@@ -82,8 +82,9 @@
|
|
|
82
82
|
.ring-num{color:var(--title)}
|
|
83
83
|
|
|
84
84
|
/* toc-panel: 深色 skin → 浅色对比面板 */
|
|
85
|
-
|
|
86
|
-
.panel
|
|
85
|
+
/* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
|
|
86
|
+
.panel{background:#F2F2F4;box-shadow:0 24px 60px rgba(0,0,0,.4);--chart-surface:#F2F2F4;--chart-ink:#3D3D3E;--chart-muted:#636365;--chart-title:#1A1A1C;--chart-grid:#D1D1D3;--chart-1:#6E6E73;--chart-accent:#6E6E73;--series-1:#585859;--series-2:#2D2D31;--series-3:#86868A;--series-4:#424245}
|
|
87
|
+
.panel-item-title{color:#1D1D1F;font-family:var(--font-head)}
|
|
87
88
|
.panel-item-desc{color:#4A4636}
|
|
88
89
|
.toc-brand{color:var(--title)}
|
|
89
90
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: diagonal-band -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#FEEEE3"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="diagonal-band" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<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
5
|
<div style="position:absolute;right:96px;top:-40px;width:2px;height:820px;background:var(--accent);opacity:.5;transform:rotate(18deg);pointer-events:none"></div>
|
|
6
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:1; --type-scale:1.04;
|
|
5
|
-
--accent:#C43C3C; --c1:#C43C3C; --c2:#9B5F0B; --c3:#67730E; --c4:#037E3F; --chart-1:#C43C3C;
|
|
5
|
+
--accent:#C43C3C; --c1:#C43C3C; --c2:#9B5F0B; --c3:#67730E; --c4:#037E3F; --chart-1:#C43C3C; --series-1:#C43C3C; --series-2:#794907; --series-3:#859237; --series-4:#08763B;
|
|
6
6
|
--title:#3A2823; --body:#62514D; --muted:#8D7B76; --foot:#8D7B76;
|
|
7
7
|
--hair:#ECCEC6; --card-radius:4px;
|
|
8
8
|
--font-head:'Zilla Slab','Songti SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#EDC5C5}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -25,3 +26,5 @@
|
|
|
25
26
|
.card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
|
|
26
27
|
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
|
|
27
28
|
.kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
29
|
+
.slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer > *{translate:230px 0}
|
|
30
|
+
.slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer{-webkit-mask-image:var(--decor-safe-mask);mask-image:var(--decor-safe-mask)}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
4
4
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。年报:庄重的边距。 */
|
|
5
5
|
--space-scale:1.1; --type-scale:1.0;
|
|
6
|
-
--accent:#D4AF37; --c1:#D4AF37; --c2:#E7C08A; --c3:#C9A24B; --c4:#F5D98B; --chart-1:#B8912C;
|
|
6
|
+
--accent:#D4AF37; --c1:#D4AF37; --c2:#E7C08A; --c3:#C9A24B; --c4:#F5D98B; --chart-1:#B8912C; --series-1:#D4AF37; --series-2:#FFDEB1; --series-3:#A57F22; --series-4:#E4C97B;
|
|
7
7
|
--title:#F6E8C2; --body:#b3a887; --muted:#8a7f63; --foot:#6a614a;
|
|
8
8
|
--hair:rgba(212,175,55,.16); --card-radius:16px;
|
|
9
9
|
--font-head:'Bodoni Moda','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
@@ -85,17 +85,18 @@
|
|
|
85
85
|
[data-layout="cover"] .bd-arc,[data-layout="cover-centered"] .bd-arc,[data-layout="cover-statement"] .bd-arc,[data-layout="cover-minimal"] .bd-arc,[data-layout="title"] .bd-arc,[data-layout="title-meta"] .bd-arc,[data-layout="section"] .bd-arc,[data-layout="section-stat"] .bd-arc,[data-layout="transition"] .bd-arc,[data-layout="ending"] .bd-arc,[data-layout="ending-contact"] .bd-arc,[data-layout="quote"] .bd-arc,[data-layout="hero"] .bd-arc,[data-layout="big-stat"] .bd-arc{display:block}
|
|
86
86
|
|
|
87
87
|
/* toc-panel: 深色 skin → 浅色对比面板 */
|
|
88
|
-
|
|
89
|
-
.panel
|
|
88
|
+
/* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
|
|
89
|
+
.panel{background:#F3EEDD;box-shadow:0 24px 60px rgba(0,0,0,.4);--chart-surface:#F3EEDD;--chart-ink:#413D31;--chart-muted:#676357;--chart-title:#1E1A10;--chart-grid:#D5D1C3;--chart-1:#AA8317;--chart-accent:#AA8317;--series-1:#6B5505;--series-2:#3F2902;--series-3:#A68023;--series-4:#524004}
|
|
90
|
+
.panel-item-title{color:#7F6820;font-family:var(--font-head)}
|
|
90
91
|
.panel-item-desc{color:#4A4636}
|
|
91
92
|
.toc-brand{color:var(--title)}
|
|
92
93
|
|
|
93
94
|
/* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
|
|
94
|
-
.num-disc{background:var(--accent);color:#
|
|
95
|
+
.num-disc{background:var(--accent);color:#0B0B0D} .num-item-title{color:var(--title)}
|
|
95
96
|
.brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
|
|
96
97
|
|
|
97
98
|
/* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
|
|
98
|
-
.banner{background:var(--accent)} .banner-title{color:#
|
|
99
|
+
.banner{background:var(--accent)} .banner-title{color:#0B0B0D}
|
|
99
100
|
.col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
|
|
100
101
|
/* black-gold 招牌:奶油浅带 + 描金大写标题(还原参考) */
|
|
101
102
|
.banner{background:var(--title)} .banner-title{color:var(--accent)}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: spine -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#FFE87D"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="spine" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;left:0;top:0;bottom:0;width:26px;background:var(--hair);opacity:.55;pointer-events:none"></div>
|
|
4
5
|
<div style="position:absolute;left:0;top:96px;height:216px;width:26px;background:var(--accent);pointer-events:none"></div>
|
|
6
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:0.9; --type-scale:1.12;
|
|
5
|
-
--accent:#BF257D; --c1:#BF257D; --c2:#905E0A; --c3:#02774C; --c4:#047193; --chart-1:#BF257D;
|
|
5
|
+
--accent:#BF257D; --c1:#BF257D; --c2:#905E0A; --c3:#02774C; --c4:#047193; --chart-1:#BF257D; --series-1:#BF257D; --series-2:#8C5A01; --series-3:#036E46; --series-4:#2985A8;
|
|
6
6
|
--title:#221F15; --body:#4A473D; --muted:#716D60; --foot:#716D60;
|
|
7
7
|
--hair:#C2B68A; --card-radius:4px;
|
|
8
8
|
--font-head:'Anton','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#ECBED8}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
6
6
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。品牌手册:书页般的宽边距。 */
|
|
7
7
|
--space-scale:1.12; --type-scale:0.98;
|
|
8
|
-
--accent:#7A9A72; --c1:#7A9A72; --c2:#B79C6E; --c3:#5E7D5A; --c4:#A9A288; --chart-1:#6F9169;
|
|
9
|
-
--title:#26261F; --body:#57574A; --muted:#8A876F; --foot:#
|
|
8
|
+
--accent:#7A9A72; --c1:#7A9A72; --c2:#B79C6E; --c3:#5E7D5A; --c4:#A9A288; --chart-1:#6F9169; --series-1:#72926B; --series-2:#755C2F; --series-3:#274424; --series-4:#7A745B;
|
|
9
|
+
--title:#26261F; --body:#57574A; --muted:#8A876F; --foot:#8B8874;
|
|
10
10
|
--hair:#DFD8C5; --card-radius:10px;
|
|
11
11
|
--font-head:'Cormorant Garamond','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
12
12
|
--font-body:'Karla','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
@@ -82,11 +82,11 @@
|
|
|
82
82
|
.toc-brand{color:var(--title)}
|
|
83
83
|
|
|
84
84
|
/* numbered-brief: 实心编号盘 + 左条引用 */
|
|
85
|
-
.num-disc{background:var(--accent);color:#
|
|
85
|
+
.num-disc{background:var(--accent);color:#26261F} .num-item-title{color:var(--title)}
|
|
86
86
|
.brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
|
|
87
87
|
|
|
88
88
|
/* banner-columns: 通栏标题带 + 3 栏 */
|
|
89
|
-
.banner{background:var(--accent)} .banner-title{color:#
|
|
89
|
+
.banner{background:var(--accent)} .banner-title{color:#26261F}
|
|
90
90
|
.col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
|
|
91
91
|
|
|
92
92
|
/* color-palette layout: 色板填色走 ramp 变量(每皮肤用自身配色) */
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: dot-matrix -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#E1F8F6"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="dot-matrix" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;inset:0;background-image:radial-gradient(var(--hair) 1.4px,transparent 1.4px);background-size:28px 28px;opacity:.85;pointer-events:none"></div>
|
|
5
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:1.06; --type-scale:1.02;
|
|
5
|
-
--accent:#0E6A63; --c1:#0E6A63; --c2:#11677E; --c3:#1860A5; --c4:#7F498F; --chart-1:#0E6A63;
|
|
5
|
+
--accent:#0E6A63; --c1:#0E6A63; --c2:#11677E; --c3:#1860A5; --c4:#7F498F; --chart-1:#0E6A63; --series-1:#0E6A63; --series-2:#4A96AE; --series-3:#053C6E; --series-4:#7E488E;
|
|
6
6
|
--title:#1D2F2E; --body:#495856; --muted:#728280; --foot:#728280;
|
|
7
7
|
--hair:#C1DDDA; --card-radius:4px;
|
|
8
8
|
--font-head:'Lexend','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#B7D2D0}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
7
7
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。遮幅条已经定了节奏,不再叠加。 */
|
|
8
8
|
--space-scale:1.0; --type-scale:1.0;
|
|
9
|
-
--accent:#F5F4F0; --c1:#F5F4F0; --c2:#C7C5BE; --c3:#8A8880; --c4:#5A584F; --chart-1:#8A8880;
|
|
9
|
+
--accent:#F5F4F0; --c1:#F5F4F0; --c2:#C7C5BE; --c3:#8A8880; --c4:#5A584F; --chart-1:#8A8880; --series-1:#F5F4F0; --series-2:#C5C3BC; --series-3:#929088; --series-4:#626057;
|
|
10
10
|
--title:#F5F4F0; --body:#C7C5BE; --muted:#8A8880; --foot:#656358;
|
|
11
11
|
--hair:rgba(245,244,240,.16); --card-radius:0px;
|
|
12
12
|
--font-head:'Big Shoulders Display','Anton','PingFang SC','Noto Sans SC',sans-serif;
|
|
@@ -83,6 +83,9 @@
|
|
|
83
83
|
/* full-bleed image overlay — 始终浅色(压在图/scrim 上,与皮肤明暗无关)*/
|
|
84
84
|
.overlay-title{color:#fff;font-family:var(--font-head);text-transform:uppercase;--talos-bake:1}
|
|
85
85
|
.overlay-sub{color:rgba(255,255,255,.82)}
|
|
86
|
+
/* 满版图版式里 .surface 就是底图本身:上面那条 z-index:1 会把它(连同注入的 <img>)抬到
|
|
87
|
+
scrim/渐变与 overlay 文字之上,真照片一放进去标题、副标题和遮罩全被盖住。这里放回文档流层级。 */
|
|
88
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .surface{z-index:auto}
|
|
86
89
|
/* batch-5 layouts: timeline / concept-hub / cover-image */
|
|
87
90
|
.tl-dot{background:var(--accent);border-radius:50%}
|
|
88
91
|
.tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
|
|
@@ -107,7 +110,8 @@
|
|
|
107
110
|
.ring-num{color:var(--title)}
|
|
108
111
|
|
|
109
112
|
/* toc-panel: 深色 skin → 浅色对比面板(既有反色机制,复用不新增) */
|
|
110
|
-
|
|
113
|
+
/* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
|
|
114
|
+
.panel{background:#F0EFEA;box-shadow:0 24px 60px rgba(0,0,0,.4);position:relative;z-index:1;--chart-surface:#F0EFEA;--chart-ink:#3E3D39;--chart-muted:#64635F;--chart-title:#1B1B17;--chart-grid:#D2D1CC;--chart-1:#8A8880;--chart-accent:#8A8880;--series-1:#595855;--series-2:#2F2E28;--series-3:#88867E;--series-4:#44423A}
|
|
111
115
|
.panel-item-title{color:#0D0D0C;font-family:var(--font-head)}
|
|
112
116
|
.panel-item-desc{color:#55534A}
|
|
113
117
|
.toc-brand{color:var(--title)}
|
|
@@ -143,6 +147,6 @@
|
|
|
143
147
|
emphasis). On the light panel it has to invert too, or the first two steps — the TOC
|
|
144
148
|
numerals, card rails, step circles — sit near-white on near-white and vanish. Same order
|
|
145
149
|
of emphasis, mirrored: c1 darkest. */
|
|
146
|
-
--c1:#0D0D0C;--c2:#3A3830;--c3:#55534A;--c4:#6E6C61}
|
|
150
|
+
--c1:#0D0D0C;--c2:#3A3830;--c3:#55534A;--c4:#6E6C61;--series-1:#0D0D0C;--series-2:#333129;--series-3:#5D5B51;--series-4:#8A887C}
|
|
147
151
|
.slide.slide-inverse .card,.slide.slide-inverse .cmp-col,.slide.slide-inverse .step-circle,.slide.slide-inverse .surface{background:rgba(13,13,12,.04)}
|
|
148
152
|
.slide.slide-inverse .cmp-badge,.slide.slide-inverse .banner-title{color:#F0EFEA}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: rule-frame -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#EDF9FA"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="rule-frame" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;left:40px;top:40px;right:40px;bottom:40px;border:1px solid var(--hair);pointer-events:none"></div>
|
|
4
5
|
<div style="position:absolute;left:52px;top:52px;right:52px;bottom:52px;border:1px solid var(--hair);opacity:.5;pointer-events:none"></div>
|
|
6
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:1.04; --type-scale:0.98;
|
|
5
|
-
--accent:#05747A; --c1:#05747A; --c2:#157092; --c3:#3A68B0; --c4:#875498; --chart-1:#05747A;
|
|
5
|
+
--accent:#05747A; --c1:#05747A; --c2:#157092; --c3:#3A68B0; --c4:#875498; --chart-1:#05747A; --series-1:#05747A; --series-2:#05445B; --series-3:#5F8FDA; --series-4:#8E5BA0;
|
|
6
6
|
--title:#212E30; --body:#4B5758; --muted:#748183; --foot:#748183;
|
|
7
7
|
--hair:#CAE1E4; --card-radius:4px;
|
|
8
8
|
--font-head:'Nunito','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#B4D5D7}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
5
5
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。基准。 */
|
|
6
6
|
--space-scale:1.0; --type-scale:1.0;
|
|
7
|
-
--accent:#7DE2D1; --c1:#7DE2D1; --c2:#A9B4FF; --c3:#E7C08A; --c4:#E6A0B0; --chart-1:#35B0A0;
|
|
7
|
+
--accent:#7DE2D1; --c1:#7DE2D1; --c2:#A9B4FF; --c3:#E7C08A; --c4:#E6A0B0; --chart-1:#35B0A0; --series-1:#7DE2D1; --series-2:#A8B3FE; --series-3:#FFDAA6; --series-4:#E9A3B3;
|
|
8
8
|
--title:#F4F8FF; --body:#93A0BE; --muted:#6E7A98; --foot:#5C6885;
|
|
9
9
|
--hair:rgba(255,255,255,.08); --card-radius:18px; --glow:0 0 18px var(--accent);
|
|
10
10
|
--font-head:'Sora','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
@@ -85,17 +85,18 @@
|
|
|
85
85
|
.ring-num{color:var(--title)}
|
|
86
86
|
|
|
87
87
|
/* toc-panel: 深色 skin → 浅色对比面板 */
|
|
88
|
-
|
|
89
|
-
.panel
|
|
88
|
+
/* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
|
|
89
|
+
.panel{background:#F1F4FA;box-shadow:0 24px 60px rgba(0,0,0,.4);--chart-surface:#F1F4FA;--chart-ink:#3B3D42;--chart-muted:#616368;--chart-title:#191B1F;--chart-grid:#CED1D7;--chart-1:#159D8E;--chart-accent:#159D8E;--series-1:#08665B;--series-2:#232462;--series-3:#A37F4B;--series-4:#672C3D}
|
|
90
|
+
.panel-item-title{color:#42776E;font-family:var(--font-head)}
|
|
90
91
|
.panel-item-desc{color:#4A4636}
|
|
91
92
|
.toc-brand{color:var(--title)}
|
|
92
93
|
|
|
93
94
|
/* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
|
|
94
|
-
.num-disc{background:var(--accent);color:#
|
|
95
|
+
.num-disc{background:var(--accent);color:#070A14} .num-item-title{color:var(--title)}
|
|
95
96
|
.brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
|
|
96
97
|
|
|
97
98
|
/* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
|
|
98
|
-
.banner{background:var(--accent)} .banner-title{color:#
|
|
99
|
+
.banner{background:var(--accent)} .banner-title{color:#070A14}
|
|
99
100
|
.col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
|
|
100
101
|
|
|
101
102
|
/* backdrop 弧线(.bd-arc)作用域:仅结构页 + 单焦点页显示,内容/数据/图片页保持干净 */
|
|
@@ -1,8 +1,10 @@
|
|
|
1
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 class="sig-layer" data-signature="rail-dots" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;left:68px;top:104px;bottom:92px;width:2px;background:var(--hair);pointer-events:none"></div>
|
|
4
5
|
<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
6
|
<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
7
|
<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
8
|
<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
9
|
<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>
|
|
10
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:1.06; --type-scale:0.98;
|
|
5
|
-
--accent:#1EC2D2; --c1:#1EC2D2; --c2:#46BBFC; --c3:#B0A7FB; --c4:#F292CB; --chart-1:#1EC2D2;
|
|
5
|
+
--accent:#1EC2D2; --c1:#1EC2D2; --c2:#46BBFC; --c3:#B0A7FB; --c4:#F292CB; --chart-1:#1EC2D2; --series-1:#1EC2D2; --series-2:#B0A7FB; --series-3:#E5B54E; --series-4:#F292CB;
|
|
6
6
|
--title:#EEF5F8; --body:#B4BDC2; --muted:#7D8589; --foot:#7D8589;
|
|
7
7
|
--hair:#3D484F; --card-radius:4px;
|
|
8
8
|
--font-head:'Space Grotesk','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#BCEDF2}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: header-band -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#F6FAFD"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="header-band" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;left:0;right:0;top:0;height:5px;background:var(--accent);opacity:.92;pointer-events:none"></div>
|
|
4
5
|
<div style="position:absolute;left:0;top:0;width:60px;height:16px;background:var(--accent);pointer-events:none"></div>
|
|
6
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:1; --type-scale:0.96;
|
|
5
|
-
--accent:#04557A; --c1:#04557A; --c2:#514884; --c3:#80365E; --c4:#843931; --chart-1:#04557A;
|
|
5
|
+
--accent:#04557A; --c1:#04557A; --c2:#514884; --c3:#80365E; --c4:#843931; --chart-1:#04557A; --series-1:#04557A; --series-2:#746CAC; --series-3:#641C45; --series-4:#95483F;
|
|
6
6
|
--title:#23292D; --body:#4C5154; --muted:#787D81; --foot:#787D81;
|
|
7
7
|
--hair:#CFD8E0; --card-radius:4px;
|
|
8
8
|
--font-head:'Public Sans','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#B4CCD7}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: ruler -->
|
|
2
2
|
<div style="position:absolute;inset:0;background:#111C14"></div>
|
|
3
|
+
<div class="sig-layer" data-signature="ruler" style="position:absolute;inset:0;pointer-events:none">
|
|
3
4
|
<div style="position:absolute;left:64px;right:64px;bottom:56px;height:14px;pointer-events:none">
|
|
4
5
|
<div style="position:absolute;left:64px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
|
|
5
6
|
<div style="position:absolute;left:100px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
|
|
@@ -35,3 +36,4 @@
|
|
|
35
36
|
<div style="position:absolute;left:1180px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
|
|
36
37
|
<div style="position:absolute;left:1216px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
|
|
37
38
|
</div>
|
|
39
|
+
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
手改会在下次生成时丢失:要改就改 family.json。 */
|
|
3
3
|
:root{
|
|
4
4
|
--space-scale:0.92; --type-scale:1;
|
|
5
|
-
--accent:#4ACE68; --c1:#4ACE68; --c2:#26CACA; --c3:#42C2FE; --c4:#BCABFD; --chart-1:#4ACE68;
|
|
5
|
+
--accent:#4ACE68; --c1:#4ACE68; --c2:#26CACA; --c3:#42C2FE; --c4:#BCABFD; --chart-1:#4ACE68; --series-1:#4ACE68; --series-2:#47DFDF; --series-3:#15A7E2; --series-4:#BEADFF;
|
|
6
6
|
--title:#EBF3ED; --body:#B0B8B1; --muted:#7B837D; --foot:#7B837D;
|
|
7
7
|
--hair:#333E35; --card-radius:4px;
|
|
8
8
|
--font-head:'Chakra Petch','Noto Sans SC',sans-serif;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
15
15
|
.rule,.rule-foot{background:var(--hair)}
|
|
16
16
|
.eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
|
|
17
|
+
.slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#C9F0D2}
|
|
17
18
|
.accent-bar{background:var(--accent)}
|
|
18
19
|
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
19
20
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。工作坊:字大一点更好读,边距收一点。 */
|
|
6
6
|
--space-scale:0.96; --type-scale:1.05;
|
|
7
7
|
--accent:#E63946; --c1:#E63946; --c2:#457B9D; --c3:#E9A63A; --c4:#2A9D8F; --chart-1:#DE6A66;
|
|
8
|
-
--title:#2B2B2B; --body:#3A3A3A; --muted:#8A8A80; --foot:#
|
|
8
|
+
--title:#2B2B2B; --body:#3A3A3A; --muted:#8A8A80; --foot:#909088;
|
|
9
9
|
--hair:rgba(43,43,43,.16); --ink:rgba(43,43,43,.55); --card-radius:16px;
|
|
10
10
|
--font-head:'Gochi Hand','PingFang SC','Noto Sans SC',cursive;
|
|
11
11
|
--font-body:'Manrope','PingFang SC','Noto Sans SC',sans-serif;
|
|
@@ -117,11 +117,11 @@
|
|
|
117
117
|
.card-grid .card:nth-child(3n+3),.cmp-grid>*:nth-child(3n+3){transform:rotate(-.5deg)}
|
|
118
118
|
|
|
119
119
|
/* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
|
|
120
|
-
.num-disc{background
|
|
120
|
+
.num-disc{background:#D62839;color:#fff} .num-item-title{color:var(--title)}
|
|
121
121
|
.brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
|
|
122
122
|
|
|
123
123
|
/* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
|
|
124
|
-
.banner{background
|
|
124
|
+
.banner{background:#D62839} .banner-title{color:#fff}
|
|
125
125
|
.col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
|
|
126
126
|
|
|
127
127
|
/* color-palette layout: 色板填色走 ramp 变量(每皮肤用自身配色) */
|