@taloswork/ose-shared 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/package.json +3 -3
  2. package/skills/document/SKILL.md +29 -33
  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/CormorantGaramond-SemiBold.woff2 +0 -0
  8. package/skills/document/assets/fonts/Fraunces-SemiBold.woff2 +0 -0
  9. package/skills/document/assets/fonts/GochiHand-Regular.woff2 +0 -0
  10. package/skills/document/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  11. package/skills/document/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  12. package/skills/document/assets/fonts/Inter-Regular.woff2 +0 -0
  13. package/skills/document/assets/fonts/Jost-Regular.woff2 +0 -0
  14. package/skills/document/assets/fonts/Jost-SemiBold.woff2 +0 -0
  15. package/skills/document/assets/fonts/Karla-Regular.woff2 +0 -0
  16. package/skills/document/assets/fonts/Lora-Regular.woff2 +0 -0
  17. package/skills/document/assets/fonts/Manrope-Bold.woff2 +0 -0
  18. package/skills/document/assets/fonts/Manrope-Regular.woff2 +0 -0
  19. package/skills/document/assets/fonts/Marcellus-Regular.woff2 +0 -0
  20. package/skills/document/assets/fonts/PublicSans-Regular.woff2 +0 -0
  21. package/skills/document/assets/fonts/Sora-Regular.woff2 +0 -0
  22. package/skills/document/assets/fonts/Sora-SemiBold.woff2 +0 -0
  23. package/skills/document/assets/fonts/fonts.json +218 -0
  24. package/skills/document/bin/deck-build.cjs +273 -5
  25. package/skills/document/bin/doc-gen.cjs +108 -23
  26. package/skills/document/bin/html2pptx.cjs +280 -49
  27. package/skills/document/catalog.json +25 -0
  28. package/skills/document/deck-design.md +191 -0
  29. package/skills/document/layouts/README.md +32 -0
  30. package/skills/document/layouts/banner-columns.tpl +9 -9
  31. package/skills/document/layouts/bento.tpl +3 -3
  32. package/skills/document/layouts/big-stat.tpl +3 -3
  33. package/skills/document/layouts/blocks-2x2.tpl +12 -12
  34. package/skills/document/layouts/brand-values.tpl +5 -5
  35. package/skills/document/layouts/cards-3.tpl +3 -3
  36. package/skills/document/layouts/cards-grid.tpl +3 -3
  37. package/skills/document/layouts/chart-full.tpl +3 -3
  38. package/skills/document/layouts/chart-kpi.tpl +3 -3
  39. package/skills/document/layouts/color-palette.tpl +5 -5
  40. package/skills/document/layouts/comparison.tpl +3 -3
  41. package/skills/document/layouts/concept-hub.tpl +3 -3
  42. package/skills/document/layouts/cover-centered.tpl +1 -1
  43. package/skills/document/layouts/cover-image.tpl +1 -1
  44. package/skills/document/layouts/cover-minimal.tpl +3 -3
  45. package/skills/document/layouts/cover-statement.tpl +3 -3
  46. package/skills/document/layouts/cover.tpl +1 -1
  47. package/skills/document/layouts/data-table.tpl +3 -3
  48. package/skills/document/layouts/dos-donts.tpl +14 -14
  49. package/skills/document/layouts/editorial-panel.tpl +11 -11
  50. package/skills/document/layouts/ending-contact.tpl +1 -1
  51. package/skills/document/layouts/ending.tpl +1 -1
  52. package/skills/document/layouts/funnel.tpl +3 -3
  53. package/skills/document/layouts/gantt.tpl +3 -3
  54. package/skills/document/layouts/hero.tpl +3 -3
  55. package/skills/document/layouts/icon-row.tpl +3 -3
  56. package/skills/document/layouts/image-full.tpl +5 -5
  57. package/skills/document/layouts/image-grid.tpl +3 -3
  58. package/skills/document/layouts/image-left.tpl +3 -3
  59. package/skills/document/layouts/list.tpl +3 -3
  60. package/skills/document/layouts/logo-guidelines.tpl +8 -8
  61. package/skills/document/layouts/map-distribution.tpl +3 -3
  62. package/skills/document/layouts/map-quad.tpl +6 -6
  63. package/skills/document/layouts/matrix-2x2.tpl +3 -3
  64. package/skills/document/layouts/numbered-brief.tpl +12 -12
  65. package/skills/document/layouts/org-tree.tpl +3 -3
  66. package/skills/document/layouts/problem-solution-banner.tpl +7 -7
  67. package/skills/document/layouts/problem-solution.tpl +3 -3
  68. package/skills/document/layouts/pyramid.tpl +3 -3
  69. package/skills/document/layouts/quote.tpl +1 -1
  70. package/skills/document/layouts/radar.tpl +3 -3
  71. package/skills/document/layouts/ring-progress.tpl +3 -3
  72. package/skills/document/layouts/section-fullbleed.tpl +3 -3
  73. package/skills/document/layouts/section-image.tpl +1 -1
  74. package/skills/document/layouts/section-stat.tpl +1 -1
  75. package/skills/document/layouts/section.tpl +1 -1
  76. package/skills/document/layouts/slots.json +1 -1
  77. package/skills/document/layouts/split-two-col.tpl +3 -3
  78. package/skills/document/layouts/stats-chart.tpl +3 -3
  79. package/skills/document/layouts/steps-serpentine.tpl +11 -11
  80. package/skills/document/layouts/steps-vertical.tpl +3 -3
  81. package/skills/document/layouts/steps.tpl +3 -3
  82. package/skills/document/layouts/team-row.tpl +4 -4
  83. package/skills/document/layouts/three-kpi.tpl +3 -3
  84. package/skills/document/layouts/timeline.tpl +3 -3
  85. package/skills/document/layouts/title-meta.tpl +5 -5
  86. package/skills/document/layouts/title.tpl +2 -2
  87. package/skills/document/layouts/toc-agenda.tpl +3 -3
  88. package/skills/document/layouts/toc-editorial.tpl +15 -0
  89. package/skills/document/layouts/toc-panel.tpl +4 -4
  90. package/skills/document/layouts/toc.tpl +3 -3
  91. package/skills/document/layouts/transition.tpl +1 -1
  92. package/skills/document/layouts/two-kpi.tpl +3 -3
  93. package/skills/document/layouts/type-specimen.tpl +10 -10
  94. package/skills/document/layouts/versus.tpl +3 -3
  95. package/skills/document/motion/README.md +11 -0
  96. package/skills/document/packs/README.md +9 -0
  97. package/skills/document/styles/README.md +36 -15
  98. package/skills/document/styles/_contract-defaults.css +55 -0
  99. package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
  100. package/skills/document/styles/_samples/_groups/creative.webp +0 -0
  101. package/skills/document/styles/_samples/_groups/editorial.webp +0 -0
  102. package/skills/document/styles/_samples/_groups/minimal.webp +0 -0
  103. package/skills/document/styles/_samples/_groups/natural.webp +0 -0
  104. package/skills/document/styles/_samples/_groups/tech-future.webp +0 -0
  105. package/skills/document/styles/_samples/anthropic.webp +0 -0
  106. package/skills/document/styles/_samples/apple.webp +0 -0
  107. package/skills/document/styles/_samples/black-gold.webp +0 -0
  108. package/skills/document/styles/_samples/branding.webp +0 -0
  109. package/skills/document/styles/_samples/cinereel.webp +0 -0
  110. package/skills/document/styles/_samples/cool.webp +0 -0
  111. package/skills/document/styles/_samples/hand-drawn.webp +0 -0
  112. package/skills/document/styles/_samples/ivory-gold.webp +0 -0
  113. package/skills/document/styles/_samples/magazine-ink.webp +0 -0
  114. package/skills/document/styles/_samples/mckinsey.webp +0 -0
  115. package/skills/document/styles/_samples/mono.webp +0 -0
  116. package/skills/document/styles/_samples/olive-gold.webp +0 -0
  117. package/skills/document/styles/_samples/swiss-grid.webp +0 -0
  118. package/skills/document/styles/anthropic/backdrop.html +4 -0
  119. package/skills/document/styles/anthropic/skin.css +15 -8
  120. package/skills/document/styles/apple/backdrop.html +4 -1
  121. package/skills/document/styles/apple/skin.css +5 -2
  122. package/skills/document/styles/black-gold/backdrop.html +3 -0
  123. package/skills/document/styles/black-gold/skin.css +15 -8
  124. package/skills/document/styles/branding/backdrop.html +4 -0
  125. package/skills/document/styles/branding/skin.css +14 -7
  126. package/skills/document/styles/cinereel/skin.css +28 -10
  127. package/skills/document/styles/cool/backdrop.html +3 -0
  128. package/skills/document/styles/cool/skin.css +5 -2
  129. package/skills/document/styles/hand-drawn/skin.css +14 -6
  130. package/skills/document/styles/ivory-gold/skin.css +19 -6
  131. package/skills/document/styles/magazine-ink/skin.css +6 -1
  132. package/skills/document/styles/mckinsey/backdrop.html +5 -0
  133. package/skills/document/styles/mckinsey/skin.css +5 -2
  134. package/skills/document/styles/mono/backdrop.html +6 -0
  135. package/skills/document/styles/mono/skin.css +5 -2
  136. package/skills/document/styles/olive-gold/backdrop.html +5 -0
  137. package/skills/document/styles/olive-gold/skin.css +15 -8
  138. package/skills/document/styles/swiss-grid/skin.css +6 -1
