@tienne/gestalt 0.17.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 (171) hide show
  1. package/dist/package.json +1 -1
  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/monitor.d.ts +2 -0
  16. package/dist/src/cli/commands/monitor.d.ts.map +1 -0
  17. package/dist/src/cli/commands/monitor.js +13 -0
  18. package/dist/src/cli/commands/monitor.js.map +1 -0
  19. package/dist/src/cli/commands/seed.d.ts +4 -0
  20. package/dist/src/cli/commands/seed.d.ts.map +1 -0
  21. package/dist/src/cli/commands/seed.js +34 -0
  22. package/dist/src/cli/commands/seed.js.map +1 -0
  23. package/dist/src/interview/ambiguity.d.ts +8 -0
  24. package/dist/src/interview/ambiguity.d.ts.map +1 -0
  25. package/dist/src/interview/ambiguity.js +69 -0
  26. package/dist/src/interview/ambiguity.js.map +1 -0
  27. package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
  28. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
  29. package/dist/src/mcp/tools/seed-passthrough.js +29 -0
  30. package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
  31. package/dist/src/mcp/tools/seed.d.ts +5 -0
  32. package/dist/src/mcp/tools/seed.d.ts.map +1 -0
  33. package/dist/src/mcp/tools/seed.js +19 -0
  34. package/dist/src/mcp/tools/seed.js.map +1 -0
  35. package/dist/src/recording/agg-converter.d.ts +25 -0
  36. package/dist/src/recording/agg-converter.d.ts.map +1 -0
  37. package/dist/src/recording/agg-converter.js +80 -0
  38. package/dist/src/recording/agg-converter.js.map +1 -0
  39. package/dist/src/recording/agg-installer.d.ts +6 -0
  40. package/dist/src/recording/agg-installer.d.ts.map +1 -0
  41. package/dist/src/recording/agg-installer.js +50 -0
  42. package/dist/src/recording/agg-installer.js.map +1 -0
  43. package/dist/src/recording/asciinema-installer.d.ts +6 -0
  44. package/dist/src/recording/asciinema-installer.d.ts.map +1 -0
  45. package/dist/src/recording/asciinema-installer.js +50 -0
  46. package/dist/src/recording/asciinema-installer.js.map +1 -0
  47. package/dist/src/recording/asciinema-recorder.d.ts +26 -0
  48. package/dist/src/recording/asciinema-recorder.d.ts.map +1 -0
  49. package/dist/src/recording/asciinema-recorder.js +52 -0
  50. package/dist/src/recording/asciinema-recorder.js.map +1 -0
  51. package/dist/src/recording/cast-generator.d.ts +7 -0
  52. package/dist/src/recording/cast-generator.d.ts.map +1 -0
  53. package/dist/src/recording/cast-generator.js +97 -0
  54. package/dist/src/recording/cast-generator.js.map +1 -0
  55. package/dist/src/recording/filename-generator.d.ts +19 -0
  56. package/dist/src/recording/filename-generator.d.ts.map +1 -0
  57. package/dist/src/recording/filename-generator.js +67 -0
  58. package/dist/src/recording/filename-generator.js.map +1 -0
  59. package/dist/src/recording/gif-generator.d.ts +21 -0
  60. package/dist/src/recording/gif-generator.d.ts.map +1 -0
  61. package/dist/src/recording/gif-generator.js +121 -0
  62. package/dist/src/recording/gif-generator.js.map +1 -0
  63. package/dist/src/recording/recording-dir.d.ts +5 -0
  64. package/dist/src/recording/recording-dir.d.ts.map +1 -0
  65. package/dist/src/recording/recording-dir.js +13 -0
  66. package/dist/src/recording/recording-dir.js.map +1 -0
  67. package/dist/src/recording/recording-orchestrator.d.ts +50 -0
  68. package/dist/src/recording/recording-orchestrator.d.ts.map +1 -0
  69. package/dist/src/recording/recording-orchestrator.js +98 -0
  70. package/dist/src/recording/recording-orchestrator.js.map +1 -0
  71. package/dist/src/recording/resume-detector.d.ts +10 -0
  72. package/dist/src/recording/resume-detector.d.ts.map +1 -0
  73. package/dist/src/recording/resume-detector.js +14 -0
  74. package/dist/src/recording/resume-detector.js.map +1 -0
  75. package/dist/src/recording/segment-merger.d.ts +27 -0
  76. package/dist/src/recording/segment-merger.d.ts.map +1 -0
  77. package/dist/src/recording/segment-merger.js +65 -0
  78. package/dist/src/recording/segment-merger.js.map +1 -0
  79. package/dist/src/recording/terminal-recorder.d.ts +31 -0
  80. package/dist/src/recording/terminal-recorder.d.ts.map +1 -0
  81. package/dist/src/recording/terminal-recorder.js +111 -0
  82. package/dist/src/recording/terminal-recorder.js.map +1 -0
  83. package/dist/src/scripts/postinstall.d.ts +2 -0
  84. package/dist/src/scripts/postinstall.d.ts.map +1 -0
  85. package/dist/src/scripts/postinstall.js +29 -0
  86. package/dist/src/scripts/postinstall.js.map +1 -0
  87. package/dist/src/seed/extractor.d.ts +15 -0
  88. package/dist/src/seed/extractor.d.ts.map +1 -0
  89. package/dist/src/seed/extractor.js +88 -0
  90. package/dist/src/seed/extractor.js.map +1 -0
  91. package/dist/src/seed/generator.d.ts +12 -0
  92. package/dist/src/seed/generator.d.ts.map +1 -0
  93. package/dist/src/seed/generator.js +66 -0
  94. package/dist/src/seed/generator.js.map +1 -0
  95. package/dist/src/seed/passthrough-generator.d.ts +31 -0
  96. package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
  97. package/dist/src/seed/passthrough-generator.js +80 -0
  98. package/dist/src/seed/passthrough-generator.js.map +1 -0
  99. package/dist/src/seed/schema.d.ts +145 -0
  100. package/dist/src/seed/schema.d.ts.map +1 -0
  101. package/dist/src/seed/schema.js +37 -0
  102. package/dist/src/seed/schema.js.map +1 -0
  103. package/dist/src/tui/components/TUIApp.d.ts +20 -0
  104. package/dist/src/tui/components/TUIApp.d.ts.map +1 -0
  105. package/dist/src/tui/components/TUIApp.js +84 -0
  106. package/dist/src/tui/components/TUIApp.js.map +1 -0
  107. package/dist/src/tui/hooks/event-store-reader.d.ts +28 -0
  108. package/dist/src/tui/hooks/event-store-reader.d.ts.map +1 -0
  109. package/dist/src/tui/hooks/event-store-reader.js +141 -0
  110. package/dist/src/tui/hooks/event-store-reader.js.map +1 -0
  111. package/dist/src/tui/hooks/useEventStorePoller.d.ts +12 -0
  112. package/dist/src/tui/hooks/useEventStorePoller.d.ts.map +1 -0
  113. package/dist/src/tui/hooks/useEventStorePoller.js +84 -0
  114. package/dist/src/tui/hooks/useEventStorePoller.js.map +1 -0
  115. package/dist/src/tui/screens/DashboardScreen.d.ts +4 -0
  116. package/dist/src/tui/screens/DashboardScreen.d.ts.map +1 -0
  117. package/dist/src/tui/screens/DashboardScreen.js +132 -0
  118. package/dist/src/tui/screens/DashboardScreen.js.map +1 -0
  119. package/dist/src/tui/screens/DebugScreen.d.ts +4 -0
  120. package/dist/src/tui/screens/DebugScreen.d.ts.map +1 -0
  121. package/dist/src/tui/screens/DebugScreen.js +40 -0
  122. package/dist/src/tui/screens/DebugScreen.js.map +1 -0
  123. package/dist/src/tui/screens/EvolutionScreen.d.ts +4 -0
  124. package/dist/src/tui/screens/EvolutionScreen.d.ts.map +1 -0
  125. package/dist/src/tui/screens/EvolutionScreen.js +136 -0
  126. package/dist/src/tui/screens/EvolutionScreen.js.map +1 -0
  127. package/dist/src/tui/screens/HUDPanel.d.ts +4 -0
  128. package/dist/src/tui/screens/HUDPanel.d.ts.map +1 -0
  129. package/dist/src/tui/screens/HUDPanel.js +13 -0
  130. package/dist/src/tui/screens/HUDPanel.js.map +1 -0
  131. package/dist/src/tui/screens/InterviewScreen.d.ts +4 -0
  132. package/dist/src/tui/screens/InterviewScreen.d.ts.map +1 -0
  133. package/dist/src/tui/screens/InterviewScreen.js +103 -0
  134. package/dist/src/tui/screens/InterviewScreen.js.map +1 -0
  135. package/dist/src/tui/screens/LogScreen.d.ts +4 -0
  136. package/dist/src/tui/screens/LogScreen.d.ts.map +1 -0
  137. package/dist/src/tui/screens/LogScreen.js +83 -0
  138. package/dist/src/tui/screens/LogScreen.js.map +1 -0
  139. package/dist/src/tui/screens/SessionListScreen.d.ts +4 -0
  140. package/dist/src/tui/screens/SessionListScreen.d.ts.map +1 -0
  141. package/dist/src/tui/screens/SessionListScreen.js +71 -0
  142. package/dist/src/tui/screens/SessionListScreen.js.map +1 -0
  143. package/dist/src/tui/screens/SpecViewerScreen.d.ts +4 -0
  144. package/dist/src/tui/screens/SpecViewerScreen.d.ts.map +1 -0
  145. package/dist/src/tui/screens/SpecViewerScreen.js +73 -0
  146. package/dist/src/tui/screens/SpecViewerScreen.js.map +1 -0
  147. package/dist/src/tui/widgets/DriftMeter.d.ts +15 -0
  148. package/dist/src/tui/widgets/DriftMeter.d.ts.map +1 -0
  149. package/dist/src/tui/widgets/DriftMeter.js +27 -0
  150. package/dist/src/tui/widgets/DriftMeter.js.map +1 -0
  151. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts +9 -0
  152. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts.map +1 -0
  153. package/dist/src/tui/widgets/GestaltPrincipleBar.js +35 -0
  154. package/dist/src/tui/widgets/GestaltPrincipleBar.js.map +1 -0
  155. package/dist/src/tui/widgets/TaskDAGTree.d.ts +15 -0
  156. package/dist/src/tui/widgets/TaskDAGTree.d.ts.map +1 -0
  157. package/dist/src/tui/widgets/TaskDAGTree.js +54 -0
  158. package/dist/src/tui/widgets/TaskDAGTree.js.map +1 -0
  159. package/package.json +1 -1
  160. package/role-agents/presentation-designer/AGENT.md +211 -0
  161. package/role-agents/presentation-designer/templates/broadside.html +292 -0
  162. package/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
  163. package/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
  164. package/role-agents/presentation-designer/templates/neo-grid.html +407 -0
  165. package/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
  166. package/role-agents/presentation-designer/templates/pink-script.html +241 -0
  167. package/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
  168. package/role-agents/presentation-designer/templates/signal.html +403 -0
  169. package/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
  170. package/role-agents/presentation-designer/templates/studio.html +379 -0
  171. 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>