// Bom Pain — Sections components
// Depends on globals: React, Illus, BPData

const { useState, useEffect, useRef } = React;

// Hook: reveal-on-scroll for any element
function useReveal(threshold = 0.18) {
  const ref = useRef(null);
  useEffect(() => {
    if (!ref.current) return;
    const obs = new IntersectionObserver(
      (entries) => {
        entries.forEach((e) => {
          if (e.isIntersecting) {
            e.target.classList.add("in");
            // also draw any pencil illustrations within
            e.target.querySelectorAll(".bp-illus").forEach((s) => s.classList.add("bp-drawn"));
          }
        });
      },
      { threshold: 0.05, rootMargin: "0px 0px -8% 0px" }
    );
    obs.observe(ref.current);
    return () => obs.disconnect();
  }, [threshold]);
  return ref;
}

// Reveal wrapper
function Reveal({ children, className = "", delay = 0, ...rest }) {
  const ref = useReveal();
  return (
    <div ref={ref} className={`reveal ${className}`} style={{ transitionDelay: `${delay}ms` }} {...rest}>
      {children}
    </div>
  );
}

// ============= NAV =============
function Nav() {
  const [scrolled, setScrolled] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 60);
    window.addEventListener("scroll", onScroll);
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return (
    <nav className={`nav ${scrolled ? "scrolled" : ""}`}>
      <a href="#" className="nav-brand">
        <Illus.Logo style={{ width: 50, height: 50 }} />
      </a>
      <div className="nav-links">
        <a href="#about">Historia</a>
        <a href="#menu">Menú</a>
        <a href="#gallery">Galería</a>
        <a href="#testimonios">Reseñas</a>
        <a href="#location">Visitanos</a>
      </div>
      <div className="nav-actions">
        <a href={BPData.contact.instagramUrl} target="_blank" rel="noopener noreferrer" className="nav-icon-btn" aria-label="Instagram">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" width="18" height="18">
            <rect x="2" y="2" width="20" height="20" rx="5" ry="5"/>
            <circle cx="12" cy="12" r="4.5"/>
            <circle cx="17.5" cy="6.5" r="1.2" fill="currentColor" stroke="none"/>
          </svg>
        </a>
        <a href={BPData.contact.whatsappUrl} target="_blank" rel="noopener noreferrer" className="nav-icon-btn nav-wa-btn" aria-label="WhatsApp">
          <svg viewBox="0 0 24 24" fill="currentColor" width="18" height="18">
            <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>
        </a>
        <a href="#reserve" className="nav-cta">Reservar</a>
      </div>
    </nav>
  );
}

// ============= FLOATING WHATSAPP =============
function FloatingWhatsApp() {
  return (
    <a href={BPData.contact.whatsappUrl} target="_blank" rel="noopener noreferrer"
       className="floating-wa" aria-label="Escribinos por WhatsApp">
      <svg viewBox="0 0 24 24" fill="white" width="28" height="28">
        <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>
      <span className="floating-wa-label">WhatsApp</span>
    </a>
  );
}

// ============= HERO =============
function Hero({ variant = "a" }) {
  const ref = useReveal(0.05);
  useEffect(() => {
    if (ref.current) {
      ref.current.querySelectorAll(".bp-illus").forEach((s) => s.classList.add("bp-drawn"));
      ref.current.classList.add("in");
    }
  }, []);

  return (
    <section ref={ref} className={`hero reveal hero-variant-${variant}`}>
      <div className="hero-grid">
        <div>
          <div className="hero-eyebrow">
            <span className="line"></span>
            <span className="eyebrow">Boulangerie · Café · Ñemby</span>
          </div>
          <h1>
            Bom Pain.
            <span className="script-line">El arte del pan.</span>
          </h1>
          <p className="hero-lede">
            Una panadería de barrio con alma francesa y corazón paraguayo.
            Café de origen, pan de masa madre y los sabores de la abuela,
            servidos con calma desde 2019.
          </p>
          <div className="hero-cta">
            <a href="#reserve" className="btn-primary">
              Reservar mesa <span className="btn-arrow">→</span>
            </a>
            <a href="#menu" className="btn-ghost">
              Ver el menú <span className="btn-arrow">→</span>
            </a>
          </div>
        </div>

        <div className="hero-art">
          <Illus.CoffeeCup className="hero-art-cup steam-loop" />
          <span className="hero-meta hero-meta-2">
            Bom Pain
            <span className="num">Ñemby</span>
          </span>
          <Illus.Wheat className="hero-floating hero-floating-1" />
          <Illus.Croissant className="hero-floating hero-floating-2" />
        </div>
      </div>

      <div className="hero-marquee">
        <div className="hero-marquee-inner">
          {[...BPData.marquee, ...BPData.marquee].map((s, i) => (
            <span key={i}>
              {s}
              <span className="dot"></span>
            </span>
          ))}
        </div>
      </div>
    </section>
  );
}

