@taloswork/ose-shared 0.1.2 → 0.1.4

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.
Files changed (237) hide show
  1. package/package.json +3 -3
  2. package/skills/document/SKILL.md +56 -53
  3. package/skills/document/assets/fonts/Archivo-Regular.woff2 +0 -0
  4. package/skills/document/assets/fonts/Archivo-SemiBold.woff2 +0 -0
  5. package/skills/document/assets/fonts/BigShouldersDisplay-Bold.woff2 +0 -0
  6. package/skills/document/assets/fonts/BodoniModa-SemiBold.woff2 +0 -0
  7. package/skills/document/assets/fonts/ChakraPetch-600.woff2 +0 -0
  8. package/skills/document/assets/fonts/CormorantGaramond-SemiBold.woff2 +0 -0
  9. package/skills/document/assets/fonts/DMSerifDisplay-400.woff2 +0 -0
  10. package/skills/document/assets/fonts/Fraunces-SemiBold.woff2 +0 -0
  11. package/skills/document/assets/fonts/GochiHand-Regular.woff2 +0 -0
  12. package/skills/document/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  13. package/skills/document/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  14. package/skills/document/assets/fonts/Inter-Regular.woff2 +0 -0
  15. package/skills/document/assets/fonts/Jost-Regular.woff2 +0 -0
  16. package/skills/document/assets/fonts/Jost-SemiBold.woff2 +0 -0
  17. package/skills/document/assets/fonts/Karla-Regular.woff2 +0 -0
  18. package/skills/document/assets/fonts/Lexend-500.woff2 +0 -0
  19. package/skills/document/assets/fonts/Lora-Regular.woff2 +0 -0
  20. package/skills/document/assets/fonts/Manrope-Bold.woff2 +0 -0
  21. package/skills/document/assets/fonts/Manrope-Regular.woff2 +0 -0
  22. package/skills/document/assets/fonts/Marcellus-Regular.woff2 +0 -0
  23. package/skills/document/assets/fonts/Nunito-700.woff2 +0 -0
  24. package/skills/document/assets/fonts/PlayfairDisplay-600.woff2 +0 -0
  25. package/skills/document/assets/fonts/PublicSans-Regular.woff2 +0 -0
  26. package/skills/document/assets/fonts/Quicksand-600.woff2 +0 -0
  27. package/skills/document/assets/fonts/Sora-Regular.woff2 +0 -0
  28. package/skills/document/assets/fonts/Sora-SemiBold.woff2 +0 -0
  29. package/skills/document/assets/fonts/SpaceGrotesk-500.woff2 +0 -0
  30. package/skills/document/assets/fonts/Syne-700.woff2 +0 -0
  31. package/skills/document/assets/fonts/ZillaSlab-600.woff2 +0 -0
  32. package/skills/document/assets/fonts/fonts.json +316 -0
  33. package/skills/document/bin/deck-build.cjs +273 -5
  34. package/skills/document/bin/doc-gen.cjs +108 -23
  35. package/skills/document/bin/html2pptx.cjs +284 -51
  36. package/skills/document/catalog.json +43 -0
  37. package/skills/document/deck-design.md +191 -0
  38. package/skills/document/layouts/README.md +33 -0
  39. package/skills/document/layouts/banner-columns.tpl +9 -9
  40. package/skills/document/layouts/bento.tpl +3 -3
  41. package/skills/document/layouts/big-stat.tpl +3 -3
  42. package/skills/document/layouts/blocks-2x2.tpl +12 -12
  43. package/skills/document/layouts/brand-values.tpl +5 -5
  44. package/skills/document/layouts/cards-3.tpl +3 -3
  45. package/skills/document/layouts/cards-grid.tpl +3 -3
  46. package/skills/document/layouts/chart-full.tpl +3 -3
  47. package/skills/document/layouts/chart-kpi.tpl +3 -3
  48. package/skills/document/layouts/color-palette.tpl +5 -5
  49. package/skills/document/layouts/comparison.tpl +3 -3
  50. package/skills/document/layouts/concept-hub.tpl +3 -3
  51. package/skills/document/layouts/cover-centered.tpl +1 -1
  52. package/skills/document/layouts/cover-image.tpl +1 -1
  53. package/skills/document/layouts/cover-minimal.tpl +3 -3
  54. package/skills/document/layouts/cover-statement.tpl +3 -3
  55. package/skills/document/layouts/cover.tpl +1 -1
  56. package/skills/document/layouts/data-table.tpl +3 -3
  57. package/skills/document/layouts/dos-donts.tpl +14 -14
  58. package/skills/document/layouts/editorial-panel.tpl +11 -11
  59. package/skills/document/layouts/ending-contact.tpl +1 -1
  60. package/skills/document/layouts/ending.tpl +1 -1
  61. package/skills/document/layouts/funnel.tpl +3 -3
  62. package/skills/document/layouts/gantt.tpl +3 -3
  63. package/skills/document/layouts/hero.tpl +3 -3
  64. package/skills/document/layouts/icon-row.tpl +3 -3
  65. package/skills/document/layouts/image-full.tpl +5 -5
  66. package/skills/document/layouts/image-grid.tpl +3 -3
  67. package/skills/document/layouts/image-left.tpl +3 -3
  68. package/skills/document/layouts/list.tpl +3 -3
  69. package/skills/document/layouts/logo-guidelines.tpl +8 -8
  70. package/skills/document/layouts/map-distribution.tpl +3 -3
  71. package/skills/document/layouts/map-quad.tpl +6 -6
  72. package/skills/document/layouts/matrix-2x2.tpl +3 -3
  73. package/skills/document/layouts/numbered-brief.tpl +12 -12
  74. package/skills/document/layouts/org-tree.tpl +3 -3
  75. package/skills/document/layouts/problem-solution-banner.tpl +7 -7
  76. package/skills/document/layouts/problem-solution.tpl +3 -3
  77. package/skills/document/layouts/pyramid.tpl +3 -3
  78. package/skills/document/layouts/quote-aside.tpl +11 -0
  79. package/skills/document/layouts/quote.tpl +1 -1
  80. package/skills/document/layouts/radar.tpl +3 -3
  81. package/skills/document/layouts/ring-progress.tpl +3 -3
  82. package/skills/document/layouts/section-fullbleed.tpl +3 -3
  83. package/skills/document/layouts/section-image.tpl +1 -1
  84. package/skills/document/layouts/section-stat.tpl +1 -1
  85. package/skills/document/layouts/section.tpl +1 -1
  86. package/skills/document/layouts/slots.json +1 -1
  87. package/skills/document/layouts/split-two-col.tpl +3 -3
  88. package/skills/document/layouts/stats-chart.tpl +3 -3
  89. package/skills/document/layouts/steps-serpentine.tpl +11 -11
  90. package/skills/document/layouts/steps-vertical.tpl +3 -3
  91. package/skills/document/layouts/steps.tpl +3 -3
  92. package/skills/document/layouts/team-row.tpl +4 -4
  93. package/skills/document/layouts/three-kpi.tpl +3 -3
  94. package/skills/document/layouts/timeline.tpl +3 -3
  95. package/skills/document/layouts/title-meta.tpl +5 -5
  96. package/skills/document/layouts/title.tpl +2 -2
  97. package/skills/document/layouts/toc-agenda.tpl +3 -3
  98. package/skills/document/layouts/toc-editorial.tpl +15 -0
  99. package/skills/document/layouts/toc-panel.tpl +4 -4
  100. package/skills/document/layouts/toc.tpl +3 -3
  101. package/skills/document/layouts/transition.tpl +1 -1
  102. package/skills/document/layouts/two-kpi.tpl +3 -3
  103. package/skills/document/layouts/type-specimen.tpl +10 -10
  104. package/skills/document/layouts/versus.tpl +3 -3
  105. package/skills/document/motion/README.md +29 -0
  106. package/skills/document/motion/anthropic.json +29 -0
  107. package/skills/document/motion/apple.json +41 -0
  108. package/skills/document/motion/bistro-warm.json +16 -0
  109. package/skills/document/motion/black-gold.json +29 -0
  110. package/skills/document/motion/board-brief.json +14 -0
  111. package/skills/document/motion/bold-clash.json +16 -0
  112. package/skills/document/motion/branding.json +22 -0
  113. package/skills/document/motion/campus-teal.json +22 -0
  114. package/skills/document/motion/cinereel.json +23 -0
  115. package/skills/document/motion/clinic-care.json +22 -0
  116. package/skills/document/motion/cool.json +41 -0
  117. package/skills/document/motion/dark-glass.json +22 -0
  118. package/skills/document/motion/gov-brief.json +14 -0
  119. package/skills/document/motion/grid-tech.json +16 -0
  120. package/skills/document/motion/hand-drawn.json +23 -0
  121. package/skills/document/motion/ivory-gold.json +22 -0
  122. package/skills/document/motion/legal-slate.json +15 -0
  123. package/skills/document/motion/magazine-ink.json +29 -0
  124. package/skills/document/motion/mckinsey.json +28 -0
  125. package/skills/document/motion/memphis.json +16 -0
  126. package/skills/document/motion/mono.json +21 -0
  127. package/skills/document/motion/neon-cyber.json +42 -0
  128. package/skills/document/motion/olive-gold.json +22 -0
  129. package/skills/document/motion/organic-earth.json +15 -0
  130. package/skills/document/motion/pastel-saas.json +15 -0
  131. package/skills/document/motion/portfolio-noir.json +21 -0
  132. package/skills/document/motion/press-room.json +14 -0
  133. package/skills/document/motion/retro-press.json +15 -0
  134. package/skills/document/motion/sport-arena.json +16 -0
  135. package/skills/document/motion/swiss-grid.json +34 -0
  136. package/skills/document/motion/wedding-blush.json +15 -0
  137. package/skills/document/packs/README.md +28 -0
  138. package/skills/document/packs/board-brief/backdrop.html +4 -0
  139. package/skills/document/packs/board-brief/layouts/cover.tpl +12 -0
  140. package/skills/document/packs/board-brief/layouts/toc-agenda.tpl +20 -0
  141. package/skills/document/packs/board-brief/pack.css +27 -0
  142. package/skills/document/packs/press-room/backdrop.html +4 -0
  143. package/skills/document/packs/press-room/layouts/cover.tpl +12 -0
  144. package/skills/document/packs/press-room/layouts/section.tpl +13 -0
  145. package/skills/document/packs/press-room/pack.css +27 -0
  146. package/skills/document/styles/README.md +65 -16
  147. package/skills/document/styles/_contract-defaults.css +55 -0
  148. package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
  149. package/skills/document/styles/_samples/_groups/creative.webp +0 -0
  150. package/skills/document/styles/_samples/_groups/editorial.webp +0 -0
  151. package/skills/document/styles/_samples/_groups/minimal.webp +0 -0
  152. package/skills/document/styles/_samples/_groups/natural.webp +0 -0
  153. package/skills/document/styles/_samples/_groups/tech-future.webp +0 -0
  154. package/skills/document/styles/_samples/anthropic.webp +0 -0
  155. package/skills/document/styles/_samples/apple.webp +0 -0
  156. package/skills/document/styles/_samples/bistro-warm.webp +0 -0
  157. package/skills/document/styles/_samples/black-gold.webp +0 -0
  158. package/skills/document/styles/_samples/board-brief.webp +0 -0
  159. package/skills/document/styles/_samples/bold-clash.webp +0 -0
  160. package/skills/document/styles/_samples/branding.webp +0 -0
  161. package/skills/document/styles/_samples/campus-teal.webp +0 -0
  162. package/skills/document/styles/_samples/cinereel.webp +0 -0
  163. package/skills/document/styles/_samples/clinic-care.webp +0 -0
  164. package/skills/document/styles/_samples/cool.webp +0 -0
  165. package/skills/document/styles/_samples/dark-glass.webp +0 -0
  166. package/skills/document/styles/_samples/gov-brief.webp +0 -0
  167. package/skills/document/styles/_samples/grid-tech.webp +0 -0
  168. package/skills/document/styles/_samples/hand-drawn.webp +0 -0
  169. package/skills/document/styles/_samples/ivory-gold.webp +0 -0
  170. package/skills/document/styles/_samples/legal-slate.webp +0 -0
  171. package/skills/document/styles/_samples/magazine-ink.webp +0 -0
  172. package/skills/document/styles/_samples/mckinsey.webp +0 -0
  173. package/skills/document/styles/_samples/memphis.webp +0 -0
  174. package/skills/document/styles/_samples/mono.webp +0 -0
  175. package/skills/document/styles/_samples/neon-cyber.webp +0 -0
  176. package/skills/document/styles/_samples/olive-gold.webp +0 -0
  177. package/skills/document/styles/_samples/organic-earth.webp +0 -0
  178. package/skills/document/styles/_samples/pastel-saas.webp +0 -0
  179. package/skills/document/styles/_samples/portfolio-noir.webp +0 -0
  180. package/skills/document/styles/_samples/press-room.webp +0 -0
  181. package/skills/document/styles/_samples/retro-press.webp +0 -0
  182. package/skills/document/styles/_samples/sport-arena.webp +0 -0
  183. package/skills/document/styles/_samples/swiss-grid.webp +0 -0
  184. package/skills/document/styles/_samples/wedding-blush.webp +0 -0
  185. package/skills/document/styles/anthropic/backdrop.html +4 -0
  186. package/skills/document/styles/anthropic/skin.css +15 -8
  187. package/skills/document/styles/apple/backdrop.html +4 -1
  188. package/skills/document/styles/apple/skin.css +5 -2
  189. package/skills/document/styles/bistro-warm/backdrop.html +4 -0
  190. package/skills/document/styles/bistro-warm/skin.css +27 -0
  191. package/skills/document/styles/black-gold/backdrop.html +3 -0
  192. package/skills/document/styles/black-gold/skin.css +15 -8
  193. package/skills/document/styles/bold-clash/backdrop.html +4 -0
  194. package/skills/document/styles/bold-clash/skin.css +27 -0
  195. package/skills/document/styles/branding/backdrop.html +4 -0
  196. package/skills/document/styles/branding/skin.css +14 -7
  197. package/skills/document/styles/campus-teal/backdrop.html +3 -0
  198. package/skills/document/styles/campus-teal/skin.css +27 -0
  199. package/skills/document/styles/cinereel/skin.css +28 -10
  200. package/skills/document/styles/clinic-care/backdrop.html +4 -0
  201. package/skills/document/styles/clinic-care/skin.css +27 -0
  202. package/skills/document/styles/cool/backdrop.html +3 -0
  203. package/skills/document/styles/cool/skin.css +5 -2
  204. package/skills/document/styles/dark-glass/backdrop.html +4 -0
  205. package/skills/document/styles/dark-glass/skin.css +27 -0
  206. package/skills/document/styles/gov-brief/backdrop.html +4 -0
  207. package/skills/document/styles/gov-brief/skin.css +27 -0
  208. package/skills/document/styles/grid-tech/backdrop.html +37 -0
  209. package/skills/document/styles/grid-tech/skin.css +27 -0
  210. package/skills/document/styles/hand-drawn/skin.css +16 -8
  211. package/skills/document/styles/ivory-gold/skin.css +21 -8
  212. package/skills/document/styles/legal-slate/backdrop.html +6 -0
  213. package/skills/document/styles/legal-slate/skin.css +27 -0
  214. package/skills/document/styles/magazine-ink/skin.css +7 -2
  215. package/skills/document/styles/mckinsey/backdrop.html +5 -0
  216. package/skills/document/styles/mckinsey/skin.css +5 -2
  217. package/skills/document/styles/memphis/backdrop.html +5 -0
  218. package/skills/document/styles/memphis/skin.css +27 -0
  219. package/skills/document/styles/mono/backdrop.html +6 -0
  220. package/skills/document/styles/mono/skin.css +6 -3
  221. package/skills/document/styles/neon-cyber/backdrop.html +4 -0
  222. package/skills/document/styles/neon-cyber/skin.css +27 -0
  223. package/skills/document/styles/olive-gold/backdrop.html +5 -0
  224. package/skills/document/styles/olive-gold/skin.css +15 -8
  225. package/skills/document/styles/organic-earth/backdrop.html +4 -0
  226. package/skills/document/styles/organic-earth/skin.css +27 -0
  227. package/skills/document/styles/pastel-saas/backdrop.html +4 -0
  228. package/skills/document/styles/pastel-saas/skin.css +27 -0
  229. package/skills/document/styles/portfolio-noir/backdrop.html +4 -0
  230. package/skills/document/styles/portfolio-noir/skin.css +27 -0
  231. package/skills/document/styles/retro-press/backdrop.html +6 -0
  232. package/skills/document/styles/retro-press/skin.css +27 -0
  233. package/skills/document/styles/sport-arena/backdrop.html +4 -0
  234. package/skills/document/styles/sport-arena/skin.css +27 -0
  235. package/skills/document/styles/swiss-grid/skin.css +6 -1
  236. package/skills/document/styles/wedding-blush/backdrop.html +6 -0
  237. package/skills/document/styles/wedding-blush/skin.css +27 -0
