/* global React */
const { useState } = React;

// === Reusable bits ===
function Eyebrow({ children }) {
  return <p className="eyebrow">— {children} —</p>;
}

function PhotoPlaceholder({ label, dim, children }) {
  return (
    <div className={"photo-placeholder" + (dim ? " dim" : "")}>
      {children || label}
    </div>
  );
}

// Italic helper renders <em> for Cormorant italic accent
function It({ children }) { return <em>{children}</em>; }

// CTA principal: ícone WhatsApp + texto + seta animada. Padroniza todos os botões que levam para #proposta.
function Cta({ href = "#proposta", variant = "primary", children }) {
  return (
    <a href={href} className={"btn btn-" + variant + " btn-cta"}>
      <svg className="btn-cta-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
        <path d="M19.05 4.91A9.816 9.816 0 0 0 12.04 2c-5.46 0-9.91 4.45-9.91 9.91 0 1.75.46 3.45 1.32 4.95L2.05 22l5.25-1.38c1.45.79 3.08 1.21 4.74 1.21 5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01zm-7.01 15.24c-1.48 0-2.93-.4-4.2-1.15l-.3-.18-3.12.82.83-3.04-.2-.31a8.264 8.264 0 0 1-1.26-4.38c0-4.54 3.7-8.24 8.24-8.24 2.2 0 4.27.86 5.82 2.42a8.183 8.183 0 0 1 2.41 5.83c.02 4.54-3.68 8.23-8.22 8.23zm4.52-6.16c-.25-.12-1.47-.72-1.69-.81-.23-.08-.39-.12-.56.12-.17.25-.64.81-.78.97-.14.17-.29.19-.53.06-.25-.12-1.05-.39-1.99-1.23-.74-.66-1.23-1.47-1.38-1.72-.14-.25-.02-.38.11-.51.11-.11.25-.29.37-.43.12-.14.17-.25.25-.41.08-.17.04-.31-.02-.43-.06-.12-.56-1.34-.76-1.84-.2-.48-.41-.42-.56-.43h-.48c-.17 0-.43.06-.66.31-.22.25-.86.85-.86 2.07 0 1.22.89 2.4 1.01 2.56.12.17 1.75 2.67 4.23 3.74.59.26 1.05.41 1.41.52.59.19 1.13.16 1.56.1.48-.07 1.47-.6 1.67-1.18.21-.58.21-1.07.14-1.18s-.22-.16-.47-.28z"/>
      </svg>
      <span>{children}</span>
      <span className="btn-cta-arrow" aria-hidden="true">→</span>
    </a>
  );
}

// === NAV ===
function Nav() {
  const [open, setOpen] = useState(false);
  React.useEffect(() => {
    document.body.style.overflow = open ? "hidden" : "";
    return () => { document.body.style.overflow = ""; };
  }, [open]);
  const close = () => setOpen(false);
  return (
    <nav className={"nav" + (open ? " nav--open" : "")}>
      <div className="container nav-inner">
        <a href="#top" className="brand" onClick={close}>
          <img src="assets/logo-rubi.png" alt="Tulipani Ateliê de Doces" className="brand-logo"/>
          <span>Corporativo</span>
        </a>
        <div className="nav-links">
          <a href="#cases">Cases</a>
          <a href="#processo">Processo</a>
          <a href="#ocasioes">Aplicações</a>
          <a href="#sobre">Quem somos</a>
          <a href="#faq">FAQ</a>
          <a href="#proposta" className="nav-cta">Solicitar proposta</a>
        </div>
        <button
          className="nav-burger"
          aria-label={open ? "Fechar menu" : "Abrir menu"}
          aria-expanded={open}
          onClick={() => setOpen((v) => !v)}
        >
          <span/><span/><span/>
        </button>
      </div>
      <div className={"nav-drawer" + (open ? " is-open" : "")} onClick={close}>
        <div className="nav-drawer-inner" onClick={(e) => e.stopPropagation()}>
          <a href="#cases" onClick={close}>Cases</a>
          <a href="#processo" onClick={close}>Processo</a>
          <a href="#ocasioes" onClick={close}>Aplicações</a>
          <a href="#sobre" onClick={close}>Quem somos</a>
          <a href="#faq" onClick={close}>FAQ</a>
          <a href="#proposta" onClick={close} className="btn btn-primary nav-drawer-cta">Solicitar proposta</a>
        </div>
      </div>
    </nav>
  );
}

// === HERO ===
const HERO_IMAGES = [
  { src: "assets/founders.jpg", alt: "Amanda e Lidiane, fundadoras da Tulipani, no ateliê em Campinas" },
  { src: "assets/case-solventum.jpg", alt: "Kit cupcake DIY com tag oficial do Dia da Família. CaseSolventum" },
  { src: "assets/case-panobianco-maes.jpg?v=2", alt: "Biscoito amanteigado premium em embalagem de chita. CasePanobianco Dia das Mães" },
  { src: "assets/case-germed-maes.jpg", alt: "Caixa Dia das Mães com caneca, porta-retrato e doces. CaseGermed" },
];

