@tienne/gestalt 0.16.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 (114) hide show
  1. package/dist/package.json +1 -4
  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/seed.d.ts +4 -0
  16. package/dist/src/cli/commands/seed.d.ts.map +1 -0
  17. package/dist/src/cli/commands/seed.js +34 -0
  18. package/dist/src/cli/commands/seed.js.map +1 -0
  19. package/dist/src/cli/index.d.ts.map +1 -1
  20. package/dist/src/cli/index.js +0 -7
  21. package/dist/src/cli/index.js.map +1 -1
  22. package/dist/src/interview/ambiguity.d.ts +8 -0
  23. package/dist/src/interview/ambiguity.d.ts.map +1 -0
  24. package/dist/src/interview/ambiguity.js +69 -0
  25. package/dist/src/interview/ambiguity.js.map +1 -0
  26. package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
  27. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
  28. package/dist/src/mcp/tools/seed-passthrough.js +29 -0
  29. package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
  30. package/dist/src/mcp/tools/seed.d.ts +5 -0
  31. package/dist/src/mcp/tools/seed.d.ts.map +1 -0
  32. package/dist/src/mcp/tools/seed.js +19 -0
  33. package/dist/src/mcp/tools/seed.js.map +1 -0
  34. package/dist/src/recording/agg-converter.d.ts +25 -0
  35. package/dist/src/recording/agg-converter.d.ts.map +1 -0
  36. package/dist/src/recording/agg-converter.js +80 -0
  37. package/dist/src/recording/agg-converter.js.map +1 -0
  38. package/dist/src/recording/agg-installer.d.ts +6 -0
  39. package/dist/src/recording/agg-installer.d.ts.map +1 -0
  40. package/dist/src/recording/agg-installer.js +50 -0
  41. package/dist/src/recording/agg-installer.js.map +1 -0
  42. package/dist/src/recording/asciinema-installer.d.ts +6 -0
  43. package/dist/src/recording/asciinema-installer.d.ts.map +1 -0
  44. package/dist/src/recording/asciinema-installer.js +50 -0
  45. package/dist/src/recording/asciinema-installer.js.map +1 -0
  46. package/dist/src/recording/asciinema-recorder.d.ts +26 -0
  47. package/dist/src/recording/asciinema-recorder.d.ts.map +1 -0
  48. package/dist/src/recording/asciinema-recorder.js +52 -0
  49. package/dist/src/recording/asciinema-recorder.js.map +1 -0
  50. package/dist/src/recording/cast-generator.d.ts +7 -0
  51. package/dist/src/recording/cast-generator.d.ts.map +1 -0
  52. package/dist/src/recording/cast-generator.js +97 -0
  53. package/dist/src/recording/cast-generator.js.map +1 -0
  54. package/dist/src/recording/filename-generator.d.ts +19 -0
  55. package/dist/src/recording/filename-generator.d.ts.map +1 -0
  56. package/dist/src/recording/filename-generator.js +67 -0
  57. package/dist/src/recording/filename-generator.js.map +1 -0
  58. package/dist/src/recording/gif-generator.d.ts +21 -0
  59. package/dist/src/recording/gif-generator.d.ts.map +1 -0
  60. package/dist/src/recording/gif-generator.js +121 -0
  61. package/dist/src/recording/gif-generator.js.map +1 -0
  62. package/dist/src/recording/recording-dir.d.ts +5 -0
  63. package/dist/src/recording/recording-dir.d.ts.map +1 -0
  64. package/dist/src/recording/recording-dir.js +13 -0
  65. package/dist/src/recording/recording-dir.js.map +1 -0
  66. package/dist/src/recording/recording-orchestrator.d.ts +50 -0
  67. package/dist/src/recording/recording-orchestrator.d.ts.map +1 -0
  68. package/dist/src/recording/recording-orchestrator.js +98 -0
  69. package/dist/src/recording/recording-orchestrator.js.map +1 -0
  70. package/dist/src/recording/resume-detector.d.ts +10 -0
  71. package/dist/src/recording/resume-detector.d.ts.map +1 -0
  72. package/dist/src/recording/resume-detector.js +14 -0
  73. package/dist/src/recording/resume-detector.js.map +1 -0
  74. package/dist/src/recording/segment-merger.d.ts +27 -0
  75. package/dist/src/recording/segment-merger.d.ts.map +1 -0
  76. package/dist/src/recording/segment-merger.js +65 -0
  77. package/dist/src/recording/segment-merger.js.map +1 -0
  78. package/dist/src/recording/terminal-recorder.d.ts +31 -0
  79. package/dist/src/recording/terminal-recorder.d.ts.map +1 -0
  80. package/dist/src/recording/terminal-recorder.js +111 -0
  81. package/dist/src/recording/terminal-recorder.js.map +1 -0
  82. package/dist/src/scripts/postinstall.d.ts +2 -0
  83. package/dist/src/scripts/postinstall.d.ts.map +1 -0
  84. package/dist/src/scripts/postinstall.js +29 -0
  85. package/dist/src/scripts/postinstall.js.map +1 -0
  86. package/dist/src/seed/extractor.d.ts +15 -0
  87. package/dist/src/seed/extractor.d.ts.map +1 -0
  88. package/dist/src/seed/extractor.js +88 -0
  89. package/dist/src/seed/extractor.js.map +1 -0
  90. package/dist/src/seed/generator.d.ts +12 -0
  91. package/dist/src/seed/generator.d.ts.map +1 -0
  92. package/dist/src/seed/generator.js +66 -0
  93. package/dist/src/seed/generator.js.map +1 -0
  94. package/dist/src/seed/passthrough-generator.d.ts +31 -0
  95. package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
  96. package/dist/src/seed/passthrough-generator.js +80 -0
  97. package/dist/src/seed/passthrough-generator.js.map +1 -0
  98. package/dist/src/seed/schema.d.ts +145 -0
  99. package/dist/src/seed/schema.d.ts.map +1 -0
  100. package/dist/src/seed/schema.js +37 -0
  101. package/dist/src/seed/schema.js.map +1 -0
  102. package/package.json +1 -4
  103. package/role-agents/presentation-designer/AGENT.md +211 -0
  104. package/role-agents/presentation-designer/templates/broadside.html +292 -0
  105. package/role-agents/presentation-designer/templates/editorial-forest.html +264 -0
  106. package/role-agents/presentation-designer/templates/emerald-editorial.html +273 -0
  107. package/role-agents/presentation-designer/templates/neo-grid.html +407 -0
  108. package/role-agents/presentation-designer/templates/pin-and-paper.html +225 -0
  109. package/role-agents/presentation-designer/templates/pink-script.html +241 -0
  110. package/role-agents/presentation-designer/templates/sakura-chroma.html +293 -0
  111. package/role-agents/presentation-designer/templates/signal.html +403 -0
  112. package/role-agents/presentation-designer/templates/stencil-tablet.html +211 -0
  113. package/role-agents/presentation-designer/templates/studio.html +379 -0
  114. 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>