// Store sections — image-led, white, interactive
const { useState: useStateS } = React;
const IMG = window.STORE.img;
function Hero({ t, lang, onReserve }) {
const go = (id) => { const el=document.getElementById(id); if(el) window.scrollTo({top: el.offsetTop-58, behavior:"smooth"}); };
return (
{t.heroKicker}
{t.heroTitle[0]}
{t.heroTitle[1]}
{t.heroSub}
{t.heroCta1}
go("menu")}>{t.heroCta2}
);
}
function Marquee() {
const words = ["ふわとろ TAKOYAKI","おでん ODEN","ハイボール HIGHBALL","タコパ食べ放題","名古屋・栄/名駅","SINCE 1948"];
const row = [...words, ...words];
return (
{row.map((w,i)=>(
{w}
))}
);
}
function Craft({ t, lang }) {
const cards = [["flame",t.craft1t,t.craft1b],["star",t.craft2t,t.craft2b],["clock",t.craft3t,t.craft3b]];
return (
{t.craftBody}
{cards.map(([ic,h,b],i)=>(
))}
);
}
function Signature({ t, lang, onLightbox }) {
const items = [
{ src:IMG.takoyaki, h:t.sig1t, b:t.sig1b, big:true },
{ src:IMG.takopa, h:t.sig2t, b:t.sig2b },
{ src:IMG.oden, h:t.sig3t, b:t.sig3b },
{ src:IMG.highball, h:t.sig4t, b:t.sig4b },
];
return (
{items.map((it,i)=>(
onLightbox(it.src)}
style={{ position:"relative", borderRadius:18, overflow:"hidden", cursor:"pointer", height: it.big?420:420, boxShadow:"var(--shadow-card)" }}>
))}
);
}
function PlanBanner({ t, onReserve }) {
return (
{t.plan}
{t.planTitle}
{t.planSub}
{t.planPrice}
{t.planUnit}
{t.planCta}
);
}
function Gallery({ t, lang, onLightbox }) {
const imgs = IMG.g;
const spans = ["span 6","span 3","span 3","span 4","span 4","span 4","span 6","span 6"];
return (
{imgs.map((src,i)=>(
onLightbox(src)} style={{ position:"relative", borderRadius:14, overflow:"hidden", cursor:"pointer", height: spans[i]==="span 6"?260:200, boxShadow:"var(--shadow-card)" }}>
))}
);
}
function Atmosphere({ t, lang, onReserve }) {
const stats = [t.atmo1,t.atmo2,t.atmo3,t.atmo4];
return (
{t.atmoBody}
{stats.map((s,i)=>(
{s}
))}
{t.visitCta}
);
}
function Shops({ t, lang, onReserve }) {
const shops = window.STORE.shops;
return (
{shops.map((s,idx)=>(
{s.name[lang]}
{s.addr[lang]}
{t.reserveHere}
{window.STORE.tel}
))}
);
}
function Info({ icon, label, value, latin }) {
return (
);
}
function Quote({ lang }) {
return (
LIVE EXPERIENCE
{lang==="ja" ? <>味は、ライブで決まる。
鉄板を囲む、名古屋の夜。> : <>Flavor comes alive.
A Nagoya night around the iron plate.>}
);
}
function News({ t, lang }) {
const news = window.STORE.news;
const feat = news[0];
const rest = news.slice(1);
const isNew = (n) => n.cat.en === "New";
return (
{feat.cat[lang]}
{feat.date}
{feat.title[lang]}
{feat.body[lang]}
{rest.map((n,i)=>(
{n.title[lang]}
{n.body[lang]}
))}
);
}
function Lightbox({ src, onClose, t }) {
if (!src) return null;
return (

e.stopPropagation()} style={{ maxWidth:"min(900px,94vw)", maxHeight:"86vh", borderRadius:14, boxShadow:"0 30px 80px rgba(0,0,0,.6)", objectFit:"contain" }} />
);
}
function ReserveModal({ open, onClose, t, lang }) {
const [done, setDone] = useStateS(false);
const [shop, setShop] = useStateS("sakae");
const [guests, setGuests] = useStateS(2);
const [time, setTime] = useStateS("19:00");
const times = ["17:30","18:00","18:30","19:00","19:30","20:00","20:30","21:00","21:30"];
if (!open) return null;
return (
e.stopPropagation()} style={{ background:"#fff", borderRadius:20, width:"min(520px,96vw)", maxHeight:"92vh", overflowY:"auto", boxShadow:"var(--shadow-hover)" }}>
{t.reserveKicker}
{t.reserveTitle}
{done ? (
{t.rDone}
{t.rDoneSub}
{ setDone(false); onClose(); }}>{t.close}
) : (
{window.STORE.shops.map(s=>(
))}
{times.map(tm=>(
))}
setDone(true)}>{t.rSubmit}
)}
);
}
const inS = { width:"100%", boxSizing:"border-box", fontFamily:"var(--font-body)", fontSize:15, padding:"11px 14px", border:"1.5px solid var(--line-300)", borderRadius:12, background:"#fff", color:"var(--ink-900)" };
const qtyBtn = { width:28, height:28, borderRadius:"50%", border:"1.5px solid var(--line-300)", background:"#fff", cursor:"pointer", display:"flex", alignItems:"center", justifyContent:"center", color:"var(--ink-700)" };
function FieldS({ label, children }) {
return (
{children}
);
}
Object.assign(window, { Hero, Marquee, Craft, Signature, PlanBanner, Gallery, Atmosphere, Shops, Quote, News, Lightbox, ReserveModal });