(function () { function initFloatingNav() { var toggleInput = document.querySelector('.wc-menu-toggle-input'); var topbar = document.querySelector('.wc-fixed-topbar'); var island = document.querySelector('.wc-floating-island'); var overlay = document.querySelector('.wc-menu-overlay'); if (!island || island.dataset.wcNavInit) return; island.dataset.wcNavInit = '1'; [toggleInput, topbar, island, overlay].forEach(function (el) { if (el && el.parentNode !== document.body) { document.body.appendChild(el); } }); function luminance(r, g, b) { return 0.2126 * r + 0.7152 * g + 0.0722 * b; } function sampleBackgroundAt(x, y) { var stack = document.elementsFromPoint(x, y); for (var i = 0; i < stack.length; i++) { var el = stack[i]; if (el === island || island.contains(el)) continue; var bg = getComputedStyle(el).backgroundColor; var m = bg.match(/rgba?\(([\d]+),\s*([\d]+),\s*([\d]+)(?:,\s*([\d.]+))?\)/); if (!m) continue; var a = m[4] === undefined ? 1 : parseFloat(m[4]); if (a === 0) continue; return { r: +m[1], g: +m[2], b: +m[3] }; } var bodyBg = getComputedStyle(document.body).backgroundColor; var m2 = bodyBg.match(/rgba?\(([\d]+),\s*([\d]+),\s*([\d]+)/); return m2 ? { r: +m2[1], g: +m2[2], b: +m2[3] } : { r: 255, g: 255, b: 255 }; } function updateIslandTheme() { var r = island.getBoundingClientRect(); if (r.width === 0) return; var cx = r.left + r.width / 2; var cy = r.top + r.height / 2; var color = sampleBackgroundAt(cx, cy); var lum = luminance(color.r, color.g, color.b); island.classList.toggle('wc-island-on-black', lum < 30); } var ticking = false; function onScroll() { if (ticking) return; ticking = true; requestAnimationFrame(function () { updateIslandTheme(); ticking = false; }); } window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll); updateIslandTheme(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initFloatingNav); } else { initFloatingNav(); } })();