@@ -1 +1,4 @@
1
1
  <div class="bd-arc" style="position:absolute;left:0;right:0;height:120px;top:var(--bd-arc-y,540px);pointer-events:none"><svg width="100%" height="100%" viewBox="0 0 1280 120" preserveAspectRatio="none"><defs><linearGradient id="arc" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="__ACCENT__" stop-opacity=".12"/><stop offset=".5" stop-color="__ACCENT__" stop-opacity=".34"/><stop offset="1" stop-color="__ACCENT__" stop-opacity=".12"/></linearGradient><filter id="arcb"><feGaussianBlur stdDeviation="1.4"/></filter></defs><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width="1.6" filter="url(#arcb)"/><path d="M-40 100 C 360 22,920 22,1320 100" fill="none" stroke="url(#arc)" stroke-width=".7"/></svg></div><svg style="position:absolute;inset:0;width:100%;height:100%;opacity:.05;mix-blend-mode:overlay;pointer-events:none"><filter id="bdns"><feTurbulence type="fractalNoise" baseFrequency=".85" numOctaves="2" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#bdns)"/></svg>
2
+ <!-- signature: instrument ticks — a measurement scale along the top right edge. -->
3
+ <div style="position:absolute;right:56px;top:34px;display:flex;gap:9px;align-items:flex-start;pointer-events:none"><span style="display:block;width:1px;height:16px;background:var(--accent);opacity:.8"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:16px;background:var(--accent);opacity:.8"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:8px;background:var(--accent);opacity:.45"></span><span style="display:block;width:1px;height:16px;background:var(--accent);opacity:.8"></span></div>
4
+ <div style="position:absolute;right:56px;top:34px;width:129px;height:1px;background:var(--accent);opacity:.5;pointer-events:none"></div>
@@ -1,11 +1,14 @@
1
1
  /* styles/cool — 默认酷炫:深蓝底 + 蓝青辉光 + 玻璃卡 + 4 色 accent ramp。
2
2
  皮肤层:定义 layouts/*.tpl 用到的全部语义 class。换 skin 只换这一个文件。 */
