@cyber-dash-tech/revela 0.18.16 → 0.19.0

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 (95) hide show
  1. package/README.md +27 -13
  2. package/README.zh-CN.md +27 -13
  3. package/assets/img/lucent-01.jpg +0 -0
  4. package/assets/img/lucent-02.jpg +0 -0
  5. package/assets/img/lucent-03.jpg +0 -0
  6. package/assets/img/lucent-dark-01.jpg +0 -0
  7. package/assets/img/lucent-dark-02.jpg +0 -0
  8. package/assets/img/lucent-dark-03.jpg +0 -0
  9. package/assets/img/monet-01.jpg +0 -0
  10. package/assets/img/monet-02.jpg +0 -0
  11. package/assets/img/monet-03.jpg +0 -0
  12. package/assets/img/starter-01.jpg +0 -0
  13. package/assets/img/starter-02.jpg +0 -0
  14. package/assets/img/starter-03.jpg +0 -0
  15. package/assets/img/summit-01.jpg +0 -0
  16. package/assets/img/summit-02.jpg +0 -0
  17. package/assets/img/summit-03.jpg +0 -0
  18. package/designs/lucent/DESIGN.md +76 -0
  19. package/designs/lucent/design.css +283 -0
  20. package/designs/lucent-dark/DESIGN.md +278 -0
  21. package/designs/lucent-dark/assets/card-lens.jpg +0 -0
  22. package/designs/lucent-dark/assets/closing-background.jpg +0 -0
  23. package/designs/lucent-dark/assets/cover-background.jpg +0 -0
  24. package/designs/lucent-dark/assets/report-visual.jpg +0 -0
  25. package/designs/lucent-dark/assets/soft-texture.jpg +0 -0
  26. package/designs/lucent-dark/assets/toc-orb.png +0 -0
  27. package/designs/lucent-dark/design.css +417 -0
  28. package/designs/monet/DESIGN.md +14 -0
  29. package/designs/monet/assets/card-lens.jpg +0 -0
  30. package/designs/monet/assets/closing-background.jpg +0 -0
  31. package/designs/monet/assets/cover-background.jpg +0 -0
  32. package/designs/monet/assets/report-visual.jpg +0 -0
  33. package/designs/monet/assets/soft-texture.jpg +0 -0
  34. package/designs/monet/assets/toc-orb.png +0 -0
  35. package/designs/monet/design.css +340 -0
  36. package/designs/starter/DESIGN.md +14 -0
  37. package/designs/starter/assets/card-lens.jpg +0 -0
  38. package/designs/starter/assets/closing-background.jpg +0 -0
  39. package/designs/starter/assets/cover-background.jpg +0 -0
  40. package/designs/starter/assets/report-visual.jpg +0 -0
  41. package/designs/starter/assets/soft-texture.jpg +0 -0
  42. package/designs/starter/assets/toc-orb.png +0 -0
  43. package/designs/starter/design.css +322 -0
  44. package/designs/summit/DESIGN.md +18 -0
  45. package/designs/summit/assets/card-lens.jpg +0 -0
  46. package/designs/summit/assets/closing-background.jpg +0 -0
  47. package/designs/summit/assets/cover-background.jpg +0 -0
  48. package/designs/summit/assets/report-visual.jpg +0 -0
  49. package/designs/summit/assets/soft-texture.jpg +0 -0
  50. package/designs/summit/assets/toc-orb.png +0 -0
  51. package/designs/summit/design.css +334 -0
  52. package/lib/commands/designs-new.ts +13 -25
  53. package/lib/commands/designs-preview.ts +3 -8
  54. package/lib/deck-html/foundation.ts +8 -8
  55. package/lib/design/designs.ts +305 -14
  56. package/lib/narrative-state/deck-plan-artifact.ts +40 -3
  57. package/lib/page-templates/built-in-preview.html +373 -0
  58. package/lib/page-templates/contracts.ts +2 -0
  59. package/lib/page-templates/css.ts +2 -0
  60. package/lib/page-templates/foundation.ts +41 -0
  61. package/lib/page-templates/index.ts +6 -0
  62. package/lib/page-templates/registry.ts +3 -0
  63. package/lib/page-templates/render.ts +1202 -0
  64. package/lib/page-templates/templates/agenda.ts +4 -0
  65. package/lib/page-templates/templates/chart-takeaways.ts +4 -0
  66. package/lib/page-templates/templates/claim-supporting-visual.ts +4 -0
  67. package/lib/page-templates/templates/closing.ts +4 -0
  68. package/lib/page-templates/templates/cover.ts +4 -0
  69. package/lib/page-templates/templates/executive-summary.ts +4 -0
  70. package/lib/page-templates/templates/index.ts +19 -0
  71. package/lib/page-templates/templates/key-message-evidence.ts +4 -0
  72. package/lib/page-templates/templates/metric-highlight.ts +4 -0
  73. package/lib/page-templates/templates/problem-context.ts +4 -0
  74. package/lib/page-templates/templates/process-steps.ts +4 -0
  75. package/lib/page-templates/templates/recommendation-decision.ts +4 -0
  76. package/lib/page-templates/templates/risks-tradeoffs.ts +4 -0
  77. package/lib/page-templates/templates/section-divider.ts +4 -0
  78. package/lib/page-templates/templates/shared.ts +11 -0
  79. package/lib/page-templates/templates/table-comparison.ts +4 -0
  80. package/lib/page-templates/templates/timeline-roadmap.ts +4 -0
  81. package/lib/page-templates/vocabulary.ts +158 -0
  82. package/lib/prompt-builder.ts +5 -5
  83. package/lib/qa/artifact.ts +66 -1
  84. package/lib/qa/compliance.ts +5 -1
  85. package/lib/runtime/index.ts +99 -3
  86. package/package.json +7 -15
  87. package/plugins/revela/.codex-plugin/plugin.json +1 -1
  88. package/plugins/revela/hooks/revela_guard.ts +35 -0
  89. package/plugins/revela/mcp/revela-server.ts +101 -5
  90. package/plugins/revela/skills/revela-design/SKILL.md +21 -16
  91. package/plugins/revela/skills/revela-make-deck/SKILL.md +24 -15
  92. package/designs/lucent/preview.html +0 -529
  93. package/designs/monet/preview.html +0 -190
  94. package/designs/starter/preview.html +0 -335
  95. package/designs/summit/preview.html +0 -186
