// nav.jsx: top geo banner + main navigation (with dropdown megamenus)

function GeoBanner({ visible, onDismiss }) {
  const T = window.l2uTokens;
  if (!visible) return null;
  return (
    <div style={{
      background: T.bluishGrey, color: "#fff",
      fontFamily: T.fontSans, fontSize: 13,
      display: "flex", alignItems: "center", justifyContent: "center",
      gap: 16, padding: "10px 24px",
      borderBottom: "1px solid rgba(255,255,255,0.06)",
    }}>
      <span style={{ display: "inline-flex", alignItems: "center", gap: 8 }}>
        <span style={{ fontSize: 14 }}>🇵🇭</span>
        <span>It looks like you're in <strong style={{ fontWeight: 700 }}>Philippines</strong>.</span>
      </span>
      <a href="/" style={{
        color: "#6EC1F7", textDecoration: "none", fontWeight: 600,
        display: "inline-flex", alignItems: "center", gap: 6,
      }}>
        You're on the Philippines site
        <svg width="12" height="12" viewBox="0 0 14 14" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M2 7h10M8 3l4 4-4 4"/></svg>
      </a>
      <button onClick={onDismiss} aria-label="Dismiss"
        onMouseEnter={(e) => { e.currentTarget.style.color = "#fff"; }}
        onMouseLeave={(e) => { e.currentTarget.style.color = "rgba(255,255,255,0.6)"; }}
        style={{
        marginLeft: 8, background: "transparent", border: "none",
        color: "rgba(255,255,255,0.6)", cursor: "pointer", fontSize: 18, lineHeight: 1,
        padding: 0, width: 22, height: 22, display: "inline-flex", alignItems: "center", justifyContent: "center",
        transition: "color .15s ease",
      }}>×</button>
    </div>
  );
}

// ── Menu data ───────────────────────────────────────────────────────────
const NAV_PRODUCTS = [
  { title: "Route optimization", href: "https://locate2u-ph.com/ph/products/route-optimization", desc: "AI-powered route planning for maximum efficiency", icon: "route",    color: "#2B93FF", bg: "rgba(43,147,255,0.12)" },
  { title: "Customer tracking",  href: "https://locate2u-ph.com/ph/products/customer-tracking",  desc: "Live tracking links for every delivery",             icon: "track",    color: "#2DD27A", bg: "rgba(45,210,122,0.12)" },
  { title: "Proof of delivery",  href: "https://locate2u-ph.com/ph/products/proof-of-delivery",  desc: "Photos, e-signatures & instant confirmation",         icon: "pod",      color: "#0B73D1", bg: "rgba(11,115,209,0.12)" },
  { title: "Driver app",         href: "https://locate2u-ph.com/ph/products/driver-app",         desc: "iOS & Android app for your team",                     icon: "driver",   color: "#7B5FD2", bg: "rgba(123,95,210,0.12)" },
  { title: "Dispatch dashboard", href: "https://locate2u-ph.com/ph/products/dispatch-dashboard", desc: "Centralized dispatch & planning",                     icon: "dispatch", color: "#F4A11D", bg: "rgba(244,161,29,0.12)" },
  { title: "API & integrations", href: "https://locate2u-ph.com/ph/products/api-integrations",   desc: "Connect with your existing systems",                  icon: "api",      color: "#1C3E61", bg: "rgba(28,62,97,0.10)" },
];

const NAV_SOLUTIONS = {
  industry: [
    { label: "Furniture delivery",        href: "https://locate2u-ph.com/ph/solutions/furniture-delivery" },
    { label: "Water & LPG delivery",      href: "https://locate2u-ph.com/ph/solutions/water-lpg-delivery" },
    { label: "Pharmacy delivery",         href: "https://locate2u-ph.com/ph/solutions/pharmacy-delivery" },
    { label: "Florist delivery",          href: "https://locate2u-ph.com/ph/solutions/florist-delivery" },
    { label: "F&B distribution",          href: "https://locate2u-ph.com/ph/solutions/fb-distribution" },
    { label: "Field service scheduling",  href: "https://locate2u-ph.com/ph/solutions/field-service-scheduling" },
  ],
  useCase: [
    { label: "Last Mile Delivery",         href: "https://locate2u-ph.com/ph/products/last-mile-delivery" },
    { label: "Route Planning",             href: "https://locate2u-ph.com/ph/products/route-planning" },
    { label: "Delivery Management",        href: "https://locate2u-ph.com/ph/products/delivery-management" },
    { label: "Transport Management (TMS)", href: "https://locate2u-ph.com/ph/products/transport-management" },
    { label: "Asset Tracking",             href: "https://locate2u-ph.com/ph/products/asset-tracking" },
  ],
};

