返回 html-video
05-product-surfaces.html
根目录 / templates / frame-product-promo-30s / compositions / 05-product-surfaces.html
1 <template id="05-product-surfaces-template">
2 <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
3 <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@400;500&display=block" rel="stylesheet" />
4
5 <div
6 data-composition-id="05-product-surfaces"
7 data-start="0"
8 data-duration="4.7"
9 data-width="1920"
10 data-height="1080"
11 >
12 <div class="stage-05">
13 <div class="grid-floor"></div>
14
15 <div class="surface s-plan">
16 <div class="headline h-plan">Plan</div>
17 <div class="device laptop">
18 <div class="screen" style="background-image: url('assets/screenshot-3.png');"></div>
19 <div class="laptop-base"></div>
20 </div>
21 </div>
22
23 <div class="surface s-build">
24 <div class="headline h-build">Build</div>
25 <div class="device laptop">
26 <div class="screen" style="background-image: url('assets/screenshot-1.png');"></div>
27 <div class="laptop-base"></div>
28 </div>
29 <div class="micro-cap">Build and deploy AI agents that work alongside your team</div>
30 </div>
31
32 <div class="surface s-monitor">
33 <div class="headline h-monitor">Monitor</div>
34 <div class="device laptop">
35 <div class="screen" style="background-image: url('assets/screenshot-2.png');"></div>
36 <div class="laptop-base"></div>
37 </div>
38 </div>
39
40 <div class="vignette"></div>
41 <div class="grain"></div>
42 </div>
43
44 <style>
45 [data-composition-id="05-product-surfaces"] {
46 position: absolute; inset: 0; overflow: hidden; background: #000;
47 }
48 [data-composition-id="05-product-surfaces"] .stage-05 { position: absolute; inset: 0; }
49 [data-composition-id="05-product-surfaces"] .grid-floor {
50 position: absolute; inset: 0;
51 transform: perspective(900px) rotateX(60deg) translateY(25%);
52 background:
53 repeating-linear-gradient(0deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px),
54 repeating-linear-gradient(90deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px);
55 background-color: #000;
56 }
57 [data-composition-id="05-product-surfaces"] .surface {
58 position: absolute;
59 inset: 0;
60 display: flex;
61 flex-direction: column;
62 align-items: center;
63 justify-content: center;
64 gap: 40px;
65 opacity: 0;
66 will-change: opacity, transform;
67 }
68 [data-composition-id="05-product-surfaces"] .headline {
69 font-family: "Instrument Serif", serif;
70 font-style: italic;
71 font-size: 140px;
72 line-height: 1;
73 background: linear-gradient(180deg, #ffffff 0%, #bbbbbb 100%);
74 -webkit-background-clip: text;
75 -webkit-text-fill-color: transparent;
76 background-clip: text;
77 color: transparent;
78 text-shadow: 0 0 40px rgba(255,255,255,0.25);
79 }
80 [data-composition-id="05-product-surfaces"] .device {
81 position: relative;
82 box-shadow:
83 0 40px 80px rgba(0,0,0,0.8),
84 inset 0 1px 0 rgba(255,255,255,0.2),
85 0 0 0 2px rgba(255,255,255,0.08);
86 border-radius: 16px;
87 overflow: hidden;
88 }
89 [data-composition-id="05-product-surfaces"] .laptop {
90 width: 1280px; height: 720px;
91 border-radius: 12px;
92 border: 2px solid rgba(255,255,255,0.12);
93 }
94 [data-composition-id="05-product-surfaces"] .laptop-base {
95 position: absolute;
96 bottom: -18px; left: -40px;
97 width: calc(100% + 80px); height: 18px;
98 background: linear-gradient(180deg, #2a2a2a, #0a0a0a);
99 border-radius: 0 0 20px 20px;
100 }
101 [data-composition-id="05-product-surfaces"] .screen {
102 width: 100%; height: 100%;
103 background-size: cover;
104 background-position: center top;
105 }
106 [data-composition-id="05-product-surfaces"] .micro-cap {
107 position: absolute;
108 bottom: 80px; left: 50%;
109 transform: translateX(-50%);
110 font-family: "Inter", sans-serif;
111 font-size: 28px;
112 font-weight: 500;
113 color: rgba(255,255,255,0.85);
114 letter-spacing: 0.01em;
115 padding: 10px 20px;
116 border-radius: 10px;
117 background: rgba(10,8,5,0.55);
118 backdrop-filter: blur(8px);
119 opacity: 0;
120 }
121 [data-composition-id="05-product-surfaces"] .vignette {
122 position: absolute; inset: 0; pointer-events: none;
123 background: radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,0.95) 95%);
124 opacity: 0.7;
125 }
126 [data-composition-id="05-product-surfaces"] .grain {
127 position: absolute; inset: 0; pointer-events: none;
128 opacity: 0.08;
129 background-image:
130 radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
131 radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px);
132 background-size: 3px 3px, 5px 5px;
133 }
134 </style>
135
136 <script>
137 (() => {
138 const SLOT = 4.7;
139 const tl = gsap.timeline({ paused: true });
140 const sel = (q) => `[data-composition-id="05-product-surfaces"] ${q}`;
141
142 gsap.set(sel('.s-plan'), { y: '100%', opacity: 0 });
143 tl.to(sel('.s-plan'), { y: '0%', opacity: 1, duration: 0.7, ease: 'power3.out' }, 0);
144 tl.to(sel('.s-plan'), { x: '-40%', opacity: 0, filter: 'blur(20px)', duration: 0.4, ease: 'power2.in' }, 1.5);
145
146 gsap.set(sel('.s-build'), { x: '40%', opacity: 0, filter: 'blur(25px)' });
147 tl.to(sel('.s-build'),
148 { x: '0%', opacity: 1, filter: 'blur(0px)', duration: 0.7, ease: 'power3.out' }, 1.5);
149
150 tl.to(sel('.micro-cap'), { opacity: 1, duration: 0.4, ease: 'power2.out' }, 2.0);
151 tl.to(sel('.micro-cap'), { opacity: 0, duration: 0.3, ease: 'power2.in' }, 3.0);
152
153 tl.to(sel('.s-build'),
154 { y: '-30%', opacity: 0, filter: 'blur(20px)', duration: 0.4, ease: 'power2.in' }, 3.0);
155
156 gsap.set(sel('.s-monitor'), { y: '100%', opacity: 0 });
157 tl.to(sel('.s-monitor'), { y: '0%', opacity: 1, duration: 0.7, ease: 'power3.out' }, 3.0);
158
159 tl.to(sel('.s-monitor'),
160 { scale: 0.8, opacity: 0, filter: 'blur(20px)', duration: 0.35, ease: 'power2.in' }, 4.35);
161
162 tl.to({}, { duration: SLOT }, 0);
163 window.__timelines = window.__timelines || {};
164 window.__timelines['05-product-surfaces'] = tl;
165 })();
166 </script>
167 </div>
168 </template>
169
169 lines HTML