@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.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/ai/__tests__/generate.test.d.ts +2 -0
- package/dist/ai/__tests__/generate.test.d.ts.map +1 -0
- package/dist/ai/__tests__/generate.test.js +129 -0
- package/dist/ai/__tests__/generate.test.js.map +1 -0
- package/dist/ai/__tests__/images.test.d.ts +2 -0
- package/dist/ai/__tests__/images.test.d.ts.map +1 -0
- package/dist/ai/__tests__/images.test.js +186 -0
- package/dist/ai/__tests__/images.test.js.map +1 -0
- package/dist/ai/__tests__/prompt.test.d.ts +2 -0
- package/dist/ai/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/ai/__tests__/prompt.test.js +98 -0
- package/dist/ai/__tests__/prompt.test.js.map +1 -0
- package/dist/ai/__tests__/refine.test.d.ts +2 -0
- package/dist/ai/__tests__/refine.test.d.ts.map +1 -0
- package/dist/ai/__tests__/refine.test.js +87 -0
- package/dist/ai/__tests__/refine.test.js.map +1 -0
- package/dist/ai/client.d.ts +4 -0
- package/dist/ai/client.d.ts.map +1 -0
- package/dist/ai/client.js +36 -0
- package/dist/ai/client.js.map +1 -0
- package/dist/ai/example.d.ts +6 -0
- package/dist/ai/example.d.ts.map +1 -0
- package/dist/ai/example.js +284 -0
- package/dist/ai/example.js.map +1 -0
- package/dist/ai/generate.d.ts +15 -0
- package/dist/ai/generate.d.ts.map +1 -0
- package/dist/ai/generate.js +120 -0
- package/dist/ai/generate.js.map +1 -0
- package/dist/ai/images.d.ts +8 -0
- package/dist/ai/images.d.ts.map +1 -0
- package/dist/ai/images.js +71 -0
- package/dist/ai/images.js.map +1 -0
- package/dist/ai/index.d.ts +7 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +7 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt.d.ts +10 -0
- package/dist/ai/prompt.d.ts.map +1 -0
- package/dist/ai/prompt.js +119 -0
- package/dist/ai/prompt.js.map +1 -0
- package/dist/ai/refine.d.ts +6 -0
- package/dist/ai/refine.d.ts.map +1 -0
- package/dist/ai/refine.js +22 -0
- package/dist/ai/refine.js.map +1 -0
- package/dist/ai/schema.d.ts +5 -0
- package/dist/ai/schema.d.ts.map +1 -0
- package/dist/ai/schema.js +292 -0
- package/dist/ai/schema.js.map +1 -0
- package/dist/commands/__tests__/backstage.test.d.ts +2 -0
- package/dist/commands/__tests__/backstage.test.d.ts.map +1 -0
- package/dist/commands/__tests__/backstage.test.js +45 -0
- package/dist/commands/__tests__/backstage.test.js.map +1 -0
- package/dist/commands/__tests__/export.test.d.ts +2 -0
- package/dist/commands/__tests__/export.test.d.ts.map +1 -0
- package/dist/commands/__tests__/export.test.js +50 -0
- package/dist/commands/__tests__/export.test.js.map +1 -0
- package/dist/commands/ai.d.ts +2 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +113 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +121 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/export-pdf.d.ts +9 -0
- package/dist/commands/export-pdf.d.ts.map +1 -0
- package/dist/commands/export-pdf.js +109 -0
- package/dist/commands/export-pdf.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +147 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +54 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/preview.d.ts +2 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +78 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +773 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/github/__tests__/fetcher.test.d.ts +2 -0
- package/dist/github/__tests__/fetcher.test.d.ts.map +1 -0
- package/dist/github/__tests__/fetcher.test.js +102 -0
- package/dist/github/__tests__/fetcher.test.js.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts +2 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.js +79 -0
- package/dist/github/__tests__/rewrite-images.test.js.map +1 -0
- package/dist/github/__tests__/url-parser.test.d.ts +2 -0
- package/dist/github/__tests__/url-parser.test.d.ts.map +1 -0
- package/dist/github/__tests__/url-parser.test.js +96 -0
- package/dist/github/__tests__/url-parser.test.js.map +1 -0
- package/dist/github/fetcher.d.ts +10 -0
- package/dist/github/fetcher.d.ts.map +1 -0
- package/dist/github/fetcher.js +53 -0
- package/dist/github/fetcher.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +4 -0
- package/dist/github/index.js.map +1 -0
- package/dist/github/rewrite-images.d.ts +7 -0
- package/dist/github/rewrite-images.d.ts.map +1 -0
- package/dist/github/rewrite-images.js +26 -0
- package/dist/github/rewrite-images.js.map +1 -0
- package/dist/github/url-parser.d.ts +12 -0
- package/dist/github/url-parser.d.ts.map +1 -0
- package/dist/github/url-parser.js +60 -0
- package/dist/github/url-parser.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts +2 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.js +325 -0
- package/dist/markdown/__tests__/auto-slide.test.js.map +1 -0
- package/dist/markdown/__tests__/compiler.test.d.ts +2 -0
- package/dist/markdown/__tests__/compiler.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/compiler.test.js +142 -0
- package/dist/markdown/__tests__/compiler.test.js.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts +2 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.js +182 -0
- package/dist/markdown/__tests__/custom-parsers.test.js.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts +2 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.js +162 -0
- package/dist/markdown/__tests__/frontmatter.test.js.map +1 -0
- package/dist/markdown/__tests__/layout.test.d.ts +2 -0
- package/dist/markdown/__tests__/layout.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/layout.test.js +85 -0
- package/dist/markdown/__tests__/layout.test.js.map +1 -0
- package/dist/markdown/__tests__/parser.test.d.ts +2 -0
- package/dist/markdown/__tests__/parser.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/parser.test.js +646 -0
- package/dist/markdown/__tests__/parser.test.js.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts +2 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js +90 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js.map +1 -0
- package/dist/markdown/auto-slide.d.ts +16 -0
- package/dist/markdown/auto-slide.d.ts.map +1 -0
- package/dist/markdown/auto-slide.js +144 -0
- package/dist/markdown/auto-slide.js.map +1 -0
- package/dist/markdown/compiler.d.ts +12 -0
- package/dist/markdown/compiler.d.ts.map +1 -0
- package/dist/markdown/compiler.js +47 -0
- package/dist/markdown/compiler.js.map +1 -0
- package/dist/markdown/custom-parsers.d.ts +69 -0
- package/dist/markdown/custom-parsers.d.ts.map +1 -0
- package/dist/markdown/custom-parsers.js +227 -0
- package/dist/markdown/custom-parsers.js.map +1 -0
- package/dist/markdown/frontmatter.d.ts +33 -0
- package/dist/markdown/frontmatter.d.ts.map +1 -0
- package/dist/markdown/frontmatter.js +83 -0
- package/dist/markdown/frontmatter.js.map +1 -0
- package/dist/markdown/id.d.ts +4 -0
- package/dist/markdown/id.d.ts.map +1 -0
- package/dist/markdown/id.js +15 -0
- package/dist/markdown/id.js.map +1 -0
- package/dist/markdown/index.d.ts +8 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +6 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parser.d.ts +35 -0
- package/dist/markdown/parser.d.ts.map +1 -0
- package/dist/markdown/parser.js +605 -0
- package/dist/markdown/parser.js.map +1 -0
- package/dist/markdown/timesheet-gen.d.ts +6 -0
- package/dist/markdown/timesheet-gen.d.ts.map +1 -0
- package/dist/markdown/timesheet-gen.js +223 -0
- package/dist/markdown/timesheet-gen.js.map +1 -0
- package/dist/player/CuePlayer.d.ts +58 -0
- package/dist/player/CuePlayer.d.ts.map +1 -0
- package/dist/player/NavBar.d.ts +31 -0
- package/dist/player/NavBar.d.ts.map +1 -0
- package/dist/player/PresenterView.d.ts +25 -0
- package/dist/player/PresenterView.d.ts.map +1 -0
- package/dist/player/SlideOverview.d.ts +16 -0
- package/dist/player/SlideOverview.d.ts.map +1 -0
- package/dist/player/__mocks__/chart.d.ts +29 -0
- package/dist/player/__mocks__/chart.d.ts.map +1 -0
- package/dist/player/__mocks__/mermaid.d.ts +8 -0
- package/dist/player/__mocks__/mermaid.d.ts.map +1 -0
- package/dist/player/__tests__/animator.test.d.ts +2 -0
- package/dist/player/__tests__/animator.test.d.ts.map +1 -0
- package/dist/player/__tests__/layout.test.d.ts +2 -0
- package/dist/player/__tests__/layout.test.d.ts.map +1 -0
- package/dist/player/__tests__/overview.test.d.ts +2 -0
- package/dist/player/__tests__/overview.test.d.ts.map +1 -0
- package/dist/player/__tests__/timeline.test.d.ts +2 -0
- package/dist/player/__tests__/timeline.test.d.ts.map +1 -0
- package/dist/player/animator.d.ts +4 -0
- package/dist/player/animator.d.ts.map +1 -0
- package/dist/player/cuppacue-player.css +1 -0
- package/dist/player/cuppacue-player.js +3247 -0
- package/dist/player/index.d.ts +14 -0
- package/dist/player/index.d.ts.map +1 -0
- package/dist/player/loader.d.ts +3 -0
- package/dist/player/loader.d.ts.map +1 -0
- package/dist/player/main.d.ts +2 -0
- package/dist/player/main.d.ts.map +1 -0
- package/dist/player/navigator.d.ts +27 -0
- package/dist/player/navigator.d.ts.map +1 -0
- package/dist/player/renderer.d.ts +9 -0
- package/dist/player/renderer.d.ts.map +1 -0
- package/dist/player/renderers/cards.d.ts +3 -0
- package/dist/player/renderers/cards.d.ts.map +1 -0
- package/dist/player/renderers/chart.d.ts +3 -0
- package/dist/player/renderers/chart.d.ts.map +1 -0
- package/dist/player/renderers/icons.d.ts +6 -0
- package/dist/player/renderers/icons.d.ts.map +1 -0
- package/dist/player/renderers/mermaid.d.ts +3 -0
- package/dist/player/renderers/mermaid.d.ts.map +1 -0
- package/dist/player/renderers/stats.d.ts +3 -0
- package/dist/player/renderers/stats.d.ts.map +1 -0
- package/dist/player/renderers/terminal.d.ts +3 -0
- package/dist/player/renderers/terminal.d.ts.map +1 -0
- package/dist/player/themes/dark.d.ts +2 -0
- package/dist/player/themes/dark.d.ts.map +1 -0
- package/dist/player/themes/light.d.ts +2 -0
- package/dist/player/themes/light.d.ts.map +1 -0
- package/dist/player/timeline.d.ts +43 -0
- package/dist/player/timeline.d.ts.map +1 -0
- package/dist/serve.d.ts +2 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +171 -0
- package/dist/serve.js.map +1 -0
- package/dist/templates/discover.d.ts +20 -0
- package/dist/templates/discover.d.ts.map +1 -0
- package/dist/templates/discover.js +86 -0
- package/dist/templates/discover.js.map +1 -0
- package/dist/templates/loader.d.ts +17 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +40 -0
- package/dist/templates/loader.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"animator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/animator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/layout.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/overview.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/timeline.test.ts"],"names":[],"mappings":""}
|
|
@@ -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}
|