@@ -0,0 +1,37 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: ruler -->
2
+ <div style="position:absolute;inset:0;background:#111C14"></div>
3
+ <div style="position:absolute;left:64px;right:64px;bottom:56px;height:14px;pointer-events:none">
4
+ <div style="position:absolute;left:64px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
5
+ <div style="position:absolute;left:100px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
6
+ <div style="position:absolute;left:136px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
7
+ <div style="position:absolute;left:172px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
8
+ <div style="position:absolute;left:208px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
9
+ <div style="position:absolute;left:244px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
10
+ <div style="position:absolute;left:280px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
11
+ <div style="position:absolute;left:316px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
12
+ <div style="position:absolute;left:352px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
13
+ <div style="position:absolute;left:388px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
14
+ <div style="position:absolute;left:424px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
15
+ <div style="position:absolute;left:460px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
16
+ <div style="position:absolute;left:496px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
17
+ <div style="position:absolute;left:532px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
18
+ <div style="position:absolute;left:568px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
19
+ <div style="position:absolute;left:604px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
20
+ <div style="position:absolute;left:640px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
21
+ <div style="position:absolute;left:676px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
22
+ <div style="position:absolute;left:712px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
23
+ <div style="position:absolute;left:748px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
24
+ <div style="position:absolute;left:784px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
25
+ <div style="position:absolute;left:820px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
26
+ <div style="position:absolute;left:856px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
27
+ <div style="position:absolute;left:892px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
28
+ <div style="position:absolute;left:928px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
29
+ <div style="position:absolute;left:964px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
30
+ <div style="position:absolute;left:1000px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
31
+ <div style="position:absolute;left:1036px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
32
+ <div style="position:absolute;left:1072px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
33
+ <div style="position:absolute;left:1108px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
34
+ <div style="position:absolute;left:1144px;bottom:0;width:1px;height:14px;background:var(--hair);pointer-events:none"></div>
35
+ <div style="position:absolute;left:1180px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
36
+ <div style="position:absolute;left:1216px;bottom:0;width:1px;height:7px;background:var(--hair);pointer-events:none"></div>
37
+ </div>
@@ -0,0 +1,27 @@
1
+ /* styles/grid-tech — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/grid-tech/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:0.92; --type-scale:1;
5
+ --accent:#4ACE68; --c1:#4ACE68; --c2:#26CACA; --c3:#42C2FE; --c4:#BCABFD; --chart-1:#4ACE68;
6
+ --title:#EBF3ED; --body:#B0B8B1; --muted:#7B837D; --foot:#7B837D;
7
+ --hair:#333E35; --card-radius:4px;
8
+ --font-head:'Chakra Petch','Noto Sans SC',sans-serif;
9
+ --font-body:'IBM Plex Sans','Noto Sans SC',sans-serif;
10
+ --title-color:#EBF3ED; --body-color:#B0B8B1; --slide-bg:#111C14; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#111C14;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#111C14}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -1,11 +1,14 @@
1
1
  /* styles/hand-drawn — 手绘涂鸦:纸感底 + 马克笔色 + 深描边卡 + 手写体。
2
2
  皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
3
3
  :root{
4
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。工作坊:字大一点更好读,边距收一点。 */
6
+ --space-scale:0.96; --type-scale:1.05;
4
7
  --accent:#E63946; --c1:#E63946; --c2:#457B9D; --c3:#E9A63A; --c4:#2A9D8F; --chart-1:#DE6A66;