package/README.md CHANGED
@@ -39,7 +39,7 @@ npm_config_cache=/tmp/revela-npm-cache bun run smoke:mcp-pack
39
39
  Install Revela through the Codex Git marketplace:
40
40
 
41
41
  ```bash
42
- codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.16
42
+ codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.19.0
43
43
  codex plugin add revela@revela
44
44
  ```
45
45
 
@@ -77,33 +77,47 @@ The Git marketplace ref and `.mcp.json` plugin launcher are part of the same rel
77
77
 
78
78
  ## Built-In Designs
79
79
 
80
- Revela includes built-in deck designs:
80
+ Revela includes built-in deck designs. Design previews are generated from the built-in page-template preview fixture plus the selected design CSS. Each row shows a cover plus representative template pages chosen to highlight that design's character.
81
81
 
82
- ### [summit](designs/summit/preview.html)
82
+ ### starter
83
+
84
+ <p align="center">
85
+ <img src="assets/img/starter-01.jpg" alt="Starter design cover preview" width="32%" />
86
+ <img src="assets/img/starter-02.jpg" alt="Starter design executive-summary preview" width="32%" />
87
+ <img src="assets/img/starter-03.jpg" alt="Starter design process-steps preview" width="32%" />
88
+ </p>
89
+
90
+ ### summit
83
91
 
84
92
  <p align="center">
85
93
  <img src="assets/img/summit-01.jpg" alt="Summit design cover preview" width="32%" />
86
- <img src="assets/img/summit-02.jpg" alt="Summit design narrative layout preview" width="32%" />
87
- <img src="assets/img/summit-03.jpg" alt="Summit design timeline preview" width="32%" />
94
+ <img src="assets/img/summit-02.jpg" alt="Summit design agenda preview" width="32%" />
95
+ <img src="assets/img/summit-03.jpg" alt="Summit design vertical timeline-roadmap preview" width="32%" />
88
96
  </p>
89
97
 
90
- ### [monet](designs/monet/preview.html)
98
+ ### monet
91
99
 
92
100
  <p align="center">
93
101
  <img src="assets/img/monet-01.jpg" alt="Monet design cover preview" width="32%" />
94
- <img src="assets/img/monet-02.jpg" alt="Monet design narrative layout preview" width="32%" />
95
- <img src="assets/img/monet-03.jpg" alt="Monet design timeline preview" width="32%" />
102
+ <img src="assets/img/monet-02.jpg" alt="Monet design claim-supporting-visual preview" width="32%" />
103
+ <img src="assets/img/monet-03.jpg" alt="Monet design table-comparison preview" width="32%" />
96
104
  </p>
97
105
 
98
- ### [lucent](designs/lucent/preview.html)
106
+ ### lucent
99
107
 
100
108
  <p align="center">
101
109
  <img src="assets/img/lucent-01.jpg" alt="Lucent design cover preview" width="32%" />
102
- <img src="assets/img/lucent-02.jpg" alt="Lucent design narrative layout preview" width="32%" />
103
- <img src="assets/img/lucent-03.jpg" alt="Lucent design roadmap preview" width="32%" />
110
+ <img src="assets/img/lucent-02.jpg" alt="Lucent design chart-takeaways preview" width="32%" />
111
+ <img src="assets/img/lucent-03.jpg" alt="Lucent design recommendation-decision preview" width="32%" />
104
112
  </p>
105
113
 
106
- `starter` is the clean default presentation style.
114
+ ### lucent-dark
115
+
116
+ <p align="center">
117
+ <img src="assets/img/lucent-dark-01.jpg" alt="Lucent Dark design cover preview" width="32%" />
118
+ <img src="assets/img/lucent-dark-02.jpg" alt="Lucent Dark design agenda preview" width="32%" />
119
+ <img src="assets/img/lucent-dark-03.jpg" alt="Lucent Dark design horizontal timeline-roadmap preview" width="32%" />
120
+ </p>
107
121
 
108
122
  To switch designs in Codex, ask:
109
123
 
@@ -135,7 +149,7 @@ Use these prompts in Codex from the workspace that contains your source material
135
149
 
136
150
  > [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.16/skills/revela/SKILL.md), create a new design named neon-finance with a crisp financial-dashboard style: dark surfaces, precise grids, and bright green accents.
137
151
 
138
- Revela may ask for references or constraints, then creates and validates the design. When it is ready, switch to it:
152
+ Revela may ask for references or constraints, then creates a workspace draft with `DESIGN.md`, `design.css`, and any local `assets/**`. It generates a preview from the built-in page-template fixture plus that CSS so you can review cover, agenda, timelines, charts, tables, cards, and visual slots before installing. When it is ready, switch to it:
139
153
 
140
154
  > [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.16/skills/revela/SKILL.md), use neon-finance as the design.
141
155
 
package/README.zh-CN.md CHANGED
@@ -39,7 +39,7 @@ npm_config_cache=/tmp/revela-npm-cache bun run smoke:mcp-pack
39
39
  通过 Codex Git marketplace 安装 Revela:
40
40
 
41
41
  ```bash
42
- codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.18.16
42
+ codex plugin marketplace add https://github.com/cyber-dash-tech/revela --ref v0.19.0
43
43
  codex plugin add revela@revela
44
44
  ```
45
45
 
@@ -77,33 +77,47 @@ Git marketplace ref 和 `.mcp.json` plugin launcher 属于同一个 release arti
77
77
 
78
78
  ## 内置设计
79
79
 
80
- Revela 内置多个 deck design
80
+ Revela 内置多个 deck design。Design preview 由内置 page-template preview fixture 加上当前 design CSS 生成。每组截图保留 cover,并选择更能体现该 design 特征的代表性 template 页面。
81
81
 
82
- ### [summit](designs/summit/preview.html)
82
+ ### starter
83
+
84
+ <p align="center">
85
+ <img src="assets/img/starter-01.jpg" alt="Starter design cover preview" width="32%" />
86
+ <img src="assets/img/starter-02.jpg" alt="Starter design executive-summary preview" width="32%" />
87
+ <img src="assets/img/starter-03.jpg" alt="Starter design process-steps preview" width="32%" />
88
+ </p>
89
+
90
+ ### summit
83
91
 
