hyperframes 0.1.15 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +3 -3
  2. package/dist/cli.js +4057 -3400
  3. package/dist/skills/hyperframes-captions/SKILL.md +1 -1
  4. package/dist/skills/hyperframes-compose/SKILL.md +1 -0
  5. package/dist/studio/assets/index-Bkp9HQbo.css +1 -0
  6. package/dist/studio/assets/index-DfhSlTti.js +93 -0
  7. package/dist/studio/index.html +2 -2
  8. package/dist/templates/_shared/CLAUDE.md +1 -1
  9. package/package.json +3 -2
  10. package/dist/studio/assets/index-CLmYRLY-.css +0 -1
  11. package/dist/studio/assets/index-CRvFpc0E.js +0 -84
  12. package/dist/templates/decision-tree/compositions/decision_tree.html +0 -420
  13. package/dist/templates/decision-tree/index.html +0 -56
  14. package/dist/templates/generators.ts +0 -32
  15. package/dist/templates/kinetic-type/compositions/main-graphics.html +0 -588
  16. package/dist/templates/kinetic-type/index.html +0 -61
  17. package/dist/templates/nyt-graph/compositions/nyt-chart.html +0 -450
  18. package/dist/templates/nyt-graph/index.html +0 -51
  19. package/dist/templates/play-mode/compositions/captions.html +0 -163
  20. package/dist/templates/play-mode/compositions/intro.html +0 -107
  21. package/dist/templates/play-mode/compositions/stats.html +0 -388
  22. package/dist/templates/play-mode/index.html +0 -239
  23. package/dist/templates/product-promo/assets/figma-cursors.svg +0 -30
  24. package/dist/templates/product-promo/assets/figma-logo-pieces.svg +0 -15
  25. package/dist/templates/product-promo/assets/figma-logo-pills.svg +0 -6
  26. package/dist/templates/product-promo/compositions/scene1-logo-intro.html +0 -189
  27. package/dist/templates/product-promo/compositions/scene2-4-canvas.html +0 -570
  28. package/dist/templates/product-promo/compositions/scene5-logo-outro.html +0 -226
  29. package/dist/templates/product-promo/index.html +0 -158
  30. package/dist/templates/swiss-grid/assets/swiss-grid.svg +0 -116
  31. package/dist/templates/swiss-grid/compositions/captions.html +0 -148
  32. package/dist/templates/swiss-grid/compositions/graphics.html +0 -207
  33. package/dist/templates/swiss-grid/compositions/intro.html +0 -131
  34. package/dist/templates/swiss-grid/index.html +0 -234
  35. package/dist/templates/vignelli/compositions/captions.html +0 -181
  36. package/dist/templates/vignelli/compositions/overlays.html +0 -323
  37. package/dist/templates/vignelli/index.html +0 -190
  38. package/dist/templates/warm-grain/compositions/captions.html +0 -147
  39. package/dist/templates/warm-grain/compositions/graphics.html +0 -164
  40. package/dist/templates/warm-grain/compositions/intro.html +0 -86
  41. package/dist/templates/warm-grain/index.html +0 -294