5
8
  --title:#2B2B2B; --body:#3A3A3A; --muted:#8A8A80; --foot:#A8A89E;
6
9
  --hair:rgba(43,43,43,.16); --ink:rgba(43,43,43,.55); --card-radius:16px;
7
- --font-head:'Gochi Hand','ZCOOL KuaiLe','Comic Sans MS','PingFang SC',cursive;
8
- --font-body:'Comic Sans MS','Noto Sans SC','PingFang SC',cursive;
10
+ --font-head:'Gochi Hand','PingFang SC','Noto Sans SC',cursive;
11
+ --font-body:'Manrope','PingFang SC','Noto Sans SC',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. */
@@ -16,7 +19,12 @@
16
19
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted);font-family:'Helvetica Neue','PingFang SC',sans-serif}
17
20
  .rule{background:var(--hair)} .rule-foot{background:rgba(43,43,43,.10)}
18
21
  .eyebrow{color:var(--accent);font-family:'Helvetica Neue','PingFang SC',sans-serif;font-weight:700} .accent-bar{background:var(--accent);border-radius:2px}
19
- .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
22
+ /* Gochi Hand is the whole point of this skin and no OS ships it, so the NATIVE text
23
+ layer resolves the stack further down: Comic Sans MS where Microsoft fonts exist,
24
+ and the bare `cursive` keyword (LibreOffice → Snell Roundhand, a copperplate script)
25
+ where they don't. Bake the marker-pen faces so the hand-drawn look is what the
26
+ audience actually sees. `.panel-item-title` stays native — real editable content. */
27
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
20
28
  .cover-sub,.ending-sub,.section-desc{color:var(--body)}
