@taloswork/ose-shared 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/package.json +3 -3
  2. package/skills/document/SKILL.md +143 -215
  3. package/skills/document/art-directions/base.css +27 -2
  4. package/skills/document/art-directions/cinematic-depth.css +3 -1
  5. package/skills/document/art-directions/collage-paper.css +5 -1
  6. package/skills/document/art-directions/editorial-cut.css +5 -1
  7. package/skills/document/art-directions/geometric-pop.css +6 -0
  8. package/skills/document/art-directions/gradient-mesh.css +5 -1
  9. package/skills/document/art-directions/illustrated-doodle.css +5 -0
  10. package/skills/document/art-directions/luxury-ornament.css +4 -1
  11. package/skills/document/art-directions/maximalist-blocks.css +6 -0
  12. package/skills/document/art-directions/technical-grid.css +4 -0
  13. package/skills/document/assets/fonts/fonts.json +2 -2
  14. package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Bold.ttf +0 -0
  15. package/skills/document/assets/pdf-fonts/NotoSansSC-PDF-Regular.ttf +0 -0
  16. package/skills/document/assets/pdf-fonts/OFL.txt +93 -0
  17. package/skills/document/assets/pdf-fonts/README.md +35 -0
  18. package/skills/document/assets/tessdata/LICENSE-Apache-2.0.txt +202 -0
  19. package/skills/document/assets/tessdata/README.md +21 -0
  20. package/skills/document/assets/tessdata/chi_sim.traineddata.gz +0 -0
  21. package/skills/document/assets/tessdata/eng.traineddata.gz +0 -0
  22. package/skills/document/bin/deck-build.cjs +2311 -41
  23. package/skills/document/bin/deck-chart.cjs +762 -0
  24. package/skills/document/bin/deck-plan.cjs +802 -0
  25. package/skills/document/bin/deck-qa.cjs +984 -249
  26. package/skills/document/bin/deck-scenario.cjs +1346 -0
  27. package/skills/document/bin/doc-convert.cjs +130 -39
  28. package/skills/document/bin/doc-fill.cjs +73121 -170
  29. package/skills/document/bin/doc-gen.cjs +625 -68
  30. package/skills/document/bin/doc-run.cjs +162 -24
  31. package/skills/document/bin/doc-scan.cjs +13 -0
  32. package/skills/document/bin/doc-text.cjs +13 -0
  33. package/skills/document/bin/doc-validate.cjs +718 -23
  34. package/skills/document/bin/doc-xml.cjs +9 -5
  35. package/skills/document/bin/docx-annotate.cjs +95 -19
  36. package/skills/document/bin/fontkit.cjs +1 -0
  37. package/skills/document/bin/html2pptx.cjs +1372 -121
  38. package/skills/document/bin/ocr-worker.cjs +1 -0
  39. package/skills/document/bin/ocr.cjs +131 -40
  40. package/skills/document/bin/pdf-form.cjs +674 -177
  41. package/skills/document/bin/pdf-images.cjs +13 -0
  42. package/skills/document/bin/pdf-ops.cjs +634 -199
  43. package/skills/document/bin/pdf-render.cjs +19 -3
  44. package/skills/document/bin/pdf-tables.cjs +13 -0
  45. package/skills/document/bin/pptx-clone.cjs +3 -3
  46. package/skills/document/bin/pptx-slide.cjs +3 -3
  47. package/skills/document/bin/xlsx-query.cjs +192 -61
  48. package/skills/document/bin-reference.md +56 -33
  49. package/skills/document/content-pipeline.md +129 -242
  50. package/skills/document/deck-design.md +355 -638
  51. package/skills/document/layouts/README.md +46 -33
  52. package/skills/document/layouts/capacity.json +1 -0
  53. package/skills/document/layouts/slots.json +1 -1
  54. package/skills/document/layouts/toc-panel.tpl +1 -1
  55. package/skills/document/motion/README.md +3 -2
  56. package/skills/document/office.md +3 -3
  57. package/skills/document/packs/board-brief/backdrop.html +2 -0
  58. package/skills/document/packs/board-brief/pack.css +2 -1
  59. package/skills/document/packs/mckinsey-photo/backdrop.html +2 -0
  60. package/skills/document/packs/mckinsey-photo/pack.css +2 -1
  61. package/skills/document/packs/press-room/backdrop.html +2 -0
  62. package/skills/document/packs/press-room/pack.css +2 -1
  63. package/skills/document/packs/prismatic-3d/backdrop.html +2 -0
  64. package/skills/document/packs/prismatic-3d/pack.css +4 -1
  65. package/skills/document/pdf.md +53 -49
  66. package/skills/document/rewrite.md +241 -308
  67. package/skills/document/scenarios.json +1290 -0
  68. package/skills/document/scenarios.schema.json +103 -0
  69. package/skills/document/styles/README.md +15 -25
  70. package/skills/document/styles/_contract-defaults.css +25 -1
  71. package/skills/document/styles/anthropic/skin.css +6 -3
  72. package/skills/document/styles/apple/skin.css +4 -3
  73. package/skills/document/styles/bistro-warm/backdrop.html +2 -0
  74. package/skills/document/styles/bistro-warm/skin.css +4 -1
  75. package/skills/document/styles/black-gold/skin.css +6 -5
  76. package/skills/document/styles/bold-clash/backdrop.html +2 -0
  77. package/skills/document/styles/bold-clash/skin.css +2 -1
  78. package/skills/document/styles/branding/skin.css +4 -4
  79. package/skills/document/styles/campus-teal/backdrop.html +2 -0
  80. package/skills/document/styles/campus-teal/skin.css +2 -1
  81. package/skills/document/styles/cinereel/skin.css +7 -3
  82. package/skills/document/styles/clinic-care/backdrop.html +2 -0
  83. package/skills/document/styles/clinic-care/skin.css +2 -1
  84. package/skills/document/styles/cool/skin.css +6 -5
  85. package/skills/document/styles/dark-glass/backdrop.html +2 -0
  86. package/skills/document/styles/dark-glass/skin.css +2 -1
  87. package/skills/document/styles/gov-brief/backdrop.html +2 -0
  88. package/skills/document/styles/gov-brief/skin.css +2 -1
  89. package/skills/document/styles/grid-tech/backdrop.html +2 -0
  90. package/skills/document/styles/grid-tech/skin.css +2 -1
  91. package/skills/document/styles/hand-drawn/skin.css +3 -3
  92. package/skills/document/styles/ivory-gold/skin.css +7 -6
  93. package/skills/document/styles/legal-slate/backdrop.html +2 -0
  94. package/skills/document/styles/legal-slate/skin.css +2 -1
  95. package/skills/document/styles/magazine-ink/skin.css +4 -3
  96. package/skills/document/styles/mckinsey/skin.css +2 -1
  97. package/skills/document/styles/memphis/backdrop.html +2 -0
  98. package/skills/document/styles/memphis/skin.css +2 -1
  99. package/skills/document/styles/mono/skin.css +6 -2
  100. package/skills/document/styles/neon-cyber/backdrop.html +2 -0
  101. package/skills/document/styles/neon-cyber/skin.css +2 -1
  102. package/skills/document/styles/olive-gold/skin.css +7 -6
  103. package/skills/document/styles/organic-earth/backdrop.html +2 -0
  104. package/skills/document/styles/organic-earth/skin.css +2 -1
  105. package/skills/document/styles/pastel-saas/backdrop.html +2 -0
  106. package/skills/document/styles/pastel-saas/skin.css +2 -1
  107. package/skills/document/styles/portfolio-noir/backdrop.html +2 -0
  108. package/skills/document/styles/portfolio-noir/skin.css +2 -1
  109. package/skills/document/styles/retro-press/backdrop.html +2 -0
  110. package/skills/document/styles/retro-press/skin.css +2 -1
  111. package/skills/document/styles/sport-arena/backdrop.html +2 -0
  112. package/skills/document/styles/sport-arena/skin.css +4 -1
  113. package/skills/document/styles/swiss-grid/skin.css +10 -5
  114. package/skills/document/styles/wedding-blush/backdrop.html +2 -0
  115. package/skills/document/styles/wedding-blush/skin.css +4 -1
  116. package/skills/document/theme-system.md +85 -77
  117. package/skills/document/themes/README.md +7 -5
  118. package/skills/document/vision.md +8 -5
  119. package/skills/document/xlsx.md +15 -25
  120. package/skills/cozy-static-svg/SKILL.md +0 -76
  121. package/skills/cozy-static-svg/references/approved-preview.png +0 -0
  122. package/skills/cozy-static-svg/references/cross-platform.md +0 -73
  123. package/skills/cozy-static-svg/references/moon_keeps_watch.svg +0 -229
  124. package/skills/cozy-static-svg/references/style-anchor.md +0 -271
  125. package/skills/cozy-static-svg/scripts/artkit.py +0 -321
  126. package/skills/cozy-static-svg/scripts/to_png.py +0 -333
