返回 html-video
index.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8" />
5 <title>Electric Studio · Split Panel Quote</title>
6 <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&display=swap" rel="stylesheet" />
7 <style>
8 /*
9 * frame-electric-studio — two-panel vertical split, quote as hero.
10 * Visual style distilled from the frontend-slides "Electric Studio" preset (MIT, © Zara Zhang).
11 * Rebuilt as a self-contained CSS @keyframes timeline for html-video / Hyperframes.
12 * Timeline (4.5s @ 60fps): panels split open (white down, blue up) -> accent bar grows
13 * -> quote reveals line by line -> attribution fades -> corner brand marks fade.
14 */
15 * { margin: 0; padding: 0; box-sizing: border-box; }
16 body {
17 width: 1920px; height: 1080px; overflow: hidden;
18 background: #ffffff; color: #0a0a0a;
19 font-family: 'Manrope', sans-serif; position: relative;
20 }
21
22 /* white top panel, blue bottom panel — split open from center */
23 .panel-top { position: absolute; left: 0; right: 0; top: 0; height: 540px; background: #ffffff;
24 transform: translateY(-100%); animation: openTop 0.9s cubic-bezier(0.16,1,0.3,1) 0.1s forwards; }
25 .panel-bot { position: absolute; left: 0; right: 0; bottom: 0; height: 540px; background: #4361ee;
26 transform: translateY(100%); animation: openBot 0.9s cubic-bezier(0.16,1,0.3,1) 0.1s forwards; }
27 @keyframes openTop { to { transform: translateY(0); } }
28 @keyframes openBot { to { transform: translateY(0); } }
29
30 /* accent bar on the seam */
31 .seam { position: absolute; left: 96px; top: 540px; width: 0; height: 8px; background: #0a0a0a;
32 z-index: 5; transform: translateY(-50%); animation: seamGrow 0.8s cubic-bezier(0.16,1,0.3,1) 0.9s forwards; }
33 @keyframes seamGrow { to { width: 320px; } }
34
35 /* quote hero, straddling the seam (last line(s) land on the blue panel, >540px) */
36 .quote { position: absolute; left: 96px; top: 318px; right: 200px; z-index: 6;
37 font-weight: 800; font-size: 104px; line-height: 1.12; letter-spacing: -2px; color: #0a0a0a; }
38 .quote .ln { display: block; opacity: 0; transform: translateY(26px);
39 animation: lnUp 0.7s cubic-bezier(0.16,1,0.3,1) forwards; }
40 .quote .ln.on-blue { color: #ffffff; }
41 @keyframes lnUp { to { opacity: 1; transform: translateY(0); } }
42
43 /* attribution, bottom panel */
44 .attr { position: absolute; left: 96px; bottom: 110px; z-index: 6; color: #fff; opacity: 0;
45 animation: fade 0.7s ease-out 2.2s forwards; }
46 .attr .name { font-weight: 700; font-size: 28px; letter-spacing: 0.5px; }
47 .attr .role { font-weight: 500; font-size: 18px; letter-spacing: 2px; text-transform: uppercase;
48 opacity: 0.7; margin-top: 8px; }
49 @keyframes fade { to { opacity: 1; } }
50
51 /* corner brand marks */
52 .brand { position: absolute; font-weight: 800; font-size: 20px; letter-spacing: 3px;
53 text-transform: uppercase; z-index: 6; opacity: 0; animation: fade 0.6s ease-out 2.5s forwards; }
54 .brand-tr { top: 64px; right: 96px; color: #0a0a0a; }
55 .brand-br { bottom: 64px; right: 96px; color: #fff; opacity: 0; }
56 .brand-br { animation: fadeDim 0.6s ease-out 2.6s forwards; }
57 @keyframes fadeDim { to { opacity: 0.6; } }
58
59 @media (prefers-reduced-motion: reduce) {
60 * { animation: none !important; }
61 .panel-top,.panel-bot{transform:translateY(0)}.seam{width:320px}
62 .quote .ln{opacity:1;transform:none}.attr,.brand-tr{opacity:1}.brand-br{opacity:0.6}
63 }
64 </style>
65 </head>
66 <body>
67 <div class="panel-top"></div>
68 <div class="panel-bot"></div>
69 <div class="seam"></div>
70
71 <div class="quote">
72 <span class="ln" style="animation-delay:1.0s">One agent.</span>
73 <span class="ln" style="animation-delay:1.15s">Every HTML</span>
74 <span class="ln on-blue" style="animation-delay:1.3s">video engine.</span>
75 </div>
76
77 <div class="attr">
78 <div class="name">html-video</div>
79 <div class="role">Meta-layer for coding agents</div>
80 </div>
81
82 <div class="brand brand-tr">nexu.io</div>
83 <div class="brand brand-br">Electric Studio</div>
84 </body>
85 </html>
86
86 lines HTML