21
29
  /* off-white card + dark sketchy border + marker ramp */
22
30
  .card{border-radius:var(--card-radius);background:#FFFDF8;border:2px solid var(--ink);box-shadow:0 12px 30px rgba(20,25,45,.08);overflow:hidden}
@@ -33,19 +41,19 @@
33
41
  .cmp-col--rec .cmp-v{color:var(--accent)}
34
42
  .cmp-badge{background:var(--accent);color:#FFFFFF;font-family:'Helvetica Neue','PingFang SC',sans-serif}
35
43
  /* kpi / big-stat */
36
- .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)} .kpi-label{color:var(--muted)}
44
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1} .kpi-label{color:var(--muted)}
37
45
  .stat-unit{color:var(--accent)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
38
46
  /* steps */
39
47
  .step-line{background:var(--hair)}
40
- .step-circle{background:#FFFDF8;border:2px solid var(--ink);box-shadow:0 10px 24px rgba(20,25,45,.07);font-family:var(--font-head)}
48
+ .step-circle{background:#FFFDF8;border:2px solid var(--ink);box-shadow:0 10px 24px rgba(20,25,45,.07);font-family:var(--font-head);--talos-bake:1}
41
49
  .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)}
42
50
  .step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
43
51
  /* toc */
44
52
  .toc-item{border-top:2px 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)}
45
- .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)}
53
+ .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}
46
54
  .toc-title{color:var(--title)} .toc-desc{color:var(--muted)}
47
55
  /* section ghost + surface */
48
- .section-ghost{color:transparent;-webkit-text-stroke:2px rgba(43,43,43,.14);font-family:var(--font-head)}
56
+ .section-ghost{color:transparent;-webkit-text-stroke:2px rgba(43,43,43,.14);font-family:var(--font-head);--talos-bake:1}
49
57
  .surface{background:#FFFDF8;border:2px solid var(--ink);border-radius:16px} .surface-label{color:var(--muted)}
50
58
  .ending-contact{color:var(--muted)}
51
59
 
@@ -54,7 +62,7 @@
54
62
  .overlay-sub{color:rgba(255,255,255,.82)}
55
63
  /* batch-5 layouts: timeline / concept-hub / cover-image */
56
64
  .tl-dot{background:var(--accent);border-radius:50%}
57
- .tl-date{color:var(--accent);font-family:var(--font-head)}
65
+ .tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
58
66
  .tl-title{color:var(--title)} .tl-desc{color:var(--muted)}
59
67
  .hub-center{border-radius:50%;border:3px solid var(--accent)}
60
68
  .hub-title{color:var(--accent)}
@@ -1,13 +1,15 @@
1
1
  /* styles/ivory-gold — 奶油底 + 青铜金标题(标题=accent,非独立浅色) + Anton 粗体无衬线大写 +
2
2
  黑色反色区块(.slide-inverse,同一 layout 可多次复用,每次实例自行决定极性)。
3
3
  皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
4
- @font-face{font-family:'Anton';src:local('Anton'),url(data:font/woff2;base64,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) format('woff2');font-display:swap}
5
4
  :root{
5
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
6
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。奢华极简:靠留白撑场。 */
7
+ --space-scale:1.16; --type-scale:1.0;
6
8
  --accent:#A97C3F; --c1:#A97C3F; --c2:#C9A467; --c3:#8A6530; --c4:#DCC08C; --chart-1:#B58A4A;
7
9
  --title:#A97C3F; --body:#2B2823; --muted:#6B6558; --foot:#8A8374;
8
10
  --hair:rgba(169,124,63,.22); --card-radius:6px;
9
- --font-head:'Anton','Arial Narrow Bold','Heiti SC','PingFang SC',sans-serif;
10
- --font-body:'Inter','Helvetica Neue',-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
11
+ --font-head:'Anton','PingFang SC','Noto Sans SC',sans-serif;
12
+ --font-body:'Inter','PingFang SC','Noto Sans SC',sans-serif;
11
13
  /* theme-compat vars: SKELETON_CSS's section.slide h1/h2/h3 + section.slide out-specify
12
14
  the skin's .cover-title/.slide, so titles/body fall back to these — define them so
13
15
  --style alone fully colors the deck. */
@@ -47,19 +49,30 @@
47
49
  .cmp-col--rec .cmp-v{color:var(--accent)}
48
50
  .cmp-badge{background:var(--accent);color:#FFFFFF}
49
51
  /* kpi / big-stat */
50
- .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)} .kpi-label{color:var(--muted)}
52
+ /* Anton in the NATIVE text layer is a lottery (the consuming app substitutes a wider
53
+ generic sans — wrong glyphs, and wide enough to wrap). These are decorative display
54
+ numerals/dates that nobody edits, so fidelity beats editability: bake them, same call
55
+ as the titles above. `.panel-item-title` is deliberately NOT baked — it is real
56
+ content a reader may want to change. Baked text is also invisible to data-anim and
57
+ deck-qa; see deck-design.md § Fonts. */
58
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1} .kpi-label{color:var(--muted)}
51
59
  .stat-unit{color:var(--accent)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
52
60
  /* steps */
53
61
  .step-line{background:var(--hair)}
54
- .step-circle{background:rgba(169,124,63,.05);border:1px solid var(--hair);box-shadow:0 6px 18px rgba(0,0,0,.05);font-family:var(--font-head)}
62
+ .step-circle{background:rgba(169,124,63,.05);border:1px solid var(--hair);box-shadow:0 6px 18px rgba(0,0,0,.05);font-family:var(--font-head);--talos-bake:1}
55
63
  .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)}
