@cyber-dash-tech/revela 0.1.11 → 0.1.13
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 +180 -91
- package/README.zh-CN.md +185 -128
- package/designs/summit/DESIGN.md +122 -55
- package/package.json +1 -1
- package/skill/SKILL.md +40 -132
package/designs/summit/DESIGN.md
CHANGED
|
@@ -31,6 +31,8 @@ Apply this visual style when generating all slides in this session.
|
|
|
31
31
|
--accent-danger: #b94a3c;
|
|
32
32
|
--accent-sage: #9eb0a6;
|
|
33
33
|
--shadow-soft: rgba(0, 0, 0, 0.18);
|
|
34
|
+
--font-display: 'IBM Plex Sans Condensed', 'Inter', ui-sans-serif, sans-serif;
|
|
35
|
+
--font-body: 'Inter', ui-sans-serif, sans-serif;
|
|
34
36
|
}
|
|
35
37
|
```
|
|
36
38
|
|
|
@@ -150,7 +152,7 @@ html {
|
|
|
150
152
|
body {
|
|
151
153
|
background: var(--bg-frame);
|
|
152
154
|
color: var(--text-primary);
|
|
153
|
-
font-family:
|
|
155
|
+
font-family: var(--font-body);
|
|
154
156
|
-webkit-font-smoothing: antialiased;
|
|
155
157
|
height: 100%;
|
|
156
158
|
}
|
|
@@ -202,7 +204,7 @@ body {
|
|
|
202
204
|
}
|
|
203
205
|
|
|
204
206
|
h1, h2, h3, h4 {
|
|
205
|
-
font-family:
|
|
207
|
+
font-family: var(--font-display);
|
|
206
208
|
font-weight: 600;
|
|
207
209
|
letter-spacing: -0.02em;
|
|
208
210
|
color: var(--text-primary);
|
|
@@ -572,6 +574,8 @@ Every slot accepts 1 or more components. The LLM decides what each slot contains
|
|
|
572
574
|
|
|
573
575
|
Equal N-column layout. Use when 3 or more parallel items of roughly equal visual weight should appear side by side — proof blocks, highlights, feature comparisons, stat groups, or any multi-column editorial spread.
|
|
574
576
|
|
|
577
|
+
A short section header is optional but recommended. In Summit, that header should stay lean: eyebrow plus title only, with no intro paragraph competing with the columns below.
|
|
578
|
+
|
|
575
579
|
Structural intent:
|
|
576
580
|
- each slot: 1fr column — any component(s)
|
|
577
581
|
- column count: determined by the number of direct child divs in the grid container; `auto-fit` distributes space equally
|
|
@@ -582,6 +586,11 @@ Every slot accepts 1 or more components. Add or remove child divs to control col
|
|
|
582
586
|
<section class="slide" slide-qa="true" data-index="N">
|
|
583
587
|
<div class="slide-canvas">
|
|
584
588
|
<div class="page">
|
|
589
|
+
<div style="display:flex;flex-direction:column;gap:10px;margin-bottom:28px;max-width:520px;">
|
|
590
|
+
<p class="eyebrow">Section Label</p>
|
|
591
|
+
<h2 style="font-size:52px;line-height:0.94;text-transform:uppercase;">Short framing title for the parallel columns</h2>
|
|
592
|
+
</div>
|
|
593
|
+
|
|
585
594
|
<div class="highlight-cols-grid" style="flex:1;min-height:0;">
|
|
586
595
|
|
|
587
596
|
<!-- [slot: 1] — 1+ components; suggested: editorial-image-top, editorial-text-top, echart-panel -->
|
|
@@ -619,8 +628,10 @@ Every slot accepts 1 or more components. Add or remove child divs to control col
|
|
|
619
628
|
|
|
620
629
|
##### Tips
|
|
621
630
|
- **Grid container needs `flex:1;min-height:0` inline** when inside `.page` (which is flex-column). The class handles column sizing; the inline style handles row stretch.
|
|
631
|
+
- **Header stays lean.** If you add a section header above the grid, use only `eyebrow + title`. Do not add an intro paragraph; the columns themselves should carry the explanation.
|
|
622
632
|
- **Column count = number of direct child divs.** `repeat(auto-fit, minmax(0, 1fr))` distributes available width equally across however many children exist. Add a 4th or 5th div to get 4 or 5 columns — no CSS change needed.
|
|
623
633
|
- **Equal columns — no hierarchy.** All slots carry the same visual weight. Adjust content density to suit the slide purpose; do not artificially inflate one column to create false hierarchy.
|
|
634
|
+
- **When using 4-5 columns, compress the header.** Keep the title to one or two short lines so the grid retains most of the slide height.
|
|
624
635
|
- **Do not set fixed heights on editorial components.** Let components fill height via flexbox stretch.
|
|
625
636
|
<!-- @layout:highlight-cols:end -->
|
|
626
637
|
|
|
@@ -860,6 +871,79 @@ Rules:
|
|
|
860
871
|
- **`editorial-list` inside `--dark`.** Add `style="--accent-earth:rgba(247,244,238,0.72)"` on the `<ul>` wrapper so the bullet squares read against the dark background.
|
|
861
872
|
<!-- @component:text-panel:end -->
|
|
862
873
|
|
|
874
|
+
<!-- @component:stat-card:start -->
|
|
875
|
+
#### Stat Card
|
|
876
|
+
|
|
877
|
+
Lightweight editorial metric module for a single highlighted number. Use when one data point should carry the visual emphasis while the metric name and guiding sentence stay quiet and compact.
|
|
878
|
+
|
|
879
|
+
This is **not** a dashboard card. It has no border, no background fill, no shadow, and no corner treatment. Hierarchy comes from number scale, spacing, and restrained typography.
|
|
880
|
+
|
|
881
|
+
```html
|
|
882
|
+
<!-- variant A: default vertical composition -->
|
|
883
|
+
<div class="stat-card">
|
|
884
|
+
<p class="caption" style="color:var(--text-muted);">Performance signal</p>
|
|
885
|
+
<div class="stat-card-value" style="color: var(--accent-gold);">27%</div>
|
|
886
|
+
<div class="text-panel-body" style="gap:10px;max-width:330px;">
|
|
887
|
+
<h3 style="font-size:24px;line-height:1.04;text-transform:uppercase;">EBIT Margin</h3>
|
|
888
|
+
<p style="font-size:14px;line-height:1.56;color:var(--text-secondary);">Expanded for the third consecutive quarter as premium mix offset freight pressure and held pricing discipline through softer volume.</p>
|
|
889
|
+
</div>
|
|
890
|
+
</div>
|
|
891
|
+
|
|
892
|
+
<!-- variant B: horizontal composition -->
|
|
893
|
+
<div class="stat-card stat-card--horizontal">
|
|
894
|
+
<div style="display:flex;flex-direction:column;gap:12px;flex:0 0 220px;min-width:0;">
|
|
895
|
+
<p class="caption" style="color:var(--text-muted);">Operational baseline</p>
|
|
896
|
+
<div class="stat-card-value" style="color: var(--accent-olive);">4.8x</div>
|
|
897
|
+
</div>
|
|
898
|
+
<div class="text-panel-body" style="gap:10px;max-width:330px;">
|
|
899
|
+
<h3 style="font-size:24px;line-height:1.04;text-transform:uppercase;">Inventory Turnover</h3>
|
|
900
|
+
<p style="font-size:14px;line-height:1.56;color:var(--text-secondary);">Higher cycle efficiency reduced working-capital drag without adding new capacity, leaving more headroom for seasonal demand swings.</p>
|
|
901
|
+
</div>
|
|
902
|
+
</div>
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
```css
|
|
906
|
+
.stat-card {
|
|
907
|
+
height: 100%;
|
|
908
|
+
display: flex;
|
|
909
|
+
min-height: 0;
|
|
910
|
+
flex-direction: column;
|
|
911
|
+
justify-content: flex-start;
|
|
912
|
+
gap: 16px;
|
|
913
|
+
padding-top: 8px;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
.stat-card--horizontal {
|
|
917
|
+
flex-direction: row;
|
|
918
|
+
align-items: flex-start;
|
|
919
|
+
gap: 30px;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.stat-card-value {
|
|
923
|
+
font-family: var(--font-display);
|
|
924
|
+
font-size: 88px;
|
|
925
|
+
line-height: 0.9;
|
|
926
|
+
letter-spacing: -0.04em;
|
|
927
|
+
font-weight: 600;
|
|
928
|
+
font-variant-numeric: tabular-nums;
|
|
929
|
+
color: inherit;
|
|
930
|
+
}
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
Rules:
|
|
934
|
+
- Use this component only for a **single** highlighted metric. If the slide needs several peer metrics, switch to a multi-item layout instead of stacking several stat cards together without hierarchy.
|
|
935
|
+
- The number color is chosen semantically from the Summit palette via inline `style="color: var(--accent-xxx)"`; do not hardcode a fixed color in the component CSS.
|
|
936
|
+
- Do not add background fills, borders, shadows, or rounded corners. The module must remain typographic and editorial.
|
|
937
|
+
- Use `h3` for the metric name and a single compact `p` for the guiding sentence. Keep the copy to one or two sentences.
|
|
938
|
+
- Default `stat-card` is vertical. Add `stat-card--horizontal` only when the number and explanation need a side-by-side read.
|
|
939
|
+
|
|
940
|
+
##### Tips
|
|
941
|
+
- **Horizontal width discipline.** In the horizontal variant, keep the number column narrow (`~220px`) so the prose still reads as the explanatory side, not as a second visual block.
|
|
942
|
+
- **Long numbers.** For values such as `12,450` or `83.6%`, reduce the inline font size slightly before tightening letter-spacing further.
|
|
943
|
+
- **Semantic color choice.** `--accent-gold` works for primary emphasis, `--accent-olive` for stable or positive operational metrics, `--accent-danger` for negative indicators, and `--accent-sage` for environmental or resilience-oriented signals.
|
|
944
|
+
- **Do not over-explain.** If the description starts to become paragraph-length, switch to `text-panel` or pair the stat card with a narrative component in the neighboring slot.
|
|
945
|
+
<!-- @component:stat-card:end -->
|
|
946
|
+
|
|
863
947
|
<!-- @component:editorial-image-top:start -->
|
|
864
948
|
#### Editorial Image Top
|
|
865
949
|
|
|
@@ -1115,7 +1199,7 @@ Rules:
|
|
|
1115
1199
|
- The left copy zone holds a kicker row followed by a `text-panel-body`. The body accepts prose `<p>`, an `<ul class="editorial-list">`, or both — choose based on content.
|
|
1116
1200
|
- The right visual slot is open: use a plain `media-frame img`, an `echart-container`, or a full `image-title` component. Choose based on content — there is no default.
|
|
1117
1201
|
- When using `editorial-list` inside `text-panel-body`, add `<strong>` around the first 2–5 words of each `<li>` to create a bold lead phrase for scannable hierarchy.
|
|
1118
|
-
- When the card carries a large statistic or callout number, place it between the header and the copy zone using an inline style (`font-size: 48px; font-family:
|
|
1202
|
+
- When the card carries a large statistic or callout number, place it between the header and the copy zone using an inline style (`font-size: 48px; font-family: var(--font-display); font-weight: 700; color: var(--accent-gold); line-height: 1;`).
|
|
1119
1203
|
|
|
1120
1204
|
##### Tips
|
|
1121
1205
|
- **Parent must supply height.** `.editorial-text-left` uses `height: 100%` and `flex: 1` internally. The parent slot must have a defined height (grid cell, `height:100%` chain, or `flex:1;min-height:0`).
|
|
@@ -1239,6 +1323,34 @@ Horizontal step or phase sequence. Use for process stages, numbered definitions,
|
|
|
1239
1323
|
```
|
|
1240
1324
|
|
|
1241
1325
|
```css
|
|
1326
|
+
/* Shared by flow-horizontal and flow-vertical */
|
|
1327
|
+
.flow-number {
|
|
1328
|
+
font-family: var(--font-display);
|
|
1329
|
+
font-size: 13px;
|
|
1330
|
+
font-weight: 700;
|
|
1331
|
+
letter-spacing: 0.12em;
|
|
1332
|
+
color: var(--text-muted);
|
|
1333
|
+
border: 1px solid var(--line-strong);
|
|
1334
|
+
width: 34px;
|
|
1335
|
+
height: 34px;
|
|
1336
|
+
display: flex;
|
|
1337
|
+
align-items: center;
|
|
1338
|
+
justify-content: center;
|
|
1339
|
+
flex-shrink: 0;
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
.flow-body h4 {
|
|
1343
|
+
font-size: 20px;
|
|
1344
|
+
font-weight: 600;
|
|
1345
|
+
line-height: 1.14;
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
.flow-body p {
|
|
1349
|
+
font-size: 14px;
|
|
1350
|
+
line-height: 1.6;
|
|
1351
|
+
color: var(--text-secondary);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1242
1354
|
.flow-horizontal {
|
|
1243
1355
|
position: relative;
|
|
1244
1356
|
display: flex;
|
|
@@ -1273,30 +1385,6 @@ Horizontal step or phase sequence. Use for process stages, numbered definitions,
|
|
|
1273
1385
|
position: relative;
|
|
1274
1386
|
z-index: 1;
|
|
1275
1387
|
background: var(--bg-page);
|
|
1276
|
-
font-family: 'IBM Plex Sans Condensed', sans-serif;
|
|
1277
|
-
font-size: 13px;
|
|
1278
|
-
font-weight: 700;
|
|
1279
|
-
letter-spacing: 0.12em;
|
|
1280
|
-
color: var(--text-muted);
|
|
1281
|
-
border: 1px solid var(--line-strong);
|
|
1282
|
-
width: 34px;
|
|
1283
|
-
height: 34px;
|
|
1284
|
-
display: flex;
|
|
1285
|
-
align-items: center;
|
|
1286
|
-
justify-content: center;
|
|
1287
|
-
flex-shrink: 0;
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
.flow-horizontal .flow-body h4 {
|
|
1291
|
-
font-size: 20px;
|
|
1292
|
-
font-weight: 600;
|
|
1293
|
-
line-height: 1.14;
|
|
1294
|
-
}
|
|
1295
|
-
|
|
1296
|
-
.flow-horizontal .flow-body p {
|
|
1297
|
-
font-size: 14px;
|
|
1298
|
-
line-height: 1.6;
|
|
1299
|
-
color: var(--text-secondary);
|
|
1300
1388
|
}
|
|
1301
1389
|
```
|
|
1302
1390
|
|
|
@@ -1372,21 +1460,6 @@ Vertical step or timeline sequence. Use for chronological phases, execution stag
|
|
|
1372
1460
|
flex-shrink: 0;
|
|
1373
1461
|
}
|
|
1374
1462
|
|
|
1375
|
-
.flow-vertical .flow-number {
|
|
1376
|
-
font-family: 'IBM Plex Sans Condensed', sans-serif;
|
|
1377
|
-
font-size: 13px;
|
|
1378
|
-
font-weight: 700;
|
|
1379
|
-
letter-spacing: 0.12em;
|
|
1380
|
-
color: var(--text-muted);
|
|
1381
|
-
border: 1px solid var(--line-strong);
|
|
1382
|
-
width: 34px;
|
|
1383
|
-
height: 34px;
|
|
1384
|
-
display: flex;
|
|
1385
|
-
align-items: center;
|
|
1386
|
-
justify-content: center;
|
|
1387
|
-
flex-shrink: 0;
|
|
1388
|
-
}
|
|
1389
|
-
|
|
1390
1463
|
.flow-vertical .flow-line {
|
|
1391
1464
|
width: 1px;
|
|
1392
1465
|
flex: 1;
|
|
@@ -1404,17 +1477,11 @@ Vertical step or timeline sequence. Use for chronological phases, execution stag
|
|
|
1404
1477
|
}
|
|
1405
1478
|
|
|
1406
1479
|
.flow-vertical .flow-body h4 {
|
|
1407
|
-
font-size: 20px;
|
|
1408
|
-
font-weight: 600;
|
|
1409
|
-
line-height: 1.14;
|
|
1410
1480
|
margin-top: 4px;
|
|
1411
1481
|
}
|
|
1412
1482
|
|
|
1413
1483
|
.flow-vertical .flow-body p {
|
|
1414
1484
|
margin-top: 8px;
|
|
1415
|
-
font-size: 14px;
|
|
1416
|
-
line-height: 1.6;
|
|
1417
|
-
color: var(--text-secondary);
|
|
1418
1485
|
}
|
|
1419
1486
|
```
|
|
1420
1487
|
|
|
@@ -1502,7 +1569,7 @@ Annual-report format data table. Use for year-on-year comparisons, emissions dat
|
|
|
1502
1569
|
.data-table {
|
|
1503
1570
|
width: 100%;
|
|
1504
1571
|
border-collapse: collapse;
|
|
1505
|
-
font-family:
|
|
1572
|
+
font-family: var(--font-body);
|
|
1506
1573
|
font-size: 13px;
|
|
1507
1574
|
font-variant-numeric: tabular-nums;
|
|
1508
1575
|
color: var(--text-primary);
|
|
@@ -1907,7 +1974,7 @@ Flat editorial quote block. Wide and short (width > height). Transparent backgro
|
|
|
1907
1974
|
display: flex;
|
|
1908
1975
|
align-items: center;
|
|
1909
1976
|
justify-content: center;
|
|
1910
|
-
font-family:
|
|
1977
|
+
font-family: var(--font-display);
|
|
1911
1978
|
font-size: 14px;
|
|
1912
1979
|
font-weight: 700;
|
|
1913
1980
|
color: var(--text-muted);
|
|
@@ -2015,7 +2082,7 @@ Omit `--light` only on slides with a white/light background.
|
|
|
2015
2082
|
position: absolute;
|
|
2016
2083
|
bottom: 36px;
|
|
2017
2084
|
right: 52px;
|
|
2018
|
-
font-family:
|
|
2085
|
+
font-family: var(--font-display);
|
|
2019
2086
|
font-size: 11px;
|
|
2020
2087
|
font-weight: 700;
|
|
2021
2088
|
letter-spacing: 0.18em;
|
|
@@ -2149,7 +2216,7 @@ A horizontal milestone timeline with a central axis line. Nodes sit on the axis;
|
|
|
2149
2216
|
|
|
2150
2217
|
/* Date: inherits node colour via --tjh-item-color */
|
|
2151
2218
|
.tjh-date {
|
|
2152
|
-
font-family:
|
|
2219
|
+
font-family: var(--font-display);
|
|
2153
2220
|
font-size: 11px;
|
|
2154
2221
|
font-weight: 700;
|
|
2155
2222
|
letter-spacing: 0.16em;
|
|
@@ -2160,7 +2227,7 @@ A horizontal milestone timeline with a central axis line. Nodes sit on the axis;
|
|
|
2160
2227
|
}
|
|
2161
2228
|
|
|
2162
2229
|
.tjh-title {
|
|
2163
|
-
font-family:
|
|
2230
|
+
font-family: var(--font-display);
|
|
2164
2231
|
font-size: 16px;
|
|
2165
2232
|
font-weight: 600;
|
|
2166
2233
|
letter-spacing: -0.01em;
|
|
@@ -2344,7 +2411,7 @@ Can be placed inside any layout slot that provides a defined height (`narrative`
|
|
|
2344
2411
|
|
|
2345
2412
|
/* Date — colored per node via --tjv-item-color */
|
|
2346
2413
|
.tjv-date {
|
|
2347
|
-
font-family:
|
|
2414
|
+
font-family: var(--font-display);
|
|
2348
2415
|
font-size: 11px;
|
|
2349
2416
|
font-weight: 700;
|
|
2350
2417
|
letter-spacing: 0.16em;
|
|
@@ -2355,7 +2422,7 @@ Can be placed inside any layout slot that provides a defined height (`narrative`
|
|
|
2355
2422
|
}
|
|
2356
2423
|
|
|
2357
2424
|
.tjv-title {
|
|
2358
|
-
font-family:
|
|
2425
|
+
font-family: var(--font-display);
|
|
2359
2426
|
font-size: 18px;
|
|
2360
2427
|
font-weight: 600;
|
|
2361
2428
|
letter-spacing: -0.01em;
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -34,7 +34,39 @@ Before writing any HTML, ask the user these questions **in a single message**
|
|
|
34
34
|
|
|
35
35
|
If the user's first message already answers most of these, skip what's clear and
|
|
36
36
|
only ask about what's missing. If the message is detailed enough, proceed directly
|
|
37
|
-
to Phase
|
|
37
|
+
to Phase 1.5.
|
|
38
|
+
|
|
39
|
+
Once you have the user's answers, **derive the deck slug** from the topic:
|
|
40
|
+
lowercase, hyphens, no spaces (e.g. "AI Investment Shift" → `ai-investment-shift`).
|
|
41
|
+
Tell the user: "I'll save this deck as `slides/{slug}.html`." They can correct the
|
|
42
|
+
name at this point.
|
|
43
|
+
|
|
44
|
+
### Phase 1.5 — Deck Initialization & Resume Check
|
|
45
|
+
|
|
46
|
+
After confirming the deck slug, check whether this deck has been worked on before:
|
|
47
|
+
|
|
48
|
+
1. Run `ls researches/{slug}/` (or `glob researches/{slug}/*.md`).
|
|
49
|
+
2. **If the directory does not exist (new deck):** proceed to Phase 2.
|
|
50
|
+
3. **If research files already exist (resuming):** list the files and ask the user:
|
|
51
|
+
|
|
52
|
+
> 我发现 `researches/{slug}/` 下已有以下研究文件:
|
|
53
|
+
> - `market-data.md`
|
|
54
|
+
> - `competitor-profile.md`
|
|
55
|
+
> - _(etc.)_
|
|
56
|
+
>
|
|
57
|
+
> 你想:
|
|
58
|
+
> a. 直接使用现有研究,跳到幻灯片计划阶段
|
|
59
|
+
> b. 补充某些方向的研究(请告诉我哪些方向)
|
|
60
|
+
> c. 全部重新研究
|
|
61
|
+
|
|
62
|
+
Then act based on the user's reply:
|
|
63
|
+
- **a** → skip Phase 3, go directly to Phase 4 (read existing files first)
|
|
64
|
+
- **b** → run research agents only for the specified axes, then Phase 4
|
|
65
|
+
- **c** → proceed to Phase 2 normally (full research)
|
|
66
|
+
|
|
67
|
+
All subsequent file paths in this session use the confirmed slug:
|
|
68
|
+
- Slides file: `slides/{slug}.html`
|
|
69
|
+
- Research dir: `researches/{slug}/`
|
|
38
70
|
|
|
39
71
|
### Phase 2 — Select Design
|
|
40
72
|
|
|
@@ -127,8 +159,9 @@ research workhorse — not an optional enhancement.
|
|
|
127
159
|
|
|
128
160
|
The research agent searches the web using `websearch` for broad discovery and
|
|
129
161
|
`webfetch` for depth on specific pages, reads workspace documents, and writes
|
|
130
|
-
structured findings to a single file `researches/{
|
|
131
|
-
in the workspace.
|
|
162
|
+
structured findings to a single file `researches/{slug}/{axis-name}.md`
|
|
163
|
+
in the workspace. Use the deck slug confirmed in Phase 1.5 — do not invent a
|
|
164
|
+
different slug at this point.
|
|
132
165
|
|
|
133
166
|
##### Parallelization Rule
|
|
134
167
|
|
|
@@ -151,14 +184,14 @@ need 2 axes; a complex comparison may need 4 or more. Typical decompositions:
|
|
|
151
184
|
Launch ALL agents in a single message (parallel Task tool calls).
|
|
152
185
|
|
|
153
186
|
Each agent's brief should specify:
|
|
154
|
-
- The
|
|
187
|
+
- The deck slug from Phase 1.5 (e.g. `ai-investment-shift`) — all agents share the same slug
|
|
155
188
|
- The axis name for their file (e.g. `anthropic-profile`, `openai-challenges`, `market-trends`)
|
|
156
189
|
- What to research and what time period to focus on
|
|
157
190
|
- An explicit instruction to use `websearch` (e.g. "Use the websearch tool to find relevant market reports, news, and data for this axis.")
|
|
158
191
|
|
|
159
192
|
##### After Agents Complete
|
|
160
193
|
|
|
161
|
-
List and read the findings files: `ls researches/{
|
|
194
|
+
List and read the findings files: `ls researches/{slug}/`, then `read`
|
|
162
195
|
each `.md` file. Each file contains structured `## Data`, `## Cases`,
|
|
163
196
|
`## Images`, and `## Gaps` sections — use these directly as slide material.
|
|
164
197
|
Cross-reference agent findings with workspace documents (Layer 1). Flag any
|
|
@@ -313,8 +346,7 @@ Once the fetch is complete, generate the complete HTML file in one shot.
|
|
|
313
346
|
|
|
314
347
|
- Output **only** the raw HTML — no markdown fences, no explanation before or after
|
|
315
348
|
- Create a `slides/` directory in the current working directory if it doesn't already exist
|
|
316
|
-
- Write the file to `slides
|
|
317
|
-
(e.g. "AI Future" → `slides/ai-future.html`)
|
|
349
|
+
- Write the file to `slides/{slug}.html` using the deck slug confirmed in Phase 1.5
|
|
318
350
|
- The file must be completely self-contained (all CSS and JS inline)
|
|
319
351
|
|
|
320
352
|
### Phase 6 — Iterate
|
|
@@ -325,7 +357,7 @@ After generating, briefly tell the user:
|
|
|
325
357
|
- One line invitation to request changes
|
|
326
358
|
|
|
327
359
|
For change requests: re-generate the **entire** file (don't patch). Apply the
|
|
328
|
-
change and silently overwrite the same `slides
|
|
360
|
+
change and silently overwrite the same `slides/{slug}.html` filename.
|
|
329
361
|
|
|
330
362
|
---
|
|
331
363
|
|
|
@@ -450,130 +482,6 @@ Lowercase, hyphens, no spaces, `.html` extension. Always place files inside the
|
|
|
450
482
|
|
|
451
483
|
---
|
|
452
484
|
|
|
453
|
-
## Design Generation Mode
|
|
454
|
-
|
|
455
|
-
Enter this mode when the user wants to create a new visual design — triggered by
|
|
456
|
-
phrases like "create a design", "save this style as a design", "generate a
|
|
457
|
-
design from this image/screenshot/design", "make a design based on this".
|
|
458
|
-
|
|
459
|
-
Design generation produces a reusable **style definition** (not a full
|
|
460
|
-
presentation). Once saved, the design appears in the design picker and
|
|
461
|
-
applies its visual style to all future presentations.
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
### Phase T1 — Analyse the reference
|
|
466
|
-
|
|
467
|
-
Study the uploaded image(s) or described style and extract:
|
|
468
|
-
|
|
469
|
-
- **Color palette**: exact hex values for background, surface, text (primary +
|
|
470
|
-
secondary), accent, border. If extracting from an image, sample the dominant
|
|
471
|
-
colors precisely.
|
|
472
|
-
- **Typography feel**: serif vs sans-serif, weight choices, size hierarchy.
|
|
473
|
-
Pick real web fonts from Fontshare (`https://api.fontshare.com`) or Google
|
|
474
|
-
Fonts that match the feel — never use system fonts.
|
|
475
|
-
- **Layout density**: generous whitespace vs compact, centered vs left-aligned.
|
|
476
|
-
- **Animation mood**: subtle & professional, bold & energetic, or minimal
|
|
477
|
-
(no animation).
|
|
478
|
-
- **Aesthetic name**: 2–3 words in kebab-case that describe the look, e.g.
|
|
479
|
-
`warm-editorial`, `neon-brutalist`, `soft-corporate`. Never include the word
|
|
480
|
-
"design".
|
|
481
|
-
|
|
482
|
-
Briefly tell the user what you extracted (palette, fonts, mood) and the name
|
|
483
|
-
you chose. Ask if they want any adjustments before proceeding.
|
|
484
|
-
|
|
485
|
-
---
|
|
486
|
-
|
|
487
|
-
### Phase T2 — Generate skill text
|
|
488
|
-
|
|
489
|
-
Write the complete DESIGN.md body for the new design. Use the **default design's
|
|
490
|
-
DESIGN.md** as the canonical reference for section structure. Your output must
|
|
491
|
-
include all of the same sections: Color Palette, Typography, Background Layers,
|
|
492
|
-
Slide Layout, Component Library, Layout Primitives, Data Visualization (ECharts),
|
|
493
|
-
Composition Guide, Code Blocks, Do & Don't, Reduced Motion.
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
### Phase T3 — Generate preview.html
|
|
498
|
-
|
|
499
|
-
Write a self-contained HTML file with **at least 7 slides** that demonstrates
|
|
500
|
-
the design can handle all common presentation content types:
|
|
501
|
-
|
|
502
|
-
1. **Cover** — title, subtitle, date/author
|
|
503
|
-
2. **Content with parallel items** — multiple items presented side by side
|
|
504
|
-
(e.g., features, principles, team members)
|
|
505
|
-
3. **Content with quantitative data** — large numbers, metrics, or statistics
|
|
506
|
-
4. **Content with two distinct areas** — narrative paired with supporting
|
|
507
|
-
evidence, or data paired with explanation
|
|
508
|
-
5. **Content with sequential process** — ordered steps or timeline
|
|
509
|
-
6. **Content with a quote or key message** — emphasis on a single statement
|
|
510
|
-
7. **Closing** — thank you, CTA, or summary
|
|
511
|
-
|
|
512
|
-
Rules:
|
|
513
|
-
- Use the exact CSS variables from the skill text you just generated
|
|
514
|
-
- Each slide should demonstrate the design's visual style — collectively
|
|
515
|
-
showcase all components at least once (cards, stat cards, quote block,
|
|
516
|
-
step flow, evidence lists, chart containers, decorative fills, etc.)
|
|
517
|
-
- Must use the 1920×1080 canvas with `transform: scale()` and `setupScaling()` JS
|
|
518
|
-
- Must look great at 900×600px (DesignModal preview iframe size — canvas auto-scales)
|
|
519
|
-
- Include working keyboard navigation, nav dots, and progress bar
|
|
520
|
-
|
|
521
|
-
---
|
|
522
|
-
|
|
523
|
-
### Phase T4 — Save the design
|
|
524
|
-
|
|
525
|
-
Save the new design by writing the files and installing via the `designs` tool.
|
|
526
|
-
|
|
527
|
-
**Step 1 — Write files to a temporary directory:**
|
|
528
|
-
|
|
529
|
-
Create a temporary directory and write two files:
|
|
530
|
-
- `DESIGN.md` — with YAML frontmatter (`name`, `description`, `author`, `version`)
|
|
531
|
-
followed by the full skill text body from Phase T2
|
|
532
|
-
- `preview.html` — the full HTML from Phase T3
|
|
533
|
-
|
|
534
|
-
```
|
|
535
|
-
/tmp/revela-design-<name>/
|
|
536
|
-
├── DESIGN.md
|
|
537
|
-
└── preview.html
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
**Step 2 — Install the design:**
|
|
541
|
-
|
|
542
|
-
Call the `designs` tool with action `"install"` and `source` pointing to the
|
|
543
|
-
temporary directory path. Optionally pass `name` to override the design name.
|
|
544
|
-
|
|
545
|
-
**Step 3 — Activate the design:**
|
|
546
|
-
|
|
547
|
-
Call the `designs` tool with action `"activate"` and the design name.
|
|
548
|
-
|
|
549
|
-
**Step 4 — Clean up:**
|
|
550
|
-
|
|
551
|
-
Remove the temporary directory.
|
|
552
|
-
|
|
553
|
-
---
|
|
554
|
-
|
|
555
|
-
### Phase T5 — Confirm
|
|
556
|
-
|
|
557
|
-
Tell the user:
|
|
558
|
-
|
|
559
|
-
> Design **`<name>`** has been created and activated.
|
|
560
|
-
> Open the design picker (the design button in the bottom bar) to see it.
|
|
561
|
-
> Your next presentation will use this style automatically.
|
|
562
|
-
|
|
563
|
-
Do not generate a presentation unless the user asks for one.
|
|
564
|
-
|
|
565
|
-
---
|
|
566
|
-
|
|
567
|
-
### Design Generation Rules
|
|
568
|
-
|
|
569
|
-
- **Never** hardcode colors — always use CSS custom properties.
|
|
570
|
-
- **Never** name a design after a brand or person. Use descriptive aesthetic names.
|
|
571
|
-
- The `skill_md` you generate becomes the AI's only style reference — be precise.
|
|
572
|
-
- preview.html must use the **exact same CSS variables** as the skill text.
|
|
573
|
-
- If the user uploads multiple images with conflicting styles, ask which one to use.
|
|
574
|
-
|
|
575
|
-
---
|
|
576
|
-
|
|
577
485
|
## Active Design Reference
|
|
578
486
|
|
|
579
487
|
The active design name is in the HTML comment at the top of this prompt:
|