3
3
  :root{
4
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
5
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。基准。 */
6
+ --space-scale:1.0; --type-scale:1.0;
4
7
  --accent:#7DE2D1; --c1:#7DE2D1; --c2:#A9B4FF; --c3:#E7C08A; --c4:#E6A0B0; --chart-1:#35B0A0;
5
8
  --title:#F4F8FF; --body:#93A0BE; --muted:#6E7A98; --foot:#5C6885;
6
9
  --hair:rgba(255,255,255,.08); --card-radius:18px; --glow:0 0 18px var(--accent);
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:'Sora','PingFang SC','Noto Sans SC','Hiragino Sans GB',sans-serif;
11
+ --font-body:'Sora','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 (else headings render dark on the dark bg). */
@@ -1,6 +1,9 @@
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;
@@ -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,8 +1,10 @@
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;
@@ -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)}
@@ -6,6 +6,9 @@
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;
@@ -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,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
8
  --title:#0A0A0A; --body:#555555; --muted:#9B9B9B; --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. */
@@ -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','Optima','STKaiti','Kaiti SC','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 */
@@ -4,6 +4,9 @@
4
4
  (rule 横线除外)。字重阶梯是灵魂:大字越大越细(200),小字越小越粗(500-600),
5
5
  唯独 KPI 数字反过来走粗体(800)——guizang 原文精确到这一条,不是通感描述。 */
6
6
  :root{
7
+ /* 排版节奏 — layouts 的字号与页边距都写成 calc(N * var(--…-scale,1)),
8
+ 所以皮肤可以在不碰任何 layout 的前提下定义自己的疏密。瑞士网格:紧贴栅格,反差靠 layout 自身。 */
9
+ --space-scale:0.9; --type-scale:1.0;
7
10
  --paper:#FAFAF8; --ink:#0A0A0A; --grey-1:#F0F0EE; --grey-2:#D4D4D2; --grey-3:#737373;
8
11
  --accent:#002FA7; --accent-on:#FFFFFF;
9
12
  --c1:#002FA7; --c2:#5B7BFF; --c3:#0A0A0A; --c4:#737373; --chart-1:#4A6FD1;
@@ -101,7 +104,9 @@
101
104
 
102
105
  /* ===== .slide-inverse — 纯墨底(guizang 的 .slide.dark),accent 在暗底自动提亮
103
106
  (accent-bright #5B7BFF),避免深蓝在纯黑上糊掉;标题反色为纸白。 */
104
- .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)}
107
+ /* Klein blue at #002FA7 is too dark to read on black, and --c3 (#0A0A0A) IS the black.
108
+ 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}
105
110
  .slide.slide-inverse .eyebrow,.slide.slide-inverse .kpi-num,.slide.slide-inverse .stat-num,.slide.slide-inverse .tl-date{color:#5B7BFF}
106
111
  .slide.slide-inverse .card,.slide.slide-inverse .cmp-col,.slide.slide-inverse .step-circle,.slide.slide-inverse .surface{background:rgba(250,250,248,.06)}
107
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)}