function Hero() { const { t } = useI18n(); const slideTexts = t('hero.slides'); // Full-bleed cinematic scenes. Each is a layered composition: // a moody interior gradient backdrop + ambient glow + the lamp + scene caption. const slides = [ { id: 'product-silver', eyebrow: slideTexts[1].eyebrow, sceneTitle: slideTexts[1].title, sceneCaption: slideTexts[1].caption, bgImage: 'assets/hero/silver-product.jpeg', copyOnDark: true }, { id: 'sunset', eyebrow: slideTexts[2].eyebrow, sceneTitle: slideTexts[2].title, sceneCaption: slideTexts[2].caption, bgImage: 'assets/hero-amber-sunset-wide.png', copyOnDark: false }, { id: 'sunlike', eyebrow: slideTexts[3].eyebrow, sceneTitle: slideTexts[3].title, sceneCaption: slideTexts[3].caption, bg: 'radial-gradient(ellipse at 65% 40%, #FFFDF8 0%, #F4EEE4 35%, #D9CFBC 70%, #A8987A 100%)', streaks: 'linear-gradient(115deg, transparent 0%, transparent 35%, rgba(255,255,255,0.45) 50%, transparent 65%, transparent 100%)', glow: 'radial-gradient(circle at 65% 42%, rgba(255,255,255,0.95), rgba(244,238,228,0.4) 30%, transparent 60%)', lampFilter: 'saturate(0.4) brightness(1.08) hue-rotate(-12deg)', bgImage: 'assets/hero-sunlike-daylight-wide.png', copyOnDark: true }, { // 노을 이미지 — 요청에 따라 마지막 순서로 배치 id: 'amber-coast', eyebrow: slideTexts[0].eyebrow, sceneTitle: slideTexts[0].title, sceneCaption: slideTexts[0].caption, bgImage: 'assets/hero/hero-amber-coast.png', copyOnDark: true }]; const [idx, setIdx] = React.useState(0); React.useEffect(() => { const t = setInterval(() => setIdx((i) => (i + 1) % slides.length), 5600); return () => clearInterval(t); }, []); const slide = slides[idx]; const onDark = slide.copyOnDark; // Subtle Ken-Burns drift on each slide (re-keys per index) const kenBurnsKey = `kb-${idx}`; return (
{/* Full-bleed slide stack */} {slides.map((s, i) =>
{/* Photo backdrop OR layered gradient */} {s.bgImage ?
: <> {/* backdrop with slow zoom */}
{/* light streak overlay */}
{/* big amber/white halo behind lamp */}
{/* lamp render */} } {/* film grain on dark slides */} {s.copyOnDark &&
\")", mixBlendMode: 'overlay', opacity: 0.4 }} /> } {/* left-side darkening for copy legibility on light slides */} {!s.copyOnDark &&
} {s.copyOnDark &&
}
)} {/* CONTENT — overlaid */}

SOLADUO

{t('hero.subtitle')}
{/* Scene caption — moved below the title */}
{t('hero.tagline')}
{slide.sceneTitle}
{slide.sceneCaption}
{/* Slide indicator — dots with progress fill */}
{slides.map((s, i) => { const active = idx === i; const trackBg = onDark ? 'rgba(244,238,228,0.28)' : 'rgba(22,19,16,0.18)'; const fill = onDark ? 'var(--bone)' : 'var(--ink)'; return ( ); })} {String(idx + 1).padStart(2, '0')} / {String(slides.length).padStart(2, '0')}
); } function ctrlBtn(onDark) { return { width: 36, height: 36, padding: 0, background: 'transparent', border: '1px solid ' + (onDark ? 'rgba(244,238,228,0.4)' : 'rgba(22,19,16,0.3)'), color: onDark ? 'var(--bone)' : 'var(--ink)', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: 0, transition: 'background 240ms, border-color 240ms' }; } window.Hero = Hero;