function Hero({ titleVariant }) {
  const titles = {
    A: <>Presentes corporativos <It>feitos à mão</It></>,
    B: <>O presente que sua empresa <It>vai querer assinar</It></>,
    C: <>Doces autorais que <It>carregam o nome da sua marca</It></>,
  };
  const [slide, setSlide] = useState(0);
  const [paused, setPaused] = useState(false);
  const total = HERO_IMAGES.length;
  const prev = () => setSlide((s) => (s - 1 + total) % total);
  const next = () => setSlide((s) => (s + 1) % total);

  React.useEffect(() => {
    HERO_IMAGES.forEach((im) => {
      const i = new Image();
      i.src = im.src;
      if (i.decode) i.decode().catch(() => {});
    });
  }, []);

  React.useEffect(() => {
    if (total < 2 || paused) return;
    const id = setInterval(() => setSlide((s) => (s + 1) % total), 5500);
    return () => clearInterval(id);
  }, [paused, total]);

  return (
    <section className="sec sec--creme hero" id="top" data-screen-label="01 Hero">
      <div className="container hero-grid">
        <div>
          <Eyebrow>Tulipani · Corporativo</Eyebrow>
          <h1 className="h1">{titles[titleVariant] || titles.A}</h1>
          <p className="subtitle">Para empresas que escolhem afeto como diferencial.</p>
          <p className="body">
            Doces autorais montados à mão em Campinas, com embalagem personalizada na identidade da sua marca.
          </p>
          <div className="cta-row" style={{ marginTop: 32 }}>
            <Cta href="#proposta" variant="primary">Solicitar proposta</Cta>
            <a href="#cases" className="btn-link">Ver cases reais →</a>
          </div>
        </div>
        <div>
          <div
            className="hero-photo"
            onMouseEnter={() => setPaused(true)}
            onMouseLeave={() => setPaused(false)}
          >
            {HERO_IMAGES.map((im, i) => (
              <img
                key={im.src}
                src={im.src}
                alt={im.alt}
                className={"hero-img hero-img-slide" + (i === slide ? " is-active" : "")}
                loading={i === 0 ? "eager" : "lazy"}
                decoding="async"
              />
            ))}
            <div className="hero-sticker">
              feito<br/>à mão<br/>desde 2018
            </div>
            {total > 1 && (
              <>
                <button
                  type="button"
                  className="hero-arrow hero-arrow--prev"
                  onClick={prev}
                  aria-label="Imagem anterior"
                >
                  <svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.5"><path d="M12.5 5l-5 5 5 5"/></svg>
                </button>
                <button
                  type="button"
                  className="hero-arrow hero-arrow--next"
                  onClick={next}
                  aria-label="Próxima imagem"
                >
                  <svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.5"><path d="M7.5 5l5 5-5 5"/></svg>
                </button>
                <div className="hero-dots" role="tablist" aria-label="Imagens do hero">
                  {HERO_IMAGES.map((_, i) => (
                    <button
                      key={i}
                      type="button"
                      className={"hero-dot" + (i === slide ? " active" : "")}
                      onClick={() => setSlide(i)}
                      aria-label={"Imagem " + (i + 1)}
                      aria-selected={i === slide}
                    />
                  ))}
                </div>
              </>
            )}
          </div>
        </div>
      </div>
    </section>
  );
}

// === OCASIÕES ===
const OCASIOES = [
  { n: "01", t: "Boas-vindas a colaboradores", d: "O primeiro dia merece um gesto. Receba quem chega na sua empresa com algo feito à mão." },
  { n: "02", t: "Datas especiais", d: "Fim de ano, Natal, feriados e dias importantes da empresa. Marque os momentos que pedem um gesto." },
  { n: "03", t: "Lançamentos e marcos", d: "Lançamento de produto, conquista de certificação, aniversário da empresa. Cada conquista pede um doce." },
  { n: "04", t: "Agradecimento a clientes", d: "Para fechar uma proposta, celebrar um contrato renovado ou agradecer a parceiros estratégicos." },
];

function Ocasioes() {
  return (
    <section className="sec sec--creme" id="ocasioes" data-screen-label="02 Ocasiões">
      <div className="container">
        <div className="sec-head">
          <Eyebrow>Ocasiões atendidas</Eyebrow>
          <h2 className="h2">Para cada momento que <It>merece ser lembrado</It></h2>
          <p className="subtitle" style={{ margin: "0 auto" }}>
            Empresas usam a Tulipani para marcar momentos internos com colaboradores e externos com
            clientes, parceiros e fornecedores.
          </p>
        </div>
        <div className="oc-grid">
          {OCASIOES.map((o) => (
            <div key={o.n} className="oc-card">
              <span className="num">{o.n}</span>
              <h3 className="h3">{o.t}</h3>
              <p className="body">{o.d}</p>
            </div>
          ))}
        </div>
        <p className="oc-mais-text">
          E outras ocasiões. Cada empresa tem seu próprio calendário, e a Tulipani desenha o presente do zero conforme o motivo.
        </p>
        <div className="sec-cta">
          <span className="helper">Não achou sua ocasião?</span>
          <Cta href="#proposta" variant="primary">Falar com a Tulipani</Cta>
        </div>
      </div>
    </section>
  );
}

