(() => { "use strict"; const toggle = document.querySelector("[data-nav-toggle]"); const nav = document.getElementById("site-nav"); const scrim = document.querySelector("[data-nav-scrim]"); function setOpen(open) { if (!nav || !toggle) return; nav.dataset.open = open ? "true" : "false"; toggle.setAttribute("aria-expanded", open ? "true" : "false"); if (scrim) scrim.hidden = !open; document.body.style.overflow = open ? "hidden" : ""; if (open) { const first = nav.querySelector("a"); if (first) first.focus({ preventScroll: true }); } else { toggle.focus({ preventScroll: true }); } } function isOpen() { return !!nav && nav.dataset.open === "true"; } if (toggle && nav) { if (nav.dataset.open !== "true") nav.dataset.open = "false"; toggle.addEventListener("click", () => setOpen(!isOpen())); document.addEventListener("keydown", (event) => { if (event.key === "Escape" && isOpen()) setOpen(false); }); } if (scrim) scrim.addEventListener("click", () => setOpen(false)); // Active nav item for the current path (progressive enhancement only). try { const here = new URL(window.location.href).pathname.replace(/\/$/, "") || "/"; document.querySelectorAll(".site-nav a[href]").forEach((link) => { const target = new URL(link.getAttribute("href"), window.location.origin).pathname.replace(/\/$/, "") || "/"; if (target === here) link.setAttribute("aria-current", "page"); }); } catch { /* keep server-rendered navigation as is */ } // Footer year (progressive enhancement only). const year = document.querySelector("[data-year]"); if (year) year.textContent = String(new Date().getFullYear()); })();