/* REVO JURIS — Header, mobile drawer, video hero, stats (single-language) */ function Brand({ footer }) { const onDark = footer; const src = onDark ? 'assets/logomark-inverse.svg' : 'assets/logomark.svg'; return ( REVO JURIS 億誠國際法律顧問 REVO JURIS Consulting Limited 億誠國際法律顧問有限公司 ); } function Header({ onEnquire, lang, setLang }) { const tx = useTx(); const [scrolled, setScrolled] = React.useState(false); const [drawer, setDrawer] = React.useState(false); React.useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 12); window.addEventListener('scroll', onScroll); return () => window.removeEventListener('scroll', onScroll); }, []); const cjk = lang === 'ZH' ? ' cjk' : ''; return (
{tx(UI.hotShort)} · +852 5715 5628 {tx(UI.langs)}
{NAV_LINKS.map(([t, h]) => setDrawer(false)}>{tx(t)})}
); } function Hero({ onEnquire, onHotline, onFees }) { const lang = useLang(); const tx = useTx(); const cjk = lang === 'ZH' ? ' cjk' : ''; const h1 = tx(HERO.h1); const videoRef = React.useRef(null); const [videoOk, setVideoOk] = React.useState(false); React.useEffect(() => { const v = videoRef.current; if (!v) return; v.muted = true; v.defaultMuted = true; const tryPlay = () => { const p = v.play(); if (p) p.catch(() => {}); }; const onData = () => { if (v.videoWidth > 0) setVideoOk(true); tryPlay(); }; tryPlay(); v.addEventListener('loadeddata', onData); v.addEventListener('canplay', onData); return () => { v.removeEventListener('loadeddata', onData); v.removeEventListener('canplay', onData); }; }, []); const cityH = [42, 64, 52, 80, 60, 92, 50, 72, 58, 86, 46, 70, 56, 78, 48, 66]; return (
{/* Cinematic fallback scene — always present behind the banner */}
); } function Stats() { const lang = useLang(); const tx = useTx(); const cjk = lang === 'ZH' ? ' cjk' : ''; return (
{STATS.map(([n, label], i) => (
{tx(n)} {tx(label)}
))}
); } Object.assign(window, { Header, Hero, Stats, Brand });