@velumo/theme-show-engine 0.1.0-beta.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/src/index.ts ADDED
@@ -0,0 +1,551 @@
1
+ import type { Theme } from "@velumo/core";
2
+ import { showEngineFonts } from "./fonts.generated.js";
3
+
4
+ export const showEngineThemeId = "show-engine" as const;
5
+ export type ShowEngineThemeId = typeof showEngineThemeId;
6
+
7
+ /**
8
+ * Theme-root-scoped CSS for what tokens cannot express, injected by the DOM
9
+ * renderer at mount (deduped per theme id). The palette flows through
10
+ * `--velumo-*` variables (emitted by the renderer and consumed by the
11
+ * default-theme CSS rules); this string adds what those cannot: it pins the
12
+ * deck-root background to the theme background, lays an additive ambient glow
13
+ * over each slide/spatial viewport, and raises layout/world content above it.
14
+ * Every rule is scoped to `[data-velumo-theme="show-engine"]` so it stays
15
+ * inert if multiple themes coexist on one page. The fonts the typography tokens
16
+ * name (Bebas Neue / Inter / JetBrains Mono) ship as self-contained woff2
17
+ * data-URIs in `theme.fonts` (see `fonts.generated.ts`); the DOM renderer
18
+ * compiles them to `@font-face` and injects them on every surface.
19
+ */
20
+ export const showEngineThemeCss = `
21
+ [data-velumo-renderer="dom"][data-velumo-theme="show-engine"],
22
+ [data-velumo-renderer="dom"] [data-velumo-theme="show-engine"] {
23
+ background: var(--velumo-color-background, #020203);
24
+ }
25
+
26
+ [data-velumo-renderer="dom"][data-velumo-theme="show-engine"] [data-velumo-slide-id]::before,
27
+ [data-velumo-renderer="dom"] [data-velumo-theme="show-engine"] [data-velumo-slide-id]::before,
28
+ [data-velumo-renderer="dom"][data-velumo-theme="show-engine"] [data-velumo-spatial="viewport"]::before,
29
+ [data-velumo-renderer="dom"] [data-velumo-theme="show-engine"] [data-velumo-spatial="viewport"]::before {
30
+ content: "";
31
+ position: absolute;
32
+ inset: 0;
33
+ z-index: 0;
34
+ pointer-events: none;
35
+ opacity: var(--velumo-ambient-strength, 0.55);
36
+ background:
37
+ radial-gradient(72% 56% at 50% 34%, rgba(255, 209, 102, 0.10), transparent 62%),
38
+ radial-gradient(90% 72% at 80% 90%, rgba(46, 232, 255, 0.07), transparent 60%);
39
+ mix-blend-mode: screen;
40
+ }
41
+
42
+ [data-velumo-renderer="dom"][data-velumo-theme="show-engine"] [data-velumo-layout-root],
43
+ [data-velumo-renderer="dom"] [data-velumo-theme="show-engine"] [data-velumo-layout-root],
44
+ [data-velumo-renderer="dom"][data-velumo-theme="show-engine"] [data-velumo-spatial="world"],
45
+ [data-velumo-renderer="dom"] [data-velumo-theme="show-engine"] [data-velumo-spatial="world"] {
46
+ position: relative;
47
+ z-index: 1;
48
+ }
49
+
50
+ /* Interactive demo controls (Ward 044+). Scoped to the show-engine theme.
51
+ Determinism slide: two columns — content left, interactive panel right. */
52
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="determinism"] [data-velumo-layout-root] {
53
+ max-width: 52cqw;
54
+ }
55
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] {
56
+ position: absolute;
57
+ right: clamp(2.5rem, 6cqw, 5rem);
58
+ bottom: clamp(7.5rem, 19cqh, 12.5rem);
59
+ z-index: 3;
60
+ width: min(40cqw, 27rem);
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: 0.9rem;
64
+ padding: 1.5rem 1.6rem 1.7rem;
65
+ border-radius: 1.1rem;
66
+ background: rgba(4, 8, 10, 0.66);
67
+ border: 1px solid rgba(85, 255, 153, 0.3);
68
+ box-shadow: 0 26px 80px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.04);
69
+ font-family: "JetBrains Mono", ui-monospace, monospace;
70
+ }
71
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-head {
72
+ display: flex;
73
+ align-items: baseline;
74
+ gap: 0.6rem;
75
+ }
76
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-frame-label {
77
+ color: var(--velumo-color-green, #55ff99);
78
+ font-size: clamp(1.4rem, 3cqw, 2.1rem);
79
+ }
80
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-frame {
81
+ color: var(--velumo-color-green, #55ff99);
82
+ font-size: clamp(1.9rem, 4.4cqw, 3rem);
83
+ font-weight: 700;
84
+ font-variant-numeric: tabular-nums;
85
+ }
86
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-ms {
87
+ margin-left: auto;
88
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
89
+ font-size: clamp(0.85rem, 1.8cqw, 1.1rem);
90
+ font-variant-numeric: tabular-nums;
91
+ }
92
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-ms::after {
93
+ content: " ms";
94
+ }
95
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-track {
96
+ height: 0.4rem;
97
+ border-radius: 999px;
98
+ background: rgba(255, 255, 255, 0.08);
99
+ overflow: hidden;
100
+ }
101
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-bar {
102
+ height: 100%;
103
+ width: 0%;
104
+ background: linear-gradient(90deg, #2ee8ff, #55ff99);
105
+ transition: width 0.12s linear;
106
+ }
107
+ [data-velumo-theme="show-engine"] [data-velumo-demo="stepper"] .demo-stepper-eased {
108
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
109
+ font-size: clamp(0.85rem, 1.8cqw, 1.05rem);
110
+ font-variant-numeric: tabular-nums;
111
+ }
112
+
113
+ /* Positioning is scoped to the determinism slide so other slides' control
114
+ buttons (Wards 045/046) are not forced absolute. The button APPEARANCE below
115
+ stays theme-global for a consistent look. */
116
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="determinism"] [data-velumo-layer-type="control.button"] {
117
+ position: absolute;
118
+ bottom: clamp(2.75rem, 7cqh, 4.5rem);
119
+ z-index: 3;
120
+ }
121
+ [data-velumo-theme="show-engine"] [data-velumo-layer-id="demo-advance"] {
122
+ right: clamp(9.5rem, 20cqw, 15rem);
123
+ }
124
+ [data-velumo-theme="show-engine"] [data-velumo-layer-id="demo-reset"] {
125
+ right: clamp(2.5rem, 6cqw, 5rem);
126
+ }
127
+ [data-velumo-theme="show-engine"] [data-velumo-control="button"] {
128
+ cursor: pointer;
129
+ font-family: "Bebas Neue", Impact, sans-serif;
130
+ letter-spacing: 0.06em;
131
+ text-transform: uppercase;
132
+ font-size: clamp(1rem, 2.2cqw, 1.35rem);
133
+ padding: 0.55rem 1.3rem;
134
+ border-radius: 0.6rem;
135
+ border: 1px solid rgba(85, 255, 153, 0.4);
136
+ background: rgba(85, 255, 153, 0.14);
137
+ color: #eafff2;
138
+ }
139
+ [data-velumo-theme="show-engine"] [data-velumo-control-variant="ghost"] {
140
+ background: transparent;
141
+ border-color: rgba(255, 255, 255, 0.22);
142
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
143
+ }
144
+ [data-velumo-theme="show-engine"] [data-velumo-control="button"]:hover {
145
+ filter: brightness(1.2);
146
+ }
147
+
148
+ /* Spatial slide (Ward 045): a framed camera world + a row of camera.seek buttons. */
149
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] {
150
+ /* world-inset-x reuses the SAME token (with the SAME fallback) the renderer's
151
+ own slide padding reads (default-theme.ts), so world's left/right edges are
152
+ always flush with the slide's standard content margin, never a coincidence. */
153
+ --spatial-world-inset-x: var(--velumo-margin-frame-x, clamp(4rem, 8cqw, 8.5rem));
154
+ --spatial-world-inset-top: clamp(13rem, 44cqh, 26rem);
155
+ --spatial-world-inset-bottom: clamp(6rem, 14cqh, 9.5rem);
156
+ /* Single source for layout-root's own max-width, so the canvas overlay's
157
+ right formula below can never drift from it if this is retuned. */
158
+ --spatial-layout-max-width: 60cqw;
159
+ }
160
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layout-root] {
161
+ max-width: var(--spatial-layout-max-width);
162
+ }
163
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-demo="camera-world"] {
164
+ position: absolute;
165
+ left: var(--spatial-world-inset-x);
166
+ right: var(--spatial-world-inset-x);
167
+ top: var(--spatial-world-inset-top);
168
+ bottom: var(--spatial-world-inset-bottom);
169
+ z-index: 2;
170
+ border: 1px solid rgba(255, 255, 255, 0.12);
171
+ border-radius: 1rem;
172
+ overflow: hidden;
173
+ background: rgba(4, 8, 12, 0.4);
174
+ }
175
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layout="canvas"] {
176
+ /* The renderer sets position:relative inline on every canvas element
177
+ (packages/renderer-dom layout-renderer.ts); only !important can override
178
+ an inline style, so it is scoped to this single property.
179
+ Unlike [data-velumo-demo="camera-world"] (a LAYER, positioned relative
180
+ to the slide root), this canvas is part of layout, so its containing
181
+ block is [data-velumo-layout-root] (position:relative; see the ambient
182
+ ::before stacking rule above) -- a DIFFERENT box, inset from the slide by
183
+ the renderer's own --velumo-margin-frame(-x) padding and narrowed to
184
+ max-width:60cqw. left:0 lines up exactly with camera-world's left because
185
+ --spatial-world-inset-x reuses that same padding token. top/bottom/right
186
+ are re-derived (world's inset MINUS layout-root's own offset on that side)
187
+ so the canvas box still lands exactly on camera-world's box despite the
188
+ different containing block -- not copy-pasted clamp values that would
189
+ silently drift out of alignment. */
190
+ /* The renderer also sets width:100%/height:100% inline, which over-
191
+ constrains an absolutely positioned box with both left+right (or
192
+ top+bottom) set -- the browser then honors the explicit width/height and
193
+ silently ignores right/bottom. auto releases that so left+right and
194
+ top+bottom actually determine the box, matching camera-world's size. */
195
+ position: absolute !important;
196
+ width: auto !important;
197
+ height: auto !important;
198
+ left: 0;
199
+ right: calc(
200
+ 2 * var(--spatial-world-inset-x) - (100cqw - var(--spatial-layout-max-width))
201
+ );
202
+ top: calc(
203
+ var(--spatial-world-inset-top) -
204
+ var(--velumo-margin-frame, clamp(2.5rem, 4.5cqh, 4rem))
205
+ );
206
+ bottom: calc(
207
+ var(--spatial-world-inset-bottom) -
208
+ var(--velumo-margin-frame, clamp(2.5rem, 4.5cqh, 4rem))
209
+ );
210
+ pointer-events: none;
211
+ }
212
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-demo="camera-view"] {
213
+ position: absolute;
214
+ inset: 0;
215
+ transform-origin: 0 0;
216
+ transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
217
+ }
218
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-grid {
219
+ position: absolute;
220
+ inset: 0;
221
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),
222
+ linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
223
+ background-size: 8% 12%;
224
+ }
225
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card {
226
+ position: absolute;
227
+ transform: translate(-50%, -50%);
228
+ width: 24%;
229
+ padding: 0.7rem 0.9rem;
230
+ border-radius: 0.7rem;
231
+ border: 1px solid rgba(255, 255, 255, 0.18);
232
+ background: rgba(4, 8, 12, 0.78);
233
+ box-shadow: 0 14px 40px rgba(0, 0, 0, 0.5);
234
+ }
235
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="accent"] {
236
+ border-color: rgba(255, 209, 102, 0.55);
237
+ }
238
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="cyan"] {
239
+ border-color: rgba(46, 232, 255, 0.55);
240
+ }
241
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="magenta"] {
242
+ border-color: rgba(255, 61, 127, 0.55);
243
+ }
244
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card-title {
245
+ font-family: "Bebas Neue", Impact, sans-serif;
246
+ font-size: clamp(1.1rem, 2.4cqw, 1.7rem);
247
+ letter-spacing: 0.04em;
248
+ }
249
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="accent"] .demo-camera-card-title {
250
+ color: var(--velumo-color-accent, #ffd166);
251
+ }
252
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="cyan"] .demo-camera-card-title {
253
+ color: var(--velumo-color-cyan, #2ee8ff);
254
+ }
255
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card[data-tone="magenta"] .demo-camera-card-title {
256
+ color: var(--velumo-color-magenta, #ff3d7f);
257
+ }
258
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] .demo-camera-card-sub {
259
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
260
+ font-size: clamp(0.7rem, 1.4cqw, 0.95rem);
261
+ }
262
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layer-type="control.button"] {
263
+ position: absolute;
264
+ bottom: clamp(2rem, 5cqh, 3.5rem);
265
+ z-index: 3;
266
+ }
267
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-control="button"] {
268
+ min-width: 5.5rem;
269
+ text-align: center;
270
+ }
271
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layer-id="camera-wide"] {
272
+ left: clamp(4rem, 8cqw, 8.5rem);
273
+ }
274
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layer-id="camera-intro"] {
275
+ left: calc(clamp(4rem, 8cqw, 8.5rem) + 7rem);
276
+ }
277
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layer-id="camera-data"] {
278
+ left: calc(clamp(4rem, 8cqw, 8.5rem) + 14rem);
279
+ }
280
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="spatial"] [data-velumo-layer-id="camera-finale"] {
281
+ left: calc(clamp(4rem, 8cqw, 8.5rem) + 21rem);
282
+ }
283
+
284
+ /* Fidelity slide (Ward 046): code card left, mode panel right, SHOW treatment
285
+ keyed on data-velumo-demo-mode. All rules slide-scoped. */
286
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-layout-root] {
287
+ max-width: 50cqw;
288
+ }
289
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo="fidelity"] {
290
+ position: absolute;
291
+ right: clamp(2.5rem, 6cqw, 5rem);
292
+ top: 50%;
293
+ transform: translateY(-44%);
294
+ z-index: 3;
295
+ width: min(42cqw, 30rem);
296
+ display: flex;
297
+ flex-direction: column;
298
+ gap: 1rem;
299
+ padding: 1.6rem 1.8rem 1.9rem;
300
+ border-radius: 1.1rem;
301
+ overflow: hidden;
302
+ border: 1px solid rgba(255, 255, 255, 0.12);
303
+ background: rgba(4, 8, 12, 0.5);
304
+ transition: border-color 0.35s, box-shadow 0.35s, background 0.35s;
305
+ }
306
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-moderow {
307
+ display: flex;
308
+ gap: 0.4rem;
309
+ font-family: "JetBrains Mono", ui-monospace, monospace;
310
+ font-size: clamp(0.72rem, 1.5cqw, 0.92rem);
311
+ text-transform: uppercase;
312
+ letter-spacing: 0.14em;
313
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
314
+ }
315
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-mode {
316
+ color: var(--velumo-color-cyan, #2ee8ff);
317
+ }
318
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-headline {
319
+ font-family: "Bebas Neue", Impact, sans-serif;
320
+ font-size: clamp(1.8rem, 4.6cqw, 3.1rem);
321
+ letter-spacing: 0.02em;
322
+ color: var(--velumo-color-foreground, #fff7e8);
323
+ transition: color 0.35s, text-shadow 0.35s;
324
+ }
325
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-pills {
326
+ display: flex;
327
+ gap: 0.5rem;
328
+ flex-wrap: wrap;
329
+ }
330
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-pill {
331
+ font-family: "JetBrains Mono", ui-monospace, monospace;
332
+ font-size: clamp(0.68rem, 1.4cqw, 0.88rem);
333
+ padding: 0.3rem 0.7rem;
334
+ border-radius: 999px;
335
+ border: 1px solid rgba(255, 255, 255, 0.14);
336
+ color: var(--velumo-color-muted, rgba(255, 247, 232, 0.55));
337
+ opacity: 0.5;
338
+ transition: opacity 0.35s, border-color 0.35s, color 0.35s;
339
+ }
340
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] .demo-fidelity-beams {
341
+ position: absolute;
342
+ inset: -40% -10% auto -10%;
343
+ height: 80%;
344
+ pointer-events: none;
345
+ opacity: 0;
346
+ background: linear-gradient(115deg, transparent 30%, rgba(255, 209, 102, 0.14) 48%, rgba(46, 232, 255, 0.12) 56%, transparent 74%);
347
+ transition: opacity 0.5s;
348
+ }
349
+ /* SHOW treatment */
350
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] {
351
+ border-color: rgba(255, 209, 102, 0.5);
352
+ box-shadow: 0 0 60px rgba(255, 209, 102, 0.18);
353
+ background: rgba(8, 8, 6, 0.6);
354
+ }
355
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-mode {
356
+ color: var(--velumo-color-accent, #ffd166);
357
+ }
358
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-headline {
359
+ color: var(--velumo-color-accent, #ffd166);
360
+ text-shadow: 0 0 26px rgba(255, 209, 102, 0.6);
361
+ }
362
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-pill {
363
+ opacity: 1;
364
+ }
365
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-pill[data-tone="magenta"] {
366
+ border-color: rgba(255, 61, 127, 0.6);
367
+ color: #ff9ec0;
368
+ }
369
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-pill[data-tone="cyan"] {
370
+ border-color: rgba(46, 232, 255, 0.6);
371
+ color: #9becff;
372
+ }
373
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-pill[data-tone="accent"] {
374
+ border-color: rgba(255, 209, 102, 0.6);
375
+ color: #ffe4a3;
376
+ }
377
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-demo-mode="SHOW"] .demo-fidelity-beams {
378
+ opacity: 0.55;
379
+ }
380
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="fidelity"] [data-velumo-layer-id="fidelity-toggle"] {
381
+ position: absolute;
382
+ right: clamp(2.5rem, 6cqw, 5rem);
383
+ bottom: clamp(2rem, 5cqh, 3.5rem);
384
+ z-index: 4;
385
+ }
386
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-layout-root] {
387
+ justify-content: flex-start;
388
+ gap: clamp(0.5rem, 1.5cqh, 1rem);
389
+ }
390
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-element="heading"][data-velumo-heading-size="display"] {
391
+ font-size: clamp(2.5rem, 7cqw, 5.25rem);
392
+ line-height: 0.92;
393
+ margin: 0;
394
+ }
395
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-frame-tone="accent"] {
396
+ flex: none;
397
+ align-self: center;
398
+ padding: 0.9rem 1.4rem;
399
+ }
400
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-layout="stack"] > [data-velumo-layout="grid"] {
401
+ flex: 1;
402
+ min-height: 0;
403
+ align-items: stretch;
404
+ }
405
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-layout="frame"][data-velumo-frame-tone] {
406
+ gap: 0.75rem;
407
+ justify-content: flex-start;
408
+ }
409
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-layout="frame"][data-velumo-frame-tone] > [data-velumo-layout="frame"] {
410
+ flex: 1;
411
+ min-height: 0;
412
+ justify-content: center;
413
+ gap: 0.7rem;
414
+ }
415
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-canvas-item] {
416
+ transform: translateY(-50%);
417
+ }
418
+ @media (prefers-reduced-motion: no-preference) {
419
+ @keyframes velumo-one-source-playhead {
420
+ from { left: 6%; }
421
+ to { left: 76%; }
422
+ }
423
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-frame-tone="magenta"] [data-velumo-canvas-item]:has([data-velumo-rule-tone="cyan"]) {
424
+ animation: velumo-one-source-playhead 3.2s cubic-bezier(0.4, 0, 0.2, 1) infinite alternate;
425
+ }
426
+ }
427
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="one-source"] [data-velumo-frame-tone="green"] [data-velumo-layout="grid"] {
428
+ flex: 1;
429
+ min-height: 0;
430
+ gap: 0.5rem;
431
+ }
432
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="authoring"] [data-velumo-layout-root] {
433
+ justify-content: flex-start;
434
+ gap: clamp(1rem, 2.5cqh, 1.75rem);
435
+ }
436
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="authoring"] [data-velumo-element="heading"][data-velumo-heading-size="display"] {
437
+ font-size: clamp(2rem, 6cqw, 4.75rem);
438
+ line-height: 0.95;
439
+ margin: 0;
440
+ }
441
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="authoring"] pre[data-velumo-element="code"] {
442
+ font-size: 0.82rem;
443
+ }
444
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="authoring"] [data-velumo-layout="grid"] {
445
+ align-items: start;
446
+ gap: 1.5rem;
447
+ }
448
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="authoring"] [data-velumo-element="badge"] {
449
+ width: 100%;
450
+ border-radius: 0.7rem;
451
+ justify-content: center;
452
+ padding: 0.75em 1em;
453
+ }
454
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="closer"] [data-velumo-element="heading"][data-velumo-heading-size="hero"] {
455
+ max-width: none;
456
+ margin: 0;
457
+ }
458
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="closer"] [data-velumo-element="heading"][data-velumo-heading-size="hero"][data-velumo-text-tone="muted"] {
459
+ font-size: clamp(2.25rem, 7.8cqw, 6.5rem);
460
+ line-height: 0.9;
461
+ }
462
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="closer"] [data-velumo-element="heading"][data-velumo-heading-size="hero"][data-velumo-text-tone="accent"] {
463
+ font-size: clamp(2.75rem, 9.6cqw, 8rem);
464
+ line-height: 0.9;
465
+ }
466
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="closer"] [data-velumo-element="badge"] {
467
+ font-size: clamp(0.95rem, 1.6cqw, 1.4rem);
468
+ padding: 0.7em 1.2em;
469
+ }
470
+ [data-velumo-theme="show-engine"] [data-velumo-slide-id="closer"] [data-velumo-element="text"] {
471
+ font-size: clamp(0.85rem, 1.2cqw, 1.1rem);
472
+ letter-spacing: 0.22em;
473
+ }
474
+ `.trim();
475
+
476
+ export const showEngineTheme: Theme = {
477
+ id: showEngineThemeId,
478
+ css: showEngineThemeCss,
479
+ fonts: showEngineFonts,
480
+ tokens: {
481
+ colors: {
482
+ background: "#020203",
483
+ foreground: "#fff7e8",
484
+ muted: "rgba(255, 247, 232, 0.55)",
485
+ accent: "#ffd166",
486
+ danger: "#ff3048",
487
+ magenta: "#ff3d7f",
488
+ cyan: "#2ee8ff",
489
+ purple: "#8d5cff",
490
+ green: "#55ff99",
491
+ },
492
+ typography: {
493
+ heading: {
494
+ fontFamily: '"Bebas Neue", Impact, sans-serif',
495
+ fontSize: "clamp(2.75rem, 6.5cqw, 6rem)",
496
+ lineHeight: 0.95,
497
+ fontWeight: 700,
498
+ letterSpacing: "0.02em",
499
+ },
500
+ body: {
501
+ fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif",
502
+ fontSize: "clamp(1.05rem, 1.7cqw, 1.35rem)",
503
+ lineHeight: 1.55,
504
+ fontWeight: 450,
505
+ },
506
+ caption: {
507
+ fontFamily: '"JetBrains Mono", ui-monospace, SFMono-Regular, monospace',
508
+ fontSize: "0.9rem",
509
+ lineHeight: 1.45,
510
+ fontWeight: 500,
511
+ letterSpacing: "0.18em",
512
+ },
513
+ },
514
+ spacing: {
515
+ xs: "0.375rem",
516
+ sm: "0.75rem",
517
+ md: "1.25rem",
518
+ lg: "2rem",
519
+ xl: "3rem",
520
+ },
521
+ radii: {
522
+ card: "1rem",
523
+ pill: "999px",
524
+ },
525
+ shadows: {
526
+ card: "0 22px 80px rgba(0, 0, 0, 0.5)",
527
+ },
528
+ motion: {
529
+ quick: { duration: "160ms", easing: "ease-out" },
530
+ standard: {
531
+ duration: "1100ms",
532
+ easing: "cubic-bezier(0.15, 0.8, 0.25, 1)",
533
+ },
534
+ },
535
+ surfaces: {
536
+ default: "#0a0810",
537
+ muted: "#11101a",
538
+ card: "rgba(9, 8, 13, 0.62)",
539
+ accent: "rgba(255, 209, 102, 0.12)",
540
+ inverse: "#fff7e8",
541
+ danger: "rgba(255, 48, 72, 0.14)",
542
+ },
543
+ text: {
544
+ default: "#fff7e8",
545
+ muted: "rgba(255, 247, 232, 0.55)",
546
+ accent: "#ffd166",
547
+ inverse: "#020203",
548
+ danger: "#ff6b6b",
549
+ },
550
+ },
551
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "outDir": "dist",
6
+ "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo"
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "references": [{ "path": "../core" }]
10
+ }