// ============= ABOUT =============
function About() {
  return (
    <section id="about" className="section section-paper">
      <div className="container">
        <div className="about-grid">
          <Reveal>
            <div className="about-image">
              <img
                src="https://images.unsplash.com/photo-1568254183919-78a4f43a2877?w=700&h=900&fit=crop&auto=format"
                alt="Panaderos en el horno"
                style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", display: "block" }}
                loading="lazy"
              />
            </div>
          </Reveal>
          <Reveal delay={150}>
            <div className="about-text">
              <span className="eyebrow">Nuestra historia</span>
              <h2 style={{ marginTop: 18 }}>
                Donde el pan
                <span className="script">— se hace con tiempo</span>
              </h2>
              <p>
                Bom Pain nació en una pequeña esquina de Ñemby en 2019, con un horno
                a leña, dos manos pacientes y la convicción de que el pan se hornea sin
                prisa. Hoy seguimos amasando como el primer día.
              </p>
              <p>
                Combinamos la tradición de la boulangerie francesa — masa madre,
                fermentaciones largas, mantequilla de calidad — con los sabores que
                aprendimos de nuestras abuelas: chipa al horno, sopa paraguaya recién
                hecha, mbeju en sartén caliente.
              </p>
              <div className="about-stats">
                <div className="about-stat">
                  <span className="num">07</span>
                  <span className="label">Años horneando</span>
                </div>
                <div className="about-stat">
                  <span className="num">48h</span>
                  <span className="label">De fermentación</span>
                </div>
                <div className="about-stat">
                  <span className="num">∞</span>
                  <span className="label">Tazas de café</span>
                </div>
              </div>
            </div>
          </Reveal>
        </div>
      </div>
    </section>
  );
}

