Add seamless hero banner to Infrastructure page

Fades the banner image into the page background using a mask gradient
and radial vignette, matching the borderless blend technique from Glance.
This commit is contained in:
Claude 2026-06-18 16:26:10 +00:00
parent ec04f568dd
commit 8f2962eb13
No known key found for this signature in database

View file

@ -117,46 +117,67 @@ export default function Infrastructure() {
return ( return (
<> <>
{/* Sub-tabs + Add Resource */} {/* Hero banner — faded seamlessly into the page background, no hard edges */}
<div className="flex items-center justify-between shrink-0"> <div className="relative w-full shrink-0 overflow-hidden" style={{ height: '140px', margin: '-16px -24px 0 -24px' }}>
<div className="flex items-center gap-1 overflow-x-auto" style={{ scrollbarWidth: 'none' }}> <img
{subTabs.map((tab) => { src="/archnest-hero-banner.png"
const active = tab === activeTab alt=""
return ( className="absolute inset-0 h-full w-full"
<button
key={tab}
onClick={() => setActiveTab(tab)}
className="cursor-pointer bg-transparent border-none transition-colors whitespace-nowrap"
style={{
fontSize: '12px',
fontWeight: 500,
padding: '8px 14px',
borderRadius: '8px',
color: active ? '#C8A434' : '#7A7D85',
backgroundColor: active ? 'rgba(200,164,52,0.1)' : 'transparent',
}}
>
{tab}
</button>
)
})}
</div>
<button
className="flex items-center gap-2 cursor-pointer transition-colors whitespace-nowrap"
style={{ style={{
fontSize: '12px', objectFit: 'cover',
fontWeight: 600, objectPosition: 'center 30%',
color: '#0A0B0D', maskImage: 'linear-gradient(to bottom, transparent 0%, black 25%, black 55%, transparent 100%)',
backgroundColor: '#C8A434', WebkitMaskImage: 'linear-gradient(to bottom, transparent 0%, black 25%, black 55%, transparent 100%)',
border: 'none',
borderRadius: '8px',
padding: '9px 16px',
boxShadow: '0 0 14px rgba(200,164,52,0.2)',
}} }}
> />
<Plus size={14} /> <div
Add Resource className="pointer-events-none absolute inset-0"
</button> style={{
background: 'radial-gradient(ellipse 70% 100% at center, transparent 40%, var(--color-page) 100%)',
}}
/>
{/* Sub-tabs + Add Resource, overlaid on the banner */}
<div className="absolute bottom-0 left-0 right-0 z-10 flex items-center justify-between" style={{ padding: '0 24px 12px 24px' }}>
<div className="flex items-center gap-1 overflow-x-auto" style={{ scrollbarWidth: 'none' }}>
{subTabs.map((tab) => {
const active = tab === activeTab
return (
<button
key={tab}
onClick={() => setActiveTab(tab)}
className="cursor-pointer bg-transparent border-none transition-colors whitespace-nowrap"
style={{
fontSize: '12px',
fontWeight: 500,
padding: '8px 14px',
borderRadius: '8px',
color: active ? '#C8A434' : '#7A7D85',
backgroundColor: active ? 'rgba(200,164,52,0.1)' : 'transparent',
}}
>
{tab}
</button>
)
})}
</div>
<button
className="flex items-center gap-2 cursor-pointer transition-colors whitespace-nowrap"
style={{
fontSize: '12px',
fontWeight: 600,
color: '#0A0B0D',
backgroundColor: '#C8A434',
border: 'none',
borderRadius: '8px',
padding: '9px 16px',
boxShadow: '0 0 14px rgba(200,164,52,0.2)',
}}
>
<Plus size={14} />
Add Resource
</button>
</div>
</div> </div>
{/* Status Cards */} {/* Status Cards */}