// === CASES ===
const CASES = [
  {
    setor: "Eventos corporativos",
    img: "assets/case-apa.jpg",
    cliente: "APA · via agência",
    titulo: "Mini cupcakes para evento APA em Limeira",
    resumo: "Encomenda da agência responsável pelo evento da APA, fabricante de vacina avícola, com criativo temático de ovo. 450 mini cupcakes de chocolate decorados com ovinhos Fini coloridos, mais 450 mini quindins (parceria com padaria local). Entregamos tudo no dia em Limeira.",
    quantidade: "900 unidades",
    ocasiao: "Evento corporativo · 12/03",
  },
  {
    setor: "Saúde corporativa",
    img: "assets/case-solventum.jpg",
    cliente: "Solventum · via agência",
    titulo: "250 kits cupcake DIY para o Dia da Família na Solventum",
    resumo: "Encomenda da agência responsável pelo evento. No Dia da Família na empresa, os colaboradores levaram os filhos para conhecer o ambiente de trabalho e saíram com uma caixinha para montar o cupcake em casa com a criança. Cada kit traz cupcake pronto, brigadeiro de cobertura, granulado colorido e mini drágeas, fechado com tag oficial do evento.",
    quantidade: "250 caixas",
    ocasiao: "Dia da Família · 11/04",
  },
  {
    setor: "Wellness",
    img: "assets/case-panobianco-5anos.jpg?v=2",
    cliente: "Panobianco Dom Pedro I",
    titulo: "Caixa comemorativa para colaboradores de 5 anos de casa",
    resumo: "A unidade Panobianco Dom Pedro I reconheceu os colaboradores que completaram 5 anos de casa. Cada caixa reúne placa comemorativa em acrílico e lascas de chocolate em saco selado, finalizadas com fita personalizada da academia.",
    quantidade: "6 caixas",
    ocasiao: "5 anos de empresa · 08/05",
  },
  {
    setor: "Saúde",
    img: "assets/case-maternidade.jpg",
    cliente: "Hospital Maternidade de Campinas",
    titulo: "150 chaves de chocolate para inauguração de duas alas",
    resumo: "Brinde para a inauguração da nova Unidade de Internação Clínica Cirúrgica e da UTI Adulto. Chave em chocolate ao leite acoplada ao cartão institucional do hospital, distribuída ao corpo clínico, equipe e convidados na cerimônia.",
    quantidade: "150 unidades",
    ocasiao: "Inauguração · 06/04",
  },
  {
    setor: "Indústria farmacêutica",
    img: "assets/case-ems.jpg",
    cliente: "EMS · Grupo NC",
    titulo: "Kit Dia Internacional da Mulher para colaboradoras",
    resumo: "Sacola kraft com tag personalizada da data, sachê de chá de capim-cidreira, cookies artesanais, pote de vidro com crispys de chocolate ao leite e branco e suculenta em vaso de cerâmica. Composição cuidada para cada colaboradora do Grupo NC.",
    quantidade: "Sob demanda",
    ocasiao: "Dia Internacional da Mulher · 08/03",
  },
  {
    setor: "Wellness",
    img: "assets/case-panobianco-maes.jpg?v=2",
    cliente: "Panobianco Dom Pedro I",
    titulo: "Biscoito amanteigado premium para as mães da academia",
    resumo: "A Panobianco Dom Pedro I presenteou as mães da academia com biscoito amanteigado recheado de limão siciliano em versão premium, com tamanho maior, embalagem em chita com fita de cetim e cartão personalizado.",
    quantidade: "24 biscoitos amanteigados",
    ocasiao: "Dia das Mães · 08/05",
  },
  {
    setor: "Saúde",
    img: "assets/case-puc.jpg",
    cliente: "Hospital Celso Pierro · PUC-Campinas",
    titulo: "200 brownies para o Dia do Médico no Hospital Celso Pierro",
    resumo: "Encomenda do Hospital Celso Pierro da PUC-Campinas para celebrar o Dia do Médico com as equipes do hospital universitário. 200 brownies artesanais distribuídos ao corpo clínico, em reconhecimento a quem cuida, acolhe e transforma vidas todos os dias.",
    quantidade: "200 unidades",
    ocasiao: "Dia do Médico · 18/10",
  },
  {
    setor: "Indústria farmacêutica",
    img: "assets/case-germed-maes.jpg",
    cliente: "Germed",
    titulo: "Caixa do Dia das Mães para o time da Germed",
    resumo: "A Germed presenteou as mães do time com uma caixa cheia de significado: 2 sachês de chá, pirulito de cappuccino, pirulito ao leite, pacotinho de amanteigados de limão siciliano, caneca de porcelana, porta-retrato e cartão personalizado. Composição inteira providenciada pela Tulipani.",
    quantidade: "5 caixas",
    ocasiao: "Dia das Mães · 06/05",
  },
];

