Skip to content
- Choosing a selection results in a full page refresh.
- Opens in a new window.
document.addEventListener('DOMContentLoaded', () => {
// Desktop/hover only
if (!matchMedia('(hover:hover) and (min-width:990px)').matches) return;
// Grab all top-level inside the site header
document.querySelectorAll('header li').forEach((li) => {
// Find a submenu inside this li (cover common patterns)
const submenu =
li.querySelector(':scope > .header__submenu, :scope > .site-nav__dropdown, :scope > .list-menu--disclosure, :scope > .mega-menu, :scope > ul[role="menu"], :scope > ul');
if (!submenu) return; // skip if this li has no submenu
// Ensure our controlled class is applied
submenu.classList.add('aurra-submenu');
let openTimer, closeTimer;
// On hover: gently open after a tiny delay
li.addEventListener('mouseenter', () => {
clearTimeout(closeTimer);
openTimer = setTimeout(() => {
submenu.classList.add('is-visible');
// If the theme uses , keep it open as well
const details = li.closest('details');
if (details) details.setAttribute('open','open');
}, 120); // opening delay
});
// On leave: gently close after a tiny delay
li.addEventListener('mouseleave', () => {
clearTimeout(openTimer);
closeTimer = setTimeout(() => {
submenu.classList.remove('is-visible');
const details = li.closest('details');
if (details) details.removeAttribute('open');
}, 120); // closing delay
});
});
});