@@ -5,7 +5,7 @@
5
5
  /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
6
6
  所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。奢华极简:靠留白撑场。 */
7
7
  --space-scale:1.16; --type-scale:1.0;
8
- --accent:#A97C3F; --c1:#A97C3F; --c2:#C9A467; --c3:#8A6530; --c4:#DCC08C; --chart-1:#B58A4A;
8
+ --accent:#A97C3F; --c1:#A97C3F; --c2:#C9A467; --c3:#8A6530; --c4:#DCC08C; --chart-1:#B58A4A; --series-1:#A97C3F; --series-2:#74520E; --series-3:#422A04; --series-4:#846B39;
9
9
  --title:#A97C3F; --body:#2B2823; --muted:#6B6558; --foot:#8A8374;
10
10
  --hair:rgba(169,124,63,.22); --card-radius:6px;
11
11
  --font-head:'Anton','PingFang SC','Noto Sans SC',sans-serif;
@@ -38,7 +38,7 @@
38
38
  .card{border-radius:var(--card-radius);background:rgba(169,124,63,.05);border:1px solid var(--hair);box-shadow:0 6px 20px rgba(0,0,0,.05);overflow:hidden}
39
39
  .card-idx{color:var(--foot)} .card-body{color:var(--body)}
40
40
  .card-grid .card:nth-child(4n+1) .card-rail,.card-grid .card:nth-child(4n+1) .card-dot{background:var(--c1)} .card-grid .card:nth-child(4n+1) .card-title{color:var(--c1)}
41
- .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)} .card-grid .card:nth-child(4n+2) .card-title{color:var(--c2)}
41
+ .card-grid .card:nth-child(4n+2) .card-rail,.card-grid .card:nth-child(4n+2) .card-dot{background:var(--c2)} .card-grid .card:nth-child(4n+2) .card-title{color:#946F35}
42
42
  .card-grid .card:nth-child(4n+3) .card-rail,.card-grid .card:nth-child(4n+3) .card-dot{background:var(--c3)} .card-grid .card:nth-child(4n+3) .card-title{color:var(--c3)}
43
43
  .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)} .card-grid .card:nth-child(4n+4) .card-title{color:var(--title)}
