@@ -5,64 +5,100 @@ import Image from 'next/image';
55import { useState , useEffect } from 'react' ;
66import { Menu , X } from 'lucide-react' ;
77import { LocaleSwitcher } from './locale-switcher' ;
8- import type { HomeLandingCopy } from './types' ;
8+
9+ type HeaderCopy = {
10+ logoAlt : string ;
11+ city : string ;
12+ registerLabel : string ;
13+ registerAria : string ;
14+ } ;
15+
16+ type HeaderNavItem = {
17+ label : string ;
18+ href : string ;
19+ } ;
920
1021type SiteHeaderProps = {
11- header : HomeLandingCopy [ 'header' ] ;
12- nav : HomeLandingCopy [ 'nav' ] ;
22+ header : HeaderCopy ;
23+ nav : HeaderNavItem [ ] ;
1324 isMenuOpen : boolean ;
1425 toggleMenu : ( ) => void ;
1526} ;
1627
1728export function SiteHeader ( { header, nav, isMenuOpen, toggleMenu } : SiteHeaderProps ) {
18- const [ scrolled , setScrolled ] = useState ( false ) ;
29+ const [ scrolled , setScrolled ] = useState ( true ) ;
1930
2031 useEffect ( ( ) => {
2132 const handleScroll = ( ) => {
2233 setScrolled ( window . scrollY > 20 ) ;
2334 } ;
35+ handleScroll ( ) ;
2436 window . addEventListener ( 'scroll' , handleScroll ) ;
2537 return ( ) => window . removeEventListener ( 'scroll' , handleScroll ) ;
2638 } , [ ] ) ;
2739
2840 return (
2941 < header
30- className = { `fixed top-0 left-0 z-50 flex w-full items-center justify-between px-5 py-6 md:px-10 md:py-8 transition-all duration-300 ${ scrolled ? 'bg-[#050505]/90 backdrop-blur-md border-b border-white/5' : 'bg-transparent' } ` } >
31- < div className = "flex items-center gap-3" >
42+ className = { `fixed top-0 left-0 z-[100] w-full border-b border-white/5 px-5 py-6 backdrop-blur-md transition-all duration-300 md:px-10 md:py-8 ${ scrolled ? 'bg-[#050505]/90' : 'bg-[#050505]/55' } ` }
43+ >
44+ < div className = "flex w-full items-center justify-between md:hidden" >
3245 < Link href = "/" >
3346 < div className = "relative h-auto w-auto" >
34- < Image src = "/assets/images/logos/devfest-2026.svg" width = { 220 } height = { 28 } alt = { header . logoAlt }
35- className = "object-contain" />
47+ < Image
48+ src = "/assets/images/logos/devfest-2026.svg"
49+ width = { 220 }
50+ height = { 28 }
51+ alt = { header . logoAlt }
52+ className = "h-auto w-[200px] object-contain"
53+ />
3654 </ div >
3755 </ Link >
38- </ div >
39-
40- < nav className = "hidden items-center gap-10 md:flex" >
41- { nav . map ( ( item , index ) => {
42- const colors = [ 'blue' , 'red' , 'yellow' , 'green' ] ;
43- const colorClass = `hover:text-google-${ colors [ index % colors . length ] } ` ;
44- const opacityClass = index === 0 ? 'text-white' : 'text-white/50' ;
45-
46- return (
47- < Link
48- key = { item . href }
49- className = { `font-mono-tech text-[12px] tracking-[0.32em] ${ opacityClass } ${ colorClass } uppercase transition-colors` }
50- href = { item . href }
51- >
52- { item . label }
53- </ Link >
54- ) ;
55- } ) }
56- </ nav >
5756
58- < div className = "flex items-center gap-6" >
59- < LocaleSwitcher />
60- < div className = "md:hidden" >
57+ < div className = "flex items-center gap-3" >
58+ < LocaleSwitcher />
6159 < button onClick = { toggleMenu } className = "text-white" >
6260 { isMenuOpen ? < X size = { 28 } /> : < Menu size = { 28 } /> }
6361 </ button >
6462 </ div >
6563 </ div >
64+
65+ < div className = "hidden w-full items-center justify-between md:flex" >
66+ < div className = "flex items-center gap-3" >
67+ < Link href = "/" >
68+ < div className = "relative h-auto w-auto" >
69+ < Image
70+ src = "/assets/images/logos/devfest-2026.svg"
71+ width = { 220 }
72+ height = { 28 }
73+ alt = { header . logoAlt }
74+ className = "h-auto w-[220px] object-contain"
75+ />
76+ </ div >
77+ </ Link >
78+ </ div >
79+
80+ < nav className = "flex items-center gap-10" >
81+ { nav . map ( ( item , index ) => {
82+ const colors = [ 'blue' , 'red' , 'yellow' , 'green' ] ;
83+ const colorClass = `hover:text-google-${ colors [ index % colors . length ] } ` ;
84+ const opacityClass = index === 0 ? 'text-white' : 'text-white/50' ;
85+
86+ return (
87+ < Link
88+ key = { item . href }
89+ className = { `font-mono-tech text-[12px] tracking-[0.32em] ${ opacityClass } ${ colorClass } uppercase transition-colors` }
90+ href = { item . href }
91+ >
92+ { item . label }
93+ </ Link >
94+ ) ;
95+ } ) }
96+ </ nav >
97+
98+ < div className = "flex items-center gap-6" >
99+ < LocaleSwitcher />
100+ </ div >
101+ </ div >
66102 </ header >
67103 ) ;
68104}
0 commit comments