/* global React, ReactDOM */
const { useState, useEffect, useRef } = React;

const TWEAK_DEFAULTS = {
  palette: 'warm', showHazel: true, showFab: true,
  whatsapp: 'https://wa.me/5511915273680',
  instagram: 'https://www.instagram.com/pulodogato.doces/',
};

/* ── Icons ── */
const IconWA = ({ size = 18 }) => (
  <svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
    <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z"/>
  </svg>
);
const IconIG = ({ size = 16 }) => (
  <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.7">
    <rect x="3" y="3" width="18" height="18" rx="5"/>
    <circle cx="12" cy="12" r="4"/>
    <circle cx="17.5" cy="6.5" r="1" fill="currentColor" stroke="none"/>
  </svg>
);
const IconFB = ({ size = 16 }) => (
  <svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
    <path d="M13.5 21v-7.5h2.5l.4-3H13.5V8.7c0-.9.2-1.5 1.5-1.5h1.6V4.5c-.3 0-1.3-.1-2.4-.1-2.3 0-3.8 1.4-3.8 3.9v2.3H8v3h2.4V21h3.1z"/>
  </svg>
);

/* ── Carousel component ── */
function Carousel({ id, name, tag, holiday, images }) {
  const SLOTS = images ? images.length : 4;
  const [cur, setCur] = useState(0);
  const timerRef = useRef(null);

  const startTimer = () => {
    clearInterval(timerRef.current);
    timerRef.current = setInterval(() => setCur(c => (c + 1) % SLOTS), 3500);
  };
  useEffect(() => { startTimer(); return () => clearInterval(timerRef.current); }, []);
  const go = dir => { setCur(c => (c + dir + SLOTS) % SLOTS); startTimer(); };

  return (
    <div className="carousel">
      {images
        ? images.map((src, i) => (
            <div key={i} className={'car-slide ' + (i === cur ? 'active' : '')}>
              <img src={src} alt={name + ' ' + (i+1)} style={{width:'100%',height:'100%',objectFit:'cover',display:'block'}} />
            </div>
          ))
        : Array.from({ length: SLOTS }, (_, i) => (
            <div key={i} className={'car-slide ' + (i === cur ? 'active' : '')}>
              <image-slot id={id + '-p' + i} shape="rect" fit="cover"
                placeholder={'Foto ' + (i+1) + (i === 0 ? ': ' + name : '')}></image-slot>
            </div>
          ))
      }
      <span className={'car-tag' + (holiday ? ' holiday' : '')}>{tag}</span>
      <button className="car-btn car-prev" onClick={() => go(-1)} aria-label="Anterior">‹</button>
      <button className="car-btn car-next" onClick={() => go(1)} aria-label="Próxima">›</button>
      <div className="car-dots">
        {Array.from({ length: SLOTS }, (_, i) => (
          <button key={i} className={'car-dot ' + (i === cur ? 'active' : '')}
            onClick={() => { setCur(i); startTimer(); }} aria-label={'Foto ' + (i+1)} />
        ))}
      </div>
    </div>
  );
}

/* ── Header ── */
const NAV_LINKS = [
  ['#historia', 'História'],
  ['#producao', 'Produção'],
  ['#produtos', 'Produtos'],
  ['#parceiros', 'Parceiros'],
  ['#faq', 'FAQ'],
];
function Header({ t, scrolled }) {
  const [menuOpen, setMenuOpen] = useState(false);
  useEffect(() => {
    document.body.style.overflow = menuOpen ? 'hidden' : '';
    return () => { document.body.style.overflow = ''; };
  }, [menuOpen]);
  const close = () => setMenuOpen(false);
  return (
    <header className={'header ' + (scrolled ? 'scrolled' : '') + (menuOpen ? ' menu-open' : '')}>
      <a href="#top" className="logo-wrap" aria-label="Pulo do Gato Doces" onClick={close}>
        <img src="logo-icon-choc.svg" alt="" className="logo-hazel" />
      </a>
      <nav className="nav">
        <div className="nav-links">
          {NAV_LINKS.map(([href, label]) => <a key={href} href={href}>{label}</a>)}
        </div>
        <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-cta">
          Faça sua encomenda <span className="arr"></span>
        </a>
        <button
          className="nav-burger"
          aria-label={menuOpen ? 'Fechar menu' : 'Abrir menu'}
          aria-expanded={menuOpen}
          onClick={() => setMenuOpen(o => !o)}
        >
          <span></span><span></span><span></span>
        </button>
      </nav>
      <div className="mobile-menu" onClick={close}>
        <nav className="mobile-menu-inner">
          {NAV_LINKS.map(([href, label]) => <a key={href} href={href}>{label}</a>)}
          <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-wa mobile-wa">
            <IconWA /> Faça sua encomenda
          </a>
        </nav>
      </div>
    </header>
  );
}

