44 XMarkIcon ,
55 HomeIcon ,
66 ArrowTopRightOnSquareIcon ,
7- CodeBracketSquareIcon ,
87 BookmarkSquareIcon ,
98 CalendarDaysIcon ,
109 UserGroupIcon ,
@@ -73,17 +72,10 @@ export function ConferenceHeader({ conference }: { conference: HTConference }) {
7372 } ,
7473 {
7574 key : "home" ,
76- label : "HackerTracker " ,
75+ label : "Home " ,
7776 to : "/" ,
7877 icon : HomeIcon ,
7978 } ,
80- {
81- key : "github" ,
82- label : "GitHub" ,
83- to : "https://github.com/junctor/hackertracker-web" ,
84- external : true ,
85- icon : CodeBracketSquareIcon ,
86- } ,
8779 ] ;
8880
8981 if ( conference . link ) {
@@ -99,76 +91,82 @@ export function ConferenceHeader({ conference }: { conference: HTConference }) {
9991 } , [ scheduleHref , isSchedule , bookmarksHref , isBookmarks , peopleHref , isPeople , conference . link ] ) ;
10092
10193 const baseHeader =
102- "sticky top-0 h-14 z-50 border-b border-neutral-800 transition-colors backdrop-blur supports-[backdrop-filter]:backdrop-blur" ;
103- const bg = scrolled ? "bg-neutral -950/90 " : "bg-neutral -950/70 " ;
94+ "sticky top-0 z-50 min-h-16 border-b border-white/10 text-white backdrop-blur-md transition-[background-color,border-color,box-shadow] duration-200 supports-[backdrop-filter]:backdrop-blur-md " ;
95+ const bg = scrolled ? "bg-slate -950/92 shadow-[0_12px_32px_rgba(2,6,23,0.3)] " : "bg-slate -950/82 " ;
10496
10597 return (
10698 < header className = { `${ baseHeader } ${ bg } ` } >
107- < div className = "flex h-14 w-full items-center justify-between px-4 sm:px-6 lg:px-10" >
108- { /* Left: Conference name / brand */ }
99+ < div
100+ aria-hidden = "true"
101+ className = "pointer-events-none absolute inset-x-0 bottom-0 h-px bg-linear-to-r from-transparent via-[#017FA4]/35 to-transparent"
102+ />
103+
104+ < div className = "flex min-h-16 w-full items-center justify-between gap-3 px-4 py-2.5 sm:px-6 lg:px-10" >
109105 < div className = "min-w-0" >
110106 < Link
111107 to = { scheduleHref }
112- className = "block truncate text-lg font-extrabold text-white hover:opacity-90 sm:text-xl"
108+ className = "ui-focus-ring block truncate rounded-xl px-2 py-1.5 text-lg font-bold tracking-tight text-slate-50 transition-colors hover:bg- white/4 hover:text-white focus-visible:outline-none sm:text-xl"
113109 aria-label = { `${ conference . name } — view schedule` }
114110 >
115111 { conference . name }
116112 </ Link >
117113 </ div >
118114
119- { /* Desktop nav */ }
120115 < nav className = "hidden items-center gap-2 sm:flex" >
121- { items . map ( ( { key, label, to, external, icon : Icon , ariaCurrent } ) =>
122- external ? (
116+ { items . map ( ( { key, label, to, external, icon : Icon , ariaCurrent } ) => {
117+ const common =
118+ "ui-btn-base ui-focus-ring group min-h-10 gap-2 rounded-xl border-white/10 bg-white/4 px-3 text-sm text-slate-300 shadow-[0_10px_28px_rgba(2,6,23,0.16)] hover:-translate-y-0.5 hover:shadow-[0_16px_34px_rgba(2,6,23,0.24)] focus-visible:-translate-y-0.5 focus-visible:outline-none focus-visible:shadow-[0_16px_34px_rgba(2,6,23,0.24)]" ;
119+ const classes = ariaCurrent
120+ ? `${ common } border-[#017FA4]/35 bg-[#017FA4]/12 text-white`
121+ : `${ common } hover:border-[#017FA4]/28 hover:bg-[#017FA4]/8 hover:text-slate-50` ;
122+ const iconClassName = ariaCurrent
123+ ? "text-[#6CCDBB]"
124+ : "text-slate-400 transition-colors group-hover:text-[#6CCDBB] group-focus-visible:text-[#6CCDBB]" ;
125+
126+ return external ? (
123127 < a
124128 key = { key }
125129 href = { to }
126130 target = "_blank"
127131 rel = "noreferrer"
128- className = "inline-flex items-center gap-2 rounded-lg border border-neutral-800 bg-neutral-900/60 px-3 py-2 text-sm text-neutral-300 transition-colors hover:bg-neutral-900 hover:text-white"
132+ className = { classes }
129133 aria-label = { label }
130134 title = { label }
131135 >
132- < Icon className = " h-5 w-5" />
136+ < Icon className = { ` h-5 w-5 ${ iconClassName } ` } />
133137 < span className = "hidden md:inline" > { label } </ span >
134138 </ a >
135139 ) : (
136140 < Link
137141 key = { key }
138142 to = { to }
139- className = { [
140- "inline-flex items-center gap-2 rounded-lg border border-neutral-800 px-3 py-2 text-sm transition-colors" ,
141- ariaCurrent
142- ? "bg-neutral-900 text-white"
143- : "bg-neutral-900/60 text-neutral-300 hover:bg-neutral-900 hover:text-white" ,
144- ] . join ( " " ) }
145- aria-label = { label }
146- title = { label }
143+ className = { classes }
144+ aria-label = { key === "home" ? "Hacker Tracker home" : label }
145+ title = { key === "home" ? "Hacker Tracker home" : label }
147146 aria-current = { ariaCurrent ? "page" : undefined }
148147 >
149- < Icon className = " h-5 w-5" />
150- < span className = "hidden md:inline" > { label } </ span >
148+ < Icon className = { ` h-5 w-5 ${ iconClassName } ` } />
149+ { key === "home" ? null : < span className = "hidden md:inline" > { label } </ span > }
151150 </ Link >
152- ) ,
153- ) }
151+ ) ;
152+ } ) }
154153 </ nav >
155154
156- { /* Mobile: Popover menu */ }
157155 < div className = "flex items-center gap-2 sm:hidden" >
158156 < Popover className = "relative" >
159157 { ( { open } ) => (
160158 < >
161159 < PopoverButton
162160 aria-label = { open ? "Close menu" : "Open menu" }
163161 className = { [
164- "inline-flex h-9 w-9 items-center justify-center rounded-md border border-neutral-700 bg-neutral-900 hover:bg-neutral-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/50 " ,
165- open ? "ring-1 ring-cyan-400/40 " : "" ,
162+ "ui-icon-btn ui-focus-ring h-10 min-h-10 w-10 min-w-10 rounded-xl border-white/10 bg-white/4 text-slate-300 shadow-[0_10px_24px_rgba(2,6,23,0.16)] focus-visible:outline-none " ,
163+ open ? "border-[#017FA4]/35 bg-[#017FA4]/12 text-[#6CCDBB] " : "" ,
166164 ] . join ( " " ) }
167165 >
168166 { open ? (
169- < XMarkIcon className = "h-5 w-5 text-neutral-200 " aria-hidden = "true" />
167+ < XMarkIcon className = "h-5 w-5" aria-hidden = "true" />
170168 ) : (
171- < Bars3Icon className = "h-5 w-5 text-neutral-200 " aria-hidden = "true" />
169+ < Bars3Icon className = "h-5 w-5" aria-hidden = "true" />
172170 ) }
173171 </ PopoverButton >
174172
@@ -181,7 +179,11 @@ export function ConferenceHeader({ conference }: { conference: HTConference }) {
181179 leaveFrom = "opacity-100 translate-y-0"
182180 leaveTo = "opacity-0 -translate-y-1"
183181 >
184- < PopoverPanel className = "absolute right-0 mt-2 w-56 origin-top-right rounded-lg border border-neutral-800 bg-neutral-950/95 p-2 shadow-lg backdrop-blur" >
182+ < PopoverPanel className = "absolute right-0 mt-2 w-60 origin-top-right rounded-[1.25rem] border border-white/12 bg-slate-950/98 p-2 shadow-[0_20px_48px_rgba(0,0,0,0.42)] backdrop-blur-md" >
183+ < span
184+ aria-hidden = "true"
185+ className = "pointer-events-none absolute inset-x-3 top-0 h-px bg-white/10"
186+ />
185187 < div className = "space-y-1 text-sm" >
186188 { items . map ( ( { key, label, to, external, icon : Icon , ariaCurrent } ) =>
187189 external ? (
@@ -191,9 +193,9 @@ export function ConferenceHeader({ conference }: { conference: HTConference }) {
191193 href = { to }
192194 target = "_blank"
193195 rel = "noreferrer"
194- className = "flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-neutral -300 transition-colors hover:bg-neutral-900 hover:text-white"
196+ className = "ui-focus-ring group flex w-full items-center gap-2 rounded-xl border border-transparent px-3 py-2.5 text-left text-slate -300 transition-colors hover:border-white/10 hover: bg-[#017FA4]/8 hover:text-white focus-visible:outline-none "
195197 >
196- < Icon className = "h-5 w-5" />
198+ < Icon className = "h-5 w-5 text-slate-400 transition-colors group-hover:text-[#6CCDBB] group-focus-visible:text-[#6CCDBB] " />
197199 { label }
198200 </ PopoverButton >
199201 ) : (
@@ -202,14 +204,20 @@ export function ConferenceHeader({ conference }: { conference: HTConference }) {
202204 as = { Link }
203205 to = { to }
204206 className = { [
205- "flex w-full items-center gap-2 rounded-md px-3 py-2 text-left transition-colors" ,
207+ "ui-focus-ring group flex w-full items-center gap-2 rounded-xl border px-3 py-2.5 text-left transition-colors focus-visible:outline-none " ,
206208 ariaCurrent
207- ? "bg-neutral-900 text-white"
208- : "text-neutral -300 hover:bg-neutral-900 hover:text-white" ,
209+ ? "border-[#017FA4]/35 bg-[#017FA4]/12 text-white"
210+ : "border-transparent text-slate -300 hover:border-white/10 hover: bg-[#017FA4]/8 hover:text-white" ,
209211 ] . join ( " " ) }
210212 aria-current = { ariaCurrent ? "page" : undefined }
211213 >
212- < Icon className = "h-5 w-5" />
214+ < Icon
215+ className = { `h-5 w-5 ${
216+ ariaCurrent
217+ ? "text-[#6CCDBB]"
218+ : "text-slate-400 transition-colors group-hover:text-[#6CCDBB] group-focus-visible:text-[#6CCDBB]"
219+ } `}
220+ />
213221 { label }
214222 </ PopoverButton >
215223 ) ,
0 commit comments