@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.
Files changed (114) hide show
  1. package/dist/package.json +1 -4
  2. package/dist/role-agents/presentation-designer/AGENT.md +211 -0
  3. package/dist/role-agents/presentation-designer/templates/broadside.html +292 -0
  4. package/dist/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
  5. package/dist/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
  6. package/dist/role-agents/presentation-designer/templates/neo-grid.html +407 -0
  7. package/dist/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
  8. package/dist/role-agents/presentation-designer/templates/pink-script.html +241 -0
  9. package/dist/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
  10. package/dist/role-agents/presentation-designer/templates/signal.html +403 -0
  11. package/dist/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
  12. package/dist/role-agents/presentation-designer/templates/studio.html +379 -0
  13. package/dist/skills/agent/SKILL.md +2 -0
  14. package/dist/skills/seed/SKILL.md +92 -0
  15. package/dist/src/cli/commands/seed.d.ts +4 -0
  16. package/dist/src/cli/commands/seed.d.ts.map +1 -0
  17. package/dist/src/cli/commands/seed.js +34 -0
  18. package/dist/src/cli/commands/seed.js.map +1 -0
  19. package/dist/src/cli/index.d.ts.map +1 -1
  20. package/dist/src/cli/index.js +0 -7
  21. package/dist/src/cli/index.js.map +1 -1
  22. package/dist/src/interview/ambiguity.d.ts +8 -0
  23. package/dist/src/interview/ambiguity.d.ts.map +1 -0
  24. package/dist/src/interview/ambiguity.js +69 -0
  25. package/dist/src/interview/ambiguity.js.map +1 -0
  26. package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
  27. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
  28. package/dist/src/mcp/tools/seed-passthrough.js +29 -0
  29. package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
  30. package/dist/src/mcp/tools/seed.d.ts +5 -0
  31. package/dist/src/mcp/tools/seed.d.ts.map +1 -0
  32. package/dist/src/mcp/tools/seed.js +19 -0
  33. package/dist/src/mcp/tools/seed.js.map +1 -0
  34. package/dist/src/recording/agg-converter.d.ts +25 -0
  35. package/dist/src/recording/agg-converter.d.ts.map +1 -0
  36. package/dist/src/recording/agg-converter.js +80 -0
  37. package/dist/src/recording/agg-converter.js.map +1 -0
  38. package/dist/src/recording/agg-installer.d.ts +6 -0
  39. package/dist/src/recording/agg-installer.d.ts.map +1 -0
  40. package/dist/src/recording/agg-installer.js +50 -0
  41. package/dist/src/recording/agg-installer.js.map +1 -0
  42. package/dist/src/recording/asciinema-installer.d.ts +6 -0
  43. package/dist/src/recording/asciinema-installer.d.ts.map +1 -0
  44. package/dist/src/recording/asciinema-installer.js +50 -0
  45. package/dist/src/recording/asciinema-installer.js.map +1 -0
  46. package/dist/src/recording/asciinema-recorder.d.ts +26 -0
  47. package/dist/src/recording/asciinema-recorder.d.ts.map +1 -0
  48. package/dist/src/recording/asciinema-recorder.js +52 -0
  49. package/dist/src/recording/asciinema-recorder.js.map +1 -0
  50. package/dist/src/recording/cast-generator.d.ts +7 -0
  51. package/dist/src/recording/cast-generator.d.ts.map +1 -0
  52. package/dist/src/recording/cast-generator.js +97 -0
  53. package/dist/src/recording/cast-generator.js.map +1 -0
  54. package/dist/src/recording/filename-generator.d.ts +19 -0
  55. package/dist/src/recording/filename-generator.d.ts.map +1 -0
  56. package/dist/src/recording/filename-generator.js +67 -0
  57. package/dist/src/recording/filename-generator.js.map +1 -0
  58. package/dist/src/recording/gif-generator.d.ts +21 -0
  59. package/dist/src/recording/gif-generator.d.ts.map +1 -0
  60. package/dist/src/recording/gif-generator.js +121 -0
  61. package/dist/src/recording/gif-generator.js.map +1 -0
  62. package/dist/src/recording/recording-dir.d.ts +5 -0
  63. package/dist/src/recording/recording-dir.d.ts.map +1 -0
  64. package/dist/src/recording/recording-dir.js +13 -0
  65. package/dist/src/recording/recording-dir.js.map +1 -0
  66. package/dist/src/recording/recording-orchestrator.d.ts +50 -0
  67. package/dist/src/recording/recording-orchestrator.d.ts.map +1 -0
  68. package/dist/src/recording/recording-orchestrator.js +98 -0
  69. package/dist/src/recording/recording-orchestrator.js.map +1 -0
  70. package/dist/src/recording/resume-detector.d.ts +10 -0
  71. package/dist/src/recording/resume-detector.d.ts.map +1 -0
  72. package/dist/src/recording/resume-detector.js +14 -0
  73. package/dist/src/recording/resume-detector.js.map +1 -0
  74. package/dist/src/recording/segment-merger.d.ts +27 -0
  75. package/dist/src/recording/segment-merger.d.ts.map +1 -0
  76. package/dist/src/recording/segment-merger.js +65 -0
  77. package/dist/src/recording/segment-merger.js.map +1 -0
  78. package/dist/src/recording/terminal-recorder.d.ts +31 -0
  79. package/dist/src/recording/terminal-recorder.d.ts.map +1 -0
  80. package/dist/src/recording/terminal-recorder.js +111 -0
  81. package/dist/src/recording/terminal-recorder.js.map +1 -0
  82. package/dist/src/scripts/postinstall.d.ts +2 -0
  83. package/dist/src/scripts/postinstall.d.ts.map +1 -0
  84. package/dist/src/scripts/postinstall.js +29 -0
  85. package/dist/src/scripts/postinstall.js.map +1 -0
  86. package/dist/src/seed/extractor.d.ts +15 -0
  87. package/dist/src/seed/extractor.d.ts.map +1 -0
  88. package/dist/src/seed/extractor.js +88 -0
  89. package/dist/src/seed/extractor.js.map +1 -0
  90. package/dist/src/seed/generator.d.ts +12 -0
  91. package/dist/src/seed/generator.d.ts.map +1 -0
  92. package/dist/src/seed/generator.js +66 -0
  93. package/dist/src/seed/generator.js.map +1 -0
  94. package/dist/src/seed/passthrough-generator.d.ts +31 -0
  95. package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
  96. package/dist/src/seed/passthrough-generator.js +80 -0
  97. package/dist/src/seed/passthrough-generator.js.map +1 -0
  98. package/dist/src/seed/schema.d.ts +145 -0
  99. package/dist/src/seed/schema.d.ts.map +1 -0
  100. package/dist/src/seed/schema.js +37 -0
  101. package/dist/src/seed/schema.js.map +1 -0
  102. package/package.json +1 -4
  103. package/role-agents/presentation-designer/AGENT.md +211 -0
  104. package/role-agents/presentation-designer/templates/broadside.html +292 -0
  105. package/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
  106. package/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
  107. package/role-agents/presentation-designer/templates/neo-grid.html +407 -0
  108. package/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
  109. package/role-agents/presentation-designer/templates/pink-script.html +241 -0
  110. package/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
  111. package/role-agents/presentation-designer/templates/signal.html +403 -0
  112. package/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
  113. package/role-agents/presentation-designer/templates/studio.html +379 -0
  114. package/skills/agent/SKILL.md +2 -0
