@taloswork/ose-shared 0.1.1 → 0.1.3
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 +29 -33
- package/skills/document/assets/fonts/Archivo-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Archivo-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/BigShouldersDisplay-Bold.woff2 +0 -0
- package/skills/document/assets/fonts/BodoniModa-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/CormorantGaramond-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Fraunces-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/GochiHand-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Inter-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Jost-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Jost-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/Karla-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Lora-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Manrope-Bold.woff2 +0 -0
- package/skills/document/assets/fonts/Manrope-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Marcellus-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/PublicSans-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Sora-Regular.woff2 +0 -0
- package/skills/document/assets/fonts/Sora-SemiBold.woff2 +0 -0
- package/skills/document/assets/fonts/fonts.json +218 -0
- package/skills/document/bin/deck-build.cjs +275 -7
- package/skills/document/bin/deck-qa.cjs +1 -1
- package/skills/document/bin/doc-convert.cjs +11 -11
- package/skills/document/bin/doc-fill.cjs +1 -1
- package/skills/document/bin/doc-gen.cjs +119 -34
- package/skills/document/bin/doc-scan.cjs +8 -10
- package/skills/document/bin/doc-text.cjs +1 -1
- package/skills/document/bin/doc-validate.cjs +3 -3
- package/skills/document/bin/doc-xml.cjs +3 -3
- package/skills/document/bin/docx-annotate.cjs +3 -3
- package/skills/document/bin/html2pptx.cjs +290 -59
- package/skills/document/bin/ocr.cjs +1 -1
- package/skills/document/bin/pdf-form.cjs +1 -1
- package/skills/document/bin/pdf-images.cjs +1 -1
- package/skills/document/bin/pdf-ops.cjs +2 -2
- package/skills/document/bin/pdf-render.cjs +1 -1
- package/skills/document/bin/pdf-tables.cjs +1 -1
- package/skills/document/bin/pptx-clone.cjs +3 -3
- package/skills/document/bin/pptx-embed-fonts.cjs +1 -1
- package/skills/document/bin/pptx-set-image.cjs +3 -3
- package/skills/document/bin/pptx-slide.cjs +4 -4
- package/skills/document/bin/pptx-theme.cjs +1 -1
- package/skills/document/bin/pptx-tokenize.cjs +3 -3
- package/skills/document/bin/xlsx-query.cjs +1 -1
- package/skills/document/bin/xlsx-recalc.cjs +2 -2
- package/skills/document/catalog.json +25 -0
- package/skills/document/deck-design.md +191 -0
- package/skills/document/layouts/README.md +32 -0
- package/skills/document/layouts/banner-columns.tpl +9 -9
- package/skills/document/layouts/bento.tpl +3 -3
- package/skills/document/layouts/big-stat.tpl +3 -3
- package/skills/document/layouts/blocks-2x2.tpl +12 -12
- package/skills/document/layouts/brand-values.tpl +5 -5
- package/skills/document/layouts/cards-3.tpl +3 -3
- package/skills/document/layouts/cards-grid.tpl +3 -3
- package/skills/document/layouts/chart-full.tpl +3 -3
- package/skills/document/layouts/chart-kpi.tpl +3 -3
- package/skills/document/layouts/color-palette.tpl +5 -5
- package/skills/document/layouts/comparison.tpl +3 -3
- package/skills/document/layouts/concept-hub.tpl +3 -3
- package/skills/document/layouts/cover-centered.tpl +1 -1
- package/skills/document/layouts/cover-image.tpl +1 -1
- package/skills/document/layouts/cover-minimal.tpl +3 -3
- package/skills/document/layouts/cover-statement.tpl +3 -3
- package/skills/document/layouts/cover.tpl +1 -1
- package/skills/document/layouts/data-table.tpl +3 -3
- package/skills/document/layouts/dos-donts.tpl +14 -14
- package/skills/document/layouts/editorial-panel.tpl +11 -11
- package/skills/document/layouts/ending-contact.tpl +1 -1
- package/skills/document/layouts/ending.tpl +1 -1
- package/skills/document/layouts/funnel.tpl +3 -3
- package/skills/document/layouts/gantt.tpl +3 -3
- package/skills/document/layouts/hero.tpl +3 -3
- package/skills/document/layouts/icon-row.tpl +3 -3
- package/skills/document/layouts/image-full.tpl +5 -5
- package/skills/document/layouts/image-grid.tpl +3 -3
- package/skills/document/layouts/image-left.tpl +3 -3
- package/skills/document/layouts/list.tpl +3 -3
- package/skills/document/layouts/logo-guidelines.tpl +8 -8
- package/skills/document/layouts/map-distribution.tpl +3 -3
- package/skills/document/layouts/map-quad.tpl +6 -6
- package/skills/document/layouts/matrix-2x2.tpl +3 -3
- package/skills/document/layouts/numbered-brief.tpl +12 -12
- package/skills/document/layouts/org-tree.tpl +3 -3
- package/skills/document/layouts/problem-solution-banner.tpl +7 -7
- package/skills/document/layouts/problem-solution.tpl +3 -3
- package/skills/document/layouts/pyramid.tpl +3 -3
- package/skills/document/layouts/quote.tpl +1 -1
- package/skills/document/layouts/radar.tpl +3 -3
- package/skills/document/layouts/ring-progress.tpl +3 -3
- package/skills/document/layouts/section-fullbleed.tpl +3 -3
- package/skills/document/layouts/section-image.tpl +1 -1
- package/skills/document/layouts/section-stat.tpl +1 -1
- package/skills/document/layouts/section.tpl +1 -1
- package/skills/document/layouts/slots.json +1 -1
- package/skills/document/layouts/split-two-col.tpl +3 -3
- package/skills/document/layouts/stats-chart.tpl +3 -3
- package/skills/document/layouts/steps-serpentine.tpl +11 -11
- package/skills/document/layouts/steps-vertical.tpl +3 -3
- package/skills/document/layouts/steps.tpl +3 -3
- package/skills/document/layouts/team-row.tpl +4 -4
- package/skills/document/layouts/three-kpi.tpl +3 -3
- package/skills/document/layouts/timeline.tpl +3 -3
- package/skills/document/layouts/title-meta.tpl +5 -5
- package/skills/document/layouts/title.tpl +2 -2
- package/skills/document/layouts/toc-agenda.tpl +3 -3
- package/skills/document/layouts/toc-editorial.tpl +15 -0
- package/skills/document/layouts/toc-panel.tpl +4 -4
- package/skills/document/layouts/toc.tpl +3 -3
- package/skills/document/layouts/transition.tpl +1 -1
- package/skills/document/layouts/two-kpi.tpl +3 -3
- package/skills/document/layouts/type-specimen.tpl +10 -10
- package/skills/document/layouts/versus.tpl +3 -3
- package/skills/document/motion/README.md +11 -0
- package/skills/document/packs/README.md +9 -0
- package/skills/document/styles/README.md +36 -15
- package/skills/document/styles/_contract-defaults.css +55 -0
- 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/anthropic.webp +0 -0
- package/skills/document/styles/_samples/apple.webp +0 -0
- package/skills/document/styles/_samples/black-gold.webp +0 -0
- package/skills/document/styles/_samples/branding.webp +0 -0
- package/skills/document/styles/_samples/cinereel.webp +0 -0
- package/skills/document/styles/_samples/cool.webp +0 -0
- package/skills/document/styles/_samples/hand-drawn.webp +0 -0
- package/skills/document/styles/_samples/ivory-gold.webp +0 -0
- package/skills/document/styles/_samples/magazine-ink.webp +0 -0
- package/skills/document/styles/_samples/mckinsey.webp +0 -0
- package/skills/document/styles/_samples/mono.webp +0 -0
- package/skills/document/styles/_samples/olive-gold.webp +0 -0
- package/skills/document/styles/_samples/swiss-grid.webp +0 -0
- package/skills/document/styles/anthropic/backdrop.html +4 -0
- package/skills/document/styles/anthropic/skin.css +15 -8
- package/skills/document/styles/apple/backdrop.html +4 -1
- package/skills/document/styles/apple/skin.css +5 -2
- package/skills/document/styles/black-gold/backdrop.html +3 -0
- package/skills/document/styles/black-gold/skin.css +15 -8
- package/skills/document/styles/branding/backdrop.html +4 -0
- package/skills/document/styles/branding/skin.css +14 -7
- package/skills/document/styles/cinereel/skin.css +28 -10
- package/skills/document/styles/cool/backdrop.html +3 -0
- package/skills/document/styles/cool/skin.css +5 -2
- package/skills/document/styles/hand-drawn/skin.css +14 -6
- package/skills/document/styles/ivory-gold/skin.css +19 -6
- package/skills/document/styles/magazine-ink/skin.css +6 -1
- package/skills/document/styles/mckinsey/backdrop.html +5 -0
- package/skills/document/styles/mckinsey/skin.css +5 -2
- package/skills/document/styles/mono/backdrop.html +6 -0
- package/skills/document/styles/mono/skin.css +5 -2
- package/skills/document/styles/olive-gold/backdrop.html +5 -0
- package/skills/document/styles/olive-gold/skin.css +15 -8
- package/skills/document/styles/swiss-grid/skin.css +6 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- layouts/toc-panel — structure-only. role=toc. 左大标题+插图 / 右深色面板目录. rows.entries{name,desc} — 3–5 chapters spread down the panel. -->
|
|
2
2
|
<section class="slide" data-layout="toc-panel" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
-
<div class="toc-topbar" style="position:absolute;left:80px;right:80px;top:34px;display:flex;justify-content:space-between;align-items:center;font-size:15px;font-weight:700"><span class="toc-brand">{{brand1|公司名称}}</span><span class="toc-brand">{{brand2|战略评审}}</span><span class="toc-brand">{{brand3|2026-03-15}}</span></div>
|
|
4
|
-
<div class="surface" style="position:absolute;left:96px;top:150px;width:300px;height:280px;display:flex;align-items:center;justify-content:center;border-radius:var(--card-radius)"><span class="surface-label" style="font-size:14px">插图占位</span></div>
|
|
5
|
-
<h1 class="cover-title" style="position:absolute;left:92px;top:456px;font-size:76px;line-height:1.02;letter-spacing:-1px">{{title|目录}}</h1>
|
|
3
|
+
<div class="toc-topbar" style="position:absolute;left:80px;right:80px;top:34px;display:flex;justify-content:space-between;align-items:center;font-size:calc(15px * var(--type-scale,1));font-weight:700"><span class="toc-brand">{{brand1|公司名称}}</span><span class="toc-brand">{{brand2|战略评审}}</span><span class="toc-brand">{{brand3|2026-03-15}}</span></div>
|
|
4
|
+
<div class="surface" style="position:absolute;left:calc(96px * var(--space-scale,1));top:150px;width:300px;height:280px;display:flex;align-items:center;justify-content:center;border-radius:var(--card-radius)"><span class="surface-label" style="font-size:calc(14px * var(--type-scale,1))">插图占位</span></div>
|
|
5
|
+
<h1 class="cover-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:456px;font-size:calc(76px * var(--type-scale,1));line-height:1.02;letter-spacing:-1px">{{title|目录}}</h1>
|
|
6
6
|
<div class="panel" style="position:absolute;left:700px;right:80px;top:96px;bottom:56px;border-radius:var(--card-radius);padding:56px 60px;display:flex;flex-direction:column;justify-content:space-between">
|
|
7
|
-
{{#entries}}<div class="panel-item"><div class="panel-item-title" style="font-size:30px;font-weight:800;letter-spacing:.5px">{{name|占位章节}}</div><p class="panel-item-desc" style="font-size:19px;margin-top:8px">{{desc|简述本节要讨论的内容。}}</p></div>{{/entries}}
|
|
7
|
+
{{#entries}}<div class="panel-item"><div class="panel-item-title" style="font-size:calc(30px * var(--type-scale,1));font-weight:800;letter-spacing:.5px">{{name|占位章节}}</div><p class="panel-item-desc" style="font-size:calc(19px * var(--type-scale,1));margin-top:8px">{{desc|简述本节要讨论的内容。}}</p></div>{{/entries}}
|
|
8
8
|
</div>
|
|
9
9
|
</section>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!-- layouts/toc — structure-only (paint via styles/<skin>/skin.css). data-layout drives P1/P2/P3 + dedup. -->
|
|
2
|
-
<section class="slide" data-layout="toc" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:96px;top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:13px;letter-spacing:.28em">{{eyebrow|目录 · CONTENTS}}</span></div><h2 class="deck-title" style="position:absolute;left:92px;top:158px;font-size:52px;letter-spacing:-.4px">{{title|目录}}</h2>
|
|
3
|
-
<div class="toc-grid" style="position:absolute;left:96px;right:96px;top:290px;display:grid;grid-template-columns:1fr 1fr;gap:0 72px"><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:32px;font-weight:700">01</span><div><div class="toc-title" style="font-size:22px;font-weight:600">{{item1_title|章节标题}}</div><div class="toc-desc" style="font-size:14px;margin-top:5px">{{item1_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:32px;font-weight:700">02</span><div><div class="toc-title" style="font-size:22px;font-weight:600">{{item2_title|章节标题}}</div><div class="toc-desc" style="font-size:14px;margin-top:5px">{{item2_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:32px;font-weight:700">03</span><div><div class="toc-title" style="font-size:22px;font-weight:600">{{item3_title|章节标题}}</div><div class="toc-desc" style="font-size:14px;margin-top:5px">{{item3_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:32px;font-weight:700">04</span><div><div class="toc-title" style="font-size:22px;font-weight:600">{{item4_title|章节标题}}</div><div class="toc-desc" style="font-size:14px;margin-top:5px">{{item4_desc|一句概述}}</div></div></div></div>
|
|
4
|
-
<div class="rule rule-foot" style="position:absolute;left:96px;right:96px;bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:96px;bottom:17px;font-size:12px;letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:96px;bottom:17px;font-size:12px">{{pageno|01}}</div></section>
|
|
2
|
+
<section class="slide" data-layout="toc" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:calc(96px * var(--space-scale,1));top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.28em">{{eyebrow|目录 · CONTENTS}}</span></div><h2 class="deck-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:158px;font-size:calc(52px * var(--type-scale,1));letter-spacing:-.4px">{{title|目录}}</h2>
|
|
3
|
+
<div class="toc-grid" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));top:290px;display:grid;grid-template-columns:1fr 1fr;gap:0 72px"><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:calc(32px * var(--type-scale,1));font-weight:700">01</span><div><div class="toc-title" style="font-size:calc(22px * var(--type-scale,1));font-weight:600">{{item1_title|章节标题}}</div><div class="toc-desc" style="font-size:calc(14px * var(--type-scale,1));margin-top:5px">{{item1_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:calc(32px * var(--type-scale,1));font-weight:700">02</span><div><div class="toc-title" style="font-size:calc(22px * var(--type-scale,1));font-weight:600">{{item2_title|章节标题}}</div><div class="toc-desc" style="font-size:calc(14px * var(--type-scale,1));margin-top:5px">{{item2_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:calc(32px * var(--type-scale,1));font-weight:700">03</span><div><div class="toc-title" style="font-size:calc(22px * var(--type-scale,1));font-weight:600">{{item3_title|章节标题}}</div><div class="toc-desc" style="font-size:calc(14px * var(--type-scale,1));margin-top:5px">{{item3_desc|一句概述}}</div></div></div><div class="toc-item" style="display:flex;gap:22px;align-items:baseline;padding:22px 0"><span class="toc-num" style="font-size:calc(32px * var(--type-scale,1));font-weight:700">04</span><div><div class="toc-title" style="font-size:calc(22px * var(--type-scale,1));font-weight:600">{{item4_title|章节标题}}</div><div class="toc-desc" style="font-size:calc(14px * var(--type-scale,1));margin-top:5px">{{item4_desc|一句概述}}</div></div></div></div>
|
|
4
|
+
<div class="rule rule-foot" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1));letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1))">{{pageno|01}}</div></section>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!-- layouts/transition — structure-only. role=transition. reuse across chapter breaks. -->
|
|
2
|
-
<section class="slide" data-layout="transition" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div style="position:absolute;left:0;right:0;top:264px;text-align:center"><span class="eyebrow-row" style="display:inline-flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:13px;letter-spacing:.34em">{{eyebrow|NEXT · 下一章}}</span></span></div><h2 class="ending-title" style="position:absolute;left:0;right:0;top:302px;text-align:center;font-size:120px;letter-spacing:-2px">{{number|02}}</h2><div class="section-desc" style="position:absolute;left:0;right:0;top:492px;text-align:center;font-size:22px;font-weight:600">{{title|下一章标题}}</div></section>
|
|
2
|
+
<section class="slide" data-layout="transition" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div style="position:absolute;left:0;right:0;top:264px;text-align:center"><span class="eyebrow-row" style="display:inline-flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.34em">{{eyebrow|NEXT · 下一章}}</span></span></div><h2 class="ending-title" style="position:absolute;left:0;right:0;top:302px;text-align:center;font-size:calc(120px * var(--type-scale,1));letter-spacing:-2px">{{number|02}}</h2><div class="section-desc" style="position:absolute;left:0;right:0;top:492px;text-align:center;font-size:calc(22px * var(--type-scale,1));font-weight:600">{{title|下一章标题}}</div></section>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!-- layouts/two-kpi — structure-only variant (paint via skin). -->
|
|
2
|
-
<section class="slide" data-layout="two-kpi" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:96px;top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:13px;letter-spacing:.28em">{{eyebrow|KEY METRICS}}</span></div><h2 class="deck-title" style="position:absolute;left:92px;top:158px;font-size:48px;letter-spacing:-.4px">{{title|两个关键指标}}</h2>
|
|
3
|
-
<div style="position:absolute;left:96px;right:96px;top:320px;display:grid;grid-template-columns:1fr 1fr;gap:40px"><div class="kpi" style="position:relative;padding-left:22px"><span class="accent-bar" style="position:absolute;left:0;top:10px;width:5px;height:120px"></span><div class="kpi-num" style="font-size:132px;font-weight:800;line-height:1">{{kpi1_num|585}}<span class="stat-unit" style="font-size:44px">{{kpi1_unit| 单位}}</span></div><p class="kpi-label" style="font-size:16px;margin-top:12px">{{kpi1_label|指标一说明,给上下文}}</p></div><div class="kpi" style="position:relative;padding-left:22px"><span class="accent-bar" style="position:absolute;left:0;top:10px;width:5px;height:120px"></span><div class="kpi-num" style="font-size:132px;font-weight:800;line-height:1">{{kpi2_num|92}}<span class="stat-unit" style="font-size:44px">{{kpi2_unit| %}}</span></div><p class="kpi-label" style="font-size:16px;margin-top:12px">{{kpi2_label|指标二说明,给上下文}}</p></div></div>
|
|
4
|
-
<div class="rule rule-foot" style="position:absolute;left:96px;right:96px;bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:96px;bottom:17px;font-size:12px;letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:96px;bottom:17px;font-size:12px">{{pageno|01}}</div></section>
|
|
2
|
+
<section class="slide" data-layout="two-kpi" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:calc(96px * var(--space-scale,1));top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.28em">{{eyebrow|KEY METRICS}}</span></div><h2 class="deck-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:158px;font-size:calc(48px * var(--type-scale,1));letter-spacing:-.4px">{{title|两个关键指标}}</h2>
|
|
3
|
+
<div style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));top:320px;display:grid;grid-template-columns:1fr 1fr;gap:40px"><div class="kpi" style="position:relative;padding-left:22px"><span class="accent-bar" style="position:absolute;left:0;top:10px;width:5px;height:120px"></span><div class="kpi-num" style="font-size:calc(132px * var(--type-scale,1));font-weight:800;line-height:1">{{kpi1_num|585}}<span class="stat-unit" style="font-size:calc(44px * var(--type-scale,1))">{{kpi1_unit| 单位}}</span></div><p class="kpi-label" style="font-size:calc(16px * var(--type-scale,1));margin-top:12px">{{kpi1_label|指标一说明,给上下文}}</p></div><div class="kpi" style="position:relative;padding-left:22px"><span class="accent-bar" style="position:absolute;left:0;top:10px;width:5px;height:120px"></span><div class="kpi-num" style="font-size:calc(132px * var(--type-scale,1));font-weight:800;line-height:1">{{kpi2_num|92}}<span class="stat-unit" style="font-size:calc(44px * var(--type-scale,1))">{{kpi2_unit| %}}</span></div><p class="kpi-label" style="font-size:calc(16px * var(--type-scale,1));margin-top:12px">{{kpi2_label|指标二说明,给上下文}}</p></div></div>
|
|
4
|
+
<div class="rule rule-foot" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1));letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1))">{{pageno|01}}</div></section>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<!-- layouts/type-specimen — structure-only (paint via skin). 品牌手册"字体规范":左 大 Aa 范样 + 字体名 + 字重梯度;右 标题/正文范样 + 字符集. 全部复用既有 class(.deck-title 衬线大字 / .card-body / .surface / .rule). data-layout drives P1/P2/P3 + dedup. -->
|
|
2
2
|
<section class="slide" data-layout="type-specimen" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div>
|
|
3
|
-
<div class="eyebrow-row" style="position:absolute;left:96px;top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:13px;letter-spacing:.28em">{{eyebrow|TYPOGRAPHY}}</span></div>
|
|
4
|
-
<h2 class="deck-title" style="position:absolute;left:92px;top:158px;font-size:48px;letter-spacing:-.4px">{{title|字体规范}}</h2>
|
|
3
|
+
<div class="eyebrow-row" style="position:absolute;left:calc(96px * var(--space-scale,1));top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.28em">{{eyebrow|TYPOGRAPHY}}</span></div>
|
|
4
|
+
<h2 class="deck-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:158px;font-size:calc(48px * var(--type-scale,1));letter-spacing:-.4px">{{title|字体规范}}</h2>
|
|
5
5
|
<!-- left: Aa specimen -->
|
|
6
|
-
<div class="surface" style="position:absolute;left:96px;top:264px;width:520px;bottom:92px;padding:36px 40px;display:flex;flex-direction:column;justify-content:center"><div class="deck-title" style="font-size:168px;line-height:.9;">{{specimen|Aa}}</div><div class="deck-title" style="font-size:24px;margin-top:22px">{{font_name|占位字体 · 衬线标题}}</div><div class="surface-label" style="font-size:14px;margin-top:8px;letter-spacing:.08em">{{weights|Regular · Medium · Bold}}</div></div>
|
|
6
|
+
<div class="surface" style="position:absolute;left:calc(96px * var(--space-scale,1));top:264px;width:520px;bottom:92px;padding:36px 40px;display:flex;flex-direction:column;justify-content:center"><div class="deck-title" style="font-size:calc(168px * var(--type-scale,1));line-height:.9;">{{specimen|Aa}}</div><div class="deck-title" style="font-size:calc(24px * var(--type-scale,1));margin-top:22px">{{font_name|占位字体 · 衬线标题}}</div><div class="surface-label" style="font-size:calc(14px * var(--type-scale,1));margin-top:8px;letter-spacing:.08em">{{weights|Regular · Medium · Bold}}</div></div>
|
|
7
7
|
<!-- right: samples -->
|
|
8
|
-
<div style="position:absolute;left:660px;right:96px;top:274px">
|
|
9
|
-
<div class="surface-label" style="font-size:12px;letter-spacing:.2em">{{heading_label|HEADING · 标题}}</div>
|
|
10
|
-
<div class="deck-title" style="font-size:40px;margin-top:6px">{{heading_sample|优雅、克制、有呼吸感}}</div>
|
|
8
|
+
<div style="position:absolute;left:660px;right:calc(96px * var(--space-scale,1));top:274px">
|
|
9
|
+
<div class="surface-label" style="font-size:calc(12px * var(--type-scale,1));letter-spacing:.2em">{{heading_label|HEADING · 标题}}</div>
|
|
10
|
+
<div class="deck-title" style="font-size:calc(40px * var(--type-scale,1));margin-top:6px">{{heading_sample|优雅、克制、有呼吸感}}</div>
|
|
11
11
|
<div class="rule" style="height:1px;margin:22px 0"></div>
|
|
12
|
-
<div class="surface-label" style="font-size:12px;letter-spacing:.2em">{{body_label|BODY · 正文}}</div>
|
|
13
|
-
<p class="card-body" style="font-size:16px;line-height:1.8;margin-top:8px">{{body_sample|正文使用无衬线体,行距宽松、字重规整,保证长段落的可读性。标题用衬线、正文用无衬线,层级清晰,替换为真实内容。}}</p>
|
|
12
|
+
<div class="surface-label" style="font-size:calc(12px * var(--type-scale,1));letter-spacing:.2em">{{body_label|BODY · 正文}}</div>
|
|
13
|
+
<p class="card-body" style="font-size:calc(16px * var(--type-scale,1));line-height:1.8;margin-top:8px">{{body_sample|正文使用无衬线体,行距宽松、字重规整,保证长段落的可读性。标题用衬线、正文用无衬线,层级清晰,替换为真实内容。}}</p>
|
|
14
14
|
<div class="rule" style="height:1px;margin:22px 0"></div>
|
|
15
|
-
<div class="card-body" style="font-size:22px;letter-spacing:.04em">{{charset|A B C D E F G a b c d e f g 0 1 2 3 4 5 6 7 8 9}}</div>
|
|
15
|
+
<div class="card-body" style="font-size:calc(22px * var(--type-scale,1));letter-spacing:.04em">{{charset|A B C D E F G a b c d e f g 0 1 2 3 4 5 6 7 8 9}}</div>
|
|
16
16
|
</div>
|
|
17
|
-
<div class="rule rule-foot" style="position:absolute;left:96px;right:96px;bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:96px;bottom:17px;font-size:12px;letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:96px;bottom:17px;font-size:12px">{{pageno|01}}</div>
|
|
17
|
+
<div class="rule rule-foot" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1));letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1))">{{pageno|01}}</div>
|
|
18
18
|
</section>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!-- layouts/versus — structure-only variant (paint via skin). reuses class contract, no skin change. -->
|
|
2
|
-
<section class="slide" data-layout="versus" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:96px;top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:13px;letter-spacing:.28em">{{eyebrow|BEFORE / AFTER}}</span></div><h2 class="deck-title" style="position:absolute;left:92px;top:158px;font-size:48px;letter-spacing:-.4px">{{title|改造前后对比}}</h2>
|
|
3
|
-
<div class="card" style="position:absolute;left:96px;top:300px;width:472px;height:300px;padding:34px;display:flex;flex-direction:column;justify-content:center"><div class="card-title" style="font-size:20px;font-weight:700">{{before_title|改造前}}</div><div class="kpi-num" style="font-size:72px;font-weight:800;line-height:1.1;margin-top:10px">{{before_num|T+1}}</div><p class="card-body" style="font-size:15px;margin-top:8px">{{before_body|报表时效,人工汇总。}}</p></div><div class="step-circle" style="position:absolute;left:50%;top:410px;transform:translateX(-50%);width:88px;height:88px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;z-index:2">VS</div><div class="card cmp-col--rec" style="position:absolute;right:96px;top:300px;width:472px;height:300px;padding:34px;display:flex;flex-direction:column;justify-content:center"><div class="card-title" style="font-size:20px;font-weight:700">{{after_title|改造后}}</div><div class="kpi-num" style="font-size:72px;font-weight:800;line-height:1.1;margin-top:10px">{{after_num|分钟级}}</div><p class="card-body" style="font-size:15px;margin-top:8px">{{after_body|实时计算,自动刷新。}}</p></div>
|
|
4
|
-
<div class="rule rule-foot" style="position:absolute;left:96px;right:96px;bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:96px;bottom:17px;font-size:12px;letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:96px;bottom:17px;font-size:12px">{{pageno|01}}</div></section>
|
|
2
|
+
<section class="slide" data-layout="versus" style="position:relative;width:1280px;height:720px;overflow:hidden"><div class="slide-backdrop"></div><div class="eyebrow-row" style="position:absolute;left:calc(96px * var(--space-scale,1));top:132px;display:flex;align-items:center;gap:14px"><span class="accent-bar" style="width:30px;height:1px;display:inline-block"></span><span class="eyebrow" style="font-size:calc(13px * var(--type-scale,1));letter-spacing:.28em">{{eyebrow|BEFORE / AFTER}}</span></div><h2 class="deck-title" style="position:absolute;left:calc(92px * var(--space-scale,1));top:158px;font-size:calc(48px * var(--type-scale,1));letter-spacing:-.4px">{{title|改造前后对比}}</h2>
|
|
3
|
+
<div class="card" style="position:absolute;left:calc(96px * var(--space-scale,1));top:300px;width:472px;height:300px;padding:34px;display:flex;flex-direction:column;justify-content:center"><div class="card-title" style="font-size:calc(20px * var(--type-scale,1));font-weight:700">{{before_title|改造前}}</div><div class="kpi-num" style="font-size:calc(72px * var(--type-scale,1));font-weight:800;line-height:1.1;margin-top:10px">{{before_num|T+1}}</div><p class="card-body" style="font-size:calc(15px * var(--type-scale,1));margin-top:8px">{{before_body|报表时效,人工汇总。}}</p></div><div class="step-circle" style="position:absolute;left:50%;top:410px;transform:translateX(-50%);width:88px;height:88px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:calc(24px * var(--type-scale,1));font-weight:700;z-index:2">VS</div><div class="card cmp-col--rec" style="position:absolute;right:calc(96px * var(--space-scale,1));top:300px;width:472px;height:300px;padding:34px;display:flex;flex-direction:column;justify-content:center"><div class="card-title" style="font-size:calc(20px * var(--type-scale,1));font-weight:700">{{after_title|改造后}}</div><div class="kpi-num" style="font-size:calc(72px * var(--type-scale,1));font-weight:800;line-height:1.1;margin-top:10px">{{after_num|分钟级}}</div><p class="card-body" style="font-size:calc(15px * var(--type-scale,1));margin-top:8px">{{after_body|实时计算,自动刷新。}}</p></div>
|
|
4
|
+
<div class="rule rule-foot" style="position:absolute;left:calc(96px * var(--space-scale,1));right:calc(96px * var(--space-scale,1));bottom:40px;height:1px"></div><div class="deck-footer" style="position:absolute;left:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1));letter-spacing:.1em">{{footer|报告标题 / 章节}}</div><div class="deck-pageno" style="position:absolute;right:calc(96px * var(--space-scale,1));bottom:17px;font-size:calc(12px * var(--type-scale,1))">{{pageno|01}}</div></section>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# motion —— 族的动画预设
|
|
2
|
+
|
|
3
|
+
每族一份 `<id>.json`:`transition`(页面切换)+ `entrance`(按页面 role 分组的入场序列)。
|
|
4
|
+
`deck-build` 填槽时按 role 注入 `data-anim*` / `data-transition*`;deck.html 里已有的
|
|
5
|
+
同名属性优先,不被覆盖。
|
|
6
|
+
|
|
7
|
+
**motion 是可选的** —— 没有预设文件的族不注入任何动画,与 `data-anim` 默认全关一致。
|
|
8
|
+
现有 13 个 skin 在 P0 不配 motion(保证行为零变化),P2 补齐。
|
|
9
|
+
|
|
10
|
+
效果集必须与 `packages/core/src/document/pptx-anim.ts` 一致:
|
|
11
|
+
fade · fade-up · float · appear · fly-up · fly-down · fly-left · fly-right
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# packs —— 模板包(pack)
|
|
2
|
+
|
|
3
|
+
pack = 实现完整 class 契约的 `pack.css` **加上**一组包专属签名版式。
|
|
4
|
+
|
|
5
|
+
因为 `pack.css` 实现了契约,共享 `layouts/` 的全部结构版式在包内天然可用;
|
|
6
|
+
包自带的 `layouts/<id>.tpl` 与共享同名时**包内优先**(同名遮蔽)。
|
|
7
|
+
|
|
8
|
+
目录结构见 `docs/superpowers/specs/2026-09-01-ppt-tpl-prod-design.md` §5.3。
|
|
9
|
+
P0 不产出任何 pack;首批 2 个包在 P1 落地。
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# Skin catalog (styles) — pick ONE per deck
|
|
2
2
|
|
|
3
|
+
**族名单的真源是 `catalog.json`**(groups + entries),本文件是人读的说明;新增族
|
|
4
|
+
两边都要更新。`verify-catalog.mjs` **不读本文件** —— 它比对的是 `catalog.json`
|
|
5
|
+
与磁盘(样图/CSS/motion 是否存在、`styles/<id>` 目录有没有漏登记、oneliner 有没有
|
|
6
|
+
超长),所以"目录建了但没登记"抓得住,"登记了但本 README 忘了写"抓不住,只能靠人。
|
|
7
|
+
|
|
3
8
|
A **skin** = the paint (colors + fonts + design tokens) applied to structure-only
|
|
4
9
|
`layouts/*.tpl` at render time via `--style <name>`. Pick ONE skin for the whole
|
|
5
10
|
deck by vibe/scenario; never mix. Each skin fully defines the class contract, so any
|
|
6
|
-
|
|
11
|
+
layout renders in any skin — see `layouts/README.md` for the current count and index.
|
|
7
12
|
|
|
8
13
|
`html2pptx deck.html out.pptx --style <name> [--backdrop <variant>]`
|
|
9
14
|
|
|
@@ -11,17 +16,17 @@ of the 54 layouts renders in any skin.
|
|
|
11
16
|
|
|
12
17
|
| skin | light/dark | 适用场景 | signature |
|
|
13
18
|
|---|---|---|---|
|
|
14
|
-
| **cool** ⭐默认 | dark | 科技 · 发布 · pitch · 主题演讲 | 深蓝 + 蓝青辉光 + 玻璃卡 +
|
|
15
|
-
| **black-gold** | dark | 金融 · 年报 · 路演 · 奢侈品 · 高端商务 | 纯黑 + 金辉光 +
|
|
16
|
-
| **apple** | dark | 产品发布 · 主题演讲 · 极简演示 | 纯黑舞台 +
|
|
17
|
-
| **olive-gold** | dark | 高端 · 证书 · 招商 · 品牌 | 深橄榄金 + 亮金 +
|
|
18
|
-
| **mckinsey** | light | 咨询 · 战略汇报 · 评审 · 董事会 | 白底藏青 +
|
|
19
|
-
| **anthropic** | light | AI/产品 · 研究分享 · 人文品牌 | 奶油 + 赤陶珊瑚 +
|
|
20
|
-
| **branding** | light | 品牌手册 · 可持续 · 美妆 · 零售 · 极简 | 暖米底 +
|
|
21
|
-
| **hand-drawn** | light | 创意 · 头脑风暴 · 教学 · 工作坊 | 纸感 + 马克笔色 + **手绘歪框卡** |
|
|
22
|
-
| **mono** | light | 极简 · 高端 · 设计 · 单色报告 | 纯白 + 黑灰明度层级 +
|
|
23
|
-
| **ivory-gold** | light | 奢华极简 · 品牌手册 · 路演 · 高端零售 | 奶油底 + 青铜金 Anton 粗体大写标题(标题=accent)+ **黑色反色区块**(`.slide-inverse`) |
|
|
24
|
-
| **cinereel** | dark | 影视 · 创意作品集 · 音乐/传媒行业 · 幕后花絮 | 黑底/照片底 +
|
|
19
|
+
| **cool** ⭐默认 | dark | 科技 · 发布 · pitch · 主题演讲 | 深蓝 + 蓝青辉光 + 玻璃卡 + **Sora** 几何无衬线 + **右上仪表刻度尺** |
|
|
20
|
+
| **black-gold** | dark | 金融 · 年报 · 路演 · 奢侈品 · 高端商务 | 纯黑 + 金辉光 + **Bodoni Moda** 高反差 didone + **双线证书内框** |
|
|
21
|
+
| **apple** | dark | 产品发布 · 主题演讲 · 极简演示 | 纯黑舞台 + 最大留白(`--space-scale:1.22`)+ **Manrope** + **底部地平线与反射** |
|
|
22
|
+
| **olive-gold** | dark | 高端 · 证书 · 招商 · 品牌 | 深橄榄金 + 亮金 + **Marcellus** 古典罗马体 + **四角雕版角标** |
|
|
23
|
+
| **mckinsey** | light | 咨询 · 战略汇报 · 评审 · 董事会 | 白底藏青 + **IBM Plex Sans** + 最高信息密度(`--space-scale:0.86`)+ **顶部实心页眉条与档案标签** |
|
|
24
|
+
| **anthropic** | light | AI/产品 · 研究分享 · 人文品牌 | 奶油 + 赤陶珊瑚 + **Fraunces** 有机衬线 + **右侧边注竖线** |
|
|
25
|
+
| **branding** | light | 品牌手册 · 可持续 · 美妆 · 零售 · 极简 | 暖米底 + 鼠尾草绿 + **Cormorant Garamond** + **左侧装订书脊带** |
|
|
26
|
+
| **hand-drawn** | light | 创意 · 头脑风暴 · 教学 · 工作坊 | 纸感 + 马克笔色 + **Gochi Hand** 手写体(已 bake)+ **手绘歪框卡** |
|
|
27
|
+
| **mono** | light | 极简 · 高端 · 设计 · 单色报告 | 纯白 + 黑灰明度层级 + **Archivo** + **印刷裁切框与四角对位十字** |
|
|
28
|
+
| **ivory-gold** | light | 奢华极简 · 品牌手册 · 路演 · 高端零售 | 奶油底 + 青铜金 **Anton** 粗体大写标题(标题=accent)+ **黑色反色区块**(`.slide-inverse`) |
|
|
29
|
+
| **cinereel** | dark | 影视 · 创意作品集 · 音乐/传媒行业 · 幕后花絮 | 黑底/照片底 + 白色超浓缩粗体大写(Big Shoulders Display,无色相)+ 几何无衬线正文(Jost)+ **常驻胶片取景框**(顶/底黑遮幅条,每页恒定)+ 浅灰面板反色(`.slide-inverse`) |
|
|
25
30
|
| **magazine-ink** | light | 人文分享 · 行业观察 · 商业发布 · 杂志感演讲 | 瓷白底 + 靛蓝 Noto Serif SC 衬线大标题 + 无衬线正文 + 等宽元数据 + 无阴影无卡片盒(纯发丝线分隔)+ 巨幅淡墨水印章节号 |
|
|
26
31
|
| **swiss-grid** | light | 科技产品 · 数据汇报 · 设计/工程分享 · 年度总结 | 全无衬线 + 克莱因蓝单色高亮 + 极致字号反差(标题细/KPI 粗)+ 零阴影零圆角零渐变 + 点阵网格底纹 |
|
|
27
32
|
|
|
@@ -39,6 +44,22 @@ padding of your own:
|
|
|
39
44
|
`cinereel` → **黑白胶片 · 影视创意** · `magazine-ink` → **瓷白靛蓝 · 杂志人文** ·
|
|
40
45
|
`swiss-grid` → **克莱因蓝白 · 瑞士国际**
|
|
41
46
|
|
|
47
|
+
## 皮肤靠什么区分(不只是配色)
|
|
48
|
+
|
|
49
|
+
三条正交的轴。只改配色的皮肤会和别的皮肤长得一样 —— 加皮肤时三条都要想过:
|
|
50
|
+
|
|
51
|
+
1. **字体** — 每个皮肤的 `--font-head`/`--font-body` 组合都是唯一的,并且 CJK 首选也
|
|
52
|
+
分了宋体系/黑体系/楷体系(纯拉丁字体对中文 deck 不起作用,只有 CJK 栈能拉开中文观感)。
|
|
53
|
+
非系统字体必须在 `assets/fonts/fonts.json` 里登记;**衬线/展示字体还必须 bake**,否则
|
|
54
|
+
只在预览里生效、进不了交付的 pptx(见 deck-design.md § Fonts)。
|
|
55
|
+
2. **结构签名** — `backdrop.html` 里一个有边界的标记:页眉条、裁切框、书脊带、四角角标、
|
|
56
|
+
刻度尺、地平线。这是 layout 之外唯一能引入**结构**差异的地方,也是同质化最容易发生的
|
|
57
|
+
环节 —— 弥散的渐变光晕换到别的皮肤上没人看得出,不算签名。
|
|
58
|
+
3. **排版节奏** — `--space-scale` / `--type-scale`。`layouts/*.tpl` 的字号与页边距都写成
|
|
59
|
+
`calc(N * var(--…-scale,1))`,所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。
|
|
60
|
+
当前跨度:`mckinsey` 0.86(董事会材料的信息密度)→ `apple` 1.22(发布会舞台的留白)。
|
|
61
|
+
**改动后必须跑 deck-qa** —— 缩放会重排文字,过大就 off-canvas。
|
|
62
|
+
|
|
42
63
|
## Backdrop variants
|
|
43
64
|
|
|
44
65
|
Every skin ships its own signature `styles/<skin>/backdrop.html`. Beyond that,
|
|
@@ -81,9 +102,9 @@ generations of the same skin don't all look identical. Pass `--backdrop
|
|
|
81
102
|
|
|
82
103
|
Add a skin = **one `styles/<name>/skin.css`** defining the full class contract
|
|
83
104
|
(+ optional `backdrop.html`). The `deck-layouts` guard checks every skin paints the
|
|
84
|
-
contract.
|
|
85
|
-
image: sample its palette → fill the token/class contract
|
|
86
|
-
of the same light/dark polarity).
|
|
105
|
+
contract. Every layout in `layouts/README.md` gets the new skin for free. Build a
|
|
106
|
+
skin from a reference image: sample its palette → fill the token/class contract
|
|
107
|
+
(mirror an existing skin of the same light/dark polarity).
|
|
87
108
|
|
|
88
109
|
Chart color: `stats-chart` fills its bars from **`--chart-1`** (substituted into the
|
|
89
110
|
`__CHART1__` placeholder), NOT the raw `--accent` — accent is tuned as a text/hairline
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* styles/_contract-defaults.css — 扩展契约的中性兜底实现。
|
|
2
|
+
注入顺序:SKELETON_CSS → 本文件 → styles/<id>/skin.css | packs/<id>/pack.css
|
|
3
|
+
皮肤/包可以覆写其中任意一条;不覆写就拿到这里的中性版本。
|
|
4
|
+
目的:扩展契约从"改 N 个皮肤"降为"改这一个文件",让 promote-layout 反向通道跑得起来。
|
|
5
|
+
规则:只能引用已有 token(--accent/--title/--body/--muted/--hair/--c1..--c4/--card-radius),
|
|
6
|
+
一个裸十六进制都不许有 —— deck-layouts.test.ts 会断言。
|
|
7
|
+
|
|
8
|
+
**加一条声明之前必读(属性粒度,不是选择器粒度)**:
|
|
9
|
+
"所有皮肤都定义了这个选择器,所以兜底是惰性的" —— 这个推理只在选择器粒度成立。
|
|
10
|
+
CSS 是逐**属性**层叠的:皮肤在 `.panel` 上只写了 `background`,兜底里的 `border`
|
|
11
|
+
照样会落到它头上。而且皮肤常常把颜色写在更具体的作用域里(比如
|
|
12
|
+
`.steps .step:nth-child(n) .step-circle`),那条规则在没有 `.steps` 祖先的版式里
|
|
13
|
+
(icon-row)根本不匹配,兜底的 `color` 就会赢。
|
|
14
|
+
所以本文件只保留"没有任何现役皮肤会被它改变观感"的属性。逐属性实测(每条声明单独
|
|
15
|
+
注入,与不注入逐字节比对 PNG)后删掉的四条,括号内是实测受影响的组合数:
|
|
16
|
+
.dt-head 的 font-family(7/13 —— anthropic/black-gold/branding/cinereel/hand-drawn/
|
|
17
|
+
ivory-gold/olive-gold 的 data-table 表头字体会从正文体翻成展示体:cinereel
|
|
18
|
+
Jost→Big Shoulders Display、anthropic 无衬线→Fraunces 衬线、hand-drawn
|
|
19
|
+
Comic Sans→Gochi Hand,肉眼可辨。只有 magazine-ink 自己写了 font-family,
|
|
20
|
+
其余五个族的正文体与展示体恰好同族才没变);
|
|
21
|
+
.step-circle 的 color(39/78 —— 皮肤只在 `.steps .step:nth-child(n) .step-circle`
|
|
22
|
+
作用域里定色,icon-row/steps-vertical/versus 没有 .steps 祖先,13 个族全中);
|
|
23
|
+
.panel 的 border(21/26 —— 多数皮肤只写 background/box-shadow);
|
|
24
|
+
同一条规则里的 border-radius 实测 0/26,但一个既无边框又无底色的盒子谈不上圆角,
|
|
25
|
+
所以一并去掉,不留没有意义的声明;
|
|
26
|
+
.cmp-col--rec 的 box-shadow(4/39 —— cinereel 与 magazine-ink 没写)。
|
|
27
|
+
保留下来的 `.cmp-col--rec{border}` 实测 0/39:没写 border 的 swiss-grid 在自己的
|
|
28
|
+
`.cmp-col` 规则里定了边(同特异性、位置在后),仍然赢过兜底。
|
|
29
|
+
改完必须重跑 `node scripts/deck-fidelity.mjs`(它现在会注入本文件,此前不注入,
|
|
30
|
+
所以这个文件曾经完全在像素闸门的视野之外),并按
|
|
31
|
+
`.claude/skills/ppt-tpl-prod/SKILL.md`"改 _contract-defaults.css"一节做
|
|
32
|
+
注入/不注入的对照渲染 —— deck-fidelity 的 32x18 签名对这类细微改动不够敏感。 */
|
|
33
|
+
|
|
34
|
+
/* compare */
|
|
35
|
+
.cmp-col--rec{border:1px solid var(--accent)}
|
|
36
|
+
/* process */
|
|
37
|
+
.step-circle{background:transparent;border:1px solid var(--hair);font-family:var(--font-head)}
|
|
38
|
+
/* toc */
|
|
39
|
+
.toc-num{color:var(--muted);font-family:var(--font-head)}
|
|
40
|
+
/* surfaces */
|
|
41
|
+
.surface{background:transparent;border:1px solid var(--hair);border-radius:var(--card-radius,4px)}
|
|
42
|
+
.panel{background:transparent}
|
|
43
|
+
/* timeline */
|
|
44
|
+
.tl-date{color:var(--title);font-family:var(--font-head)}
|
|
45
|
+
/* concept hub */
|
|
46
|
+
.hub-center{background:transparent;border:1px solid var(--accent);color:var(--title)}
|
|
47
|
+
/* image overlays — 压在图/scrim 上,与皮肤明暗无关 */
|
|
48
|
+
.scrim{background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.55) 100%)}
|
|
49
|
+
.overlay-title{color:rgba(255,255,255,1)}
|
|
50
|
+
/* data table */
|
|
51
|
+
.dt-head{color:var(--title);border-bottom:1px solid var(--hair)}
|
|
52
|
+
/* figures */
|
|
53
|
+
.gantt-bar{background:var(--c1)}
|
|
54
|
+
.map-pin{background:var(--accent)}
|
|
55
|
+
.ring-fill{stroke:var(--accent)}
|
|
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 +1,5 @@
|
|
|
1
1
|
<div style="position:absolute;inset:0;background:radial-gradient(46% 60% at 88% 8%,__ACCENT__24,transparent 60%),radial-gradient(40% 52% at 8% 96%,__ACCENT__14,transparent 64%)"></div><div class="bd-arc" style="position:absolute;left:0;right:0;height:120px;top:var(--bd-arc-y,540px);pointer-events:none"><svg width="100%" height="100%" viewBox="0 0 1280 120" preserveAspectRatio="none"><defs><linearGradient id="arc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="__ACCENT__" stop-opacity=".12"/><stop offset=".5" stop-color="__ACCENT__" stop-opacity=".34"/><stop offset="1" stop-color="__ACCENT__" stop-opacity=".12"/></linearGradient><filter id="arcb"><feGaussianBlur stdDeviation="1.4"/></filter></defs><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width="1.6" filter="url(#arcb)"/><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width=".7"/></svg></div>
|
|
2
|
+
<!-- signature: the margin rule — a scholar's side-note line with an accent tick. -->
|
|
3
|
+
<div style="position:absolute;right:58px;top:104px;bottom:104px;width:1px;background:var(--hair);pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;right:46px;top:104px;width:26px;height:2px;background:var(--accent);pointer-events:none"></div>
|
|
5
|
+
<div style="position:absolute;right:46px;bottom:104px;width:26px;height:2px;background:var(--hair);pointer-events:none"></div>
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/* styles/anthropic — 温暖人文:奶油底 + 赤陶(clay)珊瑚 + Georgia 衬线标题 + 土系 ramp + 软卡。
|
|
2
2
|
皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
|
|
3
3
|
:root{
|
|
4
|
+
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
5
|
+
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。研究分享:呼吸感。 */
|
|
6
|
+
--space-scale:1.05; --type-scale:1.0;
|
|
4
7
|
--accent:#CC785C; --c1:#CC785C; --c2:#7C9082; --c3:#BD5D3E; --c4:#B7A99A; --chart-1:#C4785C;
|
|
5
8
|
--title:#191919; --body:#514B3F; --muted:#6B6558; --foot:#9A917F;
|
|
6
9
|
--hair:#DDD6C7; --card-radius:12px;
|
|
7
|
-
--font-head:
|
|
8
|
-
--font-body:'
|
|
10
|
+
--font-head:'Fraunces','Iowan Old Style','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
11
|
+
--font-body:'Public Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
9
12
|
/* theme-compat vars: SKELETON_CSS's section.slide h1/h2/h3 + section.slide out-specify
|
|
10
13
|
the skin's .cover-title/.slide, so titles/body fall back to these — define them so
|
|
11
14
|
--style alone fully colors the deck. */
|
|
@@ -18,7 +21,11 @@
|
|
|
18
21
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
19
22
|
.rule{background:var(--hair)} .rule-foot{background:#E7E1D3}
|
|
20
23
|
.eyebrow{color:var(--accent);font-weight:700} .accent-bar{background:var(--accent);border-radius:1px}
|
|
21
|
-
|
|
24
|
+
/* This skin's identity IS this face — a didone/garalde/roman falling back to the
|
|
25
|
+
system serif reads as a different deck entirely. Bake the display classes so the
|
|
26
|
+
audience sees it; body copy stays native (editable/searchable). See
|
|
27
|
+
deck-design.md § Fonts for why bundling alone doesn't reach the native text layer. */
|
|
28
|
+
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
22
29
|
.cover-sub,.ending-sub,.section-desc{color:var(--muted)}
|
|
23
30
|
/* soft warm card + earthy ramp */
|
|
24
31
|
.card{border-radius:var(--card-radius);background:#FAF8F2;border:1px solid var(--hair);box-shadow:0 10px 28px rgba(80,55,30,.07);overflow:hidden}
|
|
@@ -35,19 +42,19 @@
|
|
|
35
42
|
.cmp-col--rec .cmp-v{color:var(--accent)}
|
|
36
43
|
.cmp-badge{background:var(--accent);color:#FBF6EF;font-family:var(--font-body)}
|
|
37
44
|
/* kpi / big-stat */
|
|
38
|
-
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)} .kpi-label{color:var(--muted)}
|
|
45
|
+
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1} .kpi-label{color:var(--muted)}
|
|
39
46
|
.stat-unit{color:var(--accent)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
40
47
|
/* steps */
|
|
41
48
|
.step-line{background:var(--hair)}
|
|
42
|
-
.step-circle{background:#F6F1E7;border:1px solid var(--hair);box-shadow:0 10px 24px rgba(80,55,30,.06);font-family:var(--font-head)}
|
|
49
|
+
.step-circle{background:#F6F1E7;border:1px solid var(--hair);box-shadow:0 10px 24px rgba(80,55,30,.06);font-family:var(--font-head);--talos-bake:1}
|
|
43
50
|
.steps .step:nth-child(4n+1) .step-circle{color:var(--c1)} .steps .step:nth-child(4n+2) .step-circle{color:var(--c2)} .steps .step:nth-child(4n+3) .step-circle{color:var(--c3)} .steps .step:nth-child(4n+4) .step-circle{color:var(--c4)}
|
|
44
51
|
.step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
|
|
45
52
|
/* toc */
|
|
46
53
|
.toc-item{border-top:1px solid var(--hair)} .toc-grid .toc-item:nth-child(1){border-top-color:var(--accent)} .toc-grid .toc-item:nth-child(2){border-top-color:var(--c2)}
|
|
47
|
-
.toc-grid .toc-item:nth-child(1) .toc-num{color:var(--accent)} .toc-grid .toc-item:nth-child(2) .toc-num{color:var(--c2)} .toc-num{color:var(--foot);font-family:var(--font-head)}
|
|
54
|
+
.toc-grid .toc-item:nth-child(1) .toc-num{color:var(--accent)} .toc-grid .toc-item:nth-child(2) .toc-num{color:var(--c2)} .toc-num{color:var(--foot);font-family:var(--font-head);--talos-bake:1}
|
|
48
55
|
.toc-title{color:var(--title)} .toc-desc{color:var(--muted)}
|
|
49
56
|
/* section ghost + surface */
|
|
50
|
-
.section-ghost{color:transparent;-webkit-text-stroke:1px rgba(204,120,92,.20);font-family:var(--font-head)}
|
|
57
|
+
.section-ghost{color:transparent;-webkit-text-stroke:1px rgba(204,120,92,.20);font-family:var(--font-head);--talos-bake:1}
|
|
51
58
|
.surface{background:#F6F1E7;border:1px solid var(--hair);border-radius:12px} .surface-label{color:var(--muted)}
|
|
52
59
|
.ending-contact{color:var(--muted)}
|
|
53
60
|
|
|
@@ -56,7 +63,7 @@
|
|
|
56
63
|
.overlay-sub{color:rgba(255,255,255,.82)}
|
|
57
64
|
/* batch-5 layouts: timeline / concept-hub / cover-image */
|
|
58
65
|
.tl-dot{background:var(--accent);border-radius:50%}
|
|
59
|
-
.tl-date{color:var(--accent);font-family:var(--font-head)}
|
|
66
|
+
.tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
|
|
60
67
|
.tl-title{color:var(--title)} .tl-desc{color:var(--muted)}
|
|
61
68
|
.hub-center{border-radius:50%;border:2px solid var(--accent)}
|
|
62
69
|
.hub-title{color:var(--accent)}
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
<div style="position:absolute;inset:0;background:radial-gradient(70% 50% at 50% -12%,rgba(255,255,255,.07),transparent 55%),radial-gradient(130% 90% at 50% 128%,rgba(0,0,0,.42),transparent 48%)"></div><div class="bd-arc" style="position:absolute;left:0;right:0;height:120px;top:var(--bd-arc-y,540px);pointer-events:none"><svg width="100%" height="100%" viewBox="0 0 1280 120" preserveAspectRatio="none"><defs><linearGradient id="arc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="__ACCENT__" stop-opacity=".12"/><stop offset=".5" stop-color="__ACCENT__" stop-opacity=".34"/><stop offset="1" stop-color="__ACCENT__" stop-opacity=".12"/></linearGradient><filter id="arcb"><feGaussianBlur stdDeviation="1.4"/></filter></defs><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width="1.6" filter="url(#arcb)"/><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width=".7"/></svg></div><svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.02;mix-blend-mode:screen;pointer-events:none"><filter id="bdap"><feTurbulence type="fractalNoise" baseFrequency=".9" numOctaves="2" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#bdap)"/></svg>
|
|
1
|
+
<div style="position:absolute;inset:0;background:radial-gradient(70% 50% at 50% -12%,rgba(255,255,255,.07),transparent 55%),radial-gradient(130% 90% at 50% 128%,rgba(0,0,0,.42),transparent 48%)"></div><div class="bd-arc" style="position:absolute;left:0;right:0;height:120px;top:var(--bd-arc-y,540px);pointer-events:none"><svg width="100%" height="100%" viewBox="0 0 1280 120" preserveAspectRatio="none"><defs><linearGradient id="arc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="__ACCENT__" stop-opacity=".12"/><stop offset=".5" stop-color="__ACCENT__" stop-opacity=".34"/><stop offset="1" stop-color="__ACCENT__" stop-opacity=".12"/></linearGradient><filter id="arcb"><feGaussianBlur stdDeviation="1.4"/></filter></defs><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width="1.6" filter="url(#arcb)"/><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width=".7"/></svg></div><svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.02;mix-blend-mode:screen;pointer-events:none"><filter id="bdap"><feTurbulence type="fractalNoise" baseFrequency=".9" numOctaves="2" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#bdap)"/></svg>
|
|
2
|
+
<!-- signature: the keynote stage — one hairline horizon with a faint floor reflection. -->
|
|
3
|
+
<div style="position:absolute;left:0;right:0;bottom:96px;height:112px;pointer-events:none;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--accent) 14%,transparent))"></div>
|
|
4
|
+
<div style="position:absolute;left:0;right:0;bottom:96px;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.55"></div>
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/* styles/apple — keynote 舞台:纯黑底 + 超大留白 + 近白单色层级(无彩色 accent,靠字号/明度分层)。
|
|
2
2
|
皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
|
|
3
3
|
:root{
|
|
4
|
+
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
5
|
+
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。发布会舞台:超大留白,标题略放。 */
|
|
6
|
+
--space-scale:1.22; --type-scale:1.04;
|
|
4
7
|
--accent:#F5F5F7; --c1:#F5F5F7; --c2:#C7C7CC; --c3:#98989D; --c4:#636366; --chart-1:#6E6E73;
|
|
5
8
|
--title:#F5F5F7; --body:#A1A1A6; --muted:#86868B; --foot:#636366;
|
|
6
9
|
--hair:rgba(255,255,255,.09); --card-radius:20px;
|
|
7
|
-
--font-head:'
|
|
8
|
-
--font-body:'
|
|
10
|
+
--font-head:'Manrope','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
11
|
+
--font-body:'Manrope','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
|
|
9
12
|
/* theme-compat vars: SKELETON_CSS targets section.slide h1/h2/h3 + section.slide
|
|
10
13
|
(specificity 0,1,2 / 0,1,1) which out-specify the skin's .cover-title/.slide, so
|
|
11
14
|
titles/body fall back to these. Define them so --style alone fully colors the deck. */
|
|
@@ -1 +1,4 @@
|
|
|
1
1
|
<div class="bd-arc" style="position:absolute;left:0;right:0;height:120px;top:var(--bd-arc-y,540px);pointer-events:none"><svg width="100%" height="100%" viewBox="0 0 1280 120" preserveAspectRatio="none"><defs><linearGradient id="arc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="__ACCENT__" stop-opacity=".12"/><stop offset=".5" stop-color="__ACCENT__" stop-opacity=".34"/><stop offset="1" stop-color="__ACCENT__" stop-opacity=".12"/></linearGradient><filter id="arcb"><feGaussianBlur stdDeviation="1.4"/></filter></defs><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width="1.6" filter="url(#arcb)"/><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width=".7"/></svg></div><svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.045;mix-blend-mode:overlay;pointer-events:none"><filter id="bgn"><feTurbulence type="fractalNoise" baseFrequency=".8" numOctaves="2" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#bgn)"/></svg>
|
|
2
|
+
<!-- signature: the certificate — a double rule inside the trim, bond-paper convention. -->
|
|
3
|
+
<div style="position:absolute;inset:26px;border:1px solid var(--accent);opacity:.38;pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;inset:33px;border:1px solid var(--hair);pointer-events:none"></div>
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/* styles/black-gold — 纯黑 + 金辉光 + 衬线 + 单色金 ramp。复用同一套 layouts。 */
|
|
2
2
|
:root{
|
|
3
|
+
/* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
|
|
4
|
+
所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。年报:庄重的边距。 */
|
|
5
|
+
--space-scale:1.1; --type-scale:1.0;
|
|
3
6
|
--accent:#D4AF37; --c1:#D4AF37; --c2:#E7C08A; --c3:#C9A24B; --c4:#F5D98B; --chart-1:#B8912C;
|
|
4
7
|
--title:#F6E8C2; --body:#b3a887; --muted:#8a7f63; --foot:#6a614a;
|
|
5
8
|
--hair:rgba(212,175,55,.16); --card-radius:16px;
|
|
6
|
-
--font-head:'
|
|
7
|
-
--font-body:'
|
|
9
|
+
--font-head:'Bodoni Moda','Didot','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
10
|
+
--font-body:'Lora','Songti SC','Noto Serif SC','Source Han Serif SC',serif;
|
|
8
11
|
/* theme-compat vars: SKELETON_CSS's section.slide h1/h2/h3 + section.slide out-specify
|
|
9
12
|
the skin's .cover-title/.slide, so titles/body fall back to these — define them so
|
|
10
13
|
--style alone fully colors the deck (else headings render dark on the dark bg). */
|
|
@@ -18,7 +21,11 @@
|
|
|
18
21
|
.deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
|
|
19
22
|
.rule{background:var(--hair)} .rule-foot{background:rgba(212,175,55,.10)}
|
|
20
23
|
.eyebrow{color:var(--accent)} .accent-bar{background:var(--accent);border-radius:1px}
|
|
21
|
-
|
|
24
|
+
/* This skin's identity IS this face — a didone/garalde/roman falling back to the
|
|
25
|
+
system serif reads as a different deck entirely. Bake the display classes so the
|
|
26
|
+
audience sees it; body copy stays native (editable/searchable). See
|
|
27
|
+
deck-design.md § Fonts for why bundling alone doesn't reach the native text layer. */
|
|
28
|
+
.deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
|
|
22
29
|
.cover-sub,.ending-sub,.section-desc{color:var(--body)}
|
|
23
30
|
.card{border-radius:var(--card-radius);background:linear-gradient(180deg,rgba(212,175,55,.06),rgba(212,175,55,.015));border:1px solid rgba(212,175,55,.20);box-shadow:0 24px 60px rgba(0,0,0,.5);overflow:hidden}
|
|
24
31
|
.card-idx{color:var(--muted)} .card-body{color:var(--body)}
|
|
@@ -32,16 +39,16 @@
|
|
|
32
39
|
.cmp-title{color:var(--title)} .cmp-k{color:var(--muted)} .cmp-v{color:var(--title)}
|
|
33
40
|
.cmp-col--rec .cmp-v{color:var(--accent)}
|
|
34
41
|
.cmp-badge{background:var(--accent);color:#241a04}
|
|
35
|
-
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)} .kpi-label{color:var(--muted)}
|
|
42
|
+
.kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1} .kpi-label{color:var(--muted)}
|
|
36
43
|
.stat-unit{color:var(--accent)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
|
|
37
44
|
.step-line{background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.5}
|
|
38
|
-
.step-circle{background:linear-gradient(180deg,rgba(212,175,55,.06),rgba(212,175,55,.015));border:1px solid rgba(212,175,55,.22);box-shadow:0 20px 44px rgba(0,0,0,.5);font-family:var(--font-head)}
|
|
45
|
+
.step-circle{background:linear-gradient(180deg,rgba(212,175,55,.06),rgba(212,175,55,.015));border:1px solid rgba(212,175,55,.22);box-shadow:0 20px 44px rgba(0,0,0,.5);font-family:var(--font-head);--talos-bake:1}
|
|
39
46
|
.steps .step:nth-child(4n+1) .step-circle{color:var(--c1)} .steps .step:nth-child(4n+2) .step-circle{color:var(--c2)} .steps .step:nth-child(4n+3) .step-circle{color:var(--c3)} .steps .step:nth-child(4n+4) .step-circle{color:var(--c4)}
|
|
40
47
|
.step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
|
|
41
48
|
.toc-item{border-top:1px solid var(--hair)} .toc-grid .toc-item:nth-child(1){border-top-color:var(--c1)} .toc-grid .toc-item:nth-child(2){border-top-color:var(--c2)}
|
|
42
|
-
.toc-grid .toc-item:nth-child(1) .toc-num{color:var(--c1)} .toc-grid .toc-item:nth-child(2) .toc-num{color:var(--c2)} .toc-num{color:var(--foot);font-family:var(--font-head)}
|
|
49
|
+
.toc-grid .toc-item:nth-child(1) .toc-num{color:var(--c1)} .toc-grid .toc-item:nth-child(2) .toc-num{color:var(--c2)} .toc-num{color:var(--foot);font-family:var(--font-head);--talos-bake:1}
|
|
43
50
|
.toc-title{color:var(--title)} .toc-desc{color:var(--muted)}
|
|
44
|
-
.section-ghost{color:transparent;-webkit-text-stroke:1px rgba(212,175,55,.16);font-family:var(--font-head)}
|
|
51
|
+
.section-ghost{color:transparent;-webkit-text-stroke:1px rgba(212,175,55,.16);font-family:var(--font-head);--talos-bake:1}
|
|
45
52
|
.surface{background:rgba(212,175,55,.04);border:1px solid rgba(212,175,55,.20);border-radius:16px} .surface-label{color:var(--muted)}
|
|
46
53
|
.ending-contact{color:var(--muted)}
|
|
47
54
|
|
|
@@ -50,7 +57,7 @@
|
|
|
50
57
|
.overlay-sub{color:rgba(255,255,255,.82)}
|
|
51
58
|
/* batch-5 layouts: timeline / concept-hub / cover-image (added classes) */
|
|
52
59
|
.tl-dot{background:var(--accent);border-radius:50%}
|
|
53
|
-
.tl-date{color:var(--accent);font-family:var(--font-head)}
|
|
60
|
+
.tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
|
|
54
61
|
.tl-title{color:var(--title)} .tl-desc{color:var(--muted)}
|
|
55
62
|
.hub-center{border-radius:50%;border:2px solid var(--accent)}
|
|
56
63
|
.hub-title{color:var(--accent)}
|
|
@@ -1 +1,5 @@
|
|
|
1
1
|
<div style="position:absolute;inset:0;background:radial-gradient(50% 64% at 92% 4%,rgba(122,154,114,.11),transparent 58%),radial-gradient(44% 54% at 4% 98%,rgba(183,156,110,.07),transparent 62%)"></div><svg width="1280" height="720" viewBox="0 0 1280 720" style="position:absolute;inset:0" preserveAspectRatio="none"><defs><linearGradient id="brl" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#7A9A72" stop-opacity="0"/><stop offset=".5" stop-color="#7A9A72" stop-opacity=".26"/><stop offset="1" stop-color="#7A9A72" stop-opacity="0"/></linearGradient></defs><path d="M-40 150 C 380 92,880 128,1330 44" fill="none" stroke="url(#brl)" stroke-width=".7"/></svg><svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.04;mix-blend-mode:multiply;pointer-events:none"><filter id="brn"><feTurbulence type="fractalNoise" baseFrequency=".82" numOctaves="2" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#brn)"/></svg>
|
|
2
|
+
<!-- signature: the brand-book spine — a bound left edge with its fold rule. -->
|
|
3
|
+
<div style="position:absolute;left:0;top:0;bottom:0;width:30px;background:var(--accent);opacity:.15;pointer-events:none"></div>
|
|
4
|
+
<div style="position:absolute;left:30px;top:0;bottom:0;width:1px;background:var(--hair);pointer-events:none"></div>
|
|
5
|
+
<div style="position:absolute;left:0;top:64px;width:30px;height:44px;background:var(--accent);opacity:.5;pointer-events:none"></div>
|