/* ZEN SUSHI — core pages: Home, Menu, Reservas, Delivery. */ const { Button: B, Badge: Bd, Card: Cd, Eyebrow: Ey, KatanaDivider: KD, PriceTag, PromoSeal } = window.KAZUKIDesignSystem_63706c; const RES = window.KZ_DATA.RESTAURANT; const MENU = window.KZ_DATA.MENU; const seo = window.KZ_SEO; /* Default Japanese-food photos — drag & drop your own over any slot to replace. */ const PHOTOS = { hero: "https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=1400&q=80", missao: "https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=1200&q=80", destaques: [ "https://images.unsplash.com/photo-1600891964092-4316c288032e?w=1000&q=80", "https://images.unsplash.com/photo-1476124369491-e7addf5db371?w=1000&q=80", "https://images.unsplash.com/photo-1558030006-450675393462?w=1000&q=80", ], }; /* ============ HOME ============ */ function HomePage() { React.useEffect(() => { seo.track("home_view", { page: "home" }); }, []); const cta = (label, hash) => { seo.track("cta_click", { label, destino: hash }); location.hash = hash; }; const diferenciais = [ { t: "Cortes nobres", d: "Picanha, bife ancho e filé mignon selecionados, finalizados na brasa." }, { t: "Risotos artesanais", d: "Arroz arbóreo no ponto all'onda, do camarão ao porcini com trufas." }, { t: "Carta de vinhos", d: "Seleção do sommelier para harmonizar cada prato da casa." }, { t: "Ambiente premium", d: "A elegância do aço samurai traduzida em uma mesa contemporânea." }, ]; return (
Nossa essência

Nossa Missão

Servir alta gastronomia com a disciplina e a honra de um samurai — do primeiro corte ao último brinde.

No ZEN SUSHI, cada prato é uma lâmina afiada: precisão na técnica, respeito ao ingrediente e uma apresentação que impõe presença. Acreditamos que comer bem em Cotia não deveria exigir uma viagem à capital — por isso trouxemos cortes nobres, frutos do mar e uma confeitaria artesanal para o coração da cidade.

cta("Conheça o cardápio", "#/menu")}>Conheça o cardápio
O que nos torna únicos

Diferenciais da casa

{diferenciais.map((d) => (

{d.t}

{d.d}

))}
Mais pedidos

Destaques do chef

{MENU.find((s) => s.id === "principais").itens.filter((i) => i.destaque).map((it, fi) => (

{it.nome}

{it.desc}

))}
cta("Ver cardápio completo", "#/menu")}>Ver cardápio completo

Pronto para uma experiência inesquecível?

Reserve sua mesa ou peça em casa pelos principais aplicativos de delivery de Cotia.

