@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,292 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Broadside — Reveal.js</title>
6
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
7
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
8
+ <link href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;700;800;900&family=IBM+Plex+Mono:wght@300;400;500&family=Noto+Sans+SC:wght@400;500;700;900&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
+ --c-bg: #111111;
13
+ --c-bg-alt: #1a1a18;
14
+ --c-bg-orange: #e85d26;
15
+ --c-fg: #f0ece5;
16
+ --c-fg-2: #888880;
17
+ --c-fg-3: #505048;
18
+ --c-accent: #e85d26;
19
+ --c-border: #282826;
20
+ --f-display: "Barlow", "Noto Sans SC", sans-serif;
21
+ --f-body: "Barlow", "Noto Sans SC", system-ui, sans-serif;
22
+ --f-mono: "IBM Plex Mono", monospace;
23
+ --sz-display: 13vw;
24
+ --sz-h1: 7.5vw;
25
+ --sz-h2: 4.5vw;
26
+ --sz-h3: 2.8vw;
27
+ --sz-lead: 1.6vw;
28
+ --sz-body: 1.2vw;
29
+ --sz-caption: 0.9vw;
30
+ --sz-label: 0.72vw;
31
+ --pad-x: 5.5vw;
32
+ --pad-y: 5.5vh;
33
+ --gap-lg: 3.5vh;
34
+ --gap-md: 2vh;
35
+ --gap-sm: 1vh;
36
+ --ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
37
+ }
38
+
39
+ .reveal { font-family: var(--f-body); }
40
+ .reveal .slides { text-align: left; }
41
+ .reveal .slides section {
42
+ box-sizing: border-box;
43
+ width: 100%; height: 100%;
44
+ padding: var(--pad-y) var(--pad-x);
45
+ display: grid;
46
+ grid-template-rows: auto 1fr auto;
47
+ overflow: hidden;
48
+ top: 0 !important; left: 0 !important;
49
+ }
50
+ .reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal p,.reveal ul,.reveal ol { margin: 0; }
51
+
52
+ /* THEMES */
53
+ .reveal .slides section.dark { background: var(--c-bg); color: var(--c-fg); }
54
+ .reveal .slides section.orange { background: var(--c-bg-orange); color: var(--c-bg); }
55
+
56
+ /* CHROME */
57
+ .slide-chrome, .slide-foot { display: flex; justify-content: space-between; align-items: center; }
58
+ .dark .slide-chrome { border-bottom: 1px solid var(--c-border); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
59
+ .dark .slide-foot { border-top: 1px solid var(--c-border); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
60
+ .orange .slide-chrome { border-bottom: 1px solid rgba(17,17,17,0.2); padding-bottom: var(--gap-sm); margin-bottom: var(--gap-md); }
61
+ .orange .slide-foot { border-top: 1px solid rgba(17,17,17,0.2); padding-top: var(--gap-sm); margin-top: var(--gap-md); }
62
+ .slide-body { min-height: 0; }
63
+
64
+ /* VARIANTS */
65
+ .slide--cover, .slide--chapter, .slide--quote, .slide--end, .slide--statement {
66
+ display: flex !important; flex-direction: column;
67
+ }
68
+ .slide--cover .slide-chrome,.slide--cover .slide-foot,
69
+ .slide--chapter .slide-chrome,.slide--chapter .slide-foot,
70
+ .slide--quote .slide-chrome,.slide--quote .slide-foot,
71
+ .slide--end .slide-chrome,.slide--end .slide-foot,
72
+ .slide--statement .slide-chrome,.slide--statement .slide-foot { display: none; }
73
+ .slide--cover { justify-content: flex-end; }
74
+ .slide--chapter { justify-content: center; }
75
+ .slide--statement { justify-content: center; }
76
+ .slide--quote { justify-content: center; }
77
+ .slide--end { justify-content: center; }
78
+ .slide--split .slide-body { display: grid; grid-template-columns: 1fr 1fr; gap: calc(var(--pad-x)*0.7); align-items: center; }
79
+ .slide--stats .slide-body { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0; }
80
+ .slide--list .slide-body { display: grid; grid-template-columns: 2fr 3fr; gap: calc(var(--pad-x)*0.8); align-items: center; }
81
+ .slide--compare .slide-body { display: grid; grid-template-columns: 1fr 1fr; height: 100%; }
82
+
83
+ /* TYPOGRAPHY */
84
+ .display { font-size: var(--sz-display); font-weight: 900; line-height: 0.88; letter-spacing: -0.025em; text-transform: uppercase; }
85
+ .h1 { font-size: var(--sz-h1); font-weight: 900; line-height: 0.92; letter-spacing: -0.02em; text-transform: uppercase; }
86
+ .h2 { font-size: var(--sz-h2); font-weight: 900; line-height: 0.95; letter-spacing: -0.01em; text-transform: uppercase; }
87
+ .h3 { font-size: var(--sz-h3); font-weight: 700; line-height: 1.1; }
88
+ .lead { font-size: var(--sz-lead); font-weight: 500; line-height: 1.4; }
89
+ .body { font-size: var(--sz-body); font-weight: 400; line-height: 1.6; }
90
+ .caption { font-size: var(--sz-caption); line-height: 1.5; }
91
+ .label { font-family: var(--f-mono); font-size: var(--sz-label); font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; }
92
+ .kicker { font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.14em; text-transform: uppercase; color: var(--c-accent); display: block; margin-bottom: var(--gap-sm); }
93
+ .orange .kicker { color: rgba(17,17,17,0.55); }
94
+ .muted { opacity: 0.5; }
95
+ .accent { color: var(--c-accent); }
96
+
97
+ /* COMPONENTS */
98
+ .rule { width: 36px; height: 2px; background: var(--c-accent); margin: var(--gap-sm) 0; }
99
+ .orange .rule { background: #111; }
100
+ .tag {
101
+ display: inline-block; font-family: var(--f-mono);
102
+ font-size: var(--sz-label); letter-spacing: 0.14em; text-transform: uppercase;
103
+ color: var(--c-accent); border: 1px solid var(--c-accent); padding: 0.3em 0.8em;
104
+ }
105
+ .orange .tag { color: #111; border-color: rgba(17,17,17,0.4); }
106
+ .stat-card { display: flex; flex-direction: column; gap: var(--gap-sm); padding: var(--gap-md) var(--gap-md) var(--gap-md) 0; border-top: 1px solid var(--c-border); }
107
+ .orange .stat-card { border-top-color: rgba(17,17,17,0.2); }
108
+ .stat-value { font-size: 5.5vw; font-weight: 900; line-height: 1; color: var(--c-accent); letter-spacing: -0.04em; }
109
+ .orange .stat-value { color: #111; }
110
+ .bullet-list { list-style: none; padding: 0; display: flex; flex-direction: column; gap: var(--gap-sm); }
111
+ .bullet-list li { display: grid; grid-template-columns: 1.2em 1fr; gap: 0.5em; font-size: var(--sz-lead); font-weight: 500; line-height: 1.4; }
112
+ .dark .bullet-list li::before { content: "/"; color: var(--c-accent); font-family: var(--f-mono); font-weight: 700; }
113
+ .orange .bullet-list li::before { content: "/"; color: rgba(17,17,17,0.55); font-family: var(--f-mono); font-weight: 700; }
114
+ .img-placeholder { background: var(--c-bg-alt); width: 100%; height: 100%; min-height: 25vh; display: flex; align-items: center; justify-content: center; font-family: var(--f-mono); font-size: var(--sz-label); letter-spacing: 0.1em; color: var(--c-fg-3); }
115
+
116
+ /* ANIMATIONS — same system as Signal/Studio */
117
+ [data-anim] { opacity: 0; animation-fill-mode: forwards; animation-timing-function: var(--ease-enter); animation-duration: 0.55s; }
118
+ [data-anim][data-delay="0"] { animation-delay: 0s; }
119
+ [data-anim][data-delay="1"] { animation-delay: 0.08s; }
120
+ [data-anim][data-delay="2"] { animation-delay: 0.18s; }
121
+ [data-anim][data-delay="3"] { animation-delay: 0.3s; }
122
+ [data-anim][data-delay="4"] { animation-delay: 0.44s; }
123
+ [data-anim][data-delay="5"] { animation-delay: 0.6s; }
124
+ .reveal .present [data-anim="fade-up"] { animation-name: kFadeUp; }
125
+ .reveal .present [data-anim="fade-in"] { animation-name: kFadeIn; }
126
+ .reveal .present [data-anim="reveal-right"] { animation-name: kRevealRight; opacity: 1; }
127
+ .reveal .present [data-anim="scale-in"] { animation-name: kScaleIn; }
128
+ @keyframes kFadeUp { from { opacity:0; transform:translateY(28px); } to { opacity:1; transform:none; } }
129
+ @keyframes kFadeIn { from { opacity:0; } to { opacity:1; } }
130
+ @keyframes kRevealRight { from { clip-path:inset(0 100% 0 0); } to { clip-path:inset(0 0 0 0); } }
131
+ @keyframes kScaleIn { from { opacity:0; transform:scale(0.94); } to { opacity:1; transform:none; } }
132
+
133
+ .reveal .controls { color: var(--c-accent); }
134
+ .reveal .progress { color: var(--c-accent); }
135
+ .reveal .slide-number { font-family: var(--f-mono); background: transparent; color: var(--c-fg-3); font-size: 0.6em; }
136
+ </style>
137
+ </head>
138
+ <body style="margin:0;background:#060606">
139
+ <div class="reveal">
140
+ <div class="slides">
141
+
142
+ <!-- COVER (orange) -->
143
+ <section class="orange slide--cover">
144
+ <div class="slide-body">
145
+ <span class="kicker" data-anim="fade-in" data-delay="0">{{ORGANIZATION}}</span>
146
+ <div class="display" data-anim="fade-up" data-delay="1">{{TITLE}}</div>
147
+ <div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:2vh"></div>
148
+ <div style="display:flex;justify-content:space-between;margin-top:1.5vh" data-anim="fade-in" data-delay="3">
149
+ <span class="label" style="color:rgba(17,17,17,0.55)">{{DATE}}</span>
150
+ <span class="label" style="color:rgba(17,17,17,0.55)">{{AUTHOR}}</span>
151
+ </div>
152
+ </div>
153
+ </section>
154
+
155
+ <!-- CHAPTER (orange) -->
156
+ <section class="orange slide--chapter">
157
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-sm)">
158
+ <span class="label" style="color:rgba(17,17,17,0.5)" data-anim="fade-in" data-delay="0">01</span>
159
+ <div class="rule" data-anim="reveal-right" data-delay="1"></div>
160
+ <div class="h1" data-anim="fade-up" data-delay="2">챕터<br>제목</div>
161
+ <p class="body muted" data-anim="fade-up" data-delay="3">서브 설명</p>
162
+ </div>
163
+ </section>
164
+
165
+ <!-- STATS (orange) -->
166
+ <section class="orange">
167
+ <div class="slide-chrome">
168
+ <span class="label" style="color:rgba(17,17,17,0.5)">{{SECTION_LABEL}}</span>
169
+ <span class="label" style="color:rgba(17,17,17,0.5)">01 / 지표</span>
170
+ </div>
171
+ <div class="slide-body slide--stats">
172
+ <div class="stat-card" data-anim="fade-up" data-delay="1">
173
+ <div class="stat-value">98<span style="font-size:0.45em">%</span></div>
174
+ <p class="body">지표명</p>
175
+ <p class="caption muted">설명</p>
176
+ </div>
177
+ <div class="stat-card" data-anim="fade-up" data-delay="2">
178
+ <div class="stat-value">2.4<span style="font-size:0.45em">s</span></div>
179
+ <p class="body">지표명</p>
180
+ <p class="caption muted">설명</p>
181
+ </div>
182
+ <div class="stat-card" data-anim="fade-up" data-delay="3">
183
+ <div class="stat-value">41</div>
184
+ <p class="body">지표명</p>
185
+ <p class="caption muted">설명</p>
186
+ </div>
187
+ </div>
188
+ <div class="slide-foot">
189
+ <span class="label" style="color:rgba(17,17,17,0.5)">{{ORG}} · {{DATE}}</span>
190
+ </div>
191
+ </section>
192
+
193
+ <!-- SPLIT (dark) -->
194
+ <section class="dark">
195
+ <div class="slide-chrome">
196
+ <span class="label muted">{{SECTION_LABEL}}</span>
197
+ <span class="label muted">01 / 분석</span>
198
+ </div>
199
+ <div class="slide-body slide--split">
200
+ <div data-anim="fade-up" data-delay="1">
201
+ <span class="kicker">Topic</span>
202
+ <div class="h2">슬라이드<br>제목</div>
203
+ <div class="rule"></div>
204
+ </div>
205
+ <div data-anim="fade-up" data-delay="2">
206
+ <ul class="bullet-list">
207
+ <li>항목 1 — 설명</li>
208
+ <li>항목 2 — 설명</li>
209
+ <li>항목 3 — 설명</li>
210
+ <li>항목 4 — 설명</li>
211
+ </ul>
212
+ </div>
213
+ </div>
214
+ <div class="slide-foot">
215
+ <span class="label muted">{{ORG}} · {{DATE}}</span>
216
+ </div>
217
+ </section>
218
+
219
+ <!-- STATEMENT (dark) -->
220
+ <section class="dark slide--statement">
221
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center">
222
+ <div class="display" data-anim="fade-up" data-delay="0">선언문<br>여기에</div>
223
+ <div class="rule" data-anim="reveal-right" data-delay="2" style="margin-top:2vh"></div>
224
+ <p class="body muted" data-anim="fade-up" data-delay="3" style="margin-top:var(--gap-sm)">— 출처 / 맥락</p>
225
+ </div>
226
+ </section>
227
+
228
+ <!-- LIST (dark) -->
229
+ <section class="dark">
230
+ <div class="slide-chrome">
231
+ <span class="label muted">{{SECTION_LABEL}}</span>
232
+ <span class="label muted">02 / 계획</span>
233
+ </div>
234
+ <div class="slide-body slide--list">
235
+ <div data-anim="fade-up" data-delay="1">
236
+ <span class="kicker">{{PERIOD}}</span>
237
+ <div class="h2">주요<br>과제</div>
238
+ <div class="rule"></div>
239
+ </div>
240
+ <div data-anim="fade-up" data-delay="2">
241
+ <ul class="bullet-list">
242
+ <li>할 일 1</li>
243
+ <li>할 일 2</li>
244
+ <li>할 일 3</li>
245
+ <li>할 일 4</li>
246
+ </ul>
247
+ </div>
248
+ </div>
249
+ <div class="slide-foot">
250
+ <span class="label muted">{{ORG}} · {{DATE}}</span>
251
+ </div>
252
+ </section>
253
+
254
+ <!-- QUOTE (dark) -->
255
+ <section class="dark slide--quote">
256
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-md)">
257
+ <div class="rule" data-anim="reveal-right" data-delay="0"></div>
258
+ <div class="h1" data-anim="fade-up" data-delay="1">"인용문이<br>여기에"</div>
259
+ <p class="label muted" data-anim="fade-in" data-delay="3">— 발언자</p>
260
+ </div>
261
+ </section>
262
+
263
+ <!-- END (orange) -->
264
+ <section class="orange slide--end">
265
+ <div class="slide-body" style="display:flex;flex-direction:column;justify-content:center;gap:var(--gap-lg)">
266
+ <div data-anim="fade-up" data-delay="0">
267
+ <span class="kicker">감사합니다</span>
268
+ <div class="display">Q&amp;A</div>
269
+ <div class="rule" style="margin-top:2vh"></div>
270
+ </div>
271
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-md)" data-anim="fade-up" data-delay="2">
272
+ <div><p class="label" style="color:rgba(17,17,17,0.5)">이메일</p><p class="body">{{EMAIL}}</p></div>
273
+ <div><p class="label" style="color:rgba(17,17,17,0.5)">소속</p><p class="body">{{ORG}}</p></div>
274
+ </div>
275
+ </div>
276
+ </section>
277
+
278
+ </div>
279
+ </div>
280
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
281
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
282
+ <script>
283
+ Reveal.initialize({
284
+ hash: true, width: 1600, height: 900, margin: 0,
285
+ minScale: 0.1, maxScale: 1.5,
286
+ controls: true, progress: true, slideNumber: 'c/t',
287
+ transition: 'fade', backgroundTransition: 'fade',
288
+ plugins: [RevealNotes],
289
+ });
290
+ </script>
291
+ </body>
292
+ </html>
@@ -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>