(function() {
function initMobileSubmenuToggles() {
if (window.innerWidth > 768) {
document.querySelectorAll('.mobile-submenu-toggle').forEach(function(btn) { btn.remove(); });
document.querySelectorAll('.sub-menu.mobile-expanded').forEach(function(menu) { menu.classList.remove('mobile-expanded'); });
return;
}
var items = document.querySelectorAll('.nav-menu li:has(.sub-menu), nav li:has(.sub-menu), .navbar li:has(.sub-menu), #navMenu li:has(.sub-menu)');
items.forEach(function(li) {
if (li.querySelector('.mobile-submenu-toggle')) return;
var submenu = li.querySelector('.sub-menu');
var parentLink = li.querySelector(':scope > a');
if (!submenu || !parentLink) return;
var toggleBtn = document.createElement('button');
toggleBtn.className = 'mobile-submenu-toggle';
toggleBtn.setAttribute('aria-label', 'Toggle submenu');
toggleBtn.setAttribute('type', 'button');
parentLink.insertAdjacentElement('afterend', toggleBtn);
toggleBtn.addEventListener('click', function(e) {
e.preventDefault(); e.stopPropagation();
document.querySelectorAll('.sub-menu.mobile-expanded').forEach(function(menu) {
if (menu !== submenu) { menu.classList.remove('mobile-expanded'); var t = menu.parentElement.querySelector('.mobile-submenu-toggle'); if(t) t.classList.remove('expanded'); }
});
submenu.classList.toggle('mobile-expanded');
toggleBtn.classList.toggle('expanded');
});
});
}
if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initMobileSubmenuToggles); }
else { initMobileSubmenuToggles(); }
var resizeTimer; window.addEventListener('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(initMobileSubmenuToggles, 250); });
// Re-initialize when mobile menu becomes visible (MutationObserver)
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'attributes') {
var target = mutation.target;
if (target.classList && (target.classList.contains('active') || target.classList.contains('open'))) {
setTimeout(initMobileSubmenuToggles, 100);
}
}
});
});
setTimeout(function() {
document.querySelectorAll('.mobile-menu, .nav-menu, #navMenu, nav').forEach(function(menu) {
observer.observe(menu, { attributes: true, attributeFilter: ['class', 'style'] });
});
}, 500);
})();