@@ -5,6 +5,7 @@ import { ArrowRight, Copy, Terminal } from "lucide-react";
55import Link from "next/link" ;
66import { useCallback , useRef , useState } from "react" ;
77import { Safari } from "@/components/ui/safari" ;
8+ import { Meteors } from "@/components/ui/meteors" ;
89import { cn } from "@/lib/utils" ;
910
1011const INSTALL = "npm install nexaui" ;
@@ -18,10 +19,13 @@ export function Hero() {
1819 offset : [ "start start" , "end start" ] ,
1920 } ) ;
2021
21- const demoOpacity = useTransform ( scrollYProgress , [ 0 , 0.55 ] , [ 1 , 0 ] ) ;
22- const demoY = useTransform ( scrollYProgress , [ 0 , 0.55 ] , [ 0 , 56 ] ) ;
23- const demoBlurPx = useTransform ( scrollYProgress , [ 0 , 0.45 ] , [ 0 , 8 ] ) ;
24- const demoFilter = useTransform ( demoBlurPx , ( b ) => `blur(${ b } px)` ) ;
22+ // Smooth transitions for scroll
23+ const demoOpacity = useTransform ( scrollYProgress , [ 0 , 0.4 ] , [ 1 , 0 ] ) ;
24+ const demoY = useTransform ( scrollYProgress , [ 0 , 0.4 ] , [ 0 , 40 ] ) ;
25+
26+ // FIXED: Removed the blur transform to keep Safari sharp while scrolling
27+ // If you still want a tiny bit of blur, change [0, 0] to [0, 2]
28+ const demoFilter = useTransform ( scrollYProgress , [ 0 , 0.45 ] , [ "blur(0px)" , "blur(0px)" ] ) ;
2529
2630 const copyInstall = useCallback ( async ( ) => {
2731 try {
@@ -36,36 +40,46 @@ export function Hero() {
3640 return (
3741 < section
3842 ref = { sectionRef }
39- className = "relative overflow-hidden px-4 pb-24 pt-28 md:pb-32 md:pt-36"
43+ // FIXED: Changed overflow to visible so meteors don't get cut off
44+ className = "relative min-h-screen overflow-visible px-4 pb-24 pt-28 md:pb-32 md:pt-36"
4045 >
46+ { /* 1. BACKGROUND GRADIENTS LAYER */ }
4147 < div
4248 aria-hidden
4349 className = "pointer-events-none absolute inset-0 -z-10 bg-[radial-gradient(ellipse_90%_70%_at_50%_-30%,rgb(99_102_241/0.18),transparent),radial-gradient(ellipse_50%_45%_at_100%_0%,rgb(244_114_182/0.1),transparent)] dark:bg-[radial-gradient(ellipse_90%_70%_at_50%_-30%,rgb(99_102_241/0.26),transparent)]"
4450 />
51+
52+ { /* 2. FIXED METEORS: Moved to -z-20 and set to absolute inset-0 */ }
53+ < div className = "pointer-events-none absolute inset-0 -z-20 h-full w-full overflow-hidden" >
54+ < Meteors number = { 40 } />
55+ </ div >
56+
57+ { /* Top Hairline Border */ }
4558 < div
4659 aria-hidden
4760 className = "pointer-events-none absolute inset-x-0 top-0 -z-10 h-px bg-gradient-to-r from-transparent via-zinc-300/70 to-transparent dark:via-white/15"
4861 />
4962
50- < div className = "mx-auto flex w-full max-w-7xl flex-col items-center gap-14 lg:gap-20" >
63+ < div className = "relative z-10 mx-auto flex w-full max-w-7xl flex-col items-center gap-14 lg:gap-20" >
5164 < div className = "flex w-full flex-col items-center gap-8 text-center" >
52- < div className = "mx-auto max-w-3xl space-y-5" >
53- < p className = "text-xs font-semibold uppercase tracking-[0.28em] text-ink-subtle" >
65+ < div className = "mx-auto max-w-3xl space-y-4 sm:space-y- 5" >
66+ < p className = "text-[10px] sm:text- xs font-semibold uppercase tracking-[0.28em] text-ink-subtle" >
5467 NexaUI · App Router kit
5568 </ p >
5669 < h1
5770 className = { cn (
58- "font-arima text-balance text-4xl font-bold leading-[1.05 ] text-ink md:text-6xl lg:text-[4.5rem]" ,
71+ "font-arima text-balance text-3xl font-bold leading-[1.1 ] text-ink sm:text-4xl md:text-6xl lg:text-[4.5rem]" ,
5972 ) }
6073 >
6174 Build glass-native interfaces without the noise.
6275 </ h1 >
63- < p className = "text-balance text-base text-ink-muted md:text-lg" >
76+ < p className = "text-balance text-sm sm:text- base text-ink-muted md:text-lg" >
6477 A minimalist launchpad: Safari-framed previews, spotlight search,
65- and motion that respects scroll. Cream light, zinc-deep dark.
78+ and motion that respects scroll. Ivory light, zinc-deep dark.
6679 </ p >
6780 </ div >
6881
82+ { /* Install Terminal UI */ }
6983 < div className = "flex w-full max-w-2xl flex-col items-center justify-center gap-3 sm:flex-row sm:items-stretch" >
7084 < div className = "flex w-full min-w-0 flex-1 items-center gap-2 rounded-2xl border border-zinc-200/90 bg-white/80 px-4 py-3 font-mono text-xs text-ink shadow-sm backdrop-blur-md dark:border-white/10 dark:bg-zinc-950/70 dark:text-zinc-50" >
7185 < Terminal className = "h-4 w-4 shrink-0 text-indigo-600 dark:text-indigo-400" aria-hidden />
@@ -93,20 +107,24 @@ export function Hero() {
93107 </ div >
94108 </ div >
95109
110+ { /* 3. SAFARI PREVIEW: Cleaned up transforms */ }
96111 < motion . div
97112 style = { {
98113 opacity : demoOpacity ,
99114 y : demoY ,
100115 filter : demoFilter ,
101116 } }
102- className = "relative w-full max-w-6xl px-0 sm:max-w-6xl lg:max-w-7xl xl:max-w-[90rem] will-change-[opacity,transform,filter ]"
117+ className = "relative w-full max-w-6xl px-0 sm:max-w-6xl lg:max-w-7xl xl:max-w-[90rem] will-change-[opacity,transform]"
103118 >
119+ { /* Subtle Glow behind Safari */ }
104120 < div
105121 className = "pointer-events-none absolute -inset-8 -z-10 rounded-[2.5rem] bg-gradient-to-br from-indigo-500/12 via-fuchsia-500/8 to-transparent blur-3xl dark:from-indigo-400/18"
106122 aria-hidden
107123 />
124+
108125 < Safari size = "hero" url = "https://nexaui.dev/preview/dashboard" >
109126 < div className = "relative mx-auto w-full max-w-5xl space-y-6" >
127+ { /* Internal Safari Gradients */ }
110128 < div
111129 className = "pointer-events-none absolute inset-x-0 top-0 z-20 h-32 bg-gradient-to-b from-[#FFFDF7] via-[#FFFDF7]/60 to-transparent dark:from-[#09090B] dark:via-[#09090B]/60"
112130 aria-hidden
@@ -116,15 +134,17 @@ export function Hero() {
116134 aria-hidden
117135 />
118136
119- < div className = "relative z-10 space-y-5 pt-2" >
137+ < div className = "space-y-5 pt-2" >
120138 < div className = "flex flex-wrap items-center justify-between gap-3" >
121- < p className = "text-xs font-semibold uppercase tracking-wider text-ink-subtle " >
139+ < p className = "text-xs font-semibold uppercase tracking-wider" >
122140 Live preview
123141 </ p >
124142 < span className = "rounded-full bg-indigo-500/15 px-3 py-1 text-[11px] font-semibold text-indigo-800 dark:text-indigo-200" >
125143 Magic UI · Safari
126144 </ span >
127145 </ div >
146+
147+ { /* Dashboard Grid */ }
128148 < div className = "grid gap-4 sm:grid-cols-2 lg:grid-cols-3 lg:gap-5" >
129149 < div className = "rounded-2xl border border-zinc-200/80 bg-white/85 p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900/75" >
130150 < p className = "text-sm font-semibold text-ink" > Glass panel</ p >
@@ -145,6 +165,8 @@ export function Hero() {
145165 </ p >
146166 </ div >
147167 </ div >
168+
169+ { /* Skeleton Loader */ }
148170 < div className = "rounded-2xl border border-dashed border-zinc-300/80 bg-white/55 p-5 dark:border-white/15 dark:bg-zinc-950/45" >
149171 < div className = "flex items-center gap-4" >
150172 < div className = "h-14 w-14 shrink-0 rounded-2xl bg-gradient-to-br from-indigo-500 to-fuchsia-500 opacity-95 shadow-lg" />
@@ -162,4 +184,4 @@ export function Hero() {
162184 </ div >
163185 </ section >
164186 ) ;
165- }
187+ }
0 commit comments