/* ── Hero ── */
function Hero({ t }) {
  return (
    <section id="top" className="hero">
      <div className="hero-bg">
        <image-slot id="hero-main" shape="rect" fit="cover" placeholder="Foto principal — cookies na pedra de mármore"></image-slot>
      </div>
      <div className="hero-overlay"></div>
      <div className="hero-content">
        <p className="disp h1">Receita gringa,<br/>alma brasileira.</p>
        <div className="hero-sub">
          <span className="hero-tag">Esse é o Pulo do Gato.</span>
          <div className="hero-ctas">
            <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-wa">
              <IconWA /> Fale conosco
            </a>
            <a href="#produtos" className="btn btn-white">
              Ver produtos <span className="arr"></span>
            </a>
          </div>
        </div>
      </div>
      <img src="logo-hero-wordmark.svg" alt="Pulo do Gato Doces" className="hero-logo" />
      <CookieRotator />
    </section>
  );
}

/* ── Strip ── */
function Strip() {
  const items = ['Manteiga de primeira','Chocolate Sicao','Cacau 100%','Feitos à mão','Jeitinho mineiro','Tradição americana'];
  const inner = items.flatMap((it, i) => [
    <span key={'i'+i} className="strip-item">{it}</span>,
    <span key={'s'+i} className="strip-sep" aria-hidden="true"></span>
  ]);
  return (
    <div className="strip" aria-hidden="true">
      <div className="strip-track">{inner}{inner}{inner}</div>
    </div>
  );
}

/* ── História ── */
function Historia({ t }) {
  return (
    <section id="historia">
      <div className="wrap">
        <div className="story-grid">
          <div className="reveal story-text-wrap">
            <img src="us-flags.svg" className="us-flags-accent" alt="" aria-hidden="true" />
            <span className="eyebrow">01 — Nossa história</span>
            <h2 className="disp h2" style={{ margin: '14px 0 24px' }}>
              Um encontro que tinha tudo para dar certo.
            </h2>
            <div className="prose">
              <p>A Pulo do Gato Doces é o resultado de um encontro que tinha tudo para dar certo: o <strong>jeitinho mineiro</strong> com a autêntica tradição americana.</p>
              <p>Eu sou o <strong>André</strong>, mineirinho de coração, formado em marketing e apaixonado por criar conexões. Cuido para que nossos doces cheguem até você e para que nossas parcerias em Atibaia sejam tão boas quanto nossas fornadas.</p>
              <p>A alma da nossa cozinha é a <strong>Anna</strong>. Ela é americana e trouxe dos Estados Unidos muito mais do que malas: trouxe as receitas reais da família dela — aquelas que fazem a casa inteira ficar com cheirinho de baunilha e chocolate.</p>
              <p>Aqui, não existe <em>"tipo americano"</em> — o que você prova é a tradição real que a Anna viveu a vida toda.</p>
            </div>
          </div>
          <div className="story-portraits reveal">
            <div className="portrait">
              <image-slot id="port-andre" shape="rect" fit="cover" placeholder="Foto do André"></image-slot>
              <span className="label">André</span>
            </div>
            <div className="portrait">
              <image-slot id="port-anna" shape="rect" fit="cover" placeholder="Foto da Anna"></image-slot>
              <span className="label">Anna</span>
            </div>
          </div>
        </div>
        {t.showHazel && (
          <div className="hazel reveal">
            <div className="hazel-photo">
              <image-slot id="hazel-photo" shape="rect" fit="cover" placeholder="Foto da Hazel 🐾"></image-slot>
            </div>
            <div>
              <span className="eyebrow" style={{ marginBottom: 8, display: 'inline-flex' }}>Por que "Pulo do Gato"?</span>
              <h3 className="disp h3">O segredo que faz toda a diferença.</h3>
              <div className="prose" style={{ marginTop: 10 }}>
                <p>"Pulo do gato" é aquele truque especial que muda tudo — e o nosso é simples: receitas americanas de verdade, fiéis às origens da Anna, sem atalhos. O nome ainda ganhou rosto e bigodes: a <strong>Hazel</strong>, nossa gata, que virou mascote e estrela do logo.</p>
              </div>
              <a href={t.instagram} target="_blank" rel="noopener" className="btn btn-ghost" style={{ marginTop: 16 }}>
                <IconIG /> Conheça nosso Instagram
              </a>
            </div>
          </div>
        )}
      </div>
    </section>
  );
}

