@@ -22,31 +22,49 @@ interface HeaderProps {
22
22
export default function Header ( { sort, setSort, query, setQuery } : HeaderProps ) {
23
23
24
24
return (
25
- < header className = "sticky top-0 z-40 backdrop-blur-md bg-neutral-900/70 border-b border-neutral-800/60" >
26
- < div className = "mx-auto max-w-6xl flex items-center justify-between gap-4 px-4 sm:px-6 h-16" >
27
-
28
- { /* title */ }
29
- < h1 className = "text-lg md:text-xl xl:text-2xl font-bold tracking-wide whitespace-nowrap select-none min-w-0" >
30
- Jacob Robbins’ < span className = "font-light" > Skybox Library</ span >
25
+ < header className = "sticky top-0 z-40 bg-gradient-to-r from-neutral-900/95 via-neutral-900/90 to-neutral-900/95 border-b border-neutral-800/50 backdrop-blur-sm" >
26
+ < div className = "mx-auto max-w-[1800px] flex items-center justify-between gap-4 px-4 sm:px-6 h-16" >
27
+ { /* Clean title with gradient */ }
28
+ < div className = "group" >
29
+ < h1 className = "text-xl md:text-2xl font-bold tracking-tight whitespace-nowrap" >
30
+ < span className = "bg-gradient-to-r from-blue-400 via-purple-400 to-purple-500 bg-clip-text text-transparent" >
31
+ Jacob Robbins' Skybox Library</ span >
31
32
</ h1 >
33
+ </ div >
32
34
33
- { /* right-side cluster */ }
34
- < div className = "flex justify-end items-center gap-2 sm:gap-3" >
35
- { /* Search + Sort: Desktop (>= sm) */ }
36
- < div className = "hidden sm:flex items-center gap-3" >
37
- < input
38
- value = { query }
39
- onChange = { ( e ) => setQuery ( e . target . value ) }
40
- placeholder = "Search…"
41
- className = "
42
- flex-auto min-w-0 max-w-xs
43
- rounded-md bg-neutral-800/70
44
- px-3 py-1.5 text-sm placeholder:text-neutral-500
45
- focus:outline-none focus:ring-2 focus:ring-amber-500
46
- "
47
- />
35
+ { /* Right-side cluster with enhanced search */ }
36
+ < div className = "flex justify-end items-center gap-2 sm:gap-4" >
37
+ { /* Enhanced Search + Sort */ }
38
+ < div className = "hidden sm:flex items-center gap-3 bg-neutral-800/30 backdrop-blur-sm rounded-xl p-1 border border-neutral-800/50" >
39
+ < div className = "relative flex-1 max-w-md" >
40
+ < div className = "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3" >
41
+ < svg className = "h-4 w-4 text-neutral-500" fill = "none" viewBox = "0 0 24 24" stroke = "currentColor" >
42
+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
43
+ </ svg >
44
+ </ div >
45
+ < input
46
+ value = { query }
47
+ onChange = { ( e ) => setQuery ( e . target . value ) }
48
+ placeholder = "Search skyboxes…"
49
+ className = "block w-full rounded-lg border-0 bg-neutral-800/20 py-2.5 pl-10 pr-4 text-sm text-neutral-200 placeholder-neutral-500 ring-1 ring-inset ring-transparent focus:ring-2 focus:ring-blue-500/50 focus:outline-none transition-all duration-200 hover:bg-neutral-800/40"
50
+ />
51
+ { query && (
52
+ < button
53
+ onClick = { ( ) => setQuery ( '' ) }
54
+ className = "absolute inset-y-0 right-0 flex items-center pr-3 text-neutral-500 hover:text-neutral-300 transition-colors"
55
+ >
56
+ < svg className = "h-4 w-4" fill = "none" viewBox = "0 0 24 24" stroke = "currentColor" >
57
+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = { 2 } d = "M6 18L18 6M6 6l12 12" />
58
+ </ svg >
59
+ </ button >
60
+ ) }
61
+ </ div >
62
+
63
+ < div className = "h-6 w-px bg-neutral-700/50" />
64
+
65
+ { /* Sort */ }
48
66
{ /* SortSelect visible md and up */ }
49
- < div className = "hidden md:block" >
67
+ < div className = "hidden md:block w-48 " >
50
68
< SortSelect value = { sort } onChange = { setSort } />
51
69
</ div >
52
70
</ div >
0 commit comments