56
64
  .step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
57
65
  /* toc */
58
66
  .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)}
59
- .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)}
67
+ .toc-grid .toc-item:nth-child(1) .toc-num{color:var(--c1)} .toc-grid .toc-item:nth-child(2) .toc-num{color:var(--c2)} /* Anton is a custom condensed face the consuming app may fail to resolve for the
68
+ NATIVE text layer (same failure the title rule above documents). On a big
69
+ display numeral that substitution is wide enough to wrap the trailing "."
70
+ onto its own line — and the numeral renders in a generic sans instead of
71
+ Anton. Bake it: these numerals are decoration, editability buys nothing. */
72
+ .toc-num{color:var(--foot);font-family:var(--font-head);--talos-bake:1}
60
73
  .toc-title{color:var(--title)} .toc-desc{color:var(--muted)}
61
74
  /* section ghost + surface */
62
- .section-ghost{color:transparent;-webkit-text-stroke:1px rgba(169,124,63,.22);font-family:var(--font-head)}
75
+ .section-ghost{color:transparent;-webkit-text-stroke:1px rgba(169,124,63,.22);font-family:var(--font-head);--talos-bake:1}
63
76
  .surface{background:rgba(169,124,63,.05);border:1px solid var(--hair);border-radius:6px} .surface-label{color:var(--muted)}
64
77
  .ending-contact{color:var(--muted)}
65
78
 
@@ -68,7 +81,7 @@
68
81
  .overlay-sub{color:rgba(255,255,255,.82)}
69
82
  /* batch-5 layouts: timeline / concept-hub / cover-image */
70
83
  .tl-dot{background:var(--accent);border-radius:50%}
71
- .tl-date{color:var(--accent);font-family:var(--font-head)}
84
+ .tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
72
85
  .tl-title{color:var(--title)} .tl-desc{color:var(--muted)}
73
86
  .hub-center{border-radius:50%;border:2px solid var(--accent)}
74
87
  .hub-title{color:var(--accent)}
@@ -0,0 +1,6 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: crop-marks -->
2
+ <div style="position:absolute;inset:0;background:#EEF5EF"></div>
3
+ <div style="position:absolute;left:44px;top:44px;border-left:1px solid var(--hair);border-top:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
4
+ <div style="position:absolute;right:44px;top:44px;border-right:1px solid var(--hair);border-top:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
5
+ <div style="position:absolute;left:44px;bottom:44px;border-left:1px solid var(--hair);border-bottom:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
6
+ <div style="position:absolute;right:44px;bottom:44px;border-right:1px solid var(--hair);border-bottom:1px solid var(--hair);width:26px;height:26px;pointer-events:none"></div>
@@ -0,0 +1,27 @@
1
+ /* styles/legal-slate — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/legal-slate/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:1.02; --type-scale:0.98;
5
+ --accent:#0B5C3B; --c1:#0B5C3B; --c2:#0A595B; --c3:#0F5670; --c4:#374F84; --chart-1:#0B5C3B;
6
+ --title:#242C25; --body:#4E544F; --muted:#777E78; --foot:#777E78;
7
+ --hair:#CCD7CE; --card-radius:4px;
8
+ --font-head:'Lora','Songti SC',sans-serif;
9
+ --font-body:'Karla','Noto Sans SC',sans-serif;
10
+ --title-color:#242C25; --body-color:#4E544F; --slide-bg:#EEF5EF; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#EEF5EF;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#EEF5EF}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -6,11 +6,14 @@
6
6
  Noto Serif SC/Noto Sans SC 已经是 html2pptx 的 CJK 安全字体名单(bin-src/html2pptx.mjs
7
7
  cjkFontFaceCss),中文大标题走 CJK 省略 fontFace 的安全路径,不需要 --talos-bake。 */