cta("Reservar agora", "#/reservas")}>Reservar agora cta("Peça delivery", "#/delivery")}>Peça delivery
); } /* Pequenos selos de dieta exibidos direto no nome do prato. */ function DietIcons({ tags }) { const T = window.KZ_DATA.TAGS; const map = { [T.VEGANO]: { ab: "VG", cls: "is-vegan", title: "Vegano" }, [T.VEGETARIANO]: { ab: "V", cls: "is-veg", title: "Vegetariano" }, [T.SEMGLUTEN]: { ab: "GF", cls: "is-gf", title: "Sem Glúten" }, [T.PICANTE]: { ab: "🌶", cls: "is-spicy", title: "Picante" }, }; const shown = (tags || []).filter((t) => map[t]); if (!shown.length) return null; return ( map[t].title).join(", ")}> {shown.map((t) => ( {map[t].ab} ))} ); } /* ============ MENU ============ */ function MenuPage() { const [active, setActive] = React.useState(MENU[0].id); const [expanded, setExpanded] = React.useState(null); const lockUntil = React.useRef(0); // ignora scroll-spy logo após um clique const goCat = (id) => { setActive(id); lockUntil.current = Date.now() + 900; // trava o spy durante a rolagem suave const sec = MENU.find((s) => s.id === id); seo.track("menu_category_view", { categoria: sec.nome }); const el = document.getElementById("cat-" + id); if (el) { const top = el.getBoundingClientRect().top + window.scrollY - 120; if (window.__smooth) window.__smooth.to(top); else window.scrollTo({ top, behavior: "smooth" }); } }; // Scroll spy: ativa a categoria conforme a seção entra na área de leitura. React.useEffect(() => { const onScroll = () => { if (Date.now() < lockUntil.current) return; const line = 160; // linha de referência abaixo da navbar let current = MENU[0].id; for (const sec of MENU) { const el = document.getElementById("cat-" + sec.id); if (el && el.getBoundingClientRect().top - line <= 0) current = sec.id; } setActive((prev) => (prev === current ? prev : current)); // mantém o chip ativo visível na barra rolável (mobile) const btn = document.querySelector('.kz-catnav-btn[data-cat="' + current + '"]'); const nav = document.querySelector(".kz-catnav"); if (btn && nav && nav.scrollWidth > nav.clientWidth) { const target = btn.offsetLeft - nav.clientWidth / 2 + btn.offsetWidth / 2; nav.scrollTo({ left: target, behavior: "smooth" }); } }; window.addEventListener("scroll", onScroll, { passive: true }); if (window.lenis) window.lenis.on("scroll", onScroll); onScroll(); return () => { window.removeEventListener("scroll", onScroll); if (window.lenis && window.lenis.off) window.lenis.off("scroll", onScroll); }; }, []); const toggleItem = (key, nome) => { setExpanded((e) => { const next = e === key ? null : key; if (next) seo.track("item_details_expand", { prato: nome }); return next; }); }; return (
V Vegetariano VG Vegano GF Sem Glúten 🌶 Picante
{MENU.map((sec) => (
{sec.kw}

{sec.nome}

    {sec.itens.map((it, idx) => { const key = sec.id + "-" + idx; const isOpen = expanded === key; return (
  • {isOpen && (

    Informações dietéticas

    {(it.tags || []).map((t) => ( {t} ))} {(!it.tags || !it.tags.length) && Consulte nossa equipe sobre restrições alimentares.}
    )}
  • ); })}
))}
); } /* ============ RESERVAS ============ */ function ReservasPage() { const [form, setForm] = React.useState({ nome: "", telefone: "", data: "", hora: "19:30", pessoas: "2", obs: "" }); const [started, setStarted] = React.useState(false); const [done, setDone] = React.useState(false); const [errors, setErrors] = React.useState({}); const onFocusOnce = () => { if (!started) { setStarted(true); seo.track("form_start", { form: "reserva" }); } }; const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value })); const validate = () => { const er = {}; if (form.nome.trim().length < 2) er.nome = "Informe seu nome."; if (form.telefone.replace(/\D/g, "").length < 10) er.telefone = "Telefone inválido."; if (!form.data) er.data = "Escolha uma data."; setErrors(er); return Object.keys(er).length === 0; }; const buildMsg = () => encodeURIComponent( `Olá! Gostaria de reservar uma mesa no ZEN SUSHI.\n\n` + `Nome: ${form.nome || "—"}\n` + `Data: ${form.data || "—"} às ${form.hora}\n` + `Pessoas: ${form.pessoas}` + (form.obs ? `\nObservações: ${form.obs}` : "") ); const openWhatsApp = (origem) => { seo.track("whatsapp_api_click", { origem }); window.open(`https://wa.me/${RES.whatsapp}?text=${buildMsg()}`, "_blank", "noopener"); }; const submit = (e) => { e.preventDefault(); if (!validate()) return; seo.track("form_success", { form: "reserva", pessoas: form.pessoas }); setDone(true); openWhatsApp("confirmar_reserva"); }; const whatsapp = () => openWhatsApp("botao_whatsapp"); const regras = [ "Tolerância de 15 minutos após o horário reservado.", "Mesas para mais de 8 pessoas mediante consulta.", "Reservas para o mesmo dia somente por WhatsApp.", "Pets são bem-vindos na área externa.", ]; const horarios = ["18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00"]; return (

Como Reservar

Escolha a data, o horário e o número de pessoas. Confirmamos sua reserva em poucos minutos no horário de atendimento.

{done ? (

Reserva enviada, {form.nome.split(" ")[0]}!

Abrimos o WhatsApp com os dados da sua reserva — é só enviar a mensagem para confirmarmos. Para {form.pessoas} pessoa(s) em {form.data} às {form.hora}.

Abrir WhatsApp novamente
) : (
{errors.nome && {errors.nome}}
{errors.telefone && {errors.telefone}}
{errors.data && {errors.data}}

Horários disponíveis

{horarios.map((h) => ( ))}