@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,241 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Pink Script — After Hours — 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=DM+Serif+Display:ital@0&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
9
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.css" />
10
+ <style>
11
+ :root {
12
+ --ink: #060507;
13
+ --ink-2: #0F0D11;
14
+ --paper: #F5EDF1;
15
+ --pink: #ED3D8C;
16
+ --pink-2: #FF66A8;
17
+ --pink-deep: #B81D67;
18
+ --line: rgba(237, 61, 140, 0.32);
19
+ --mute: rgba(245, 237, 241, 0.55);
20
+ --hair: rgba(245, 237, 241, 0.14);
21
+ }
22
+
23
+ .reveal { font-family: 'Inter', sans-serif; }
24
+ .reveal .slides { text-align: left; }
25
+ .reveal .slides section {
26
+ box-sizing: border-box;
27
+ width: 100%; height: 100%;
28
+ padding: 0;
29
+ overflow: hidden;
30
+ top: 0 !important; left: 0 !important;
31
+ background: var(--ink);
32
+ color: var(--paper);
33
+ position: absolute;
34
+ }
35
+ .reveal h1,.reveal h2,.reveal h3,.reveal p,.reveal ul,.reveal ol { margin: 0; }
36
+
37
+ /* FILM GRAIN + HAIRLINE FRAME */
38
+ .reveal .slides section::after {
39
+ content: ""; position: absolute; inset: 28px; pointer-events: none;
40
+ border: 1px solid var(--hair); z-index: 1;
41
+ }
42
+
43
+ /* CHROME */
44
+ .runner {
45
+ position: absolute; left: 48px; right: 48px; top: 48px;
46
+ display: flex; align-items: baseline; justify-content: space-between;
47
+ font-family: 'JetBrains Mono', monospace;
48
+ font-size: clamp(12px, 1.2vw, 18px); letter-spacing: 0.14em;
49
+ text-transform: uppercase; color: var(--mute); z-index: 5;
50
+ }
51
+ .runner .brand { color: var(--pink); }
52
+ .footer {
53
+ position: absolute; left: 48px; right: 48px; bottom: 48px;
54
+ display: flex; align-items: baseline; justify-content: space-between;
55
+ font-family: 'JetBrains Mono', monospace;
56
+ font-size: clamp(12px, 1.2vw, 18px); letter-spacing: 0.14em;
57
+ text-transform: uppercase; color: var(--mute); z-index: 5;
58
+ }
59
+ .footer .pageno { color: var(--paper); }
60
+ .footer .pageno em { color: var(--pink); font-style: normal; }
61
+
62
+ /* TYPOGRAPHY */
63
+ .script { font-family: 'DM Serif Display', serif; font-weight: 400; color: var(--pink); letter-spacing: -0.01em; line-height: 1.05; padding-bottom: 0.12em; }
64
+ .script.huge { font-size: clamp(100px,20vw,380px); }
65
+ .script.giant { font-size: clamp(70px, 14vw,250px); }
66
+ .script.large { font-size: clamp(50px, 9vw, 150px); }
67
+ .script.med { font-size: clamp(36px, 6vw, 100px); }
68
+ .script.sm { font-size: clamp(22px, 3.5vw,64px); }
69
+ .sans-display { font-family: 'Inter', sans-serif; font-weight: 300; text-transform: uppercase; letter-spacing: 0.04em; color: var(--paper); }
70
+ .mono { font-family: 'JetBrains Mono', monospace; letter-spacing: 0.12em; text-transform: uppercase; }
71
+ .rule { height: 1px; background: var(--pink); opacity: 0.45; }
72
+ .rule.thin { opacity: 0.25; background: var(--paper); }
73
+
74
+ /* STAT FIGURE */
75
+ .stat-figure { font-family: 'DM Serif Display', serif; font-size: clamp(60px,9vw,140px); line-height: 0.9; color: var(--pink); display: flex; align-items: baseline; }
76
+ .stat-unit { font-size: 0.5em; color: var(--paper); margin-left: 4px; }
77
+
78
+ /* PILL (matrix) */
79
+ .pill { display: inline-block; padding: 5px 12px; font-family: 'JetBrains Mono', monospace; font-size: clamp(11px,1.1vw,16px); letter-spacing: 0.08em; text-transform: uppercase; border: 1px solid var(--pink); color: var(--pink); }
80
+ .pill.dim { border-color: var(--hair); color: var(--mute); }
81
+ .pill.solid { background: var(--pink); color: var(--ink); border-color: var(--pink); font-weight: 500; }
82
+
83
+ /* STEP (process) */
84
+ .step { display: flex; flex-direction: column; gap: 1rem; padding-top: 1.5vh; border-top: 1px solid var(--pink); }
85
+ </style>
86
+ </head>
87
+ <body style="margin:0;background:#000">
88
+ <div class="reveal">
89
+ <div class="slides">
90
+
91
+ <!-- COVER -->
92
+ <section>
93
+ <div class="runner"><span class="brand">{{ORGANIZATION}}</span><span>{{DATE}}</span></div>
94
+ <div style="position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:1.5vh">
95
+ <div class="mono" style="font-size:clamp(11px,1.2vw,17px);color:var(--mute)">{{CATEGORY}}</div>
96
+ <div class="script huge" style="text-align:center">{{TITLE}}</div>
97
+ <div class="rule" style="width:60px;margin:1vh auto"></div>
98
+ <div class="sans-display" style="font-size:clamp(14px,1.8vw,26px)">{{SUBTITLE}}</div>
99
+ </div>
100
+ <div class="footer"><span>{{AUTHOR}}</span><span class="pageno"><em>01</em> / 08</span></div>
101
+ </section>
102
+
103
+ <!-- TOC -->
104
+ <section>
105
+ <div class="runner"><span class="brand">{{ORGANIZATION}}</span><span>Index</span></div>
106
+ <div style="position:absolute;left:48px;right:48px;top:120px;bottom:120px;display:grid;grid-template-columns:clamp(200px,28vw,380px) 1fr;gap:5vw">
107
+ <div><div class="script med">목차</div></div>
108
+ <div style="display:flex;flex-direction:column">
109
+ <div style="display:grid;grid-template-columns:clamp(60px,7vw,100px) 1fr clamp(100px,12vw,160px);gap:2vw;align-items:baseline;padding:1.5vh 0;border-bottom:1px solid var(--hair)">
110
+ <span class="mono" style="font-size:clamp(12px,1.3vw,18px);color:var(--mute)">01</span><span class="sans-display" style="font-size:clamp(14px,1.8vw,26px)">섹션 제목</span><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">설명</span>
111
+ </div>
112
+ <div style="display:grid;grid-template-columns:clamp(60px,7vw,100px) 1fr clamp(100px,12vw,160px);gap:2vw;align-items:baseline;padding:1.5vh 0;border-bottom:1px solid var(--hair)">
113
+ <span class="mono" style="font-size:clamp(12px,1.3vw,18px);color:var(--mute)">02</span><span class="sans-display" style="font-size:clamp(14px,1.8vw,26px)">섹션 제목</span><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">설명</span>
114
+ </div>
115
+ <div style="display:grid;grid-template-columns:clamp(60px,7vw,100px) 1fr clamp(100px,12vw,160px);gap:2vw;align-items:baseline;padding:1.5vh 0;border-bottom:1px solid var(--hair)">
116
+ <span class="mono" style="font-size:clamp(12px,1.3vw,18px);color:var(--mute)">03</span><span class="sans-display" style="font-size:clamp(14px,1.8vw,26px)">섹션 제목</span><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">설명</span>
117
+ </div>
118
+ <div style="display:grid;grid-template-columns:clamp(60px,7vw,100px) 1fr clamp(100px,12vw,160px);gap:2vw;align-items:baseline;padding:1.5vh 0">
119
+ <span class="mono" style="font-size:clamp(12px,1.3vw,18px);color:var(--mute)">04</span><span class="sans-display" style="font-size:clamp(14px,1.8vw,26px)">섹션 제목</span><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">설명</span>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ <div class="footer"><span>{{DATE}}</span><span class="pageno"><em>02</em> / 08</span></div>
124
+ </section>
125
+
126
+ <!-- SECTION DIVIDER -->
127
+ <section>
128
+ <div style="position:absolute;inset:0;display:flex;align-items:center;padding-left:clamp(80px,12vw,200px)">
129
+ <div>
130
+ <span class="mono" style="font-size:clamp(11px,1.2vw,17px);color:var(--mute);display:block;margin-bottom:1.5vh">Chapter 01</span>
131
+ <div class="script giant">섹션<br>제목</div>
132
+ </div>
133
+ </div>
134
+ <div style="position:absolute;right:clamp(60px,7vw,120px);top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:1rem;max-width:clamp(180px,24vw,320px)">
135
+ <p class="sans-display" style="font-size:clamp(12px,1.5vw,22px);opacity:0.7">서브 설명이 여기에 들어갑니다.</p>
136
+ </div>
137
+ <div class="footer"><span>{{ORG}}</span><span class="pageno"><em>03</em> / 08</span></div>
138
+ </section>
139
+
140
+ <!-- STATS -->
141
+ <section>
142
+ <div class="runner"><span class="brand">{{ORGANIZATION}}</span><span>{{SECTION_LABEL}}</span></div>
143
+ <div style="position:absolute;left:48px;right:48px;top:120px;bottom:120px;display:grid;grid-template-columns:1fr 1.05fr;gap:5vw">
144
+ <div style="display:flex;flex-direction:column;justify-content:space-between">
145
+ <div>
146
+ <div class="script med">핵심<br>지표</div>
147
+ <p class="sans-display" style="font-size:clamp(12px,1.5vw,22px);opacity:0.7;margin-top:1.5vh">설명 텍스트</p>
148
+ </div>
149
+ <div class="rule"></div>
150
+ </div>
151
+ <div style="display:flex;flex-direction:column;gap:1.5vh">
152
+ <div style="display:grid;grid-template-columns:clamp(120px,15vw,200px) 1fr;align-items:center;gap:2vw;padding-bottom:1.5vh;border-bottom:1px solid var(--hair)">
153
+ <div class="stat-figure">98<span class="stat-unit">%</span></div>
154
+ <div><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">지표명</p><p class="sans-display" style="font-size:clamp(12px,1.4vw,20px)">설명</p></div>
155
+ </div>
156
+ <div style="display:grid;grid-template-columns:clamp(120px,15vw,200px) 1fr;align-items:center;gap:2vw;padding-bottom:1.5vh;border-bottom:1px solid var(--hair)">
157
+ <div class="stat-figure">41<span class="stat-unit">개</span></div>
158
+ <div><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">지표명</p><p class="sans-display" style="font-size:clamp(12px,1.4vw,20px)">설명</p></div>
159
+ </div>
160
+ <div style="display:grid;grid-template-columns:clamp(120px,15vw,200px) 1fr;align-items:center;gap:2vw">
161
+ <div class="stat-figure">2.4<span class="stat-unit">s</span></div>
162
+ <div><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">지표명</p><p class="sans-display" style="font-size:clamp(12px,1.4vw,20px)">설명</p></div>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ <div class="footer"><span>{{DATE}}</span><span class="pageno"><em>04</em> / 08</span></div>
167
+ </section>
168
+
169
+ <!-- PROCESS (5-step) -->
170
+ <section>
171
+ <div class="runner"><span class="brand">{{ORGANIZATION}}</span><span>{{SECTION_LABEL}}</span></div>
172
+ <div style="position:absolute;left:48px;right:48px;top:120px;bottom:120px">
173
+ <div style="display:flex;justify-content:space-between;align-items:flex-end;gap:5vw;margin-bottom:3vh">
174
+ <div class="script sm">프로세스</div>
175
+ <p class="mono" style="font-size:clamp(11px,1.2vw,17px);color:var(--mute)">{{PERIOD}}</p>
176
+ </div>
177
+ <div style="display:grid;grid-template-columns:repeat(5,1fr);gap:2vw">
178
+ <div class="step"><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">01</span><p class="sans-display" style="font-size:clamp(13px,1.6vw,24px)">단계명</p><p style="font-size:clamp(12px,1.3vw,18px);color:var(--mute);line-height:1.4">설명</p></div>
179
+ <div class="step"><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">02</span><p class="sans-display" style="font-size:clamp(13px,1.6vw,24px)">단계명</p><p style="font-size:clamp(12px,1.3vw,18px);color:var(--mute);line-height:1.4">설명</p></div>
180
+ <div class="step"><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">03</span><p class="sans-display" style="font-size:clamp(13px,1.6vw,24px)">단계명</p><p style="font-size:clamp(12px,1.3vw,18px);color:var(--mute);line-height:1.4">설명</p></div>
181
+ <div class="step"><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">04</span><p class="sans-display" style="font-size:clamp(13px,1.6vw,24px)">단계명</p><p style="font-size:clamp(12px,1.3vw,18px);color:var(--mute);line-height:1.4">설명</p></div>
182
+ <div class="step"><span class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">05</span><p class="sans-display" style="font-size:clamp(13px,1.6vw,24px)">단계명</p><p style="font-size:clamp(12px,1.3vw,18px);color:var(--mute);line-height:1.4">설명</p></div>
183
+ </div>
184
+ </div>
185
+ <div class="footer"><span>{{DATE}}</span><span class="pageno"><em>05</em> / 08</span></div>
186
+ </section>
187
+
188
+ <!-- QUOTE -->
189
+ <section>
190
+ <div style="position:absolute;left:48px;right:48px;top:120px;bottom:120px;display:grid;grid-template-columns:clamp(160px,20vw,280px) 1fr;gap:5vw;align-items:center">
191
+ <div style="display:flex;flex-direction:column;gap:1.5rem">
192
+ <div style="width:clamp(60px,7vw,100px);height:clamp(60px,7vw,100px);border-radius:50%;border:1px solid var(--line);display:flex;align-items:center;justify-content:center">
193
+ <span class="mono" style="color:var(--mute);font-size:clamp(10px,1vw,14px)">IMG</span>
194
+ </div>
195
+ <p style="font-weight:500;font-size:clamp(13px,1.5vw,22px)">발언자 이름</p>
196
+ <p class="mono" style="color:var(--mute);font-size:clamp(11px,1.1vw,16px)">직함</p>
197
+ </div>
198
+ <div>
199
+ <div class="script large">"인용문이<br>여기에"</div>
200
+ <div style="display:flex;align-items:baseline;gap:2vw;margin-top:2vh;padding-top:1.5vh;border-top:1px solid var(--pink)">
201
+ <p class="mono" style="color:var(--mute)">— 맥락 설명</p>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ <div class="footer"><span>{{ORG}}</span><span class="pageno"><em>06</em> / 08</span></div>
206
+ </section>
207
+
208
+ <!-- CLOSING -->
209
+ <section>
210
+ <div style="position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;padding:100px 48px 100px">
211
+ <div style="display:flex;flex-direction:column;gap:1vh">
212
+ <div class="mono" style="color:var(--mute)">감사합니다</div>
213
+ <div class="script giant">Q&amp;A</div>
214
+ <div class="rule" style="width:60px;margin-top:2vh"></div>
215
+ </div>
216
+ <div style="display:grid;grid-template-columns:repeat(3,1fr) clamp(180px,22vw,260px);gap:4vw;align-items:end">
217
+ <div class="step"><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">발표자</p><p style="font-weight:600;font-size:clamp(13px,1.5vw,22px)">{{AUTHOR}}</p></div>
218
+ <div class="step"><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">이메일</p><p style="font-size:clamp(13px,1.5vw,22px)">{{EMAIL}}</p></div>
219
+ <div class="step"><p class="mono" style="font-size:clamp(11px,1.1vw,16px);color:var(--mute)">소속</p><p style="font-size:clamp(13px,1.5vw,22px)">{{ORG}}</p></div>
220
+ <div style="display:flex;flex-direction:column;align-items:flex-end;gap:0.75rem">
221
+ <div class="pill solid">{{DATE}}</div>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </section>
226
+
227
+ </div>
228
+ </div>
229
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
230
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
231
+ <script>
232
+ Reveal.initialize({
233
+ hash: true, width: 1600, height: 900, margin: 0,
234
+ minScale: 0.1, maxScale: 1.5,
235
+ controls: false, progress: false, slideNumber: false,
236
+ transition: 'fade', backgroundTransition: 'fade',
237
+ plugins: [RevealNotes],
238
+ });
239
+ </script>
240
+ </body>
241
+ </html>
@@ -0,0 +1,293 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Sakura Chroma — 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=Big+Shoulders+Display:wght@500;700;800;900&family=Albert+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@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
+ --paper: #F1E6CB;
13
+ --paper-dk: #E5D6B0;
14
+ --ink: #3A2516;
15
+ --red: #E5392A;
16
+ --pink: #E54489;
17
+ --orange: #F09131;
18
+ --green: #3D9F47;
19
+ --blue: #3F8BC4;
20
+ --yellow: #F0BC2A;
21
+ --line: #3A2516;
22
+ }
23
+
24
+ .reveal { font-family: 'Albert Sans', sans-serif; }
25
+ .reveal .slides { text-align: left; }
26
+ .reveal .slides section {
27
+ box-sizing: border-box;
28
+ width: 100%; height: 100%;
29
+ padding: 0;
30
+ overflow: hidden;
31
+ top: 0 !important; left: 0 !important;
32
+ background: var(--paper);
33
+ color: var(--ink);
34
+ position: absolute;
35
+ }
36
+ .reveal h1,.reveal h2,.reveal h3,.reveal p,.reveal ul,.reveal ol { margin: 0; }
37
+
38
+ /* FRAME (inner padding container) */
39
+ .frame {
40
+ position: absolute;
41
+ inset: clamp(28px, 3vw, 56px) clamp(28px, 3vw, 56px) clamp(56px, 6vh, 90px);
42
+ display: flex; flex-direction: column;
43
+ gap: clamp(14px, 1.8vh, 24px);
44
+ }
45
+
46
+ /* TOPBAR */
47
+ .topbar {
48
+ display: flex; align-items: flex-end; justify-content: space-between;
49
+ border-bottom: 1.5px solid var(--ink);
50
+ padding-bottom: clamp(8px, 1.2vh, 16px);
51
+ gap: 2vw;
52
+ }
53
+
54
+ /* FOOTER */
55
+ .col-footer {
56
+ position: absolute; bottom: 0; left: 0; right: 0;
57
+ padding: clamp(10px,1.2vh,18px) clamp(28px,3vw,56px);
58
+ background: var(--paper-dk);
59
+ display: grid; grid-template-columns: 1.1fr 1fr 1.1fr;
60
+ gap: 2vw;
61
+ }
62
+
63
+ /* TYPOGRAPHY */
64
+ .disp { font-family: 'Big Shoulders Display', sans-serif; font-weight: 900; line-height: 0.84; letter-spacing: -0.012em; }
65
+ .micro { font-family: 'Albert Sans', sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: 0.16em; font-size: clamp(10px,1.1vw,15px); }
66
+ .body-tx { font-family: 'Albert Sans', sans-serif; font-weight: 400; line-height: 1.5; font-size: clamp(13px,1.4vw,21px); }
67
+ .mono { font-family: 'JetBrains Mono', monospace; font-weight: 400; font-size: clamp(10px,1.1vw,15px); }
68
+ .jp { font-family: 'Noto Sans JP', sans-serif; font-weight: 500; }
69
+
70
+ /* COLOUR STRIPS on cards */
71
+ .c-red { background: var(--red); color: var(--paper); }
72
+ .c-pink { background: var(--pink); color: var(--paper); }
73
+ .c-orange { background: var(--orange); color: var(--ink); }
74
+ .c-green { background: var(--green); color: var(--paper); }
75
+ .c-blue { background: var(--blue); color: var(--paper); }
76
+ .c-yellow { background: var(--yellow); color: var(--ink); }
77
+
78
+ /* CATALOGUE CARD */
79
+ .cat-card {
80
+ background: var(--paper);
81
+ border: 1.5px solid var(--ink);
82
+ display: flex; flex-direction: column;
83
+ overflow: hidden;
84
+ }
85
+ .cat-card .topstrip { height: clamp(12px,1.5vh,22px); }
86
+ .cat-card .body-inner { padding: clamp(12px,1.8vh,22px) clamp(12px,1.6vw,20px); flex: 1; display: flex; flex-direction: column; }
87
+
88
+ /* STAMP */
89
+ .stamp {
90
+ position: absolute; z-index: 5;
91
+ background: var(--red); color: var(--paper);
92
+ padding: clamp(6px,0.8vh,12px) clamp(10px,1.2vw,18px);
93
+ font-family: 'Big Shoulders Display', sans-serif;
94
+ font-weight: 900; line-height: 1;
95
+ transform: rotate(-3deg);
96
+ }
97
+
98
+ /* ROSETTE BADGE */
99
+ .rosette {
100
+ display: grid; place-items: center;
101
+ background: var(--ink); color: var(--paper);
102
+ clip-path: polygon(50% 0%, 60% 8%, 73% 4%, 76% 17%, 89% 18%, 87% 31%, 100% 35%, 92% 47%, 100% 60%, 87% 64%, 90% 77%, 76% 78%, 75% 91%, 62% 88%, 53% 100%, 42% 90%, 30% 96%, 25% 84%, 12% 86%, 13% 73%, 0% 70%, 7% 58%, 0% 47%, 11% 39%, 4% 27%, 17% 25%, 13% 12%, 27% 14%, 25% 1%, 38% 7%);
103
+ font-family: 'Big Shoulders Display', sans-serif;
104
+ font-weight: 900;
105
+ }
106
+
107
+ /* SCHEDULE ROW */
108
+ .ledger-row {
109
+ display: grid;
110
+ grid-template-columns: clamp(60px,6vw,96px) 1.4fr 0.9fr 0.6fr clamp(40px,4vw,64px);
111
+ gap: 1.2vw;
112
+ align-items: center;
113
+ padding: clamp(8px,1.2vh,16px) 0;
114
+ border-bottom: 1px solid rgba(58,37,22,0.22);
115
+ }
116
+
117
+ /* CHIP TAG */
118
+ .chip {
119
+ display: inline-flex; align-items: center; justify-content: center;
120
+ padding: 3px 8px;
121
+ font-family: 'JetBrains Mono', monospace; font-size: clamp(9px,0.9vw,13px);
122
+ font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase;
123
+ color: var(--paper);
124
+ }
125
+
126
+ /* EQUALIZER BARS */
127
+ .eq-bars {
128
+ display: grid; grid-template-columns: repeat(8,1fr);
129
+ gap: clamp(6px,0.8vw,14px); align-items: end; height: 100%;
130
+ }
131
+ .eq-col { display: flex; flex-direction: column-reverse; justify-content: start; height: 100%; gap: clamp(3px,0.5vh,6px); }
132
+ .eq-cell { border-radius: 3px; }
133
+ </style>
134
+ </head>
135
+ <body style="margin:0;background:#c8b890">
136
+ <div class="reveal">
137
+ <div class="slides">
138
+
139
+ <!-- COVER -->
140
+ <section>
141
+ <div class="frame">
142
+ <div class="topbar">
143
+ <div class="disp" style="font-size:clamp(28px,4vw,60px)">{{ORGANIZATION}}</div>
144
+ <div style="display:flex;gap:2vw;align-items:center">
145
+ <span class="micro">{{DATE}}</span>
146
+ <div class="rosette" style="width:clamp(40px,5vw,80px);height:clamp(40px,5vw,80px);font-size:clamp(14px,1.6vw,24px)">★</div>
147
+ </div>
148
+ </div>
149
+ <div style="flex:1;display:flex;flex-direction:column;justify-content:center;gap:1.5vh">
150
+ <span class="micro" style="opacity:0.6">{{CATEGORY}}</span>
151
+ <div class="disp" style="font-size:clamp(80px,12vw,200px);color:var(--ink)">{{TITLE}}</div>
152
+ <p class="body-tx" style="max-width:55%;opacity:0.75">{{SUBTITLE}}</p>
153
+ </div>
154
+ <div style="display:flex;justify-content:space-between;align-items:center">
155
+ <span class="micro" style="opacity:0.6">{{AUTHOR}}</span>
156
+ <span class="mono" style="opacity:0.5">Press → to advance</span>
157
+ </div>
158
+ </div>
159
+ </section>
160
+
161
+ <!-- CATALOGUE GRID (4-col) -->
162
+ <section>
163
+ <div class="frame">
164
+ <div class="topbar">
165
+ <div class="disp" style="font-size:clamp(28px,3.5vw,54px)">{{SECTION_LABEL}}</div>
166
+ <span class="micro" style="opacity:0.6">{{DATE}}</span>
167
+ </div>
168
+ <div style="flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(12px,1.4vw,20px)">
169
+ <div class="cat-card"><div class="topstrip c-red"></div><div class="body-inner"><span class="micro" style="margin-bottom:0.5rem">01</span><p class="body-tx" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="body-tx" style="font-size:0.85em;opacity:0.7">설명 내용</p></div></div>
170
+ <div class="cat-card"><div class="topstrip c-pink"></div><div class="body-inner"><span class="micro" style="margin-bottom:0.5rem">02</span><p class="body-tx" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="body-tx" style="font-size:0.85em;opacity:0.7">설명 내용</p></div></div>
171
+ <div class="cat-card"><div class="topstrip c-orange"></div><div class="body-inner"><span class="micro" style="margin-bottom:0.5rem">03</span><p class="body-tx" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="body-tx" style="font-size:0.85em;opacity:0.7">설명 내용</p></div></div>
172
+ <div class="cat-card"><div class="topstrip c-blue"></div><div class="body-inner"><span class="micro" style="margin-bottom:0.5rem">04</span><p class="body-tx" style="font-weight:600;margin-bottom:0.5rem">항목 제목</p><p class="body-tx" style="font-size:0.85em;opacity:0.7">설명 내용</p></div></div>
173
+ </div>
174
+ </div>
175
+ </section>
176
+
177
+ <!-- MANIFESTO -->
178
+ <section style="background:var(--ink)">
179
+ <div style="position:absolute;inset:0;display:grid;place-items:center;padding:0 clamp(60px,10vw,180px)">
180
+ <div>
181
+ <p class="micro" style="color:var(--paper);opacity:0.5;margin-bottom:2vh">Statement</p>
182
+ <div class="disp" style="font-size:clamp(48px,7.5vw,120px);color:var(--paper)">
183
+ "핵심 선언문이<br>여기에 들어갑니다"
184
+ </div>
185
+ <div style="margin-top:3vh;display:flex;gap:2vw;align-items:center">
186
+ <div style="width:36px;height:1.5px;background:var(--pink)"></div>
187
+ <span class="micro" style="color:var(--paper);opacity:0.6">— 발언자, 맥락</span>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </section>
192
+
193
+ <!-- DATA — equalizer bars -->
194
+ <section>
195
+ <div class="frame">
196
+ <div class="topbar">
197
+ <div class="disp" style="font-size:clamp(28px,3.5vw,54px)">데이터 분석</div>
198
+ <span class="micro" style="opacity:0.6">{{DATE}}</span>
199
+ </div>
200
+ <div style="flex:1;display:grid;grid-template-columns:0.9fr 1.6fr;gap:clamp(20px,3vw,50px)">
201
+ <div style="display:flex;flex-direction:column;justify-content:center;gap:1.5vh">
202
+ <span class="micro" style="opacity:0.6">Key Metric</span>
203
+ <div class="disp" style="font-size:clamp(50px,8vw,120px)">98%</div>
204
+ <p class="body-tx">핵심 지표 설명이 들어갑니다.</p>
205
+ </div>
206
+ <div class="eq-bars">
207
+ <div class="eq-col"><div class="eq-cell c-red" style="height:75%"></div></div>
208
+ <div class="eq-col"><div class="eq-cell c-orange" style="height:55%"></div></div>
209
+ <div class="eq-col"><div class="eq-cell c-yellow" style="height:88%"></div></div>
210
+ <div class="eq-col"><div class="eq-cell c-green" style="height:60%"></div></div>
211
+ <div class="eq-col"><div class="eq-cell c-blue" style="height:70%"></div></div>
212
+ <div class="eq-col"><div class="eq-cell c-pink" style="height:45%"></div></div>
213
+ <div class="eq-col"><div class="eq-cell c-red" style="height:80%"></div></div>
214
+ <div class="eq-col"><div class="eq-cell c-orange" style="height:62%"></div></div>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ </section>
219
+
220
+ <!-- SCHEDULE -->
221
+ <section>
222
+ <div class="frame">
223
+ <div class="topbar">
224
+ <div class="disp" style="font-size:clamp(28px,3.5vw,54px)">일정</div>
225
+ <span class="micro" style="opacity:0.6">{{PERIOD}}</span>
226
+ </div>
227
+ <div style="flex:1;display:flex;flex-direction:column;justify-content:center">
228
+ <div class="ledger-row" style="border-top:1px solid rgba(58,37,22,0.22)">
229
+ <span class="mono" style="opacity:0.5">07월</span>
230
+ <p class="body-tx" style="font-weight:600">항목 제목</p>
231
+ <p class="body-tx" style="opacity:0.7">담당자</p>
232
+ <p class="body-tx" style="opacity:0.5;font-size:0.85em">진행중</p>
233
+ <div class="chip c-red">진행</div>
234
+ </div>
235
+ <div class="ledger-row">
236
+ <span class="mono" style="opacity:0.5">08월</span>
237
+ <p class="body-tx" style="font-weight:600">항목 제목</p>
238
+ <p class="body-tx" style="opacity:0.7">담당자</p>
239
+ <p class="body-tx" style="opacity:0.5;font-size:0.85em">예정</p>
240
+ <div class="chip c-orange">예정</div>
241
+ </div>
242
+ <div class="ledger-row">
243
+ <span class="mono" style="opacity:0.5">08월</span>
244
+ <p class="body-tx" style="font-weight:600">항목 제목</p>
245
+ <p class="body-tx" style="opacity:0.7">담당자</p>
246
+ <p class="body-tx" style="opacity:0.5;font-size:0.85em">예정</p>
247
+ <div class="chip c-green">완료</div>
248
+ </div>
249
+ <div class="ledger-row">
250
+ <span class="mono" style="opacity:0.5">09월</span>
251
+ <p class="body-tx" style="font-weight:600">항목 제목</p>
252
+ <p class="body-tx" style="opacity:0.7">담당자</p>
253
+ <p class="body-tx" style="opacity:0.5;font-size:0.85em">예정</p>
254
+ <div class="chip c-blue">계획</div>
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </section>
259
+
260
+ <!-- CLOSING -->
261
+ <section>
262
+ <div class="frame">
263
+ <div class="topbar">
264
+ <div class="disp" style="font-size:clamp(28px,3.5vw,54px)">{{ORGANIZATION}}</div>
265
+ <span class="micro" style="opacity:0.6">{{DATE}}</span>
266
+ </div>
267
+ <div style="flex:1;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2vh">
268
+ <span class="micro" style="opacity:0.6">Thank You</span>
269
+ <div class="disp" style="font-size:clamp(80px,12vw,200px)">Q&amp;A</div>
270
+ </div>
271
+ <div class="col-footer" style="position:relative;bottom:auto;left:auto;right:auto;background:var(--paper-dk);padding:1.5vh 0">
272
+ <div><p class="micro" style="opacity:0.6;margin-bottom:0.4rem">발표자</p><p class="body-tx" style="font-weight:700">{{AUTHOR}}</p></div>
273
+ <div><p class="micro" style="opacity:0.6;margin-bottom:0.4rem">이메일</p><p class="body-tx">{{EMAIL}}</p></div>
274
+ <div><p class="micro" style="opacity:0.6;margin-bottom:0.4rem">소속</p><p class="body-tx">{{ORG}}</p></div>
275
+ </div>
276
+ </div>
277
+ </section>
278
+
279
+ </div>
280
+ </div>
281
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/dist/reveal.js"></script>
282
+ <script src="https://cdn.jsdelivr.net/npm/reveal.js@5/plugin/notes/notes.js"></script>
283
+ <script>
284
+ Reveal.initialize({
285
+ hash: true, width: 1600, height: 900, margin: 0,
286
+ minScale: 0.1, maxScale: 1.5,
287
+ controls: false, progress: false, slideNumber: false,
288
+ transition: 'fade', backgroundTransition: 'fade',
289
+ plugins: [RevealNotes],
290
+ });
291
+ </script>
292
+ </body>
293
+ </html>