8
8
  :root{
9
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
10
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。杂志版面:略宽的栏外白。 */
11
+ --space-scale:1.08; --type-scale:1.03;
9
12
  --ink:#0A1F3D; --paper:#F1F3F5; --paper-tint:#E4E8EC; --ink-tint:#152A4A;
10
13
  --accent:#0A1F3D; --c1:#0A1F3D; --c2:#384962; --c3:#697688; --c4:#9CA5B1; --chart-1:#697688;
11
14
  --title:#0A1F3D; --body:#384962; --muted:#697688; --foot:#848F9F;
12
15
  --hair:rgba(10,31,61,.14); --card-radius:4px;
13
- --font-head:'Noto Serif SC','Songti SC','Source Serif 4',Georgia,serif;
16
+ --font-head:'Noto Serif SC','Songti SC',serif;
14
17
  --font-body:'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
15
18
  --font-mono:'IBM Plex Mono','SF Mono','JetBrains Mono',ui-monospace,monospace;
16
19
  --title-color:#0A1F3D; --body-color:#384962; --slide-bg:#F1F3F5; --font-heading:var(--font-head);
@@ -101,7 +104,9 @@
101
104
 
102
105
  /* ===== .slide-inverse — 深墨底(guizang 的 .slide.dark);标题/正文一并反色,
103
106
  因为这套皮肤是纯墨色无独立色相(同 cinereel),不像 ivory-gold 那样标题恒定。 */
104
- .slide.slide-inverse{--slide-bg:#0A1F3D;--body:#CBD0D7;--muted:#8D97A5;--foot:#6B788A;--hair:rgba(241,243,245,.14);--title:#F1F3F5;--accent:#F1F3F5;--title-color:#F1F3F5;--body-color:#CBD0D7}
107
+ /* The ramp is an ink-on-porcelain darkness ladder; on the navy panel it must mirror,
108
+ or --c1 (#0A1F3D) lands EXACTLY on the panel ground and its text disappears. */
109
+ .slide.slide-inverse{--slide-bg:#0A1F3D;--body:#CBD0D7;--muted:#8D97A5;--foot:#6B788A;--hair:rgba(241,243,245,.14);--title:#F1F3F5;--accent:#F1F3F5;--title-color:#F1F3F5;--body-color:#CBD0D7;--c1:#F1F3F5;--c2:#CBD0D7;--c3:#9CA5B1;--c4:#6E7C90}
105
110
  .slide.slide-inverse .card,.slide.slide-inverse .cmp-col{border-top-color:rgba(241,243,245,.2)}
106
111
  .slide.slide-inverse .cmp-col--rec{border-top-color:var(--title)}
107
112
  .slide.slide-inverse .surface{background:rgba(241,243,245,.06)}
@@ -0,0 +1,5 @@
1
+ <!-- signature: the consulting binder — a solid top rule with a file-tab stub, the
2
+ four-piece chrome deck-design.md calls the strongest "consulting-grade" signal. -->
3
+ <div style="position:absolute;left:0;right:0;top:0;height:5px;background:var(--accent);opacity:.92;pointer-events:none"></div>
4
+ <div style="position:absolute;left:0;top:0;width:60px;height:16px;background:var(--accent);pointer-events:none"></div>
5
+ <div style="position:absolute;right:56px;top:34px;bottom:34px;width:1px;background:var(--hair);pointer-events:none"></div>
@@ -1,11 +1,14 @@
1
1
  /* styles/mckinsey — 白底 + 深藏青 + 克制蓝 + 扁平卡 + 专业 ramp。复用同一套 layouts。
2
2
  证明契约不是只服务深色:同 11 layout 在浅色皮肤下同样成立。 */
3
3
  :root{
4
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。咨询/董事会:信息密度优先。 */
6
+ --space-scale:0.86; --type-scale:0.95;
4
7
  --accent:#2251ff; --c1:#2251ff; --c2:#3E8C8C; --c3:#B07A2E; --c4:#5B6B84; --chart-1:#3A5CE0;
5
8
  --title:#0F2340; --body:#354A63; --muted:#6B7A90; --foot:#9AA6B8;
6
9
  --hair:#E3E8F0; --card-radius:6px;
7
- --font-head:'Helvetica Neue','Arial','PingFang SC',sans-serif;
8
- --font-body:'Helvetica Neue','Arial','PingFang SC',sans-serif;
10
+ --font-head:'IBM Plex Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif; --font-heading:var(--font-head);
11
+ --font-body:'IBM Plex Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
9
12
  }
10
13
  .slide{background:#ffffff;color:var(--body);font-family:var(--font-body)}
11
14
  .slide-backdrop{position:absolute;inset:0;background:#ffffff}
@@ -0,0 +1,5 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: step-marks -->
2
+ <div style="position:absolute;inset:0;background:#FBF2E8"></div>
3
+ <div style="position:absolute;right:0;top:132px;width:52px;height:44px;background:var(--accent);opacity:0.90;pointer-events:none"></div>
4
+ <div style="position:absolute;right:0;top:216px;width:38px;height:44px;background:var(--accent);opacity:0.62;pointer-events:none"></div>
5
+ <div style="position:absolute;right:0;top:300px;width:24px;height:44px;background:var(--accent);opacity:0.34;pointer-events:none"></div>
@@ -0,0 +1,27 @@
1
+ /* styles/memphis — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/memphis/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:0.98; --type-scale:1.06;
5
+ --accent:#F04A50; --c1:#F04A50; --c2:#898B0C; --c3:#189785; --c4:#238EC7; --chart-1:#F04A50;
6
+ --title:#2D271F; --body:#59544D; --muted:#847E76; --foot:#847E76;
7
+ --hair:#E0D6C8; --card-radius:4px;
8
+ --font-head:'Syne','Noto Sans SC',sans-serif;
9
+ --font-body:'Karla','Noto Sans SC',sans-serif;
10
+ --title-color:#2D271F; --body-color:#59544D; --slide-bg:#FBF2E8; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#FBF2E8;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#FBF2E8}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -0,0 +1,6 @@
1
+ <!-- signature: the press sheet — a hairline trim box with corner registration crosses. -->
2
+ <div style="position:absolute;inset:36px;border:1px solid var(--hair);pointer-events:none"></div>
3
+ <div style="position:absolute;left:31px;top:36px;width:11px;height:1px;background:var(--hair);pointer-events:none"></div><div style="position:absolute;left:36px;top:31px;width:1px;height:11px;background:var(--hair);pointer-events:none"></div>
4
+ <div style="position:absolute;right:31px;top:36px;width:11px;height:1px;background:var(--hair);pointer-events:none"></div><div style="position:absolute;right:36px;top:31px;width:1px;height:11px;background:var(--hair);pointer-events:none"></div>
5
+ <div style="position:absolute;left:31px;bottom:36px;width:11px;height:1px;background:var(--hair);pointer-events:none"></div><div style="position:absolute;left:36px;bottom:31px;width:1px;height:11px;background:var(--hair);pointer-events:none"></div>
6
+ <div style="position:absolute;right:31px;bottom:36px;width:11px;height:1px;background:var(--hair);pointer-events:none"></div><div style="position:absolute;right:36px;bottom:31px;width:1px;height:11px;background:var(--hair);pointer-events:none"></div>
@@ -1,11 +1,14 @@
1
1
  /* styles/mono — 极简单色:纯白底 + 黑灰明度层级(无 hue) + 细线 + 大留白 + 直角卡。
2
2
  皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
3
3
  :root{
4
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。极简报告:留白大、字号收敛。 */
6
+ --space-scale:1.18; --type-scale:0.97;
4
7
  --accent:#0A0A0A; --c1:#0A0A0A; --c2:#555555; --c3:#8A8A8A; --c4:#BFBFBF; --chart-1:#3F3F3F;
5
- --title:#0A0A0A; --body:#555555; --muted:#9B9B9B; --foot:#C4C4C4;
8
+ --title:#0A0A0A; --body:#555555; --muted:#919191; --foot:#C4C4C4;
6
9
  --hair:#E8E8E8; --card-radius:2px;
7
- --font-head:'Helvetica Neue','Arial','PingFang SC','Hiragino Sans GB',sans-serif;
8
- --font-body:'Helvetica Neue','Arial','PingFang SC',sans-serif;
10
+ --font-head:'Archivo','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
11
+ --font-body:'Archivo','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. */
@@ -0,0 +1,4 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: grid-glow -->
2
+ <div style="position:absolute;inset:0;background:#1C192C"></div>
3
+ <div style="position:absolute;inset:0;background-image:linear-gradient(var(--hair) 1px,transparent 1px),linear-gradient(90deg,var(--hair) 1px,transparent 1px);background-size:64px 64px;opacity:.5;pointer-events:none"></div>
4
+ <div style="position:absolute;right:-120px;top:-120px;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,var(--accent),transparent 70%);opacity:.22;pointer-events:none"></div>
@@ -0,0 +1,27 @@
1
+ /* styles/neon-cyber — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/neon-cyber/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:0.96; --type-scale:1.04;
5
+ --accent:#E076F5; --c1:#E076F5; --c2:#779EFC; --c3:#1AACE3; --c4:#13B1BE; --chart-1:#E076F5;
6
+ --title:#F7F5FD; --body:#C2BFCA; --muted:#87858F; --foot:#87858F;
7
+ --hair:#3F3B4D; --card-radius:4px;
8
+ --font-head:'Jost','Noto Sans SC',sans-serif;
9
+ --font-body:'IBM Plex Sans','Noto Sans SC',sans-serif;
10
+ --title-color:#F7F5FD; --body-color:#C2BFCA; --slide-bg:#1C192C; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#1C192C;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#1C192C}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -1 +1,6 @@
1
1
  <div style="position:absolute;left:0;right:0;bottom:0;height:64px;background:linear-gradient(90deg,__ACCENT__,#E3D394 60%,__ACCENT__);opacity:.9"></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: engraved corners — four L brackets, the award/prospectus convention. -->
3
+ <div style="position:absolute;left:38px;top:38px;width:46px;height:1px;background:var(--accent);opacity:.55;pointer-events:none"></div><div style="position:absolute;left:38px;top:38px;width:1px;height:46px;background:var(--accent);opacity:.55;pointer-events:none"></div>
4
+ <div style="position:absolute;right:38px;top:38px;width:46px;height:1px;background:var(--accent);opacity:.55;pointer-events:none"></div><div style="position:absolute;right:38px;top:38px;width:1px;height:46px;background:var(--accent);opacity:.55;pointer-events:none"></div>
5
+ <div style="position:absolute;left:38px;bottom:38px;width:46px;height:1px;background:var(--accent);opacity:.55;pointer-events:none"></div><div style="position:absolute;left:38px;bottom:38px;width:1px;height:46px;background:var(--accent);opacity:.55;pointer-events:none"></div>
6
+ <div style="position:absolute;right:38px;bottom:38px;width:46px;height:1px;background:var(--accent);opacity:.55;pointer-events:none"></div><div style="position:absolute;right:38px;bottom:38px;width:1px;height:46px;background:var(--accent);opacity:.55;pointer-events:none"></div>
@@ -1,11 +1,14 @@
1
1
  /* styles/olive-gold — 深橄榄金底 + 亮金 accent + 奶白粗体标题。复用同一套 layouts。
2
2
  取色自「Employment Letter」参考:深橄榄棕 #574A0F + 金 #C9B458 + 奶白 + 底部亮金带。 */
3
3
  :root{
4
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。证书/招商:仪式感留白。 */
6
+ --space-scale:1.1; --type-scale:1.0;
4
7
  --accent:#CDB85C; --c1:#CDB85C; --c2:#E3D394; --c3:#B49C42; --c4:#F0E4B0; --chart-1:#B49C42;
5
8
  --title:#F8F3E2; --body:#D6CB9E; --muted:#A6996A; --foot:#877A52;
6
9
  --hair:rgba(205,184,92,.18); --card-radius:14px;
7
- --font-head:'Avenir Next','Futura','Helvetica Neue','PingFang SC','Hiragino Sans GB',sans-serif;
8
- --font-body:'Helvetica Neue','PingFang SC',sans-serif;
10
+ --font-head:'Marcellus','Songti SC','Noto Serif SC',serif;
11
+ --font-body:'Karla','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
9
12
  /* theme-compat: 让 --style 单独就能给整册上色(标题不落回深色) */
10
13
  --title-color:#F8F3E2; --body-color:#D6CB9E; --slide-bg:#574A0F; --font-heading:var(--font-head);
11
14
  }
@@ -17,7 +20,11 @@
17
20
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
18
21
  .rule{background:var(--hair)} .rule-foot{background:rgba(205,184,92,.12)}
19
22
  .eyebrow{color:var(--accent)} .accent-bar{background:var(--accent);border-radius:1px}
20
- .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:800}
23
+ /* This skin's identity IS this face — a didone/garalde/roman falling back to the
24
+ system serif reads as a different deck entirely. Bake the display classes so the
25
+ audience sees it; body copy stays native (editable/searchable). See
26
+ deck-design.md § Fonts for why bundling alone doesn't reach the native text layer. */
27
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:800;--talos-bake:1}
21
28
  .cover-sub,.ending-sub,.section-desc{color:var(--body)}
22
29
  .card{border-radius:var(--card-radius);background:linear-gradient(180deg,rgba(205,184,92,.08),rgba(205,184,92,.02));border:1px solid rgba(205,184,92,.22);box-shadow:0 22px 54px rgba(30,25,4,.45);overflow:hidden}
23
30
  .card-idx{color:var(--muted)} .card-body{color:var(--body)}
@@ -31,16 +38,16 @@
31
38
  .cmp-title{color:var(--title)} .cmp-k{color:var(--muted)} .cmp-v{color:var(--title)}
32
39
  .cmp-col--rec .cmp-v{color:var(--accent)}
33
40
  .cmp-badge{background:var(--accent);color:#3a3105}
34
- .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);font-weight:800} .kpi-label{color:var(--muted)}
41
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);font-weight:800;--talos-bake:1} .kpi-label{color:var(--muted)}
35
42
  .stat-unit{color:var(--accent)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
36
43
  .step-line{background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.5}
37
- .step-circle{background:linear-gradient(180deg,rgba(205,184,92,.08),rgba(205,184,92,.02));border:1px solid rgba(205,184,92,.24);box-shadow:0 20px 44px rgba(30,25,4,.5);font-family:var(--font-head)}
44
+ .step-circle{background:linear-gradient(180deg,rgba(205,184,92,.08),rgba(205,184,92,.02));border:1px solid rgba(205,184,92,.24);box-shadow:0 20px 44px rgba(30,25,4,.5);font-family:var(--font-head);--talos-bake:1}
38
45
  .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)}