function Cases() {
  const trackRef = React.useRef(null);
  const wrapRef = React.useRef(null);
  const pendingRef = React.useRef(null);
  const idxRef = React.useRef(0);
  const posRef = React.useRef(1);
  const [idx, setIdx] = useState(0);
  const [paused, setPaused] = useState(false);

  // Pré-carrega e decodifica as imagens dos cases no mount, evitando
  // pausa de decode quando o card entra na viewport pela primeira vez.
  React.useEffect(() => {
    CASES.forEach((c) => {
      if (!c.img) return;
      const im = new Image();
      im.src = c.img;
      if (im.decode) im.decode().catch(() => {});
    });
  }, []);

  // Render: [clone_last, ...CASES, clone_first]
  const renderItems = [
    { ...CASES[CASES.length - 1], _key: "clone-last" },
    ...CASES.map((c, i) => ({ ...c, _key: "real-" + i })),
    { ...CASES[0], _key: "clone-first" },
  ];

  const ANIM_MS = 320;
  const EASING = "cubic-bezier(0.22, 1, 0.36, 1)";

  const applyTransform = (newPos, animate) => {
    const wrap = wrapRef.current;
    const track = trackRef.current;
    if (!wrap || !track) return;
    const card = track.children[newPos];
    if (!card) return;
    const wrapW = wrap.clientWidth;
    const cardW = card.clientWidth;
    const cardLeft = card.offsetLeft;
    const targetX = (wrapW - cardW) / 2 - cardLeft;
    track.style.transition = animate ? `transform ${ANIM_MS}ms ${EASING}` : "none";
    track.style.transform = `translate3d(${targetX}px, 0, 0)`;
    posRef.current = newPos;
    if (!animate) {
      // force reflow so the no-transition state sticks before any subsequent change
      void track.offsetHeight;
    }
  };

  React.useLayoutEffect(() => {
    requestAnimationFrame(() => applyTransform(1, false));
  }, []);

  const goTo = (newIdx) => {
    if (newIdx === idxRef.current) return;
    if (pendingRef.current) {
      clearTimeout(pendingRef.current);
      pendingRef.current = null;
      applyTransform(idxRef.current + 1, false);
    }
    const cur = idxRef.current;
    const wrapForward = newIdx === 0 && cur === CASES.length - 1;
    const wrapBackward = newIdx === CASES.length - 1 && cur === 0;
    if (wrapForward) {
      applyTransform(CASES.length + 1, true);
      idxRef.current = 0;
      setIdx(0);
      pendingRef.current = setTimeout(() => {
        applyTransform(1, false);
        pendingRef.current = null;
      }, ANIM_MS + 30);
    } else if (wrapBackward) {
      applyTransform(0, true);
      idxRef.current = CASES.length - 1;
      setIdx(CASES.length - 1);
      pendingRef.current = setTimeout(() => {
        applyTransform(CASES.length, false);
        pendingRef.current = null;
      }, ANIM_MS + 30);
    } else {
      applyTransform(newIdx + 1, true);
      idxRef.current = newIdx;
      setIdx(newIdx);
    }
  };

  const next = () => goTo((idxRef.current + 1) % CASES.length);
  const prev = () => goTo((idxRef.current - 1 + CASES.length) % CASES.length);

  React.useEffect(() => {
    const onResize = () => applyTransform(posRef.current, false);
    window.addEventListener("resize", onResize);
    return () => window.removeEventListener("resize", onResize);
  }, []);

  React.useEffect(() => {
    if (paused) return;
    const id = setInterval(() => {
      if (!pendingRef.current) goTo((idxRef.current + 1) % CASES.length);
    }, 6000);
    return () => clearInterval(id);
  }, [paused]);

  return (
    <section className="sec sec--creme cases" id="cases" data-screen-label="03 Cases">
      <div className="container">
        <div className="sec-head sec-head--left cases-head">
          <div>
            <Eyebrow>Cases reais</Eyebrow>
            <h2 className="h2">Pedidos que <It>já saíram</It> do nosso ateliê</h2>
            <p className="subtitle" style={{ marginBottom: 0 }}>
              Cada pedido é desenhado do zero. Aqui um recorte de empresas, ocasiões e volumes que já atendemos.
            </p>
          </div>
          <span className="cases-count cases-count--head">
            <em>{String(idx + 1).padStart(2, "0")}</em> / {String(CASES.length).padStart(2, "0")}
          </span>
        </div>
      </div>
      <div
        className="cases-track-wrap"
        ref={wrapRef}
        onMouseEnter={() => setPaused(true)}
        onMouseLeave={() => setPaused(false)}
        onFocusCapture={() => setPaused(true)}
        onBlurCapture={() => setPaused(false)}
      >
        <button
          className="cases-arrow cases-arrow--prev"
          onClick={prev}
          aria-label="Anterior"
        >
          <svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.5"><path d="M12.5 5l-5 5 5 5"/></svg>
        </button>
        <button
          className="cases-arrow cases-arrow--next"
          onClick={next}
          aria-label="Próximo"
        >
          <svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.5"><path d="M7.5 5l5 5-5 5"/></svg>
        </button>
        <div className="cases-track" ref={trackRef}>
          {renderItems.map((c, i) => {
            const realIdx = (((i - 1) % CASES.length) + CASES.length) % CASES.length;
            const isClone = i === 0 || i === renderItems.length - 1;
            return (
              <article key={c._key} className="case-card" aria-hidden={isClone ? "true" : undefined}>
                <div className="case-photo">
                  {c.img ? (
                    <img src={c.img} alt={c.titulo} className="case-img" loading="eager" decoding="async"/>
                  ) : (
                    <React.Fragment>
                      <image-slot id={"case-" + i} placeholder={c.photo} shape="rect"></image-slot>
                      <PhotoPlaceholder>{c.photo}</PhotoPlaceholder>
                    </React.Fragment>
                  )}
                  <span className="case-setor">{c.setor}</span>
                </div>
                <div className="case-body">
                  <span className="case-meta">
                    <span>{c.cliente}</span>
                  </span>
                  <h3 className="case-title">{c.titulo}</h3>
                  <p className="case-resumo">{c.resumo}</p>
                  <dl className="case-stats">
                    <div>
                      <dt>Volume</dt>
                      <dd>{c.quantidade}</dd>
                    </div>
                    <div>
                      <dt>Ocasião</dt>
                      <dd>{c.ocasiao}</dd>
                    </div>
                  </dl>
                </div>
              </article>
            );
          })}
        </div>
        <div className="cases-dots container">
          {CASES.map((_, i) => (
            <button
              key={i}
              className={"cases-dot" + (i === idx ? " active" : "")}
              onClick={() => goTo(i)}
              aria-label={"Case " + (i + 1)}
            />
          ))}
        </div>
      </div>
      <div className="container">
        <div className="sec-cta">
          <span className="helper">Quer ver mais cases do seu setor?</span>
          <Cta href="#proposta" variant="primary">Pedir referências</Cta>
        </div>
      </div>
    </section>
  );
}