84
92
  <p align="center">
85
93
  <img src="assets/img/summit-01.jpg" alt="Summit design cover preview" width="32%" />
86
- <img src="assets/img/summit-02.jpg" alt="Summit design narrative layout preview" width="32%" />
87
- <img src="assets/img/summit-03.jpg" alt="Summit design timeline preview" width="32%" />
94
+ <img src="assets/img/summit-02.jpg" alt="Summit design agenda preview" width="32%" />
95
+ <img src="assets/img/summit-03.jpg" alt="Summit design vertical timeline-roadmap preview" width="32%" />
88
96
  </p>
89
97
 
90
- ### [monet](designs/monet/preview.html)
98
+ ### monet
91
99
 
92
100
  <p align="center">
93
101
  <img src="assets/img/monet-01.jpg" alt="Monet design cover preview" width="32%" />
94
- <img src="assets/img/monet-02.jpg" alt="Monet design narrative layout preview" width="32%" />
95
- <img src="assets/img/monet-03.jpg" alt="Monet design timeline preview" width="32%" />
102
+ <img src="assets/img/monet-02.jpg" alt="Monet design claim-supporting-visual preview" width="32%" />
103
+ <img src="assets/img/monet-03.jpg" alt="Monet design table-comparison preview" width="32%" />
96
104
  </p>
97
105
 
98
- ### [lucent](designs/lucent/preview.html)
106
+ ### lucent
99
107
 
100
108
  <p align="center">
101
109
  <img src="assets/img/lucent-01.jpg" alt="Lucent design cover preview" width="32%" />
102
- <img src="assets/img/lucent-02.jpg" alt="Lucent design narrative layout preview" width="32%" />
103
- <img src="assets/img/lucent-03.jpg" alt="Lucent design roadmap preview" width="32%" />
110
+ <img src="assets/img/lucent-02.jpg" alt="Lucent design chart-takeaways preview" width="32%" />
111
+ <img src="assets/img/lucent-03.jpg" alt="Lucent design recommendation-decision preview" width="32%" />
104
112
  </p>
105
113
 
106
- `starter` 是简洁默认演示风格。
114
+ ### lucent-dark
115
+
116
+ <p align="center">
117
+ <img src="assets/img/lucent-dark-01.jpg" alt="Lucent Dark design cover preview" width="32%" />
118
+ <img src="assets/img/lucent-dark-02.jpg" alt="Lucent Dark design agenda preview" width="32%" />
119
+ <img src="assets/img/lucent-dark-03.jpg" alt="Lucent Dark design horizontal timeline-roadmap preview" width="32%" />
120
+ </p>
107
121
 
108
122
  在 Codex 中切换 design,可以这样问:
109
123
 
@@ -135,7 +149,7 @@ Domain 提供特定场景的沟通 guidance,例如 consulting、product 或 in
135
149
 
136
150
  > [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.16/skills/revela/SKILL.md),创建一个名为 neon-finance 的新 design:金融仪表盘风格,深色界面、精密网格、亮绿色重点色。
137
151
 
138
- Revela 可能会继续询问参考图、风格约束或禁忌项,然后创建并校验 design。创建完成后再切换使用:
152
+ Revela 可能会继续询问参考图、风格约束或禁忌项,然后在 workspace draft 中创建 `DESIGN.md`、`design.css` 和需要的本地 `assets/**`。它会用内置 page-template fixture 加上这份 CSS 生成 preview,让你在 install 前先检查 cover、agenda、timeline、chart、table、card 和 visual slot。创建完成后再切换使用:
139
153
 
140
154
  > [$revela:revela](/Users/mengdigao/.codex/plugins/cache/revela/revela/0.18.16/skills/revela/SKILL.md),使用 neon-finance 作为 design。
141
155
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -73,6 +73,68 @@ Asset policy:
73
73
  - Use `assets/toc-orb.png` only when transparency is needed for the Lucent glass orb.
74
74
  - Use `assets/soft-texture.jpg`, `assets/card-lens.jpg`, and `assets/report-visual.jpg` as subtle report accents; never inline base64 images in generated decks.
75
75
 
76
+ ```javascript
77
+ class SlidePresentation {
78
+ constructor() {
79
+ this.slides = document.querySelectorAll('.slide');
80
+ this.currentSlide = 0;
81
+ this.setupScaling();
82
+ this.setupIntersectionObserver();
83
+ this.setupKeyboardNav();
84
+ this.setupTouchNav();
85
+ this.setupMouseWheel();
86
+ }
87
+ setupScaling() {
88
+ const canvases = document.querySelectorAll('.slide-canvas');
89
+ const BASE_W = 1920;
90
+ const BASE_H = 1080;
91
+ const update = () => {
92
+ const scale = Math.min(window.innerWidth / BASE_W, window.innerHeight / BASE_H);
93
+ canvases.forEach((canvas) => { canvas.style.transform = `scale(${scale})`; });
94
+ };
95
+ window.addEventListener('resize', update);
96
+ update();
97
+ }
98
+ setupIntersectionObserver() {
99
+ const observer = new IntersectionObserver((entries) => {
100
+ entries.forEach((entry) => {
101
+ if (entry.isIntersecting) entry.target.querySelectorAll('.reveal').forEach((el) => el.classList.add('visible'));
102
+ });
103
+ }, { threshold: 0.2 });
104
+ this.slides.forEach((slide) => observer.observe(slide));
105
+ }
106
+ setupKeyboardNav() {
107
+ document.addEventListener('keydown', (event) => {
108
+ if (['ArrowDown', 'ArrowRight', ' ', 'PageDown'].includes(event.key)) { event.preventDefault(); this.goTo(this.currentSlide + 1); }
109
+ else if (['ArrowUp', 'ArrowLeft', 'PageUp'].includes(event.key)) { event.preventDefault(); this.goTo(this.currentSlide - 1); }
110
+ });
111
+ }
112
+ setupTouchNav() {
113
+ let startY = 0;
114
+ document.addEventListener('touchstart', (event) => { startY = event.touches[0].clientY; }, { passive: true });
115
+ document.addEventListener('touchend', (event) => {
116
+ const deltaY = startY - event.changedTouches[0].clientY;
117
+ if (Math.abs(deltaY) > 40) this.goTo(this.currentSlide + (deltaY > 0 ? 1 : -1));
118
+ }, { passive: true });
119
+ }
120
+ setupMouseWheel() {
121
+ let last = 0;
122
+ document.addEventListener('wheel', (event) => {
123
+ const now = Date.now();
124
+ if (now - last < 800) return;
125
+ last = now;
126
+ this.goTo(this.currentSlide + (event.deltaY > 0 ? 1 : -1));
127
+ }, { passive: true });
128
+ }
129
+ goTo(index) {
130
+ const clamped = Math.max(0, Math.min(this.slides.length - 1, index));
131
+ this.slides[clamped].scrollIntoView({ behavior: 'smooth' });
132
+ this.currentSlide = clamped;
133
+ }
134
+ }
135
+ new SlidePresentation();
136
+ ```
137
+
76
138
  <!-- @design:foundation:end -->