39
46
  .step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
40
47
  .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)}
41
- .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)}
48
+ .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}
42
49
  .toc-title{color:var(--title)} .toc-desc{color:var(--muted)}
43
- .section-ghost{color:transparent;-webkit-text-stroke:1px rgba(205,184,92,.18);font-family:var(--font-head)}
50
+ .section-ghost{color:transparent;-webkit-text-stroke:1px rgba(205,184,92,.18);font-family:var(--font-head);--talos-bake:1}
44
51
  .surface{background:rgba(205,184,92,.05);border:1px solid rgba(205,184,92,.22);border-radius:14px} .surface-label{color:var(--muted)}
45
52
  .ending-contact{color:var(--muted)}
46
53
  /* full-bleed image overlay — 始终浅色 */
@@ -48,7 +55,7 @@
48
55
  .scrim{background:linear-gradient(180deg,transparent 26%,rgba(0,0,0,.6))}
49
56
  /* timeline / concept-hub */
50
57
  .tl-dot{background:var(--accent);border-radius:50%}
51
- .tl-date{color:var(--accent);font-family:var(--font-head)}
58
+ .tl-date{color:var(--accent);font-family:var(--font-head);--talos-bake:1}
52
59
  .tl-title{color:var(--title)} .tl-desc{color:var(--muted)}