// ============= MENU =============
function Menu() {
  const [tab, setTab] = useState("cafe");
  const tabs = Object.keys(BPData.menu);
  const active = BPData.menu[tab];

  // Re-trigger draw animation when tab changes
  const gridRef = useRef(null);
  useEffect(() => {
    if (!gridRef.current) return;
    const items = gridRef.current.querySelectorAll(".bp-illus");
    items.forEach((s) => s.classList.remove("bp-drawn"));
    requestAnimationFrame(() => {
      requestAnimationFrame(() => items.forEach((s) => s.classList.add("bp-drawn")));
    });
  }, [tab]);

  return (
    <section id="menu" className="section">
      <div className="container">
        <div className="section-head">
          <span className="eyebrow">La carta</span>
          <h2>Para todo el día</h2>
          <p className="lede">
            De la primera taza al último postre, una pequeña selección hecha a mano.
          </p>
        </div>

        <Reveal>
          <div className="menu-tabs">
            {tabs.map((k) => (
              <button
                key={k}
                className={`menu-tab ${tab === k ? "active" : ""}`}
                onClick={() => setTab(k)}
              >
                {BPData.menu[k].label}
              </button>
            ))}
          </div>
        </Reveal>

        <div className="menu-grid" ref={gridRef} key={tab}>
          {active.items.map((item, i) => {
            return (
              <div key={item.name} className="menu-item reveal in" style={{ transitionDelay: `${i * 50}ms` }}>
                <div className="menu-item-icon">
                  <span className="material-symbols-outlined menu-ms-icon">{item.icon}</span>
                </div>
                <div className="menu-item-body">
                  <h4>{item.name}</h4>
                  <div className="item-tags">{item.tags}</div>
                  <p>{item.desc}</p>
                </div>
                <div className="menu-item-price">{item.price}</div>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

// ============= GALLERY + LIGHTBOX =============
function Gallery() {
  const [open, setOpen] = useState(null); // index
  const items = BPData.gallery;

  useEffect(() => {
    const onKey = (e) => {
      if (open === null) return;
      if (e.key === "Escape") setOpen(null);
      if (e.key === "ArrowRight") setOpen((o) => (o + 1) % items.length);
      if (e.key === "ArrowLeft") setOpen((o) => (o - 1 + items.length) % items.length);
    };
    window.addEventListener("keydown", onKey);
    return () => window.removeEventListener("keydown", onKey);
  }, [open, items.length]);

  return (
    <section id="gallery" className="section section-paper">
      <div className="container">
        <div className="section-head">
          <span className="eyebrow">Galería</span>
          <h2>Tras la vitrina</h2>
          <p className="lede">Un pequeño retrato de nuestras mañanas.</p>
        </div>

        <Reveal>
          <div className="gallery-grid">
            {items.map((g, i) => (
              <div
                key={i}
                className={`gallery-item ${g.className}`}
                onClick={() => setOpen(i)}
              >
                {g.img
                  ? <img src={g.img} alt={g.label} className="gallery-real-img" loading="lazy" />
                  : <div className="img-fill"><span className="label">{g.label}</span></div>
                }
                <div className="overlay">
                  <span className="meta">{g.label}</span>
                </div>
              </div>
            ))}
          </div>
        </Reveal>
      </div>

      <div className={`lightbox ${open !== null ? "open" : ""}`} onClick={() => setOpen(null)}>
        {open !== null && (
          <div className="lightbox-content" onClick={(e) => e.stopPropagation()}>
            <button className="lightbox-close" onClick={() => setOpen(null)}>
              Cerrar <span>✕</span>
            </button>
            <button
              className="lightbox-nav lightbox-prev"
              onClick={() => setOpen((o) => (o - 1 + items.length) % items.length)}
            >
              ←
            </button>
            {items[open].img
              ? <img src={items[open].img} alt={items[open].label} className="gallery-real-img" />
              : <div className="img-fill"><span className="label">{items[open].label}</span></div>
            }
            <button
              className="lightbox-nav lightbox-next"
              onClick={() => setOpen((o) => (o + 1) % items.length)}
            >
              →
            </button>
          </div>
        )}
      </div>
    </section>
  );
}

// ============= RESERVATIONS =============
function Reservations() {
  const today = new Date().toISOString().split("T")[0];
  const [form, setForm] = useState({
    name: "", phone: "", email: "",
    date: today, time: "12:30", party: 2,
    occasion: "Almuerzo", notes: "",
  });
  const [submitted, setSubmitted] = useState(false);
  const [confirmation, setConfirmation] = useState(null);

  const update = (k, v) => setForm((f) => ({ ...f, [k]: v }));

  const submit = (e) => {
    e.preventDefault();
    if (!form.name || !form.phone) return;
    const code = "BP-" + Math.random().toString(36).slice(2, 6).toUpperCase() +
      "-" + new Date().getFullYear().toString().slice(-2);
    setConfirmation({ ...form, code });
    setSubmitted(true);
  };

  const reset = () => {
    setSubmitted(false);
    setForm({ name: "", phone: "", email: "", date: today, time: "12:30", party: 2, occasion: "Almuerzo", notes: "" });
  };

  const times = [];
  for (let h = 8; h <= 20; h++) {
    times.push(`${String(h).padStart(2, "0")}:00`);
    times.push(`${String(h).padStart(2, "0")}:30`);
  }

  return (
    <section id="reserve" className="section section-coffee">
      <div className="container">
        <div className="reserve-grid">
          <Reveal className="reserve-info">
            <span className="eyebrow">Reservas</span>
            <h2 style={{ marginTop: 18 }}>
              Aparta tu mesa<span className="script" style={{ display: "block", color: "var(--paper-edge)" }}>— para una buena tarde</span>
            </h2>
            <p>
              Confirma tu reserva en menos de un minuto. Te esperamos con el horno
              encendido y una mesa junto a la ventana, si así lo deseas.
            </p>
            <Illus.Ornament style={{ width: 240, color: "var(--paper-edge)", margin: "30px 0" }} className="bp-drawn" />
            <div className="hours">
              <h4>Horarios de atención</h4>
              {BPData.hours.map((h) => (
                <div key={h.day} className="hours-row">
                  <span>{h.day}</span>
                  <span>{h.time}</span>
                </div>
              ))}
            </div>
          </Reveal>

          <Reveal delay={150}>
            <div className="reserve-form">
              {!submitted ? (
                <form onSubmit={submit}>
                  <div className="form-row">
                    <div className="field">
                      <label>Nombre completo *</label>
                      <input
                        type="text"
                        value={form.name}
                        onChange={(e) => update("name", e.target.value)}
                        placeholder="María González"
                        required
                      />
                    </div>
                    <div className="field">
                      <label>Teléfono *</label>
                      <input
                        type="tel"
                        value={form.phone}
                        onChange={(e) => update("phone", e.target.value)}
                        placeholder="+595 981 000 000"
                        required
                      />
                    </div>
                  </div>

                  <div className="form-row single">
                    <div className="field">
                      <label>Correo electrónico</label>
                      <input
                        type="email"
                        value={form.email}
                        onChange={(e) => update("email", e.target.value)}
                        placeholder="maria@correo.com"
                      />
                    </div>
                  </div>

                  <div className="form-row">
                    <div className="field">
                      <label>Fecha *</label>
                      <input
                        type="date"
                        value={form.date}
                        min={today}
                        onChange={(e) => update("date", e.target.value)}
                        required
                      />
                    </div>
                    <div className="field">
                      <label>Hora *</label>
                      <select value={form.time} onChange={(e) => update("time", e.target.value)}>
                        {times.map((t) => <option key={t} value={t}>{t}</option>)}
                      </select>
                    </div>
                  </div>

                  <div className="form-row">
                    <div className="field">
                      <label>Personas *</label>
                      <div className="party-counter">
                        <button type="button" onClick={() => update("party", Math.max(1, form.party - 1))}>−</button>
                        <span>{form.party}</span>
                        <button type="button" onClick={() => update("party", Math.min(20, form.party + 1))}>+</button>
                      </div>
                    </div>
                    <div className="field">
                      <label>Ocasión</label>
                      <select value={form.occasion} onChange={(e) => update("occasion", e.target.value)}>
                        <option>Desayuno</option>
                        <option>Almuerzo</option>
                        <option>Merienda</option>
                        <option>Reunión</option>
                        <option>Cumpleaños</option>
                        <option>Otro</option>
                      </select>
                    </div>
                  </div>

                  <div className="form-row single">
                    <div className="field">
                      <label>Comentarios</label>
                      <textarea
                        value={form.notes}
                        onChange={(e) => update("notes", e.target.value)}
                        placeholder="Mesa junto a la ventana, alergias, celebración..."
                      />
                    </div>
                  </div>

                  <button type="submit" className="btn-submit">
                    Confirmar reserva <span>→</span>
                  </button>
                </form>
              ) : (
                <div className="reserve-success">
                  <Illus.Ornament style={{ width: 200, margin: "0 auto", color: "var(--coffee-soft)" }} className="bp-drawn" />
                  <h3>Reserva confirmada</h3>
                  <p>Te esperamos, {confirmation.name.split(" ")[0]}. Hemos enviado los detalles a tu teléfono.</p>
                  <dl className="ticket">
                    <dt>Código</dt><dd>{confirmation.code}</dd>
                    <dt>Fecha</dt><dd>{confirmation.date}</dd>
                    <dt>Hora</dt><dd>{confirmation.time}</dd>
                    <dt>Personas</dt><dd>{confirmation.party}</dd>
                    <dt>Ocasión</dt><dd>{confirmation.occasion}</dd>
                    <dt>Contacto</dt><dd>{confirmation.phone}</dd>
                  </dl>
                  <button className="btn-submit" onClick={reset} style={{ marginTop: 20 }}>
                    Hacer otra reserva
                  </button>
                </div>
              )}
            </div>
          </Reveal>
        </div>
      </div>
    </section>
  );
}

// ============= TESTIMONIALS =============
function Testimonials() {
  return (
    <section id="testimonios" className="section">
      <div className="container">
        <div className="section-head">
          <span className="eyebrow">Lo dicen quienes nos visitan</span>
          <h2>Pequeñas cartas</h2>
          <p className="lede">Algunas de las palabras más bonitas que hemos recibido.</p>
        </div>

        <div className="testimonials">
          {BPData.testimonials.map((t, i) => (
            <Reveal key={i} delay={i * 100}>
              <div className="testimonial">
                <span className="quote-mark">"</span>
                <div className="stars">★ ★ ★ ★ ★</div>
                <blockquote>{t.quote}</blockquote>
                <cite>
                  <span className="name">{t.name}</span>
                  {t.meta}
                </cite>
              </div>
            </Reveal>
          ))}
        </div>
      </div>
    </section>
  );
}

// ============= LOCATION =============
function Location() {
  return (
    <section id="location" className="section section-paper">
      <div className="container">
        <div className="section-head">
          <span className="eyebrow">Visítanos</span>
          <h2>Donde nos encuentras</h2>
        </div>

        <div className="location-grid">
          <Reveal>
            <div className="location-info">
              <h3>Bom Pain<br /><span style={{ fontSize: "0.65em", color: "var(--coffee-soft)" }}>Ñemby, Paraguay</span></h3>
              <p className="address">
                Pasá a tomar un café, una medialuna recién horneada o simplemente a descansar.
                Atendemos de lunes a domingo.
              </p>
              <a href={BPData.contact.whatsappUrl} target="_blank" rel="noopener noreferrer" className="contact-row contact-row-link">
                <span className="label">WhatsApp</span>
                <span className="value">{BPData.contact.whatsappDisplay}</span>
                <span className="contact-arrow">→</span>
              </a>
              <a href={BPData.contact.instagramUrl} target="_blank" rel="noopener noreferrer" className="contact-row contact-row-link">
                <span className="label">Instagram</span>
                <span className="value">@{BPData.contact.instagram}</span>
                <span className="contact-arrow">→</span>
              </a>
              <a href={BPData.contact.mapsUrl} target="_blank" rel="noopener noreferrer" className="contact-row contact-row-link">
                <span className="label">Ubicación</span>
                <span className="value">Ver en Google Maps</span>
                <span className="contact-arrow">→</span>
              </a>
              <div className="socials">
                <a href={BPData.contact.instagramUrl} target="_blank" rel="noopener noreferrer"
                   className="nav-icon-btn loc-social-icon" aria-label="Instagram" title={`@${BPData.contact.instagram}`}>
                  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" width="20" height="20">
                    <rect x="2" y="2" width="20" height="20" rx="5" ry="5"/>
                    <circle cx="12" cy="12" r="4.5"/>
                    <circle cx="17.5" cy="6.5" r="1.2" fill="currentColor" stroke="none"/>
                  </svg>
                </a>
                <a href={BPData.contact.whatsappUrl} target="_blank" rel="noopener noreferrer"
                   className="nav-icon-btn nav-wa-btn loc-social-icon" aria-label="WhatsApp" title={BPData.contact.whatsappDisplay}>
                  <svg viewBox="0 0 24 24" fill="currentColor" width="20" height="20">
                    <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>
                </a>
              </div>
            </div>
          </Reveal>

          <Reveal delay={150}>
            <div className="location-map location-map-real">
              <iframe
                src={BPData.contact.mapsEmbed}
                width="100%"
                height="100%"
                style={{ border: 0 }}
                allowFullScreen=""
                loading="lazy"
                referrerPolicy="no-referrer-when-downgrade"
                title="Ubicación Bom Pain"
              />
            </div>
          </Reveal>
        </div>
      </div>
    </section>
  );
}

// ============= FOOTER =============
function Footer() {
  return (
    <footer className="footer">
      <div className="footer-grid">
        <div>
          <div className="footer-brand">
            Bom Pain
            <span className="script">Boulangerie · Café — Ñemby, 2019</span>
          </div>
          <p className="footer-tagline">
            El arte del pan, una taza de café y los sabores de siempre. Atendido por sus dueños.
          </p>
        </div>
        <div className="footer-col">
          <h5>Visítanos</h5>
          <ul>
            <li><a href="#about">Historia</a></li>
            <li><a href="#menu">Menú</a></li>
            <li><a href="#gallery">Galería</a></li>
            <li><a href="#location">Ubicación</a></li>
          </ul>
        </div>
        <div className="footer-col">
          <h5>Servicios</h5>
          <ul>
            <li>Reservas</li>
            <li>Eventos privados</li>
            <li>Pedidos para llevar</li>
            <li>Pan por encargo</li>
          </ul>
        </div>
        <div className="footer-col">
          <h5>Síguenos</h5>
          <ul>
            <li><a href={BPData.contact.instagramUrl} target="_blank" rel="noopener noreferrer">@{BPData.contact.instagram}</a></li>
            <li><a href={BPData.contact.whatsappUrl} target="_blank" rel="noopener noreferrer">{BPData.contact.whatsappDisplay}</a></li>
            <li><a href={BPData.contact.mapsUrl} target="_blank" rel="noopener noreferrer">Google Maps</a></li>
          </ul>
        </div>
      </div>
      <div className="footer-bottom">
        <span>© 2026 Bom Pain — Hecho con manos pacientes</span>
        <span>Ñemby, Paraguay · <a href={BPData.contact.instagramUrl} target="_blank" rel="noopener noreferrer" style={{color:"inherit"}}>@{BPData.contact.instagram}</a></span>
      </div>
    </footer>
  );
}

// ============= INTRO SCREEN =============
function IntroScreen() {
  const [phase, setPhase] = useState("entering");

  useEffect(() => {
    document.body.style.overflow = "hidden";
    // Mount → visible on next frame
    const rAF = requestAnimationFrame(() => setPhase("visible"));
    // Start exit after 2.3s
    const tOut = setTimeout(() => setPhase("exiting"), 2300);
    // Remove from DOM after 3.1s
    const tGone = setTimeout(() => {
      setPhase("gone");
      document.body.style.overflow = "";
    }, 3100);
    return () => {
      cancelAnimationFrame(rAF);
      clearTimeout(tOut);
      clearTimeout(tGone);
      document.body.style.overflow = "";
    };
  }, []);

  if (phase === "gone") return null;

  return (
    <div className={`intro-screen intro-${phase}`} aria-hidden="true">
      <div className="intro-inner">
        <div className="intro-cup">
          <Illus.CoffeeCup className="bp-drawn steam-loop" style={{ width: 150, color: "var(--coffee)" }} />
        </div>
        <div className="intro-logo-wrap">
          <Illus.Logo style={{ width: 130, height: 130 }} />
        </div>
        <div className="intro-tagline">Ñemby · Desde 2019</div>
      </div>
    </div>
  );
}

Object.assign(window, {
  Nav, Hero, About, Menu, Gallery, Reservations, Testimonials, Location, Footer, Reveal, useReveal, FloatingWhatsApp, IntroScreen,
});
