{"version":3,"sources":["common.js","Animations.js","BaseComponent.js","BaseGLAnimation.js","Pswp.js","Scroll.js","ScrollAnimation.js","SetText.js","Slider.js","PJAX/PJAX Animate Clonned Image.js","PJAX/PJAX Clone Image.js","PJAX/PJAX Finish Loading.js","PJAX/PJAX Init New Page.js","PJAX/PJAX Set Next Container.js","PJAX/PJAX Start Loading.js","PJAX/PJAX Transition Flying Image.js","PJAX/PJAX Transition Fullscreen Slider.js","PJAX/PJAX Transition General.js","PJAX/PJAX Transition List Hover.js","PJAX/PJAX Transition Overlay Menu.js","PJAX/PJAX Update Admin Bar.js","PJAX/PJAX Update Audio Background.js","PJAX/PJAX Update Body.js","PJAX/PJAX Update Head.js","PJAX/PJAX Update Language Switcher.js","PJAX/PJAX Update Nodes.js","PJAX/PJAX Update Trackers.js","PJAX/PJAX.js","arrow/Arrow.js","asideCounters/AsideCounters.js","changeTextHover/ChangeTextHover.js","circleButton/CircleButton.js","counter/Counter.js","effects/EffectDistortion.js","effects/EffectStretch.js","cursor/Cursor.js","filter/Filter.js","fontObserver/fontObserver.js","form/Form.js","form/FormAJAX.js","gmap/gmap.js","grid/grid.js","header/Header.js","lazy/lazyLoad.js","magnetic/Magnetic.js","pageIndicator/PageIndicator.js","parallax/ArtsParallax.js","preloader/Preloader.js","pswp/PSWPAlbum.js","pswp/PSWPGallery.js","scroll/SmoothScroll.js","scrollDown/ScrollDown.js","sectionContent/SectionContent.js","sectionGrid/SectionGrid.js","sectionList/SectionList.js","sectionMasthead/SectionMasthead.js","sectionNavProjects/SectionNavProjects.js","sectionProjectsSlider/SectionProjectsSlider.js","sectionSliderImages/SectionSliderImages.js","sectionTestimonials/SectionTestimonials.js","sectionVideo/SectionVideo.js","slider/SliderCategories.js","slider/SliderCounter.js","slider/SliderDistortionEffect.js","slider/SliderDots.js","slider/SliderHoverBackgrounds.js","slider/SliderTextTransitions.js","sliderImages/SliderImages.js","sliderFullscreenProjects/SliderFullscreenProjects.js","sliderTestimonials/SliderTestimonials.js","utilities/MobileBarHeight.js","utilities/debounce.js","utilities/distributeByPosition.js","utilities/getStaggerFrom.js","utilities/isAnchor.js","utilities/math.js","utilities/runOnHighPerformanceGPU.js","utilities/syncAttributes.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"components.js","sourcesContent":["/**\n * Try to use high performance GPU on dual-GPU systems\n */\nrunOnHighPerformanceGPU();\n\n/**\n * Use passive listeners to improve scrolling performance\n */\njQuery.event.special.touchstart = {\n setup: function( _, ns, handle ){\n if ( ns.includes('noPreventDefault') ) {\n this.addEventListener('touchstart', handle, { passive: false });\n } else {\n this.addEventListener('touchstart', handle, { passive: true });\n }\n }\n};\n\njQuery.event.special.touchend = {\n setup: function( _, ns, handle ){\n if ( ns.includes('noPreventDefault') ) {\n this.addEventListener('touchend', handle, { passive: false });\n } else {\n this.addEventListener('touchend', handle, { passive: true });\n }\n }\n};\n\n/**\n * GSAP: turn off console warnings\n */\ngsap.config({\n\tnullTargetWarn: false\n});\n\n/**\n * Global Vars\n */\nwindow.$document = $(document);\nwindow.$window = $(window);\nwindow.$body = $('body');\nwindow.$html = $('html');\nwindow.$spinner = $('#js-spinner');\nwindow.$barbaWrapper = $('[data-barba=\"wrapper\"]');\nwindow.$pageWrapper = $('#page-wrapper');\nwindow.$pageContent = $('.page-wrapper__content');\nwindow.$pagePreloader = $('#js-preloader');\nwindow.PagePreloader = new Preloader({\n\tscope: window.$document,\n\ttarget: window.$pagePreloader,\n\tcurtain: {\n\t\telement: $('#js-page-transition-curtain'),\n\t\tbackground: $('.section-masthead').attr('data-background-color')\n\t},\n\tcounter: {\n\t\teasing: 'power4.out',\n\t\tduration: 25,\n\t\tstart: 0,\n\t\ttarget: 100,\n\t\tprefix: '',\n\t\tsuffix: ''\n\t}\n});\n\n/**\n * Begin Page Load\n */\nwindow.PagePreloader.start();\n\n/**\n * Default Theme Options\n * Used to prevent errors if there is\n * no data provided from backend\n */\nif (typeof window.theme === 'undefined') {\n\twindow.theme = {\n\t\tfonts: ['Raleway', 'Cinzel'], // declare your fonts to be loaded here\n\t\tajax: {\n\t\t\tenabled: true,\n\t\t\tpreventRules: '' // jQuery selectors of the elements to exclude them from AJAX transitions\n\t\t},\n\t\tanimations: {\n\t\t\ttriggerHook: 0.85, // more info https://scrollmagic.io/docs/ScrollMagic.Scene.html#triggerHook\n\t\t\ttimeScale: {\n\t\t\t\tonScrollReveal: 1, // on-scroll animations global speed\n\t\t\t\toverlayMenuOpen: 1, // fullscreen menu open speed\n\t\t\t\toverlayMenuClose: 1, // fullscreen menu close speed\n\t\t\t}\n\t\t},\n\t\tcursorFollower: {\n\t\t\tenabled: true,\n\t\t\tlabels: {\n\t\t\t\tslider: 'Drag'\n\t\t\t}\n\t\t},\n\t\tsmoothScroll: { // more info https://github.com/idiotWu/smooth-scrollbar/tree/develop/docs\n\t\t\tenabled: true,\n\t\t\tdamping: 0.12,\n\t\t\trenderByPixels: true,\n\t\t\tcontinuousScrolling: false,\n\t\t\tplugins: {\n\t\t\t\tedgeEasing: true\n\t\t\t}\n\t\t},\n\t\tcontactForm7: {\n\t\t\tcustomModals: true\n\t\t}\n\t}\n}\n\n/**\n * ScrollMagic Setup\n */\nwindow.SMController = new ScrollMagic.Controller();\nwindow.SMController.enabled(false); // don't start animations yet\nwindow.SMSceneTriggerHook = window.theme.animations.triggerHook;\nwindow.SMSceneReverse = false;\n\n/**\n * Don't save scroll position\n * after AJAX transition\n */\nif ('scrollRestoration' in history) {\n\thistory.scrollRestoration = 'manual';\n}\n\n/**\n * Page Load Strategy\n */\nwindow.$window.on('load', function () {\n\n\tnew Animations();\n\n\t// load fonts first\n\tfontObserver()\n\t\t// prepare all the texts\n\t\t.then(() => SetText.splitText({\n\t\t\ttarget: window.$document.find('.js-split-text')\n\t\t}))\n\t\t.then(() => SetText.setLines({\n\t\t\ttarget: window.$document.find('.split-text[data-split-text-set=\"lines\"]')\n\t\t}))\n\t\t.then(() => SetText.setWords({\n\t\t\ttarget: window.$document.find('.split-text[data-split-text-set=\"words\"]')\n\t\t}))\n\t\t.then(() => SetText.setChars({\n\t\t\ttarget: window.$document.find('.split-text[data-split-text-set=\"chars\"]')\n\t\t}))\n\t\t// init template components\n\t\t.then(() => {\n\t\t\tnew LazyLoad({\n\t\t\t\tscope: window.$document,\n\t\t\t\tsetPaddingBottom: true,\n\t\t\t\trun: true\n\t\t\t});\n\t\t\tinitComponents(window.$document);\n\t\t})\n\t\t.then(() => window.PagePreloader.finish())\n\t\t.then(() => {\n\t\t\t// init cursor only on non-touch browsers\n\t\t\tif (window.theme.cursorFollower.enabled && !window.Modernizr.touchevents) {\n\t\t\t\tnew Cursor({\n\t\t\t\t\tscope: window.$document,\n\t\t\t\t\ttarget: $('#js-cursor'),\n\t\t\t\t\tcursorElements: '[data-arts-cursor]',\n\t\t\t\t\thighlightElements: 'a:not(a[data-arts-cursor]):not(.social__item a):not(.section-video__link):not(.no-highlight), button:not(button[data-arts-cursor]), .filter__item, .section-nav-projects__header', // links to highlight\n\t\t\t\t\thighlightScale: 1.5, // default highlight scaling\n\t\t\t\t\tmagneticElements: '[data-arts-cursor-magnetic]', // magnetic elements \n\t\t\t\t\tmagneticScaleCursorBy: 1.3, // default magnetic scaling\n\t\t\t\t\tanimDuration: 0.25,\n\t\t\t\t});\n\t\t\t}\n\t\t\t// begin animations \n\t\t\twindow.SMController.enabled(true);\n\t\t\twindow.SMController.update(true);\n\t\t});\n\n\t// init AJAX navigation\n\tif (window.theme.ajax.enabled) {\n\t\tnew PJAX({\n\t\t\ttarget: window.$barbaWrapper,\n\t\t\tscope: window.$document\n\t\t});\n\t}\n\n});\n\n/**\n * Init Template Components\n * You can init your custom scripts here\n * in that function\n */\nfunction initComponents({\n\tscope = window.$document,\n\tcontainer = window.$pageWrapper\n}) {\n\n\t// init page header one time only\n\tif (typeof window.theme.header === 'undefined') {\n\t\twindow.theme.header = new Header();\n\t}\n\n\tnew MobileBarHeight();\n\tnew SmoothScroll({\n\t\ttarget: container.filter('.js-smooth-scroll'),\n\t\tadminBar: $('#wpadminbar'),\n\t\tabsoluteElements: $('[data-arts-scroll-absolute]'), // correct handling of absolute elements OUTSIDE scrolling container\n\t\tfixedElements: $('[data-arts-scroll-fixed]') // correct handling of fixed elements INSIDE scrolling container\n\t});\n\tnew ScrollDown({\n\t\ttarget: scope.find('[data-arts-scroll-down]'),\n\t\tscope,\n\t\tduration: 0.8\n\t})\n\tnew ArtsParallax({\n\t\ttarget: scope.find('[data-arts-parallax]'),\n\t\tfactor: 0.3,\n\t\tScrollMagicController: window.SMController,\n\t\tSmoothScrollBarController: window.SB\n\t});\n\tnew AsideCounters({\n\t\ttarget: scope.find('.aside-counters'),\n\t\tscope\n\t});\n\tnew Arrow({\n\t\ttarget: scope.find('.js-arrow')\n\t});\n\tnew SectionMasthead({\n\t\ttarget: scope.find('.section-masthead'),\n\t\tscope\n\t});\n\tnew SectionContent({\n\t\ttarget: scope.find('.section-content'),\n\t\tscope\n\t});\n\tnew SectionProjectsSlider({\n\t\ttarget: scope.find('.section-projects-slider'),\n\t\tscope\n\t});\n\tnew SectionList({\n\t\ttarget: scope.find('.section-list'),\n\t\tscope\n\t});\n\tnew ChangeTextHover({\n\t\ttarget: scope.find('.js-change-text-hover:not(.js-change-text-hover .js-change-text-hover)'), // exclude nested elements\n\t\tscope,\n\t\tpageIndicator: scope.find('.js-page-indicator'), // fixed page indicator\n\t\ttriggers: scope.find('.js-page-indicator-trigger'), // elements that triggers the change of page indicator\n\t});\n\tnew PageIndicator(scope);\n\tnew PSWPGallery({\n\t\ttarget: scope.find('.js-gallery'),\n\t\tscope,\n\t\toptions: { // Pass your custom PhotoSwipe options here https://photoswipe.com/documentation/options.html\n\t\t\thistory: window.theme.ajax.enabled ? false : true, // galleries URLs navigation is NOT compatible with AJAX\n\t\t\tshowAnimationDuration: 300,\n\t\t}\n\t});\n\tnew PSWPAlbum({\n\t\ttarget: scope.find('.js-album'),\n\t\tscope,\n\t\toptions: { // Pass your custom PhotoSwipe options here https://photoswipe.com/documentation/options.html\n\t\t\thistory: window.theme.ajax.enabled ? false : true, // galleries URLs navigation is NOT compatible with AJAX\n\t\t\tshowAnimationDuration: 300,\n\t\t}\n\t});\n\tnew GMap({\n\t\ttarget: scope.find('.js-gmap'),\n\t\tscope\n\t});\n\tnew Form({\n\t\ttarget: scope,\n\t\tscope\n\t});\n\tnew FormAJAX({\n\t\ttarget: scope.find('.js-ajax-form'),\n\t\tscope\n\t});\n\tnew SectionSliderImages({\n\t\ttarget: scope.find('.section-slider-images'),\n\t\tscope\n\t});\n\tnew SectionTestimonials({\n\t\ttarget: scope.find('.section-testimonials'),\n\t\tscope\n\t});\n\tnew SectionGrid({\n\t\ttarget: scope.find('.section-grid'),\n\t\tscope\n\t});\n\n\tnew SectionNavProjects({\n\t\ttarget: scope.find('.section-nav-projects'),\n\t\tscope\n\t});\n\n\tnew CircleButton({\n\t\ttarget: scope.find('.js-circle-button:not(.js-circle-button_curved)'),\n\t\tscope\n\t});\n\n\t//\n\t// your custom plugins init here\n\t//\n\n}\n","/* ======================================================================== */\n/* 1. Animations */\n/* ======================================================================== */\nclass Animations {\n constructor() {\n this._revealCurtain();\n this._moveCurtain();\n this._setCurtain();\n this._animateChars();\n this._animateLines();\n this._animateWords();\n this._hideChars();\n this._hideLines();\n this._hideWords();\n this._animateHeadline();\n }\n\n _setCurtain() {\n gsap.registerEffect({\n name: 'setCurtain',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n if (!$target.length) {\n return tl;\n }\n\n const\n $svg = $target.find('.curtain-svg'),\n $normal = $target.find('.curtain-svg__normal'),\n $curve = $target.find('.curtain-svg__curve'),\n $rect = $target.find('.curtain__rect');\n\n tl\n .set($target, {\n display: 'none',\n autoAlpha: 1,\n y: config.y\n })\n .set($svg, {\n fill: config.background,\n });\n\n return tl;\n\n },\n extendTimeline: true,\n defaults: {\n y: '100%'\n }\n });\n }\n\n _moveCurtain() {\n gsap.registerEffect({\n name: 'moveCurtain',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n if (!$target.length) {\n return tl;\n }\n\n const\n $svg = $target.find('.curtain-svg'),\n $normal = $svg.find('.curtain-svg__normal');\n\n let $curveTop, $curveBottom;\n\n if (window.innerWidth / window.innerHeight >= 1) {\n $curveTop = $target.find('.curtain-svg__curve_top-desktop');\n $curveBottom = $svg.find('.curtain-svg__curve_bottom-desktop');\n } else {\n $curveTop = $svg.find('.curtain-svg__curve_top-mobile');\n $curveBottom = $svg.find('.curtain-svg__curve_bottom-mobile');\n }\n\n tl\n .set($target, {\n display: 'block',\n autoAlpha: 1\n })\n .set([$curveTop, $curveBottom], {\n visibility: 'hidden',\n })\n .to($target, {\n y: config.y,\n duration: 1.8,\n ease: 'expo.inOut'\n });\n\n if (config.curve === 'top') {\n tl\n .set($normal, {\n visibility: 'visible'\n }, '0')\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $curveTop[0]\n }, '-=1.8')\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $normal[0],\n overwrite: 'all'\n }, '-=0.9');\n } else {\n tl\n .set($normal, {\n visibility: 'visible',\n }, '0')\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $curveBottom[0],\n overwrite: 'all',\n }, '-=1.8')\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $normal[0],\n });\n }\n\n tl.totalDuration(config.duration);\n\n return tl;\n\n },\n extendTimeline: true,\n defaults: {\n duration: 2.4,\n curve: 'top',\n y: '0%'\n }\n });\n }\n\n _revealCurtain() {\n gsap.registerEffect({\n name: 'revealCurtain',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n if (!$target.length) {\n return tl;\n }\n\n const\n $normal = $target.find('.curtain-svg__normal'),\n $curve = $target.find('.curtain-svg__curve');\n\n tl\n .set($target, {\n y: '100%',\n autoAlpha: 1\n })\n .set($normal, {\n visibility: 'visible'\n })\n .set($curve, {\n visibility: 'hidden',\n })\n .to($target, {\n y: '0%',\n duration: 1.8,\n ease: 'expo.inOut'\n })\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $curve[0]\n }, '-=1.8')\n .to($normal, {\n duration: 0.9,\n ease: 'power2.out',\n morphSVG: $normal[0],\n overwrite: 'all'\n }, '-=0.9');\n\n tl.totalDuration(config.duration)\n\n return tl;\n\n },\n extendTimeline: true,\n defaults: {\n duration: 2.4\n }\n });\n }\n\n _animateChars() {\n gsap.registerEffect({\n name: 'animateChars',\n effect: (target, config) => {\n const\n $target = $(target),\n $chars = $target.find('.split-text__char');\n\n let textAlign;\n\n if (!$chars.length) {\n return;\n }\n\n textAlign = $target.css('text-align');\n\n if (!config.stagger.from) {\n\n switch (textAlign) {\n case 'left':\n config.stagger.from = 'start';\n break;\n case 'center':\n config.stagger.from = 'center';\n break;\n case 'right':\n config.stagger.from = 'end';\n break;\n }\n\n }\n\n return gsap.to($chars, config);\n },\n defaults: {\n xPercent: 0,\n yPercent: 0,\n x: '0%',\n y: '0%',\n autoAlpha: 1,\n duration: 1,\n ease: 'power3.inOut',\n stagger: distributeByPosition({\n from: 'start',\n amount: 0.3\n })\n },\n extendTimeline: true,\n });\n }\n\n _animateLines() {\n gsap.registerEffect({\n name: 'animateLines',\n effect: (target, config) => {\n const $target = $(target);\n let $lines = $target.find('.split-text__line');\n\n if (!$lines.length) {\n return;\n }\n\n if (config.excludeEl) {\n $lines = $lines.not(config.excludeEl);\n delete config.excludeEl;\n }\n\n return gsap.to($lines, config);\n },\n defaults: {\n xPercent: 0,\n yPercent: 0,\n x: '0%',\n y: '0%',\n autoAlpha: 1,\n duration: 1.2,\n ease: 'power3.out',\n stagger: {\n amount: 0.08\n }\n },\n extendTimeline: true,\n });\n }\n\n _animateWords() {\n gsap.registerEffect({\n name: 'animateWords',\n effect: (target, config) => {\n const\n $target = $(target),\n $words = $target.find('.split-text__word');\n\n if (!$words.length) {\n return;\n }\n\n return gsap.to($words, config);\n },\n defaults: {\n duration: 1.2,\n y: '0%',\n ease: 'power3.out',\n stagger: {\n amount: 0.2\n }\n },\n extendTimeline: true,\n });\n }\n\n _hideChars() {\n gsap.registerEffect({\n name: 'hideChars',\n effect: (target, config) => {\n const\n $target = $(target),\n $chars = $target.find('.split-text__char'),\n textAlign = $target.css('text-align');\n\n if (!$chars.length) {\n return;\n }\n\n if (!config.stagger.from) {\n\n switch (textAlign) {\n case 'left':\n config.stagger.from = 'start';\n break;\n case 'center':\n config.stagger.from = 'center';\n break;\n case 'right':\n config.stagger.from = 'end';\n break;\n }\n\n }\n\n if (config.duration === 0) {\n config.stagger = 0;\n }\n\n return gsap.to($chars, config);\n },\n defaults: {\n duration: 1.2,\n x: '0%',\n y: '100%',\n autoAlpha: 0,\n ease: 'power3.inOut',\n stagger: distributeByPosition({\n from: 'center',\n amount: 0.3\n })\n },\n extendTimeline: true,\n });\n }\n\n _hideLines() {\n gsap.registerEffect({\n name: 'hideLines',\n effect: (target, config) => {\n const\n $target = $(target),\n $lines = $target.find('.split-text__line');\n\n if (!$lines.length) {\n return;\n }\n\n if (config.duration === 0) {\n config.stagger = 0;\n }\n\n return gsap.to($lines, config);\n },\n defaults: {\n y: '-100%',\n autoAlpha: 1,\n duration: 1.2,\n ease: 'power3.out',\n stagger: {\n amount: 0.02\n }\n },\n extendTimeline: true,\n });\n }\n\n _hideWords() {\n gsap.registerEffect({\n name: 'hideWords',\n effect: (target, config) => {\n const\n $target = $(target),\n $words = $target.find('.split-text__word');\n\n if (!$words.length) {\n return;\n }\n\n return gsap.to($words, config);\n },\n defaults: {\n y: '-100%',\n autoAlpha: 0,\n duration: 1.2,\n ease: 'power3.out',\n stagger: {\n amount: 0.02\n }\n },\n extendTimeline: true,\n });\n }\n\n _animateHeadline() {\n gsap.registerEffect({\n name: 'animateHeadline',\n effect: (target, config) => {\n const\n $target = $(target);\n\n let textAlign;\n textAlign = $target.css('text-align');\n\n if (!config.transformOrigin) {\n\n switch (textAlign) {\n case 'left':\n config.transformOrigin = 'left center';\n break;\n case 'center':\n config.transformOrigin = 'center center';\n break;\n case 'right':\n config.transformOrigin = 'right center';\n break;\n }\n\n }\n\n return gsap.to($target, config);\n },\n defaults: {\n scaleX: 1,\n scaleY: 1,\n duration: 1.2,\n ease: 'power3.inOut',\n },\n extendTimeline: true,\n });\n }\n}\n","/* ======================================================================== */\n/* 2. BaseComponent */\n/* ======================================================================== */\nclass BaseComponent {\n\n constructor({\n target,\n scope = window.$document\n }) {\n const self = this;\n\n this.$scope = scope;\n this.$target = this.$scope.find(target);\n this.$el;\n\n if (this.$target && this.$target.length) {\n this.$target.each(function () {\n self.$el = $(this);\n self.set(self.$el);\n self.run(self.$el);\n });\n }\n }\n\n set($el) {\n\n }\n\n run($el) {\n\n }\n\n}\n","/* ======================================================================== */\n/* 3. BaseGLAnimation */\n/* ======================================================================== */\nclass BaseGLAnimation {\n\n\tconstructor({\n\t\ttarget,\n\t\tcanvas,\n\t\taspect\n\t}) {\n\t\tthis.target = target;\n\t\tthis.canvas = canvas;\n\n\t\tif (!BaseGLAnimation.isThreeLoaded() || !this.canvas) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.coverMode = aspect ? true : false;\n\t\tthis.aspect = aspect || window.innerWidth / window.innerHeight;\n\t\tthis.scene = this._getScene();\n\t\tthis.viewport = this.coverMode ? this._getViewportCover() : this._getViewport();\n\t\tthis.camera = this._getCamera();\n\t\tthis.viewSize = this._getViewSize();\n\t\tthis.position = this._calculatePosition();\n\n\t\tthis.renderer = this._getRenderer();\n\t\tthis.renderer.setPixelRatio(1); // window.devicePixelRatio\n\t\tthis.renderer.setClearColor(0xffffff, 0.0);\n\t\tthis.renderer.setSize(this.viewport.width, this.viewport.height);\n\t\tthis.renderer.setAnimationLoop(this._render.bind(this));\n\n\t\tthis.loader = this._getTextureLoader();\n\n\t\tthis.camera.position.z = 1;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis._updateScene();\n\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\twindow.$window.on('resize', debounce(() => {\n\t\t\tthis._updateScene();\n\t\t}, 250));\n\n\t\twindow.$window.on('arts/barba/transition/start', () => {\n\t\t\tthis.destroy();\n\t\t});\n\t}\n\n\t_render() {\n\t\tthis.renderer.render(this.scene, this.camera);\n\t}\n\n\t_getRenderer() {\n\t\treturn new THREE.WebGLRenderer({\n\t\t\tcanvas: this.canvas,\n\t\t\tpowerPreference: 'high-performance',\n\t\t\talpha: true\n\t\t});\n\t}\n\n\t_getScene() {\n\t\treturn new THREE.Scene();\n\t}\n\n\t_getCamera() {\n\t\treturn new THREE.PerspectiveCamera(\n\t\t\t53.1,\n\t\t\tthis.viewport.aspectRatio,\n\t\t\t0.1,\n\t\t\t1000\n\t\t);\n\t}\n\n\t_getTextureLoader() {\n\t\treturn new THREE.TextureLoader();\n\t}\n\n\t_getPlane({\n\t\tgeometry,\n\t\tmaterial\n\t}) {\n\t\treturn new THREE.Mesh(geometry, material);\n\t}\n\n\t_updateScene() {\n\t\tthis.viewport = this.coverMode ? this._getViewportCover() : this._getViewport();\n\t\tthis.viewSize = this._getViewSize();\n\t\tthis.camera.aspect = this.viewport.aspectRatio;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.renderer.setSize(this.viewport.width, this.viewport.height);\n\t}\n\n\t_getViewport() {\n\n\t\tconst width = window.innerWidth;\n\t\tconst height = window.innerHeight;\n\t\tconst aspectRatio = width / height;\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\taspectRatio\n\t\t}\n\t}\n\n\t_getViewportCover() {\n\t\tlet\n\t\t\theight = parseFloat(window.innerHeight),\n\t\t\twidth = parseFloat(height * this.aspect),\n\t\t\taspectRatio = this.aspect,\n\t\t\tmultiplier = 1\n\n\t\tif (this.aspect > 1) {\n\t\t\tmultiplier = window.innerWidth > width ? window.innerWidth / width : 1;\n\t\t} else {\n\t\t\tmultiplier = this.canvas.clientWidth / width;\n\t\t}\n\n\t\tif (multiplier < 1) {\n\t\t\tmultiplier = 1;\n\t\t}\n\n\t\twidth = width * multiplier;\n\t\theight = height * multiplier;\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\taspectRatio\n\t\t};\n\t}\n\n\t_getViewSize() {\n\t\t// fit plane to screen\n\t\t// https://gist.github.com/ayamflow/96a1f554c3f88eef2f9d0024fc42940f\n\n\t\tconst distance = this.camera.position.z;\n\t\tconst vFov = (this.camera.fov * Math.PI) / 180;\n\t\tconst height = 2 * Math.tan(vFov / 2) * distance;\n\t\tconst width = height * this.viewport.aspectRatio;\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tvFov\n\t\t};\n\t}\n\n\t_calculatePosition() {\n\t\tlet\n\t\t\theight = parseFloat(window.innerHeight),\n\t\t\twidth = parseFloat(height * this.viewport.aspectRatio),\n\t\t\tmultiplier = 1;\n\n\t\tif (this.viewport.aspectRatio > 1) {\n\t\t\tmultiplier = window.innerWidth > width ? window.innerWidth / width : 1;\n\t\t} else {\n\t\t\tmultiplier = this.canvas.clientWidth / width;\n\t\t}\n\n\t\tif (multiplier < 1) {\n\t\t\tmultiplier = 1;\n\t\t}\n\n\t\twidth = width * multiplier;\n\t\theight = height * multiplier;\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t}\n\n\t_loadTextures() {\n\t\tconst self = this,\n\t\t\tpromises = [];\n\n\t\tthis.items.each(function (index) {\n\t\t\tconst url = $(this).find('[data-texture-src]').attr('data-texture-src');\n\n\t\t\tpromises.push(\n\t\t\t\tself._loadTexture({\n\t\t\t\t\tloader: self.loader,\n\t\t\t\t\turl,\n\t\t\t\t\tindex\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// resolve textures promises\n\t\t\tPromise.all(promises).then(promises => {\n\t\t\t\t// all textures are loaded\n\t\t\t\tpromises.forEach((promise, index) => {\n\t\t\t\t\tconst $img = $(this.items[index]).find('[data-texture-src]');\n\t\t\t\t\t// assign texture to item\n\t\t\t\t\tthis.items[index].texture = promise.texture;\n\t\t\t\t\tthis.items[index].texture.magFilter = THREE.LinearFilter;\n\t\t\t\t\tthis.items[index].texture.minFilter = THREE.LinearFilter;\n\t\t\t\t\tthis.items[index].texture.anisotropy = this.renderer.capabilities.getMaxAnisotropy();\n\n\t\t\t\t\tif ($img.is('img')) {\n\t\t\t\t\t\t// load texture back to src (needed for AJAX transition)\n\t\t\t\t\t\t$img.attr('src', $img.attr('data-texture-src'));\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n\n\t_loadTexture({\n\t\tloader,\n\t\turl,\n\t\tindex\n\t}) {\n\t\t// https://threejs.org/docs/#api/en/loaders/TextureLoader\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!url) {\n\t\t\t\tresolve({\n\t\t\t\t\ttexture: null,\n\t\t\t\t\tindex\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// load a resource\n\t\t\tloader.load(\n\t\t\t\t// resource URL\n\t\t\t\turl,\n\n\t\t\t\t// onLoad callback\n\t\t\t\ttexture => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\ttexture,\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\t// onProgress callback currently not supported\n\t\t\t\tundefined,\n\n\t\t\t\t// onError callback\n\t\t\t\terror => {\n\t\t\t\t\tconsole.error('An error happened during loading a texture to the canvas.', error);\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t)\n\t\t})\n\t}\n\n\t_getVertexShader(id) {\n\t\treturn document.getElementById(id).textContent || false;\n\t}\n\n\t_getFragmentShader(id) {\n\t\treturn document.getElementById(id).textContent || false;\n\t}\n\n\tstatic isThreeLoaded() {\n\t\treturn (typeof window.THREE === 'object');\n\t}\n\n\tdestroy() {\n\t\tthis.renderer.setAnimationLoop(null);\n\t\tthis.camera = undefined;\n\t\tthis.scene = undefined;\n\t\tthis.loader = undefined;\n\t\tthis.material = undefined;\n\t\t// this.renderer = undefined;\n\t\twindow.$window.off('resize');\n\t}\n}\n","/* ======================================================================== */\n/* 4. Pswp */\n/* ======================================================================== */\nclass Pswp extends BaseComponent {\n\tconstructor({\n\t\tscope,\n\t\ttarget,\n\t\toptions\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\t\tthis.options = options || {\n\t\t\thistory: false,\n\t\t\tshowAnimationDuration: 300,\n\t\t};\n\t\tthis._setGalleriesID();\n\t\tthis.$pswpEl = $('.pswp');\n\t\tthis.$container = this.$pswpEl.find('.pswp__container');\n\t\tthis.pswpEl = this.$pswpEl.get(0);\n\t}\n\n\t_bindEvents() {\n\t\tconst eventTouchUp = new CustomEvent('arts/pswp/touchUp', {\n\t\t\t\tdetail: {\n\t\t\t\t\tdirection: 'all'\n\t\t\t\t}\n\t\t\t}),\n\t\t\teventTouchDown = new CustomEvent('arts/pswp/touchDown', {\n\t\t\t\tdetail: {\n\t\t\t\t\tdirection: 'all'\n\t\t\t\t}\n\t\t\t}),\n\t\t\teventClose = new CustomEvent('arts/pswp/close'),\n\t\t\teventSlideChange = new CustomEvent('arts/pswp/slideChange');\n\n\t\tthis.$pswpEl\n\t\t\t.off('click')\n\t\t\t.on('click', '.pswp__button--arrow--left', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.gallery.prev();\n\t\t\t}).on('click', '.pswp__button--arrow--right', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.gallery.next();\n\t\t\t});\n\n\t\twindow.$window.on('arts/barba/transition/start', () => {\n\t\t\tif (typeof this.gallery === 'object' && this.gallery.destroy === 'function') {\n\t\t\t\tthis.gallery.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Dispatch cursor events\n\t\tthis.gallery.listen('preventDragEvent', (e, isDown, preventObj) => {\n\t\t\tpreventObj.prevent = false;\n\t\t\tif ($(e.target).is('.pswp--zoomed-in .pswp__img')) {\n\t\t\t\tif (isDown) {\n\t\t\t\t\tdocument.dispatchEvent(eventTouchDown);\n\t\t\t\t} else {\n\t\t\t\t\tdocument.dispatchEvent(eventTouchUp);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.gallery.listen('close', () => {\n\t\t\tdocument.dispatchEvent(eventClose);\n\t\t\tthis.$pswpEl.find('iframe, video').remove();\n\t\t});\n\n\t\tthis.gallery.listen('beforeChange', (e) => {\n\t\t\tdocument.dispatchEvent(eventSlideChange);\n\t\t\tthis._stopVideo();\n\t\t});\n\t}\n\n\t_openPhotoSwipe({\n\t\tindex = 0,\n\t\tgalleryElement = null,\n\t\tdisableAnimation = false,\n\t\tfromURL = false\n\t}) {\n\t\tconst\n\t\t\titems = this._getItems(galleryElement),\n\t\t\toptions = {\n\t\t\t\tgalleryUID: galleryElement.attr('data-pswp-uid')\n\t\t\t};\n\n\t\tif (typeof items[index] !== 'undefined' && 'el' in items[index]) {\n\t\t\toptions.getThumbBoundsFn = function (index) {\n\t\t\t\tlet\n\t\t\t\t\tpageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n\t\t\t\t\timg = items[index].el.querySelector('img'),\n\t\t\t\t\trect;\n\n\t\t\t\tif (img) {\n\t\t\t\t\trect = img.getBoundingClientRect();\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: rect.left,\n\t\t\t\t\t\ty: rect.top + pageYScroll,\n\t\t\t\t\t\tw: rect.width\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// PhotoSwipe opened from URL\n\t\tif (fromURL) {\n\t\t\tif (options.galleryPIDs) {\n\t\t\t\t// parse real index when custom PIDs are used \n\t\t\t\t// http://photoswipe.com/documentation/faq.html#custom-pid-in-url\n\t\t\t\tfor (let j = 0; j < items.length; j++) {\n\t\t\t\t\tif (items[j].pid == index) {\n\t\t\t\t\t\toptions.index = j;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// in URL indexes start from 1\n\t\t\t\toptions.index = parseInt(index, 10) - 1;\n\t\t\t}\n\t\t} else {\n\t\t\toptions.index = parseInt(index, 10);\n\t\t}\n\n\t\t// exit if index not found\n\t\tif (isNaN(options.index)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (disableAnimation) {\n\t\t\toptions.showAnimationDuration = 0;\n\t\t}\n\n\t\t// Pass data to PhotoSwipe and initialize it\n\t\tthis.gallery = new PhotoSwipe(this.pswpEl, PhotoSwipeUI_Default, items, $.extend(options, this.options));\n\t\tthis.gallery.init();\n\n\t\tthis._bindEvents();\n\t}\n\n\t_getMediaTypeFromURL(url, size, autoplay = false) {\n\t\tconst\n\t\t\tresult = {\n\t\t\t\ttype: false,\n\t\t\t\thtml: null\n\t\t\t},\n\t\t\tiframeSize = size ? size.split('x') : [640, 360],\n\t\t\tattr = {\n\t\t\t\tvideo: autoplay ? 'muted playsinline loop autoplay' : '',\n\t\t\t},\n\t\t\tparam = {\n\t\t\t\tyoutube: autoplay ? 'autoplay=1' : '',\n\t\t\t\tvimeo: autoplay ? 'autoplay=1' : ''\n\t\t\t},\n\t\t\tpattern = {\n\t\t\t\timage: /([-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]{2,256}(\\/[-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)?\\.(?:jpg|jpeg|jfif|pjpeg|pjp|bmp|gif|png|apng|webp|svg))/gi,\n\t\t\t\tvideo: /([-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]{2,256}(\\/[-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)?\\.(?:mp4|ogv|webm))/gi,\n\t\t\t\tyoutube: /(?:http?s?:\\/\\/)?(?:www\\.)?(?:youtube\\.com|youtu\\.be)\\/(?:watch\\?v=|embed\\/)([^&|?|\\/]*)/g,\n\t\t\t\tvimeo: /(?:http?s?:\\/\\/)?(?:www\\.)?(?:vimeo\\.com)\\/(?:.*\\/)?(.+)/g,\n\t\t\t};\n\n\t\t/**\n\t\t * Image\n\t\t */\n\t\tif (pattern.image.test(url)) {\n\t\t\tresult.type = 'image';\n\t\t\treturn result;\n\t\t}\n\n\t\t/**\n\t\t * HTML5 video\n\t\t */\n\t\tif (pattern.video.test(url)) {\n\t\t\tresult.type = 'video';\n\t\t\tresult.html = ``;\n\t\t\treturn result;\n\t\t}\n\n\t\t/**\n\t\t * YouTube link\n\t\t */\n\t\tif (pattern.youtube.test(url)) {\n\t\t\tresult.type = 'youtube';\n\t\t\tresult.html = url.replace(pattern.youtube, ``);\n\t\t\treturn result;\n\t\t}\n\n\t\t/**\n\t\t * Vimeo link\n\t\t */\n\t\tif (pattern.vimeo.test(url)) {\n\t\t\tresult.type = 'vimeo';\n\t\t\tresult.html = url.replace(pattern.vimeo, ``);\n\t\t\treturn result;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_getItems($galleryElement) {\n\t\tconst\n\t\t\tself = this,\n\t\t\t$items = $galleryElement.find('a'),\n\t\t\titems = [];\n\n\t\t$items.each(function () {\n\t\t\tconst $el = $(this),\n\t\t\t\titem = {},\n\t\t\t\tsize = $el.attr('data-size'),\n\t\t\t\tautoplay = $el.attr('data-autoplay'),\n\t\t\t\tsrc = $el.attr('href'),\n\t\t\t\tmedia = self._getMediaTypeFromURL(src, size, autoplay),\n\t\t\t\ttitle = $el.attr('data-title');\n\n\t\t\tif (size) {\n\t\t\t\tconst sizeSplit = size.split('x');\n\t\t\t\titem.w = parseInt(sizeSplit[0], 10);\n\t\t\t\titem.h = parseInt(sizeSplit[1], 10);\n\t\t\t}\n\n\t\t\tif (title) {\n\t\t\t\titem.title = title;\n\t\t\t}\n\n\t\t\tswitch (media.type) {\n\t\t\t\tcase 'youtube':\n\t\t\t\t\titem.html = `
${media.html}
`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vimeo':\n\t\t\t\t\titem.html = `
${media.html}
`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'video':\n\t\t\t\t\titem.html = `
${media.html}
`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'image':\n\t\t\t\t\titem.el = $el.get(0);\n\t\t\t\t\titem.src = src;\n\t\t\t\t\titem.msrc = $el.find('img').attr('src');\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t}\n\t\t\titems.push(item);\n\t\t});\n\n\t\treturn items;\n\t}\n\n\t_photoswipeParseHash() {\n\t\tconst\n\t\t\thash = window.location.hash.substring(1),\n\t\t\tparams = {};\n\n\t\tif (hash.length < 5) {\n\t\t\treturn params;\n\t\t}\n\n\t\tconst vars = hash.split('&');\n\t\tfor (let i = 0; i < vars.length; i++) {\n\t\t\tif (!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet pair = vars[i].split('=');\n\t\t\tif (pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\n\t\tif (params.gid) {\n\t\t\tparams.gid = parseInt(params.gid, 10);\n\t\t}\n\n\t\treturn params;\n\t}\n\n\t_setGalleriesID() {\n\t\tthis.$target.each(function (index) {\n\t\t\t$(this).attr('data-pswp-uid', index + 1);\n\t\t});\n\t}\n\n\t_stopVideo() {\n\t\tconst\n\t\t\t$iframeYoutube = this.$pswpEl.find('.iframe-youtube'),\n\t\t\t$iframeVimeo = this.$pswpEl.find('.iframe-vimeo'),\n\t\t\t$video = this.$pswpEl.find('video');\n\n\t\tif ($iframeYoutube.length) {\n\t\t\t$iframeYoutube.each(function () {\n\t\t\t\t$(this).get(0).contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t});\n\t\t}\n\n\t\tif ($iframeVimeo.length) {\n\t\t\t$iframeVimeo.each(function () {\n\t\t\t\t$(this).get(0).contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n\t\t\t});\n\t\t}\n\n\t\tif ($video.length) {\n\t\t\t$video.each(function () {\n\t\t\t\t$(this).get(0).pause();\n\t\t\t});\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 5. Scroll */\n/* ======================================================================== */\nclass Scroll {\n static getEasingScroll(pos) {\n if (pos === 0) return 0;\n if (pos === 1) return 1;\n if ((pos /= 0.5) < 1) return 0.5 * Math.pow(2, 10 * (pos - 1));\n return 0.5 * (-Math.pow(2, -10 * --pos) + 2);\n }\n\n static scrollTo({\n x = 0,\n y = 0,\n duration = 0\n }) {\n if (typeof window.SB !== 'undefined') {\n window.SB.scrollTo(x, y, duration, {\n easing: (pos) => Scroll.getEasingScroll(pos)\n });\n } else {\n $('html, body').animate({\n scrollLeft: x,\n scrollTop: y\n }, duration);\n }\n }\n\n static scrollToTop() {\n\n // safari fix\n try {\n window.top.scrollTo(0, 0);\n } catch (error) {}\n\n if (typeof window.SB !== 'undefined') {\n window.SB.scrollTop = 0;\n } else {\n window.scrollTo(0, 0);\n }\n\n // window.pageYOffset = 0;\n }\n\n static getScrollTop() {\n if (typeof window.SB !== 'undefined') {\n window.lastTop = window.SB.scrollTop;\n } else {\n window.lastTop = Math.max(document.body.scrollTop, document.documentElement.scrollTop);\n }\n\n return window.lastTop;\n }\n\n static restoreScrollTop() {\n if (typeof window.SB !== 'undefined') {\n setTimeout(() => {\n window.SB.scrollTop = window.lastTop;\n }, 100);\n } else {\n $('html, body').animate({\n scrollTop: window.lastTop\n });\n }\n }\n\n static lock(lock = true) {\n const lockClass = 'body_lock-scroll';\n\n if (lock === true) {\n if (typeof window.SB !== 'undefined') {\n window.SB.updatePluginOptions('lockscroll', {\n lock: true\n });\n }\n\n window.$body.addClass(lockClass);\n }\n\n if (lock === false) {\n window.$body.removeClass(lockClass);\n\n if (typeof window.SB !== 'undefined') {\n window.SB.updatePluginOptions('lockscroll', {\n lock: false\n });\n }\n }\n }\n}\n","/* ======================================================================== */\n/* 6. ScrollAnimation */\n/* ======================================================================== */\nclass ScrollAnimation extends BaseComponent {\n\n constructor({\n target,\n scope\n }) {\n super({\n target,\n scope\n });\n\n }\n\n _hasAnimationScene($el) {\n return $el.attr('data-arts-os-animation');\n }\n\n _createScene({\n element,\n timeline,\n customTrigger = false,\n reveal = true,\n delay = 0,\n reverse = false,\n duration = 0,\n triggerHook\n }) {\n\n const masterTL = new gsap.timeline({\n delay: delay\n });\n\n let\n $trigger = element,\n scale = 1;\n\n if (customTrigger && customTrigger.length) {\n $trigger = customTrigger;\n }\n\n if (reveal === true) {\n // reveal hidden element first\n element.attr('data-arts-os-animation', 'animated');\n }\n\n masterTL.add(timeline, '0');\n\n if (window.theme !== 'undefined') {\n scale = window.theme.animations.timeScale.onScrollReveal || scale;\n masterTL.timeScale(scale);\n }\n\n return new $.ScrollMagic.Scene({\n triggerElement: $trigger,\n triggerHook: triggerHook || window.SMSceneTriggerHook,\n reverse: reverse || window.SMSceneReverse,\n duration: duration\n })\n .setTween(masterTL)\n .addTo(window.SMController);\n }\n}\n","/* ======================================================================== */\n/* 7. SetText */\n/* ======================================================================== */\nclass SetText {\n static splitText({\n target\n }) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n target.each(function () {\n const\n $el = $(this),\n type = $el.data('split-text-type'),\n set = $el.data('split-text-set');\n\n let $content = $el;\n\n // split children elements if they are exist\n // instead of the actual element\n if ($el.children(':not(br)').length > 0) {\n $content = $el.find(' > *');\n }\n\n // handle texts with drop cap\n const $contentWithDropcap = $content.filter('.has-drop-cap');\n const firstChar = $contentWithDropcap.text()[0];\n\n // remove first char\n $contentWithDropcap.text($contentWithDropcap.text().substring(1));\n $contentWithDropcap.prepend(`${firstChar}`).addClass('has-drop-cap_split');\n\n new SplitText($content, {\n type: type,\n linesClass: ($contentWithDropcap.length || set === 'words') ? 'split-text__line overflow' : 'split-text__line',\n wordsClass: 'split-text__word',\n charsClass: 'split-text__char',\n reduceWhiteSpace: false,\n });\n\n // double wrapper for \"only lines\" split type\n if (type === 'lines') {\n new SplitText($content, {\n type: type,\n linesClass: 'overflow',\n reduceWhiteSpace: false,\n });\n }\n\n $el.removeClass('js-split-text');\n });\n\n resolve(true);\n\n });\n }\n\n static setLines({\n target,\n y = '100%'\n }) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n gsap.set(target.find('.split-text__line'), {\n y,\n onComplete: resolve(true)\n });\n });\n }\n\n static setWords({\n target,\n y = '100%'\n }) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n gsap.set(target.find('.split-text__word'), {\n y,\n onComplete: resolve(true)\n });\n });\n }\n\n static setChars({\n target,\n x = 0,\n y = 0,\n distribute = true\n }) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n const instance = new SetText();\n\n gsap.set(target, {\n clearProps: 'all'\n });\n\n target.each(function () {\n const\n $el = $(this),\n $lines = $el.find('.split-text__line'),\n textAlign = $el.css('text-align');\n\n if (distribute === true) {\n switch (textAlign) {\n case 'left':\n instance._setFromLeft({\n lines: $lines,\n x,\n y\n });\n break;\n case 'center':\n instance._setFromCenter({\n lines: $lines,\n x,\n y\n });\n break;\n case 'right':\n instance._setFromRight({\n lines: $lines,\n x,\n y\n });\n break;\n }\n } else {\n instance._setFromLeft({\n lines: $lines,\n x,\n y\n });\n }\n });\n\n resolve(true);\n });\n }\n\n _setFromLeft({\n lines,\n x,\n y\n }) {\n if (!lines || !lines.length) {\n return;\n }\n\n gsap.set(lines.find('.split-text__char'), {\n x,\n y,\n autoAlpha: 0\n });\n }\n\n _setFromRight({\n lines,\n x,\n y\n }) {\n if (!lines || !lines.length) {\n return;\n }\n\n gsap.set(lines.find('.split-text__char'), {\n x: -x,\n y: -y,\n autoAlpha: 0\n });\n }\n\n _setFromCenter({\n lines,\n x,\n y\n }) {\n const self = this;\n\n if (!lines || !lines.length) {\n return;\n }\n\n lines.each(function () {\n const\n $currentLine = $(this),\n $wordsInCurrentLine = $currentLine.find('.split-text__word');\n\n /**\n * 1. Only 1 word in the current line\n */\n if ($wordsInCurrentLine.length === 1) {\n self._setCharsSingleWord({\n words: $wordsInCurrentLine,\n x,\n y\n });\n }\n\n /**\n * 2. Even number of words in the current line\n */\n if ($wordsInCurrentLine.length !== 1 && $wordsInCurrentLine.length % 2 === 0) {\n self._setCharsEvenWords({\n words: $wordsInCurrentLine,\n x,\n y\n });\n }\n\n /**\n * 3. Odd number of words in the current line\n */\n if ($wordsInCurrentLine.length !== 1 && $wordsInCurrentLine.length % 2 !== 0) {\n self._setCharsOddWords({\n words: $wordsInCurrentLine,\n x,\n y\n });\n }\n });\n }\n\n _setCharsSingleWord({\n words,\n x,\n y\n }) {\n const\n $charsInWord = words.find('.split-text__char'),\n halfWord = Math.ceil($charsInWord.length / 2),\n $fistHalfWord = $charsInWord.slice(0, halfWord),\n $secondHalfWord = $charsInWord.slice(halfWord, $charsInWord.length);\n\n // first half of word to the left\n gsap.set($fistHalfWord, {\n x: -x,\n y: -y,\n autoAlpha: 0\n });\n\n // second half of word to the right\n gsap.set($secondHalfWord, {\n x,\n y,\n autoAlpha: 0\n });\n }\n\n _setCharsOddWords({\n words,\n x,\n y\n }) {\n const\n halfLine = Math.ceil(words.length / 2),\n $fistHalf = words.slice(0, halfLine),\n $secondHalf = words.slice(halfLine, words.length),\n $middleWord = words.eq(halfLine - 1),\n $charsInMiddleWord = $middleWord.find('.split-text__char'),\n halfLineMiddleWord = Math.ceil($charsInMiddleWord.length / 2),\n $fistHalfMiddleWord = $charsInMiddleWord.slice(0, halfLineMiddleWord),\n $secondHalfMiddleWord = $charsInMiddleWord.slice(halfLineMiddleWord, $charsInMiddleWord.length);\n\n // first half\n $fistHalf.each(function () {\n const $charsInWord = $(this).find('.split-text__char');\n\n gsap.set($charsInWord, {\n x: -x,\n y: -y,\n autoAlpha: 0\n });\n });\n\n // second half\n $secondHalf.each(function () {\n const $charsInWord = $(this).find('.split-text__char');\n\n gsap.set($charsInWord, {\n x,\n y,\n autoAlpha: 0\n });\n });\n\n // middle word: first half\n $fistHalfMiddleWord.each(function () {\n const $charsInWord = $(this);\n\n gsap.set($charsInWord, {\n x: -x,\n y: -y,\n autoAlpha: 0\n });\n });\n\n // middle word: second half\n $secondHalfMiddleWord.each(function () {\n const $charsInWord = $(this);\n\n gsap.set($charsInWord, {\n x,\n y,\n autoAlpha: 0\n });\n });\n }\n\n _setCharsEvenWords({\n words,\n x,\n y\n }) {\n const\n halfLine = Math.ceil(words.length / 2),\n $fistHalf = words.slice(0, halfLine),\n $secondHalf = words.slice(halfLine, words.length);\n\n // first half\n $fistHalf.each(function () {\n const $charsInWord = $(this).find('.split-text__char');\n\n gsap.set($charsInWord, {\n x: -x,\n y: y,\n autoAlpha: 0\n });\n });\n\n // second half\n $secondHalf.each(function () {\n const $charsInWord = $(this).find('.split-text__char');\n\n gsap.set($charsInWord, {\n x: x,\n y: y,\n autoAlpha: 0\n });\n });\n }\n}\n","/* ======================================================================== */\n/* 8. Slider */\n/* ======================================================================== */\nclass Slider extends BaseComponent {\n\n constructor({\n scope,\n target\n }) {\n super({\n target,\n scope\n });\n }\n\n _getSliderDots({\n slider,\n container\n }) {\n return new SliderDots({\n slider,\n container\n });\n }\n\n _getSliderCounter({\n slider,\n counter = {\n current,\n total,\n style,\n zeros\n }\n }) {\n return new SliderCounter({\n slider: slider,\n sliderCounter: counter.current,\n total: counter.total,\n style: counter.style,\n addZeros: counter.zeros\n });\n }\n\n _emitDragEvents({\n slider,\n target,\n customClass\n }) {\n const eventTouchUp = new CustomEvent('arts/slider/touchUp', {\n detail: {\n direction: slider.params.direction\n }\n });\n const eventTouchDown = new CustomEvent('arts/slider/touchDown', {\n detail: {\n direction: slider.params.direction\n }\n });\n\n slider\n .on('touchStart', () => {\n if (slider.params.autoplay.enabled) {\n slider.autoplay.stop();\n }\n\n if (customClass) {\n slider.$el.addClass(customClass);\n }\n\n target.dispatchEvent(eventTouchDown);\n })\n .on('touchEnd', () => {\n if (slider.params.autoplay.enabled) {\n slider.autoplay.start();\n }\n\n if (customClass) {\n slider.$el.removeClass(customClass);\n }\n\n target.dispatchEvent(eventTouchUp);\n });\n }\n\n _pauseAutoplay({\n slider\n }) {\n if (slider && slider.params.autoplay && slider.params.autoplay.enabled === true) {\n window.$window.on('arts/barba/transition/start', () => {\n slider.autoplay.stop();\n });\n\n if (window.$pagePreloader && window.$pagePreloader.length && window.$pagePreloader.is(':visible')) {\n window.$window\n .on('arts/preloader/start', () => {\n slider.autoplay.stop();\n })\n .on('arts/preloader/end', () => {\n slider.autoplay.start();\n });\n }\n }\n }\n}\n","/* ======================================================================== */\n/* 9. PJAX Animate Clonned Image */\n/* ======================================================================== */\nfunction PJAXAnimateClonnedImage(data, duration = 2.0) {\n return new Promise((resolve) => {\n const\n tl = new gsap.timeline(),\n $nextContainer = $(data.next.container),\n $curtain = $('#js-page-transition-curtain'),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n background = $nextMasthead.attr('data-background-color'),\n $target = $nextMasthead.find('.js-transition-img'),\n $clone = $('.clone'),\n bgClone = $clone.find('.js-transition-img__transformed-el'),\n bgTarget = $target.find('.js-transition-img__transformed-el'),\n bgTargetProperties = bgTarget.css(['transform', 'width', 'height', 'transformOrigin']),\n {\n top,\n left,\n width,\n height,\n } = $target.get(0).getBoundingClientRect();\n\n if (!$target.length || !$clone.length) {\n resolve(true);\n return;\n }\n\n tl\n .setCurtain($curtain, {\n background\n })\n .set($clone, {\n maxWidth: '100%',\n maxHeight: '100%',\n })\n .add([\n gsap.to(bgClone, {\n paddingBottom: 0,\n transform: bgTargetProperties.transform,\n width: bgTargetProperties.width,\n height: bgTargetProperties.height,\n duration: 1.2,\n ease: 'expo.inOut',\n transition: 'none',\n top: 'auto',\n left: 'auto',\n right: 'auto',\n bottom: 'auto',\n }),\n gsap.to($clone, {\n transform: $target.css('transform'),\n transformOrigin: 'center center',\n top,\n left,\n width,\n height,\n duration: 1.2,\n ease: 'expo.inOut',\n transition: 'none',\n onComplete: () => {\n Scroll.scrollToTop();\n }\n }),\n gsap.effects.moveCurtain($curtain, {\n y: '0%',\n duration: 1.2\n }),\n gsap.to($clone, {\n borderRadius: $target.css('borderRadius'),\n duration: 0.6\n })\n ])\n .to($nextContainer, {\n duration: 0.2,\n clearProps: 'all',\n autoAlpha: 1,\n }, '-=0.3')\n .setCurtain($curtain)\n .add(() => {\n resolve(true)\n })\n .totalDuration(duration);\n\n });\n}\n","/* ======================================================================== */\n/* 10. PJAX Clone Image */\n/* ======================================================================== */\nfunction PJAXCloneImage(target, customCoordinates) {\n return new Promise((resolve) => {\n if (!target.length) {\n resolve(true);\n return;\n }\n\n const\n tl = new gsap.timeline(),\n $clone = target.clone(),\n {\n top,\n left,\n width,\n height\n } = target.get(0).getBoundingClientRect();\n\n // Scroll.lock(true);\n $clone.addClass('clone').appendTo(window.$barbaWrapper);\n\n tl\n .set($clone, {\n delay: 0.1,\n transform: target.css('transform'),\n transformOrigin: 'center center',\n position: 'fixed',\n display: 'block',\n top: customCoordinates ? customCoordinates.top : top,\n left: customCoordinates ? customCoordinates.left : left,\n width: customCoordinates ? customCoordinates.width : width,\n height: customCoordinates ? customCoordinates.height : height,\n zIndex: 350\n })\n .set(target, {\n autoAlpha: 0\n })\n .add(() => {\n resolve(true);\n })\n\n });\n}\n","/* ======================================================================== */\n/* 11. PJAX Finish Loading */\n/* ======================================================================== */\nfunction PJAXFinishLoading(data) {\n\treturn new Promise((resolve) => {\n\n\t\t// Transition ended event\n\t\twindow.dispatchEvent(new CustomEvent('arts/barba/transition/end'));\n\n\t\t// Hide spinner\n\t\tif (typeof window.$spinner !== 'undefined' && window.$spinner.length) {\n\t\t\tgsap.to(window.$spinner, 0.6, {\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t}\n\n\t\t// audio backgrounds\n\t\tif (typeof window.AudioBackground !== 'undefined') {\n\n\t\t\tif (window.AudioBackground.isAudioSrc()) {\n\t\t\t\twindow.AudioBackground.controller.reveal(true);\n\t\t\t} else {\n\t\t\t\twindow.AudioBackground.controller.reveal(false);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof window.theme.header !== 'undefined') {\n\t\t\twindow.theme.header.run();\n\t\t}\n\n\n\t\t// re-enable ScrollMagic scenes\n\t\twindow.SMController.enabled(true);\n\t\twindow.SMController.update(true);\n\n\t\tsetTimeout(() => {\n\n\t\t\t// remove clonned image if it exists\n\t\t\t$('.clone').remove();\n\n\t\t\t// unlock scroll\n\t\t\tScroll.lock(false);\n\n\t\t\twindow.$barbaWrapper.removeClass('cursor-progress');\n\t\t\t$('.menu').removeClass('menu_disabled');\n\n\t\t}, 100);\n\n\t\tresolve(true);\n\n\t});\n\n}\n","/* ======================================================================== */\n/* 12. PJAX Init New Page */\n/* ======================================================================== */\nfunction PJAXInitNewPage(data) {\n\treturn new Promise((resolve) => {\n\n\t\tconst $nextContainer = $(data.next.container);\n\t\tPJAXUpdateAudioBackground(data).then(() => {\n\n\t\t\tPromise\n\t\t\t\t.all([\n\t\t\t\t\tPJAXUpdateBody(data),\n\t\t\t\t\tPJAXUpdateNodes(data),\n\t\t\t\t\tPJAXUpdateHead(data),\n\t\t\t\t\tPJAXUpdateAdminBar(data),\n\t\t\t\t\tPJAXUpdateLanguageSwitcher(data),\n\t\t\t\t\tfontObserver(),\n\t\t\t\t])\n\t\t\t\t.then(() => SetText.splitText({\n\t\t\t\t\ttarget: $nextContainer.find('.js-split-text')\n\t\t\t\t}))\n\t\t\t\t.then(() => SetText.setLines({\n\t\t\t\t\ttarget: $nextContainer.find('.split-text[data-split-text-set=\"lines\"]')\n\t\t\t\t}))\n\t\t\t\t.then(() => SetText.setWords({\n\t\t\t\t\ttarget: $nextContainer.find('.split-text[data-split-text-set=\"words\"]')\n\t\t\t\t}))\n\t\t\t\t.then(() => SetText.setChars({\n\t\t\t\t\ttarget: $nextContainer.find('.split-text[data-split-text-set=\"chars\"]')\n\t\t\t\t}))\n\t\t\t\t.then(() => {\n\t\t\t\t\t// re-init Contact Form 7\n\t\t\t\t\tif (typeof wpcf7 !== 'undefined') {\n\t\t\t\t\t\twpcf7.initForm(jQuery('.wpcf7-form'));\n\t\t\t\t\t}\n\n\t\t\t\t\t// scroll at the page beginning\n\t\t\t\t\tScroll.scrollToTop();\n\n\t\t\t\t\t// load images\n\t\t\t\t\tnew LazyLoad({\n\t\t\t\t\t\tscope: $nextContainer,\n\t\t\t\t\t\tsetPaddingBottom: true,\n\t\t\t\t\t\trun: true\n\t\t\t\t\t});\n\n\t\t\t\t\t// clear & re-init ScrollMagic\n\t\t\t\t\twindow.SMController.destroy();\n\t\t\t\t\twindow.SMController = null;\n\t\t\t\t\twindow.SMController = new ScrollMagic.Controller();\n\n\t\t\t\t\t// re-init components\n\t\t\t\t\tinitComponents({\n\t\t\t\t\t\tscope: $nextContainer,\n\t\t\t\t\t\tcontainer: $nextContainer\n\t\t\t\t\t});\n\n\t\t\t\t\t// don't start animations immediately\n\t\t\t\t\twindow.SMController.enabled(false);\n\n\t\t\t\t\t// ensure that scroll is still locked\n\t\t\t\t\tScroll.lock(true);\n\n\t\t\t\t\t// init Elementor frontend\n\t\t\t\t\tif (typeof window.elementorFrontend !== 'undefined') {\n\t\t\t\t\t\telementorFrontend.init();\n\t\t\t\t\t}\n\n\t\t\t\t\t// update ad trackers\n\t\t\t\t\tPJAXUpdateTrackers();\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t});\n\t\t});\n\t});\n}\n","/* ======================================================================== */\n/* 13. PJAX Set Next Container */\n/* ======================================================================== */\nfunction PJAXSetNextContainer(data) {\n return new Promise((resolve) => {\n const\n $nextContainer = $(data.next.container),\n tl = new gsap.timeline();\n\n tl.add(() => {\n $nextContainer.find('.section-masthead .section-masthead__background').addClass('js-cancel-animation');\n })\n .set($nextContainer, {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n zIndex: 300,\n autoAlpha: 0\n })\n .add(() => {\n resolve(true);\n });\n\n });\n}\n","/* ======================================================================== */\n/* 14. PJAX Start Loading */\n/* ======================================================================== */\nfunction PJAXStartLoading(data) {\n\treturn new Promise((resolve) => {\n\t\twindow.dispatchEvent(new CustomEvent('arts/barba/transition/start'));\n\t\twindow.$barbaWrapper.addClass('cursor-progress');\n\t\t$('.menu').addClass('menu_disabled');\n\n\t\tScroll.lock(true);\n\t\twindow.$document.off('click resize');\n\n\t\tif (typeof window.$spinner !== 'undefined' && window.$spinner.length) {\n\t\t\tgsap.to(window.$spinner, 0.6, {\n\t\t\t\tautoAlpha: 1\n\t\t\t});\n\t\t}\n\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 15. PJAX Transition Flying Image */\n/* ======================================================================== */\nconst PJAXTransitionFlyingImage = {\n name: 'flyingImage',\n\n custom: ({\n trigger\n }) => {\n return $(trigger).data('pjax-link') === 'flyingImage';\n },\n\n before: (data) => {\n return new Promise((resolve) => {\n PJAXStartLoading(data).then(() => resolve(true));\n });\n },\n\n beforeLeave: (data) => {\n return new Promise((resolve) => {\n const\n $currentContainer = $(data.current.container),\n $content = $currentContainer.find('.page-wrapper__content'),\n $trigger = $(data.trigger),\n isNavProjectsLink = $trigger.hasClass('section-nav-projects__link'),\n isListHoverLink = $trigger.hasClass('js-list-hover__link');\n\n let $image, delay;\n\n if (isNavProjectsLink) {\n $image = $currentContainer.find('.section-nav-projects .js-transition-img');\n delay = 0;\n } else {\n $image = $trigger.find('.js-transition-img');\n delay = 150;\n }\n\n if (isListHoverLink) {\n $image = $trigger.find('.js-transition-img');\n\n PJAXCloneImage($image, $trigger.data('coordinates')).then(() => {\n gsap.to($content, {\n duration: 0.3,\n autoAlpha: 0,\n onComplete: () => {\n resolve(true);\n }\n });\n });\n\n } else {\n setTimeout(() => {\n PJAXCloneImage($image).then(() => {\n gsap.to($content, {\n duration: 0.3,\n autoAlpha: 0,\n onComplete: () => {\n resolve(true);\n }\n });\n });\n }, delay);\n }\n });\n },\n\n beforeEnter: (data) => {\n return new Promise((resolve) => {\n PJAXSetNextContainer(data).then(() => resolve(true));\n });\n },\n\n enter: (data) => {\n return new Promise((resolve) => {\n PJAXInitNewPage(data).then(() => resolve(true));\n });\n },\n\n afterEnter: (data) => {\n return new Promise((resolve) => {\n PJAXAnimateClonnedImage(data).then(() => resolve(true));\n });\n },\n\n after: (data) => {\n return new Promise((resolve) => {\n PJAXFinishLoading(data).then(() => resolve(true));\n });\n }\n}\n","/* ======================================================================== */\n/* 16. PJAX Transition Fullscreen Slider */\n/* ======================================================================== */\nconst PJAXTransitionFullscreenSlider = {\n name: 'fullscreenSlider',\n\n custom: ({\n trigger\n }) => {\n return $(trigger).data('pjax-link') === 'fullscreenSlider';\n },\n\n before: (data) => {\n return new Promise((resolve) => {\n PJAXStartLoading(data).then(() => resolve(true));\n });\n },\n\n beforeLeave: (data) => {\n return new Promise((resolve) => {\n const\n tl = new gsap.timeline(),\n $currentContainer = $(data.current.container),\n $content = $currentContainer.find('.page-wrapper__content'),\n $trigger = $(data.trigger),\n $slider = $trigger.closest('.js-slider'),\n $image = $slider.find('.swiper-slide-active .js-transition-img'),\n $bg = $image.find('.slider__bg'),\n imageSrc = $bg.attr('data-texture-src');\n\n if (imageSrc) {\n tl\n .set($bg, {\n backgroundImage: `url(${imageSrc})`\n })\n .add(() => {\n PJAXCloneImage($image).then(() => {\n gsap.to($content, {\n duration: 0.3,\n autoAlpha: 0,\n onComplete: () => {\n resolve(true);\n }\n });\n });\n });\n } else {\n PJAXCloneImage($image).then(() => {\n gsap.to($content, {\n duration: 0.3,\n autoAlpha: 0,\n onComplete: () => {\n resolve(true);\n }\n });\n });\n }\n });\n },\n\n beforeEnter: (data) => {\n return new Promise((resolve) => {\n PJAXSetNextContainer(data).then(() => resolve(true));\n });\n },\n\n enter: (data) => {\n return new Promise((resolve) => {\n PJAXInitNewPage(data).then(() => resolve(true));\n });\n },\n\n afterEnter: (data) => {\n return new Promise((resolve) => {\n PJAXAnimateClonnedImage(data).then(() => resolve(true));\n });\n },\n\n after: (data) => {\n return new Promise((resolve) => {\n PJAXFinishLoading(data).then(() => resolve(true));\n });\n }\n\n}\n","/* ======================================================================== */\n/* 17. PJAX Transition General */\n/* ======================================================================== */\nconst PJAXTransitionGeneral = {\n\tbefore: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXStartLoading(data).then(() => resolve(true));\n\t\t});\n\t},\n\n\tbeforeLeave: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst tl = new gsap.timeline();\n\n\t\t\ttl\n\t\t\t\t.setCurtain()\n\t\t\t\t.add(() => {\n\t\t\t\t\tresolve(true)\n\t\t\t\t})\n\t\t});\n\t},\n\n\tbeforeEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst $nextContainer = $(data.next.container);\n\n\t\t\t$nextContainer.find('.section-masthead .section-masthead__background').addClass('js-cancel-animation');\n\t\t\tresolve(true)\n\t\t});\n\t},\n\n\tenter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXInitNewPage(data).then(() => resolve(true));\n\t\t});\n\t},\n\n\tbeforeEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst\n\t\t\t\ttl = new gsap.timeline(),\n\t\t\t\t$nextContainer = $(data.next.container),\n\t\t\t\t$curtain = $('#js-page-transition-curtain'),\n\t\t\t\t$nextMasthead = $nextContainer.find('.section-masthead'),\n\t\t\t\tbackground = $nextMasthead.attr('data-background-color');\n\n\t\t\ttl\n\t\t\t\t.setCurtain($curtain, {\n\t\t\t\t\tbackground\n\t\t\t\t})\n\t\t\t\t.moveCurtain($curtain, {\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tduration: 1.2\n\t\t\t\t})\n\t\t\t\t.setCurtain($curtain)\n\t\t\t\t.set($nextContainer, {\n\t\t\t\t\tclearProps: 'all',\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t})\n\t\t\t\t.add(() => {\n\t\t\t\t\tresolve(true);\n\t\t\t\t});\n\n\t\t});\n\t},\n\n\tafter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXFinishLoading(data).then(() => resolve(true));\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 18. PJAX Transition List Hover */\n/* ======================================================================== */\nconst PJAXTransitionListHover = {\n name: 'listHover',\n\n custom: ({\n trigger\n }) => {\n return $(trigger).data('pjax-link') === 'listHover';\n },\n\n before: (data) => {\n return new Promise((resolve) => {\n PJAXStartLoading(data).then(() => resolve(true));\n });\n },\n\n beforeLeave: (data) => {\n return new Promise((resolve) => {\n const\n $currentContainer = $(data.current.container),\n $content = $currentContainer.find('.page-wrapper__content'),\n $trigger = $(data.trigger),\n $image = $trigger.find('.js-transition-img');\n\n let coordinates;\n if (!$image.is(':visible')) {\n coordinates = $trigger.data('coordinates');\n }\n\n PJAXCloneImage($image, coordinates).then(() => {\n gsap.to($content, {\n duration: 0.3,\n autoAlpha: 0,\n onComplete: () => resolve(true)\n });\n });\n });\n },\n\n beforeEnter: (data) => {\n return new Promise((resolve) => {\n PJAXSetNextContainer(data).then(() => resolve(true));\n });\n },\n\n enter: (data) => {\n return new Promise((resolve) => {\n PJAXInitNewPage(data).then(() => resolve(true));\n });\n },\n\n afterEnter: (data) => {\n return new Promise((resolve) => {\n PJAXAnimateClonnedImage(data).then(() => resolve(true));\n });\n },\n\n after: (data) => {\n return new Promise((resolve) => {\n PJAXFinishLoading(data).then(() => resolve(true));\n });\n }\n}\n","/* ======================================================================== */\n/* 19. PJAX Transition Overlay Menu */\n/* ======================================================================== */\nconst PJAXTransitionOverlayMenu = {\n name: 'overlayMenu',\n\n custom: ({\n trigger\n }) => {\n return window.theme.header.isOverlayOpened() || $(trigger).data('pjax-link') === 'overlayMenu';\n },\n\n before: (data) => {\n return new Promise((resolve) => {\n PJAXStartLoading(data).then(() => {\n resolve(true);\n });\n });\n },\n\n enter: (data) => {\n return new Promise((resolve) => {\n PJAXInitNewPage(data).then(() => {\n resolve(true);\n });\n });\n },\n\n afterEnter: (data) => {\n return new Promise((resolve) => {\n const\n tl = new gsap.timeline(),\n $currentContainer = $(data.current.container),\n $nextContainer = $(data.next.container),\n $curtain = $('#js-header-curtain-transition'),\n closeTl = window.theme.header.closeMenuTransition(true),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n background = $nextMasthead.attr('data-background-color');\n\n window.theme.header.setBurger();\n\n tl\n .set([$nextContainer, $currentContainer], {\n autoAlpha: 0,\n })\n .setCurtain($curtain, {\n background\n })\n .moveCurtain($curtain, {\n duration: 1.2,\n y: '0%',\n curve: 'top',\n })\n .add(closeTl, '-=0.8')\n .setCurtain($curtain)\n .set($nextContainer, {\n clearProps: 'all',\n autoAlpha: 1,\n })\n .add(() => {\n resolve(true);\n });\n\n });\n },\n\n after: (data) => {\n return new Promise((resolve) => {\n PJAXFinishLoading(data).then(() => {\n resolve(true);\n });\n });\n }\n\n}\n","/* ======================================================================== */\n/* 20. PJAX Update Admin Bar */\n/* ======================================================================== */\nfunction PJAXUpdateAdminBar(data) {\n\treturn new Promise(function (resolve, reject) {\n\t\tconst $currentBar = $('#wpadminbar');\n\n\t\tif (!$currentBar.length) {\n\t\t\tresolve(true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst\n\t\t\trawHTML = $.parseHTML(data.next.html),\n\t\t\t$newBar = $(rawHTML).filter('#wpadminbar');\n\n\t\t$newBar.find('.hide-if-no-customize').removeClass('hide-if-no-customize');\n\t\t$currentBar.replaceWith($newBar);\n\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 21. PJAX Update Audio Background */\n/* ======================================================================== */\nfunction PJAXUpdateAudioBackground(data) {\n return new Promise((resolve) => {\n const\n $nextContainer = $($.parseHTML(data.next.html)),\n $audioBackground = $('#js-audio-background'),\n $audioBackgroundOptions = $nextContainer.find('#js-audio-background__options');\n\n if (typeof window.AudioBackground !== 'undefined') {\n\n switch ($audioBackgroundOptions.data('options')) {\n case 'music_off':\n window.AudioBackground.fadeOut().then(() => {\n // the next page audio source is different\n // just update audio src but don't start playback\n if ($nextContainer.find('#js-audio-background').attr('src') !== $audioBackground.attr('src')) {\n syncAttributes($nextContainer.find('#js-audio-background'), $audioBackground);\n }\n\n window.AudioBackground.el.currentTime = 0;\n window.AudioBackground.el.pause();\n window.AudioBackground.controller.pause();\n });\n break;\n case 'play':\n // audio autoplay is enabled\n if (window.AudioBackground.el.autoplay === true) {\n\n // the next page audio source is different\n // fade out current volume, update src, start playback\n if ($nextContainer.find('#js-audio-background').attr('src') !== $audioBackground.attr('src')) {\n window.AudioBackground.fadeOut().then(() => {\n syncAttributes($nextContainer.find('#js-audio-background'), $audioBackground);\n window.AudioBackground.fadeIn();\n });\n }\n\n // the next page audio source is the same as current\n // reset position and start playback if it's paused\n if (window.AudioBackground.el.paused) {\n window.AudioBackground.el.currentTime = 0;\n window.AudioBackground.fadeIn();\n }\n\n } else { // audio autoplay is disabled\n\n if (window.AudioBackground.el.paused) { // playback is paused\n\n // the next page audio source is different\n // just update audio src but don't start playback\n if ($nextContainer.find('#js-audio-background').attr('src') !== $audioBackground.attr('src')) {\n syncAttributes($nextContainer.find('#js-audio-background'), $audioBackground);\n }\n\n } else { // playback is running\n\n // the next page audio source is different\n // fade out current volume, update src, start playback\n if ($nextContainer.find('#js-audio-background').attr('src') !== $audioBackground.attr('src')) {\n window.AudioBackground.fadeOut().then(() => {\n syncAttributes($nextContainer.find('#js-audio-background'), $audioBackground);\n window.AudioBackground.fadeIn();\n });\n }\n\n }\n\n }\n break;\n default:\n window.AudioBackground.el.currentTime = 0;\n window.AudioBackground.fadeIn();\n break;\n }\n }\n\n resolve(true);\n });\n}\n","/* ======================================================================== */\n/* 22. PJAX Update Body */\n/* ======================================================================== */\nfunction PJAXUpdateBody(data) {\n\treturn new Promise((resolve) => {\n\t\tconst\n\t\t\tregexp = /\\/gi,\n\t\t\tmatch = regexp.exec(data.next.html);\n\n\t\tif (!match || !match[1]) {\n\t\t\tresolve(true);\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.body.setAttribute('class', match[1]);\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 23. PJAX Update Head */\n/* ======================================================================== */\nfunction PJAXUpdateHead(data) {\n\treturn new Promise((resolve) => {\n\t\tconst\n\t\t\thead = document.head,\n\t\t\tnewPageRawHead = data.next.html.match(/]*>([\\s\\S.]*)<\\/head>/i)[0],\n\t\t\tnewPageHead = document.createElement('head');\n\n\t\tnewPageHead.innerHTML = newPageRawHead;\n\n\t\tconst headTags = [\n\t\t\t'meta[name=\"keywords\"]',\n\t\t\t'meta[name=\"description\"]',\n\t\t\t'meta[property^=\"og\"]',\n\t\t\t'meta[name^=\"twitter\"]',\n\t\t\t'meta[itemprop]',\n\t\t\t'link[itemprop]',\n\t\t\t'link[rel=\"prev\"]',\n\t\t\t'link[rel=\"next\"]',\n\t\t\t'link[rel=\"canonical\"]',\n\t\t\t'link[rel=\"alternate\"]',\n\t\t\t'link[rel=\"shortlink\"]',\n\t\t\t'link[id*=\"elementor\"]',\n\t\t\t'link[id*=\"eael\"]', // Essential Addons plugin post CSS\n\t\t\t'style[id*=\"elementor\"]',\n\t\t\t'style[id*=\"eael\"]', // Essential Addons plugin inline CSS\n\t\t].join(',');\n\n\t\tconst\n\t\t\toldHeadTags = head.querySelectorAll(headTags),\n\t\t\tnewHeadTags = newPageHead.querySelectorAll(headTags),\n\t\t\tnewStylesLoaded = [];\n\n\t\tlet pageStyles = document.querySelectorAll('link[rel=\"stylesheet\"]');\n\n\t\t// flag all current page styles as loaded\n\t\tfor (let i = 0; i < pageStyles.length; i++) {\n\t\t\tpageStyles[i].isLoaded = true;\n\t\t}\n\n\t\t// append new and remove old tags\n\t\tfor (let i = 0; i < newHeadTags.length; i++) {\n\t\t\tif (typeof oldHeadTags[i] !== 'undefined') {\n\t\t\t\thead.insertBefore(newHeadTags[i], oldHeadTags[i].nextElementSibling);\n\t\t\t\thead.removeChild(oldHeadTags[i]);\n\t\t\t} else {\n\t\t\t\thead.insertBefore(newHeadTags[i], newHeadTags[i - 1]);\n\t\t\t}\n\t\t}\n\n\t\t// page now has new styles\n\t\tpageStyles = document.querySelectorAll('link[rel=\"stylesheet\"]');\n\n\t\t// listen for 'load' only on elements which are not loaded yet\n\t\tfor (let i = 0; i < pageStyles.length; i++) {\n\t\t\tif (!pageStyles[i].isLoaded) {\n\t\t\t\tconst promise = new Promise((resolve) => {\n\t\t\t\t\tpageStyles[i].addEventListener('load', () => {\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tnewStylesLoaded.push(promise);\n\t\t\t}\n\t\t}\n\n\t\t// load all new page styles\n\t\tPromise.all(newStylesLoaded).then(() => {\n\t\t\tresolve(true);\n\t\t});\n\n\t});\n}\n","/* ======================================================================== */\n/* 24. PJAX Update Language Switcher */\n/* ======================================================================== */\nfunction PJAXUpdateLanguageSwitcher(data) {\n\treturn new Promise((resolve) => {\n\t\tconst $currentSwitcher = $('.lang-switcher');\n\n\t\tif (!$currentSwitcher.length) {\n\t\t\tresolve(true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst\n\t\t\trawHTML = $.parseHTML(data.next.html),\n\t\t\t$newSwitcher = $(rawHTML).find('.lang-switcher');\n\n\t\t$currentSwitcher.replaceWith($newSwitcher);\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 25. PJAX Update Nodes */\n/* ======================================================================== */\nfunction PJAXUpdateNodes(data) {\n\treturn new Promise((resolve) => {\n\t\tconst\n\t\t\t$nextContainer = $($.parseHTML(data.next.html)),\n\t\t\t$currentHeader = $('#page-header'),\n\t\t\t$nextHeader = $nextContainer.find('#page-header'),\n\t\t\tnodesToUpdate = [\n\t\t\t\t'#page-header',\n\t\t\t\t'#page-footer',\n\t\t\t\t'#js-audio-background__options',\n\t\t\t\t'#js-page-transition-curtain'\n\t\t\t]; // selectors of elements that needed to update\n\n\t\t$.each(nodesToUpdate, function () {\n\t\t\tconst\n\t\t\t\t$item = $(this),\n\t\t\t\t$nextItem = $nextContainer.find(this);\n\n\t\t\t// sync attributes if element exist in the new container\n\t\t\tif ($nextItem.length) {\n\t\t\t\tsyncAttributes($nextItem, $item);\n\t\t\t}\n\t\t});\n\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 26. PJAX Update Trackers */\n/* ======================================================================== */\nfunction PJAXUpdateTrackers() {\n\n\tupdateGA();\n\tupdateFBPixel();\n\tupdateYaMetrika();\n\n\t/**\n\t * Google Analytics\n\t */\n\tfunction updateGA() {\n\t\tif (typeof gtag === 'function' && typeof window.gaData === 'object' && Object.keys(window.gaData)[0] !== 'undefined') {\n\t\t\tconst\n\t\t\t\ttrackingID = Object.keys(window.gaData)[0],\n\t\t\t\tpageRelativePath = (window.location.href).replace(window.location.origin, '');\n\n\t\t\tgtag('js', new Date());\n\t\t\tgtag('config', trackingID, {\n\t\t\t\t'page_title': document.title,\n\t\t\t\t'page_path': pageRelativePath\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Facebook Pixel\n\t */\n\tfunction updateFBPixel() {\n\t\tif (typeof fbq === 'function') {\n\t\t\tfbq('track', 'PageView');\n\t\t}\n\t}\n\n\t/**\n\t * Yandex Metrika\n\t */\n\tfunction updateYaMetrika() {\n\t\tif (typeof ym === 'function') {\n\t\t\tconst trackingID = getYmTrackingNumber();\n\n\t\t\tym(trackingID, 'hit', window.location.href, {\n\t\t\t\ttitle: document.title\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction getYmTrackingNumber() {\n\t\tif (typeof window.Ya !== 'undefined' && typeof window.Ya.Metrika2) {\n\t\t\treturn window.Ya.Metrika2.counters()[0].id || null;\n\t\t}\n\n\t\tif (typeof window.Ya !== 'undefined' && typeof window.Ya.Metrika) {\n\t\t\treturn window.Ya.Metrika.counters()[0].id || null;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","/* ======================================================================== */\n/* 27. PJAX */\n/* ======================================================================== */\nclass PJAX extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\trun() {\n\n\t\tbarba.init({\n\t\t\tsync: true,\n\t\t\ttimeout: 10000,\n\t\t\t// don't trigger barba for links outside wrapper \n\t\t\tprevent: ({\n\t\t\t\tel\n\t\t\t}) => {\n\n\t\t\t\tconst\n\t\t\t\t\t$el = $(el),\n\t\t\t\t\texludeRules = [\n\t\t\t\t\t\t'[data-elementor-open-lightbox]', // Elementor lightbox gallery\n\t\t\t\t\t\t'[data-elementor-lightbox-slideshow]', // Elementor Pro Gallery\n\t\t\t\t\t\t'.lang-switcher a', // Polylang & WPML language switcher\n\t\t\t\t\t\t'.js-gallery a', // any links in the template galleries\n\t\t\t\t\t\t'.js-album' // albums links\n\t\t\t\t\t];\n\n\t\t\t\t// element is anchor\n\t\t\t\tif ($el.attr('href').indexOf('#') > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// elementor preview\n\t\t\t\tif (typeof elementor === 'object') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// clicked on elementor outside barba wrapper\n\t\t\t\tif ($el.closest(window.$barbaWrapper).length < 1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// custom rules from WordPress Customizer\n\t\t\t\tif (window.theme.ajax.preventRules) {\n\t\t\t\t\texludeRules.push(window.theme.ajax.preventRules);\n\t\t\t\t}\n\n\t\t\t\t// check against array of rules to prevent\n\t\t\t\treturn $el.is(exludeRules.join(','));\n\n\t\t\t},\n\t\t\t// custom transitions\n\t\t\ttransitions: [\n\t\t\t\tPJAXTransitionGeneral,\n\t\t\t\tPJAXTransitionFlyingImage,\n\t\t\t\tPJAXTransitionOverlayMenu,\n\t\t\t\tPJAXTransitionFullscreenSlider,\n\t\t\t\tPJAXTransitionListHover\n\t\t\t],\n\n\t\t});\n\t}\n\n\tstatic getNextPageElement({\n\t\turl,\n\t\telement\n\t}) {\n\t\treturn new Promise((resolve) => {\n\t\t\tbarba\n\t\t\t\t.request(url)\n\t\t\t\t.then((res) => {\n\t\t\t\t\tresolve($($.parseHTML(res)).find(element));\n\t\t\t\t});\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 28. Arrow */\n/* ======================================================================== */\nclass Arrow extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t}\n\n\trun() {\n\t\tthis._bindEvents();\n\t}\n\n\tset() {\n\t\tthis.$circles = this.$target.find('.circle');\n\t\tthis.initialSVGPath = '10% 90%';\n\n\t\tgsap.set(this.$circles, {\n\t\t\tclearProps: 'all',\n\t\t});\n\n\t\tgsap.set(this.$circles, {\n\t\t\trotation: 180,\n\t\t\tdrawSVG: this.initialSVGPath,\n\t\t\ttransformOrigin: 'center center',\n\t\t});\n\t}\n\n\t_bindEvents() {\n\t\tconst\n\t\t\t$circle = this.$el.find(this.$circles),\n\t\t\ttl = new gsap.timeline();\n\n\t\tthis.$el\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\ttl\n\t\t\t\t\t.clear()\n\t\t\t\t\t.to($circle, {\n\t\t\t\t\t\tduration: 0.3,\n\t\t\t\t\t\tdrawSVG: '0% 100%',\n\t\t\t\t\t\trotation: 180,\n\t\t\t\t\t\ttransformOrigin: 'center center'\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\ttl\n\t\t\t\t\t.clear()\n\t\t\t\t\t.to($circle, {\n\t\t\t\t\t\tduration: 0.3,\n\t\t\t\t\t\tdrawSVG: this.initialSVGPath,\n\t\t\t\t\t\trotation: 180,\n\t\t\t\t\t\ttransformOrigin: 'center center'\n\t\t\t\t\t});\n\t\t\t});\n\n\t\t// window.$window.on('resize', debounce(() => {\n\t\t// \tthis.set();\n\t\t// }, 150));\n\n\t}\n\n}\n","/* ======================================================================== */\n/* 29. AsideCounters */\n/* ======================================================================== */\nclass AsideCounters extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\t}\n\n\trun() {\n\t\tconst\n\t\t\tself = this,\n\t\t\t$counters = this.$target.find('.js-counter');\n\n\t\tif (!$counters.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$counters.each(function () {\n\t\t\tnew Counter({\n\t\t\t\tscope: self.scope,\n\t\t\t\ttarget: $(this)\n\t\t\t});\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 30. ChangeTextHover */\n/* ======================================================================== */\nclass ChangeTextHover extends BaseComponent {\n\n\tconstructor({\n\t\ttarget,\n\t\tscope,\n\t\tpageIndicator,\n\t\ttriggers,\n\t\toptions\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.options = options || {\n\t\t\tduration: 0.4,\n\t\t\tease: 'power4.out'\n\t\t};\n\t\tthis.$pageIndicator = pageIndicator;\n\t\tthis.$triggers = triggers;\n\t\tthis._bindEvents();\n\n\t\tif (this.$pageIndicator.length) {\n\t\t\tthis._bindEventsHoverIndicator();\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\tthis.$target\n\t\t\t.on('mouseenter touchstart', function () {\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\t$normalText = $el.find('.js-change-text-hover__normal'),\n\t\t\t\t\t$hoverText = $el.find('.js-change-text-hover__hover'),\n\t\t\t\t\t$hoverLine = $el.find('.js-change-text-hover__line');\n\n\t\t\t\tself._getTimelineShowHover({\n\t\t\t\t\tnormal: $normalText,\n\t\t\t\t\thover: $hoverText,\n\t\t\t\t\tline: $hoverLine\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave touchend', function () {\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\t$normalText = $el.find('.js-change-text-hover__normal'),\n\t\t\t\t\t$hoverText = $el.find('.js-change-text-hover__hover'),\n\t\t\t\t\t$hoverLine = $el.find('.js-change-text-hover__line');\n\n\t\t\t\tself._getTimelineHideHover({\n\t\t\t\t\tnormal: $normalText,\n\t\t\t\t\thover: $hoverText,\n\t\t\t\t\tline: $hoverLine\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t_bindEventsHoverIndicator() {\n\t\tconst\n\t\t\t$normalText = this.$pageIndicator.find('.js-change-text-hover__normal'),\n\t\t\t$hoverText = this.$pageIndicator.find('.js-change-text-hover__hover'),\n\t\t\t$hoverLine = this.$pageIndicator.find('.js-change-text-hover__line');\n\n\t\tthis.$triggers\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis._getTimelineShowHover({\n\t\t\t\t\tnormal: $normalText,\n\t\t\t\t\thover: $hoverText,\n\t\t\t\t\tline: $hoverLine\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\tthis._getTimelineHideHover({\n\t\t\t\t\tnormal: $normalText,\n\t\t\t\t\thover: $hoverText,\n\t\t\t\t\tline: $hoverLine\n\t\t\t\t});\n\t\t\t});\n\n\t\t// initial set\n\t\tthis._getTimelineHideHover({\n\t\t\tnormal: $normalText,\n\t\t\thover: $hoverText,\n\t\t\tline: $hoverLine\n\t\t});\n\t}\n\n\t_getTimelineShowHover({\n\t\tnormal,\n\t\thover,\n\t\tline\n\t}) {\n\t\treturn new gsap.timeline({\n\t\t\t\tdelay: 0.02\n\t\t\t})\n\t\t\t.hideLines(hover, {\n\t\t\t\ty: '100%',\n\t\t\t\tduration: 0,\n\t\t\t\tstagger: 0\n\t\t\t})\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateLines(hover, {\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideLines(normal, {\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0\n\t\t\t\t}),\n\t\t\t\tgsap.to(line, {\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tscaleX: 1,\n\t\t\t\t\ttransformOrigin: 'left center',\n\t\t\t\t\tduration: this.options.duration\n\t\t\t\t})\n\t\t\t]);\n\t}\n\n\t_getTimelineHideHover({\n\t\tnormal,\n\t\thover,\n\t\tline\n\t}) {\n\t\treturn new gsap.timeline({\n\t\t\t\tdelay: 0.02\n\t\t\t})\n\t\t\t.hideLines(normal, {\n\t\t\t\ty: '100%',\n\t\t\t\tduration: 0,\n\t\t\t\tstagger: 0\n\t\t\t})\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateLines(normal, {\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideLines(hover, {\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0\n\t\t\t\t}),\n\t\t\t\tgsap.to(line, {\n\t\t\t\t\tease: this.options.ease,\n\t\t\t\t\tscaleX: 0,\n\t\t\t\t\ttransformOrigin: 'right center',\n\t\t\t\t\tduration: this.options.duration\n\t\t\t\t})\n\t\t\t]);\n\t}\n\n}\n","/* ======================================================================== */\n/* 31. CircleButton */\n/* ======================================================================== */\nclass CircleButton extends ScrollAnimation {\n constructor({\n target,\n scope\n }) {\n super({\n target,\n scope\n });\n\n }\n\n set() {\n this.$arcText = this.$el.find('.circle-button__label');\n this.$arcWrapper = this.$el.find('.circle-button__wrapper-label');\n this.arcTextElement = this.$arcText.get(0);\n }\n\n run() {\n if (this._hasAnimationScene(this.$el)) {\n this._createScene({\n element: this.$el,\n timeline: this._getSceneTimeline(),\n duration: window.innerHeight,\n reverse: true\n });\n }\n\n this.instance = this._createArcText();\n this.$el.addClass('js-circle-button_curved');\n this._setRadius();\n this._bindEvents();\n }\n\n _createArcText() {\n return new CircleType(this.arcTextElement);\n }\n\n _setRadius() {\n this.instance.radius(this.arcTextElement.offsetWidth / 2);\n }\n\n _bindEvents() {\n window.$window.on('resize', debounce(() => {\n this._setRadius();\n }, 250));\n }\n\n _getSceneTimeline() {\n return new gsap.timeline().fromTo(this.$arcWrapper, {\n rotation: 0,\n transformOrigin: 'center center'\n }, {\n duration: 1,\n rotation: 360,\n });\n }\n}\n","/* ======================================================================== */\n/* 32. Counter */\n/* ======================================================================== */\nclass Counter extends ScrollAnimation {\n\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.$num = this.$target.find('.js-counter__number');\n\t\tthis.start = this.$target.data('counter-start') || 0;\n\t\tthis.target = this.$target.data('counter-target') || 100;\n\t\tthis.digits = this.target.toString().length;\n\t\tthis.duration = this.$target.data('counter-duration') || 4;\n\t\tthis.prefix = this.$target.data('counter-prefix') || '';\n\t\tthis.suffix = this.$target.data('counter-suffix') || '';\n\t\tthis.counter = {\n\t\t\tval: this.numberStart\n\t\t};\n\t\tthis.prepare();\n\t\tthis.animate();\n\t}\n\n\tprepare() {\n\t\tlet value = parseFloat(this.start).toFixed(0);\n\n\t\tvalue = this.prefix + this._addZeros(value) + this.suffix;\n\t\tthis.$num.text(value);\n\t}\n\n\tanimate() {\n\t\tconst tl = new gsap.timeline();\n\t\tlet value;\n\n\t\ttl.to(this.counter, {\n\t\t\tduration: this.duration,\n\t\t\tval: parseFloat(this.target).toFixed(0),\n\t\t\tease: 'power4.out',\n\t\t\tonUpdate: () => {\n\t\t\t\tvalue = parseFloat(this.counter.val).toFixed(0);\n\t\t\t\tvalue = this._addZeros(value);\n\t\t\t\tthis.$num.text(this.prefix + value + this.suffix);\n\t\t\t}\n\t\t});\n\n\t\tthis._createScene({\n\t\t\telement: this.$target,\n\t\t\ttimeline: tl\n\t\t});\n\t}\n\n\t_addZeros(value) {\n\t\twhile (value.toString().length < this.digits) {\n\t\t\tvalue = '0' + value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n}\n","/* ======================================================================== */\n/* 33. EffectDistortion */\n/* ======================================================================== */\nclass EffectDistortion extends BaseGLAnimation {\n\n\tconstructor({\n\t\tslider,\n\t\tcanvas,\n\t\taspect = 1.5,\n\t\tdisplacementImage,\n\t\titems,\n\t}) {\n\t\tsuper({\n\t\t\tcanvas,\n\t\t\taspect\n\t\t});\n\n\t\tthis.aspect = aspect;\n\t\tthis.canvas = canvas;\n\t\tthis.dispImage = displacementImage;\n\t\tthis.items = items;\n\t\tthis.slider = slider;\n\t\tthis.textures = [];\n\t\tthis.timeline = new gsap.timeline();\n\n\t\tthis.disp = this.loader.load(this.dispImage);\n\t\tthis.disp.wrapS = this.disp.wrapT = THREE.RepeatWrapping;\n\n\t\tthis.scene = this._getScene();\n\t\tthis.viewport = this._getViewport();\n\t\tthis.camera = this._getCamera();\n\n\t\tthis.uniforms = {\n\t\t\teffectFactor: {\n\t\t\t\ttype: \"f\",\n\t\t\t},\n\t\t\tdispFactor: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 0.0\n\t\t\t},\n\t\t\ttexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: this.items[0].texture\n\t\t\t},\n\t\t\ttexture2: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: this.items[1].texture\n\t\t\t},\n\t\t\tdisp: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: this.disp\n\t\t\t}\n\t\t};\n\t\tthis.geometry = this._getPlaneBufferGeometry();\n\t\tthis.material = this._getShaderMaterial();\n\t\tthis.plane = this._getPlane({\n\t\t\tgeometry: this.geometry,\n\t\t\tmaterial: this.material\n\t\t});\n\t\tthis.scene.add(this.plane);\n\t\tthis.initialProgress = 0;\n\t\tthis.progress = 0;\n\n\t\tthis.camera.position.z = 1;\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis._updateScene();\n\n\t\tthis._loadTextures().then(() => {\n\t\t\tthis.isLoaded = true;\n\n\t\t\tif (window.$pagePreloader && window.$pagePreloader.length && window.$pagePreloader.is(':visible')) {\n\t\t\t\twindow.$window.on('arts/preloader/end', () => {\n\t\t\t\t\tthis._animateInitial();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._animateInitial();\n\t\t\t}\n\t\t});\n\t}\n\n\t_animateInitial(delay = 0) {\n\t\tthis.change({\n\t\t\tfrom: 0,\n\t\t\tto: 0,\n\t\t\tdelay,\n\t\t\tspeed: parseFloat(this.slider.params.speed / 1000),\n\t\t\tonComplete: () => {\n\t\t\t\tthis.material.uniforms.texture.value = this.items[1].texture;\n\t\t\t\tif (this.slider.params.mousewheel.enabled) {\n\t\t\t\t\tthis.slider.mousewheel.enable();\n\t\t\t\t}\n\t\t\t\tif (this.slider.params.keyboard.enabled) {\n\t\t\t\t\tthis.slider.keyboard.enable();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPlaneBufferGeometry() {\n\t\tconst {\n\t\t\twidth,\n\t\t\theight\n\t\t} = this._calculatePosition();\n\n\t\treturn new THREE.PlaneBufferGeometry(\n\t\t\twidth,\n\t\t\theight,\n\t\t\tthis.aspect\n\t\t);\n\t}\n\n\t_getCamera() {\n\t\tconst {\n\t\t\twidth,\n\t\t\theight\n\t\t} = this._calculatePosition();\n\n\t\treturn new THREE.OrthographicCamera(\n\t\t\twidth / -2,\n\t\t\twidth / 2,\n\t\t\theight / 2,\n\t\t\theight / -2,\n\t\t);\n\t}\n\n\t_getShaderMaterial() {\n\t\tconst fsID = this.slider.params.direction === 'horizontal' ? 'slider-textures-horizontal-fs' : 'slider-textures-vertical-fs';\n\n\t\treturn new THREE.ShaderMaterial({\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: this._getVertexShader('slider-textures-vs'),\n\t\t\tfragmentShader: this._getFragmentShader(fsID),\n\t\t\topacity: 1\n\t\t});\n\t}\n\n\tchange({\n\t\tfrom = 0,\n\t\tto = 0,\n\t\tspeed = 1.2,\n\t\tintensity = 0.25,\n\t\tdelay = 0,\n\t\tease = 'power3.out',\n\t\tonComplete,\n\t}) {\n\n\t\tif (!this.material) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.material.uniforms.texture.value = this.items[from].texture;\n\t\tthis.material.uniforms.texture2.value = this.items[to].texture;\n\t\tthis.material.uniforms.effectFactor.value = intensity;\n\n\t\tthis.timeline.fromTo(this.material.uniforms.dispFactor, {\n\t\t\tvalue: 0\n\t\t}, {\n\t\t\tvalue: 1,\n\t\t\tease: ease,\n\t\t\tduration: speed,\n\t\t\tdelay,\n\t\t\tonComplete: () => {\n\t\t\t\tif (typeof onComplete === 'function') {\n\t\t\t\t\tonComplete();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 34. EffectStretch */\n/* ======================================================================== */\nclass EffectStretch extends BaseGLAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tcanvas,\n\t\titems,\n\t\toptions\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tcanvas,\n\t\t});\n\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.items = items;\n\t\tthis.tempItemIndex = null;\n\n\t\tthis.options = options || {\n\t\t\tstrength: 0.2,\n\t\t\tscaleTexture: 1.8,\n\t\t\tscalePlane: 1\n\t\t};\n\n\t\tthis.mouse = new THREE.Vector2();\n\t\tthis.position = new THREE.Vector3(0, 0, 0);\n\t\tthis.scale = new THREE.Vector3(1, 1, 1);\n\n\t\tthis.uniforms = {\n\t\t\tuTexture: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tuOffset: {\n\t\t\t\tvalue: new THREE.Vector2(0.0, 0.0)\n\t\t\t},\n\t\t\tuAlpha: {\n\t\t\t\tvalue: 0\n\t\t\t},\n\t\t\tuScale: {\n\t\t\t\tvalue: Math.abs(this.options.scaleTexture - 2)\n\t\t\t}\n\t\t};\n\t\tthis.geometry = this._getPlaneBufferGeometry();\n\t\tthis.material = this._getShaderMaterial();\n\t\tthis.plane = this._getPlane({\n\t\t\tgeometry: this.geometry,\n\t\t\tmaterial: this.material\n\t\t});\n\t\tthis.scene.add(this.plane);\n\n\t\tthis._loadTextures().then(() => {\n\t\t\tthis.isLoaded = true;\n\t\t\ttarget.removeClass('pointer-events-none');\n\t\t});\n\t\tthis._bindMouseEvents();\n\t}\n\n\t_bindMouseEvents() {\n\t\tconst self = this;\n\n\t\tthis.items.each(function (index) {\n\t\t\t$(this)\n\t\t\t\t.on('mouseenter', (event) => {\n\t\t\t\t\tif (!self.isLoaded) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.tempItemIndex = index;\n\t\t\t\t\tself._onMouseEnter();\n\t\t\t\t\tif (self.currentItem && self.currentItem.index === index) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tself._onTargetChange(index);\n\t\t\t\t})\n\t\t\t\t.on('mouseleave', (event) => {\n\t\t\t\t\tif (!self.isLoaded) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.isMouseOver = false;\n\t\t\t\t\tself._onMouseLeave(event);\n\t\t\t\t});\n\t\t});\n\n\t\twindow.$window.on('mousemove touchmove', (event) => {\n\t\t\tif (event.type !== 'touchmove') {\n\t\t\t\tthis.mouse.x = (event.clientX / this.viewport.width) * 2 - 1;\n\t\t\t\tthis.mouse.y = -(event.clientY / this.viewport.height) * 2 + 1;\n\t\t\t\tthis._onMouseMove(event);\n\t\t\t}\n\t\t});\n\t}\n\n\t_getPlaneBufferGeometry() {\n\t\treturn new THREE.PlaneBufferGeometry(1, 1, 8, 8);\n\t}\n\n\t_getShaderMaterial() {\n\t\treturn new THREE.ShaderMaterial({\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: this._getVertexShader('list-hover-vs'),\n\t\t\tfragmentShader: this._getFragmentShader('list-hover-fs'),\n\t\t\ttransparent: true\n\t\t});\n\t}\n\n\t_onMouseEnter() {\n\t\tif (!this.currentItem || !this.isMouseOver) {\n\t\t\tthis.isMouseOver = true;\n\t\t\t// show plane\n\t\t\tgsap.to(this.uniforms.uAlpha, {\n\t\t\t\tduration: 0.3,\n\t\t\t\tvalue: 1,\n\t\t\t\tease: 'power4.out'\n\t\t\t});\n\t\t}\n\t}\n\n\t_onMouseLeave() {\n\t\tgsap.to(this.uniforms.uAlpha, {\n\t\t\tduration: 0.3,\n\t\t\tvalue: 0,\n\t\t\tease: 'power4.out'\n\t\t});\n\t}\n\n\t_onMouseMove() {\n\t\t// project mouse position to world coodinates\n\t\tlet x = this.mouse.x.map(\n\t\t\t-1,\n\t\t\t1,\n\t\t\t-this.viewSize.width / 2,\n\t\t\tthis.viewSize.width / 2\n\t\t);\n\t\tlet y = this.mouse.y.map(\n\t\t\t-1,\n\t\t\t1,\n\t\t\t-this.viewSize.height / 2,\n\t\t\tthis.viewSize.height / 2\n\t\t);\n\n\t\t// update position\n\t\tthis.position = new THREE.Vector3(x, y, 0);\n\n\t\tgsap.to(this.plane.position, {\n\t\t\tduration: 1,\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tease: 'power4.out',\n\t\t\tonUpdate: this._onPositionUpdate.bind(this)\n\t\t});\n\t}\n\n\t_onPositionUpdate() {\n\t\t// compute offset\n\t\tlet offset = this.plane.position\n\t\t\t.clone()\n\t\t\t.sub(this.position)\n\t\t\t.multiplyScalar(-this.options.strength);\n\n\t\tthis.uniforms.uOffset.value = offset;\n\t}\n\n\t_onTargetChange(index) {\n\t\t// item target changed\n\t\tthis.currentItem = this.items[index];\n\t\tif (!this.currentItem.texture) {\n\t\t\treturn;\n\t\t}\n\n\t\t// compute image ratio\n\t\tconst imageRatio = this.currentItem.texture.image.naturalWidth / this.currentItem.texture.image.naturalHeight;\n\n\t\tthis.scale = new THREE.Vector3(imageRatio * this.options.scalePlane, 1 * this.options.scalePlane, 1 * this.options.scalePlane);\n\t\tthis.uniforms.uTexture.value = this.currentItem.texture;\n\t\tthis.plane.scale.copy(this.scale);\n\t}\n\n}\n","/* ======================================================================== */\n/* 35. Cursor */\n/* ======================================================================== */\nclass Cursor extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget,\n\t\thideCursorNative = false,\n\t\tcursorElements,\n\t\thighlightElements,\n\t\thighlightScale = 1.3,\n\t\tmagneticElements,\n\t\tmagneticScale = 1,\n\t\tmagneticScaleCursorBy = 'element',\n\t\tfactorTrailing = 4,\n\t\tanimDuration = 0.2,\n\t\tdistanceArrows = 45,\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.timelineArrows = new gsap.timeline();\n\t\tthis.$follower = this.$target.find('.cursor__follower');\n\t\tthis.$inner = this.$target.find('#inner');\n\t\tthis.$outer = this.$target.find('#outer');\n\t\tthis.$arrowUp = this.$target.find('.cursor__arrow_up');\n\t\tthis.$arrowDown = this.$target.find('.cursor__arrow_down');\n\t\tthis.$arrowLeft = this.$target.find('.cursor__arrow_left');\n\t\tthis.$arrowRight = this.$target.find('.cursor__arrow_right');\n\t\tthis.$label = this.$target.find('.cursor__label');\n\t\tthis.$icon = this.$target.find('.cursor__icon');\n\t\tthis.offsetTop = parseInt(window.$html.css('marginTop'), 10);\n\t\tthis.animDuration = animDuration;\n\t\tthis.mouseX = window.mouseX || 0;\n\t\tthis.mouseY = window.mouseY || 0;\n\t\tthis.magneticX = 0;\n\t\tthis.magneticY = 0;\n\t\tthis.scale = 1;\n\t\tthis.posX = 0;\n\t\tthis.posY = 0;\n\t\tthis.cursorCenterX = parseFloat(this.$target.innerWidth() / 2);\n\t\tthis.cursorCenterY = parseFloat(this.$target.innerHeight() / 2);\n\t\tthis.isFirstMove = true;\n\t\tthis.cursorElements = cursorElements;\n\t\tthis.highlightElements = highlightElements;\n\t\tthis.highlightScale = highlightScale;\n\t\tthis.magneticElements = magneticElements;\n\t\tthis.$magneticElements = $(magneticElements);\n\t\tthis.magneticScale = magneticScale;\n\t\tthis.magneticScaleCursorBy = magneticScaleCursorBy;\n\t\tthis.factorTrailing = factorTrailing;\n\t\tthis.labels = window.theme.cursorFollower.labels;\n\t\tthis.distanceArrows = distanceArrows;\n\t\tthis.hideCursorNative = hideCursorNative;\n\t\tthis.strokeColor = this.$inner.css('stroke');\n\n\t\tthis._bindEvents();\n\t}\n\n\tset() {\n\t\tgsap.set(this.$target, {\n\t\t\tdisplay: 'block',\n\t\t});\n\t\tgsap.to(this.$target, {\n\t\t\tduration: 0.6,\n\t\t\tscale: 1,\n\t\t\tautoAlpha: 1,\n\t\t\txPercent: 0,\n\t\t\tyPercent: 0,\n\t\t});\n\t}\n\n\trun() {\n\t\tgsap.to({}, {\n\t\t\tduration: 0.01,\n\t\t\trepeat: -1,\n\t\t\tonRepeat: () => {\n\t\t\t\tconst trailing = this.isFirstMove ? 1 : this.factorTrailing;\n\t\t\t\tthis.posX += (this.mouseX - this.posX) / trailing;\n\t\t\t\tthis.posY += (this.mouseY - this.posY - this.offsetTop) / trailing;\n\n\t\t\t\tgsap.set(this.$target, {\n\t\t\t\t\txPercent: 0,\n\t\t\t\t\tyPercent: 0,\n\t\t\t\t\tx: this.posX - this.cursorCenterX,\n\t\t\t\t\ty: this.posY + this.offsetTop - this.cursorCenterY,\n\t\t\t\t\trepeat: -1,\n\t\t\t\t});\n\t\t\t\tthis.isFirstMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_scaleCursor() {\n\t\tgsap.to(this.$follower, {\n\t\t\tduration: this.animDuration,\n\t\t\tscale: this.scale,\n\t\t\toverwrite: 'all'\n\t\t});\n\t}\n\n\t_highlightCursor(highlight = true) {\n\t\tgsap.to(this.$inner, {\n\t\t\tduration: this.animDuration,\n\t\t\tfill: highlight ? this.strokeColor : '',\n\t\t\topacity: highlight ? 0.4 : '',\n\t\t\toverwrite: 'all'\n\t\t});\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\tthis.$scope.off('mousemove mouseenter mouseleave')\n\t\t\t.on('mousemove', (e) => {\n\t\t\t\tthis.mouseX = this.magneticX || e.clientX;\n\t\t\t\tthis.mouseY = this.magneticY || e.clientY;\n\t\t\t})\n\t\t\t// slider dots\n\t\t\t.on('mouseenter', '.slider__dot', () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave', '.slider__dot', (e) => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t\tthis._resetMagnifiedElement($(e.currentTarget));\n\t\t\t})\n\t\t\t.on('mousemove', '.slider__dot', (e) => {\n\t\t\t\tconst $target = $(e.currentTarget);\n\n\t\t\t\tthis.scale = 0.5;\n\t\t\t\tthis._scaleCursor();\n\t\t\t\tthis._magnifyElement({\n\t\t\t\t\telement: $target,\n\t\t\t\t\tevent: e,\n\t\t\t\t\tdistance: self.magneticDistance,\n\t\t\t\t\tscaleBy: self.magneticScaleCursorBy,\n\t\t\t\t\tscale: 0.5,\n\t\t\t\t});\n\t\t\t})\n\t\t\t// social links\n\t\t\t.on('mouseenter', '.social__item', () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave', '.social__item', (e) => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t\tthis._resetMagnifiedElement($(e.currentTarget));\n\t\t\t})\n\t\t\t.on('mousemove', '.social__item', (e) => {\n\t\t\t\tconst $target = $(e.currentTarget);\n\n\t\t\t\tthis.scale = 0.8;\n\t\t\t\tthis._scaleCursor();\n\t\t\t\tthis._magnifyElement({\n\t\t\t\t\telement: $target,\n\t\t\t\t\tevent: e,\n\t\t\t\t\tdistance: self.magneticDistance,\n\t\t\t\t\tscaleBy: self.magneticScaleCursorBy,\n\t\t\t\t\tscale: 0.8,\n\t\t\t\t});\n\t\t\t})\n\t\t\t// PSWP gallery\n\t\t\t.on('mousemove', '.pswp--zoomed-in .pswp__img', (e) => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis.scale = 1.0;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('mousemove', '.pswp--dragging .pswp__img', (e) => {\n\t\t\t\tthis.scale = 1.0;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t// cursor elements\n\t\t\t.on('mouseenter', self.cursorElements, (e) => {\n\t\t\t\tconst $target = $(e.currentTarget);\n\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: $target.data('arts-cursor-hide-native') || self.hideCursorNative\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: $target.data('arts-cursor-label') || ''\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: $target.data('arts-cursor-icon') || ''\n\t\t\t\t});\n\t\t\t\tthis._hideArrows();\n\t\t\t\tthis.scale = parseFloat($target.data('arts-cursor-scale'));\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('mouseleave', self.cursorElements, () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t// highlight elements\n\t\t\t.on('mouseenter', self.highlightElements, (e) => {\n\t\t\t\tthis.scale = parseFloat(this.highlightScale);\n\t\t\t\tthis._highlightCursor(true);\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('mouseleave', self.highlightElements, (e) => {\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._highlightCursor(false);\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t// magnetic elements\n\t\t\t.on('mousemove', self.magneticElements, (e) => {\n\t\t\t\tconst $target = $(e.currentTarget);\n\n\t\t\t\tthis._magnifyElement({\n\t\t\t\t\telement: $target,\n\t\t\t\t\tevent: e,\n\t\t\t\t\tdistance: self.magneticDistance,\n\t\t\t\t\tscaleBy: self.magneticScaleCursorBy,\n\t\t\t\t\tscale: parseFloat($target.data('arts-cursor-scale')) || this.magneticScale,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseleave', self.magneticElements, (e) => {\n\t\t\t\tthis._resetMagnifiedElement($(e.currentTarget));\n\t\t\t})\n\t\t\t// slider dragging\n\t\t\t.on('arts/slider/touchDown', (e) => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: this.labels.slider\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._revealArrows(e.detail);\n\t\t\t\tthis.scale = 1.6;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('arts/slider/touchUp', () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: this.labels.slider,\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._hideArrows();\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t// pswp gallery pan\n\t\t\t.on('arts/pswp/touchDown', (e) => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: ''\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._revealArrows(e.detail);\n\t\t\t\tthis.scale = 1.0;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('arts/pswp/touchUp arts/pswp/close', () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._hideArrows();\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t})\n\t\t\t.on('arts/pswp/slideChange', (e) => {\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._hideArrows();\n\t\t\t});\n\n\t\t// reset cursor after AJAX transition\n\t\twindow.$window\n\t\t\t.on('arts/barba/transition/end', () => {\n\t\t\t\tthis.setCursor({\n\t\t\t\t\thide: false\n\t\t\t\t});\n\t\t\t\tthis._setLabel({\n\t\t\t\t\tlabel: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._setIcon({\n\t\t\t\t\ticon: '',\n\t\t\t\t\thide: true\n\t\t\t\t});\n\t\t\t\tthis._hideArrows();\n\t\t\t\tthis.scale = 1;\n\t\t\t\tthis._scaleCursor();\n\t\t\t\tthis._highlightCursor(false);\n\t\t\t});\n\t}\n\n\t_setLabel({\n\t\tlabel = '',\n\t\thide = false\n\t}) {\n\t\tthis.$label.html(label);\n\t\tif (hide === true) {\n\t\t\tgsap.to(this.$label, {\n\t\t\t\tduration: this.animDuration,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\ty: -20,\n\t\t\t});\n\t\t} else {\n\t\t\tgsap.to(this.$label, {\n\t\t\t\tduration: this.animDuration,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: 0,\n\t\t\t});\n\t\t}\n\t}\n\n\t_setIcon({\n\t\ticon = '',\n\t\thide = false\n\t}) {\n\t\tthis.$icon.html(icon);\n\t\tif (hide === true) {\n\t\t\tgsap.to(this.$icon, {\n\t\t\t\tduration: this.animDuration,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\ty: -20,\n\t\t\t});\n\t\t} else {\n\t\t\tgsap.to(this.$icon, {\n\t\t\t\tduration: this.animDuration,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: 0,\n\t\t\t});\n\t\t}\n\t}\n\n\t_revealArrows({\n\t\tdirection = 'horizontal'\n\t}) {\n\t\tif (direction === 'horizontal') {\n\t\t\tthis.timelineArrows\n\t\t\t\t.clear()\n\t\t\t\t.add([\n\t\t\t\t\tgsap.to(this.$arrowLeft, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: -this.distanceArrows\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.to(this.$arrowRight, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: this.distanceArrows\n\t\t\t\t\t})\n\t\t\t\t]);\n\t\t}\n\t\tif (direction === 'vertical') {\n\t\t\tthis.timelineArrows\n\t\t\t\t.clear()\n\t\t\t\t.add([\n\t\t\t\t\tgsap.to(this.$arrowUp, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\ty: -this.distanceArrows\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.to(this.$arrowDown, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\ty: this.distanceArrows\n\t\t\t\t\t})\n\t\t\t\t]);\n\t\t}\n\n\t\tif (direction === 'all') {\n\t\t\tthis.timelineArrows\n\t\t\t\t.clear()\n\t\t\t\t.add([\n\t\t\t\t\tgsap.to(this.$arrowUp, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\ty: -this.distanceArrows / 2\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.to(this.$arrowDown, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\ty: this.distanceArrows / 2\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.to(this.$arrowLeft, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: -this.distanceArrows / 2\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.to(this.$arrowRight, {\n\t\t\t\t\t\tduration: this.animDuration,\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: this.distanceArrows / 2\n\t\t\t\t\t})\n\t\t\t\t]);\n\t\t}\n\t}\n\n\t_hideArrows() {\n\t\tthis.timelineArrows\n\t\t\t.clear()\n\t\t\t.to([this.$arrowUp, this.$arrowDown, this.$arrowLeft, this.$arrowRight], {\n\t\t\t\tduration: this.animDuration,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t});\n\t}\n\n\t_calcDistance({\n\t\tcenterX,\n\t\tcenterY,\n\t\tmouseX,\n\t\tmouseY\n\t}) {\n\t\treturn Math.floor(\n\t\t\tMath.sqrt(\n\t\t\t\tMath.pow(mouseX - centerX, 2) + Math.pow(mouseY - centerY, 2)\n\t\t\t)\n\t\t);\n\t}\n\n\t_resetMagnifiedElement(element) {\n\t\tthis.magneticX = 0;\n\t\tthis.magneticY = 0;\n\n\t\tif (element && element.length) {\n\t\t\tgsap.to(element, {\n\t\t\t\tduration: 0.4,\n\t\t\t\ty: 0,\n\t\t\t\tx: 0\n\t\t\t});\n\t\t}\n\t}\n\n\t_magnifyElement({\n\t\telement,\n\t\tevent,\n\t\tdistance,\n\t\tscale,\n\t\tscaleBy,\n\t}) {\n\n\t\tconst {\n\t\t\ttop,\n\t\t\tleft,\n\t\t\twidth,\n\t\t\theight\n\t\t} = element.get(0).getBoundingClientRect(),\n\t\t\tcenterX = left + width / 2,\n\t\t\tcenterY = top + height / 2,\n\t\t\tdeltaX = Math.floor((centerX - event.clientX)) * -.5,\n\t\t\tdeltaY = Math.floor((centerY - event.clientY)) * -.5;\n\n\t\tthis.magneticX = centerX;\n\t\tthis.magneticY = centerY;\n\t\tthis.scale = scaleBy === 'element' ? Math.max(width, height) / this.cursorCenterX * scale : scaleBy * scale;\n\n\t\tgsap.to(element, {\n\t\t\tduration: 0.2,\n\t\t\ty: deltaY,\n\t\t\tx: deltaX,\n\t\t\toverwrite: 'all'\n\t\t});\n\t}\n\n\tsetCursor({\n\t\thide = false,\n\t\tloading = false\n\t}) {\n\t\tif (hide === true && !window.$body.hasClass('cursor-none')) {\n\t\t\twindow.$body.addClass('cursor-none');\n\t\t} else {\n\t\t\twindow.$body.removeClass('cursor-none');\n\t\t}\n\n\t\tif (loading === true && !window.$body.hasClass('cursor-progress')) {\n\t\t\twindow.$body.addClass('cursor-progress');\n\t\t} else {\n\t\t\twindow.$body.removeClass('cursor-progress');\n\t\t}\n\t}\n\n}\n","/* ======================================================================== */\n/* 36. Filter */\n/* ======================================================================== */\nclass Filter {\n\n constructor({\n scope,\n target\n }) {\n this.$target = target;\n this.$scope = scope;\n this.itemClass = '.js-filter__item';\n this.itemActive = 'filter__item_active';\n this.itemActiveClass = '.filter__item_active';\n this.underlineClass = '.js-filter__underline';\n this.$items = this.$target.find(this.itemClass);\n this.$line = this.$target.find($(this.underlineClass));\n\n this.bindEvents();\n this.updateLinePosition();\n }\n\n bindEvents() {\n const self = this;\n\n this.$scope\n .on('mouseenter', this.itemClass, function () {\n self.updateLinePosition($(this));\n })\n .on('mouseleave', this.itemClass, function () {\n self.updateLinePosition(self.$items.filter(self.itemActiveClass))\n })\n .on('click', this.itemClass, function () {\n const $el = $(this);\n\n self.$items.removeClass(self.itemActive);\n $el.addClass(self.itemActive);\n self.updateLinePosition($el);\n });\n }\n\n updateLinePosition($el) {\n if (!this.$line.length) {\n return false;\n }\n\n if (!$el || !$el.length) {\n\n gsap.to(this.$line, {\n duration: 0.6,\n width: 0,\n ease: 'expo.out'\n });\n } else {\n const\n $heading = $el.find('div'),\n headingWidth = $heading.innerWidth(),\n headingPos = $heading.position(),\n colPos = $el.position();\n\n gsap.to(this.$line, {\n duration: 0.6,\n ease: 'expo.inOut',\n width: headingWidth,\n x: headingPos.left + colPos.left,\n });\n }\n }\n\n setActiveItem(index) {\n const $el = this.$items.eq(index);\n\n if (!$el.length) {\n return false;\n }\n\n this.$items.removeClass(this.itemActive);\n $el.addClass(this.itemActive);\n this.updateLinePosition($el);\n }\n\n}\n","/* ======================================================================== */\n/* 37. fontObserver */\n/* ======================================================================== */\nfunction fontObserver() {\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tconst observers = [];\n\n\t\tif (!window.theme.fonts) {\n\t\t\tresolve(true);\n\t\t}\n\n\t\t$.each(window.theme.fonts, function () {\n\t\t\tconst currentObserver = new FontFaceObserver(this);\n\n\t\t\tobservers.push(currentObserver.load());\n\t\t});\n\n\t\tPromise\n\t\t\t.all(observers)\n\t\t\t.then(() => {\n\t\t\t\tresolve(true);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tconsole.error('Font Observer: There is an error occured while loading one or more fonts.');\n\t\t\t\treject(true);\n\t\t\t});\n\n\t});\n\n}\n","/* ======================================================================== */\n/* 38. Form */\n/* ======================================================================== */\nclass Form {\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tthis.$scope = scope;\n\t\tthis.$target = target;\n\n\t\tif (this.$scope.length) {\n\t\t\tthis.set();\n\t\t\tthis.run();\n\t\t}\n\t}\n\n\tset() {\n\t\tthis.input = '.input-float__input';\n\t\tthis.inputClassNotEmpty = 'input-float__input_not-empty';\n\t\tthis.inputClassFocused = 'input-float__input_focused';\n\t\tthis.$inputs = this.$scope.find(this.input);\n\t}\n\n\trun() {\n\t\tthis._floatLabels();\n\t\tthis._bindEvents();\n\t}\n\n\t_floatLabels() {\n\t\tconst self = this;\n\n\t\tif (!this.$inputs || !this.$inputs.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.$inputs.each(function () {\n\t\t\tconst\n\t\t\t\t$el = $(this),\n\t\t\t\t$controlWrap = $el.parent('.wpcf7-form-control-wrap');\n\n\t\t\t// not empty value\n\t\t\tif ($el.val()) {\n\t\t\t\t$el.addClass(self.inputClassNotEmpty);\n\t\t\t\t$controlWrap.addClass(self.inputClassNotEmpty);\n\t\t\t\t// empty value\n\t\t\t} else {\n\t\t\t\t$el.removeClass([self.inputClassFocused, self.inputClassNotEmpty]);\n\t\t\t\t$controlWrap.removeClass([self.inputClassFocused, self.inputClassNotEmpty]);\n\t\t\t}\n\n\t\t\t// has placeholder & empty value\n\t\t\tif ($el.attr('placeholder') && !$el.val()) {\n\t\t\t\t$el.addClass(self.inputClassNotEmpty);\n\t\t\t\t$controlWrap.addClass(self.inputClassNotEmpty);\n\t\t\t}\n\t\t});\n\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\tthis.$scope\n\t\t\t.off('focusin')\n\t\t\t.on('focusin', self.input, function () {\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\t$controlWrap = $el.parent('.wpcf7-form-control-wrap');\n\n\t\t\t\t$el.addClass(self.inputClassFocused).removeClass(self.inputClassNotEmpty);\n\t\t\t\t$controlWrap.addClass(self.inputClassFocused).removeClass(self.inputClassNotEmpty);\n\n\t\t\t})\n\t\t\t.off('focusout')\n\t\t\t.on('focusout', self.input, function () {\n\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\t$controlWrap = $el.parent('.wpcf7-form-control-wrap');\n\n\t\t\t\t// not empty value\n\t\t\t\tif ($el.val()) {\n\t\t\t\t\t$el.removeClass(self.inputClassFocused).addClass(self.inputClassNotEmpty);\n\t\t\t\t\t$controlWrap.removeClass(self.inputClassFocused).addClass(self.inputClassNotEmpty);\n\t\t\t\t} else {\n\t\t\t\t\t// has placeholder & empty value\n\t\t\t\t\tif ($el.attr('placeholder')) {\n\t\t\t\t\t\t$el.addClass(self.inputClassNotEmpty);\n\t\t\t\t\t\t$controlWrap.addClass(self.inputClassNotEmpty);\n\t\t\t\t\t}\n\n\t\t\t\t\t$el.removeClass(self.inputClassFocused);\n\t\t\t\t\t$controlWrap.removeClass(self.inputClassFocused);\n\t\t\t\t}\n\n\t\t\t});\n\n\t}\n\n\t_getModalTemplate({\n\t\ticon,\n\t\tmessage\n\t}) {\n\t\treturn `\n
\n
\n
\n
\n
\n \"\"/\n

${message}

\n
\n \n
\n
\n
\n `;\n\t}\n\n\t_createModal({\n\t\ttemplate,\n\t\tonDismiss\n\t}) {\n\n\t\tif (!template) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet $modal;\n\t\twindow.$body.append(template);\n\t\t$modal = $('#modalContactForm');\n\n\t\t$modal.modal('show');\n\t\t$modal.on('hidden.bs.modal', () => {\n\t\t\tif (typeof onDismiss === 'function') {\n\t\t\t\tonDismiss();\n\t\t\t}\n\t\t\t$modal.modal('dispose').remove();\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 39. FormAJAX */\n/* ======================================================================== */\nclass FormAJAX extends Form {\n\n constructor(options) {\n super(options);\n this.inputClassError = 'form__error';\n this.method = this.$target.attr('method');\n this.action = this.$target.attr('action');\n this.messages = {\n success: this.$target.attr('data-message-success'),\n error: this.$target.attr('data-message-error')\n };\n this._validate();\n }\n\n _validate() {\n const self = this;\n\n this.$target.validate({\n errorElement: 'span',\n errorPlacement: (error, element) => {\n error.appendTo(element.parent()).addClass(self.inputClassError);\n },\n submitHandler: (form) => {\n self._submit(form);\n }\n });\n }\n\n _submit() {\n const self = this;\n\n $.ajax({\n type: self.$target.attr('method'),\n url: self.$target.attr('action'),\n data: self.$target.serialize()\n }).done(() => {\n self._createModal({\n template: self._getModalTemplate({\n icon: './img/general/icon-success.svg',\n message: self.messages.success\n }),\n onDismiss: () => {\n self.$target.trigger('reset');\n self._floatLabels();\n }\n });\n }).fail(() => {\n self._createModal({\n template: self._getModalTemplate({\n icon: './img/general/icon-error.svg',\n message: self.messages.error\n })\n });\n });\n }\n\n}\n","/* ======================================================================== */\n/* 40. gmap */\n/* ======================================================================== */\nclass GMap extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\t}\n\n\tset() {\n\t\tthis.prevInfoWindow = false;\n\t\tthis.$container = this.$target.find('.gmap__container');\n\t\tthis.$markers = this.$target.find('.gmap__marker');\n\n\t\tthis.zoom = parseInt(this.$target.data('gmap-zoom'));\n\t\tthis.styles = this._parseStyles(this.$target.attr('data-gmap-snazzy-styles'));\n\t}\n\n\trun() {\n\t\tif (typeof window.google !== 'undefined' && typeof window.google.maps !== 'undefined' && this.$container.length) {\n\t\t\tthis._createMap();\n\t\t}\n\t}\n\n\t_parseStyles(styles) {\n\t\tif (!styles) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(styles);\n\t\t} catch (err) {\n\t\t\tconsole.error('Google Map: Invalid Snazzy Styles Array!');\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t_createMap() {\n\n\t\tconst\n\t\t\tself = this,\n\t\t\targsMap = {\n\t\t\t\tcenter: new google.maps.LatLng(0, 0),\n\t\t\t\tzoom: this.zoom,\n\t\t\t\tscrollwheel: false\n\t\t\t};\n\n\t\tif (this.styles) {\n\t\t\t$.extend(argsMap, {\n\t\t\t\tstyles: this.styles\n\t\t\t});\n\t\t}\n\n\t\tthis.map = new google.maps.Map(this.$container[0], argsMap);\n\t\tthis.map.markers = [];\n\n\t\tthis.$markers.each(function () {\n\t\t\tself._createMarker($(this));\n\t\t});\n\n\t\tthis._centerMap(this.zoom);\n\t}\n\n\t_createMarker($marker) {\n\n\t\tif (!$marker.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst\n\t\t\tMARKER_LAT = parseFloat($marker.attr('data-marker-lat')),\n\t\t\tMARKER_LON = parseFloat($marker.attr('data-marker-lon')),\n\t\t\tMARKER_IMG = $marker.attr('data-marker-img'),\n\t\t\tMARKER_WIDTH = $marker.attr('data-marker-width'),\n\t\t\tMARKER_HEIGHT = $marker.attr('data-marker-height'),\n\t\t\tMARKER_CONTENT = $marker.attr('data-marker-content');\n\n\t\tlet marker;\n\n\t\t/**\n\t\t * Marker\n\t\t */\n\t\tconst argsMarker = {\n\t\t\tposition: new google.maps.LatLng(MARKER_LAT, MARKER_LON),\n\t\t\tmap: this.map\n\t\t};\n\n\t\tif (MARKER_IMG) {\n\t\t\t$.extend(argsMarker, {\n\t\t\t\ticon: {\n\t\t\t\t\turl: MARKER_IMG\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (MARKER_IMG && MARKER_WIDTH && MARKER_HEIGHT) {\n\t\t\t$.extend(argsMarker.icon, {\n\t\t\t\tscaledSize: new google.maps.Size(MARKER_WIDTH, MARKER_HEIGHT)\n\t\t\t});\n\t\t}\n\n\t\tmarker = new google.maps.Marker(argsMarker);\n\t\tthis.map.markers.push(marker);\n\n\t\t/**\n\t\t * Info Window (Content)\n\t\t */\n\t\tthis._createInfoWindow({\n\t\t\tmarker,\n\t\t\tcontent: MARKER_CONTENT\n\t\t});\n\n\t}\n\n\t_createInfoWindow({\n\t\tmarker,\n\t\tcontent = ''\n\t}) {\n\t\tif (content) {\n\t\t\tconst infoWindow = new google.maps.InfoWindow({\n\t\t\t\tcontent: content\n\t\t\t});\n\n\t\t\tmarker.addListener('click', () => {\n\t\t\t\tif (this.prevInfoWindow) {\n\t\t\t\t\tthis.prevInfoWindow.close();\n\t\t\t\t}\n\n\t\t\t\tthis.prevInfoWindow = infoWindow;\n\n\t\t\t\tinfoWindow.open(this.map, marker);\n\t\t\t});\n\t\t}\n\t}\n\n\t_centerMap(zoom) {\n\t\tconst bounds = new google.maps.LatLngBounds();\n\n\t\t$.each(this.map.markers, function () {\n\t\t\tconst item = this;\n\n\t\t\tif (typeof item.position !== 'undefined') {\n\n\t\t\t\tconst\n\t\t\t\t\tlat = item.position.lat(),\n\t\t\t\t\tlng = item.position.lng(),\n\t\t\t\t\tnewZoom = new google.maps.LatLng(lat, lng);\n\n\t\t\t\tbounds.extend(newZoom);\n\t\t\t}\n\t\t});\n\n\t\t// center single marker\n\t\tif (this.map.markers.length == 1) {\n\t\t\tthis.map.setCenter(bounds.getCenter());\n\t\t\tthis.map.setZoom(zoom);\n\t\t} else { // fit bounds to multiple markers\n\t\t\tthis.map.fitBounds(bounds);\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 41. grid */\n/* ======================================================================== */\nclass Grid extends BaseComponent {\n\n constructor({\n target,\n scope\n }) {\n super({\n target,\n scope\n });\n this.lazyInstance = new LazyLoad({\n scope\n });\n this.$lazyImages = this.$target.find('img[data-src]');\n this.isotopeInstance;\n this._layoutImages();\n this._layoutLazyImages();\n\n return this.isotopeInstance;\n }\n\n run() {\n this.isotopeInstance = this.$target.isotope({\n itemSelector: '.js-grid__item',\n columnWidth: '.js-grid__sizer',\n percentPosition: true,\n horizontalOrder: true,\n });\n }\n\n _layoutImages() {\n this.$target\n .imagesLoaded()\n .progress(() => {\n this.isotopeInstance.isotope('layout');\n })\n .done(() => {\n setTimeout(() => {\n this.isotopeInstance.isotope('layout');\n }, 300);\n });\n }\n\n _layoutLazyImages() {\n this.lazyInstance.loadImages({\n target: this.$lazyImages,\n callback: () => {\n this._layoutImages();\n }\n });\n }\n\n}\n","/* ======================================================================== */\n/* 42. Header */\n/* ======================================================================== */\nclass Header {\n constructor() {\n this.$header = $('#page-header');\n this.$controls = this.$header.find('.header__controls');\n this.$stickyHeader = this.$header.filter('.js-header-sticky');\n this.$adminBar = $('#wpadminbar');\n this.$burger = $('#js-burger');\n this.$curtain = $('#js-header-curtain');\n this.$curtainTransition = $('#js-header-curtain-transition');\n this.$overlay = $('.header__wrapper-overlay-menu');\n this.burgerOpenClass = 'header__burger_opened';\n this.$headerColumns = this.$header.find('.header__col');\n this.$headerLeft = this.$header.find('.header__col-left');\n this.$overlayWidgets = this.$header.find('.header__wrapper-overlay-widgets');\n\n // Menu\n this.$menuOverlay = this.$overlay.find('.js-menu-overlay');\n this.$menuLinks = this.$overlay.find('.menu-overlay > li > a');\n this.selectedClass = 'selected';\n this.openClass = 'opened';\n\n // Submenu\n this.$submenu = this.$overlay.find('.menu-overlay .sub-menu');\n this.$submenuButton = $('#js-submenu-back');\n this.$submenuOpeners = this.$overlay.find('.menu-item-has-children > a');\n this.$submenuLinks = this.$submenu.find('> li > a');\n\n // Sticky\n this.stickyScene = undefined;\n this.stickyClass = 'header_sticky';\n\n this.setMenu();\n this.run();\n }\n\n run() {\n this.overlayBackground = this.$header.attr('data-arts-header-overlay-background');\n this.stickyTheme = this.$stickyHeader.attr('data-arts-header-sticky-theme');\n\n if (typeof this.stickyScene !== 'undefined') {\n this.stickyScene.destroy(true);\n }\n\n this.timeline = new gsap.timeline();\n\n this._correctTopOffset();\n this._stick();\n this._bindEvents();\n }\n\n setBurger(open = false) {\n if (open) {\n this.$header.addClass(this.openClass);\n this.$burger.addClass(this.burgerOpenClass);\n } else {\n this.$header.removeClass(this.openClass);\n this.$burger.removeClass(this.burgerOpenClass);\n }\n }\n\n setMenu() {\n \n if (this.$overlay.length) {\n gsap.set(this.$overlay, {\n autoAlpha: 0,\n display: 'none'\n });\n }\n if (this.$submenu.length) {\n gsap.set(this.$submenu, {\n autoAlpha: 0\n });\n }\n \n if (this.$submenuButton.length) {\n gsap.set(this.$submenuButton, {\n autoAlpha: 0\n });\n }\n \n this.$submenu.removeClass(this.openClass);\n this.$header.removeClass(this.openClass);\n this.$burger.removeClass(this.burgerOpenClass);\n \n if (this.$menuLinks.length) {\n gsap.effects.hideLines(this.$menuLinks, {\n autoAlpha: 1,\n y: '-100%',\n duration: 0,\n });\n }\n \n if (this.$submenuLinks.length) {\n gsap.effects.hideLines(this.$submenuLinks, {\n autoAlpha: 1,\n y: '-100%',\n duration: 0,\n });\n }\n \n if (this.$overlayWidgets.length) {\n gsap.effects.hideLines(this.$overlayWidgets, {\n autoAlpha: 1,\n y: this._isMediumScreen() ? '-100%' : '100%',\n duration: 0\n });\n }\n \n if (this.$curtain.length) {\n gsap.set(this.$curtain, {\n display: 'none'\n });\n }\n \n }\n\n openMenu() {\n return this.timeline\n .clear()\n .set(this.$curtain, {\n display: 'block',\n })\n .setCurtain(this.$curtain, {\n background: this.overlayBackground,\n y: '100%'\n })\n .set(this.$overlay, {\n autoAlpha: 1,\n display: 'flex'\n })\n .add([() => {\n this._setTransition(true);\n this._unstick();\n\n }])\n .set(this.$adminBar, {\n position: 'fixed',\n })\n .to(this.$headerLeft, {\n duration: 1.2,\n x: 30,\n autoAlpha: 0,\n ease: 'expo.inOut'\n }, 'start')\n .moveCurtain(this.$curtain, {\n duration: 1.2,\n y: '0%',\n }, 'start')\n .add(() => {\n this.$header.addClass(this.openClass);\n }, '-=0.6')\n .add([\n gsap.effects.animateLines(this.$menuLinks, {\n stagger: {\n amount: 0.2,\n from: 'end'\n },\n duration: 1.2,\n ease: 'power4.out'\n }),\n gsap.effects.animateLines(this.$overlayWidgets, {\n stagger: {\n amount: 0.2,\n from: this._isMediumScreen() ? 'end' : 'start'\n },\n duration: 1.2,\n ease: 'power4.out'\n })\n ], '-=0.6')\n .add(() => {\n this._setTransition(false);\n }, '-=0.6')\n .timeScale(window.theme.animations.timeScale.overlayMenuOpen || 1);\n }\n\n closeMenu(force = false) {\n\n if (!this.$header.hasClass(this.openClass) && !force) {\n return this.timeline;\n }\n\n const\n $submenuLinksCurrent = this.$submenu.filter(`.${this.openClass}`).find(this.$submenuLinks);\n\n return this.timeline\n .clear()\n .add(() => {\n this._setTransition(true);\n this._stick();\n\n if (typeof window.SB !== 'undefined' && window.SB.offset.y >= 1) {\n this.$stickyHeader.addClass(this.stickyClass);\n }\n })\n .to(this.$headerLeft, {\n duration: 1.2,\n x: 0,\n autoAlpha: 1,\n ease: 'expo.inOut'\n }, 'start')\n .to(this.$submenuButton, {\n x: -10,\n autoAlpha: 0,\n duration: 0.3,\n ease: 'expo.inOut'\n }, 'start')\n .moveCurtain(this.$curtain, {\n duration: 1.2,\n y: '-100%',\n curve: 'bottom'\n }, 'start')\n .add(() => {\n this.$header.removeClass(this.openClass);\n }, '-=0.9')\n .add(gsap.effects.hideLines([$submenuLinksCurrent, this.$menuLinks, this.$overlayWidgets], {\n stagger: {\n amount: 0,\n from: 'end'\n },\n y: '100%',\n duration: 0.6,\n }), 'start')\n .add(() => {\n this.$header.attr('data-arts-header-animation', '');\n }, '-=0.3')\n .add(() => {\n this.setMenu();\n })\n .timeScale(window.theme.animations.timeScale.overlayMenuClose || 1);\n }\n\n closeMenuTransition(force = false) {\n\n if (!this.$header.hasClass(this.openClass) && !force) {\n return this.timeline;\n }\n\n const\n $submenuLinksCurrent = this.$submenu.filter(`.${this.openClass}`).find(this.$submenuLinks);\n\n return this.timeline\n .clear()\n .add(() => {\n this._setTransition(true);\n // Scroll.restoreScrollTop();\n this._stick();\n\n if (typeof window.SB !== 'undefined' && window.SB.offset.y >= 1) {\n this.$stickyHeader.addClass(this.stickyClass);\n }\n })\n .to(this.$headerLeft, {\n duration: 1.2,\n x: 0,\n autoAlpha: 1,\n ease: 'expo.inOut'\n }, 'start')\n .to(this.$submenuButton, {\n x: -10,\n autoAlpha: 0,\n duration: 0.3,\n ease: 'expo.inOut'\n }, 'start')\n .add(() => {\n this.$header.removeClass(this.openClass);\n }, '-=0.9')\n .add(gsap.effects.hideLines([$submenuLinksCurrent, this.$menuLinks, this.$overlayWidgets], {\n stagger: {\n amount: 0,\n from: 'end'\n },\n y: '100%',\n duration: 0.6,\n }), 'start')\n .add(() => {\n this.$header.attr('data-arts-header-animation', '');\n }, '-=0.3')\n .add(() => {\n this.setMenu();\n });\n }\n\n _bindEvents() {\n const self = this;\n\n if (this.$adminBar.length) {\n window.$window.on('resize', debounce(this._correctTopOffset, 250));\n }\n\n if (this.$burger.length) {\n this.$burger.off('click').on('click', (e) => {\n e.preventDefault();\n\n if (this._isInTransition()) {\n return;\n }\n\n if (this.$burger.hasClass(this.burgerOpenClass)) {\n this.closeMenu();\n this.$burger.removeClass(this.burgerOpenClass);\n } else {\n this.openMenu();\n this.$burger.addClass(this.burgerOpenClass);\n }\n });\n }\n\n if (this.$submenuOpeners.length) {\n this.$submenuOpeners.on('click', function (e) {\n e.preventDefault();\n\n if (self._isInTransition()) {\n return;\n }\n\n const\n $el = $(this),\n $currentMenu = $el.parents('ul'),\n $submenu = $el.next('.sub-menu');\n\n $el.addClass(self.linkSelectedClass);\n\n self._openSubmenu({\n submenu: $submenu,\n currentMenu: $currentMenu\n });\n });\n }\n\n if (this.$submenuButton.length) {\n this.$submenuButton.on('click', (e) => {\n e.preventDefault();\n\n if (self._isInTransition()) {\n return;\n }\n\n const $submenu = this.$submenu.filter(`.${this.openClass}`),\n $prevMenu = $submenu.parent('li').parent('ul');\n\n self._closeSubmenu({\n submenu: $submenu,\n currentMenu: $prevMenu\n });\n });\n }\n\n window.$window\n .on('arts/preloader/end', () => {\n gsap.to(this.$headerColumns, {\n autoAlpha: 1,\n stagger: 0.2,\n duration: 0.6\n });\n })\n .on('arts/barba/transition/start', () => {\n this.$controls.addClass('pointer-events-none');\n this._unstick();\n })\n .on('arts/barba/transition/end', () => {\n this.$controls.removeClass('pointer-events-none');\n });\n }\n\n isOverlayOpened() {\n return this.$header.hasClass(this.openClass);\n }\n\n _isMediumScreen() {\n return window.Modernizr.mq('(max-width: 991px)');\n }\n\n _isInTransition() {\n return this.$header.attr('data-arts-header-animation') === 'intransition';\n }\n\n _setTransition(inTransition = true) {\n return this.$header.attr('data-arts-header-animation', inTransition ? 'intransition' : '');\n }\n\n _correctTopOffset() {\n const top = this.$adminBar.height() || 0;\n\n gsap.to(this.$header, {\n duration: 0.6,\n top\n });\n }\n\n _stick() {\n if (!this.$stickyHeader.length) {\n return;\n }\n\n this.stickyScene = new $.ScrollMagic.Scene({\n offset: '1px',\n })\n .setClassToggle(this.$stickyHeader, [this.stickyTheme, this.stickyClass].join(' '))\n .addTo(window.SMController);\n }\n\n _unstick() {\n if (!this.$stickyHeader.length || !this.stickyScene) {\n return;\n }\n\n this.stickyScene.destroy(true);\n this.stickyScene = undefined;\n this.$stickyHeader.removeClass(this.stickyClass);\n }\n\n _openSubmenu({\n submenu,\n currentMenu\n }) {\n const\n $currentLinks = currentMenu.find('> li > a .menu-overlay__item-wrapper'),\n $submenuLinks = submenu.find('> li > a .menu-overlay__item-wrapper');\n\n this.timeline\n .clear()\n .add(() => {\n this._setTransition(true);\n this.$submenu.removeClass(this.openClass);\n submenu.not(this.$menuOverlay).addClass(this.openClass);\n\n if (this.$submenu.hasClass(this.openClass)) {\n gsap.to(this.$submenuButton, {\n autoAlpha: 1,\n x: 0,\n duration: 0.3\n });\n\n if (this._isMediumScreen()) {\n gsap.effects.hideLines(this.$overlayWidgets, {\n stagger: {\n amount: 0.1,\n from: 'end'\n },\n y: '100%',\n duration: 1.2,\n ease: 'power4.out',\n });\n }\n } else {\n gsap.to(this.$submenuButton, {\n autoAlpha: 0,\n x: -10,\n duration: 0.3\n });\n\n gsap.effects.animateLines(this.$overlayWidgets, {\n stagger: {\n amount: 0.2,\n from: 'end'\n },\n duration: 1.2,\n ease: 'power4.out',\n });\n }\n })\n .set(submenu, {\n autoAlpha: 1,\n zIndex: 100\n })\n .add(gsap.effects.hideLines($currentLinks, {\n stagger: {\n amount: 0.2,\n from: 'end'\n },\n y: '100%',\n duration: 1.2,\n ease: 'power4.out'\n }))\n .add(gsap.effects.animateLines($submenuLinks, {\n stagger: {\n amount: 0.2,\n from: 'end'\n },\n duration: 1.2,\n ease: 'power4.out'\n }), '-=1.0')\n .add(() => {\n this.$menuLinks.removeClass(this.openClass);\n this._setTransition(false);\n }, '-=0.6')\n .timeScale(1.25);\n }\n\n _closeSubmenu({\n submenu,\n currentMenu\n }) {\n const\n $currentLinks = currentMenu.find('> li > a .menu-overlay__item-wrapper'),\n $submenuLinks = submenu.find('> li > a .menu-overlay__item-wrapper');\n\n this.timeline\n .clear()\n .add(() => {\n this._setTransition(true);\n this.$submenu.removeClass(this.openClass);\n currentMenu.not(this.$menuOverlay).addClass(this.openClass);\n\n if (this.$submenu.hasClass(this.openClass)) {\n gsap.to(this.$submenuButton, {\n autoAlpha: 1,\n x: 0,\n duration: 0.3\n });\n\n if (this._isMediumScreen()) {\n gsap.effects.hideLines(this.$overlayWidgets, {\n stagger: {\n amount: 0.1,\n from: 'start'\n },\n y: '100%',\n duration: 1.2,\n ease: 'power4.out',\n });\n }\n } else {\n gsap.to(this.$submenuButton, {\n autoAlpha: 0,\n x: -10,\n duration: 0.3\n });\n\n gsap.effects.animateLines(this.$overlayWidgets, {\n stagger: {\n amount: 0.2,\n from: 'start'\n },\n duration: 1.2,\n ease: 'power4.out',\n });\n }\n })\n .set(submenu, {\n zIndex: -1\n })\n .add(gsap.effects.animateLines($currentLinks, {\n y: '100%',\n duration: 0\n }), 'start')\n .add(gsap.effects.hideLines($submenuLinks, {\n stagger: {\n amount: 0.1,\n from: 'start'\n },\n y: '-100%',\n duration: 1.2,\n ease: 'power4.out'\n }))\n .add(\n gsap.effects.animateLines($currentLinks, {\n stagger: {\n amount: 0.2,\n from: 'start'\n },\n duration: 1.2,\n ease: 'power4.out'\n }), '-=1.0')\n .set(submenu, {\n autoAlpha: 0,\n })\n .add(() => {\n this._setTransition(false);\n }, '-=0.6')\n .timeScale(1.25);\n }\n}\n","/* ======================================================================== */\n/* 43. lazyLoad */\n/* ======================================================================== */\nclass LazyLoad {\n\tconstructor({\n\t\tscope,\n\t\tsetPaddingBottom = false,\n\t\trun = false\n\t}) {\n\t\tthis.$scope = scope || window.$document;\n\t\tthis.$images = this.$scope.find('img[data-src]:not(.swiper-lazy)');\n\t\tthis.$backgrounds = this.$scope.find('.lazy-bg[data-src]');\n\n\t\tif (setPaddingBottom) {\n\t\t\tthis.setPaddingBottom();\n\t\t}\n\n\t\tif (run) {\n\t\t\tthis.run();\n\t\t}\n\n\t\tthis._bindEvents();\n\n\t}\n\n\t_bindEvents() {\n\t\twindow.$window.on('arts/barba/transition/start arts/barba/transition/end arts/grid/filter', () => {\n\t\t\tthis.run();\n\t\t});\n\t}\n\n\tsetPaddingBottom() {\n\t\tthis.$images.each(function () {\n\t\t\tconst $el = $(this),\n\t\t\t\t$elParent = $el.parent(),\n\t\t\t\telWidth = $el.attr('width') || 0,\n\t\t\t\telHeight = $el.attr('height') || 0,\n\t\t\t\telPB = parseFloat((elHeight / elWidth) * 100); // padding-bottom hack\n\n\t\t\t// we need both width and height of element\n\t\t\t// to calculate proper value for \"padding-bottom\" hack\n\t\t\tif (!elWidth || !elHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// position image absolutely\n\t\t\tgsap.set($el, {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t});\n\n\t\t\t// set padding-bottom to the parent element so it will\n\t\t\t// create the needed space for the image\n\t\t\tgsap.set($elParent, {\n\t\t\t\tposition: 'relative',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tpaddingBottom: elPB + '%'\n\t\t\t});\n\t\t});\n\t}\n\n\trun() {\n\t\tthis.loadImages({\n\t\t\ttarget: this.$images\n\t\t});\n\t\tthis.loadBackgrounds({\n\t\t\ttarget: this.$backgrounds\n\t\t});\n\t}\n\n\tloadBackgrounds({\n\t\ttarget,\n\t\tcallback\n\t}) {\n\t\tif (target && target.length) {\n\t\t\tconst instance = target.Lazy({\n\t\t\t\tthreshold: 1000,\n\t\t\t\tchainable: false,\n\t\t\t\tafterLoad: (el) => {\n\t\t\t\t\t$(el).addClass('lazy-bg_loaded');\n\n\t\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetTimeout(() => {\n\t\t\t\tinstance.update();\n\t\t\t}, 50);\n\t\t}\n\t}\n\n\tloadImages({\n\t\ttarget,\n\t\tcallback\n\t}) {\n\t\tif (target && target.length) {\n\t\t\tconst instance = target.Lazy({\n\t\t\t\tthreshold: 1000,\n\t\t\t\tchainable: false,\n\t\t\t\tafterLoad: (el) => {\n\t\t\t\t\tconst\n\t\t\t\t\t\t$el = $(el),\n\t\t\t\t\t\t$elParent = $el.parent();\n\n\t\t\t\t\t$el.imagesLoaded({\n\t\t\t\t\t\tbackground: true\n\t\t\t\t\t}).always(() => {\n\t\t\t\t\t\t$elParent.addClass('lazy_loaded');\n\t\t\t\t\t});\n\n\t\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetTimeout(() => {\n\t\t\t\tinstance.update();\n\t\t\t}, 50);\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 44. Magnetic */\n/* ======================================================================== */\nclass Magnetic extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget,\n\t\tdistance\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t\tthis.defaultDistance = 40;\n\t\tthis.distance = distance || this.defaultDistance;\n\t}\n\n\trun() {\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\tthis.$scope.on('mousemove', (event) => {\n\t\t\tthis.$target.each(function () {\n\t\t\t\tconst $el = $(this);\n\n\t\t\t\tself._magnifyElement({\n\t\t\t\t\telement: $el,\n\t\t\t\t\tevent,\n\t\t\t\t\tdistance: $el.data('arts-magnetic-distance') || self.distance\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\t_magnifyElement({\n\t\telement,\n\t\tevent,\n\t\tdistance\n\t}) {\n\n\t\tconst\n\t\t\tcenterX = element.offset().left + element.width() / 2,\n\t\t\tcenterY = element.offset().top + element.height() / 2,\n\t\t\tdeltaX = Math.floor((centerX - event.pageX)) * -.5,\n\t\t\tdeltaY = Math.floor((centerY - event.pageY)) * -.5,\n\t\t\ttargetDistance = this._calcDistance({\n\t\t\t\telement: element,\n\t\t\t\tmouseX: event.pageX,\n\t\t\t\tmouseY: event.pageY\n\t\t\t});\n\n\t\tif (targetDistance < distance) {\n\t\t\tgsap.to(element, {\n\t\t\t\tduration: 0.3,\n\t\t\t\ty: deltaY,\n\t\t\t\tx: deltaX\n\t\t\t});\n\t\t} else {\n\t\t\tgsap.to(element, {\n\t\t\t\tduration: 0.3,\n\t\t\t\ty: 0,\n\t\t\t\tx: 0\n\t\t\t});\n\t\t}\n\n\t}\n\n\t_calcDistance({\n\t\telement,\n\t\tmouseX,\n\t\tmouseY\n\t}) {\n\t\treturn Math.floor(Math.sqrt(Math.pow(mouseX - (element.offset().left + (element.width() / 2)), 2) + Math.pow(mouseY - (element.offset().top + (element.height() / 2)), 2)));\n\t}\n\n}\n","/* ======================================================================== */\n/* 45. PageIndicator */\n/* ======================================================================== */\nconst PageIndicator = function ($scope) {\n\n\tconst\n\t\t$target = $scope.find('.js-page-indicator'),\n\t\t$triggers = $scope.find('.js-page-indicator-trigger');\n\n\tif (!$target.length) {\n\t\treturn;\n\t}\n\n\t$triggers.each(function () {\n\n\t\tlet $current = $(this);\n\n\t\t$current\n\t\t\t.on('mouseenter touchstart', function () {\n\n\t\t\t})\n\t\t\t.on('mouseleave touchend', function () {\n\n\t\t\t});\n\n\t});\n\n}\n","/* ======================================================================== */\n/* 46. ArtsParallax */\n/* ======================================================================== */\nclass ArtsParallax {\n\n constructor({\n target,\n factor,\n ScrollMagicController,\n SmoothScrollBarController,\n }) {\n this.$target = target;\n this.factor = factor || 0.3;\n this.SMController = ScrollMagicController;\n this.SBController = SmoothScrollBarController;\n this.run();\n }\n\n run() {\n const self = this;\n\n this.$target.each(function () {\n const\n $el = $(this),\n $parallaxTarget = $el.find('> *').length ? $el.find('> *') : $el,\n distanceToY = $el.data('arts-parallax-y') || 0,\n distanceToX = $el.data('arts-parallax-x') || 0,\n factorEl = parseFloat($el.data('arts-parallax-factor')) || parseFloat(self.factor);\n\n let\n tl = new gsap.timeline(),\n factorScale = 1 + Math.abs(factorEl),\n factorTo = Math.abs(factorEl) * 100,\n factorFrom = -1 * Math.abs(factorEl) * 100,\n sceneDuration = window.innerHeight + $parallaxTarget.height() * (factorScale * 2);\n\n // wrong calculated height\n if (sceneDuration - window.innerHeight < 50) {\n sceneDuration = window.innerHeight + $el.parent().height() * (factorScale * 2);\n }\n\n if (!$parallaxTarget.length && !distanceToX && !distanceToY) {\n return;\n }\n\n if (factorFrom > 0) {\n factorScale = factorScale * factorScale;\n factorTo = self.factor * 100;\n }\n\n // normal element (no scale)\n if ($el.data('arts-parallax') === 'element') {\n tl = self._getParallaxTimeline({\n element: $el,\n toY: distanceToY,\n toX: distanceToX\n });\n } else { // background or (do scale to prevent image edges exposing)\n tl = self._getParallaxTimeline({\n element: $parallaxTarget,\n fromX: '0%',\n fromY: factorFrom + '%',\n toY: factorTo + '%',\n toX: '0%',\n scale: factorScale\n });\n }\n\n self._addSceneToScrollMagic({\n trigger: $el,\n duration: sceneDuration,\n timeline: tl\n });\n });\n }\n\n _getParallaxTimeline({\n element,\n fromY,\n fromX,\n toY,\n toX,\n scale\n }) {\n return new gsap.timeline().fromTo(element, {\n y: fromY || 0,\n x: fromX || 0,\n scale: scale || 1,\n transformOrigin: 'center center',\n }, {\n y: toY || 0,\n x: toX || 0,\n force3D: true,\n ease: 'linear.none',\n });\n }\n\n _addSceneToScrollMagic({\n trigger,\n duration,\n timeline,\n }) {\n return new ScrollMagic.Scene({\n triggerElement: trigger,\n triggerHook: 1,\n duration: duration\n })\n .setTween(timeline)\n .addTo(this.SMController)\n .update(true);\n }\n\n}\n","/* ======================================================================== */\n/* 47. Preloader */\n/* ======================================================================== */\nfunction Preloader({\n scope = window.$document,\n target = $('#js-preloader'),\n curtain = {\n element: $('#js-page-transition-curtain'),\n background: $('.section-masthead').attr('data-background-color')\n },\n cursor = {\n element: $('#js-cursor'),\n offset: {\n top: 0.0,\n left: 0.0\n }\n },\n counter = {\n easing: 'power4.out',\n duration: 25,\n start: 0,\n target: 100,\n prefix: '',\n suffix: ''\n }\n}) {\n\n const self = this;\n this.$scope = scope;\n this.$target = target;\n\n // Preloader\n this.$header = this.$target.find('.preloader__header');\n this.$content = this.$target.find('.preloader__content');\n this.$wrapperCounter = this.$target.find('.preloader__counter');\n this.$counter = this.$target.find('.preloader__counter-current');\n this.$wrapperCircle = this.$target.find('.preloader__circle');\n\n // Cursor\n this.cursor = cursor;\n this.cursor.centerX = parseFloat(this.$wrapperCircle.innerWidth() / 2);\n this.cursor.centerY = parseFloat(this.$wrapperCircle.innerHeight() / 2);\n this.cursor.posX = 0;\n this.cursor.posY = 0;\n this.cursor.follower = {};\n this.cursor.follower.element = this.cursor.element.find('.cursor__follower');\n this.cursor.follower.inner = this.cursor.element.find('#inner');\n this.cursor.follower.outer = this.cursor.element.find('#outer');\n this.cursor.follower.size = {\n element: {\n width: this.cursor.follower.element.width(),\n height: this.cursor.follower.element.height()\n },\n inner: {\n cx: this.cursor.follower.inner.attr('cx'),\n cy: this.cursor.follower.inner.attr('cy'),\n r: this.cursor.follower.inner.attr('r')\n },\n outer: {\n cx: this.cursor.follower.outer.attr('cx'),\n cy: this.cursor.follower.outer.attr('cy'),\n r: this.cursor.follower.outer.attr('r')\n }\n }; // original circles dimensions\n\n // Mouse Coordinates\n this.mouseX = window.mouseX || window.innerWidth / 2;\n this.mouseY = window.mouseY || window.innerHeight / 2;\n\n // Curtain\n this.curtain = curtain;\n this.curtain.svg = this.curtain.element.find('.curtain-svg');\n this.curtain.rect = this.curtain.element.find('.curtain__rect');\n\n // Counter\n this.counter = counter;\n this.counter.val = 0;\n\n // Main Preloader Timeline\n this.timeline = new gsap.timeline({});\n\n // Animation Tweens\n this.tweens = {\n drawCircle: gsap.fromTo(this.cursor.follower.outer, {\n rotate: 90,\n drawSVG: '100% 100%',\n transformOrigin: 'center center',\n }, {\n drawSVG: '0% 100%',\n rotate: 0,\n transformOrigin: 'center center',\n ease: this.counter.easing,\n duration: this.counter.duration,\n paused: true,\n }),\n count: gsap.to(this.counter, {\n duration: this.counter.duration,\n val: this.counter.target,\n ease: this.counter.easing,\n paused: true,\n onUpdate: () => {\n const value = parseFloat(this.counter.val).toFixed(0);\n this.$counter.text(this.counter.prefix + value + this.counter.suffix);\n },\n }),\n followMouse: gsap.to({}, {\n paused: true,\n duration: 0.01,\n repeat: -1,\n onRepeat: () => {\n this.cursor.posX += (window.mouseX - this.cursor.posX);\n this.cursor.posY += (window.mouseY - this.cursor.posY - this.cursor.offset.top);\n gsap.to(this.cursor.element, {\n duration: 0.3,\n top: 0,\n left: 0,\n scale: (this.cursor.posX && this.cursor.posY) ? 1 : 0,\n autoAlpha: (this.cursor.posX && this.cursor.posY) ? 1 : 0,\n x: this.cursor.posX || window.innerWidth / 2,\n y: this.cursor.posY + this.cursor.offset.top || window.innerHeight / 2,\n });\n },\n })\n };\n\n _bindEvents();\n\n this.start = () => {\n window.dispatchEvent(new CustomEvent('arts/preloader/start'));\n\n if (!this.$target.length) {\n return;\n }\n\n window.$body.addClass('cursor-progress');\n\n if (this.cursor.element.length) {\n gsap.set(this.cursor.element, {\n display: 'block',\n top: '50%',\n left: '50%',\n });\n\n gsap.set(this.cursor.follower.element, {\n width: this.$wrapperCircle.innerWidth(),\n height: this.$wrapperCircle.innerHeight(),\n });\n\n gsap.set([this.cursor.follower.inner, this.cursor.follower.outer], {\n attr: {\n cx: this.cursor.centerX,\n cy: this.cursor.centerY,\n r: this.cursor.centerX - 1,\n }\n });\n }\n\n if (this.curtain.element.length) {\n gsap.set(this.curtain.svg, {\n fill: this.curtain.background\n });\n\n gsap.set(this.curtain.rect, {\n background: this.curtain.background\n });\n\n gsap.set(window.$pageContent, {\n autoAlpha: 0\n });\n }\n\n this.timeline.add([\n this.tweens.count.play(),\n this.tweens.drawCircle.play()\n ]);\n\n }\n\n this.finish = () => {\n return new Promise((resolve, reject) => {\n if (!this.$target.length) {\n window.dispatchEvent(new CustomEvent('arts/preloader/end'));\n resolve(true);\n return;\n }\n\n this.timeline\n .clear()\n .set(this.cursor.follower.outer, {\n attr: {\n transform: ''\n }\n })\n .to(this.cursor.follower.outer, {\n drawSVG: '0% 100%',\n rotate: 0,\n transformOrigin: 'center center',\n ease: 'expo.inOut',\n duration: 1.2\n }, 'start')\n .add([\n gsap.to(this.counter, {\n duration: 1.2,\n val: this.counter.target,\n ease: 'expo.inOut',\n onUpdate: () => {\n const value = parseFloat(this.counter.val).toFixed(0);\n this.$counter.text(this.counter.prefix + value + this.counter.suffix);\n }\n }),\n ], 'start')\n .add([\n this.tweens.followMouse.play(),\n gsap.to(this.cursor.follower.element, {\n width: this.cursor.follower.size.element.width,\n height: this.cursor.follower.size.element.height,\n ease: 'expo.out',\n duration: 1.2\n }),\n gsap.to(this.cursor.follower.inner, {\n attr: this.cursor.follower.size.inner,\n ease: 'expo.out',\n duration: 1.2,\n }),\n gsap.to(this.cursor.follower.outer, {\n attr: this.cursor.follower.size.outer,\n ease: 'expo.out',\n autoAlpha: 0,\n duration: 1.2,\n }),\n ])\n .add([\n gsap.effects.moveCurtain(this.curtain.element, {\n duration: 1.2\n }),\n gsap.to(this.$content, {\n y: -30,\n delay: 0.1,\n duration: 0.8,\n ease: 'power3.inOut',\n }),\n gsap.to(this.$target, {\n delay: 0.2,\n display: 'none',\n duration: 0.8,\n ease: 'power3.inOut',\n })\n ], '-=1.2')\n .set(window.$pageContent, {\n autoAlpha: 1\n })\n .to(this.curtain.element, {\n autoAlpha: 0,\n delay: 0.4,\n duration: 0.3\n })\n .set([this.$target, this.curtain.element], {\n y: '-100%',\n display: 'none',\n })\n .set(this.cursor.element, {\n clearProps: 'top,left',\n x: '-50%',\n y: '-50%'\n })\n .add(() => {\n window.dispatchEvent(new CustomEvent('arts/preloader/end'));\n window.$body.removeClass('cursor-progress');\n this.tweens.followMouse.kill();\n resolve(true);\n }, '-=0.6');\n\n });\n }\n\n function _bindEvents() {\n self.$scope.on('mousemove', (e) => {\n window.mouseX = e.clientX;\n window.mouseY = e.clientY;\n });\n }\n\n}\n","/* ======================================================================== */\n/* 48. PSWPAlbum */\n/* ======================================================================== */\nclass PSWPAlbum extends Pswp {\n constructor({\n scope,\n target,\n options\n }) {\n super({\n scope,\n target,\n options\n });\n\n this.hashData = this._photoswipeParseHash();\n if (this.$target.length && this.hashData.pid && this.hashData.gid) {\n this._openPhotoSwipe({\n index: this.hashData.pid,\n galleryElement: this.$target.eq(this.hashData.gid - 1),\n disableAnimation: true,\n fromURL: true\n });\n }\n }\n\n run($el) {\n this._bindClickAlbumLinks($el);\n }\n\n _bindClickAlbumLinks($gallery) {\n $gallery.on('click', (e) => {\n e.preventDefault();\n this._openPhotoSwipe({\n index: 0,\n galleryElement: $gallery\n });\n });\n }\n\n _getItems($galleryElement) {\n const\n $items = $galleryElement.find('.js-album__items img'),\n items = [];\n\n $items.each(function () {\n const\n $el = $(this),\n item = {\n src: $el.attr('data-album-src'),\n w: $el.attr('width'),\n h: $el.attr('height'),\n title: $el.attr('data-title'),\n };\n items.push(item);\n });\n return items;\n }\n}\n","/* ======================================================================== */\n/* 49. PSWPGallery */\n/* ======================================================================== */\nclass PSWPGallery extends Pswp {\n constructor({\n scope,\n target,\n options\n }) {\n super({\n scope,\n target,\n options\n });\n\n this.hashData = this._photoswipeParseHash();\n if (this.$target.length && !window.theme.ajax.enabled && this.hashData.pid && this.hashData.gid) {\n this._openPhotoSwipe({\n index: this.hashData.pid,\n galleryElement: this.$target.eq(this.hashData.gid - 1),\n disableAnimation: true,\n fromURL: true\n });\n }\n }\n\n run($el) {\n this._bindClickGalleryLinks($el);\n }\n\n _bindClickGalleryLinks($gallery) {\n const self = this,\n $links = $gallery.find('a');\n\n $links.on('click', function (e) {\n const\n tl = new gsap.timeline(),\n $el = $(this),\n $parallaxEl = $el.find('[data-arts-parallax] > *'),\n scale = gsap.getProperty($parallaxEl.get(0), 'scale'),\n index = $links.index($el);\n\n e.preventDefault();\n\n tl\n .add(() => {\n window.$body.addClass('pointer-events-none');\n })\n .set(self.$container, {\n transition: 'none'\n })\n .to($parallaxEl, {\n scale: 1,\n duration: 0.3,\n })\n .add(() => {\n self._openPhotoSwipe({\n index,\n galleryElement: $gallery\n });\n })\n .set($parallaxEl, {\n delay: 0.1,\n scale: scale,\n overwrite: 'all',\n })\n .set($el, {\n autoAlpha: 1\n })\n .add(() => {\n window.$body.removeClass('pointer-events-none');\n });\n });\n }\n}\n","/* ======================================================================== */\n/* 50. SmoothScroll */\n/* ======================================================================== */\nclass SmoothScroll {\n\n\tconstructor({\n\t\ttarget = $('.js-smooth-scroll'),\n\t\tadminBar,\n\t\tabsoluteElements,\n\t\tfixedElements\n\t}) {\n\t\tthis.$container = target;\n\t\tthis.$WPadminBar = adminBar;\n\t\tthis.$absoluteElements = absoluteElements;\n\t\tthis.$fixedElements = fixedElements;\n\n\t\tthis.run();\n\t}\n\n\trun() {\n\n\t\tif (\n\t\t\ttypeof window.Scrollbar === 'undefined' ||\n\t\t\t!window.theme.smoothScroll.enabled ||\n\t\t\t!this.$container ||\n\t\t\t!this.$container.length ||\n\t\t\ttypeof window.elementor !== 'undefined' || // don't launch in Elementor edit mode\n\t\t\t(window.Modernizr.touchevents && !this.$container.hasClass('js-smooth-scroll_enable-mobile')) || // don't launch on touch devices\n\t\t\twindow.Modernizr.touchevents\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\twindow.SB.destroy();\n\t\t}\n\n\t\tthis._registerPlugins();\n\t\tthis.$container.addClass('smooth-scroll');\n\n\t\twindow.SB = window.Scrollbar.init(this.$container[0], window.theme.smoothScroll);\n\n\t\tthis._emitNativeScrollEvents();\n\n\t\ttry {\n\t\t\tthis._handleAnchorsScrolling();\n\t\t} catch (error) {\n\t\t\t\n\t\t}\n\n\t\tif (typeof this.$WPadminBar !== 'undefined' && this.$WPadminBar.length) {\n\t\t\tthis._correctWPAdminBar();\n\t\t}\n\n\t\tif (typeof this.$absoluteElements !== 'undefined' && this.$absoluteElements.length) {\n\t\t\tthis._correctAbsolutePositionElements();\n\t\t}\n\n\t\tif (typeof this.$fixedElements !== 'undefined' && this.$fixedElements.length) {\n\t\t\tthis._correctFixedPositionElements();\n\t\t}\n\n\t}\n\n\t_registerPlugins() {\n\t\tif (window.theme.smoothScroll.plugins.edgeEasing && typeof SoftscrollPlugin !== 'undefined') {\n\t\t\twindow.Scrollbar.use(SoftscrollPlugin);\n\t\t}\n\t}\n\n\t_emitNativeScrollEvents() {\n\t\tconst scrollEvt = new CustomEvent('scroll');\n\n\t\twindow.SB.addListener((e) => {\n\t\t\twindow.pageYOffset = e.offset.y;\n\t\t\twindow.pageXOffset = e.offset.x;\n\t\t\twindow.dispatchEvent(scrollEvt);\n\t\t});\n\t}\n\n\t_handleAnchorsScrolling() {\n\t\t$('a[href*=\"#\"]:not([href=\"#\"])').each(function () {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\t$el = $($current.attr('href'));\n\t\t\t\n\t\t\tif ($el.length) {\n\t\t\t\t$current.on('click', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\twindow.SB.scrollIntoView($el.get(0));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_correctWPAdminBar() {\n\t\tif (this.$WPadminBar.length) {\n\t\t\twindow.$html.css({\n\t\t\t\toverflow: 'hidden'\n\t\t\t});\n\t\t}\n\t}\n\n\t_correctAbsolutePositionElements() {\n\t\tconst barHeight = (this.$WPadminBar.length && this.$WPadminBar.height()) || 0;\n\n\t\tgsap.to(this.$absoluteElements, {\n\t\t\ty: 0,\n\t\t\tduration: 0.3\n\t\t});\n\n\t\tthis.$absoluteElements.each(function () {\n\t\t\tconst $el = $(this);\n\n\t\t\twindow.SB.addListener((scrollbar) => {\n\t\t\t\tgsap.set($el, {\n\t\t\t\t\ty: -scrollbar.offset.y + barHeight\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\t_correctFixedPositionElements() {\n\t\tconst barHeight = (this.$WPadminBar.length && this.$WPadminBar.height()) || 0;\n\n\t\tgsap.to(this.$fixedElements, {\n\t\t\ty: 0,\n\t\t\tduration: 0.3\n\t\t});\n\n\t\tthis.$fixedElements.each(function () {\n\t\t\tconst $el = $(this);\n\n\t\t\twindow.SB.addListener((scrollbar) => {\n\t\t\t\tgsap.set($el, {\n\t\t\t\t\ty: scrollbar.offset.y + barHeight\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 51. ScrollDown */\n/* ======================================================================== */\nclass ScrollDown extends BaseComponent {\n constructor({\n target,\n scope,\n duration = 0.6\n }) {\n super({\n target,\n scope\n })\n\n this.duration = parseFloat(duration * 1000);\n this._bindEvents();\n }\n\n _bindEvents() {\n this.$target.on('click', (e) => {\n e.preventDefault();\n this._scrollDown();\n });\n }\n\n _scrollDown() {\n Scroll.scrollTo({\n x: 0,\n y: window.innerHeight,\n duration: this.duration\n });\n }\n}\n","/* ======================================================================== */\n/* 52. SectionContent */\n/* ======================================================================== */\nclass SectionContent extends ScrollAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\tset() {\n\t\tthis.$headline = this.$el.find('.section__headline');\n\t\tthis.$trigger = this.$el.find('.section-content__inner');\n\t\tthis.$button = this.$el.find('.section-content__button');\n\t\tthis.$imageInner = this.$el.find('.section-content__image');\n\t\tthis.$socialItems = this.$el.find('.social__item');\n\n\t\tgsap.set(this.$headline, {\n\t\t\tscaleX: 0\n\t\t});\n\n\t\tgsap.set(this.$button, {\n\t\t\ty: 30,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$imageInner, {\n\t\t\tscaleY: 1.5,\n\t\t\ty: '33%',\n\t\t\ttransformOrigin: 'top center',\n\t\t\tautoAlpha: 0,\n\t\t});\n\n\t\tgsap.set(this.$socialItems, {\n\t\t\ty: 30,\n\t\t\tautoAlpha: 0\n\t\t});\n\t}\n\trun() {\n\t\tconst tl = new gsap.timeline();\n\n\t\ttl\n\t\t\t.animateWords(this.$el, {\n\t\t\t\tease: 'power3.out',\n\t\t\t\tduration: 1.2,\n\t\t\t\tstagger: 0.04,\n\t\t\t}, 'start')\n\t\t\t.to(this.$socialItems, {\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tstagger: 0.05,\n\t\t\t\tduration: 0.6\n\t\t\t}, '<0.2')\n\t\t\t.animateLines(this.$el, {\n\t\t\t\texcludeEl: '.js-change-text-hover__hover .split-text__line',\n\t\t\t\tease: 'power3.out',\n\t\t\t\tduration: 1.2,\n\t\t\t\tstagger: 0.06,\n\t\t\t}, '<0.2')\n\t\t\t.animateHeadline(this.$headline, 'start')\n\t\t\t.to(this.$button, {\n\t\t\t\tduration: 0.6,\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, '<0.2');\n\n\t\tthis._createScene({\n\t\t\telement: this.$el,\n\t\t\ttimeline: tl,\n\t\t\tcustomTrigger: this.$trigger\n\t\t});\n\n\t\tif (this.$imageInner && this.$imageInner.length) {\n\t\t\tconst tlImage = new gsap.timeline();\n\n\t\t\ttlImage.to(this.$imageInner, {\n\t\t\t\tduration: 0.9,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: '0%',\n\t\t\t\tforce3D: true,\n\t\t\t\tscaleY: 1,\n\t\t\t\tease: 'power3.out',\n\t\t\t});\n\n\t\t\tthis._createScene({\n\t\t\t\telement: this.$imageInner,\n\t\t\t\ttriggerHook: 1,\n\t\t\t\treveal: false,\n\t\t\t\ttimeline: tlImage,\n\t\t\t});\n\t\t}\n\n\t}\n}\n","/* ======================================================================== */\n/* 53. SectionGrid */\n/* ======================================================================== */\nclass SectionGrid extends ScrollAnimation {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\t}\n\n\tset() {\n\n\t\tthis.$items = this.$el.find('.section-grid__item');\n\t\tthis.$filter = this.$el.find('.js-filter');\n\t\tthis.$filterUnderline = this.$filter.find('.filter__underline');\n\t\tthis.$grid = this.$el.find('.js-grid');\n\n\t\tgsap.set(this.$items, {\n\t\t\tscaleY: 1.5,\n\t\t\ty: '33%',\n\t\t\ttransformOrigin: 'top center',\n\t\t\tautoAlpha: 0,\n\t\t});\n\n\t\tgsap.set(this.$el, {\n\t\t\tautoAlpha: 1\n\t\t});\n\n\t\tgsap.set(this.$filterUnderline, {\n\t\t\tautoAlpha: 1\n\t\t});\n\n\t\tthis._bindGridFilter();\n\t}\n\n\trun() {\n\t\tconst\n\t\t\tmasterTL = new gsap.timeline(),\n\t\t\tcolsDesktop = parseInt(this.$el.data('grid-columns'), 10) || 1,\n\t\t\tcolsTablet = parseInt(this.$el.data('grid-columns-tablet'), 10) || 1,\n\t\t\tcolsMobile = parseInt(this.$el.data('grid-columns-mobile'), 10) || 1,\n\t\t\tlg = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.lg - 1 : 1024,\n\t\t\tmd = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.md - 1 : 767;\n\n\t\tlet cols = colsDesktop;\n\n\t\tmasterTL.to(this.$filterUnderline, {\n\t\t\tautoAlpha: 1,\n\t\t\tduration: 1.2,\n\t\t\tease: 'expo.inOut'\n\t\t});\n\n\t\tif (window.Modernizr.mq('(max-width: ' + lg + 'px)')) {\n\t\t\tcols = colsTablet;\n\t\t}\n\n\t\tif (window.Modernizr.mq('(max-width: ' + md + 'px)')) {\n\t\t\tcols = colsMobile;\n\t\t}\n\n\t\tfor (var index = 0; index < this.$items.length; index = index + cols) {\n\n\t\t\tvar\n\t\t\t\t$array = this.$items.slice(index, index + cols),\n\t\t\t\ttl = new gsap.timeline();\n\n\t\t\ttl\n\t\t\t\t.to($array, {\n\t\t\t\t\tduration: 0.9,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tforce3D: true,\n\t\t\t\t\tscaleY: 1,\n\t\t\t\t\tease: 'power3.out',\n\t\t\t\t\tstagger: 0.15\n\t\t\t\t}, 'start');\n\n\t\t\tthis._createScene({\n\t\t\t\telement: $array[0],\n\t\t\t\ttriggerHook: 0.95,\n\t\t\t\ttimeline: tl,\n\t\t\t\treveal: false\n\t\t\t});\n\n\t\t}\n\n\t\tthis._createScene({\n\t\t\telement: this.$el,\n\t\t\ttimeline: masterTL\n\t\t});\n\t}\n\n\t_bindGridFilter() {\n\t\tconst\n\t\t\tself = this,\n\t\t\tevent = new CustomEvent('arts/grid/filter');\n\n\t\tif (!this.$grid.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.filter = this._createFilter();\n\t\tthis.grid = this._createGrid();\n\n\t\tif (this.$filter.length) {\n\t\t\tthis.filter.setActiveItem(0);\n\t\t\tthis.filter.$items.on('click', function (e) {\n\t\t\t\tconst filterBy = $(this).data('filter');\n\n\t\t\t\tif (filterBy === '*') {\n\t\t\t\t\tself.$grid.removeClass('grid_filtered');\n\t\t\t\t} else {\n\t\t\t\t\tself.$grid.addClass('grid_filtered');\n\t\t\t\t}\n\n\t\t\t\te.preventDefault();\n\t\t\t\tself.grid.isotope({\n\t\t\t\t\tfilter: filterBy\n\t\t\t\t}).on('arrangeComplete', () => {\n\t\t\t\t\twindow.dispatchEvent(event);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\t_createFilter() {\n\t\treturn new Filter({\n\t\t\tscope: this.$scope,\n\t\t\ttarget: this.$filter\n\t\t});\n\t}\n\n\t_createGrid() {\n\t\treturn new Grid({\n\t\t\ttarget: this.$grid\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 54. SectionList */\n/* ======================================================================== */\nclass SectionList extends ScrollAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\tset() {\n\t\t// mouse trailing hover effect\n\t\tthis.$listHoverContainer = this.$el.find('.js-list-hover');\n\t\tthis.$listHoverLinks = this.$el.find('.js-list-hover__link');\n\n\t\t// albums thumbs hover reveal\n\t\tthis.$listHoverThumbs = this.$el.find('.js-list-thumbs');\n\t\tthis.$listHoverThumbsLinks = this.$el.find('.js-list-thumbs__link');\n\n\t\tthis.$listItems = this.$el.find('.list-projects__item');\n\t\tthis.$listImages = this.$el.find('.list-projects__cover img, .list-projects__thumbnail');\n\t\tthis.$wrapperLinks = this.$el.find('.list-projects__wrapper-link');\n\t\tthis.listHoverClass = 'list-projects_hover';\n\t\tthis.canvas = this.$scope.find('.js-list-hover__canvas').get(0);\n\t\tthis.listHoverOptions = {\n\t\t\tstrength: this.$listHoverContainer.data('arts-hover-strength') || 0.0,\n\t\t\tscaleTexture: this.$listHoverContainer.data('arts-hover-scale-texture') || 1.8,\n\t\t\tscalePlane: this.$listHoverContainer.data('arts-hover-scale-plane') || 1.0\n\t\t};\n\n\t\tif (this.$listHoverContainer.length) {\n\t\t\tthis._bindEventsHover();\n\t\t\tthis._getHoverImagesEffect();\n\n\t\t\t// PJAX is active\n\t\t\tif (window.$barbaWrapper.length && !window.Modernizr.touchevents) {\n\t\t\t\tthis._bindEventsClick();\n\t\t\t}\n\t\t}\n\n\t\tif (this.$listHoverThumbs.length) {\n\t\t\tthis._bindEventsHover();\n\t\t\tthis._bindEventsHoverCovers();\n\t\t}\n\n\t\tif (this._hasAnimationScene(this.$el)) {\n\t\t\tthis._setAnimation();\n\t\t\tthis._animate();\n\t\t}\n\t}\n\n\t_getHoverImagesEffect() {\n\t\treturn new EffectStretch({\n\t\t\ttarget: this.$listHoverContainer,\n\t\t\titems: this.$listHoverLinks,\n\t\t\tcanvas: this.canvas,\n\t\t\toptions: this.listHoverOptions\n\t\t});\n\t}\n\n\t_bindEventsHover() {\n\t\tthis.$listHoverLinks\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis.$listHoverContainer.addClass(this.listHoverClass);\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\tthis.$listHoverContainer.removeClass(this.listHoverClass);\n\t\t\t});\n\n\t\tthis.$listHoverThumbsLinks\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis.$listHoverThumbs.addClass(this.listHoverClass);\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\tthis.$listHoverThumbs.removeClass(this.listHoverClass);\n\t\t\t});\n\t}\n\n\t_bindEventsClick() {\n\t\tconst self = this;\n\n\t\tthis.$listHoverLinks\n\t\t\t.on('click', function (e) {\n\t\t\t\tconst $el = $(this),\n\t\t\t\t\t$img = $el.find('img'),\n\t\t\t\t\t$transformEl = $el.find('.js-transition-img__transformed-el'),\n\t\t\t\t\taspect = $img[0].naturalWidth / $img[0].naturalHeight;\n\n\t\t\t\tlet width, height;\n\n\t\t\t\tif (aspect > 1) { // landscape\n\t\t\t\t\theight = (window.innerHeight / 2 / aspect);\n\t\t\t\t} else { // portrait\n\t\t\t\t\theight = (window.innerHeight / 2 / (aspect + 1));\n\t\t\t\t}\n\n\t\t\t\twidth = height * aspect;\n\n\t\t\t\tgsap.set($transformEl, {\n\t\t\t\t\tscale: Math.abs(self.listHoverOptions.scaleTexture + 0.05),\n\t\t\t\t\ttransformOrigin: 'center center'\n\t\t\t\t});\n\n\t\t\t\t$el.data('coordinates', {\n\t\t\t\t\ttop: e.clientY - height / 2, // mouse center Y\n\t\t\t\t\tleft: e.clientX - width / 2, // mouse center X\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t_bindEventsHoverCovers() {\n\t\tconst self = this;\n\n\t\tthis.$listHoverThumbsLinks.each(function () {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\t$covers = $(`.js-list-thumbs__cover[data-background-for=\"${$current.data('post-id')}\"]`);\n\n\t\t\t$current\n\t\t\t\t.on('mouseenter touchstart', function () {\n\t\t\t\t\t$covers.each(function (index) {\n\t\t\t\t\t\tlet\n\t\t\t\t\t\t\t$images = $(this).find('.list-projects__cover-wrapper'),\n\t\t\t\t\t\t\toffset = self._getRandomPosition(index, 20);\n\n\t\t\t\t\t\tgsap.to($images, {\n\t\t\t\t\t\t\tx: `${offset.x}%`,\n\t\t\t\t\t\t\ty: `${offset.y}%`,\n\t\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\t\theight: 'auto',\n\t\t\t\t\t\t\tstagger: 0.05\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\t\tgsap.to(self.$listHoverThumbs.find('.list-projects__cover-wrapper'), {\n\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\tx: '0%',\n\t\t\t\t\t\ty: '0%'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t}\n\n\t_getRandomPosition(index = 0, range = 20) {\n\t\tconst res = [];\n\n\t\tswitch (index) {\n\t\t\tcase 0:\n\t\t\t\tres.x = gsap.utils.random(-range, 0);\n\t\t\t\tres.y = gsap.utils.random(-range, -range);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tres.x = gsap.utils.random(0, range);\n\t\t\t\tres.y = gsap.utils.random(-range, range);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tres.x = gsap.utils.random(-range, range);\n\t\t\t\tres.y = gsap.utils.random(-range, 0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tres.x = gsap.utils.random(-range, range);\n\t\t\t\tres.y = gsap.utils.random(-range, range);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t_setAnimation() {\n\t\tgsap.set(this.$listImages, {\n\t\t\topacity: 0,\n\t\t\tscale: 1.1,\n\t\t\ttransformOrigin: 'center center'\n\t\t});\n\t}\n\n\t_animate() {\n\t\tconst self = this;\n\n\t\tself._createScene({\n\t\t\telement: this.$el\n\t\t});\n\n\t\tthis.$listItems.each(function () {\n\t\t\tconst\n\t\t\t\t$el = $(this),\n\t\t\t\ttl = new gsap.timeline(),\n\t\t\t\t$thumb = $el.find('.list-projects__cover img, .list-projects__thumbnail'),\n\t\t\t\t$heading = $el.find('.list-projects__heading'),\n\t\t\t\toffset = $thumb.is(':visible') ? '-=0.6' : '0';\n\n\t\t\ttl\n\t\t\t\t.to($thumb, {\n\t\t\t\t\topacity: 1,\n\t\t\t\t\tscale: 1,\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t})\n\t\t\t\t.add([\n\t\t\t\t\tgsap.effects.animateWords($heading, {\n\t\t\t\t\t\tduration: 0.9\n\t\t\t\t\t}),\n\t\t\t\t\tgsap.effects.animateLines($el, {\n\t\t\t\t\t\texcludeEl: '.js-change-text-hover__hover .split-text__line',\n\t\t\t\t\t})\n\t\t\t\t], offset);\n\n\t\t\tself._createScene({\n\t\t\t\telement: $el,\n\t\t\t\ttimeline: tl,\n\t\t\t\treveal: false\n\t\t\t});\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 55. SectionMasthead */\n/* ======================================================================== */\nclass SectionMasthead extends ScrollAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\trun() {\n\t\tthis._fixedMasthead();\n\t\tif (this._hasAnimationScene(this.$el)) {\n\t\t\tthis.setAnimation();\n\t\t\tthis.animate();\n\t\t}\n\t}\n\n\t_fixedMasthead() {\n\t\tconst\n\t\t\t$fixedMasthead = this.$el.filter('.section-masthead_fixed');\n\n\t\tif ($fixedMasthead.length) {\n\t\t\tconst tl = new gsap.timeline();\n\n\t\t\ttl.fromTo($fixedMasthead, {\n\t\t\t\tautoAlpha: 1\n\t\t\t}, {\n\t\t\t\tautoAlpha: 0,\n\t\t\t});\n\n\t\t\tnew $.ScrollMagic.Scene({\n\t\t\t\t\ttriggerElement: $fixedMasthead.next(),\n\t\t\t\t\ttriggerHook: 'onEnter',\n\t\t\t\t\treverse: true,\n\t\t\t\t\tduration: window.innerHeight / 2\n\t\t\t\t})\n\t\t\t\t.setTween(tl)\n\t\t\t\t.setPin($fixedMasthead, {\n\t\t\t\t\tpushFollowers: false\n\t\t\t\t})\n\t\t\t\t.addTo(window.SMController);\n\t\t}\n\t}\n\n\tsetAnimation() {\n\t\tthis.$subheading = this.$el.find('.section-masthead__subheading');\n\t\tthis.$heading = this.$el.find('.section-masthead__heading');\n\t\tthis.$text = this.$el.find('.section-masthead__text');\n\t\tthis.$bgWrapper = this.$el.find('.section-image__wrapper');\n\t\tthis.$itemsMeta = this.$el.find('.section-masthead__meta-item');\n\t\tthis.$headline = this.$el.find('.section__headline');\n\t\tthis.$background = this.$el.find('.section-masthead__background:not(.js-cancel-animation)').find('.section-image__wrapper .lazy-bg');\n\t\tthis.$bg = this.$el.find('.section-masthead__bg');\n\t\tthis.$wrapperbutton = this.$el.find('.section-masthead__wrapper-button');\n\t\tthis.$wrapperSD = this.$el.find('.section-masthead__wrapper-scroll-down');\n\t\tthis.$overlay = this.$el.find('.section-masthead__background.js-cancel-animation').find('.section-masthead__overlay');\n\n\t\tgsap.set(this.$background, {\n\t\t\tscale: 1.05,\n\t\t\ttransformOrigin: 'center center',\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$itemsMeta, {\n\t\t\ty: '100%',\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$bg, {\n\t\t\tscaleY: 0,\n\t\t\ttransformOrigin: 'bottom center'\n\t\t});\n\n\t\tgsap.set(this.$overlay, {\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$headline, {\n\t\t\tscaleX: 0\n\t\t});\n\n\t\tgsap.set(this.$wrapperbutton, {\n\t\t\ty: 30,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$wrapperSD, {\n\t\t\ty: 30,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.effects.hideChars(this.$el, {\n\t\t\tx: 0,\n\t\t\ty: '100%',\n\t\t\tautoAlpha: 1,\n\t\t\tduration: 0,\n\t\t});\n\t}\n\n\tanimate() {\n\t\tconst\n\t\t\ttl = new gsap.timeline(),\n\t\t\t$target = this.$el.filter('[data-arts-os-animation]'),\n\t\t\tfrom = getStaggerFrom($target);\n\n\t\ttl.to(this.$itemsMeta, {\n\t\t\tstagger: 0.2,\n\t\t\tduration: 0.6,\n\t\t\tautoAlpha: 1,\n\t\t\ty: '0%'\n\t\t}, 'start');\n\n\t\tif (this.$bg.length && this.$background.length) {\n\t\t\ttl.to(this.$bg, {\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tscaleY: 1,\n\t\t\t\t\tease: 'expo.inOut'\n\t\t\t\t}, 'start')\n\t\t\t\t.to(this.$background, {\n\t\t\t\t\tduration: 2.4,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tscale: 1\n\t\t\t\t}, '-=0.4');\n\t\t}\n\n\t\tif (this.$bg.length && !this.$background.length) {\n\t\t\ttl.to(this.$bg, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tscaleY: 1,\n\t\t\t\tease: 'expo.inOut'\n\t\t\t}, 'start');\n\t\t}\n\n\t\tif (!this.$bg.length && this.$background.length) {\n\t\t\ttl\n\t\t\t\t.to(this.$background, {\n\t\t\t\t\tduration: 2.4,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tscale: 1\n\t\t\t\t}, '<0.2');\n\t\t}\n\n\t\tif (this.$overlay.length) {\n\t\t\ttl.to(this.$overlay, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tduration: 1.2\n\t\t\t}, '<0.2');\n\t\t}\n\n\t\ttl.animateChars($target, {\n\t\t\tduration: 1.2,\n\t\t\tstagger: distributeByPosition({\n\t\t\t\tfrom: from === 'center' ? 'start' : from,\n\t\t\t\tamount: 0.2\n\t\t\t})\n\t\t}, '<0.2');\n\n\t\ttl.animateWords($target, {\n\t\t\t\tease: 'power3.out',\n\t\t\t\tduration: 1.2\n\t\t\t}, '<0.2')\n\t\t\t.animateLines($target, {\n\t\t\t\tease: 'power3.out',\n\t\t\t\tduration: 1.2,\n\t\t\t\tstagger: 0.06,\n\t\t\t}, '<0.2')\n\t\t\t.to(this.$wrapperbutton, {\n\t\t\t\tduration: 0.6,\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, '<0.2')\n\t\t\t.to(this.$wrapperSD, {\n\t\t\t\tduration: 0.6,\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, '<0.2')\n\t\t\t.animateHeadline(this.$headline, {\n\t\t\t\tduration: 0.6\n\t\t\t}, '<0.2');\n\n\t\tthis._createScene({\n\t\t\telement: $target,\n\t\t\ttimeline: tl\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 56. SectionNavProjects */\n/* ======================================================================== */\nclass SectionNavProjects extends ScrollAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t\tthis.isClickedNext = false;\n\t}\n\n\tset() {\n\t\tthis.$container = this.$el.find('.section-nav-projects__inner_actual');\n\t\tthis.$circleButton = this.$el.find('.js-circle-button');\n\t\tthis.$arcWrapper = this.$el.find('.circle-button__wrapper-label');\n\t\tthis.$wrapperScroll = this.$el.find('.section-nav-projects__wrapper-scroll-down');\n\t\tthis.$linkNext = this.$el.find('.section-nav-projects__link');\n\t\tthis.$header = this.$el.find('.section-nav-projects__header');\n\t\tthis.$subheading = this.$el.find('.section-nav-projects__subheading');\n\t\tthis.$heading = this.$el.find('.section-nav-projects__heading');\n\t\tthis.$nextImage = this.$el.find('.section-nav-projects__next-image');\n\t\tthis.nextURL = this.$linkNext.attr('href');\n\t\tthis.scene = null;\n\t\tthis.scenePrefetch = null;\n\n\t\tthis._setMeasures();\n\t}\n\n\trun() {\n\t\tif (this._hasAnimationScene(this.$el)) {\n\n\t\t\tif (window.theme.ajax.enabled) {\n\t\t\t\tthis.scenePrefetch = this._createScene({\n\t\t\t\t\telement: this.$el,\n\t\t\t\t\treveal: false,\n\t\t\t\t\treverse: false,\n\t\t\t\t\ttriggerHook: 'onEnter'\n\t\t\t\t}).on('start', () => {\n\t\t\t\t\tbarba.prefetch(this.nextURL);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.scene = this._getScene();\n\t\t\tthis._bindEvents();\n\n\t\t\twindow.$window.on('resize', debounce(() => {\n\t\t\t\tthis._setMeasures();\n\t\t\t\tthis._bindEvents();\n\t\t\t\twindow.SMController.removeScene(this.scene);\n\t\t\t\tthis.scene = this._getScene();\n\t\t\t}, 500));\n\t\t}\n\n\t}\n\n\t_setMeasures() {\n\t\tthis.elHeight = this.$container.height();\n\t\tthis.offsetTop = this.$el.offset().top;\n\t\tthis.sceneDuration = window.innerHeight;\n\t}\n\n\t_getScene() {\n\t\treturn this._createScene({\n\t\t\telement: this.$el,\n\t\t\ttimeline: this._getSceneTimeline(),\n\t\t\tduration: this.sceneDuration,\n\t\t\treverse: true,\n\t\t\ttriggerHook: 'onLeave'\n\t\t});\n\t}\n\n\t_bindEvents() {\n\n\t\t$(this.$circleButton).add(this.$header).off('click').on('click', (e) => {\n\t\t\tif (window.theme.ajax.enabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlet offset = 0;\n\n\t\t\t\tif (typeof window.SB !== 'undefined') {\n\t\t\t\t\toffset = window.SB.limit.y + this.elHeight;\n\t\t\t\t} else {\n\t\t\t\t\toffset = document.body.scrollHeight - this.elHeight;\n\t\t\t\t}\n\t\t\t\tScroll.scrollTo({\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: offset,\n\t\t\t\t\tduration: 1200\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$linkNext.get(0).click();\n\t\t\t}\n\t\t});\n\t}\n\n\t_getSceneTimeline() {\n\t\tconst tl = new gsap.timeline({\n\t\t\tonStart: () => {\n\t\t\t\tthis.scene.update(true);\n\t\t\t\tthis.offsetTop = $(this.$el).offset().top;\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\tif (!this.isClickedNext) {\n\t\t\t\t\tthis.isClickedNext = true;\n\t\t\t\t\twindow.SMController.removeScene(this.scene);\n\t\t\t\t\twindow.SMController.removeScene(this.scenePrefetch);\n\t\t\t\t\tthis.$linkNext.get(0).click();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonUpdate: () => {\n\t\t\t\tthis.scene.update(true);\n\t\t\t\tif (tl.progress() > 0.95) {\n\t\t\t\t\ttl.eventCallback('onUpdate', null);\n\t\t\t\t\ttl.progress(1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\ttl\n\t\t\t.to(this.$container, {\n\t\t\t\ty: () => (window.pageYOffset - this.offsetTop + this.sceneDuration),\n\t\t\t\tduration: 1,\n\t\t\t\tease: 'none',\n\t\t\t}, 'start')\n\t\t\t.fromTo(this.$header, {\n\t\t\t\tpointerEvents: 'initial',\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: 0,\n\t\t\t}, {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tduration: 0.75,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\ty: -50,\n\t\t\t\tease: 'linear.none',\n\t\t\t}, 'start')\n\t\t\t.fromTo(this.$nextImage, {\n\t\t\t\tease: 'linear.none',\n\t\t\t\tautoAlpha: .1,\n\t\t\t}, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tduration: 1,\n\t\t\t\ty: () => (window.pageYOffset - this.offsetTop),\n\t\t\t}, 'start')\n\t\t\t.fromTo(this.$arcWrapper, {\n\t\t\t\trotation: 0,\n\t\t\t\ttransformOrigin: 'center center'\n\t\t\t}, {\n\t\t\t\tduration: 1,\n\t\t\t\trotation: 720,\n\t\t\t}, 'start')\n\t\t\t.to(this.$wrapperScroll, {\n\t\t\t\ty: -200,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tduration: 1,\n\t\t\t}, 'start');\n\n\t\treturn tl;\n\t}\n}\n","/* ======================================================================== */\n/* 57. SectionProjectsSlider */\n/* ======================================================================== */\nclass SectionProjectsSlider extends ScrollAnimation {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\tset() {\n\t\tthis.$slider = this.$el.find('.js-slider-fullscreen-projects');\n\t\tthis.$sliderImg = this.$el.find('.slider-fullscreen-projects__images');\n\t\tthis.$footer = this.$el.find('.slider-fullscreen-projects__footer');\n\t\tthis.$canvasWrapper = this.$el.find('.slider__wrapper-canvas');\n\t\tthis.$overlay = this.$el.find('.slider__overlay');\n\t\tthis.$arrowLeft = this.$el.find('.slider__arrow_left .arrow-left');\n\t\tthis.$arrowRight = this.$el.find('.slider__arrow_right .arrow-right');\n\t\tthis.$counter = this.$el.find('.slider__wrapper-counter');\n\n\t\tthis.slider = new SliderFullscreenProjects({\n\t\t\tscope: this.$scope,\n\t\t\ttarget: this.$slider\n\t\t});\n\t\tthis.$activeSlide = this.$slider.find('.swiper-slide-active');\n\t\tthis.$activeHeading = this.$activeSlide.find('.slider__heading');\n\t\tthis.$activeSubheading = this.$activeSlide.find('.slider__subheading');\n\t\tthis.$activeDescription = this.$activeSlide.find('.slider__text');\n\t\tthis.$activeButton = this.$activeSlide.find('.slider__wrapper-button');\n\t\tthis.$activeBg = this.$activeSlide.find('.slider__bg');\n\n\t\tgsap.set(this.$canvasWrapper, {\n\t\t\tscale: 1.1,\n\t\t\tautoAlpha: 0,\n\t\t\ttransformOrigin: 'center center'\n\t\t});\n\n\t\tgsap.set(this.$footer, {\n\t\t\tautoAlpha: 0,\n\t\t\ty: '100%'\n\t\t});\n\n\t\tgsap.set(this.$arrowLeft, {\n\t\t\tx: -50,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$arrowRight, {\n\t\t\tx: 50,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$counter, {\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.effects.hideChars(this.$activeHeading, {\n\t\t\tx: 50,\n\t\t\ty: 0,\n\t\t\tduration: 0,\n\t\t});\n\n\t\tgsap.effects.hideChars(this.$activeSubheading, {\n\t\t\tx: 25,\n\t\t\ty: 0,\n\t\t\tduration: 0,\n\t\t});\n\n\t\tgsap.effects.hideLines(this.$activeDescription, {\n\t\t\ty: '100%',\n\t\t\tduration: 0\n\t\t});\n\n\t\tgsap.set(this.$activeButton, {\n\t\t\ty: 50,\n\t\t\tautoAlpha: 0\n\t\t});\n\n\t\tgsap.set(this.$activeBg, {\n\t\t\tscale: 1.1,\n\t\t\tautoAlpha: 0,\n\t\t\ttransformOrigin: 'center center',\n\t\t\ttransition: 'none'\n\t\t});\n\t}\n\n\trun() {\n\t\tconst tl = new gsap.timeline(),\n\t\t\tfrom = getStaggerFrom(this.$activeSlide);\n\n\t\ttl\n\t\t\t.add([\n\t\t\t\tgsap.to(this.$canvasWrapper, {\n\t\t\t\t\tscale: 1,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tease: 'power3.out',\n\t\t\t\t\tduration: 2.4,\n\t\t\t\t\ttransformOrigin: 'center center'\n\t\t\t\t}),\n\t\t\t\tgsap.to(this.$activeBg, {\n\t\t\t\t\tscale: 1,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tease: 'power3.out',\n\t\t\t\t\tduration: 2.4,\n\t\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\t\ttransition: 'none'\n\t\t\t\t})\n\t\t\t])\n\t\t\t.animateChars(this.$activeHeading, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\tfrom: from === 'center' ? 'start' : from,\n\t\t\t\t\tamount: 0.4\n\t\t\t\t}),\n\t\t\t\tease: 'power3.out',\n\t\t\t}, '-=2.0')\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateChars(this.$activeSubheading, {\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\t\tfrom: from === 'center' ? 'start' : from,\n\t\t\t\t\t\tamount: 0.4\n\t\t\t\t\t}),\n\t\t\t\t\tease: 'power3.out',\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateLines(this.$activeDescription, {\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tfrom: 'start',\n\t\t\t\t\tease: 'power3.out',\n\t\t\t\t\tstagger: 0.08\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateLines(this.$slider.find('.slider__wrapper-button'), {\n\t\t\t\t\texcludeEl: '.js-change-text-hover__hover .split-text__line',\n\t\t\t\t})\n\t\t\t], '-=1.2')\n\t\t\t.to(this.$activeButton, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tease: 'power3.out',\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, '-=1.2')\n\t\t\t.add([\n\t\t\t\tgsap.to(this.$footer, {\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\ty: '0%'\n\t\t\t\t}),\n\t\t\t\tgsap.to([this.$arrowLeft, this.$arrowRight, this.$counter], {\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tx: '0%',\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tstagger: 0.1,\n\t\t\t\t}),\n\t\t\t], '-=1.2')\n\n\t\tthis._createScene({\n\t\t\telement: this.$el,\n\t\t\ttimeline: tl\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 58. SectionSliderImages */\n/* ======================================================================== */\nclass SectionSliderImages extends ScrollAnimation {\n constructor({\n target,\n scope\n }) {\n super({\n target,\n scope\n });\n }\n set() {\n this.$slider = this.$el.find('.js-slider-images');\n this.$slides = this.$slider.find('.swiper-slide');\n this.slider = new SliderImages({\n target: this.$slider,\n scope: this.scope\n });\n\n gsap.set(this.$slides, {\n x: '33%',\n autoAlpha: 0,\n transformOrigin: 'right center'\n });\n }\n run() {\n const tl = new gsap.timeline();\n\n tl.to(this.$slides, {\n duration: 1.2,\n autoAlpha: 1,\n x: '0%',\n force3D: true,\n stagger: 0.1,\n ease: 'power3.out',\n });\n\n this._createScene({\n element: this.$el,\n timeline: tl,\n });\n }\n}\n","/* ======================================================================== */\n/* 59. SectionTestimonials */\n/* ======================================================================== */\nclass SectionTestimonials extends ScrollAnimation {\n constructor({\n target,\n scope\n }) {\n super({\n target,\n scope\n });\n }\n set() {\n this.$slider = this.$el.find('.js-slider-testimonials');\n this.slider = new SliderTestimonials({\n target: this.$slider,\n scope: this.scope\n });\n\n this.$activeSlide = this.$slider.find('.swiper-slide-active');\n this.$activeSign = this.$activeSlide.find('.figure-testimonial__sign');\n this.$activeDescription = this.$activeSlide.find('.slider-testimonials__text');\n\n gsap.set(this.$activeSign, {\n y: 50,\n autoAlpha: 0\n });\n\n gsap.effects.hideLines(this.$activeDescription, {\n y: '100%',\n duration: 0\n });\n }\n run() {\n const tl = new gsap.timeline();\n\n tl\n .add([\n gsap.to(this.$activeSign, {\n duration: 1.2,\n y: 0,\n autoAlpha: 1,\n ease: 'power3.out',\n }),\n gsap.effects.animateLines(this.$activeDescription, {\n duration: 1.2,\n from: 'start',\n ease: 'power3.out',\n stagger: 0.08,\n delay: 0.2\n })\n ]);\n\n this._createScene({\n element: this.$el,\n timeline: tl\n });\n }\n}\n","/* ======================================================================== */\n/* 60. SectionVideo */\n/* ======================================================================== */\nconst SectionVideo = function ($scope) {\n\n\tconst $target = $scope.find('.section-video');\n\n\tif (!$target.length) {\n\t\treturn;\n\t}\n\n\n\n}\n","/* ======================================================================== */\n/* 61. SliderCategories */\n/* ======================================================================== */\nclass SliderCategories extends BaseComponent {\n\n\tconstructor({\n\t\ttarget,\n\t\tscope,\n\t\tsliderContent,\n\t\tlinks,\n\t\toptions\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.sliderContent = sliderContent;\n\n\t\t// elements\n\t\tthis.$links = links;\n\t\tthis.$items = this.$target.find('[data-category]');\n\t\tthis.$button = this.$target.find('[data-button]');\n\n\t\t// setup\n\t\tthis.initialCategory = $(this.sliderContent.slides[this.sliderContent.realIndex]).data('category');\n\t\tthis.$initialActiveItem = this.$target.find(`[data-category=\"${this.initialCategory}\"]`);\n\t\tthis.$slides = $(sliderContent.slides);\n\t\tthis.timeline = new gsap.timeline();\n\n\t\t// options\n\t\tthis.options = options || {\n\t\t\tduration: 0.4,\n\t\t\tease: 'power4.out'\n\t\t};\n\n\t\tthis._bindSliderEvents();\n\t\tthis._bindHoverEvents();\n\t\tthis._getTimelineShowItem(this.$initialActiveItem);\n\n\t}\n\n\t_bindSliderEvents() {\n\t\tthis.sliderContent\n\t\t\t.on('slideChange', () => {\n\t\t\t\tconst\n\t\t\t\t\tprevCategory = this.$slides.eq(this.sliderContent.previousIndex).data('category'),\n\t\t\t\t\tcategory = this.$slides.eq(this.sliderContent.realIndex).data('category'),\n\t\t\t\t\t$activeItem = this.$target.find(`[data-category=\"${category}\"]`);\n\n\t\t\t\tif (!category.length) {\n\t\t\t\t\tthis.timeline\n\t\t\t\t\t\t.clear()\n\t\t\t\t\t\t.hideLines(this.$items, {\n\t\t\t\t\t\t\ty: '100%',\n\t\t\t\t\t\t\tstagger: 0,\n\t\t\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\t\t\tease: this.options.ease\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// don't animate if category of next current item is\n\t\t\t\t// the same as previous\n\t\t\t\tif ($activeItem.length && category !== prevCategory) {\n\t\t\t\t\tthis.timeline.clear().add(this._getTimelineShowItem($activeItem));\n\t\t\t\t}\n\n\t\t\t});\n\t}\n\n\t_bindHoverEvents() {\n\t\tthis.$links\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis.timeline.clear().add(this._getTimelineShowButton());\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\n\t\t\t\tconst\n\t\t\t\t\tcategory = this.$slides.eq(this.sliderContent.realIndex).data('category'),\n\t\t\t\t\t$activeItem = this.$target.find(`[data-category=\"${category}\"]`);\n\n\t\t\t\tif ($activeItem.length) {\n\t\t\t\t\tthis.timeline.clear().add(this._getTimelineShowItem($activeItem));\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_getTimelineShowButton() {\n\t\treturn new gsap.timeline()\n\t\t\t.hideLines(this.$button, {\n\t\t\t\ty: '100%',\n\t\t\t\tduration: 0,\n\t\t\t\tstagger: 0\n\t\t\t})\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateLines(this.$button, {\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0,\n\t\t\t\t\tease: this.options.ease\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideLines(this.$items, {\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0,\n\t\t\t\t\tease: this.options.ease\n\t\t\t\t})\n\t\t\t]);\n\t}\n\n\t_getTimelineShowItem($activeItem) {\n\t\treturn new gsap.timeline()\n\t\t\t.hideLines($activeItem, {\n\t\t\t\ty: '100%',\n\t\t\t\tduration: 0,\n\t\t\t\tstagger: 0\n\t\t\t})\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateLines($activeItem, {\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0,\n\t\t\t\t\tease: this.options.ease\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideLines([this.$items.not($activeItem), this.$button], {\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tduration: this.options.duration,\n\t\t\t\t\tstagger: 0,\n\t\t\t\t\tease: this.options.ease\n\t\t\t\t})\n\t\t\t]);\n\t}\n}\n","/* ======================================================================== */\n/* 62. SliderCounter */\n/* ======================================================================== */\nclass SliderCounter {\n\n\tconstructor({\n\t\tslider,\n\t\tsliderCounter,\n\t\tslideClass = '',\n\t\ttotal,\n\t\tstyle = 'roman',\n\t\taddZeros = 2\n\t}) {\n\n\t\tif (!slider || !sliderCounter || !$(slider).length || !$(sliderCounter).length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.slider = slider;\n\t\tthis.sliderCounter = sliderCounter;\n\t\tthis.slideClass = slideClass;\n\t\tthis.numOfSlides = slider.slides.length;\n\t\tthis.startSlides = parseInt(slider.params.slidesPerView, 10);\n\t\tthis.romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'];\n\t\tthis.zeros = addZeros;\n\t\tthis.style = style;\n\t\tthis.total = total;\n\n\t\tswitch (this.zeros) {\n\t\t\tcase 0:\n\t\t\t\tthis.prefixCurrent = '';\n\t\t\t\tthis.prefixTotal = '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis.prefixCurrent = '0';\n\t\t\t\tthis.prefixTotal = this.numOfSlides >= 10 ? '' : '0';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.prefixCurrent = '00';\n\t\t\t\tthis.prefixTotal = this.numOfSlides >= 10 ? '0' : '00';\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis._createSlider();\n\t\tthis._renderCounter();\n\t\tthis._renderTotal();\n\t\tthis._bindEvents();\n\n\t\treturn this.counter;\n\t}\n\n\t_createSlider() {\n\t\tthis.counter = new Swiper(this.sliderCounter, {\n\t\t\tspeed: this.slider.params.speed,\n\t\t\tdirection: 'vertical',\n\t\t\tsimulateTouch: false,\n\t\t\tallowTouchMove: false,\n\t\t\ton: {\n\t\t\t\tinit: this.removeAllSlides\n\t\t\t}\n\t\t});\n\t}\n\n\t_renderCounter() {\n\t\tfor (let index = this.startSlides; index <= this.numOfSlides; index++) {\n\n\t\t\tif (this.style === 'roman') {\n\t\t\t\tthis.counter.appendSlide(this._getSlideTemplate({\n\t\t\t\t\tslideClass: this.slideClass,\n\t\t\t\t\tcontent: this.romanNumerals[index - 1]\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tconst prefix = index >= 10 ? this.prefixCurrent = '0' : this.prefixCurrent;\n\n\t\t\t\tthis.counter.appendSlide(this._getSlideTemplate({\n\t\t\t\t\tslideClass: this.slideClass,\n\t\t\t\t\tcontent: prefix + index\n\t\t\t\t}));\n\t\t\t}\n\n\t\t}\n\t}\n\n\t_renderTotal() {\n\t\tconst $el = $(this.total);\n\n\t\tif ($el.length) {\n\t\t\t$el.html(this.style === 'roman' ? this.romanNumerals[this.numOfSlides - 1] : this.prefixTotal + this.numOfSlides);\n\t\t}\n\t}\n\n\t_getSlideTemplate({\n\t\tslideClass,\n\t\tcontent\n\t}) {\n\t\treturn `
${content}
`;\n\t}\n\n\t_bindEvents() {\n\t\tthis.slider.on('slideChange', () => {\n\t\t\tthis.counter.slideTo(this.slider.realIndex);\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 63. SliderDistortionEffect */\n/* ======================================================================== */\nclass SliderDistortionEffect extends BaseComponent {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget,\n\t\tslider,\n\t\tintensity,\n\t\taspectRatio = 1.5,\n\t\tcanvasWrapper,\n\t\tcanvas,\n\t\tdisplacementImage\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\n\t\tif (!this._isThreeLoaded()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.slider = slider;\n\t\tthis.speed = parseFloat(slider.params.speed / 1000);\n\t\tthis.intensity = intensity;\n\t\tthis.aspectRatio = aspectRatio;\n\t\tthis.timeline = new gsap.timeline();\n\n\t\tthis.$wrapper = this.slider.$wrapperEl;\n\t\tthis.$canvasWrapper = canvasWrapper;\n\t\tthis.canvas = canvas.get(0);\n\t\tthis.displacementImg = displacementImage;\n\n\t\tthis.distortionEffect = this._getEffect();\n\t\tthis._setSlider();\n\t\tthis._bindEvents();\n\t\tthis._hideSlider();\n\t}\n\n\t_setSlider() {\n\t\tthis.slider.params.effect = 'fade';\n\t\tthis.slider.params.fadeEffect.crossFade = true;\n\t\tthis.slider.params.touchRatio = 4;\n\t\tthis.slider.params.preventInteractionOnTransition = true;\n\n\t\tif (this.slider.params.mousewheel.enabled) {\n\t\t\tthis.slider.mousewheel.disable();\n\t\t}\n\n\t\tif (this.slider.params.keyboard.enabled) {\n\t\t\tthis.slider.keyboard.disable();\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\tthis.slider.on('slideChange', () => {\n\t\t\tthis.distortionEffect.change({\n\t\t\t\tfrom: this.slider.previousIndex,\n\t\t\t\tto: this.slider.realIndex,\n\t\t\t\tspeed: this.speed,\n\t\t\t\tintensity: this.slider.realIndex < this.slider.previousIndex ? -this.intensity : this.intensity,\n\t\t\t\tease: 'power2.inOut'\n\t\t\t});\n\n\t\t\tthis.timeline\n\t\t\t\t.clear()\n\t\t\t\t.to(this.$canvasWrapper, {\n\t\t\t\t\tduration: this.speed,\n\t\t\t\t\tscale: 1.05,\n\t\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\t\tease: 'power2.out'\n\t\t\t\t})\n\t\t\t\t.to(this.$canvasWrapper, {\n\t\t\t\t\tduration: this.speed * 2,\n\t\t\t\t\tscale: 1,\n\t\t\t\t});\n\t\t});\n\t}\n\n\t_isThreeLoaded() {\n\t\treturn (typeof window.THREE === 'object');\n\t}\n\n\t_getImagesSources() {\n\t\tconst sources = [];\n\n\t\tthis.$target.find('.slider__bg').each(function () {\n\t\t\tlet path = $(this).attr('data-background');\n\n\t\t\t// video poster\n\t\t\tif (!path) {\n\t\t\t\tpath = $(this).attr('poster');\n\t\t\t}\n\n\t\t\tsources.push(path);\n\t\t});\n\n\t\treturn sources;\n\t}\n\n\t_getEffect() {\n\t\treturn new EffectDistortion({\n\t\t\tslider: this.slider,\n\t\t\tcanvas: this.canvas,\n\t\t\taspect: this.aspectRatio,\n\t\t\tdisplacementImage: this.displacementImg,\n\t\t\titems: $(this.slider.slides)\n\t\t});\n\t}\n\n\t_hideSlider() {\n\t\tif (typeof window.elementor !== 'undefined') {\n\t\t\tgsap.set(this.$wrapper, {\n\t\t\t\tdisplay: 'none'\n\t\t\t});\n\t\t} else {\n\t\t\tgsap.set(this.$wrapper, {\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t}\n\t}\n\n}\n","/* ======================================================================== */\n/* 64. SliderDots */\n/* ======================================================================== */\nclass SliderDots {\n\n\tconstructor({\n\t\tslider,\n\t\tcontainer\n\t}) {\n\t\tthis.slider = slider;\n\t\tthis.$container = container;\n\t\tthis.$dots = this.$container.find('.slider__dot');\n\t\tthis.delay = this.slider.params.autoplay.enabled ? parseFloat(this.slider.params.autoplay.delay / 1000) : parseFloat(this.slider.params.speed / 1000 / 2);\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.initialSetTimeline = new gsap.timeline();\n\n\t\tif (!this.$dots.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.run();\n\t}\n\n\trun() {\n\t\tthis._renderDots();\n\t\tthis._prepare();\n\t\tthis._bindEvents();\n\t}\n\n\t_renderDots() {\n\t\tthis.$dots.append(this._getDotTemplate());\n\t\tthis.$circles = this.$dots.find('.circle');\n\t}\n\n\t_prepare() {\n\t\tgsap.set(this.$circles, {\n\t\t\tstrokeOpacity: 0,\n\t\t\ttransformOrigin: 'center center',\n\t\t\trotate: 180,\n\t\t\tdrawSVG: '100% 100%',\n\t\t});\n\n\t\tconst\n\t\t\t$currentDot = this.$dots.eq(0),\n\t\t\t$currentCircle = $currentDot.find('.circle');\n\n\t\tthis.initialSetTimeline.fromTo($currentCircle, {\n\t\t\tstrokeOpacity: 1,\n\t\t\trotate: 0,\n\t\t\ttransformOrigin: 'center center',\n\t\t\tdrawSVG: '100% 100%',\n\t\t\tease: 'power3.inOut',\n\t\t}, {\n\t\t\tstrokeOpacity: 1,\n\t\t\trotate: 180,\n\t\t\ttransformOrigin: 'center center',\n\t\t\tduration: this.delay,\n\t\t\tdrawSVG: '0% 100%',\n\t\t});\n\t}\n\n\t_bindEvents() {\n\t\tthis.slider\n\t\t\t.on('autoplayStop', () => {\n\t\t\t\tthis.timeline.pause();\n\t\t\t})\n\t\t\t.on('autoplayStart', () => {\n\t\t\t\tthis.timeline.play();\n\t\t\t})\n\t\t\t.on('transitionStart', () => {\n\t\t\t\tthis._setCurrentDot(this.slider.realIndex);\n\t\t\t});\n\t}\n\n\t_setCurrentDot(index = 0) {\n\t\tconst\n\t\t\t$currentDot = this.$dots.eq(index),\n\t\t\t$currentCircle = $currentDot.find('.circle'),\n\t\t\t$otherCircles = this.$circles.not($currentCircle);\n\n\t\tthis.timeline\n\t\t\t.clear()\n\t\t\t.add(() => {\n\t\t\t\tif (this.initialSetTimeline) {\n\t\t\t\t\tthis.initialSetTimeline.kill();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.to($otherCircles, {\n\t\t\t\tduration: this.delay / 10,\n\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\tdrawSVG: '0% 0%',\n\t\t\t\tease: 'expo.inOut',\n\t\t\t})\n\t\t\t.set($otherCircles, {\n\t\t\t\tstrokeOpacity: 0,\n\t\t\t})\n\t\t\t.fromTo($currentCircle, {\n\t\t\t\tstrokeOpacity: 1,\n\t\t\t\trotate: 0,\n\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\tdrawSVG: '100% 100%',\n\t\t\t\tease: 'power3.inOut',\n\t\t\t}, {\n\t\t\t\tstrokeOpacity: 1,\n\t\t\t\trotate: 180,\n\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\tduration: this.delay,\n\t\t\t\tdrawSVG: '0% 100%',\n\t\t\t});\n\t}\n\n\t_getDotTemplate() {\n\t\treturn `\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t`;\n\t}\n\n}\n","/* ======================================================================== */\n/* 65. SliderHoverBackgrounds */\n/* ======================================================================== */\nclass SliderHoverBackgrounds extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope,\n\t\tsliderImg,\n\t\timages,\n\t\tlinks,\n\t\thoverClass\n\t}) {\n\t\tsuper({\n\t\t\tscope,\n\t\t\ttarget\n\t\t});\n\n\t\tthis.$images = images;\n\t\tthis.$links = links;\n\t\tthis.hoverClass = hoverClass;\n\n\t\tif (!this.$links.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._bindHoverEvents();\n\t}\n\n\t_bindHoverEvents() {\n\t\tconst self = this;\n\n\t\tthis.$links.each(function () {\n\t\t\t$(this)\n\t\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\t\tself.$target.addClass(self.hoverClass);\n\t\t\t\t})\n\t\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\t\tself.$target.removeClass(self.hoverClass);\n\t\t\t\t});\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 66. SliderTextTransitions */\n/* ======================================================================== */\nclass SliderTextTransitions {\n\tconstructor({\n\t\tslider,\n\t\tdirection,\n\t\toffset = 40,\n\t\tstaggerHeadings = 0.3,\n\t\tstaggerTexts = 0.2,\n\t\theading,\n\t\tsubheading,\n\t\tdescription,\n\t\tlink\n\t}) {\n\t\t// slider\n\t\tthis.slider = slider;\n\t\tthis.$slides = $(this.slider.slides);\n\n\t\t// params\n\t\tthis.offset = offset;\n\t\tthis.direction = direction || this.slider.params.direction;\n\t\tthis.speed = parseFloat(this.slider.params.speed / 1000);\n\n\t\t// elements\n\t\tthis.$heading = heading;\n\t\tthis.$subheading = subheading;\n\t\tthis.$description = description;\n\t\tthis.$link = link;\n\t\tthis.elementsLength = this._countExistentElements();\n\n\t\t// animation\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.hideTimeline = new gsap.timeline();\n\t\tthis.ease = 'power4.out';\n\t\tthis.staggerHeadings = staggerHeadings;\n\t\tthis.staggerTexts = staggerTexts;\n\t\tthis.animationDirections = this._getAnimationDirections();\n\t\tthis._initialSet();\n\t\tthis._bindEvents();\n\t}\n\n\t_countExistentElements() {\n\t\tlet length = 0;\n\n\t\t(this.$heading && this.$heading.length) ? length++ : '';\n\t\t(this.$subheading && this.$subheading.length) ? length++ : '';\n\t\t(this.$description && this.$description.length) ? length++ : '';\n\t\t(this.$link && this.$link.length) ? length++ : '';\n\n\t\treturn length;\n\t}\n\n\t_bindEvents() {\n\t\tthis.slider.on('slideChange', () => {\n\t\t\tif (this.slider.realIndex > this.slider.previousIndex) {\n\t\t\t\tthis._slideChangeTransition({\n\t\t\t\t\tdirection: 'next'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.slider.realIndex < this.slider.previousIndex) {\n\t\t\t\tthis._slideChangeTransition({\n\t\t\t\t\tdirection: 'prev'\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_initialSet() {\n\t\tconst directions = this._getSlideAnimationDirections({\n\t\t\tdirection: 'next'\n\t\t});\n\n\t\tif (this.$subheading && this.$subheading.length) {\n\t\t\tSetText.setChars({\n\t\t\t\ttarget: this.$subheading.not(this.$subheading.eq(0)),\n\t\t\t\tx: directions.in.x / 4,\n\t\t\t\ty: directions.in.y / 4,\n\t\t\t});\n\t\t}\n\n\t\tif (this.$heading && this.$heading.length) {\n\t\t\tSetText.setChars({\n\t\t\t\ttarget: this.$heading.not(this.$heading.eq(0)),\n\t\t\t\tx: directions.in.x,\n\t\t\t\ty: directions.in.y,\n\t\t\t});\n\t\t}\n\n\t\tif (this.$description && this.$description.length) {\n\t\t\tSetText.setLines({\n\t\t\t\ttarget: this.$description.not(this.$description.eq(0)),\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: '100%',\n\t\t\t});\n\t\t}\n\n\t\tif (this.$link && this.$link.length) {\n\t\t\tgsap.set(this.$link.not(this.$link.eq(0)), {\n\t\t\t\ty: (this.animationDirections.offset.y.next.in || this.animationDirections.offset.x.next.in) / 2,\n\t\t\t\tautoAlpha: 0,\n\t\t\t});\n\t\t}\n\t}\n\n\t_slideChangeTransition({\n\t\tdirection = 'next'\n\t}) {\n\t\tconst\n\t\t\tself = this,\n\t\t\tdirections = this._getSlideAnimationDirections({\n\t\t\t\tdirection\n\t\t\t}),\n\t\t\t$prevSlide = this.$slides.eq(this.slider.previousIndex),\n\t\t\t$prevHeading = $prevSlide.find(this.$heading),\n\t\t\t$prevSubheading = $prevSlide.find(this.$subheading),\n\t\t\t$prevDescription = $prevSlide.find(this.$description),\n\t\t\t$prevLink = $prevSlide.find(this.$link),\n\t\t\t$activeSlide = this.$slides.eq(this.slider.realIndex),\n\t\t\t$activeHeading = $activeSlide.find(this.$heading),\n\t\t\t$activeSubheading = $activeSlide.find(this.$subheading),\n\t\t\t$activeDescription = $activeSlide.find(this.$description),\n\t\t\t$activeLink = $activeSlide.find(this.$link);\n\n\t\tthis.timeline.clear();\n\n\t\t/**\n\t\t * Animate out previous elements\n\t\t * and set current elements\n\t\t */\n\t\tif (this.$subheading && this.$subheading.length) {\n\t\t\tself.timeline.add([\n\t\t\t\tgsap.effects.hideChars(this.$subheading.not($activeSubheading), {\n\t\t\t\t\tduration: self.speed / 2,\n\t\t\t\t\tx: directions.out.x / 4,\n\t\t\t\t\ty: directions.out.y / 4,\n\t\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\t\tamount: self.staggerHeadings,\n\t\t\t\t\t\tfrom: directions.out.from\n\t\t\t\t\t}),\n\t\t\t\t\tease: self.ease\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideChars($activeSubheading, {\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tx: directions.in.x / 4,\n\t\t\t\t\ty: directions.in.y / 4,\n\t\t\t\t})\n\t\t\t], '0')\n\t\t}\n\n\t\tif (this.$heading && this.$heading.length) {\n\t\t\tself.timeline.add([\n\t\t\t\tgsap.effects.hideChars(this.$heading.not($activeHeading), {\n\t\t\t\t\tduration: self.speed,\n\t\t\t\t\tx: directions.out.x,\n\t\t\t\t\ty: directions.out.y,\n\t\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\t\tamount: self.staggerHeadings,\n\t\t\t\t\t\tfrom: directions.out.from\n\t\t\t\t\t}),\n\t\t\t\t\tease: self.ease\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideChars($activeHeading, {\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tx: directions.in.x,\n\t\t\t\t\ty: directions.in.y,\n\t\t\t\t})\n\t\t\t], '0');\n\t\t}\n\n\t\tif (this.$description && this.$description.length) {\n\t\t\tself.timeline.add([\n\t\t\t\tgsap.effects.hideLines(this.$description.not($activeDescription), {\n\t\t\t\t\tduration: self.speed,\n\t\t\t\t\ty: direction === 'next' ? '-100%' : '100%',\n\t\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\t\tfrom: direction === 'next' ? 'start' : 'end',\n\t\t\t\t\t\tamount: self.staggerTexts\n\t\t\t\t\t}),\n\t\t\t\t\tease: self.ease,\n\t\t\t\t}),\n\t\t\t\tgsap.effects.hideLines($activeDescription, {\n\t\t\t\t\tduration: 0,\n\t\t\t\t\ty: direction === 'next' ? '100%' : '-100%',\n\t\t\t\t}),\n\t\t\t], '0')\n\t\t}\n\n\t\tif ($prevLink.length) {\n\t\t\tself.timeline.to($prevLink, {\n\t\t\t\tduration: self.speed,\n\t\t\t\ty: (self.animationDirections.offset.y.next.out || self.animationDirections.offset.x.next.out) / -2,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tease: self.ease\n\t\t\t}, '0');\n\t\t}\n\n\t\t/**\n\t\t * Set current elements\n\t\t */\n\n\t\tif ($activeLink.length) {\n\t\t\tself.timeline.set($activeLink, {\n\t\t\t\ty: (self.animationDirections.offset.y.next.in || self.animationDirections.offset.x.next.in) / 2,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tease: self.ease,\n\t\t\t}, '0');\n\t\t}\n\n\t\t/**\n\t\t * All current elements are set\n\t\t */\n\t\tself.timeline.addLabel('elementsSet');\n\n\t\t/**\n\t\t * Animate in current elements\n\t\t */\n\t\tif ($activeSubheading.length) {\n\t\t\tself.timeline.animateChars($activeSubheading, {\n\t\t\t\tduration: self.speed,\n\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\tamount: self.staggerHeadings,\n\t\t\t\t\tfrom: directions.in.from,\n\t\t\t\t}),\n\t\t\t\tease: self.ease,\n\t\t\t}, `elementsSet-=${this.speed / 2}`);\n\t\t}\n\n\t\tif ($activeHeading.length) {\n\t\t\tself.timeline.animateChars($activeHeading, {\n\t\t\t\tduration: self.speed,\n\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\tamount: self.staggerHeadings,\n\t\t\t\t\tfrom: directions.in.from,\n\t\t\t\t}),\n\t\t\t\tease: self.ease,\n\t\t\t}, `elementsSet-=${this.speed / 2}`);\n\t\t}\n\n\t\tif ($activeDescription.length) {\n\t\t\tself.timeline.animateLines($activeDescription, {\n\t\t\t\tduration: self.speed,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tstagger: distributeByPosition({\n\t\t\t\t\tamount: self.staggerTexts,\n\t\t\t\t\tfrom: direction === 'next' ? 'start' : 'end',\n\t\t\t\t}),\n\t\t\t\tease: self.ease,\n\t\t\t}, `elementsSet-=${this.speed / 2}`);\n\t\t}\n\n\t\tif ($activeLink.length) {\n\t\t\tself.timeline.to($activeLink, {\n\t\t\t\tduration: self.speed,\n\t\t\t\ty: 0,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tease: self.ease,\n\t\t\t}, `elementsSet-=${this.speed / 2}`);\n\t\t}\n\n\t\tthis.timeline.timeScale(this.speed);\n\n\t}\n\n\t_getSlideAnimationDirections({\n\t\tdirection = 'next'\n\t}) {\n\t\tconst\n\t\t\tdirections = {\n\t\t\t\tin: {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\tfrom: 'start'\n\t\t\t\t},\n\t\t\t\tout: {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\tfrom: 'start'\n\t\t\t\t},\n\t\t\t};\n\t\tif (direction === 'next') {\n\t\t\t// next in\n\t\t\tdirections.in.x = this.animationDirections.offset.x.next.in;\n\t\t\tdirections.in.y = this.animationDirections.offset.y.next.in;\n\t\t\tdirections.in.from = this.animationDirections.from.next.in;\n\n\t\t\t// next out\n\t\t\tdirections.out.x = this.animationDirections.offset.x.next.out;\n\t\t\tdirections.out.y = this.animationDirections.offset.y.next.out;\n\t\t\tdirections.out.from = this.animationDirections.from.next.out;\n\t\t}\n\n\t\tif (direction === 'prev') {\n\t\t\t// prev in\n\t\t\tdirections.in.x = this.animationDirections.offset.x.prev.in;\n\t\t\tdirections.in.y = this.animationDirections.offset.y.prev.in;\n\t\t\tdirections.in.from = this.animationDirections.from.prev.in;\n\n\t\t\t// prev out\n\t\t\tdirections.out.x = this.animationDirections.offset.x.prev.out;\n\t\t\tdirections.out.y = this.animationDirections.offset.y.prev.out;\n\t\t\tdirections.out.from = this.animationDirections.from.prev.out;\n\t\t}\n\n\t\treturn directions;\n\t}\n\n\t_getAnimationDirections() {\n\t\tconst textAlign = this.$heading ? this.$heading.css('text-align') : 'left';\n\n\t\tconst directions = {\n\t\t\toffset: {\n\t\t\t\tx: {\n\t\t\t\t\tnext: {\n\t\t\t\t\t\tin: 0,\n\t\t\t\t\t\tout: 0\n\t\t\t\t\t},\n\t\t\t\t\tprev: {\n\t\t\t\t\t\tin: 0,\n\t\t\t\t\t\tout: 0\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ty: {\n\t\t\t\t\tnext: {\n\t\t\t\t\t\tin: 0,\n\t\t\t\t\t\tout: 0\n\t\t\t\t\t},\n\t\t\t\t\tprev: {\n\t\t\t\t\t\tin: 0,\n\t\t\t\t\t\tout: 0\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tfrom: {\n\t\t\t\tnext: {\n\t\t\t\t\tin: 'start',\n\t\t\t\t\tout: 'start'\n\t\t\t\t},\n\t\t\t\tprev: {\n\t\t\t\t\tin: 'end',\n\t\t\t\t\tout: 'end'\n\t\t\t\t},\n\t\t\t}\n\t\t};\n\n\t\tswitch (textAlign) {\n\t\t\tcase 'left':\n\t\t\t\t// text align left & slider horizontal\n\t\t\t\tif (this.direction === 'horizontal') {\n\t\t\t\t\tdirections.offset.x.next.in = this.offset;\n\t\t\t\t\tdirections.offset.x.next.out = -this.offset;\n\t\t\t\t\tdirections.offset.x.prev.in = -this.offset;\n\t\t\t\t\tdirections.offset.x.prev.out = this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'start';\n\t\t\t\t\tdirections.from.next.out = 'start';\n\t\t\t\t\tdirections.from.prev.in = 'end';\n\t\t\t\t\tdirections.from.prev.out = 'end';\n\t\t\t\t}\n\t\t\t\t// text align left & slider vertical\n\t\t\t\tif (this.direction === 'vertical') {\n\t\t\t\t\tdirections.offset.y.next.in = this.offset;\n\t\t\t\t\tdirections.offset.y.next.out = -this.offset;\n\t\t\t\t\tdirections.offset.y.prev.in = -this.offset;\n\t\t\t\t\tdirections.offset.y.prev.out = this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'end';\n\t\t\t\t\tdirections.from.next.out = 'start';\n\t\t\t\t\tdirections.from.prev.in = 'start';\n\t\t\t\t\tdirections.from.prev.out = 'end';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'center':\n\t\t\t\t// text align center & slider horizontal\n\t\t\t\tif (this.direction === 'horizontal') {\n\t\t\t\t\tdirections.offset.x.next.in = -this.offset;\n\t\t\t\t\tdirections.offset.x.next.out = this.offset;\n\t\t\t\t\tdirections.offset.x.prev.in = this.offset;\n\t\t\t\t\tdirections.offset.x.prev.out = -this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'end';\n\t\t\t\t\tdirections.from.next.out = 'end';\n\t\t\t\t\tdirections.from.prev.in = 'start';\n\t\t\t\t\tdirections.from.prev.out = 'start';\n\t\t\t\t}\n\t\t\t\t// text align left & slider vertical\n\t\t\t\tif (this.direction === 'vertical') {\n\t\t\t\t\tdirections.offset.y.next.in = this.offset;\n\t\t\t\t\tdirections.offset.y.next.out = -this.offset;\n\t\t\t\t\tdirections.offset.y.prev.in = -this.offset;\n\t\t\t\t\tdirections.offset.y.prev.out = this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'center';\n\t\t\t\t\tdirections.from.next.out = 'center';\n\t\t\t\t\tdirections.from.prev.in = 'center';\n\t\t\t\t\tdirections.from.prev.out = 'center';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\t// text align right & slider horizontal\n\t\t\t\tif (this.direction === 'horizontal') {\n\t\t\t\t\tdirections.offset.x.next.in = -this.offset;\n\t\t\t\t\tdirections.offset.x.next.out = this.offset;\n\t\t\t\t\tdirections.offset.x.prev.in = this.offset;\n\t\t\t\t\tdirections.offset.x.prev.out = -this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'end';\n\t\t\t\t\tdirections.from.next.out = 'end';\n\t\t\t\t\tdirections.from.prev.in = 'start';\n\t\t\t\t\tdirections.from.prev.out = 'start';\n\t\t\t\t}\n\t\t\t\t// text align right & slider vertical\n\t\t\t\tif (this.direction === 'vertical') {\n\n\t\t\t\t\tdirections.offset.y.next.in = -this.offset;\n\t\t\t\t\tdirections.offset.y.next.out = this.offset;\n\t\t\t\t\tdirections.offset.y.prev.in = this.offset;\n\t\t\t\t\tdirections.offset.y.prev.out = -this.offset;\n\n\t\t\t\t\tdirections.from.next.in = 'start';\n\t\t\t\t\tdirections.from.next.out = 'end';\n\t\t\t\t\tdirections.from.prev.in = 'end';\n\t\t\t\t\tdirections.from.prev.out = 'start';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn directions;\n\t}\n\n}\n","/* ======================================================================== */\n/* 67. SliderImages */\n/* ======================================================================== */\nclass SliderImages extends Slider {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\tset() {\n\n\t\tthis.$slider = this.$el.find('.js-slider-images__slider');\n\n\t\t// counter\n\t\tthis.$counterCurrent = this.$el.find('.js-slider__counter-current');\n\t\tthis.$counterTotal = this.$el.find('.js-slider__counter-total');\n\t\tthis.counterStyle = this.$slider.data('counter-style') || 'roman';\n\t\tthis.counterZeros = this.$slider.data('counter-add-zeros') || 0;\n\n\t\t// dragging\n\t\tthis.dragMouse = this.$slider.data('drag-mouse') || false;\n\t\tthis.dragCursor = this.$slider.data('drag-cursor') || false;\n\t\tthis.dragClass = this.$slider.data('drag-class') || '';\n\n\t\t// dots\n\t\tthis.$sliderDots = this.$el.find('.js-slider__dots');\n\t}\n\n\trun() {\n\t\tthis.breakpoints = this._setBreakPoints();\n\t\tthis.slider = this._getSlider();\n\t\tthis.sliderCounter = this._getSliderCounter({\n\t\t\tslider: this.slider,\n\t\t\tcounter: {\n\t\t\t\tcurrent: this.$counterCurrent,\n\t\t\t\ttotal: this.$counterTotal,\n\t\t\t\tstyle: this.counterStyle,\n\t\t\t\tzeros: this.counterZeros\n\t\t\t}\n\t\t});\n\n\t\t// dots\n\t\tif (this.$sliderDots.length) {\n\t\t\tthis._getSliderDots({\n\t\t\t\tslider: this.slider,\n\t\t\t\tcontainer: this.$sliderDots\n\t\t\t});\n\t\t}\n\n\t\t// slider drag\n\t\tif (this.dragCursor) {\n\t\t\tthis._emitDragEvents({\n\t\t\t\tslider: this.slider,\n\t\t\t\ttarget: document,\n\t\t\t\tcustomClass: this.dragClass\n\t\t\t});\n\t\t}\n\n\t\t// pause autoplay\n\t\tif (this.slider.params.autoplay.enabled) {\n\t\t\tthis._pauseAutoplay({\n\t\t\t\tslider: this.slider,\n\t\t\t});\n\t\t}\n\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\t// update height after images are loaded\n\t\tthis.slider.on('lazyImageReady', () => {\n\t\t\tthis.slider.update();\n\t\t});\n\n\t\twindow.$window\n\t\t\t.on('arts/barba/transition/end', () => {\n\t\t\t\tthis.slider.update();\n\t\t\t})\n\t\t\t.on('arts/preloader/end', () => {\n\t\t\t\tthis.slider.update();\n\t\t\t});\n\n\t\t// update slider geometry as images load\n\t\tthis.$el.imagesLoaded().progress({\n\t\t\tbackground: true\n\t\t}, (e) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.slider.update();\n\t\t\t}, 300);\n\t\t});\n\n\t\tsetTimeout(() => {\n\t\t\tthis.slider.updateAutoHeight();\n\t\t}, 300);\n\n\t}\n\n\t_setBreakPoints() {\n\t\tconst\n\t\t\tbreakpoints = {},\n\t\t\tlg = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.lg - 1 : 1024,\n\t\t\tmd = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.md - 1 : 767;\n\n\t\tbreakpoints[lg] = {\n\t\t\tslidesPerView: this.$slider.data('slides-per-view') || 1,\n\t\t\tspaceBetween: this.$slider.data('space-between') || 0,\n\t\t\tcenteredSlides: this.$slider.data('centered-slides') || false,\n\t\t};\n\t\tbreakpoints[md] = {\n\t\t\tslidesPerView: this.$slider.data('slides-per-view-tablet') || 1.33,\n\t\t\tspaceBetween: this.$slider.data('space-between-tablet') || 20,\n\t\t\tcenteredSlides: this.$slider.data('centered-slides-tablet') || true,\n\t\t};\n\t\tbreakpoints[0] = {\n\t\t\tslidesPerView: this.$slider.data('slides-per-view-mobile') || 1.16,\n\t\t\tspaceBetween: this.$slider.data('space-between-mobile') || 10,\n\t\t\tcenteredSlides: this.$slider.data('centered-slides-mobile') || true,\n\t\t};\n\n\t\treturn breakpoints;\n\t}\n\n\t_getSlider() {\n\t\treturn new Swiper(this.$slider, {\n\t\t\tsimulateTouch: this.dragMouse ? true : false,\n\t\t\tautoHeight: this.$slider.data('auto-height'),\n\t\t\tspeed: this.$slider.data('speed') || 1200,\n\t\t\tpreloadImages: false,\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: 3,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t},\n\t\t\tslideToClickedSlide: true,\n\t\t\ttouchRatio: this.$slider.data('touch-ratio') || 2,\n\t\t\tobserver: true,\n\t\t\twatchSlidesProgress: true,\n\t\t\twatchSlidesVisibility: true,\n\t\t\tcenteredSlides: this.$slider.data('centered-slides') || false,\n\t\t\tslidesPerView: 1,\n\t\t\tautoplay: {\n\t\t\t\tdisableOnInteraction: false,\n\t\t\t\tenabled: this.$slider.data('autoplay-enabled') || false,\n\t\t\t\tdelay: this.$slider.data('autoplay-delay') || 6000,\n\t\t\t},\n\t\t\tspaceBetween: this.$slider.data('space-between') || 60,\n\t\t\tpagination: {\n\t\t\t\tel: this.$el.find('.js-slider__dots').get(0),\n\t\t\t\ttype: 'bullets',\n\t\t\t\tbulletElement: 'div',\n\t\t\t\tclickable: true,\n\t\t\t\tbulletClass: 'slider__dot',\n\t\t\t\tbulletActiveClass: 'slider__dot_active'\n\t\t\t},\n\t\t\tnavigation: {\n\t\t\t\tnextEl: this.$el.find('.js-slider__arrow-next'),\n\t\t\t\tprevEl: this.$el.find('.js-slider__arrow-prev'),\n\t\t\t},\n\t\t\tbreakpoints: this.breakpoints,\n\t\t\tparallax: true,\n\t\t\ttouchEventsTarget: 'container',\n\t\t\tkeyboard: {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t},\n\t\t\tmousewheel: this.$slider.data('mousewheel-enabled') ? {\n\t\t\t\teventsTarged: this.$el.get(0),\n\t\t\t\teventsTarget: this.$el.get(0),\n\t\t\t\treleaseOnEdges: true,\n\t\t\t} : false,\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 68. SliderFullscreenProjects */\n/* ======================================================================== */\nclass SliderFullscreenProjects extends Slider {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\tset() {\n\t\t// sliders\n\t\tthis.$sliderImg = this.$target.find('.js-slider-fullscreen-projects__images');\n\t\tthis.$sliderContent = this.$target.find('.js-slider-fullscreen-projects__content');\n\t\tthis.$sliderFooter = this.$target.find('.js-slider-fullscreen-projects__footer');\n\n\t\t// canvas for WebGL effects\n\t\tthis.$canvas = this.$target.find('.slider__canvas');\n\t\tthis.$canvasWrapper = this.$target.find('.slider__wrapper-canvas-inner');\n\n\t\t// content\n\t\tthis.$heading = this.$target.find('.slider__heading');\n\t\tthis.$subheading = this.$target.find('.slider__subheading');\n\t\tthis.$description = this.$target.find('.slider__text');\n\t\tthis.$link = this.$target.find('.slider__wrapper-button');\n\t\tthis.$images = this.$sliderImg.find('.slider__images-slide-inner');\n\n\t\t// params\n\t\tthis.sliderSpeed = this.$sliderImg.data('speed') || 600;\n\t\tthis.isSliderReveal = this.$target.hasClass('js-slider-reveal');\n\t\tthis.revealClass = 'slider-fullscreen-projects__images_reveal';\n\n\t\t// dragging\n\t\tthis.dragMouse = this.$sliderImg.data('drag-mouse') || false;\n\t\tthis.dragCursor = this.$sliderImg.data('drag-cursor') || false;\n\t\tthis.dragClass = this.$sliderImg.data('drag-class') || '';\n\n\t\tthis.transitionEffect = this.$sliderImg.data('transition-effect');\n\t\tthis.effectIntensity = this.$sliderImg.data('transition-effect-intensity') || 0.2;\n\t\tthis.displacementImage = this.$sliderImg.data('transition-displacement-img') || '';\n\t\tthis.aspectRatio = this.$sliderImg.data('aspect-ratio') || 1.5;\n\n\t\t// counter\n\t\tthis.$counterCurrent = this.$target.find('.js-slider-fullscreen-projects__counter-current');\n\t\tthis.$counterTotal = this.$target.find('.js-slider-fullscreen-projects__counter-total');\n\t\tthis.counterStyle = this.$sliderImg.data('counter-style') || 'roman';\n\t\tthis.counterZeros = this.$sliderImg.data('counter-add-zeros') || 0;\n\n\t\t// categories\n\t\tthis.$sliderCategories = this.$target.find('.js-slider__categories');\n\n\t\t// dots\n\t\tthis.$sliderDots = this.$target.find('.js-slider__dots');\n\t}\n\n\trun() {\n\t\t// Swiper instances\n\t\tthis.sliderImg = this._getSliderImages();\n\t\tthis.sliderContent = this._getSliderContent();\n\t\tthis.sliderCounter = this._getSliderCounter({\n\t\t\tslider: this.sliderImg,\n\t\t\tcounter: {\n\t\t\t\tcurrent: this.$counterCurrent,\n\t\t\t\ttotal: this.$counterTotal,\n\t\t\t\tstyle: this.counterStyle,\n\t\t\t\tzeros: this.counterZeros\n\t\t\t}\n\t\t});\n\t\tthis.sliderFooter = this._getSliderFooter();\n\n\t\t// distortion effect\n\t\tif (this.transitionEffect === 'distortion') {\n\t\t\tthis.distortionEffect = this._setSliderDistortionEffect();\n\t\t}\n\n\t\t// connect sliders\n\t\tthis.sliderImg.controller.control.push(this.sliderContent);\n\t\tthis.sliderContent.controller.control.push(this.sliderImg);\n\n\t\t// text transitions\n\t\tthis._setSliderTextTransitions();\n\n\t\t// slider drag\n\t\tif (this.dragCursor) {\n\t\t\tthis._emitDragEvents({\n\t\t\t\tslider: this.sliderImg,\n\t\t\t\ttarget: document,\n\t\t\t\tcustomClass: this.dragClass\n\t\t\t});\n\t\t}\n\n\t\t// pause autoplay\n\t\tif (this.sliderImg.params.autoplay.enabled) {\n\t\t\tthis._pauseAutoplay({\n\t\t\t\tslider: this.sliderImg,\n\t\t\t});\n\t\t}\n\n\t\t// set reveal backgrounds\n\t\tif (this.isSliderReveal) {\n\t\t\tthis._setSliderReveal();\n\t\t}\n\n\t\t// dots\n\t\tif (this.$sliderDots.length) {\n\t\t\tthis._getSliderDots({\n\t\t\t\tslider: this.sliderImg,\n\t\t\t\tcontainer: this.$sliderDots\n\t\t\t});\n\t\t}\n\n\t\t// categories indicator\n\t\tif (this.$sliderCategories.length) {\n\t\t\tthis._getCategoriesSlider();\n\t\t}\n\t}\n\n\t_getSliderImages() {\n\t\tif (!this.$sliderImg.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn new Swiper(this.$sliderImg, {\n\t\t\tsimulateTouch: this.dragMouse ? true : false,\n\t\t\tdirection: this.$sliderImg.data('direction') || 'horizontal',\n\t\t\tslidesPerView: this.$sliderImg.data('slides-per-view') || 1,\n\t\t\ttouchRatio: this.$sliderImg.data('touch-ratio') || 1,\n\t\t\teffect: this.isSliderReveal ? 'fade' : 'slide',\n\t\t\tallowTouchMove: this.transitionEffect === 'distortion' ? false : true,\n\t\t\tfadeEffect: {\n\t\t\t\tcrossFade: true\n\t\t\t},\n\t\t\tcenteredSlides: true,\n\t\t\tparallax: true,\n\t\t\tspeed: this.sliderSpeed,\n\t\t\tpreloadImages: false,\n\t\t\tupdateOnImagesReady: true,\n\t\t\tgrabCursor: true,\n\t\t\tlazy: {\n\t\t\t\tloadPrevNextAmount: 4,\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t},\n\t\t\tslideToClickedSlide: true,\n\t\t\tkeyboard: {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t},\n\t\t\tautoplay: {\n\t\t\t\tdisableOnInteraction: false,\n\t\t\t\tenabled: this.$sliderImg.data('autoplay-enabled') || false,\n\t\t\t\tdelay: this.$sliderImg.data('autoplay-delay') || 6000,\n\t\t\t},\n\t\t\tmousewheel: this.$sliderImg.data('mousewheel-enabled') ? {\n\t\t\t\teventsTarged: this.$target.get(0),\n\t\t\t\teventsTarget: this.$target.get(0),\n\t\t\t\treleaseOnEdges: true,\n\t\t\t} : false,\n\t\t\tpagination: {\n\t\t\t\tel: this.$el.find('.js-slider__dots').get(0),\n\t\t\t\ttype: 'bullets',\n\t\t\t\tbulletElement: 'div',\n\t\t\t\tclickable: true,\n\t\t\t\tbulletClass: 'slider__dot',\n\t\t\t\tbulletActiveClass: 'slider__dot_active'\n\t\t\t},\n\t\t\tnavigation: {\n\t\t\t\tnextEl: this.$el.find('.js-slider__arrow-next').get(0),\n\t\t\t\tprevEl: this.$el.find('.js-slider__arrow-prev').get(0),\n\t\t\t},\n\t\t\tcontroller: {\n\t\t\t\tcontrol: [],\n\t\t\t\tby: 'container'\n\t\t\t},\n\t\t});\n\t}\n\n\t_getSliderContent() {\n\t\tif (!this.$sliderContent.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn new Swiper(this.$sliderContent, {\n\t\t\t// simulateTouch: this.dragMouse ? true : false,\n\t\t\tcenteredSlides: true,\n\t\t\tnested: true,\n\t\t\tspeed: this.sliderSpeed,\n\t\t\tautoHeight: true,\n\t\t\teffect: 'fade',\n\t\t\tfadeEffect: {\n\t\t\t\tcrossFade: true\n\t\t\t},\n\t\t\tvirtualTranslate: true,\n\t\t\tallowTouchMove: false,\n\t\t\ttouchRatio: this.$sliderImg.data('touch-ratio') || 1,\n\t\t\twatchSlidesProgress: true,\n\t\t\tcontroller: {\n\t\t\t\tcontrol: [],\n\t\t\t\tby: 'container'\n\t\t\t}\n\t\t});\n\t}\n\n\t_getSliderFooter() {\n\t\tif (this.$sliderFooter.length) {\n\t\t\tconst sliderFooter = new Swiper(this.$sliderFooter, {\n\t\t\t\tcenteredSlides: true,\n\t\t\t\tspeed: this.sliderSpeed,\n\t\t\t\teffect: 'fade',\n\t\t\t\tfadeEffect: {\n\t\t\t\t\tcrossFade: true\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.sliderImg.controller.control.push(sliderFooter);\n\t\t}\n\t}\n\n\t_setSliderReveal() {\n\t\treturn new SliderHoverBackgrounds({\n\t\t\ttarget: this.$sliderImg,\n\t\t\tscope: this.$scope,\n\t\t\tsliderImg: this.sliderImg,\n\t\t\timages: this.$images,\n\t\t\tlinks: this.$sliderContent.find('a'),\n\t\t\thoverClass: this.revealClass\n\t\t})\n\t}\n\n\t_getCategoriesSlider() {\n\t\treturn new SliderCategories({\n\t\t\ttarget: this.$sliderCategories,\n\t\t\tscope: this.$scope,\n\t\t\tsliderContent: this.sliderContent,\n\t\t\tlinks: this.$sliderContent.find('a')\n\t\t});\n\t}\n\n\t_setSliderDistortionEffect() {\n\t\tthis.sliderImg.params.preloadImages = false;\n\t\tthis.sliderImg.params.lazy = false;\n\t\tthis.sliderImg.params.effect = 'fade';\n\t\tthis.sliderImg.params.fadeEffect.crossFade = true;\n\n\t\treturn new SliderDistortionEffect({\n\t\t\tscope: this.$scope,\n\t\t\tslider: this.sliderImg,\n\t\t\ttarget: this.$sliderImg,\n\t\t\tintensity: this.effectIntensity,\n\t\t\taspectRatio: this.aspectRatio,\n\t\t\tcanvas: this.$canvas,\n\t\t\tcanvasWrapper: this.$canvasWrapper,\n\t\t\tdisplacementImage: this.displacementImage\n\t\t});\n\t}\n\n\t_setSliderTextTransitions() {\n\t\treturn new SliderTextTransitions({\n\t\t\tslider: this.sliderContent,\n\t\t\tdirection: this.sliderImg.params.direction,\n\t\t\toffset: 50,\n\t\t\theading: this.$heading,\n\t\t\tsubheading: this.$subheading,\n\t\t\tdescription: this.$description,\n\t\t\tlink: this.$link\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 69. SliderTestimonials */\n/* ======================================================================== */\nclass SliderTestimonials extends Slider {\n\n\tconstructor({\n\t\tscope,\n\t\ttarget\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t}\n\n\tset() {\n\n\t\t// counter\n\t\tthis.$counterCurrent = this.$target.find('.js-slider-testimonials__counter-current');\n\t\tthis.$counterTotal = this.$target.find('.js-slider-testimonials__counter-total');\n\t\tthis.counterStyle = this.$target.data('counter-style') || 'roman';\n\t\tthis.counterZeros = this.$target.data('counter-add-zeros') || 0;\n\t\tthis.$text = this.$target.find('.slider-testimonials__text');\n\n\t\t// params\n\t\tthis.dragCursor = this.$target.data('drag-cursor') || false;\n\t\tthis.dragClass = this.$target.data('drag-class') || '';\n\n\t\t// dots\n\t\tthis.$sliderDots = this.$target.find('.js-slider__dots');\n\t}\n\n\trun() {\n\t\tthis.breakpoints = this._setBreakPoints();\n\t\tthis.slider = this._getSlider();\n\n\t\t// counter\n\t\tif (this.$counterCurrent.length) {\n\t\t\tthis.sliderCounter = this._getSliderCounter({\n\t\t\t\tslider: this.slider,\n\t\t\t\tcounter: {\n\t\t\t\t\tcurrent: this.$counterCurrent,\n\t\t\t\t\ttotal: this.$counterTotal,\n\t\t\t\t\tstyle: this.counterStyle,\n\t\t\t\t\tzeros: this.counterZeros\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// dots\n\t\tif (this.$sliderDots.length) {\n\t\t\tthis._getSliderDots({\n\t\t\t\tslider: this.slider,\n\t\t\t\tcontainer: this.$sliderDots\n\t\t\t});\n\t\t}\n\n\t\t// slider drag\n\t\tif (this.dragCursor) {\n\t\t\tthis._emitDragEvents({\n\t\t\t\tslider: this.slider,\n\t\t\t\ttarget: document,\n\t\t\t\tcustomClass: this.dragClass\n\t\t\t});\n\t\t}\n\n\t\t// pause autoplay\n\t\tif (this.slider.params.autoplay.enabled) {\n\t\t\tthis._pauseAutoplay({\n\t\t\t\tslider: this.slider,\n\t\t\t});\n\t\t}\n\n\t\t// text transitions\n\t\tthis._setSliderTextTransitions();\n\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\t// update height after images are loaded\n\t\tthis.slider.on('lazyImageReady', () => {\n\t\t\tthis.slider.update();\n\t\t});\n\n\t\t// update slider geometry as images load\n\t\tthis.$target.imagesLoaded().progress({\n\t\t\tbackground: true\n\t\t}, (e) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.slider.update();\n\t\t\t}, 300);\n\t\t});\n\n\t}\n\n\t_setBreakPoints() {\n\t\tconst\n\t\t\tbreakpoints = {},\n\t\t\tlg = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.lg - 1 : 1024,\n\t\t\tmd = window.elementorFrontend ? window.elementorFrontend.config.breakpoints.md - 1 : 767;\n\n\t\tbreakpoints[lg] = {\n\t\t\tslidesPerView: this.$target.data('slides-per-view') || 1,\n\t\t\tspaceBetween: this.$target.data('space-between') || 0,\n\t\t\tcenteredSlides: this.$target.data('centered-slides') || false,\n\t\t};\n\t\tbreakpoints[md] = {\n\t\t\tslidesPerView: this.$target.data('slides-per-view-tablet') || 1.33,\n\t\t\tspaceBetween: this.$target.data('space-between-tablet') || 20,\n\t\t\tcenteredSlides: this.$target.data('centered-slides-tablet') || true,\n\t\t};\n\t\tbreakpoints[320] = {\n\t\t\tslidesPerView: this.$target.data('slides-per-view-mobile') || 1.16,\n\t\t\tspaceBetween: this.$target.data('space-between-mobile') || 10,\n\t\t\tcenteredSlides: this.$target.data('centered-slides-mobile') || true,\n\t\t};\n\n\t\treturn breakpoints;\n\t}\n\n\t_getSlider() {\n\t\treturn new Swiper(this.$target, {\n\t\t\teffect: 'fade',\n\t\t\tfadeEffect: {\n\t\t\t\tcrossFade: true\n\t\t\t},\n\t\t\tvirtualTranslate: true,\n\t\t\tallowTouchMove: false,\n\t\t\tdirection: 'horizontal',\n\t\t\tautoHeight: true,\n\t\t\tspeed: this.$target.data('speed') || 1200,\n\t\t\tautoplay: {\n\t\t\t\tdisableOnInteraction: false,\n\t\t\t\tenabled: this.$target.data('autoplay-enabled') || false,\n\t\t\t\tdelay: this.$target.data('autoplay-delay') || 6000,\n\t\t\t},\n\t\t\tpagination: {\n\t\t\t\tel: this.$el.find('.js-slider__dots').get(0),\n\t\t\t\ttype: 'bullets',\n\t\t\t\tbulletElement: 'div',\n\t\t\t\tclickable: true,\n\t\t\t\tbulletClass: 'slider__dot',\n\t\t\t\tbulletActiveClass: 'slider__dot_active'\n\t\t\t},\n\t\t\tnavigation: {\n\t\t\t\tnextEl: this.$el.find('.js-slider__arrow-next').get(0),\n\t\t\t\tprevEl: this.$el.find('.js-slider__arrow-prev').get(0),\n\t\t\t},\n\t\t\tpreloadImages: false,\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: 3,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t},\n\t\t});\n\t}\n\n\t_setSliderTextTransitions() {\n\t\treturn new SliderTextTransitions({\n\t\t\tslider: this.slider,\n\t\t\toffset: 50,\n\t\t\tdescription: this.$text\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 70. MobileBarHeight */\n/* ======================================================================== */\nclass MobileBarHeight {\n\tconstructor() {\n\t\tthis.vh = 0;\n\t\tthis._createStyleElement();\n\t\tthis._setVh();\n\t\tthis._bindEvents();\n\t}\n\n\t_setVh() {\n\t\tthis.vh = window.innerHeight * 0.01;\n\t\t$('#arts-fix-bar').html(`:root { --fix-bar-vh: ${this.vh}px; }`);\n\t}\n\n\t_bindEvents() {\n\t\twindow.$window.on('resize', debounce(() => {\n\t\t\tthis._setVh();\n\t\t}, 250));\n\t}\n\n\t_createStyleElement() {\n\t\tif (!$('#arts-fix-bar').length) {\n\t\t\t$('head').append('');\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 71. debounce */\n/* ======================================================================== */\nfunction debounce(func, wait, immediate) {\n\n\tlet timeout;\n\n\treturn () => {\n\n\t\tlet\n\t\t\tcontext = this,\n\t\t\targs = arguments;\n\n\t\tlet later = () => {\n\n\t\t\ttimeout = null;\n\n\t\t\tif (!immediate) {\n\t\t\t\tfunc.apply(context, args)\n\t\t\t};\n\n\t\t};\n\n\t\tlet callNow = immediate && !timeout;\n\n\t\tclearTimeout(timeout);\n\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (callNow) {\n\t\t\tfunc.apply(context, args)\n\t\t};\n\n\t};\n\n};\n","/* ======================================================================== */\n/* 72. distributeByPosition */\n/* ======================================================================== */\n/*\npass in an object with any of the following optional properties (just like the stagger special object):\n{\n amount: amount (in seconds) that should be distributed\n from: \"center\" | \"end\" | \"start\" | index value (integer)\n ease: any ease, like Power1.easeOut\n axis: \"x\" | \"y\" (or omit, and it'll be based on both the x and y positions)\n}\n*/\nfunction distributeByPosition(vars) {\n\tlet ease = vars.ease,\n\t\tfrom = vars.from || 0,\n\t\tbase = vars.base || 0,\n\t\taxis = vars.axis,\n\t\tratio = {\n\t\t\tcenter: 0.5,\n\t\t\tend: 1\n\t\t} [from] || 0,\n\t\tdistances;\n\treturn function (i, target, a) {\n\t\tlet l = a.length,\n\t\t\toriginX, originY, x, y, d, j, minX, maxX, minY, maxY, positions;\n\t\tif (!distances) {\n\t\t\tdistances = [];\n\t\t\tminX = minY = Infinity;\n\t\t\tmaxX = maxY = -minX;\n\t\t\tpositions = [];\n\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\td = a[j].getBoundingClientRect();\n\t\t\t\tx = (d.left + d.right) / 2; //based on the center of each element\n\t\t\t\ty = (d.top + d.bottom) / 2;\n\t\t\t\tif (x < minX) {\n\t\t\t\t\tminX = x;\n\t\t\t\t}\n\t\t\t\tif (x > maxX) {\n\t\t\t\t\tmaxX = x;\n\t\t\t\t}\n\t\t\t\tif (y < minY) {\n\t\t\t\t\tminY = y;\n\t\t\t\t}\n\t\t\t\tif (y > maxY) {\n\t\t\t\t\tmaxY = y;\n\t\t\t\t}\n\t\t\t\tpositions[j] = {\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t};\n\t\t\t}\n\t\t\toriginX = isNaN(from) ? minX + (maxX - minX) * ratio : positions[from].x || 0;\n\t\t\toriginY = isNaN(from) ? minY + (maxY - minY) * ratio : positions[from].y || 0;\n\t\t\tmaxX = 0;\n\t\t\tminX = Infinity;\n\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\tx = positions[j].x - originX;\n\t\t\t\ty = originY - positions[j].y;\n\t\t\t\tdistances[j] = d = !axis ? Math.sqrt(x * x + y * y) : Math.abs((axis === \"y\") ? y : x);\n\t\t\t\tif (d > maxX) {\n\t\t\t\t\tmaxX = d;\n\t\t\t\t}\n\t\t\t\tif (d < minX) {\n\t\t\t\t\tminX = d;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdistances.max = maxX - minX;\n\t\t\tdistances.min = minX;\n\t\t\tdistances.v = l = vars.amount || (vars.each * l) || 0;\n\t\t\tdistances.b = (l < 0) ? base - l : base;\n\t\t}\n\t\tl = (distances[i] - distances.min) / distances.max;\n\t\treturn distances.b + (ease ? ease.getRatio(l) : l) * distances.v;\n\t};\n}\n","/* ======================================================================== */\n/* 73. getStaggerFrom */\n/* ======================================================================== */\nfunction getStaggerFrom($target) {\n if (!$target || !$target.length) {\n return;\n }\n\n const textAlign = $target.css('text-align');\n\n switch (textAlign) {\n case 'left':\n return 'start';\n case 'center':\n return 'center';\n case 'right':\n return 'end';\n }\n}\n","/* ======================================================================== */\n/* 74. isAnchor */\n/* ======================================================================== */\nfunction checkIsAnchor($el) {\n\tconst link = $el.attr('href');\n\n\tif ($el.length && link.length && link !== '#') {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}\n","/* ======================================================================== */\n/* 75. math */\n/* ======================================================================== */\nNumber.prototype.map = function (in_min, in_max, out_min, out_max) {\n\treturn ((this - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min\n}\n","/* ======================================================================== */\n/* 76. runOnHighPerformanceGPU */\n/* ======================================================================== */\nfunction runOnHighPerformanceGPU() {\n\n\tconst webGLCanvas = document.getElementById('js-webgl');\n\n\tif (typeof webGLCanvas !== 'undefined' && webGLCanvas !== null) {\n\t\twebGLCanvas.getContext('webgl', {\n\t\t\tpowerPreference: 'high-performance'\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 77. syncAttributes */\n/* ======================================================================== */\nfunction syncAttributes($sourceElement, $targetElement) {\n\tif (!$sourceElement.length || !$targetElement.length) {\n\t\treturn;\n\t}\n\n\t$targetElement.attr($sourceElement.getAllAttributes());\n}\n"]}