// === COMO FUNCIONA ===
const STEPS = [
  { n: "01", t: "Conte sua ocasião", d: "Você nos diz o motivo, a quantidade aproximada, a data e o que sua marca representa. Em 1 dia útil retornamos com proposta e opções de kits." },
  { n: "02", t: "Personalizamos juntos", d: "Escolhemos sabores, definimos embalagem na cor da sua marca, montamos o cartão. Aprovamos cada detalhe antes de produzir." },
  { n: "03", t: "Produzimos à mão", d: "Cada kit é montado pessoalmente pela equipe Tulipani em Campinas. Doces frescos, sem produção em escala industrial." },
  { n: "04", t: "Entregamos com cuidado", d: "Entrega própria em Campinas e região metropolitana. Combinamos rota e horário para que cada caixa chegue no momento certo, fresca e impecável." },
];

function ComoFunciona() {
  return (
    <section className="sec sec--vinho" id="processo" data-screen-label="04 Como funciona">
      <div className="container">
        <div className="sec-head">
          <Eyebrow>Como funciona</Eyebrow>
          <h2 className="h2">Do <It>briefing à entrega</It> em 4 passos</h2>
          <p className="subtitle" style={{ margin: "0 auto" }}>
            Processo simples e consultivo para chegar no presente certo.
          </p>
        </div>
        <div className="steps">
          {STEPS.map((s) => (
            <div key={s.n} className="step">
              <span className="num">{s.n}</span>
              <h3 className="h3">{s.t}</h3>
              <p className="body">{s.d}</p>
            </div>
          ))}
        </div>
        <div className="prazo-cta sec-cta">
          <span className="helper">Pronto pra começar o briefing da sua empresa?</span>
          <Cta href="#proposta" variant="creme">Solicitar proposta</Cta>
        </div>
      </div>
    </section>
  );
}

