@cuppacue/cli 0.1.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 (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/ai/__tests__/generate.test.d.ts +2 -0
  4. package/dist/ai/__tests__/generate.test.d.ts.map +1 -0
  5. package/dist/ai/__tests__/generate.test.js +129 -0
  6. package/dist/ai/__tests__/generate.test.js.map +1 -0
  7. package/dist/ai/__tests__/images.test.d.ts +2 -0
  8. package/dist/ai/__tests__/images.test.d.ts.map +1 -0
  9. package/dist/ai/__tests__/images.test.js +186 -0
  10. package/dist/ai/__tests__/images.test.js.map +1 -0
  11. package/dist/ai/__tests__/prompt.test.d.ts +2 -0
  12. package/dist/ai/__tests__/prompt.test.d.ts.map +1 -0
  13. package/dist/ai/__tests__/prompt.test.js +98 -0
  14. package/dist/ai/__tests__/prompt.test.js.map +1 -0
  15. package/dist/ai/__tests__/refine.test.d.ts +2 -0
  16. package/dist/ai/__tests__/refine.test.d.ts.map +1 -0
  17. package/dist/ai/__tests__/refine.test.js +87 -0
  18. package/dist/ai/__tests__/refine.test.js.map +1 -0
  19. package/dist/ai/client.d.ts +4 -0
  20. package/dist/ai/client.d.ts.map +1 -0
  21. package/dist/ai/client.js +36 -0
  22. package/dist/ai/client.js.map +1 -0
  23. package/dist/ai/example.d.ts +6 -0
  24. package/dist/ai/example.d.ts.map +1 -0
  25. package/dist/ai/example.js +284 -0
  26. package/dist/ai/example.js.map +1 -0
  27. package/dist/ai/generate.d.ts +15 -0
  28. package/dist/ai/generate.d.ts.map +1 -0
  29. package/dist/ai/generate.js +120 -0
  30. package/dist/ai/generate.js.map +1 -0
  31. package/dist/ai/images.d.ts +8 -0
  32. package/dist/ai/images.d.ts.map +1 -0
  33. package/dist/ai/images.js +71 -0
  34. package/dist/ai/images.js.map +1 -0
  35. package/dist/ai/index.d.ts +7 -0
  36. package/dist/ai/index.d.ts.map +1 -0
  37. package/dist/ai/index.js +7 -0
  38. package/dist/ai/index.js.map +1 -0
  39. package/dist/ai/prompt.d.ts +10 -0
  40. package/dist/ai/prompt.d.ts.map +1 -0
  41. package/dist/ai/prompt.js +119 -0
  42. package/dist/ai/prompt.js.map +1 -0
  43. package/dist/ai/refine.d.ts +6 -0
  44. package/dist/ai/refine.d.ts.map +1 -0
  45. package/dist/ai/refine.js +22 -0
  46. package/dist/ai/refine.js.map +1 -0
  47. package/dist/ai/schema.d.ts +5 -0
  48. package/dist/ai/schema.d.ts.map +1 -0
  49. package/dist/ai/schema.js +292 -0
  50. package/dist/ai/schema.js.map +1 -0
  51. package/dist/commands/__tests__/backstage.test.d.ts +2 -0
  52. package/dist/commands/__tests__/backstage.test.d.ts.map +1 -0
  53. package/dist/commands/__tests__/backstage.test.js +45 -0
  54. package/dist/commands/__tests__/backstage.test.js.map +1 -0
  55. package/dist/commands/__tests__/export.test.d.ts +2 -0
  56. package/dist/commands/__tests__/export.test.d.ts.map +1 -0
  57. package/dist/commands/__tests__/export.test.js +50 -0
  58. package/dist/commands/__tests__/export.test.js.map +1 -0
  59. package/dist/commands/ai.d.ts +2 -0
  60. package/dist/commands/ai.d.ts.map +1 -0
  61. package/dist/commands/ai.js +113 -0
  62. package/dist/commands/ai.js.map +1 -0
  63. package/dist/commands/build.d.ts +2 -0
  64. package/dist/commands/build.d.ts.map +1 -0
  65. package/dist/commands/build.js +121 -0
  66. package/dist/commands/build.js.map +1 -0
  67. package/dist/commands/export-pdf.d.ts +9 -0
  68. package/dist/commands/export-pdf.d.ts.map +1 -0
  69. package/dist/commands/export-pdf.js +109 -0
  70. package/dist/commands/export-pdf.js.map +1 -0
  71. package/dist/commands/export.d.ts +2 -0
  72. package/dist/commands/export.d.ts.map +1 -0
  73. package/dist/commands/export.js +147 -0
  74. package/dist/commands/export.js.map +1 -0
  75. package/dist/commands/init.d.ts +2 -0
  76. package/dist/commands/init.d.ts.map +1 -0
  77. package/dist/commands/init.js +54 -0
  78. package/dist/commands/init.js.map +1 -0
  79. package/dist/commands/preview.d.ts +2 -0
  80. package/dist/commands/preview.d.ts.map +1 -0
  81. package/dist/commands/preview.js +78 -0
  82. package/dist/commands/preview.js.map +1 -0
  83. package/dist/commands/serve.d.ts +7 -0
  84. package/dist/commands/serve.d.ts.map +1 -0
  85. package/dist/commands/serve.js +773 -0
  86. package/dist/commands/serve.js.map +1 -0
  87. package/dist/commands/validate.d.ts +2 -0
  88. package/dist/commands/validate.d.ts.map +1 -0
  89. package/dist/commands/validate.js +39 -0
  90. package/dist/commands/validate.js.map +1 -0
  91. package/dist/github/__tests__/fetcher.test.d.ts +2 -0
  92. package/dist/github/__tests__/fetcher.test.d.ts.map +1 -0
  93. package/dist/github/__tests__/fetcher.test.js +102 -0
  94. package/dist/github/__tests__/fetcher.test.js.map +1 -0
  95. package/dist/github/__tests__/rewrite-images.test.d.ts +2 -0
  96. package/dist/github/__tests__/rewrite-images.test.d.ts.map +1 -0
  97. package/dist/github/__tests__/rewrite-images.test.js +79 -0
  98. package/dist/github/__tests__/rewrite-images.test.js.map +1 -0
  99. package/dist/github/__tests__/url-parser.test.d.ts +2 -0
  100. package/dist/github/__tests__/url-parser.test.d.ts.map +1 -0
  101. package/dist/github/__tests__/url-parser.test.js +96 -0
  102. package/dist/github/__tests__/url-parser.test.js.map +1 -0
  103. package/dist/github/fetcher.d.ts +10 -0
  104. package/dist/github/fetcher.d.ts.map +1 -0
  105. package/dist/github/fetcher.js +53 -0
  106. package/dist/github/fetcher.js.map +1 -0
  107. package/dist/github/index.d.ts +5 -0
  108. package/dist/github/index.d.ts.map +1 -0
  109. package/dist/github/index.js +4 -0
  110. package/dist/github/index.js.map +1 -0
  111. package/dist/github/rewrite-images.d.ts +7 -0
  112. package/dist/github/rewrite-images.d.ts.map +1 -0
  113. package/dist/github/rewrite-images.js +26 -0
  114. package/dist/github/rewrite-images.js.map +1 -0
  115. package/dist/github/url-parser.d.ts +12 -0
  116. package/dist/github/url-parser.d.ts.map +1 -0
  117. package/dist/github/url-parser.js +60 -0
  118. package/dist/github/url-parser.js.map +1 -0
  119. package/dist/index.d.ts +3 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +95 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/markdown/__tests__/auto-slide.test.d.ts +2 -0
  124. package/dist/markdown/__tests__/auto-slide.test.d.ts.map +1 -0
  125. package/dist/markdown/__tests__/auto-slide.test.js +325 -0
  126. package/dist/markdown/__tests__/auto-slide.test.js.map +1 -0
  127. package/dist/markdown/__tests__/compiler.test.d.ts +2 -0
  128. package/dist/markdown/__tests__/compiler.test.d.ts.map +1 -0
  129. package/dist/markdown/__tests__/compiler.test.js +142 -0
  130. package/dist/markdown/__tests__/compiler.test.js.map +1 -0
  131. package/dist/markdown/__tests__/custom-parsers.test.d.ts +2 -0
  132. package/dist/markdown/__tests__/custom-parsers.test.d.ts.map +1 -0
  133. package/dist/markdown/__tests__/custom-parsers.test.js +182 -0
  134. package/dist/markdown/__tests__/custom-parsers.test.js.map +1 -0
  135. package/dist/markdown/__tests__/frontmatter.test.d.ts +2 -0
  136. package/dist/markdown/__tests__/frontmatter.test.d.ts.map +1 -0
  137. package/dist/markdown/__tests__/frontmatter.test.js +162 -0
  138. package/dist/markdown/__tests__/frontmatter.test.js.map +1 -0
  139. package/dist/markdown/__tests__/layout.test.d.ts +2 -0
  140. package/dist/markdown/__tests__/layout.test.d.ts.map +1 -0
  141. package/dist/markdown/__tests__/layout.test.js +85 -0
  142. package/dist/markdown/__tests__/layout.test.js.map +1 -0
  143. package/dist/markdown/__tests__/parser.test.d.ts +2 -0
  144. package/dist/markdown/__tests__/parser.test.d.ts.map +1 -0
  145. package/dist/markdown/__tests__/parser.test.js +646 -0
  146. package/dist/markdown/__tests__/parser.test.js.map +1 -0
  147. package/dist/markdown/__tests__/timesheet-gen.test.d.ts +2 -0
  148. package/dist/markdown/__tests__/timesheet-gen.test.d.ts.map +1 -0
  149. package/dist/markdown/__tests__/timesheet-gen.test.js +90 -0
  150. package/dist/markdown/__tests__/timesheet-gen.test.js.map +1 -0
  151. package/dist/markdown/auto-slide.d.ts +16 -0
  152. package/dist/markdown/auto-slide.d.ts.map +1 -0
  153. package/dist/markdown/auto-slide.js +144 -0
  154. package/dist/markdown/auto-slide.js.map +1 -0
  155. package/dist/markdown/compiler.d.ts +12 -0
  156. package/dist/markdown/compiler.d.ts.map +1 -0
  157. package/dist/markdown/compiler.js +47 -0
  158. package/dist/markdown/compiler.js.map +1 -0
  159. package/dist/markdown/custom-parsers.d.ts +69 -0
  160. package/dist/markdown/custom-parsers.d.ts.map +1 -0
  161. package/dist/markdown/custom-parsers.js +227 -0
  162. package/dist/markdown/custom-parsers.js.map +1 -0
  163. package/dist/markdown/frontmatter.d.ts +33 -0
  164. package/dist/markdown/frontmatter.d.ts.map +1 -0
  165. package/dist/markdown/frontmatter.js +83 -0
  166. package/dist/markdown/frontmatter.js.map +1 -0
  167. package/dist/markdown/id.d.ts +4 -0
  168. package/dist/markdown/id.d.ts.map +1 -0
  169. package/dist/markdown/id.js +15 -0
  170. package/dist/markdown/id.js.map +1 -0
  171. package/dist/markdown/index.d.ts +8 -0
  172. package/dist/markdown/index.d.ts.map +1 -0
  173. package/dist/markdown/index.js +6 -0
  174. package/dist/markdown/index.js.map +1 -0
  175. package/dist/markdown/parser.d.ts +35 -0
  176. package/dist/markdown/parser.d.ts.map +1 -0
  177. package/dist/markdown/parser.js +605 -0
  178. package/dist/markdown/parser.js.map +1 -0
  179. package/dist/markdown/timesheet-gen.d.ts +6 -0
  180. package/dist/markdown/timesheet-gen.d.ts.map +1 -0
  181. package/dist/markdown/timesheet-gen.js +223 -0
  182. package/dist/markdown/timesheet-gen.js.map +1 -0
  183. package/dist/player/CuePlayer.d.ts +58 -0
  184. package/dist/player/CuePlayer.d.ts.map +1 -0
  185. package/dist/player/NavBar.d.ts +31 -0
  186. package/dist/player/NavBar.d.ts.map +1 -0
  187. package/dist/player/PresenterView.d.ts +25 -0
  188. package/dist/player/PresenterView.d.ts.map +1 -0
  189. package/dist/player/SlideOverview.d.ts +16 -0
  190. package/dist/player/SlideOverview.d.ts.map +1 -0
  191. package/dist/player/__mocks__/chart.d.ts +29 -0
  192. package/dist/player/__mocks__/chart.d.ts.map +1 -0
  193. package/dist/player/__mocks__/mermaid.d.ts +8 -0
  194. package/dist/player/__mocks__/mermaid.d.ts.map +1 -0
  195. package/dist/player/__tests__/animator.test.d.ts +2 -0
  196. package/dist/player/__tests__/animator.test.d.ts.map +1 -0
  197. package/dist/player/__tests__/layout.test.d.ts +2 -0
  198. package/dist/player/__tests__/layout.test.d.ts.map +1 -0
  199. package/dist/player/__tests__/overview.test.d.ts +2 -0
  200. package/dist/player/__tests__/overview.test.d.ts.map +1 -0
  201. package/dist/player/__tests__/timeline.test.d.ts +2 -0
  202. package/dist/player/__tests__/timeline.test.d.ts.map +1 -0
  203. package/dist/player/animator.d.ts +4 -0
  204. package/dist/player/animator.d.ts.map +1 -0
  205. package/dist/player/cuppacue-player.css +1 -0
  206. package/dist/player/cuppacue-player.js +3247 -0
  207. package/dist/player/index.d.ts +14 -0
  208. package/dist/player/index.d.ts.map +1 -0
  209. package/dist/player/loader.d.ts +3 -0
  210. package/dist/player/loader.d.ts.map +1 -0
  211. package/dist/player/main.d.ts +2 -0
  212. package/dist/player/main.d.ts.map +1 -0
  213. package/dist/player/navigator.d.ts +27 -0
  214. package/dist/player/navigator.d.ts.map +1 -0
  215. package/dist/player/renderer.d.ts +9 -0
  216. package/dist/player/renderer.d.ts.map +1 -0
  217. package/dist/player/renderers/cards.d.ts +3 -0
  218. package/dist/player/renderers/cards.d.ts.map +1 -0
  219. package/dist/player/renderers/chart.d.ts +3 -0
  220. package/dist/player/renderers/chart.d.ts.map +1 -0
  221. package/dist/player/renderers/icons.d.ts +6 -0
  222. package/dist/player/renderers/icons.d.ts.map +1 -0
  223. package/dist/player/renderers/mermaid.d.ts +3 -0
  224. package/dist/player/renderers/mermaid.d.ts.map +1 -0
  225. package/dist/player/renderers/stats.d.ts +3 -0
  226. package/dist/player/renderers/stats.d.ts.map +1 -0
  227. package/dist/player/renderers/terminal.d.ts +3 -0
  228. package/dist/player/renderers/terminal.d.ts.map +1 -0
  229. package/dist/player/themes/dark.d.ts +2 -0
  230. package/dist/player/themes/dark.d.ts.map +1 -0
  231. package/dist/player/themes/light.d.ts +2 -0
  232. package/dist/player/themes/light.d.ts.map +1 -0
  233. package/dist/player/timeline.d.ts +43 -0
  234. package/dist/player/timeline.d.ts.map +1 -0
  235. package/dist/serve.d.ts +2 -0
  236. package/dist/serve.d.ts.map +1 -0
  237. package/dist/serve.js +171 -0
  238. package/dist/serve.js.map +1 -0
  239. package/dist/templates/discover.d.ts +20 -0
  240. package/dist/templates/discover.d.ts.map +1 -0
  241. package/dist/templates/discover.js +86 -0
  242. package/dist/templates/discover.js.map +1 -0
  243. package/dist/templates/loader.d.ts +17 -0
  244. package/dist/templates/loader.d.ts.map +1 -0
  245. package/dist/templates/loader.js +40 -0
  246. package/dist/templates/loader.js.map +1 -0
  247. package/package.json +62 -0
@@ -0,0 +1,223 @@
1
+ const STAGGER = 400;
2
+ /** Element types that support sub-element stepping */
3
+ const STEPPABLE_TYPES = new Set(["cards", "stats", "terminal"]);
4
+ /** Parse highlightLines into sequential step groups for code stepping. */
5
+ function parseHighlightStepGroups(highlightLines, totalLines) {
6
+ if (highlightLines.length === 0)
7
+ return [];
8
+ // Group consecutive line numbers into ranges (each range = one step)
9
+ const sorted = [...highlightLines].sort((a, b) => a - b);
10
+ const groups = [];
11
+ let currentGroup = [sorted[0]];
12
+ for (let i = 1; i < sorted.length; i++) {
13
+ if (sorted[i] === sorted[i - 1] + 1) {
14
+ currentGroup.push(sorted[i]);
15
+ }
16
+ else {
17
+ groups.push(currentGroup);
18
+ currentGroup = [sorted[i]];
19
+ }
20
+ }
21
+ groups.push(currentGroup);
22
+ // If there's only one group, also add an "all lines" step at the end
23
+ if (groups.length === 1) {
24
+ const allLines = [];
25
+ for (let i = 1; i <= totalLines; i++)
26
+ allLines.push(i);
27
+ groups.push(allLines);
28
+ }
29
+ return groups;
30
+ }
31
+ function animationForElement(el) {
32
+ switch (el.type) {
33
+ case "code":
34
+ return "revealDown";
35
+ case "list":
36
+ return "fadeInLeft";
37
+ case "image":
38
+ return "zoomIn";
39
+ case "table":
40
+ return "fadeIn";
41
+ case "mermaid":
42
+ return "blurIn";
43
+ case "chart":
44
+ return "zoomIn";
45
+ case "cards":
46
+ return "bounceIn";
47
+ case "stats":
48
+ return "zoomIn";
49
+ case "terminal":
50
+ return "slideUp";
51
+ case "text": {
52
+ const role = el.role;
53
+ if (role === "title")
54
+ return "fadeInUp";
55
+ if (role === "heading")
56
+ return "fadeIn";
57
+ if (role === "caption")
58
+ return "blurIn";
59
+ return "fadeInUp";
60
+ }
61
+ default:
62
+ return "fadeIn";
63
+ }
64
+ }
65
+ function durationForElement(el) {
66
+ if (el.type === "text" && el.role === "title")
67
+ return 800;
68
+ if (el.type === "code") {
69
+ const chars = el.content.length;
70
+ return Math.min(1500 + chars * 20, 5000);
71
+ }
72
+ if (el.type === "table")
73
+ return 800;
74
+ if (el.type === "mermaid")
75
+ return 800;
76
+ if (el.type === "chart")
77
+ return 800;
78
+ if (el.type === "cards")
79
+ return 600;
80
+ if (el.type === "stats")
81
+ return 600;
82
+ if (el.type === "terminal")
83
+ return 600;
84
+ return 600;
85
+ }
86
+ /** Count the number of sub-items in a steppable element */
87
+ function subItemCount(el) {
88
+ switch (el.type) {
89
+ case "cards":
90
+ return el.cards.length;
91
+ case "stats":
92
+ return el.stats.length;
93
+ case "terminal":
94
+ return el.lines.filter((l) => l.type === "command").length;
95
+ default:
96
+ return 0;
97
+ }
98
+ }
99
+ function isComplexScene(elements) {
100
+ const hasCode = elements.some((el) => el.type === "code");
101
+ const hasTable = elements.some((el) => el.type === "table");
102
+ const hasCustom = elements.some((el) => STEPPABLE_TYPES.has(el.type) || el.type === "mermaid" || el.type === "chart");
103
+ return hasCode || hasTable || hasCustom || elements.length >= 4;
104
+ }
105
+ /**
106
+ * Auto-generate a Timesheet from Content.
107
+ */
108
+ export function generateTimesheet(content) {
109
+ const timeline = [];
110
+ for (const scene of content.scenes) {
111
+ const events = [];
112
+ let at = 0;
113
+ for (const el of scene.elements) {
114
+ const animation = el.animation ?? animationForElement(el);
115
+ const duration = el.animationDuration ?? durationForElement(el);
116
+ events.push({
117
+ elementId: el.id,
118
+ animation,
119
+ at,
120
+ duration,
121
+ });
122
+ // Advance start time for next element
123
+ if (animation === "revealDown") {
124
+ at += Math.min(duration, 1200) + STAGGER;
125
+ }
126
+ else {
127
+ at += STAGGER;
128
+ }
129
+ }
130
+ // Scene duration = last animation end + 1500ms padding
131
+ const lastEvent = events[events.length - 1];
132
+ const lastEnd = lastEvent ? lastEvent.at + (lastEvent.duration ?? 600) : 0;
133
+ const duration = lastEnd + 1500;
134
+ const markers = [];
135
+ // Add step-through pause markers for steppable elements
136
+ for (const el of scene.elements) {
137
+ if (STEPPABLE_TYPES.has(el.type)) {
138
+ const count = subItemCount(el);
139
+ if (count > 1) {
140
+ // Find this element's event to get its start time
141
+ const elEvent = events.find((e) => e.elementId === el.id);
142
+ if (elEvent) {
143
+ const baseAt = elEvent.at + (elEvent.duration ?? 600);
144
+ // Add a pause marker after the element appears (before sub-items animate)
145
+ // and between each sub-item
146
+ for (let i = 0; i < count - 1; i++) {
147
+ markers.push({
148
+ at: baseAt + i * STAGGER,
149
+ action: "pause",
150
+ label: `step ${i + 1}/${count}`,
151
+ });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ // Chart stepping: add pause markers and chartStep events for multi-dataset charts
157
+ if (el.type === "chart" && el.datasets.length > 1) {
158
+ const elEvent = events.find((e) => e.elementId === el.id);
159
+ if (elEvent) {
160
+ const baseAt = elEvent.at + (elEvent.duration ?? 600);
161
+ for (let i = 1; i < el.datasets.length; i++) {
162
+ const stepAt = baseAt + i * STAGGER;
163
+ markers.push({
164
+ at: stepAt,
165
+ action: "pause",
166
+ label: `dataset ${i + 1}/${el.datasets.length}`,
167
+ });
168
+ events.push({
169
+ elementId: el.id,
170
+ animation: "chartStep",
171
+ at: stepAt,
172
+ duration: 300,
173
+ });
174
+ }
175
+ }
176
+ }
177
+ // Code stepping: add codeStep events and pause markers for highlighted code
178
+ if (el.type === "code" && el.highlightLines && el.highlightLines.length > 0) {
179
+ const totalLines = el.content.split("\n").length;
180
+ const stepGroups = parseHighlightStepGroups(el.highlightLines, totalLines);
181
+ if (stepGroups.length > 1) {
182
+ const elEvent = events.find((e) => e.elementId === el.id);
183
+ if (elEvent) {
184
+ const baseAt = elEvent.at + (elEvent.duration ?? 600);
185
+ // Add pause + codeStep event for each step group (skip first — it's the initial highlight)
186
+ for (let i = 1; i < stepGroups.length; i++) {
187
+ const stepAt = baseAt + i * STAGGER;
188
+ markers.push({
189
+ at: stepAt,
190
+ action: "pause",
191
+ label: `code ${i}/${stepGroups.length}`,
192
+ });
193
+ events.push({
194
+ elementId: el.id,
195
+ animation: "codeStep",
196
+ at: stepAt,
197
+ duration: 300,
198
+ });
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ // Add end-of-scene pause for complex scenes
205
+ if (isComplexScene(scene.elements) && markers.length === 0) {
206
+ markers.push({ at: lastEnd + 500, action: "pause" });
207
+ }
208
+ timeline.push({
209
+ sceneId: scene.id,
210
+ duration,
211
+ events,
212
+ ...(markers.length > 0 ? { markers } : {}),
213
+ });
214
+ }
215
+ return {
216
+ timeline,
217
+ defaults: {
218
+ sceneDuration: 5000,
219
+ animationDuration: 600,
220
+ },
221
+ };
222
+ }
223
+ //# sourceMappingURL=timesheet-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timesheet-gen.js","sourceRoot":"","sources":["../../src/markdown/timesheet-gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { CupFile } from "@cuppacue/format";
2
+ import "./styles/base.css";
3
+ import "./styles/player.css";
4
+ import "./styles/elements.css";
5
+ import "./styles/layouts.css";
6
+ export type CuePlayerEvent = "scenechange" | "play" | "pause" | "end" | "load";
7
+ type EventCallback = (data?: unknown) => void;
8
+ export declare class CuePlayer {
9
+ private container;
10
+ private viewport;
11
+ private cupFile;
12
+ private currentSceneIndex;
13
+ private renderedScene;
14
+ private timeline;
15
+ private navigator;
16
+ private sceneCounter;
17
+ private progressBar;
18
+ private statusBadge;
19
+ private statusTimeout;
20
+ private eventListeners;
21
+ private slideOverview;
22
+ private presenterView;
23
+ private navBar;
24
+ private autoPlay;
25
+ private stepIndicator;
26
+ private dataBaseUrl;
27
+ private transitionDirection;
28
+ private transitioning;
29
+ private resizeObserver;
30
+ constructor(root: HTMLElement);
31
+ load(source: string | CupFile): Promise<void>;
32
+ play(): void;
33
+ pause(): void;
34
+ next(): void;
35
+ goToScene(index: number): void;
36
+ nextScene(): void;
37
+ prevScene(): void;
38
+ toggleFullscreen(): void;
39
+ togglePlayPause(): void;
40
+ openPresenterView(): void;
41
+ toggleOverview(): Promise<void>;
42
+ on(event: CuePlayerEvent, callback: EventCallback): () => void;
43
+ destroy(): void;
44
+ private emit;
45
+ private showStatus;
46
+ private hideStatus;
47
+ private applyTransition;
48
+ private handleSceneComplete;
49
+ private updateSceneCounter;
50
+ private updateStepIndicator;
51
+ private hideStepIndicator;
52
+ private updateProgress;
53
+ private static readonly MIN_SCALE;
54
+ private updateScale;
55
+ private applyTheme;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=CuePlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CuePlayer.d.ts","sourceRoot":"","sources":["../src/CuePlayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA2C,MAAM,kBAAkB,CAAC;AAQzF,OAAO,mBAAmB,CAAC;AAC3B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAE9B,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,MAAM,GACN,OAAO,GACP,KAAK,GACL,MAAM,CAAC;AAEX,KAAK,aAAa,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE9C,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,mBAAmB,CAAqC;IAChE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA+B;gBAEzC,IAAI,EAAE,WAAW;IAsEvB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnD,IAAI,IAAI,IAAI;IAaZ,KAAK,IAAI,IAAI;IAQb,IAAI,IAAI,IAAI;IAcZ,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA6E9B,SAAS,IAAI,IAAI;IAWjB,SAAS,IAAI,IAAI;IAejB,gBAAgB,IAAI,IAAI;IAQxB,eAAe,IAAI,IAAI;IAQvB,iBAAiB,IAAI,IAAI;IAmBnB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAQ9D,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IA+FvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAO;IAExC,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,UAAU;CAuCnB"}
@@ -0,0 +1,31 @@
1
+ export interface NavBarActions {
2
+ prev(): void;
3
+ next(): void;
4
+ toggleFullscreen(): void;
5
+ togglePlayPause(): void;
6
+ toggleOverview(): void;
7
+ isPlaying(): boolean;
8
+ getCurrentScene(): number;
9
+ getTotalScenes(): number;
10
+ }
11
+ export declare class NavBar {
12
+ private el;
13
+ private counter;
14
+ private playBtn;
15
+ private actions;
16
+ private hideTimeout;
17
+ private helpPopup;
18
+ constructor(container: HTMLElement, actions: NavBarActions);
19
+ /** Flash the navbar briefly so users know it exists */
20
+ showBriefly(): void;
21
+ update(sceneIndex: number, totalScenes: number, isPlaying: boolean): void;
22
+ destroy(): void;
23
+ private show;
24
+ private scheduleHide;
25
+ private toggleHelp;
26
+ private showHelp;
27
+ private dismissHelp;
28
+ private makeBtn;
29
+ private makeSep;
30
+ }
31
+ //# sourceMappingURL=NavBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavBar.d.ts","sourceRoot":"","sources":["../src/NavBar.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,gBAAgB,IAAI,IAAI,CAAC;IACzB,eAAe,IAAI,IAAI,CAAC;IACxB,cAAc,IAAI,IAAI,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC;IACrB,eAAe,IAAI,MAAM,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;CAC1B;AAoBD,qBAAa,MAAM;IACjB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,SAAS,CAA4B;gBAEjC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa;IAsD1D,uDAAuD;IACvD,WAAW,IAAI,IAAI;IASnB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAMzE,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;IAmDhB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,OAAO;CAKhB"}
@@ -0,0 +1,25 @@
1
+ import type { CupFile } from "@cuppacue/format";
2
+ export interface PresenterCallbacks {
3
+ onNext(): void;
4
+ onPrev(): void;
5
+ onClose(): void;
6
+ }
7
+ export declare class PresenterView {
8
+ private win;
9
+ private cupFile;
10
+ private callbacks;
11
+ private startTime;
12
+ private timerInterval;
13
+ constructor(cupFile: CupFile, callbacks?: PresenterCallbacks);
14
+ open(): void;
15
+ close(): void;
16
+ isOpen(): boolean;
17
+ updateScene(index: number): Promise<void>;
18
+ private buildThemeVars;
19
+ private renderShell;
20
+ private attachKeyboard;
21
+ private attachCloseDetection;
22
+ private startTimer;
23
+ private renderPreview;
24
+ }
25
+ //# sourceMappingURL=PresenterView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PresenterView.d.ts","sourceRoot":"","sources":["../src/PresenterView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,kBAAkB,CAAC;AAOvD,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAA+C;gBAExD,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,kBAAkB;IAK5D,IAAI,IAAI,IAAI;IAaZ,KAAK,IAAI,IAAI;IAOb,MAAM,IAAI,OAAO;IAIX,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/C,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,WAAW;IAgMnB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,UAAU;YAiBJ,aAAa;CAoB5B"}
@@ -0,0 +1,16 @@
1
+ import type { CupFile } from "@cuppacue/format";
2
+ export declare class SlideOverview {
3
+ private overlay;
4
+ private container;
5
+ private cupFile;
6
+ private visible;
7
+ private onSelectScene;
8
+ constructor(container: HTMLElement, cupFile: CupFile, onSelectScene: (index: number) => void);
9
+ isVisible(): boolean;
10
+ toggle(): Promise<void>;
11
+ show(): Promise<void>;
12
+ hide(): void;
13
+ destroy(): void;
14
+ private createThumbnail;
15
+ }
16
+ //# sourceMappingURL=SlideOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlideOverview.d.ts","sourceRoot":"","sources":["../src/SlideOverview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,kBAAkB,CAAC;AAGvD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAA0B;gBAG7C,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAOxC,SAAS,IAAI,OAAO;IAId,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,IAAI,IAAI,IAAI;IAWZ,OAAO,IAAI,IAAI;YAID,eAAe;CAqC9B"}
@@ -0,0 +1,29 @@
1
+ export declare class Chart {
2
+ static register(): void;
3
+ constructor();
4
+ }
5
+ export declare class CategoryScale {
6
+ }
7
+ export declare class LinearScale {
8
+ }
9
+ export declare class BarController {
10
+ }
11
+ export declare class BarElement {
12
+ }
13
+ export declare class LineController {
14
+ }
15
+ export declare class LineElement {
16
+ }
17
+ export declare class PointElement {
18
+ }
19
+ export declare class PieController {
20
+ }
21
+ export declare class ArcElement {
22
+ }
23
+ export declare class Tooltip {
24
+ }
25
+ export declare class Legend {
26
+ }
27
+ export declare class Filler {
28
+ }
29
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/__mocks__/chart.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ;;CAEhB;AACD,qBAAa,aAAa;CAAG;AAC7B,qBAAa,WAAW;CAAG;AAC3B,qBAAa,aAAa;CAAG;AAC7B,qBAAa,UAAU;CAAG;AAC1B,qBAAa,cAAc;CAAG;AAC9B,qBAAa,WAAW;CAAG;AAC3B,qBAAa,YAAY;CAAG;AAC5B,qBAAa,aAAa;CAAG;AAC7B,qBAAa,UAAU;CAAG;AAC1B,qBAAa,OAAO;CAAG;AACvB,qBAAa,MAAM;CAAG;AACtB,qBAAa,MAAM;CAAG"}
@@ -0,0 +1,8 @@
1
+ declare const mermaid: {
2
+ initialize: () => void;
3
+ render: (_id: string, definition: string) => Promise<{
4
+ svg: string;
5
+ }>;
6
+ };
7
+ export default mermaid;
8
+ //# sourceMappingURL=mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/__mocks__/mermaid.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,OAAO;;kBAES,MAAM,cAAc,MAAM;;;CAC/C,CAAC;AACF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=animator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/animator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=layout.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/layout.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=overview.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/overview.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/timeline.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { AnimationName } from "@cuppacue/format";
2
+ export declare function animate(element: HTMLElement, name: AnimationName, duration?: number): Animation;
3
+ export declare function getAnimationNames(): AnimationName[];
4
+ //# sourceMappingURL=animator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../src/animator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA8MtD,wBAAgB,OAAO,CACrB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,aAAa,EACnB,QAAQ,GAAE,MAAY,GACrB,SAAS,CAwBX;AAED,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAEnD"}
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap";:root{--cue-bg: #0f172a;--cue-fg: #e2e8f0;--cue-primary: #38bdf8;--cue-secondary: #a78bfa;--cue-accent: #f472b6;--cue-code-bg: #1e293b;--cue-code-fg: #e2e8f0;--cue-font-heading: "Inter", system-ui, sans-serif;--cue-font-body: "Inter", system-ui, sans-serif;--cue-font-code: "JetBrains Mono", "Fira Code", monospace;--cue-shadow: 0 4px 24px rgba(0, 0, 0, .12);--cue-shadow-lg: 0 8px 32px rgba(0, 0, 0, .18)}.cue-player{position:relative;width:100%;height:100%;overflow:hidden;background:var(--cue-bg);color:var(--cue-fg);font-family:var(--cue-font-body)}.cue-viewport{position:relative;width:100%;height:100%;max-width:177.78vh;max-height:56.25vw;margin:auto;top:50%;transform:translateY(-50%);overflow:hidden}.cue-scene{position:absolute;top:0;left:0;width:var(--cue-design-w, 1920px);height:var(--cue-design-h, 1080px);transform-origin:top left;transform:scale(var(--cue-scale, 1));background:var(--cue-bg)}.cue-scene-counter{position:fixed;bottom:16px;right:24px;font-size:14px;color:var(--cue-fg);opacity:.4;font-family:var(--cue-font-body);font-variant-numeric:tabular-nums;pointer-events:none;z-index:100}.cue-progress{position:fixed;bottom:0;left:0;height:3px;background:var(--cue-primary);transition:width .3s ease;z-index:100}.cue-status{position:fixed;bottom:28px;right:72px;display:flex;align-items:center;gap:6px;padding:6px 14px;border-radius:16px;background:#0009;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#ffffffe6;font-size:13px;font-family:var(--cue-font-body);z-index:200;pointer-events:none;opacity:0;transition:opacity .3s ease}.cue-status.cue-status--visible{opacity:1}.cue-status svg{width:14px;height:14px}.cue-status-hint{opacity:.5;font-size:11px;margin-left:4px}.cue-step-indicator{position:fixed;bottom:16px;right:80px;font-size:12px;color:var(--cue-primary);opacity:0;font-family:var(--cue-font-body);font-variant-numeric:tabular-nums;pointer-events:none;z-index:100;transition:opacity .2s ease;background:color-mix(in srgb,var(--cue-primary) 15%,transparent);padding:2px 8px;border-radius:8px}.cue-step-indicator--visible{opacity:1}@keyframes cue-fade-in{0%{opacity:0}to{opacity:1}}@keyframes cue-fade-out{0%{opacity:1}to{opacity:0}}@keyframes cue-slide-in-from-right{0%{transform:translate(100%) scale(var(--cue-scale, 1))}to{transform:translate(0) scale(var(--cue-scale, 1))}}@keyframes cue-slide-out-to-left{0%{transform:translate(0) scale(var(--cue-scale, 1))}to{transform:translate(-100%) scale(var(--cue-scale, 1))}}@keyframes cue-slide-in-from-left{0%{transform:translate(-100%) scale(var(--cue-scale, 1))}to{transform:translate(0) scale(var(--cue-scale, 1))}}@keyframes cue-slide-out-to-right{0%{transform:translate(0) scale(var(--cue-scale, 1))}to{transform:translate(100%) scale(var(--cue-scale, 1))}}@keyframes cue-zoom-in{0%{opacity:0;transform:scale(.5) scale(var(--cue-scale, 1))}to{opacity:1;transform:scale(1) scale(var(--cue-scale, 1))}}@keyframes cue-zoom-out{0%{opacity:1;transform:scale(1) scale(var(--cue-scale, 1))}to{opacity:0;transform:scale(1.5) scale(var(--cue-scale, 1))}}@keyframes cue-reveal-in{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0% 0 0)}}@keyframes cue-reveal-out{0%{clip-path:inset(0 0% 0 0)}to{clip-path:inset(0 0 0 100%)}}@keyframes cue-flip-in{0%{opacity:0;transform:perspective(1200px) rotateY(-90deg) scale(var(--cue-scale, 1))}to{opacity:1;transform:perspective(1200px) rotateY(0) scale(var(--cue-scale, 1))}}@keyframes cue-flip-out{0%{opacity:1;transform:perspective(1200px) rotateY(0) scale(var(--cue-scale, 1))}to{opacity:0;transform:perspective(1200px) rotateY(90deg) scale(var(--cue-scale, 1))}}@keyframes cue-morph-in{0%{opacity:0;transform:scale(.95) scale(var(--cue-scale, 1));filter:blur(10px)}to{opacity:1;transform:scale(1) scale(var(--cue-scale, 1));filter:blur(0px)}}@keyframes cue-morph-out{0%{opacity:1;transform:scale(1) scale(var(--cue-scale, 1));filter:blur(0px)}to{opacity:0;transform:scale(1.05) scale(var(--cue-scale, 1));filter:blur(10px)}}.cue-scene--entering{z-index:2}.cue-scene--exiting{z-index:1;pointer-events:none}.cue-player:fullscreen{background:var(--cue-bg)}.cue-player:fullscreen .cue-viewport{max-width:100%;max-height:100%}.cue-overview{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500;background:#000000d9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:flex-start;justify-content:center;opacity:0;transition:opacity .3s ease;overflow-y:auto;padding:2rem}.cue-overview--visible{opacity:1}.cue-overview-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem;max-width:1400px;width:100%}.cue-overview-thumb{position:relative;aspect-ratio:16 / 9;border:2px solid rgba(255,255,255,.1);border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s ease,transform .2s ease}.cue-overview-thumb:hover{border-color:var(--cue-primary);transform:scale(1.03)}.cue-overview-scene{position:relative;width:1920px;height:1080px;transform-origin:top left;transform:scale(calc(280 / 1920));pointer-events:none}.cue-overview-label{position:absolute;bottom:8px;right:8px;background:#0009;color:#fff;padding:2px 8px;border-radius:4px;font-size:12px;font-family:var(--cue-font-body);z-index:10}.cue-navbar{position:fixed;bottom:20px;left:50%;transform:translate(-50%) translateY(20px);display:flex;align-items:center;gap:4px;padding:6px 12px;border-radius:12px;background:#000000b3;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.1);z-index:300;opacity:0;pointer-events:none;transition:opacity .3s ease,transform .3s ease;font-family:var(--cue-font-body)}.cue-navbar--visible{opacity:1;pointer-events:auto;transform:translate(-50%) translateY(0)}.cue-navbar-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background:transparent;color:#ffffffd9;cursor:pointer;transition:background .15s ease,color .15s ease}.cue-navbar-btn:hover{background:#ffffff26;color:#fff}.cue-navbar-btn svg{width:18px;height:18px}.cue-navbar-counter{font-size:13px;color:#ffffffb3;font-variant-numeric:tabular-nums;padding:0 8px;min-width:48px;text-align:center;-webkit-user-select:none;user-select:none}.cue-navbar-sep{width:1px;height:20px;background:#ffffff26;margin:0 4px}.cue-help-popup{position:fixed;bottom:72px;left:50%;transform:translate(-50%) translateY(8px);padding:16px 20px;border-radius:12px;background:#000000d9;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.12);z-index:310;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;font-family:var(--cue-font-body);min-width:220px}.cue-help-popup--visible{opacity:1;pointer-events:auto;transform:translate(-50%) translateY(0)}.cue-help-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#ffffff80;margin-bottom:10px}.cue-help-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:4px 0}.cue-help-key{display:inline-flex;align-items:center;justify-content:center;min-width:28px;padding:2px 8px;border-radius:5px;background:#ffffff1f;border:1px solid rgba(255,255,255,.15);color:#ffffffe6;font-family:var(--cue-font-body);font-size:12px;font-weight:500;white-space:nowrap}.cue-help-label{font-size:13px;color:#ffffffbf}.cue-text{line-height:1.5}.cue-text[data-role=title]{font-family:var(--cue-font-heading);font-size:var(--cue-typo-title-size, clamp(1.5rem, 5vw, 3.5rem));font-weight:var(--cue-typo-title-weight, 700);line-height:var(--cue-typo-title-lh, 1.2);letter-spacing:var(--cue-typo-title-ls, normal);text-transform:var(--cue-typo-title-tt, none);color:var(--cue-fg);text-align:center}.cue-text[data-role=subtitle]{font-family:var(--cue-font-body);font-size:var(--cue-typo-subtitle-size, clamp(.9rem, 2.5vw, 1.5rem));font-weight:var(--cue-typo-subtitle-weight, 400);line-height:var(--cue-typo-subtitle-lh, 1.5);letter-spacing:var(--cue-typo-subtitle-ls, normal);text-transform:var(--cue-typo-subtitle-tt, none);color:var(--cue-secondary);text-align:center}.cue-text[data-role=heading]{font-family:var(--cue-font-heading);font-size:var(--cue-typo-heading-size, 2.25rem);font-weight:var(--cue-typo-heading-weight, 600);line-height:var(--cue-typo-heading-lh, 1.3);letter-spacing:var(--cue-typo-heading-ls, normal);text-transform:var(--cue-typo-heading-tt, none);color:var(--cue-primary);text-align:center}.cue-text[data-role=body]{font-family:var(--cue-font-body);font-size:var(--cue-typo-body-size, 1.25rem);font-weight:var(--cue-typo-body-weight, 400);line-height:var(--cue-typo-body-lh, 1.5);letter-spacing:var(--cue-typo-body-ls, normal);text-transform:var(--cue-typo-body-tt, none);color:var(--cue-fg)}.cue-text[data-role=caption]{font-family:var(--cue-font-body);font-size:var(--cue-typo-caption-size, 1rem);font-weight:var(--cue-typo-caption-weight, 400);line-height:var(--cue-typo-caption-lh, 1.5);letter-spacing:var(--cue-typo-caption-ls, normal);text-transform:var(--cue-typo-caption-tt, none);color:var(--cue-fg);opacity:.6;text-align:center}.cue-text[data-role=footer]{font-family:var(--cue-font-body);font-size:var(--cue-typo-footer-size, .85rem);font-weight:var(--cue-typo-footer-weight, 400);line-height:var(--cue-typo-footer-lh, 1.5);letter-spacing:var(--cue-typo-footer-ls, normal);text-transform:var(--cue-typo-footer-tt, none);color:var(--cue-secondary);opacity:.6}.cue-code{font-family:var(--cue-font-code);font-size:clamp(1rem,1.6vw,1.5rem);line-height:1.7;overflow:hidden}.cue-code pre{background:var(--cue-code-bg)!important;border-radius:12px;padding:1.5rem;overflow-x:auto;margin:0;box-shadow:var(--cue-shadow)}.cue-code code{font-family:inherit}.cue-code-steppable .line{transition:opacity .3s ease}.cue-code-line-dimmed{opacity:.3}.cue-list{font-family:var(--cue-font-body);font-size:1.25rem;line-height:2;color:var(--cue-fg);padding-left:1.5em}.cue-list li{margin-bottom:.25em}.cue-list li::marker{color:var(--cue-primary)}.cue-divider{border:none;height:2px;background:linear-gradient(90deg,transparent,var(--cue-primary),transparent)}.cue-image{display:flex;justify-content:center;align-items:center}.cue-image img{max-width:100%;max-height:100%;border-radius:8px;object-fit:contain}.cue-scene[data-layout] .cue-image{flex:1 1 0;min-height:0}.cue-scene[data-layout] .cue-image img{width:100%;height:100%;object-fit:contain}.cue-scene[data-layout=full] .cue-image img{border-radius:0}.cue-image-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;width:100%;min-height:200px;padding:2rem;border:2px dashed var(--cue-secondary);border-radius:12px;background:color-mix(in srgb,var(--cue-secondary) 8%,transparent)}.cue-image-placeholder-icon{color:var(--cue-secondary);opacity:.6}.cue-image-placeholder-label{font-size:.9rem;color:var(--cue-secondary);opacity:.8;font-style:italic;text-align:center;max-width:80%}.cue-text a,.cue-list a{color:var(--cue-primary);text-decoration:underline;text-underline-offset:2px;transition:opacity .2s ease}.cue-text a:hover,.cue-list a:hover{opacity:.8}.cue-scene[data-layout] .cue-text[data-role=heading],.cue-scene[data-layout] .cue-text[data-role=title]{text-align:left}.cue-scene[data-layout=center] .cue-text[data-role=heading],.cue-scene[data-layout=center] .cue-text[data-role=title]{text-align:center}.cue-scene[data-layout] .cue-code{flex:1 1 0;min-height:0}.cue-scene[data-layout] .cue-code pre{height:100%;overflow:auto}.cue-scene[data-layout] .cue-list{flex:1 1 0}.cue-text strong,.cue-list strong{font-weight:700}.cue-text em,.cue-list em{font-style:italic}.cue-text del,.cue-list del{text-decoration:line-through;opacity:.7}.cue-text code,.cue-list code{font-family:var(--cue-font-code);font-size:.85em;background:color-mix(in srgb,var(--cue-code-bg) 60%,transparent);padding:.15em .4em;border-radius:4px}.cue-table{font-family:var(--cue-font-body);font-size:1.1rem;line-height:1.6;color:var(--cue-fg);overflow-x:auto;width:100%}.cue-table table{width:100%;border-collapse:collapse;border-spacing:0}.cue-table th,.cue-table td{padding:.75rem 1rem;border-bottom:1px solid color-mix(in srgb,var(--cue-fg) 15%,transparent)}.cue-table th{font-weight:600;text-align:left;color:var(--cue-primary);border-bottom-width:2px;border-bottom-color:var(--cue-primary)}.cue-table tbody tr:hover{background:color-mix(in srgb,var(--cue-fg) 5%,transparent)}.cue-table tbody tr:last-child td{border-bottom:none}.cue-table--styled th{color:#fff;font-weight:700;padding:.85rem 1rem;border-bottom:none}.cue-table--styled th:first-child{border-radius:8px 0 0}.cue-table--styled th:last-child{border-radius:0 8px 0 0}.cue-table--styled tbody tr:nth-child(2n){background:color-mix(in srgb,var(--cue-fg) 4%,transparent)}.cue-scene[data-layout] .cue-table{flex:1 1 0}.cue-table code{font-family:var(--cue-font-code);font-size:.85em;background:color-mix(in srgb,var(--cue-code-bg) 60%,transparent);padding:.15em .4em;border-radius:4px}.cue-table a{color:var(--cue-primary);text-decoration:underline;text-underline-offset:2px}.cue-mermaid{display:flex;justify-content:center;align-items:center;flex:1;min-height:0;padding:1rem}.cue-mermaid svg{width:100%;height:100%;max-width:100%;max-height:100%;display:block}.cue-mermaid-fallback{font-family:var(--cue-font-code);font-size:.9rem;color:var(--cue-fg);opacity:.7;white-space:pre-wrap}.cue-chart{display:flex;justify-content:center;align-items:center;flex:1;min-height:0;padding:1rem}.cue-chart canvas{width:100%;height:100%;max-width:100%;max-height:100%}.cue-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem;width:100%;padding:.5rem}.cue-card{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.75rem;padding:2rem 1.5rem;border-radius:16px;background:color-mix(in srgb,var(--cue-fg) 5%,transparent);border:1px solid color-mix(in srgb,var(--cue-fg) 12%,transparent);box-shadow:var(--cue-shadow);transition:transform .2s ease,box-shadow .2s ease}.cue-card:hover{transform:translateY(-2px);box-shadow:var(--cue-shadow-lg)}.cue-card[data-accent]{border-top:3px solid var(--cue-card-accent)}.cue-card-icon{color:var(--cue-primary);width:32px;height:32px}.cue-card-icon svg{width:100%;height:100%}.cue-card-title{font-family:var(--cue-font-heading);font-size:1.25rem;font-weight:600;color:var(--cue-fg)}.cue-card-desc{font-family:var(--cue-font-body);font-size:.95rem;color:var(--cue-secondary);line-height:1.5}.cue-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:3rem;width:100%;padding:1rem}.cue-stat{display:flex;flex-direction:column;align-items:center;gap:.5rem;min-width:140px}.cue-stat-value{font-family:var(--cue-font-heading);font-size:3.5rem;font-weight:700;color:var(--cue-primary);font-variant-numeric:tabular-nums;line-height:1.1}.cue-stat-label{font-family:var(--cue-font-body);font-size:1rem;color:var(--cue-secondary);text-transform:uppercase;letter-spacing:.05em}.cue-terminal{font-family:var(--cue-font-code);font-size:.95rem;line-height:1.7;background:#1a1a2e;border-radius:12px;overflow:hidden;width:100%;box-shadow:var(--cue-shadow)}.cue-terminal-chrome{display:flex;gap:6px;padding:12px 16px;background:#16162a}.cue-terminal-dot{width:12px;height:12px;border-radius:50%}.cue-terminal-dot--red{background:#ff5f56}.cue-terminal-dot--yellow{background:#ffbd2e}.cue-terminal-dot--green{background:#27c93f}.cue-terminal-body{padding:1rem 1.5rem 1.5rem}.cue-terminal-line{white-space:pre-wrap;word-break:break-all}.cue-terminal-line--command{color:#e2e8f0}.cue-terminal-line--output{color:#94a3b8}.cue-terminal-prompt{color:#27c93f;-webkit-user-select:none;user-select:none}.cue-terminal-text{color:#e2e8f0}.cue-scene[data-layout] .cue-terminal,.cue-scene[data-layout] .cue-cards,.cue-scene[data-layout] .cue-stats,.cue-scene[data-layout] .cue-mermaid,.cue-scene[data-layout] .cue-chart{flex:1 1 0;min-height:0}.cue-flow{display:flex;align-items:center;justify-content:center}.cue-flow-svg{height:auto}.cue-flow-node-rect{fill:var(--cue-accent, #3b82f6);opacity:.15;stroke:var(--cue-accent, #3b82f6);stroke-width:2;transition:opacity .4s ease}.cue-flow-node-label{fill:var(--cue-fg, #fff);font-family:var(--cue-font-body);font-size:14px;text-anchor:middle;dominant-baseline:central}.cue-flow-node-icon{fill:var(--cue-fg, #fff);font-size:16px;dominant-baseline:central}.cue-flow-path{fill:none;stroke:var(--cue-secondary, #94a3b8);stroke-width:2;stroke-dasharray:500;stroke-dashoffset:500;transition:stroke-dashoffset .6s ease}.cue-flow-arrow{fill:var(--cue-secondary, #94a3b8);opacity:0;transition:opacity .3s ease .4s}.cue-flow-edge-label{fill:var(--cue-secondary, #94a3b8);font-family:var(--cue-font-body);font-size:12px;text-anchor:middle;opacity:0;transition:opacity .3s ease .4s}.cue-flow-node[data-revealed] .cue-flow-node-rect{opacity:.3}.cue-flow-edge[data-revealed] .cue-flow-path{stroke-dashoffset:0}.cue-flow-edge[data-revealed] .cue-flow-arrow,.cue-flow-edge[data-revealed] .cue-flow-edge-label{opacity:1}.cue-scene[data-layout] .cue-flow{flex:1 1 0;min-height:0}.cue-error-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;width:100%;min-height:120px;padding:2rem;border:2px dashed color-mix(in srgb,var(--cue-fg) 25%,transparent);border-radius:12px;background:color-mix(in srgb,var(--cue-fg) 5%,transparent);color:color-mix(in srgb,var(--cue-fg) 50%,transparent);font-family:var(--cue-font-body);font-size:.9rem}.cue-scene[data-layout]{display:grid;padding:5% 6%;gap:2rem;align-content:start}.cue-scene[data-layout=center]{grid-template-rows:1fr;grid-template-columns:1fr;align-content:center;justify-items:center;text-align:center}.cue-scene[data-layout=intro]{grid-template-rows:auto;grid-template-columns:1fr;grid-template-areas:"left";align-content:center;justify-items:start;text-align:left}.cue-scene[data-layout=intro]:has(.cue-slot[data-slot=right]){grid-template-columns:3fr 2fr;grid-template-areas:"left right"}.cue-scene[data-layout=intro] .cue-slot[data-slot=left]{align-self:center}.cue-scene[data-layout=intro] .cue-slot[data-slot=right]{align-self:center;justify-self:center}.cue-scene[data-layout=intro] .cue-slot[data-slot=right] .cue-image{max-height:70vh;display:flex;align-items:center;justify-content:center}.cue-scene[data-layout=intro] .cue-slot[data-slot=right] .cue-image img{max-width:100%;max-height:70vh;object-fit:contain;border-radius:12px}.cue-scene[data-layout=header-body]{grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:"header" "body" "footer"}.cue-scene[data-layout=split]{grid-template-rows:auto 1fr auto;grid-template-columns:1fr 1fr;grid-template-areas:"header header" "left right" "footer footer"}.cue-scene[data-layout=code-focus]{grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:"header" "code" "footer"}.cue-scene[data-layout=full]{grid-template-rows:1fr;grid-template-columns:1fr;padding:2%}.cue-scene[data-layout=blank]{grid-template-rows:1fr;grid-template-columns:1fr;padding:0}.cue-scene[data-layout=section]{grid-template-rows:1fr;grid-template-columns:1fr;align-content:center;justify-items:center;text-align:center}.cue-scene[data-layout=section] .cue-text[data-role=heading],.cue-scene[data-layout=section] .cue-text[data-role=title]{font-size:3rem;position:relative;padding-bottom:1rem}.cue-scene[data-layout=section] .cue-text[data-role=heading]:after,.cue-scene[data-layout=section] .cue-text[data-role=title]:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:80px;height:4px;background:var(--cue-primary);border-radius:2px}.cue-scene[data-layout=end]{grid-template-rows:auto;grid-template-columns:1fr;grid-template-areas:"left";align-content:center;justify-items:start;text-align:left}.cue-scene[data-layout=end]:has(.cue-slot[data-slot=right]){grid-template-columns:3fr 2fr;grid-template-areas:"left right"}.cue-scene[data-layout=end] .cue-slot[data-slot=left]{align-self:center}.cue-scene[data-layout=end] .cue-slot[data-slot=right]{align-self:center;justify-self:center}.cue-scene[data-layout=quote]{grid-template-rows:1fr;grid-template-columns:1fr;align-content:center;justify-items:center;text-align:center;padding:10% 15%}.cue-scene[data-layout=quote] .cue-text[data-role=caption],.cue-scene[data-layout=quote] .cue-text[data-role=body]{font-size:1.8rem;font-style:italic;line-height:1.6;position:relative;padding:1.5rem 0}.cue-scene[data-layout=quote] .cue-text[data-role=caption]:before,.cue-scene[data-layout=quote] .cue-text[data-role=body]:before{content:"“";position:absolute;top:-.5rem;left:-1.5rem;font-size:4rem;color:var(--cue-primary);opacity:.4;font-style:normal}.cue-scene[data-layout=image-left]{grid-template-rows:1fr;grid-template-columns:2fr 3fr;grid-template-areas:"left right";align-content:center;padding:3%;gap:3rem}.cue-scene[data-layout=image-left] .cue-slot[data-slot=left]{align-self:center;justify-self:center}.cue-scene[data-layout=image-left] .cue-slot[data-slot=left] .cue-image img{max-width:100%;max-height:80vh;object-fit:contain;border-radius:12px}.cue-scene[data-layout=image-left] .cue-slot[data-slot=right]{align-self:center;padding:2% 4%}.cue-scene[data-layout=image-right]{grid-template-rows:1fr;grid-template-columns:3fr 2fr;grid-template-areas:"left right";align-content:center;padding:3%;gap:3rem}.cue-scene[data-layout=image-right] .cue-slot[data-slot=left]{align-self:center;padding:2% 4%}.cue-scene[data-layout=image-right] .cue-slot[data-slot=right]{align-self:center;justify-self:center}.cue-scene[data-layout=image-right] .cue-slot[data-slot=right] .cue-image img{max-width:100%;max-height:80vh;object-fit:contain;border-radius:12px}.cue-scene[data-layout=image-full]{grid-template-rows:1fr;grid-template-columns:1fr;align-content:end;justify-items:start;padding:6% 8%;position:relative}.cue-scene[data-layout=image-full] .cue-image{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.cue-scene[data-layout=image-full] .cue-image img{width:100%;height:100%;object-fit:cover}.cue-scene[data-layout=image-full] .cue-text{position:relative;z-index:1;text-shadow:0 2px 8px rgba(0,0,0,.6)}.cue-scene[data-layout=image-grid]{grid-template-rows:auto 1fr;grid-template-columns:1fr;grid-template-areas:"header" "body";padding:3% 4%;gap:1.5rem;align-content:center}.cue-scene[data-layout=image-grid] .cue-slot[data-slot=body]{flex-direction:row;flex-wrap:wrap;gap:1.5rem;align-items:center;justify-content:center;overflow:visible}.cue-scene[data-layout=image-grid] .cue-slot .cue-image{flex:1 1 0;min-width:0;min-height:0;max-height:100%}.cue-scene[data-layout=image-grid] .cue-slot .cue-image img{width:100%;height:auto;max-height:80vh;object-fit:contain;border-radius:12px}.cue-scene[data-layout=image-grid].vertical .cue-slot[data-slot=body]{flex-direction:column;align-items:center}.cue-scene[data-layout=image-grid].vertical .cue-slot .cue-image{flex:0 1 auto;width:50%}.cue-slot{display:flex;flex-direction:column;gap:1rem;min-width:0;min-height:0;overflow:hidden}.cue-slot[data-slot=header]{grid-area:header}.cue-slot[data-slot=body]{grid-area:body}.cue-slot[data-slot=left]{grid-area:left}.cue-slot[data-slot=right]{grid-area:right}.cue-slot[data-slot=code]{grid-area:code}.cue-slot[data-slot=footer]{grid-area:footer;align-self:end}.cue-scene[data-accent-bar]{position:relative}.cue-scene[data-accent-bar]:before{content:"";position:absolute;left:0;right:0;height:var(--cue-accent-bar-height, 4px);background:var(--cue-accent-bar-color);z-index:10}.cue-scene[data-accent-bar=top]:before{top:0}.cue-scene[data-accent-bar=bottom]:before{bottom:0}.cue-st-decorations{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;overflow:hidden}.cue-st-badge{position:absolute;top:8%;left:6%;z-index:2;padding:.5rem 2rem;border-radius:4px;font-family:var(--cue-font-body);font-size:.85rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#fff}.cue-st-footer-bar{position:absolute;bottom:0;left:0;right:0;z-index:2;padding:1rem 6%;text-align:center;font-family:var(--cue-font-body);font-size:.9rem;color:var(--cue-secondary);opacity:.7;background:linear-gradient(transparent,#0000004d)}.cue-st-accent-bar{position:absolute;top:0;left:0;right:0;height:4px;z-index:10}.cue-st-content{position:relative;z-index:2;display:flex;flex-direction:column;gap:1rem}.cue-st-badge{opacity:0;animation:cue-st-fade-in .6s ease .3s forwards}.cue-st-footer-bar{opacity:0;animation:cue-st-slide-up .5s ease .5s forwards}.cue-st-decorations{opacity:0;animation:cue-st-fade-in 1s ease forwards}.cue-st-accent-bar{opacity:0;animation:cue-st-fade-in .4s ease .1s forwards}@keyframes cue-st-fade-in{to{opacity:1}}@keyframes cue-st-slide-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.cue-st-tech-talk-intro{position:relative;display:flex;align-items:center;padding:15% 6% 5%}.cue-st-tech-talk-intro .cue-st-content{max-width:60%}.cue-st-tech-talk-intro .cue-text[data-role=title]{font-size:clamp(2.5rem,7vw,5rem);line-height:1.1}.cue-st-tech-talk-intro .cue-text[data-role=subtitle]{color:var(--cue-accent);font-style:italic;font-size:clamp(1.1rem,2.5vw,1.8rem)}.cue-st-tech-talk-section{position:relative;display:flex;align-items:center;justify-content:center;text-align:center;padding:5% 10%}.cue-st-section-gradient{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.cue-st-section-stripe{position:absolute;left:0;top:15%;bottom:15%;width:4px;z-index:1;opacity:0;animation:cue-st-fade-in .6s ease .2s forwards}.cue-st-tech-talk-section .cue-text[data-role=heading]{font-size:clamp(1.8rem,5vw,3.5rem)}.cue-st-accent-line{width:80px;height:4px;margin:1rem auto 0;border-radius:2px;opacity:0;animation:cue-st-fade-in .5s ease .4s forwards}.cue-st-tech-talk-closing{position:relative;display:flex;align-items:center;justify-content:center;text-align:center;padding:5% 6%}.cue-st-tech-talk-closing .cue-text[data-role=title],.cue-st-tech-talk-closing .cue-text[data-role=heading]{font-size:clamp(2rem,5vw,3.5rem)}.cue-st-tech-talk-closing .cue-text[data-role=subtitle]{color:var(--cue-accent)}.cue-st-tech-talk-content{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-content-header{flex-shrink:0;margin-bottom:1.5rem}.cue-st-content-header .cue-text[data-role=heading],.cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-content-underline{width:60px;height:3px;border-radius:2px;margin-top:.75rem;opacity:0;animation:cue-st-fade-in .5s ease .3s forwards}.cue-st-content-body{position:relative;z-index:2;display:flex;flex-direction:column;gap:1rem;flex:1 1 0;min-height:0}.cue-st-list-rows{display:flex;flex-direction:column;gap:.75rem;flex:1 1 0;min-height:0}.cue-st-list-row{display:flex;align-items:center;gap:1rem;padding:1rem 1.25rem;border-radius:10px;background:color-mix(in srgb,var(--cue-fg) 5%,transparent);border:1px solid color-mix(in srgb,var(--cue-fg) 8%,transparent)}.cue-st-list-accent{width:4px;align-self:stretch;border-radius:2px;flex-shrink:0}.cue-st-list-number{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--cue-font-heading);font-size:.95rem;font-weight:700;color:#fff;flex-shrink:0}.cue-st-list-text{flex:1;font-family:var(--cue-font-body);font-size:1.15rem;line-height:1.5;color:var(--cue-fg)}.cue-st-list-text--two-line{display:flex;flex-direction:column;gap:.15rem}.cue-st-list-title{font-weight:700;font-size:1.15rem;color:var(--cue-fg)}.cue-st-list-desc{font-size:.95rem;color:var(--cue-secondary);line-height:1.4}.cue-st-list-text strong{font-weight:700}.cue-st-list-text em{font-style:italic}.cue-st-list-text code{font-family:var(--cue-font-code);font-size:.85em;background:color-mix(in srgb,var(--cue-code-bg) 60%,transparent);padding:.15em .4em;border-radius:4px}.cue-st-tech-talk-code{position:relative;display:flex;flex-direction:column;padding:4% 6%}.cue-st-code-header{flex-shrink:0;margin-bottom:1rem}.cue-st-code-header .cue-text[data-role=heading],.cue-st-code-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-code-container{flex:1 1 0;min-height:0;container-type:size;display:flex;flex-direction:column}.cue-st-code-container .cue-code{flex:1 1 0;min-height:0;font-size:clamp(.75rem,3.5cqh,1.8rem)}.cue-st-code-container .cue-code pre{height:100%;overflow:auto}.cue-st-code-footer{flex-shrink:0;margin-top:1rem;display:flex;flex-direction:column;gap:.5rem}.cue-st-tech-talk-content .cue-cards{align-content:center}.cue-st-tech-talk-content .cue-card{background:#fff;border:none;color:#1a1a2e;box-shadow:0 4px 16px #00000026,0 1px 4px #0000001a}.cue-st-tech-talk-content .cue-card:hover{box-shadow:0 8px 24px #0003,0 2px 8px #0000001f}.cue-st-tech-talk-content .cue-card-title{color:#1a1a2e}.cue-st-tech-talk-content .cue-card-desc{color:#4a5568}.cue-st-tech-talk-content .cue-card-icon{color:var(--cue-card-accent, var(--cue-primary))}.cue-st-tech-talk-content .cue-card-title{font-size:1.5rem}.cue-st-tech-talk-content .cue-card-desc{font-size:1.05rem;line-height:1.6}.cue-st-tech-talk-content[data-light] .cue-st-content-header .cue-text[data-role=heading],.cue-st-tech-talk-content[data-light] .cue-st-content-header .cue-text[data-role=title],.cue-st-tech-talk-content[data-light] .cue-st-list-text{color:#1a1a2e}.cue-st-tech-talk-content[data-light] .cue-st-list-row{background:#0000000a;border-color:#00000014}.cue-st-tech-talk-content .cue-stats{gap:1.5rem;justify-content:center}.cue-st-tech-talk-content .cue-stat{background:#fff;border-radius:16px;padding:2rem 2.5rem;min-width:200px;box-shadow:0 4px 16px #00000026,0 1px 4px #0000001a}.cue-st-tech-talk-content .cue-stat-value{color:var(--cue-accent)}.cue-st-tech-talk-content .cue-stat-label{color:#4a5568}.cue-st-content-body .cue-terminal,.cue-st-content-body .cue-code,.cue-st-content-body .cue-mermaid,.cue-st-content-body .cue-chart,.cue-st-content-body .cue-table{flex:1 1 0;min-height:0}.cue-st-content-body .cue-terminal{font-size:clamp(.95rem,1.8vw,1.4rem)}.cue-st-content-footer{flex-shrink:0;margin-top:auto;padding:1rem 6%;font-family:var(--cue-font-body);font-size:1.15rem;line-height:1.6;color:var(--cue-secondary);text-align:center;background:color-mix(in srgb,var(--cue-fg) 4%,transparent);border-radius:8px}.cue-st-tech-talk-content[data-light] .cue-st-content-footer{color:#4a5568;background:#0000000a}.cue-st-pitch-deck-hero{position:relative;display:flex;align-items:center;justify-content:center;text-align:center;padding:8% 10%}.cue-st-pitch-deck-hero .cue-st-content{max-width:70%;align-items:center}.cue-st-pitch-deck-hero .cue-text[data-role=title]{font-size:clamp(2.5rem,7vw,5.5rem);line-height:1.1}.cue-st-pitch-deck-hero .cue-text[data-role=subtitle]{font-size:clamp(1.1rem,2.5vw,1.8rem);color:var(--cue-secondary)}.cue-st-pitch-deck-hero .cue-st-tagline{margin-top:1.5rem;font-family:var(--cue-font-body);font-size:1.15rem;color:var(--cue-secondary);opacity:.8}.cue-st-pitch-deck-problem{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-pitch-deck-problem .cue-st-content-header .cue-text[data-role=heading],.cue-st-pitch-deck-problem .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-pitch-deck-problem .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-pitch-deck-solution{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-pitch-deck-solution .cue-st-content-header .cue-text[data-role=heading],.cue-st-pitch-deck-solution .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-pitch-deck-solution .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-pitch-deck-metrics{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-pitch-deck-metrics .cue-st-content-header .cue-text[data-role=heading],.cue-st-pitch-deck-metrics .cue-st-content-header .cue-text[data-role=title]{text-align:center;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-pitch-deck-metrics .cue-st-content-body{flex:1 1 0;min-height:0;display:flex;align-items:center;justify-content:center}.cue-st-pitch-deck-metrics .cue-stats{gap:2rem;justify-content:center}.cue-st-pitch-deck-metrics .cue-stat{background:color-mix(in srgb,var(--cue-fg) 5%,transparent);border-radius:16px;padding:2.5rem 3rem;min-width:220px}.cue-st-pitch-deck-metrics .cue-stat-value{font-size:clamp(2rem,5vw,3.5rem);color:var(--cue-accent)}.cue-st-pitch-deck-cta{position:relative;display:flex;align-items:center;justify-content:center;text-align:center;padding:8% 10%}.cue-st-pitch-deck-cta .cue-st-content{max-width:70%;align-items:center}.cue-st-pitch-deck-cta .cue-text[data-role=title],.cue-st-pitch-deck-cta .cue-text[data-role=heading]{font-size:clamp(2rem,5vw,3.5rem)}.cue-st-pitch-deck-cta .cue-text[data-role=subtitle]{color:var(--cue-accent)}.cue-st-pitch-deck-cta .cue-st-tagline{margin-top:1.5rem;font-family:var(--cue-font-body);font-size:1.15rem;color:var(--cue-secondary);opacity:.8}.cue-st-workshop-intro{position:relative;display:flex;align-items:center;padding:15% 6% 5%}.cue-st-workshop-intro .cue-st-content{max-width:65%}.cue-st-workshop-intro .cue-text[data-role=title]{font-size:clamp(2.5rem,7vw,5rem);line-height:1.1}.cue-st-workshop-intro .cue-text[data-role=subtitle]{color:var(--cue-accent);font-size:clamp(1.1rem,2.5vw,1.8rem)}.cue-st-workshop-meta{display:flex;gap:2rem;margin-top:1.5rem;flex-wrap:wrap}.cue-st-workshop-meta-item{display:flex;align-items:center;gap:.5rem;font-family:var(--cue-font-body);font-size:1rem;color:var(--cue-secondary);opacity:.8}.cue-st-workshop-meta-label{font-weight:600;text-transform:uppercase;font-size:.8rem;letter-spacing:.05em}.cue-st-workshop-step{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-workshop-step-badge{position:absolute;top:5%;right:5%;width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--cue-font-heading);font-size:1.8rem;font-weight:800;color:#fff;z-index:3;opacity:0;animation:cue-st-fade-in .5s ease .2s forwards}.cue-st-workshop-step .cue-st-content-header .cue-text[data-role=heading],.cue-st-workshop-step .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-workshop-step .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-workshop-exercise{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-workshop-exercise .cue-st-badge{position:static;align-self:flex-start;margin-bottom:.75rem}.cue-st-workshop-exercise .cue-st-content-header .cue-text[data-role=heading],.cue-st-workshop-exercise .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-workshop-exercise .cue-st-content-body{flex:1 1 0;min-height:0;padding:1.5rem;border:2px solid var(--cue-accent);border-radius:12px;background:color-mix(in srgb,var(--cue-accent) 5%,transparent)}.cue-st-workshop-timer{position:absolute;top:5%;right:5%;padding:.4rem 1rem;border-radius:20px;font-family:var(--cue-font-body);font-size:.9rem;font-weight:600;color:#fff;z-index:3;opacity:0;animation:cue-st-fade-in .5s ease .3s forwards}.cue-st-workshop-checkpoint{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-workshop-checkpoint .cue-st-content-header .cue-text[data-role=heading],.cue-st-workshop-checkpoint .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-workshop-checkpoint .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-workshop-summary{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-workshop-summary .cue-st-content-header .cue-text[data-role=heading],.cue-st-workshop-summary .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-workshop-summary .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-changelog-cover{position:relative;display:flex;align-items:center;justify-content:center;text-align:center;padding:8% 10%}.cue-st-changelog-cover .cue-st-content{align-items:center}.cue-st-version-badge{display:inline-block;padding:.5rem 2.5rem;border-radius:30px;border:2px solid var(--cue-accent);font-family:var(--cue-font-code);font-size:clamp(1.5rem,4vw,3rem);font-weight:700;color:var(--cue-accent);margin-bottom:1.5rem;opacity:0;animation:cue-st-fade-in .6s ease .2s forwards}.cue-st-changelog-cover .cue-text[data-role=title]{font-size:clamp(1.8rem,5vw,3.5rem)}.cue-st-changelog-date{margin-top:.75rem;font-family:var(--cue-font-body);font-size:1rem;color:var(--cue-secondary);opacity:0;animation:cue-st-fade-in .5s ease .4s forwards}.cue-st-changelog-feature{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-changelog-feature .cue-st-badge{position:static;align-self:flex-start;margin-bottom:.75rem;background-color:#22c55e}.cue-st-changelog-feature .cue-st-content-header .cue-text[data-role=heading],.cue-st-changelog-feature .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-changelog-feature .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-changelog-breaking{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-changelog-breaking .cue-st-badge{position:static;align-self:flex-start;margin-bottom:.75rem;background-color:#ef4444}.cue-st-changelog-breaking .cue-st-accent-bar{background-color:#ef4444!important}.cue-st-changelog-breaking .cue-st-content-header .cue-text[data-role=heading],.cue-st-changelog-breaking .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-changelog-breaking .cue-st-content-body{flex:1 1 0;min-height:0;padding:1.5rem;border:2px solid #ef4444;border-radius:12px;background:color-mix(in srgb,#ef4444 5%,transparent)}.cue-st-changelog-fixes{position:relative;display:flex;flex-direction:column;padding:5% 6% 4%}.cue-st-changelog-fixes .cue-st-badge{position:static;align-self:flex-start;margin-bottom:.75rem;background-color:#3b82f6}.cue-st-changelog-fixes .cue-st-content-header .cue-text[data-role=heading],.cue-st-changelog-fixes .cue-st-content-header .cue-text[data-role=title]{text-align:left;font-size:clamp(1.5rem,4vw,2.5rem)}.cue-st-changelog-fixes .cue-st-content-body{flex:1 1 0;min-height:0}.cue-st-changelog-credits{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:5% 10%}.cue-st-changelog-credits .cue-text[data-role=heading],.cue-st-changelog-credits .cue-text[data-role=title]{font-size:clamp(1.8rem,5vw,3.5rem)}.cue-st-changelog-credits .cue-text[data-role=subtitle]{color:var(--cue-accent)}.cue-st-changelog-fixes .cue-st-list-rows{display:flex;flex-direction:column;gap:.75rem}.cue-st-changelog-fixes .cue-st-list-row{border-left:3px solid #22c55e}