var _____WB$wombat$assign$function_____=function(name){return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name))||self[name];};if(!self.__WB_pmw){self.__WB_pmw=function(obj){this.__WB_source=obj;return this;}}{ let window = _____WB$wombat$assign$function_____("window"); let self = _____WB$wombat$assign$function_____("self"); let document = _____WB$wombat$assign$function_____("document"); let location = _____WB$wombat$assign$function_____("location"); let top = _____WB$wombat$assign$function_____("top"); let parent = _____WB$wombat$assign$function_____("parent"); let frames = _____WB$wombat$assign$function_____("frames"); let opens = _____WB$wombat$assign$function_____("opens"); /** Shopify CDN: Minification failed Line 16:0 Transforming const to the configured target environment ("es5") is not supported yet Line 17:0 Transforming const to the configured target environment ("es5") is not supported yet Line 18:0 Transforming const to the configured target environment ("es5") is not supported yet Line 19:0 Transforming const to the configured target environment ("es5") is not supported yet Line 25:6 Transforming const to the configured target environment ("es5") is not supported yet Line 39:49 Transforming default arguments to the configured target environment ("es5") is not supported yet Line 39:79 Transforming default arguments to the configured target environment ("es5") is not supported yet Line 40:2 Transforming const to the configured target environment ("es5") is not supported yet Line 50:2 Transforming const to the configured target environment ("es5") is not supported yet Line 60:2 Transforming const to the configured target environment ("es5") is not supported yet ... and 9 more hidden warnings **/ const SCROLL_ANIMATION_TRIGGER_CLASSNAME = 'scroll-trigger'; const SCROLL_ANIMATION_OFFSCREEN_CLASSNAME = 'scroll-trigger--offscreen'; const SCROLL_ZOOM_IN_TRIGGER_CLASSNAME = 'animate--zoom-in'; const SCROLL_ANIMATION_CANCEL_CLASSNAME = 'scroll-trigger--cancel'; // Scroll in animation logic function onIntersection(elements, observer) { elements.forEach((element, index) => { if (element.isIntersecting) { const elementTarget = element.target; if (elementTarget.classList.contains(SCROLL_ANIMATION_OFFSCREEN_CLASSNAME)) { elementTarget.classList.remove(SCROLL_ANIMATION_OFFSCREEN_CLASSNAME); if (elementTarget.hasAttribute('data-cascade')) elementTarget.setAttribute('style', `--animation-order: ${index};`); } observer.unobserve(elementTarget); } else { element.target.classList.add(SCROLL_ANIMATION_OFFSCREEN_CLASSNAME); element.target.classList.remove(SCROLL_ANIMATION_CANCEL_CLASSNAME); } }); } function initializeScrollAnimationTrigger(rootEl = document, isDesignModeEvent = false) { const animationTriggerElements = Array.from(rootEl.getElementsByClassName(SCROLL_ANIMATION_TRIGGER_CLASSNAME)); if (animationTriggerElements.length === 0) return; if (isDesignModeEvent) { animationTriggerElements.forEach((element) => { element.classList.add('scroll-trigger--design-mode'); }); return; } const observer = new IntersectionObserver(onIntersection, { rootMargin: '0px 0px -50px 0px', }); animationTriggerElements.forEach((element) => observer.observe(element)); } // Zoom in animation logic function initializeScrollZoomAnimationTrigger() { if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; const animationTriggerElements = Array.from(document.getElementsByClassName(SCROLL_ZOOM_IN_TRIGGER_CLASSNAME)); if (animationTriggerElements.length === 0) return; const scaleAmount = 0.2 / 100; animationTriggerElements.forEach((element) => { let elementIsVisible = false; const observer = new IntersectionObserver((elements) => { elements.forEach((entry) => { elementIsVisible = entry.isIntersecting; }); }); observer.observe(element); element.style.setProperty('--zoom-in-ratio', 1 + scaleAmount * percentageSeen(element)); window.addEventListener( 'scroll', throttle(() => { if (!elementIsVisible) return; element.style.setProperty('--zoom-in-ratio', 1 + scaleAmount * percentageSeen(element)); }), { passive: true } ); }); } function percentageSeen(element) { const viewportHeight = window.innerHeight; const scrollY = window.scrollY; const elementPositionY = element.getBoundingClientRect().top + scrollY; const elementHeight = element.offsetHeight; if (elementPositionY > scrollY + viewportHeight) { // If we haven't reached the image yet return 0; } else if (elementPositionY + elementHeight < scrollY) { // If we've completely scrolled past the image return 100; } // When the image is in the viewport const distance = scrollY + viewportHeight - elementPositionY; let percentage = distance / ((viewportHeight + elementHeight) / 100); return Math.round(percentage); } window.addEventListener('DOMContentLoaded', () => { initializeScrollAnimationTrigger(); initializeScrollZoomAnimationTrigger(); }); if (Shopify.designMode) { document.addEventListener('shopify:section:load', (event) => initializeScrollAnimationTrigger(event.target, true)); document.addEventListener('shopify:section:reorder', () => initializeScrollAnimationTrigger(document, true)); } } /* FILE ARCHIVED ON 03:16:57 Oct 26, 2023 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 04:38:15 Jan 06, 2026. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). */ /* playback timings (ms): captures_list: 4.718 exclusion.robots: 0.032 exclusion.robots.policy: 0.013 esindex: 0.038 cdx.remote: 13.276 LoadShardBlock: 118.756 (3) PetaboxLoader3.datanode: 239.373 (5) PetaboxLoader3.resolve: 759.117 (2) load_resource: 920.375 loaddict: 174.598 */