const NAV_RESOURCES = [
  { label: "Customers",         href: "https://www.locate2u.com/customers/" },
  { label: "Blog",              href: "https://www.locate2u.com/blog/" },
  { label: "Masterclasses",     href: "https://www.locate2u.com/resources/masterclasses/" },
  { label: "API documentation", href: "https://www.locate2u.com/resources/api-docs/" },
  { label: "Help Center",       href: "https://www.locate2u.com/resources/help-center/" },
  { label: "Product Updates",   href: "https://www.locate2u.com/resources/product-updates/" },
];

// ── Global-site interstitial ──────────────────────────────────────────────
// The PH site links out to the Locate2u global site (locate2u.com) for a few
// resources. Any click on such a link is intercepted here and opened in a NEW
// browser tab, with a brief "taking you to the global site" loading screen shown
// in that new tab before it lands on locate2u.com, so visitors understand they
// are leaving the Philippines property while keeping the PH tab open. The new tab
// is opened synchronously inside the click handler so it is not popup-blocked; if
// a blocker still prevents it, we fall back to the same-tab interstitial.
// Implemented as
// a single document-level listener (not per-link) so it covers every current
// and future global link, on any page that loads nav.jsx.
(function () {
  if (typeof document === "undefined" || window.__l2uGlobalRedirect) return;
  window.__l2uGlobalRedirect = true;

  // Official Locate2u Blue logo (dark backgrounds), 200x51 PNG from the
  // l2u-logo brand skill, inlined as a data URI so it renders instantly in the
  // fresh new tab (about:blank) without a network request.
  const L2U_LOGO_BLUE = "data:image/png;base64,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";

  // Matches locate2u.com and www.locate2u.com, but NOT locate2u-ph.com.
  const GLOBAL_HOST = /(^|\.)locate2u\.com$/i;

  function isGlobalLink(href) {
    try { return GLOBAL_HOST.test(new URL(href, window.location.href).hostname); }
    catch (e) { return false; }
  }

  // The branded loading-screen contents (wordmark, spinner, message), reused by
  // both the new-tab document and the same-tab fallback overlay.
  function loadingInner(primary, mono) {
    return (
      // Official Locate2u Blue logo (for dark backgrounds), embedded as the real
      // PNG asset per the l2u-logo brand skill, never a recreated wordmark.
      '<img src="' + L2U_LOGO_BLUE + '" alt="Locate2u" style="height:46px;width:auto;display:block;object-fit:contain" />' +
      '<svg width="50" height="50" viewBox="0 0 50 50" aria-hidden="true" style="display:block">' +
        '<circle cx="25" cy="25" r="20" fill="none" stroke="rgba(255,255,255,0.15)" stroke-width="5"></circle>' +
        '<circle cx="25" cy="25" r="20" fill="none" stroke="' + primary + '" stroke-width="5" stroke-linecap="round" stroke-dasharray="80 46">' +
          '<animateTransform attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.9s" repeatCount="indefinite"></animateTransform>' +
        '</circle>' +
      '</svg>' +
      '<div style="font-size:20px;font-weight:700;letter-spacing:-0.3px;max-width:440px;line-height:1.3;">Taking you to the Locate2u global site…</div>' +
      '<div style="font-family:' + mono + ';font-size:12px;letter-spacing:0.4px;color:rgba(255,255,255,0.6);">You’re leaving the Philippines site · locate2u.com</div>'
    );
  }

  // A self-contained HTML document for the new tab: shows the loading screen,
  // then replaces itself with the global URL (location.replace keeps about:blank
  // out of the new tab's history). A <meta refresh> is a no-JS fallback.
  function interstitialDoc(href, dark, primary, sans, mono) {
    const metaSafe = String(href).replace(/"/g, "%22");
    return (
      '<!doctype html><html lang="en"><head><meta charset="utf-8">' +
      '<title>Taking you to Locate2u…</title>' +
      '<meta name="viewport" content="width=device-width, initial-scale=1">' +
      '<meta http-equiv="refresh" content="2;url=' + metaSafe + '">' +
      '<style>html,body{height:100%}body{margin:0;display:flex;flex-direction:column;' +
        'align-items:center;justify-content:center;gap:22px;padding:24px;text-align:center;' +
        'background:' + dark + ';color:#fff;font-family:' + sans + ';}</style>' +
      '</head><body>' + loadingInner(primary, mono) +
      '<scr' + 'ipt>setTimeout(function(){try{window.opener=null;}catch(e){}' +
        'window.location.replace(' + JSON.stringify(href) + ');},1300);</scr' + 'ipt>' +
      '</body></html>'
    );
  }

  // Same-tab fallback: only used if the new tab is blocked. Shows the overlay on
  // the current page and navigates it, matching the original behavior.
  function sameTabInterstitial(href, dark, primary, sans, mono) {
    const overlay = document.createElement("div");
    overlay.setAttribute("role", "status");
    overlay.setAttribute("aria-live", "polite");
    overlay.style.cssText = [
      "position:fixed", "inset:0", "z-index:2147483647",
      "display:flex", "flex-direction:column", "align-items:center", "justify-content:center",
      "gap:22px", "padding:24px", "text-align:center",
      "background:" + dark, "color:#fff", "font-family:" + sans,
      "opacity:0", "transition:opacity .22s ease",
    ].join(";");
    overlay.innerHTML = loadingInner(primary, mono);
    document.body.appendChild(overlay);
    void overlay.offsetWidth; // force reflow so the fade-in transition runs
    overlay.style.opacity = "1";
    window.setTimeout(function () { window.location.href = href; }, 1300);
  }

  function goGlobal(href) {
    const T = window.l2uTokens || {};
    const dark = T.darkBlue || "#01101F";
    const primary = T.primary || "#2B93FF";
    const sans = T.fontSans || "'Roboto', system-ui, -apple-system, sans-serif";
    const mono = T.fontMono || "'JetBrains Mono', monospace";

    // Open the global site in a NEW tab. Opening synchronously here (inside the
    // click handler's gesture) keeps it out of the popup blocker; the loading
    // screen is rendered in that new tab so the PH tab stays put.
    let w = null;
    try { w = window.open("", "_blank"); } catch (e) { w = null; }
    if (w && w.document) {
      try {
        w.document.open();
        w.document.write(interstitialDoc(href, dark, primary, sans, mono));
        w.document.close();
        if (w.focus) w.focus();
        return;
      } catch (e) { /* fall through to same-tab fallback */ }
    }
    sameTabInterstitial(href, dark, primary, sans, mono);
  }
  window.L2U_goGlobal = goGlobal;

  document.addEventListener("click", function (e) {
    // Let modified / non-primary clicks and new-tab links behave normally.
    if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
    const a = e.target && e.target.closest ? e.target.closest("a[href]") : null;
    if (!a || a.target === "_blank" || a.hasAttribute("download")) return;
    const href = a.getAttribute("href");
    if (!href || !isGlobalLink(href)) return;
    e.preventDefault();
    goGlobal(href);
  }, true);
})();

function ProdIcon({ name, color }) {
  const paths = {
    route:    (<g><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"/><polyline points="17 6 23 6 23 12"/></g>),
    track:    (<g><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></g>),
    pod:      (<g><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></g>),
    driver:   (<g><rect x="5" y="2" width="14" height="20" rx="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></g>),
    dispatch: (<g><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></g>),
    api:      (<g><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></g>),
  };
  return (
    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      {paths[name]}
    </svg>
  );
}

function DropLink({ children, href }) {
  const T = window.l2uTokens;
  return (
    <a
      href={href || "#"}
      onMouseEnter={(e) => { e.currentTarget.style.background = "rgba(28,62,97,0.05)"; e.currentTarget.style.color = T.primaryDeep; }}
      onMouseLeave={(e) => { e.currentTarget.style.background = "transparent"; e.currentTarget.style.color = T.bluishGrey; }}
      style={{
        display: "block", padding: "9px 12px", borderRadius: 8, textDecoration: "none",
        color: T.bluishGrey, fontSize: 14, fontWeight: 500,
      }}>{children}</a>
  );
}

function Panel({ children, width, align }) {
  return (
    <div style={{
      position: "absolute", top: "100%", zIndex: 100,
      [align === "right" ? "right" : "left"]: 0,
      paddingTop: 14, // transparent hover-bridge to the trigger
    }}>
      <div style={{
        width, background: "#fff", borderRadius: 16,
        border: "1px solid rgba(28,62,97,0.10)",
        boxShadow: "0 20px 48px rgba(15,31,56,0.16)",
        padding: 20,
      }}>{children}</div>
    </div>
  );
}

function MenuEyebrow({ children }) {
  const T = window.l2uTokens;
  return (
    <div style={{
      fontFamily: T.fontMono, fontSize: 10.5, fontWeight: 700, letterSpacing: "1.4px",
      color: T.mute2, marginBottom: 12,
    }}>{children}</div>
  );
}

function Nav() {
  const T = window.l2uTokens;
  const [open, setOpen] = React.useState(null);
  const [mobileOpen, setMobileOpen] = React.useState(false);
  const m = window.useIsMobile();

  const trigger = (label) => {
    const isOpen = open === label;
    return (
      <button
        type="button"
        onClick={() => setOpen(isOpen ? null : label)}
        style={{
          background: isOpen ? "rgba(28,62,97,0.06)" : "transparent",
          border: "none", cursor: "pointer",
          color: "rgba(28,62,97,0.85)", fontFamily: T.fontSans, fontSize: 14, fontWeight: 500,
          display: "inline-flex", alignItems: "center", gap: 5, padding: "8px 12px", borderRadius: 8,
        }}>
        {label}
        <svg width="10" height="10" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round"
          style={{ opacity: 0.5, transform: isOpen ? "rotate(180deg)" : "none", transition: "transform .15s ease" }}><path d="m2 4 3 3 3-3"/></svg>
      </button>
    );
  };

  const dropdown = (label, panel) => (
    <div
      style={{ position: "relative" }}
      onMouseEnter={() => setOpen(label)}
      onMouseLeave={() => setOpen(null)}
    >
      {trigger(label)}
      {open === label && panel}
    </div>
  );

  const linkItem = (label, href) => (
    <a href={href || "#"} style={{
      color: "rgba(28,62,97,0.85)", textDecoration: "none", fontSize: 14, fontWeight: 500,
      padding: "8px 12px", display: "inline-flex", alignItems: "center",
    }}>{label}</a>
  );

  // ── Panels ──
  const productsPanel = (
    <Panel width={620}>
      <MenuEyebrow>CORE PLATFORM</MenuEyebrow>
      <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 4 }}>
        {NAV_PRODUCTS.map((p) => (
          <a key={p.title} href={p.href || "#"}
            onMouseEnter={(e) => { e.currentTarget.style.background = "rgba(28,62,97,0.04)"; }}
            onMouseLeave={(e) => { e.currentTarget.style.background = "transparent"; }}
            style={{ display: "flex", gap: 12, padding: 12, borderRadius: 12, textDecoration: "none" }}>
            <span style={{
              flexShrink: 0, width: 40, height: 40, borderRadius: 10, background: p.bg,
              display: "inline-flex", alignItems: "center", justifyContent: "center",
            }}><ProdIcon name={p.icon} color={p.color} /></span>
            <span>
              <span style={{ display: "block", fontSize: 14, fontWeight: 700, color: T.bluishGrey }}>{p.title}</span>
              <span style={{ display: "block", fontSize: 12.5, color: T.mute, marginTop: 2, lineHeight: "17px" }}>{p.desc}</span>
            </span>
          </a>
        ))}
      </div>
    </Panel>
  );

  const solutionsPanel = (
    <Panel width={480}>
      <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 24 }}>
        <div>
          <MenuEyebrow>BY INDUSTRY</MenuEyebrow>
          {NAV_SOLUTIONS.industry.map((s) => <DropLink key={s.label} href={s.href}>{s.label}</DropLink>)}
        </div>
        <div>
          <MenuEyebrow>BY USE CASE</MenuEyebrow>
          {NAV_SOLUTIONS.useCase.map((s) => <DropLink key={s.label} href={s.href}>{s.label}</DropLink>)}
        </div>
      </div>
    </Panel>
  );

  const resourcesPanel = (
    <Panel width={260} align="right">
      <MenuEyebrow>RESOURCES</MenuEyebrow>
      {NAV_RESOURCES.map((r) => <DropLink key={r.label} href={r.href}>{r.label}</DropLink>)}
    </Panel>
  );

  const logo = (
    <a href="/" aria-label="Locate2u Philippines, home" style={{ display: "flex", alignItems: "center", gap: 12, textDecoration: "none" }}>
      <img src={(window.__resources && window.__resources.logoClassic) || "assets/logo-classic.png"} alt="Locate2u" style={{ height: m ? 30 : 34, width: "auto", display: "block" }} />
      <span style={{
        padding: "3px 8px", borderRadius: 6, background: "rgba(43,147,255,0.10)",
        color: T.primaryDeep, fontFamily: T.fontMono, fontSize: 10,
        letterSpacing: "1.2px", fontWeight: 700,
      }}>PH</span>
    </a>
  );

  return (
    <React.Fragment>
      <div style={{
        display: "flex", alignItems: "center", justifyContent: "space-between",
        padding: m ? "0 18px" : "0 80px", height: m ? 64 : 76, background: "transparent",
        fontFamily: T.fontSans, position: "relative", zIndex: 5,
        borderBottom: "1px solid rgba(28,62,97,0.06)",
      }}>
        {logo}
        {!m && (
          <div style={{ display: "flex", gap: 6, alignItems: "center" }}>
            {dropdown("Products", productsPanel)}
            {dropdown("Solutions", solutionsPanel)}
            {linkItem("Pricing", "/pricing")}
            {dropdown("Resources", resourcesPanel)}
            {linkItem("Contact", "/contact")}
          </div>
        )}
        {!m && (
          <div style={{ display: "flex", gap: 12, alignItems: "center" }}>
            <a href="tel:+639182397914" style={{
              color: "rgba(28,62,97,0.85)", fontSize: 14, fontWeight: 500,
              textDecoration: "none", display: "inline-flex", alignItems: "center", gap: 6,
            }}>
              <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
                <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z"/>
              </svg>
              +63 918 239 7914
            </a>
            <button onClick={() => { window.location.href = "/request-access"; }}
              onMouseEnter={(e) => { e.currentTarget.style.background = "#1C82EF"; e.currentTarget.style.transform = "translateY(-1px)"; }}
              onMouseLeave={(e) => { e.currentTarget.style.background = T.primary; e.currentTarget.style.transform = ""; }}
              style={{
              display: "inline-flex", alignItems: "center", gap: 7,
              background: T.primary, color: "#fff", border: "none", cursor: "pointer",
              padding: "12px 18px", borderRadius: 10, fontWeight: 600, fontSize: 14,
              whiteSpace: "nowrap", boxShadow: "0 6px 16px rgba(43,147,255,0.28)",
              transition: "background .15s ease, transform .15s ease",
            }}>Request Access
              <svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M2 7h10M8 3l4 4-4 4"/></svg>
            </button>
          </div>
        )}
        {m && (
          <button type="button" aria-label="Menu" aria-expanded={mobileOpen}
            onClick={() => setMobileOpen(!mobileOpen)}
            onMouseEnter={(e) => { e.currentTarget.style.background = "rgba(28,62,97,0.06)"; }}
            onMouseLeave={(e) => { e.currentTarget.style.background = "transparent"; }}
            style={{
              background: "transparent", border: "none", cursor: "pointer", padding: 8,
              color: T.bluishGrey, display: "inline-flex", borderRadius: 8,
              transition: "background .15s ease",
            }}>
            <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
              {mobileOpen ? <path d="M6 6l12 12M18 6L6 18"/> : <path d="M3 6h18M3 12h18M3 18h18"/>}
            </svg>
          </button>
        )}
      </div>
      {m && mobileOpen && (
        <MobileMenu onNavigate={() => setMobileOpen(false)} />
      )}
    </React.Fragment>
  );
}