@@ -0,0 +1,407 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Neo-Grid Bold — 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=Space+Grotesk:wght@400;500;700&family=JetBrains+Mono:wght@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
+ --bg: #ECECE8;
14
+ --ink: #0A0A0A;
15
+ --paper: #F5F4EF;
16
+ --accent: #E6FF3D;
17
+ --line: #0A0A0A;
18
+ }
19
+
20
+ /* ── REVEAL RESET ─────────────────────────────────────────────── */
21
+ .reveal { font-family: "Space Grotesk", sans-serif; }
22
+ .reveal .slides { text-align: left; }
23
+ .reveal .slides section {
24
+ box-sizing: border-box;
25
+ width: 100%;
26
+ height: 100%;
27
+ padding: 0;
28
+ overflow: hidden;
29
+ top: 0 !important;
30
+ left: 0 !important;
31
+ background: var(--bg);
32
+ color: var(--ink);
33
+ }
34
+ .reveal h1, .reveal h2, .reveal h3, .reveal h4,
35
+ .reveal p, .reveal ul, .reveal ol { margin: 0; }
36
+
37
+ /* ── 12×8 GRID FRAME ──────────────────────────────────────────── */
38
+ .frame {
39
+ position: absolute;
40
+ inset: 40px;
41
+ display: grid;
42
+ grid-template-columns: repeat(12, 1fr);
43
+ grid-template-rows: repeat(8, 1fr);
44
+ gap: 12px;
45
+ }
46
+
47
+ /* ── CARD BASE ────────────────────────────────────────────────── */
48
+ .card {
49
+ background: var(--paper);
50
+ position: relative;
51
+ overflow: hidden;
52
+ padding: 1.4rem 1.6rem;
53
+ box-sizing: border-box;
54
+ }
55
+ .card.ink { background: var(--ink); color: var(--paper); }
56
+ .card.lemon { background: var(--accent); color: var(--ink); }
57
+ .card.ghost { background: transparent; border: 1.5px solid var(--line); }
58
+ .card.flush { padding: 0; }
59
+ .card.bare { background: var(--bg); padding: 0; }
60
+
61
+ /* ── PAGE NUMBER ──────────────────────────────────────────────── */
62
+ .pagenum {
63
+ position: absolute;
64
+ left: 0; bottom: 0;
65
+ font-family: "JetBrains Mono", monospace;
66
+ font-size: clamp(12px, 1.4vw, 20px);
67
+ padding: 12px 20px;
68
+ background: var(--paper);
69
+ color: var(--ink);
70
+ z-index: 10;
71
+ }
72
+ .pagenum.invert { background: var(--ink); color: var(--paper); }
73
+ .pagenum.lemon { background: var(--accent); color: var(--ink); }
74
+
75
+ /* ── CORNER MARK ──────────────────────────────────────────────── */
76
+ .corner-mark {
77
+ position: absolute;
78
+ top: 20px; right: 20px;
79
+ width: 30px; height: 30px;
80
+ display: grid;
81
+ grid-template-columns: 1fr 1fr;
82
+ grid-template-rows: 1fr 1fr;
83
+ gap: 4px;
84
+ }
85
+ .corner-mark span { background: currentColor; }
86
+ .corner-mark span:nth-child(2) { background: transparent; }
87
+
88
+ /* ── BLOCKMARK ────────────────────────────────────────────────── */
89
+ .blockmark {
90
+ display: grid;
91
+ grid-template-columns: 1fr 1fr;
92
+ grid-template-rows: 1fr 1fr;
93
+ gap: 5px;
94
+ }
95
+ .blockmark span { background: currentColor; }
96
+ .blockmark span:nth-child(2), .blockmark span:nth-child(3) { background: transparent; }
97
+
98
+ /* ── TYPOGRAPHY ───────────────────────────────────────────────── */
99
+ .t-display {
100
+ font-weight: 700;
101
+ font-size: clamp(48px, 8vw, 128px);
102
+ line-height: 0.92;
103
+ letter-spacing: -0.02em;
104
+ text-transform: uppercase;
105
+ }
106
+ .t-title {
107
+ font-weight: 700;
108
+ font-size: clamp(36px, 5.5vw, 88px);
109
+ line-height: 0.95;
110
+ letter-spacing: -0.015em;
111
+ text-transform: uppercase;
112
+ }
113
+ .t-subtitle {
114
+ font-weight: 700;
115
+ font-size: clamp(24px, 3.5vw, 56px);
116
+ line-height: 1;
117
+ letter-spacing: -0.01em;
118
+ text-transform: uppercase;
119
+ }
120
+ .t-body { font-size: clamp(14px, 1.6vw, 26px); line-height: 1.4; font-weight: 400; }
121
+ .t-label { font-family: "JetBrains Mono", monospace; font-size: clamp(10px, 1.2vw, 20px); letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.7; }
122
+ .t-stat { font-weight: 700; font-size: clamp(64px, 11vw, 180px); line-height: 0.88; letter-spacing: -0.03em; }
123
+ .t-stat.sm { font-size: clamp(48px, 7vw, 112px); }
124
+
125
+ mark { background: var(--accent); color: var(--ink); padding: 0 4px; }
126
+
127
+ /* ── PHOTO PLACEHOLDER ────────────────────────────────────────── */
128
+ .ph {
129
+ position: absolute;
130
+ inset: 0;
131
+ background:
132
+ radial-gradient(80% 60% at 50% 50%, #1f1f1f 0%, #0a0a0a 80%),
133
+ repeating-linear-gradient(45deg, rgba(255,255,255,.05) 0 2px, transparent 2px 8px);
134
+ }
135
+
136
+ /* ── SLIDE: COVER ─────────────────────────────────────────────── */
137
+ .s-cover .photo-l { grid-column: 1 / span 3; grid-row: 1 / span 8; }
138
+ .s-cover .mid { grid-column: 4 / span 5; grid-row: 1 / span 5; }
139
+ .s-cover .title { grid-column: 4 / span 5; grid-row: 6 / span 3; }
140
+ .s-cover .photo-r { grid-column: 9 / span 4; grid-row: 1 / span 5; }
141
+ .s-cover .cap { grid-column: 9 / span 4; grid-row: 6 / span 3; }
142
+
143
+ /* ── SLIDE: TOC / END ─────────────────────────────────────────── */
144
+ .s-toc .head { grid-column: 1 / span 12; grid-row: 1 / span 2; display: flex; align-items: flex-end; }
145
+ .s-toc .item-1 { grid-column: 1 / span 4; grid-row: 3 / span 6; }
146
+ .s-toc .item-2 { grid-column: 5 / span 4; grid-row: 3 / span 6; }
147
+ .s-toc .item-3 { grid-column: 9 / span 4; grid-row: 3 / span 6; }
148
+
149
+ /* ── SLIDE: STATS ─────────────────────────────────────────────── */
150
+ .s-stats .accent-col { grid-column: 1 / span 2; grid-row: 1 / span 8; }
151
+ .s-stats .copy { grid-column: 3 / span 4; grid-row: 1 / span 8; display: flex; flex-direction: column; justify-content: center; }
152
+ .s-stats .stat-1 { grid-column: 7 / span 6; grid-row: 1 / span 4; display: flex; align-items: flex-end; }
153
+ .s-stats .stat-2 { grid-column: 7 / span 3; grid-row: 5 / span 4; display: flex; align-items: flex-end; }
154
+ .s-stats .stat-3 { grid-column: 10 / span 3; grid-row: 5 / span 4; display: flex; align-items: flex-end; }
155
+
156
+ /* ── SLIDE: SECTION DIVIDER ───────────────────────────────────── */
157
+ .s-section .num { grid-column: 1 / span 4; grid-row: 1 / span 8; display: flex; align-items: center; justify-content: center; }
158
+ .s-section .title { grid-column: 5 / span 8; grid-row: 1 / span 8; display: flex; align-items: center; }
159
+
160
+ /* ── SLIDE: FEATURES ──────────────────────────────────────────── */
161
+ .s-features .head { grid-column: 1 / span 12; grid-row: 1 / span 2; display: flex; align-items: flex-end; }
162
+ .s-features .feat-1 { grid-column: 1 / span 4; grid-row: 3 / span 6; }
163
+ .s-features .feat-2 { grid-column: 5 / span 4; grid-row: 3 / span 6; }
164
+ .s-features .feat-3 { grid-column: 9 / span 4; grid-row: 3 / span 6; }
165
+
166
+ /* ── SLIDE: PROCESS ───────────────────────────────────────────── */
167
+ .s-process .head { grid-column: 1 / span 12; grid-row: 1 / span 2; display: flex; align-items: flex-end; }
168
+ .s-process .step-1 { grid-column: 1 / span 3; grid-row: 3 / span 5; }
169
+ .s-process .step-2 { grid-column: 4 / span 3; grid-row: 3 / span 5; }
170
+ .s-process .step-3 { grid-column: 7 / span 3; grid-row: 3 / span 5; }
171
+ .s-process .step-4 { grid-column: 10 / span 3; grid-row: 3 / span 5; }
172
+ .s-process .timeline { grid-column: 1 / span 12; grid-row: 8 / span 1; }
173
+
174
+ /* ── SLIDE: QUOTE ─────────────────────────────────────────────── */
175
+ .s-quote .photo { grid-column: 1 / span 5; grid-row: 1 / span 8; }
176
+ .s-quote .body { grid-column: 6 / span 7; grid-row: 1 / span 8; display: flex; flex-direction: column; justify-content: center; gap: 1.5rem; }
177
+ </style>
178
+ </head>
179
+ <body style="margin:0;background:#1a1a1a">
180
+ <div class="reveal">
181
+ <div class="slides">
182
+
183
+ <!-- ════════════════════════════════════════════════
184
+ COVER
185
+ ════════════════════════════════════════════════ -->
186
+ <section class="s-cover">
187
+ <div class="frame">
188
+ <div class="card ink flush photo-l"><div class="ph"></div></div>
189
+ <div class="card ink mid" style="display:flex;flex-direction:column;justify-content:space-between">
190
+ <span class="t-label" style="color:var(--paper)">{{ORGANIZATION}}</span>
191
+ <div class="blockmark" style="color:var(--accent);width:44px;height:44px">
192
+ <span></span><span></span><span></span><span></span>
193
+ </div>
194
+ </div>
195
+ <div class="card lemon title" style="display:flex;flex-direction:column;justify-content:flex-end">
196
+ <div class="t-display">{{TITLE}}</div>
197
+ <p class="t-label" style="margin-top:0.75rem;opacity:1">{{SUBTITLE}}</p>
198
+ </div>
199
+ <div class="card flush photo-r"><div class="ph"></div></div>
200
+ <div class="card cap" style="display:flex;flex-direction:column;justify-content:flex-end">
201
+ <p class="t-label">{{DATE}} · {{AUTHOR}}</p>
202
+ </div>
203
+ </div>
204
+ <div class="pagenum lemon">01</div>
205
+ </section>
206
+
207
+ <!-- ════════════════════════════════════════════════
208
+ SECTION DIVIDER
209
+ ════════════════════════════════════════════════ -->
210
+ <section class="s-section">
211
+ <div class="frame">
212
+ <div class="card lemon num">
213
+ <div class="t-stat" style="font-size:clamp(64px,14vw,220px)">01</div>
214
+ </div>
215
+ <div class="card ink title">
216
+ <div>
217
+ <p class="t-label" style="color:var(--paper);margin-bottom:1rem">Chapter</p>
218
+ <div class="t-title" style="color:var(--paper)">챕터<br><mark>제목</mark></div>
219
+ </div>
220
+ </div>
221
+ </div>
222
+ <div class="pagenum invert">02</div>
223
+ </section>
224
+
225
+ <!-- ════════════════════════════════════════════════
226
+ STATS
227
+ ════════════════════════════════════════════════ -->
228
+ <section class="s-stats">
229
+ <div class="frame">
230
+ <div class="card lemon accent-col"></div>
231
+ <div class="card copy">
232
+ <p class="t-label" style="margin-bottom:1rem">{{SECTION_LABEL}}</p>
233
+ <div class="t-subtitle">핵심<br>지표</div>
234
+ </div>
235
+ <div class="card ink stat-1">
236
+ <div style="padding:1.2rem">
237
+ <div class="t-stat" style="color:var(--accent)">98<span style="font-size:0.4em">%</span></div>
238
+ <p class="t-label" style="color:var(--paper);margin-top:0.5rem">지표명</p>
239
+ </div>
240
+ </div>
241
+ <div class="card stat-2">
242
+ <div style="padding:1rem">
243
+ <div class="t-stat sm">2.4<span style="font-size:0.35em">s</span></div>
244
+ <p class="t-label" style="margin-top:0.5rem">지표명</p>
245
+ </div>
246
+ </div>
247
+ <div class="card lemon stat-3">
248
+ <div style="padding:1rem">
249
+ <div class="t-stat sm">41</div>
250
+ <p class="t-label" style="margin-top:0.5rem;opacity:1">지표명</p>
251
+ </div>
252
+ </div>
253
+ </div>
254
+ <div class="pagenum">03</div>
255
+ </section>
256
+
257
+ <!-- ════════════════════════════════════════════════
258
+ FEATURES — 3 cards
259
+ ════════════════════════════════════════════════ -->
260
+ <section class="s-features">
261
+ <div class="frame">
262
+ <div class="card ink head">
263
+ <div style="display:flex;justify-content:space-between;align-items:flex-end;width:100%">
264
+ <div class="t-subtitle" style="color:var(--paper)">주요 <mark>항목</mark></div>
265
+ <span class="t-label" style="color:var(--paper)">{{PERIOD}}</span>
266
+ </div>
267
+ </div>
268
+ <div class="card feat-1">
269
+ <p class="t-label" style="margin-bottom:0.75rem">01</p>
270
+ <p class="t-body" style="font-weight:700;font-size:1.1em;margin-bottom:0.5rem">항목 제목</p>
271
+ <p class="t-body">설명 내용이 여기에 들어갑니다. 2-3줄 정도.</p>
272
+ </div>
273
+ <div class="card lemon feat-2">
274
+ <p class="t-label" style="margin-bottom:0.75rem;opacity:1">02</p>
275
+ <p class="t-body" style="font-weight:700;font-size:1.1em;margin-bottom:0.5rem">항목 제목</p>
276
+ <p class="t-body">설명 내용이 여기에 들어갑니다. 2-3줄 정도.</p>
277
+ </div>
278
+ <div class="card feat-3">
279
+ <p class="t-label" style="margin-bottom:0.75rem">03</p>
280
+ <p class="t-body" style="font-weight:700;font-size:1.1em;margin-bottom:0.5rem">항목 제목</p>
281
+ <p class="t-body">설명 내용이 여기에 들어갑니다. 2-3줄 정도.</p>
282
+ </div>
283
+ </div>
284
+ <div class="pagenum">04</div>
285
+ </section>
286
+
287
+ <!-- ════════════════════════════════════════════════
288
+ SECTION DIVIDER 2
289
+ ════════════════════════════════════════════════ -->
290
+ <section class="s-section">
291
+ <div class="frame">
292
+ <div class="card lemon num">
293
+ <div class="t-stat" style="font-size:clamp(64px,14vw,220px)">02</div>
294
+ </div>
295
+ <div class="card ink title">
296
+ <div>
297
+ <p class="t-label" style="color:var(--paper);margin-bottom:1rem">Chapter</p>
298
+ <div class="t-title" style="color:var(--paper)">다음<br><mark>계획</mark></div>
299
+ </div>
300
+ </div>
301
+ </div>
302
+ <div class="pagenum invert">05</div>
303
+ </section>
304
+
305
+ <!-- ════════════════════════════════════════════════
306
+ PROCESS — 4-step + timeline
307
+ ════════════════════════════════════════════════ -->
308
+ <section class="s-process">
309
+ <div class="frame">
310
+ <div class="card ink head">
311
+ <div style="display:flex;justify-content:space-between;align-items:flex-end;width:100%">
312
+ <div class="t-subtitle" style="color:var(--paper)">실행 <mark>계획</mark></div>
313
+ <span class="t-label" style="color:var(--paper)">{{PERIOD}}</span>
314
+ </div>
315
+ </div>
316
+ <div class="card step-1">
317
+ <p class="t-label" style="margin-bottom:0.5rem">7월</p>
318
+ <p class="t-body" style="font-weight:700">Step 1<br>제목</p>
319
+ </div>
320
+ <div class="card lemon step-2">
321
+ <p class="t-label" style="margin-bottom:0.5rem;opacity:1">8월</p>
322
+ <p class="t-body" style="font-weight:700">Step 2<br>제목</p>
323
+ </div>
324
+ <div class="card step-3">
325
+ <p class="t-label" style="margin-bottom:0.5rem">8월</p>
326
+ <p class="t-body" style="font-weight:700">Step 3<br>제목</p>
327
+ </div>
328
+ <div class="card ink step-4">
329
+ <p class="t-label" style="color:var(--paper);margin-bottom:0.5rem">9월</p>
330
+ <p class="t-body" style="font-weight:700;color:var(--paper)">Step 4<br>제목</p>
331
+ </div>
332
+ <div class="card lemon timeline" style="display:flex;align-items:center">
333
+ <p class="t-label" style="opacity:1">{{PERIOD}} 마일스톤 타임라인</p>
334
+ </div>
335
+ </div>
336
+ <div class="pagenum">06</div>
337
+ </section>
338
+
339
+ <!-- ════════════════════════════════════════════════
340
+ QUOTE
341
+ ════════════════════════════════════════════════ -->
342
+ <section class="s-quote">
343
+ <div class="frame">
344
+ <div class="card ink flush photo"><div class="ph"></div></div>
345
+ <div class="card body">
346
+ <div class="corner-mark" style="color:var(--accent)"><span></span><span></span><span></span><span></span></div>
347
+ <p class="t-label" style="margin-bottom:1.5rem">Quote</p>
348
+ <div class="t-title" style="font-size:clamp(28px,3.5vw,52px)">"인용문이<br>여기에<br>들어갑니다"</div>
349
+ <p class="t-label" style="margin-top:1.5rem">— 발언자, 맥락</p>
350
+ </div>
351
+ </div>
352
+ <div class="pagenum">07</div>
353
+ </section>
354
+
355
+ <!-- ════════════════════════════════════════════════
356
+ END / Q&A
357
+ ════════════════════════════════════════════════ -->
358
+ <section class="s-toc">
359
+ <div class="frame">
360
+ <div class="card ink head">
361
+ <div class="t-subtitle" style="color:var(--paper)">감사합니다 · <mark>Q&A</mark></div>
362
+ </div>
363
+ <div class="card item-1" style="display:flex;flex-direction:column;justify-content:space-between">
364
+ <div>
365
+ <p class="t-label" style="margin-bottom:0.75rem">Contact</p>
366
+ <p class="t-body" style="font-weight:700">{{AUTHOR}}</p>
367
+ <p class="t-body">{{ROLE}}</p>
368
+ </div>
369
+ <p class="t-label" style="opacity:0.5">{{EMAIL}}</p>
370
+ </div>
371
+ <div class="card lemon item-2" style="display:flex;flex-direction:column;justify-content:flex-end">
372
+ <div class="t-display" style="font-size:clamp(48px,7vw,112px)">Thank<br>You</div>
373
+ </div>
374
+ <div class="card ink item-3" style="display:flex;align-items:center;justify-content:center">
375
+ <div style="text-align:center">
376
+ <div class="blockmark" style="color:var(--accent);width:56px;height:56px;margin:0 auto 1rem">
377
+ <span></span><span></span><span></span><span></span>
378
+ </div>
379
+ <p class="t-label" style="color:var(--paper);opacity:0.5">{{ORGANIZATION}} · {{DATE}}</p>
380
+ </div>
381
+ </div>
382
+ </div>
383
+ <div class="pagenum lemon">08</div>
384
+ </section>
385
+
386
+ </div>
387
+ </div>
388
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
389
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
390
+ <script>
391
+ Reveal.initialize({
392
+ hash: true,
393
+ width: 1600,
394
+ height: 900,
395
+ margin: 0,
396
+ minScale: 0.1,
397
+ maxScale: 1.5,
398
+ controls: false,
399
+ progress: false,
400
+ slideNumber: false,
401
+ transition: 'none',
402
+ backgroundTransition: 'none',
403
+ plugins: [RevealNotes],
404
+ });
405
+ </script>
406
+ </body>
407
+ </html>
@@ -0,0 +1,225 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Pin &amp; Paper — 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=Caveat:wght@500;600;700&family=Space+Grotesk:wght@400;500;600;700&family=DM+Mono:wght@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
+ :root {
12
+ --paper: #EFE56A;
13
+ --paper-2: #F5ECA0;
14
+ --paper-3: #E8D85A;
15
+ --cream: #F8F1D6;
16
+ --kraft: #C9A66B;
17
+ --ink: #1F3A8A;
18
+ --ink-soft: #2D4FB8;
19
+ --black: #0E1430;
20
+ --red: #C2342B;
21
+ --olive: #6B7A2E;
22
+ --orange: #D8702A;
23
+ }
24
+
25
+ .reveal { font-family: 'Space Grotesk', sans-serif; }
26
+ .reveal .slides { text-align: left; }
27
+ .reveal .slides section {
28
+ box-sizing: border-box;
29
+ width: 100%; height: 100%;
30
+ padding: 0;
31
+ overflow: hidden;
32
+ top: 0 !important; left: 0 !important;
33
+ background: var(--paper);
34
+ color: var(--ink);
35
+ position: absolute;
36
+ }
37
+ .reveal h1,.reveal h2,.reveal h3,.reveal p,.reveal ul,.reveal ol { margin: 0; }
38
+ .reveal .slides section.s-sec { background: var(--ink); color: var(--paper); }
39
+
40
+ /* CHROME */
41
+ .top {
42
+ position: absolute; top: 34px; left: 48px; right: 48px;
43
+ display: flex; align-items: center; justify-content: space-between;
44
+ font-family: 'DM Mono', monospace; font-weight: 500;
45
+ font-size: clamp(11px, 1.2vw, 16px); letter-spacing: 0.12em; text-transform: uppercase;
46
+ }
47
+ .top .lockup { display: flex; align-items: center; gap: 14px; }
48
+ .top .meta { display: flex; gap: 2.5vw; opacity: 0.7; }
49
+ .footer {
50
+ position: absolute; left: 48px; right: 48px; bottom: 28px;
51
+ display: flex; justify-content: space-between; align-items: center;
52
+ font-family: 'DM Mono', monospace; font-weight: 500;
53
+ font-size: clamp(10px, 1.1vw, 15px); letter-spacing: 0.14em; text-transform: uppercase; opacity: 0.65;
54
+ }
55
+
56
+ /* TYPOGRAPHY */
57
+ .t-display { font-weight: 700; font-size: clamp(60px,10vw,160px); line-height: 0.92; letter-spacing: -0.02em; }
58
+ .t-title { font-weight: 700; font-size: clamp(36px,5.5vw,84px); line-height: 0.95; letter-spacing: -0.015em; }
59
+ .t-head { font-weight: 700; font-size: clamp(20px,2.8vw,44px); line-height: 1.1; }
60
+ .t-body { font-size: clamp(13px,1.5vw,22px); line-height: 1.45; font-weight: 400; }
61
+ .t-label { font-family: 'DM Mono', monospace; font-size: clamp(10px,1.1vw,16px); letter-spacing: 0.12em; text-transform: uppercase; font-weight: 500; }
62
+ .t-script { font-family: 'Caveat', cursive; font-weight: 600; font-size: clamp(20px,2.5vw,40px); line-height: 1.05; }
63
+ .t-num { font-weight: 700; font-size: clamp(50px,8vw,120px); line-height: 1; letter-spacing: -0.02em; }
64
+
65
+ /* STAMP */
66
+ .stamp {
67
+ display: inline-block;
68
+ border: 3px solid var(--red); color: var(--red);
69
+ padding: 5px 14px; font-family: 'DM Mono', monospace; font-weight: 500;
70
+ font-size: clamp(10px,1.1vw,15px); letter-spacing: 0.18em; text-transform: uppercase;
71
+ transform: rotate(-4deg);
72
+ }
73
+
74
+ /* NOTE CARD */
75
+ .note-card {
76
+ background: var(--cream);
77
+ border: 1.5px solid var(--ink);
78
+ border-radius: 4px;
79
+ padding: clamp(16px,2.5vh,28px) clamp(14px,2vw,24px);
80
+ display: flex; flex-direction: column;
81
+ box-shadow: 4px 5px 0 0 var(--ink);
82
+ }
83
+ .note-card.alt { background: var(--paper-2); }
84
+
85
+ /* STAT CARD */
86
+ .stat-card {
87
+ border-radius: 8px;
88
+ padding: clamp(16px,2.5vh,28px) clamp(14px,2vw,24px);
89
+ display: flex; flex-direction: column; gap: 0.75rem;
90
+ }
91
+ .stat-card.ink { background: var(--ink); color: var(--paper); }
92
+ .stat-card.yel { background: var(--paper-2); color: var(--ink); }
93
+ .stat-card.red { background: var(--red); color: var(--cream); }
94
+
95
+ /* AGENDA ROW */
96
+ .agenda-row {
97
+ display: grid;
98
+ grid-template-columns: 64px 1fr 180px;
99
+ align-items: center;
100
+ gap: 2vw;
101
+ padding: 1.5vh 0;
102
+ border-bottom: 1.5px dashed rgba(31,58,138,.4);
103
+ }
104
+ </style>
105
+ </head>
106
+ <body style="margin:0;background:#b8a520">
107
+ <div class="reveal">
108
+ <div class="slides">
109
+
110
+ <!-- COVER -->
111
+ <section>
112
+ <div class="top"><div class="lockup"><span class="t-label">{{ORGANIZATION}}</span></div><div class="meta"><span>{{DATE}}</span></div></div>
113
+ <div style="position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:8vh 5vw;gap:2vh">
114
+ <div class="t-script" style="color:var(--ink);opacity:0.7">{{CATEGORY}}</div>
115
+ <div class="t-display">{{TITLE}}</div>
116
+ <div class="t-script" style="margin-top:1vh">{{SUBTITLE}}</div>
117
+ <div style="display:flex;gap:2vw;align-items:center;margin-top:2vh">
118
+ <span class="stamp">{{DATE}}</span>
119
+ <span class="t-label" style="opacity:0.7">{{AUTHOR}}</span>
120
+ </div>
121
+ </div>
122
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
123
+ </section>
124
+
125
+ <!-- AGENDA -->
126
+ <section>
127
+ <div class="top"><div class="lockup"><span class="t-label">목차</span></div><div class="meta"><span>{{DATE}}</span></div></div>
128
+ <div style="position:absolute;left:5vw;right:5vw;top:100px;bottom:80px;display:flex;flex-direction:column;justify-content:center;gap:0">
129
+ <div class="t-head" style="margin-bottom:2vh">{{TITLE}}</div>
130
+ <div class="agenda-row"><span class="t-label">01</span><span class="t-body" style="font-weight:600">섹션 제목</span><span class="t-script" style="font-size:clamp(16px,1.8vw,26px);opacity:0.6">설명</span></div>
131
+ <div class="agenda-row"><span class="t-label">02</span><span class="t-body" style="font-weight:600">섹션 제목</span><span class="t-script" style="font-size:clamp(16px,1.8vw,26px);opacity:0.6">설명</span></div>
132
+ <div class="agenda-row"><span class="t-label">03</span><span class="t-body" style="font-weight:600">섹션 제목</span><span class="t-script" style="font-size:clamp(16px,1.8vw,26px);opacity:0.6">설명</span></div>
133
+ <div class="agenda-row" style="border-bottom:none"><span class="t-label">04</span><span class="t-body" style="font-weight:600">섹션 제목</span><span class="t-script" style="font-size:clamp(16px,1.8vw,26px);opacity:0.6">설명</span></div>
134
+ </div>
135
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
136
+ </section>
137
+
138
+ <!-- SECTION DIVIDER (ink) -->
139
+ <section class="s-sec">
140
+ <div style="position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:2vh;text-align:center">
141
+ <span class="t-label" style="opacity:0.5;letter-spacing:0.2em">Section</span>
142
+ <div class="t-display" style="color:var(--paper)">01</div>
143
+ <div class="t-title" style="color:var(--paper)">섹션 제목</div>
144
+ <div class="t-script" style="color:var(--paper-2);font-size:clamp(18px,2vw,30px)">서브 설명</div>
145
+ </div>
146
+ </section>
147
+
148
+ <!-- NOTE CARDS (3-col) -->
149
+ <section>
150
+ <div class="top"><div class="lockup"><span class="t-label">{{SECTION_LABEL}}</span></div><div class="meta"><span>01</span></div></div>
151
+ <div style="position:absolute;left:5vw;right:5vw;top:100px;bottom:80px">
152
+ <p class="t-head" style="margin-bottom:2vh">주요 내용</p>
153
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,28px)">
154
+ <div class="note-card"><p class="t-label" style="margin-bottom:0.75rem">01</p><p class="t-body" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="t-body">설명 내용이 들어갑니다. 2-3줄.</p></div>
155
+ <div class="note-card alt"><p class="t-label" style="margin-bottom:0.75rem">02</p><p class="t-body" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="t-body">설명 내용이 들어갑니다. 2-3줄.</p></div>
156
+ <div class="note-card"><p class="t-label" style="margin-bottom:0.75rem">03</p><p class="t-body" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="t-body">설명 내용이 들어갑니다. 2-3줄.</p></div>
157
+ </div>
158
+ </div>
159
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
160
+ </section>
161
+
162
+ <!-- STATS -->
163
+ <section>
164
+ <div class="top"><div class="lockup"><span class="t-label">{{SECTION_LABEL}}</span></div><div class="meta"><span>02</span></div></div>
165
+ <div style="position:absolute;left:5vw;right:5vw;top:100px;bottom:80px">
166
+ <p class="t-head" style="margin-bottom:2vh">성과 지표</p>
167
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,24px)">
168
+ <div class="stat-card ink"><div class="t-num" style="color:var(--paper)">98%</div><p class="t-label" style="color:var(--paper);opacity:0.7">지표명</p><p class="t-script" style="color:var(--paper-2);font-size:clamp(14px,1.5vw,22px)">설명</p></div>
169
+ <div class="stat-card yel"><div class="t-num">41</div><p class="t-label" style="opacity:0.7">지표명</p><p class="t-script" style="font-size:clamp(14px,1.5vw,22px);opacity:0.7">설명</p></div>
170
+ <div class="stat-card red"><div class="t-num" style="color:var(--cream)">2.4s</div><p class="t-label" style="color:var(--cream);opacity:0.7">지표명</p><p class="t-script" style="color:var(--cream);font-size:clamp(14px,1.5vw,22px);opacity:0.8">설명</p></div>
171
+ </div>
172
+ </div>
173
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
174
+ </section>
175
+
176
+ <!-- QUOTE -->
177
+ <section>
178
+ <div style="position:absolute;inset:0;display:grid;grid-template-columns:1fr 1.6fr;gap:5vw;align-items:center;padding:8vh 5vw">
179
+ <div style="display:flex;flex-direction:column;gap:1.5rem">
180
+ <div style="width:80px;height:80px;background:var(--ink);border-radius:50%;display:flex;align-items:center;justify-content:center">
181
+ <span class="t-label" style="color:var(--paper)">IMG</span>
182
+ </div>
183
+ <p class="t-body" style="font-weight:700">발언자 이름</p>
184
+ <p class="t-label" style="opacity:0.7">직함 / 소속</p>
185
+ </div>
186
+ <div>
187
+ <div class="t-title" style="font-size:clamp(24px,3.5vw,56px)">"인용문이<br>여기에 들어갑니다"</div>
188
+ <div class="t-script" style="margin-top:2vh;opacity:0.7">— 맥락 설명</div>
189
+ </div>
190
+ </div>
191
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
192
+ </section>
193
+
194
+ <!-- CLOSING -->
195
+ <section>
196
+ <div style="position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr;gap:5vw;padding:8vh 5vw">
197
+ <div style="display:flex;flex-direction:column;justify-content:center;gap:2vh">
198
+ <div class="t-script" style="font-size:clamp(20px,2.5vw,36px);opacity:0.7">감사합니다</div>
199
+ <div class="t-display">Q&amp;A</div>
200
+ <div class="stamp" style="align-self:flex-start;margin-top:1vh">{{DATE}}</div>
201
+ </div>
202
+ <div style="display:flex;flex-direction:column;justify-content:center;gap:1.5vh">
203
+ <p class="t-label" style="opacity:0.6;margin-bottom:0.25rem">발표자</p><p class="t-body" style="font-weight:700;margin-bottom:1rem">{{AUTHOR}}</p>
204
+ <p class="t-label" style="opacity:0.6;margin-bottom:0.25rem">이메일</p><p class="t-body" style="margin-bottom:1rem">{{EMAIL}}</p>
205
+ <p class="t-label" style="opacity:0.6;margin-bottom:0.25rem">소속</p><p class="t-body">{{ORG}}</p>
206
+ </div>
207
+ </div>
208
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
209
+ </section>
210
+
211
+ </div>
212
+ </div>
213
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
214
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
215
+ <script>
216
+ Reveal.initialize({
217
+ hash: true, width: 1600, height: 900, margin: 0,
218
+ minScale: 0.1, maxScale: 1.5,
219
+ controls: false, progress: false, slideNumber: false,
220
+ transition: 'fade', backgroundTransition: 'fade',
221
+ plugins: [RevealNotes],
222
+ });
223
+ </script>
224
+ </body>
225
+ </html>