@@ -19,13 +19,6 @@ const finalLine = isZh ? '让字幕成为桥梁_' : 'SUBTITLES AS A BRIDGE_';
1919 <div class =" absolute inset-0 bg-grid opacity-60 pointer-events-none" ></div >
2020 <div class =" absolute inset-0 vignette-top pointer-events-none" ></div >
2121
22- <!-- Light layers — phosphor cone reaching up the hero -->
23- <div class =" crt-light-layer" aria-hidden =" true" >
24- <div class =" crt-uplight" ></div >
25- <div class =" crt-floorpool" ></div >
26- <div class =" crt-corecast" ></div >
27- </div >
28-
2922 <!-- Yellow corner mark -->
3023 <div class =" absolute top-24 left-5 sm:left-8 lg:left-12 flex items-center gap-3 z-10" >
3124 <span class =" inline-block w-2 h-2 rounded-full bg-signal-yellow animate-pulse" ></span >
@@ -41,19 +34,55 @@ const finalLine = isZh ? '让字幕成为桥梁_' : 'SUBTITLES AS A BRIDGE_';
4134 </div >
4235
4336 <!-- Main content -->
44- <div class =" relative z-[5] max-w-[1400px] w-full mx-auto px-5 sm:px-8 lg:px-12 pt-32 pb-[26rem]" >
45-
46- <!-- Display lockup -->
47- <div class =" word-reveal" >
48- <h1 class =" font-display text-display text-bone leading-[0.92] tracking-tightest" >
49- <span class =" word" ><span >{ t (' home.hero.line1' )} </span ></span >
50- <br />
51- <span class =" word" ><span class =" font-display-italic text-signal-yellow" >{ t (' home.hero.line2' )} </span ></span >
52- </h1 >
37+ <div class =" relative z-[5] max-w-[1400px] w-full mx-auto px-5 sm:px-8 lg:px-12 pt-32 pb-32" >
38+
39+ <!-- Title row: display lockup on left, CRT (with its own light) on right -->
40+ <div class =" grid lg:grid-cols-12 gap-8 items-center" >
41+ <div class =" lg:col-span-7 word-reveal" >
42+ <h1 class =" font-display text-display text-bone leading-[0.92] tracking-tightest" >
43+ <span class =" word" ><span >{ t (' home.hero.line1' )} </span ></span >
44+ <br />
45+ <span class =" word" ><span class =" font-display-italic text-signal-yellow" >{ t (' home.hero.line2' )} </span ></span >
46+ </h1 >
47+ </div >
48+
49+ <!-- CRT slot: contains both the monitor body and its own light halo -->
50+ <div class =" lg:col-span-5 hidden lg:flex relative justify-center items-center min-h-[280px]" aria-hidden =" true" >
51+ <!-- Light layers — emanate from this column, scoped to the CRT -->
52+ <div class =" crt-light-layer" >
53+ <div class =" crt-uplight" ></div >
54+ <div class =" crt-floorpool" ></div >
55+ <div class =" crt-corecast" ></div >
56+ </div >
57+ <!-- CRT body itself -->
58+ <div class =" crt-stage" >
59+ <div class =" crt-body" >
60+ <div class =" crt-vents" ></div >
61+ <div class =" crt-screen-recess" >
62+ <div class =" crt-screen" >
63+ <div class =" crt-text" id =" crtText" >
64+ <span class =" ts" >[ MONTAGESUBS / TTY0 ]</span >
65+ <span class =" line" id =" crtLine1" ></span >
66+ <span class =" line" id =" crtLine2" ></span >
67+ <span class =" line" id =" crtLine3" ></span >
68+ <span class =" line" id =" crtLine4" ></span >
69+ <span class =" line" id =" crtLine5" ><span class =" cursor" id =" crtCursor" ></span ></span >
70+ </div >
71+ <div class =" crt-screen-vignette" ></div >
72+ <div class =" crt-scanlines" ></div >
73+ <div class =" crt-scanbeam" ></div >
74+ <div class =" crt-boot-line" id =" crtBootLine" ></div >
75+ </div >
76+ </div >
77+ <div class =" crt-led" ></div >
78+ <div class =" crt-label" >MONTAGE-CRT 14"</div >
79+ </div >
80+ </div >
81+ </div >
5382 </div >
5483
5584 <!-- Subhead row -->
56- <div class =" reveal mt-12 grid lg:grid-cols-12 gap-8 items-end" >
85+ <div class =" reveal mt-16 grid lg:grid-cols-12 gap-8 items-end" >
5786 <div class =" lg:col-span-5" >
5887 <p class =" font-display-italic text-2xl sm:text-3xl text-bone-dim leading-snug" >
5988 “{ t (' home.hero.serif' )} ”
@@ -80,37 +109,12 @@ const finalLine = isZh ? '让字幕成为桥梁_' : 'SUBTITLES AS A BRIDGE_';
80109 </div >
81110
82111 <!-- Scroll cue -->
83- <div class =" absolute bottom-8 left-5 sm:left-8 lg:left-12 hidden md:flex items-center gap-3 reveal" >
112+ <div class =" mt-20 hidden md:flex items-center gap-3 reveal" >
84113 <span class =" font-mono text-[10px] text-bone-mute uppercase tracking-[0.22em]" >{ t (' home.hero.scroll' )} </span >
85114 <span class =" block w-12 h-px bg-bone/30" ></span >
86115 </div >
87116 </div >
88117
89- <!-- CRT monitor — anchored at hero bottom, scrolls away with the page -->
90- <div class =" crt-stage" aria-hidden =" true" >
91- <div class =" crt-body" >
92- <div class =" crt-vents" ></div >
93- <div class =" crt-screen-recess" >
94- <div class =" crt-screen" >
95- <div class =" crt-text" id =" crtText" >
96- <span class =" ts" >[ MONTAGESUBS / TTY0 ]</span >
97- <span class =" line" id =" crtLine1" ></span >
98- <span class =" line" id =" crtLine2" ></span >
99- <span class =" line" id =" crtLine3" ></span >
100- <span class =" line" id =" crtLine4" ></span >
101- <span class =" line" id =" crtLine5" ><span class =" cursor" id =" crtCursor" ></span ></span >
102- </div >
103- <div class =" crt-screen-vignette" ></div >
104- <div class =" crt-scanlines" ></div >
105- <div class =" crt-scanbeam" ></div >
106- <div class =" crt-boot-line" id =" crtBootLine" ></div >
107- </div >
108- </div >
109- <div class =" crt-led" ></div >
110- <div class =" crt-label" >MONTAGE-CRT 14"</div >
111- </div >
112- </div >
113-
114118</section >
115119
116120<style is:global >
@@ -121,33 +125,31 @@ const finalLine = isZh ? '让字幕成为桥梁_' : 'SUBTITLES AS A BRIDGE_';
121125 --crt-phosphor-pale: #FEF9C3;
122126 }
123127
124- /* Light layers — anchored to hero, NOT fixed; scroll naturally with the page */
128+ /* Light layers — anchored to the CRT column; bleed outward into the surrounding hero */
125129 .hero-stage .crt-light-layer {
126130 position: absolute;
127- left: 0; right: 0; bottom: 0;
128- height: 100%;
131+ inset: 0;
129132 z-index: 1;
130133 pointer-events: none;
134+ overflow: visible;
131135 }
132136
133- /* CRT stage — anchored absolutely at hero bottom , scrolls naturally */
137+ /* CRT stage — flows naturally inside the flex column , scrolls with the page */
134138 .hero-stage .crt-stage {
135- position: absolute;
136- left: 50%; bottom: 3rem;
137- transform: translateX(-50%);
139+ position: relative;
138140 width: 360px; height: 280px;
139141 z-index: 2;
140142 pointer-events: none;
141143 opacity: var(--crt-visible, 0);
142144 transition: opacity 0.6s ease;
143145 }
144146
145- /* Bright phosphor "core" right behind the screen — illuminates the page */
147+ /* Bright phosphor "core" — tight halo right behind the screen */
146148 .hero-stage .crt-corecast {
147149 position: absolute;
148- left: 50%; bottom: calc(3rem + 100px) ;
150+ left: 50%; top: 50% ;
149151 width: 720px; height: 520px;
150- transform: translate(-50%, 50%) scale(var(--glow-scale, 0));
152+ transform: translate(-50%, - 50%) scale(var(--glow-scale, 0));
151153 background: radial-gradient(ellipse 60% 55% at 50% 50%,
152154 rgba(254, 243, 199, 0.55) 0%,
153155 rgba(250, 204, 21, 0.32) 18%,
@@ -164,45 +166,42 @@ const finalLine = isZh ? '让字幕成为桥梁_' : 'SUBTITLES AS A BRIDGE_';
164166 50% { filter: blur(2px) brightness(1.05); }
165167 }
166168
167- /* Upward light cone reaching the hero text */
169+ /* Larger ambient cone — bleeds left into the title area */
168170 .hero-stage .crt-uplight {
169171 position: absolute;
170- left: 50%; bottom: 0;
171- width: 1300px;
172- height: 100%;
173- transform: translateX(-50%) scale(var(--glow-scale, 0));
174- transform-origin: bottom center;
172+ left: 50%; top: 50%;
173+ width: 1200px; height: 800px;
174+ transform: translate(-50%, -50%) scale(var(--glow-scale, 0));
175175 background:
176- radial-gradient(ellipse 42% 65% at 50% 100%,
177- rgba(253, 224, 71, 0.28) 0%,
178- rgba(245, 158, 11, 0.16) 18%,
179- rgba(180, 83, 9, 0.08) 38%,
180- rgba(120, 53, 15, 0.03) 60%,
181- transparent 82%);
176+ radial-gradient(ellipse 50% 50% at 50% 50%,
177+ rgba(253, 224, 71, 0.22) 0%,
178+ rgba(245, 158, 11, 0.12) 20%,
179+ rgba(180, 83, 9, 0.05) 45%,
180+ transparent 70%);
182181 mix-blend-mode: screen;
183182 pointer-events: none;
184183 transition: transform 1.4s cubic-bezier(.2,.7,.2,1);
185- filter: blur(3px );
184+ filter: blur(8px );
186185 animation: crt-uplight-breathe 5.2s ease-in-out infinite;
187186 }
188187 @keyframes crt-uplight-breathe {
189188 0%, 100% { opacity: 0.92; }
190189 50% { opacity: 1.04; }
191190 }
192191
193- /* Floor pool — light spilling on the desk surface */
192+ /* Soft pool below the CRT — like reflected light on a surface */
194193 .hero-stage .crt-floorpool {
195194 position: absolute;
196- left: 50%; bottom : calc(3rem - 30px );
197- width: 720px ; height: 130px ;
195+ left: 50%; top : calc(50% + 160px );
196+ width: 600px ; height: 110px ;
198197 transform: translateX(-50%) scale(var(--glow-scale, 0));
199198 background: radial-gradient(ellipse 50% 50% at 50% 50%,
200- rgba(253, 224, 71, 0.38 ) 0%,
201- rgba(245, 158, 11, 0.18) 30 %,
202- rgba(180, 83, 9, 0.06) 60 %,
203- transparent 80 %);
199+ rgba(253, 224, 71, 0.32 ) 0%,
200+ rgba(245, 158, 11, 0.14) 35 %,
201+ rgba(180, 83, 9, 0.05) 65 %,
202+ transparent 82 %);
204203 mix-blend-mode: screen;
205- filter: blur(10px );
204+ filter: blur(12px );
206205 transition: transform 1.4s cubic-bezier(.2,.7,.2,1);
207206 }
208207
0 commit comments