@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,403 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Signal — 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:ital,opsz,wght@0,8..60,300;0,8..60,400;0,8..60,600;0,8..60,700;1,8..60,300;1,8..60,400;1,8..60,600;1,8..60,700&family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600&family=IBM+Plex+Mono:wght@300;400;500&display=swap" rel="stylesheet" />
9
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.css" />
10
+ <style>
11
+ /* ── DESIGN TOKENS ────────────────────────────────────────────── */
12
+ :root {
13
+ --c-bg: #1c2644;
14
+ --c-bg-alt: #232f55;
15
+ --c-bg-light: #f0ece3;
16
+ --c-bg-light-alt: #e6e0d4;
17
+ --c-fg: #e2dcd0;
18
+ --c-fg-2: #8a96a8;
19
+ --c-fg-3: #4e5a6e;
20
+ --c-fg-light: #1a2030;
21
+ --c-fg-light-2: #5a6270;
22
+ --c-fg-light-3: #9aa0a8;
23
+ --c-accent: #c8a870;
24
+ --c-border: #2e3d5c;
25
+ --c-border-light: #cac4b4;
26
+ --f-display: "Source Serif 4", serif;
27
+ --f-heading: "Source Serif 4", serif;
28
+ --f-body: "DM Sans", sans-serif;
29
+ --f-mono: "IBM Plex Mono", monospace;
30
+ --sz-display: 9.5vw;
31
+ --sz-h1: 5.2vw;
32
+ --sz-h2: 3vw;
33
+ --sz-h3: 1.9vw;
34
+ --sz-lead: 1.4vw;
35
+ --sz-body: 1.05vw;
36
+ --sz-caption: 0.82vw;
37
+ --sz-label: 0.7vw;
38
+ --pad-x: 7.5vw;
39
+ --pad-y: 5.5vh;
40
+ --gap-lg: 4vh;
41
+ --gap-md: 2.5vh;
42
+ --gap-sm: 1.2vh;
43
+ }
44
+
45
+ /* ── REVEAL RESET ─────────────────────────────────────────────── */
46
+ .reveal { font-family: var(--f-body); }
47
+ .reveal .slides { text-align: left; }
48
+ .reveal .slides section {
49
+ box-sizing: border-box;
50
+ width: 100%;
51
+ height: 100%;
52
+ padding: var(--pad-y) var(--pad-x);
53
+ display: grid;
54
+ grid-template-rows: auto 1fr auto;
55
+ overflow: hidden;
56
+ top: 0 !important;
57
+ left: 0 !important;
58
+ }
59
+ .reveal h1, .reveal h2, .reveal h3, .reveal h4,
60
+ .reveal p, .reveal ul, .reveal ol { margin: 0; }
61
+
62
+ /* ── THEMES ───────────────────────────────────────────────────── */
63
+ .reveal .slides section.dark { background: var(--c-bg); color: var(--c-fg); }
64
+ .reveal .slides section.light { background: var(--c-bg-light); color: var(--c-fg-light); }
65
+
66
+ .reveal .slides section.dark::before {
67
+ content: "";
68
+ position: absolute;
69
+ inset: 0;
70
+ background-image:
71
+ linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
72
+ linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);
73
+ background-size: 80px 80px;
74
+ pointer-events: none;
75
+ z-index: 0;
76
+ }
77
+
78
+ /* ── CHROME / FOOTER ──────────────────────────────────────────── */
79
+ .slide-chrome, .slide-foot {
80
+ display: flex;
81
+ justify-content: space-between;
82
+ align-items: center;
83
+ position: relative;
84
+ z-index: 1;
85
+ }
86
+ .dark .slide-chrome { border-bottom: 1px solid var(--c-border); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
87
+ .dark .slide-foot { border-top: 1px solid var(--c-border); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
88
+ .light .slide-chrome { border-bottom: 1px solid var(--c-border-light); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
89
+ .light .slide-foot { border-top: 1px solid var(--c-border-light); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
90
+ .slide-body { min-height: 0; position: relative; z-index: 1; }
91
+
92
+ /* ── SLIDE VARIANTS ───────────────────────────────────────────── */
93
+ .slide--cover, .slide--chapter, .slide--quote, .slide--end, .slide--statement {
94
+ display: flex !important;
95
+ flex-direction: column;
96
+ }
97
+ .slide--cover .slide-chrome, .slide--cover .slide-foot,
98
+ .slide--chapter .slide-chrome, .slide--chapter .slide-foot,
99
+ .slide--quote .slide-chrome, .slide--quote .slide-foot,
100
+ .slide--end .slide-chrome, .slide--end .slide-foot,
101
+ .slide--statement .slide-chrome, .slide--statement .slide-foot { display: none; }
102
+
103
+ .slide--cover { justify-content: flex-end; }
104
+ .slide--chapter { justify-content: center; }
105
+ .slide--statement { justify-content: center; }
106
+ .slide--quote { justify-content: center; }
107
+ .slide--end { justify-content: center; }
108
+
109
+ .slide--split .slide-body { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gap-md); align-items: center; }
110
+ .slide--stats .slide-body { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: var(--gap-md); }
111
+ .slide--list .slide-body { display: grid; grid-template-columns: 2fr 3fr; gap: var(--gap-md); }
112
+ .slide--compare .slide-body { display: grid; grid-template-columns: 1fr 1fr; height: 100%; }
113
+
114
+ /* ── TYPOGRAPHY ───────────────────────────────────────────────── */
115
+ .display { font-family: var(--f-display); font-size: var(--sz-display); font-weight: 700; line-height: 0.92; letter-spacing: -0.02em; }
116
+ .h1 { font-family: var(--f-heading); font-size: var(--sz-h1); font-weight: 700; line-height: 0.95; letter-spacing: -0.01em; }
117
+ .h2 { font-family: var(--f-heading); font-size: var(--sz-h2); font-weight: 600; line-height: 1.1; }
118
+ .h3 { font-size: var(--sz-h3); font-weight: 500; line-height: 1.2; }
119
+ .lead { font-size: var(--sz-lead); font-weight: 400; line-height: 1.5; }
120
+ .body { font-size: var(--sz-body); font-weight: 400; line-height: 1.65; }
121
+ .caption { font-size: var(--sz-caption); line-height: 1.5; }
122
+ .label { font-family: var(--f-mono); font-size: var(--sz-label); font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; }
123
+ .kicker { font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.12em; text-transform: uppercase; color: var(--c-accent); display: block; margin-bottom: var(--gap-sm); }
124
+ .muted { opacity: 0.5; }
125
+ .accent { color: var(--c-accent); }
126
+ /* Italic+gold highlight — Signal's signature */
127
+ .dark .display em, .dark .h1 em, .dark .h2 em, .dark .h3 em { font-style: italic; color: var(--c-accent); }
128
+
129
+ /* ── COMPONENTS ───────────────────────────────────────────────── */
130
+ .rule { width: 36px; height: 1px; background: var(--c-accent); margin: var(--gap-sm) 0; }
131
+
132
+ .tag {
133
+ display: inline-block;
134
+ border: 1px solid var(--c-accent);
135
+ color: var(--c-accent);
136
+ font-family: var(--f-mono);
137
+ font-size: var(--sz-label);
138
+ letter-spacing: 0.1em;
139
+ text-transform: uppercase;
140
+ padding: 0.25em 0.75em;
141
+ }
142
+
143
+ .stat-card { padding: var(--gap-md) 0; border-top: 1px solid var(--c-border); }
144
+ .stat-card .num { font-family: var(--f-heading); font-size: 6vw; font-weight: 700; line-height: 1; color: var(--c-accent); }
145
+ .stat-card .unit { font-size: var(--sz-h3); font-weight: 500; margin-left: 0.2em; }
146
+
147
+ .img-placeholder {
148
+ background: var(--c-bg-alt);
149
+ width: 100%; height: 100%; min-height: 30vh;
150
+ display: flex; align-items: center; justify-content: center;
151
+ font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.1em;
152
+ color: var(--c-fg-3);
153
+ }
154
+
155
+ .bullet-list { list-style: none; padding: 0; display: flex; flex-direction: column; gap: var(--gap-sm); }
156
+ .bullet-list li { display: flex; gap: 0.75em; font-size: var(--sz-body); line-height: 1.6; }
157
+ .bullet-list li::before { content: "—"; color: var(--c-accent); flex-shrink: 0; }
158
+
159
+ .cover-meta {
160
+ margin-top: var(--gap-md);
161
+ padding-top: var(--gap-sm);
162
+ border-top: 1px solid rgba(200, 168, 112, 0.25);
163
+ display: flex;
164
+ justify-content: space-between;
165
+ align-items: center;
166
+ }
167
+
168
+ /* ── ANIMATIONS ───────────────────────────────────────────────── */
169
+ [data-anim] { opacity: 0; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); animation-duration: 0.55s; }
170
+ [data-anim][data-delay="0"] { animation-delay: 0s; }
171
+ [data-anim][data-delay="1"] { animation-delay: 0.08s; }
172
+ [data-anim][data-delay="2"] { animation-delay: 0.18s; }
173
+ [data-anim][data-delay="3"] { animation-delay: 0.3s; }
174
+ [data-anim][data-delay="4"] { animation-delay: 0.44s; }
175
+ [data-anim][data-delay="5"] { animation-delay: 0.6s; }
176
+ .reveal .present [data-anim="fade-up"] { animation-name: kFadeUp; }
177
+ .reveal .present [data-anim="fade-in"] { animation-name: kFadeIn; }
178
+ .reveal .present [data-anim="reveal-right"] { animation-name: kRevealRight; opacity: 1; }
179
+ .reveal .present [data-anim="scale-in"] { animation-name: kScaleIn; }
180
+ @keyframes kFadeUp { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }
181
+ @keyframes kFadeIn { from { opacity: 0; } to { opacity: 1; } }
182
+ @keyframes kRevealRight { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
183
+ @keyframes kScaleIn { from { opacity: 0; transform: scale(0.94); } to { opacity: 1; transform: none; } }
184
+
185
+ /* ── REVEAL UI OVERRIDES ──────────────────────────────────────── */
186
+ .reveal .controls { color: var(--c-accent); }
187
+ .reveal .progress { color: var(--c-accent); }
188
+ .reveal .slide-number { font-family: var(--f-mono); background: transparent; color: var(--c-fg-3); font-size: 0.6em; }
189
+ </style>
190
+ </head>
191
+ <body style="margin:0;background:#111">
192
+ <div class="reveal">
193
+ <div class="slides">
194
+
195
+ <!-- ════════════════════════════════════════════════
196
+ COVER
197
+ ════════════════════════════════════════════════ -->
198
+ <section class="dark slide--cover">
199
+ <div class="slide-body">
200
+ <span class="kicker" data-anim="fade-in" data-delay="0">{{ORGANIZATION}}</span>
201
+ <div class="display" data-anim="fade-up" data-delay="1">{{TITLE}}<br><em>{{SUBTITLE}}</em></div>
202
+ <div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:2vh"></div>
203
+ <div class="cover-meta" data-anim="fade-in" data-delay="3">
204
+ <span class="label muted">{{DATE}}</span>
205
+ <span class="label muted">{{AUTHOR}}</span>
206
+ </div>
207
+ </div>
208
+ </section>
209
+
210
+ <!-- ════════════════════════════════════════════════
211
+ CHAPTER DIVIDER
212
+ ════════════════════════════════════════════════ -->
213
+ <section class="dark slide--chapter">
214
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:flex-end;gap:var(--gap-sm)">
215
+ <span class="label accent" data-anim="fade-in" data-delay="0">01</span>
216
+ <div class="rule" data-anim="reveal-right" data-delay="1"></div>
217
+ <div class="h1" data-anim="fade-up" data-delay="2">챕터 <em>제목</em></div>
218
+ <p class="body muted" data-anim="fade-up" data-delay="3">서브 설명 한 줄</p>
219
+ </div>
220
+ </section>
221
+
222
+ <!-- ════════════════════════════════════════════════
223
+ STATS — 3-column
224
+ ════════════════════════════════════════════════ -->
225
+ <section class="dark">
226
+ <div class="slide-chrome">
227
+ <span class="label muted">{{SECTION_LABEL}}</span>
228
+ <span class="label muted">01 / 지표</span>
229
+ </div>
230
+ <div class="slide-body slide--stats">
231
+ <div class="stat-card" data-anim="fade-up" data-delay="1">
232
+ <div><span class="num">98</span><span class="unit accent">%</span></div>
233
+ <div class="rule"></div>
234
+ <p class="body" style="margin-top:var(--gap-sm)">지표명<br>설명</p>
235
+ <p class="caption muted" style="margin-top:0.5vh">전기 대비 +12%p</p>
236
+ </div>
237
+ <div class="stat-card" data-anim="fade-up" data-delay="2">
238
+ <div><span class="num">2.4</span><span class="unit accent">s</span></div>
239
+ <div class="rule"></div>
240
+ <p class="body" style="margin-top:var(--gap-sm)">지표명<br>설명</p>
241
+ <p class="caption muted" style="margin-top:0.5vh">목표치 3s 달성</p>
242
+ </div>
243
+ <div class="stat-card" data-anim="fade-up" data-delay="3">
244
+ <div><span class="num">41</span><span class="unit accent">개</span></div>
245
+ <div class="rule"></div>
246
+ <p class="body" style="margin-top:var(--gap-sm)">지표명<br>설명</p>
247
+ <p class="caption muted" style="margin-top:0.5vh">누적 총 186개</p>
248
+ </div>
249
+ </div>
250
+ <div class="slide-foot">
251
+ <span class="label muted">{{ORG}} · {{DATE}}</span>
252
+ </div>
253
+ </section>
254
+
255
+ <!-- ════════════════════════════════════════════════
256
+ SPLIT — text + image (light theme)
257
+ ════════════════════════════════════════════════ -->
258
+ <section class="light">
259
+ <div class="slide-chrome">
260
+ <span class="label" style="color:var(--c-fg-light-2)">{{SECTION_LABEL}}</span>
261
+ <span class="label" style="color:var(--c-fg-light-3)">01 / 분석</span>
262
+ </div>
263
+ <div class="slide-body slide--split">
264
+ <div data-anim="fade-up" data-delay="1">
265
+ <span class="kicker" style="color:var(--c-fg-light-2)">Problem</span>
266
+ <div class="h2" style="color:var(--c-fg-light)">슬라이드<br>제목</div>
267
+ <div class="rule" style="background:var(--c-fg-light)"></div>
268
+ </div>
269
+ <div data-anim="fade-up" data-delay="2">
270
+ <ul class="bullet-list" style="color:var(--c-fg-light)">
271
+ <li>항목 1 — 설명</li>
272
+ <li>항목 2 — 설명</li>
273
+ <li>항목 3 — 설명</li>
274
+ <li>항목 4 — 설명</li>
275
+ </ul>
276
+ </div>
277
+ </div>
278
+ <div class="slide-foot" style="border-color:var(--c-border-light)">
279
+ <span class="label" style="color:var(--c-fg-light-3)">{{ORG}} · {{DATE}}</span>
280
+ </div>
281
+ </section>
282
+
283
+ <!-- ════════════════════════════════════════════════
284
+ LIST — heading + bullets (dark)
285
+ ════════════════════════════════════════════════ -->
286
+ <section class="dark">
287
+ <div class="slide-chrome">
288
+ <span class="label muted">{{SECTION_LABEL}}</span>
289
+ <span class="label muted">02 / 계획</span>
290
+ </div>
291
+ <div class="slide-body slide--list">
292
+ <div data-anim="fade-up" data-delay="1">
293
+ <span class="kicker">{{PERIOD}}</span>
294
+ <div class="h2">주요<br>과제</div>
295
+ </div>
296
+ <div data-anim="fade-up" data-delay="2">
297
+ <ul class="bullet-list">
298
+ <li>할 일 1</li>
299
+ <li>할 일 2</li>
300
+ <li>할 일 3</li>
301
+ <li>할 일 4</li>
302
+ <li>할 일 5</li>
303
+ </ul>
304
+ </div>
305
+ </div>
306
+ <div class="slide-foot">
307
+ <span class="label muted">{{ORG}} · {{DATE}}</span>
308
+ </div>
309
+ </section>
310
+
311
+ <!-- ════════════════════════════════════════════════
312
+ STATEMENT — full-screen quote
313
+ ════════════════════════════════════════════════ -->
314
+ <section class="dark slide--statement">
315
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center">
316
+ <div class="display" data-anim="fade-up" data-delay="0">"인용문<br>또는 <em>선언</em>"</div>
317
+ <div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:2vh"></div>
318
+ <p class="body muted" data-anim="fade-up" data-delay="3" style="margin-top:var(--gap-sm)">— 출처 / 맥락</p>
319
+ </div>
320
+ </section>
321
+
322
+ <!-- ════════════════════════════════════════════════
323
+ COMPARE — before / after (light)
324
+ ════════════════════════════════════════════════ -->
325
+ <section class="light">
326
+ <div class="slide-chrome">
327
+ <span class="label" style="color:var(--c-fg-light-2)">비교</span>
328
+ <span class="label" style="color:var(--c-fg-light-3)">02 / 분석</span>
329
+ </div>
330
+ <div class="slide-body slide--compare">
331
+ <div style="padding:var(--gap-md);border-right:1px solid var(--c-border-light)" data-anim="fade-up" data-delay="1">
332
+ <span class="label" style="color:var(--c-fg-light-3)">Before</span>
333
+ <div class="h3" style="color:var(--c-fg-light);margin-top:var(--gap-sm)">이전 상태</div>
334
+ <p class="body" style="color:var(--c-fg-light-2);margin-top:var(--gap-md)">설명 내용이 들어갑니다.</p>
335
+ </div>
336
+ <div style="padding:var(--gap-md)" data-anim="fade-up" data-delay="2">
337
+ <span class="label accent">After</span>
338
+ <div class="h3" style="color:var(--c-fg-light);margin-top:var(--gap-sm)">개선 상태</div>
339
+ <p class="body" style="color:var(--c-fg-light-2);margin-top:var(--gap-md)">개선된 내용이 들어갑니다.</p>
340
+ </div>
341
+ </div>
342
+ <div class="slide-foot" style="border-color:var(--c-border-light)">
343
+ <span class="label" style="color:var(--c-fg-light-3)">{{ORG}} · {{DATE}}</span>
344
+ </div>
345
+ </section>
346
+
347
+ <!-- ════════════════════════════════════════════════
348
+ QUOTE
349
+ ════════════════════════════════════════════════ -->
350
+ <section class="dark slide--quote">
351
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-md)">
352
+ <div class="rule" data-anim="reveal-right" data-delay="0"></div>
353
+ <div class="h1" data-anim="fade-up" data-delay="1">"인용문을<br>크게 보여줄 때<br><em>이 슬라이드</em>"</div>
354
+ <p class="label muted" data-anim="fade-in" data-delay="3">— 발언자, 맥락</p>
355
+ </div>
356
+ </section>
357
+
358
+ <!-- ════════════════════════════════════════════════
359
+ END
360
+ ════════════════════════════════════════════════ -->
361
+ <section class="dark slide--end">
362
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-lg)">
363
+ <div data-anim="fade-up" data-delay="0">
364
+ <span class="kicker">Thank you</span>
365
+ <div class="display">Q&amp;A</div>
366
+ <div class="rule" style="margin-top:2vh"></div>
367
+ </div>
368
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-md)" data-anim="fade-up" data-delay="2">
369
+ <div>
370
+ <p class="label muted">이메일</p>
371
+ <p class="body">{{EMAIL}}</p>
372
+ </div>
373
+ <div>
374
+ <p class="label muted">소속</p>
375
+ <p class="body">{{ORG}}</p>
376
+ </div>
377
+ </div>
378
+ </div>
379
+ </section>
380
+
381
+ </div>
382
+ </div>
383
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
384
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
385
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/highlight/highlight.js"></script>
386
+ <script>
387
+ Reveal.initialize({
388
+ hash: true,
389
+ width: 1600,
390
+ height: 900,
391
+ margin: 0,
392
+ minScale: 0.1,
393
+ maxScale: 1.5,
394
+ controls: true,
395
+ progress: true,
396
+ slideNumber: 'c/t',
397
+ transition: 'fade',
398
+ backgroundTransition: 'fade',
399
+ plugins: [RevealNotes, RevealHighlight],
400
+ });
401
+ </script>
402
+ </body>
403
+ </html>
@@ -0,0 +1,211 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Stencil &amp; Tablet — 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=Bowlby+One&family=Stardos+Stencil:wght@400;700&family=Barlow+Condensed:wght@500;600;700;800;900&family=Inter:wght@400;500;600&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
+ --bone: #E2DCC9;
13
+ --black: #000000;
14
+ --ink: #0A0A0A;
15
+ --paper: #F4EFE0;
16
+ --sienna: #A06A3C;
17
+ --magenta: #C73B7A;
18
+ --orange: #EE7A2E;
19
+ --teal: #2D7E73;
20
+ --blue: #3F73B7;
21
+ --mustard: #D8A93B;
22
+ --olive: #6F7A2E;
23
+ }
24
+
25
+ .reveal { font-family: 'Barlow Condensed', 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(--bone);
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.dark { background: var(--black); color: var(--bone); }
39
+
40
+ /* CHROME */
41
+ .top {
42
+ position: absolute; top: 38px; left: 48px; right: 48px;
43
+ display: flex; align-items: center; justify-content: space-between;
44
+ font-family: 'Barlow Condensed', sans-serif; font-weight: 800;
45
+ font-size: clamp(18px, 2vw, 28px); letter-spacing: 0.04em; text-transform: uppercase;
46
+ }
47
+ .top .meta { display: flex; gap: 4vw; font-size: clamp(14px,1.6vw,22px); font-weight: 600; letter-spacing: 0.06em; opacity: 0.85; }
48
+ .dark .top { color: var(--bone); }
49
+ .footer {
50
+ position: absolute; left: 48px; right: 48px; bottom: 28px;
51
+ display: flex; justify-content: space-between; align-items: center;
52
+ font-family: 'Barlow Condensed', sans-serif; font-weight: 600;
53
+ font-size: clamp(14px,1.5vw,20px); letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.7;
54
+ }
55
+ .dark .footer { color: var(--bone); }
56
+
57
+ /* TYPOGRAPHY */
58
+ .stencil { font-family: 'Stardos Stencil', serif; font-weight: 700; }
59
+ .t-display { font-size: clamp(100px,16vw,260px); line-height: 0.88; letter-spacing: -0.02em; }
60
+ .t-title { font-size: clamp(50px, 8vw, 130px); line-height: 0.92; letter-spacing: -0.01em; font-weight: 900; text-transform: uppercase; }
61
+ .t-head { font-size: clamp(24px, 3.5vw, 54px); line-height: 1.0; font-weight: 800; text-transform: uppercase; letter-spacing: 0.02em; }
62
+ .t-body { font-family: 'Inter', sans-serif; font-size: clamp(13px, 1.4vw, 20px); line-height: 1.45; font-weight: 400; }
63
+ .t-label { font-family: 'Barlow Condensed', sans-serif; font-size: clamp(12px,1.3vw,18px); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; }
64
+
65
+ /* TABLET CARD */
66
+ .tablet {
67
+ border-radius: 22px; padding: clamp(20px,3vh,34px) clamp(18px,2.5vw,30px);
68
+ display: flex; flex-direction: column; position: relative; overflow: hidden;
69
+ }
70
+ .tablet .num { font-family: 'Stardos Stencil', serif; font-weight: 700; line-height: 0.9; font-size: clamp(80px,12vw,180px); letter-spacing: -0.02em; }
71
+ .tablet h3 { font-family: 'Stardos Stencil', serif; font-weight: 700; font-size: clamp(16px,2vw,28px); text-transform: uppercase; letter-spacing: 0.02em; margin-top: auto; margin-bottom: 0.5rem; }
72
+ .tablet.dark { background: var(--ink); color: var(--bone); }
73
+
74
+ /* STAT */
75
+ .stat {
76
+ border-radius: 22px; padding: clamp(18px,2.5vh,28px) clamp(16px,2vw,26px);
77
+ display: flex; flex-direction: column; gap: 0.75rem;
78
+ }
79
+ .stat-num { font-family: 'Stardos Stencil', serif; font-weight: 700; font-size: clamp(60px,9vw,140px); line-height: 0.9; letter-spacing: -0.02em; }
80
+
81
+ /* PROCESS NODE */
82
+ .node {
83
+ border-radius: 22px; padding: clamp(16px,2.5vh,24px) clamp(14px,2vw,22px);
84
+ display: flex; flex-direction: column; gap: 0.5rem;
85
+ }
86
+
87
+ /* PILL */
88
+ .pill {
89
+ display: inline-block; border-radius: 999px; padding: 4px 14px;
90
+ font-family: 'Barlow Condensed', sans-serif; font-weight: 700;
91
+ font-size: clamp(12px,1.3vw,18px); letter-spacing: 0.08em; text-transform: uppercase;
92
+ }
93
+ .pill.teal { background: var(--teal); color: var(--bone); }
94
+ .pill.mustard { background: var(--mustard); color: var(--ink); }
95
+ .pill.magenta { background: var(--magenta); color: var(--bone); }
96
+ .pill.paper { background: var(--paper); color: var(--ink); border: 1.5px solid var(--ink); }
97
+ </style>
98
+ </head>
99
+ <body style="margin:0;background:#111">
100
+ <div class="reveal">
101
+ <div class="slides">
102
+
103
+ <!-- COVER -->
104
+ <section>
105
+ <div class="top"><span>{{ORGANIZATION}}</span><div class="meta"><span>{{DATE}}</span><span>{{AUTHOR}}</span></div></div>
106
+ <div style="position:absolute;inset:0;display:grid;grid-template-rows:1fr auto;padding:90px 48px 48px">
107
+ <div style="display:flex;flex-direction:column;justify-content:flex-end;gap:1.5vh">
108
+ <div class="stencil t-display">{{TITLE}}</div>
109
+ </div>
110
+ <div style="display:flex;align-items:center;justify-content:space-between;padding-top:1.5vh;border-top:2px solid var(--ink)">
111
+ <span class="t-label">{{SUBTITLE}}</span>
112
+ <span class="t-label" style="opacity:0.6">{{DATE}}</span>
113
+ </div>
114
+ </div>
115
+ </section>
116
+
117
+ <!-- DARK — agenda (4 tablets) -->
118
+ <section class="dark">
119
+ <div class="top"><span style="color:var(--bone)">{{SECTION_LABEL}}</span><div class="meta" style="color:var(--bone)"><span>{{DATE}}</span></div></div>
120
+ <div style="position:absolute;left:48px;right:48px;top:95px;bottom:70px;display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,2vw,24px)">
121
+ <div class="tablet" style="background:var(--sienna);color:var(--bone)"><div class="num">01</div><h3>챕터 제목</h3><p class="t-body" style="color:var(--bone);opacity:0.8">설명</p></div>
122
+ <div class="tablet" style="background:var(--teal);color:var(--bone)"><div class="num">02</div><h3>챕터 제목</h3><p class="t-body" style="color:var(--bone);opacity:0.8">설명</p></div>
123
+ <div class="tablet" style="background:var(--mustard);color:var(--ink)"><div class="num">03</div><h3>챕터 제목</h3><p class="t-body">설명</p></div>
124
+ <div class="tablet" style="background:var(--blue);color:var(--bone)"><div class="num">04</div><h3>챕터 제목</h3><p class="t-body" style="color:var(--bone);opacity:0.8">설명</p></div>
125
+ </div>
126
+ <div class="footer"><span style="color:var(--bone)">{{ORG}}</span><span style="color:var(--bone)">{{DATE}}</span></div>
127
+ </section>
128
+
129
+ <!-- PRINCIPLES (3-col rounded cards) -->
130
+ <section>
131
+ <div class="top"><span>{{SECTION_LABEL}}</span><div class="meta"><span>{{DATE}}</span></div></div>
132
+ <div style="position:absolute;left:48px;right:48px;top:90px;bottom:70px">
133
+ <p class="t-head" style="margin-bottom:2vh">핵심 원칙</p>
134
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,24px)">
135
+ <div class="tablet" style="background:var(--magenta);color:var(--bone)"><div class="num" style="font-size:clamp(50px,7vw,100px)">01</div><h3>원칙명</h3><p class="t-body" style="color:var(--bone);opacity:0.85">설명 내용</p></div>
136
+ <div class="tablet" style="background:var(--olive);color:var(--bone)"><div class="num" style="font-size:clamp(50px,7vw,100px)">02</div><h3>원칙명</h3><p class="t-body" style="color:var(--bone);opacity:0.85">설명 내용</p></div>
137
+ <div class="tablet" style="background:var(--orange);color:var(--ink)"><div class="num" style="font-size:clamp(50px,7vw,100px)">03</div><h3>원칙명</h3><p class="t-body">설명 내용</p></div>
138
+ </div>
139
+ </div>
140
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
141
+ </section>
142
+
143
+ <!-- STATS -->
144
+ <section>
145
+ <div class="top"><span>{{SECTION_LABEL}}</span><div class="meta"><span>{{DATE}}</span></div></div>
146
+ <div style="position:absolute;left:48px;right:48px;top:90px;bottom:70px">
147
+ <p class="t-head" style="margin-bottom:2vh">성과 지표</p>
148
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,24px)">
149
+ <div class="stat" style="background:var(--ink);color:var(--bone)"><div class="stat-num stencil">98%</div><p class="t-label" style="color:var(--bone);opacity:0.7">지표명</p><p class="t-body" style="color:var(--bone);opacity:0.65">설명</p></div>
150
+ <div class="stat" style="background:var(--mustard);color:var(--ink)"><div class="stat-num stencil">41</div><p class="t-label">지표명</p><p class="t-body">설명</p></div>
151
+ <div class="stat" style="background:var(--teal);color:var(--bone)"><div class="stat-num stencil">2.4s</div><p class="t-label" style="color:var(--bone);opacity:0.7">지표명</p><p class="t-body" style="color:var(--bone);opacity:0.65">설명</p></div>
152
+ </div>
153
+ </div>
154
+ <div class="footer"><span>{{ORG}}</span><span>{{DATE}}</span></div>
155
+ </section>
156
+
157
+ <!-- PROCESS (5 nodes) -->
158
+ <section>
159
+ <div class="top"><span>{{SECTION_LABEL}}</span><div class="meta"><span>{{DATE}}</span></div></div>
160
+ <div style="position:absolute;left:48px;right:48px;top:90px;bottom:130px">
161
+ <p class="t-head" style="margin-bottom:2vh">프로세스</p>
162
+ <div style="display:grid;grid-template-columns:repeat(5,1fr);gap:clamp(10px,1.5vw,20px)">
163
+ <div class="node" style="background:var(--sienna);color:var(--bone)"><p class="t-label" style="color:var(--bone);opacity:0.7;margin-bottom:0.5rem">01</p><p class="t-body" style="font-weight:700;color:var(--bone)">단계명</p><p class="t-body" style="color:var(--bone);opacity:0.75;font-size:0.85em">설명</p></div>
164
+ <div class="node" style="background:var(--mustard);color:var(--ink)"><p class="t-label" style="opacity:0.7;margin-bottom:0.5rem">02</p><p class="t-body" style="font-weight:700">단계명</p><p class="t-body" style="opacity:0.75;font-size:0.85em">설명</p></div>
165
+ <div class="node" style="background:var(--teal);color:var(--bone)"><p class="t-label" style="color:var(--bone);opacity:0.7;margin-bottom:0.5rem">03</p><p class="t-body" style="font-weight:700;color:var(--bone)">단계명</p><p class="t-body" style="color:var(--bone);opacity:0.75;font-size:0.85em">설명</p></div>
166
+ <div class="node" style="background:var(--blue);color:var(--bone)"><p class="t-label" style="color:var(--bone);opacity:0.7;margin-bottom:0.5rem">04</p><p class="t-body" style="font-weight:700;color:var(--bone)">단계명</p><p class="t-body" style="color:var(--bone);opacity:0.75;font-size:0.85em">설명</p></div>
167
+ <div class="node" style="background:var(--magenta);color:var(--bone)"><p class="t-label" style="color:var(--bone);opacity:0.7;margin-bottom:0.5rem">05</p><p class="t-body" style="font-weight:700;color:var(--bone)">단계명</p><p class="t-body" style="color:var(--bone);opacity:0.75;font-size:0.85em">설명</p></div>
168
+ </div>
169
+ </div>
170
+ <div style="position:absolute;left:48px;right:48px;bottom:70px;background:var(--paper);border-radius:14px;padding:0 24px;height:44px;display:flex;align-items:center;justify-content:space-between">
171
+ <span class="t-label">{{PERIOD}} 타임라인</span>
172
+ <span class="t-label" style="opacity:0.5">{{ORG}}</span>
173
+ </div>
174
+ </section>
175
+
176
+ <!-- CLOSING (dark) -->
177
+ <section class="dark">
178
+ <div style="position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr;gap:5vw;padding:90px 48px 70px">
179
+ <div style="display:flex;flex-direction:column;justify-content:space-between">
180
+ <div>
181
+ <p class="t-label" style="color:var(--bone);opacity:0.6;margin-bottom:1rem">감사합니다</p>
182
+ <div class="stencil t-title" style="color:var(--bone)">Q&A</div>
183
+ </div>
184
+ <div style="display:flex;gap:1vw">
185
+ <div class="pill teal">{{ORG}}</div>
186
+ <div class="pill mustard">{{DATE}}</div>
187
+ </div>
188
+ </div>
189
+ <div style="display:flex;flex-direction:column;justify-content:center;gap:1.5vh">
190
+ <p class="t-label" style="color:var(--bone);opacity:0.6">발표자</p><p class="t-body" style="color:var(--bone);font-weight:700;margin-bottom:1rem">{{AUTHOR}}</p>
191
+ <p class="t-label" style="color:var(--bone);opacity:0.6">이메일</p><p class="t-body" style="color:var(--bone);margin-bottom:1rem">{{EMAIL}}</p>
192
+ <p class="t-label" style="color:var(--bone);opacity:0.6">소속</p><p class="t-body" style="color:var(--bone)">{{ORG}}</p>
193
+ </div>
194
+ </div>
195
+ </section>
196
+
197
+ </div>
198
+ </div>
199
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
200
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
201
+ <script>
202
+ Reveal.initialize({
203
+ hash: true, width: 1600, height: 900, margin: 0,
204
+ minScale: 0.1, maxScale: 1.5,
205
+ controls: false, progress: false, slideNumber: false,
206
+ transition: 'none', backgroundTransition: 'none',
207
+ plugins: [RevealNotes],
208
+ });
209
+ </script>
210
+ </body>
211
+ </html>