/* NetDesk marketing site: shared header + footer, theme, mobile nav. */ (function () { "use strict"; var YEAR = 2026; var NAV = [ ["Features", "/features"], ["Pricing", "/pricing"], ["Security", "/security"], ["Download", "/download"], ["Source", "/git/akronlogic/netdesk"] ]; var page = (document.body.getAttribute("data-page") || "").toLowerCase(); function svgLogo() { return '' + ''; } function header() { var links = NAV.map(function (n) { var active = page === n[0].toLowerCase() ? " class=\"active\"" : ""; return '' + n[0] + ""; }).join(""); return '' + '' + svgLogo() + "NetDesk" + '' + links + 'ContactSelf-Host Console' + '' + 'Sign in' + 'Get NetDesk' + '☰' + ""; } function footer() { return '"; } function applyTheme(t) { document.documentElement.setAttribute("data-theme", t); try { localStorage.setItem("nd.theme", t); } catch (e) {} } document.addEventListener("DOMContentLoaded", function () { var h = document.getElementById("siteHeader"); var f = document.getElementById("siteFooter"); if (h) h.innerHTML = header(); if (f) f.innerHTML = footer(); var burger = document.getElementById("nzBurger"); if (burger) burger.onclick = function () { document.getElementById("nzLinks").classList.toggle("open"); }; var ft = document.getElementById("ftTheme"); if (ft) ft.onclick = function () { applyTheme(document.documentElement.getAttribute("data-theme") === "light" ? "dark" : "light"); }; // reflect signed-in state in the header fetch("/api/auth/me").then(function (r) { return r.ok ? r.json() : null; }).then(function (d) { var b = document.getElementById("btnSignin"); if (d && d.email && b) { b.textContent = "My Computers"; b.href = "/app"; } }).catch(function () {}); // --- scroll reveal (every page that uses .reveal) --- var revs = document.querySelectorAll(".reveal"); if (revs.length && "IntersectionObserver" in window) { var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); } }); }, { threshold: 0.1, rootMargin: "0px 0px -8% 0px" }); revs.forEach(function (el) { io.observe(el); }); } else { revs.forEach(function (el) { el.classList.add("in"); }); } // --- cursor spotlight on cards (sets --mx/--my for the ::before glow) --- function spot(e) { var r = e.currentTarget.getBoundingClientRect(); e.currentTarget.style.setProperty("--mx", (e.clientX - r.left) + "px"); e.currentTarget.style.setProperty("--my", (e.clientY - r.top) + "px"); } document.querySelectorAll(".feat, .plan").forEach(function (c) { c.addEventListener("mousemove", spot, { passive: true }); }); }); try { applyTheme(localStorage.getItem("nd.theme") || "dark"); } catch (e) { applyTheme("dark"); } })();