@tienne/gestalt 0.17.0 → 0.18.2

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 (173) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/role-agents/presentation-designer/AGENT.md +262 -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/role-agents/technical-writer/AGENT.md +38 -0
  14. package/dist/skills/agent/SKILL.md +2 -0
  15. package/dist/skills/seed/SKILL.md +92 -0
  16. package/dist/src/cli/commands/monitor.d.ts +2 -0
  17. package/dist/src/cli/commands/monitor.d.ts.map +1 -0
  18. package/dist/src/cli/commands/monitor.js +13 -0
  19. package/dist/src/cli/commands/monitor.js.map +1 -0
  20. package/dist/src/cli/commands/seed.d.ts +4 -0
  21. package/dist/src/cli/commands/seed.d.ts.map +1 -0
  22. package/dist/src/cli/commands/seed.js +34 -0
  23. package/dist/src/cli/commands/seed.js.map +1 -0
  24. package/dist/src/interview/ambiguity.d.ts +8 -0
  25. package/dist/src/interview/ambiguity.d.ts.map +1 -0
  26. package/dist/src/interview/ambiguity.js +69 -0
  27. package/dist/src/interview/ambiguity.js.map +1 -0
  28. package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
  29. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
  30. package/dist/src/mcp/tools/seed-passthrough.js +29 -0
  31. package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
  32. package/dist/src/mcp/tools/seed.d.ts +5 -0
  33. package/dist/src/mcp/tools/seed.d.ts.map +1 -0
  34. package/dist/src/mcp/tools/seed.js +19 -0
  35. package/dist/src/mcp/tools/seed.js.map +1 -0
  36. package/dist/src/recording/agg-converter.d.ts +25 -0
  37. package/dist/src/recording/agg-converter.d.ts.map +1 -0
  38. package/dist/src/recording/agg-converter.js +80 -0
  39. package/dist/src/recording/agg-converter.js.map +1 -0
  40. package/dist/src/recording/agg-installer.d.ts +6 -0
  41. package/dist/src/recording/agg-installer.d.ts.map +1 -0
  42. package/dist/src/recording/agg-installer.js +50 -0
  43. package/dist/src/recording/agg-installer.js.map +1 -0
  44. package/dist/src/recording/asciinema-installer.d.ts +6 -0
  45. package/dist/src/recording/asciinema-installer.d.ts.map +1 -0
  46. package/dist/src/recording/asciinema-installer.js +50 -0
  47. package/dist/src/recording/asciinema-installer.js.map +1 -0
  48. package/dist/src/recording/asciinema-recorder.d.ts +26 -0
  49. package/dist/src/recording/asciinema-recorder.d.ts.map +1 -0
  50. package/dist/src/recording/asciinema-recorder.js +52 -0
  51. package/dist/src/recording/asciinema-recorder.js.map +1 -0
  52. package/dist/src/recording/cast-generator.d.ts +7 -0
  53. package/dist/src/recording/cast-generator.d.ts.map +1 -0
  54. package/dist/src/recording/cast-generator.js +97 -0
  55. package/dist/src/recording/cast-generator.js.map +1 -0
  56. package/dist/src/recording/filename-generator.d.ts +19 -0
  57. package/dist/src/recording/filename-generator.d.ts.map +1 -0
  58. package/dist/src/recording/filename-generator.js +67 -0
  59. package/dist/src/recording/filename-generator.js.map +1 -0
  60. package/dist/src/recording/gif-generator.d.ts +21 -0
  61. package/dist/src/recording/gif-generator.d.ts.map +1 -0
  62. package/dist/src/recording/gif-generator.js +121 -0
  63. package/dist/src/recording/gif-generator.js.map +1 -0
  64. package/dist/src/recording/recording-dir.d.ts +5 -0
  65. package/dist/src/recording/recording-dir.d.ts.map +1 -0
  66. package/dist/src/recording/recording-dir.js +13 -0
  67. package/dist/src/recording/recording-dir.js.map +1 -0
  68. package/dist/src/recording/recording-orchestrator.d.ts +50 -0
  69. package/dist/src/recording/recording-orchestrator.d.ts.map +1 -0
  70. package/dist/src/recording/recording-orchestrator.js +98 -0
  71. package/dist/src/recording/recording-orchestrator.js.map +1 -0
  72. package/dist/src/recording/resume-detector.d.ts +10 -0
  73. package/dist/src/recording/resume-detector.d.ts.map +1 -0
  74. package/dist/src/recording/resume-detector.js +14 -0
  75. package/dist/src/recording/resume-detector.js.map +1 -0
  76. package/dist/src/recording/segment-merger.d.ts +27 -0
  77. package/dist/src/recording/segment-merger.d.ts.map +1 -0
  78. package/dist/src/recording/segment-merger.js +65 -0
  79. package/dist/src/recording/segment-merger.js.map +1 -0
  80. package/dist/src/recording/terminal-recorder.d.ts +31 -0
  81. package/dist/src/recording/terminal-recorder.d.ts.map +1 -0
  82. package/dist/src/recording/terminal-recorder.js +111 -0
  83. package/dist/src/recording/terminal-recorder.js.map +1 -0
  84. package/dist/src/scripts/postinstall.d.ts +2 -0
  85. package/dist/src/scripts/postinstall.d.ts.map +1 -0
  86. package/dist/src/scripts/postinstall.js +29 -0
  87. package/dist/src/scripts/postinstall.js.map +1 -0
  88. package/dist/src/seed/extractor.d.ts +15 -0
  89. package/dist/src/seed/extractor.d.ts.map +1 -0
  90. package/dist/src/seed/extractor.js +88 -0
  91. package/dist/src/seed/extractor.js.map +1 -0
  92. package/dist/src/seed/generator.d.ts +12 -0
  93. package/dist/src/seed/generator.d.ts.map +1 -0
  94. package/dist/src/seed/generator.js +66 -0
  95. package/dist/src/seed/generator.js.map +1 -0
  96. package/dist/src/seed/passthrough-generator.d.ts +31 -0
  97. package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
  98. package/dist/src/seed/passthrough-generator.js +80 -0
  99. package/dist/src/seed/passthrough-generator.js.map +1 -0
  100. package/dist/src/seed/schema.d.ts +145 -0
  101. package/dist/src/seed/schema.d.ts.map +1 -0
  102. package/dist/src/seed/schema.js +37 -0
  103. package/dist/src/seed/schema.js.map +1 -0
  104. package/dist/src/tui/components/TUIApp.d.ts +20 -0
  105. package/dist/src/tui/components/TUIApp.d.ts.map +1 -0
  106. package/dist/src/tui/components/TUIApp.js +84 -0
  107. package/dist/src/tui/components/TUIApp.js.map +1 -0
  108. package/dist/src/tui/hooks/event-store-reader.d.ts +28 -0
  109. package/dist/src/tui/hooks/event-store-reader.d.ts.map +1 -0
  110. package/dist/src/tui/hooks/event-store-reader.js +141 -0
  111. package/dist/src/tui/hooks/event-store-reader.js.map +1 -0
  112. package/dist/src/tui/hooks/useEventStorePoller.d.ts +12 -0
  113. package/dist/src/tui/hooks/useEventStorePoller.d.ts.map +1 -0
  114. package/dist/src/tui/hooks/useEventStorePoller.js +84 -0
  115. package/dist/src/tui/hooks/useEventStorePoller.js.map +1 -0
  116. package/dist/src/tui/screens/DashboardScreen.d.ts +4 -0
  117. package/dist/src/tui/screens/DashboardScreen.d.ts.map +1 -0
  118. package/dist/src/tui/screens/DashboardScreen.js +132 -0
  119. package/dist/src/tui/screens/DashboardScreen.js.map +1 -0
  120. package/dist/src/tui/screens/DebugScreen.d.ts +4 -0
  121. package/dist/src/tui/screens/DebugScreen.d.ts.map +1 -0
  122. package/dist/src/tui/screens/DebugScreen.js +40 -0
  123. package/dist/src/tui/screens/DebugScreen.js.map +1 -0
  124. package/dist/src/tui/screens/EvolutionScreen.d.ts +4 -0
  125. package/dist/src/tui/screens/EvolutionScreen.d.ts.map +1 -0
  126. package/dist/src/tui/screens/EvolutionScreen.js +136 -0
  127. package/dist/src/tui/screens/EvolutionScreen.js.map +1 -0
  128. package/dist/src/tui/screens/HUDPanel.d.ts +4 -0
  129. package/dist/src/tui/screens/HUDPanel.d.ts.map +1 -0
  130. package/dist/src/tui/screens/HUDPanel.js +13 -0
  131. package/dist/src/tui/screens/HUDPanel.js.map +1 -0
  132. package/dist/src/tui/screens/InterviewScreen.d.ts +4 -0
  133. package/dist/src/tui/screens/InterviewScreen.d.ts.map +1 -0
  134. package/dist/src/tui/screens/InterviewScreen.js +103 -0
  135. package/dist/src/tui/screens/InterviewScreen.js.map +1 -0
  136. package/dist/src/tui/screens/LogScreen.d.ts +4 -0
  137. package/dist/src/tui/screens/LogScreen.d.ts.map +1 -0
  138. package/dist/src/tui/screens/LogScreen.js +83 -0
  139. package/dist/src/tui/screens/LogScreen.js.map +1 -0
  140. package/dist/src/tui/screens/SessionListScreen.d.ts +4 -0
  141. package/dist/src/tui/screens/SessionListScreen.d.ts.map +1 -0
  142. package/dist/src/tui/screens/SessionListScreen.js +71 -0
  143. package/dist/src/tui/screens/SessionListScreen.js.map +1 -0
  144. package/dist/src/tui/screens/SpecViewerScreen.d.ts +4 -0
  145. package/dist/src/tui/screens/SpecViewerScreen.d.ts.map +1 -0
  146. package/dist/src/tui/screens/SpecViewerScreen.js +73 -0
  147. package/dist/src/tui/screens/SpecViewerScreen.js.map +1 -0
  148. package/dist/src/tui/widgets/DriftMeter.d.ts +15 -0
  149. package/dist/src/tui/widgets/DriftMeter.d.ts.map +1 -0
  150. package/dist/src/tui/widgets/DriftMeter.js +27 -0
  151. package/dist/src/tui/widgets/DriftMeter.js.map +1 -0
  152. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts +9 -0
  153. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts.map +1 -0
  154. package/dist/src/tui/widgets/GestaltPrincipleBar.js +35 -0
  155. package/dist/src/tui/widgets/GestaltPrincipleBar.js.map +1 -0
  156. package/dist/src/tui/widgets/TaskDAGTree.d.ts +15 -0
  157. package/dist/src/tui/widgets/TaskDAGTree.d.ts.map +1 -0
  158. package/dist/src/tui/widgets/TaskDAGTree.js +54 -0
  159. package/dist/src/tui/widgets/TaskDAGTree.js.map +1 -0
  160. package/package.json +1 -1
  161. package/role-agents/presentation-designer/AGENT.md +262 -0
  162. package/role-agents/presentation-designer/templates/broadside.html +292 -0
  163. package/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
  164. package/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
  165. package/role-agents/presentation-designer/templates/neo-grid.html +407 -0
  166. package/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
  167. package/role-agents/presentation-designer/templates/pink-script.html +241 -0
  168. package/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
  169. package/role-agents/presentation-designer/templates/signal.html +403 -0
  170. package/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
  171. package/role-agents/presentation-designer/templates/studio.html +379 -0
  172. package/role-agents/technical-writer/AGENT.md +38 -0
  173. package/skills/agent/SKILL.md +2 -0