/* ── Produção ── */
function Producao() {
  const items = [
    { title: 'Chocolate de verdade', body: 'Nada de coberturas fracionadas ou gordura hidrogenada. Trabalhamos com a Sicao em toda a linha.' },
    { title: 'Manteiga de primeira linha', body: 'Essencial para a textura amanteigada e para o sabor original de cada cookie.' },
    { title: 'Cacau 100%', body: 'Abolimos o achocolatado. Sabor intenso, encorpado e real — do brownie ao double chocolate.' },
  ];
  return (
    <section id="producao" className="diff">
      <div className="wrap">
        <div className="diff-intro reveal">
          <div>
            <span className="eyebrow">02 — Diferenciais</span>
            <h2 className="disp h2" style={{ margin: '14px 0 0' }}>
              Produção artesanal em Atibaia.
            </h2>
          </div>
          <p className="lead" style={{ alignSelf: 'end', marginBottom: '6px' }}>
            Trabalhamos numa cozinha profissional em Atibaia — mas aqui nada sai de esteira. A Anna molda cada doce, um por um, com a estrutura de uma produção de verdade e o carinho de quem cozinha para os melhores amigos.
          </p>
        </div>
        <div className="diff-cards reveal">
          {items.map((it, i) => (
            <article className="diff-card" key={i}>
              <div className="diff-card-photo">
                <image-slot id={'diff-' + i} shape="rect" fit="cover" placeholder={'Foto: ' + it.title}></image-slot>
              </div>
              <div className="diff-card-body">
                <span className="diff-card-num">{String(i + 1).padStart(2, '0')}</span>
                <h3 className="diff-card-title">{it.title}</h3>
                <p className="diff-card-txt">{it.body}</p>
              </div>
            </article>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ── Product immersive tile ── */
function ProductTile({ p, index, className }) {
  const imgs = p.images || [];
  const [cur, setCur] = useState(0);
  const timerRef = useRef(null);
  const start = () => {
    clearInterval(timerRef.current);
    if (imgs.length > 1) timerRef.current = setInterval(() => setCur(c => (c + 1) % imgs.length), 3200);
  };
  useEffect(() => { start(); return () => clearInterval(timerRef.current); }, [imgs.length]);
  return (
    <article className={'pcard reveal ' + (className || '')}>
      {imgs.length
        ? imgs.map((src, i) => (
            <div key={i} className={'pcard-img ' + (i === cur ? 'active' : '')}>
              <img src={src} alt={p.name + ' ' + (i + 1)} />
            </div>
          ))
        : <div className="pcard-img active"><image-slot id={'pcard-' + p.id} shape="rect" fit="cover" placeholder={'Foto: ' + p.name}></image-slot></div>
      }
      <div className="pcard-grad"></div>
      <span className={'pcard-tag' + (p.holiday ? ' holiday' : '')}>{p.tag}</span>
      {imgs.length > 1 && (
        <div className="pcard-dots">
          {imgs.map((_, i) => (
            <button key={i} className={'pcard-dot ' + (i === cur ? 'active' : '')}
              onClick={() => { setCur(i); start(); }} aria-label={'Foto ' + (i + 1)} />
          ))}
        </div>
      )}
      <div className="pcard-body">
        <span className="pcard-num">N°{String(index + 1).padStart(2, '0')}</span>
        <h3 className="pcard-name">{p.name}</h3>
        <p className="pcard-desc">{p.desc}</p>
      </div>
    </article>
  );
}

/* ── Produtos ── */
const BENTO_CLASS = ['pb-trad', 'pb-double', 'pb-oat', 'pb-ginger', 'pb-brownie'];
const PRODUCTS = [
  { id: 'tradicional', name: 'Cookie Tradicional', tag: 'Clássico', span: 'featured',
    images: ['cookie-trad-1.jpg','cookie-trad-2.jpg','cookie-trad-3.jpg','cookie-trad-4.jpg','cookie-trad-5.jpg','cookie-trad-6.jpg','cookie-trad-7.jpg'],
    desc: 'O clássico dos clássicos. Massa amanteigada com generosas gotas de chocolate meio amargo.' },
  { id: 'double', name: 'Double Chocolate', tag: 'Intenso',
    images: ['cookie-double-2.jpg','cookie-double-3.jpg','cookie-double-4.jpg'],
    desc: 'Para os apaixonados por intensidade. Massa de chocolate com gotas de chocolate meio amargo.' },
  { id: 'oatmeal', name: 'Oatmeal Raisin', tag: 'Mais saudável',
    images: ['cookie-oat-1.jpg','cookie-oat-2.jpg','cookie-oat-3.jpg','cookie-oat-4.jpg'],
    desc: 'Tradicional americano. Aveia e uvas passas — textura macia e sabor de conforto de família.' },
  { id: 'gingerbread', name: 'Gingerbread', tag: 'Especial de Natal', holiday: true,
    images: ['cookie-ginger-1.jpg'],
    desc: 'Edição especial de Natal. Cookie de gengibre e especiarias com toda a tradição americana.' },
  { id: 'brownie', name: 'The Real American Brownie', tag: 'Super chocolatudo', span: 'tall',
    images: ['brownie-1.jpg','brownie-2.jpg','brownie-3.jpg','brownie-4.jpg','brownie-5.jpg','brownie-6.jpg'],
    desc: 'Feito com cacau 100% e gotas de chocolate Sicao. Denso, úmido e feito com muito amor.' },
  { id: 'muffin', name: 'Muffin Americano', tag: 'Fofinho',
    desc: 'Massa alta, fofa e úmida no melhor estilo das padarias americanas. Topo douradinho e recheios que variam a cada fornada — de blueberry a gotas de chocolate.' },
];

function Produtos({ t }) {
  return (
    <section id="produtos">
      <div className="wrap">
        <div className="prod-head reveal">
          <div>
            <span className="eyebrow">03 — Nossos produtos</span>
            <h2 className="disp h2" style={{ margin: '14px 0 0' }}>Receitas reais, feitas uma a uma.</h2>
            <img src="bunting.svg" className="us-bunting-divider" alt="" aria-hidden="true" />
          </div>
          <p className="lead" style={{ maxWidth: 'none' }}>
            Encomende sua fornada ou uma curadoria para eventos.
          </p>
        </div>
        <div className="prod-grid">
          {PRODUCTS.map((p, i) => (
            <article key={p.id} className={'prod-card reveal ' + (p.span || '')}>
              <Carousel id={'prod-' + p.id} name={p.name} tag={p.tag} holiday={!!p.holiday} featured={p.span === 'featured'} images={p.images} />
              <div className="prod-body">
                <div className="prod-row">
                  <h3 className="prod-name">{p.name}</h3>
                </div>
                <p className="prod-desc">{p.desc}</p>
              </div>
            </article>
          ))}
        </div>
        <div className="prod-cta reveal">
          <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-primary">
            Ver cardápio completo <span className="arr"></span>
          </a>
        </div>
      </div>
    </section>
  );
}

/* ── Parceiros ── */
function Parcerias({ t }) {
  const uses = [
    { k: 'Cafés',       v: 'Cafeterias e negócios locais que querem oferecer um doce com história.' },
    { k: 'Eventos',     v: 'Casamentos, aniversários e festinhas em Atibaia e região.' },
    { k: 'Corporativo', v: 'Mimos para colaboradores com adesivos personalizados da sua marca.' },
  ];
  const logos = [
    { src: 'logo-alec.png',  alt: 'Alec Café e Bistrô' },
    { src: 'logo-davis.png', alt: "Davi's Coffee" },
    { src: 'logo-sitio.png', alt: 'Sítio São Benedito' },
  ];
  return (
    <section id="parceiros" className="part">
      <div className="wrap">
        <div className="part-grid">
          <div className="reveal">
            <span className="eyebrow">04 — Parcerias & eventos</span>
            <h2 className="disp h2" style={{ margin: '14px 0 18px' }}>
              Espalhados pela cidade, do café à festa.
            </h2>
            <p className="lead">
              Soluções para cafeterias, eventos e mimos corporativos em Atibaia e região.
            </p>
            <a href={t.whatsapp} target="_blank" rel="noopener"
              className="btn btn-white" style={{ marginTop: 24 }}>
              Quero ser um parceiro <span className="arr"></span>
            </a>
          </div>
          <div className="reveal">
            <ul className="part-uses">
              {uses.map((u, i) => (
                <li key={i}><span className="k">{u.k}</span><span className="v">{u.v}</span></li>
              ))}
            </ul>
            <div className="partner-logos">
              <span className="eyebrow">Nossos parceiros</span>
              <div className="logos-row">
                {logos.map((l, i) => (
                  <div className="logo-card" key={i}>
                    <img src={l.src} alt={l.alt} />
                  </div>
                ))}
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ── FAQ (GEO) ── */
const FAQ_ITEMS = [
  {
    q: 'Onde fica a Pulo do Gato Doces e vocês fazem entrega?',
    a: 'Nossa cozinha profissional fica no bairro Alvinópolis, em Atibaia/SP (Av. Prof. Carlos Alberto de Carvalho Pinto, 843, Sala 2). Fazemos entrega local em Atibaia e região e também retirada no local ou em um dos nossos parceiros. O pedido mínimo para entrega é combinado pelo WhatsApp.',
  },
  {
    q: 'Qual é o horário de funcionamento?',
    a: 'Atendemos de segunda a sábado, das 9h às 18h. Encomendas pelo WhatsApp você pode enviar a qualquer hora — respondemos assim que possível.',
  },
  {
    q: 'Como faço uma encomenda?',
    a: 'É só chamar no WhatsApp. A gente confirma os sabores, a quantidade e o prazo da sua fornada. Para retirada sempre temos produtos prontos — no local ou em um parceiro; para entrega, combinamos o pedido mínimo na hora.',
  },
  {
    q: 'Quais sabores vocês têm?',
    a: 'Cookie Tradicional, Cookie de Chocolate, Cookie de Aveia, Brownie Tradicional Americano, Muffin Tradicional Americano, Muffin sem Glúten e o Cookie especial de Natal (Gingerbread).',
  },
  {
    q: 'Qual a validade e como devo conservar?',
    a: 'Cookies e muffins devem ficar na geladeira e têm validade de 7 dias. Já os brownies não precisam de geladeira e duram até 15 dias.',
  },
  {
    q: 'Vocês têm opção sem glúten?',
    a: 'Sim: o Muffin Americano é o nosso único produto sem glúten. Os demais cookies e o brownie contêm glúten. Se tiver qualquer restrição, é só nos avisar no WhatsApp.',
  },
  {
    q: 'Quais formas de pagamento vocês aceitam?',
    a: 'Aceitamos Pix, cartão de crédito, cartão de débito e dinheiro.',
  },
  {
    q: 'Os cookies são realmente americanos?',
    a: 'São. A Anna é americana e trouxe as receitas reais da família dela dos Estados Unidos. Aqui não existe “tipo americano” — é a tradição americana de verdade. Usamos chocolate Sicao, manteiga de primeira e cacau 100%, com cada doce moldado à mão.',
  },
  {
    q: 'Vocês atendem eventos, cafés e empresas?',
    a: 'Sim! Fornecemos para cafeterias e negócios locais, atendemos eventos como casamentos e aniversários em Atibaia e região, e fazemos mimos corporativos com adesivos personalizados da sua marca. Fale com a gente no WhatsApp para ser um parceiro.',
  },
];

function FAQ({ t }) {
  const [open, setOpen] = useState(0);
  return (
    <section id="faq" className="faq">
      <div className="wrap">
        <div className="faq-grid">
          <div className="faq-head reveal">
            <span className="eyebrow">05 — Dúvidas frequentes</span>
            <h2 className="disp h2" style={{ margin: '14px 0 18px' }}>Perguntas que sempre chegam.</h2>
            <p className="lead">Tudo o que você precisa saber sobre encomendas, sabores e conservação. Não achou sua dúvida? Chama a gente.</p>
            <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-primary" style={{ marginTop: 22 }}>
              <IconWA /> Pergunte no WhatsApp
            </a>
          </div>
          <div className="faq-list reveal">
            {FAQ_ITEMS.map((it, i) => (
              <div className={'faq-item' + (open === i ? ' open' : '')} key={i}>
                <button className="faq-q" onClick={() => setOpen(open === i ? -1 : i)} aria-expanded={open === i}>
                  <span className="faq-q-txt">{it.q}</span>
                  <span className="faq-ico" aria-hidden="true"></span>
                </button>
                <div className="faq-a"><div className="faq-a-inner"><p>{it.a}</p></div></div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

/* ── Cookie girando com gatinho 2D andando em cima ── */

/* Gatinho 2D fofo (branco, sem rosto) com ciclo de caminhada em CSS */
function Cat2D() {
  return (
    <div className="cat2d">
      {/* pernas de trás (atrás do corpo) */}
      <div className="leg leg-ff"></div>
      <div className="leg leg-bf"></div>
      {/* rabo */}
      <div className="cat-tail"></div>
      {/* corpo + cabeça sobem e descem juntos */}
      <div className="cat-bob">
        <div className="cat-body"></div>
        <div className="cat-head">
          <div className="ear ear-l"><i></i></div>
          <div className="ear ear-r"><i></i></div>
        </div>
      </div>
      {/* pernas da frente (sobre o corpo) */}
      <div className="leg leg-fn"></div>
      <div className="leg leg-bn"></div>
    </div>
  );
}

/* Cookie cartoon (gotas de chocolate + textura) girando */
function CartoonCookie() {
  return (
    <div className="cookie-cartoon">
      <span className="chip c1"></span>
      <span className="chip c2"></span>
      <span className="chip c3"></span>
      <span className="chip c4"></span>
      <span className="chip c5"></span>
      <span className="chip c6"></span>
      <span className="chip c7"></span>
      <span className="chip c8"></span>
      <span className="chip c9"></span>
      <span className="speck s1"></span>
      <span className="speck s2"></span>
      <span className="speck s3"></span>
      <span className="speck s4"></span>
      <span className="speck s5"></span>
    </div>
  );
}

function CookieRotator() {
  return (
    <div className="cookie-spin-wrap" aria-hidden="true">
      <div className="cookie-spin">
        <img src="cookie-img.png" alt="" />
      </div>
      <div className="cat-contact-shadow"></div>
      <Cat2D />
    </div>
  );
}
function MapWidget() {
  const ref = useRef(null);
  const inst = useRef(null);
  useEffect(() => {
    if (inst.current || !window.L) return;
    const map = L.map(ref.current, {
      center: [-23.1167, -46.5569], zoom: 15, scrollWheelZoom: false,
      zoomControl: true,
    });
    L.tileLayer('https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png', {
      attribution: '© OpenStreetMap · © CARTO', maxZoom: 20,
    }).addTo(map);
    const icon = L.divIcon({
      html: '<div style="background:var(--wood-deep,#7A4C1D);width:14px;height:14px;border-radius:50%;border:3px solid #fff;box-shadow:0 2px 6px rgba(0,0,0,.4)"></div>',
      className: '', iconAnchor: [7, 7]
    });
    L.marker([-23.1167, -46.5569], { icon })
      .addTo(map)
      .bindPopup('<strong>Pulo do Gato Doces</strong><br>Av. Prof. Carlos Alberto de Carvalho Pinto, 843<br>Alvinópolis · Atibaia / SP');
    inst.current = map;
    return () => { map.remove(); inst.current = null; };
  }, []);
  return <div ref={ref} style={{height:'230px', width:'100%', borderRadius:'12px', overflow:'hidden', zIndex:0, marginTop:'4px'}} />;
}

/* ── Footer ── */
function Footer({ t }) {
  return (
    <footer id="contato" className="footer">
      <div className="us-bunting-footer" aria-hidden="true"></div>
      <div className="wrap">
        <div className="footer-cta reveal">
          <div>
            <span className="eyebrow">Fale conosco</span>
            <h2 className="disp h2" style={{ margin: '14px 0 0' }}>
              Uma fornada chamando seu nome.
            </h2>
          </div>
          <div className="footer-cta-right">
            <p className="lead">
              Quer pedir uma fornada ou levar nossos produtos para o seu comércio? É só chamar no WhatsApp!
            </p>
            <div>
              <a href={t.whatsapp} target="_blank" rel="noopener" className="btn btn-wa">
                <IconWA /> Chamar no WhatsApp
              </a>
            </div>
          </div>
        </div>
        <div className="foot-main">
          <div className="foot-brand">
            <img src="logo-horizontal-cream.svg" alt="Pulo do Gato Doces" className="foot-logo" />
            <p className="foot-slogan">Receita gringa,<br/>alma brasileira.</p>
            <div className="social-row">
              <a href={t.instagram} target="_blank" rel="noopener" aria-label="Instagram"><IconIG /></a>
              <a href="https://facebook.com/" target="_blank" rel="noopener" aria-label="Facebook"><IconFB /></a>
            </div>
          </div>

          <div className="foot-links">
            <div className="foot-col">
              <h4>Navegação</h4>
              <a href="#historia">História</a>
              <a href="#producao">Produção</a>
              <a href="#produtos">Produtos</a>
              <a href="#parceiros">Parceiros</a>
              <a href="#faq">FAQ</a>
            </div>
            <div className="foot-col">
              <h4>Contato</h4>
              <a href={t.whatsapp} target="_blank" rel="noopener">WhatsApp</a>
              <a href="mailto:contato@pulodogatodoces.com.br">E-mail</a>
              <a href={t.instagram} target="_blank" rel="noopener">Instagram</a>
            </div>
          </div>

          <div className="foot-locale" id="localizacao">
            <h4>Onde nos encontrar</h4>
            <p className="foot-addr-lg">Av. Prof. Carlos Alberto de Carvalho Pinto, 843 · Sala 2<br/>Alvinópolis · Atibaia / SP · CEP 12942-530</p>
            <MapWidget />
          </div>
        </div>
        <div className="foot-bottom">
          <span>© 2026 Pulo do Gato Doces</span>
          <span className="foot-made">Feito com 🐾 em Atibaia</span>
        </div>
      </div>
    </footer>
  );
}

/* ── Tweaks ── */
function TweaksUI({ t, setTweak }) {
  return (
    <TweaksPanel title="Tweaks">
      <TweakSection label="Hazel (mascote)">
        <TweakToggle value={t.showHazel} onChange={v => setTweak('showHazel', v)} label="Mostrar seção da Hazel" />
      </TweakSection>
      <TweakSection label="Botão WhatsApp flutuante">
        <TweakToggle value={t.showFab} onChange={v => setTweak('showFab', v)} label="Mostrar botão fixo" />
      </TweakSection>
      <TweakSection label="WhatsApp">
        <TweakText value={t.whatsapp} onChange={v => setTweak('whatsapp', v)} placeholder="https://wa.me/55..." />
      </TweakSection>
      <TweakSection label="Instagram">
        <TweakText value={t.instagram} onChange={v => setTweak('instagram', v)} placeholder="https://instagram.com/..." />
      </TweakSection>
    </TweaksPanel>
  );
}

/* ── App ── */
function App() {
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [scrolled, setScrolled] = useState(false);
  const [pastHero, setPastHero] = useState(false);

  useEffect(() => {
    const fn = () => {
      setScrolled(window.scrollY > 60);
      setPastHero(window.scrollY > window.innerHeight * 0.85);
    };
    fn();
    window.addEventListener('scroll', fn, { passive: true });
    return () => window.removeEventListener('scroll', fn);
  }, []);

  useEffect(() => {
    const els = document.querySelectorAll('.reveal');
    const io = new IntersectionObserver(
      entries => entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('in'); }),
      { threshold: 0.05, rootMargin: '0px 0px -20px 0px' }
    );
    els.forEach(el => io.observe(el));
    const timer = setTimeout(() => {
      document.querySelectorAll('.reveal:not(.in)').forEach(el => el.classList.add('in'));
    }, 400);
    return () => { io.disconnect(); clearTimeout(timer); };
  }, [tweaks.showHazel]);

  return (
    <>
      <Header t={tweaks} scrolled={scrolled} />
      <main>
        <Hero t={tweaks} />
        <Strip />
        <Historia t={tweaks} />
        <Producao />
        <Produtos t={tweaks} />
        <Parcerias t={tweaks} />
        <FAQ t={tweaks} />
      </main>
      <Footer t={tweaks} />
      {tweaks.showFab && (
        <a href={tweaks.whatsapp} target="_blank" rel="noopener" className={'wa-fab' + (pastHero ? ' is-visible' : '')} aria-label="Chamar no WhatsApp">
          <IconWA size={24} />
        </a>
      )}
      <TweaksUI t={tweaks} setTweak={setTweak} />
    </>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(<App />);