// === QUEM SOMOS ===
function QuemSomos() {
  return (
    <section className="sec sec--rose-claro" id="sobre" data-screen-label="05 Quem somos">
      <div className="container qs-grid">
        <div className="qs-photo">
          <img src="assets/founders.jpg" alt="Amanda e Lidiane no ateliê Tulipani em Campinas" className="qs-img"/>
        </div>
        <div>
          <Eyebrow>Quem somos</Eyebrow>
          <h2 className="h2"><It>Amanda e Lidiane</It> fundaram a Tulipani em 2018</h2>
          <p className="body">
            Somos Amanda e Lidiane, amigas de longa data e apaixonadas pela confeitaria. Em 2018
            transformamos um sonho em realidade: criar juntas um ateliê de doces, onde cada
            receita traduz o amor pelo que fazemos. Cada bolo e cada doce é preparado com carinho,
            atenção aos detalhes e um toque de criatividade.
          </p>
          <p className="body" style={{ fontSize: 14 }}>
            Valorizamos ingredientes de alta qualidade, como chocolate puro nacional, para
            garantir sabor, frescor e autenticidade em cada criação. A nossa equipe compartilha
            desse propósito e trabalha para entregar presentes que marcam os momentos da sua
            empresa.
          </p>
          <div className="qs-stats">
            <div>
              <div className="k">2018</div>
              <div className="l">Ano de fundação</div>
            </div>
            <div>
              <div className="k">+200</div>
              <div className="l">Empresas atendidas</div>
            </div>
            <div>
              <div className="k">100%</div>
              <div className="l">Feito à mão em Campinas</div>
            </div>
          </div>
          <div className="sec-cta" style={{ justifyContent: "flex-start", marginTop: 40 }}>
            <Cta href="#proposta" variant="primary">Trabalhar com a Tulipani</Cta>
          </div>
        </div>
      </div>
    </section>
  );
}

// === PERSONALIZAÇÃO ===
const PERS = [
  { n: "01", t: "Embalagem na sua cor", d: "Caixa em qualquer cor da paleta da sua marca, com fita coordenada. Pode incluir logo.", thumb: "Caixa · cor da marca", img: "assets/case-solventum.jpg" },
  { n: "02", t: "Cartão escrito à mão", d: "Mensagem definida pela sua empresa, escrita em papel especial, assinada por você se quiser.", thumb: "Cartão · escrita à mão", img: "assets/case-germed-maes.jpg" },
  { n: "03", t: "Composição do kit", d: "Além dos doces, somamos itens como chá, caneca, porta-retrato ou suculenta. Cada kit é desenhado para a ocasião.", thumb: "Kit · doces e itens", img: "assets/case-ems.jpg" },
  { n: "04", t: "Tag e fita personalizadas", d: "Tag impressa com a identidade do evento e fita na cor da marca. Cada caixa sai pronta para presentear.", thumb: "Tag · identidade da marca", img: "assets/case-panobianco-5anos.jpg?v=2" },
];

function Personalizacao() {
  return (
    <section className="sec sec--creme" id="personalizacao" data-screen-label="06 Personalização">
      <div className="container">
        <div className="sec-head">
          <Eyebrow>Personalização</Eyebrow>
          <h2 className="h2">Cada presente <It>carrega o nome</It> da sua empresa</h2>
          <p className="subtitle" style={{ margin: "0 auto" }}>
            Personalização vai do doce à embalagem, sem pacote padrão.
          </p>
        </div>
        <div className="pers-grid">
          {PERS.map((p) => (
            <div key={p.n} className="pers-card">
              <div className="pers-thumb">
                {p.img ? (
                  <img src={p.img} alt={p.t} className="pers-img" loading="lazy"/>
                ) : (
                  <React.Fragment>
                    <image-slot id={"pers-" + p.n} placeholder={p.thumb} shape="rect"></image-slot>
                    <PhotoPlaceholder>{p.thumb}</PhotoPlaceholder>
                  </React.Fragment>
                )}
              </div>
              <div>
                <span className="num">{p.n}</span>
                <h3>{p.t}</h3>
                <p>{p.d}</p>
              </div>
            </div>
          ))}
        </div>
        <div className="sec-cta">
          <span className="helper">Personalizamos do papel ao doce.</span>
          <Cta href="#proposta" variant="primary">Quero personalizar o meu</Cta>
        </div>
      </div>
    </section>
  );
}

// === PROVA SOCIAL ===
const LOGOS = [
  { name: "Grupo NC", img: "assets/logos/grupo-nc.png?v=3" },
  { name: "Germed", img: "assets/logos/germed.png?v=3" },
  { name: "Panobianco Academia", img: "assets/logos/panobianco.png?v=3" },
  { name: "Hospital Maternidade de Campinas", img: "assets/logos/maternidade-campinas.png?v=3" },
  { name: "Hospital PUC-Campinas", img: "assets/logos/puc-campinas.png?v=3" },
];

function ProvaSocial() {
  // Repeat the list 4x so the track always exceeds 2x viewport width even on wide screens.
  // CSS animates -25% (= width of one copy), so the loop is seamless regardless of viewport.
  const COPIES = 4;
  const reel = Array.from({ length: COPIES }).flatMap(() => LOGOS);
  return (
    <section className="sec sec--creme-alt" id="clientes" data-screen-label="07 Prova social" style={{ paddingBottom: 64 }}>
      <div className="container">
        <div className="sec-head" style={{ marginBottom: 40 }}>
          <Eyebrow>Quem já confiou</Eyebrow>
          <h2 className="h2">Empresas que escolheram a <It>Tulipani</It></h2>
        </div>
      </div>
      <div className="logos-marquee" aria-label="Empresas que escolheram a Tulipani">
        <div className="logos-track">
          {reel.map((l, i) => (
            <div key={i} className="logo-item" aria-hidden={i >= LOGOS.length ? "true" : undefined}>
              <img src={l.img} alt={i < LOGOS.length ? l.name : ""} loading="lazy"/>
            </div>
          ))}
          {/* The track is repeated 4x; animation moves -25% (one copy) for a seamless loop. */}
        </div>
      </div>
      <div className="container">
        <p className="subtitle" style={{ textAlign: "center", margin: "40px auto 0", maxWidth: "60ch" }}>
          Atendemos empresas de saúde, indústria farmacêutica, hospitais, eventos e wellness,
          além de organizações de outros segmentos.
        </p>
        <div className="sec-cta" style={{ marginTop: 32 }}>
          <Cta href="#proposta" variant="primary">Sua empresa pode ser a próxima</Cta>
        </div>
      </div>
    </section>
  );
}

