@tienne/gestalt 0.16.0 → 0.18.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/dist/package.json +1 -4
- package/dist/role-agents/presentation-designer/AGENT.md +211 -0
- package/dist/role-agents/presentation-designer/templates/broadside.html +292 -0
- package/dist/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
- package/dist/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
- package/dist/role-agents/presentation-designer/templates/neo-grid.html +407 -0
- package/dist/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
- package/dist/role-agents/presentation-designer/templates/pink-script.html +241 -0
- package/dist/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
- package/dist/role-agents/presentation-designer/templates/signal.html +403 -0
- package/dist/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
- package/dist/role-agents/presentation-designer/templates/studio.html +379 -0
- package/dist/skills/agent/SKILL.md +2 -0
- package/dist/skills/seed/SKILL.md +92 -0
- package/dist/src/cli/commands/seed.d.ts +4 -0
- package/dist/src/cli/commands/seed.d.ts.map +1 -0
- package/dist/src/cli/commands/seed.js +34 -0
- package/dist/src/cli/commands/seed.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +0 -7
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/interview/ambiguity.d.ts +8 -0
- package/dist/src/interview/ambiguity.d.ts.map +1 -0
- package/dist/src/interview/ambiguity.js +69 -0
- package/dist/src/interview/ambiguity.js.map +1 -0
- package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
- package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
- package/dist/src/mcp/tools/seed-passthrough.js +29 -0
- package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
- package/dist/src/mcp/tools/seed.d.ts +5 -0
- package/dist/src/mcp/tools/seed.d.ts.map +1 -0
- package/dist/src/mcp/tools/seed.js +19 -0
- package/dist/src/mcp/tools/seed.js.map +1 -0
- package/dist/src/recording/agg-converter.d.ts +25 -0
- package/dist/src/recording/agg-converter.d.ts.map +1 -0
- package/dist/src/recording/agg-converter.js +80 -0
- package/dist/src/recording/agg-converter.js.map +1 -0
- package/dist/src/recording/agg-installer.d.ts +6 -0
- package/dist/src/recording/agg-installer.d.ts.map +1 -0
- package/dist/src/recording/agg-installer.js +50 -0
- package/dist/src/recording/agg-installer.js.map +1 -0
- package/dist/src/recording/asciinema-installer.d.ts +6 -0
- package/dist/src/recording/asciinema-installer.d.ts.map +1 -0
- package/dist/src/recording/asciinema-installer.js +50 -0
- package/dist/src/recording/asciinema-installer.js.map +1 -0
- package/dist/src/recording/asciinema-recorder.d.ts +26 -0
- package/dist/src/recording/asciinema-recorder.d.ts.map +1 -0
- package/dist/src/recording/asciinema-recorder.js +52 -0
- package/dist/src/recording/asciinema-recorder.js.map +1 -0
- package/dist/src/recording/cast-generator.d.ts +7 -0
- package/dist/src/recording/cast-generator.d.ts.map +1 -0
- package/dist/src/recording/cast-generator.js +97 -0
- package/dist/src/recording/cast-generator.js.map +1 -0
- package/dist/src/recording/filename-generator.d.ts +19 -0
- package/dist/src/recording/filename-generator.d.ts.map +1 -0
- package/dist/src/recording/filename-generator.js +67 -0
- package/dist/src/recording/filename-generator.js.map +1 -0
- package/dist/src/recording/gif-generator.d.ts +21 -0
- package/dist/src/recording/gif-generator.d.ts.map +1 -0
- package/dist/src/recording/gif-generator.js +121 -0
- package/dist/src/recording/gif-generator.js.map +1 -0
- package/dist/src/recording/recording-dir.d.ts +5 -0
- package/dist/src/recording/recording-dir.d.ts.map +1 -0
- package/dist/src/recording/recording-dir.js +13 -0
- package/dist/src/recording/recording-dir.js.map +1 -0
- package/dist/src/recording/recording-orchestrator.d.ts +50 -0
- package/dist/src/recording/recording-orchestrator.d.ts.map +1 -0
- package/dist/src/recording/recording-orchestrator.js +98 -0
- package/dist/src/recording/recording-orchestrator.js.map +1 -0
- package/dist/src/recording/resume-detector.d.ts +10 -0
- package/dist/src/recording/resume-detector.d.ts.map +1 -0
- package/dist/src/recording/resume-detector.js +14 -0
- package/dist/src/recording/resume-detector.js.map +1 -0
- package/dist/src/recording/segment-merger.d.ts +27 -0
- package/dist/src/recording/segment-merger.d.ts.map +1 -0
- package/dist/src/recording/segment-merger.js +65 -0
- package/dist/src/recording/segment-merger.js.map +1 -0
- package/dist/src/recording/terminal-recorder.d.ts +31 -0
- package/dist/src/recording/terminal-recorder.d.ts.map +1 -0
- package/dist/src/recording/terminal-recorder.js +111 -0
- package/dist/src/recording/terminal-recorder.js.map +1 -0
- package/dist/src/scripts/postinstall.d.ts +2 -0
- package/dist/src/scripts/postinstall.d.ts.map +1 -0
- package/dist/src/scripts/postinstall.js +29 -0
- package/dist/src/scripts/postinstall.js.map +1 -0
- package/dist/src/seed/extractor.d.ts +15 -0
- package/dist/src/seed/extractor.d.ts.map +1 -0
- package/dist/src/seed/extractor.js +88 -0
- package/dist/src/seed/extractor.js.map +1 -0
- package/dist/src/seed/generator.d.ts +12 -0
- package/dist/src/seed/generator.d.ts.map +1 -0
- package/dist/src/seed/generator.js +66 -0
- package/dist/src/seed/generator.js.map +1 -0
- package/dist/src/seed/passthrough-generator.d.ts +31 -0
- package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
- package/dist/src/seed/passthrough-generator.js +80 -0
- package/dist/src/seed/passthrough-generator.js.map +1 -0
- package/dist/src/seed/schema.d.ts +145 -0
- package/dist/src/seed/schema.d.ts.map +1 -0
- package/dist/src/seed/schema.js +37 -0
- package/dist/src/seed/schema.js.map +1 -0
- package/package.json +1 -4
- package/role-agents/presentation-designer/AGENT.md +211 -0
- package/role-agents/presentation-designer/templates/broadside.html +292 -0
- package/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
- package/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
- package/role-agents/presentation-designer/templates/neo-grid.html +407 -0
- package/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
- package/role-agents/presentation-designer/templates/pink-script.html +241 -0
- package/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
- package/role-agents/presentation-designer/templates/signal.html +403 -0
- package/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
- package/role-agents/presentation-designer/templates/studio.html +379 -0
- package/skills/agent/SKILL.md +2 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="ko">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>Studio — Reveal.js</title>
|
|
6
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;700;800;900&family=IBM+Plex+Mono:wght@300;400;500&display=swap" rel="stylesheet" />
|
|
9
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.css" />
|
|
10
|
+
<style>
|
|
11
|
+
/* ── DESIGN TOKENS ────────────────────────────────────────────── */
|
|
12
|
+
:root {
|
|
13
|
+
--c-bg: #1c1c1c;
|
|
14
|
+
--c-bg-alt: #242422;
|
|
15
|
+
--c-bg-light: #f5d200;
|
|
16
|
+
--c-bg-light-alt: #f0cc00;
|
|
17
|
+
--c-fg: #f5d200;
|
|
18
|
+
--c-fg-2: rgba(245, 210, 0, 0.58);
|
|
19
|
+
--c-fg-3: rgba(245, 210, 0, 0.32);
|
|
20
|
+
--c-fg-light: #1c1c1c;
|
|
21
|
+
--c-fg-light-2: rgba(28, 28, 28, 0.62);
|
|
22
|
+
--c-fg-light-3: rgba(28, 28, 28, 0.35);
|
|
23
|
+
--c-accent: #f5d200;
|
|
24
|
+
--c-border: #2e2e2c;
|
|
25
|
+
--c-border-light: rgba(28, 28, 28, 0.18);
|
|
26
|
+
--f-display: "Barlow", sans-serif;
|
|
27
|
+
--f-body: "Barlow", sans-serif;
|
|
28
|
+
--f-mono: "IBM Plex Mono", monospace;
|
|
29
|
+
--sz-display: 12vw;
|
|
30
|
+
--sz-h1: 7.5vw;
|
|
31
|
+
--sz-h2: 4.8vw;
|
|
32
|
+
--sz-h3: 2.8vw;
|
|
33
|
+
--sz-lead: 1.6vw;
|
|
34
|
+
--sz-body: 1.15vw;
|
|
35
|
+
--sz-caption: 0.85vw;
|
|
36
|
+
--sz-label: 0.72vw;
|
|
37
|
+
--pad-x: 5vw;
|
|
38
|
+
--pad-y: 5vh;
|
|
39
|
+
--gap-lg: 3.5vh;
|
|
40
|
+
--gap-md: 2vh;
|
|
41
|
+
--gap-sm: 1vh;
|
|
42
|
+
--ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* ── REVEAL RESET ─────────────────────────────────────────────── */
|
|
46
|
+
.reveal { font-family: var(--f-body); }
|
|
47
|
+
.reveal .slides { text-align: left; }
|
|
48
|
+
.reveal .slides section {
|
|
49
|
+
box-sizing: border-box;
|
|
50
|
+
width: 100%;
|
|
51
|
+
height: 100%;
|
|
52
|
+
padding: var(--pad-y) var(--pad-x);
|
|
53
|
+
display: grid;
|
|
54
|
+
grid-template-rows: auto 1fr auto;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
top: 0 !important;
|
|
57
|
+
left: 0 !important;
|
|
58
|
+
}
|
|
59
|
+
.reveal h1, .reveal h2, .reveal h3, .reveal h4,
|
|
60
|
+
.reveal p, .reveal ul, .reveal ol { margin: 0; }
|
|
61
|
+
.reveal .slides section.dark { background: var(--c-bg); color: var(--c-fg); }
|
|
62
|
+
.reveal .slides section.light { background: var(--c-bg-light); color: var(--c-fg-light); }
|
|
63
|
+
|
|
64
|
+
/* ── CHROME / FOOTER ──────────────────────────────────────────── */
|
|
65
|
+
.slide-chrome, .slide-foot {
|
|
66
|
+
display: flex;
|
|
67
|
+
justify-content: space-between;
|
|
68
|
+
align-items: center;
|
|
69
|
+
position: relative;
|
|
70
|
+
z-index: 1;
|
|
71
|
+
}
|
|
72
|
+
.dark .slide-chrome { border-bottom: 1px solid var(--c-border); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
|
|
73
|
+
.dark .slide-foot { border-top: 1px solid var(--c-border); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
|
|
74
|
+
.light .slide-chrome { border-bottom: 1px solid var(--c-border-light); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
|
|
75
|
+
.light .slide-foot { border-top: 1px solid var(--c-border-light); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
|
|
76
|
+
.slide-body { min-height: 0; }
|
|
77
|
+
|
|
78
|
+
/* ── SLIDE VARIANTS ───────────────────────────────────────────── */
|
|
79
|
+
.slide--cover, .slide--chapter, .slide--quote, .slide--end, .slide--statement {
|
|
80
|
+
display: flex !important;
|
|
81
|
+
flex-direction: column;
|
|
82
|
+
}
|
|
83
|
+
.slide--cover .slide-chrome, .slide--cover .slide-foot,
|
|
84
|
+
.slide--chapter .slide-chrome, .slide--chapter .slide-foot,
|
|
85
|
+
.slide--quote .slide-chrome, .slide--quote .slide-foot,
|
|
86
|
+
.slide--end .slide-chrome, .slide--end .slide-foot,
|
|
87
|
+
.slide--statement .slide-chrome, .slide--statement .slide-foot { display: none; }
|
|
88
|
+
|
|
89
|
+
.slide--cover { justify-content: flex-end; }
|
|
90
|
+
.slide--chapter { justify-content: flex-end; }
|
|
91
|
+
.slide--statement { justify-content: center; }
|
|
92
|
+
.slide--quote { justify-content: center; }
|
|
93
|
+
.slide--end { justify-content: space-between; }
|
|
94
|
+
|
|
95
|
+
.slide--split .slide-body { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gap-md); align-items: center; }
|
|
96
|
+
.slide--stats .slide-body { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--gap-md); }
|
|
97
|
+
.slide--list .slide-body { display: grid; grid-template-columns: 2fr 3fr; gap: var(--gap-md); }
|
|
98
|
+
.slide--compare .slide-body { display: grid; grid-template-columns: 1fr 1fr; height: 100%; }
|
|
99
|
+
|
|
100
|
+
/* ── TYPOGRAPHY ───────────────────────────────────────────────── */
|
|
101
|
+
.display { font-size: var(--sz-display); font-weight: 900; line-height: 0.9; letter-spacing: -0.02em; text-transform: uppercase; }
|
|
102
|
+
.h1 { font-size: var(--sz-h1); font-weight: 900; line-height: 0.92; letter-spacing: -0.02em; text-transform: uppercase; }
|
|
103
|
+
.h2 { font-size: var(--sz-h2); font-weight: 900; line-height: 0.95; letter-spacing: -0.01em; text-transform: uppercase; }
|
|
104
|
+
.h3 { font-size: var(--sz-h3); font-weight: 700; line-height: 1.1; text-transform: uppercase; }
|
|
105
|
+
.lead { font-size: var(--sz-lead); font-weight: 500; line-height: 1.45; }
|
|
106
|
+
.body { font-size: var(--sz-body); font-weight: 400; line-height: 1.6; }
|
|
107
|
+
.caption { font-size: var(--sz-caption); line-height: 1.5; }
|
|
108
|
+
.label { font-family: var(--f-mono); font-size: var(--sz-label); font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; }
|
|
109
|
+
.kicker { font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.12em; text-transform: uppercase; color: var(--c-accent); display: block; margin-bottom: var(--gap-sm); }
|
|
110
|
+
.dark .kicker { color: var(--c-accent); }
|
|
111
|
+
.light .kicker { color: var(--c-fg-light-2); }
|
|
112
|
+
.muted { opacity: 0.55; }
|
|
113
|
+
.accent { color: var(--c-accent); }
|
|
114
|
+
|
|
115
|
+
/* ── COMPONENTS ───────────────────────────────────────────────── */
|
|
116
|
+
.rule { width: 36px; height: 2px; background: var(--c-accent); margin: var(--gap-sm) 0; }
|
|
117
|
+
.light .rule { background: var(--c-fg-light); }
|
|
118
|
+
|
|
119
|
+
.img-placeholder {
|
|
120
|
+
background: var(--c-bg-alt);
|
|
121
|
+
width: 100%; height: 100%; min-height: 25vh;
|
|
122
|
+
display: flex; align-items: center; justify-content: center;
|
|
123
|
+
font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.1em;
|
|
124
|
+
color: var(--c-fg-3);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.bullet-list { list-style: none; padding: 0; display: flex; flex-direction: column; gap: var(--gap-sm); }
|
|
128
|
+
.bullet-list li { display: flex; gap: 0.75em; font-size: var(--sz-body); line-height: 1.6; }
|
|
129
|
+
.dark .bullet-list li::before { content: "—"; color: var(--c-accent); flex-shrink: 0; }
|
|
130
|
+
.light .bullet-list li::before { content: "—"; color: var(--c-fg-light); flex-shrink: 0; }
|
|
131
|
+
|
|
132
|
+
.stat-val { font-size: 6vw; font-weight: 900; line-height: 1; }
|
|
133
|
+
.stat-unit { font-size: 2.5vw; font-weight: 900; }
|
|
134
|
+
|
|
135
|
+
/* ── BAR CHART ────────────────────────────────────────────────── */
|
|
136
|
+
.bar-chart { display: flex; align-items: flex-end; gap: 1.5vw; height: 22vh; }
|
|
137
|
+
.bar-col { display: flex; flex-direction: column; align-items: center; gap: 0.5vh; flex: 1; }
|
|
138
|
+
.bar-track { flex: 1; width: 100%; display: flex; align-items: flex-end; border-left: 2px solid var(--c-fg-3); }
|
|
139
|
+
.bar-fill { width: 100%; background: var(--c-fg-3); transition: height 0.6s var(--ease-enter); }
|
|
140
|
+
.bar-fill.hi { background: var(--c-accent); }
|
|
141
|
+
.bar-label { font-family: var(--f-mono); font-size: 0.65vw; text-align: center; opacity: 0.6; }
|
|
142
|
+
|
|
143
|
+
/* ── ANIMATIONS ───────────────────────────────────────────────── */
|
|
144
|
+
[data-anim] { opacity: 0; animation-fill-mode: forwards; animation-timing-function: var(--ease-enter); animation-duration: 0.55s; }
|
|
145
|
+
[data-anim][data-delay="0"] { animation-delay: 0s; }
|
|
146
|
+
[data-anim][data-delay="1"] { animation-delay: 0.08s; }
|
|
147
|
+
[data-anim][data-delay="2"] { animation-delay: 0.18s; }
|
|
148
|
+
[data-anim][data-delay="3"] { animation-delay: 0.3s; }
|
|
149
|
+
[data-anim][data-delay="4"] { animation-delay: 0.44s; }
|
|
150
|
+
[data-anim][data-delay="5"] { animation-delay: 0.6s; }
|
|
151
|
+
.reveal .present [data-anim="fade-up"] { animation-name: kFadeUp; }
|
|
152
|
+
.reveal .present [data-anim="fade-in"] { animation-name: kFadeIn; }
|
|
153
|
+
.reveal .present [data-anim="reveal-right"] { animation-name: kRevealRight; opacity: 1; }
|
|
154
|
+
.reveal .present [data-anim="scale-in"] { animation-name: kScaleIn; }
|
|
155
|
+
@keyframes kFadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
|
|
156
|
+
@keyframes kFadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
157
|
+
@keyframes kRevealRight { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
|
|
158
|
+
@keyframes kScaleIn { from { opacity: 0; transform: scale(0.94); } to { opacity: 1; transform: none; } }
|
|
159
|
+
|
|
160
|
+
/* ── REVEAL UI OVERRIDES ──────────────────────────────────────── */
|
|
161
|
+
.reveal .controls { color: var(--c-accent); }
|
|
162
|
+
.reveal .progress { color: var(--c-accent); }
|
|
163
|
+
.reveal .slide-number { font-family: var(--f-mono); background: transparent; color: var(--c-fg-3); font-size: 0.6em; }
|
|
164
|
+
</style>
|
|
165
|
+
</head>
|
|
166
|
+
<body style="margin:0;background:#111">
|
|
167
|
+
<div class="reveal">
|
|
168
|
+
<div class="slides">
|
|
169
|
+
|
|
170
|
+
<!-- ════════════════════════════════════════════════
|
|
171
|
+
COVER — image + overlay text
|
|
172
|
+
════════════════════════════════════════════════ -->
|
|
173
|
+
<section class="dark slide--cover">
|
|
174
|
+
<div style="flex:1;position:relative">
|
|
175
|
+
<div class="img-placeholder">IMAGE</div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="slide-body" style="padding-top:var(--gap-md)">
|
|
178
|
+
<span class="kicker" data-anim="fade-in" data-delay="0">{{ORGANIZATION}}</span>
|
|
179
|
+
<div class="display" data-anim="fade-up" data-delay="1">{{TITLE}}</div>
|
|
180
|
+
<div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:1.5vh"></div>
|
|
181
|
+
<div style="display:flex;justify-content:space-between;margin-top:1.5vh" data-anim="fade-in" data-delay="3">
|
|
182
|
+
<span class="label muted">{{DATE}}</span>
|
|
183
|
+
<span class="label muted">{{AUTHOR}}</span>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</section>
|
|
187
|
+
|
|
188
|
+
<!-- ════════════════════════════════════════════════
|
|
189
|
+
CHAPTER DIVIDER (light background)
|
|
190
|
+
════════════════════════════════════════════════ -->
|
|
191
|
+
<section class="light slide--chapter">
|
|
192
|
+
<div class="slide-body" style="display:flex;flex-direction:column;justify-content:flex-end;gap:var(--gap-sm)">
|
|
193
|
+
<span class="kicker" data-anim="fade-in" data-delay="0">01 — 섹션명</span>
|
|
194
|
+
<div class="h1" data-anim="fade-up" data-delay="1">챕터<br>제목</div>
|
|
195
|
+
<div class="rule" data-anim="reveal-right" data-delay="2"></div>
|
|
196
|
+
<p class="body muted" data-anim="fade-up" data-delay="3">서브 설명</p>
|
|
197
|
+
</div>
|
|
198
|
+
</section>
|
|
199
|
+
|
|
200
|
+
<!-- ════════════════════════════════════════════════
|
|
201
|
+
STATS — 3-column (dark)
|
|
202
|
+
════════════════════════════════════════════════ -->
|
|
203
|
+
<section class="dark">
|
|
204
|
+
<div class="slide-chrome">
|
|
205
|
+
<span class="label muted">{{SECTION_LABEL}}</span>
|
|
206
|
+
<span class="label muted">01 / 지표</span>
|
|
207
|
+
</div>
|
|
208
|
+
<div class="slide-body slide--stats">
|
|
209
|
+
<div style="border-top:1px solid var(--c-border);padding-top:var(--gap-sm)" data-anim="fade-up" data-delay="1">
|
|
210
|
+
<div class="stat-val accent">98<span class="stat-unit">%</span></div>
|
|
211
|
+
<div class="rule"></div>
|
|
212
|
+
<p class="body" style="margin-top:var(--gap-sm)">지표명</p>
|
|
213
|
+
<p class="caption muted">전기 대비 +12%p</p>
|
|
214
|
+
</div>
|
|
215
|
+
<div style="border-top:1px solid var(--c-border);padding-top:var(--gap-sm)" data-anim="fade-up" data-delay="2">
|
|
216
|
+
<div class="stat-val accent">2.4<span class="stat-unit">s</span></div>
|
|
217
|
+
<div class="rule"></div>
|
|
218
|
+
<p class="body" style="margin-top:var(--gap-sm)">지표명</p>
|
|
219
|
+
<p class="caption muted">목표치 3s 달성</p>
|
|
220
|
+
</div>
|
|
221
|
+
<div style="border-top:1px solid var(--c-border);padding-top:var(--gap-sm)" data-anim="fade-up" data-delay="3">
|
|
222
|
+
<div class="stat-val accent">41</div>
|
|
223
|
+
<div class="rule"></div>
|
|
224
|
+
<p class="body" style="margin-top:var(--gap-sm)">지표명</p>
|
|
225
|
+
<p class="caption muted">누적 총 186개</p>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="slide-foot">
|
|
229
|
+
<span class="label muted">{{ORG}} · {{DATE}}</span>
|
|
230
|
+
</div>
|
|
231
|
+
</section>
|
|
232
|
+
|
|
233
|
+
<!-- ════════════════════════════════════════════════
|
|
234
|
+
SPLIT — text + list (light)
|
|
235
|
+
════════════════════════════════════════════════ -->
|
|
236
|
+
<section class="light">
|
|
237
|
+
<div class="slide-chrome">
|
|
238
|
+
<span class="label" style="color:var(--c-fg-light-2)">{{SECTION_LABEL}}</span>
|
|
239
|
+
<span class="label" style="color:var(--c-fg-light-3)">01 / 분석</span>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="slide-body slide--split">
|
|
242
|
+
<div data-anim="fade-up" data-delay="1">
|
|
243
|
+
<span class="kicker">Topic</span>
|
|
244
|
+
<div class="h2">슬라이드<br>제목</div>
|
|
245
|
+
<div class="rule"></div>
|
|
246
|
+
</div>
|
|
247
|
+
<div data-anim="fade-up" data-delay="2">
|
|
248
|
+
<ul class="bullet-list">
|
|
249
|
+
<li>항목 1 — 설명</li>
|
|
250
|
+
<li>항목 2 — 설명</li>
|
|
251
|
+
<li>항목 3 — 설명</li>
|
|
252
|
+
<li>항목 4 — 설명</li>
|
|
253
|
+
</ul>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
<div class="slide-foot" style="border-color:var(--c-border-light)">
|
|
257
|
+
<span class="label" style="color:var(--c-fg-light-3)">{{ORG}} · {{DATE}}</span>
|
|
258
|
+
</div>
|
|
259
|
+
</section>
|
|
260
|
+
|
|
261
|
+
<!-- ════════════════════════════════════════════════
|
|
262
|
+
BAR CHART (dark)
|
|
263
|
+
════════════════════════════════════════════════ -->
|
|
264
|
+
<section class="dark">
|
|
265
|
+
<div class="slide-chrome">
|
|
266
|
+
<span class="label muted">{{SECTION_LABEL}}</span>
|
|
267
|
+
<span class="label muted">01 / 데이터</span>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="slide-body" style="display:flex;flex-direction:column;justify-content:flex-end;gap:var(--gap-lg)">
|
|
270
|
+
<div data-anim="fade-up" data-delay="0">
|
|
271
|
+
<span class="kicker">Chart Title</span>
|
|
272
|
+
<div class="h2">데이터 비교</div>
|
|
273
|
+
</div>
|
|
274
|
+
<div class="bar-chart" data-anim="scale-in" data-delay="2">
|
|
275
|
+
<div class="bar-col"><div class="bar-track"><div class="bar-fill" style="height:85%"></div></div><span class="bar-label">항목 A</span></div>
|
|
276
|
+
<div class="bar-col"><div class="bar-track"><div class="bar-fill hi" style="height:60%"></div></div><span class="bar-label">항목 B</span></div>
|
|
277
|
+
<div class="bar-col"><div class="bar-track"><div class="bar-fill" style="height:48%"></div></div><span class="bar-label">항목 C</span></div>
|
|
278
|
+
<div class="bar-col"><div class="bar-track"><div class="bar-fill" style="height:38%"></div></div><span class="bar-label">항목 D</span></div>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
<div class="slide-foot">
|
|
282
|
+
<span class="label muted">{{ORG}} · {{DATE}}</span>
|
|
283
|
+
</div>
|
|
284
|
+
</section>
|
|
285
|
+
|
|
286
|
+
<!-- ════════════════════════════════════════════════
|
|
287
|
+
LIST — heading + bullets (dark)
|
|
288
|
+
════════════════════════════════════════════════ -->
|
|
289
|
+
<section class="dark">
|
|
290
|
+
<div class="slide-chrome">
|
|
291
|
+
<span class="label muted">{{SECTION_LABEL}}</span>
|
|
292
|
+
<span class="label muted">02 / 계획</span>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="slide-body slide--list">
|
|
295
|
+
<div data-anim="fade-up" data-delay="1">
|
|
296
|
+
<span class="kicker">{{PERIOD}}</span>
|
|
297
|
+
<div class="h2">주요<br>과제</div>
|
|
298
|
+
<div class="rule"></div>
|
|
299
|
+
</div>
|
|
300
|
+
<div data-anim="fade-up" data-delay="2">
|
|
301
|
+
<ul class="bullet-list">
|
|
302
|
+
<li>할 일 1</li>
|
|
303
|
+
<li>할 일 2</li>
|
|
304
|
+
<li>할 일 3</li>
|
|
305
|
+
<li>할 일 4</li>
|
|
306
|
+
<li>할 일 5</li>
|
|
307
|
+
</ul>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
<div class="slide-foot">
|
|
311
|
+
<span class="label muted">{{ORG}} · {{DATE}}</span>
|
|
312
|
+
</div>
|
|
313
|
+
</section>
|
|
314
|
+
|
|
315
|
+
<!-- ════════════════════════════════════════════════
|
|
316
|
+
STATEMENT — full-screen (dark)
|
|
317
|
+
════════════════════════════════════════════════ -->
|
|
318
|
+
<section class="dark slide--statement">
|
|
319
|
+
<div class="slide-body" style="display:flex;flex-direction:column;justify-content:center">
|
|
320
|
+
<div class="display" data-anim="fade-up" data-delay="0">선언문<br>또는 테제</div>
|
|
321
|
+
<div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:2vh"></div>
|
|
322
|
+
<p class="body muted" data-anim="fade-up" data-delay="3" style="margin-top:var(--gap-sm)">— 출처 / 맥락</p>
|
|
323
|
+
</div>
|
|
324
|
+
</section>
|
|
325
|
+
|
|
326
|
+
<!-- ════════════════════════════════════════════════
|
|
327
|
+
QUOTE (dark)
|
|
328
|
+
════════════════════════════════════════════════ -->
|
|
329
|
+
<section class="dark slide--quote">
|
|
330
|
+
<div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-md)">
|
|
331
|
+
<div class="rule" data-anim="reveal-right" data-delay="0"></div>
|
|
332
|
+
<div class="h1" data-anim="fade-up" data-delay="1">"인용문을<br>크게 보여줄 때"</div>
|
|
333
|
+
<p class="label muted" data-anim="fade-in" data-delay="3">— 발언자, 맥락</p>
|
|
334
|
+
</div>
|
|
335
|
+
</section>
|
|
336
|
+
|
|
337
|
+
<!-- ════════════════════════════════════════════════
|
|
338
|
+
END / Q&A (light)
|
|
339
|
+
════════════════════════════════════════════════ -->
|
|
340
|
+
<section class="light slide--end">
|
|
341
|
+
<div style="padding-top:var(--pad-y)" data-anim="fade-up" data-delay="0">
|
|
342
|
+
<span class="kicker">감사합니다</span>
|
|
343
|
+
<div class="display">Q&A</div>
|
|
344
|
+
<div class="rule" style="margin-top:2vh"></div>
|
|
345
|
+
</div>
|
|
346
|
+
<div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-md);padding-bottom:var(--pad-y)" data-anim="fade-up" data-delay="2">
|
|
347
|
+
<div>
|
|
348
|
+
<p class="label" style="color:var(--c-fg-light-2)">이메일</p>
|
|
349
|
+
<p class="body">{{EMAIL}}</p>
|
|
350
|
+
</div>
|
|
351
|
+
<div>
|
|
352
|
+
<p class="label" style="color:var(--c-fg-light-2)">소속</p>
|
|
353
|
+
<p class="body">{{ORG}}</p>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</section>
|
|
357
|
+
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
|
|
361
|
+
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
|
|
362
|
+
<script>
|
|
363
|
+
Reveal.initialize({
|
|
364
|
+
hash: true,
|
|
365
|
+
width: 1600,
|
|
366
|
+
height: 900,
|
|
367
|
+
margin: 0,
|
|
368
|
+
minScale: 0.1,
|
|
369
|
+
maxScale: 1.5,
|
|
370
|
+
controls: true,
|
|
371
|
+
progress: true,
|
|
372
|
+
slideNumber: 'c/t',
|
|
373
|
+
transition: 'fade',
|
|
374
|
+
backgroundTransition: 'fade',
|
|
375
|
+
plugins: [RevealNotes],
|
|
376
|
+
});
|
|
377
|
+
</script>
|
|
378
|
+
</body>
|
|
379
|
+
</html>
|
package/skills/agent/SKILL.md
CHANGED
|
@@ -35,6 +35,7 @@ Invoke any Gestalt Role or Review agent directly, outside the Gestalt pipeline.
|
|
|
35
35
|
/agent backend-developer "is this REST API design consistent?"
|
|
36
36
|
/agent qa-engineer "what edge cases am I missing for this login flow?"
|
|
37
37
|
/agent frontend-developer "review this React component for accessibility issues"
|
|
38
|
+
/agent presentation-designer "분기 실적 발표용 Reveal.js 슬라이드 구조 설계해줘"
|
|
38
39
|
|
|
39
40
|
# Run a Review Agent
|
|
40
41
|
/agent security-reviewer "check this authentication code for vulnerabilities"
|
|
@@ -53,6 +54,7 @@ Invoke any Gestalt Role or Review agent directly, outside the Gestalt pipeline.
|
|
|
53
54
|
| `backend-developer` | API, database, authentication, server |
|
|
54
55
|
| `frontend-developer` | UI, React, accessibility |
|
|
55
56
|
| `designer` | UX/UI, design systems, interaction |
|
|
57
|
+
| `presentation-designer` | Reveal.js slides, storytelling, visual design for decks |
|
|
56
58
|
| `qa-engineer` | Testing, edge cases, quality |
|
|
57
59
|
| `devops-engineer` | CI/CD, infrastructure, monitoring |
|
|
58
60
|
| `product-planner` | Requirements, roadmap, user stories |
|