// Store chrome — white/premium theme, image PhotoSlot, scroll Reveal, header/footer const { useState: useStateC, useEffect: useEffectC, useRef: useRefC } = React; function Btn({ children, variant = "primary", onClick, full, small, as = "button", href }) { const base = { fontFamily:"var(--font-body)", fontWeight:700, cursor:"pointer", border:0, borderRadius:999, padding: small ? "10px 20px" : "15px 30px", fontSize: small ? 13 : 15, width: full ? "100%" : "auto", transition:"all .2s ease", display:"inline-flex", alignItems:"center", justifyContent:"center", gap:9, textDecoration:"none", letterSpacing:".02em" }; const variants = { primary: { ...base, background:"var(--primary)", color:"#fff", boxShadow:"0 10px 26px rgba(229,35,31,.26)" }, ghost: { ...base, background:"transparent", color:"var(--primary)", border:"2px solid var(--primary)" }, dark: { ...base, background:"var(--charcoal-black)", color:"var(--fg-on-dark)" }, gold: { ...base, background:"var(--festival-yellow)", color:"var(--sauce-brown)" }, line: { ...base, background:"#fff", color:"var(--ink-900)", border:"1.5px solid var(--line-300)" }, outlineLight: { ...base, background:"rgba(255,255,255,.1)", color:"#fff", border:"1.5px solid rgba(255,255,255,.6)", backdropFilter:"blur(4px)" }, }; const [h, setH] = useStateC(false); const hov = h ? (variant==="primary" ? { background:"var(--primary-hover)", transform:"translateY(-2px)", boxShadow:"0 14px 30px rgba(229,35,31,.34)" } : variant==="gold" ? { transform:"translateY(-2px)", boxShadow:"0 12px 24px rgba(247,183,49,.4)" } : variant==="outlineLight" ? { background:"rgba(255,255,255,.2)" } : { transform:"translateY(-2px)", borderColor:"var(--primary)", color:"var(--primary)" }) : {}; const Tag = as; return setH(true)} onMouseLeave={()=>setH(false)}>{children}; } // Photo: real image when src given, else warm gradient placeholder function PhotoSlot({ src, label, h = 220, round = 16, tone = "red", style, zoom, children, alt, onClick }) { const grads = { red:"linear-gradient(135deg,#E5231F,#D9892B)", sauce:"linear-gradient(135deg,#5A2B18,#E5231F)", gold:"linear-gradient(135deg,#D9892B,#F7B731)", char:"linear-gradient(135deg,#2A2522,#5A2B18)", }; return (
{src ? {alt||label||""} :
} {children} {label && {label}}
); } // Scroll-reveal wrapper function Reveal({ children, style, delay = 0, y = 26 }) { const ref = useRefC(null); const [vis, setVis] = useStateC(false); useEffectC(() => { const el = ref.current; if (!el) return; if (window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches) { setVis(true); return; } const o = new IntersectionObserver((es) => es.forEach(e => { if (e.isIntersecting) { setVis(true); o.disconnect(); } }), { threshold:.12, rootMargin:"0px 0px -8% 0px" }); o.observe(el); return () => o.disconnect(); }, []); return
{children}
; } function Kicker({ en, jp, light, center, sub }) { return (
{en}

{jp}

{sub &&

{sub}

}
); } function DemoBar({ lang, setLang }) { return (
ご提案に戻る PREMIUM ¥150,000 AI検索対応 (AEO) 店舗サイト プレビュー
); } function Header({ t, lang, setLang, cartCount, onCart, onReserve }) { const [scr, setScr] = useStateC(false); useEffectC(() => { const f = () => setScr(window.scrollY > 40); window.addEventListener("scroll", f, { passive:true }); f(); return () => window.removeEventListener("scroll", f); }, []); const links = [["menu",t.navMenu],["craft",t.navCraft],["plan",t.navPlan],["news",t.navNews],["shops",t.navShops]]; const go = (id) => { const el=document.getElementById(id); if(el) window.scrollTo({top: el.offsetTop-58, behavior:"smooth"}); }; return (
window.scrollTo({top:0,behavior:"smooth"})}>
たこ
たこスタ
); } function Footer({ t }) { return ( ); } Object.assign(window, { Btn, PhotoSlot, Reveal, Kicker, DemoBar, Header, Footer });