{"version":3,"sources":["common.js","Animations.js","AssetsManager.js","BaseComponent.js","PSWP.js","Scroll.js","Slider.js","PJAX/PJAX Animate Cloned Heading.js","PJAX/PJAX Animate Cloned Image.js","PJAX/PJAX Animate Container.js","PJAX/PJAX Animate Curtain.js","PJAX/PJAX Animate Overlay Menu.js","PJAX/PJAX Clear Container.js","PJAX/PJAX Clone Heading.js","PJAX/PJAX Clone Image.js","PJAX/PJAX Fallback Cloned Image.js","PJAX/PJAX Finish Loading.js","PJAX/PJAX Init New Page.js","PJAX/PJAX Init Next Masthead.js","PJAX/PJAX Set Body Background.js","PJAX/PJAX Set Current Container.js","PJAX/PJAX Set Next Container.js","PJAX/PJAX Start Loading.js","PJAX/PJAX Transition Auto Scroll Next.js","PJAX/PJAX Transition General.js","PJAX/PJAX Transition Overlay Menu.js","PJAX/PJAX Update Ad Trackers.js","PJAX/PJAX Update Body.js","PJAX/PJAX Update Head.js","PJAX/PJAX Update Nodes Attributes.js","PJAX/PJAX Update Scripts.js","PJAX/PJAX Update Styles.js","PJAX/PJAX.js","artsHover/ArtsHover.js","buttonCircles/ButtonCircles.js","countDown/CountDown.js","filter/Filter.js","form/Form.js","form/FormAJAX.js","gmap/Gmap.js","grid/Grid.js","pswp/PSWPGallery.js","scrollDown/ScrollDown.js","sectionFixedReveal/SectionFixedReveal.js","sectionHorizontalScroll/SectionHorizontalScroll.js","slider/SliderDots.js","slider/SliderTextTransitions.js","smoothScroll/SmoothScroll.js","utilities/MobileBarHeight.js","utilities/debounce.js","utilities/distributeByPosition.js","utilities/getColorValues.js","utilities/getResponsiveResizeEvent.js","utilities/isBrowserFirefox.js","utilities/runOnHighPerformanceGPU.js","utilities/sanitizeSelector.js","utilities/syncAttributes.js","helpers/lazy/LazyLoad.js","layout/preloader/Preloader.js","layout/header/Header.js","section/sectionContent/SectionContent.js","section/sectionGrid/SectionGrid.js","section/sectionNavProjects/SectionNavProjects.js","section/sectionMasthead/SectionMasthead.js","section/sectionScrollThemeSwitch/SectionScrollThemeSwitch.js","section/sectionSliderImages/SectionSliderImages.js","section/sectionSliderProjects/SectionSliderProjects.js","section/sectionSliderProjectsFullscreen/SectionSliderProjectsFullscreen.js","section/sectionTestimonials/SectionTestimonials.js","slider/sliderImages/SliderImages.js","slider/sliderMenu/SliderMenu.js","slider/sliderProjects/SliderProjects.js","slider/sliderProjectsFullscreen/SliderProjectsFullscreen.js","slider/sliderTestimonials/SliderTestimonials.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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5nBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzBA;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;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;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;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;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;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;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACndA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;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;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACr8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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 * GSAP: turn off console warnings\n * and include plugins\n */\ngsap.config({ nullTargetWarn: false });\ngsap.registerPlugin(DrawSVGPlugin);\ngsap.registerPlugin(ScrollTrigger);\n\n/**\n * Global Vars\n */\nwindow.$document = $(document);\nwindow.$window = $(window);\nwindow.$body = $('body');\nwindow.$html = $('html');\nwindow.$pageHeader = $('#page-header');\nwindow.$pagePreloader = $('#js-preloader');\nwindow.$pageWrapper = $('#page-wrapper');\nwindow.$pageContent = $('.page-wrapper__content');\nwindow.$transitionCurtain = $('#js-page-transition-curtain');\nwindow.$barbaWrapper = $('[data-barba=\"wrapper\"]');\nwindow.$cursor = $('#js-arts-cursor');\nwindow.$spinner = $('#js-spinner');\n\n/**\n * Default Template Options\n */\nif (typeof window.kinsey === 'undefined') {\n\twindow.kinsey = {\n\t\tloading: new Preloader(),\n\t\ttheme: {\n\t\t\tajax: {\n\t\t\t\tenabled: true,\n\t\t\t\tpreventRules: '', // jQuery selectors of the elements to exclude them from AJAX transitions\n\t\t\t\tupdateNodesAttributes: '',\n\t\t\t\tupdateScriptNodes: '',\n\t\t\t\tloadMissingScripts: true,\n\t\t\t\tloadMissingStyles: true,\n\t\t\t\tevalInlineContainerScripts: false\n\t\t\t},\n\t\t\tanimations: {\n\t\t\t\ttriggerHook: 0.15,\n\t\t\t\ttimeScale: { // slow down or speed up the animations\n\t\t\t\t\tonScrollReveal: 1.0,\n\t\t\t\t\toverlayMenuOpen: 1.0,\n\t\t\t\t\toverlayMenuClose: 1.5,\n\t\t\t\t\tpreloader: 1.0,\n\t\t\t\t\tajaxFlyingImageTransition: 1.0,\n\t\t\t\t\tajaxCurtainTransition: 1.0\n\t\t\t\t}\n\t\t\t},\n\t\t\tcursorFollower: {\n\t\t\t\tenabled: true,\n\t\t\t\thighlight: {\n\t\t\t\t\tscale: 1.5\n\t\t\t\t},\n\t\t\t\tarrows: {\n\t\t\t\t\tdistance: 45\n\t\t\t\t},\n\t\t\t\ttrailing: 8,\n\t\t\t\tanimationDuration: 0.25\n\t\t\t},\n\t\t\tsmoothScroll: { // more info https://github.com/idiotWu/smooth-scrollbar/tree/develop/docs\n\t\t\t\tenabled: true,\n\t\t\t\tdamping: 0.12,\n\t\t\t\trenderByPixels: true,\n\t\t\t\tcontinuousScrolling: false,\n\t\t\t\tplugins: {\n\t\t\t\t\tedgeEasing: true,\n\t\t\t\t\tdisableScroll: {\n\t\t\t\t\t\tdirection: 'x'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tmobileBarFix: {\n\t\t\t\tenabled: true,\n\t\t\t\tupdate: true\n\t\t\t},\n\t\t\tisFirstLoad: true\n\t\t},\n\t\tassets: {\n\t\t\tpromises: []\n\t\t}\n\t}\n}\n\n/* Start Preloader */\nwindow.kinsey.loading.start();\n\n/**\n * Page Load Strategy\n */\ndocument.addEventListener('DOMContentLoaded', (e) => {\n\n\tnew Animations();\n\n\t// init on each AJAX transition\n\tif (e.detail) {\n\n\t\tinitComponents(e.detail);\n\n\t} else { // init only on initial page load\n\n\t\tinitComponentsOnce({\n\t\t\tscope: window.$document\n\t\t});\n\n\t\tinitComponents({\n\t\t\tscope: window.$document\n\t\t});\n\n\t\tsetTimeout(() => {\n\t\t\twindow.kinsey.loading.finish();\n\t\t}, 1200);\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\tscrollToHashElement = true\n}) {\n\n\tconst\n\t\t$smoothScrollContainer = container.filter('.js-smooth-scroll'),\n\t\t$sectionMasthead = scope.find('.section-masthead:not(.d-none):not(.js-cancel-init)'),\n\t\t$sectionSliderProjects = scope.find('.section-slider-projects'),\n\t\t$sectionSliderProjectsFullscreen = scope.find('.section-slider-projects-fullscreen'),\n\t\t$sectionNavProjects = scope.find('.section-nav-projects'),\n\t\t$sectionSliderImages = scope.find('.section-slider-images'),\n\t\t$sectionHorizontalScroll = scope.find('[data-arts-horizontal-scroll=\"container\"]'),\n\t\t$sectionFixedReveal = scope.find('[data-arts-fixed-reveal]'),\n\t\t$sectionContent = scope.find('.section-content'),\n\t\t$sectionTestimonials = scope.find('.section-testimonials'),\n\t\t$sectionScrollThemeSwitch = scope.find('.section-scroll-theme-switch'),\n\t\t$googleMap = scope.find('.js-gmap'),\n\t\t$hoverGroup = scope.find('[data-arts-hover-class]'),\n\t\t$buttonCircles = scope.find('.js-button-circles'),\n\t\t$gallery = scope.find('.js-gallery'),\n\t\t$sectionGrid = scope.find('.section-grid'),\n\t\t$scrollDown = scope.find('[data-arts-scroll-down]'),\n\t\t$countDown = scope.find('[data-count-down]'),\n\t\t$formContact = scope.find('.js-ajax-form');\n\n\tif ($smoothScrollContainer.length) {\n\t\tnew SmoothScroll({\n\t\t\ttarget: $smoothScrollContainer,\n\t\t\tadminBar: $('#wpadminbar'),\n\t\t\tabsoluteElements: $('[data-arts-scroll-absolute]'), // correct handling of absolute elements OUTSIDE scrolling container\n\t\t\tfixedElements: $('[data-arts-scroll-fixed]') // correct handling of fixed elements INSIDE scrolling container\n\t\t});\n\t}\n\n\tif ($sectionMasthead.length) {\n\t\t$sectionMasthead.each(function () {\n\t\t\tnew SectionMasthead({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\t// mobile bottom bar height fix\n\tif (window.kinsey.theme.mobileBarFix.enabled) {\n\t\tnew MobileBarHeight();\n\t}\n\n\tif ($sectionGrid.length) {\n\t\t$sectionGrid.each(function () {\n\t\t\tnew SectionGrid({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionSliderProjectsFullscreen.length) {\n\t\t$sectionSliderProjectsFullscreen.each(function () {\n\t\t\tnew SectionSliderProjectsFullscreen({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionSliderProjects.length) {\n\t\t$sectionSliderProjects.each(function () {\n\t\t\tnew SectionSliderProjects({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionSliderImages.length) {\n\t\t$sectionSliderImages.each(function () {\n\t\t\tnew SectionSliderImages({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionHorizontalScroll.length) {\n\t\t$sectionHorizontalScroll.each(function() {\n\t\t\tnew SectionHorizontalScroll({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionFixedReveal.length) {\n\t\t$sectionFixedReveal.each(function () {\n\t\t\tnew SectionFixedReveal({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($buttonCircles.length) {\n\t\t$buttonCircles.each(function () {\n\t\t\tnew ButtonCircles({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($hoverGroup.length) {\n\t\t$hoverGroup.each(function () {\n\t\t\tnew ArtsHover({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tnew Form({\n\t\ttarget: scope,\n\t\tscope\n\t});\n\n\tif ($formContact.length) {\n\t\t$formContact.each(function () {\n\t\t\tnew FormAJAX({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($googleMap.length) {\n\t\tAssetsManager\n\t\t\t.loadGoogleMap({\n\t\t\t\tid: 'googlemap'\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\t$googleMap.each(function () {\n\t\t\t\t\tnew GMap({\n\t\t\t\t\t\ttarget: $(this),\n\t\t\t\t\t\tscope\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tif ($sectionContent.length) {\n\t\t$sectionContent.each(function () {\n\t\t\tnew SectionContent({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionTestimonials.length) {\n\t\t$sectionTestimonials.each(function () {\n\t\t\tnew SectionTestimonials({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($sectionScrollThemeSwitch.length) {\n\t\t$sectionScrollThemeSwitch.each(function () {\n\t\t\tnew SectionScrollThemeSwitch({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t})\n\t}\n\n\tif ($gallery.length) {\n\t\t$gallery.each(function () {\n\t\t\tnew PSWPGallery({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope,\n\t\t\t\toptions: { // Pass your custom PhotoSwipe options here https://photoswipe.com/documentation/options.html\n\t\t\t\t\thistory: window.kinsey.theme.ajax.enabled ? false : true, // galleries URLs navigation is NOT compatible with AJAX\n\t\t\t\t\tshowAnimationDuration: 300,\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($scrollDown.length) {\n\t\t$scrollDown.each(function () {\n\t\t\tnew ScrollDown({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope,\n\t\t\t\tduration: 0.6\n\t\t\t});\n\t\t})\n\t}\n\n\tif ($countDown.length) {\n\t\t$countDown.each(function () {\n\t\t\tnew CountDown({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t})\n\t}\n\n\tif ($sectionNavProjects.length) {\n\t\t$sectionNavProjects.each(function () {\n\t\t\tnew SectionNavProjects({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n\t// refresh animation triggers\n\t// for Waypoints library\n\tif (typeof Waypoint !== 'undefined') {\n\t\tWaypoint.refreshAll();\n\t}\n\n\t// scroll to anchor from URL hash\n\tif (scrollToHashElement) {\n\t\tScroll.scrollToAnchorFromHash();\n\t}\n}\n\n/**\n * Init Template Components\n * only once after the initial\n * page load\n */\nfunction initComponentsOnce({\n\tscope = window.$document,\n\tcontainer = window.$pageWrapper\n}) {\n\n\tconst $sliderMenu = scope.find('.js-slider-menu');\n\n\t// Run cursor follower on non-touch devices\n\tif (window.kinsey.theme.cursorFollower.enabled && !window.Modernizr.touchevents && window.$cursor.length) {\n\t\twindow.$html.addClass('cursorfollower');\n\t\twindow.$cursor.artsCursor({\n\t\t\ttarget: {\n\t\t\t\tcursor: '[data-arts-cursor]',\n\t\t\t\tmagnetic: '[data-arts-cursor-magnetic]',\n\t\t\t\thighlight: 'a:not(a[data-arts-cursor]):not(.social__item a):not(a.page-numbers):not(.js-arts-cursor-no-highlight), .js-arts-cursor-highlight, button:not(button[data-arts-cursor])',\n\t\t\t\thideNative: '[data-arts-cursor-hide-native]',\n\t\t\t\thideScaleMagnetic: '.slider__dot, .social__item, a.page-numbers',\n\t\t\t},\n\t\t\telements: {\n\t\t\t\tfollower: '.js-arts-cursor__follower',\n\t\t\t\tstroke: {\n\t\t\t\t\tinner: '.js-arts-cursor__stroke-inner',\n\t\t\t\t\touter: '.js-arts-cursor__stroke-outer',\n\t\t\t\t},\n\t\t\t\tarrow: {\n\t\t\t\t\tup: '.js-arts-cursor__arrow-up',\n\t\t\t\t\tdown: '.js-arts-cursor__arrow-down',\n\t\t\t\t\tleft: '.js-arts-cursor__arrow-left',\n\t\t\t\t\tright: '.js-arts-cursor__arrow-right',\n\t\t\t\t},\n\t\t\t\tcontainer: {\n\t\t\t\t\tlabel: '.js-arts-cursor__label',\n\t\t\t\t\ticon: '.js-arts-cursor__icon'\n\t\t\t\t}\n\t\t\t},\n\t\t\teffect: window.kinsey.theme.cursorFollower || {}\n\t\t});\n\t} else {\n\t\twindow.$html.addClass('no-cursorfollower');\n\t}\n\n\t// Run AJAX navigation\n\tif (window.kinsey.theme.ajax.enabled && window.$barbaWrapper.length) {\n\t\tnew PJAX({\n\t\t\ttarget: window.$barbaWrapper,\n\t\t});\n\t}\n\n\t// Run page header\n\twindow.kinsey.theme.header = new Header({\n\t\ttarget: window.$pageHeader,\n\t\tscope\n\t});\n\n\tif ($sliderMenu.length) {\n\t\t$sliderMenu.each(function () {\n\t\t\tnew SliderMenu({\n\t\t\t\ttarget: $(this),\n\t\t\t\tscope\n\t\t\t});\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 1. Animations */\n/* ======================================================================== */\nclass Animations {\n constructor() {\n this.defaults = {\n duration: 1.2\n };\n\n this._animateCounter();\n this._animateHeadline();\n this._animateJump();\n this._animateMask();\n this._animateScale();\n this._animateStroke();\n\n this._setCurtain();\n this._revealCurtain();\n\n this._hideCurtain();\n this._hideHeadline();\n this._hideJump();\n this._hideMask();\n this._hideScale();\n }\n\n static refresh(target = null, immediate = false) {\n if (target) {\n window.dispatchEvent(new CustomEvent('arts/scrolltrigger/update', {\n detail: {\n target,\n immediate\n }\n }));\n }\n }\n\n static refreshAll(immediate = false) {\n ScrollTrigger.getAll().forEach((instance) => {\n instance.refresh(immediate);\n });\n }\n\n static enableAll() {\n ScrollTrigger.getAll().forEach((instance) => {\n if (!instance.enabled) {\n instance.enable();\n }\n });\n }\n\n static disableAll(revert = false) {\n ScrollTrigger.getAll().forEach((instance) => instance.disable(revert));\n }\n\n static killAll(revert = false) {\n ScrollTrigger.getAll().forEach((instance) => {\n instance.kill(revert);\n instance = null;\n });\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 return tl.set($target, config);\n },\n extendTimeline: true,\n defaults: {\n scaleY: 0,\n transformOrigin: 'bottom center'\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 return tl.to(target, config);\n },\n extendTimeline: true,\n defaults: {\n duration: this.defaults.duration,\n transformOrigin: 'bottom center',\n scaleY: 1,\n ease: 'expo.inOut'\n }\n });\n }\n\n _hideCurtain() {\n gsap.registerEffect({\n name: 'hideCurtain',\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 return tl.to($target, config)._setCurtain($target);\n\n },\n extendTimeline: true,\n defaults: {\n duration: this.defaults.duration,\n transformOrigin: 'top center',\n scaleY: 0,\n ease: 'expo.inOut'\n }\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 'start':\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 case 'end':\n config.transformOrigin = 'right center';\n break;\n }\n\n }\n\n return gsap.fromTo($target, {\n scaleX: 0,\n immediateRender: true\n }, config);\n },\n defaults: {\n scaleX: 1,\n scaleY: 1,\n duration: this.defaults.duration,\n ease: 'expo.inOut',\n },\n extendTimeline: true,\n });\n }\n\n _hideHeadline() {\n gsap.registerEffect({\n name: 'hideHeadline',\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: 0,\n duration: this.defaults.duration,\n ease: 'expo.inOut',\n },\n extendTimeline: true,\n });\n }\n\n _animateMask() {\n gsap.registerEffect({\n name: 'animateMask',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target),\n inlineScale = $target.data('arts-mask-scale-set'),\n $maskLayer1 = $target.find('.mask-reveal__layer-1'),\n $maskLayer2 = $target.find('.mask-reveal__layer-2'),\n initialPosition = {\n maskLayer1: {\n x: '0%',\n y: '0%',\n immediateRender: true\n },\n maskLayer2: {\n x: '0%',\n y: '0%',\n transformOrigin: 'center center',\n scale: inlineScale || config.scale || 1,\n immediateRender: true\n }\n };\n\n if ($maskLayer1.length && $maskLayer2.length) {\n switch (config.direction) {\n case 'up':\n initialPosition.maskLayer1.y = '-101%';\n initialPosition.maskLayer2.y = '101%';\n break;\n case 'right':\n initialPosition.maskLayer1.x = '101%';\n initialPosition.maskLayer2.x = '-101%';\n break;\n case 'left':\n initialPosition.maskLayer1.x = '-101%';\n initialPosition.maskLayer2.x = '101%';\n break;\n default:\n initialPosition.maskLayer1.y = '101%';\n initialPosition.maskLayer2.y = '-101%';\n break;\n }\n\n tl\n .add([\n gsap.set($maskLayer1, initialPosition.maskLayer1),\n gsap.set($maskLayer2, initialPosition.maskLayer2)\n ])\n .add([\n gsap.to([$maskLayer1, $maskLayer2], {\n x: config.x,\n y: config.y,\n duration: config.duration,\n ease: config.ease\n }),\n gsap.to($maskLayer2, {\n duration: config.duration * 1.25,\n transformOrigin: 'center center',\n scale: 1\n })\n ])\n .set([$maskLayer1, $maskLayer2], {\n clearProps: 'transform'\n });\n }\n\n return tl;\n },\n defaults: {\n x: '0%',\n y: '0%',\n duration: this.defaults.duration,\n scale: isBrowserFirefox() ? 1.0 : 1.2,\n ease: 'expo.inOut',\n direction: 'down'\n },\n extendTimeline: true,\n });\n }\n\n _hideMask() {\n gsap.registerEffect({\n name: 'hideMask',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target),\n inlineScale = $target.data('arts-mask-scale-set'),\n $maskLayer1 = $target.find('.mask-reveal__layer-1'),\n $maskLayer2 = $target.find('.mask-reveal__layer-2'),\n animatedPosition = {\n maskLayer1: {\n x: '0%',\n y: '0%',\n duration: config.duration,\n ease: config.ease || 'expo.inOut'\n },\n maskLayer2: {\n x: '0%',\n y: '0%',\n duration: config.duration,\n transformOrigin: 'center center',\n scale: inlineScale || config.scale || 1,\n ease: config.ease || 'expo.inOut'\n }\n };\n\n if ($maskLayer1.length && $maskLayer2.length) {\n switch (config.direction) {\n case 'up':\n animatedPosition.maskLayer1.y = '101%';\n animatedPosition.maskLayer2.y = '-101%';\n break;\n case 'right':\n animatedPosition.maskLayer1.x = '101%';\n animatedPosition.maskLayer2.x = '-101%';\n break;\n case 'left':\n animatedPosition.maskLayer1.x = '-101%';\n animatedPosition.maskLayer2.x = '101%';\n break;\n default:\n animatedPosition.maskLayer1.y = '-101%';\n animatedPosition.maskLayer2.y = '101%';\n break;\n }\n\n tl\n .add([\n gsap.to($maskLayer1, animatedPosition.maskLayer1),\n gsap.to($maskLayer2, animatedPosition.maskLayer2)\n ]);\n }\n\n return tl;\n },\n defaults: {\n x: '0%',\n y: '0%',\n duration: this.defaults.duration,\n scale: isBrowserFirefox() ? 1.0 : 1.2,\n ease: 'expo.inOut',\n direction: 'down'\n },\n extendTimeline: true,\n });\n }\n\n _animateJump() {\n gsap.registerEffect({\n name: 'animateJump',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target),\n fromConfig = $.extend(config, {\n autoAlpha: 0,\n immediateRender: true\n });\n\n if ($target.length) {\n tl.fromTo($target, fromConfig, {\n autoAlpha: 1,\n x: 0,\n y: 0,\n scaleY: 1,\n scaleX: 1,\n ease: 'power3.out'\n }).set($target, {\n clearProps: 'all'\n });\n }\n\n return tl;\n },\n defaults: {\n duration: this.defaults.duration,\n y: 30,\n x: 0,\n scaleY: 1,\n scaleX: 1,\n ease: 'power3.out',\n },\n extendTimeline: true,\n });\n }\n\n _hideJump() {\n gsap.registerEffect({\n name: 'hideJump',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n if ($target.length) {\n tl.to($target, config);\n }\n\n return tl;\n },\n defaults: {\n duration: this.defaults.duration,\n y: '-33%',\n transformOrigin: 'top center',\n autoAlpha: 0,\n ease: 'power3.out',\n },\n extendTimeline: true,\n });\n }\n\n _animateScale() {\n gsap.registerEffect({\n name: 'animateScale',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n let\n scaleX = 1,\n scaleY = 1,\n transformOrigin = 'bottom center';\n\n switch (config.direction) {\n case 'left':\n transformOrigin = 'left center';\n config.scaleX = 0;\n break;\n case 'right':\n transformOrigin = 'right center';\n config.scaleX = 0;\n break;\n case 'up':\n transformOrigin = 'top center';\n config.scaleY = 0;\n break;\n case 'center':\n transformOrigin = 'center center';\n config.scaleX = 0;\n config.scaleY = 0;\n break;\n default:\n transformOrigin = 'bottom center';\n config.scaleY = 0;\n break;\n }\n\n return tl.fromTo($target, config, {\n scaleX,\n scaleY,\n transformOrigin,\n ease: config.ease,\n duration: config.duration\n });\n },\n defaults: {\n duration: this.defaults.duration,\n ease: 'expo.inOut',\n direction: 'down',\n immediateRender: true\n },\n extendTimeline: true,\n });\n\n }\n\n _hideScale() {\n gsap.registerEffect({\n name: 'hideScale',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target);\n\n let\n scaleX = 1,\n scaleY = 1,\n transformOrigin = 'bottom center';\n\n switch (config.direction) {\n case 'left':\n transformOrigin = 'left center';\n config.scaleX = 0;\n break;\n case 'right':\n transformOrigin = 'right center';\n config.scaleX = 0;\n break;\n case 'up':\n transformOrigin = 'top center';\n config.scaleY = 0;\n break;\n case 'center':\n transformOrigin = 'center center';\n config.scaleX = 0;\n config.scaleY = 0;\n break;\n default:\n transformOrigin = 'bottom center';\n config.scaleY = 0;\n break;\n }\n\n return tl.fromTo($target, {\n scaleX,\n scaleY,\n transformOrigin,\n ease: config.ease,\n duration: config.duration\n }, config);\n },\n defaults: {\n scaleY: 0,\n scaleX: 1,\n duration: this.defaults.duration,\n ease: 'expo.inOut',\n direction: 'up',\n immediateRender: true\n },\n extendTimeline: true,\n });\n\n }\n\n _animateStroke() {\n gsap.registerEffect({\n name: 'animateStroke',\n effect: (target, config) => {\n const\n $target = $(target).find('.circle');\n\n return gsap.fromTo($target, {\n rotate: 90,\n transformOrigin: 'center center',\n drawSVG: '100% 100%',\n },{\n rotate: 0,\n transformOrigin: 'center center',\n drawSVG: '0% 100%',\n immediateRender: true,\n duration: config.duration,\n ease: config.ease\n });\n },\n defaults: {\n duration: this.defaults.duration,\n ease: 'expo.inOut',\n },\n extendTimeline: true,\n });\n }\n\n _animateCounter() {\n gsap.registerEffect({\n name: 'animateCounter',\n effect: (target, config) => {\n const\n tl = new gsap.timeline(),\n $target = $(target),\n prefix = config.prefix ? config.prefix : '',\n suffix = config.suffix ? config.suffix : '',\n $num = $target.find('.js-counter__number');\n\n let counter = {\n val: config.start\n },\n value = parseFloat(config.start).toFixed(0);\n\n if ($num.length) {\n value = prefix + _addZeros(value, config.zeros) + suffix;\n\n $num.text(value);\n tl\n .add([\n gsap.effects.animateStroke($target, {\n duration: config.duration,\n ease: config.ease\n }),\n gsap.to(counter, {\n onUpdate: () => {\n value = parseFloat(counter.val).toFixed(0);\n value = _addZeros(value, config.zeros);\n $num.text(prefix + value + suffix);\n },\n val: parseFloat(config.target).toFixed(0),\n duration: config.duration,\n ease: config.ease\n }),\n ]);\n }\n\n return tl;\n },\n defaults: {\n prefix: '',\n suffix: '',\n start: 0,\n target: 100,\n zeros: 2,\n duration: this.defaults.duration,\n ease: 'power4.out',\n },\n extendTimeline: true,\n });\n\n function _addZeros(value, zeros) {\n while (value.toString().length < zeros) {\n value = '0' + value;\n }\n\n return value;\n }\n\n }\n}\n","/* ======================================================================== */\n/* 2. AssetsManager */\n/* ======================================================================== */\nclass AssetsManager {\n static load({\n type = undefined, // script | stylesheet\n src = null,\n id = null, // id attribute in DOM\n refElement,\n version = null,\n timeout = 15000,\n cache = false\n }) {\n return new Promise((resolve, reject) => {\n // Don't load asset that is pending to load\n if (cache && id in window.kinsey.assets.promises) {\n // return existing loading promise\n window.kinsey.assets.promises[id].then(resolve, reject);\n return;\n }\n\n // CSS\n if (type === 'style') {\n const stylePromise = AssetsManager.loadStyle({ src, id, refElement, timeout, version });\n\n window.kinsey.assets.promises[id] = stylePromise;\n return stylePromise.then(resolve, reject);\n\n } else if (type === 'script') { // JS\n const scriptPromise = AssetsManager.loadScript({ src, id, refElement, timeout, version });\n\n window.kinsey.assets.promises[id] = scriptPromise;\n\n return scriptPromise.then(resolve, reject);\n\n } else { // Unknown type\n reject(new TypeError('Resource type \"style\" or \"script\" is missing.'));\n }\n });\n }\n\n static loadScript({\n src = null,\n id = null,\n refElement = document.body,\n version = null,\n timeout = 15000\n }) {\n return new Promise((resolve, reject) => {\n const\n element = document.querySelector(`script[id=\"${id}\"]`),\n head = document.getElementsByTagName('head')[0];\n\n let script, timer, preload;\n\n if (!src) {\n reject(new TypeError('Resource URL is missing.'));\n return;\n }\n\n if (!id) {\n reject(new TypeError('Resource ID attribute is missing.'));\n return;\n }\n\n if (typeof element === 'undefined' || element === null) {\n\n if (version) {\n src += `?ver=${version}`;\n }\n\n if (window.kinsey.theme.isFirstLoad) {\n preload = document.createElement('link');\n preload.setAttribute('rel', 'preload');\n preload.setAttribute('href', src);\n preload.setAttribute('as', 'script');\n preload.setAttribute('type', 'text/javascript');\n head.prepend(preload);\n }\n\n script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('async', 'async');\n script.setAttribute('src', src);\n script.setAttribute('id', id);\n refElement.append(script);\n\n script.onerror = (error) => {\n cleanup();\n refElement.removeChild(script);\n script = null;\n reject(new Error(`A network error occured while trying to load resouce ${src}`));\n }\n\n if (script.onreadystatechange === undefined) {\n script.onload = onload;\n } else {\n script.onreadystatechange = onload;\n }\n\n timer = setTimeout(script.onerror, timeout);\n\n } else {\n resolve(element);\n }\n\n function cleanup() {\n clearTimeout(timer);\n timer = null;\n script.onerror = script.onreadystatechange = script.onload = null;\n }\n\n function onload() {\n cleanup();\n if (!script.onreadystatechange || (script.readyState && script.readyState == 'complete')) {\n resolve(script);\n return;\n }\n }\n });\n }\n\n static loadStyle({\n src = null,\n id = null,\n refElement = document.head.querySelector('link[type=\"text/css\"]'),\n version = null,\n timeout = 15000\n }) {\n return new Promise((resolve, reject) => {\n const\n element = document.querySelector(`link[id=\"${id}\"]`),\n head = document.getElementsByTagName('head')[0];\n\n // don't load resouce that already exists\n if (typeof element !== 'undefined' && element !== null) {\n resolve(element);\n }\n\n if (!src) {\n reject(new TypeError('Resource URL is missing.'));\n }\n\n if (!id) {\n reject(new TypeError('Resource ID attribute is missing.'))\n }\n\n let\n link = document.createElement('link'),\n timer,\n sheet,\n cssRules,\n preload,\n c = (timeout || 10) * 100;\n\n if (version) {\n src += `?ver=${version}`;\n }\n\n if (window.kinsey.theme.isFirstLoad) {\n preload = document.createElement('link');\n preload.setAttribute('rel', 'preload');\n preload.setAttribute('href', src);\n preload.setAttribute('as', 'style');\n preload.setAttribute('type', 'text/css');\n head.prepend(preload);\n }\n\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('type', 'text/css');\n link.setAttribute('href', src);\n\n if (typeof refElement !== 'undefined' && refElement !== null) {\n head.insertBefore(link, refElement);\n } else {\n head.append(link);\n }\n\n link.onerror = function (error) {\n if (timer) {\n clearInterval(timer);\n }\n timer = null;\n\n reject(new Error(`A network error occured while trying to load resouce ${src}`));\n };\n\n if ('sheet' in link) {\n sheet = 'sheet';\n cssRules = 'cssRules';\n } else {\n sheet = 'styleSheet';\n cssRules = 'rules';\n }\n\n timer = setInterval(function () {\n try {\n if (link[sheet] && link[sheet][cssRules].length) {\n clearInterval(timer);\n timer = null;\n resolve(link);\n return;\n }\n } catch (e) {}\n\n if (c-- < 0) {\n clearInterval(timer);\n timer = null;\n reject(new Error(`A network error occured while trying to load resouce ${src}`));\n }\n }, 10);\n\n\n });\n }\n\n static loadGoogleMap({ id = 'googlemap' }) {\n return new Promise((resolve) => {\n const mapScript = document.getElementById(id);\n\n if ((typeof google === 'undefined' || typeof google.maps === 'undefined') && typeof mapScript !== 'undefined' && mapScript !== null) {\n AssetsManager\n .load({\n type: 'script',\n id: mapScript.id,\n src: mapScript.src\n })\n .then(() => resolve(true));\n } else {\n resolve(true);\n }\n });\n }\n}\n","/* ======================================================================== */\n/* 3. BaseComponent */\n/* ======================================================================== */\nclass BaseComponent {\n\n\tconstructor({\n\t\ttarget,\n\t\tscope = window.$document,\n\t}) {\n\t\tthis.$scope = scope;\n\t\tthis.$target = target;\n\t\tthis.target = this.$target.get(0);\n\t\tthis.$el = this.$target;\n\t\tthis.el = this.$el.get(0);\n\n\t\tthis.prepare();\n\t}\n\n\tprepare() {\n\t\tthis\n\t\t\t.mount()\n\t\t\t.then(() => {\n\t\t\t\tthis.set();\n\t\t\t\tthis.run();\n\t\t\t});\n\t}\n\n\tset() {\n\n\t}\n\n\tinit() {\n\n\t}\n\n\t_loadAnimations() {\n\t\tthis.createAnimationScene({\n\t\t\t$el: this.$target\n\t\t});\n\t\tthis.animateIn();\n\t\tthis.animateInBatch();\n\t}\n\n\trun() {\n\n\t\tif (this.hasAnimationScene()) {\n\t\t\t// animate element out on transition start\n\t\t\twindow.$window.one('arts/barba/transition/start', () => {\n\t\t\t\t// only currently visible elements\n\t\t\t\tif (this.$target.is(':in-viewport')) {\n\t\t\t\t\tthis.animateOut();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.hasInnerAnimationScenes()) {\n\t\t\twindow.$window.one('arts/barba/transition/start', () => {\n\t\t\t\t// only currently visible elements\n\t\t\t\tif (this.$target.is(':in-viewport')) {\n\t\t\t\t\tthis.animateOutBatch();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// * Active preloader\n\t\t// wait until preloader is ended\n\t\tif (window.$pagePreloader.is(':visible')) {\n\t\t\twindow.$window.one('arts/preloader/end', () => {\n\t\t\t\tthis._loadAnimations();\n\t\t\t\tthis.init();\n\t\t\t});\n\t\t} else if (!window.kinsey.theme.isFirstLoad) { // * AJAX transition – wait until transition end\n\t\t\twindow.$window.one('arts/barba/transition/end', () => {\n\t\t\t\tthis._loadAnimations();\n\t\t\t\tthis.init();\n\t\t\t});\n\t\t} else { // * No preloader and no transition\n\t\t\tthis._loadAnimations();\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\tmount() {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst\n\t\t\t\t$lazyImages = this.$target.find('.lazy img[data-src]:not(.swiper-lazy):not([data-arts-horizontal-scroll=\"wrapper\"] .lazy img [data-src])'),\n\t\t\t\t$lazyBackgrounds = this.$target.find('.lazy-bg[data-src]:not(.swiper-lazy):not([data-arts-horizontal-scroll=\"wrapper\"] .lazy-bg[data-src])'),\n\t\t\t\t$parallaxElements = this.$target.filter('.js-arts-parallax').add(this.$target.find('.js-arts-parallax'));\n\n\t\t\t// set lazy loading images\n\t\t\tif ($lazyImages.length) {\n\t\t\t\tthis.lazyImages = new LazyLoad({\n\t\t\t\t\timages: $lazyImages\n\t\t\t\t});\n\n\t\t\t\twindow.$window.one('arts/barba/transition/start', this.lazyImages.destroy);\n\t\t\t}\n\n\t\t\t// set lazy loading backgrounds\n\t\t\tif ($lazyBackgrounds.length) {\n\t\t\t\tthis.lazyBackgrounds = new LazyLoad({\n\t\t\t\t\tbackgrounds: $lazyBackgrounds\n\t\t\t\t});\n\n\t\t\t\twindow.$window.one('arts/barba/transition/start', this.lazyBackgrounds.destroy);\n\t\t\t}\n\n\t\t\t// set parallax elements\n\t\t\tif ($parallaxElements.length) {\n\t\t\t\tthis.parallax = $parallaxElements.artsParallax();\n\t\t\t}\n\n\t\t\t// prepare all the texts to split\n\t\t\t// wait for the fonts to load first\n\t\t\tdocument.fonts.ready.then(() => {\n\t\t\t\tconst t = this.$target\n\t\t\t\t\t.find('.js-arts-split-text')\n\t\t\t\t\t.artsSplitText()\n\t\t\t\t\t.find('.arts-split-text__line')\n\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\tconst\n\t\t\t\t\t\t\t$this = $(this),\n\t\t\t\t\t\t\tdisplay = $this.css('display');\n\n\t\t\t\t\t\treturn display === 'inline-block' || display === 'inline-flex';\n\t\t\t\t\t});\n\n\t\t\t\t\t// split lines that became inline-block with a divider\n\t\t\t\t\t$(`
`).insertAfter(t);\n\n\t\t\t\t\tresolve(true);\n\t\t\t});\n\t\t});\n\t}\n\n\thasAnimationScene() {\n\t\tconst attr = this.target.hasAttribute('data-arts-os-animation');\n\t\treturn attr && this.$target.attr('data-arts-os-animation') !== 'false';\n\t}\n\n\thasInnerAnimationScenes() {\n\t\treturn this.$target.find('[data-arts-os-animation]').length;\n\t}\n\n\tcreateAnimationScene({\n\t\t$el = this.$target,\n\t\ttimeline = false,\n\t\tscrub = false,\n\t\tonce = true,\n\t}) {\n\t\tconst timeScale = parseFloat(window.kinsey.theme.animations.timeScale.onScrollReveal) || 1;\n\n\t\t// create a timeline\n\t\tthis.timeline = timeline || new gsap.timeline({\n\t\t\tonStart: () => {\n\t\t\t\tif ($el.attr('data-arts-os-animation')) {\n\t\t\t\t\t$el.attr('data-arts-os-animation', 'animated');\n\t\t\t\t}\n\t\t\t\t$el.get(0).dispatchEvent(new CustomEvent('animation/start'));\n\t\t\t},\n\t\t\tonComplete: () => {\n\t\t\t\t$el.get(0).dispatchEvent(new CustomEvent('animation/complete'));\n\t\t\t}\n\t\t});\n\n\t\tthis.timeline.timeScale(timeScale);\n\n\t\t// ScrollTrigger animation scene\n\t\tthis.scrollTrigger = ScrollTrigger.create({\n\t\t\ttrigger: $el,\n\t\t\tanimation: this.timeline,\n\t\t\tstart: () => `top+=${window.kinsey.theme.animations.triggerHook * 100}% bottom`,\n\t\t\tscrub,\n\t\t\tonce\n\t\t});\n\n\t\t// animation out timeline\n\t\tthis.timelineOut = new gsap.timeline();\n\t}\n\n\tanimateIn() {\n\n\t}\n\n\tanimateInBatch() {\n\t\tif (!this.hasInnerAnimationScenes()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst\n\t\t\tself = this,\n\t\t\t$animations = this.$target.find('[data-arts-os-animation-name]:not(.js-transition-animated)'),\n\t\t\tstartTrigger = this.$target.attr('data-arts-os-animation-start') || `top+=${window.kinsey.theme.animations.triggerHook * 100}% bottom`,\n\t\t\tstagger = this.$target.attr('data-arts-os-animation-stagger') || 0.1,\n\t\t\ttimeScale = parseFloat(window.kinsey.theme.animations.timeScale.onScrollReveal) || 1;\n\n\t\tif ($animations.length) {\n\t\t\tself.scrollTriggerBatch = ScrollTrigger.batch($animations, {\n\t\t\t\tinterval: 0.05,\n\t\t\t\tstart: () => startTrigger,\n\t\t\t\tscrub: false,\n\t\t\t\tonce: true,\n\t\t\t\tonEnter: (batch) => {\n\t\t\t\t\tconst\n\t\t\t\t\t\ttl = new gsap.timeline();\n\n\t\t\t\t\t$(batch).each(function () {\n\t\t\t\t\t\tconst\n\t\t\t\t\t\t\t$this = $(this),\n\t\t\t\t\t\t\tanimationSet = $this.attr('data-arts-os-animation'),\n\t\t\t\t\t\t\tanimationName = $this.attr('data-arts-os-animation-name'),\n\t\t\t\t\t\t\tanimationParams = $this.attr('data-arts-os-animation-params') || '{}';\n\t\t\t\t\t\tlet parsedParamsObj = {};\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tparsedParamsObj = JSON.parse(self._prepareJSON(animationParams));\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error(`${animationParams} is not a valid parameters object`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (parsedParamsObj && animationName && typeof gsap.effects[animationName] === 'function') {\n\n\t\t\t\t\t\t\tif (animationSet) {\n\t\t\t\t\t\t\t\t$this.attr('data-arts-os-animation', 'animated');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl[animationName]($this, parsedParamsObj, batch.length === 1 || !$this.is(':visible') ? '0' : `<${stagger}`).timeScale(timeScale);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tanimateOut() {\n\t}\n\n\tanimateOutBatch() {\n\t\tconst tl = new gsap.timeline();\n\n\t\tthis.$target.find('[data-arts-os-animation-name]:in-viewport').each(function () {\n\t\t\tconst\n\t\t\t\t$this = $(this),\n\t\t\t\tdefaultParams = {\n\t\t\t\t\tstagger: 0,\n\t\t\t\t\tdelay: 0,\n\t\t\t\t},\n\t\t\t\tcustomParams = $this.attr('data-arts-os-animation-params'),\n\t\t\t\tparams = $.extend(customParams, defaultParams),\n\t\t\t\tanimationName = $this.attr('data-arts-os-animation-name').replace('animate', 'hide');\n\n\t\t\tif (animationName && typeof gsap.effects[animationName] === 'function') {\n\t\t\t\t\ttl.add(gsap.effects[animationName]($this, params), '0');\n\t\t\t\t}\n\t\t});\n\t}\n\n\tanimateStagger({ target, params, stagger = 0, animationName }) {\n\t\tconst tl = new gsap.timeline();\n\n\t\tif (animationName && typeof tl[animationName] === 'function' && target && target.length) {\n\t\t\t$(target).each(function (index) {\n\t\t\t\ttl[animationName](this, params ? params : {}, index === 0 ? '0' : `<${stagger}`);\n\t\t\t});\n\t\t}\n\n\t\treturn tl;\n\t}\n\n\t_prepareJSON(strObj) {\n\t\tif (!strObj) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet filteredStr = strObj.replace(/'/g, '\"');\n\n\t\treturn filteredStr.replace(/(\\w+:)|(\\w+ :)/g, function (s) {\n\t\t\treturn '\"' + s.substring(0, s.length - 1) + '\":';\n\t\t});\n\t}\n\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, index),\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\t/**\n\t\t * Fallback iFrame\n\t\t */\n\t\tresult.type = 'iframe';\n\t\tresult.html = ``;\n\n\t\treturn result;\n\t}\n\n\t_getItems($galleryElement, activeIndex = 0) {\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 (index) {\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') && activeIndex === index, // autoplay only currently active item\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: // iframe\n\t\t\t\t\titem.html = `
${media.html}
`;\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.0,\n y = 0.0,\n offsetY = 0.0,\n offsetX = 0.0,\n duration = 0.8,\n cb\n }) {\n return new Promise((resolve) => {\n\n let\n offsetElX = x,\n offsetElY = y;\n\n if (typeof x !== 'number') {\n offsetElX = $(x).offset().left - offsetX;\n }\n\n if (typeof y !== 'number') {\n offsetElY = $(y).offset().top - offsetY;\n }\n\n // smooth scrolling plugin\n if (typeof window.SB !== 'undefined') {\n\n window.SB.scrollTo(offsetElX, offsetElY, duration * 1000, {\n easing: (pos) => Scroll.getEasingScroll(pos),\n callback: () => {\n if (typeof cb === 'function') {\n cb();\n }\n resolve(true);\n }\n });\n\n } else { // regular window scrolling\n\n $('html, body').stop().animate({\n scrollLeft: offsetElX,\n scrollTop: offsetElY\n }, duration * 1000, 'easeInOutExpo', () => {\n if (typeof cb === 'function') {\n cb();\n }\n resolve(true);\n });\n\n }\n });\n }\n\n static scrollToTop() {\n\n // safari fix\n try {\n window.top.scrollTo({\n top: 0,\n left: 0,\n behavior: 'instant'\n });\n } catch (error) {\n console.log(error);\n }\n\n if (typeof window.SB !== 'undefined') {\n window.SB.scrollTop = 0;\n window.pageYOffset = 0;\n window.pageXOffset = 0;\n } else {\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: 'instant'\n });\n }\n\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 window.$html.add(window.$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 static scrollToAnchorFromHash(timeout = 1000) {\n if ( window.location.hash ) {\n const $scrollElement = $(window.location.hash);\n\n if ($scrollElement.length) {\n setTimeout(() => {\n Scroll.scrollTo({\n x: 0,\n y: $scrollElement.offset().top - 80\n });\n }, timeout);\n }\n }\n }\n\n static stop() {\n if (typeof window.SB !== 'undefined') {\n window.SB.setMomentum(0, 0);\n }\n }\n}\n","/* ======================================================================== */\n/* 6. Slider */\n/* ======================================================================== */\nclass Slider 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\t}\n\n\t_setDragging({ target }) {\n\t\tthis.drag = false;\n\n\t\tif (target && target.length && target.data('drag-cursor')) {\n\t\t\tthis.drag = {\n\t\t\t\tenabled: target.data('drag-cursor') || false,\n\t\t\t\tlabel: target.data('drag-label') || '',\n\t\t\t\tcustomClass: target.data('drag-class') || '',\n\t\t\t\tscale: target.data('drag-scale') || 1.7,\n\t\t\t\ticon: target.data('drag-icon') || '',\n\t\t\t\tdistance: target.data('drag-distance') || 50,\n\t\t\t\thide: target.data('drag-hide-cursor') || false\n\t\t\t};\n\t\t}\n\t}\n\n\t_getSliderDots({\n\t\tslider,\n\t\tcontainer\n\t}) {\n\t\treturn new SliderDots({\n\t\t\tslider,\n\t\t\tcontainer\n\t\t});\n\t}\n\n\t_getSliderCounter({\n\t\tslider,\n\t\tcounter = {\n\t\t\tcurrent,\n\t\t\ttotal,\n\t\t\tstyle,\n\t\t\tzeros\n\t\t}\n\t}) {\n\t\treturn new SliderCounter({\n\t\t\tslider: slider,\n\t\t\tsliderCounter: counter.current,\n\t\t\ttotal: counter.total,\n\t\t\tstyle: counter.style,\n\t\t\taddZeros: counter.zeros\n\t\t});\n\t}\n\n\t_emitDragEvents({\n\t\tslider,\n\t\tlabel,\n\t\tcustomClass,\n\t\tscale,\n\t\ticon,\n\t\tdistance,\n\t\thide\n\t}) {\n\n\t\tslider\n\t\t\t.on('touchStart', (e) => {\n\n\t\t\t\tif (slider.params.autoplay.enabled) {\n\t\t\t\t\tslider.autoplay.stop();\n\t\t\t\t}\n\n\t\t\t\tif (customClass) {\n\t\t\t\t\tslider.$el.addClass(customClass);\n\t\t\t\t}\n\n\t\t\t\twindow.$cursor.trigger({\n\t\t\t\t\ttype: 'startDragging',\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tdirection: slider.params.direction,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\tscale,\n\t\t\t\t\t\ticon,\n\t\t\t\t\t\thide\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t})\n\t\t\t.on('touchEnd', () => {\n\t\t\t\tif (slider.params.autoplay.enabled) {\n\t\t\t\t\tslider.autoplay.start();\n\t\t\t\t}\n\n\t\t\t\tif (customClass) {\n\t\t\t\t\tslider.$el.removeClass(customClass);\n\t\t\t\t}\n\n\t\t\t\twindow.$cursor.trigger('finishDragging');\n\t\t\t});\n\t}\n\n\t_setAutoplayAnimation({ parent, slider }) {\n\t\tif (parent &&\n\t\t\tparent.length &&\n\t\t\tparent.attr('data-arts-os-animation') &&\n\t\t\tslider &&\n\t\t\tslider.params.autoplay &&\n\t\t\tslider.params.autoplay.enabled === true) {\n\n\t\t// enable autoplay only once OS animation is completed\n\t\tparent\n\t\t\t.one('animation/start', () => {\n\t\t\t\tslider.autoplay.stop();\n\t\t\t})\n\t\t\t.one('animation/complete', () => {\n\t\t\t\tslider.autoplay.start();\n\t\t\t});\n\t\t}\n\t}\n\n\t_pauseAutoplay(slider) {\n\t\tif (slider && slider.params.autoplay.enabled) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tslider.autoplay.stop();\n\t\t\t}, 100);\n\n\t\t\twindow.$window.on('arts/barba/transition/start', () => {\n\t\t\t\tslider.autoplay.stop();\n\t\t\t});\n\t\t}\n\t}\n\n\t_pauseAutoplayOnOutOfView({ trigger, slider }) {\n\t\tif (trigger && slider && slider.params.autoplay && slider.params.autoplay.enabled) {\n\t\t\t// stop autoplay initialy\n\t\t\tslider.autoplay.stop();\n\n\t\t\tconst\n\t\t\t\tpauseAutoplayTrigger = ScrollTrigger.create({\n\t\t\t\ttrigger: trigger,\n\t\t\t\tonce: false,\n\t\t\t\tscrub: true,\n\t\t\t\tinvalidateOnRefresh: true,\n\t\t\t\tstart: 'top bottom',\n\t\t\t\tend: 'bottom top',\n\t\t\t\tonToggle: (e) => {\n\t\t\t\t\t// element is in view\n\t\t\t\t\tif (e.isActive) {\n\t\t\t\t\t\tslider.autoplay.start();\n\t\t\t\t\t} else { // element is out of view\n\t\t\t\t\t\tslider.autoplay.stop();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tonMenuOpenStart = () => {\n\t\t\t\t\tslider.autoplay.stop();\n\t\t\t\t},\n\t\t\t\tonMenuCloseStart = () => {\n\t\t\t\t\t// element is in view\n\t\t\t\t\tif (pauseAutoplayTrigger.isActive) {\n\t\t\t\t\t\tslider.autoplay.start();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// update ScrollTrigger coordniates on possible slider resize\n\t\t\tslider.on('slideChange lazyImageReady', () => {\n\t\t\t\tpauseAutoplayTrigger.refresh();\n\t\t\t});\n\n\t\t\t// pause autoplay when overlay menu is open\n\t\t\twindow.$pageHeader\n\t\t\t\t.on('menuOpenStart', onMenuOpenStart)\n\t\t\t\t.on('menuCloseStart', onMenuCloseStart);\n\n\t\t\t// clean up listeners on AJAX transition\n\t\t\twindow.$window.one('arts/barba/transition/start', () => {\n\t\t\t\twindow.$pageHeader\n\t\t\t\t\t.off('menuOpenStart', onMenuOpenStart)\n\t\t\t\t\t.off('menuCloseStart', onMenuCloseStart);\n\t\t\t});\n\n\t\t}\n\t}\n\n\t_setBackgrounds({target, slider, side, header, setStickyHeader = false }) {\n\t\tconst delay = parseFloat((slider.params.speed / 1000) / 2);\n\n\t\t// updating backgroudns & page header theme\n\t\tslider.on('slideChange', () => {\n\t\t\tconst\n\t\t\t\t$activeSide = $(slider.slides[slider.activeIndex]),\n\t\t\t\tbackgroundTarget = $activeSide.data('slide-background'),\n\t\t\t\tbackgroundSide = $activeSide.data('slide-side-background'),\n\t\t\t\tthemeSection = $activeSide.data('slide-theme') || 'dark',\n\t\t\t\tthemeHeader = $activeSide.data('slide-header-theme') || 'dark',\n\t\t\t\tlogoHeader = $activeSide.data('slide-header-logo') || 'primary';\n\n\t\t\tif (backgroundTarget) {\n\t\t\t\tgsap.set(target, {\n\t\t\t\t\tdelay,\n\t\t\t\t\tbackground: backgroundTarget,\n\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\tif (target && target.length && target.attr('data-arts-theme-text') !== themeSection) {\n\t\t\t\t\t\t\ttarget.attr('data-arts-theme-text', themeSection);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (header && header.length) {\n\t\t\t\t\t\t\tif (header.hasClass('header_sticky') && !setStickyHeader) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\theader.attr('data-arts-theme-text', themeHeader);\n\t\t\t\t\t\t\t\theader.attr('data-arts-header-logo', logoHeader);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (backgroundSide) {\n\t\t\t\tgsap.set(side, {\n\t\t\t\t\tdelay,\n\t\t\t\t\tbackground: backgroundSide\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_setScrollbar({slider, scrollbar, zeros = 1}) {\n\t\tif (!slider || !scrollbar || !scrollbar.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet\n\t\t\tprefix = this._getZerosPrefix({zeros}),\n\t\t\tslideNum = slider.activeIndex + 1,\n\t\t\thandle = scrollbar.find('.slider__scrollbar-handle');\n\n\t\thandle.attr('data-content', prefix + slideNum);\n\n\t\tslider.on('slideChange', () => {\n\t\t\tslideNum = slider.activeIndex + 1;\n\t\t\tprefix = this._getZerosPrefix({ zeros, activeSlide: slider.activeIndex });\n\t\t\thandle.attr('data-content', prefix + slideNum);\n\t\t});\n\n\t}\n\n\t_setCounter({ slider, elementCurrent, elementTotal, zeros = 1 }) {\n\t\tif (!slider || !elementCurrent || !elementTotal) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet\n\t\t\tprefixCurrent = this._getZerosPrefix({ zeros }),\n\t\t\tprefixTotal = this._getZerosPrefix({ zeros }),\n\t\t\ttotalSlides = slider.slides.length,\n\t\t\tslideNum = slider.activeIndex + 1;\n\n\t\tif (elementTotal.length) {\n\t\t\tif (totalSlides > 9) {\n\t\t\t\tprefixTotal = this._getZerosPrefix({ zeros: zeros - 1 });\n\t\t\t}\n\t\t\telementTotal.html(prefixTotal + totalSlides);\n\t\t}\n\n\t\telementCurrent.html(prefixCurrent + slideNum);\n\n\t\tslider.on('slideChange', () => {\n\t\t\tslideNum = slider.activeIndex + 1;\n\t\t\tprefixCurrent = this._getZerosPrefix({ zeros, activeSlide: slider.activeIndex });\n\n\t\t\telementCurrent.html(prefixCurrent + slideNum);\n\t\t});\n\n\t}\n\n\t_getZerosPrefix({\n\t\tzeros = 1,\n\t\tactiveSlide = 0\n\t}) {\n\t\tif (zeros === 1) {\n\t\t\tif (activeSlide < 9) {\n\t\t\t\treturn '0';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\n\t\tif (zeros === 2) {\n\t\t\tif (activeSlide < 9) {\n\t\t\t\treturn '00';\n\t\t\t} else {\n\t\t\t\treturn '0';\n\t\t\t}\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t_setExternalControls({slider, enabled = true}) {\n\t\tif (!slider) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst\n\t\t\twasMouseWheelEnabled = slider.params.mousewheel.enabled,\n\t\t\twasKeyboardEnabled = slider.params.keyboard.enabled;\n\n\t\tif (enabled === true) {\n\t\t\tif (wasMouseWheelEnabled) {\n\t\t\t\tslider.mousewheel.enable();\n\t\t\t}\n\t\t\tif (wasKeyboardEnabled) {\n\t\t\t\tslider.keyboard.enable();\n\t\t\t}\n\t\t} else {\n\t\t\tif (wasMouseWheelEnabled) {\n\t\t\t\tslider.mousewheel.disable();\n\t\t\t}\n\t\t\tif (wasKeyboardEnabled) {\n\t\t\t\tslider.keyboard.disable();\n\t\t\t}\n\t\t}\n\t}\n\n\t_setBreakpoints({target}) {\n\n\t\tif (!target || !target.length) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst\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\t\t\tbreakpoints = { [lg]: {}, [md]: {}, 0: {} },\n\t\t\tremoveEmpty = (obj) => { // recursively remove undefined keys\n\t\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\t\tif (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key]);\n\t\t\t\t\telse if (obj[key] === undefined) delete obj[key];\n\t\t\t\t});\n\n\t\t\t\treturn obj;\n\t\t\t};\n\n\t\tbreakpoints[lg] = {\n\t\t\tslidesPerView: target.data('slides-per-view'),\n\t\t\tspaceBetween: target.data('space-between'),\n\t\t\tcenteredSlides: target.data('centered-slides'),\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: Math.round(target.data('slides-per-view') ) || 3,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t}\n\t\t};\n\t\tbreakpoints[md] = {\n\t\t\tslidesPerView: target.data('slides-per-view-tablet'),\n\t\t\tspaceBetween: target.data('space-between-tablet'),\n\t\t\tcenteredSlides: target.data('centered-slides-tablet'),\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: Math.round(target.data('slides-per-view-tablet') ) || 3,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t}\n\t\t};\n\t\tbreakpoints[0] = {\n\t\t\tslidesPerView: target.data('slides-per-view-mobile'),\n\t\t\tspaceBetween: target.data('space-between-mobile'),\n\t\t\tcenteredSlides: target.data('centered-slides-mobile'),\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: Math.round(target.data('slides-per-view-mobile') ) || 3,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t}\n\t\t};\n\n\t\treturn removeEmpty(breakpoints);\n\t}\n\n\t_updateScrollTriggerOnHeightChange(slider) {\n\t\tif (slider) {\n\t\t\tslider\n\t\t\t\t.on('update', () => {\n\t\t\t\t\tAnimations.refreshAll();\n\t\t\t\t})\n\t\t\t\t.on('lazyImageReady', () => {\n\t\t\t\t\tslider.update();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tslider.update();\n\t\t\t\t\t}, 100);\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_prefetchActiveSlideTransition(slider) {\n\t\tif (!slider instanceof Swiper) {\n\t\t\treturn;\n\t\t}\n\n\t\tslider.on('slideChange', (e) => {\n\t\t\t// find links in the currently active slide\n\t\t\tconst $links = $(e.slides).eq(e.realIndex).find('a');\n\n\t\t\t// prefetch all links\n\t\t\tif ($links.length) {\n\t\t\t\t$links.each(function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbarba.prefetch(this.href);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn(`Barba.js: Can't prefetch ${this.href}`)\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t});\n\t}\n\n\t_updateOnResize(instances = []) {\n\t\tif (!instances || !Array.isArray(instances)) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.$window.on('resize', debounce(() => {\n\t\t\tthis._updateSwiperInstances(instances);\n\t\t}, 250));\n\t}\n\n\t_updateOnTransitionEnd(instances = []) {\n\t\tif (!instances || !Array.isArray(instances)) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.$window\n\t\t\t.one('arts/barba/transition/end', () => {\n\t\t\t\tthis._updateSwiperInstances(instances);\n\t\t\t});\n\n\t\tthis._updateSwiperInstances(instances);\n\t}\n\n\t_updateSwiperInstances(instances = []) {\n\t\tif (!instances || !Array.isArray(instances)) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstances.forEach((instance) => {\n\t\t\tif (instance !== null && instance instanceof Swiper && typeof instance.update === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tinstance.update();\n\t\t\t\t} catch (error) {\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 7. PJAX Animate Cloned Heading */\n/* ======================================================================== */\nfunction PJAXAnimateClonedHeading(data, duration = 1.2) {\n return new Promise((resolve) => {\n const\n tl = new gsap.timeline(),\n $nextContainer = $(data.next.container),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n $target = $nextMasthead.find('.js-transition-heading'),\n $targetChars = $target.find('.arts-split-text__char'),\n $clone = $('.js-transition-heading.js-clone'),\n $cloneChars = $clone.find('.arts-split-text__char'),\n targetRect = [],\n timeScale = parseFloat(window.kinsey.theme.animations.timeScale.ajaxFlyingImageTransition) || 1;\n\n if (!$target.length || !$clone.length || $target.length !== $clone.length) {\n gsap.to($clone, {\n duration: 0.6,\n autoAlpha: 0\n });\n resolve(true);\n return;\n }\n\n gsap.set($targetChars, {\n clearProps: 'transform'\n });\n\n if ($targetChars.length) {\n $targetChars.each(function (index) {\n targetRect[index] = this.getBoundingClientRect();\n });\n }\n\n const\n CSSProperties = $target.css([\n 'font-size',\n 'font-style',\n 'font-weight',\n 'line-height',\n 'letter-spacing',\n 'color',\n 'vertical-align'\n ]);\n\n tl\n .delay(0.1)\n .add([\n gsap.to($clone, {\n fontSize: CSSProperties['font-size'],\n fontStyle: CSSProperties['font-style'],\n fontWeight: CSSProperties['font-weight'],\n lineHeight: CSSProperties['line-height'],\n letterSpacing: CSSProperties['letter-spacing'],\n color: CSSProperties['color'],\n verticalAlign: CSSProperties['vertical-align'],\n ease: 'expo.inOut',\n duration: 1.2,\n autoRound: false\n }),\n gsap.to($cloneChars, {\n position: 'fixed',\n top: (index, target) => targetRect[index].top,\n left: (index, target) => targetRect[index].left,\n duration: 1.2,\n ease: 'expo.inOut',\n autoRound: false\n }),\n ])\n .add(() => resolve(true))\n .totalDuration(duration)\n .timeScale(timeScale);\n\n });\n}\n","/* ======================================================================== */\n/* 8. PJAX Animate Cloned Image */\n/* ======================================================================== */\nfunction PJAXAnimateClonedImage(data, duration = 1.2) {\n return new Promise((resolve) => {\n const\n tl = new gsap.timeline(),\n $nextContainer = $(data.next.container),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n $target = $nextMasthead.find('.js-transition-img'),\n $clone = $('.js-transition-img.js-clone'),\n imageTarget = $target.find('img'),\n imageClone = $clone.find('img'),\n bgClone = $clone.find('.js-transition-img__transformed-el'),\n bgTarget = $target.find('.js-transition-img__transformed-el'),\n timeScale = parseFloat(window.kinsey.theme.animations.timeScale.ajaxFlyingImageTransition) || 1;\n\n if (!$target.length || !$clone.length) {\n gsap.to($clone, {\n duration: 0.6,\n autoAlpha: 0\n });\n resolve(true);\n return;\n }\n\n const\n { top, left, width, height } = $target.get(0).getBoundingClientRect(),\n imageProperties = imageTarget.css(['width', 'height', 'objectPosition', 'objectFit']),\n bgTargetProperties = bgTarget.css(['transform', 'width', 'height', 'objectPosition', 'objectFit']),\n bgTargetXPercent = gsap.getProperty(bgTarget.get(0), 'x', '%'),\n bgTargetYPercent = gsap.getProperty(bgTarget.get(0), 'y', '%'),\n targetTransform = $target.css('transform'),\n targetBorderRadius = $target.css('border-radius'),\n targetClippath = $clone.css('clip-path') === 'none' ? '' : 'circle(100% at center)',\n offsetTop = window.$body.offset().top + top;\n\n tl\n .set($clone, {\n maxWidth: 'unset',\n maxHeight: 'unset',\n zIndex: 500\n })\n .add([\n gsap.to(imageClone, {\n width: imageProperties.width,\n height: imageProperties.height,\n objectFit: imageProperties.objectFit,\n objectPosition: imageProperties.objectPosition,\n ease: 'expo.inOut',\n duration: 1.2,\n autoRound: false\n }),\n gsap.to(bgClone, {\n paddingBottom: 0,\n transform: bgTargetProperties.transform,\n x: bgTargetXPercent,\n y: bgTargetYPercent,\n transformOrigin: bgTargetProperties.transformOrigin,\n width: bgTargetProperties.width,\n height: bgTargetProperties.height,\n objectFit: bgTargetProperties.objectFit,\n objectPosition: bgTargetProperties.objectPosition,\n duration: 1.2,\n ease: 'expo.inOut',\n transition: 'none',\n top: 'auto',\n left: 'auto',\n right: 'auto',\n bottom: 'auto',\n autoRound: false\n }),\n gsap.to($clone, {\n transform: targetTransform,\n transformOrigin: 'center center',\n top: offsetTop,\n left,\n width,\n height,\n duration: 1.2,\n ease: 'expo.inOut',\n transition: 'none',\n borderRadius: targetBorderRadius,\n clipPath: targetClippath\n })\n ])\n .add(() => {\n resolve(true);\n })\n .totalDuration(duration)\n .timeScale(timeScale);\n\n });\n}\n","/* ======================================================================== */\n/* 9. PJAX Animate Container */\n/* ======================================================================== */\nfunction PJAXAnimateContainer(data, duration = 1.2) {\n return new Promise((resolve) => {\n\n const\n tl = new gsap.timeline(),\n $currentContainer = $(data.current.container),\n $nextContainer = $(data.next.container),\n timeScale = parseFloat(window.kinsey.theme.animations.timeScale.ajaxCurtainTransition) || 1;\n\n tl\n .fromTo($nextContainer, {\n y: '100vh',\n autoAlpha: 1\n }, {\n y: '0vh',\n autoAlpha: 1,\n duration: 1.2,\n ease: 'expo.inOut',\n }, '0')\n .fromTo($currentContainer, {\n y: '0vh',\n autoAlpha: 1,\n zIndex: -1\n },{\n y: '-20vh',\n autoAlpha: 1,\n duration: 1.2,\n ease: 'expo.inOut',\n onComplete: () => {\n $currentContainer.empty();\n }\n }, '0')\n .add(() => resolve(true))\n .totalDuration(duration)\n .timeScale(timeScale);\n });\n}\n","/* ======================================================================== */\n/* 10. PJAX Animate Curtain */\n/* ======================================================================== */\nfunction PJAXAnimateCurtain(data, duration = 1.2) {\n return new Promise((resolve, reject) => {\n const\n tl = new gsap.timeline(),\n $nextContainer = $(data.next.container),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n $target = $nextMasthead.find('.section__bg'),\n $firstChild = $nextContainer.children().first(),\n timeScale = parseFloat(window.kinsey.theme.animations.timeScale.ajaxFlyingImageTransition) || 1;\n\n let background = $target.attr('data-background-color');\n\n if (!$target.length) {\n resolve(true);\n return;\n }\n\n if (!background) {\n background = $firstChild.css('background-color');\n }\n\n const { width, top } = $target.get(0).getBoundingClientRect();\n\n tl\n .setCurtain(window.$transitionCurtain, {\n width,\n top,\n background\n })\n .revealCurtain(window.$transitionCurtain)\n .add(() => resolve(true))\n .totalDuration(duration)\n .timeScale(timeScale);\n\n });\n}\n","/* ======================================================================== */\n/* 11. PJAX Animate Overlay Menu */\n/* ======================================================================== */\nfunction PJAXAnimateOverlayMenu(data, duration = 1.2) {\n return new Promise((resolve) => {\n\n const\n tl = new gsap.timeline(),\n $currentContainer = $(data.current.container),\n $nextContainer = $(data.next.container);\n\n tl\n .set($currentContainer, {\n autoAlpha: 0,\n overwrite: true\n })\n .set($nextContainer, {\n y: '0vh',\n autoAlpha: 1,\n overwrite: true\n })\n .add(window.kinsey.theme.header.closeMenuTransition(true))\n .add(() => {\n resolve(true);\n }, '-=0.8');\n });\n}\n","/* ======================================================================== */\n/* 12. PJAX Clear Container */\n/* ======================================================================== */\nfunction PJAXClearContainer(data) {\n return new Promise((resolve) => {\n const\n $nextContainer = $(data.next.container),\n tl = new gsap.timeline();\n\n tl\n .set($nextContainer, {\n clearProps: 'all'\n })\n .set(window.$body, {\n clearProps: 'background-color'\n })\n .setCurtain(window.$transitionCurtain, {\n clearProps: 'all'\n })\n .add(() => resolve(true))\n });\n}\n","/* ======================================================================== */\n/* 13. PJAX Clone Heading */\n/* ======================================================================== */\nfunction PJAXCloneHeading(target) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n const\n tl = new gsap.timeline(),\n $clone = target.clone(true).css({ position: 'fixed', opacity: 0, visibility: 'hidden' }).addClass('js-clone').appendTo(window.$barbaWrapper),\n $targetChars = target.find('.arts-split-text__char'),\n $cloneChars = $clone.find('.arts-split-text__char'),\n CSSProperties = target.css([\n 'font-size',\n 'font-style',\n 'font-weight',\n 'line-height',\n 'letter-spacing',\n 'color',\n 'text-align',\n 'vertical-align'\n ]),\n targetRect = [];\n\n if ($targetChars.length) {\n $targetChars.each(function (index) {\n targetRect[index] = this.getBoundingClientRect();\n });\n }\n\n tl\n .set($clone, {\n margin: 0,\n padding: 0,\n position: 'fixed',\n zIndex: 500,\n autoRound: false,\n fontSize: CSSProperties['font-size'],\n fontStyle: CSSProperties['font-style'],\n fontWeight: CSSProperties['font-weight'],\n lineHeight: CSSProperties['line-height'],\n letterSpacing: CSSProperties['letter-spacing'],\n color: CSSProperties['color'],\n textAlign: CSSProperties['text-align'],\n verticalAlign: CSSProperties['vertical-align'],\n })\n .set($cloneChars, {\n position: 'fixed',\n top: (index, target) => targetRect[index].top,\n left: (index, target) => targetRect[index].left,\n autoRound: false\n })\n .set($clone, {\n autoAlpha: 1,\n })\n .set(target, {\n autoAlpha: 0\n })\n .add(() => resolve(true));\n\n });\n}\n","/* ======================================================================== */\n/* 14. PJAX Clone Image */\n/* ======================================================================== */\nfunction PJAXCloneImage(target) {\n return new Promise((resolve) => {\n if (!target || !target.length) {\n resolve(true);\n return;\n }\n\n const\n tl = new gsap.timeline(),\n $clone = target.clone(true).css({ opacity: 0, visibility: 'hidden' }).addClass('js-clone').appendTo(window.$barbaWrapper),\n $transformedImage = target.find('.js-transition-img__transformed-el'),\n $cloneTransformedImage = $clone.find('.js-transition-img__transformed-el'),\n {\n top,\n left,\n width,\n height\n } = target.get(0).getBoundingClientRect(),\n CSSProperties = target.css([\n 'text-align',\n 'vertical-align'\n ]);\n\n if ($transformedImage.length && $cloneTransformedImage.length) {\n tl\n .set($cloneTransformedImage, {\n transform: $transformedImage.css('transform')\n });\n }\n\n tl\n .set($clone, {\n margin: 0,\n padding: 0,\n position: 'fixed',\n top,\n left,\n width,\n height,\n zIndex: 500,\n textAlign: CSSProperties['text-align'],\n verticalAlign: CSSProperties['vertical-align'],\n autoRound: false\n })\n .set($clone, {\n autoAlpha: 1,\n })\n .set(target, {\n autoAlpha: 0\n })\n .add(() => {\n resolve(true);\n });\n\n });\n}\n","/* ======================================================================== */\n/* 15. PJAX Fallback Cloned Image */\n/* ======================================================================== */\nfunction PJAXFallbackClonedImage(data, duration = 1.8) {\n return new Promise((resolve) => {\n\n const\n tl = new gsap.timeline(),\n $nextContainer = $(data.next.container),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n background = $nextMasthead.find('.section__bg').attr('data-background-color'),\n $clone = $('.js-clone');\n\n tl\n .set($clone, {\n clearProps: 'transition'\n })\n .setCurtain(window.$transitionCurtain, {\n background\n })\n .add([\n gsap.effects.revealCurtain(window.$transitionCurtain, {\n duration: 1.2\n }),\n gsap.to($clone, {\n autoAlpha: 0,\n duration: 0.6,\n display: 'none'\n })\n ])\n .setCurtain(window.$transitionCurtain)\n .add(() => resolve(true))\n .totalDuration(duration);\n\n })\n}\n","/* ======================================================================== */\n/* 16. 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// Hide loading cursor follower\n\t\tif (window.$cursor && window.$cursor.length) {\n\t\t\twindow.$cursor.trigger('finishLoading');\n\t\t}\n\n\t\t// remove any cloned elements\n\t\t$('.js-clone').remove();\n\n\t\tScrollTrigger.refresh(true);\n\n\t\tsetTimeout(() => {\n\n\t\t\tAnimations.enableAll();\n\n\t\t\t// unlock scroll\n\t\t\tScroll.lock(false);\n\n\n\t\t\twindow.$barbaWrapper.removeClass('cursor-progress is-ajax-loading pointer-events-none');\n\t\t\t$('.menu').removeClass('menu_disabled');\n\n\t\t\t// refresh animation triggers\n\t\t\t// for Waypoints library\n\t\t\tif (typeof Waypoint !== 'undefined') {\n\t\t\t\tWaypoint.refreshAll();\n\t\t\t}\n\n\t\t}, 100);\n\n\t\t// scroll to anchor from URL hash\n\t\tScroll.scrollToAnchorFromHash();\n\n\t\tresolve(true);\n\n\t});\n\n}\n","/* ======================================================================== */\n/* 17. PJAX Init New Page */\n/* ======================================================================== */\nfunction PJAXInitNewPage(data) {\n\treturn new Promise((resolve) => {\n\t\tconst\n\t\t\t$nextContainer = $(data.next.container),\n\t\t\t$nextMasthead = $nextContainer.find('.section-masthead:not(.d-none)'),\n\t\t\tpromises = [\n\t\t\t\tPJAXUpdateBody(data),\n\t\t\t\tPJAXUpdateNodesAttributes(data),\n\t\t\t\tPJAXUpdateHead(data),\n\t\t\t\tPJAXUpdateAdTrackers(data)\n\t\t\t],\n\t\t\tevent = document.createEvent('MutationEvents');\n\n\t\tif (window.kinsey.theme.ajax.loadMissingScripts) {\n\t\t\tpromises.push(PJAXUpdateScripts(data));\n\t\t}\n\n\t\tif (window.kinsey.theme.ajax.loadMissingStyles) {\n\t\t\tpromises.push(PJAXUpdateStyles(data));\n\t\t}\n\n\t\tif ($nextMasthead.length) {\n\t\t\t// class flag to prevent the repeat initialization\n\t\t\t$nextMasthead.addClass('js-cancel-init');\n\t\t}\n\n\t\t// change loaded flag\n\t\twindow.kinsey.theme.isFirstLoad = false;\n\n\t\t// Prepare ready event\n\t\tevent.initMutationEvent('DOMContentLoaded', true, true, document, '', '', '', 0);\n\t\tevent.detail = {\n\t\t\tscope: $nextContainer,\n\t\t\tcontainer: $nextContainer,\n\t\t\tscrollToHashElement: false // will scroll to the anchors later once transition is fully finished\n\t\t};\n\n\t\t// refresh page wrapper selectors\n\t\twindow.$pageWrapper = $nextContainer;\n\t\twindow.$pageContent = $nextContainer.find('.page-wrapper__content');\n\n\t\t// Scroll at the page beginning\n\t\tScroll.scrollToTop();\n\n\t\treturn Promise\n\t\t\t.all(promises)\n\t\t\t.then(() => document.fonts.ready)\n\t\t\t.then(() => PJAXInitNextMasthead(data))\n\t\t\t.then(() => {\n\n\t\t\t\t// Autoplay paused HTML5 videos\n\t\t\t\t$('video[playsinline][muted][autoplay]').each(function () {\n\t\t\t\t\tif (this.paused) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Transition init new page event (before components init)\n\t\t\t\twindow.dispatchEvent(new CustomEvent('arts/barba/transition/init/before', {\n\t\t\t\t\tdetail: event.detail\n\t\t\t\t}));\n\n\t\t\t\t// fire ready event\n\t\t\t\tdocument.dispatchEvent(event);\n\n\t\t\t\tif (window.kinsey.theme.ajax.evalInlineContainerScripts) {\n\t\t\t\t\t// eval inline scripts in the main container\n\t\t\t\t\t$nextContainer.find('script').each(function () {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twindow.eval(this.text);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.warn(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Transition init new page event (after components init)\n\t\t\t\twindow.dispatchEvent(new CustomEvent('arts/barba/transition/init/after', {\n\t\t\t\t\tdetail: event.detail\n\t\t\t\t}));\n\n\t\t\t\tresolve(true);\n\t\t\t})\n\t\t\t.catch((e) => { // fallback if transition failed\n\t\t\t\tbarba.force(data.next.url.href);\n\t\t\t\tconsole.warn(e);\n\t\t\t});\n\t});\n}\n","/* ======================================================================== */\n/* 18. PJAX Init Next Masthead */\n/* ======================================================================== */\nfunction PJAXInitNextMasthead(data) {\n\treturn new Promise((resolve) => {\n\n\tconst\n\t\t$nextContainer = $(data.next.container),\n\t\t$nextMasthead = $nextContainer.find('.section-masthead:not(.d-none)'); // no need to init the hidden masthead\n\n\t\t// init next page masthead\n\t\tif ($nextMasthead.length) {\n\n new SectionMasthead({\n target: $nextMasthead,\n scope: $nextContainer\n });\n\n resolve(true);\n\t\t} else {\n\t\t\tresolve(true);\n\t\t}\n\n\t});\n}\n","/* ======================================================================== */\n/* 19. PJAX Set Body Background */\n/* ======================================================================== */\nfunction PJAXSetBodyBackground(data) {\n return new Promise((resolve) => {\n const\n $trigger = $(data.trigger),\n backgroundColor = $trigger.closest('.section').css('background-color'),\n tl = new gsap.timeline();\n\n tl\n .to(window.$body, {\n duration: 0.2,\n backgroundColor\n })\n .add(() => resolve(true));\n\n });\n}\n","/* ======================================================================== */\n/* 20. PJAX Set Current Container */\n/* ======================================================================== */\nfunction PJAXSetCurrentContainer(data, hide = true, scrollToTop = false) {\n return new Promise((resolve) => {\n const\n $currentContainer = $(data.current.container),\n tl = new gsap.timeline();\n\n tl\n .set($currentContainer, {\n autoAlpha: hide ? 0 : 1,\n })\n .set($currentContainer, {\n delay: 0.1,\n width: '100vw',\n height: '100vh',\n overflow: 'hidden',\n zIndex: 300,\n onComplete: () => {\n Animations.killAll();\n\n // Scroll at the page beginning\n if (scrollToTop) {\n Scroll.scrollToTop();\n }\n }\n })\n .add(() => {\n setTimeout(() => {\n resolve(true);\n }, 100);\n });\n\n });\n}\n","/* ======================================================================== */\n/* 21. PJAX Set Next Container */\n/* ======================================================================== */\nfunction PJAXSetNextContainer(data, cancelAnimation = false, scrollToTop = false) {\n return new Promise((resolve) => {\n const\n $nextContainer = $(data.next.container),\n $nextMasthead = $nextContainer.find('.section-masthead'),\n tl = new gsap.timeline();\n\n if (cancelAnimation && $nextMasthead.length) {\n $nextMasthead.attr('data-arts-os-animation', 'animated');\n\n if ($('.js-clone.js-transition-img').length) {\n $nextMasthead.find('.js-transition-img').addClass('js-transition-animated');\n }\n\n if ($('.js-clone.js-transition-heading').length) {\n $nextMasthead.find('.js-transition-heading').addClass('js-transition-animated');\n }\n $nextMasthead.find('.js-transition-bg').addClass('js-transition-animated');\n }\n\n tl\n .set($nextContainer, {\n autoAlpha: 0,\n })\n .set($nextContainer, {\n delay: 0.1,\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n zIndex: 300,\n onComplete: () => {\n\n // Scroll at the page beginning\n if (scrollToTop) {\n Scroll.scrollToTop();\n }\n }\n })\n .add(() => {\n setTimeout(() => {\n resolve(true);\n }, 100);\n });\n\n });\n}\n","/* ======================================================================== */\n/* 22. PJAX Start Loading */\n/* ======================================================================== */\nfunction PJAXStartLoading(data) {\n\treturn new Promise((resolve) => {\n\n\t\t// Transition started event\n\t\twindow.dispatchEvent(new CustomEvent('arts/barba/transition/start'));\n\n\t\tScroll.lock(true);\n\n\t\t$('.menu').addClass('menu_disabled');\n\t\twindow.$barbaWrapper.addClass('cursor-progress is-ajax-loading');\n\t\twindow.$document.off('resize click');\n\t\twindow.$window.off('resize click orientationchange');\n\n\t\t// Set loading spinner\n\t\tif (window.$spinner && 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\t// Set loading cursor follower\n\t\tif (window.$cursor && window.$cursor.length) {\n\t\t\twindow.$cursor.trigger('startLoading');\n\t\t}\n\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 23. PJAX Transition Auto Scroll Next */\n/* ======================================================================== */\nconst PJAXTransitionAutoScrollNext = {\n name: 'autoScrollNext',\n\n custom: ({\n trigger\n }) => {\n return $(trigger).attr('data-pjax-link') === 'autoScrollNext';\n },\n\n before: (data) => {\n return new Promise((resolve) => {\n PJAXStartLoading(data).then(() => resolve(true));\n });\n },\n\n beforeEnter: (data) => {\n return new Promise((resolve) => {\n const\n $trigger = $(data.trigger),\n $navContainer = $trigger.closest('.section'),\n $image = $navContainer.find('.js-transition-img'),\n $heading = $navContainer.find('.js-transition-heading');\n\n PJAXSetBodyBackground(data)\n .then(() => {\n return Promise.all([\n PJAXCloneImage($image),\n PJAXCloneHeading($heading)\n ]);\n })\n .then(() => {\n return Promise.all([\n PJAXSetCurrentContainer(data, true, true),\n PJAXSetNextContainer(data, true, true)\n ]);\n })\n .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 Promise.all([\n PJAXAnimateClonedHeading(data),\n PJAXAnimateClonedImage(data),\n PJAXAnimateCurtain(data),\n ])\n .then(() => PJAXClearContainer(data))\n .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/* 24. 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\tbeforeEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXSetNextContainer(data)\n\t\t\t\t.then(() => PJAXAnimateContainer(data))\n\t\t\t\t.then(() => PJAXSetCurrentContainer(data, false, false))\n\t\t\t\t.then(() => resolve(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\tafterEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXClearContainer(data).then(() => resolve(true));\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/* 25. PJAX Transition Overlay Menu */\n/* ======================================================================== */\nconst PJAXTransitionOverlayMenu = {\n name: 'overlayMenu',\n\n custom: ({\n trigger\n }) => {\n const $trigger = $(trigger);\n return window.kinsey.theme.header.isOverlayOpened() || ( $trigger.attr('href') !== '#' && $trigger.attr('data-pjax-link') === 'overlayMenu' );\n },\n\n\tbefore: (data) => {\n return new Promise((resolve) => {\n\t\t\tPJAXStartLoading(data).then(() => resolve(true));\n\t\t});\n\t},\n\n\tbeforeEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXSetNextContainer(data)\n\t\t\t\t.then(() => PJAXAnimateOverlayMenu(data))\n\t\t\t\t.then(() => PJAXSetCurrentContainer(data, false, false))\n\t\t\t\t.then(() => resolve(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\tafterEnter: (data) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tPJAXClearContainer(data).then(() => resolve(true))\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/* 26. PJAX Update Ad Trackers */\n/* ======================================================================== */\nfunction PJAXUpdateAdTrackers() {\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 Update Body */\n/* ======================================================================== */\nfunction PJAXUpdateBody(data) {\n\treturn new Promise((resolve, reject) => {\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\t// Interrupt the transition\n\t\t// Current page prevents all the inner links from transition\n\t\tif (document.body.classList.contains('no-ajax')) {\n\t\t\treject('Transition has been interrupted: Origin page prevents all the inner links from transition.');\n\t\t\treturn;\n\t\t}\n\n\t\t// Sync new container body classes\n\t\tdocument.body.setAttribute('class', match[1]);\n\n\t\t// Interrupt the transition\n\t\t// Destination page doesn't allow to perform AJAX transition\n\t\tif (document.body.classList.contains('page-no-ajax')) {\n\t\t\treject('Transition has been interrupted: Destination page requested a hard refresh.');\n\t\t\treturn;\n\t\t}\n\n\t\t// Hide theme header on Elementor Canvas page\n\t\tif (document.body.classList.contains('elementor-template-canvas')) {\n\t\t\twindow.kinsey.theme.header.$header.addClass('hidden');\n\t\t}\n\n\t\t// Clear window overflow rule in case Elementor Canvas page\n\t\t// doesn't have smooth scrolling container\n\t\tif (!$(data.next.container).hasClass('js-smooth-scroll')) {\n\t\t\tgsap.set(window.$html, {\n\t\t\t\toverflow: 'unset'\n\t\t\t});\n\t\t}\n\n\t\tresolve(true);\n\t});\n}\n","/* ======================================================================== */\n/* 28. PJAX Update Head */\n/* ======================================================================== */\nfunction PJAXUpdateHead(data) {\n\treturn new Promise((resolve, reject) => {\n\t\tlet\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\t\t\tcustomNodes = sanitizeSelector(window.kinsey.theme.updateHeadNodes),\n\t\t\toldHeadTags,\n\t\t\tnewHeadTags,\n\t\t\tnewStylesLoaded,\n\t\t\tpageStyles,\n\t\t\theadTags = [\n\t\t\t\t'meta[name=\"keywords\"]',\n\t\t\t\t'meta[name=\"description\"]',\n\t\t\t\t'meta[property^=\"og\"]',\n\t\t\t\t'meta[name^=\"twitter\"]',\n\t\t\t\t'meta[itemprop]',\n\t\t\t\t'link[itemprop]',\n\t\t\t\t'link[rel=\"prev\"]',\n\t\t\t\t'link[rel=\"next\"]',\n\t\t\t\t'link[rel=\"canonical\"]',\n\t\t\t\t'link[rel=\"alternate\"]',\n\t\t\t\t'link[rel=\"shortlink\"]',\n\t\t\t\t'link[id*=\"elementor-post\"]',\n\t\t\t\t'link[id*=\"eael\"]', // Essential Addons plugin post CSS\n\t\t\t\t'link[id*=\"theplus-\"]', // ThePlus Elementor addon\n\t\t\t\t'link[id*=\"pafe-\"]', // Piotnet Pafe Elementor addon\n\t\t\t\t'style[id*=elementor-frontend-inline]',\n\t\t\t\t'style[id*=\"elementor-post\"]',\n\t\t\t\t'style[id*=\"eael\"]', // Essential Addons plugin inline CSS\n\t\t\t\t'style[id*=\"theplus-\"]', // ThePlus Elementor addon\n\t\t\t\t'style[id*=\"pafe-\"]', // Piotnet Pafe Elementor addon\n\t\t\t\t'link[id*=\"google-fonts\"]', // Elementor inline fonts\n\t\t\t];\n\n\t\t// Custom head nodes to update\n\t\tif (customNodes) {\n\t\t\theadTags = [...headTags, ...customNodes.split(',')]\n\n\t\t\t// Make the node names unique\n\t\t\theadTags = [... new Set(headTags)];\n\t\t}\n\n\t\t// Prepare the selector\n\t\theadTags = headTags.join(',');\n\n\t\tnewPageHead.innerHTML = newPageRawHead;\n\n\t\ttry {\n\t\t\toldHeadTags = head.querySelectorAll(headTags),\n\t\t\tnewHeadTags = newPageHead.querySelectorAll(headTags),\n\t\t\tnewStylesLoaded = [];\n\t\t\tpageStyles = document.querySelectorAll('link[rel=\"stylesheet\"]');\n\n\t\t} catch (error) {\n\t\t\treject(`Transition has been interrupted: invalid selector given \"${customNodes}\"`);\n\t\t}\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\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/* 29. PJAX Update Nodes Attributes */\n/* ======================================================================== */\nfunction PJAXUpdateNodesAttributes(data) {\n\treturn new Promise((resolve) => {\n\t\tconst\n\t\t\t$nextDOM = $($.parseHTML(data.next.html)),\n\t\t\tnodesToUpdate = [\n\t\t\t\t'#page-header',\n\t\t\t\t'#page-header .menu li',\n\t\t\t\t'#page-header .menu-overlay li',\n\t\t\t\t'#page-header .header__wrapper-overlay-menu',\n\t\t\t\t'#page-header .mask-reveal__layer-1',\n\t\t\t\t'#page-header .mask-reveal__layer-2',\n\t\t\t\t'#page-header .header__menu-column',\n\t\t\t\t'#page-header .header__slider-column',\n\t\t\t\t'#page-footer',\n\t\t\t\twindow.kinsey.theme.ajax.updateNodesAttributes\n\t\t\t]; // selectors of elements that needed to update\n\n\t\t$.each(nodesToUpdate, function () {\n\t\t\tlet\n\t\t\t\t$item = $(this),\n\t\t\t\t$nextItem = $nextDOM.find(this);\n\n\t\t\t// different type of menu (overlay) found on the next page\n\t\t\tif (this === '#page-header .menu li' && !$nextItem.length) {\n\t\t\t\t$nextItem = $nextDOM.find('#page-header .menu-overlay li');\n\t\t\t}\n\n\t\t\t// different type of menu (classic) found on the next page\n\t\t\tif (this === '#page-header .menu-overlay li' && !$nextItem.length) {\n\t\t\t\t$nextItem = $nextDOM.find('#page-header .menu li');\n\n\t\t\t}\n\n\t\t\t// save menu position classes\n\t\t\tif (this === '#page-header') {\n\t\t\t\tif ($item.hasClass('header_menu-left')) {\n\t\t\t\t\t$nextItem.addClass('header_menu-left');\n\t\t\t\t}\n\n\t\t\t\tif ($item.hasClass('header_menu-split-center')) {\n\t\t\t\t\t$nextItem.addClass('header_menu-split-center');\n\t\t\t\t}\n\n\t\t\t\tif ($item.hasClass('header_menu-right')) {\n\t\t\t\t\t$nextItem.addClass('header_menu-right');\n\t\t\t\t}\n\t\t\t}\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/* 30. PJAX Update Scripts */\n/* ======================================================================== */\nfunction PJAXUpdateScripts(data) {\n return new Promise((resolve) => {\n const\n nextDocument = jQuery.parseHTML(data.next.html, document, true),\n scriptsToLoad = [],\n customNodes = sanitizeSelector(window.kinsey.theme.ajax.updateScriptNodes) || [],\n $nextScripts = $(nextDocument).filter('script[src][id]');\n\n $nextScripts.each(function () {\n const\n queryString = `script[id=\"${this.id}\"]`,\n element = document.querySelector(queryString);\n\n // load script that's not present on the current page\n if (typeof element === 'undefined' || element === null) {\n scriptsToLoad.push(AssetsManager.load({\n type: 'script',\n id: this.id,\n src: this.src\n }));\n } else if (customNodes.includes(queryString)) {\n\n // remove current script\n element.remove();\n\n // re-load script\n scriptsToLoad.push(AssetsManager.load({\n type: 'script',\n id: this.id,\n src: this.src,\n update: true\n }));\n }\n });\n\n Promise\n .all(scriptsToLoad)\n .then(() => resolve(true), () => resolve(true));\n });\n}\n","/* ======================================================================== */\n/* 31. PJAX Update Styles */\n/* ======================================================================== */\nfunction PJAXUpdateStyles(data) {\n return new Promise((resolve) => {\n const\n nextDocument = jQuery.parseHTML(data.next.html, document, true),\n stylesToLoad = [],\n $nextStyles = $(nextDocument).filter('link[rel=\"stylesheet\"][id]');\n\n $nextStyles.each(function (index) {\n const element = document.querySelector(`link[id=\"${this.id}\"]`);\n\n // load stylesheet that's not present on the current page\n if (typeof element === 'undefined' || element === null) {\n stylesToLoad.push(AssetsManager.load({\n type: 'style',\n id: this.id ? this.id : `pjax-asset-${index}-css`,\n src: this.href\n }));\n }\n });\n\n Promise\n .all(stylesToLoad)\n .then(() => resolve(true), () => resolve(true));\n });\n}\n","/* ======================================================================== */\n/* 32. 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\tset() {\n\t\t/**\n\t\t * Don't save scroll position\n\t\t * after AJAX transition\n\t\t */\n\t\t if ('scrollRestoration' in history) {\n\t\t\thistory.scrollRestoration = 'manual';\n\t\t}\n\t}\n\n\trun() {\n\t\tbarba.init({\n\t\t\ttimeout: 10000,\n\t\t\tcacheIgnore: window.Modernizr.touchevents ? true : false, // don't grow cache on mobiles\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\tlet\n\t\t\t\t\t$el = $(el),\n\t\t\t\t\turl = $el.attr('href'),\n\t\t\t\t\tcustomRules = sanitizeSelector(window.kinsey.theme.ajax.preventRules),\n\t\t\t\t\texludeRules = [\n\t\t\t\t\t\t'.no-ajax',\n\t\t\t\t\t\t'.no-ajax a',\n\t\t\t\t\t\t'.js-gallery a', // any links in theme galleries\n\t\t\t\t\t];\n\n\t\t\t\tif (url === '#') { // dummy link\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// page anchor\n\t\t\t\tif ($el.is('[href*=\"#\"]') && window.location.href === url.substring(0, url.indexOf('#'))) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// page anchor\n\t\t\t\tif ($el.is('[href^=\"#\"]')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// clicked on element 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 (customRules) {\n\t\t\t\t\texludeRules = [...exludeRules, ...customRules.split(',')];\n\t\t\t\t\texludeRules = [...new Set(exludeRules)];\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\tPJAXTransitionAutoScrollNext,\n\t\t\t\tPJAXTransitionGeneral,\n\t\t\t\tPJAXTransitionOverlayMenu,\n\t\t\t],\n\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 33. ArtsHover */\n/* ======================================================================== */\nclass ArtsHover extends BaseComponent {\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.hoverClass = this.$target.data('arts-hover-class') || null;\n\t\tthis.$trigger = this.$target.find('[data-arts-hover=\"trigger\"]');\n\t}\n\n\trun() {\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\tthis.$trigger\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis.$target.addClass(this.hoverClass);\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\tthis.$target.removeClass(this.hoverClass);\n\t\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 34. ButtonCircles */\n/* ======================================================================== */\nclass ButtonCircles extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({ target, scope });\n\t}\n\n\tset() {\n\t\tthis.$circles = this.$target.find('.circle');\n\t\tthis.timeline = new gsap.timeline();\n\n\t\tthis.timeline.set(this.$circles, {\n\t\t\tdrawSVG: '0% 0%'\n\t\t});\n\t}\n\n\trun() {\n\t\tthis.bindEvents();\n\t}\n\n\tbindEvents() {\n\t\tthis.$target\n\t\t\t.on('mouseenter touchstart', () => {\n\t\t\t\tthis.timeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.staggerTo(this.$circles, 0.6, {\n\t\t\t\t\t\tdrawSVG: '0% 100%',\n\t\t\t\t\t\tease: 'power4.out'\n\t\t\t\t\t}, 0.05);\n\t\t\t})\n\t\t\t.on('mouseleave touchend', () => {\n\t\t\t\tthis.timeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.staggerTo(this.$circles, 0.6, {\n\t\t\t\t\t\tdrawSVG: '0% 0%',\n\t\t\t\t\t\tease: 'power4.out'\n\t\t\t\t\t}, 0.05);\n\t\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 35. CountDown */\n/* ======================================================================== */\nclass CountDown extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({ target, scope });\n\t}\n\n\tset() {\n\t\tthis.date = this.$target.attr('data-count-down');\n\t\tthis.$elements = this.$target.find('[data-count-down-element]');\n\t}\n\n\trun() {\n\t\tconst self = this;\n\n\t\tthis.$target.countdown(this.date, function (event) {\n\t\t\tself.$elements.each(function () {\n\t\t\t\tconst\n\t\t\t\t\t$this = $(this),\n\t\t\t\t\ttemplate = $this.attr('data-count-down-element');\n\n\t\t\t\t$this.html(event.strftime(`%${template}`));\n\t\t\t});\n\t\t});\n\t}\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 }\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 // update line position on window resize\n window.$window.on('resize', debounce(() => {\n setTimeout(() => {\n self.updateLinePosition(self.$items.filter(self.itemActiveClass));\n }, 750);\n self.updateLinePosition(self.$items.filter(self.itemActiveClass));\n }, 250));\n }\n\n updateLinePosition($el, duration = 0.5) {\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 $col = $el.find('.filter__item-inner'),\n $label = $el.find('.filter__item-label'),\n outer = {\n offset: this.$target.offset()\n },\n label = {\n width: $label.innerWidth(),\n position: $label.position(),\n offset: $label.offset()\n },\n col = {\n position: $col.position()\n };\n\n gsap.to(this.$line, {\n duration,\n ease: 'expo.inOut',\n width: label.width,\n y: label.offset.top - outer.offset.top,\n x: label.position.left + col.position.left,\n });\n }\n }\n\n setActiveItem(index, duration = 0.5) {\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, duration);\n }\n\n}\n","/* ======================================================================== */\n/* 37. 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\tthis._attachModalsEvents();\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_attachModalsEvents() {\n\t\twindow.$document.off('wpcf7submit').on('wpcf7submit', (e) => {\n\n\t\t\tconst $modal = $('#modalContactForm7');\n\t\t\tlet template;\n\n\t\t\t$modal.modal('dispose').remove();\n\n\t\t\tif (e.detail.apiResponse.status === 'mail_sent') {\n\n\t\t\t\ttemplate = this._getModalTemplate({\n\t\t\t\t\ticon: 'icon-success.svg',\n\t\t\t\t\tmessage: e.detail.apiResponse.message,\n\t\t\t\t});\n\n\t\t\t\tthis._createModal({\n\t\t\t\t\ttemplate,\n\t\t\t\t\tonDismiss: () => {\n\t\t\t\t\t\t$(e.srcElement).find(this.input).parent().val('').removeClass(this.inputClassFocused).removeClass(this.inputClassNotEmpty);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (e.detail.apiResponse.status === 'mail_failed') {\n\t\t\t\ttemplate = this._getModalTemplate({\n\t\t\t\t\ticon: 'icon-error.svg',\n\t\t\t\t\tmessage: e.detail.apiResponse.message\n\t\t\t\t});\n\n\t\t\t\tthis._createModal({ template });\n\t\t\t}\n\n\t\t});\n\t}\n\n\t_getModalTemplate({\n\t\ticon,\n\t\tmessage\n\t}) {\n\t\treturn `\n
\n
\n
\n
\"Close\"
\n
\n\t\t\t\t\t\t\t\t\"\"/\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/* 38. 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: '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: 'icon-error.svg',\n message: self.messages.error\n })\n });\n });\n }\n\n}\n","/* ======================================================================== */\n/* 39. 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.attr('data-gmap-zoom'), 10);\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\torigin: new google.maps.Point(0,0), // origin\n\t\t\t\tanchor: new google.maps.Point(0, 0) // anchor\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/* 40. Grid */\n/* ======================================================================== */\nclass Grid extends BaseComponent {\n\n\tconstructor({\n\t\ttarget,\n\t\tscope,\n\t\tonArrangeComplete,\n\t\tonLayoutComplete\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\t\tthis.onArrangeComplete = onArrangeComplete;\n\t\tthis.onLayoutComplete = onLayoutComplete;\n\t}\n\n\tset() {\n\t\tthis.equalHeights = this.$target.hasClass('js-grid-equal-heights');\n\t}\n\n\trun() {\n\n\t\tthis.isotopeInstance = new Isotope(this.$target.get(0), {\n\t\t\titemSelector: '.js-grid__item',\n\t\t\tcolumnWidth: '.js-grid__sizer',\n\t\t\tpercentPosition: true,\n\t\t\thorizontalOrder: true,\n\t\t});\n\n\t\tif (this.equalHeights) {\n\t\t\tthis._equalizeColumnsHeight();\n\t\t}\n\n\t\tthis._bindEvents();\n\t\tScrollTrigger.refresh();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.isotopeInstance.layout();\n\t\t\tScrollTrigger.refresh();\n\t\t}, 200);\n\n\t}\n\n\t_bindEvents() {\n\t\tif (typeof this.onArrangeComplete === 'function') {\n\t\t\tthis.isotopeInstance.on('arrangeComplete', () => {\n\t\t\t\tthis.onArrangeComplete();\n\t\t\t\tthis._equalizeColumnsHeight();\n\t\t\t});\n\t\t}\n\n\t\tif (typeof this.onLayoutComplete === 'function') {\n\t\t\tthis.isotopeInstance.on('layoutComplete', () => {\n\t\t\t\tthis.onLayoutComplete();\n\t\t\t});\n\t\t}\n\n\t\tif (this.equalHeights) {\n\t\t\twindow.$window.on(getResponsiveResizeEvent(), debounce(() => {\n\t\t\t\tthis._equalizeColumnsHeight();\n\t\t\t}, 250));\n\t\t}\n\n\t\twindow.$window.one('arts/barba/transition/end', () => {\n\t\t\tthis.isotopeInstance.layout();\n\t\t});\n\t}\n\n\t_equalizeColumnsHeight() {\n\t\tthis.containerWidth = this.$target.innerWidth();\n\t\tthis.$items = this.$target.find('.js-grid__item');\n\t\tthis.$sizer = this.$target.find('.js-grid__sizer');\n\t\tthis.sizerWidth = this.$sizer.innerWidth();\n\t\tthis.itemsAmount = this.$items.length;\n\t\tthis.columnsAmount = Math.round(this.containerWidth / this.sizerWidth);\n\t\tthis.rowsAmount = this.itemsAmount / this.columnsAmount;\n\n\t\tlet offset = 0;\n\n\t\tgsap.set(this.$sizer, {\n\t\t\tclearProps: 'height'\n\t\t});\n\n\t\tgsap.set(this.$items, {\n\t\t\tclearProps: 'height',\n\t\t\tonComplete: () => {\n\t\t\t\tthis.isotopeInstance.layout();\n\t\t\t}\n\t\t});\n\n\t\tif (this.columnsAmount > 1) {\n\n\t\t\tfor (let row = 0; row < this.itemsAmount; row+=this.columnsAmount) {\n\n\t\t\t\tlet maxHeight = 0;\n\t\t\t\tlet $currentRowItems = [];\n\n\t\t\t\tfor (let index = row; index < row + this.columnsAmount; index++) {\n\n\t\t\t\t\tconst\n\t\t\t\t\t\ttargetIndex = index + offset,\n\t\t\t\t\t\t$currentItem = this.$items.eq(targetIndex),\n\t\t\t\t\t\tcurrentItemHeight = $currentItem.innerHeight();\n\n\t\t\t\t\tif (currentItemHeight > maxHeight) {\n\t\t\t\t\t\tmaxHeight = currentItemHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\t$currentRowItems.push($currentItem);\n\t\t\t\t}\n\n\t\t\t\tgsap.to($currentRowItems, {\n\t\t\t\t\tduration: 0.2,\n\t\t\t\t\theight: maxHeight,\n\t\t\t\t\toverwrite: true,\n\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\tthis.isotopeInstance.layout();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n","/* ======================================================================== */\n/* 41. 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.kinsey.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() {\n this._bindClickGalleryLinks();\n }\n\n _bindClickGalleryLinks() {\n const self = this,\n $links = this.$target.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: self.$target\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/* 42. 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);\n }\n\n run() {\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 + Math.min(0, -window.$pageHeader.height()),\n duration: this.duration\n });\n }\n}\n","/* ======================================================================== */\n/* 43. SectionFixedReveal */\n/* ======================================================================== */\nclass SectionFixedReveal extends BaseComponent{\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.$spacer = this.$target.parent('.js-fixed-reveal-spacer');\n\t\tthis.startAnimationOffset = this.$target.data('arts-fixed-reveal-from') || '-30vh';\n\t\tthis.startAnimationOpacity = this.$target.data('arts-fixed-reveal-from-opacity') === undefined ? 1 : this.$target.data('arts-fixed-reveal-from-opacity');\n\t\tthis.disabledAtBreakpoint = this.$target.data('arts-fixed-reveal-disabled-at');\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.scrollTrigger = null;\n\t}\n\n\trun() {\n\t\tthis._createWrapper();\n\t\tthis._bindEvents();\n\n\t\tif (!this._isCurrentlyDisabled()) {\n\t\t\tthis._animate();\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\twindow.$window\n\t\t\t// re-create everything\n\t\t\t.on(getResponsiveResizeEvent(), debounce(() => {\n\t\t\t\tthis._createWrapper();\n\n\t\t\t\tif (!this.timeline && !this._isCurrentlyDisabled()) {\n\t\t\t\t\tthis._animate();\n\t\t\t\t}\n\n\t\t\t\tif (this._isCurrentlyDisabled()) {\n\t\t\t\t\tif (this.scrollTrigger) {\n\t\t\t\t\t\tthis.scrollTrigger.disable();\n\t\t\t\t\t}\n\t\t\t\t\tgsap.set(this.$target, {\n\t\t\t\t\t\tclearProps: 'all'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.scrollTrigger) {\n\t\t\t\t\t\tthis.scrollTrigger.enable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 250))\n\t\t\t// refresh ST\n\t\t\t.on('arts/scrolltrigger/update', (e) => {\n\t\t\t\tif (this.scrollTrigger && e.detail && e.detail.target === 'fixed-reveal') {\n\t\t\t\t\tthis.scrollTrigger.refresh(e.detail.immediate);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_isCurrentlyDisabled() {\n\t\treturn window.Modernizr.mq(`(${this.disabledAtBreakpoint})`) || window.innerHeight < this._getHeight();\n\t}\n\n\t_createWrapper() {\n\t\tif (!this.$spacer || !this.$spacer.length) {\n\t\t\tthis.$target.wrap('
');\n\t\t\tthis.$spacer = this.$target.parent('.js-fixed-reveal-spacer');\n\t\t}\n\n\t\tgsap.set(this.$target, {\n\t\t\tposition: 'absolute',\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0\n\t\t});\n\n\t\tgsap.set(this.$spacer, {\n\t\t\theight: () => this._getHeight(),\n\t\t\tposition: 'relative',\n\t\t\tbackground: this.$target.css('background-color'),\n\t\t\toverflow: 'hidden',\n\t\t\tzIndex: this.$target.css('z-index')\n\t\t});\n\t}\n\n\t_getHeight() {\n\t\treturn this.$target.outerHeight();\n\t}\n\n\t_animate() {\n\t\tif (this.scrollTrigger && typeof this.scrollTrigger.kill === 'function') { \n\t\t\tthis.scrollTrigger.kill();\n\t\t}\n\n\t\tthis.timeline.clear().fromTo(this.$target, {\n\t\t\ty: this.startAnimationOffset,\n\t\t\tease: 'none',\n\t\t\tautoAlpha: this.startAnimationOpacity\n\t\t}, {\n\t\t\ty: '0vh',\n\t\t\tautoAlpha: 1,\n\t\t\tease: 'none'\n\t\t});\n\n\t\tthis.scrollTrigger = ScrollTrigger.create({\n\t\t\tanimation: this.timeline,\n\t\t\tend: () => `bottom bottom`,\n\t\t\tstart: () => `top bottom`,\n\t\t\ttrigger: this.$spacer,\n\t\t\tscrub: true,\n\t\t\tinvalidateOnRefresh: true\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 44. SectionHorizontalScroll */\n/* ======================================================================== */\nclass SectionHorizontalScroll extends BaseComponent {\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.scrollingType = this.$target.data('arts-horizontal-scroll-type') || 'modular';\n\t\tthis.scrollingStartDelay = this.$target.data('arts-horizontal-scroll-start-delay') || 0;\n\t\tthis.scrollingEndDelay = this.$target.data('arts-horizontal-scroll-end-delay') || 0;\n\t\tthis.scrollingToggleClass = this.$target.data('arts-horizontal-scroll-toggle-class') || false;\n\t\tthis.toggleClass = this.scrollingToggleClass.length && this.scrollingToggleClass !== 'false' ? this.scrollingToggleClass : false;\n\t\tthis.disabledAtBreakpoint = this.$target.data('arts-horizontal-scroll-disabled-at');\n\t\tthis.triggers = {\n\t\t\tpin: null,\n\t\t\tsections: []\n\t\t};\n\t\tthis.savedSBDamping;\n\t\tthis.savedOffsetY;\n\t\tthis.$wrapper = this.$target.find('[data-arts-horizontal-scroll=\"wrapper\"]');\n\t\tthis.wrapper = this.$wrapper.get(0);\n\t\tthis.scrollWidth = this.wrapper.scrollWidth; // cache scroll width\n\t\tthis.offsetWidth = this.target.offsetWidth; // cache offset width\n\t\tthis.screenViews = this._getScreenViewsAmount();\n\t\tthis.$sections = this.$target.find('[data-arts-horizontal-scroll=\"section\"]');\n\t}\n\n\trun() {\n\t\tthis._init();\n\t\tthis._bindEvents();\n\t}\n\n\t_initLazyImages() {\n\t\tconst\n\t\t\t$lazyImages = this.$wrapper.find('.lazy:not(.lazy_loaded) img[data-src]'),\n\t\t\t$lazyBackgrounds = this.$wrapper.find('.lazy-bg:not(.lazy_loaded)[data-src]');\n\n\t\t// set lazy loading images in horizontal scrolling section\n\t\tif ($lazyImages.length) {\n\t\t\tthis.lazyImages = new LazyLoad({\n\t\t\t\timages: $lazyImages,\n\t\t\t\tappendScroll: this._getLazyScrollingContainer()\n\t\t\t});\n\n\t\t\twindow.$window.one('arts/barba/transition/start', this.lazyImages.destroy);\n\t\t}\n\n\t\t// set lazy loading backgrounds\n\t\tif ($lazyBackgrounds.length) {\n\t\t\tthis.lazyBackgrounds = new LazyLoad({\n\t\t\t\tbackgrounds: $lazyBackgrounds,\n\t\t\t\tappendScroll: this._getLazyScrollingContainer()\n\t\t\t});\n\n\t\t\twindow.$window.one('arts/barba/transition/start', this.lazyBackgrounds.destroy);\n\t\t}\n\t}\n\n\t_init() {\n\t\tif (this._isCurrentlyDisabled()) {\n\t\t\tthis._killActiveTriggers();\n\t\t} else {\n\t\t\tthis._getPinnedWrapper();\n\n\t\t\t// calculate & run section-by-section translation\n\t\t\tif (this.scrollingType === 'modular' && this.$sections.length) {\n\t\t\t\tthis._getInnerSectionsTranslation();\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tAnimations.refreshAll();\n\t\t\t}, 250);\n\t\t}\n\n\t\tthis._initLazyImages();\n\t}\n\n\t_saveSmoothScrollbarDamping() {\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\tthis.savedSBDamping = window.SB.options.damping;\n\t\t\twindow.SB.update();\n\t\t}\n\t}\n\n\t_restoreSmoothScrollbarDamping() {\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\twindow.SB.options.damping = this.savedSBDamping;\n\t\t\twindow.SB.update();\n\t\t}\n\t}\n\n\t_saveSmoothScrollbarOffsetY() {\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\tthis.savedOffsetY = window.SB.offset.y;\n\t\t\twindow.SB.scrollTop = 0;\n\t\t} else {\n\t\t\tthis.savedOffsetY = window.scrollY;\n\t\t\twindow.scrollTo({\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tbehavior: 'instant'\n\t\t\t});\n\t\t}\n\t}\n\n\t_restoreSmoothScrollbarOffsetY() {\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\twindow.SB.scrollTop = this.savedOffsetY;\n\t\t} else {\n\t\t\twindow.scrollTo({\n\t\t\t\ttop: this.savedOffsetY,\n\t\t\t\tleft: 0,\n\t\t\t\tbehavior: 'instant'\n\t\t\t});\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\twindow.$window.on(getResponsiveResizeEvent(), debounce(() => {\n\t\t\tself._killActiveTriggers();\n\t\t\tself._saveSmoothScrollbarOffsetY();\n\t\t\tself.set();\n\t\t\tself._init();\n\t\t\tself._restoreSmoothScrollbarOffsetY();\n\t\t\tself._enableScrollMomentum(true);\n\t\t}, 250));\n\t}\n\n\t_getLazyScrollingContainer() {\n\t\tif (window.Modernizr.touchevents && window.Modernizr.mq(`(${this.disabledAtBreakpoint})`)) {\n\t\t\treturn window;\n\t\t} else {\n\t\t\treturn this.$wrapper;\n\t\t}\n\t}\n\n\t_isCurrentlyDisabled() {\n\t\treturn window.Modernizr.touchevents || window.Modernizr.mq(`(${this.disabledAtBreakpoint})`);\n\t}\n\n\t_killActiveTriggers() {\n\t\tif (this.triggers && this.triggers.sections && this.triggers.sections.length) {\n\t\t\tthis.triggers.sections.forEach((s) => s.kill(true));\n\t\t}\n\n\t\tif (this.triggers && this.triggers.pin) {\n\t\t\tthis.triggers.pin.kill(true);\n\t\t}\n\n\t\tgsap.set(this.$sections, {\n\t\t\tclearProps: 'all'\n\t\t});\n\n\t\tgsap.set(this.wrapper, {\n\t\t\tclearProps: 'all'\n\t\t});\n\t}\n\n\t_getPinnedWrapper() {\n\t\tlet\n\t\t\tanimation = new gsap.timeline(),\n\t\t\tdelay = 0,\n\t\t\tscrollEvent = new CustomEvent('scroll');\n\n\t\t// In 'modular' scrolling mode the actual scrolling\n\t\t// is done with section-by-section translation implemented\n\t\t// in _getInnerSectionsTranslation() function\n\t\tif (this.scrollingType === 'modular') {\n\t\t\tdelay = this.scrollingStartDelay + this.scrollingEndDelay;\n\t\t} else {\n\t\t\tdelay = this.scrollingStartDelay;\n\t\t\t// In 'wrapper' scrolling we translate the whole container\n\t\t\tanimation\n\t\t\t\t.to(this.wrapper, {\n\t\t\t\t\tduration: this.scrollingStartDelay / 2000\n\t\t\t\t})\n\t\t\t\t.to(this.wrapper, {\n\t\t\t\t\tx: () => `-${this.scrollWidth - this.offsetWidth}`,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\tease: 'none'\n\t\t\t\t})\n\t\t\t\t.to(this.wrapper, {\n\t\t\t\t\tduration: this.scrollingEndDelay / 2000\n\t\t\t\t});\n\t\t}\n\n\t\tthis.triggers.pin = ScrollTrigger.create({\n\t\t\tanimation,\n\t\t\ttrigger: this.$target,\n\t\t\tinvalidateOnRefresh: true,\n\t\t\trefreshPriority: 0,\n\t\t\tpin: this.wrapper,\n\t\t\tpinType: typeof window.SB !== 'undefined' ? 'transform' : 'fixed',\n\t\t\tpinSpacing: 'margin',\n\t\t\tanticipatePin: 1,\n\t\t\tscrub: true,\n\t\t\ttoggleClass: this.scrollingType === 'modular' ? false : {\n\t\t\t\ttargets: this.wrapper,\n\t\t\t\tclassName: this.toggleClass\n\t\t\t},\n\t\t\tstart: () => `top top`,\n\t\t\tonUpdate: () => {\n\t\t\t\tthis.wrapper.dispatchEvent(scrollEvent);\n\t\t\t},\n\t\t\tend: () => `top+=${this.scrollWidth - this.offsetWidth + delay} top`,\n\t\t\tonToggle: (instance) => {\n\t\t\t\tif (instance.isActive) {\n\t\t\t\t\tthis._enableScrollMomentum(false);\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableScrollMomentum(true);\n\t\t\t\t\t// Animations.refresh('fixed-reveal');\n\t\t\t\t\tAnimations.refreshAll();\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\t_getScreenViewsAmount() {\n\t\treturn this.scrollWidth / this.offsetWidth;\n\t}\n\n\t_enableScrollMomentum(enable = true) {\n\t\tif (enable === true) {\n\t\t\tthis._restoreSmoothScrollbarDamping();\n\t\t} else {\n\t\t\tif (typeof window.SB !== 'undefined') {\n\t\t\t\tthis._saveSmoothScrollbarDamping();\n\t\t\t\twindow.SB.setMomentum(0, 0);\n\t\t\t\twindow.SB.options.damping = 10;\n\t\t\t}\n\t\t}\n\t}\n\n\t_getInnerSectionOffset(el, index) {\n\t\tlet offset = el.offsetWidth;\n\n\t\tfor (let i = 0; i < index; i++) {\n\t\t\toffset += this.$sections.eq(i).get(0).offsetWidth;\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\t_getInnerSectionsTranslation() {\n\t\tconst self = this;\n\n\t\tthis.$sections.each(function (index) {\n\t\t\tlet\n\t\t\t\t$this = $(this),\n\t\t\t\trect = this.getBoundingClientRect(),\n\t\t\t\toffsetTrigger = 0,\n\t\t\t\toffsetInner = self._getInnerSectionOffset(this, index),\n\t\t\t\toutOfView = false,\n\t\t\t\ttrigger = this,\n\t\t\t\tinvalidateOnRefresh = true,\n\t\t\t\ttl = new gsap.timeline(),\n\t\t\t\tstart,\n\t\t\t\tend;\n\n\t\t\t// out of view\n\t\t\tif (rect.left >= self.offsetWidth) {\n\t\t\t\toutOfView = true;\n\t\t\t\toffsetTrigger += Math.max(0, rect.left - self.offsetWidth);\n\t\t\t} else {\n\n\t\t\t\t// immediately add \"in-view\" class for the sections\n\t\t\t\t// which are in view\n\t\t\t\tif (self.toggleClass) {\n\t\t\t\t\t$this.addClass(self.toggleClass);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// section belongs to the last screen view\n\t\t\t// so correct the offset\n\t\t\tif (rect.right >= self.offsetWidth * (self.screenViews - 1)) {\n\t\t\t\toffsetInner -= rect.left - self.offsetWidth * (self.screenViews - 1) + rect.width;\n\t\t\t}\n\n\t\t\tstart = outOfView ? `top+=${offsetTrigger + self.scrollingStartDelay} top` : `top+=${self.scrollingStartDelay} top`;\n\t\t\tend = `bottom+=${offsetInner + self.scrollingStartDelay} bottom`;\n\n\t\t\ttl.fromTo(this, {\n\t\t\t\tclearProps: 'transform',\n\t\t\t\tx: () => -offsetTrigger,\n\t\t\t\timmediateRender: true\n\t\t\t}, {\n\t\t\t\tduration: 1,\n\t\t\t\tease: 'none',\n\t\t\t\tx: () => -offsetInner,\n\t\t\t});\n\n\t\t\tconst st = ScrollTrigger.create({\n\t\t\t\ttrigger,\n\t\t\t\tinvalidateOnRefresh,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tanimation: tl,\n\t\t\t\tscrub: true,\n\t\t\t\ttoggleClass: self.toggleClass,\n\t\t\t});\n\n\t\t\tself.triggers.sections.push(st);\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 45. 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 || this.slider.params.autoplay.enabledLater ? 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\t\t\tpaused: true\n\t\t});\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\tif (this.initialSetTimeline) {\n\t\t\t\t\tthis.initialSetTimeline.pause();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('autoplayStart', () => {\n\t\t\t\tthis.timeline.play();\n\t\t\t\tif (this.initialSetTimeline) {\n\t\t\t\t\tthis.initialSetTimeline.play();\n\t\t\t\t}\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\tthis.initialSetTimeline = undefined;\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/* 46. SliderTextTransitions */\n/* ======================================================================== */\nclass SliderTextTransitions {\n\tconstructor({\n\t\tslider,\n\t\tdirection,\n\t\tstaggerHeadings = 0.2,\n\t\tstaggerTexts = 0.2,\n\t\theading,\n\t\tsubheading,\n\t\tdescription,\n\t\tlink,\n\t\tline,\n\t\thasAnimation = false\n\t}) {\n\t\t// slider\n\t\tthis.slider = slider;\n\t\tthis.$slides = $(this.slider.slides);\n\t\tthis.hasAnimation = hasAnimation;\n\t\tthis.$firstSlide = hasAnimation ? $({}) : this.$slides.eq(0); // don't exclude 1st slide from animation\n\n\t\t// params\n\t\tthis.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.$line = line;\n\n\t\t// animation\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.hideTimeline = new gsap.timeline();\n\t\tthis.ease = 'expo.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_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\tgsap.effects.setWords(this.$subheading.not(this.$firstSlide.find(this.$subheading)), {\n\t\t\t\tx: 0, //directions.in.x / 4,\n\t\t\t\ty: (directions.in.y || directions.in.x),\n\t\t\t\tautoAlpha: 0,\n\t\t\t});\n\t\t}\n\n\t\tif (this.$heading && this.$heading.length) {\n\t\t\tgsap.effects.setChars(this.$heading.not(this.$firstSlide.find(this.$heading)), {\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\tgsap.effects.setLines(this.$description.not(this.$firstSlide.find(this.$description)), {\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.$firstSlide.find(this.$link)), {\n\t\t\t\ty: (this.animationDirections.offset.y.next.in || this.animationDirections.offset.x.next.in),\n\t\t\t\tautoAlpha: 0,\n\t\t\t});\n\t\t}\n\n\t\tif (this.$line && this.$line.length) {\n\t\t\tgsap.set(this.$line.not(this.$firstSlide.find(this.$line)), {\n\t\t\t\tscaleX: 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$prevLine = $prevSlide.find(this.$line),\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\t\t\t$activeLine = $activeSlide.find(this.$line);\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.hideWords($prevSubheading, {\n\t\t\t\t\tduration: self.speed / 2,\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tx: 0,//directions.out.x / 4,\n\t\t\t\t\ty: (directions.out.y || directions.out.x),\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.setWords(this.$subheading.not($prevSubheading), {\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: (directions.in.y || directions.in.x),\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($prevHeading, {\n\t\t\t\t\tduration: self.speed,\n\t\t\t\t\tautoAlpha: 1,\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.setChars(this.$heading.not($prevHeading), {\n\t\t\t\t\tautoAlpha: 1,\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($prevDescription, {\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.setLines(this.$description.not($prevDescription), {\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 (this.$link && this.$link.length) {\n\t\t\tself.timeline.add([\n\t\t\t\tgsap.to($prevLink, {\n\t\t\t\t\tduration: self.speed,\n\t\t\t\t\ty: (directions.out.y || directions.out.x),\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\tease: self.ease\n\t\t\t\t}),\n\t\t\t\tgsap.set(this.$link.not($prevLink), {\n\t\t\t\t\ty: (directions.in.y || directions.in.x),\n\t\t\t\t\tautoAlpha: 0\n\t\t\t\t})\n\t\t\t], '0');\n\t\t}\n\n\t\tif (this.$line && this.$line.length) {\n\t\t\tself.timeline.add([\n\t\t\t\tgsap.to($prevLine, {\n\t\t\t\t\tduration: self.speed,\n\t\t\t\t\tscaleX: 0,\n\t\t\t\t\ttransformOrigin: direction === 'next' ? 'right center' : 'left center',\n\t\t\t\t\tease: self.ease,\n\t\t\t\t}),\n\t\t\t\tgsap.set(this.$line.not($prevLine), {\n\t\t\t\t\tscaleX: 0\n\t\t\t\t})\n\t\t\t], '0')\n\t\t}\n\n\t\t// /**\n\t\t// * Set current elements\n\t\t// */\n\t\t// if ($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// if ($activeLine.length) {\n\t\t// \tself.timeline.set($activeLine, {\n\t\t// \t\tscaleX: 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.animateWords($activeSubheading, {\n\t\t\t\tautoAlpha: 1,\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\tif ($activeLine.length) {\n\t\t\tself.timeline.to($activeLine, {\n\t\t\t\tduration: self.speed,\n\t\t\t\tscaleX: 1,\n\t\t\t\ttransformOrigin: direction === 'next' ? 'left center' : 'right center',\n\t\t\t\tease: self.ease,\n\t\t\t}, `elementsSet-=${this.speed / 2}`);\n\t\t}\n\n\t\tthis.timeline.totalDuration(this.speed * 1.5);\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\tdefault: // 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 = '104%';\n\t\t\t\t\tdirections.offset.x.next.out = '-104%';\n\t\t\t\t\tdirections.offset.x.prev.in = '-104%';\n\t\t\t\t\tdirections.offset.x.prev.out = '104%';\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 = '100%';\n\t\t\t\t\tdirections.offset.y.next.out = '-100%';\n\t\t\t\t\tdirections.offset.y.prev.in = '-100%';\n\t\t\t\t\tdirections.offset.y.prev.out = '100%';\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 = '-104%';\n\t\t\t\t\tdirections.offset.x.next.out = '104%';\n\t\t\t\t\tdirections.offset.x.prev.in = '104%';\n\t\t\t\t\tdirections.offset.x.prev.out = '-104%';\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 = '100%';\n\t\t\t\t\tdirections.offset.y.next.out = '-100%';\n\t\t\t\t\tdirections.offset.y.prev.in = '-100%';\n\t\t\t\t\tdirections.offset.y.prev.out = '100%';\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 = '-104%';\n\t\t\t\t\tdirections.offset.x.next.out = '104%';\n\t\t\t\t\tdirections.offset.x.prev.in = '104%';\n\t\t\t\t\tdirections.offset.x.prev.out = '-104%';\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 = '-100%';\n\t\t\t\t\tdirections.offset.y.next.out = '100%';\n\t\t\t\t\tdirections.offset.y.prev.in = '100%';\n\t\t\t\t\tdirections.offset.y.prev.out = '-100%';\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/* 47. 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.$target = target;\n\t\tthis.$WPadminBar = adminBar;\n\t\tthis.$absoluteElements = absoluteElements;\n\t\tthis.$fixedElements = fixedElements;\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.kinsey.theme.smoothScroll.enabled ||\n\t\t\t!this.$target ||\n\t\t\t!this.$target.length ||\n\t\t\ttypeof elementor !== 'undefined' || // don't launch in Elementor edit mode\n\t\t\twindow.kinsey.theme.isElementorEditorActive || // don't launch in Elementor edit mode\n\t\t\t(window.Modernizr.touchevents && !this.$target.hasClass('js-smooth-scroll_enable-mobile')) || // don't launch on touch devices\n\t\t\twindow.Modernizr.touchevents\n\t\t) {\n\t\t\tthis._handleAnchorsScrolling();\n\t\t\twindow.$html.removeClass('smoothscroll');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._registerPlugins();\n\t\tthis.$target.addClass('smooth-scroll');\n\t\twindow.$html.addClass('smoothscroll');\n\n\t\twindow.SB = window.Scrollbar.init(this.$target[0], window.kinsey.theme.smoothScroll);\n\n\t\tthis._bindEvents();\n\n\t\ttry {\n\t\t\tthis._handleAnchorsScrolling();\n\t\t} catch (error) {\n\t\t\tconsole.error(`Smooth anchor scrolling: Unrecognized selector expression: ${error}`)\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\t// Immediately focus SB container so it become accessible for keyboard navigation\n\t\twindow.SB.containerEl.focus();\n\t}\n\n\t_registerPlugins() {\n\n\t\tif (typeof NativeScrollEventPlugin !== 'undefined') {\n\t\t\twindow.Scrollbar.use(NativeScrollEventPlugin);\n\t\t}\n\n\t\tif (typeof ProxyGSAPScrollTriggerPlugin !== 'undefined') {\n\t\t\twindow.Scrollbar.use(ProxyGSAPScrollTriggerPlugin);\n\t\t}\n\n\t\tif (typeof DisableScrollPlugin !== 'undefined') {\n\t\t\twindow.Scrollbar.use(DisableScrollPlugin);\n\t\t}\n\n\t\tif (window.kinsey.theme.smoothScroll.plugins.edgeEasing && typeof SoftscrollPlugin !== 'undefined') {\n\t\t\twindow.Scrollbar.use(SoftscrollPlugin);\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\t// Destroy instance after page transition\n\t\twindow.$window.one('arts/barba/transition/init/before', () => {\n\t\t\twindow.SB.destroy();\n\t\t});\n\t}\n\n\t_handleAnchorsScrolling() {\n\t\tthis.$target.find('a[href*=\"#\"]:not([href=\"#\"]):not(.post__comments a)').each(function () {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\turl = $current.attr('href'),\n\t\t\t\tfilteredUrl = url.substring(url.indexOf('#'));\n\n\t\t\tif (filteredUrl.length) {\n\t\t\t\tconst $el = $(filteredUrl);\n\n\t\t\t\tif ($el.length) {\n\t\t\t\t\t$current.on('click', function (e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tScroll.scrollTo({\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: $el.offset().top,\n\t\t\t\t\t\t\tduration: 0.8\n\t\t\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\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/* 48. MobileBarHeight */\n/* ======================================================================== */\nclass MobileBarHeight {\n constructor() {\n this.vh = 0;\n this._createStyleElement();\n this._setVh();\n\n if (window.kinsey.theme.mobileBarFix.update) {\n this._bindEvents();\n }\n }\n\n _setVh() {\n this.vh = window.innerHeight * 0.01;\n $('#arts-fix-bar').html(`:root { --fix-bar-vh: ${this.vh}px; }`);\n }\n\n _bindEvents() {\n const event = getResponsiveResizeEvent();\n\n window.$window.on(event, debounce(() => {\n this._setVh();\n }, 250));\n }\n\n _createStyleElement() {\n if (!$('#arts-fix-bar').length) {\n $('head').append('');\n }\n }\n}\n","/* ======================================================================== */\n/* 49. debounce */\n/* ======================================================================== */\nfunction debounce(func, wait, immediate) {\n\n let timeout;\n\n return () => {\n\n let\n context = this,\n args = arguments;\n\n let later = () => {\n\n timeout = null;\n\n if (!immediate) {\n func.apply(context, args)\n };\n\n };\n\n let callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args)\n };\n\n };\n\n};\n","/* ======================================================================== */\n/* 50. 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\tif (!a) {\n\t\t\treturn 0;\n\t\t}\n\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/* 51. getColorValues */\n/* ======================================================================== */\n// return array of [r,g,b,a] from any valid color. if failed returns undefined\nfunction getColorValues(color) {\n\n // empty argument\n if (color === '') {\n return;\n }\n\n // transparent color\n if (color.toLowerCase() === 'transparent') {\n return [0, 0, 0, 0];\n }\n\n // HEX\n if (color[0] === '#') {\n if (color.length < 7) {\n // convert #RGB and #RGBA to #RRGGBB and #RRGGBBAA\n color = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3] + (color.length > 4 ? color[4] + color[4] : '');\n }\n\n return [parseInt(color.substr(1, 2), 16),\n parseInt(color.substr(3, 2), 16),\n parseInt(color.substr(5, 2), 16),\n color.length > 7 ? parseInt(color.substr(7, 2), 16)/255 : 1];\n }\n // RGB\n if (color.indexOf('rgb') === -1) {\n // convert named colors\n let temp_elem = document.body.appendChild(document.createElement('fictum')); // intentionally use unknown tag to lower chances of css rule override with !important\n let flag = 'rgb(1, 2, 3)'; // this flag tested on chrome 59, ff 53, ie9, ie10, ie11, edge 14\n\n temp_elem.style.color = flag;\n\n if (temp_elem.style.color !== flag) {\n return; // color set failed - some monstrous css rule is probably taking over the color of our object\n }\n\n temp_elem.style.color = color;\n if (temp_elem.style.color === flag || temp_elem.style.color === '') {\n return; // color parse failed\n }\n\n color = getComputedStyle(temp_elem).color;\n document.body.removeChild(temp_elem);\n }\n\n // RGBA\n if (color.indexOf('rgb') === 0) {\n if (color.indexOf('rgba') === -1) {\n color += ',1'; // convert 'rgb(R,G,B)' to 'rgb(R,G,B)A' which looks awful but will pass the regxep below\n return color.match(/[\\.\\d]+/g).map(function (a) {\n return +a;\n });\n }\n }\n}\n","/* ======================================================================== */\n/* 52. getResponsiveResizeEvent */\n/* ======================================================================== */\nfunction getResponsiveResizeEvent() {\n\treturn window.Modernizr.touchevents ? 'orientationchange' : 'resize';\n}\n","/* ======================================================================== */\n/* 53. isBrowserFirefox */\n/* ======================================================================== */\nfunction isBrowserFirefox() {\n return ('netscape' in window) && / rv:/.test(navigator.userAgent);\n}\n","/* ======================================================================== */\n/* 54. runOnHighPerformanceGPU */\n/* ======================================================================== */\nfunction runOnHighPerformanceGPU() {\n const $webGLCanvas = $('#js-webgl');\n\n // don't run on mobile devices\n if (!window.Modernizr.touchevents && $webGLCanvas.length) {\n $webGLCanvas[0].getContext('webgl', {\n powerPreference: 'high-performance'\n });\n }\n}\n","/* ======================================================================== */\n/* 55. sanitizeSelector */\n/* ======================================================================== */\nfunction sanitizeSelector(string) {\n if (!string || !string.length) {\n return false;\n }\n\n return string\n .replace(/(\\r\\n|\\n|\\r)/gm, '') // remove tabs, spaces\n .replace(/(\\\\n)/g, '') // remove lines breaks\n .replace(/^[,\\s]+|[,\\s]+$/g, '') // remove redundant commas\n .replace(/\\s*,\\s*/g, ','); // remove duplicated commas\n}\n","/* ======================================================================== */\n/* 56. syncAttributes */\n/* ======================================================================== */\nfunction syncAttributes($sourceElement, $targetElement) {\n\n\t// single element\n\tif ($sourceElement.length === 1 && $targetElement.length === 1) {\n\t\tconst\n\t\t\ttargetEl = $targetElement.get(0),\n\t\t\ttargetAttributes = $targetElement.getAllAttributes(),\n\t\t\tsourceAttributes = $sourceElement.getAllAttributes();\n\n\t\t// source element doesn't have any attributes present\n\t\tif ($.isEmptyObject(sourceAttributes)) {\n\t\t\t// ... so remove all attributes from the target element\n\t\t\t[...targetEl.attributes].forEach(attr => targetEl.removeAttribute(attr.name));\n\t\t} else {\n\t\t\tObject.keys(targetAttributes).forEach((key) => {\n\t\t\t\t// delete key on target that doesn't exist in source element\n\t\t\t\tif (key !== 'style' && !(key in sourceAttributes)) {\n\t\t\t\t\t$targetElement.removeAttr(key);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// sync attributes\n\t\t\t$targetElement.attr(sourceAttributes);\n\t\t}\n\n\t// multiple elements\n\t} else if ($sourceElement.length > 1 && $targetElement.length > 1 && $sourceElement.length === $targetElement.length) {\n\n\t\t$.each($targetElement, function (index) {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\tsourceAttributes = $sourceElement.eq(index).getAllAttributes();\n\n\t\t\t// source element doesn't have any attributes present\n\t\t\tif ($.isEmptyObject(sourceAttributes)) {\n\t\t\t\t// ... so remove all attributes from the target element\n\t\t\t\t[...this.attributes].forEach(attr => this.removeAttribute(attr.name));\n\t\t\t} else {\n\n\t\t\t\t// sync attributes\n\t\t\t\t$current.attr(sourceAttributes);\n\t\t\t}\n\t\t});\n\n\t}\n\n}\n","/* ======================================================================== */\n/* 57. LazyLoad */\n/* ======================================================================== */\nclass LazyLoad {\n\tconstructor({\n\t\timages,\n\t\tbackgrounds,\n\t\tsetPaddingBottom = true,\n\t\tappendScroll = window\n\t}) {\n\t\tthis.$images = images;\n\t\tthis.$backgrounds = backgrounds;\n\t\tthis.lazyImages;\n\t\tthis.lazyBackgrounds;\n\t\tthis.appendScroll = appendScroll;\n\n\t\tif (this.$images && this.$images.length) {\n\t\t\tif (setPaddingBottom) {\n\t\t\t\tthis.setPaddingBottom();\n\t\t\t}\n\n\t\t\tthis.lazyImages = this.loadImages({\n\t\t\t\ttarget: this.$images\n\t\t\t});\n\t\t}\n\n\t\tif (this.$backgrounds && this.$backgrounds.length) {\n\t\t\tthis.lazyBackgrounds = this.loadBackgrounds({\n\t\t\t\ttarget: this.$backgrounds\n\t\t\t});\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('.lazy-bg, .lazy'),\n\t\t\t\t$parentWrapper = $elParent.parent('.lazy-wrapper'),\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\theight: 0\n\t\t\t});\n\n\t\t\tif ($parentWrapper.length && elWidth) {\n\t\t\t\t$parentWrapper.css({\n\t\t\t\t\tmaxWidth: parseFloat(elWidth)\n\t\t\t\t});\n\t\t\t}\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\tappendScroll: this.appendScroll,\n\t\t\t\tthreshold: 800,\n\t\t\t\tchainable: false,\n\t\t\t\tafterLoad: (el) => {\n\t\t\t\t\t$(el).closest('.lazy, .lazy-bg').addClass('lazy_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\n\t\t\twindow.$window\n\t\t\t\t.on('arts/barba/transition/start', () => {\n\t\t\t\tinstance.destroy();\n\t\t\t\t})\n\t\t\t\t.on('arts/barba/transition/end', () => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tinstance.update();\n\t\t\t\t\t}, 50);\n\t\t\t\t});\n\t\t\tsetTimeout(() => {\n\t\t\t\tinstance.update();\n\t\t\t}, 50);\n\n\t\t\treturn instance;\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\tappendScroll: this.appendScroll,\n\t\t\t\tthreshold: 800,\n\t\t\t\tchainable: false,\n\t\t\t\tafterLoad: (el) => {\n\t\t\t\t\t$(el).closest('.lazy, .lazy-bg').addClass('lazy_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\n\t\t\twindow.$window\n\t\t\t\t.on('arts/barba/transition/start', () => {\n\t\t\t\t\tinstance.destroy();\n\t\t\t\t})\n\t\t\t\t.on('arts/barba/transition/end', () => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tinstance.update();\n\t\t\t\t\t}, 50);\n\t\t\t\t});\n\t\t\tsetTimeout(() => {\n\t\t\t\tinstance.update();\n\t\t\t}, 50);\n\n\t\t\treturn instance;\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 58. Preloader */\n/* ======================================================================== */\nfunction Preloader() {\n let\n tl = new gsap.timeline(),\n $counter = $('.js-preloader__counter'),\n $content = $('.js-preloader__content'),\n backgroundSizeHeight,\n counter = {\n width: 'auto',\n val: 0\n },\n value = _addZeros(0, 2) + '%';\n\n this.start = function () {\n window.dispatchEvent(new CustomEvent('arts/preloader/start'));\n\n tl\n .to($content, {\n y: 0,\n duration: 0.3,\n autoAlpha: 1,\n ease: 'power3.out',\n }, '0');\n\n if ($counter.length) {\n backgroundSizeHeight = $counter.css('background-size').split(' ')[1];\n\n // get maximum possible width to prevent shaking during the animation\n $counter.text('100%');\n\n // save width\n counter.width = $counter.width();\n\n // restore counter value\n $counter.text(value);\n\n // hard set the width\n gsap.set($counter, {\n width: counter.width\n });\n\n tl\n .to($counter, {\n duration: 0.3,\n autoAlpha: 1,\n y: 0,\n ease: 'power3.out',\n }, '0')\n .to(counter, {\n onUpdate: () => {\n value = parseFloat(counter.val).toFixed(0);\n value = _addZeros(value, 2);\n $counter.text(value + '%');\n },\n val: 100,\n duration: 20,\n ease: 'power3.out',\n });\n }\n\n }\n\n this.finish = function () {\n return new Promise((resolve) => {\n const timeScale = parseFloat(window.kinsey.theme.animations.timeScale.preloader) || 1;\n\n tl\n .clear()\n .add([\n gsap.to($content, {\n y: 0,\n autoAlpha: 1,\n ease: 'power3.out',\n duration: 0.3,\n overwrite: true\n }),\n gsap.to($counter, {\n y: 0,\n autoAlpha: 1,\n ease: 'power3.out',\n duration: 0.3,\n overwrite: true\n })\n ])\n .add([\n gsap.to($counter, {\n onStart: () => {\n $counter.removeClass('preloader__counter_started');\n },\n backgroundSize: `100% ${backgroundSizeHeight}`,\n duration: 2.4 / timeScale,\n ease: 'expo.inOut'\n }),\n gsap.to(counter, {\n onUpdate: () => {\n value = parseFloat(counter.val).toFixed(0);\n value = _addZeros(value, 2);\n $counter.text(value + '%');\n },\n val: 100,\n duration: 2.4 / timeScale,\n ease: 'expo.inOut'\n })\n ])\n .set($counter, {\n backgroundPosition: '100% 100%',\n })\n .to($counter, {\n backgroundSize: `0% ${backgroundSizeHeight}`,\n duration: 1.2,\n ease: 'expo.inOut',\n })\n .add([\n gsap.effects.hideMask(window.$pagePreloader, {\n duration: 1.2,\n scale: 1,\n direction: 'down',\n }),\n gsap.to($counter, {\n y: -50,\n autoAlpha: 0,\n duration: 0.3,\n onComplete: () => {\n window.$pagePreloader.addClass('preloader_ended');\n }\n }),\n gsap.to($content, {\n y: -50,\n autoAlpha: 0,\n duration: 0.3,\n delay: 0.1\n }),\n ], '-=0.3')\n .set(window.$pagePreloader, {\n display: 'none'\n })\n .add(() => {\n window.dispatchEvent(new CustomEvent('arts/preloader/end'));\n resolve(true);\n }, '-=0.3');\n });\n }\n\n function _addZeros(value, zeros) {\n while (value.toString().length < zeros) {\n value = '0' + value;\n }\n\n return value;\n }\n}\n","/* ======================================================================== */\n/* 59. Header */\n/* ======================================================================== */\nclass Header extends BaseComponent{\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({ target, scope });\n\t}\n\n\tset() {\n\t\tthis.$controls = this.$target.find('.header__controls');\n\t\tthis.$stickyHeader = this.$target.filter('.js-header-sticky');\n\t\tthis.$adminBar = $('#wpadminbar');\n\t\tthis.$burger = this.$target.find('#js-burger');\n\t\tthis.$overlay = this.$target.find('.header__wrapper-overlay-menu');\n\t\tthis.$maskRevealOverlay = this.$overlay.find('.mask-reveal');\n\t\tthis.$wrapperMenu = this.$target.find('.header__wrapper-menu');\n\t\tthis.burgerOpenClass = 'header__burger_opened';\n\t\tthis.$headerColumns = this.$target.find('.header__col');\n\t\tthis.$headerLeft = this.$target.find('.header__col-left');\n\t\tthis.$overlayWidgets = this.$target.find('.header__wrapper-overlay-widgets');\n\t\tthis.$allLinksOverlay = this.$target.find('.menu-overlay a');\n\t\tthis.$allLinksClassic = this.$target.find('.menu a');\n\t\tthis.$wrapperSlider = this.$target.find('.header__wrapper-slider');\n\t\tthis.$headerLabelSubmenu = this.$target.find('.js-header-label-submenu');\n\t\tthis.$infoLabel = this.$target.find('.header__overlay-menu-info');\n\n\t\tthis.color = this._getColorTheme();\n\t\tthis.colorSaved = this.color;\n\n\t\t// Menu\n\t\tthis.$menu = this.$target.find('.js-menu');\n\t\tthis.$menuOverlay = this.$overlay.find('.js-menu-overlay');\n\t\tthis.$menuLinks = this.$overlay.find('.menu-overlay > li > a');\n\t\tthis.$menuColumn = this.$overlay.find('.header__menu-column');\n\t\tthis.$menuSmoothScrollingContainer = this.$overlay.find('.js-header-smooth-scroll-container');\n\t\tthis.$menuGradientTop = this.$overlay.find('.header__menu-gradient_top');\n\t\tthis.$menuGradientBottom = this.$overlay.find('.header__menu-gradient_bottom');\n\t\tthis.selectedClass = 'selected';\n\t\tthis.openClass = 'opened';\n\t\tthis.currentMenuItemClass = 'current-menu-item';\n\t\tthis.currentMenuAncestorClass = 'current-menu-ancestor';\n\t\tthis.menuItemHasChildrenClass = 'menu-item-has-children';\n\t\tthis.hoverClassOverlay = 'menu-overlay_hover';\n\t\tthis.hoverClassClassic = 'menu_hover';\n\n\t\t// Submenu\n\t\tthis.$submenu = this.$overlay.find('.menu-overlay .sub-menu');\n\t\tthis.$submenuButton = $('#js-submenu-back');\n\t\tthis.$submenuOpeners = this.$overlay.find(`.${this.menuItemHasChildrenClass} > a`);\n\t\tthis.$submenuLinks = this.$submenu.find('> li > a');\n\t\tthis.currentSubmenuLabel = '';\n\t\tthis.prevSubmenuLabel = '';\n\n\t\t// Sticky\n\t\tthis.stickyScene = undefined;\n\t\tthis.stickyClass = 'header_sticky';\n\t\tthis.stickyTimeline = new gsap.timeline();\n\n\t\t// Scrollbar\n\t\tthis.SB = undefined;\n\n\t\t// Lock\n\t\tthis.lockClass = 'pointer-events-none';\n\t\tthis.unlockClass = 'pointer-events-auto';\n\n\t\tthis.labelTimeline = new gsap.timeline();\n\n\t\tthis.setMenu();\n\t\tthis._setMenusHover();\n\t}\n\n\trun() {\n\t\tif (typeof this.stickyScene !== 'undefined') {\n\t\t\tthis.stickyScene.refresh();\n\t\t\tthis.stickyScene.disable();\n\t\t}\n\n\t\tthis.timeline = new gsap.timeline();\n\n\t\tthis._correctTopOffset();\n\t\tthis._stick();\n\t\tthis._bindEvents();\n\t\tthis._handleAnchors();\n\t\tthis._runSmoothScrollOverlayMenu();\n\t\tthis._setGradientBackgrounds();\n\t}\n\n\tsetBurger(open = false) {\n\t\tif (open) {\n\t\t\tthis.$target.addClass(this.openClass);\n\t\t\tthis.$burger.addClass(this.burgerOpenClass);\n\t\t} else {\n\t\t\tthis.$target.removeClass(this.openClass);\n\t\t\tthis.$burger.removeClass(this.burgerOpenClass);\n\t\t}\n\t}\n\n\tsetMenu() {\n\n\t\tif (this.$wrapperSlider.length) {\n\t\t\tgsap.set(this.$wrapperSlider, {\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t}\n\n\t\tif (this.$overlay.length) {\n\t\t\tgsap.set(this.$overlay, {\n\t\t\t\tautoAlpha: 0,\n\t\t\t});\n\t\t}\n\n\t\tif (this.$menuOverlay.length) {\n\t\t\tthis.$menuOverlay.removeClass(this.lockClass).addClass(this.unlockClass);\n\t\t}\n\n\t\tif (this.$submenu.length) {\n\t\t\tgsap.set(this.$submenu, {\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t\tthis.$submenu.removeClass(this.unlockClass).addClass(this.lockClass);\n\t\t}\n\n\t\tif (this.$submenuButton.length) {\n\t\t\tgsap.set(this.$submenuButton, {\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t}\n\n\t\tthis.$submenu.removeClass(this.openClass);\n\t\tthis.$target.removeClass(this.openClass);\n\t\tthis.$burger.removeClass(this.burgerOpenClass);\n\n\t\tif (this.$menuLinks.length) {\n\t\t\tgsap.effects.setLines(this.$menuLinks, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: '-100%'\n\t\t\t});\n\t\t}\n\n\t\tif (this.$submenuLinks.length) {\n\t\t\tgsap.effects.setLines(this.$submenuLinks, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: '-100%'\n\t\t\t});\n\t\t}\n\n\t\tif (this.$overlayWidgets.length) {\n\t\t\tgsap.effects.setLines(this.$overlayWidgets, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: this._isMediumScreen() ? '-100%' : '100%'\n\t\t\t});\n\t\t}\n\n\t\tif (this.$infoLabel.length) {\n\t\t\tgsap.set(this.$infoLabel, {\n\t\t\t\tx: -30,\n\t\t\t\tautoAlpha: 0\n\t\t\t});\n\t\t}\n\n\t\tthis.$wrapperMenu.scrollTop(0);\n\n\t\tif (typeof this.SB !== 'undefined') {\n\t\t\tthis.SB.scrollTo(0,0);\n\t\t}\n\t}\n\n\topenMenu() {\n\t\tconst timeScale = parseFloat(window.kinsey.theme.animations.timeScale.overlayMenuOpen) || 1;\n\n\t\treturn this.timeline\n\t\t\t.clear()\n\t\t\t.set(this.$overlay, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t})\n\t\t\t.add([() => {\n\t\t\t\tthis._setTransition(true);\n\n\t\t\t\t// save current color theme which\n\t\t\t\t// can be different from the initial one\n\t\t\t\tthis.colorSaved = this._getColorTheme();\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuOpenStart'));\n\t\t\t\tthis._unstick();\n\t\t\t\tthis._updateThemeHeader({\n\t\t\t\t\ttext: this.color.overlay.text\n\t\t\t\t});\n\t\t\t}])\n\t\t\t.set(this.$adminBar, {\n\t\t\t\tposition: 'fixed',\n\t\t\t})\n\t\t\t.animateMask(this.$maskRevealOverlay, {\n\t\t\t\tscale: 1,\n\t\t\t\tdirection: 'down'\n\t\t\t}, 'start')\n\t\t\t.to(this.$headerLeft, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: 30,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tease: 'expo.inOut'\n\t\t\t}, 'start')\n\t\t\t.to(this.$infoLabel, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: 0,\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tease: 'expo.inOut'\n\t\t\t}, 'start')\n\t\t\t.add(() => {\n\t\t\t\tthis.$target.addClass(this.openClass);\n\t\t\t}, '-=0.6')\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateLines(this.$menuLinks, {\n\t\t\t\t\tstagger: {\n\t\t\t\t\t\tamount: 0.3,\n\t\t\t\t\t\tfrom: 'end'\n\t\t\t\t\t},\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tease: 'power4.out'\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateLines(this.$overlayWidgets, {\n\t\t\t\t\tstagger: {\n\t\t\t\t\t\tamount: 0.3,\n\t\t\t\t\t\tfrom: this._isMediumScreen() ? 'end' : 'start'\n\t\t\t\t\t},\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tease: 'power4.out'\n\t\t\t\t}),\n\t\t\t], '-=1.0')\n\t\t\t.to(this.$wrapperSlider, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tduration: 1.8\n\t\t\t}, 'start')\n\t\t\t.add(() => {\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuOpenEnd'));\n\t\t\t\tthis._setTransition(false);\n\t\t\t}, '-=0.6')\n\t\t\t.timeScale(timeScale);\n\t}\n\n\tcloseMenu(force = false, cb) {\n\n\t\tif (!this.$target.hasClass(this.openClass) && !force) {\n\t\t\treturn this.timeline;\n\t\t}\n\n\t\tconst\n\t\t\t$submenuLinksCurrent = this.$submenu.filter(`.${this.openClass}`).find(this.$submenuLinks),\n\t\t\ttimeScale = parseFloat(window.kinsey.theme.animations.timeScale.overlayMenuClose) || 1;\n\n\t\treturn this.timeline\n\t\t\t.clear()\n\t\t\t.add(() => {\n\t\t\t\tthis._setTransition(true);\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuCloseStart'));\n\t\t\t\tthis._stick();\n\n\t\t\t\tif (this.$stickyHeader.length && window.pageYOffset >= 1) {\n\t\t\t\t\tthis.$stickyHeader.addClass(this.stickyClass);\n\n\t\t\t\t\t// restore theme header from the saved version\n\t\t\t\t\tthis._updateThemeHeader({\n\t\t\t\t\t\ttheme: this.colorSaved.sticky.theme,\n\t\t\t\t\t\ttext: this.colorSaved.sticky.text\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthis._updateThemeHeader({\n\t\t\t\t\t\ttext: this.colorSaved.normal.text\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.to(this.$wrapperSlider, {\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tduration: 1.8\n\t\t\t}, 'start')\n\t\t\t.hideMask(this.$maskRevealOverlay, {\n\t\t\t\tscale: 1,\n\t\t\t\tdirection: 'down',\n\t\t\t}, 'start')\n\t\t\t.set(this.$adminBar, {\n\t\t\t\tclearProps: 'position'\n\t\t\t})\n\t\t\t.to(this.$headerLeft, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, 'start')\n\t\t\t.to(this.$infoLabel, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: -30,\n\t\t\t\tautoAlpha: 0\n\t\t\t}, 'start')\n\t\t\t.to(this.$submenuButton, {\n\t\t\t\tx: -10,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tduration: 0.3\n\t\t\t}, 'start')\n\t\t\t.add(() => {\n\t\t\t\tthis.$target.removeClass(this.openClass);\n\t\t\t}, '-=0.9')\n\t\t\t.add([\n\t\t\t\tgsap.effects.hideLines([$submenuLinksCurrent, this.$menuLinks, this.$overlayWidgets], {\n\t\t\t\t\tstagger: {\n\t\t\t\t\t\tamount: 0,\n\t\t\t\t\t\tfrom: 'end'\n\t\t\t\t\t},\n\t\t\t\t\ty: '100%',\n\t\t\t\t\tduration: 0.6,\n\t\t\t\t})\n\t\t\t], 'start')\n\t\t\t.add(() => {\n\t\t\t\tif (typeof cb === 'function') {\n\t\t\t\t\tcb();\n\t\t\t\t}\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuCloseEnd'));\n\t\t\t\tthis.setMenu();\n\t\t\t\tthis._setTransition(false);\n\t\t\t}, '-=0.6')\n\t\t\t.timeScale(timeScale);\n\t}\n\n\tcloseMenuTransition(force = false, cb) {\n\n\t\tif (!this.$target.hasClass(this.openClass) && !force) {\n\t\t\treturn this.timeline;\n\t\t}\n\n\t\tconst\n\t\t\ttl = new gsap.timeline(),\n\t\t\t$submenuLinksCurrent = this.$submenu.filter(`.${this.openClass}`).find(this.$submenuLinks),\n\t\t\ttimeScale = window.kinsey.theme.animations.timeScale.overlayMenuClose || 1;\n\n\t\treturn tl\n\t\t\t.add(() => {\n\t\t\t\tthis._setTransition(true);\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuCloseStart'));\n\t\t\t\tthis.setBurger(false);\n\t\t\t})\n\t\t\t.to(this.$wrapperSlider, {\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tduration: 1.8\n\t\t\t}, 'start')\n\t\t\t.hideMask(this.$maskRevealOverlay, {\n\t\t\t\tscale: 1,\n\t\t\t\tdirection: 'down',\n\t\t\t}, 'start')\n\t\t\t.set(this.$adminBar, {\n\t\t\t\tclearProps: 'position'\n\t\t\t})\n\t\t\t.to(this.$headerLeft, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: 0,\n\t\t\t\tautoAlpha: 1\n\t\t\t}, 'start')\n\t\t\t.to(this.$infoLabel, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tx: -30,\n\t\t\t\tautoAlpha: 0\n\t\t\t}, 'start')\n\t\t\t.to(this.$submenuButton, {\n\t\t\t\tx: -10,\n\t\t\t\tautoAlpha: 0,\n\t\t\t\tduration: 0.3\n\t\t\t}, 'start')\n\t\t\t.add(() => {\n\t\t\t\tthis.$target.removeClass(this.openClass);\n\t\t\t}, '-=0.9')\n\t\t\t.add([\n\t\t\t\tgsap.effects.hideLines([$submenuLinksCurrent, this.$menuLinks, this.$overlayWidgets], {\n\t\t\t\t\tstagger: {\n\t\t\t\t\t\tamount: 0,\n\t\t\t\t\t\tfrom: 'end'\n\t\t\t\t\t},\n\t\t\t\t\ty: '100%',\n\t\t\t\t\tduration: 0.6,\n\t\t\t\t})\n\t\t\t], 'start')\n\t\t\t.add(() => {\n\t\t\t\tif (typeof cb === 'function') {\n\t\t\t\t\tcb();\n\t\t\t\t}\n\t\t\t\tthis.el.dispatchEvent(new CustomEvent('menuCloseEnd'));\n\t\t\t\tthis.setMenu();\n\t\t\t\tthis._setTransition(false);\n\t\t\t})\n\t\t\t.timeScale(timeScale);\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\tif (this.$adminBar.length) {\n\t\t\twindow.$window.on('resize', debounce(() => {\n\t\t\t\tthis._correctTopOffset();\n\t\t\t}, 250));\n\t\t}\n\n\t\tif (this.$burger.length) {\n\t\t\tthis.$burger.off('click').on('click', (e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (this._isInTransition()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.$burger.hasClass(this.burgerOpenClass)) {\n\t\t\t\t\tthis.closeMenu();\n\t\t\t\t\tthis.$burger.removeClass(this.burgerOpenClass);\n\t\t\t\t} else {\n\t\t\t\t\tthis.openMenu();\n\t\t\t\t\tthis.$burger.addClass(this.burgerOpenClass);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.$submenuOpeners.length) {\n\t\t\tthis.$submenuOpeners.on('click', function (e) {\n\t\t\t\tif (self._isInTransition()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\t$currentMenu = $el.parents('ul'),\n\t\t\t\t\t$submenu = $el.next('.sub-menu');\n\n\t\t\t\tif ($submenu.length) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t$el.addClass(self.linkSelectedClass);\n\n\t\t\t\t\tself._openSubmenu({\n\t\t\t\t\t\tsubmenu: $submenu,\n\t\t\t\t\t\tcurrentMenu: $currentMenu\n\t\t\t\t\t});\n\n\t\t\t\t\tself._updateLabel({\n\t\t\t\t\t\ttext: $el.find('.menu-overlay__heading').text()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.$submenuButton.length) {\n\t\t\tthis.$submenuButton.on('click', (e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (self._isInTransition()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst $submenu = this.$submenu.filter(`.${this.openClass}`),\n\t\t\t\t\t$prevMenu = $submenu.parent('li').parent('ul');\n\n\t\t\t\tself._closeSubmenu({\n\t\t\t\t\tsubmenu: $submenu,\n\t\t\t\t\tcurrentMenu: $prevMenu\n\t\t\t\t});\n\n\t\t\t\tself._updateLabel({\n\t\t\t\t\ttext: $prevMenu.siblings('a').find('.menu-overlay__heading').text()\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\twindow.$window\n\t\t\t.on('arts/barba/transition/start', () => {\n\t\t\t\tthis._unstick();\n\t\t\t\tthis._setTransition(true);\n\t\t\t})\n\t\t\t.on('arts/barba/transition/end', () => {\n\t\t\t\tthis.$controls.removeClass('pointer-events-none');\n\t\t\t\tthis.color = this._getColorTheme();\n\t\t\t\tthis.stickyScene = undefined;\n\t\t\t\tthis.timeline.clear();\n\t\t\t\tthis._stick();\n\t\t\t\tthis._setTransition(false);\n\t\t\t\tthis._handleAnchors();\n\t\t\t\tthis._setGradientBackgrounds();\n\t\t\t});\n\t}\n\n\tisOverlayOpened() {\n\t\treturn this.$target.hasClass(this.openClass);\n\t}\n\n\t_getColorTheme() {\n\t\treturn {\n\t\t\tnormal: {\n\t\t\t\ttext: this.$target.attr('data-arts-theme-text') || 'dark'\n\t\t\t},\n\t\t\tsticky: {\n\t\t\t\ttheme: this.$stickyHeader.attr('data-arts-header-sticky-theme') || null,\n\t\t\t\ttext: this.$stickyHeader.attr('data-arts-header-sticky-theme-text') || 'dark'\n\t\t\t},\n\t\t\toverlay: {\n\t\t\t\ttext: this.$target.attr('data-arts-header-overlay-theme-text') || 'dark'\n\t\t\t}\n\t\t};\n\t}\n\n\t_updateThemeHeader({\n\t\ttheme,\n\t\tremoveTheme,\n\t\ttext,\n\t}) {\n\t\tif (theme) {\n\t\t\tthis.$target.addClass(theme);\n\t\t}\n\n\t\tif (text) {\n\t\t\tthis.$target.attr('data-arts-theme-text', text);\n\t\t}\n\n\t\tif (removeTheme) {\n\t\t\tthis.$target.removeClass(removeTheme);\n\t\t}\n\t}\n\n\t_isMediumScreen() {\n\t\treturn true; //window.Modernizr.mq('(max-width: 991px)');\n\t}\n\n\t_isInTransition() {\n\t\treturn this.$target.attr('data-arts-header-animation') === 'intransition';\n\t}\n\n\t_setTransition(inTransition = true) {\n\t\treturn this.$target.attr('data-arts-header-animation', inTransition ? 'intransition' : '');\n\t}\n\n\t_correctTopOffset() {\n\t\tthis.$adminBar = $('#wpadminbar');\n\t\tconst top = this.$adminBar.length ? this.$adminBar.height() : 0;\n\n\t\tif (top > 0) {\n\t\t\tgsap.to(this.$target, {\n\t\t\t\tduration: 0.6,\n\t\t\t\ttop\n\t\t\t});\n\t\t}\n\t}\n\n\t_stick() {\n\t\tif (!this.$stickyHeader.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.stickyScene) {\n\t\t\tthis.stickyScene.refresh(true);\n\t\t\tthis.stickyScene.enable();\n\t\t\treturn;\n\t\t}\n\n\t\tconst classesToggle = [this.color.sticky.theme, this.stickyClass].join(' ');\n\n\t\tthis.stickyScene = ScrollTrigger.create({\n\t\t\tstart: 2,\n\t\t\tend: 'bottom center',\n\t\t\tscrub: true,\n\t\t\tonEnter: () => {\n\t\t\t\tthis._updateThemeHeader({\n\t\t\t\t\ttheme: classesToggle,\n\t\t\t\t\ttext: this.color.sticky.text\n\t\t\t\t});\n\t\t\t},\n\t\t\tonLeaveBack: () => {\n\t\t\t\tthis._updateThemeHeader({\n\t\t\t\t\tremoveTheme: classesToggle,\n\t\t\t\t\ttext: this.color.normal.text\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_unstick() {\n\t\tif (!this.$stickyHeader.length || !this.stickyScene) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst classesToggle = [this.color.sticky.theme, this.stickyClass].join(' ');\n\n\t\tthis.stickyScene.disable();\n\t\tthis._updateThemeHeader({\n\t\t\tremoveTheme: classesToggle\n\t\t});\n\t}\n\n\t_openSubmenu({\n\t\tsubmenu,\n\t\tcurrentMenu\n\t}) {\n\t\tconst\n\t\t\t$currentLinks = currentMenu.find('> li > a .menu-overlay__item-wrapper'),\n\t\t\t$submenuLinks = submenu.find('> li > a .menu-overlay__item-wrapper');\n\n\t\tthis.timeline\n\t\t\t.clear()\n\t\t\t.add(() => {\n\t\t\t\tthis._setTransition(true);\n\t\t\t\tthis.$submenu.removeClass(this.openClass);\n\t\t\t\tsubmenu.not(this.$menuOverlay).addClass(this.openClass);\n\n\t\t\t\tthis.$submenu.not(submenu).removeClass(this.unlockClass).addClass(this.lockClass);\n\t\t\t\tsubmenu.removeClass(this.lockClass).addClass(this.unlockClass);\n\n\t\t\t\tif (typeof this.SB !== 'undefined') {\n\t\t\t\t\tthis.SB.track.yAxis.hide();\n\t\t\t\t\tthis.SB.track.update();\n\t\t\t\t}\n\n\t\t\t\tif (this.$submenu.hasClass(this.openClass)) {\n\t\t\t\t\tthis.$menuOverlay.removeClass(this.unlockClass).addClass(this.lockClass);\n\n\t\t\t\t\tgsap.to(this.$submenuButton, {\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this._isMediumScreen()) {\n\t\t\t\t\t\tgsap.effects.hideLines(this.$overlayWidgets, {\n\t\t\t\t\t\t\tstagger: {\n\t\t\t\t\t\t\t\tamount: 0.1,\n\t\t\t\t\t\t\t\tfrom: 'end'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ty: '100%',\n\t\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.$menuOverlay.removeClass(this.lockClass).addClass(this.unlockClass);\n\n\t\t\t\t\tgsap.to(this.$submenuButton, {\n\t\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\t\tx: -10,\n\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t});\n\n\t\t\t\t\tgsap.effects.animateLines(this.$overlayWidgets, {\n\t\t\t\t\t\tstagger: {\n\t\t\t\t\t\t\tamount: 0.2,\n\t\t\t\t\t\t\tfrom: 'end'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.set(submenu, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\tzIndex: 100\n\t\t\t})\n\t\t\t.add(gsap.effects.hideLines($currentLinks, {\n\t\t\t\tstagger: {\n\t\t\t\t\tamount: 0.2,\n\t\t\t\t\tfrom: 'end'\n\t\t\t\t},\n\t\t\t\ty: '100%',\n\t\t\t\tduration: 1.2,\n\t\t\t\tease: 'power4.out'\n\t\t\t}))\n\t\t\t.add(gsap.effects.animateLines($submenuLinks, {\n\t\t\t\tstagger: {\n\t\t\t\t\tamount: 0.2,\n\t\t\t\t\tfrom: 'end'\n\t\t\t\t},\n\t\t\t\tduration: 1.2,\n\t\t\t\tease: 'power4.out',\n\t\t\t\tonStart: () => {\n\t\t\t\t\tthis.$wrapperMenu.scrollTop(0);\n\t\t\t\t\t// reset virtual scroll position\n\t\t\t\t\tif (typeof this.SB !== 'undefined') {\n\t\t\t\t\t\tthis.SB.scrollTo(0, 0);\n\t\t\t\t\t\tthis.SB.track.yAxis.hide();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}), '-=0.9')\n\t\t\t.add(() => {\n\t\t\t\tthis.$menuLinks.removeClass(this.openClass);\n\t\t\t\tthis._setTransition(false);\n\t\t\t}, '-=0.6')\n\t\t\t.timeScale(1.25);\n\t}\n\n\t_closeSubmenu({\n\t\tsubmenu,\n\t\tcurrentMenu\n\t}) {\n\t\tconst\n\t\t\t$currentLinks = currentMenu.find('> li > a .menu-overlay__item-wrapper'),\n\t\t\t$submenuLinks = submenu.find('> li > a .menu-overlay__item-wrapper');\n\n\t\tthis.timeline\n\t\t\t.clear()\n\t\t\t.add(() => {\n\t\t\t\tthis._setTransition(true);\n\t\t\t\tthis.$submenu.removeClass(this.openClass);\n\t\t\t\tcurrentMenu.not(this.$menuOverlay).addClass(this.openClass);\n\n\t\t\t\tthis.$submenu.not(currentMenu).removeClass(this.unlockClass).addClass(this.lockClass);\n\t\t\t\tcurrentMenu.removeClass(this.lockClass).addClass(this.unlockClass);\n\n\t\t\t\tif (typeof this.SB !== 'undefined') {\n\t\t\t\t\tthis.SB.track.yAxis.hide();\n\t\t\t\t\tthis.SB.track.update();\n\t\t\t\t}\n\n\t\t\t\tif (this.$submenu.hasClass(this.openClass)) {\n\t\t\t\t\tthis.$menuOverlay.removeClass(this.unlockClass).addClass(this.lockClass);\n\n\t\t\t\t\tgsap.to(this.$submenuButton, {\n\t\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this._isMediumScreen()) {\n\t\t\t\t\t\tgsap.effects.hideLines(this.$overlayWidgets, {\n\t\t\t\t\t\t\tstagger: {\n\t\t\t\t\t\t\t\tamount: 0.1,\n\t\t\t\t\t\t\t\tfrom: 'start'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ty: '100%',\n\t\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.$menuOverlay.removeClass(this.lockClass).addClass(this.unlockClass);\n\n\t\t\t\t\tgsap.to(this.$submenuButton, {\n\t\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\t\tx: -10,\n\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t});\n\n\t\t\t\t\tgsap.effects.animateLines(this.$overlayWidgets, {\n\t\t\t\t\t\tstagger: {\n\t\t\t\t\t\t\tamount: 0.2,\n\t\t\t\t\t\t\tfrom: 'start'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tduration: 1.2,\n\t\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.set(submenu, {\n\t\t\t\tzIndex: -1\n\t\t\t})\n\t\t\t.add(gsap.effects.setLines($currentLinks, {\n\t\t\t\ty: '100%'\n\t\t\t}), 'start')\n\t\t\t.add(gsap.effects.hideLines($submenuLinks, {\n\t\t\t\tstagger: {\n\t\t\t\t\tamount: 0.1,\n\t\t\t\t\tfrom: 'start'\n\t\t\t\t},\n\t\t\t\ty: '-100%',\n\t\t\t\tduration: 1.2,\n\t\t\t\tease: 'power4.out'\n\t\t\t}))\n\t\t\t.add(\n\t\t\t\tgsap.effects.animateLines($currentLinks, {\n\t\t\t\t\tstagger: {\n\t\t\t\t\t\tamount: 0.2,\n\t\t\t\t\t\tfrom: 'start'\n\t\t\t\t\t},\n\t\t\t\t\tduration: 1.2,\n\t\t\t\t\tease: 'power4.out',\n\t\t\t\t\tonStart: () => {\n\t\t\t\t\t\tthis.$wrapperMenu.scrollTop(0);\n\t\t\t\t\t\t// reset virtual scroll position\n\t\t\t\t\t\tif (typeof this.SB !== 'undefined') {\n\t\t\t\t\t\t\tthis.SB.scrollTo(0, 0);\n\t\t\t\t\t\t\tthis.SB.track.yAxis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}), '-=0.9')\n\t\t\t.set(submenu, {\n\t\t\t\tautoAlpha: 0,\n\t\t\t})\n\t\t\t.add(() => {\n\t\t\t\tthis._setTransition(false);\n\t\t\t}, '-=0.6')\n\t\t\t.timeScale(1.25);\n\t}\n\n\t_handleAnchors() {\n\n\t\tconst self = this;\n\n\t\t// overlay anchor links\n\t\tthis.$allLinksOverlay.filter('a[href*=\"#\"]:not([href=\"#\"]):not([href*=\"#elementor-action\"])').each(function () {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\turl = $current.attr('href');\n\n\t\t\tself._scrollToAnchorFromMenu({\n\t\t\t\telement: $current,\n\t\t\t\turl,\n\t\t\t\tmenu: 'overlay'\n\t\t\t});\n\t\t});\n\n\t\t// classic menu anchor links\n\t\tthis.$allLinksClassic.filter('a[href*=\"#\"]:not([href=\"#\"]):not([href*=\"#elementor-action\"])').each(function () {\n\t\t\tconst\n\t\t\t\t$current = $(this),\n\t\t\t\turl = $current.attr('href');\n\n\t\t\tself._scrollToAnchorFromMenu({\n\t\t\t\telement: $current,\n\t\t\t\turl,\n\t\t\t\tmenu: 'classic'\n\t\t\t});\n\t\t});\n\n\t}\n\n\t_scrollToAnchorFromMenu({\n\t\telement,\n\t\turl,\n\t\tmenu = 'classic'\n\t}) {\n\t\tif (!url || !element) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst filteredUrl = url.substring(url.indexOf('#'));\n\n\t\ttry {\n\t\t\tif (filteredUrl.length) {\n\t\t\t\tconst $el = window.$pageWrapper.find(filteredUrl);\n\n\t\t\t\tif ($el.length) {\n\t\t\t\t\telement.on('click', (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (menu === 'classic') {\n\t\t\t\t\t\t\tScroll.scrollTo({\n\t\t\t\t\t\t\t\ty: $el.offset().top - this.$target.innerHeight(),\n\t\t\t\t\t\t\t\tduration: 0.8\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (menu === 'overlay') {\n\t\t\t\t\t\t\tthis.closeMenu(false, () => {\n\t\t\t\t\t\t\t\tScroll.scrollTo({\n\t\t\t\t\t\t\t\t\ty: $el.offset().top - this.$target.innerHeight(),\n\t\t\t\t\t\t\t\t\tduration: 0.8\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\t\t\t\t\telement.off('click');\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Error when handling menu anchor links: ' + error);\n\t\t}\n\n\t}\n\n\t_runSmoothScrollOverlayMenu() {\n\t\tif (!window.Modernizr.touchevents && this.$menuSmoothScrollingContainer.length && typeof window.Scrollbar !== 'undefined') {\n\t\t\tthis.SB = window.Scrollbar.init(this.$menuSmoothScrollingContainer[0], window.kinsey.theme.smoothScroll);\n\t\t}\n\t}\n\n\t_setGradientBackgrounds() {\n\n\t\tif (this.$menuGradientTop.length) {\n\t\t\tthis.$menuGradientTop.each(function () {\n\t\t\t\tconst\n\t\t\t\t\t$this = $(this),\n\t\t\t\t\tancestorRGB = getColorValues($this.parent().css('background-color'));\n\n\t\t\t\tif (ancestorRGB) {\n\t\t\t\t\tgsap.set($this, {\n\t\t\t\t\t\tbackground: `linear-gradient(0deg, rgba(${ancestorRGB[0]}, ${ancestorRGB[1]}, ${ancestorRGB[2]}, 0) 0%, rgba(${ancestorRGB[0]}, ${ancestorRGB[1]}, ${ancestorRGB[2]}, 1) 100%)`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.$menuGradientBottom.length) {\n\t\t\tthis.$menuGradientBottom.each(function () {\n\t\t\t\tconst\n\t\t\t\t\t$this = $(this),\n\t\t\t\t\tancestorRGB = getColorValues($this.parent().css('background-color'));\n\n\t\t\t\tif (ancestorRGB) {\n\t\t\t\t\tgsap.set($this, {\n\t\t\t\t\t\tbackground: `linear-gradient(180deg, rgba(${ancestorRGB[0]}, ${ancestorRGB[1]}, ${ancestorRGB[2]}, 0) 0%, rgba(${ancestorRGB[0]}, ${ancestorRGB[1]}, ${ancestorRGB[2]}, 1) 100%)`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_updateLabel({\n\t\ttext = 'text'\n\t}) {\n\t\tif (this.$headerLabelSubmenu.length) {\n\t\t\tthis.labelTimeline\n\t\t\t\t.clear()\n\t\t\t\t.to(this.$headerLabelSubmenu, {\n\t\t\t\t\ty: '-50%',\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\tduration: 0.3,\n\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\tthis.$headerLabelSubmenu.text(text);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.fromTo(this.$headerLabelSubmenu, {\n\t\t\t\t\ty: '50%',\n\t\t\t\t\tautoAlpha: 0\n\t\t\t\t}, {\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tduration: 0.3,\n\t\t\t\t\timmediateRender: false\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_setMenusHover() {\n\t\tconst self = this;\n\n\t\tif (this.$allLinksOverlay.length) {\n\t\t\tthis.$allLinksOverlay\n\t\t\t\t.on('mouseenter touchstart', function () {\n\t\t\t\t\tself.$menuOverlay.addClass(self.hoverClassOverlay);\n\t\t\t\t})\n\t\t\t\t.on('mouseleave touchend', function () {\n\t\t\t\t\tself.$menuOverlay.removeClass(self.hoverClassOverlay);\n\t\t\t\t});\n\t\t}\n\n\t\tif (this.$allLinksClassic.length) {\n\t\t\tthis.$allLinksClassic\n\t\t\t\t.on('mouseenter touchstart', function () {\n\t\t\t\t\tself.$menu.addClass(self.hoverClassClassic);\n\t\t\t\t})\n\t\t\t\t.on('mouseleave touchend', function () {\n\t\t\t\t\tself.$menu.removeClass(self.hoverClassClassic);\n\t\t\t\t})\n\t\t\t\t.on('click', function (e) {\n\t\t\t\t\tconst $currentTarget = $(e.currentTarget);\n\n\t\t\t\t\tself.$menu.find(`.${self.currentMenuItemClass}`).removeClass(`${self.currentMenuItemClass}`);\n\t\t\t\t\tself.$menu.find(`.${self.currentMenuAncestorClass}`).removeClass(`${self.currentMenuAncestorClass}`);\n\t\t\t\t\t$currentTarget.parent().addClass(`${self.currentMenuItemClass}`);\n\t\t\t\t\t$currentTarget.parents(`.${self.menuItemHasChildrenClass}`).last().addClass(`${self.currentMenuAncestorClass}`);\n\t\t\t\t});\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 60. SectionContent */\n/* ======================================================================== */\nclass SectionContent extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({ target, scope });\n\t}\n}\n","/* ======================================================================== */\n/* 61. SectionGrid */\n/* ======================================================================== */\nclass SectionGrid 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.$filter = this.$target.find('.js-filter');\n\t\tthis.$dropdown = this.$filter.find('.js-filter__select');\n\t\tthis.$grid = this.$target.filter('.js-grid').add(this.$target.find('.js-grid'));\n\t\tthis.$items = this.$grid.find('.js-grid__item');\n\t\tthis.refresher;\n\t}\n\n\tinit() {\n\t\tif (this.$grid.length) {\n\t\t\tthis._bindGridFilter();\n\t\t}\n\t}\n\n\t_bindGridFilter() {\n\t\tconst self = this;\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, 0);\n\n\t\t\tthis.filter.$items.on('click', function (e) {\n\t\t\t\tconst\n\t\t\t\t\t$el = $(this),\n\t\t\t\t\tfilterBy = $el.attr('data-filter'),\n\t\t\t\t\tisLink = $el.is('a');\n\n\t\t\t\tScrollTrigger.refresh();\n\n\t\t\t\tself._updateScrollTriggerScenes({\n\t\t\t\t\tinterval: 60,\n\t\t\t\t\timmediate: false\n\t\t\t\t});\n\n\t\t\t\tif (!isLink) {\n\t\t\t\t\tif (filterBy === '*') {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tself.$grid.removeClass('grid_filtered');\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tself.$grid.addClass('grid_filtered');\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isLink && window.kinsey.theme.ajax.enabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tif (self.$dropdown.length) {\n\t\t\t\t\tself.$dropdown.val(filterBy);\n\t\t\t\t}\n\n\t\t\t\tself.grid.isotopeInstance.arrange({\n\t\t\t\t\tfilter: filterBy\n\t\t\t\t});\n\n\t\t\t});\n\t\t}\n\n\t\tif (this.$dropdown.length) {\n\t\t\tthis.$dropdown.on('change', function() {\n\t\t\t\tself.filter.$items.filter(`[data-filter=\"${this.value}\"]`).click();\n\t\t\t});\n\t\t}\n\t}\n\n\t_updateScrollTriggerScenes({\n\t\tinterval = 60,\n\t\timmediate = false\n\t}) {\n\t\tthis.refresher = setInterval(() => {\n\t\t\tScrollTrigger.refresh(immediate);\n\t\t}, interval);\n\t}\n\n\t_createFilter() {\n\t\treturn new Filter({\n\t\t\ttarget: this.$filter,\n\t\t\tscope: this.$scope,\n\t\t\tdropdown: this.$dropdown\n\t\t});\n\t}\n\n\t_createGrid() {\n\t\treturn new Grid({\n\t\t\ttarget: this.$grid,\n\t\t\tscope: this.$scope,\n\t\t\tonArrangeComplete: () => {\n\t\t\t\tif (this.lazyImages) {\n\t\t\t\t\tthis.lazyImages.lazyImages.update();\n\t\t\t\t}\n\n\t\t\t\tif (this.lazyBackgrounds) {\n\t\t\t\t\tthis.lazyBackgrounds.lazyBackgrounds.update();\n\t\t\t\t}\n\n\t\t\t\tclearInterval(this.refresher);\n\t\t\t\tthis.refresher = null;\n\t\t\t},\n\t\t\tonLayoutComplete: () => {\n\t\t\t\tScrollTrigger.refresh();\n\t\t\t}\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 62. SectionNavProjects */\n/* ======================================================================== */\nclass SectionNavProjects 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\tset() {\n\t\tthis.$progressUnderline = this.$target.find('.section-nav-projects__progress-underline');\n\t\tthis.$labelNext = this.$target.find('.section-nav-projects__label_next');\n\t\tthis.$inner = this.$target.find('.section-nav-projects__inner').eq(0);\n\t\tthis.$spacer = this.$target.find('.section-nav-projects__spacer');\n\t\tthis.$labelScroll = this.$target.find('.section-nav-projects__label_scroll');\n\t\tthis.$wrapper = this.$target.parent('.js-fixed-reveal-spacer');\n\t\tthis.$header = this.$target.find('.section-nav-projects__header, .section-nav-projects__next-image');\n\t\tthis.$heading = this.$target.find('.section-nav-projects__heading');\n\t\tthis.$trigger = this.$wrapper.length ? this.$wrapper : this.$target;\n\t\tthis.$link = this.$target.find('.section-nav-projects__link');\n\t\tthis.url = this.$link.attr('href');\n\t\tthis.backgroundSizeHeight = '2px';\n\t\tthis.backgroundSizeWidthCurrent = '0%';\n\t\tthis.headingColor = '';\n\t\tthis.stSpacer = null;\n\t\tthis.stMain = null;\n\t\tthis.stLabels = null;\n\t\tthis.stPrefetch = null;\n\t\tthis.spacerHeight = 0;\n\t\tthis.timeline = new gsap.timeline();\n\t\tthis.prefetchEnabled = window.kinsey.theme.ajax.enabled && this.$target.attr('data-arts-prefetch-enabled');\n\t\tthis.disabledAtBreakpoint = this.$target.data('arts-fixed-reveal-disabled-at');\n\t\tthis.startAnimationOpacity = this.$target.data('arts-fixed-reveal-from-opacity') === undefined ? 1 : this.$target.data('arts-fixed-reveal-from-opacity');\n\n\t\tif (this.$heading.length) {\n\t\t\tthis.headingColor = this.$heading.css('color');\n\t\t}\n\n\t\tif (this.$progressUnderline.length) {\n\t\t\tthis.backgroundSizeHeight = this.$progressUnderline.css('background-size').split(' ')[1];\n\t\t}\n\t}\n\n\trun() {\n\t\tthis._animateProgressLine();\n\n\t\tif (this.$spacer.length && this._isInnerWithSpacerAnimationEnabled()) {\n\t\t\tthis._getSpacerProperties();\n\t\t\tthis._animateInnerWithSpacer();\n\t\t}\n\n\t\tif (this.prefetchEnabled) {\n\t\t\tthis._prefetchHandler();\n\t\t}\n\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\t\tthis.$header.off('click').on('click', (e) => {\n\t\t\tif (window.kinsey.theme.ajax.enabled) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tScroll.scrollTo({\n\t\t\t\t\ty: this.$trigger,\n\t\t\t\t\toffsetY: -this.$trigger.height()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\twindow.$window\n\t\t\t.one('arts/barba/transition/start', () => {\n\t\t\t\tif (this.stMain) {\n\t\t\t\t\tthis.stMain.kill();\n\t\t\t\t}\n\t\t\t\tif (this.stLabels) {\n\t\t\t\t\tthis.stLabels.kill();\n\t\t\t\t}\n\t\t\t\tif (this.stPrefetch) {\n\t\t\t\t\tthis.stPrefetch.kill();\n\t\t\t\t}\n\t\t\t\tthis.timeline.kill();\n\t\t\t})\n\t\t\t.on(getResponsiveResizeEvent(), debounce(() => {\n\t\t\t\t\tif (this.stSpacer) {\n\t\t\t\t\t\tthis._getSpacerProperties();\n\t\t\t\t\t\tthis.stSpacer.refresh(true);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.stMain) {\n\t\t\t\t\t\tthis.stMain.refresh(true);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.stLabels) {\n\t\t\t\t\t\tthis.stLabels.refresh(true);\n\t\t\t\t\t}\n\t\t\t\t}, 250)\n\t\t\t);\n\t}\n\n\t_getSpacerProperties() {\n\t\tthis.spacerHeight = this.$spacer.height();\n\t}\n\n\t_isInnerWithSpacerAnimationEnabled() {\n\t\treturn this.$spacer.is(':visible') && !window.Modernizr.mq(`(${this.disabledAtBreakpoint})`);\n\t}\n\n\t_animateInnerWithSpacer() {\n\t\tconst tl = new gsap.timeline();\n\n\t\ttl.fromTo(this.$inner, {\n\t\t\ty: () => `-${this.spacerHeight}`,\n\t\t\tautoAlpha: () => this.startAnimationOpacity,\n\t\t}, {\n\t\t\ty: () => `${this.spacerHeight}`,\n\t\t\tease: 'none',\n\t\t\tautoAlpha: 1\n\t\t});\n\n\t\tthis.stSpacer = ScrollTrigger.create({\n\t\t\tanimation: tl,\n\t\t\tstart: () => 'top bottom',\n\t\t\tend: () => 'bottom bottom',\n\t\t\tinvalidateOnRefresh: true,\n\t\t\tscrub: true,\n\t\t\ttrigger: this.$trigger,\n\t\t});\n\t}\n\n\t_animateProgressLine() {\n\t\tthis.stLabels;\n\t\tthis.stMain = ScrollTrigger.create({\n\t\t\tanimation: this.timeline,\n\t\t\ttrigger: this.$trigger,\n\t\t\tstart: () => 'top+=50 center',\n\t\t\tend: () => 'bottom-=50 bottom',\n\t\t\tinvalidateOnRefresh: true,\n\t\t\tscrub: true,\n\t\t\tonLeave: () => {\n\t\t\t\tif (this.stLabels) {\n\t\t\t\t\tthis.stLabels.kill();\n\t\t\t\t\tthis.stMain.kill();\n\t\t\t\t\tthis.timeline.kill();\n\t\t\t\t\tthis.timeline.progress(1);\n\n\t\t\t\t\tScroll.lock(true);\n\t\t\t\t\tScroll.stop();\n\n\t\t\t\t\tif (this.$labelNext.length) {\n\t\t\t\t\t\tgsap.to(this.$labelNext, {\n\t\t\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\t\t\ty: '-100%',\n\t\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.$labelScroll.length) {\n\t\t\t\t\t\tgsap.to(this.$labelScroll, {\n\t\t\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\t\t\ty: '-100%',\n\t\t\t\t\t\t\tduration: 0.3\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tgsap.fromTo(this.$progressUnderline, {\n\t\t\t\t\t\tbackgroundPosition: '100% 100%',\n\t\t\t\t\t}, {\n\t\t\t\t\t\tease: 'expo.inOut',\n\t\t\t\t\t\tduration: 0.2,\n\t\t\t\t\t\tdelay: 0.3,\n\t\t\t\t\t\tbackgroundSize: `0% ${this.backgroundSizeHeight}`,\n\t\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\t\tthis.$header.addClass('pointer-events-none').off('click');\n\n\t\t\t\t\t\t\tthis.$link.get(0).click();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.timeline.to(this.$progressUnderline, {\n\t\t\tbackgroundSize: `100% ${this.backgroundSizeHeight}`,\n\t\t\tease: 'none',\n\t\t\tduration: 1\n\t\t});\n\n\t\tif (this.$labelNext.length && this.$labelScroll.length) {\n\t\tthis.stLabels = ScrollTrigger.create({\n\t\t\ttrigger: this.$trigger,\n\t\t\tstart: () => 'top+=50 center',\n\t\t\tend: () => 'bottom-=20 bottom',\n\t\t\tinvalidateOnRefresh: true,\n\t\t\tonEnter: () => {\n\t\t\t\tgsap.to(this.$labelNext, {\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tduration: 0.3,\n\t\t\t\t});\n\n\t\t\t\tgsap.fromTo(this.$labelScroll, {\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\ty: '100%',\n\t\t\t\t\tclearProps: 'color'\n\t\t\t\t}, {\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tduration: 0.3,\n\t\t\t\t\tcolor: this.headingColor\n\t\t\t\t});\n\t\t\t},\n\t\t\tonLeaveBack: () => {\n\t\t\t\tgsap.fromTo(this.$labelNext, {\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\ty: '100%'\n\t\t\t\t}, {\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\ty: '0%',\n\t\t\t\t\tduration: 0.3\n\t\t\t\t});\n\n\t\t\t\tgsap.to(this.$labelScroll, {\n\t\t\t\t\tautoAlpha: 0,\n\t\t\t\t\ty: '-100%',\n\t\t\t\t\tduration: 0.3,\n\t\t\t\t\tclearProps: 'color'\n\t\t\t\t});\n\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_prefetchHandler() {\n\t\tthis.stPrefetch = ScrollTrigger.create({\n\t\t\ttrigger: window.$body,\n\t\t\tstart: 'top+=1 top',\n\t\t\tonce: true,\n\t\t\tonEnter: () => {\n\t\t\t\tbarba.prefetch(this.url);\n\t\t\t}\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 63. SectionMasthead */\n/* ======================================================================== */\nclass SectionMasthead extends BaseComponent {\t\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\tthis.$inner = this.$target.find('.section-masthead__inner');\n\t\tthis.$maskReveal = this.$target.find('.mask-reveal');\n\t\tthis.$heading = this.$target.find('.section-masthead__heading');\n\t\tthis.$subheading = this.$target.find('.section-masthead__subheading');\n\t\tthis.$background = this.$target.find('.section__bg');\n\t\tthis.$divider = this.$target.find('.section-masthead__meta-divider');\n\t\tthis.$button = this.$target.find('.section-masthead__button');\n\n\t\tif (this.$target.hasClass('section-masthead_fixed')) {\n\t\t\tthis._fixMasthead();\n\t\t}\n\t}\n\n\tanimateIn() {\n\t\tconst\n\t\t\t$heading = this.$heading.not('.js-transition-animated'),\n\t\t\t$maskReveal = this.$maskReveal.not('.js-transition-animated'),\n\t\t\t$background = this.$background.not('.js-transition-animated');\n\n\t\tthis.timeline\n\t\t\t.animateText($heading, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tstagger: {\n\t\t\t\t\tamount: 0.3,\n\t\t\t\t\tfrom: 'left'\n\t\t\t\t}\n\t\t\t})\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateText(this.$subheading, {\n\t\t\t\t\t// duration: 0.6,\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateHeadline(this.$divider, {\n\t\t\t\t\t// duration: 0.6,\n\t\t\t\t})\n\t\t\t], $heading.length ? '-=0.8' : '0')\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateMask($maskReveal, {\n\t\t\t\t\tdirection: 'down'\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateScale($background, {\n\t\t\t\t\tdirection: 'down'\n\t\t\t\t})\n\t\t\t], '-=1.2');\n\n\t}\n\n\tanimateOut() {\n\t\tthis.timelineOut.add([\n\t\t\tgsap.effects.hideText(this.$target, {\n\t\t\t\tstagger: 0\n\t\t\t}),\n\t\t\tgsap.effects.hideHeadline(this.$divider),\n\t\t\tgsap.effects.hideMask(this.$maskReveal),\n\t\t\tgsap.effects.hideScale(this.$background)\n\t\t], '0');\n\n\t}\n\n\t_getFixedScrollingDistance() {\n\t\tif (typeof window.SB !== 'undefined') {\n\t\t\treturn window.SB.containerEl.scrollHeight;\n\t\t} else {\n\t\t\treturn Math.max(\n\t\t\t\tdocument.body.scrollHeight, document.documentElement.scrollHeight,\n\t\t\t\tdocument.body.offsetHeight, document.documentElement.offsetHeight,\n\t\t\t\tdocument.body.clientHeight, document.documentElement.clientHeight\n\t\t\t);\n\t\t}\n\t}\n\n\t_fixMasthead() {\n\t\tif (typeof window.SB === 'undefined') {\n\n\t\t\tScrollTrigger.create({\n\t\t\t\tpin: true,\n\t\t\t\tpinType: 'fixed',\n\t\t\t\tpinSpacing: false,\n\t\t\t\tinvalidateOnRefresh: true,\n\t\t\t\tanticipatePin: 1,\n\t\t\t\ttrigger: this.$target,\n\t\t\t\tscrub: true,\n\t\t\t\tstart: () => 'top top',\n\t\t\t\tend: () => this._getFixedScrollingDistance(),\n\t\t\t});\n\t\t}\n\n\t\tScrollTrigger.create({\n\t\t\tanimation: gsap.fromTo(this.$inner, {\n\t\t\t\tautoAlpha: 1,\n\t\t\t\ty: 0\n\t\t\t},{\n\t\t\t\tautoAlpha: 0,\n\t\t\t\ty: '-10%'\n\t\t\t}),\n\t\t\tstart: 'bottom bottom',\n\t\t\tend: 'bottom+=30% bottom',\n\t\t\tscrub: true,\n\t\t\ttrigger: this.$inner,\n\t\t\tinvalidateOnRefresh: true\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 64. SectionScrollThemeSwitch */\n/* ======================================================================== */\nclass SectionScrollThemeSwitch 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\tset() {\n\t\tthis.defaultTheme = this.$target.attr('data-arts-default-theme');\n\t\tthis.defaultColor = this.$target.attr('data-arts-theme-text');\n\t\tthis.scrollTheme = this.$target.attr('data-arts-scroll-theme');\n\t\tthis.scrollColor = this.$target.attr('data-arts-scroll-theme-text');\n\t\tthis.offset = parseFloat(this.$target.attr('data-arts-scroll-offset')) || 0;\n\t\tthis.triggerHook = this.$target.attr('data-arts-scroll-trigger-hook') || 'bottom';\n\t}\n\n\trun() {\n\t\tthis.scrollTrigger = ScrollTrigger.create({\n\t\t\ttrigger: this.$target,\n\t\t\tscrub: true,\n\t\t\tonce: false,\n\t\t\tstart: () => `top+=${this.offset} ${this.triggerHook}`,\n\t\t\tonToggle: ({ isActive }) => {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tthis.$target\n\t\t\t\t\t\t.removeClass(this.defaultTheme)\n\t\t\t\t\t\t.addClass(this.scrollTheme)\n\t\t\t\t\t\t.attr('data-arts-theme-text', this.scrollColor);\n\t\t\t\t} else {\n\t\t\t\t\tthis.$target\n\t\t\t\t\t\t.removeClass(this.scrollTheme)\n\t\t\t\t\t\t.addClass(this.defaultTheme)\n\t\t\t\t\t\t.attr('data-arts-theme-text', this.defaultColor);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 65. SectionSliderImages */\n/* ======================================================================== */\nclass SectionSliderImages extends BaseComponent {\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.$slider = this.$target.find('.js-slider-images');\n\t\tthis.$sliderImages = this.$target.find('.js-slider-images__slider');\n\t\tthis.$sliderCaptions = this.$target.find('.js-slider-images__captions');\n\t}\n\n\tinit() {\n\t\tthis.slider = new SliderImages({\n\t\t\tparent: this.$target,\n\t\t\ttarget: this.$sliderImages,\n\t\t\tcaptions: this.$sliderCaptions\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 66. SectionSliderProjects */\n/* ======================================================================== */\nclass SectionSliderProjects extends BaseComponent{\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.$slider = this.$target.find('.js-slider-projects__slider');\n\t\tthis.$sliderHeader = this.$target.find('.section-slider-projects__header');\n\t}\n\n\tinit() {\n\t\tthis.slider = new SliderProjects({\n\t\t\tparent: this.$target,\n\t\t\ttarget: this.$slider,\n\t\t\t$header: this.$sliderHeader.filter('.js-slider-projects__header'),\n\t\t\thasAnimation: this.hasAnimationScene()\n\t\t});\n\t}\n\n\tanimateOut() {\n\t\tconst\n\t\t\t$visibleSlide = this.$target.find('.swiper-slide-visible'),\n\t\t\t$headline = $visibleSlide.find('.post-meta__divider'),\n\t\t\t$link = $visibleSlide.find('.slider__wrapper-button');\n\n\t\tthis.timelineOut.add([\n\t\t\tgsap.effects.hideText($visibleSlide),\n\t\t\tgsap.effects.hideHeadline($headline),\n\t\t\tgsap.effects.hideJump($link),\n\t\t], '0');\n\t}\n}\n","/* ======================================================================== */\n/* 67. SectionSliderProjectsFullscreen */\n/* ======================================================================== */\nclass SectionSliderProjectsFullscreen extends BaseComponent {\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.$slider = this.$target.find('.js-slider-projects-fullscreen');\n\n\t\tthis.textTransitionsEnabled = this.$target.find('.js-slider-projects-fullscreen__content').attr('data-transition') === 'text' || false;\n\n\t\tthis.$firstSlide = this.textTransitionsEnabled ? this.$slider.find('.swiper-slide').eq(0) : this.$slider.find('.swiper-slide');\n\t\tthis.$firstHeading = this.$firstSlide.find('.slider__heading');\n\t\tthis.$firstSubheading = this.$firstSlide.find('.slider__subheading');\n\t\tthis.$firstDescription = this.$firstSlide.find('.slider__text');\n\t\tthis.$firstLine = this.$firstSlide.find('.post-meta__divider');\n\t\tthis.$firstLink = this.$firstSlide.find('.slider__wrapper-button');\n\t}\n\n\tinit() {\n\t\tthis.slider = new SliderProjectsFullscreen({\n\t\t\tparent: this.$target,\n\t\t\ttarget: this.$slider,\n\t\t\thasAnimation: this.hasAnimationScene()\n\t\t});\n\t}\n\n\tanimateIn() {\n\n\t\tthis.timeline\n\t\t\t.animateText(this.$firstHeading, {\n\t\t\t\tduration: 1.2\n\t\t\t}, '0')\n\t\t\t.add([\n\t\t\t\tgsap.effects.animateText(this.$firstSubheading, {\n\t\t\t\t\tautoAlpha: 1,\n\t\t\t\t\tduration: 1.2\n\t\t\t\t}),\n\t\t\t\tgsap.effects.animateHeadline(this.$firstLine)\n\t\t\t], '-=0.8')\n\t\t\t.animateText(this.$firstDescription, {\n\t\t\t\tduration: 1.2,\n\t\t\t\tautoAlpha: 1,\n\t\t\t}, '-=0.8')\n\t\t\t.animateJump(this.$firstLink, '-=1.0');\n\t}\n\n\tanimateOut() {\n\t\tconst\n\t\t\t$visibleSlide = this.$target.find('.swiper-slide-visible'),\n\t\t\t$headline = $visibleSlide.find('.post-meta__divider'),\n\t\t\t$link = $visibleSlide.find('.slider__wrapper-button');\n\n\t\tthis.timelineOut.add([\n\t\t\tgsap.effects.hideText($visibleSlide),\n\t\t\tgsap.effects.hideHeadline($headline),\n\t\t\tgsap.effects.hideJump($link),\n\t\t], '0');\n\t}\n}\n","/* ======================================================================== */\n/* 68. SectionTestimonials */\n/* ======================================================================== */\nclass SectionTestimonials extends BaseComponent {\t\n\tconstructor({\n\t\ttarget,\n\t\tscope\n\t}) {\n\t\tsuper({target, scope});\n\t}\n\n\tset() {\n\t\tthis.$slider = this.$target.find('.js-slider');\n\t\tthis.textTransitionsEnabled = this.$target.find('.js-slider-projects-fullscreen__content').attr('data-transition') === 'text' || false;\n\t\tthis.$firstSlide = this.textTransitionsEnabled ? this.$slider.find('.swiper-slide').eq(0) : this.$slider.find('.swiper-slide');\n\t}\n\n\tinit() {\n\t\tthis.slider = new SliderTestimonials({\n\t\t\tparent: this.$target,\n\t\t\ttarget: this.$slider\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 69. SliderImages */\n/* ======================================================================== */\nclass SliderImages extends Slider {\t\n\tconstructor({\n\t\tparent,\n\t\ttarget,\n\t\tscope,\n\t\tcaptions\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.$parent = parent;\n\t\tthis.$sliderCaptions = captions;\n\t}\n\n\tset() {\n\t\t// sliders\n\t\tthis.$slider = this.$target;\n\n\t\t// params\n\t\tthis.sliderSpeed = this.$slider.data('speed') || 800;\n\n\t\t// dots\n\t\tthis.$sliderDots = this.$parent.find('.js-slider__dots');\n\n\t\t// arrows\n\t\tthis.$arrowNext = this.$parent.find('.js-slider__arrow-next');\n\t\tthis.$arrowPrev = this.$parent.find('.js-slider__arrow-prev');\n\n\t\t// underline\n\t\tthis.$underline = this.$parent.find('.js-slider-images__underline');\n\n\t\t// scrollbar\n\t\tthis.$scrollBar = this.$parent.find('.js-slider__scrollbar');\n\n\t\t// dragging\n\t\tthis._setDragging({target: this.$target});\n\t}\n\n\trun() {\n\t\tthis.slider = this._getSlider();\n\t\tthis.sliderCaptions = this._getSliderCaptions();\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 (typeof this.drag === 'object') {\n\t\t\tthis._emitDragEvents($.extend(this.drag, {\n\t\t\t\tslider: this.slider,\n\t\t\t}));\n\t\t}\n\n\t\t// captions\n\t\tif (this.$sliderCaptions.length) {\n\t\t\tthis._setCaptionsNavigation();\n\n\t\t\tif (this.$underline.length) {\n\t\t\t\tthis._bindEvents();\n\t\t\t}\n\t\t}\n\n\t\tif (this.$parent.length) {\n\t\t\tthis._setAutoplayAnimation({\n\t\t\t\tparent: this.$parent,\n\t\t\t\tslider: this.slider,\n\t\t\t});\n\t\t}\n\n\t\t// initial backgrounds set\n\t\tif (this.slider && typeof this.slider.emit === 'function') {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.slider.emit('slideChange');\n\t\t\t}, 250);\n\t\t}\n\n\t\tif (this.$scrollBar.length) {\n\t\t\tthis._setScrollbar({\n\t\t\t\tslider: this.slider,\n\t\t\t\tscrollbar: this.$scrollBar\n\t\t\t});\n\t\t}\n\n\t\t// pause autoplay when the slider is not in view\n\t\tthis._pauseAutoplayOnOutOfView({\n\t\t\ttrigger: this.$slider,\n\t\t\tslider: this.slider\n\t\t});\n\n\t\tthis._updateOnTransitionEnd([\n\t\t\tthis.slider,\n\t\t\tthis.sliderCaptions\n\t\t]);\n\t}\n\n\t_bindEvents() {\n\t\tconst self = this;\n\n\t\t// update line position on window resize\n\t\twindow.$window.on('resize', debounce(() => {\n\t\t\tconst\n\t\t\t\tcurrentIndex = this.slider.realIndex,\n\t\t\t\t$targetSlide = $(this.sliderCaptions.slides[currentIndex]),\n\t\t\t\tduration = this.sliderSpeed / 1000;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tself._updateLinePosition($targetSlide, duration);\n\t\t\t}, 750);\n\t\t\tself._updateLinePosition($targetSlide, duration);\n\t\t}, 250));\n\n\t\tthis.$sliderCaptions\n\t\t\t.on('mouseenter', '.swiper-slide', function () {\n\t\t\t\tself._updateLinePosition($(this), self.sliderSpeed / 1500);\n\t\t\t})\n\t\t\t.on('mouseleave', '.swiper-slide', function () {\n\t\t\t\tself._updateLinePosition($(self.sliderCaptions.slides).filter('.swiper-slide-active'), self.sliderSpeed / 1500);\n\t\t\t});\n\t}\n\n\t_getSlider() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$target\n\t\t});\n\n\t\treturn new Swiper(this.$target[0], {\n\t\t\tsimulateTouch: this.drag ? true : false,\n\t\t\ttouchRatio: this.$target.data('touch-ratio') || 1.5,\n\t\t\ttouchStartPreventDefault: this.drag ? false : true,\n\t\t\tautoHeight: this.$target.data('auto-height'),\n\t\t\tspeed: this.$target.data('speed') || 1200,\n\t\t\tpreloadImages: false,\n\t\t\tlazy: {\n\t\t\t\tloadPrevNext: true,\n\t\t\t\tloadPrevNextAmount: 4,\n\t\t\t\tloadOnTransitionStart: true\n\t\t\t},\n\t\t\tslideToClickedSlide: true,\n\t\t\tgrabCursor: true,\n\t\t\tobserver: true,\n\t\t\twatchSlidesProgress: true,\n\t\t\twatchSlidesVisibility: true,\n\t\t\tcenteredSlides: this.$target.data('centered-slides') || false,\n\t\t\tslidesPerView: this.$target.data('slides-per-view') || 1,\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\tspaceBetween: this.$slider.data('space-between') || 20,\n\t\t\tpagination: {\n\t\t\t\tel: this.$sliderDots.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.$arrowNext.get(0),\n\t\t\t\tprevEl: this.$arrowPrev.get(0),\n\t\t\t},\n\t\t\tscrollbar: {\n\t\t\t\thide: false,\n\t\t\t\tel: this.$scrollBar.get(0),\n\t\t\t\tdragClass: 'slider__scrollbar-handle'\n\t\t\t},\n\t\t\ttouchEventsTarget: 'container',\n\t\t\tthumbs: {\n\t\t\t\tautoScrollOffset: 0\n\t\t\t},\n\t\t\tbreakpoints,\n\t\t});\n\t}\n\n\t_getSliderCaptions() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$sliderCaptions\n\t\t});\n\n\t\treturn new Swiper(this.$sliderCaptions[0], {\n\t\t\tspeed: this.sliderSpeed,\n\t\t\tcenteredSlides: this.$sliderCaptions.data('centered-slides') || false,\n\t\t\tslidesPerView: this.$sliderCaptions.data('slides-per-view') || 1,\n\t\t\twatchSlidesVisibility: true,\n\t\t\twatchSlidesProgress: true,\n\t\t\tsimulateTouch: false,\n\t\t\tbreakpoints\n\t\t});\n\t}\n\n\t_setCaptionsNavigation() {\n\t\tconst self = this;\n\n\t\tthis.slider.controller.control = this.sliderCaptions;\n\t\tthis.sliderCaptions.controller.control = this.slider;\n\n\t\tthis.sliderCaptions.slides.each(function () {\n\t\t\t$(this).on('click', function () {\n\t\t\t\tself.slider.slideTo($(this).index());\n\t\t\t});\n\t\t});\n\n\t\tif (this.$underline.length) {\n\t\t\tthis.slider.on('slideChange', () => {\n\t\t\t\tconst\n\t\t\t\t\tcurrentIndex = this.slider.realIndex,\n\t\t\t\t\t$targetSlide = $(this.sliderCaptions.slides[currentIndex]),\n\t\t\t\t\tduration = this.sliderSpeed / 1000;\n\t\t\t\tthis._updateLinePosition($targetSlide, duration);\n\t\t\t});\n\t\t}\n\t}\n\n\t_updateLinePosition($el, duration = 1.2) {\n\t\tif (!$el || !$el.length) {\n\n\t\t\tgsap.to(this.$underline, {\n\t\t\t\tduration,\n\t\t\t\twidth: 0,\n\t\t\t\tease: 'power3.inOut',\n\t\t\t});\n\t\t} else {\n\t\t\tconst\n\t\t\t\touterOffset = this.$sliderCaptions.offset(),\n\t\t\t\tslideWidth = $el.innerWidth(),\n\t\t\t\tslidePos = $el.position(),\n\t\t\t\tslideOffset = $el.offset();\n\n\t\t\tgsap.to(this.$underline, {\n\t\t\t\tduration,\n\t\t\t\tease: 'power3.inOut',\n\t\t\t\twidth: slideWidth,\n\t\t\t\ttop: slideOffset.top - outerOffset.top,\n\t\t\t\tleft: slidePos.left,\n\t\t\t});\n\t\t}\n\t}\n}\n","/* ======================================================================== */\n/* 70. SliderMenu */\n/* ======================================================================== */\nclass SliderMenu extends Slider {\n\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\tthis.slider = null;\n\t\t// dragging\n\t\tthis._setDragging({ target: this.$target });\n\t\tthis.animationSpeed = this.$target.data('animation-speed') || this.$target.data('speed') || 1200;\n\t}\n\n\trun() {\n\t\tthis._init();\n\t\twindow.$window.on('resize', debounce(() => {\n\t\t\tthis._init();\n\t\t}, 250));\n\t}\n\n\t_init() {\n\t\tif (this.$target.is(':visible') && !this.slider) {\n\t\t\tthis.slider = this._getSlider();\n\n\t\t\t// slider drag\n\t\t\tif (typeof this.drag === 'object') {\n\t\t\t\tthis._emitDragEvents($.extend(this.drag, {\n\t\t\t\t\tslider: this.slider,\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tthis._bindEvents();\n\t\t}\n\t}\n\n\t_bindEvents() {\n\t\twindow.$pageHeader\n\t\t\t.on('menuOpenStart', () => {\n\t\t\t\tconst\n\t\t\t\t\ttimeScale = parseFloat(window.kinsey.theme.animations.timeScale.overlayMenuOpen) || 1,\n\t\t\t\t\tmultiplier = 1 / timeScale;\n\n\t\t\t\tthis.slider.update();\n\t\t\t\tthis._slideTo({\n\t\t\t\t\tslide: 'first',\n\t\t\t\t\tduration: this.animationSpeed * multiplier\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('menuOpenEnd', () => {\n\t\t\t\tthis.slider.update();\n\t\t\t})\n\t\t\t.on('menuCloseStart', () => {\n\t\t\t\tconst\n\t\t\t\t\ttimeScale = parseFloat(window.kinsey.theme.animations.timeScale.overlayMenuClose) || 1,\n\t\t\t\t\tmultiplier = 1 / timeScale;\n\n\t\t\t\tif (this.animationSpeed > 0) {\n\t\t\t\t\tthis._slideTo({\n\t\t\t\t\t\tslide: 'last',\n\t\t\t\t\t\tduration: this.animationSpeed * multiplier\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_slideTo({\n\t\tslide = 'first',\n\t\ttimeout = 50,\n\t\tduration = 1200\n\t}) {\n\t\tconst lastIndex = this.slider.$el.find('.swiper-slide:not(.swiper-slide-duplicate)').length - 1;\n\n\t\tif (this.slider.params.loop) {\n\n\t\t\tif (slide === 'first') {\n\t\t\t\tthis.slider.slideToLoop(lastIndex, 0);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.slider.slideToLoop(0, duration);\n\t\t\t\t}, timeout);\n\t\t\t}\n\n\t\t\tif (slide === 'last') {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.slider.slideToLoop(Math.abs(lastIndex - this.slider.realIndex), duration);\n\t\t\t\t}, timeout);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif (slide === 'first') {\n\t\t\t\tthis.slider.slideTo(lastIndex, 0);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.slider.slideTo(0, duration);\n\t\t\t\t}, timeout);\n\t\t\t}\n\n\t\t\tif (slide === 'last') {\n\t\t\t\tthis.slider.slideTo(0, 0);\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.slider.slideTo(lastIndex, duration);\n\t\t\t\t}, timeout);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t_getSlider() {\n\t\tconst parentContainer = this.$target.parent('.header__wrapper-slider').get(0);\n\n\t\treturn new Swiper(this.$target[0], {\n\t\t\tsimulateTouch: this.drag ? true : false,\n\t\t\ttouchRatio: this.$target.data('touch-ratio') || 1.5,\n\t\t\ttouchStartPreventDefault: this.drag ? false : true,\n\t\t\tgrabCursor: true,\n\t\t\tautoHeight: this.$target.data('auto-height'),\n\t\t\tspeed: this.$target.data('speed') || 1200,\n\t\t\tpreloadImages: false,\n\t\t\tdirection: 'horizontal',\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\tslidesPerView: 1.33,\n\t\t\tcenteredSlides: true,\n\t\t\tspaceBetween: 20,\n\t\t\tloop: true,\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\tparallax: true,\n\t\t\t// breakpoints,\n\t\t\tbreakpoints: {\n\t\t\t\t991: {\n\t\t\t\t\tdirection: 'vertical',\n\t\t\t\t\tspaceBetween: this.$target.data('space-between') || 60,\n\t\t\t\t\tslidesPerView: 'auto',\n\t\t\t\t\tfreeMode: true,\n\t\t\t\t\tfreeModeSticky: true,\n\t\t\t\t\tcenteredSlides: this.$target.data('centered-slides') || false,\n\t\t\t\t}\n\t\t\t},\n\t\t\ttouchEventsTarget: 'container',\n\t\t\tkeyboard: this.$target.data('keyboard-enabled') ? {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t} : false,\n\t\t\tmousewheel: this.$target.data('mousewheel-enabled') ? {\n\t\t\t\teventsTarged: parentContainer,\n\t\t\t\teventsTarget: parentContainer,\n\t\t\t\treleaseOnEdges: true,\n\t\t\t} : false,\n\t\t});\n\t}\n\n}\n","/* ======================================================================== */\n/* 71. SliderProjects */\n/* ======================================================================== */\nclass SliderProjects extends Slider {\n\tconstructor({\n\t\tparent,\n\t\ttarget,\n\t\t$header,\n\t\tscope,\n\t\thasAnimation = false\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.$parent = parent;\n\t\tthis.hasAnimation = hasAnimation;\n\t\tthis.$sliderHeader = $header ? $header : null;\n\t\tthis.$sliderIndicatorSource = $header ? $header.find('.js-slider-projects__source-indicator') : null;\n\t\tthis.sliderHeaderIsVisible = true;\n\t\tthis.sliderIndicatorIsVisible = false;\n\t}\n\n\tset() {\n\t\tthis.$slidesBackground = this.$target.find('[data-slide-background]');\n\t\tthis.$scrollBar = this.$target.find('.js-slider-projects__scrollbar');\n\t\tthis.$indicator = this.$target.find('.js-slider-projects__indicator');\n\t\tthis.$arrowPrev;\n\t\tthis.$arrowNext;\n\n\t\tif (this.$parent && this.$parent.length) {\n\t\t\tthis.$arrowPrev = this.$parent.find('.js-slider__arrow-prev');\n\t\t\tthis.$arrowNext = this.$parent.find('.js-slider__arrow-next');\n\t\t} else {\n\t\t\tthis.$arrowPrev = this.$target.find('.js-slider__arrow-prev');\n\t\t\tthis.$arrowNext = this.$target.find('.js-slider__arrow-next');\n\t\t}\n\n\t\t// dragging\n\t\tthis._setDragging({target: this.$target});\n\t}\n\n\trun() {\n\t\tthis.slider = this._getSlider();\n\n\t\t// slider drag\n\t\tif (typeof this.drag === 'object') {\n\t\t\tthis._emitDragEvents($.extend(this.drag, {\n\t\t\t\tslider: this.slider,\n\t\t\t}));\n\t\t}\n\n\t\tif (this.$slidesBackground.length) {\n\t\t\tthis._setBackgrounds({\n\t\t\t\ttarget: this.$target.closest('.js-slider-background'),\n\t\t\t\tslider: this.slider,\n\t\t\t\theader: window.$pageHeader\n\t\t\t});\n\t\t}\n\n\t\tif (this.$sliderHeader.length && this._isIndicatorEnabled()) {\n\t\t\tthis.sliderHeaderTimeline = new gsap.timeline();\n\t\t\tthis.animationDuration = parseFloat(this.slider.params.speed / 1000);\n\n\t\t\tthis._hideHeaderOnTransition();\n\n\t\t\tif (this.$sliderIndicatorSource.length && this.$indicator.length) {\n\t\t\t\tthis.sliderIndicatorTimeline = new gsap.timeline();\n\n\t\t\t\tthis._setIndicator();\n\t\t\t\tthis._showIndicatorOnTransition();\n\t\t\t}\n\t\t}\n\n\t\tif (this.$parent.length) {\n\t\t\tthis._setAutoplayAnimation({\n\t\t\t\tparent: this.$parent,\n\t\t\t\tslider: this.slider,\n\t\t\t});\n\t\t}\n\n\t\t// initial backgrounds set\n\t\tif (this.slider && typeof this.slider.emit === 'function') {\n\t\t\tthis.slider.emit('slideChange');\n\t\t}\n\n\t\t// pause autoplay when the slider is not in view\n\t\tthis._pauseAutoplayOnOutOfView({\n\t\t\ttrigger: this.$target,\n\t\t\tslider: this.slider\n\t\t});\n\n\t\t// update all ScrollTrigger instances when slider is resizing its height\n\t\tif (this.slider) {\n\t\t\tthis._updateScrollTriggerOnHeightChange(this.slider);\n\t\t}\n\n\t\tthis._updateOnTransitionEnd([\n\t\t\tthis.slider\n\t\t]);\n\n\t\tthis._bindEvents();\n\t}\n\n\t_getSlider() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$target\n\t\t});\n\n\t\treturn new Swiper(this.$target[0], {\n\t\t\tsimulateTouch: this.drag ? true : false,\n\t\t\ttouchRatio: this.$target.data('touch-ratio') || 1.5,\n\t\t\ttouchStartPreventDefault: this.drag ? false : true,\n\t\t\tgrabCursor: true,\n\t\t\tautoHeight: this.$target.data('auto-height'),\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\tkeyboard: this.$target.data('keyboard-enabled') ? {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t} : false,\n\t\t\tmousewheel: this.$target.data('mousewheel-enabled') ? {\n\t\t\t\teventsTarged: this.target,\n\t\t\t\teventsTarget: this.target,\n\t\t\t\treleaseOnEdges: true,\n\t\t\t} : false,\n\t\t\tspeed: this.$target.data('speed') || 1200,\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\tcenteredSlides: this.$target.data('centered-slides') || false,\n\t\t\tslidesPerView: this.$target.data('slides-per-view') || 2,\n\t\t\tspaceBetween: this.$target.data('space-between') || 60,\n\t\t\tparallax: true,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: this.$arrowPrev ? this.$arrowNext.get(0) : null,\n\t\t\t\tprevEl: this.$arrowPrev ? this.$arrowPrev.get(0) : null\n\t\t\t},\n\t\t\tscrollbar: {\n\t\t\t\thide: false,\n\t\t\t\tel: this.$scrollBar.get(0),\n\t\t\t\tdragClass: 'slider__scrollbar-handle'\n\t\t\t},\n\t\t\ttouchEventsTarget: 'container',\n\t\t\tbreakpoints,\n\t\t});\n\t}\n\n\t_bindEvents() {\n\t\twindow.$window.on(getResponsiveResizeEvent(), debounce(() => {\n\t\t\tif (!this._isIndicatorEnabled()) {\n\t\t\t\tgsap.effects.animateLines(this.$sliderHeader, {\n\t\t\t\t\tduration: 0.1,\n\t\t\t\t\tstagger: false,\n\t\t\t\t});\n\n\t\t\t\tthis.sliderIndicatorIsVisible = true;\n\t\t\t}\n\t\t}, 250));\n\t}\n\n\t_isIndicatorEnabled() {\n\t\treturn window.Modernizr.mq(`(min-width: 991px)`);\n\t}\n\n\t_hideHeaderOnTransition() {\n\t\tthis.slider.on('slideChange', (e) => {\n\t\t\tif (this.sliderHeaderIsVisible === false && e.realIndex === 0) {\n\t\t\t\tthis.sliderHeaderTimeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.animateLines(this.$sliderHeader, {\n\t\t\t\t\t\tstagger: false,\n\t\t\t\t\t\tduration: this.animationDuration / 2,\n\t\t\t\t\t\tdelay: this.animationDuration / 2\n\t\t\t\t\t});\n\n\t\t\t\tthis.sliderHeaderIsVisible = true;\n\t\t\t}\n\n\t\t\tif (this.sliderHeaderIsVisible === true && e.realIndex !== 0) {\n\t\t\t\tthis.sliderHeaderTimeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.hideLines(this.$sliderHeader, {\n\t\t\t\t\t\tstagger: false,\n\t\t\t\t\t\ty: '-100%',\n\t\t\t\t\t\tduration: this.animationDuration / 2\n\t\t\t\t\t});\n\n\t\t\t\tthis.sliderHeaderIsVisible = false;\n\t\t\t}\n\t\t});\n\t}\n\n\n\n\t_showIndicatorOnTransition() {\n\t\tthis.slider.on('slideChange', (e) => {\n\t\t\tif (this.sliderIndicatorIsVisible === false && e.realIndex !== 0) {\n\t\t\t\tthis.sliderIndicatorTimeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.to(this.$indicator, {\n\t\t\t\t\t\ty: '0%',\n\t\t\t\t\t\tduration: this.animationDuration / 2,\n\t\t\t\t\t\tease: 'power3.inOut'\n\t\t\t\t\t});\n\n\t\t\t\tthis.sliderIndicatorIsVisible = true;\n\t\t\t}\n\n\t\t\tif (this.sliderIndicatorIsVisible === true && e.realIndex === 0) {\n\t\t\t\tthis.sliderIndicatorTimeline\n\t\t\t\t\t.clear()\n\t\t\t\t\t.to(this.$indicator, {\n\t\t\t\t\t\ty: '100%',\n\t\t\t\t\t\tduration: this.animationDuration / 2,\n\t\t\t\t\t\tdelay: this.animationDuration / 2,\n\t\t\t\t\t\tease: 'power3.inOut'\n\t\t\t\t\t});\n\n\t\t\t\tthis.sliderIndicatorIsVisible = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_setIndicator() {\n\t\t// Set indicator text\n\t\tthis.$indicator.text(this.$sliderIndicatorSource.text());\n\n\t\tgsap.set(this.$indicator, {\n\t\t\ty: '100%',\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 72. SliderProjectsFullscreen */\n/* ======================================================================== */\nclass SliderProjectsFullscreen extends Slider {\n\tconstructor({\n\t\tparent,\n\t\ttarget,\n\t\tscope,\n\t\thasAnimation = false\n\t}) {\n\t\tsuper({\n\t\t\ttarget,\n\t\t\tscope\n\t\t});\n\n\t\tthis.$parent = parent;\n\t\tthis.hasAnimation = hasAnimation;\n\t}\n\n\tset() {\n\t\t// sliders\n\t\tthis.$slider = this.$target;\n\t\tthis.$sliderContent = this.$slider.find('.js-slider-projects-fullscreen__content');\n\t\tthis.$sliderImages = this.$slider.find('.js-slider-projects-fullscreen__images');\n\t\tthis.$sliderThumbs = this.$slider.find('.js-slider-projects-fullscreen__thumbs');\n\n\t\t// scrollbar\n\t\tthis.$scrollBar = this.$slider.find('.js-slider-projects-fullscreen__scrollbar');\n\n\t\t// counter\n\t\tthis.$sliderCounterCurrent = this.$target.find('.js-slider__counter-current');\n\t\tthis.$sliderCounterTotal = this.$target.find('.js-slider__counter-total');\n\n\t\t// counter zeros amount to prepend\n\t\tthis.sliderCounterZeros = this.$sliderImages.data('counter-add-zeros') || 0;\n\n\t\t// dynamic backgrounds slides\n\t\tthis.$slidesBackground = this.$slider.find('[data-slide-background]');\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.$line = this.$target.find('.post-meta__divider');\n\n\t\t// params\n\t\tthis.sliderSpeed = this.$sliderImages.data('speed') || 800;\n\t\tthis.textTransitionsEnabled = this.$sliderContent.data('transition') === 'text' || false;\n\t\tthis.textTransitionsDirection = this.$sliderContent.data('transition-direction') || this.$sliderImages.data('direction');\n\n\t\t// dragging\n\t\tthis._setDragging({target: this.$sliderImages});\n\n\t\t// prefetch\n\t\tthis.prefetcActiveSlideTransition = this.$sliderContent.data('prefetch-active-slide-transition') || true;\n\t}\n\n\trun() {\n\t\tthis.sliderContent = this._getSliderContent();\n\t\tthis.sliderImages = this._getSliderImages();\n\t\tthis.sliderThumbs = this.$sliderThumbs.length ? this._getSliderThumbs() : null;\n\n\t\t// connect sliders\n\t\tthis.sliderImages.controller.control.push(this.sliderContent);\n\t\tthis.sliderContent.controller.control.push(this.sliderImages);\n\n\t\t// update slider dimensions before OS animation is started\n\t\tif (this.$parent.length) {\n\t\t\tthis._setAutoplayAnimation({\n\t\t\t\tparent: this.$parent,\n\t\t\t\tslider: this.sliiderImages,\n\t\t\t});\n\n\t\t\tthis.$parent.one('animation/start', () => {\n\t\t\t\tthis.sliderContent.update();\n\t\t\t\tthis.sliderImages.update();\n\t\t\t});\n\t\t}\n\n\t\t// slider drag\n\t\tif (typeof this.drag === 'object') {\n\t\t\tthis._emitDragEvents($.extend(this.drag, {\n\t\t\t\tslider: this.sliderImages,\n\t\t\t}));\n\t\t}\n\n\t\t// text transitions\n\t\tif (this.textTransitionsEnabled) {\n\t\t\tthis._setSliderTextTransitions();\n\t\t}\n\n\t\t// thumbs\n\t\tif (this.$sliderThumbs.length) {\n\t\t\tthis._setThumbsNavigation();\n\t\t\t$(this.sliderThumbs.slides).eq(this.sliderThumbs.activeIndex).addClass('swiper-slide-thumb-active');\n\t\t}\n\n\t\tif (this.$slidesBackground.length) {\n\t\t\tthis._setBackgrounds({\n\t\t\t\ttarget: this.$slider.closest('.js-slider-background'),\n\t\t\t\tslider: this.sliderImages,\n\t\t\t\tside: this.$slider.find('.js-slider-projects-fullscreen__sidebar'),\n\t\t\t\theader: window.$pageHeader\n\t\t\t});\n\n\t\t\t// initial backgrounds set\n\t\t\tif (this.sliderImages && typeof this.sliderImages.emit === 'function') {\n\t\t\t\tthis.sliderImages.emit('slideChange');\n\t\t\t}\n\t\t}\n\n\t\tif (this.$scrollBar.length) {\n\t\t\tthis._setScrollbar({\n\t\t\t\tslider: this.sliderImages,\n\t\t\t\tscrollbar: this.$scrollBar\n\t\t\t});\n\t\t}\n\n\t\tif (this.$sliderCounterCurrent.length && this.$sliderCounterTotal.length) {\n\t\t\tthis._setCounter({\n\t\t\t\tslider: this.sliderImages,\n\t\t\t\telementCurrent: this.$sliderCounterCurrent,\n\t\t\t\telementTotal: this.$sliderCounterTotal,\n\t\t\t\tzeros: this.sliderCounterZeros\n\t\t\t})\n\t\t}\n\n\t\t// prefetch active slide transition\n\t\tif (this.sliderContent && this.prefetcActiveSlideTransition && window.kinsey.theme.ajax.enabled) {\n\t\t\tthis._prefetchActiveSlideTransition(this.sliderContent);\n\t\t}\n\n\t\t// pause autoplay when the slider is not in view\n\t\tthis._pauseAutoplayOnOutOfView({\n\t\t\ttrigger: this.$sliderImages,\n\t\t\tslider: this.sliderImages\n\t\t});\n\n\t\tthis._bindEvents();\n\t}\n\n\t_bindEvents() {\n\n\t\twindow.$pageHeader\n\t\t\t.on('menuOpenStart', () => {\n\t\t\t\tthis._setExternalControls({\n\t\t\t\t\tslider: this.sliderImages,\n\t\t\t\t\tenabled: false\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('menuCloseStart', () => {\n\t\t\t\tthis._setExternalControls({\n\t\t\t\t\tslider: this.sliderImages,\n\t\t\t\t\tenabled: true\n\t\t\t\t});\n\t\t\t});\n\n\t\tif (this.$parent.length) {\n\t\t\tthis.$parent\n\t\t\t\t.on('animation/start', () => {\n\t\t\t\t\tthis._setExternalControls({\n\t\t\t\t\t\tslider: this.sliderImages,\n\t\t\t\t\t\tenabled: false\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('animation/complete', () => {\n\t\t\t\t\tthis._setExternalControls({\n\t\t\t\t\t\tslider: this.sliderImages,\n\t\t\t\t\t\tenabled: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\n\t\tthis._updateOnResize([\n\t\t\tthis.sliderImages,\n\t\t\tthis.sliderContent,\n\t\t\tthis.sliderThumbs\n\t\t]);\n\n\t\tthis._updateOnTransitionEnd([\n\t\t\tthis.sliderImages,\n\t\t\tthis.sliderContent,\n\t\t\tthis.sliderThumbs\n\t\t]);\n\t}\n\n\t_getSliderContent() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$sliderContent\n\t\t});\n\n\t\treturn new Swiper(this.$sliderContent[0], {\n\t\t\tallowTouchMove: false,\n\t\t\twatchSlidesVisibility: true,\n\t\t\tspeed: this.sliderSpeed,\n\t\t\tslidesPerView: this.$sliderContent.data('slides-per-view') || 1,\n\t\t\tdirection: this.textTransitionsEnabled ? 'horizontal' : this.$sliderContent.data('direction') || this.$sliderImages.data('direction'),\n\t\t\tcenteredSlides: this.$sliderContent.data('centered-slides') || false,\n\t\t\tautoHeight: this.$sliderContent.data('auto-height') || false,\n\t\t\tcontroller: {\n\t\t\t\tcontrol: [],\n\t\t\t\tby: 'container'\n\t\t\t},\n\t\t\tvirtualTranslate: this.textTransitionsEnabled ? true : false,\n\t\t\teffect: this.textTransitionsEnabled ? 'fade' : 'slide',\n\t\t\tfadeEffect: {\n\t\t\t\tcrossFade: true //this.textTransitionsEnabled ? false : true\n\t\t\t},\n\t\t\tparallax: true,\n\t\t\tbreakpoints\n\t\t});\n\t}\n\n\t_getSliderImages() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$sliderImages\n\t\t});\n\n\t\treturn new Swiper(this.$sliderImages[0], {\n\t\t\tsimulateTouch: this.drag ? true : false,\n\t\t\ttouchRatio: this.$sliderImages.data('touch-ratio') || 1.5,\n\t\t\ttouchStartPreventDefault: this.drag ? false : true,\n\t\t\tgrabCursor: true,\n\t\t\twatchSlidesVisibility: true,\n\t\t\tautoplay: {\n\t\t\t\tdisableOnInteraction: false,\n\t\t\t\tenabled: this.$sliderImages.data('autoplay-enabled') || false,\n\t\t\t\tdelay: this.$sliderImages.data('autoplay-delay') || 6000,\n\t\t\t},\n\t\t\tkeyboard: this.$sliderImages.data('keyboard-enabled') ? {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t} : false,\n\t\t\tmousewheel: this.$sliderImages.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\tspeed: this.sliderSpeed,\n\t\t\tdirection: this.$sliderImages.data('direction') || 'horizontal',\n\t\t\tslidesPerView: 1,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: this.$slider.find('.js-slider__arrow-next').get(0),\n\t\t\t\tprevEl: this.$slider.find('.js-slider__arrow-prev').get(0),\n\t\t\t},\n\t\t\tlazy: {\n loadPrevNext: true,\n loadPrevNextAmount: 2,\n loadOnTransitionStart: true\n },\n\t\t\tcontroller: {\n\t\t\t\tcontrol: [],\n\t\t\t\tby: 'container'\n\t\t\t},\n\t\t\tthumbs: {\n\t\t\t\tswiper: this.sliderThumbs\n\t\t\t},\n\t\t\tparallax: true,\n\t\t\tscrollbar: {\n\t\t\t\thide: false,\n\t\t\t\tel: this.$scrollBar.get(0),\n\t\t\t\tdragClass: 'slider__scrollbar-handle'\n\t\t\t},\n\t\t\tbreakpoints,\n\t\t});\n\t}\n\n\t_getSliderThumbs() {\n\t\tconst breakpoints = this._setBreakpoints({\n\t\t\ttarget: this.$sliderThumbs\n\t\t});\n\n\t\treturn new Swiper(this.$sliderThumbs[0], {\n\t\t\tspeed: this.sliderSpeed,\n\t\t\tslidesPerView: 3,\n\t\t\twatchSlidesVisibility: true,\n\t\t\twatchSlidesProgress: true,\n\t\t\tsimulateTouch: false,\n\t\t\tbreakpoints\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.textTransitionsDirection,\n\t\t\theading: this.$heading,\n\t\t\tsubheading: this.$subheading,\n\t\t\tdescription: this.$description,\n\t\t\tline: this.$line,\n\t\t\tlink: this.$link,\n\t\t\thasAnimation: this.hasAnimation\n\t\t});\n\t}\n\n\t_setThumbsNavigation() {\n\t\tconst self = this;\n\n\t\tthis.sliderImages.thumbs.swiper = this.sliderThumbs;\n\n\t\tthis.sliderThumbs.slides.each(function () {\n\t\t\t$(this).on('click', function () {\n\t\t\t\tself.sliderImages.slideTo($(this).index());\n\t\t\t});\n\t\t});\n\t}\n}\n","/* ======================================================================== */\n/* 73. SliderTestimonials */\n/* ======================================================================== */\nclass SliderTestimonials extends Slider {\n\tconstructor({\n\t\tparent,\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\tthis.$parent = parent;\n\t}\n\n\tset() {\n\t\t// sliders\n\t\tthis.$slider = this.$target;\n\n\t\t// params\n\t\tthis.sliderSpeed = this.$slider.data('speed') || 800;\n\t\tthis.textTransitionsEnabled = this.$target.attr('data-transition') === 'text' || false;\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\n\t\t// dots\n\t\tthis.$sliderDots = this.$parent.find('.js-slider__dots');\n\n\t\t// arrows\n\t\tthis.$arrowNext = this.$parent.find('.js-slider__arrow-next');\n\t\tthis.$arrowPrev = this.$parent.find('.js-slider__arrow-prev');\n\t}\n\n\trun() {\n\t\tthis.slider = this._getSlider();\n\n\t\tif (this.slider.slides.length <= 1) {\n\t\t\tthis.slider.destroy(true, true);\n\n\t\t\tif (this.$sliderDots.length) {\n\t\t\t\tthis.$sliderDots.remove();\n\t\t\t}\n\n\t\t\tif (this.$arrowNext.length) {\n\t\t\t\tthis.$arrowNext.remove();\n\t\t\t}\n\n\t\t\tif (this.$arrowPrev.length) {\n\t\t\t\tthis.$arrowPrev.remove();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// text transitions\n\t\tif (this.textTransitionsEnabled) {\n\t\t\tthis._setSliderTextTransitions();\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// initial backgrounds set\n\t\tif (this.slider && typeof this.slider.emit === 'function') {\n\t\t\tthis.slider.emit('slideChange');\n\t\t}\n\n\t\t// pause autoplay when the slider is not in view\n\t\tthis._pauseAutoplayOnOutOfView({\n\t\t\ttrigger: this.$slider,\n\t\t\tslider: this.slider\n\t\t});\n\n\t\tthis._updateOnTransitionEnd([\n\t\t\tthis.slider\n\t\t]);\n\t}\n\n\t_getSlider() {\n\t\treturn new Swiper(this.$target[0], {\n\t\t\tsimulateTouch: false,\n\t\t\tgrabCursor: true,\n\t\t\tautoHeight: true,\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\tkeyboard: this.$target.data('keyboard-enabled') ? {\n\t\t\t\tenabled: true,\n\t\t\t\tonlyInViewport: true\n\t\t\t} : false,\n\t\t\tspeed: this.$target.data('speed') || 1200,\n\t\t\tslidesPerView: 1,\n\t\t\tpagination: {\n\t\t\t\tel: this.$sliderDots.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.$arrowNext.get(0),\n\t\t\t\tprevEl: this.$arrowPrev.get(0),\n\t\t\t},\n\t\t\tvirtualTranslate: this.textTransitionsEnabled ? true : false,\n\t\t\teffect: 'fade',\n\t\t\tfadeEffect: {\n\t\t\t\tcrossFade: this.textTransitionsEnabled ? false : 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\tdirection: 'vertical',\n\t\t\theading: this.$heading,\n\t\t\tsubheading: this.$subheading,\n\t\t\tdescription: this.$description,\n\t\t\thasAnimation: true\n\t\t});\n\t}\n}\n"]}