53
60
  .hub-center{border-radius:50%;border:2px solid var(--accent)} .hub-title{color:var(--accent)} .hub-link{stroke:var(--accent);opacity:.4}
54
61
  /* data-table */
@@ -0,0 +1,4 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: horizon -->
2
+ <div style="position:absolute;inset:0;background:#F2F2DE"></div>
3
+ <div style="position:absolute;left:0;right:0;top:62%;height:1px;background:var(--hair);pointer-events:none"></div>
4
+ <div style="position:absolute;left:0;right:0;top:62%;bottom:0;background:linear-gradient(to bottom,var(--accent),transparent);opacity:.10;pointer-events:none"></div>
@@ -0,0 +1,27 @@
1
+ /* styles/organic-earth — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/organic-earth/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:1.08; --type-scale:1;
5
+ --accent:#3C6F35; --c1:#3C6F35; --c2:#106E6E; --c3:#106A94; --c4:#765594; --chart-1:#3C6F35;
6
+ --title:#262F1F; --body:#50574B; --muted:#777E71; --foot:#777E71;
7
+ --hair:#CAD5C0; --card-radius:4px;
8
+ --font-head:'Fraunces','Songti SC',sans-serif;
9
+ --font-body:'Karla','Noto Sans SC',sans-serif;
10
+ --title-color:#262F1F; --body-color:#50574B; --slide-bg:#F2F2DE; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#F2F2DE;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#F2F2DE}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -0,0 +1,4 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: horizon -->
2
+ <div style="position:absolute;inset:0;background:#F6F6FF"></div>
3
+ <div style="position:absolute;left:0;right:0;top:62%;height:1px;background:var(--hair);pointer-events:none"></div>
4
+ <div style="position:absolute;left:0;right:0;top:62%;bottom:0;background:linear-gradient(to bottom,var(--accent),transparent);opacity:.10;pointer-events:none"></div>
@@ -0,0 +1,27 @@
1
+ /* styles/pastel-saas — generated by scripts/ppt-tpl/gen-skin.mjs from ppt-tpl/families/pastel-saas/family.json.
2
+ 手改会在下次生成时丢失:要改就改 family.json。 */
3
+ :root{
4
+ --space-scale:1.1; --type-scale:1.02;
5
+ --accent:#6F76BF; --c1:#6F76BF; --c2:#AA649E; --c3:#BF5D6F; --c4:#B36944; --chart-1:#6F76BF;
6
+ --title:#2F2F3B; --body:#585962; --muted:#80808B; --foot:#80808B;
7
+ --hair:#DBDCEB; --card-radius:4px;
8
+ --font-head:'Quicksand','Noto Sans SC',sans-serif;
9
+ --font-body:'Public Sans','Noto Sans SC',sans-serif;
10
+ --title-color:#2F2F3B; --body-color:#585962; --slide-bg:#F6F6FF; --font-heading:var(--font-head);
11
+ }
12
+ .slide{background:#F6F6FF;color:var(--body);font-family:var(--font-body)}
13
+ .slide-backdrop{position:absolute;inset:0;background:#F6F6FF}
14
+ .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
+ .rule,.rule-foot{background:var(--hair)}
16
+ .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .accent-bar{background:var(--accent)}
18
+ .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
19
+ .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
20
+ .card{border-radius:var(--card-radius);background:transparent;border:1px solid var(--hair)}
21
+ .card-idx{color:var(--muted)} .card-body{color:var(--body)} .card-title{color:var(--title)}
22
+ .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)}
23
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)}
24
+ .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)}
25
+ .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
+ .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head)}
27
+ .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
@@ -0,0 +1,4 @@
1
+ <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: footer-slab -->
2
+ <div style="position:absolute;inset:0;background:#1F1F1F"></div>
3
+ <div style="position:absolute;left:0;right:0;bottom:0;height:14px;background:var(--accent);opacity:.9;pointer-events:none"></div>
4
+ <div style="position:absolute;left:0;right:0;bottom:14px;height:2px;background:var(--hair);pointer-events:none"></div>