// === DEPOIMENTO ===
const DEPOIMENTOS = [
  {
    q: "Os doces foram o ponto alto do nosso evento. Até hoje os clientes comentam que receberam o melhor brinde do ano.",
    a: "Fernanda Müller",
    r: "Gerente de Marketing · Cliente desde 2020",
  },
  {
    q: "Encomendamos para o Dia do Médico e foi disparado o brinde mais comentado entre os profissionais.",
    a: "Dr. Ricardo Bento",
    r: "Diretor · Clínica Bento · Cliente desde 2022",
  },
  {
    q: "Nosso congresso teve 800 participantes e o kit Tulipani foi a única coisa que todo mundo levou pra casa.",
    a: "Júlia Aragão",
    r: "Coordenadora de eventos · Cliente desde 2021",
  },
];

function Depoimento() {
  const [i, setI] = useState(0);
  const d = DEPOIMENTOS[i];
  return (
    <section className="sec sec--vinho" id="depoimento" data-screen-label="08 Depoimento">
      <div className="container">
        <div className="sec-head" style={{ marginBottom: 40 }}>
          <Eyebrow>Um depoimento</Eyebrow>
        </div>
        <div className="dep">
          <p className="quote">
            <span className="mark">“</span>
            {d.q}
            <span className="mark">”</span>
          </p>
          <div className="dep-divider"></div>
          <p className="author">{d.a}</p>
          <p className="role">{d.r}</p>
          <div className="dep-nav">
            {DEPOIMENTOS.map((_, idx) => (
              <button
                key={idx}
                className={idx === i ? "active" : ""}
                onClick={() => setI(idx)}
                aria-label={"Depoimento " + (idx + 1)}
              />
            ))}
          </div>
          <div className="sec-cta" style={{ marginTop: 40 }}>
            <Cta href="#proposta" variant="creme">Quero presentear assim</Cta>
          </div>
        </div>
      </div>
    </section>
  );
}

// === FAQ ===
const FAQ = [
  { q: "Em quanto tempo vocês entregam?", a: "Pedidos até 100 unidades: 7 dias úteis após aprovação do briefing. Volumes maiores: combinamos no briefing." },
  { q: "Vocês entregam onde?", a: "Em Campinas e região metropolitana, com entrega própria. Combinamos rota e horário para cada pedido. Não atendemos fora dessa região." },
  { q: "Posso colocar o logo da minha empresa?", a: "Sim. Logo na embalagem é padrão. Logo nos doces (impressão comestível) é possível para volumes acima de 100 unidades." },
  { q: "Como funciona o pagamento?", a: "Pix, boleto ou cartão. Para empresas, emitimos NF e parcelamos em até 3x sem juros. Pagamento em 2 etapas: 50% na aprovação, 50% antes da entrega." },
  { q: "Vocês fazem para eventos grandes?", a: "Sim. Já produzimos para congressos com 1.000+ participantes. Briefing antecipado de 30 dias para volumes acima de 500 unidades." },
  { q: "Como vocês trabalham os pedidos?", a: "Cada pedido é desenhado do zero conforme a ocasião, orçamento e identidade da sua marca. Não trabalhamos com pacote padrão. Partimos do briefing e construímos a partir daí." },
];