// ── Mobile menu (full-width panel below the bar) ────────────────────────
function MobileMenu({ onNavigate }) {
  const T = window.l2uTokens;
  const [sec, setSec] = React.useState(null);
  const toggle = (k) => setSec(sec === k ? null : k);

  const row = (label, onClick, expanded) => (
    <button type="button" onClick={onClick}
      onMouseEnter={(e) => { e.currentTarget.style.color = T.primaryDeep; }}
      onMouseLeave={(e) => { e.currentTarget.style.color = T.bluishGrey; }}
      style={{
      width: "100%", background: "transparent", border: "none", cursor: "pointer",
      display: "flex", alignItems: "center", justifyContent: "space-between",
      padding: "15px 4px", fontFamily: T.fontSans, fontSize: 17, fontWeight: 600, color: T.bluishGrey,
      borderBottom: "1px solid rgba(28,62,97,0.08)", textAlign: "left", transition: "color .15s ease",
    }}>
      <span>{label}</span>
      {expanded !== undefined && (
        <svg width="14" height="14" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"
          style={{ opacity: 0.5, transform: expanded ? "rotate(180deg)" : "none" }}><path d="m2 4 3 3 3-3"/></svg>
      )}
    </button>
  );

  const sub = (label, href) => (
    <a key={label} href={href || "#"} onClick={onNavigate} style={{
      display: "block", padding: "10px 4px 10px 14px", textDecoration: "none",
      color: T.mute, fontSize: 15,
    }}>{label}</a>
  );

  return (
    <div style={{
      background: "#fff", borderBottom: "1px solid rgba(28,62,97,0.10)",
      padding: "8px 18px 22px", maxHeight: "calc(100vh - 120px)", overflowY: "auto",
      boxShadow: "0 12px 24px rgba(15,31,56,0.10)",
    }}>
      {row("Products", () => toggle("products"), sec === "products")}
      {sec === "products" && <div style={{ padding: "6px 0 12px" }}>{NAV_PRODUCTS.map((p) => sub(p.title, p.href))}</div>}

      {row("Solutions", () => toggle("solutions"), sec === "solutions")}
      {sec === "solutions" && (
        <div style={{ padding: "6px 0 12px" }}>
          <div style={{ fontFamily: T.fontMono, fontSize: 10, letterSpacing: "1.2px", color: T.mute2, padding: "6px 4px" }}>BY INDUSTRY</div>
          {NAV_SOLUTIONS.industry.map((s) => sub(s.label, s.href))}
          <div style={{ fontFamily: T.fontMono, fontSize: 10, letterSpacing: "1.2px", color: T.mute2, padding: "10px 4px 6px" }}>BY USE CASE</div>
          {NAV_SOLUTIONS.useCase.map((s) => sub(s.label, s.href))}
        </div>
      )}

      <a href="/pricing" onClick={onNavigate} style={{ textDecoration: "none" }}>{row("Pricing")}</a>

      {row("Resources", () => toggle("resources"), sec === "resources")}
      {sec === "resources" && <div style={{ padding: "6px 0 12px" }}>{NAV_RESOURCES.map((r) => sub(r.label, r.href))}</div>}

      <a href="/contact" onClick={onNavigate} style={{ textDecoration: "none" }}>{row("Contact")}</a>

      <div style={{ display: "flex", flexDirection: "column", gap: 12, marginTop: 20 }}>
        <button onClick={() => { window.location.href = "/request-access"; }}
          onMouseEnter={(e) => { e.currentTarget.style.background = "#1C82EF"; }}
          onMouseLeave={(e) => { e.currentTarget.style.background = T.primary; }}
          style={{
          display: "inline-flex", alignItems: "center", justifyContent: "center", gap: 8,
          background: T.primary, color: "#fff", border: "none", cursor: "pointer",
          padding: "14px", borderRadius: 10, fontWeight: 700, fontSize: 15,
          boxShadow: "0 6px 16px rgba(43,147,255,0.28)",
          transition: "background .15s ease",
        }}>Request Access
          <svg width="15" height="15" viewBox="0 0 14 14" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M2 7h10M8 3l4 4-4 4"/></svg>
        </button>
        <a href="tel:+639182397914" style={{
          textAlign: "center", padding: "6px", textDecoration: "none",
          color: T.mute, fontSize: 14, fontFamily: T.fontMono,
        }}>+63 918 239 7914</a>
      </div>
    </div>
  );
}

window.L2U_GeoBanner = GeoBanner;
window.L2U_Nav = Nav;