@@ -0,0 +1,264 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Editorial Forest — 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=Source+Serif+4:opsz,wght@8..60,300;8..60,400;8..60,500;8..60,600;8..60,700;8..60,800&family=JetBrains+Mono:wght@400;500;700&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
+ --green: #2e4a2a;
13
+ --green-deep: #243a21;
14
+ --green-lite: #3a5a36;
15
+ --pink: #e89cb1;
16
+ --pink-deep: #d27e96;
17
+ --cream: #efe7d4;
18
+ --cream-2: #e6dcc4;
19
+ --ink: #1a1a17;
20
+ --serif: "Source Serif 4", Georgia, serif;
21
+ --mono: "JetBrains Mono", monospace;
22
+ }
23
+
24
+ .reveal { font-family: var(--serif); }
25
+ .reveal .slides { text-align: left; }
26
+ .reveal .slides section {
27
+ box-sizing: border-box;
28
+ width: 100%; height: 100%;
29
+ padding: 7vh 7vw;
30
+ display: grid;
31
+ grid-template-rows: auto 1fr auto;
32
+ overflow: hidden;
33
+ top: 0 !important; left: 0 !important;
34
+ background: var(--cream);
35
+ color: var(--ink);
36
+ }
37
+ .reveal h1,.reveal h2,.reveal h3,.reveal p,.reveal ul,.reveal ol { margin: 0; }
38
+
39
+ /* COVER overrides */
40
+ .reveal .slides section.cover { background: var(--green); color: var(--pink); }
41
+ .reveal .slides section.statement-slide { background: var(--pink); color: var(--green-deep); }
42
+ .reveal .slides section.data-slide { background: var(--green); color: var(--cream); }
43
+
44
+ /* CHROME */
45
+ .topbar {
46
+ display: flex;
47
+ justify-content: space-between;
48
+ align-items: baseline;
49
+ gap: clamp(20px,3vw,40px);
50
+ padding-bottom: 2vh;
51
+ border-bottom: 2px solid currentColor;
52
+ opacity: 0.85;
53
+ }
54
+
55
+ /* TYPOGRAPHY */
56
+ .t-display { font-family: var(--serif); font-weight: 800; line-height: 0.92; letter-spacing: -0.02em; font-size: clamp(72px, 12vw, 190px); }
57
+ .t-title { font-family: var(--serif); font-weight: 700; font-size: clamp(36px, 5.5vw, 88px); line-height: 1.0; }
58
+ .t-head { font-family: var(--serif); font-weight: 600; font-size: clamp(22px, 3vw, 48px); line-height: 1.1; }
59
+ .t-body { font-family: var(--serif); font-weight: 400; font-size: clamp(14px, 1.5vw, 22px); line-height: 1.65; }
60
+ .t-label { font-family: var(--mono); font-weight: 500; font-size: clamp(10px, 1.1vw, 16px); letter-spacing: 0.18em; text-transform: uppercase; }
61
+ .t-big { font-family: var(--serif); font-weight: 500; font-size: clamp(80px, 13vw, 210px); line-height: 0.92; letter-spacing: -0.03em; }
62
+
63
+ /* TOPIC CARD (agenda grid) */
64
+ .topic {
65
+ border-radius: 6px;
66
+ padding: clamp(20px,3vh,40px) clamp(16px,2.5vw,40px);
67
+ display: flex; flex-direction: column; justify-content: space-between;
68
+ min-height: 0;
69
+ }
70
+ .topic.t-green { background: var(--green); color: var(--pink); }
71
+ .topic.t-pink { background: var(--pink); color: var(--green-deep); }
72
+ .topic.t-greenLite { background: var(--green-lite); color: var(--pink); }
73
+ .topic.t-cream { background: var(--cream-2); color: var(--green); border: 2px solid var(--green); }
74
+ .topic .foot { font-family: var(--mono); font-size: clamp(10px,1.1vw,16px); letter-spacing: 0.12em; text-transform: uppercase; font-weight: 500; margin-top: 1rem; }
75
+
76
+ /* STEP CARD */
77
+ .step {
78
+ border-radius: 8px;
79
+ padding: clamp(18px,2.5vh,40px) clamp(14px,2vw,32px);
80
+ display: flex; flex-direction: column; min-height: 0;
81
+ border: 2.5px solid var(--green);
82
+ background: var(--cream);
83
+ color: var(--green);
84
+ }
85
+ .step.fill { background: var(--green); color: var(--pink); border-color: var(--green); }
86
+ .step.pinkfill { background: var(--pink); color: var(--green-deep); border-color: var(--pink-deep); }
87
+ .step .marker {
88
+ margin-top: auto; padding-top: 1rem;
89
+ border-top: 2px solid currentColor;
90
+ font-family: var(--mono);
91
+ font-size: clamp(10px,1.1vw,16px); letter-spacing: 0.12em; text-transform: uppercase; font-weight: 500;
92
+ display: flex; justify-content: space-between; align-items: baseline;
93
+ }
94
+
95
+ /* KPI */
96
+ .kpi { display: flex; flex-direction: column; gap: 0.75rem; padding-top: 2vh; border-top: 2px solid var(--pink); }
97
+ .kpi .big { font-family: var(--serif); font-weight: 500; font-size: clamp(80px,13vw,210px); line-height: 0.92; letter-spacing: -0.03em; color: var(--pink); }
98
+ .kpi .big .unit { font-size: 0.5em; color: var(--cream); margin-left: 4px; }
99
+
100
+ /* BAR CHART */
101
+ .bar-plot {
102
+ display: flex; align-items: flex-end; justify-content: space-between;
103
+ height: clamp(160px, 25vh, 400px);
104
+ border-left: 2px solid var(--cream); border-bottom: 2px solid var(--cream);
105
+ padding: 0 2vw;
106
+ gap: clamp(8px, 1.5vw, 24px);
107
+ }
108
+ .bar-group { display: flex; align-items: flex-end; gap: 8px; height: 100%; }
109
+ .bar { width: clamp(28px,3.5vw,56px); border-radius: 3px 3px 0 0; }
110
+ .bar.a { background: var(--pink); }
111
+ .bar.b { background: var(--cream); opacity: 0.5; }
112
+
113
+ /* CIRCLE BADGE */
114
+ .circle-badge {
115
+ width: clamp(60px,7vw,110px); height: clamp(60px,7vw,110px);
116
+ border-radius: 50%; border: 2px solid var(--pink);
117
+ display: flex; align-items: center; justify-content: center;
118
+ font-family: var(--mono); font-size: clamp(11px,1.2vw,18px); letter-spacing: 0.1em; font-weight: 500;
119
+ }
120
+ </style>
121
+ </head>
122
+ <body style="margin:0;background:#1c3018">
123
+ <div class="reveal">
124
+ <div class="slides">
125
+
126
+ <!-- COVER -->
127
+ <section class="cover" style="padding:7vh 7vw;display:flex;flex-direction:column;">
128
+ <div class="topbar" style="border-color:rgba(232,156,177,0.4)">
129
+ <span class="t-label">{{ORGANIZATION}}</span>
130
+ <div class="circle-badge">{{DATE}}</div>
131
+ <span class="t-label">{{AUTHOR}}</span>
132
+ </div>
133
+ <div style="flex:1;display:flex;flex-direction:column;justify-content:center;gap:2vh">
134
+ <p class="t-label" style="letter-spacing:0.22em">{{CATEGORY}}</p>
135
+ <div class="t-display">{{TITLE}}</div>
136
+ <p class="t-body" style="max-width:50%;opacity:0.75;font-size:clamp(14px,1.8vw,28px)">{{SUBTITLE}}</p>
137
+ </div>
138
+ </section>
139
+
140
+ <!-- AGENDA (topic grid) -->
141
+ <section>
142
+ <div class="topbar">
143
+ <div class="t-head">목차</div>
144
+ <span class="t-label">{{DATE}}</span>
145
+ </div>
146
+ <div style="flex:1;display:grid;grid-template-columns:1.5fr 1fr 1fr;grid-template-rows:1fr 1fr;gap:clamp(12px,1.5vw,24px);margin-top:2.5vh">
147
+ <div class="topic t-green" style="grid-row:span 2">
148
+ <div><p class="t-label" style="margin-bottom:0.5rem">01</p><p class="t-head" style="color:var(--pink)">주요 섹션 제목</p></div>
149
+ <p class="foot">Section</p>
150
+ </div>
151
+ <div class="topic t-pink">
152
+ <p class="t-label" style="margin-bottom:0.5rem">02</p>
153
+ <p class="t-head" style="font-size:clamp(18px,2.2vw,34px)">섹션</p>
154
+ <p class="foot">Section</p>
155
+ </div>
156
+ <div class="topic t-cream">
157
+ <p class="t-label" style="margin-bottom:0.5rem">03</p>
158
+ <p class="t-head" style="font-size:clamp(18px,2.2vw,34px)">섹션</p>
159
+ <p class="foot">Section</p>
160
+ </div>
161
+ <div class="topic t-greenLite">
162
+ <p class="t-label" style="margin-bottom:0.5rem">04</p>
163
+ <p class="t-head" style="font-size:clamp(18px,2.2vw,34px)">섹션</p>
164
+ <p class="foot">Section</p>
165
+ </div>
166
+ <div class="topic" style="background:var(--cream-2);color:var(--green);border:2px solid var(--green)">
167
+ <p class="t-label" style="margin-bottom:0.5rem">05</p>
168
+ <p class="t-head" style="font-size:clamp(18px,2.2vw,34px)">섹션</p>
169
+ <p class="foot">Section</p>
170
+ </div>
171
+ </div>
172
+ </section>
173
+
174
+ <!-- STATEMENT (pink bg) -->
175
+ <section class="statement-slide" style="padding:7vh 9vw;display:flex;flex-direction:column;justify-content:space-between;">
176
+ <div class="t-display" style="font-size:clamp(48px,7.5vw,120px)">
177
+ "핵심 선언문이<br>여기에 들어갑니다"
178
+ </div>
179
+ <div style="display:flex;justify-content:space-between;align-items:flex-end;padding-top:2vh;border-top:2px solid var(--green-deep)">
180
+ <span class="t-label" style="color:var(--green-deep)">— 발언자, 맥락</span>
181
+ <span class="t-label" style="color:var(--green-deep)">{{DATE}}</span>
182
+ </div>
183
+ </section>
184
+
185
+ <!-- DATA (green bg) -->
186
+ <section class="data-slide">
187
+ <div class="topbar" style="border-color:rgba(239,231,212,0.3)">
188
+ <div class="t-head" style="color:var(--cream)">데이터 분석</div>
189
+ <span class="t-label" style="color:var(--cream);opacity:0.6">{{DATE}}</span>
190
+ </div>
191
+ <div style="flex:1;display:grid;grid-template-columns:1fr 1.5fr;gap:clamp(30px,4vw,60px);align-items:center">
192
+ <div>
193
+ <p class="t-label" style="color:var(--pink);margin-bottom:1rem">Key Insight</p>
194
+ <p class="t-head" style="color:var(--cream);font-size:clamp(18px,2.5vw,38px)">데이터가 말하는 것</p>
195
+ <p class="t-body" style="color:var(--cream);opacity:0.7;margin-top:1.5vh">설명 내용</p>
196
+ </div>
197
+ <div class="bar-plot">
198
+ <div class="bar-group"><div class="bar a" style="height:80%"></div><div class="bar b" style="height:60%"></div></div>
199
+ <div class="bar-group"><div class="bar a" style="height:65%"></div><div class="bar b" style="height:50%"></div></div>
200
+ <div class="bar-group"><div class="bar a" style="height:90%"></div><div class="bar b" style="height:70%"></div></div>
201
+ <div class="bar-group"><div class="bar a" style="height:55%"></div><div class="bar b" style="height:40%"></div></div>
202
+ </div>
203
+ </div>
204
+ </section>
205
+
206
+ <!-- FRAMEWORK (4-step) -->
207
+ <section>
208
+ <div class="topbar">
209
+ <div class="t-head">프레임워크</div>
210
+ <span class="t-label">{{PERIOD}}</span>
211
+ </div>
212
+ <div style="flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,2vw,28px);margin-top:2.5vh">
213
+ <div class="step fill"><p class="t-label" style="margin-bottom:1rem;color:var(--pink)">01</p><p class="t-head" style="color:var(--pink);font-size:clamp(16px,2vw,30px)">단계명</p><p class="t-body" style="color:var(--pink);opacity:0.8;margin-top:0.75rem;font-size:0.85em">설명</p><div class="marker"><span>Phase 1</span></div></div>
214
+ <div class="step"> <p class="t-label" style="margin-bottom:1rem">02</p><p class="t-head" style="font-size:clamp(16px,2vw,30px)">단계명</p><p class="t-body" style="opacity:0.7;margin-top:0.75rem;font-size:0.85em">설명</p><div class="marker"><span>Phase 2</span></div></div>
215
+ <div class="step pinkfill"><p class="t-label" style="margin-bottom:1rem">03</p><p class="t-head" style="font-size:clamp(16px,2vw,30px)">단계명</p><p class="t-body" style="opacity:0.8;margin-top:0.75rem;font-size:0.85em">설명</p><div class="marker"><span>Phase 3</span></div></div>
216
+ <div class="step"> <p class="t-label" style="margin-bottom:1rem">04</p><p class="t-head" style="font-size:clamp(16px,2vw,30px)">단계명</p><p class="t-body" style="opacity:0.7;margin-top:0.75rem;font-size:0.85em">설명</p><div class="marker"><span>Phase 4</span></div></div>
217
+ </div>
218
+ </section>
219
+
220
+ <!-- STATS (green bg) -->
221
+ <section class="data-slide">
222
+ <div class="topbar" style="border-color:rgba(239,231,212,0.3)">
223
+ <div class="t-head" style="color:var(--cream)">성과 지표</div>
224
+ <span class="t-label" style="color:var(--cream);opacity:0.6">{{DATE}}</span>
225
+ </div>
226
+ <div style="flex:1;display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(30px,5vw,60px);align-items:start;margin-top:3vh">
227
+ <div class="kpi"><div class="big">98<span class="unit">%</span></div><p class="t-label" style="color:var(--cream)">지표명</p><p class="t-body" style="color:var(--cream);opacity:0.6">설명</p></div>
228
+ <div class="kpi"><div class="big">41<span class="unit">개</span></div><p class="t-label" style="color:var(--cream)">지표명</p><p class="t-body" style="color:var(--cream);opacity:0.6">설명</p></div>
229
+ <div class="kpi"><div class="big">86<span class="unit">%</span></div><p class="t-label" style="color:var(--cream)">지표명</p><p class="t-body" style="color:var(--cream);opacity:0.6">설명</p></div>
230
+ </div>
231
+ </section>
232
+
233
+ <!-- CLOSING -->
234
+ <section class="cover" style="padding:7vh 7vw;display:flex;flex-direction:column;">
235
+ <div class="topbar" style="border-color:rgba(232,156,177,0.4)">
236
+ <span class="t-label">{{ORGANIZATION}}</span>
237
+ <span class="t-label">{{DATE}}</span>
238
+ </div>
239
+ <div style="flex:1;display:flex;flex-direction:column;justify-content:center;gap:2vh">
240
+ <p class="t-label" style="letter-spacing:0.22em">Thank You</p>
241
+ <div class="t-display" style="font-size:clamp(60px,10vw,160px)">Q&amp;A</div>
242
+ </div>
243
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:2vw;border-top:2px solid rgba(232,156,177,0.4);padding-top:2vh">
244
+ <div><p class="t-label" style="opacity:0.6;margin-bottom:0.5rem">발표자</p><p class="t-body" style="font-weight:700">{{AUTHOR}}</p></div>
245
+ <div><p class="t-label" style="opacity:0.6;margin-bottom:0.5rem">이메일</p><p class="t-body">{{EMAIL}}</p></div>
246
+ <div><p class="t-label" style="opacity:0.6;margin-bottom:0.5rem">소속</p><p class="t-body">{{ORG}}</p></div>
247
+ </div>
248
+ </section>
249
+
250
+ </div>
251
+ </div>
252
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
253
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
254
+ <script>
255
+ Reveal.initialize({
256
+ hash: true, width: 1600, height: 900, margin: 0,
257
+ minScale: 0.1, maxScale: 1.5,
258
+ controls: true, progress: false, slideNumber: false,
259
+ transition: 'fade', backgroundTransition: 'fade',
260
+ plugins: [RevealNotes],
261
+ });
262
+ </script>
263
+ </body>
264
+ </html>
@@ -0,0 +1,273 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Emerald Editorial — 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=Bodoni+Moda:wght@500;700;800;900&family=Manrope:wght@400;500;600;700;800&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
+ --bg: #3CD896;
13
+ --bg-2: #2DC684;
14
+ --ink: #0F1A5C;
15
+ --ink-2: #1B2774;
16
+ --paper: #F1E9D6;
17
+ --rule: rgba(15, 26, 92, 0.22);
18
+ --rule-strong: rgba(15, 26, 92, 0.85);
19
+ --display-font: 'Bodoni Moda', serif;
20
+ }
21
+
22
+ .reveal { font-family: 'Manrope', sans-serif; }
23
+ .reveal .slides { text-align: left; }
24
+ .reveal .slides section {
25
+ box-sizing: border-box;
26
+ width: 100%; height: 100%;
27
+ padding: 0;
28
+ overflow: hidden;
29
+ top: 0 !important; left: 0 !important;
30
+ background: var(--bg);
31
+ color: var(--ink);
32
+ }
33
+ .reveal h1,.reveal h2,.reveal h3,.reveal p,.reveal ul,.reveal ol { margin: 0; }
34
+
35
+ /* STAGE wrapper inside each section */
36
+ .stage {
37
+ position: absolute; inset: 0;
38
+ padding: 56px 80px 70px;
39
+ display: grid;
40
+ grid-template-rows: auto 1fr auto;
41
+ }
42
+
43
+ /* CHROME */
44
+ .masthead, .footline {
45
+ display: flex;
46
+ justify-content: space-between;
47
+ align-items: center;
48
+ font-size: clamp(14px, 1.6vw, 22px);
49
+ font-weight: 700;
50
+ letter-spacing: 0.05em;
51
+ color: var(--ink);
52
+ }
53
+
54
+ /* RULE */
55
+ .rule-h { height: 4px; background: var(--ink); }
56
+ .rule-h.thin { height: 1px; background: var(--rule); }
57
+
58
+ /* ORNAMENT — double rule with word */
59
+ .ornament {
60
+ display: inline-flex;
61
+ align-items: center;
62
+ gap: 26px;
63
+ justify-content: center;
64
+ width: 100%;
65
+ }
66
+ .ornament .word {
67
+ font-family: var(--display-font);
68
+ font-weight: 800;
69
+ font-size: 0.42em;
70
+ letter-spacing: 0.02em;
71
+ padding: 0 4px;
72
+ }
73
+ .ornament .lines {
74
+ flex: 1; height: 18px; position: relative;
75
+ }
76
+ .ornament .lines::before,
77
+ .ornament .lines::after {
78
+ content: "";
79
+ position: absolute;
80
+ left: 0; right: 0;
81
+ height: 4px;
82
+ background: var(--ink);
83
+ }
84
+ .ornament .lines::before { top: 3px; }
85
+ .ornament .lines::after { bottom: 3px; }
86
+
87
+ /* TYPOGRAPHY */
88
+ .t-display {
89
+ font-family: var(--display-font);
90
+ font-weight: 900;
91
+ line-height: 0.88;
92
+ letter-spacing: -0.01em;
93
+ color: var(--ink);
94
+ }
95
+ .t-display.xl { font-size: clamp(100px, 18vw, 280px); }
96
+ .t-display.lg { font-size: clamp(60px, 10vw, 160px); }
97
+ .t-display.md { font-size: clamp(36px, 5.5vw, 88px); }
98
+ .t-head { font-family: var(--display-font); font-weight: 700; font-size: clamp(24px, 3.5vw, 52px); line-height: 1.1; color: var(--ink); }
99
+ .t-body { font-size: clamp(14px, 1.5vw, 22px); line-height: 1.6; color: var(--ink); font-weight: 400; }
100
+ .t-label { font-family: 'Manrope', sans-serif; font-size: clamp(11px, 1.1vw, 16px); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink); opacity: 0.7; }
101
+ .t-num { font-family: var(--display-font); font-weight: 900; font-size: clamp(60px, 9vw, 140px); line-height: 0.92; color: var(--ink); }
102
+
103
+ /* PAPER PANEL */
104
+ .panel-paper { background: var(--paper); }
105
+ .panel-ink { background: var(--ink); color: var(--bg); }
106
+
107
+ /* KPI CARD */
108
+ .kpi {
109
+ background: var(--ink); color: var(--bg);
110
+ padding: clamp(20px, 3vh, 36px) clamp(18px, 2.5vw, 32px);
111
+ display: flex; flex-direction: column; justify-content: space-between;
112
+ gap: 1rem; overflow: hidden;
113
+ }
114
+ .kpi.alt { background: var(--paper); color: var(--ink); }
115
+ .kpi .delta {
116
+ display: inline-block; font-weight: 800; letter-spacing: 0.08em;
117
+ font-size: clamp(11px, 1.2vw, 18px); padding: 4px 12px;
118
+ background: var(--bg); color: var(--ink); align-self: flex-start;
119
+ }
120
+
121
+ /* STEP CARD */
122
+ .step {
123
+ background: var(--ink); color: var(--bg);
124
+ padding: clamp(18px, 2.5vh, 32px) clamp(16px, 2vw, 28px);
125
+ display: flex; flex-direction: column;
126
+ }
127
+ .step.alt { background: var(--paper); color: var(--ink); }
128
+
129
+ /* MARK (inline badge) */
130
+ .mark { background: var(--ink); color: var(--bg); padding: 6px 18px; font-weight: 700; letter-spacing: 0.1em; }
131
+ </style>
132
+ </head>
133
+ <body style="margin:0;background:#1a4a38">
134
+ <div class="reveal">
135
+ <div class="slides">
136
+
137
+ <!-- COVER -->
138
+ <section>
139
+ <div class="stage" style="padding:56px 80px;text-align:center;display:flex;flex-direction:column;align-items:center;">
140
+ <div class="masthead" style="width:100%">
141
+ <span class="t-label">{{ORGANIZATION}}</span>
142
+ <span class="t-label">{{DATE}}</span>
143
+ </div>
144
+ <div style="flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.5vh">
145
+ <div class="ornament" style="font-size:clamp(20px,2.5vw,36px)">
146
+ <div class="lines"></div>
147
+ <span class="word">{{CATEGORY}}</span>
148
+ <div class="lines"></div>
149
+ </div>
150
+ <div class="t-display xl" style="text-align:center">{{TITLE}}</div>
151
+ <div class="ornament" style="font-size:clamp(20px,2.5vw,36px)">
152
+ <div class="lines"></div>
153
+ <span class="word">{{SUBTITLE}}</span>
154
+ <div class="lines"></div>
155
+ </div>
156
+ </div>
157
+ <div class="footline" style="width:100%">
158
+ <span class="t-label">{{AUTHOR}}</span>
159
+ <span class="t-label">Vol. {{ISSUE}}</span>
160
+ </div>
161
+ </div>
162
+ </section>
163
+
164
+ <!-- SECTION OPENER (split) -->
165
+ <section style="padding:0">
166
+ <div style="position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr">
167
+ <div class="panel-ink" style="padding:clamp(40px,5vw,80px);display:flex;align-items:center;justify-content:center;overflow:hidden">
168
+ <div class="t-display xl" style="color:var(--bg);text-align:center">01</div>
169
+ </div>
170
+ <div style="padding:clamp(40px,5vw,80px);display:flex;flex-direction:column;justify-content:center;gap:1.5rem;overflow:hidden">
171
+ <span class="t-label">Chapter</span>
172
+ <div class="t-head" style="font-size:clamp(28px,4vw,62px)">섹션<br>제목</div>
173
+ <div class="rule-h" style="width:36px"></div>
174
+ <p class="t-body">서브 설명이 여기에 들어갑니다.</p>
175
+ </div>
176
+ </div>
177
+ </section>
178
+
179
+ <!-- STATEMENT + 3-COL SUPPORT -->
180
+ <section>
181
+ <div class="stage">
182
+ <div>
183
+ <div class="t-head" style="font-size:clamp(28px,4vw,60px)">핵심 주장</div>
184
+ <div class="rule-h" style="margin-top:1.5vh"></div>
185
+ </div>
186
+ <div style="display:flex;align-items:center">
187
+ <div class="t-display lg">이것이<br>핵심이다</div>
188
+ </div>
189
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,3vw,50px);border-top:4px solid var(--ink);padding-top:2vh">
190
+ <div><p class="t-label" style="margin-bottom:0.5rem">근거 01</p><p class="t-body">설명 내용</p></div>
191
+ <div><p class="t-label" style="margin-bottom:0.5rem">근거 02</p><p class="t-body">설명 내용</p></div>
192
+ <div><p class="t-label" style="margin-bottom:0.5rem">근거 03</p><p class="t-body">설명 내용</p></div>
193
+ </div>
194
+ </div>
195
+ </section>
196
+
197
+ <!-- KPI GRID -->
198
+ <section>
199
+ <div class="stage">
200
+ <div style="display:grid;grid-template-columns:1.2fr 1fr;gap:clamp(40px,5vw,80px);align-items:end">
201
+ <div class="t-head" style="font-size:clamp(28px,3.5vw,54px)">핵심 지표</div>
202
+ <p class="t-body" style="opacity:0.7">{{SECTION_LABEL}}</p>
203
+ </div>
204
+ <div style="display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(16px,2vw,28px);margin-top:2vh">
205
+ <div class="kpi"><div class="t-num">98%</div><div><p class="t-label" style="color:var(--bg)">지표명</p><div class="delta">+12%p</div></div></div>
206
+ <div class="kpi alt"><div class="t-num">2.4s</div><div><p class="t-label">지표명</p></div></div>
207
+ <div class="kpi"><div class="t-num">41</div><div><p class="t-label" style="color:var(--bg)">지표명</p><div class="delta">+8</div></div></div>
208
+ <div class="kpi alt"><div class="t-num">86%</div><div><p class="t-label">지표명</p></div></div>
209
+ </div>
210
+ <div class="footline" style="margin-top:1.5vh">
211
+ <span class="t-label">{{ORG}}</span>
212
+ <span class="t-label">{{DATE}}</span>
213
+ </div>
214
+ </div>
215
+ </section>
216
+
217
+ <!-- PROCESS — 4 steps -->
218
+ <section>
219
+ <div class="stage">
220
+ <div style="display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(40px,5vw,80px);align-items:end">
221
+ <div class="t-head">실행 단계</div>
222
+ <p class="t-body" style="opacity:0.7">{{PERIOD}}</p>
223
+ </div>
224
+ <div style="display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(16px,2vw,28px);margin-top:2vh">
225
+ <div class="step"><p class="t-label" style="color:var(--bg);margin-bottom:1rem">01</p><p class="t-body" style="color:var(--bg)">Step 제목</p><p class="t-body" style="color:var(--bg);opacity:0.7;font-size:0.85em;margin-top:0.5rem">설명</p></div>
226
+ <div class="step alt"><p class="t-label" style="margin-bottom:1rem">02</p><p class="t-body">Step 제목</p><p class="t-body" style="opacity:0.7;font-size:0.85em;margin-top:0.5rem">설명</p></div>
227
+ <div class="step"><p class="t-label" style="color:var(--bg);margin-bottom:1rem">03</p><p class="t-body" style="color:var(--bg)">Step 제목</p><p class="t-body" style="color:var(--bg);opacity:0.7;font-size:0.85em;margin-top:0.5rem">설명</p></div>
228
+ <div class="step alt"><p class="t-label" style="margin-bottom:1rem">04</p><p class="t-body">Step 제목</p><p class="t-body" style="opacity:0.7;font-size:0.85em;margin-top:0.5rem">설명</p></div>
229
+ </div>
230
+ <div class="footline" style="margin-top:1.5vh">
231
+ <span class="t-label">{{ORG}}</span>
232
+ <span class="t-label">{{DATE}}</span>
233
+ </div>
234
+ </div>
235
+ </section>
236
+
237
+ <!-- CLOSING -->
238
+ <section>
239
+ <div class="stage" style="text-align:center;align-items:center">
240
+ <div class="masthead" style="width:100%;justify-content:center">
241
+ <span class="t-label">{{ORGANIZATION}}</span>
242
+ </div>
243
+ <div style="display:flex;flex-direction:column;align-items:center;gap:1.5vh">
244
+ <div class="ornament" style="font-size:clamp(20px,2.5vw,36px)">
245
+ <div class="lines"></div>
246
+ <span class="word">Thank You</span>
247
+ <div class="lines"></div>
248
+ </div>
249
+ <div class="t-display lg" style="text-align:center">Q&amp;A</div>
250
+ </div>
251
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,3vw,40px);border-top:4px solid var(--ink);padding-top:2vh;text-align:left">
252
+ <div><p class="t-label" style="margin-bottom:0.5rem">발표자</p><p class="t-body" style="font-weight:700">{{AUTHOR}}</p></div>
253
+ <div><p class="t-label" style="margin-bottom:0.5rem">이메일</p><p class="t-body">{{EMAIL}}</p></div>
254
+ <div><p class="t-label" style="margin-bottom:0.5rem">소속</p><p class="t-body">{{ORG}}</p></div>
255
+ </div>
256
+ </div>
257
+ </section>
258
+
259
+ </div>
260
+ </div>
261
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
262
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
263
+ <script>
264
+ Reveal.initialize({
265
+ hash: true, width: 1600, height: 900, margin: 0,
266
+ minScale: 0.1, maxScale: 1.5,
267
+ controls: true, progress: false, slideNumber: false,
268
+ transition: 'fade', backgroundTransition: 'fade',
269
+ plugins: [RevealNotes],
270
+ });
271
+ </script>
272
+ </body>
273
+ </html>