77
139
 
78
140
  <!-- @design:rules:start -->
@@ -189,6 +251,20 @@ Small top-right logo or brand mark. Keep it clear, restrained, and never use log
189
251
 
190
252
  <!-- @design:components:end -->
191
253
 
254
+ <!-- @design:page-templates:start -->
255
+
256
+ ### Page Template Mapping
257
+
258
+ Lucent skins Revela built-in page templates without owning their semantic structure. The template renderer owns required fields, DOM skeletons, and template QA; Lucent supplies bright report surfaces, blue-violet-cyan accents, fixed-pixel typography, and local assets.
259
+
260
+ - `cover`, `section-divider`, `closing`: use full-bleed hero treatment with Lucent package assets.
261
+ - `agenda`, `executive-summary`, `problem-context`, `key-message-evidence`, `claim-supporting-visual`: use report-story/card-grid language with quiet surfaces.
262
+ - `metric-highlight`, `chart-takeaways`, `table-comparison`: use data-forward Lucent panels with explicit interpretation regions.
263
+ - `timeline-roadmap`: map to the roadmap visual system. Dots remain milestone anchors inside each timeline item; do not absolutely position detached decorative dots.
264
+ - `process-steps`, `recommendation-decision`, `risks-tradeoffs`: use recommendation and steps surfaces with no nested card-in-card framing.
265
+
266
+ <!-- @design:page-templates:end -->
267
+
192
268
  <!-- @design:chart-rules:start -->
193
269
 
194
270
  ### Chart Rules