44
44
  .card .card-rail{background:var(--accent)} .card .card-title{color:var(--accent)}
@@ -104,17 +104,18 @@
104
104
  .ring-num{color:var(--title)}
105
105
 
106
106
  /* toc-panel: 浅色 skin → 深色对比面板(既有反色机制,复用不新增) */
107
- .panel{background:#0A0A0A;box-shadow:0 24px 60px rgba(0,0,0,.4)}
107
+ /* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
108
+ .panel{background:#0A0A0A;box-shadow:0 24px 60px rgba(0,0,0,.4);--chart-surface:#0A0A0A;--chart-ink:#E8E3D3;--chart-muted:#9A9488;--chart-title:#F2F2F2;--chart-grid:rgba(232,227,211,.16);--chart-1:#B58A4A;--chart-accent:#B58A4A;--series-1:#D0A164;--series-2:#FEE0B0;--series-3:#98733E;--series-4:#E3C792}
108
109
  .panel-item-title{color:var(--accent);font-family:var(--font-head)}
109
110
  .panel-item-desc{color:rgba(232,227,211,.82)}
110
111
  .toc-brand{color:var(--title)}
111
112
 
112
113
  /* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
113
- .num-disc{background:var(--accent);color:#fff} .num-item-title{color:var(--title)}
114
+ .num-disc{background:#8A6530;color:#fff} .num-item-title{color:var(--title)}
114
115
  .brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
115
116
 
116
117
  /* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
117
- .banner{background:var(--accent)} .banner-title{color:#fff}
118
+ .banner{background:#8A6530} .banner-title{color:#fff}
118
119
  .col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
119
120
 
120
121
  /* color-palette layout: 色板填色走 ramp 变量(每皮肤用自身配色) */
@@ -142,6 +143,6 @@
142
143
  交替出现奶油底/纯黑底两种实例;不是新皮肤极性,是同一皮肤内每张幻灯片
143
144
  自行选择的一个修饰类,由拼装 deck.html 时逐页决定要不要加,skin 只负责
144
145
  定义它翻成什么颜色。--title/--accent 恒为金色不随之翻转)。 */
