hyperframes 0.1.15 → 0.2.0-alpha.1
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/README.md +3 -3
- package/dist/cli.js +3968 -3297
- package/dist/skills/hyperframes-captions/SKILL.md +1 -1
- package/dist/skills/hyperframes-compose/SKILL.md +1 -0
- package/dist/studio/assets/index-Bkp9HQbo.css +1 -0
- package/dist/studio/assets/index-DfhSlTti.js +93 -0
- package/dist/studio/index.html +2 -2
- package/dist/templates/_shared/CLAUDE.md +1 -1
- package/package.json +3 -2
- package/dist/studio/assets/index-CLmYRLY-.css +0 -1
- package/dist/studio/assets/index-CRvFpc0E.js +0 -84
- package/dist/templates/decision-tree/compositions/decision_tree.html +0 -420
- package/dist/templates/decision-tree/index.html +0 -56
- package/dist/templates/generators.ts +0 -32
- package/dist/templates/kinetic-type/compositions/main-graphics.html +0 -588
- package/dist/templates/kinetic-type/index.html +0 -61
- package/dist/templates/nyt-graph/compositions/nyt-chart.html +0 -450
- package/dist/templates/nyt-graph/index.html +0 -51
- package/dist/templates/play-mode/compositions/captions.html +0 -163
- package/dist/templates/play-mode/compositions/intro.html +0 -107
- package/dist/templates/play-mode/compositions/stats.html +0 -388
- package/dist/templates/play-mode/index.html +0 -239
- package/dist/templates/product-promo/assets/figma-cursors.svg +0 -30
- package/dist/templates/product-promo/assets/figma-logo-pieces.svg +0 -15
- package/dist/templates/product-promo/assets/figma-logo-pills.svg +0 -6
- package/dist/templates/product-promo/compositions/scene1-logo-intro.html +0 -189
- package/dist/templates/product-promo/compositions/scene2-4-canvas.html +0 -570
- package/dist/templates/product-promo/compositions/scene5-logo-outro.html +0 -226
- package/dist/templates/product-promo/index.html +0 -158
- package/dist/templates/swiss-grid/assets/swiss-grid.svg +0 -116
- package/dist/templates/swiss-grid/compositions/captions.html +0 -148
- package/dist/templates/swiss-grid/compositions/graphics.html +0 -207
- package/dist/templates/swiss-grid/compositions/intro.html +0 -131
- package/dist/templates/swiss-grid/index.html +0 -234
- package/dist/templates/vignelli/compositions/captions.html +0 -181
- package/dist/templates/vignelli/compositions/overlays.html +0 -323
- package/dist/templates/vignelli/index.html +0 -190
- package/dist/templates/warm-grain/compositions/captions.html +0 -147
- package/dist/templates/warm-grain/compositions/graphics.html +0 -164
- package/dist/templates/warm-grain/compositions/intro.html +0 -86
- package/dist/templates/warm-grain/index.html +0 -294
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
<template id="graphics-template">
|
|
2
|
-
<div data-composition-id="graphics" data-width="1920" data-height="1080" data-duration="15">
|
|
3
|
-
<div class="grid-container">
|
|
4
|
-
<!-- Stat 1: 47% -->
|
|
5
|
-
<div id="stat1" class="stat-group">
|
|
6
|
-
<div class="stat-value">47%</div>
|
|
7
|
-
<div class="stat-label">NEED MOTION GRAPHICS</div>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<!-- Stat 2: 62% -->
|
|
11
|
-
<div id="stat2" class="stat-group">
|
|
12
|
-
<div class="stat-value">62%</div>
|
|
13
|
-
<div class="stat-label">LOSING ATTENTION</div>
|
|
14
|
-
<div class="progress-container">
|
|
15
|
-
<div class="progress-bar"></div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<!-- Stat 3: 3 OF 4 -->
|
|
20
|
-
<div id="stat3" class="stat-group">
|
|
21
|
-
<div class="stat-value">3 OF 4</div>
|
|
22
|
-
<div class="stat-label">LACK EDITING SKILLS</div>
|
|
23
|
-
<div class="grid-blocks">
|
|
24
|
-
<div class="block gold"></div>
|
|
25
|
-
<div class="block gold"></div>
|
|
26
|
-
<div class="block gold"></div>
|
|
27
|
-
<div class="block navy"></div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<style>
|
|
33
|
-
[data-composition-id="graphics"] {
|
|
34
|
-
font-family: "Helvetica", Arial, sans-serif;
|
|
35
|
-
color: #0a1e3d;
|
|
36
|
-
background: transparent;
|
|
37
|
-
width: 1920px;
|
|
38
|
-
height: 1080px;
|
|
39
|
-
position: relative;
|
|
40
|
-
overflow: hidden;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
[data-composition-id="graphics"] .grid-container {
|
|
44
|
-
display: grid;
|
|
45
|
-
grid-template-columns: repeat(12, 1fr);
|
|
46
|
-
grid-template-rows: repeat(12, 1fr);
|
|
47
|
-
width: 100%;
|
|
48
|
-
height: 100%;
|
|
49
|
-
padding: 80px;
|
|
50
|
-
gap: 20px;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
[data-composition-id="graphics"] .stat-group {
|
|
54
|
-
opacity: 0;
|
|
55
|
-
display: flex;
|
|
56
|
-
flex-direction: column;
|
|
57
|
-
justify-content: flex-start;
|
|
58
|
-
align-items: flex-start;
|
|
59
|
-
background: #f2f2f2;
|
|
60
|
-
padding: 40px;
|
|
61
|
-
border-left: 10px solid #d4a017;
|
|
62
|
-
box-shadow: 20px 20px 0px rgba(10, 30, 61, 0.1);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/* Positioning Stats on Grid - Adjusted for A-roll structure */
|
|
66
|
-
[data-composition-id="graphics"] #stat1 {
|
|
67
|
-
grid-column: 2 / 6;
|
|
68
|
-
grid-row: 3 / 7;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
[data-composition-id="graphics"] #stat2 {
|
|
72
|
-
grid-column: 2 / 6;
|
|
73
|
-
grid-row: 3 / 7;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
[data-composition-id="graphics"] #stat3 {
|
|
77
|
-
grid-column: 7 / 12;
|
|
78
|
-
grid-row: 3 / 7;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
[data-composition-id="graphics"] .stat-value {
|
|
82
|
-
font-size: 140px;
|
|
83
|
-
font-weight: 900;
|
|
84
|
-
color: #d4a017;
|
|
85
|
-
line-height: 0.8;
|
|
86
|
-
margin-bottom: 15px;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
[data-composition-id="graphics"] .stat-label {
|
|
90
|
-
font-size: 24px;
|
|
91
|
-
font-weight: 300; /* Lighter weight */
|
|
92
|
-
color: #0a1e3d;
|
|
93
|
-
letter-spacing: 2px;
|
|
94
|
-
text-transform: uppercase;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* Progress Bar for Stat 2 */
|
|
98
|
-
[data-composition-id="graphics"] .progress-container {
|
|
99
|
-
width: 100%;
|
|
100
|
-
height: 24px;
|
|
101
|
-
background: #e0e0e0;
|
|
102
|
-
margin-top: 30px;
|
|
103
|
-
border: 2px solid #0a1e3d;
|
|
104
|
-
position: relative;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
[data-composition-id="graphics"] .progress-bar {
|
|
108
|
-
width: 0%;
|
|
109
|
-
height: 100%;
|
|
110
|
-
background: #d4a017;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/* Grid Blocks for Stat 3 */
|
|
114
|
-
[data-composition-id="graphics"] .grid-blocks {
|
|
115
|
-
display: flex;
|
|
116
|
-
gap: 20px;
|
|
117
|
-
margin-top: 30px;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
[data-composition-id="graphics"] .block {
|
|
121
|
-
width: 80px;
|
|
122
|
-
height: 80px;
|
|
123
|
-
border: 3px solid #0a1e3d;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
[data-composition-id="graphics"] .block.gold {
|
|
127
|
-
background: #d4a017;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
[data-composition-id="graphics"] .block.navy {
|
|
131
|
-
background: #0a1e3d;
|
|
132
|
-
}
|
|
133
|
-
</style>
|
|
134
|
-
|
|
135
|
-
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
136
|
-
<script>
|
|
137
|
-
(function () {
|
|
138
|
-
const tl = gsap.timeline({ paused: true });
|
|
139
|
-
|
|
140
|
-
// Timing Constants
|
|
141
|
-
const S1_START = 1.86;
|
|
142
|
-
const S1_END = 4.5;
|
|
143
|
-
const S2_START = 4.68;
|
|
144
|
-
const S2_END = 8.6;
|
|
145
|
-
const S3_START = 8.88;
|
|
146
|
-
const S3_END = 14.2;
|
|
147
|
-
|
|
148
|
-
const SLIDE_DUR = 0.25; // 250ms
|
|
149
|
-
const SHARP_EASE = "power2.out";
|
|
150
|
-
|
|
151
|
-
// Stat 1 Animation
|
|
152
|
-
tl.fromTo(
|
|
153
|
-
"#stat1",
|
|
154
|
-
{ x: -200, opacity: 0 },
|
|
155
|
-
{ x: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
|
|
156
|
-
S1_START,
|
|
157
|
-
);
|
|
158
|
-
tl.to(
|
|
159
|
-
"#stat1",
|
|
160
|
-
{ x: 200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
|
|
161
|
-
S1_END - SLIDE_DUR,
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
// Stat 2 Animation
|
|
165
|
-
tl.fromTo(
|
|
166
|
-
"#stat2",
|
|
167
|
-
{ y: 200, opacity: 0 },
|
|
168
|
-
{ y: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
|
|
169
|
-
S2_START,
|
|
170
|
-
);
|
|
171
|
-
// Progress bar fill
|
|
172
|
-
tl.to(
|
|
173
|
-
"#stat2 .progress-bar",
|
|
174
|
-
{ width: "62%", duration: S2_END - S2_START - SLIDE_DUR * 2, ease: "none" },
|
|
175
|
-
S2_START + SLIDE_DUR,
|
|
176
|
-
);
|
|
177
|
-
tl.to(
|
|
178
|
-
"#stat2",
|
|
179
|
-
{ y: -200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
|
|
180
|
-
S2_END - SLIDE_DUR,
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
// Stat 3 Animation
|
|
184
|
-
tl.fromTo(
|
|
185
|
-
"#stat3",
|
|
186
|
-
{ x: 200, opacity: 0 },
|
|
187
|
-
{ x: 0, opacity: 1, duration: SLIDE_DUR, ease: SHARP_EASE },
|
|
188
|
-
S3_START,
|
|
189
|
-
);
|
|
190
|
-
// Stagger blocks
|
|
191
|
-
tl.from(
|
|
192
|
-
"#stat3 .block",
|
|
193
|
-
{ scale: 0, duration: 0.3, stagger: 0.1, ease: "back.out(1.7)" },
|
|
194
|
-
S3_START + SLIDE_DUR,
|
|
195
|
-
);
|
|
196
|
-
tl.to(
|
|
197
|
-
"#stat3",
|
|
198
|
-
{ x: -200, opacity: 0, duration: SLIDE_DUR, ease: "power2.in" },
|
|
199
|
-
S3_END - SLIDE_DUR,
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
window.__timelines = window.__timelines || {};
|
|
203
|
-
window.__timelines["graphics"] = tl;
|
|
204
|
-
})();
|
|
205
|
-
</script>
|
|
206
|
-
</div>
|
|
207
|
-
</template>
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
<template id="intro-template">
|
|
2
|
-
<div data-composition-id="intro" data-width="1920" data-height="1080" data-duration="1.86">
|
|
3
|
-
<div class="container">
|
|
4
|
-
<div class="grid-line"></div>
|
|
5
|
-
<div class="text-wrapper">
|
|
6
|
-
<h1 class="title">HYPERFRAMES</h1>
|
|
7
|
-
<h2 class="subtitle">THE SURVEY FINDINGS</h2>
|
|
8
|
-
</div>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<style>
|
|
12
|
-
[data-composition-id="intro"] {
|
|
13
|
-
background-color: #f5f5f5; /* Off-white */
|
|
14
|
-
width: 1920px;
|
|
15
|
-
height: 1080px;
|
|
16
|
-
display: flex;
|
|
17
|
-
align-items: center;
|
|
18
|
-
justify-content: center;
|
|
19
|
-
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
20
|
-
overflow: hidden;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
[data-composition-id="intro"] .container {
|
|
24
|
-
position: relative;
|
|
25
|
-
width: 100%;
|
|
26
|
-
height: 100%;
|
|
27
|
-
display: flex;
|
|
28
|
-
flex-direction: column;
|
|
29
|
-
justify-content: center;
|
|
30
|
-
padding-left: 160px; /* Swiss grid alignment */
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
[data-composition-id="intro"] .grid-line {
|
|
34
|
-
position: absolute;
|
|
35
|
-
left: 160px;
|
|
36
|
-
top: 50%;
|
|
37
|
-
width: 0px;
|
|
38
|
-
height: 12px;
|
|
39
|
-
background-color: #0a1e3d; /* Navy */
|
|
40
|
-
transform: translateY(-180px); /* Positioned above the text */
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
[data-composition-id="intro"] .text-wrapper {
|
|
44
|
-
display: flex;
|
|
45
|
-
flex-direction: column;
|
|
46
|
-
gap: 0;
|
|
47
|
-
overflow: hidden;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
[data-composition-id="intro"] .title {
|
|
51
|
-
color: #0a1e3d;
|
|
52
|
-
font-size: 180px;
|
|
53
|
-
font-weight: 900; /* Black weight */
|
|
54
|
-
line-height: 0.9;
|
|
55
|
-
margin: 0;
|
|
56
|
-
letter-spacing: -0.04em;
|
|
57
|
-
text-transform: uppercase;
|
|
58
|
-
transform: translateX(-100%); /* Start off-screen left */
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
[data-composition-id="intro"] .subtitle {
|
|
62
|
-
color: #0a1e3d;
|
|
63
|
-
font-size: 64px;
|
|
64
|
-
font-weight: 300; /* Lighter weight for contrast */
|
|
65
|
-
line-height: 1.2;
|
|
66
|
-
margin: 0;
|
|
67
|
-
letter-spacing: 0.1em;
|
|
68
|
-
text-transform: uppercase;
|
|
69
|
-
transform: translateX(-100%); /* Start off-screen left */
|
|
70
|
-
margin-top: 20px;
|
|
71
|
-
}
|
|
72
|
-
</style>
|
|
73
|
-
|
|
74
|
-
<script>
|
|
75
|
-
(function () {
|
|
76
|
-
const tl = gsap.timeline({ paused: true });
|
|
77
|
-
|
|
78
|
-
// Mechanical timing: 200ms (0.2s)
|
|
79
|
-
const MECHANICAL_DURATION = 0.2;
|
|
80
|
-
const STAGGER = 0.1;
|
|
81
|
-
|
|
82
|
-
// 1. Animate the grid line first
|
|
83
|
-
tl.to(
|
|
84
|
-
".grid-line",
|
|
85
|
-
{
|
|
86
|
-
width: "1200px",
|
|
87
|
-
duration: 0.4,
|
|
88
|
-
ease: "power4.out",
|
|
89
|
-
},
|
|
90
|
-
0.2,
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
// 2. Slide in the title
|
|
94
|
-
tl.to(
|
|
95
|
-
".title",
|
|
96
|
-
{
|
|
97
|
-
x: 0,
|
|
98
|
-
duration: MECHANICAL_DURATION,
|
|
99
|
-
ease: "power2.inOut",
|
|
100
|
-
},
|
|
101
|
-
0.5,
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
// 3. Slide in the subtitle with a slight stagger
|
|
105
|
-
tl.to(
|
|
106
|
-
".subtitle",
|
|
107
|
-
{
|
|
108
|
-
x: 0,
|
|
109
|
-
duration: MECHANICAL_DURATION,
|
|
110
|
-
ease: "power2.inOut",
|
|
111
|
-
},
|
|
112
|
-
0.5 + STAGGER,
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
// 4. Subtle ambient motion (slow drift) to keep it alive
|
|
116
|
-
tl.to(
|
|
117
|
-
".text-wrapper",
|
|
118
|
-
{
|
|
119
|
-
x: 30,
|
|
120
|
-
duration: 1.16, // Adjusted to fit 1.86s total
|
|
121
|
-
ease: "none",
|
|
122
|
-
},
|
|
123
|
-
0.7,
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
window.__timelines = window.__timelines || {};
|
|
127
|
-
window.__timelines["intro"] = tl;
|
|
128
|
-
})();
|
|
129
|
-
</script>
|
|
130
|
-
</div>
|
|
131
|
-
</template>
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Swiss Grid - Hyperframes</title>
|
|
7
|
-
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
8
|
-
<style>
|
|
9
|
-
body,
|
|
10
|
-
html {
|
|
11
|
-
margin: 0;
|
|
12
|
-
padding: 0;
|
|
13
|
-
width: 1920px;
|
|
14
|
-
height: 1080px;
|
|
15
|
-
background-color: #f2f2f2;
|
|
16
|
-
overflow: hidden;
|
|
17
|
-
font-family: "Helvetica", Arial, sans-serif;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#master-root {
|
|
21
|
-
width: 1920px;
|
|
22
|
-
height: 1080px;
|
|
23
|
-
position: relative;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.background-grid {
|
|
27
|
-
position: absolute;
|
|
28
|
-
top: 0;
|
|
29
|
-
left: 0;
|
|
30
|
-
width: 100%;
|
|
31
|
-
height: 100%;
|
|
32
|
-
z-index: 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* A-roll styling */
|
|
36
|
-
#short_mag_cut_frame {
|
|
37
|
-
position: absolute;
|
|
38
|
-
border-radius: 8px; /* Required */
|
|
39
|
-
z-index: 1;
|
|
40
|
-
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
|
41
|
-
overflow: hidden;
|
|
42
|
-
background: #000;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
#short_mag_cut,
|
|
46
|
-
#short_mag_cut_frame > img.__render_frame__,
|
|
47
|
-
#short_mag_cut_frame > img.__preview_render_frame__ {
|
|
48
|
-
position: absolute;
|
|
49
|
-
inset: 0;
|
|
50
|
-
width: 100%;
|
|
51
|
-
height: 100%;
|
|
52
|
-
object-fit: cover;
|
|
53
|
-
object-position: center;
|
|
54
|
-
display: block;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Overlay layers */
|
|
58
|
-
.overlay-layer {
|
|
59
|
-
position: absolute;
|
|
60
|
-
top: 0;
|
|
61
|
-
left: 0;
|
|
62
|
-
width: 100%;
|
|
63
|
-
height: 100%;
|
|
64
|
-
pointer-events: none;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
#intro-comp {
|
|
68
|
-
z-index: 2;
|
|
69
|
-
}
|
|
70
|
-
#graphics-comp {
|
|
71
|
-
z-index: 3;
|
|
72
|
-
}
|
|
73
|
-
#captions-comp {
|
|
74
|
-
z-index: 4;
|
|
75
|
-
}
|
|
76
|
-
</style>
|
|
77
|
-
</head>
|
|
78
|
-
<body>
|
|
79
|
-
<div
|
|
80
|
-
id="master-root"
|
|
81
|
-
data-composition-id="master"
|
|
82
|
-
data-width="1920"
|
|
83
|
-
data-height="1080"
|
|
84
|
-
data-start="0"
|
|
85
|
-
data-duration="__VIDEO_DURATION__"
|
|
86
|
-
>
|
|
87
|
-
<!-- Background Grid -->
|
|
88
|
-
<img
|
|
89
|
-
id="bg-grid"
|
|
90
|
-
class="background-grid"
|
|
91
|
-
src="assets/swiss-grid.svg"
|
|
92
|
-
alt="Grid"
|
|
93
|
-
data-start="0"
|
|
94
|
-
data-duration="__VIDEO_DURATION__"
|
|
95
|
-
data-track-index="0"
|
|
96
|
-
/>
|
|
97
|
-
|
|
98
|
-
<!-- A-roll Video -->
|
|
99
|
-
<div id="short_mag_cut_frame">
|
|
100
|
-
<video
|
|
101
|
-
id="short_mag_cut"
|
|
102
|
-
src="__VIDEO_SRC__"
|
|
103
|
-
muted
|
|
104
|
-
playsinline
|
|
105
|
-
data-start="0"
|
|
106
|
-
data-duration="__VIDEO_DURATION__"
|
|
107
|
-
data-track-index="1"
|
|
108
|
-
></video>
|
|
109
|
-
</div>
|
|
110
|
-
<audio
|
|
111
|
-
id="a-roll-audio"
|
|
112
|
-
src="__VIDEO_SRC__"
|
|
113
|
-
data-start="0"
|
|
114
|
-
data-duration="__VIDEO_DURATION__"
|
|
115
|
-
data-track-index="5"
|
|
116
|
-
data-volume="1"
|
|
117
|
-
></audio>
|
|
118
|
-
|
|
119
|
-
<!-- Intro Sub-composition -->
|
|
120
|
-
<div
|
|
121
|
-
id="intro-comp"
|
|
122
|
-
class="overlay-layer"
|
|
123
|
-
data-composition-id="intro"
|
|
124
|
-
data-composition-src="compositions/intro.html"
|
|
125
|
-
data-start="0"
|
|
126
|
-
data-duration="1.86"
|
|
127
|
-
data-track-index="2"
|
|
128
|
-
></div>
|
|
129
|
-
|
|
130
|
-
<!-- Graphics Sub-composition -->
|
|
131
|
-
<div
|
|
132
|
-
id="graphics-comp"
|
|
133
|
-
class="overlay-layer"
|
|
134
|
-
data-composition-id="graphics"
|
|
135
|
-
data-composition-src="compositions/graphics.html"
|
|
136
|
-
data-start="0"
|
|
137
|
-
data-duration="__VIDEO_DURATION__"
|
|
138
|
-
data-track-index="3"
|
|
139
|
-
></div>
|
|
140
|
-
|
|
141
|
-
<!-- Captions Sub-composition -->
|
|
142
|
-
<div
|
|
143
|
-
id="captions-comp"
|
|
144
|
-
class="overlay-layer"
|
|
145
|
-
data-composition-id="captions"
|
|
146
|
-
data-composition-src="compositions/captions.html"
|
|
147
|
-
data-start="0"
|
|
148
|
-
data-duration="__VIDEO_DURATION__"
|
|
149
|
-
data-track-index="4"
|
|
150
|
-
></div>
|
|
151
|
-
|
|
152
|
-
<!-- Sound Effects (src set dynamically; omitted to avoid 404s) -->
|
|
153
|
-
<audio id="sfx-intro" data-start="0" data-track-index="5" data-duration="1"></audio>
|
|
154
|
-
<audio id="sfx-stat1" data-start="1.86" data-track-index="5" data-duration="1"></audio>
|
|
155
|
-
<audio id="sfx-stat2" data-start="4.68" data-track-index="5" data-duration="1"></audio>
|
|
156
|
-
<audio id="sfx-stat3" data-start="8.88" data-track-index="5" data-duration="1"></audio>
|
|
157
|
-
|
|
158
|
-
<script>
|
|
159
|
-
window.__timelines = window.__timelines || {};
|
|
160
|
-
|
|
161
|
-
const masterTL = gsap.timeline({ paused: true });
|
|
162
|
-
const v = document.getElementById("short_mag_cut_frame");
|
|
163
|
-
|
|
164
|
-
// --- A-ROLL MOVEMENT (Structured Swiss Layout) ---
|
|
165
|
-
|
|
166
|
-
// 1. Entrance (0-1.86s): Slide in from left, settle centered for Intro
|
|
167
|
-
masterTL.fromTo(
|
|
168
|
-
v,
|
|
169
|
-
{ x: -1000, y: 120, width: 960, height: 840 },
|
|
170
|
-
{ x: 480, y: 120, width: 960, height: 840, duration: 0.8, ease: "power2.out" },
|
|
171
|
-
0,
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
// 2. Stat 1 (1.86s - 4.68s): Move to right side (Graphic is on left)
|
|
175
|
-
masterTL.to(
|
|
176
|
-
v,
|
|
177
|
-
{
|
|
178
|
-
x: 1080,
|
|
179
|
-
y: 120,
|
|
180
|
-
width: 720,
|
|
181
|
-
height: 720,
|
|
182
|
-
duration: 0.25,
|
|
183
|
-
ease: "expo.out",
|
|
184
|
-
},
|
|
185
|
-
1.86,
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
// 3. Stat 2 (4.68s - 8.88s): Stay right, zoom in slightly
|
|
189
|
-
masterTL.to(
|
|
190
|
-
v,
|
|
191
|
-
{
|
|
192
|
-
x: 1080,
|
|
193
|
-
y: 60,
|
|
194
|
-
width: 780,
|
|
195
|
-
height: 780,
|
|
196
|
-
duration: 0.25,
|
|
197
|
-
ease: "expo.out",
|
|
198
|
-
},
|
|
199
|
-
4.68,
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
// 4. Stat 3 (8.88s - 14.2s): Move to left side (Graphic is on right)
|
|
203
|
-
masterTL.to(
|
|
204
|
-
v,
|
|
205
|
-
{
|
|
206
|
-
x: 120,
|
|
207
|
-
y: 120,
|
|
208
|
-
width: 720,
|
|
209
|
-
height: 720,
|
|
210
|
-
duration: 0.25,
|
|
211
|
-
ease: "expo.out",
|
|
212
|
-
},
|
|
213
|
-
8.88,
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
// 5. Conclusion (14.2s - 16.04s): Center large
|
|
217
|
-
masterTL.to(
|
|
218
|
-
v,
|
|
219
|
-
{
|
|
220
|
-
x: 240,
|
|
221
|
-
y: 60,
|
|
222
|
-
width: 1440,
|
|
223
|
-
height: 810,
|
|
224
|
-
duration: 0.5,
|
|
225
|
-
ease: "expo.out",
|
|
226
|
-
},
|
|
227
|
-
14.2,
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
window.__timelines["master"] = masterTL;
|
|
231
|
-
</script>
|
|
232
|
-
</div>
|
|
233
|
-
</body>
|
|
234
|
-
</html>
|