@@ -15,6 +15,7 @@ import { useSession } from 'next-auth/react'
1515import { useState } from 'react'
1616
1717import { BlockColor } from '@/components/ui/decorative-blocks'
18+ import { Section } from '@/components/ui/section'
1819import { SECTION_THEMES } from '@/components/ui/landing/constants'
1920import { FeatureSection } from '@/components/ui/landing/feature'
2021import { toast } from '@/components/ui/use-toast'
@@ -93,7 +94,12 @@ function SubscribeButton({
9394
9495function StrongHeroSection ( ) {
9596 return (
96- < div className = "min-h-[calc(100vh-64px)] bg-black flex flex-col items-center justify-center relative overflow-hidden px-4 py-12" >
97+ < Section
98+ background = { SECTION_THEMES . hero . background }
99+ hero
100+ fullViewport
101+ className = "overflow-hidden"
102+ >
97103 { /* Subtle radial glow behind content */ }
98104 < div
99105 className = "absolute inset-0 pointer-events-none"
@@ -159,82 +165,87 @@ function StrongHeroSection() {
159165 </ motion . div >
160166
161167 { /* Foreground content */ }
162- < div className = "relative z-10 flex flex-col items-center text-center max-w-4xl" >
163- < div className = "max-w-2xl" >
164- < motion . p
165- className = "font-mono text-md sm:text-lg tracking-[0.3em] text-acid-green/50 uppercase mb-8"
166- initial = { { opacity : 0 } }
167- animate = { { opacity : 1 } }
168- transition = { { duration : 0.8 , delay : 0.5 } }
169- >
170- codebuff strong
171- </ motion . p >
172- < motion . h1
173- className = "text-3xl sm:text-4xl md:text-4xl font-bold text-white tracking-tight mb-6"
168+ < div className = "codebuff-container min-h-[calc(95dvh-64px)] flex flex-col items-center justify-center relative z-10 py-12" >
169+ < div className = "flex flex-col items-center text-center max-w-4xl w-full space-y-12" >
170+ < motion . h1
171+ className = "text-4xl sm:text-5xl md:text-5xl font-bold text-white tracking-tight"
174172 initial = { { opacity : 0 , y : 20 } }
175173 animate = { { opacity : 1 , y : 0 } }
176174 transition = { { duration : 0.7 , delay : 0.7 } }
177175 >
178176 Access the strongest coding agent
179177 </ motion . h1 >
180- </ div >
181178
182- { /* Pricing cards grid */ }
183- < motion . div
184- className = "grid grid-cols-3 gap-2 sm:gap-5 mb-10 w-full"
185- initial = { { opacity : 0 , y : 20 } }
186- animate = { { opacity : 1 , y : 0 } }
187- transition = { { duration : 0.7 , delay : 1.1 } }
188- >
189- { Object . entries ( SUBSCRIPTION_TIERS ) . map ( ( [ key , tier ] ) => {
190- const price = Number ( key ) as SubscriptionTierPrice
191- const isHighlighted = price === 200
192-
193- return (
194- < div
195- key = { price }
196- className = { cn (
197- 'rounded-xl p-3 sm:p-8 backdrop-blur-sm border flex flex-col items-center transition-all duration-300' ,
198- 'hover:scale-[1.02]' ,
199- isHighlighted
200- ? 'border-acid-green/30 bg-acid-green/[0.04] shadow-[0_0_40px_rgba(0,255,149,0.08)] hover:shadow-[0_0_60px_rgba(0,255,149,0.15)]'
201- : 'border-white/10 bg-white/[0.02] hover:border-white/20 hover:bg-white/[0.04]' ,
202- ) }
203- >
204- < div className = "flex items-baseline justify-center gap-1 mb-1" >
205- < span className = "text-xl sm:text-5xl font-bold text-white tracking-tight" >
206- ${ tier . monthlyPrice }
207- </ span >
208- < span className = "text-xs sm:text-sm text-white/30" > /mo</ span >
209- </ div >
210-
211- < p className = "text-sm sm:text-base font-medium text-white/60 mb-3 sm:mb-6" >
212- { USAGE_MULTIPLIER [ price ] } usage
213- </ p >
214-
215- < SubscribeButton
216- tier = { price }
217- className = { cn (
218- 'w-full' ,
219- ! isHighlighted &&
220- 'bg-white/10 text-white hover:bg-white/20 shadow-none hover:shadow-none' ,
221- ) }
222- />
179+ < motion . p
180+ className = "hero-subtext text-center mx-auto max-w-xl pb-8"
181+ initial = { { opacity : 0 , y : 20 } }
182+ animate = { { opacity : 1 , y : 0 } }
183+ transition = { { duration : 0.5 , delay : 0.9 } }
184+ >
185+ Subscribe for higher usage limits
186+ </ motion . p >
187+
188+ { /* Pricing cards grid with decorative blocks */ }
189+ < motion . div
190+ className = "w-full"
191+ initial = { { opacity : 0 , y : 20 } }
192+ animate = { { opacity : 1 , y : 0 } }
193+ transition = { { duration : 0.7 , delay : 1.1 } }
194+ >
195+ < div className = "grid grid-cols-3 gap-3 sm:gap-6" >
196+ { Object . entries ( SUBSCRIPTION_TIERS ) . map ( ( [ key , tier ] ) => {
197+ const price = Number ( key ) as SubscriptionTierPrice
198+ const isHighlighted = price === 200
199+
200+ return (
201+ < div
202+ key = { price }
203+ className = { cn (
204+ 'rounded-xl p-3 sm:p-8 backdrop-blur-sm border flex flex-col items-center transition-all duration-300' ,
205+ 'hover:scale-[1.02]' ,
206+ isHighlighted
207+ ? 'border-acid-green/40 bg-acid-green/[0.06] shadow-[0_0_40px_rgba(0,255,149,0.12)] hover:shadow-[0_0_60px_rgba(0,255,149,0.2)]'
208+ : 'border-acid-green/15 bg-black/40 hover:border-acid-green/30 hover:bg-black/60' ,
209+ ) }
210+ >
211+ < div className = "flex items-baseline justify-center gap-1 mb-1" >
212+ < span className = "text-xl sm:text-5xl font-bold text-white tracking-tight" >
213+ ${ tier . monthlyPrice }
214+ </ span >
215+ < span className = "text-xs sm:text-sm text-white/30" >
216+ /mo
217+ </ span >
218+ </ div >
219+
220+ < p className = "text-sm sm:text-base font-medium text-white/60 mb-3 sm:mb-6" >
221+ { USAGE_MULTIPLIER [ price ] } usage
222+ </ p >
223+
224+ < SubscribeButton
225+ tier = { price }
226+ className = { cn (
227+ 'w-full' ,
228+ ! isHighlighted &&
229+ 'bg-acid-green/10 text-acid-green border border-acid-green/30 hover:bg-acid-green/20 shadow-none hover:shadow-none' ,
230+ ) }
231+ />
232+ </ div >
233+ )
234+ } ) }
223235 </ div >
224- )
225- } ) }
226- </ motion . div >
227-
228- < motion . p
229- className = "text-xs text-white/30 tracking-wide"
230- initial = { { opacity : 0 } }
231- animate = { { opacity : 1 } }
232- transition = { { duration : 0.8 , delay : 1.6 } }
233- >
234- Cancel anytime · Tax not included · Usage amounts subject to change
235- </ motion . p >
236+ </ motion . div >
237+
238+ < motion . p
239+ className = "text-sm text-white/30 tracking-wide"
240+ initial = { { opacity : 0 } }
241+ animate = { { opacity : 1 } }
242+ transition = { { duration : 0.8 , delay : 1.6 } }
243+ >
244+ Cancel anytime · Applicable taxes not shown · Usage subject to change
245+ </ motion . p >
246+ </ div >
236247 </ div >
237- </ div >
248+ </ Section >
238249 )
239250}
240251
@@ -382,6 +393,9 @@ export default function PricingClient() {
382393 < >
383394 < StrongHeroSection />
384395
396+ { /* Visual divider between hero and feature section */ }
397+ < div className = "h-px bg-gradient-to-r from-transparent via-green-500/30 to-transparent" />
398+
385399 < FeatureSection
386400 title = { < span > Usage-Based Pricing</ span > }
387401 description = "Get 500 free credits monthly, then pay just 1¢ per credit. Credits are consumed based on task complexity — simple queries cost less, complex changes more. You'll see how many credits each task consumes."
0 commit comments