@cyber-dash-tech/revela 0.19.8 → 0.20.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.
- package/README.md +37 -54
- package/README.zh-CN.md +36 -53
- package/designs/lucent/DESIGN.md +2 -0
- package/designs/lucent/design.css +43 -7
- package/designs/lucent-dark/DESIGN.md +2 -0
- package/designs/lucent-dark/design.css +55 -14
- package/designs/monet/DESIGN.md +2 -0
- package/designs/monet/design.css +79 -13
- package/designs/starter/DESIGN.md +2 -0
- package/designs/starter/design.css +51 -12
- package/designs/summit/DESIGN.md +2 -0
- package/designs/summit/design.css +75 -11
- package/lib/deck-html/foundation.ts +16 -2
- package/lib/design/designs.ts +13 -1
- package/lib/page-templates/built-in-preview.html +102 -41
- package/lib/page-templates/render.ts +123 -8
- package/lib/page-templates/templates/free.ts +3 -0
- package/lib/page-templates/templates/index.ts +2 -0
- package/lib/page-templates/templates/team.ts +3 -0
- package/lib/page-templates/vocabulary.ts +15 -0
- package/lib/runtime/index.ts +95 -3
- package/lib/runtime/open-deck.ts +190 -0
- package/package.json +1 -1
- package/plugins/revela/.codex-plugin/plugin.json +4 -3
- package/plugins/revela/mcp/revela-server.ts +17 -6
- package/plugins/revela/skills/revela/SKILL.md +1 -1
- package/plugins/revela/skills/revela-design/SKILL.md +5 -4
- package/plugins/revela/skills/revela-helper/SKILL.md +1 -1
- package/plugins/revela/skills/revela-review/SKILL.md +57 -0
package/designs/monet/DESIGN.md
CHANGED
|
@@ -2800,11 +2800,13 @@ Monet skins Revela built-in page templates with soft editorial rhythm, painterly
|
|
|
2800
2800
|
- `cover`, `section-divider`, `closing`: use expressive title-led structural pages.
|
|
2801
2801
|
- `agenda`, `executive-summary`, `problem-context`, `key-message-evidence`, `claim-supporting-visual`: use soft narrative regions with no heavy outer box.
|
|
2802
2802
|
- Agenda typography follows design tokens: title and numbers use `--font-display`; item labels and footer use `--font-body`.
|
|
2803
|
+
- `team`: use soft editorial portrait-led member cards with one photo, name, role, two concise highlights, and one education line. Prefer 3-4 members per page.
|
|
2803
2804
|
- `metric-highlight`, `chart-takeaways`, `table`, `table-comparison`: use calm data surfaces and readable interpretation zones.
|
|
2804
2805
|
- Text panels use explicit variants: `template-text-panel--clear` is transparent with no border or background, `template-text-panel--plain` is theme-neutral, and `template-text-panel--color` is the multicolor emphasis treatment used by chart and timeline reading panels.
|
|
2805
2806
|
- `milestone`: dots remain milestone anchors inside each horizontal milestone item; do not position detached decorative markers.
|
|
2806
2807
|
- `timeline`: dots remain event anchors inside each vertical timeline item; do not position detached decorative markers.
|
|
2807
2808
|
- `process-steps`, `recommendation-decision`, `risks-tradeoffs`: use quiet action and tradeoff panels.
|
|
2809
|
+
- `free`: use a plain title plus one semantic placeholder region; the agent may later replace that region with multiple images, charts, text blocks, tables, or mixed content.
|
|
2808
2810
|
|
|
2809
2811
|
<!-- @design:page-templates:end -->
|
|
2810
2812
|
|
package/designs/monet/design.css
CHANGED
|
@@ -99,24 +99,24 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
99
99
|
linear-gradient(135deg, #07111f, #101a2b 62%, #243a73);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
.template-slide[data-
|
|
102
|
+
.template-slide[data-template="cover"] .slide-canvas {
|
|
103
103
|
background:
|
|
104
104
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(7,17,31,0.42) 52%, rgba(7,17,31,0.24)),
|
|
105
105
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
106
106
|
}
|
|
107
|
-
.template-slide[data-
|
|
107
|
+
.template-slide[data-template="agenda"] .slide-canvas {
|
|
108
108
|
background:
|
|
109
109
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(7,17,31,0.58) 52%, rgba(7,17,31,0.32)),
|
|
110
110
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
111
111
|
}
|
|
112
|
-
.template-slide[data-
|
|
112
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
113
113
|
background:
|
|
114
114
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(16,26,43,0.62) 58%, rgba(36,58,115,0.36)),
|
|
115
115
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
116
116
|
}
|
|
117
117
|
.template-slide[data-template="closing"] .slide-canvas { background: linear-gradient(135deg, #07111f, #315eea 58%, #18a8d8); }
|
|
118
118
|
|
|
119
|
-
.template-slide[data-
|
|
119
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
120
120
|
background:
|
|
121
121
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(49,94,234,0.42) 58%, rgba(24,168,216,0.24)),
|
|
122
122
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
|
@@ -162,10 +162,13 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
162
162
|
.text-panel-formula-fallback { display: block; white-space: normal; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.82em; line-height: 1.35; color: inherit; }
|
|
163
163
|
.text-panel-formula-caption { margin: 0; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
|
|
164
164
|
.template-chart-takeaway-list { display: grid; gap: 22px; width: 100%; }
|
|
165
|
-
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid
|
|
165
|
+
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid var(--line); }
|
|
166
|
+
.template-text-panel--color .template-chart-takeaway-item { border-top-color: rgba(255,255,255,0.24); }
|
|
166
167
|
.template-chart-takeaway-item:first-child { padding-top: 0; border-top: 0; }
|
|
167
|
-
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color:
|
|
168
|
-
.template-chart-takeaway-item
|
|
168
|
+
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color: var(--text-primary); }
|
|
169
|
+
.template-text-panel--color .template-chart-takeaway-item h3 { color: white; }
|
|
170
|
+
.template-chart-takeaway-item p { margin: 0; font-size: 20px; line-height: 1.46; color: var(--text-secondary); }
|
|
171
|
+
.template-text-panel--color .template-chart-takeaway-item p { color: rgba(255,255,255,0.78); }
|
|
169
172
|
.template-bar { flex: 1; background: linear-gradient(180deg, var(--accent-primary), var(--accent-cyan)); min-height: 80px; }
|
|
170
173
|
.template-table-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 34px; height: 100%; align-items: stretch; }
|
|
171
174
|
.template-table-layout .template-side-panel { grid-column: 1; grid-row: 1; }
|
|
@@ -223,6 +226,25 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
223
226
|
.template-timeline--vertical .template-timeline-item:nth-child(even) .template-timeline-copy { grid-column: 3; text-align: left; align-self: center; }
|
|
224
227
|
.template-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
|
|
225
228
|
.template-step-number { font-size: 48px; color: var(--accent-primary); font-weight: 800; margin-bottom: 30px; }
|
|
229
|
+
.template-team-grid { height: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; align-items: stretch; }
|
|
230
|
+
.template-team-card { min-width: 0; min-height: 0; display: grid; grid-template-rows: 330px minmax(0, 1fr); overflow: hidden; background: rgba(255,255,255,0.86); border: 1px solid var(--line); border-radius: var(--surface-radius); box-shadow: 0 18px 44px var(--shadow-soft); }
|
|
231
|
+
.template-team-photo { margin: 0; width: 100%; height: 100%; overflow: hidden; background: linear-gradient(135deg, var(--accent-soft), rgba(24,168,216,0.16)); display: grid; place-items: center; }
|
|
232
|
+
.template-team-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
233
|
+
.template-team-photo span { font-family: var(--font-display); font-size: 72px; line-height: 1; color: var(--accent-primary); font-weight: 800; }
|
|
234
|
+
.template-team-copy { min-height: 0; display: flex; flex-direction: column; gap: 12px; padding: 26px; }
|
|
235
|
+
.template-team-name { margin: 0; font-size: 30px; line-height: 1.18; color: var(--text-primary); padding-bottom: 3px; overflow: visible; }
|
|
236
|
+
.template-team-role { margin: 0; font-size: 15px; line-height: 1.35; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
237
|
+
.template-team-highlights { margin: 4px 0 0; padding: 0; list-style: none; display: grid; gap: 9px; }
|
|
238
|
+
.template-team-highlights li { position: relative; padding-left: 18px; font-size: 17px; line-height: 1.36; color: var(--text-secondary); }
|
|
239
|
+
.template-team-highlights li::before { content: ""; position: absolute; left: 0; top: 9px; width: 6px; height: 6px; background: var(--accent-primary); border-radius: 999px; }
|
|
240
|
+
.template-team-education { margin: auto 0 0; padding-top: 14px; border-top: 1px solid var(--line); font-size: 14px; line-height: 1.35; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; }
|
|
241
|
+
.template-free-stage { height: 100%; display: grid; grid-template-columns: minmax(0, 1fr); }
|
|
242
|
+
.template-free-placeholder { min-width: 0; min-height: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: 16px; padding: 42px; border: 1px dashed var(--line-strong); border-radius: var(--surface-radius); background: linear-gradient(135deg, rgba(49,94,234,0.06), rgba(24,168,216,0.07)); overflow: hidden; }
|
|
243
|
+
.template-free-placeholder-label { align-self: flex-start; font-size: 13px; line-height: 1; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
244
|
+
.template-free-placeholder h2 { margin: 0; font-size: 38px; line-height: 1.18; color: var(--text-primary); padding-bottom: 4px; overflow: visible; }
|
|
245
|
+
.template-free-placeholder p { margin: 0; max-width: 980px; font-size: 23px; line-height: 1.42; color: var(--text-secondary); }
|
|
246
|
+
.template-free-placeholder-hints { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; }
|
|
247
|
+
.template-free-placeholder-hint { display: inline-flex; align-items: center; min-height: 32px; padding: 7px 12px; border: 1px solid var(--line); border-radius: 999px; font-size: 13px; line-height: 1; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; background: rgba(255,255,255,0.58); }
|
|
226
248
|
.template-image-card { width: 100%; margin: 18px 0 0; display: grid; gap: 8px; }
|
|
227
249
|
.template-image-frame { width: 100%; height: 128px; border-radius: var(--surface-radius); overflow: hidden; background: var(--surface-tint, #f1f6fc); border: 1px solid var(--line); }
|
|
228
250
|
.template-image-frame img { display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
@@ -302,6 +324,20 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
302
324
|
.template-frame--catalog .template-timeline-copy p:last-child { font-size: 15px; line-height: 1.24; }
|
|
303
325
|
.template-frame--catalog .template-steps { gap: 16px; }
|
|
304
326
|
.template-frame--catalog .template-step-number { font-size: 40px; margin-bottom: 20px; }
|
|
327
|
+
.template-frame--catalog .template-team-grid { gap: 16px; }
|
|
328
|
+
.template-frame--catalog .template-team-card { grid-template-rows: 230px minmax(0, 1fr); }
|
|
329
|
+
.template-frame--catalog .template-team-copy { padding: 18px; gap: 8px; }
|
|
330
|
+
.template-frame--catalog .template-team-name { font-size: 22px; line-height: 1.14; }
|
|
331
|
+
.template-frame--catalog .template-team-role { font-size: 11px; line-height: 1.25; }
|
|
332
|
+
.template-frame--catalog .template-team-highlights { gap: 6px; }
|
|
333
|
+
.template-frame--catalog .template-team-highlights li { font-size: 13px; line-height: 1.25; padding-left: 14px; }
|
|
334
|
+
.template-frame--catalog .template-team-highlights li::before { top: 7px; width: 5px; height: 5px; }
|
|
335
|
+
.template-frame--catalog .template-team-education { font-size: 10px; line-height: 1.25; padding-top: 9px; }
|
|
336
|
+
.template-frame--catalog .template-free-placeholder { padding: 28px; gap: 10px; }
|
|
337
|
+
.template-frame--catalog .template-free-placeholder-label { font-size: 10px; }
|
|
338
|
+
.template-frame--catalog .template-free-placeholder h2 { font-size: 28px; line-height: 1.16; }
|
|
339
|
+
.template-frame--catalog .template-free-placeholder p { font-size: 17px; line-height: 1.3; }
|
|
340
|
+
.template-frame--catalog .template-free-placeholder-hint { min-height: 26px; padding: 6px 9px; font-size: 10px; }
|
|
305
341
|
.template-frame--catalog .template-image-frame { height: 86px; }
|
|
306
342
|
.template-frame--catalog .template-image-caption { font-size: 11px; }
|
|
307
343
|
.template-frame--catalog .template-visual-placeholder-frame { height: 110px; }
|
|
@@ -337,28 +373,58 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
337
373
|
.template-card,
|
|
338
374
|
.template-table,
|
|
339
375
|
.template-insight-panel,
|
|
340
|
-
.template-catalog-panel
|
|
376
|
+
.template-catalog-panel,
|
|
377
|
+
.template-team-card {
|
|
341
378
|
background: rgba(255, 250, 243, 0.84);
|
|
342
379
|
border-color: var(--line);
|
|
343
380
|
box-shadow: 0 20px 50px rgba(69, 53, 38, 0.09);
|
|
344
381
|
}
|
|
382
|
+
.template-team-photo { background: linear-gradient(135deg, rgba(65,111,136,0.14), rgba(156,111,58,0.14)); }
|
|
383
|
+
.template-team-photo img { filter: saturate(0.78) contrast(1.02); }
|
|
384
|
+
.template-team-name { font-family: var(--font-display); font-size: 34px; font-weight: 700; }
|
|
385
|
+
.template-team-highlights li { font-size: 18px; }
|
|
386
|
+
.template-free-placeholder { background: linear-gradient(135deg, rgba(65,111,136,0.08), rgba(156,111,58,0.08)), rgba(255, 250, 243, 0.72); border-color: var(--line-strong); }
|
|
387
|
+
.template-free-placeholder-hint { background: rgba(255, 250, 243, 0.9); }
|
|
345
388
|
.template-title { font-size: 68px; line-height: 1.12; }
|
|
346
389
|
.template-card p,
|
|
347
390
|
.template-text-panel-body,
|
|
348
391
|
.template-claim-text-body,
|
|
349
392
|
.template-insight-body { font-size: 24px; }
|
|
393
|
+
.template-agenda-item span {
|
|
394
|
+
color: #d8b36a;
|
|
395
|
+
text-shadow: 0 1px 0 rgba(21, 18, 15, 0.32), 0 0 18px rgba(216, 179, 106, 0.18);
|
|
396
|
+
}
|
|
350
397
|
.template-text-panel--color,
|
|
351
398
|
.template-timeline-layout .template-text-panel--color {
|
|
352
|
-
background:
|
|
399
|
+
background:
|
|
400
|
+
radial-gradient(circle at 18% 18%, rgba(92, 148, 139, 0.24), transparent 34%),
|
|
401
|
+
radial-gradient(circle at 86% 12%, rgba(176, 103, 86, 0.2), transparent 30%),
|
|
402
|
+
linear-gradient(135deg, rgba(255, 250, 243, 0.96) 0%, rgba(232, 238, 232, 0.9) 54%, rgba(228, 216, 200, 0.88) 118%);
|
|
403
|
+
color: var(--text-primary);
|
|
404
|
+
border: 1px solid rgba(82, 66, 48, 0.18);
|
|
405
|
+
box-shadow: 0 24px 58px rgba(69, 53, 38, 0.12);
|
|
406
|
+
}
|
|
407
|
+
.template-text-panel--color .template-text-panel-title,
|
|
408
|
+
.template-text-panel--color .template-chart-takeaway-item h3,
|
|
409
|
+
.template-timeline-layout .template-text-panel--color .template-text-panel-title {
|
|
410
|
+
color: var(--text-primary);
|
|
411
|
+
}
|
|
412
|
+
.template-text-panel--color .template-text-panel-body,
|
|
413
|
+
.template-text-panel--color .template-chart-takeaway-item p,
|
|
414
|
+
.template-timeline-layout .template-text-panel--color .template-text-panel-body {
|
|
415
|
+
color: var(--text-secondary);
|
|
416
|
+
}
|
|
417
|
+
.template-text-panel--color .template-chart-takeaway-item {
|
|
418
|
+
border-top-color: rgba(82, 66, 48, 0.16);
|
|
353
419
|
}
|
|
354
|
-
.template-slide[data-
|
|
355
|
-
.template-slide[data-
|
|
356
|
-
.template-slide[data-
|
|
420
|
+
.template-slide[data-template="cover"] .slide-canvas,
|
|
421
|
+
.template-slide[data-template="agenda"] .slide-canvas,
|
|
422
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
357
423
|
background:
|
|
358
424
|
linear-gradient(90deg, rgba(21,18,15,0.78), rgba(21,18,15,0.38) 52%, rgba(21,18,15,0.14)),
|
|
359
425
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
360
426
|
}
|
|
361
|
-
.template-slide[data-
|
|
427
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
362
428
|
background:
|
|
363
429
|
linear-gradient(90deg, rgba(21,18,15,0.7), rgba(65,111,136,0.38) 58%, rgba(156,111,58,0.2)),
|
|
364
430
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
|
@@ -903,11 +903,13 @@ Starter skins Revela built-in page templates as a neutral authoring system. The
|
|
|
903
903
|
- `cover`, `section-divider`, `closing`: use clear title-first structural pages.
|
|
904
904
|
- `agenda`, `executive-summary`, `problem-context`, `key-message-evidence`, `claim-supporting-visual`: use plain narrative and card-grid surfaces.
|
|
905
905
|
- Agenda typography follows design tokens: title and numbers use `--font-display`; item labels and footer use `--font-body`.
|
|
906
|
+
- `team`: use portrait-led member cards with one photo, name, role, two concise highlights, and one education line. Prefer 3-4 members per page.
|
|
906
907
|
- `metric-highlight`, `chart-takeaways`, `table`, `table-comparison`: use direct data panels with minimal decoration.
|
|
907
908
|
- Text panels use explicit variants: `template-text-panel--clear` is transparent with no border or background, `template-text-panel--plain` is theme-neutral, and `template-text-panel--color` is the multicolor emphasis treatment used by chart and timeline reading panels.
|
|
908
909
|
- `milestone`: dots remain milestone anchors inside each horizontal milestone item; do not position detached decorative markers.
|
|
909
910
|
- `timeline`: dots remain event anchors inside each vertical timeline item; do not position detached decorative markers.
|
|
910
911
|
- `process-steps`, `recommendation-decision`, `risks-tradeoffs`: use simple step and decision panels.
|
|
912
|
+
- `free`: use a plain title plus one semantic placeholder region; the agent may later replace that region with multiple images, charts, text blocks, tables, or mixed content.
|
|
911
913
|
|
|
912
914
|
<!-- @design:page-templates:end -->
|
|
913
915
|
|
|
@@ -99,24 +99,24 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
99
99
|
linear-gradient(135deg, #07111f, #101a2b 62%, #243a73);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
.template-slide[data-
|
|
102
|
+
.template-slide[data-template="cover"] .slide-canvas {
|
|
103
103
|
background:
|
|
104
104
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(7,17,31,0.42) 52%, rgba(7,17,31,0.24)),
|
|
105
105
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
106
106
|
}
|
|
107
|
-
.template-slide[data-
|
|
107
|
+
.template-slide[data-template="agenda"] .slide-canvas {
|
|
108
108
|
background:
|
|
109
109
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(7,17,31,0.58) 52%, rgba(7,17,31,0.32)),
|
|
110
110
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
111
111
|
}
|
|
112
|
-
.template-slide[data-
|
|
112
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
113
113
|
background:
|
|
114
114
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(16,26,43,0.62) 58%, rgba(36,58,115,0.36)),
|
|
115
115
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
116
116
|
}
|
|
117
117
|
.template-slide[data-template="closing"] .slide-canvas { background: linear-gradient(135deg, #07111f, #315eea 58%, #18a8d8); }
|
|
118
118
|
|
|
119
|
-
.template-slide[data-
|
|
119
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
120
120
|
background:
|
|
121
121
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(49,94,234,0.42) 58%, rgba(24,168,216,0.24)),
|
|
122
122
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
|
@@ -162,10 +162,13 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
162
162
|
.text-panel-formula-fallback { display: block; white-space: normal; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.82em; line-height: 1.35; color: inherit; }
|
|
163
163
|
.text-panel-formula-caption { margin: 0; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
|
|
164
164
|
.template-chart-takeaway-list { display: grid; gap: 22px; width: 100%; }
|
|
165
|
-
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid
|
|
165
|
+
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid var(--line); }
|
|
166
|
+
.template-text-panel--color .template-chart-takeaway-item { border-top-color: rgba(255,255,255,0.24); }
|
|
166
167
|
.template-chart-takeaway-item:first-child { padding-top: 0; border-top: 0; }
|
|
167
|
-
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color:
|
|
168
|
-
.template-chart-takeaway-item
|
|
168
|
+
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color: var(--text-primary); }
|
|
169
|
+
.template-text-panel--color .template-chart-takeaway-item h3 { color: white; }
|
|
170
|
+
.template-chart-takeaway-item p { margin: 0; font-size: 20px; line-height: 1.46; color: var(--text-secondary); }
|
|
171
|
+
.template-text-panel--color .template-chart-takeaway-item p { color: rgba(255,255,255,0.78); }
|
|
169
172
|
.template-bar { flex: 1; background: linear-gradient(180deg, var(--accent-primary), var(--accent-cyan)); min-height: 80px; }
|
|
170
173
|
.template-table-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 34px; height: 100%; align-items: stretch; }
|
|
171
174
|
.template-table-layout .template-side-panel { grid-column: 1; grid-row: 1; }
|
|
@@ -223,6 +226,25 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
223
226
|
.template-timeline--vertical .template-timeline-item:nth-child(even) .template-timeline-copy { grid-column: 3; text-align: left; align-self: center; }
|
|
224
227
|
.template-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
|
|
225
228
|
.template-step-number { font-size: 48px; color: var(--accent-primary); font-weight: 800; margin-bottom: 30px; }
|
|
229
|
+
.template-team-grid { height: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; align-items: stretch; }
|
|
230
|
+
.template-team-card { min-width: 0; min-height: 0; display: grid; grid-template-rows: 330px minmax(0, 1fr); overflow: hidden; background: rgba(255,255,255,0.86); border: 1px solid var(--line); border-radius: var(--surface-radius); box-shadow: 0 18px 44px var(--shadow-soft); }
|
|
231
|
+
.template-team-photo { margin: 0; width: 100%; height: 100%; overflow: hidden; background: linear-gradient(135deg, var(--accent-soft), rgba(24,168,216,0.16)); display: grid; place-items: center; }
|
|
232
|
+
.template-team-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
233
|
+
.template-team-photo span { font-family: var(--font-display); font-size: 72px; line-height: 1; color: var(--accent-primary); font-weight: 800; }
|
|
234
|
+
.template-team-copy { min-height: 0; display: flex; flex-direction: column; gap: 12px; padding: 26px; }
|
|
235
|
+
.template-team-name { margin: 0; font-size: 30px; line-height: 1.18; color: var(--text-primary); padding-bottom: 3px; overflow: visible; }
|
|
236
|
+
.template-team-role { margin: 0; font-size: 15px; line-height: 1.35; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
237
|
+
.template-team-highlights { margin: 4px 0 0; padding: 0; list-style: none; display: grid; gap: 9px; }
|
|
238
|
+
.template-team-highlights li { position: relative; padding-left: 18px; font-size: 17px; line-height: 1.36; color: var(--text-secondary); }
|
|
239
|
+
.template-team-highlights li::before { content: ""; position: absolute; left: 0; top: 9px; width: 6px; height: 6px; background: var(--accent-primary); border-radius: 999px; }
|
|
240
|
+
.template-team-education { margin: auto 0 0; padding-top: 14px; border-top: 1px solid var(--line); font-size: 14px; line-height: 1.35; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; }
|
|
241
|
+
.template-free-stage { height: 100%; display: grid; grid-template-columns: minmax(0, 1fr); }
|
|
242
|
+
.template-free-placeholder { min-width: 0; min-height: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: 16px; padding: 42px; border: 1px dashed var(--line-strong); border-radius: var(--surface-radius); background: linear-gradient(135deg, rgba(49,94,234,0.06), rgba(24,168,216,0.07)); overflow: hidden; }
|
|
243
|
+
.template-free-placeholder-label { align-self: flex-start; font-size: 13px; line-height: 1; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
244
|
+
.template-free-placeholder h2 { margin: 0; font-size: 38px; line-height: 1.18; color: var(--text-primary); padding-bottom: 4px; overflow: visible; }
|
|
245
|
+
.template-free-placeholder p { margin: 0; max-width: 980px; font-size: 23px; line-height: 1.42; color: var(--text-secondary); }
|
|
246
|
+
.template-free-placeholder-hints { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; }
|
|
247
|
+
.template-free-placeholder-hint { display: inline-flex; align-items: center; min-height: 32px; padding: 7px 12px; border: 1px solid var(--line); border-radius: 999px; font-size: 13px; line-height: 1; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; background: rgba(255,255,255,0.58); }
|
|
226
248
|
.template-image-card { width: 100%; margin: 18px 0 0; display: grid; gap: 8px; }
|
|
227
249
|
.template-image-frame { width: 100%; height: 128px; border-radius: var(--surface-radius); overflow: hidden; background: var(--surface-tint, #f1f6fc); border: 1px solid var(--line); }
|
|
228
250
|
.template-image-frame img { display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
@@ -302,6 +324,20 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
302
324
|
.template-frame--catalog .template-timeline-copy p:last-child { font-size: 15px; line-height: 1.24; }
|
|
303
325
|
.template-frame--catalog .template-steps { gap: 16px; }
|
|
304
326
|
.template-frame--catalog .template-step-number { font-size: 40px; margin-bottom: 20px; }
|
|
327
|
+
.template-frame--catalog .template-team-grid { gap: 16px; }
|
|
328
|
+
.template-frame--catalog .template-team-card { grid-template-rows: 230px minmax(0, 1fr); }
|
|
329
|
+
.template-frame--catalog .template-team-copy { padding: 18px; gap: 8px; }
|
|
330
|
+
.template-frame--catalog .template-team-name { font-size: 22px; line-height: 1.14; }
|
|
331
|
+
.template-frame--catalog .template-team-role { font-size: 11px; line-height: 1.25; }
|
|
332
|
+
.template-frame--catalog .template-team-highlights { gap: 6px; }
|
|
333
|
+
.template-frame--catalog .template-team-highlights li { font-size: 13px; line-height: 1.25; padding-left: 14px; }
|
|
334
|
+
.template-frame--catalog .template-team-highlights li::before { top: 7px; width: 5px; height: 5px; }
|
|
335
|
+
.template-frame--catalog .template-team-education { font-size: 10px; line-height: 1.25; padding-top: 9px; }
|
|
336
|
+
.template-frame--catalog .template-free-placeholder { padding: 28px; gap: 10px; }
|
|
337
|
+
.template-frame--catalog .template-free-placeholder-label { font-size: 10px; }
|
|
338
|
+
.template-frame--catalog .template-free-placeholder h2 { font-size: 28px; line-height: 1.16; }
|
|
339
|
+
.template-frame--catalog .template-free-placeholder p { font-size: 17px; line-height: 1.3; }
|
|
340
|
+
.template-frame--catalog .template-free-placeholder-hint { min-height: 26px; padding: 6px 9px; font-size: 10px; }
|
|
305
341
|
.template-frame--catalog .template-image-frame { height: 86px; }
|
|
306
342
|
.template-frame--catalog .template-image-caption { font-size: 11px; }
|
|
307
343
|
.template-frame--catalog .template-visual-placeholder-frame { height: 110px; }
|
|
@@ -332,15 +368,18 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
332
368
|
.template-card,
|
|
333
369
|
.template-table,
|
|
334
370
|
.template-insight-panel,
|
|
335
|
-
.template-catalog-panel
|
|
336
|
-
.template-
|
|
337
|
-
.template-
|
|
338
|
-
.template-
|
|
371
|
+
.template-catalog-panel,
|
|
372
|
+
.template-team-card { box-shadow: none; }
|
|
373
|
+
.template-team-photo img { filter: saturate(0.92) contrast(1.04); }
|
|
374
|
+
.template-free-placeholder { box-shadow: none; }
|
|
375
|
+
.template-slide[data-template="cover"] .slide-canvas,
|
|
376
|
+
.template-slide[data-template="agenda"] .slide-canvas,
|
|
377
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
339
378
|
background:
|
|
340
379
|
linear-gradient(90deg, rgba(16,19,22,0.82), rgba(16,19,22,0.42) 52%, rgba(16,19,22,0.18)),
|
|
341
380
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
342
381
|
}
|
|
343
|
-
.template-slide[data-
|
|
382
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
344
383
|
background:
|
|
345
384
|
linear-gradient(90deg, rgba(16,19,22,0.72), rgba(47,115,218,0.34) 58%, rgba(43,159,195,0.22)),
|
|
346
385
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
package/designs/summit/DESIGN.md
CHANGED
|
@@ -2604,11 +2604,13 @@ Summit skins Revela built-in page templates with editorial hierarchy, broad whit
|
|
|
2604
2604
|
- `cover`, `section-divider`, `closing`: use strong editorial title pages.
|
|
2605
2605
|
- `agenda`, `executive-summary`, `problem-context`, `key-message-evidence`, `claim-supporting-visual`: use borderless narrative groupings with clear hierarchy.
|
|
2606
2606
|
- Agenda typography follows design tokens: title and numbers use `--font-display`; item labels and footer use `--font-body`.
|
|
2607
|
+
- `team`: use portrait-led member cards with one clear photo, name, role, two project/career highlights, and one highest-education line. Optimize for 3-4 members per page; 5-6 members require short copy and consistent portraits.
|
|
2607
2608
|
- `metric-highlight`, `chart-takeaways`, `table`, `table-comparison`: use evidence-first data regions without outer container borders.
|
|
2608
2609
|
- Text panels use explicit variants: `template-text-panel--clear` is transparent with no border or background, `template-text-panel--plain` is theme-neutral, and `template-text-panel--color` is the multicolor emphasis treatment used by chart and timeline reading panels.
|
|
2609
2610
|
- `milestone`: dots remain milestone anchors inside each horizontal milestone item; do not position detached decorative markers.
|
|
2610
2611
|
- `timeline`: dots remain event anchors inside each vertical timeline item; do not position detached decorative markers.
|
|
2611
2612
|
- `process-steps`, `recommendation-decision`, `risks-tradeoffs`: use decisive action panels with minimal framing.
|
|
2613
|
+
- `free`: use a plain title plus one semantic placeholder region. The agent may later replace that region with multiple images, charts, text blocks, tables, or mixed content; do not use it as raw arbitrary HTML.
|
|
2612
2614
|
|
|
2613
2615
|
<!-- @design:page-templates:end -->
|
|
2614
2616
|
|
|
@@ -99,24 +99,24 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
99
99
|
linear-gradient(135deg, #07111f, #101a2b 62%, #243a73);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
.template-slide[data-
|
|
102
|
+
.template-slide[data-template="cover"] .slide-canvas {
|
|
103
103
|
background:
|
|
104
104
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(7,17,31,0.42) 52%, rgba(7,17,31,0.24)),
|
|
105
105
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
106
106
|
}
|
|
107
|
-
.template-slide[data-
|
|
107
|
+
.template-slide[data-template="agenda"] .slide-canvas {
|
|
108
108
|
background:
|
|
109
109
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(7,17,31,0.58) 52%, rgba(7,17,31,0.32)),
|
|
110
110
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
111
111
|
}
|
|
112
|
-
.template-slide[data-
|
|
112
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
113
113
|
background:
|
|
114
114
|
linear-gradient(90deg, rgba(7,17,31,0.86), rgba(16,26,43,0.62) 58%, rgba(36,58,115,0.36)),
|
|
115
115
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
116
116
|
}
|
|
117
117
|
.template-slide[data-template="closing"] .slide-canvas { background: linear-gradient(135deg, #07111f, #315eea 58%, #18a8d8); }
|
|
118
118
|
|
|
119
|
-
.template-slide[data-
|
|
119
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
120
120
|
background:
|
|
121
121
|
linear-gradient(90deg, rgba(7,17,31,0.82), rgba(49,94,234,0.42) 58%, rgba(24,168,216,0.24)),
|
|
122
122
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
|
@@ -162,10 +162,13 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
162
162
|
.text-panel-formula-fallback { display: block; white-space: normal; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.82em; line-height: 1.35; color: inherit; }
|
|
163
163
|
.text-panel-formula-caption { margin: 0; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
|
|
164
164
|
.template-chart-takeaway-list { display: grid; gap: 22px; width: 100%; }
|
|
165
|
-
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid
|
|
165
|
+
.template-chart-takeaway-item { display: grid; gap: 7px; padding-top: 18px; border-top: 1px solid var(--line); }
|
|
166
|
+
.template-text-panel--color .template-chart-takeaway-item { border-top-color: rgba(255,255,255,0.24); }
|
|
166
167
|
.template-chart-takeaway-item:first-child { padding-top: 0; border-top: 0; }
|
|
167
|
-
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color:
|
|
168
|
-
.template-chart-takeaway-item
|
|
168
|
+
.template-chart-takeaway-item h3 { margin: 0; font-size: 25px; line-height: 1.24; color: var(--text-primary); }
|
|
169
|
+
.template-text-panel--color .template-chart-takeaway-item h3 { color: white; }
|
|
170
|
+
.template-chart-takeaway-item p { margin: 0; font-size: 20px; line-height: 1.46; color: var(--text-secondary); }
|
|
171
|
+
.template-text-panel--color .template-chart-takeaway-item p { color: rgba(255,255,255,0.78); }
|
|
169
172
|
.template-bar { flex: 1; background: linear-gradient(180deg, var(--accent-primary), var(--accent-cyan)); min-height: 80px; }
|
|
170
173
|
.template-table-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 34px; height: 100%; align-items: stretch; }
|
|
171
174
|
.template-table-layout .template-side-panel { grid-column: 1; grid-row: 1; }
|
|
@@ -223,6 +226,25 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
223
226
|
.template-timeline--vertical .template-timeline-item:nth-child(even) .template-timeline-copy { grid-column: 3; text-align: left; align-self: center; }
|
|
224
227
|
.template-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
|
|
225
228
|
.template-step-number { font-size: 48px; color: var(--accent-primary); font-weight: 800; margin-bottom: 30px; }
|
|
229
|
+
.template-team-grid { height: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; align-items: stretch; }
|
|
230
|
+
.template-team-card { min-width: 0; min-height: 0; display: grid; grid-template-rows: 330px minmax(0, 1fr); overflow: hidden; background: rgba(255,255,255,0.86); border: 1px solid var(--line); border-radius: var(--surface-radius); box-shadow: 0 18px 44px var(--shadow-soft); }
|
|
231
|
+
.template-team-photo { margin: 0; width: 100%; height: 100%; overflow: hidden; background: linear-gradient(135deg, var(--accent-soft), rgba(24,168,216,0.16)); display: grid; place-items: center; }
|
|
232
|
+
.template-team-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
233
|
+
.template-team-photo span { font-family: var(--font-display); font-size: 72px; line-height: 1; color: var(--accent-primary); font-weight: 800; }
|
|
234
|
+
.template-team-copy { min-height: 0; display: flex; flex-direction: column; gap: 12px; padding: 26px; }
|
|
235
|
+
.template-team-name { margin: 0; font-size: 30px; line-height: 1.18; color: var(--text-primary); padding-bottom: 3px; overflow: visible; }
|
|
236
|
+
.template-team-role { margin: 0; font-size: 15px; line-height: 1.35; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
237
|
+
.template-team-highlights { margin: 4px 0 0; padding: 0; list-style: none; display: grid; gap: 9px; }
|
|
238
|
+
.template-team-highlights li { position: relative; padding-left: 18px; font-size: 17px; line-height: 1.36; color: var(--text-secondary); }
|
|
239
|
+
.template-team-highlights li::before { content: ""; position: absolute; left: 0; top: 9px; width: 6px; height: 6px; background: var(--accent-primary); border-radius: 999px; }
|
|
240
|
+
.template-team-education { margin: auto 0 0; padding-top: 14px; border-top: 1px solid var(--line); font-size: 14px; line-height: 1.35; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; }
|
|
241
|
+
.template-free-stage { height: 100%; display: grid; grid-template-columns: minmax(0, 1fr); }
|
|
242
|
+
.template-free-placeholder { min-width: 0; min-height: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: 16px; padding: 42px; border: 1px dashed var(--line-strong); border-radius: var(--surface-radius); background: linear-gradient(135deg, rgba(49,94,234,0.06), rgba(24,168,216,0.07)); overflow: hidden; }
|
|
243
|
+
.template-free-placeholder-label { align-self: flex-start; font-size: 13px; line-height: 1; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent-primary); font-weight: 800; }
|
|
244
|
+
.template-free-placeholder h2 { margin: 0; font-size: 38px; line-height: 1.18; color: var(--text-primary); padding-bottom: 4px; overflow: visible; }
|
|
245
|
+
.template-free-placeholder p { margin: 0; max-width: 980px; font-size: 23px; line-height: 1.42; color: var(--text-secondary); }
|
|
246
|
+
.template-free-placeholder-hints { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; }
|
|
247
|
+
.template-free-placeholder-hint { display: inline-flex; align-items: center; min-height: 32px; padding: 7px 12px; border: 1px solid var(--line); border-radius: 999px; font-size: 13px; line-height: 1; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); font-weight: 800; background: rgba(255,255,255,0.58); }
|
|
226
248
|
.template-image-card { width: 100%; margin: 18px 0 0; display: grid; gap: 8px; }
|
|
227
249
|
.template-image-frame { width: 100%; height: 128px; border-radius: var(--surface-radius); overflow: hidden; background: var(--surface-tint, #f1f6fc); border: 1px solid var(--line); }
|
|
228
250
|
.template-image-frame img { display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
@@ -302,6 +324,20 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
302
324
|
.template-frame--catalog .template-timeline-copy p:last-child { font-size: 15px; line-height: 1.24; }
|
|
303
325
|
.template-frame--catalog .template-steps { gap: 16px; }
|
|
304
326
|
.template-frame--catalog .template-step-number { font-size: 40px; margin-bottom: 20px; }
|
|
327
|
+
.template-frame--catalog .template-team-grid { gap: 16px; }
|
|
328
|
+
.template-frame--catalog .template-team-card { grid-template-rows: 230px minmax(0, 1fr); }
|
|
329
|
+
.template-frame--catalog .template-team-copy { padding: 18px; gap: 8px; }
|
|
330
|
+
.template-frame--catalog .template-team-name { font-size: 22px; line-height: 1.14; }
|
|
331
|
+
.template-frame--catalog .template-team-role { font-size: 11px; line-height: 1.25; }
|
|
332
|
+
.template-frame--catalog .template-team-highlights { gap: 6px; }
|
|
333
|
+
.template-frame--catalog .template-team-highlights li { font-size: 13px; line-height: 1.25; padding-left: 14px; }
|
|
334
|
+
.template-frame--catalog .template-team-highlights li::before { top: 7px; width: 5px; height: 5px; }
|
|
335
|
+
.template-frame--catalog .template-team-education { font-size: 10px; line-height: 1.25; padding-top: 9px; }
|
|
336
|
+
.template-frame--catalog .template-free-placeholder { padding: 28px; gap: 10px; }
|
|
337
|
+
.template-frame--catalog .template-free-placeholder-label { font-size: 10px; }
|
|
338
|
+
.template-frame--catalog .template-free-placeholder h2 { font-size: 28px; line-height: 1.16; }
|
|
339
|
+
.template-frame--catalog .template-free-placeholder p { font-size: 17px; line-height: 1.3; }
|
|
340
|
+
.template-frame--catalog .template-free-placeholder-hint { min-height: 26px; padding: 6px 9px; font-size: 10px; }
|
|
305
341
|
.template-frame--catalog .template-image-frame { height: 86px; }
|
|
306
342
|
.template-frame--catalog .template-image-caption { font-size: 11px; }
|
|
307
343
|
.template-frame--catalog .template-visual-placeholder-frame { height: 110px; }
|
|
@@ -345,14 +381,42 @@ body { margin: 0; background: var(--bg-frame, #07111f); color: var(--text-primar
|
|
|
345
381
|
.template-timeline-layout .template-text-panel--color {
|
|
346
382
|
background: linear-gradient(135deg, #176c63 0%, #2a8f84 54%, #b0822e 125%);
|
|
347
383
|
}
|
|
348
|
-
.template-
|
|
349
|
-
|
|
350
|
-
|
|
384
|
+
.template-team-card {
|
|
385
|
+
background: rgba(255,255,255,0.9);
|
|
386
|
+
border-color: transparent;
|
|
387
|
+
box-shadow: 0 24px 58px rgba(18, 37, 34, 0.11);
|
|
388
|
+
}
|
|
389
|
+
.template-team-photo {
|
|
390
|
+
background: linear-gradient(135deg, rgba(23,108,99,0.16), rgba(176,130,46,0.16));
|
|
391
|
+
}
|
|
392
|
+
.template-team-photo img { filter: saturate(0.92) contrast(1.04); }
|
|
393
|
+
.template-team-name { font-family: var(--font-display); font-weight: 600; }
|
|
394
|
+
.template-team-role,
|
|
395
|
+
.template-team-education,
|
|
396
|
+
.template-free-placeholder-label,
|
|
397
|
+
.template-free-placeholder-hint {
|
|
398
|
+
font-family: var(--font-body);
|
|
399
|
+
}
|
|
400
|
+
.template-team-role,
|
|
401
|
+
.template-team-highlights li::before,
|
|
402
|
+
.template-free-placeholder-label {
|
|
403
|
+
color: var(--accent-primary);
|
|
404
|
+
}
|
|
405
|
+
.template-free-placeholder {
|
|
406
|
+
background:
|
|
407
|
+
linear-gradient(135deg, rgba(10,16,16,0.08), rgba(23,108,99,0.09)),
|
|
408
|
+
rgba(255,255,255,0.68);
|
|
409
|
+
border-color: rgba(35, 53, 49, 0.22);
|
|
410
|
+
box-shadow: none;
|
|
411
|
+
}
|
|
412
|
+
.template-slide[data-template="cover"] .slide-canvas,
|
|
413
|
+
.template-slide[data-template="agenda"] .slide-canvas,
|
|
414
|
+
.template-slide[data-template="section-divider"] .slide-canvas {
|
|
351
415
|
background:
|
|
352
416
|
linear-gradient(90deg, rgba(10,16,16,0.84), rgba(10,16,16,0.46) 52%, rgba(10,16,16,0.18)),
|
|
353
417
|
url("./assets/cover-background.jpg") center center / cover no-repeat;
|
|
354
418
|
}
|
|
355
|
-
.template-slide[data-
|
|
419
|
+
.template-slide[data-template="closing"] .slide-canvas {
|
|
356
420
|
background:
|
|
357
421
|
linear-gradient(90deg, rgba(10,16,16,0.78), rgba(23,108,99,0.4) 58%, rgba(176,130,46,0.22)),
|
|
358
422
|
url("./assets/closing-background.jpg") center center / cover no-repeat;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from "fs"
|
|
2
|
-
import { dirname, isAbsolute, normalize, resolve } from "path"
|
|
2
|
+
import { basename, dirname, isAbsolute, normalize, resolve } from "path"
|
|
3
3
|
import { activeDesign, getDesignSection, materializeDesignCssSnapshot } from "../design/designs"
|
|
4
4
|
|
|
5
5
|
export type DeckFoundationMode = "create" | "repair"
|
|
@@ -48,7 +48,12 @@ export function createDeckFoundation(input: CreateDeckFoundationInput): CreateDe
|
|
|
48
48
|
const foundation = getDesignSection("foundation", design)
|
|
49
49
|
const parts = parseFoundationParts(foundation)
|
|
50
50
|
if (parts.scriptBlocks.length === 0) throw new Error(`Design '${design}' foundation does not include a SlidePresentation JavaScript code block.`)
|
|
51
|
-
const snapshot = materializeDesignCssSnapshot({
|
|
51
|
+
const snapshot = materializeDesignCssSnapshot({
|
|
52
|
+
workspaceRoot: input.workspaceRoot,
|
|
53
|
+
outputPath,
|
|
54
|
+
designName: design,
|
|
55
|
+
snapshotName: activeDesignSnapshotName(outputPath),
|
|
56
|
+
})
|
|
52
57
|
|
|
53
58
|
const html = renderFoundationHtml({
|
|
54
59
|
language: input.language || "en",
|
|
@@ -69,6 +74,7 @@ export function createDeckFoundation(input: CreateDeckFoundationInput): CreateDe
|
|
|
69
74
|
"design:foundation",
|
|
70
75
|
parts.fontLinks.length > 0 ? "foundation:font-links" : "foundation:font-links:none",
|
|
71
76
|
snapshot.generatedFallback ? "design-css:fallback" : "design-css:snapshot",
|
|
77
|
+
`design-css:active-snapshot:${snapshot.snapshotName}`,
|
|
72
78
|
snapshot.assetCount > 0 ? "design-assets:snapshot" : "design-assets:none",
|
|
73
79
|
"foundation:SlidePresentation",
|
|
74
80
|
],
|
|
@@ -81,6 +87,14 @@ export function createDeckFoundation(input: CreateDeckFoundationInput): CreateDe
|
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
89
|
|
|
90
|
+
export function activeDesignSnapshotName(outputPath: string): string {
|
|
91
|
+
const stem = basename(normalizeOutputPath(outputPath), ".html")
|
|
92
|
+
.toLowerCase()
|
|
93
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
94
|
+
.replace(/^-+|-+$/g, "")
|
|
95
|
+
return `${stem || "deck"}-active`
|
|
96
|
+
}
|
|
97
|
+
|
|
84
98
|
export function normalizeOutputPath(outputPath: string): string {
|
|
85
99
|
const trimmed = outputPath.trim()
|
|
86
100
|
if (!trimmed) throw new Error("outputPath is required")
|
package/lib/design/designs.ts
CHANGED
|
@@ -180,6 +180,7 @@ export interface MaterializeDesignPreviewResult {
|
|
|
180
180
|
export interface DesignCssSnapshotResult {
|
|
181
181
|
ok: true
|
|
182
182
|
design: string
|
|
183
|
+
snapshotName: string
|
|
183
184
|
sourcePath: string
|
|
184
185
|
snapshotDir: string
|
|
185
186
|
cssPath: string
|
|
@@ -425,11 +426,13 @@ export function materializeDesignCssSnapshot(input: {
|
|
|
425
426
|
workspaceRoot: string
|
|
426
427
|
outputPath: string
|
|
427
428
|
designName?: string
|
|
429
|
+
snapshotName?: string
|
|
428
430
|
}): DesignCssSnapshotResult {
|
|
429
431
|
const designName = normalizeDesignName(input.designName || activeDesign())
|
|
432
|
+
const snapshotName = normalizeDesignSnapshotName(input.snapshotName || designName)
|
|
430
433
|
const designDir = resolveDesignPackageDir(designName)
|
|
431
434
|
const outputDir = dirname(normalize(input.outputPath))
|
|
432
|
-
const snapshotRelDir = normalize(join(outputDir, "_revela-design",
|
|
435
|
+
const snapshotRelDir = normalize(join(outputDir, "_revela-design", snapshotName)).replace(/\\/g, "/")
|
|
433
436
|
const snapshotDir = resolve(input.workspaceRoot, snapshotRelDir)
|
|
434
437
|
const cssPath = join(snapshotDir, "design.css")
|
|
435
438
|
const cssRead = readDesignCss(designName)
|
|
@@ -450,6 +453,7 @@ export function materializeDesignCssSnapshot(input: {
|
|
|
450
453
|
return {
|
|
451
454
|
ok: true,
|
|
452
455
|
design: designName,
|
|
456
|
+
snapshotName,
|
|
453
457
|
sourcePath: cssRead.path || join(designDir, "DESIGN.md"),
|
|
454
458
|
snapshotDir,
|
|
455
459
|
cssPath,
|
|
@@ -460,6 +464,14 @@ export function materializeDesignCssSnapshot(input: {
|
|
|
460
464
|
}
|
|
461
465
|
}
|
|
462
466
|
|
|
467
|
+
function normalizeDesignSnapshotName(name: string): string {
|
|
468
|
+
const normalized = name.trim().toLowerCase()
|
|
469
|
+
if (!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(normalized)) {
|
|
470
|
+
throw new Error("Design snapshot name must be kebab-case using lowercase letters, numbers, and hyphens")
|
|
471
|
+
}
|
|
472
|
+
return normalized
|
|
473
|
+
}
|
|
474
|
+
|
|
463
475
|
/** Normalize and validate a design package name. */
|
|
464
476
|
export function normalizeDesignName(name: string): string {
|
|
465
477
|
const normalized = name.trim().toLowerCase()
|