function Faq() {
  const [open, setOpen] = useState(0);
  return (
    <section className="sec sec--creme" id="faq" data-screen-label="09 FAQ">
      <div className="container">
        <div className="faq-grid">
          <div>
            <Eyebrow>Dúvidas frequentes</Eyebrow>
            <h2 className="h2">Antes de <It>fechar com a gente</It></h2>
            <p className="body" style={{ marginTop: 16 }}>
              Respostas diretas para as dúvidas mais comuns. Se não achar a sua, fala com a gente
              pelo WhatsApp.
            </p>
            <div className="sec-cta" style={{ justifyContent: "flex-start", marginTop: 32 }}>
              <Cta href="#proposta" variant="primary">Solicitar proposta</Cta>
            </div>
          </div>
          <div className="faq-list">
            {FAQ.map((f, idx) => (
              <div key={idx} className={"faq-item" + (open === idx ? " open" : "")}>
                <button className="faq-q" onClick={() => setOpen(open === idx ? -1 : idx)}>
                  <span style={{ display: "flex", alignItems: "baseline", flex: 1 }}>
                    <span className="num">{String(idx + 1).padStart(2, "0")}</span>
                    {f.q}
                  </span>
                  <svg className="chev" viewBox="0 0 20 20" fill="none" stroke="currentColor" strokeWidth="1.5">
                    <path d="M5 7.5l5 5 5-5" />
                  </svg>
                </button>
                <div className="faq-a">
                  <div className="faq-a-inner">
                    <p>{f.a}</p>
                  </div>
                </div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

// === CTA FINAL ===
function CTAFinal() {
  return (
    <section className="sec sec--vinho cta-final" id="proposta" data-screen-label="10 CTA Final">
      <div className="container">
        <Eyebrow>Vamos começar</Eyebrow>
        <h2>Conte para gente <It>o que sua empresa</It> quer presentear</h2>
        <p className="subtitle">Resposta com proposta em até 1 dia útil.</p>
        <a href="https://wa.me/5519982365579" className="btn-whatsapp" target="_blank" rel="noopener">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
            <path d="M19.05 4.91A9.816 9.816 0 0 0 12.04 2c-5.46 0-9.91 4.45-9.91 9.91 0 1.75.46 3.45 1.32 4.95L2.05 22l5.25-1.38c1.45.79 3.08 1.21 4.74 1.21 5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01zm-7.01 15.24c-1.48 0-2.93-.4-4.2-1.15l-.3-.18-3.12.82.83-3.04-.2-.31a8.264 8.264 0 0 1-1.26-4.38c0-4.54 3.7-8.24 8.24-8.24 2.2 0 4.27.86 5.82 2.42a8.183 8.183 0 0 1 2.41 5.83c.02 4.54-3.68 8.23-8.22 8.23zm4.52-6.16c-.25-.12-1.47-.72-1.69-.81-.23-.08-.39-.12-.56.12-.17.25-.64.81-.78.97-.14.17-.29.19-.53.06-.25-.12-1.05-.39-1.99-1.23-.74-.66-1.23-1.47-1.38-1.72-.14-.25-.02-.38.11-.51.11-.11.25-.29.37-.43.12-.14.17-.25.25-.41.08-.17.04-.31-.02-.43-.06-.12-.56-1.34-.76-1.84-.2-.48-.41-.42-.56-.43h-.48c-.17 0-.43.06-.66.31-.22.25-.86.85-.86 2.07 0 1.22.89 2.4 1.01 2.56.12.17 1.75 2.67 4.23 3.74.59.26 1.05.41 1.41.52.59.19 1.13.16 1.56.1.48-.07 1.47-.6 1.67-1.18.21-.58.21-1.07.14-1.18s-.22-.16-.47-.28z"/>
          </svg>
          Falar com a Tulipani no WhatsApp
        </a>
        <p className="small">Atendimento de seg a sex, 9h às 18h · Resposta em até 2 horas no horário comercial</p>
      </div>
    </section>
  );
}

// === FOOTER ===
function Footer() {
  return (
    <footer>
      <div className="container">
        <div className="foot foot-grid">
          <div className="brand-block">
            <a className="brand brand--foot">
              <img src="assets/logo-creme.png" alt="Tulipani Ateliê de Doces" className="brand-logo brand-logo--foot"/>
            </a>
            <p>Ateliê de doces autorais em Campinas. Presentes corporativos feitos à mão para empresas que escolhem afeto como diferencial.</p>
            <p style={{ marginTop: 12, fontSize: 12 }}>R. Joanópolis, 648 · Cidade Jardim · Campinas/SP · 13050-411</p>
          </div>
          <div>
            <h4>Navegação</h4>
            <ul>
              <li><a href="#top">Início</a></li>
              <li><a href="#cases">Cases</a></li>
              <li><a href="#processo">Processo</a></li>
              <li><a href="#sobre">Quem somos</a></li>
              <li><a href="#proposta">Contato</a></li>
            </ul>
          </div>
          <div>
            <h4>Contato</h4>
            <ul>
              <li><a href="https://wa.me/5519982365579">WhatsApp · (19) 98236-5579</a></li>
              <li><a href="mailto:tulipani.ateliedoces@gmail.com">tulipani.ateliedoces@gmail.com</a></li>
              <li><a href="https://instagram.com/tulipani_ateliededoces" target="_blank" rel="noopener">@tulipani_ateliededoces</a></li>
              <li>Seg a sex · 8h às 17h</li>
            </ul>
          </div>
        </div>
        <div className="foot-bot">
          <span>© 2026 Tulipani Ateliê · Feito à mão em Campinas</span>
          <span>Sistema visual v3 · Maio · 2026</span>
        </div>
      </div>
    </footer>
  );
}

Object.assign(window, {
  Nav, Hero, Ocasioes, Cases, ComoFunciona, QuemSomos,
  Personalizacao, ProvaSocial, Depoimento, Faq, CTAFinal, Footer,
});
