1import{n as k}from"./nav-DUWj6VIX.js";const w=document.documentElement,j="sp-theme",S=()=>typeof window<"u"&&window.matchMedia?.("(prefers-color-scheme: dark)").matches,H=()=>{if(typeof window>"u")return"light";const e=window.localStorage?.getItem(j);return e==="light"||e==="dark"?e:S()?"dark":"light"},E=(e,r)=>{e==="dark"?(w.setAttribute("data-theme","dark"),r?.setAttribute("aria-pressed","true")):(w.removeAttribute("data-theme"),r?.setAttribute("aria-pressed","false"))},C=()=>{const e=document.getElementById("themeToggle"),r=H();E(r,e),e?.addEventListener("click",()=>{const a=w.getAttribute("data-theme")==="dark"?"light":"dark";window.localStorage?.setItem(j,a),E(a,e)})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",C):C();const $={menu:'<svg xmlns="http://www.w3.org/2000/svg" width="800px" height="800px" viewBox="-0.5 0 25 25" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true" focusable="false"><path d="M6.5 10.32C8.433 10.32 10 8.753 10 6.82001C10 4.88701 8.433 3.32001 6.5 3.32001C4.567 3.32001 3 4.88701 3 6.82001C3 8.753 4.567 10.32 6.5 10.32Z"/><path d="M17.5 10.32C19.433 10.32 21 8.753 21 6.82001C21 4.88701 19.433 3.32001 17.5 3.32001C15.567 3.32001 14 4.88701 14 6.82001C14 8.753 15.567 10.32 17.5 10.32Z"/><path d="M6.5 21.32C8.433 21.32 10 19.753 10 17.82C10 15.887 8.433 14.32 6.5 14.32C4.567 14.32 3 15.887 3 17.82C3 19.753 4.567 21.32 6.5 21.32Z"/><path d="M17.5 21.32C19.433 21.32 21 19.753 21 17.82C21 15.887 19.433 14.32 17.5 14.32C15.567 14.32 14 15.887 14 17.82C14 19.753 15.567 21.32 17.5 21.32Z"/></svg>',"x-mark":'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-5 w-5" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/></svg>',moon:'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-5 w-5" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>',sun:'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-5 w-5" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>',"question-mark-circle":'<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 512" class="h-4 w-4" aria-hidden="true" focusable="false"><path d="M396.138,85.295c-13.172-25.037-33.795-45.898-59.342-61.03C311.26,9.2,280.435,0.001,246.98,0.001c-41.238-0.102-75.5,10.642-101.359,25.521c-25.962,14.826-37.156,32.088-37.156,32.088c-4.363,3.786-6.824,9.294-6.721,15.056c0.118,5.77,2.775,11.186,7.273,14.784l35.933,28.78c7.324,5.864,17.806,5.644,24.875-0.518c0,0,4.414-7.978,18.247-15.88c13.91-7.85,31.945-14.173,58.908-14.258c23.517-0.051,44.022,8.725,58.016,20.717c6.952,5.941,12.145,12.594,15.328,18.68c3.208,6.136,4.379,11.5,4.363,15.574c-0.068,13.766-2.742,22.77-6.603,30.442c-2.945,5.729-6.789,10.813-11.738,15.744c-7.384,7.384-17.398,14.207-28.634,20.479c-11.245,6.348-23.365,11.932-35.612,18.68c-13.978,7.74-28.77,18.858-39.701,35.544c-5.449,8.249-9.71,17.686-12.416,27.641c-2.742,9.964-3.98,20.412-3.98,31.071c0,11.372,0,20.708,0,20.708c0,10.719,8.69,19.41,19.41,19.41h46.762c10.719,0,19.41-8.691,19.41-19.41c0,0,0-9.336,0-20.708c0-4.107,0.467-6.755,0.917-8.436c0.773-2.512,1.206-3.14,2.47-4.668c1.29-1.452,3.895-3.674,8.698-6.331c7.019-3.946,18.298-9.276,31.07-16.176c19.121-10.456,42.367-24.646,61.972-48.062c9.752-11.686,18.374-25.758,24.323-41.968c6.001-16.21,9.242-34.431,9.226-53.96C410.243,120.761,404.879,101.971,396.138,85.295z"/><path d="M228.809,406.44c-29.152,0-52.788,23.644-52.788,52.788c0,29.136,23.637,52.772,52.788,52.772c29.136,0,52.763-23.636,52.763-52.772C281.572,430.084,257.945,406.44,228.809,406.44z"/></svg>',phone:'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-5 w-5" aria-hidden="true" focusable="false">
1<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z"/></svg>',"arrow-top-right-on-square":'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-4 w-4" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/></svg>',"chevron-down":'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-4 w-4" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/></svg>',github:'<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd"/></svg>',twitter:'<svg class="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>',"academic-cap":'<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-8 w-8" aria-hidden="true" focusable="false"><path stroke-linecap="round" stroke-linejoin="round" d="M4.26 10.147a60.438 60.438 0 0 0-.491 6.347A48.62 48.62 0 0 1 12 20.904a48.62 48.62 0 0 1 8.232-4.41 60.46 60.46 0 0 0-.491-6.347m-15.482 0a50.636 50.636 0 0 0-2.658-.813A59.906 59.906 0 0 1 12 3.493a59.903 59.903 0 0 1 10.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0 1 12 13.489a50.702 50.702 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm0 0v-3.675A55.378 55.378 0 0 1 12 8.443m-7.007 11.55A5.981 5.981 0 0 0 6.75 15.75v-1.5"/></svg>',"calendar-plus":'<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 612 612" class="h-5 w-5" aria-hidden="true" focusable="false"><path d="M612,463.781c0-70.342-49.018-129.199-114.75-144.379c-10.763-2.482-21.951-3.84-33.469-3.84c-3.218,0-6.397,0.139-9.562,0.34c-71.829,4.58-129.725,60.291-137.69,131.145c-0.617,5.494-0.966,11.073-0.966,16.734c0,10.662,1.152,21.052,3.289,31.078C333.139,561.792,392.584,612,463.781,612C545.641,612,612,545.641,612,463.781z M463.781,561.797c-54.133,0-98.016-43.883-98.016-98.016s43.883-98.016,98.016-98.016s98.016,43.883,98.016,98.016S517.914,561.797,463.781,561.797z"/><polygon points="482.906,396.844 449.438,396.844 449.438,449.438 396.844,449.438 396.844,482.906 482.906,482.906 482.906,449.438 482.906,449.438"/><path d="M109.969,0c-9.228,0-16.734,7.507-16.734,16.734v38.25v40.641c0,9.228,7.506,16.734,16.734,16.734h14.344c9.228,0,16.734-7.507,16.734-16.734V54.984v-38.25C141.047,7.507,133.541,0,124.312,0H109.969z"/><path d="M372.938,0c-9.228,0-16.734,7.507-16.734,16.734v38.25v40.641c0,9.228,7.507,16.734,16.734,16.734h14.344c9.228,0,16.734-7.507,16.734-16.734V54.984v-38.25C404.016,7.507,396.509,0,387.281,0H372.938z"/><path d="M38.25,494.859h236.672c-2.333-11.6-3.572-23.586-3.572-35.859c0-4.021,0.177-7.999,0.435-11.953H71.719c-15.845,0-28.688-12.843-28.688-28.688v-229.5h411.188v88.707c3.165-0.163,6.354-0.253,9.562-0.253c11.437,0,22.61,1.109,33.469,3.141V93.234c0-21.124-17.126-38.25-38.25-38.25h-31.078v40.641c0,22.41-18.23,40.641-40.641,40.641h-14.344c-22.41,0-40.641-18.231-40.641-40.641V54.984H164.953v40.641c0,22.41-18.231,40.641-40.641,40.641h-14.344c-22.41,0-40.641-18.231-40.641-40.641V54.984H38.25C17.126,54.984,0,72.111,0,93.234v363.375C0,477.733,17.126,494.859,38.25,494.859z"/>
1<circle cx="134.774" cy="260.578" r="37.954"/><circle cx="248.625" cy="260.578" r="37.954"/><circle cx="362.477" cy="260.578" r="37.954"/><circle cx="248.625" cy="375.328" r="37.953"/><circle cx="134.774" cy="375.328" r="37.953"/></svg>'};function n(e){return $[e]||$["question-mark-circle"]}const O={facebook:"/img/socialmedia/facebook.svg",linkedin:"/img/socialmedia/linkedin.svg",maps:"/img/socialmedia/maps.svg",whatsapp:"/img/socialmedia/whatsapp.svg"};function B(e){return O[e]||null}let f=null,p=!1;function D(e){const r=[];return e.brand?.name||r.push("brand.name is required"),e.brand?.href||r.push("brand.href is required"),Array.isArray(e.menuGroups)||r.push("menuGroups must be an array"),e.menuGroups?.length>4&&r.push("menuGroups cannot exceed 4 columns"),Array.isArray(e.actions)||r.push("actions must be an array"),e.footer||r.push("footer is required"),e.menuGroups?.forEach((a,t)=>{a.heading||r.push(`menuGroups[${t}].heading is required`),Array.isArray(a.links)||r.push(`menuGroups[${t}].links must be an array`)}),r}function N(){const e=D(k);return e.length>0?(console.error("Navigation config validation errors:",e),G("Navigation configuration is invalid. Check console for details."),null):k}function G(e){const r=document.createElement("div");r.className="fixed top-0 left-0 right-0 z-[100] bg-[var(--sp-status-danger)] text-white px-4 py-3 text-center text-sm",r.textContent=e,r.setAttribute("role","alert"),document.body.prepend(r)}function q(e){const r=document.getElementById("sp-header");if(!r)return;const a=e.actions.map(t=>t.type==="theme-toggle"?` 2 <button 3 id="navThemeToggle" 4 type="button" 5 class="relative hidden md:inline-flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] after:content-[''] after:absolute after:bottom-0 after:left-1/2 after:w-0 after:h-0.5 after:bg-[var(--sp-text-secondary)] after:transition-all after:duration-200 hover:after:w-full hover:after:left-0 dark:after:bg-[var(--sp-accent-volt)]" 6 aria-pressed="false" 7 aria-label="${t.label}"> 8 <span class="theme-icon-dark inline-flex dark:hidden">${n("moon")}</span> 9 <span class="theme-icon-light hidden dark:inline-flex">${n("sun")}</span> 10 </button>`:t.primary?` 11 <a 12 href="${t.href}" 13 class="relative hidden md:inline-flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] after:content-[''] after:absolute after:bottom-0 after:left-1/2 after:w-0 after:h-0.5 after:bg-[var(--sp-text-secondary)] after:transition-all after:duration-200 hover:after:w-full hover:after:left-0 dark:after:bg-[var(--sp-accent-volt)]" 14 aria-label="${t.label}"> 15 ${n("calendar-plus")} 16 </a>`:t.id==="help"?` 17 <button 18 id="helpTrigger" 19 type="button" 20 class="relative hidden md:inline-flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] after:content-[''] after:absolute after:bottom-0 after:left-1/2 after:w-0 after:h-0.5 after:bg-[var(--sp-text-secondary)] after:transition-all after:duration-200 hover:after:w-full hover:after:left-0 dark:after:bg-[var(--sp-accent-volt)]" 21 aria-label="${t.label}"> 22 ${n(t.icon)} 23 </button>`:` 24 <a 25 href="${t.href}" 26 class="hidden md:inline-flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] hover:bg-[var(--sp-surface)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)]" 27 aria-label="${t.label}"> 28 ${n(t.icon)} 29 </a>`).join("");r.innerHTML=` 30 <div class="mx-auto max-w-6xl px-6 py-4 grid grid-cols-3 items-center"> 31 <!-- Brand (left) --> 32 <a href="${e.brand.href}" class="inline-flex items-center gap-2 font-semibold text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-lg px-2 py-1 justify-self-start"> 33 ${n("academic-cap")}
34 <span>${e.brand.name}</span> 35 </a> 36 37 <!-- Menu trigger (true center) --> 38 <button 39 id="menuTrigger" 40 type="button" 41 class="relative inline-flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] justify-self-center after:content-[''] after:absolute after:bottom-0 after:left-1/2 after:w-0 after:h-0.5 after:bg-[var(--sp-text-secondary)] after:transition-all after:duration-200 hover:after:w-full hover:after:left-0 dark:after:bg-[var(--sp-accent-volt)]" 42 aria-expanded="false" 43 aria-controls="megaMenu" 44 aria-label="Open navigation menu"> 45 <span class="menu-icon-open inline-flex transition-transform duration-300">${n("menu")}</span> 46 </button> 47 48 <!-- Desktop actions (right, hidden on mobile) --> 49 <div class="hidden md:flex items-center gap-2 justify-self-end"> 50 ${a} 51 </div> 52 <!-- Mobile: empty right column --> 53 <div class="md:hidden justify-self-end"></div> 54 </div> 55 56 <!-- Mega Menu Panel (OVERLAY - fixed, viewport centered) --> 57 ${(()=>{const t=e.menuGroups.filter(m=>!m.disabled),s=t.length;return` 58 <div 59 id="megaMenu" 60 class="fixed top-16 left-1/2 z-50 w-full ${s<=2?"max-w-xl":s===3?"max-w-3xl":"max-w-4xl"} -translate-x-1/2 rounded-2xl border border-[var(--sp-divider)] bg-[var(--sp-canvas)] shadow-lg transition-all duration-150 opacity-0 -translate-y-2 pointer-events-none invisible max-md:max-h-[calc(100dvh-4rem)] max-md:overflow-y-auto max-md:overscroll-contain" 61 role="dialog" 62 aria-modal="true" 63 aria-label="Navigation menu"> 64 65 <!-- Desktop menu content --> 66 <div class="hidden md:block mx-auto px-6 py-8"> 67 <div class="grid ${s===1?"grid-cols-1":s===2?"grid-cols-2":s===3?"grid-cols-3":"grid-cols-4"} gap-8"> 68 ${t.map(m=>` 69 <div> 70 <h3 class="text-xs font-bold uppercase tracking-wide text-[var(--sp-text-primary)] dark:text-[var(--sp-accent-volt)]">${m.heading}</h3> 71 <ul class="mt-4 space-y-3"> 72 ${m.links.map(i=>` 73 <li> 74 <a href="${i.href}" class="relative group block text-sm text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-md px-2 py-1.5 before:content-[''] before:absolute before:left-0 before:top-1/2 before:w-0.5 before:h-0 before:bg-[var(--sp-text-secondary)] before:transition-all before:duration-200 hover:before:h-full hover:before:top-0 dark:before:bg-[var(--sp-accent-volt)]"${i.external?' target="_blank" rel="noreferrer"':""}> 75 <span class="flex items-center gap-1"> 76 ${i.label} 77 ${i.external?n("arrow-top-right-on-square"):""} 78 </span> 79 ${i.subtitle?`<span class="text-xs text-[var(--sp-text-tertiary)]">${i.subtitle}</span>`:""} 80 </a> 81 </li> 82 `).join("")} 83 </ul> 84 </div> 85 `).join("")} 86 </div> 87 </div>`})()} 88 89 <!-- Mobile menu content (consolidated navigation) --> 90 <div class="md:hidden max-h-[calc(100vh-4rem)] overflow-y-auto px-6 py-6"> 91 <!-- Actions (icon-only, top of menu) --> 92 <div class="flex items-center justify-end gap-2 mb-6"> 93 ${e.actions.map(t=>t.type==="theme-toggle"?` 94 <button 95 id="mobileThemeToggle" 96 type="button" 97 class="flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] hover:bg-[var(--sp-surface)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)]" 98 aria-label="${t.label}" 99 aria-pressed="false"> 100 <span class="theme-icon-dark">${n("moon")}</span> 101 <span class="theme-icon-light hidden">${n("sun")}</span> 102 </button>`:` 103 <a 104 href="${t.href}" 105 class="flex items-center justify-center rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] hover:bg-[var(--sp-surface)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)]${t.primary?" !bg-[var(--sp-text-primary)] !text-[var(--sp-canvas)]":""}" 106 aria-label="${t.label}"> 107 ${n(t.icon)} 108 </a>`).join("")} 109 </div> 110 111 <!-- Primary navigation groups --> 112 <div class="space-y-6"> 113 ${e.menuGroups.filter(t=>!t.disabled).map(t=>` 114 <div> 115 <h3 class="text-xs font-bold uppercase tracking-wide text-[var(--sp-text-primary)] dark:text-[var(--sp-accent-volt)]">${t.heading}</h3> 116 <ul class="mt-3 space-y-2"> 117 ${t.links.map(s=>` 118 <li> 119 <a href="${s.href}" class="block py-2 text-base text-[var(--sp-text-primary)] hover:text-[var(--sp-accent-volt)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-md"${s.external?' target="_blank" rel="noreferrer"':""}>
120 <span class="flex items-center gap-2"> 121 ${s.label} 122 ${s.external?n("arrow-top-right-on-square"):""} 123 </span> 124 </a> 125 </li> 126 `).join("")} 127 </ul> 128 </div> 129 `).join("")} 130 </div> 131 132 <!-- Divider --> 133 <hr class="my-6 border-[var(--sp-divider)]" /> 134 135 <!-- Footer navigation groups (consolidated) --> 136 <div class="space-y-6"> 137 ${e.footer.groups.map(t=>` 138 <div> 139 <h3 class="text-xs font-bold uppercase tracking-wide text-[var(--sp-text-primary)] dark:text-[var(--sp-accent-volt)]">${t.heading}</h3> 140 <ul class="mt-3 space-y-2"> 141 ${t.links.map(s=>` 142 <li> 143 <a href="${s.href}" class="block py-2 text-base text-[var(--sp-text-primary)] hover:text-[var(--sp-accent-volt)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-md"${s.external?' target="_blank" rel="noreferrer"':""}> 144 <span class="flex items-center gap-2"> 145 ${s.label} 146 ${s.external?n("arrow-top-right-on-square"):""} 147 </span> 148 </a> 149 </li> 150 `).join("")} 151 </ul> 152 </div> 153 `).join("")} 154 </div> 155 156 <!-- Divider --> 157 <hr class="my-6 border-[var(--sp-divider)]" /> 158 159 <!-- Footer meta content --> 160 <div class="space-y-4"> 161 <p class="text-xs text-[var(--sp-text-tertiary)]">${e.footer.meta.copyright}</p> 162 163 <!-- Social icons --> 164 ${e.footer.social?.filter(t=>!t.disabled).length?` 165 <div class="flex gap-4"> 166 ${e.footer.social.filter(t=>!t.disabled).map(t=>` 167 <a href="${t.href}" class="text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-md p-1 group" aria-label="${t.label}" target="_blank" rel="noreferrer"> 168 <img src="${B(t.id)}" alt="" class="h-5 w-5 brightness-0 invert-[0.45] transition-[filter] duration-150 group-hover:invert-[0.15] dark:invert-[0.6] dark:group-hover:invert" aria-hidden="true" /> 169 </a> 170 `).join("")} 171 </div> 172 `:""} 173 </div> 174 </div> 175 </div> 176 `,P(),document.getElementById("menuTrigger"),V(),Z()}function _(e){const r=document.getElementById("sp-footer");r&&(r.innerHTML=` 177 <div class="mx-auto max-w-6xl px-6 py-8"> 178 <!-- Footer with social links only --> 179 <div class="flex flex-col sm:flex-row gap-4 items-center justify-between"> 180 <p class="text-xs text-[var(--sp-text-secondary)]">${e.meta.copyright}</p> 181 <!-- Social icons --> 182 ${e.social?.filter(a=>!a.disabled).length?` 183 <div class="flex gap-3"> 184 ${e.social.filter(a=>!a.disabled).map(a=>` 185 <a href="${a.href}" class="relative text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)] rounded-md p-1 after:content-[''] after:absolute after:bottom-0 after:left-1/2 after:w-0 after:h-px after:bg-[var(--sp-text-secondary)] after:transition-all after:duration-200 hover:after:w-full hover:after:left-0 dark:after:bg-[var(--sp-accent-volt)] group" aria-label="${a.label}" target="_blank" rel="noreferrer"> 186 <img src="${B(a.id)}" alt="" class="h-5 w-5 brightness-0 invert-[0.45] transition-[filter] duration-150 group-hover:invert-[0.15] dark:invert-[0.6] dark:group-hover:invert" aria-hidden="true" /> 187 </a> 188 `).join("")} 189 </div> 190 `:""} 191 </div> 192 </div> 193 `)}let d=!1;function P(){const e=document.createElement("div");e.id="helpOverlay",e.className="fixed inset-0 z-[60] hidden flex items-center justify-center bg-black/50 backdrop-blur-sm",e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-labelledby","helpTitle"),e.innerHTML=` 194 <div class="relative mx-4 w-full max-w-lg rounded-2xl border border-[var(--sp-divider)] bg-[var(--sp-canvas)] p-6 shadow-xl"> 195 <button 196 id="helpClose" 197 type="button" 198 class="absolute top-4 right-4 rounded-lg p-2 text-[var(--sp-text-secondary)] hover:text-[var(--sp-text-primary)] hover:bg-[var(--sp-surface)] focus-visible:ring-2 focus-visible:ring-[var(--sp-accent-volt)]" 199 aria-label="Close help"> 200 ${n("x-mark")} 201 </button> 202 203 <h2 id="helpTitle" class="text-lg font-semibold text-[var(--sp-text-primary)]">Keyboard Shortcuts</h2> 204 <p class="mt-2 text-sm text-[var(--sp-text-secondary)]"> 205 Navigate efficiently using these shortcuts. 206 </p> 207 208 <div class="mt-6 space-y-3"> 209 <div class="flex items-center justify-between rounded-lg bg-[var(--sp-surface)] px-4 py-3">
210 <span class="text-sm text-[var(--sp-text-primary)]">Toggle menu</span> 211 <kbd class="rounded-md bg-[var(--sp-canvas)] border border-[var(--sp-divider)] px-2 py-1 text-xs font-mono text-[var(--sp-text-secondary)]">M</kbd> 212 </div> 213 <div class="flex items-center justify-between rounded-lg bg-[var(--sp-surface)] px-4 py-3"> 214 <span class="text-sm text-[var(--sp-text-primary)]">Toggle theme</span> 215 <kbd class="rounded-md bg-[var(--sp-canvas)] border border-[var(--sp-divider)] px-2 py-1 text-xs font-mono text-[var(--sp-text-secondary)]">T</kbd> 216 </div> 217 <div class="flex items-center justify-between rounded-lg bg-[var(--sp-surface)] px-4 py-3"> 218 <span class="text-sm text-[var(--sp-text-primary)]">Show help</span> 219 <kbd class="rounded-md bg-[var(--sp-canvas)] border border-[var(--sp-divider)] px-2 py-1 text-xs font-mono text-[var(--sp-text-secondary)]">?</kbd> 220 </div> 221 <div class="flex items-center justify-between rounded-lg bg-[var(--sp-surface)] px-4 py-3"> 222 <span class="text-sm text-[var(--sp-text-primary)]">Close overlay</span> 223 <kbd class="rounded-md bg-[var(--sp-canvas)] border border-[var(--sp-divider)] px-2 py-1 text-xs font-mono text-[var(--sp-text-secondary)]">Esc</kbd> 224 </div> 225 </div> 226 227 <div class="mt-6 border-t border-[var(--sp-divider)] pt-6"> 228 <h3 class="text-sm font-semibold text-[var(--sp-text-primary)]">Quick Help</h3> 229 <ul class="mt-3 space-y-2 text-sm text-[var(--sp-text-secondary)]"> 230 <li>⢠Use the menu to navigate between sections</li> 231 <li>⢠Toggle between light and dark themes anytime</li> 232 <li>⢠All pages follow StrategicPlaybook governance</li> 233 <li>⢠Documentation is available in the menu</li> 234 </ul> 235 </div> 236 </div> 237 `,document.body.appendChild(e),z()}function c(e){const r=document.getElementById("helpOverlay");r&&(d=e,e?(r.classList.remove("hidden"),document.body.classList.add("overflow-hidden"),document.getElementById("helpClose")?.focus()):(r.classList.add("hidden"),document.body.classList.remove("overflow-hidden"),document.getElementById("helpTrigger")?.focus()))}function z(){const e=document.getElementById("helpTrigger"),r=document.getElementById("helpOverlay"),a=document.getElementById("helpClose");e?.addEventListener("click",()=>{c(!0)}),a?.addEventListener("click",()=>{c(!1)}),r?.addEventListener("click",t=>{t.target===r&&c(!1)}),document.addEventListener("keydown",t=>{if(t.key==="Escape"&&d){c(!1);return}t.target.tagName==="INPUT"||t.target.tagName==="TEXTAREA"||(t.key==="?"&&!d&&c(!0),t.key.toLowerCase()==="m"&&!d&&u(!p),t.key.toLowerCase()==="t"&&!d&&document.getElementById("navThemeToggle")?.click())})}function u(e){const r=document.getElementById("megaMenu"),a=document.getElementById("menuTrigger"),t=a?.querySelector(".menu-icon-open");!r||!a||(p=e,e?(r.classList.remove("opacity-0","-translate-y-2","pointer-events-none","invisible"),r.classList.add("opacity-100","translate-y-0","pointer-events-auto","visible"),a.setAttribute("aria-expanded","true"),t?.classList.add("rotate-180"),r.querySelector("a, button")?.focus(),document.body.classList.add("overflow-hidden")):(r.classList.add("opacity-0","-translate-y-2","pointer-events-none","invisible"),r.classList.remove("opacity-100","translate-y-0","pointer-events-auto","visible"),a.setAttribute("aria-expanded","false"),t?.classList.remove("rotate-180"),document.body.classList.remove("overflow-hidden"),a.focus()))}function V(){const e=document.getElementById("menuTrigger"),r=document.getElementById("megaMenu");e?.addEventListener("click",()=>{u(!p)}),document.addEventListener("keydown",a=>{a.key==="Escape"&&p&&u(!1)}),r?.addEventListener("click",a=>{a.target.closest("a")&&u(!1)}),document.addEventListener("click",a=>{p&&!a.target.closest("#sp-header")&&u(!1)})}function h(){const e=document.documentElement.getAttribute("data-theme")==="dark";document.querySelectorAll(".theme-icon-dark").forEach(r=>{r.classList.toggle("hidden",e)}),document.querySelectorAll(".theme-icon-light").forEach(r=>{r.classList.toggle("hidden",!e)}),document.querySelectorAll("#navThemeToggle, #mobileThemeToggle").forEach(r=>{r?.setAttribute("aria-pressed",e?"true":"false")})}function Z(){const e="sp-theme",r=()=>{const s=document.documentElement.getAttribute("data-theme")==="dark"?"light":"dark";s==="dark"?document.documentElement.setAttribute("data-theme","dark"):document.documentElement.removeAttribute("data-theme"),localStorage.setItem(e,s),h()};document.getElementById("navThemeToggle")?.addEventListener("click",r),document.getElementById("mobileThemeToggle")?.addEventListener("click",r),h(),new MutationObserver(h).observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]})}function T(){f=N(),f&&(q(f),_(f.footer))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",T):T();const L=["AI that you can [trust].","AI that you can [govern].","AI that you can [audit]."],F=80,R=40,Y=2e3,U=500;let b=0,o=0,x=!1,g=null,y=null;function A(e){return e.replace(/\[([^\]]+)\]/g,"<strong>$1</strong>")}function K(e){return e.replace(/[\[\]]/g,"").length}function M(e,r){let a="",t=0;for(let s=0;s<e.length&&t<r;s++){const l=e[s];l==="["||l==="]"?a+=l:(a+=l,t++)}return a.includes("[")&&!a.includes("]")&&(a+="]"),a}function I(){if(g=document.getElementById("typewriter-text"),y=document.getElementById("typewriter-cursor"),!(!g||!y)){if(y.style.animation="typewriter-blink 1s ease-in-out infinite",!document.getElementById("typewriter-styles")){const e=document.createElement("style");e.id="typewriter-styles",e.textContent=` 238 @keyframes typewriter-blink { 239 0%, 50% { opacity: 1; } 240 51%, 100% { opacity: 0; } 241 } 242 `,document.head.appendChild(e)}v()}}function v(){const e=L[b],r=K(e);if(x){o--;const a=M(e,o);g.innerHTML=A(a),o===0?(x=!1,b=(b+1)%L.length,setTimeout(v,U)):setTimeout(v,R)}else{o++;const a=M(e,o);g.innerHTML=A(a),o===r?(x=!0,setTimeout(v,Y)):setTimeout(v,F)}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",I):I();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.