(function(){if(localStorage.getItem('cookiesAccepted'))document.getElementById('cookieBanner').style.display='none'})(); function acceptCookies(){localStorage.setItem('cookiesAccepted','true');document.getElementById('cookieBanner').style.display='none'} (function(){ var nav=document.getElementById('siteNav'); var toggle=document.getElementById('navToggle'); if(nav&&toggle){ toggle.addEventListener('click',function(){ var open=nav.classList.toggle('open'); toggle.setAttribute('aria-expanded',open); }); nav.querySelectorAll('.nav-links a').forEach(function(link){link.addEventListener('click',function(){nav.classList.remove('open');toggle.setAttribute('aria-expanded','false')}); }); } document.querySelectorAll('.agenda-meta').forEach(function(meta){ if(!meta.querySelector('.agenda-time')){ meta.classList.add('no-time'); var block=meta.closest('.agenda-block'); if(block)block.classList.add('no-time'); } }); var scrollerContainer=document.getElementById('speakerScrollerContainer'); var scrollerTrack=document.getElementById('speakerScrollerTrack'); if(scrollerContainer&&scrollerTrack){ var autoScrollInterval; var isDragging=false; var hasMoved=false; var startX; var scrollLeftStart; var scrollDirection=1; function autoScroll(){ if(isDragging)return; var currentScroll=scrollerContainer.scrollLeft; var maxScroll=scrollerTrack.scrollWidth-scrollerContainer.clientWidth; if(maxScroll<=0)return; if(currentScroll>=maxScroll-1){scrollDirection=-1;}else if(currentScroll<=1){scrollDirection=1;} scrollerContainer.scrollLeft=currentScroll+(1*scrollDirection); } scrollerContainer.addEventListener('mousedown',function(e){ e.preventDefault(); isDragging=true; hasMoved=false; scrollerContainer.style.cursor='grabbing'; scrollerContainer.style.userSelect='none'; startX=e.pageX-scrollerContainer.offsetLeft; scrollLeftStart=scrollerContainer.scrollLeft; }); scrollerContainer.addEventListener('mousemove',function(e){ if(!isDragging)return; e.preventDefault(); var x=e.pageX-scrollerContainer.offsetLeft; var walk=(x-startX)*3; var distance=Math.abs(walk); if(distance>5){hasMoved=true;} scrollerContainer.scrollLeft=scrollLeftStart-walk; }); scrollerContainer.addEventListener('mouseup',function(){ isDragging=false; scrollerContainer.style.cursor='grab'; }); scrollerContainer.addEventListener('click',function(e){ if(hasMoved){ e.preventDefault(); e.stopPropagation(); } },true); scrollerContainer.addEventListener('mouseleave',function(){ if(isDragging){ isDragging=false; scrollerContainer.style.cursor='grab'; } }); var touchStartX=0; var touchMoved=false; scrollerContainer.addEventListener('touchstart',function(e){ touchStartX=e.touches[0].clientX; touchMoved=false; },{passive:true}); scrollerContainer.addEventListener('touchmove',function(e){ var touchX=e.touches[0].clientX; if(Math.abs(touchX-touchStartX)>10){touchMoved=true;} },{passive:true}); scrollerContainer.addEventListener('touchend',function(){ setTimeout(function(){touchMoved=false;},300); },{passive:true}); scrollerContainer.querySelectorAll('a').forEach(function(link){ link.addEventListener('click',function(e){ if(touchMoved){ e.preventDefault(); e.stopPropagation(); } }); }); scrollerContainer.style.cursor='grab'; autoScrollInterval=setInterval(autoScroll,30); } var galleryItems=document.querySelectorAll('.gallery-item'); var lightbox=document.getElementById('lightbox'); var lightboxImage=document.getElementById('lightboxImage'); if(galleryItems.length&&lightbox&&lightboxImage){ var sources=[]; var current=0; galleryItems.forEach(function(item,i){ sources.push(item.getAttribute('href')); item.addEventListener('click',function(e){ e.preventDefault(); current=i; lightboxImage.src=sources[current]; lightbox.classList.add('open'); }); }); function showImage(){lightboxImage.src=sources[current]} function closeLightbox(){lightbox.classList.remove('open')} function showPrev(){current=(current-1+sources.length)%sources.length;showImage()} function showNext(){current=(current+1)%sources.length;showImage()} document.getElementById('lightboxClose').addEventListener('click',closeLightbox); lightbox.addEventListener('click',function(e){if(e.target===lightbox)closeLightbox()}); document.getElementById('lightboxPrev').addEventListener('click',showPrev); document.getElementById('lightboxNext').addEventListener('click',showNext); document.addEventListener('keydown',function(e){ if(!lightbox.classList.contains('open'))return; if(e.key==='Escape')closeLightbox(); if(e.key==='ArrowLeft')showPrev(); if(e.key==='ArrowRight')showNext(); }); var lightboxTouchStartX=0; var lightboxTouchStartY=0; lightbox.addEventListener('touchstart',function(e){ lightboxTouchStartX=e.touches[0].clientX; lightboxTouchStartY=e.touches[0].clientY; },{passive:true}); lightbox.addEventListener('touchend',function(e){ var dx=e.changedTouches[0].clientX-lightboxTouchStartX; var dy=e.changedTouches[0].clientY-lightboxTouchStartY; if(Math.abs(dx)>50&&Math.abs(dx)>Math.abs(dy)){ if(dx<0)showNext(); else showPrev(); } },{passive:true}); } })();