@@ -8,22 +8,57 @@ function Hero() {
88 const t = useTranslations ( 'hero' )
99
1010 return (
11- < section className = "min-h-screen flex items-center justify-center relative overflow-hidden pt-16 bg-gradient-to-br from-surface to-surface-container" >
12- < div className = "absolute inset-0 bg-[radial-gradient(ellipse_at_center,_var(--tw-gradient-stops))] from-primary/15 via-transparent to-transparent" />
13- < div className = "relative z-10 text-center px-4 max-w-4xl mx-auto" >
14- < h1 className = "text-4xl sm:text-5xl md:text-6xl font-bold text-on-surface mb-6 leading-tight" >
11+ < section className = "min-h-screen relative overflow-hidden bg-gradient-to-br from-surface via-surface to-surface-container" >
12+ { /* 背景装饰:柔和的径向渐变 */ }
13+ < div className = "absolute inset-0 bg-gradient-radial from-primary/10 via-transparent to-transparent opacity-80" />
14+
15+ { /* 额外的光晕效果 - 响应式尺寸 */ }
16+ < div className = "absolute top-1/4 left-1/2 -translate-x-1/2 w-[clamp(400px,50vw,800px)] h-[clamp(200px,25vw,400px)] bg-primary/5 blur-3xl rounded-full" />
17+
18+ { /* 主内容区 - 固定 padding-top,不再居中 */ }
19+ < div className = "relative z-10 text-center px-[clamp(1.5rem,4vw,3rem)] max-w-5xl mx-auto pt-32 sm:pt-40 md:pt-44" >
20+ { /* 主标题:响应式 32px - 80px */ }
21+ < h1 className = "text-responsive-hero font-bold text-on-surface mb-8 tracking-tight animate-fade-in-up" >
1522 { t ( 'title' ) }
1623 </ h1 >
17- < p className = "text-lg sm:text-xl text-on-surface-variant mb-8 max-w-2xl mx-auto leading-relaxed" >
24+
25+ { /* 副标题:响应式 16px - 24px */ }
26+ < p className = "text-responsive-subtitle text-on-surface-variant mb-12 max-w-3xl mx-auto font-normal animate-fade-in-up" style = { { animationDelay : '100ms' } } >
1827 { t ( 'subtitle' ) }
1928 </ p >
29+
30+ { /* CTA 按钮 - 响应式尺寸 */ }
2031 < a
21- href = "#pricing"
22- className = "inline-block bg-primary-container hover:bg-primary-container-high text-on-surface px-8 py-4 rounded-xl text-lg font-semibold transition-all transform hover:scale-105 shadow-lg shadow-primary/20"
32+ href = "#outline"
33+ className = "
34+ inline-flex
35+ items-center
36+ justify-center
37+ bg-primary-container
38+ hover:bg-primary-container-light
39+ text-on-surface
40+ px-responsive-button
41+ py-responsive-button
42+ rounded-xl
43+ text-responsive-button
44+ font-semibold
45+ transition-all
46+ duration-200
47+ ease-m3-standard
48+ transform
49+ hover:scale-[1.03]
50+ hover:shadow-primary-glow
51+ active:scale-[0.98]
52+ animate-fade-in-up
53+ "
54+ style = { { animationDelay : '200ms' } }
2355 >
2456 { t ( 'cta' ) }
2557 </ a >
2658 </ div >
59+
60+ { /* 底部渐变遮罩,柔和过渡到下一个区块 */ }
61+ < div className = "absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-t from-surface to-transparent" />
2762 </ section >
2863 )
2964}
@@ -38,16 +73,17 @@ function PainPoints() {
3873 ]
3974
4075 return (
41- < section className = "py-20 bg-surface" >
42- < div className = "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" >
43- < div className = "grid grid-cols-1 md:grid-cols-3 gap-6" >
76+ < section className = "py-responsive-section bg-surface" >
77+ < div className = "max-w-7xl mx-auto px-[clamp(1rem,3vw,2rem)]" >
78+ { /* 响应式网格:自动适配 1-3 列 */ }
79+ < div className = "grid grid-cols-1 md:grid-cols-3 gap-[clamp(1rem,2vw,1.5rem)]" >
4480 { pains . map ( ( pain ) => (
4581 < div
4682 key = { pain . key }
47- className = "bg-surface-container rounded-2xl p-8 text-center border border-outline-variant hover:border-outline transition-colors"
83+ className = "bg-surface-container rounded-2xl p-responsive-card text-center border border-outline-variant hover:border-outline transition-colors"
4884 >
4985 < div className = "text-4xl mb-4" > { pain . icon } </ div >
50- < h3 className = "text-lg font-medium text-on-surface" > { pain . title } </ h3 >
86+ < h3 className = "text-responsive-card font-medium text-on-surface" > { pain . title } </ h3 >
5187 </ div >
5288 ) ) }
5389 </ div >
@@ -66,18 +102,18 @@ function Solution() {
66102 ]
67103
68104 return (
69- < section className = "py-24 bg-surface-container" >
70- < div className = "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 " >
71- < h2 className = "text-3xl sm:text-4xl font-bold text-on-surface text-center mb-16" >
105+ < section className = "py-responsive-section bg-surface-container" >
106+ < div className = "max-w-7xl mx-auto px-[clamp(1rem,3vw,2rem)] " >
107+ < h2 className = "text-responsive-section font-bold text-on-surface text-center mb-16" >
72108 { t ( 'title' ) }
73109 </ h2 >
74- < div className = "flex flex-col md:flex-row items-center justify-center gap-4 md:gap-8 " >
110+ < div className = "flex flex-col md:flex-row items-center justify-center gap-[clamp(1rem,2vw,2rem)] " >
75111 { steps . map ( ( step , index ) => (
76112 < div key = { step . key } className = "flex items-center" >
77- < div className = "bg-surface rounded-2xl p-6 text-center min-w-[160px ] border border-outline-variant" >
113+ < div className = "bg-surface rounded-2xl p-responsive-card text-center min-w-[clamp(140px,18vw,200px) ] border border-outline-variant" >
78114 < div className = "text-3xl mb-2" > { step . icon } </ div >
79- < div className = "text-on-surface font-medium mb-1" > { step . title } </ div >
80- < div className = "text-on-surface-variant text-sm " > { step . role } </ div >
115+ < div className = "text-responsive-card text- on-surface font-medium mb-1" > { step . title } </ div >
116+ < div className = "text-responsive-small text- on-surface-variant" > { step . role } </ div >
81117 </ div >
82118 { index < steps . length - 1 && (
83119 < span className = "hidden md:block text-primary text-2xl mx-2" > →</ span >
@@ -86,9 +122,9 @@ function Solution() {
86122 ) ) }
87123 </ div >
88124 < div className = "mt-12 text-center" >
89- < div className = "inline-flex items-center gap-3 bg-surface rounded-2xl px-8 py-4 border border-primary/30" >
125+ < div className = "inline-flex items-center gap-3 bg-surface rounded-2xl px-responsive-button py-4 border border-primary/30" >
90126 < span className = "text-2xl" > { t ( 'result.icon' ) } </ span >
91- < span className = "text-on-surface font-medium" > { t ( 'result.title' ) } </ span >
127+ < span className = "text-responsive-card text- on-surface font-medium" > { t ( 'result.title' ) } </ span >
92128 </ div >
93129 </ div >
94130 </ div >
@@ -106,9 +142,9 @@ function CourseOutline() {
106142 } ) )
107143
108144 return (
109- < section id = "outline" className = "py-24 bg-surface" >
110- < div className = "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 " >
111- < h2 className = "text-3xl sm:text-4xl font-bold text-on-surface text-center mb-16" >
145+ < section id = "outline" className = "py-responsive-section bg-surface" >
146+ < div className = "max-w-4xl mx-auto px-[clamp(1rem,3vw,2rem)] " >
147+ < h2 className = "text-responsive-section font-bold text-on-surface text-center mb-16" >
112148 { t ( 'title' ) }
113149 </ h2 >
114150 < div className = "space-y-4" >
@@ -121,8 +157,8 @@ function CourseOutline() {
121157 { chapter . num }
122158 </ span >
123159 < div >
124- < h3 className = "text-on-surface font-medium" > { chapter . title } </ h3 >
125- < p className = "text-on-surface-variant text-sm " > { chapter . desc } </ p >
160+ < h3 className = "text-responsive-card text- on-surface font-medium" > { chapter . title } </ h3 >
161+ < p className = "text-responsive-small text- on-surface-variant" > { chapter . desc } </ p >
126162 </ div >
127163 </ div >
128164 ) ) }
@@ -142,25 +178,25 @@ function SocialProof() {
142178 } ) )
143179
144180 return (
145- < section id = "about" className = "py-24 bg-surface-container" >
146- < div className = "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 " >
147- < h2 className = "text-3xl sm:text-4xl font-bold text-on-surface text-center mb-16" >
181+ < section id = "about" className = "py-responsive-section bg-surface-container" >
182+ < div className = "max-w-7xl mx-auto px-[clamp(1rem,3vw,2rem)] " >
183+ < h2 className = "text-responsive-section font-bold text-on-surface text-center mb-16" >
148184 { t ( 'title' ) }
149185 </ h2 >
150- < div className = "grid grid-cols-1 md:grid-cols-3 gap-6 " >
186+ < div className = "grid grid-cols-1 md:grid-cols-3 gap-[clamp(1rem,2vw,1.5rem)] " >
151187 { testimonials . map ( ( item , index ) => (
152188 < div
153189 key = { index }
154- className = "bg-surface rounded-2xl p-6 border border-outline-variant"
190+ className = "bg-surface rounded-2xl p-responsive-card border border-outline-variant"
155191 >
156- < p className = "text-on-surface-variant mb-4 leading-relaxed" > “{ item . quote } ”</ p >
192+ < p className = "text-responsive-body text- on-surface-variant mb-4 leading-relaxed" > “{ item . quote } ”</ p >
157193 < div className = "flex items-center gap-3" >
158194 < div className = "w-10 h-10 rounded-full bg-primary/15 flex items-center justify-center text-primary font-medium" >
159195 { item . author [ 0 ] }
160196 </ div >
161197 < div >
162- < div className = "text-on-surface font-medium" > { item . author } </ div >
163- < div className = "text-on-surface-variant text-sm " > { item . role } </ div >
198+ < div className = "text-responsive-card text- on-surface font-medium" > { item . author } </ div >
199+ < div className = "text-responsive-small text- on-surface-variant" > { item . role } </ div >
164200 </ div >
165201 </ div >
166202 </ div >
@@ -184,46 +220,46 @@ function Pricing() {
184220 } ) )
185221
186222 return (
187- < section id = "pricing" className = "py-24 bg-surface" >
188- < div className = "max-w-lg mx-auto px-4 sm:px-6 lg:px-8 " >
189- < h2 className = "text-3xl sm:text-4xl font-bold text-on-surface text-center mb-16" >
223+ < section id = "pricing" className = "py-responsive-section bg-surface" >
224+ < div className = "max-w-lg mx-auto px-[clamp(1rem,3vw,2rem)] " >
225+ < h2 className = "text-responsive-section font-bold text-on-surface text-center mb-16" >
190226 { t ( 'title' ) }
191227 </ h2 >
192- < div className = "bg-surface-container rounded-3xl p-8 border border-outline-variant shadow-2xl shadow-primary/10" >
228+ < div className = "bg-surface-container rounded-3xl p-responsive-card border border-outline-variant shadow-2xl shadow-primary/10" >
193229 < div className = "text-center mb-8" >
194230 < div className = "flex items-baseline justify-center gap-2" >
195- < span className = "text-5xl font-bold text-on-surface" > { t ( 'price' ) } </ span >
196- < span className = "text-xl text-on-surface-variant line-through" > { t ( 'originalPrice' ) } </ span >
231+ < span className = "text-responsive-hero font-bold text-on-surface" > { t ( 'price' ) } </ span >
232+ < span className = "text-responsive-card text-on-surface-variant line-through" > { t ( 'originalPrice' ) } </ span >
197233 </ div >
198- < p className = "text-on-surface-variant mt-2" > { t ( 'lifetime' ) } </ p >
234+ < p className = "text-responsive-small text- on-surface-variant mt-2" > { t ( 'lifetime' ) } </ p >
199235 </ div >
200236 < ul className = "space-y-4 mb-6" >
201237 { features . map ( ( feature , index ) => (
202238 < li key = { index } className = "flex items-center gap-3" >
203239 < span className = "text-primary text-lg" > ✅</ span >
204- < span className = "text-on-surface" > { feature } </ span >
240+ < span className = "text-responsive-body text- on-surface" > { feature } </ span >
205241 </ li >
206242 ) ) }
207243 </ ul >
208244 < div className = "border-t border-outline-variant pt-4 mb-6" >
209245 < button
210246 onClick = { ( ) => setShowOutline ( ! showOutline ) }
211- className = "w-full text-center text-on-surface-variant hover:text-on-surface transition-colors text-sm cursor-pointer"
247+ className = "w-full text-center text-responsive-small text- on-surface-variant hover:text-on-surface transition-colors cursor-pointer"
212248 >
213249 📖 { showOutline ? t ( 'hideOutline' ) : t ( 'seeOutline' ) }
214250 </ button >
215251 { showOutline && (
216252 < div className = "mt-3 space-y-2" >
217253 { chapters . map ( ( chapter ) => (
218- < div key = { chapter . num } className = "flex items-center gap-2 text-sm text-on-surface-variant" >
254+ < div key = { chapter . num } className = "flex items-center gap-2 text-responsive-small text-on-surface-variant" >
219255 < span className = "text-primary font-medium w-6" > { chapter . num } .</ span >
220256 < span > { chapter . title } </ span >
221257 </ div >
222258 ) ) }
223259 </ div >
224260 ) }
225261 </ div >
226- < button className = "w-full bg-primary-container hover:bg-primary-container-high text-on-surface py-4 rounded-xl font-semibold text-lg transition-all transform hover:scale-[1.02] shadow-lg shadow-primary/20" >
262+ < button className = "w-full bg-primary-container hover:bg-primary-container-high text-on-surface py-responsive-button rounded-xl font-semibold text-responsive-button transition-all transform hover:scale-[1.02] shadow-lg shadow-primary/20" >
227263 { t ( 'cta' ) }
228264 </ button >
229265 </ div >
@@ -242,26 +278,26 @@ function FAQ() {
242278 } ) )
243279
244280 return (
245- < section className = "py-24 bg-surface-container" >
246- < div className = "max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 " >
247- < h2 className = "text-3xl sm:text-4xl font-bold text-on-surface text-center mb-16" >
281+ < section className = "py-responsive-section bg-surface-container" >
282+ < div className = "max-w-3xl mx-auto px-[clamp(1rem,3vw,2rem)] " >
283+ < h2 className = "text-responsive-section font-bold text-on-surface text-center mb-16" >
248284 { t ( 'title' ) }
249285 </ h2 >
250286 < div className = "space-y-4" >
251287 { faqs . map ( ( faq , index ) => (
252288 < div key = { index } className = "bg-surface rounded-xl border border-outline-variant overflow-hidden" >
253289 < button
254290 onClick = { ( ) => setOpenIndex ( openIndex === index ? null : index ) }
255- className = "w-full px-6 py-4 text-left flex items-center justify-between hover:bg-surface-container-high transition-colors"
291+ className = "w-full px-responsive-button py-4 text-left flex items-center justify-between hover:bg-surface-container-high transition-colors"
256292 >
257- < span className = "text-on-surface font-medium" > { faq . q } </ span >
293+ < span className = "text-responsive-card text- on-surface font-medium" > { faq . q } </ span >
258294 < span className = { `text-primary transition-transform ${ openIndex === index ? 'rotate-180' : '' } ` } >
259295 ▼
260296 </ span >
261297 </ button >
262298 { openIndex === index && (
263- < div className = "px-6 pb-4" >
264- < p className = "text-on-surface-variant" > { faq . a } </ p >
299+ < div className = "px-responsive-button pb-4" >
300+ < p className = "text-responsive-body text- on-surface-variant" > { faq . a } </ p >
265301 </ div >
266302 ) }
267303 </ div >
@@ -277,25 +313,25 @@ function Footer() {
277313
278314 return (
279315 < footer className = "py-12 bg-surface border-t border-outline-variant" >
280- < div className = "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 " >
316+ < div className = "max-w-7xl mx-auto px-[clamp(1rem,3vw,2rem)] " >
281317 < div className = "flex flex-col md:flex-row items-center justify-between gap-4" >
282- < div className = "text-on-surface-variant" >
318+ < div className = "text-responsive-small text- on-surface-variant" >
283319 { t ( 'copyright' ) }
284320 </ div >
285321 < div className = "flex items-center gap-4" >
286322 < a
287323 href = "https://github.com/AIwork4me/ceo-of-one"
288324 target = "_blank"
289325 rel = "noopener noreferrer"
290- className = "text-on-surface-variant hover:text-on-surface transition-colors"
326+ className = "text-responsive-small text- on-surface-variant hover:text-on-surface transition-colors"
291327 >
292328 GitHub
293329 </ a >
294330 </ div >
295- < div className = "text-on-surface-variant text-sm " >
331+ < div className = "text-responsive-small text- on-surface-variant" >
296332 { t ( 'madeWith' ) }
297333 </ div >
298- < div className = "text-on-surface-variant text-sm " >
334+ < div className = "text-responsive-small text- on-surface-variant" >
299335 { t ( 'lastUpdated' ) }
300336 </ div >
301337 </ div >
0 commit comments