返回 html-video
07-foundation.html
1 <template id="07-foundation-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=Cormorant+Garamond:ital,wght@1,400;1,500&display=block" rel="stylesheet" />
4
5 <div
6 data-composition-id="07-foundation"
7 data-start="0"
8 data-duration="3"
9 data-width="1920"
10 data-height="1080"
11 >
12 <div class="stage-07">
13 <div class="grid-floor"></div>
14 <div class="light-cone"></div>
15
16 <div class="callback-symbol">
17 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
18 <defs>
19 <linearGradient id="grad-07-0" x1="0" y1="0" x2="1" y2="1">
20 <stop offset="0%" stop-color="#5E6AD2"/>
21 <stop offset="100%" stop-color="#A9B0F0"/>
22 </linearGradient>
23 </defs>
24 <path d="M 25 18 L 75 18 L 75 34 L 41 34 L 41 82 L 25 82 Z" fill="url(#grad-07-0)" />
25 </svg>
26 </div>
27
28 <div class="cluster">
29 <div class="c-sym cs1">
30 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
31 <defs><linearGradient id="grad-07-1" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#5E6AD2"/><stop offset="100%" stop-color="#A9B0F0"/></linearGradient></defs>
32 <path d="M 25 18 L 75 18 L 75 34 L 41 34 L 41 82 L 25 82 Z" fill="url(#grad-07-1)" />
33 </svg>
34 </div>
35 <div class="c-sym cs2">
36 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
37 <defs><linearGradient id="grad-07-2" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#5E6AD2"/><stop offset="100%" stop-color="#A9B0F0"/></linearGradient></defs>
38 <path d="M 25 18 L 75 18 L 75 34 L 41 34 L 41 82 L 25 82 Z" fill="url(#grad-07-2)" />
39 </svg>
40 </div>
41 <div class="c-sym cs3">
42 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
43 <defs><linearGradient id="grad-07-3" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#5E6AD2"/><stop offset="100%" stop-color="#A9B0F0"/></linearGradient></defs>
44 <path d="M 25 18 L 75 18 L 75 34 L 41 34 L 41 82 L 25 82 Z" fill="url(#grad-07-3)" />
45 </svg>
46 </div>
47 </div>
48
49 <div class="foundation-head">For teams and agents</div>
50
51 <div class="sparkles">
52 <span class="sp sp1">+</span>
53 <span class="sp sp2">+</span>
54 <span class="sp sp3">+</span>
55 <span class="sp sp4">+</span>
56 <span class="sp sp5">+</span>
57 <span class="sp sp6">+</span>
58 </div>
59
60 <div class="vignette"></div>
61 <div class="grain"></div>
62 </div>
63
64 <style>
65 [data-composition-id="07-foundation"] {
66 position: absolute; inset: 0; overflow: hidden; background: #000;
67 }
68 [data-composition-id="07-foundation"] .stage-07 { position: absolute; inset: 0; }
69 [data-composition-id="07-foundation"] .grid-floor {
70 position: absolute; inset: 0;
71 transform: perspective(900px) rotateX(60deg) translateY(25%);
72 background:
73 repeating-linear-gradient(0deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px),
74 repeating-linear-gradient(90deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px);
75 background-color: #000;
76 }
77 [data-composition-id="07-foundation"] .light-cone {
78 position: absolute;
79 top: -5%; left: 50%;
80 width: 900px; height: 900px;
81 transform: translateX(-50%);
82 background: conic-gradient(from 180deg at 50% 0%, transparent 0deg, rgba(169,176,240,0.2) 10deg, rgba(94,106,210,0.1) 25deg, transparent 40deg, transparent 320deg, rgba(94,106,210,0.1) 335deg, rgba(169,176,240,0.2) 350deg, transparent 360deg);
83 filter: blur(40px);
84 opacity: 0;
85 }
86 [data-composition-id="07-foundation"] .callback-symbol {
87 position: absolute;
88 top: 40%; left: 50%;
89 width: 260px; height: 260px;
90 transform: translate(-50%, -50%);
91 filter: drop-shadow(0 0 60px rgba(169,176,240,0.7));
92 opacity: 0;
93 }
94 [data-composition-id="07-foundation"] .callback-symbol svg { width: 100%; height: 100%; }
95 [data-composition-id="07-foundation"] .cluster {
96 position: absolute;
97 top: 38%; left: 50%;
98 width: 700px; height: 260px;
99 transform: translate(-50%, -50%);
100 opacity: 0;
101 }
102 [data-composition-id="07-foundation"] .c-sym {
103 position: absolute;
104 width: 160px; height: 160px;
105 filter: drop-shadow(0 0 40px rgba(169,176,240,0.6));
106 }
107 [data-composition-id="07-foundation"] .c-sym svg { width: 100%; height: 100%; }
108 [data-composition-id="07-foundation"] .cs1 { top: 30px; left: 60px; transform: rotate(-6deg); }
109 [data-composition-id="07-foundation"] .cs2 { top: 0; left: 270px; transform: rotate(2deg); }
110 [data-composition-id="07-foundation"] .cs3 { top: 50px; left: 480px; transform: rotate(-3deg); }
111
112 [data-composition-id="07-foundation"] .foundation-head {
113 position: absolute;
114 top: 75%; left: 50%;
115 transform: translate(-50%, -50%);
116 font-family: "Cormorant Garamond", serif;
117 font-style: italic;
118 font-weight: 500;
119 font-size: 96px;
120 letter-spacing: -0.01em;
121 background: linear-gradient(180deg, #ffffff 0%, #cccccc 60%, #888888 100%);
122 -webkit-background-clip: text;
123 -webkit-text-fill-color: transparent;
124 background-clip: text;
125 color: transparent;
126 text-shadow: 0 0 60px rgba(255,255,255,0.3);
127 opacity: 0;
128 white-space: nowrap;
129 }
130 [data-composition-id="07-foundation"] .sparkles {
131 position: absolute; inset: 0;
132 pointer-events: none;
133 }
134 [data-composition-id="07-foundation"] .sp {
135 position: absolute;
136 font: 400 18px/1 monospace;
137 color: rgba(169,176,240,0.7);
138 text-shadow: 0 0 12px rgba(169,176,240,0.8);
139 opacity: 0;
140 }
141 [data-composition-id="07-foundation"] .sp1 { top: 25%; left: 30%; }
142 [data-composition-id="07-foundation"] .sp2 { top: 32%; left: 70%; }
143 [data-composition-id="07-foundation"] .sp3 { top: 55%; left: 25%; }
144 [data-composition-id="07-foundation"] .sp4 { top: 48%; left: 75%; }
145 [data-composition-id="07-foundation"] .sp5 { top: 60%; left: 50%; }
146 [data-composition-id="07-foundation"] .sp6 { top: 38%; left: 52%; }
147
148 [data-composition-id="07-foundation"] .vignette {
149 position: absolute; inset: 0; pointer-events: none;
150 background: radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,0.95) 95%);
151 opacity: 0.7;
152 }
153 [data-composition-id="07-foundation"] .grain {
154 position: absolute; inset: 0; pointer-events: none;
155 opacity: 0.08;
156 background-image:
157 radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
158 radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px);
159 background-size: 3px 3px, 5px 5px;
160 }
161 </style>
162
163 <script>
164 (() => {
165 const SLOT = 3;
166 const tl = gsap.timeline({ paused: true });
167 const sel = (q) => `[data-composition-id="07-foundation"] ${q}`;
168
169 tl.fromTo(sel('.callback-symbol'),
170 { opacity: 0, scale: 0.4, rotateY: 0 },
171 { opacity: 1, scale: 1, rotateY: 540, duration: 1.0, ease: 'power2.out' }, 0);
172 tl.to(sel('.callback-symbol'),
173 { opacity: 0, scale: 0.6, duration: 0.3, ease: 'power2.in' }, 0.9);
174
175 tl.to(sel('.light-cone'),
176 { opacity: 1, duration: 0.5, ease: 'power2.out' }, 0.7);
177 tl.to(sel('.light-cone'),
178 { scale: 1.05, duration: 2, yoyo: true, repeat: 1, ease: 'sine.inOut' }, 1.0);
179
180 tl.to(sel('.cluster'),
181 { opacity: 1, duration: 0.5, ease: 'power2.out' }, 1.0);
182
183 tl.to(sel('.cs1'), { y: -12, duration: 1.0, yoyo: true, repeat: 1, ease: 'sine.inOut' }, 1.0);
184 tl.to(sel('.cs2'), { y: 10, duration: 0.95, yoyo: true, repeat: 1, ease: 'sine.inOut' }, 1.1);
185 tl.to(sel('.cs3'), { y: -8, duration: 0.9, yoyo: true, repeat: 1, ease: 'sine.inOut' }, 1.2);
186
187 tl.fromTo(sel('.foundation-head'),
188 { opacity: 0, y: 30 },
189 { opacity: 1, y: 0, duration: 0.7, ease: 'power3.out' }, 1.3);
190
191 tl.to(sel('.sp'),
192 { opacity: 0.9, duration: 0.4, stagger: { each: 0.1, from: 'random' }, ease: 'sine.out' }, 1.1);
193 tl.to(sel('.sp'),
194 { opacity: 0.3, duration: 0.75, yoyo: true, repeat: 1, ease: 'sine.inOut' }, 1.5);
195
196 tl.to(sel('.cluster') + ', ' + sel('.foundation-head') + ', ' + sel('.light-cone'),
197 { opacity: 0, duration: 0.4, ease: 'power2.in' }, 2.7);
198
199 tl.to({}, { duration: SLOT }, 0);
200 window.__timelines = window.__timelines || {};
201 window.__timelines['07-foundation'] = tl;
202 })();
203 </script>
204 </div>
205 </template>
206
206 lines HTML