145
- .slide.slide-inverse{--slide-bg:#0A0A0A;--body:#E8E3D3;--muted:#9A9488;--foot:#746E60;--hair:rgba(232,227,211,.16)}
146
+ .slide.slide-inverse{--slide-bg:#0A0A0A;--body:#E8E3D3;--body-color:#E8E3D3;--muted:#9A9488;--foot:#746E60;--hair:rgba(232,227,211,.16);--series-1:#A97C3F;--series-2:#D4AF72;--series-3:#FEE3C0;--series-4:#B49966}
146
147
  .slide.slide-inverse .card,.slide.slide-inverse .cmp-col,.slide.slide-inverse .step-circle,.slide.slide-inverse .surface{background:rgba(232,227,211,.05)}
147
148
  .slide.slide-inverse .card-body{color:var(--body)}
@@ -1,6 +1,8 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: crop-marks -->
2
2
  <div style="position:absolute;inset:0;background:#EEF5EF"></div>
3
+ <div class="sig-layer" data-signature="crop-marks" style="position:absolute;inset:0;pointer-events:none">
3
4
  <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
5
  <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
6
  <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
7
  <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>
8
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.02; --type-scale:0.98;
5
- --accent:#0B5C3B; --c1:#0B5C3B; --c2:#0A595B; --c3:#0F5670; --c4:#374F84; --chart-1:#0B5C3B;
5
+ --accent:#0B5C3B; --c1:#0B5C3B; --c2:#0A595B; --c3:#0F5670; --c4:#374F84; --chart-1:#0B5C3B; --series-1:#0B5C3B; --series-2:#3D8183; --series-3:#022E3E; --series-4:#334B80;
6
6
  --title:#242C25; --body:#4E544F; --muted:#777E78; --foot:#777E78;
7
7
  --hair:#CCD7CE; --card-radius:4px;
8
8
  --font-head:'Lora','Songti SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#B6CEC4}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -11,7 +11,7 @@
11
11
  --space-scale:1.08; --type-scale:1.03;
12
12
  --ink:#0A1F3D; --paper:#F1F3F5; --paper-tint:#E4E8EC; --ink-tint:#152A4A;
13
13
  --accent:#0A1F3D; --c1:#0A1F3D; --c2:#384962; --c3:#697688; --c4:#9CA5B1; --chart-1:#697688;
14
- --title:#0A1F3D; --body:#384962; --muted:#697688; --foot:#848F9F;
14
+ --title:#0A1F3D; --body:#384962; --muted:#697688; --foot:#818C9C;
15
15
  --hair:rgba(10,31,61,.14); --card-radius:4px;
16
16
  --font-head:'Noto Serif SC','Songti SC',serif;
17
17
  --font-body:'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
@@ -78,7 +78,8 @@
78
78
  .ring-fill{stroke:var(--accent)}
79
79
  .ring-num{color:var(--title);font-family:var(--font-head);font-weight:800}
80
80
  /* toc-panel — 唯一允许的实色块:纯墨色面板 + 纸色字,呼应 guizang callout 底色小面积用法 */
81
- .panel{background:var(--ink);box-shadow:none}
81
+ /* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
82
+ .panel{background:var(--ink);box-shadow:none;--chart-surface:#0A1F3D;--chart-ink:#CBD0D7;--chart-muted:#8D97A5;--chart-title:#F1F3F5;--chart-grid:rgba(241,243,245,.14);--chart-1:#F1F3F5;--chart-accent:#F1F3F5;--series-1:#92ADD3;--series-2:#D6E6FE;--series-3:#6E7B8E;--series-4:#C2CBD8}
82
83
  .panel-item-title{color:var(--paper);font-family:var(--font-head);font-weight:700}
83
84
  .panel-item-desc{color:rgba(241,243,245,.72)}
84
85
  .toc-brand{color:var(--title);font-family:var(--font-mono);letter-spacing:.1em}
@@ -110,7 +111,7 @@
110
111
  .slide.slide-inverse .card,.slide.slide-inverse .cmp-col{border-top-color:rgba(241,243,245,.2)}
111
112
  .slide.slide-inverse .cmp-col--rec{border-top-color:var(--title)}
112
113
  .slide.slide-inverse .surface{background:rgba(241,243,245,.06)}
113
- .slide.slide-inverse .panel{background:var(--paper)}
114
+ .slide.slide-inverse .panel{background:var(--paper);--chart-surface:#F1F3F5;--chart-ink:#384962;--chart-muted:#697688;--chart-title:#0A1F3D;--chart-grid:rgba(10,31,61,.14);--chart-1:#697688;--chart-accent:#697688;--series-1:#0A1F3D;--series-2:#384962;--series-3:#697688;--series-4:#9CA5B1}
114
115
  .slide.slide-inverse .panel-item-title{color:var(--ink)} .slide.slide-inverse .panel-item-desc{color:rgba(10,31,61,.72)}
115
116
  .slide.slide-inverse .num-disc{background:var(--paper);color:var(--ink)}
116
117
  .slide.slide-inverse .banner{background:var(--paper)} .slide.slide-inverse .banner-title{color:var(--ink)}
@@ -4,8 +4,9 @@
4
4
  /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
5
  所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。咨询/董事会:信息密度优先。 */
6
6
  --space-scale:0.86; --type-scale:0.95;
7
+ --slide-bg:#ffffff;
7
8
  --accent:#2251ff; --c1:#2251ff; --c2:#3E8C8C; --c3:#B07A2E; --c4:#5B6B84; --chart-1:#3A5CE0;
8
- --title:#0F2340; --body:#354A63; --muted:#6B7A90; --foot:#9AA6B8;
9
+ --title:#0F2340; --body:#354A63; --muted:#6B7A90; --foot:#8993A3;
9
10
  --hair:#E3E8F0; --card-radius:6px;
10
11
  --font-head:'IBM Plex Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif; --font-heading:var(--font-head);
11
12
  --font-body:'IBM Plex Sans','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
@@ -1,5 +1,7 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: step-marks -->
2
2
  <div style="position:absolute;inset:0;background:#FBF2E8"></div>
3
+ <div class="sig-layer" data-signature="step-marks" style="position:absolute;inset:0;pointer-events:none">
3
4
  <div style="position:absolute;right:0;top:132px;width:52px;height:44px;background:var(--accent);opacity:0.90;pointer-events:none"></div>
4
5
  <div style="position:absolute;right:0;top:216px;width:38px;height:44px;background:var(--accent);opacity:0.62;pointer-events:none"></div>
5
6
  <div style="position:absolute;right:0;top:300px;width:24px;height:44px;background:var(--accent);opacity:0.34;pointer-events:none"></div>
7
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:0.98; --type-scale:1.06;
5
- --accent:#F04A50; --c1:#F04A50; --c2:#898B0C; --c3:#189785; --c4:#238EC7; --chart-1:#F04A50;
5
+ --accent:#F04A50; --c1:#F04A50; --c2:#898B0C; --c3:#189785; --c4:#238EC7; --chart-1:#F04A50; --series-1:#F04A50; --series-2:#8F911A; --series-3:#0E7D6E; --series-4:#2C94CE;
6
6
  --title:#2D271F; --body:#59544D; --muted:#847E76; --foot:#847E76;
7
7
  --hair:#E0D6C8; --card-radius:4px;
8
8
  --font-head:'Syne','Noto Sans SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#FBC9CB}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -5,7 +5,7 @@
5
5
  所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。极简报告:留白大、字号收敛。 */
6
6
  --space-scale:1.18; --type-scale:0.97;
7
7
  --accent:#0A0A0A; --c1:#0A0A0A; --c2:#555555; --c3:#8A8A8A; --c4:#BFBFBF; --chart-1:#3F3F3F;
8
- --title:#0A0A0A; --body:#555555; --muted:#919191; --foot:#C4C4C4;
8
+ --title:#0A0A0A; --body:#555555; --muted:#919191; --foot:#929292;
9
9
  --hair:#E8E8E8; --card-radius:2px;
10
10
  --font-head:'Archivo','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
11
11
  --font-body:'Archivo','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
@@ -41,7 +41,7 @@
41
41
  /* steps */
42
42
  .step-line{background:var(--hair)}
43
43
  .step-circle{background:#FAFAFA;border:1px solid var(--hair);box-shadow:0 6px 18px rgba(0,0,0,.04);font-family:var(--font-head)}
44
- .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
+ .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:#767676}
45
45
  .step-tag,.step-body{color:var(--muted)} .step-title{color:var(--title)}
46
46
  /* toc */
47
47
  .toc-item{border-top:1px solid var(--hair)} .toc-grid .toc-item:nth-child(1){border-top-color:var(--title)} .toc-grid .toc-item:nth-child(2){border-top-color:var(--c2)}
@@ -55,6 +55,10 @@
55
55
  /* full-bleed image overlay — 始终浅色(压在图/scrim 上,与皮肤明暗无关)*/
56
56
  .overlay-title{color:#fff}
57
57
  .overlay-sub{color:rgba(255,255,255,.82)}
58
+ /* 满版图版式的眉题压在照片上:mono 的眉题是 --title 黑(#0A0A0A),压在满版照片的暗渐变上 1.3:1,看不见。图上文字按图上规则提亮。 */
59
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#FFFFFF}
60
+ /* 同三个版式的空占位:浅色占位框被 scrim 压成中灰(≈#C8C8C8),--muted #919191 的占位说明在上面只有 1.9:1;换成同族的 #767676。 */
61
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .surface-label{color:#767676}
58
62
  /* batch-5 layouts: timeline / concept-hub / cover-image */
59
63
  .tl-dot{background:var(--title);border-radius:50%}
60
64
  .tl-date{color:var(--title);font-family:var(--font-head)}
@@ -1,4 +1,6 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: grid-glow -->
2
2
  <div style="position:absolute;inset:0;background:#1C192C"></div>
3
+ <div class="sig-layer" data-signature="grid-glow" style="position:absolute;inset:0;pointer-events:none">
3
4
  <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
5
  <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>
6
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:0.96; --type-scale:1.04;
5
- --accent:#E076F5; --c1:#E076F5; --c2:#779EFC; --c3:#1AACE3; --c4:#13B1BE; --chart-1:#E076F5;
5
+ --accent:#E076F5; --c1:#E076F5; --c2:#779EFC; --c3:#1AACE3; --c4:#13B1BE; --chart-1:#E076F5; --series-1:#E076F5; --series-2:#678DE9; --series-3:#6BCDFC; --series-4:#15A4B0;
6
6
  --title:#F7F5FD; --body:#C2BFCA; --muted:#87858F; --foot:#87858F;
7
7
  --hair:#3F3B4D; --card-radius:4px;
8
8
  --font-head:'Jost','Noto Sans SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#F6D6FC}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -4,8 +4,8 @@
4
4
  /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
5
  所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。证书/招商:仪式感留白。 */
6
6
  --space-scale:1.1; --type-scale:1.0;
7
- --accent:#CDB85C; --c1:#CDB85C; --c2:#E3D394; --c3:#B49C42; --c4:#F0E4B0; --chart-1:#B49C42;
8
- --title:#F8F3E2; --body:#D6CB9E; --muted:#A6996A; --foot:#877A52;
7
+ --accent:#CDB85C; --c1:#CDB85C; --c2:#E3D394; --c3:#B49C42; --c4:#F0E4B0; --chart-1:#B49C42; --series-1:#CDB85C; --series-2:#E1F7DC; --series-3:#EC7626; --series-4:#B4E5DF;
8
+ --title:#F8F3E2; --body:#D6CB9E; --muted:#A6996A; --foot:#A3997A;
9
9
  --hair:rgba(205,184,92,.18); --card-radius:14px;
10
10
  --font-head:'Marcellus','Songti SC','Noto Serif SC',serif;
11
11
  --font-body:'Karla','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
@@ -70,17 +70,18 @@
70
70
  .ring-track{stroke:var(--hair)} .ring-fill{stroke:var(--accent)} .ring-num{color:var(--title)}
71
71
 
72
72
  /* toc-panel: 深色 skin → 浅色对比面板 */
73
- .panel{background:#F4EFDD;box-shadow:0 24px 60px rgba(0,0,0,.4)}
74
- .panel-item-title{color:var(--accent);font-family:var(--font-head)}
73
+ /* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
74
+ .panel{background:#F4EFDD;box-shadow:0 24px 60px rgba(0,0,0,.4);--chart-surface:#F4EFDD;--chart-ink:#403D31;--chart-muted:#676357;--chart-title:#1E1B10;--chart-grid:#D5D1C3;--chart-1:#A0882B;--chart-accent:#A0882B;--series-1:#675702;--series-2:#372D01;--series-3:#9C8527;--series-4:#4D4210}
75
+ .panel-item-title{color:#766A35;font-family:var(--font-head)}
75
76
  .panel-item-desc{color:#4A4636}
76
77
  .toc-brand{color:var(--title)}
77
78
 
78
79
  /* numbered-brief layout: 实心编号盘 + 左条引用(全部走变量,每皮肤自动上色) */
79
- .num-disc{background:var(--accent);color:#fff} .num-item-title{color:var(--title)}
80
+ .num-disc{background:var(--accent);color:#4A3F0C} .num-item-title{color:var(--title)}
80
81
  .brief-quote{border-left:3px solid var(--accent)} .brief-quote-txt{color:var(--muted)} .brief-quote-attr{color:var(--muted)}
81
82
 
82
83
  /* banner-columns layout: 通栏标题带 + 3 栏项目符号(变量驱动,每皮肤自动上色) */
83
- .banner{background:var(--accent)} .banner-title{color:#fff}
84
+ .banner{background:var(--accent)} .banner-title{color:#4A3F0C}
84
85
  .col-title{color:var(--title)} .col-body{color:var(--body)} .col-bullet{background:var(--accent)}
85
86
 
86
87
  /* backdrop 弧线(.bd-arc)作用域:仅结构页 + 单焦点页显示,内容/数据/图片页保持干净 */
@@ -1,4 +1,6 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: horizon -->
2
2
  <div style="position:absolute;inset:0;background:#F2F2DE"></div>
3
+ <div class="sig-layer" data-signature="horizon" style="position:absolute;inset:0;pointer-events:none">
3
4
  <div style="position:absolute;left:0;right:0;top:62%;height:1px;background:var(--hair);pointer-events:none"></div>
4
5
  <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>
6
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.08; --type-scale:1;
5
- --accent:#3C6F35; --c1:#3C6F35; --c2:#106E6E; --c3:#106A94; --c4:#765594; --chart-1:#3C6F35;
5
+ --accent:#3C6F35; --c1:#3C6F35; --c2:#106E6E; --c3:#106A94; --c4:#765594; --chart-1:#3C6F35; --series-1:#3C6F35; --series-2:#459797; --series-3:#045579; --series-4:#7B5999;
6
6
  --title:#262F1F; --body:#50574B; --muted:#777E71; --foot:#777E71;
7
7
  --hair:#CAD5C0; --card-radius:4px;
8
8
  --font-head:'Fraunces','Songti SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#C5D4C2}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -1,4 +1,6 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: horizon -->
2
2
  <div style="position:absolute;inset:0;background:#F6F6FF"></div>
3
+ <div class="sig-layer" data-signature="horizon" style="position:absolute;inset:0;pointer-events:none">
3
4
  <div style="position:absolute;left:0;right:0;top:62%;height:1px;background:var(--hair);pointer-events:none"></div>
4
5
  <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>
6
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.1; --type-scale:1.02;
5
- --accent:#6F76BF; --c1:#6F76BF; --c2:#AA649E; --c3:#BF5D6F; --c4:#B36944; --chart-1:#6F76BF;
5
+ --accent:#6F76BF; --c1:#6F76BF; --c2:#AA649E; --c3:#BF5D6F; --c4:#B36944; --chart-1:#6F76BF; --series-1:#6F76BF; --series-2:#834078; --series-3:#D57182; --series-4:#9C542F;
6
6
  --title:#2F2F3B; --body:#585962; --muted:#80808B; --foot:#80808B;
7
7
  --hair:#DBDCEB; --card-radius:4px;
8
8
  --font-head:'Quicksand','Noto Sans SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#D4D6EC}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -1,4 +1,6 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: footer-slab -->
2
2
  <div style="position:absolute;inset:0;background:#1F1F1F"></div>
3
+ <div class="sig-layer" data-signature="footer-slab" style="position:absolute;inset:0;pointer-events:none">
3
4
  <div style="position:absolute;left:0;right:0;bottom:0;height:14px;background:var(--accent);opacity:.9;pointer-events:none"></div>
4
5
  <div style="position:absolute;left:0;right:0;bottom:14px;height:2px;background:var(--hair);pointer-events:none"></div>
6
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.12; --type-scale:1;
5
- --accent:#FC8B79; --c1:#FC8B79; --c2:#BFAB4D; --c3:#51BF83; --c4:#24BCD0; --chart-1:#FC8B79;
5
+ --accent:#FC8B79; --c1:#FC8B79; --c2:#BFAB4D; --c3:#51BF83; --c4:#24BCD0; --chart-1:#FC8B79; --series-1:#FC8B79; --series-2:#B39F40; --series-3:#6FDB9D; --series-4:#09B2C6;
6
6
  --title:#F6F6F6; --body:#BBBBBB; --muted:#868686; --foot:#868686;
7
7
  --hair:#424242; --card-radius:4px;
8
8
  --font-head:'Archivo','Noto Sans SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#FEDCD7}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -1,6 +1,8 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: crop-marks -->
2
2
  <div style="position:absolute;inset:0;background:#FDEBD8"></div>
3
+ <div class="sig-layer" data-signature="crop-marks" style="position:absolute;inset:0;pointer-events:none">
3
4
  <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
5
  <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
6
  <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
7
  <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>
8
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.04; --type-scale:1.04;
5
- --accent:#BE433C; --c1:#BE433C; --c2:#926400; --c3:#4B790C; --c4:#107B62; --chart-1:#BE433C;
5
+ --accent:#BE433C; --c1:#BE433C; --c2:#926400; --c3:#4B790C; --c4:#107B62; --chart-1:#BE433C; --series-1:#BE433C; --series-2:#745006; --series-3:#669634; --series-4:#13735C;
6
6
  --title:#3C2721; --body:#62514D; --muted:#8A7873; --foot:#8A7873;
7
7
  --hair:#E3C6BE; --card-radius:4px;
8
8
  --font-head:'DM Serif Display','Songti SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#ECC7C5}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -1,4 +1,6 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: diagonal-band -->
2
2
  <div style="position:absolute;inset:0;background:#12242E"></div>
3
+ <div class="sig-layer" data-signature="diagonal-band" style="position:absolute;inset:0;pointer-events:none">
3
4
  <div style="position:absolute;right:-60px;top:-40px;width:260px;height:820px;background:var(--accent);opacity:.14;transform:rotate(18deg);pointer-events:none"></div>
4
5
  <div style="position:absolute;right:96px;top:-40px;width:2px;height:820px;background:var(--accent);opacity:.5;transform:rotate(18deg);pointer-events:none"></div>
6
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:0.92; --type-scale:1.08;
5
- --accent:#FB845C; --c1:#FB845C; --c2:#AFAA01; --c3:#1ABD7A; --c4:#1FB6C8; --chart-1:#FB845C;
5
+ --accent:#FB845C; --c1:#FB845C; --c2:#AFAA01; --c3:#1ABD7A; --c4:#1FB6C8; --chart-1:#FB845C; --series-1:#FB845C; --series-2:#A6A213; --series-3:#44D792; --series-4:#0FB0C2;
6
6
  --title:#F2F7FC; --body:#B5BCC2; --muted:#7E858A; --foot:#7E858A;
7
7
  --hair:#37444D; --card-radius:4px;
8
8
  --font-head:'Big Shoulders Display','Noto Sans SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#FEDACE}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -25,3 +26,5 @@
25
26
  .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
27
  .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
28
  .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
29
+ .slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer > *{translate:230px 0}
30
+ .slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer{-webkit-mask-image:var(--decor-safe-mask);mask-image:var(--decor-safe-mask)}
@@ -10,7 +10,7 @@
10
10
  --paper:#FAFAF8; --ink:#0A0A0A; --grey-1:#F0F0EE; --grey-2:#D4D4D2; --grey-3:#737373;
11
11
  --accent:#002FA7; --accent-on:#FFFFFF;
12
12
  --c1:#002FA7; --c2:#5B7BFF; --c3:#0A0A0A; --c4:#737373; --chart-1:#4A6FD1;
13
- --title:#0A0A0A; --body:#3D3D3B; --muted:#737373; --foot:#a3a3a1;
13
+ --title:#0A0A0A; --body:#3D3D3B; --muted:#737373; --foot:#8F8F8E;
14
14
  --hair:#D4D4D2; --card-radius:0px;
15
15
  --font-head:'Inter','Noto Sans SC','PingFang SC',sans-serif;
16
16
  --font-body:'Inter','Noto Sans SC','PingFang SC',sans-serif;
@@ -38,7 +38,7 @@
38
38
  .cmp-col{background:var(--grey-1);border:none;box-shadow:none}
39
39
  .cmp-col--rec{background:var(--accent);color:var(--accent-on);box-shadow:none}
40
40
  .cmp-title{color:var(--title);font-weight:600} .cmp-k{color:var(--muted);font-family:var(--font-mono)} .cmp-v{color:var(--title);font-weight:700}
41
- .cmp-col--rec .cmp-title,.cmp-col--rec .cmp-k,.cmp-col--rec .cmp-v{color:var(--accent-on)}
41
+ .cmp-col--rec .cmp-title,.cmp-col--rec .cmp-k,.cmp-col--rec .cmp-v,.cmp-col--rec .card-title,.cmp-col--rec .card-body,.cmp-col--rec .kpi-num{color:var(--accent-on)}
42
42
  .cmp-badge{background:var(--ink);color:#fff;border-radius:0}
43
43
  /* kpi / big-stat — 唯一允许粗体的大字:KPI 数字必须 800,不跟随标题的 200 */
44
44
  .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);font-weight:800;letter-spacing:-.03em;font-feature-settings:"tnum"} .kpi-label{color:var(--muted);font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;font-weight:600}
@@ -59,6 +59,10 @@
59
59
  /* full-bleed image overlay */
60
60
  .overlay-title{color:#fff;font-family:var(--font-head);font-weight:200}
61
61
  .overlay-sub{color:rgba(255,255,255,.85);font-weight:300}
62
+ /* 满版图版式的眉题压在照片上:克莱因蓝 #002FA7 压在满版照片的暗渐变上 1.1–1.4:1,看不见。图上文字按图上规则提亮:
63
+ 取 accent 混 70% 白(与生成族同一公式)。反色页那个提亮蓝 #5B7BFF 不够 —— 眉题下面是 _contract-defaults.css
64
+ 的"可读底线"暗层(~.55),亮图/空占位上它只有 1.5:1。 */
65
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#B3C1E5}
62
66
  .tl-dot{background:var(--accent);border-radius:0}
63
67
  .tl-date{color:var(--accent);font-family:var(--font-head);font-weight:800;font-feature-settings:"tnum"}
64
68
  .tl-title{color:var(--title);font-weight:600} .tl-desc{color:var(--muted);font-family:var(--font-mono)}
@@ -78,7 +82,8 @@
78
82
  .ring-fill{stroke:var(--accent)}
79
83
  .ring-num{color:var(--title);font-family:var(--font-head);font-weight:800}
80
84
  /* toc-panel — 唯一实色反差:纯墨面板(非 accent,避免蓝色滥用) */
81
- .panel{background:var(--ink);box-shadow:none;border-radius:0}
85
+ /* 面板自己的底:SVG 图表的墨色/网格/描边环/系列色跟着容器走,不用页面级 token(deck-chart-svg.ts) */
86
+ .panel{background:var(--ink);box-shadow:none;border-radius:0;--chart-surface:#0A0A0A;--chart-ink:#C7C7C5;--chart-muted:#8A8A88;--chart-title:#FAFAF8;--chart-grid:rgba(250,250,248,.16);--chart-1:#5B7BFF;--chart-accent:#5B7BFF;--series-1:#7FA9FD;--series-2:#DBE4FE;--series-3:#7A7A7A;--series-4:#CACACA}
82
87
  .panel-item-title{color:#fff;font-weight:600}
83
88
  .panel-item-desc{color:rgba(255,255,255,.7);font-family:var(--font-mono)}
84
89
  .toc-brand{color:var(--title);font-family:var(--font-mono);font-weight:600}
@@ -106,10 +111,10 @@
106
111
  (accent-bright #5B7BFF),避免深蓝在纯黑上糊掉;标题反色为纸白。 */
107
112
  /* Klein blue at #002FA7 is too dark to read on black, and --c3 (#0A0A0A) IS the black.
108
113
  Keep the hue, raise the lightness; the near-black step becomes the near-white one. */
109
- .slide.slide-inverse{--slide-bg:#0A0A0A;--body:#C7C7C5;--muted:#8A8A88;--foot:#5c5c5a;--hair:rgba(250,250,248,.16);--title:#FAFAF8;--grey-1:rgba(250,250,248,.06);--c1:#5B7BFF;--c2:#93A9FF;--c3:#FAFAF8;--c4:#8A8A88}
114
+ .slide.slide-inverse{--slide-bg:#0A0A0A;--body:#C7C7C5;--muted:#8A8A88;--foot:#5c5c5a;--hair:rgba(250,250,248,.16);--title:#FAFAF8;--title-color:#FAFAF8;--body-color:#C7C7C5;--accent:#5B7BFF;--grey-1:rgba(250,250,248,.06);--c1:#5B7BFF;--c2:#93A9FF;--c3:#FAFAF8;--c4:#8A8A88}
110
115
  .slide.slide-inverse .eyebrow,.slide.slide-inverse .kpi-num,.slide.slide-inverse .stat-num,.slide.slide-inverse .tl-date{color:#5B7BFF}
111
116
  .slide.slide-inverse .card,.slide.slide-inverse .cmp-col,.slide.slide-inverse .step-circle,.slide.slide-inverse .surface{background:rgba(250,250,248,.06)}
112
- .slide.slide-inverse .panel{background:var(--paper)} .slide.slide-inverse .panel-item-title{color:var(--ink)} .slide.slide-inverse .panel-item-desc{color:rgba(10,10,10,.7)}
117
+ .slide.slide-inverse .panel{background:var(--paper);--chart-surface:#FAFAF8;--chart-ink:#3D3D3B;--chart-muted:#737373;--chart-title:#0A0A0A;--chart-grid:#D4D4D2;--chart-1:#4A6FD1;--chart-accent:#4A6FD1;--series-1:#002FA7;--series-2:#5B7BFF;--series-3:#0A0A0A;--series-4:#737373} .slide.slide-inverse .panel-item-title{color:var(--ink)} .slide.slide-inverse .panel-item-desc{color:rgba(10,10,10,.7)}
113
118
  .slide.slide-inverse .cmp-badge{background:var(--paper);color:var(--ink)}
114
119
 
115
120
  /* 点阵矩阵 + 条纹色块装饰仅在封面/hero 页透出(guizang 原则:正文页保持纯净底色) */
@@ -1,6 +1,8 @@
1
1
  <!-- generated by scripts/ppt-tpl/gen-skin.mjs — signature: arc-rise -->
2
2
  <div style="position:absolute;inset:0;background:#FFF0EF"></div>
3
+ <div class="sig-layer" data-signature="arc-rise" style="position:absolute;inset:0;pointer-events:none">
3
4
  <svg style="position:absolute;inset:0;pointer-events:none" width="1280" height="720" viewBox="0 0 1280 720" fill="none" preserveAspectRatio="none">
4
5
  <path d="M-40 660 C 420 706, 900 560, 1320 150" stroke="var(--accent)" stroke-opacity=".55" stroke-width="2" fill="none"/>
5
6
  <path d="M-40 660 C 420 706, 900 560, 1320 150 L1320 720 L-40 720 Z" fill="var(--accent)" fill-opacity=".08"/>
6
7
  </svg>
8
+ </div>
@@ -2,7 +2,7 @@
2
2
  手改会在下次生成时丢失:要改就改 family.json。 */
3
3
  :root{
4
4
  --space-scale:1.1; --type-scale:1.06;
5
- --accent:#A55B78; --c1:#A55B78; --c2:#A2614B; --c3:#7F7237; --c4:#497E50; --chart-1:#A55B78;
5
+ --accent:#A55B78; --c1:#A55B78; --c2:#A2614B; --c3:#7F7237; --c4:#497E50; --chart-1:#A55B78; --series-1:#A55B78; --series-2:#783B26; --series-3:#988B50; --series-4:#3B7043;
6
6
  --title:#3C2C2C; --body:#625453; --muted:#8D7E7D; --foot:#8D7E7D;
7
7
  --hair:#EFD4D2; --card-radius:4px;
8
8
  --font-head:'Playfair Display','Songti SC',sans-serif;
@@ -14,6 +14,7 @@
14
14
  .deck-header,.deck-footer,.deck-pageno{color:var(--muted)}
15
15
  .rule,.rule-foot{background:var(--hair)}
16
16
  .eyebrow{color:var(--accent);letter-spacing:.22em;font-weight:700}
17
+ .slide:is([data-layout="cover-image"],[data-layout="image-full"],[data-layout="section-fullbleed"]) .eyebrow{color:#E4CED7}
17
18
  .accent-bar{background:var(--accent)}
18
19
  .deck-title,.cover-title,.section-title,.ending-title{color:var(--title);font-family:var(--font-head);font-weight:700;--talos-bake:1}
19
20
  .cover-sub,.ending-sub,.section-desc{color:var(--muted)}
@@ -25,3 +26,5 @@
25
26
  .card-grid .card:nth-child(4n+4) .card-rail,.card-grid .card:nth-child(4n+4) .card-dot{background:var(--c4)}
26
27
  .kpi-num,.stat-num{color:var(--title);font-family:var(--font-head);--talos-bake:1}
27
28
  .kpi-label,.stat-unit{color:var(--muted)} .stat-lead{color:var(--title)} .stat-note{color:var(--body)}
29
+ .slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer > *{transform-origin:100% 100%;scale:.22}
30
+ .slide[data-layout]:not([data-layout^="cover"],[data-layout^="section"],[data-layout^="title"],[data-layout^="ending"],[data-layout="hero"],[data-layout="transition"]) .slide-backdrop:has(> .theme-art-layer) > .sig-layer{-webkit-mask-image:var(--decor-safe-mask);mask-image:var(--decor-safe-mask)}