// Hero.jsx — cinematic full-bleed boutique-hotel hero with floating search.
const { useState: useStateHero, useEffect: useEffectHero } = React;
function HeroSearch({ onSearch }) {
const { SEATTLE_NEIGHBORHOODS, PROPERTY_TYPES } = window.SantirmaData;
const [where, setWhere] = useStateHero('All Seattle');
const [type, setType] = useStateHero('All');
const [budget, setBudget] = useStateHero('$2k – $4k');
const [whenOpen, setWhenOpen] = useStateHero(null); // 'where' | 'type' | 'budget' | null
const budgets = ['Any budget', 'Under $2k', '$2k – $3k', '$2k – $4k', '$3k – $5k', '$5k+'];
const Field = ({ label, value, options, onPick, openKey }) => {
const open = whenOpen === openKey;
return (
setWhenOpen(open ? null : openKey)}
style={{
width: '100%', textAlign: 'left',
background: 'transparent', border: 'none', cursor: 'pointer',
padding: '6px 0', display: 'flex', flexDirection: 'column', gap: 6,
fontFamily: 'var(--font-body)',
}}>
{label}
{value}
{open && (
{options.map(o => (
{ onPick(o); setWhenOpen(null); }}
style={{
width: '100%', textAlign: 'left',
background: o === value ? 'var(--color-stone)' : 'transparent',
border: 'none', borderRadius: 8, padding: '10px 12px',
fontFamily: 'var(--font-body)', fontSize: 14,
color: 'var(--color-midnight-navy)', cursor: 'pointer',
}}
onMouseEnter={e => { if (o !== value) e.currentTarget.style.background = 'rgba(230,226,219,0.5)'; }}
onMouseLeave={e => { if (o !== value) e.currentTarget.style.background = 'transparent'; }}>
{o}
))}
)}
);
};
return (
onSearch({ where, type, budget })}
style={{
background: 'var(--color-midnight-navy)', color: 'var(--color-cloud-white)',
border: 'none', borderRadius: 12, width: 54, height: 54,
display: 'flex', alignItems: 'center', justifyContent: 'center',
cursor: 'pointer', flexShrink: 0,
transition: 'background 280ms var(--ease-luxury)',
}}
onMouseEnter={e => e.currentTarget.style.background = 'var(--color-prestige-gold)'}
onMouseLeave={e => e.currentTarget.style.background = 'var(--color-midnight-navy)'}>
);
}
function Hero({ onSearch, headlineVariant = 'better-places', emphasis = 'gold' }) {
const { HERO_IMAGE } = window.SantirmaData;
const [loaded, setLoaded] = useStateHero(false);
useEffectHero(() => { const t = setTimeout(() => setLoaded(true), 60); return () => clearTimeout(t); }, []);
const headlines = {
'better-places': ['Better Places.', 'Smarter Solutions.', 'Stronger Futures.'],
'rental-properties': ['Rental Properties.', 'Creative Solutions.', 'Lasting Value.'],
'your-home': ['Your Home.', 'Our Solutions.', 'Better Living.'],
'modern-living': ['Modern Living.', 'Trusted Solutions.', "Seattle’s Finest."],
};
const lines = headlines[headlineVariant] || headlines['better-places'];
const accent = emphasis === 'gold' ? 'var(--color-prestige-gold)' : '#F7F7F7';
return (
{/* Background image with ken-burns */}
{/* Layered protection gradient */}
{/* Side caption — boutique-hotel index card */}
Established Seattle · Vol. 01
{/* Content */}
A curated collection of Seattle rentals
{lines.map((line, i) => (
{line}
))}
Quality rental homes and creative housing solutions across Seattle’s most loved
neighborhoods. Concierge service for renters. Honest stewardship for owners.
{/* Bottom row: search + trust */}
{[
['142', 'Homes available'],
['98%', 'Renewal rate'],
['4.9', 'Resident rating'],
].map(([k, l]) => (
))}
);
}
window.SantirmaHero = Hero;