initZoomObserver() {if (this._zoomObserver) this._zoomObserver.disconnect();const container = document.getElementById('zoom-container');const slides = Array.from(document.querySelectorAll('.zoom-slide')); // full feed, photos + videosthis._activeSlideIndex =-1; // force first sync to always runconstsyncActiveVideo= () => {const activeIndex = Math.round(container.scrollTop / container.clientHeight);if (activeIndex ===this._activeSlideIndex) return;this._activeSlideIndex = activeIndex;// Always mute/pause every video first. This is the actual fix — a photo// slide has no video of its own to "activate", so without this// unconditional sweep, whatever video was last playing just kept going// in the background while a photo sat on screen. document.querySelectorAll('.big-video').forEach(v=> {if (!v.paused ||!v.muted) { v.muted =true; v.pause(); v.currentTime =0; } });// Only THEN check if the slide we landed on is actually a video, and// if so, play/unmute that one specific element.const activeSlide = slides[activeIndex];const activeVideo = activeSlide ? activeSlide.querySelector('.big-video') :null;if (activeVideo) { activeVideo.muted =!this.soundUnlocked;const p = activeVideo.play();if (p !==undefined) { p.catch(() => { activeVideo.muted =true; activeVideo.play().catch(() => {}); }); } } };if ('onscrollend'in window) { container.onscroll =null; container.onscrollend = syncActiveVideo; } else { container.onscroll= () => {clearTimeout(this._scrollSettleTimer);this._scrollSettleTimer =setTimeout(syncActiveVideo, 120); }; } container.ontouchend = syncActiveVideo;syncActiveVideo();},