import { APPS, HOME_ICON, makeSvg, getDock } from './apps'; const CSS = ` .nav { position: fixed; bottom: 0; left: 0; right: 0; z-index: 10; display: flex; align-items: stretch; background: var(--nav-bg); border-top: 1px solid var(--nav-border); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); padding-bottom: env(safe-area-inset-bottom, 0px); transition: background 0.3s; will-change: auto; } [data-theme="paper"] .nav { backdrop-filter: none; -webkit-backdrop-filter: none; } .nav-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; flex: 1; padding: 10px 0; border: none; background: transparent; color: var(--text-faint); text-decoration: none; cursor: pointer; transition: color 0.2s; font-family: 'DM Sans', sans-serif; } .nav-btn span { font-size: 10px; letter-spacing: 0.04em; font-weight: 400; } .nav-btn:hover { color: var(--text-mid); } .nav-btn.active { color: var(--gold); } [data-theme="paper"] .nav-btn:hover { background: rgba(0,0,0,0.05); } [data-theme="paper"] .nav-btn.active { color: #000; } `; function injectCss() { if (document.getElementById('palace-nav-css')) return; const style = document.createElement('style'); style.id = 'palace-nav-css'; style.textContent = CSS; document.head.appendChild(style); } function buildNav() { const nav = document.getElementById('nav'); if (!nav) return; const path = window.location.pathname; const activeId = path === '/' || path === '/home' ? 'home' : path.startsWith('/config') ? 'config' : path.startsWith('/') ? path.slice(1).split('/')[0] : path; nav.innerHTML = ''; function makeBtn(href: string, label: string, svgHtml: string, isActive: boolean): HTMLAnchorElement { const a = document.createElement('a'); a.className = 'nav-btn' + (isActive ? ' active' : ''); a.href = href; a.title = label; a.innerHTML = svgHtml + '' + label + ''; return a; } nav.appendChild(makeBtn('/home', 'Home', HOME_ICON, activeId === 'home')); const dock: string[] = getDock(); dock.forEach(id => { const app = APPS.find(a => a.id === id); if (!app) return; nav.appendChild(makeBtn(app.href, app.label, makeSvg(app.icon), activeId === id)); }); } export function initNav() { injectCss(); buildNav(); document.addEventListener('astro:page-load', buildNav); window.addEventListener('pr-dock-changed', () => buildNav()); }