(()=>{const ready=(fn)=>document.readyState==='loading'?document.addEventListener('DOMContentLoaded',fn):fn();ready(()=>{const body=document.body,drawer=document.querySelector('.v20-drawer'),overlay=document.querySelector('.v20-drawer-overlay');const openers=document.querySelectorAll('[data-v20-menu-open]'),closers=document.querySelectorAll('[data-v20-menu-close]');const open=()=>{drawer?.classList.add('is-open');overlay?.classList.add('is-open');body.classList.add('v20-menu-open');openers.forEach(b=>b.setAttribute('aria-expanded','true'));};const close=()=>{drawer?.classList.remove('is-open');overlay?.classList.remove('is-open');body.classList.remove('v20-menu-open');openers.forEach(b=>b.setAttribute('aria-expanded','false'));};openers.forEach(b=>b.addEventListener('click',e=>{e.preventDefault();e.stopPropagation();open();}));closers.forEach(b=>b.addEventListener('click',close));overlay?.addEventListener('click',close);drawer?.querySelectorAll('a').forEach(a=>a.addEventListener('click',close));document.addEventListener('keydown',e=>{if(e.key==='Escape')close();});let startX=0;document.addEventListener('touchstart',e=>{startX=e.changedTouches[0].clientX},{passive:true});document.addEventListener('touchend',e=>{const dx=e.changedTouches[0].clientX-startX;if(startX>innerWidth-35&&dx<-55)open();if(drawer?.classList.contains('is-open')&&dx>55)close();},{passive:true});});})();