@@ -0,0 +1,283 @@
1
+ /* Lucent design CSS. Template HTML owns structure; this file owns visual treatment. */
2
+
3
+ :root {
4
+ --bg-frame: #07111f;
5
+ --bg-page: #f7f9fc;
6
+ --bg-page-alt: #eef3f9;
7
+ --surface: #ffffff;
8
+ --surface-tint: #f1f6fc;
9
+ --surface-blue: #e7f0fb;
10
+ --text-primary: #101a2b;
11
+ --text-secondary: #42526a;
12
+ --text-muted: #7b8aa0;
13
+ --line: rgba(44, 70, 108, 0.14);
14
+ --line-strong: rgba(44, 70, 108, 0.28);
15
+ --accent-primary: #315eea;
16
+ --accent-secondary: #6e5df6;
17
+ --accent-cyan: #18a8d8;
18
+ --accent-coral: #f06370;
19
+ --accent-soft: #dbe8ff;
20
+ --shadow-soft: rgba(30, 65, 130, 0.13);
21
+ --font-display: DengXian, "Microsoft YaHei", "PingFang SC", Arial, ui-sans-serif, sans-serif;
22
+ --font-body: DengXian, "Microsoft YaHei", "PingFang SC", Arial, ui-sans-serif, sans-serif;
23
+ --grid-margin-x: 72px;
24
+ --grid-margin-y: 56px;
25
+ --grid-columns: 12;
26
+ --grid-gutter: 24px;
27
+ --grid-safe-top: 56px;
28
+ --grid-safe-bottom: 64px;
29
+ --space-1: 8px;
30
+ --space-2: 16px;
31
+ --space-3: 24px;
32
+ --space-4: 32px;
33
+ --space-5: 48px;
34
+ --space-6: 72px;
35
+ --font-size-caption: 16px;
36
+ --font-size-body: 22px;
37
+ --font-size-body-small: 18px;
38
+ --font-size-h3: 31px;
39
+ --font-size-h2: 52px;
40
+ --font-size-hero: 104px;
41
+ --surface-radius: 8px;
42
+ --surface-radius-large: 12px;
43
+ }
44
+
45
+ * { box-sizing: border-box; }
46
+ html { scroll-snap-type: y mandatory; overflow-y: scroll; height: 100%; }
47
+ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primary, #101a2b); font-family: var(--font-body, Arial, sans-serif); -webkit-font-smoothing: antialiased; }
48
+ .slide { min-height: 100dvh; scroll-snap-align: start; display: flex; align-items: center; justify-content: center; overflow: hidden; background: var(--bg-frame, #07111f); }
49
+ .slide-canvas { width: 1920px; height: 1080px; flex-shrink: 0; transform-origin: center center; position: relative; overflow: hidden; }
50
+ .template-slide .slide-canvas {
51
+ background:
52
+ radial-gradient(circle at 82% 16%, rgba(49, 94, 234, 0.11), transparent 29%),
53
+ linear-gradient(135deg, var(--bg-page), var(--bg-page-alt));
54
+ color: var(--text-primary);
55
+ padding: 72px;
56
+ box-sizing: border-box;
57
+ }
58
+ .template-frame { width: 100%; height: 100%; display: flex; flex-direction: column; gap: 34px; }
59
+ .template-frame--catalog { gap: 26px; }
60
+ .template-eyebrow { margin: 0 0 14px; font-size: 16px; text-transform: uppercase; letter-spacing: 0.18em; color: var(--text-muted); font-weight: 700; }
61
+ .template-frame header { flex: 0 0 auto; padding-bottom: 8px; overflow: visible; }
62
+ .template-title { margin: 0; max-width: 1320px; font-family: var(--font-display); font-size: 62px; line-height: 1.22; color: var(--text-primary); padding-bottom: 6px; overflow: visible; }
63
+ .template-body { flex: 1; min-height: 0; }
64
+ .template-grid { display: grid; gap: 24px; height: 100%; }
65
+ .template-grid.cols-2 { grid-template-columns: 0.95fr 1.05fr; }
66
+ .template-grid.cols-3 { grid-template-columns: repeat(3, 1fr); }
67
+ .template-grid.cols-4 { grid-template-columns: repeat(4, 1fr); }
68
+ .template-chart-layout { grid-template-columns: 2fr 1fr; }
69
+ .template-card { background: rgba(255,255,255,0.82); border: 1px solid var(--line); border-radius: var(--surface-radius); padding: 28px; box-shadow: 0 18px 44px var(--shadow-soft); }
70
+ .template-card h2, .template-card h3 { margin: 0 0 12px; font-size: 28px; line-height: 1.32; padding-bottom: 4px; overflow: visible; }
71
+ .template-card p { margin: 10px 0; font-size: 21px; line-height: 1.42; color: var(--text-secondary); }
72
+ .template-key-message-panel { display: flex; flex-direction: column; justify-content: flex-start; gap: 24px; padding: 0; background: transparent; border-radius: 0; box-shadow: none; }
73
+ .template-key-message-kicker { margin: 0; max-width: 720px; font-size: 32px; line-height: 1.24; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; padding-bottom: 6px; overflow: visible; }
74
+ .template-key-message-panel p { margin: 0; max-width: 760px; font-size: 25px; line-height: 1.5; color: var(--text-secondary); }
75
+ .template-evidence-grid { display: grid; gap: 24px; min-height: 0; }
76
+ .template-evidence-card { min-height: 0; }
77
+ .template-claim-text-panel { min-height: 0; display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 18px; padding: 0; background: transparent; border: 0; border-radius: 0; box-shadow: none; }
78
+ .template-claim-text-title { margin: 0; max-width: 760px; font-size: 31px; line-height: 1.26; color: var(--text-primary); padding-bottom: 4px; overflow: visible; }
79
+ .template-claim-text-body { margin: 0; max-width: 760px; font-size: 22px; line-height: 1.48; color: var(--text-secondary); }
80
+ .template-claim-text-panel .template-list { margin-top: 4px; }
81
+ .template-list { display: grid; gap: 18px; margin: 0; padding: 0; list-style: none; }
82
+ .template-list li { position: relative; padding-left: 24px; font-size: 24px; line-height: 1.38; color: var(--text-secondary); }
83
+ .template-list li::before { content: ""; position: absolute; left: 0; top: 14px; width: 7px; height: 7px; background: var(--accent-primary); }
84
+ .template-hero { margin: 0; max-width: none; justify-content: center; align-items: flex-start; }
85
+ .template-hero > [data-template-slot="hero"] { width: 100%; }
86
+ .template-hero header { padding-bottom: 0; }
87
+ .template-hero-title { font-size: 120px; line-height: 1.18; color: white; font-weight: 800; opacity: 0.8; padding: 12px 0 20px; max-width: 1320px; }
88
+ .template-hero .template-eyebrow { color: rgba(255,255,255,0.78); }
89
+ .template-hero--cover, .template-hero--section-divider { justify-content: center; align-items: flex-start; }
90
+ .template-hero--closing { justify-content: flex-end; align-items: flex-end; }
91
+ .template-hero--closing > [data-template-slot="hero"] { display: flex; justify-content: flex-end; text-align: right; }
92
+ .template-hero--closing .template-hero-title { max-width: 1120px; }
93
+ .template-slide[data-template="agenda"] .template-frame { display: grid; grid-template-rows: 1fr auto; gap: 28px; }
94
+ .template-slide[data-template="cover"] .slide-canvas,
95
+ .template-slide[data-template="section-divider"] .slide-canvas,
96
+ .template-slide[data-template="closing"] .slide-canvas {
97
+ background:
98
+ radial-gradient(circle at 80% 14%, rgba(24,168,216,0.32), transparent 28%),
99
+ linear-gradient(135deg, #07111f, #101a2b 62%, #243a73);
100
+ }
101
+
102
+ .template-slide[data-design="lucent"][data-template="cover"] .slide-canvas {
103
+ background:
104
+ linear-gradient(90deg, rgba(7,17,31,0.82), rgba(7,17,31,0.42) 52%, rgba(7,17,31,0.24)),
105
+ url("./assets/cover-background.jpg") center center / cover no-repeat;
106
+ }
107
+ .template-slide[data-design="lucent"][data-template="agenda"] .slide-canvas {
108
+ background:
109
+ linear-gradient(90deg, rgba(7,17,31,0.86), rgba(7,17,31,0.58) 52%, rgba(7,17,31,0.32)),
110
+ url("./assets/cover-background.jpg") center center / cover no-repeat;
111
+ }
112
+ .template-slide[data-design="lucent"][data-template="section-divider"] .slide-canvas {
113
+ background:
114
+ linear-gradient(90deg, rgba(7,17,31,0.86), rgba(16,26,43,0.62) 58%, rgba(36,58,115,0.36)),
115
+ url("./assets/cover-background.jpg") center center / cover no-repeat;
116
+ }
117
+ .template-slide[data-template="closing"] .slide-canvas { background: linear-gradient(135deg, #07111f, #315eea 58%, #18a8d8); }
118
+
119
+ .template-slide[data-design="lucent"][data-template="closing"] .slide-canvas {
120
+ background:
121
+ linear-gradient(90deg, rgba(7,17,31,0.82), rgba(49,94,234,0.42) 58%, rgba(24,168,216,0.24)),
122
+ url("./assets/closing-background.jpg") center center / cover no-repeat;
123
+ }
124
+ .template-agenda-panel { height: 100%; min-height: 0; display: flex; overflow: hidden; color: white; }
125
+ .template-agenda-inner { width: 100%; display: grid; grid-template-columns: 37% minmax(0, 1fr); align-items: stretch; gap: 76px; }
126
+ .template-agenda-header { display: flex; flex-direction: column; min-height: 0; padding: 10px 0 0; }
127
+ .template-agenda-header .template-eyebrow { color: rgba(255,255,255,0.64); }
128
+ .template-agenda-header .template-title { max-width: 440px; font-size: 54px; line-height: 1.16; letter-spacing: 0; text-transform: uppercase; color: white; padding-bottom: 8px; overflow: visible; }
129
+ .template-agenda-footer { margin: auto 0 0; font-size: 13px; line-height: 1.4; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 800; color: rgba(255,255,255,0.84); }
130
+ .template-agenda-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; justify-content: center; gap: 40px; height: 100%; }
131
+ .template-agenda-item { display: grid; grid-template-columns: 86px minmax(0, 1fr); gap: 44px; align-items: center; min-height: 58px; overflow: visible; }
132
+ .template-agenda-item span { font-family: var(--font-display); font-size: 44px; line-height: 1; letter-spacing: 0.03em; color: var(--accent-cyan, #18a8d8); font-weight: 800; font-variant-numeric: tabular-nums; }
133
+ .template-agenda-item strong { font-size: 18px; line-height: 1.45; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 700; color: rgba(255,255,255,0.92); }
134
+ .template-metric-layout { height: 100%; min-height: 0; display: grid; gap: 26px; }
135
+ .template-metric-layout--insight-top { grid-template-rows: auto minmax(0, 1fr); }
136
+ .template-metric-layout--insight-bottom { grid-template-rows: minmax(0, 1fr) auto; }
137
+ .template-stat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; align-items: stretch; }
138
+ .template-stat-value { display: block; min-height: 96px; font-size: 58px; line-height: 1.42; color: var(--accent-primary); font-weight: 800; margin-bottom: 18px; padding-bottom: 14px; overflow: visible; }
139
+ .template-chart-panel { min-height: 520px; display: grid; place-items: center; border: 1px solid var(--line); background: rgba(255,255,255,0.72); }
140
+ .template-chart-placeholder { width: 76%; height: 56%; border-left: 2px solid var(--line-strong); border-bottom: 2px solid var(--line-strong); display: flex; align-items: end; gap: 28px; padding: 0 28px 24px; }
141
+ .template-visual-slot-panel { width: 100%; min-height: 520px; border: 1px dashed var(--line-strong); border-radius: var(--surface-radius); background: linear-gradient(135deg, rgba(49,94,234,0.08), rgba(24,168,216,0.08)); display: grid; place-items: center; padding: 0; }
142
+ .template-visual-slot-label { font-size: 13px; line-height: 1.35; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; }
143
+ .template-text-panel.template-chart-takeaway-panel { gap: 28px; background: linear-gradient(135deg, #5f82c8 0%, var(--accent-primary) 58%, #18a8d8 115%); color: white; box-shadow: 0 22px 56px rgba(49,94,234,0.24); }
144
+ .template-chart-takeaway-panel .template-text-panel-title { color: white; }
145
+ .template-chart-takeaway-list { display: grid; gap: 22px; width: 100%; }
146
+ .template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid rgba(255,255,255,0.24); }
147
+ .template-chart-takeaway-item:first-child { padding-top: 0; border-top: 0; }
148
+ .template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color: white; }
149
+ .template-chart-takeaway-item p { margin: 0; font-size: 20px; line-height: 1.46; color: rgba(255,255,255,0.78); }
150
+ .template-bar { flex: 1; background: linear-gradient(180deg, var(--accent-primary), var(--accent-cyan)); min-height: 80px; }
151
+ .template-table-wrap { display: grid; grid-template-rows: minmax(0, auto) auto; gap: 22px; height: 100%; align-content: start; }
152
+ .template-table { width: 100%; border-collapse: collapse; background: rgba(255,255,255,0.86); box-shadow: 0 18px 44px var(--shadow-soft); }
153
+ .template-table th, .template-table td { padding: 22px 24px; border-bottom: 1px solid var(--line); text-align: left; font-size: 21px; }
154
+ .template-table th { color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.12em; font-size: 15px; }
155
+ .template-text-panel { min-height: 0; display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; background: rgba(255,255,255,0.74); border-radius: var(--surface-radius); padding: 42px; }
156
+ .template-text-panel-title { margin: 0; font-size: 34px; line-height: 1.28; color: var(--text-primary); padding-bottom: 4px; overflow: visible; }
157
+ .template-text-panel-body { margin: 0; font-size: 23px; line-height: 1.52; color: var(--text-secondary); }
158
+ .template-side-panel { align-self: stretch; }
159
+ .template-side-panel-title { margin: 0; }
160
+ .template-side-panel-body { margin: 0; }
161
+ .template-insight-panel { display: grid; gap: 10px; background: rgba(255,255,255,0.88); border: 1px solid var(--line); border-radius: var(--surface-radius); padding: 22px 24px; box-shadow: 0 14px 34px var(--shadow-soft); }
162
+ .template-insight-title { margin: 0; display: flex; align-items: center; gap: 12px; font-size: 24px; line-height: 1.24; color: var(--text-primary); }
163
+ .template-insight-icon { width: 24px; height: 24px; color: var(--accent-primary); stroke-width: 2.2; flex: 0 0 auto; }
164
+ .template-insight-body { margin: 0; font-size: 20px; line-height: 1.42; color: var(--text-secondary); }
165
+ .template-metric-layout .template-insight-panel { border: 0; box-shadow: none; background: rgba(255,255,255,0.74); padding: 24px 28px; }
166
+ .template-metric-layout .template-insight-title { font-size: 18px; line-height: 1.22; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-muted); }
167
+ .template-metric-layout .template-insight-icon { width: 20px; height: 20px; }
168
+ .template-metric-layout .template-insight-body { font-size: 24px; line-height: 1.42; color: var(--text-primary); }
169
+ .template-timeline { position: relative; height: 100%; display: grid; align-items: center; }
170
+ .template-timeline-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 34px; height: 100%; align-items: stretch; }
171
+ .template-timeline-layout--left { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); }
172
+ .template-timeline-layout--left .template-side-panel { grid-column: 1; grid-row: 1; }
173
+ .template-timeline-layout--left .template-timeline { grid-column: 2; grid-row: 1; }
174
+ .template-timeline-layout--right { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }
175
+ .template-timeline-layout--right .template-timeline { grid-column: 1; grid-row: 1; }
176
+ .template-timeline-layout--right .template-side-panel { grid-column: 2; grid-row: 1; }
177
+ .template-timeline-layout .template-text-panel { background: linear-gradient(135deg, #7a7fe8 0%, #5f82c8 58%, #315eea 115%); color: white; box-shadow: 0 22px 56px rgba(49,94,234,0.22); }
178
+ .template-timeline-layout .template-text-panel-title { color: white; }
179
+ .template-timeline-layout .template-text-panel-body { color: rgba(255,255,255,0.78); }
180
+ .template-timeline--horizontal { grid-template-columns: repeat(var(--timeline-count), 1fr); column-gap: 18px; align-items: stretch; --timeline-axis-y: 86%; }
181
+ .template-timeline--horizontal::before { content: ""; position: absolute; left: 4%; right: 4%; top: var(--timeline-axis-y); border-top: 2px solid var(--line-strong); transform: translateY(-1px); }
182
+ .template-timeline-item { position: relative; min-height: 400px; display: grid; justify-items: center; align-items: center; }
183
+ .template-timeline--horizontal .template-timeline-item { grid-template-rows: minmax(0, 1fr) 42px 86px; align-items: stretch; }
184
+ .template-timeline-dot { z-index: 2; width: 22px; height: 22px; border-radius: 999px; background: var(--accent-primary); box-shadow: 0 0 0 8px rgba(49,94,234,0.12); }
185
+ .template-timeline-copy { z-index: 2; width: 86%; padding: 18px 4px; background: transparent; border: 0; box-shadow: none; }
186
+ .template-timeline--horizontal .template-timeline-copy.template-card { width: 94%; height: calc(100% - 55px); min-height: 254px; align-self: end; justify-self: center; display: flex; flex-direction: column; justify-content: flex-start; padding: 28px 24px 24px; margin-bottom: 22px; }
187
+ .template-timeline--horizontal .template-timeline-item--highlight .template-timeline-copy.template-card { height: calc(100% - 22px); min-height: 254px; }
188
+ .template-timeline--horizontal .template-insight-icon { width: 28px; height: 28px; margin: 0 auto 28px; color: var(--accent-primary); stroke-width: 2; flex: 0 0 auto; }
189
+ .template-timeline--horizontal .template-timeline-item--highlight .template-insight-icon { color: #f37021; }
190
+ .template-timeline--horizontal .template-timeline-item--highlight .template-timeline-copy h3 { color: #f37021; }
191
+ .template-timeline--horizontal .template-timeline-dot { grid-row: 2; align-self: center; justify-self: center; }
192
+ .template-timeline--horizontal .template-timeline-date { grid-row: 3; align-self: start; justify-self: center; margin: 8px 0 0; font-size: 38px; line-height: 1; font-weight: 300; letter-spacing: 0.03em; color: var(--text-muted); }
193
+ .template-timeline-date { margin: 0 0 8px; font-size: 15px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--accent-primary); font-weight: 800; }
194
+ .template-timeline-copy h3 { margin: 0 0 8px; font-size: 27px; line-height: 1.28; padding-bottom: 4px; overflow: visible; }
195
+ .template-timeline-copy p:last-child { margin: 0; font-size: 19px; color: var(--text-secondary); }
196
+ .template-timeline--vertical { grid-template-columns: 1fr; align-items: stretch; padding: 18px 0; }
197
+ .template-timeline--vertical::before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; border-left: 2px solid var(--line-strong); }
198
+ .template-timeline--vertical .template-timeline-item { min-height: 128px; grid-template-columns: 1fr 56px 1fr; justify-items: stretch; }
199
+ .template-timeline--vertical .template-timeline-dot { grid-column: 2; grid-row: 1; justify-self: center; align-self: center; }
200
+ .template-timeline--vertical .template-timeline-copy { grid-row: 1; width: auto; align-self: center; background: transparent; border: 0; box-shadow: none; }
201
+ .template-timeline--vertical .template-timeline-item:nth-child(odd) .template-timeline-copy { grid-column: 1; text-align: right; align-self: center; }
202
+ .template-timeline--vertical .template-timeline-item:nth-child(even) .template-timeline-copy { grid-column: 3; text-align: left; align-self: center; }
203
+ .template-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
204
+ .template-step-number { font-size: 48px; color: var(--accent-primary); font-weight: 800; margin-bottom: 30px; }
205
+ .template-image-card { width: 100%; margin: 18px 0 0; display: grid; gap: 8px; }
206
+ .template-image-frame { width: 100%; height: 128px; border-radius: var(--surface-radius); overflow: hidden; background: var(--surface-tint, #f1f6fc); border: 1px solid var(--line); }
207
+ .template-image-frame img { display: block; width: 100%; height: 100%; object-fit: cover; }
208
+ .template-image-caption { margin: 0; font-size: 13px; line-height: 1.35; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.08em; }
209
+ .template-visual-placeholder { width: 100%; margin: 18px 0 0; display: grid; gap: 8px; }
210
+ .template-visual-placeholder-frame { width: 100%; height: 148px; border-radius: var(--surface-radius); border: 1px dashed var(--line-strong); background: linear-gradient(135deg, rgba(49,94,234,0.08), rgba(24,168,216,0.08)); display: grid; place-items: center; }
211
+ .template-visual-placeholder-label { font-size: 13px; line-height: 1.35; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; }
212
+ .template-page-number { position: absolute; right: 72px; bottom: 52px; font-size: 15px; color: var(--text-muted); letter-spacing: 0.18em; }
213
+ .template-catalog-panel { flex: 0 0 auto; margin-top: auto; background: rgba(255,255,255,0.9); border: 1px solid var(--line); border-radius: var(--surface-radius); box-shadow: 0 18px 44px var(--shadow-soft); padding: 16px 22px; color: var(--text-primary); }
214
+ .template-hero .template-catalog-panel { background: rgba(247,249,252,0.92); }
215
+ .template-catalog-kicker { margin: 0 0 4px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; color: var(--accent-primary); font-weight: 800; }
216
+ .template-catalog-title { margin: 0 0 10px; font-size: 20px; line-height: 1.28; font-weight: 800; }
217
+ .template-catalog-grid { display: grid; grid-template-columns: 1.15fr 1fr 1fr; gap: 16px; }
218
+ .template-catalog-section { min-width: 0; }
219
+ .template-catalog-section h3 { margin: 0 0 6px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.12em; color: var(--text-muted); }
220
+ .template-catalog-section p { margin: 0; font-size: 15px; line-height: 1.36; color: var(--text-secondary); }
221
+ .template-catalog-list { margin: 0; padding-left: 16px; display: grid; gap: 2px; }
222
+ .template-catalog-list li { font-size: 14px; line-height: 1.3; color: var(--text-secondary); }
223
+ .template-frame--catalog .template-title { font-size: 52px; line-height: 1.18; }
224
+ .template-slide[data-template="agenda"] .template-frame--catalog .template-title { font-size: 54px; line-height: 1.04; }
225
+ .template-frame--catalog .template-card { padding: 22px; }
226
+ .template-frame--catalog .template-card h2,
227
+ .template-frame--catalog .template-card h3 { font-size: 24px; line-height: 1.22; margin-bottom: 8px; }
228
+ .template-frame--catalog .template-card p { font-size: 18px; line-height: 1.32; }
229
+ .template-frame--catalog .template-key-message-panel { gap: 16px; }
230
+ .template-frame--catalog .template-key-message-kicker { font-size: 23px; line-height: 1.2; }
231
+ .template-frame--catalog .template-key-message-panel p { font-size: 19px; line-height: 1.42; }
232
+ .template-frame--catalog .template-claim-text-panel { gap: 12px; }
233
+ .template-frame--catalog .template-claim-text-title { font-size: 24px; line-height: 1.24; }
234
+ .template-frame--catalog .template-claim-text-body { font-size: 18px; line-height: 1.36; }
235
+ .template-frame--catalog .template-evidence-grid { gap: 18px; }
236
+ .template-frame--catalog .template-list { gap: 12px; }
237
+ .template-frame--catalog .template-list li { font-size: 20px; line-height: 1.28; }
238
+ .template-frame--catalog .template-metric-layout { gap: 18px; }
239
+ .template-frame--catalog .template-metric-layout .template-card { padding: 20px; }
240
+ .template-frame--catalog .template-metric-layout .template-stat-value { min-height: 70px; font-size: 48px; line-height: 1.24; margin-bottom: 10px; padding-bottom: 8px; }
241
+ .template-frame--catalog .template-metric-layout .template-insight-panel { padding: 18px 22px; gap: 7px; }
242
+ .template-frame--catalog .template-metric-layout .template-insight-title { font-size: 13px; line-height: 1.22; }
243
+ .template-frame--catalog .template-metric-layout .template-insight-icon { width: 16px; height: 16px; }
244
+ .template-frame--catalog .template-metric-layout .template-insight-body { font-size: 19px; line-height: 1.34; }
245
+ .template-frame--catalog .template-chart-panel { min-height: 360px; }
246
+ .template-frame--catalog .template-visual-slot-panel { min-height: 360px; }
247
+ .template-frame--catalog .template-visual-slot-label { font-size: 11px; }
248
+ .template-frame--catalog .template-chart-takeaway-panel { padding: 24px; gap: 16px; }
249
+ .template-frame--catalog .template-chart-takeaway-list { gap: 13px; }
250
+ .template-frame--catalog .template-chart-takeaway-item { gap: 4px; padding-top: 11px; }
251
+ .template-frame--catalog .template-chart-takeaway-item h3 { font-size: 19px; line-height: 1.2; }
252
+ .template-frame--catalog .template-chart-takeaway-item p { font-size: 15px; line-height: 1.3; }
253
+ .template-frame--catalog .template-table-wrap { gap: 16px; }
254
+ .template-frame--catalog .template-table th,
255
+ .template-frame--catalog .template-table td { padding: 14px 18px; font-size: 17px; line-height: 1.32; }
256
+ .template-frame--catalog .template-table th { font-size: 12px; }
257
+ .template-frame--catalog .template-insight-panel { padding: 16px 18px; gap: 6px; }
258
+ .template-frame--catalog .template-insight-title { font-size: 20px; line-height: 1.2; }
259
+ .template-frame--catalog .template-insight-icon { width: 20px; height: 20px; }
260
+ .template-frame--catalog .template-insight-body { font-size: 16px; line-height: 1.32; }
261
+ .template-frame--catalog .template-timeline--vertical { padding: 6px 0; }
262
+ .template-frame--catalog .template-timeline--vertical .template-timeline-item { min-height: 96px; }
263
+ .template-frame--catalog .template-timeline-layout { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 22px; }
264
+ .template-frame--catalog .template-timeline-layout--left { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); }
265
+ .template-frame--catalog .template-timeline-layout--right { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }
266
+ .template-frame--catalog .template-timeline-layout .template-text-panel { padding: 22px; gap: 10px; }
267
+ .template-frame--catalog .template-timeline-layout .template-text-panel-title { font-size: 25px; line-height: 1.3; }
268
+ .template-frame--catalog .template-timeline-layout .template-text-panel-body { font-size: 18px; line-height: 1.4; }
269
+ .template-frame--catalog .template-timeline--horizontal .template-timeline-item { grid-template-rows: minmax(0, 1fr) 32px 58px; min-height: 330px; }
270
+ .template-frame--catalog .template-timeline--horizontal .template-timeline-copy.template-card { height: calc(100% - 51px); min-height: 178px; padding: 20px 18px 18px; margin-bottom: 18px; }
271
+ .template-frame--catalog .template-timeline--horizontal .template-timeline-item--highlight .template-timeline-copy.template-card { height: calc(100% - 18px); min-height: 178px; }
272
+ .template-frame--catalog .template-timeline--horizontal .template-insight-icon { width: 22px; height: 22px; margin-bottom: 18px; }
273
+ .template-frame--catalog .template-timeline--horizontal .template-timeline-date { font-size: 28px; }
274
+ .template-frame--catalog .template-timeline-copy { padding: 8px 4px; }
275
+ .template-frame--catalog .template-timeline-copy h3 { font-size: 21px; line-height: 1.18; margin-bottom: 4px; }
276
+ .template-frame--catalog .template-timeline-date { font-size: 12px; margin-bottom: 4px; }
277
+ .template-frame--catalog .template-timeline-copy p:last-child { font-size: 15px; line-height: 1.24; }
278
+ .template-frame--catalog .template-steps { gap: 16px; }
279
+ .template-frame--catalog .template-step-number { font-size: 40px; margin-bottom: 20px; }
280
+ .template-frame--catalog .template-image-frame { height: 86px; }
281
+ .template-frame--catalog .template-image-caption { font-size: 11px; }
282
+ .template-frame--catalog .template-visual-placeholder-frame { height: 110px; }
283
+ .template-frame--catalog .template-visual-placeholder-label { font-size: 11px; }