// фон
const overlay = makeOverlay(200);
let isOpen = false, closing = false;
function openPanel(){
if(isOpen) return;
isOpen = true;
panel.classList.remove(ANIM_OUT);
panel.classList.add(OPEN_CLS,'animate__animated',ANIM_IN);
overlay.style.display = 'block';
if (isMobile()) document.body.classList.add(BODY_LOCK);
// убрать классы анимации после показа
setTimeout(()=>panel.classList.remove('animate__animated',ANIM_IN),300);
}
function closePanel(){
if(!isOpen || closing) return;
closing = true;
panel.classList.add('animate__animated',ANIM_OUT);
setTimeout(()=>{
panel.classList.remove(ANIM_OUT,OPEN_CLS,'animate__animated');
overlay.style.display = 'none';
document.body.classList.remove(BODY_LOCK);
isOpen = false; closing = false;
},200);
}
function togglePanel(){ isOpen ? closePanel() : openPanel(); }
function isMobile(){
return /Android|webOS|iPhone|iPad|iPod/i.test(navigator.userAgent)
|| (navigator.maxTouchPoints && navigator.maxTouchPoints>1);
}
// ===== Поведение как в Annexx =====
if(!isMobile()){
// Desktop: hover для открытия
triggers.forEach(t=>{
t.addEventListener('mouseenter', openPanel);
// если ушли с триггера и не в панель — закрыть
t.addEventListener('mouseleave', e=>{
// короткая задержка, чтобы успеть навести на панель
setTimeout(()=>{ if(!panel.matches(':hover')) closePanel(); }, 120);
});
});
// уход мыши с панели — закрыть
panel.addEventListener('mouseleave', closePanel);
} else {
// Mobile: tap toggle
triggers.forEach(t=>{
t.style.cursor = 'pointer';
t.addEventListener('touchstart', e=>{ e.preventDefault(); togglePanel(); }, {passive:false});
t.addEventListener('click', e=>{ e.preventDefault(); togglePanel(); });
});
}
// Клик/тап по подложке — закрыть
['click','touchstart'].forEach(ev=>{
overlay.addEventListener(ev, (e)=>{ e.preventDefault(); closePanel(); }, {passive:false});
});
// ESC для закрытия
document.addEventListener('keydown', (e)=>{ if(e.key==='Escape') closePanel(); });
// Клик по ссылкам внутри панели — закрыть (как linkclose:true)
panel.addEventListener('click', (e)=>{
const a = e.target.closest('a');
if(a && !a.target){ closePanel(); }
});
});
})();