@@ -1,588 +0,0 @@
1
- <template id="main-graphics-template">
2
- <div
3
- data-composition-id="main-graphics"
4
- data-width="1920"
5
- data-height="1080"
6
- data-duration="14.72"
7
- >
8
- <!-- A-Roll Video -->
9
- <video
10
- id="a-roll-video"
11
- src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/67cf5a05_e134ec83a57042b38776c952da595870.mp4"
12
- style="
13
- position: absolute;
14
- width: 100%;
15
- height: 100%;
16
- object-fit: cover;
17
- opacity: 1;
18
- z-index: 0;
19
- "
20
- crossorigin="anonymous"
21
- ></video>
22
-
23
- <!-- Scene 1: Hook -->
24
- <div
25
- id="white-wipe"
26
- style="
27
- position: absolute;
28
- top: 0;
29
- left: 0;
30
- width: 100%;
31
- height: 100%;
32
- background-color: white;
33
- z-index: 15;
34
- "
35
- ></div>
36
- <div id="scene-1" class="scene">
37
- <div class="hook-container">
38
- <div class="hook-what-if">What if</div>
39
- <div class="hook-motion-graphics">motion graphics</div>
40
- <div class="hook-wrote-themselves">wrote themselves?</div>
41
- </div>
42
- </div>
43
-
44
- <!-- Scene 2: Swiss Style -->
45
- <div id="scene-2" class="scene">
46
- <div class="swiss-panel">
47
- <div class="swiss-grid">
48
- <div class="grid-line horizontal" style="top: 25%"></div>
49
- <div class="grid-line horizontal" style="top: 50%"></div>
50
- <div class="grid-line horizontal" style="top: 75%"></div>
51
- <div class="grid-line vertical" style="left: 25%"></div>
52
- <div class="grid-line vertical" style="left: 50%"></div>
53
- <div class="grid-line vertical" style="left: 75%"></div>
54
- <div class="swiss-circle"></div>
55
- <div class="swiss-square"></div>
56
- </div>
57
- <div class="swiss-content">
58
- <div class="swiss-title">HyperFrames</div>
59
- <div class="swiss-subtitle">turns code into</div>
60
- <div class="swiss-main-text">
61
- <span class="word">production-ready</span>
62
- <span class="word">video</span>
63
- </div>
64
- </div>
65
- </div>
66
- </div>
67
-
68
- <!-- Scene 3: Figma Config Style -->
69
- <div id="scene-3" class="scene">
70
- <div class="dark-overlay"></div>
71
- <div class="figma-container">
72
- <div class="figma-item" id="figma-animations">
73
- <div class="glyph-container">
74
- <div class="glyph-ring ring-unified"></div>
75
- <div class="glyph-diamond"></div>
76
- </div>
77
- <div class="figma-label">animations</div>
78
- </div>
79
- <div class="figma-item" id="figma-transitions">
80
- <div class="glyph-container">
81
- <div class="glyph-rect rect-unified"></div>
82
- <div class="glyph-wipe"></div>
83
- </div>
84
- <div class="figma-label">transitions</div>
85
- </div>
86
- <div class="figma-item" id="figma-typography">
87
- <div class="glyph-container">
88
- <div class="glyph-tri tri-unified"></div>
89
- <div class="glyph-lines">
90
- <div class="line"></div>
91
- <div class="line"></div>
92
- <div class="line"></div>
93
- </div>
94
- </div>
95
- <div class="figma-label">typography</div>
96
- </div>
97
- <div class="figma-footer">all generated from a single prompt</div>
98
- </div>
99
- </div>
100
-
101
- <!-- Scene 4: David Carson Style -->
102
- <div id="scene-4" class="scene">
103
- <div class="carson-overlay"></div>
104
- <div class="carson-container">
105
- <div class="carson-line-1">No timeline<span class="red-dot">.</span></div>
106
- <div class="carson-line-2">no After Effects.</div>
107
- </div>
108
- </div>
109
-
110
- <!-- Scene 5: Wes Anderson -->
111
- <div id="scene-5" class="scene">
112
- <div class="wes-bg"></div>
113
- <div class="wes-container">
114
- <div class="wes-text-top">Just describe the motion</div>
115
- <div class="wes-rule"></div>
116
- <div class="wes-text-bottom">and render.</div>
117
- </div>
118
- </div>
119
-
120
- <!-- Scene 6: Vignelli Style -->
121
- <div id="scene-6" class="scene">
122
- <div
123
- id="scene-6-overlay"
124
- style="
125
- position: absolute;
126
- top: 0;
127
- left: 0;
128
- width: 100%;
129
- height: 100%;
130
- background-color: black;
131
- z-index: -1;
132
- "
133
- ></div>
134
- <div class="vignelli-container">
135
- <div class="vignelli-title">HyperFrames</div>
136
- <div class="vignelli-subtitle">is here.</div>
137
- <div class="vignelli-rule"></div>
138
- </div>
139
- </div>
140
-
141
- <!-- Black Out -->
142
- <div
143
- id="black-out"
144
- style="
145
- position: absolute;
146
- top: 0;
147
- left: 0;
148
- width: 100%;
149
- height: 100%;
150
- background-color: black;
151
- z-index: 100;
152
- opacity: 0;
153
- pointer-events: none;
154
- "
155
- ></div>
156
-
157
- <style>
158
- [data-composition-id="main-graphics"] {
159
- background: black;
160
- font-family: "Inter", sans-serif;
161
- color: white;
162
- overflow: hidden;
163
- }
164
-
165
- .scene {
166
- position: absolute;
167
- top: 0;
168
- left: 0;
169
- width: 100%;
170
- height: 100%;
171
- display: flex;
172
- justify-content: center;
173
- align-items: center;
174
- opacity: 0;
175
- z-index: 1;
176
- }
177
-
178
- /* Scene 1: Hook */
179
- #scene-1 {
180
- background-color: #0a0a0f;
181
- z-index: 10;
182
- opacity: 1;
183
- }
184
- .hook-container {
185
- text-align: center;
186
- }
187
- .hook-what-if {
188
- font-size: 32px;
189
- font-weight: 400;
190
- opacity: 0;
191
- }
192
- .hook-motion-graphics {
193
- font-size: 120px;
194
- font-weight: 900;
195
- text-transform: uppercase;
196
- margin-top: 10px;
197
- transform: scale(0);
198
- }
199
- .hook-wrote-themselves {
200
- font-size: 48px;
201
- font-style: italic;
202
- color: #00e5ff;
203
- margin-top: 10px;
204
- opacity: 0;
205
- }
206
-
207
- /* Scene 2: Swiss Style */
208
- .swiss-panel {
209
- position: absolute;
210
- right: 100px;
211
- width: 800px;
212
- height: 400px;
213
- background: #ffffff;
214
- border-radius: 4px;
215
- display: flex;
216
- padding: 40px;
217
- color: black;
218
- transform: translateX(100%);
219
- z-index: 2;
220
- }
221
- .swiss-grid {
222
- position: absolute;
223
- top: 0;
224
- left: 0;
225
- width: 100%;
226
- height: 100%;
227
- pointer-events: none;
228
- }
229
- .grid-line {
230
- position: absolute;
231
- background: #e53935;
232
- }
233
- .grid-line.horizontal {
234
- width: 100%;
235
- height: 2px;
236
- }
237
- .grid-line.vertical {
238
- height: 100%;
239
- width: 2px;
240
- }
241
-
242
- .swiss-circle {
243
- position: absolute;
244
- width: 60px;
245
- height: 60px;
246
- background: #e53935;
247
- border-radius: 50%;
248
- top: 20%;
249
- left: 10%;
250
- opacity: 0;
251
- }
252
- .swiss-square {
253
- position: absolute;
254
- width: 50px;
255
- height: 50px;
256
- background: black;
257
- bottom: 15%;
258
- right: 15%;
259
- opacity: 0;
260
- }
261
-
262
- .swiss-content {
263
- position: relative;
264
- z-index: 3;
265
- display: flex;
266
- flex-direction: column;
267
- justify-content: center;
268
- }
269
- .swiss-title {
270
- font-family: "Inter", sans-serif;
271
- font-size: 64px;
272
- font-weight: 900;
273
- opacity: 0;
274
- }
275
- .swiss-subtitle {
276
- font-size: 24px;
277
- color: #666;
278
- margin-top: 10px;
279
- opacity: 0;
280
- }
281
- .swiss-main-text {
282
- font-size: 48px;
283
- font-weight: 900;
284
- margin-top: 20px;
285
- display: flex;
286
- gap: 15px;
287
- }
288
- .swiss-main-text .word {
289
- opacity: 0;
290
- }
291
-
292
- /* Scene 3: Figma Config Style */
293
- .dark-overlay {
294
- position: absolute;
295
- width: 100%;
296
- height: 100%;
297
- background: rgba(0, 0, 0, 0.55);
298
- z-index: 1;
299
- }
300
- .figma-container {
301
- position: relative;
302
- z-index: 2;
303
- width: 1200px;
304
- display: flex;
305
- justify-content: space-between;
306
- align-items: center;
307
- flex-wrap: wrap;
308
- }
309
- .figma-item {
310
- display: flex;
311
- flex-direction: column;
312
- align-items: center;
313
- gap: 20px;
314
- opacity: 0;
315
- }
316
- .glyph-container {
317
- position: relative;
318
- width: 120px;
319
- height: 120px;
320
- display: flex;
321
- justify-content: center;
322
- align-items: center;
323
- }
324
- .glyph-ring {
325
- position: absolute;
326
- width: 100%;
327
- height: 100%;
328
- border-radius: 50%;
329
- border: 8px solid transparent;
330
- }
331
- .ring-unified {
332
- background:
333
- linear-gradient(black, black) padding-box,
334
- linear-gradient(to right, #f24e1e, #a259ff) border-box;
335
- }
336
- .glyph-diamond {
337
- width: 40px;
338
- height: 40px;
339
- background: white;
340
- transform: rotate(45deg);
341
- }
342
- .glyph-rect {
343
- position: absolute;
344
- width: 100%;
345
- height: 100%;
346
- border-radius: 8px;
347
- background: linear-gradient(to bottom right, #f24e1e, #a259ff);
348
- }
349
- .glyph-wipe {
350
- position: absolute;
351
- width: 0%;
352
- height: 100%;
353
- background: rgba(255, 255, 255, 0.3);
354
- left: 0;
355
- }
356
- .glyph-tri {
357
- width: 100px;
358
- height: 100px;
359
- background: linear-gradient(to bottom right, #f24e1e, #a259ff);
360
- clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
361
- }
362
- .glyph-lines {
363
- display: flex;
364
- flex-direction: column;
365
- gap: 8px;
366
- width: 60px;
367
- }
368
- .glyph-lines .line {
369
- height: 4px;
370
- background: white;
371
- width: 0;
372
- }
373
- .figma-label {
374
- font-size: 40px;
375
- font-weight: bold;
376
- }
377
- .figma-footer {
378
- width: 100%;
379
- text-align: center;
380
- font-size: 22px;
381
- margin-top: 60px;
382
- opacity: 0;
383
- }
384
-
385
- /* Scene 4: David Carson Style */
386
- .carson-overlay {
387
- position: absolute;
388
- width: 100%;
389
- height: 100%;
390
- background: rgba(0, 0, 0, 0.6);
391
- z-index: 1;
392
- }
393
- .carson-container {
394
- position: relative;
395
- z-index: 2;
396
- width: 100%;
397
- height: 100%;
398
- }
399
- .carson-line-1 {
400
- position: absolute;
401
- top: 20%;
402
- left: 10%;
403
- font-size: 140px;
404
- font-weight: 900;
405
- transform: translateY(200px);
406
- z-index: 2;
407
- }
408
- .carson-line-1 .red-dot {
409
- color: #ff0000;
410
- font-size: 240px;
411
- position: absolute;
412
- top: -40px;
413
- left: 80%;
414
- z-index: 1;
415
- opacity: 0.8;
416
- }
417
- .carson-line-2 {
418
- position: absolute;
419
- bottom: 30%;
420
- right: 10%;
421
- font-size: 80px;
422
- font-weight: 400;
423
- opacity: 0;
424
- z-index: 3;
425
- transform: rotate(-5deg);
426
- }
427
-
428
- /* Scene 5: Wes Anderson */
429
- .wes-bg {
430
- position: absolute;
431
- width: 100%;
432
- height: 100%;
433
- background: #f5f0e8;
434
- z-index: -1;
435
- }
436
- .wes-bg::after {
437
- content: "";
438
- position: absolute;
439
- top: 0;
440
- left: 0;
441
- width: 100%;
442
- height: 100%;
443
- opacity: 0.05;
444
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
445
- }
446
- .wes-container {
447
- text-align: center;
448
- color: #2c1e16;
449
- overflow: hidden;
450
- }
451
- .wes-text-top {
452
- font-family: "Libre Baskerville", serif;
453
- font-size: 44px;
454
- font-style: italic;
455
- transform: translateY(-100px);
456
- }
457
- .wes-rule {
458
- width: 0;
459
- height: 1px;
460
- background: #2c1e16;
461
- margin: 20px auto;
462
- }
463
- .wes-text-bottom {
464
- font-family: "Libre Baskerville", serif;
465
- font-size: 44px;
466
- transform: translateY(100px);
467
- }
468
-
469
- /* Scene 6: Vignelli Style */
470
- .vignelli-container {
471
- text-align: center;
472
- }
473
- .vignelli-title {
474
- font-family: "Inter", sans-serif;
475
- font-size: 120px;
476
- font-weight: 900;
477
- letter-spacing: -0.02em;
478
- opacity: 0;
479
- }
480
- .vignelli-subtitle {
481
- font-family: "Inter", sans-serif;
482
- font-size: 32px;
483
- color: #00e5ff;
484
- margin-top: 20px;
485
- opacity: 0;
486
- }
487
- .vignelli-rule {
488
- width: 0;
489
- height: 2px;
490
- background: white;
491
- margin: 30px auto 0;
492
- }
493
- </style>
494
-
495
- <script>
496
- const tl = gsap.timeline({ paused: true });
497
-
498
- const video = document.getElementById("a-roll-video");
499
-
500
- // --- Initial Setup ---
501
- tl.set(
502
- video,
503
- { width: "100%", height: "100%", left: 0, top: 0, borderRadius: 0, scale: 1, opacity: 0 },
504
- 0,
505
- );
506
- tl.set("#white-wipe", { xPercent: -100 }, 0);
507
-
508
- // --- Scene 1: Hook (0s - 2.0s) ---
509
- tl.set("#scene-1", { opacity: 1, clipPath: "none" }, 0);
510
- tl.to(".hook-what-if", { opacity: 1, y: -30, duration: 0.8, ease: "power3.out" }, 0.2);
511
- tl.to(".hook-motion-graphics", { scale: 1, duration: 0.8, ease: "back.out(1.7)" }, 0.5);
512
- tl.fromTo(
513
- ".hook-wrote-themselves",
514
- { x: 100, opacity: 0 },
515
- { x: 0, opacity: 1, duration: 0.6, ease: "power2.out" },
516
- 0.9,
517
- );
518
-
519
- // --- Transition to Scene 2 (2.0s - 2.4s) ---
520
- tl.to("#white-wipe", { xPercent: 0, duration: 0.2, ease: "power2.in" }, 2.0);
521
- tl.set("#scene-1", { opacity: 0 }, 2.2);
522
- tl.set(video, { opacity: 1 }, 2.2);
523
- tl.to("#white-wipe", { xPercent: 100, duration: 0.2, ease: "power2.out" }, 2.2);
524
-
525
- // --- Scene 2: Swiss Style (2.0s - 5.0s) ---
526
- tl.to("#scene-2", { opacity: 1, duration: 0.1 }, 2.2);
527
- tl.to(".swiss-panel", { x: 0, duration: 0.8, ease: "expo.out" }, 2.3);
528
- tl.to(".swiss-title", { opacity: 1, duration: 0.1 }, 2.5);
529
- tl.to(".swiss-subtitle", { opacity: 1, y: 0, duration: 0.4 }, 2.7);
530
- tl.to(
531
- ".swiss-main-text .word",
532
- { opacity: 1, y: 0, stagger: 0.15, duration: 0.5, ease: "power2.out" },
533
- 3.0,
534
- );
535
- tl.to(".swiss-circle", { opacity: 1, scale: 1.2, duration: 0.6, ease: "back.out" }, 3.2);
536
- tl.to(".swiss-square", { opacity: 1, rotation: 45, duration: 0.6, ease: "back.out" }, 3.4);
537
- tl.to(".swiss-panel", { x: "120%", duration: 0.7, ease: "expo.in" }, 4.7);
538
- tl.to("#scene-2", { opacity: 0, duration: 0.1 }, 5.0);
539
-
540
- // --- Scene 3: Figma Config Style (5.3s - 9.6s) ---
541
- tl.to("#scene-3", { opacity: 1, duration: 0.3 }, 5.3);
542
- tl.to("#figma-animations", { opacity: 1, y: 0, duration: 0.6 }, 5.5);
543
- tl.to(".glyph-diamond", { rotation: 225, duration: 2, repeat: 1, ease: "power2.inOut" }, 5.5);
544
-
545
- tl.to("#figma-transitions", { opacity: 1, y: 0, duration: 0.6 }, 6.2);
546
- tl.to(".glyph-wipe", { width: "100%", duration: 1, ease: "power2.inOut" }, 6.2);
547
-
548
- tl.to("#figma-typography", { opacity: 1, y: 0, duration: 0.6 }, 6.9);
549
- tl.to(".glyph-lines .line", { width: "100%", stagger: 0.2, duration: 0.5 }, 7.1);
550
-
551
- tl.to(".figma-footer", { opacity: 1, y: -20, duration: 0.8 }, 7.8);
552
- tl.to("#scene-3", { opacity: 0, duration: 0.5 }, 9.1);
553
-
554
- // --- Scene 4: David Carson Style (9.6s - 11.7s) ---
555
- tl.to("#scene-4", { opacity: 1, duration: 0.1 }, 9.6);
556
- tl.to(".carson-line-1", { y: 0, duration: 0.6, ease: "expo.out" }, 9.7);
557
- tl.to(".carson-line-2", { opacity: 1, x: -50, duration: 0.5, ease: "back.out" }, 10.2);
558
- tl.to(".carson-container", { y: 300, duration: 0.6, ease: "expo.in" }, 11.4);
559
- tl.to("#scene-4", { opacity: 0, duration: 0.1 }, 11.7);
560
-
561
- // --- Scene 5: Wes Anderson (11.7s - 13.5s) ---
562
- tl.to(video, { opacity: 0, duration: 0.4 }, 11.7);
563
- tl.to("#scene-5", { opacity: 1, duration: 0.1 }, 11.7);
564
- tl.to(".wes-text-top", { y: 0, duration: 0.6, ease: "back.out(1.2)" }, 12.0);
565
- tl.to(".wes-rule", { width: 400, duration: 0.6 }, 12.3);
566
- tl.to(".wes-text-bottom", { y: 0, duration: 0.6, ease: "back.out(1.2)" }, 12.6);
567
- tl.to("#scene-5", { opacity: 0, duration: 0.5 }, 13.0);
568
-
569
- // --- Scene 6: Vignelli Style (13.5s - 14.72s) ---
570
- tl.set(video, { opacity: 1 }, 13.5);
571
- tl.set("#scene-6", { opacity: 1 }, 13.5);
572
- tl.set("#scene-6-overlay", { opacity: 1 }, 13.5);
573
-
574
- tl.to("#scene-6-overlay", { opacity: 0.6, duration: 0.4 }, 13.5);
575
-
576
- tl.to(".vignelli-title", { opacity: 1, duration: 0.5 }, 13.8);
577
- tl.to(".vignelli-subtitle", { opacity: 1, duration: 0.5 }, 14.0);
578
- tl.to(".vignelli-rule", { width: 300, duration: 0.4 }, 14.2);
579
-
580
- tl.to("#scene-6-overlay", { opacity: 0, duration: 0.3 }, 14.4);
581
-
582
- tl.set("#black-out", { opacity: 1 }, 14.7);
583
-
584
- window.__timelines = window.__timelines || {};
585
- window.__timelines["main-graphics"] = tl;
586
- </script>
587
- </div>
588
- </template>
@@ -1,61 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=1920, height=1080" />
6
- <title>Kinetic Type</title>
7
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
8
- <link rel="preconnect" href="https://fonts.googleapis.com" />
9
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
- <link
11
- href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400;0,700;0,900;1,400&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&display=block"
12
- rel="stylesheet"
13
- />
14
- <style>
15
- * {
16
- box-sizing: border-box;
17
- margin: 0;
18
- padding: 0;
19
- }
20
- html,
21
- body {
22
- margin: 0;
23
- width: 1920px;
24
- height: 1080px;
25
- overflow: hidden;
26
- background-color: #0a0a0f;
27
- font-family:
28
- "Inter",
29
- -apple-system,
30
- sans-serif;
31
- }
32
- </style>
33
- </head>
34
- <body>
35
- <div
36
- id="root"
37
- data-composition-id="main"
38
- data-start="0"
39
- data-duration="15"
40
- data-width="1920"
41
- data-height="1080"
42
- >
43
- <div
44
- id="graphics-layer"
45
- data-composition-id="main-graphics"
46
- data-composition-src="compositions/main-graphics.html"
47
- data-start="0"
48
- data-duration="15"
49
- data-track-index="1"
50
- data-width="1920"
51
- data-height="1080"
52
- ></div>
53
- </div>
54
-
55
- <script>
56
- window.__timelines = window.__timelines || {};
57
- const tl = gsap.timeline({ paused: true });
58
- window.__timelines["main"] = tl;
59
- </script>
60
- </body>
61
- </html>