{"version":3,"sources":["lazysizes.js","ls.aspectratio.js","ls.parent-fit.js","ofi.js","svg4everybody.js","util.js","sharer.js","swiper.js","timeline.js","codyhouse/_1_accordion.js","codyhouse/_1_anim-menu-btn.js","codyhouse/_1_menu.js","codyhouse/_1_modal-window.js","codyhouse/_1_swipe-content.js","codyhouse/_2_flexi-header.js","codyhouse/_2_hiding-nav.js","codyhouse/_2_menu-bar.js","codyhouse/_2_modal-video.js","codyhouse/_2_slideshow.js","codyhouse/_3_expandable-img-gallery.js","anchor-scroll.js","page-about.js","page-home.js","share-sticky.js","share.js","supports.js","video-replacement.js"],"names":["window","factory","lazySizes","document","Date","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","getElementsByClassName","cfg","noSupport","docElem","documentElement","supportPicture","HTMLPictureElement","addEventListener","bind","setTimeout","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","forEach","Array","prototype","hasClass","ele","cls","RegExp","test","addClass","setAttribute","trim","removeClass","reg","replace","addRemoveLoadEvents","dom","fn","add","action","evt","triggerEvent","elem","name","detail","noBubbles","noCancelable","event","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","el","full","polyfill","picturefill","pf","src","reevaluate","elements","getCSS","style","getComputedStyle","getWidth","parent","width","offsetWidth","_lazysizesWidth","parentNode","rAF","firstFns","secondFns","fns","run","runFns","length","running","waiting","shift","rafBatch","queue","apply","this","arguments","push","hidden","_lsFlush","rAFIt","simple","that","args","debounce","func","timeout","timestamp","later","last","now","loader","regImg","regIframe","supportScroll","navigator","userAgent","currentExpand","isLoading","lowRuns","resetPreloading","e","target","isVisible","isBodyHidden","body","isNestedVisible","elemExpand","outerRect","visible","eLtop","eLbottom","eLleft","eLright","offsetParent","getBoundingClientRect","left","right","top","bottom","checkElements","eLlen","i","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","expand","clientHeight","clientWidth","_defEx","eLvW","innerWidth","elvH","innerHeight","isCompleted","preloadElems","preloadAfterLoad","throttledCheckElements","lastTime","gDelay","rICTimeout","idleCallback","isPriority","delay","throttle","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","handleSources","source","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","defaultPrevented","nodeName","clearTimeout","resetPreloadingTimer","call","getElementsByTagName","contentWindow","location","changeIframeSrc","isLoaded","complete","naturalWidth","loading","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","onload","started","_","persisted","loadingElements","querySelectorAll","img","MutationObserver","observe","childList","subtree","attributes","setInterval","readyState","checkElems","unveil","_aLSL","sizeElement","sources","len","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","fire","gW","module","exports","globalInstall","removeEventListener","require","imageRatio","extend$","$","regRatio","ratioCache","matchesMedia","media","matchMedia","matches","Modernizr","mq","AspectRatio","_setupEvents","timer","resize","addRemoveAspectRatio","addAspectRatio","removeAspectRatio","processImages","getAttribute","ratioElems","context","getSelectedRatio","ratio","parseRatio","match","notNew","height","offsetHeight","console","log","removeAttribute","jQuery","Zepto","shoestring","filter","find","define","amd","regDescriptors","regCssFit","regCssObject","parentFit","getParent","element","parentSel","previousElementSibling","closest","getFit","tmpMatch","parentObj","css","content","fontFamily","obj","fit","_lazysizesParentFit","_lazysizesParentContainer","objectFit","getImageRatio","_lsMedia","parseFloat","calculateSize","displayRatio","retWidth","fitObj","fitElem","objectFitImages","OFI","propRegex","testImg","Image","object-position","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","callback","fixOne","parsed","props","exec","getStyle","ofi","skipTest","naturalHeight","descriptors","get","set","value","Object","defineProperty","ss","keepSrcUsable","err","warn","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","imgs","opts","startAutoMode","tagName","watchMQ","getOfiImageMaybe","HTMLImageElement","String","hijackAttributes","root","svg4everybody","embed","svg","fragment","createDocumentFragment","viewBox","hasAttribute","clone","cloneNode","childNodes","appendChild","firstChild","loadreadystatechange","xhr","onreadystatechange","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","splice","map","item","id","getElementById","getSVGAncestor","node","toLowerCase","rawopts","inIframe","self","requests","uses","numberOfSvgUseElementsToBypass","oninterval","index","use","attributeName","validate","removeChild","srcSplit","split","url","join","XMLHttpRequest","open","send","Util","className","classList","contains","slice","remove","toggleClass","bool","setAttributes","attrs","key","getChildrenByClassName","children","childrenByClass","is","selector","nodeType","qa","setHeight","start","to","duration","cb","change","currentTime","animateHeight","progress","val","parseInt","scrollTo","final","scrollEl","scrollTop","scrollY","animateScroll","Math","easeInOutQuad","moveFocus","focus","activeElement","getIndexInArray","array","indexOf","cssSupports","property","CSS","supports","g","toUpperCase","extend","extended","deep","toString","merge","hasOwnProperty","osHasReducedMotion","matchMediaObj","Element","msMatchesSelector","webkitMatchesSelector","s","parentElement","CustomEvent","params","bubbles","cancelable","undefined","initCustomEvent","Event","t","b","c","d","focusTab","detectClick","resetFocusTabs","detectTab","keyCode","outlineStyle","setProperty","Sharer","elems","l","currentTarget","srcElement","share","constructor","getValue","attr","startsWith","sharer","facebook","shareUrl","u","hashtag","linkedin","mini","email","subject","isLink","whatsapp","text","urlSharer","p","keys","str","encodeURIComponent","href","popWidth","popHeight","screenX","popParams","screenY","newWindow","global","Swiper","doc","blur","querySelector","createElement","hash","win","history","getPropertyValue","screen","Dom7","arr","els","tempParent","html","toCreate","unique","uniqueArray","Class","Methods","classes","j","toggle","arguments$1","attrName","removeAttr","data","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","webkitTransitionDuration","transitionDuration","on","assign","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","parents","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","dom7Listeners","off","handlers","handler","dom7proxy","trigger","dataIndex","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","outerHeight","offset","box","clientTop","clientLeft","scrollLeft","scrollX","each","textContent","compareWith","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","prevAll","prevEls","foundElements","found","matchedItems","toAdd","methodName","Utils","deleteProps","object","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","a","MozTransform","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","param","query","urlToParse","paramsPart","decodeURIComponent","isObject","o","len$1","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","touch","maxTouchPoints","DocumentTouch","pointerEvents","PointerEvent","observer","passiveListener","supportsPassive","gestures","SwiperClass","eventsListeners","eventName","staticAccessors","components","configurable","priority","method","once","onceHandler","f7proxy","eventHandler","emit","isArray","eventsArray","useModulesParams","instanceParams","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","create","installModule","proto","static","install","m","concat","defineProperties","update","updateSize","$el","isHorizontal","isVertical","size","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","floor","ceil","slidesPerView","slidesPerColumnFill","max","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","centeredSlides","abs","slidesPerGroupSkip","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesSize$1","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","visibleSlides","slideProgress","minTranslate","slideBefore","slideAfter","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","swiper","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","destroyed","transition$1","transitionStart","direction","autoHeight","dir","slideTo","initialSlide","allowSlideNext","allowSlidePrev","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","threshold","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","ie","edge","firefox","windows","electron","macos","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Device","ios","androidChrome","desktop","cordova","phonegap","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","pow","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","increment$1","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","paused","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","defaults","updateOnWindowResize","uniqueNavElements","preloadImages","updateOnImagesReady","noSwipingClass","passiveListeners","containerModifierClass","slideClass","slideBlankClass","wrapperClass","prototypes","attachEvents","touchEvents","move","end","passive","cancel","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","sort","ref","wasLocked","lastSlidePosition","addClasses","classNames","suffixes","suffix","removeClasses","images","loadImage","imageEl","checkForComplete","image","onReady","onerror","imagesLoaded","imagesToLoad","extendedDefaults","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","shadowRoot","options","touchEventsTouch","touchEventsDesktop","clickTimeout","__proto__","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","slideEl","destroy","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser","isEdge","isSafari","isUiWebView","Browser$1","browser","Resize","resizeHandler","orientationChangeHandler","Observer","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","isSupported","hasFeature","isEventSupported","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","shiftKey","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","handle","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent$1","sign","ignoreWheelEvents","sensitivity","recentWheelEvents$1","prevEvent$1","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","newEvent","raw","prevEvent","animateSlider","releaseScroll","returnValue","getTime","enable","disable","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Controller","LinearSpline","maxIndex","minIndex","guess","i1","i3","binarySearch","interpolate","x2","getInterpolateFunction","controller","spline","setTranslate$1","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","a11y","makeElFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","message","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","pause","waitForTransition","onTransitionEnd","Fade","$slideEl","tx","ty","slideOpacity","fadeEffect","crossFade","opacity","eventTriggered","triggerEvents","hideOnClick","toEdge","fromEdge","isHidden","bulletElement","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","notificationClass","paginationUpdate","disableOnInteraction","onVisibilityChange","visibilityState","beforeTransitionStart","sliderFirstMove","touchEnd","beforeInit","overwriteParams","timeline","collection","timelines","resizeTimer","winWidth","currentIndex","defaultSettings","forceVerticalMode","defaultValue","horizontalStartPosition","acceptedValues","mode","moveItems","rtlMode","startIndex","verticalStartPosition","verticalTrigger","visibleItems","itemWrap","wrapper","isElementInViewport","triggerPosition","windowHeight","defaultTrigger","triggerUnit","unit","triggerValue","addTransforms","timelinePosition","tl","items","scroller","setUpHorinzontalTimeline","settings","timelineEl","itemWidth","wrap","scrollerWidth","oddIndexTallest","evenIndexTallest","transformString","setHeights","setHeightandWidths","prevArrow","nextArrow","topPosition","disabled","addNavigation","divider","horizontalDivider","addHorizontalDivider","navArrows","arrowPrev","arrowNext","arrow","slideTimeline","setUpTimelines","resetTimelines","lastVisibleIndex","setUpVerticalTimeline","timelineName","errorPart","dataset","Error","settingName","triggerArray","triggerValid","newWinWidth","Accordion","showClass","multiItems","initAccordion","isOpen","aria-expanded","aria-controls","aria-labelledby","initAccordionEvents","triggerAccordion","animateAccordion","ariaValue","initHeight","finalHeight","resetContentVisibility","closeSiblings","moveContent","openAccordion","boundingRect","windowScrollTop","accordions","menuBtns","btn","status","Menu","elementId","menuItems","selectedTrigger","menuIsOpen","initMenu","initMenuEvents","aria-haspopup","toggleMenu","navigateItems","positionMenu","selectedTriggerPosition","menuOnTop","isRight","horizontal","vertical","maxHeight","checkMenuFocus","menuParent","checkMenuClick","menus","menusArray","Modal","triggers","firstFocusable","lastFocusable","initModal","showModal","initModalEvents","closeModal","getFocusableElements","emitModalEvents","cancelModalEvents","initClick","initKeyDown","trapFocus","allFocusable","getFirstVisible","getLastVisible","getClientRects","modals","modalArrays","SwipeContent","dragging","intervalId","initDragging","unify","clientX","clientY","emitSwipeEvents","startDrag","emitDrag","drag","cancelAnimationFrame","clearInterval","cancelDragging","dx","dy","getSign","endDrag","origin","swipe","flexHeader","menuTrigger","firstFocusableElement","focusableEle","getMenuFirstFocusable","focusMenu","hidingNav","mainNav","subNav","scrolling","previousTop","currentTop","headerHeight","navIsFixed","triggerMobile","triggerMobileClass","getTriggerMobileMenu","resetHideNav","hideNavScrollDown","hideNavScrollUp","pageYOffset","initSecondaryNav","MenuBar","mobHideItems","moreItemsTrigger","menu","nextItem","setMenuTabIndex","menuControlId","outerHTML","subMenu","customClass","class","subItems","menuInstance","initMenuBarMarkup","checkMenuLayout","initMenuBar","layout","list","menuBars","menuBarArray","beforeContent","resizingId","customEvent","doneResizing","ModalVideo","modalContent","contentIsIframe","modalIsOpen","initModalVideo","addLoadListener","revealContent","modalVideos","Slideshow","mergeOpts","autoplayInterval","slideshowAssignOptions","controls","selectedSlide","autoplayId","autoplayPaused","navCurrentLabel","ariaLive","supportAnimation","animationOff","animatingClass","slideshow","srLiveArea","aria-live","aria-atomic","initSlideshow","navChildren","navigateSlide","showPrev","updateAriaLive","showNext","startAutoplay","pauseAutoplay","slideshowId","externalControls","externalControlSlide","showNewItem","initSlideshowEvents","resetAnimationEnd","initAnimationEndEvents","keyNav","showItem","emitSlideshowEvent","exitItemClass","oldIndex","getExitItemClass","enterItemClass","getEnterItemClass","resetSlideshowNav","dataTheme","resetSlideshowTheme","slideshows","ExpGallery","gallery","slideshowList","galleryItems","lazyload","slideshowContent","caption","altAttr","draggable","imgBlock","captionBlock","imgMorph","aria-hidden","data-exp-morph","imgMorphSVG","imgMorphRect","imgMorphImg","zoomImg","initLightboxMarkup","lazyLoadSlide","slideshowNav","hideSlideshowElements","slideshowObj","lastSelected","setSelectedItem","animationSupported","animateSelectedImage","openModal","openModalLightbox","modalSwiping","modalZoomImg","closeModalAnimation","setSlideMedia","originImg","originImgPosition","originStyle","scrollWidth","animateZoomImg","imgInit","imgInitPosition","imgFinalPosition","initWidth","initTranslateY","initTranslateX","initTop","initLeft","finTranslateX","finTranslateY","initScaleX","initScaleY","finScaleX","finScaleY","xlink:href","propertyName","animateScale","valX","easeOutQuad","valY","animateRectScale","keyboardNavigateLightbox","expGalleries","expGalleriesArray","updateLightbox","w","getOffsetTop","scrollToAnchor","container","progressValue","circumference","strokeDasharray","transitionTimingFunction","lazy","transitionProperty","strokeDashoffset","hide","fadeIn","tabMagic","display","tick","activeTab","540","1100","scrollOffset","checkStickyShare","windowTop","humanizeNumber","num","toFixed","countButtons","totalContainer","totalValue","fetch","templateUrl","then","response","json","error","counter","innerText","onCookiePolicyAccepted","iframe","dataLayer","play","video","videoId","playlistItems","videoType","playlistItem"],"mappings":"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","file":"scripts.min.js","sourcesContent":["(function(window, factory) {\n    var lazySizes = factory(window, window.document, Date);\n    window.lazySizes = lazySizes;\n    if(typeof module == 'object' && module.exports){\n        module.exports = lazySizes;\n    }\n}(typeof window != 'undefined' ?\n    window : {}, function l(window, document, Date) { // Pass in the windoe Date function also for SSR because the Date class can be lost\n        'use strict';\n        /*jshint eqnull:true */\n\n        var lazysizes, lazySizesCfg;\n\n        (function(){\n            var prop;\n\n            var lazySizesDefaults = {\n                lazyClass: 'lazyload',\n                loadedClass: 'lazyloaded',\n                loadingClass: 'lazyloading',\n                preloadClass: 'lazypreload',\n                errorClass: 'lazyerror',\n                //strictClass: 'lazystrict',\n                autosizesClass: 'lazyautosizes',\n                srcAttr: 'data-src',\n                srcsetAttr: 'data-srcset',\n                sizesAttr: 'data-sizes',\n                //preloadAfterLoad: false,\n                minSize: 40,\n                customMedia: {},\n                init: true,\n                expFactor: 1.5,\n                hFac: 0.8,\n                loadMode: 2,\n                loadHidden: true,\n                ricTimeout: 0,\n                throttleDelay: 125,\n            };\n\n            lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n            for(prop in lazySizesDefaults){\n                if(!(prop in lazySizesCfg)){\n                    lazySizesCfg[prop] = lazySizesDefaults[prop];\n                }\n            }\n        })();\n\n        if (!document || !document.getElementsByClassName) {\n            return {\n                init: function () {},\n                cfg: lazySizesCfg,\n                noSupport: true,\n            };\n        }\n\n        var docElem = document.documentElement;\n\n        var supportPicture = window.HTMLPictureElement;\n\n        var _addEventListener = 'addEventListener';\n\n        var _getAttribute = 'getAttribute';\n\n        /**\n         * Update to bind to window because 'this' becomes null during SSR\n         * builds.\n         */\n        var addEventListener = window[_addEventListener].bind(window);\n\n        var setTimeout = window.setTimeout;\n\n        var requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n        var requestIdleCallback = window.requestIdleCallback;\n\n        var regPicture = /^picture$/i;\n\n        var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n        var regClassCache = {};\n\n        var forEach = Array.prototype.forEach;\n\n        var hasClass = function(ele, cls) {\n            if(!regClassCache[cls]){\n                regClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n            }\n            return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n        };\n\n        var addClass = function(ele, cls) {\n            if (!hasClass(ele, cls)){\n                ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n            }\n        };\n\n        var removeClass = function(ele, cls) {\n            var reg;\n            if ((reg = hasClass(ele,cls))) {\n                ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n            }\n        };\n\n        var addRemoveLoadEvents = function(dom, fn, add){\n            var action = add ? _addEventListener : 'removeEventListener';\n            if(add){\n                addRemoveLoadEvents(dom, fn);\n            }\n            loadEvents.forEach(function(evt){\n                dom[action](evt, fn);\n            });\n        };\n\n        var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n            var event = document.createEvent('Event');\n\n            if(!detail){\n                detail = {};\n            }\n\n            detail.instance = lazysizes;\n\n            event.initEvent(name, !noBubbles, !noCancelable);\n\n            event.detail = detail;\n\n            elem.dispatchEvent(event);\n            return event;\n        };\n\n        var updatePolyfill = function (el, full){\n            var polyfill;\n            if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n                if(full && full.src && !el[_getAttribute]('srcset')){\n                    el.setAttribute('srcset', full.src);\n                }\n                polyfill({reevaluate: true, elements: [el]});\n            } else if(full && full.src){\n                el.src = full.src;\n            }\n        };\n\n        var getCSS = function (elem, style){\n            return (getComputedStyle(elem, null) || {})[style];\n        };\n\n        var getWidth = function(elem, parent, width){\n            width = width || elem.offsetWidth;\n\n            while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n                width =  parent.offsetWidth;\n                parent = parent.parentNode;\n            }\n\n            return width;\n        };\n\n        var rAF = (function(){\n            var running, waiting;\n            var firstFns = [];\n            var secondFns = [];\n            var fns = firstFns;\n\n            var run = function(){\n                var runFns = fns;\n\n                fns = firstFns.length ? secondFns : firstFns;\n\n                running = true;\n                waiting = false;\n\n                while(runFns.length){\n                    runFns.shift()();\n                }\n\n                running = false;\n            };\n\n            var rafBatch = function(fn, queue){\n                if(running && !queue){\n                    fn.apply(this, arguments);\n                } else {\n                    fns.push(fn);\n\n                    if(!waiting){\n                        waiting = true;\n                        (document.hidden ? setTimeout : requestAnimationFrame)(run);\n                    }\n                }\n            };\n\n            rafBatch._lsFlush = run;\n\n            return rafBatch;\n        })();\n\n        var rAFIt = function(fn, simple){\n            return simple ?\n                function() {\n                    rAF(fn);\n                } :\n                function(){\n                    var that = this;\n                    var args = arguments;\n                    rAF(function(){\n                        fn.apply(that, args);\n                    });\n                }\n                ;\n        };\n\n        var throttle = function(fn){\n            var running;\n            var lastTime = 0;\n            var gDelay = lazySizesCfg.throttleDelay;\n            var rICTimeout = lazySizesCfg.ricTimeout;\n            var run = function(){\n                running = false;\n                lastTime = Date.now();\n                fn();\n            };\n            var idleCallback = requestIdleCallback && rICTimeout > 49 ?\n                function(){\n                    requestIdleCallback(run, {timeout: rICTimeout});\n\n                    if(rICTimeout !== lazySizesCfg.ricTimeout){\n                        rICTimeout = lazySizesCfg.ricTimeout;\n                    }\n                } :\n                rAFIt(function(){\n                    setTimeout(run);\n                }, true)\n            ;\n\n            return function(isPriority){\n                var delay;\n\n                if((isPriority = isPriority === true)){\n                    rICTimeout = 33;\n                }\n\n                if(running){\n                    return;\n                }\n\n                running =  true;\n\n                delay = gDelay - (Date.now() - lastTime);\n\n                if(delay < 0){\n                    delay = 0;\n                }\n\n                if(isPriority || delay < 9){\n                    idleCallback();\n                } else {\n                    setTimeout(idleCallback, delay);\n                }\n            };\n        };\n\n        //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n        var debounce = function(func) {\n            var timeout, timestamp;\n            var wait = 99;\n            var run = function(){\n                timeout = null;\n                func();\n            };\n            var later = function() {\n                var last = Date.now() - timestamp;\n\n                if (last < wait) {\n                    setTimeout(later, wait - last);\n                } else {\n                    (requestIdleCallback || run)(run);\n                }\n            };\n\n            return function() {\n                timestamp = Date.now();\n\n                if (!timeout) {\n                    timeout = setTimeout(later, wait);\n                }\n            };\n        };\n\n        var loader = (function(){\n            var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n            var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n            var regImg = /^img$/i;\n            var regIframe = /^iframe$/i;\n\n            var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n            var shrinkExpand = 0;\n            var currentExpand = 0;\n\n            var isLoading = 0;\n            var lowRuns = -1;\n\n            var resetPreloading = function(e){\n                isLoading--;\n                if(!e || isLoading < 0 || !e.target){\n                    isLoading = 0;\n                }\n            };\n\n            var isVisible = function (elem) {\n                if (isBodyHidden == null) {\n                    isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n                }\n\n                return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n            };\n\n            var isNestedVisible = function(elem, elemExpand){\n                var outerRect;\n                var parent = elem;\n                var visible = isVisible(elem);\n\n                eLtop -= elemExpand;\n                eLbottom += elemExpand;\n                eLleft -= elemExpand;\n                eLright += elemExpand;\n\n                while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n                    visible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n                    if(visible && getCSS(parent, 'overflow') != 'visible'){\n                        outerRect = parent.getBoundingClientRect();\n                        visible = eLright > outerRect.left &&\n                            eLleft < outerRect.right &&\n                            eLbottom > outerRect.top - 1 &&\n                            eLtop < outerRect.bottom + 1\n                        ;\n                    }\n                }\n\n                return visible;\n            };\n\n            var checkElements = function() {\n                var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n                    beforeExpandVal, defaultExpand, preloadExpand, hFac;\n                var lazyloadElems = lazysizes.elements;\n\n                if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n                    i = 0;\n\n                    lowRuns++;\n\n                    for(; i < eLlen; i++){\n\n                        if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n                        if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n                        if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n                            elemExpand = currentExpand;\n                        }\n\n                        if (!defaultExpand) {\n                            defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n                                docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n                                lazySizesCfg.expand;\n\n                            lazysizes._defEx = defaultExpand;\n\n                            preloadExpand = defaultExpand * lazySizesCfg.expFactor;\n                            hFac = lazySizesCfg.hFac;\n                            isBodyHidden = null;\n\n                            if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n                                currentExpand = preloadExpand;\n                                lowRuns = 0;\n                            } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n                                currentExpand = defaultExpand;\n                            } else {\n                                currentExpand = shrinkExpand;\n                            }\n                        }\n\n                        if(beforeExpandVal !== elemExpand){\n                            eLvW = innerWidth + (elemExpand * hFac);\n                            elvH = innerHeight + elemExpand;\n                            elemNegativeExpand = elemExpand * -1;\n                            beforeExpandVal = elemExpand;\n                        }\n\n                        rect = lazyloadElems[i].getBoundingClientRect();\n\n                        if ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n                            (eLtop = rect.top) <= elvH &&\n                            (eLright = rect.right) >= elemNegativeExpand * hFac &&\n                            (eLleft = rect.left) <= eLvW &&\n                            (eLbottom || eLright || eLleft || eLtop) &&\n                            (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n                            ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n                            unveilElement(lazyloadElems[i]);\n                            loadedSomething = true;\n                            if(isLoading > 9){break;}\n                        } else if(!loadedSomething && isCompleted && !autoLoadElem &&\n                            isLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n                            (preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n                            (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n                            autoLoadElem = preloadElems[0] || lazyloadElems[i];\n                        }\n                    }\n\n                    if(autoLoadElem && !loadedSomething){\n                        unveilElement(autoLoadElem);\n                    }\n                }\n            };\n\n            var throttledCheckElements = throttle(checkElements);\n\n            var switchLoadingClass = function(e){\n                var elem = e.target;\n\n                if (elem._lazyCache) {\n                    delete elem._lazyCache;\n                    return;\n                }\n\n                resetPreloading(e);\n                addClass(elem, lazySizesCfg.loadedClass);\n                removeClass(elem, lazySizesCfg.loadingClass);\n                addRemoveLoadEvents(elem, rafSwitchLoadingClass);\n                triggerEvent(elem, 'lazyloaded');\n            };\n            var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n            var rafSwitchLoadingClass = function(e){\n                rafedSwitchLoadingClass({target: e.target});\n            };\n\n            var changeIframeSrc = function(elem, src){\n                try {\n                    elem.contentWindow.location.replace(src);\n                } catch(e){\n                    elem.src = src;\n                }\n            };\n\n            var handleSources = function(source){\n                var customMedia;\n\n                var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n                if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n                    source.setAttribute('media', customMedia);\n                }\n\n                if(sourceSrcset){\n                    source.setAttribute('srcset', sourceSrcset);\n                }\n            };\n\n            var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n                var src, srcset, parent, isPicture, event, firesLoad;\n\n                if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n                    if(sizes){\n                        if(isAuto){\n                            addClass(elem, lazySizesCfg.autosizesClass);\n                        } else {\n                            elem.setAttribute('sizes', sizes);\n                        }\n                    }\n\n                    srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n                    src = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n                    if(isImg) {\n                        parent = elem.parentNode;\n                        isPicture = parent && regPicture.test(parent.nodeName || '');\n                    }\n\n                    firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n                    event = {target: elem};\n\n                    addClass(elem, lazySizesCfg.loadingClass);\n\n                    if(firesLoad){\n                        clearTimeout(resetPreloadingTimer);\n                        resetPreloadingTimer = setTimeout(resetPreloading, 2500);\n                        addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n                    }\n\n                    if(isPicture){\n                        forEach.call(parent.getElementsByTagName('source'), handleSources);\n                    }\n\n                    if(srcset){\n                        elem.setAttribute('srcset', srcset);\n                    } else if(src && !isPicture){\n                        if(regIframe.test(elem.nodeName)){\n                            changeIframeSrc(elem, src);\n                        } else {\n                            elem.src = src;\n                        }\n                    }\n\n                    if(isImg && (srcset || isPicture)){\n                        updatePolyfill(elem, {src: src});\n                    }\n                }\n\n                if(elem._lazyRace){\n                    delete elem._lazyRace;\n                }\n                removeClass(elem, lazySizesCfg.lazyClass);\n\n                rAF(function(){\n                    // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n                    var isLoaded = elem.complete && elem.naturalWidth > 1;\n\n                    if( !firesLoad || isLoaded){\n                        if (isLoaded) {\n                            addClass(elem, 'ls-is-cached');\n                        }\n                        switchLoadingClass(event);\n                        elem._lazyCache = true;\n                        setTimeout(function(){\n                            if ('_lazyCache' in elem) {\n                                delete elem._lazyCache;\n                            }\n                        }, 9);\n                    }\n                    if (elem.loading == 'lazy') {\n                        isLoading--;\n                    }\n                }, true);\n            });\n\n            var unveilElement = function (elem){\n                if (elem._lazyRace) {return;}\n                var detail;\n\n                var isImg = regImg.test(elem.nodeName);\n\n                //allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n                var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n                var isAuto = sizes == 'auto';\n\n                if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n                detail = triggerEvent(elem, 'lazyunveilread').detail;\n\n                if(isAuto){\n                    autoSizer.updateElem(elem, true, elem.offsetWidth);\n                }\n\n                elem._lazyRace = true;\n                isLoading++;\n\n                lazyUnveil(elem, detail, isAuto, sizes, isImg);\n            };\n\n            var afterScroll = debounce(function(){\n                lazySizesCfg.loadMode = 3;\n                throttledCheckElements();\n            });\n\n            var altLoadmodeScrollListner = function(){\n                if(lazySizesCfg.loadMode == 3){\n                    lazySizesCfg.loadMode = 2;\n                }\n                afterScroll();\n            };\n\n            var onload = function(){\n                if(isCompleted){return;}\n                if(Date.now() - started < 999){\n                    setTimeout(onload, 999);\n                    return;\n                }\n\n\n                isCompleted = true;\n\n                lazySizesCfg.loadMode = 3;\n\n                throttledCheckElements();\n\n                addEventListener('scroll', altLoadmodeScrollListner, true);\n            };\n\n            return {\n                _: function(){\n                    started = Date.now();\n\n                    lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n                    preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n                    addEventListener('scroll', throttledCheckElements, true);\n\n                    addEventListener('resize', throttledCheckElements, true);\n\n                    addEventListener('pageshow', function (e) {\n                        if (e.persisted) {\n                            var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n                            if (loadingElements.length && loadingElements.forEach) {\n                                requestAnimationFrame(function () {\n                                    loadingElements.forEach( function (img) {\n                                        if (img.complete) {\n                                            unveilElement(img);\n                                        }\n                                    });\n                                });\n                            }\n                        }\n                    });\n\n                    if(window.MutationObserver){\n                        new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n                    } else {\n                        docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n                        docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n                        setInterval(throttledCheckElements, 999);\n                    }\n\n                    addEventListener('hashchange', throttledCheckElements, true);\n\n                    //, 'fullscreenchange'\n                    ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n                        document[_addEventListener](name, throttledCheckElements, true);\n                    });\n\n                    if((/d$|^c/.test(document.readyState))){\n                        onload();\n                    } else {\n                        addEventListener('load', onload);\n                        document[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n                        setTimeout(onload, 20000);\n                    }\n\n                    if(lazysizes.elements.length){\n                        checkElements();\n                        rAF._lsFlush();\n                    } else {\n                        throttledCheckElements();\n                    }\n                },\n                checkElems: throttledCheckElements,\n                unveil: unveilElement,\n                _aLSL: altLoadmodeScrollListner,\n            };\n        })();\n\n\n        var autoSizer = (function(){\n            var autosizesElems;\n\n            var sizeElement = rAFIt(function(elem, parent, event, width){\n                var sources, i, len;\n                elem._lazysizesWidth = width;\n                width += 'px';\n\n                elem.setAttribute('sizes', width);\n\n                if(regPicture.test(parent.nodeName || '')){\n                    sources = parent.getElementsByTagName('source');\n                    for(i = 0, len = sources.length; i < len; i++){\n                        sources[i].setAttribute('sizes', width);\n                    }\n                }\n\n                if(!event.detail.dataAttr){\n                    updatePolyfill(elem, event.detail);\n                }\n            });\n            var getSizeElement = function (elem, dataAttr, width){\n                var event;\n                var parent = elem.parentNode;\n\n                if(parent){\n                    width = getWidth(elem, parent, width);\n                    event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n                    if(!event.defaultPrevented){\n                        width = event.detail.width;\n\n                        if(width && width !== elem._lazysizesWidth){\n                            sizeElement(elem, parent, event, width);\n                        }\n                    }\n                }\n            };\n\n            var updateElementsSizes = function(){\n                var i;\n                var len = autosizesElems.length;\n                if(len){\n                    i = 0;\n\n                    for(; i < len; i++){\n                        getSizeElement(autosizesElems[i]);\n                    }\n                }\n            };\n\n            var debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n            return {\n                _: function(){\n                    autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n                    addEventListener('resize', debouncedUpdateElementsSizes);\n                },\n                checkElems: debouncedUpdateElementsSizes,\n                updateElem: getSizeElement\n            };\n        })();\n\n        var init = function(){\n            if(!init.i && document.getElementsByClassName){\n                init.i = true;\n                autoSizer._();\n                loader._();\n            }\n        };\n\n        setTimeout(function(){\n            if(lazySizesCfg.init){\n                init();\n            }\n        });\n\n        lazysizes = {\n            cfg: lazySizesCfg,\n            autoSizer: autoSizer,\n            loader: loader,\n            init: init,\n            uP: updatePolyfill,\n            aC: addClass,\n            rC: removeClass,\n            hC: hasClass,\n            fire: triggerEvent,\n            gW: getWidth,\n            rAF: rAF,\n        };\n\n        return lazysizes;\n    }\n));\n","(function(window, factory) {\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(window, function(window, document, lazySizes) {\n\t'use strict';\n\n\tif(!window.addEventListener){return;}\n\n\tvar forEach = Array.prototype.forEach;\n\n\tvar imageRatio, extend$, $;\n\n\tvar regPicture = /^picture$/i;\n\tvar aspectRatioAttr = 'data-aspectratio';\n\tvar aspectRatioSel = 'img[' + aspectRatioAttr + ']';\n\n\tvar matchesMedia = function(media){\n\t\tif(window.matchMedia){\n\t\t\tmatchesMedia = function(media){\n\t\t\t\treturn !media || (matchMedia(media) || {}).matches;\n\t\t\t};\n\t\t} else if(window.Modernizr && Modernizr.mq){\n\t\t\treturn !media || Modernizr.mq(media);\n\t\t} else {\n\t\t\treturn !media;\n\t\t}\n\t\treturn matchesMedia(media);\n\t};\n\n\tvar addClass = lazySizes.aC;\n\tvar removeClass = lazySizes.rC;\n\tvar lazySizesConfig = lazySizes.cfg;\n\n\tfunction AspectRatio(){\n\t\tthis.ratioElems = document.getElementsByClassName('lazyaspectratio');\n\t\tthis._setupEvents();\n\t\tthis.processImages();\n\t}\n\n\tAspectRatio.prototype = {\n\t\t_setupEvents: function(){\n\t\t\tvar module = this;\n\n\t\t\tvar addRemoveAspectRatio = function(elem){\n\t\t\t\tif(elem.naturalWidth < 36){\n\t\t\t\t\tmodule.addAspectRatio(elem, true);\n\t\t\t\t} else {\n\t\t\t\t\tmodule.removeAspectRatio(elem, true);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onload = function(){\n\t\t\t\tmodule.processImages();\n\t\t\t};\n\n\t\t\tdocument.addEventListener('load', function(e){\n\t\t\t\tif(e.target.getAttribute && e.target.getAttribute(aspectRatioAttr)){\n\t\t\t\t\taddRemoveAspectRatio(e.target);\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t\taddEventListener('resize', (function(){\n\t\t\t\tvar timer;\n\t\t\t\tvar resize = function(){\n\t\t\t\t\tforEach.call(module.ratioElems, addRemoveAspectRatio);\n\t\t\t\t};\n\n\t\t\t\treturn function(){\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(resize, 99);\n\t\t\t\t};\n\t\t\t})());\n\n\t\t\tdocument.addEventListener('DOMContentLoaded', onload);\n\n\t\t\taddEventListener('load', onload);\n\t\t},\n\t\tprocessImages: function(context){\n\t\t\tvar elements, i;\n\n\t\t\tif(!context){\n\t\t\t\tcontext = document;\n\t\t\t}\n\n\t\t\tif('length' in context && !context.nodeName){\n\t\t\t\telements = context;\n\t\t\t} else {\n\t\t\t\telements = context.querySelectorAll(aspectRatioSel);\n\t\t\t}\n\n\t\t\tfor(i = 0; i < elements.length; i++){\n\t\t\t\tif(elements[i].naturalWidth > 36){\n\t\t\t\t\tthis.removeAspectRatio(elements[i]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.addAspectRatio(elements[i]);\n\t\t\t}\n\t\t},\n\t\tgetSelectedRatio: function(img){\n\t\t\tvar i, len, sources, customMedia, ratio;\n\t\t\tvar parent = img.parentNode;\n\t\t\tif(parent && regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tcustomMedia = sources[i].getAttribute('data-media') || sources[i].getAttribute('media');\n\n\t\t\t\t\tif(lazySizesConfig.customMedia[customMedia]){\n\t\t\t\t\t\tcustomMedia = lazySizesConfig.customMedia[customMedia];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(matchesMedia(customMedia)){\n\t\t\t\t\t\tratio = sources[i].getAttribute(aspectRatioAttr);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ratio || img.getAttribute(aspectRatioAttr) || '';\n\t\t},\n\t\tparseRatio: (function(){\n\t\t\tvar regRatio = /^\\s*([+\\d\\.]+)(\\s*[\\/x]\\s*([+\\d\\.]+))?\\s*$/;\n\t\t\tvar ratioCache = {};\n\t\t\treturn function(ratio){\n\t\t\t\tvar match;\n\n\t\t\t\tif(!ratioCache[ratio] && (match = ratio.match(regRatio))){\n\t\t\t\t\tif(match[3]){\n\t\t\t\t\t\tratioCache[ratio] = match[1] / match[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tratioCache[ratio] = match[1] * 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ratioCache[ratio];\n\t\t\t};\n\t\t})(),\n\t\taddAspectRatio: function(img, notNew){\n\t\t\tvar ratio;\n\t\t\tvar width = img.offsetWidth;\n\t\t\tvar height = img.offsetHeight;\n\n\t\t\tif(!notNew){\n\t\t\t\taddClass(img, 'lazyaspectratio');\n\t\t\t}\n\n\t\t\tif(width < 36 && height <= 0){\n\t\t\t\tif(width || height && window.console){\n\t\t\t\t\tconsole.log('Define width or height of image, so we can calculate the other dimension');\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tratio = this.getSelectedRatio(img);\n\t\t\tratio = this.parseRatio(ratio);\n\n\t\t\tif(ratio){\n\t\t\t\tif(width){\n\t\t\t\t\timg.style.height = (width / ratio) + 'px';\n\t\t\t\t} else {\n\t\t\t\t\timg.style.width = (height * ratio) + 'px';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremoveAspectRatio: function(img){\n\t\t\tremoveClass(img, 'lazyaspectratio');\n\t\t\timg.style.height = '';\n\t\t\timg.style.width = '';\n\t\t\timg.removeAttribute(aspectRatioAttr);\n\t\t}\n\t};\n\n\textend$ = function(){\n\t\t$ = window.jQuery || window.Zepto || window.shoestring || window.$;\n\t\tif($ && $.fn && !$.fn.imageRatio && $.fn.filter && $.fn.add && $.fn.find){\n\t\t\t$.fn.imageRatio = function(){\n\t\t\t\timageRatio.processImages(this.find(aspectRatioSel).add(this.filter(aspectRatioSel)));\n\t\t\t\treturn this;\n\t\t\t};\n\t\t} else {\n\t\t\t$ = false;\n\t\t}\n\t};\n\n\textend$();\n\tsetTimeout(extend$);\n\n\timageRatio = new AspectRatio();\n\n\twindow.imageRatio = imageRatio;\n\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = imageRatio;\n\t} else if (typeof define == 'function' && define.amd) {\n\t\tdefine(imageRatio);\n\t}\n\n}));\n","(function(window, factory) {\n\tif(!window) {return;}\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(typeof window != 'undefined' ?\n\twindow : 0, function(window, document, lazySizes) {\n\t'use strict';\n\n\tif(!window.addEventListener){return;}\n\n\tvar regDescriptors = /\\s+(\\d+)(w|h)\\s+(\\d+)(w|h)/;\n\tvar regCssFit = /parent-fit[\"']*\\s*:\\s*[\"']*(contain|cover|width)/;\n\tvar regCssObject = /parent-container[\"']*\\s*:\\s*[\"']*(.+?)(?=(\\s|$|,|'|\"|;))/;\n\tvar regPicture = /^picture$/i;\n\tvar cfg = lazySizes.cfg;\n\n\tvar getCSS = function (elem){\n\t\treturn (getComputedStyle(elem, null) || {});\n\t};\n\n\tvar parentFit = {\n\n\t\tgetParent: function(element, parentSel){\n\t\t\tvar parent = element;\n\t\t\tvar parentNode = element.parentNode;\n\n\t\t\tif((!parentSel || parentSel == 'prev') && parentNode && regPicture.test(parentNode.nodeName || '')){\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t}\n\n\t\t\tif(parentSel != 'self'){\n\t\t\t\tif(parentSel == 'prev'){\n\t\t\t\t\tparent = element.previousElementSibling;\n\t\t\t\t} else if(parentSel && (parentNode.closest || window.jQuery)){\n\t\t\t\t\tparent = (parentNode.closest ?\n\t\t\t\t\t\t\tparentNode.closest(parentSel) :\n\t\t\t\t\t\t\tjQuery(parentNode).closest(parentSel)[0]) ||\n\t\t\t\t\t\tparentNode\n\t\t\t\t\t;\n\t\t\t\t} else {\n\t\t\t\t\tparent = parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn parent;\n\t\t},\n\n\t\tgetFit: function(element){\n\t\t\tvar tmpMatch, parentObj;\n\t\t\tvar css = getCSS(element);\n\t\t\tvar content = css.content || css.fontFamily;\n\t\t\tvar obj = {\n\t\t\t\tfit: element._lazysizesParentFit || element.getAttribute('data-parent-fit')\n\t\t\t};\n\n\t\t\tif(!obj.fit && content && (tmpMatch = content.match(regCssFit))){\n\t\t\t\tobj.fit = tmpMatch[1];\n\t\t\t}\n\n\t\t\tif(obj.fit){\n\t\t\t\tparentObj = element._lazysizesParentContainer || element.getAttribute('data-parent-container');\n\n\t\t\t\tif(!parentObj && content && (tmpMatch = content.match(regCssObject))){\n\t\t\t\t\tparentObj = tmpMatch[1];\n\t\t\t\t}\n\n\t\t\t\tobj.parent = parentFit.getParent(element, parentObj);\n\n\n\t\t\t} else {\n\t\t\t\tobj.fit = css.objectFit;\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\t\tgetImageRatio: function(element){\n\t\t\tvar i, srcset, media, ratio, match, width, height;\n\t\t\tvar parent = element.parentNode;\n\t\t\tvar elements = parent && regPicture.test(parent.nodeName || '') ?\n\t\t\t\t\tparent.querySelectorAll('source, img') :\n\t\t\t\t\t[element]\n\t\t\t\t;\n\n\t\t\tfor(i = 0; i < elements.length; i++){\n\t\t\t\telement = elements[i];\n\t\t\t\tsrcset = element.getAttribute(cfg.srcsetAttr) || element.getAttribute('srcset') || element.getAttribute('data-pfsrcset') || element.getAttribute('data-risrcset') || '';\n\t\t\t\tmedia = element._lsMedia || element.getAttribute('media');\n\t\t\t\tmedia = cfg.customMedia[element.getAttribute('data-media') || media] || media;\n\n\t\t\t\tif(srcset && (!media || (window.matchMedia && matchMedia(media) || {}).matches )){\n\t\t\t\t\tratio = parseFloat(element.getAttribute('data-aspectratio'));\n\n\t\t\t\t\tif (!ratio) {\n\t\t\t\t\t\tmatch = srcset.match(regDescriptors);\n\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\tif(match[2] == 'w'){\n\t\t\t\t\t\t\t\twidth = match[1];\n\t\t\t\t\t\t\t\theight = match[3];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twidth = match[3];\n\t\t\t\t\t\t\t\theight = match[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twidth = element.getAttribute('width');\n\t\t\t\t\t\t\theight = element.getAttribute('height');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tratio = width / height;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ratio;\n\t\t},\n\n\t\tcalculateSize: function(element, width){\n\t\t\tvar displayRatio, height, imageRatio, retWidth;\n\t\t\tvar fitObj = this.getFit(element);\n\t\t\tvar fit = fitObj.fit;\n\t\t\tvar fitElem = fitObj.parent;\n\n\t\t\tif(fit != 'width' && ((fit != 'contain' && fit != 'cover') || !(imageRatio = this.getImageRatio(element)))){\n\t\t\t\treturn width;\n\t\t\t}\n\n\t\t\tif(fitElem){\n\t\t\t\twidth = fitElem.clientWidth;\n\t\t\t} else {\n\t\t\t\tfitElem = element;\n\t\t\t}\n\n\t\t\tretWidth = width;\n\n\t\t\tif(fit == 'width'){\n\t\t\t\tretWidth = width;\n\t\t\t} else {\n\t\t\t\theight = fitElem.clientHeight;\n\n\t\t\t\tif((displayRatio =  width / height) && ((fit == 'cover' && displayRatio < imageRatio) || (fit == 'contain' && displayRatio > imageRatio))){\n\t\t\t\t\tretWidth = width * (imageRatio / displayRatio);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn retWidth;\n\t\t}\n\t};\n\n\tlazySizes.parentFit = parentFit;\n\n\tdocument.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.defaultPrevented || e.detail.instance != lazySizes){return;}\n\n\t\tvar element = e.target;\n\t\te.detail.width = parentFit.calculateSize(element, e.detail.width);\n\t});\n}));\n","/*! npm.im/object-fit-images 3.2.4 */\nvar objectFitImages = (function () {\n\t'use strict';\n\n\tvar OFI = 'fregante:object-fit-images';\n\tvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\n\tvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\n\tvar supportsObjectFit = 'object-fit' in testImg.style;\n\tvar supportsObjectPosition = 'object-position' in testImg.style;\n\tvar supportsOFI = 'background-size' in testImg.style;\n\tvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\n\tvar nativeGetAttribute = testImg.getAttribute;\n\tvar nativeSetAttribute = testImg.setAttribute;\n\tvar autoModeEnabled = false;\n\n\tfunction createPlaceholder(w, h) {\n\t\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n\t}\n\n\tfunction polyfillCurrentSrc(el) {\n\t\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\t\tvar pf = window.picturefill._;\n\t\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t\t// force synchronous srcset parsing\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\tif (!el[pf.ns].curSrc) {\n\t\t\t\t// force picturefill to parse srcset\n\t\t\t\tel[pf.ns].supported = false;\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\t// retrieve parsed currentSrc, if any\n\t\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t\t}\n\t}\n\n\tfunction getStyle(el) {\n\t\tvar style = getComputedStyle(el).fontFamily;\n\t\tvar parsed;\n\t\tvar props = {};\n\t\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\t\tprops[parsed[1]] = parsed[2];\n\t\t}\n\t\treturn props;\n\t}\n\n\tfunction setPlaceholder(img, width, height) {\n\t\t// Default: fill width, no height\n\t\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t\t// Only set placeholder if it's different\n\t\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t\t}\n\t}\n\n\tfunction onImageReady(img, callback) {\n\t\t// naturalWidth is only available when the image headers are loaded,\n\t\t// this loop will poll it every 100ms.\n\t\tif (img.naturalWidth) {\n\t\t\tcallback(img);\n\t\t} else {\n\t\t\tsetTimeout(onImageReady, 100, img, callback);\n\t\t}\n\t}\n\n\tfunction fixOne(el) {\n\t\tvar style = getStyle(el);\n\t\tvar ofi = el[OFI];\n\t\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t\t// Avoid running where unnecessary, unless OFI had already done its deed\n\t\tif (!ofi.img) {\n\t\t\t// fill is the default behavior so no action is necessary\n\t\t\tif (style['object-fit'] === 'fill') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\t\tif (\n\t\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t\t!style['object-position'] // unless object-position is used\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// keep a clone in memory while resetting the original to a blank\n\t\tif (!ofi.img) {\n\t\t\tofi.img = new Image(el.width, el.height);\n\t\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t\t// preserve for any future cloneNode calls\n\t\t\t// https://github.com/fregante/object-fit-images/issues/53\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\t\tif (el.srcset) {\n\t\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t\t}\n\n\t\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t\t// remove srcset because it overrides src\n\t\t\tif (el.srcset) {\n\t\t\t\tel.srcset = '';\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tkeepSrcUsable(el);\n\t\t\t} catch (err) {\n\t\t\t\tif (window.console) {\n\t\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpolyfillCurrentSrc(ofi.img);\n\n\t\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\t\tel.style.backgroundPosition = style['object-position'] || 'center';\n\t\tel.style.backgroundRepeat = 'no-repeat';\n\t\tel.style.backgroundOrigin = 'content-box';\n\n\t\tif (/scale-down/.test(style['object-fit'])) {\n\t\t\tonImageReady(ofi.img, function () {\n\t\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t\t} else {\n\t\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t\t}\n\n\t\tonImageReady(ofi.img, function (img) {\n\t\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t\t});\n\t}\n\n\tfunction keepSrcUsable(el) {\n\t\tvar descriptors = {\n\t\t\tget: function get(prop) {\n\t\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t\t},\n\t\t\tset: function set(value, prop) {\n\t\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\t\tfixOne(el);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(el, 'src', descriptors);\n\t\tObject.defineProperty(el, 'currentSrc', {\n\t\t\tget: function () { return descriptors.get('currentSrc'); }\n\t\t});\n\t\tObject.defineProperty(el, 'srcset', {\n\t\t\tget: function () { return descriptors.get('srcset'); },\n\t\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t\t});\n\t}\n\n\tfunction hijackAttributes() {\n\t\tfunction getOfiImageMaybe(el, name) {\n\t\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t\t}\n\t\tif (!supportsObjectPosition) {\n\t\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t\t};\n\n\t\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction fix(imgs, opts) {\n\t\tvar startAutoMode = !autoModeEnabled && !imgs;\n\t\topts = opts || {};\n\t\timgs = imgs || 'img';\n\n\t\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// use imgs as a selector or just select all images\n\t\tif (imgs === 'img') {\n\t\t\timgs = document.getElementsByTagName('img');\n\t\t} else if (typeof imgs === 'string') {\n\t\t\timgs = document.querySelectorAll(imgs);\n\t\t} else if (!('length' in imgs)) {\n\t\t\timgs = [imgs];\n\t\t}\n\n\t\t// apply fix to all\n\t\tfor (var i = 0; i < imgs.length; i++) {\n\t\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t};\n\t\t\tfixOne(imgs[i]);\n\t\t}\n\n\t\tif (startAutoMode) {\n\t\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\t\tfix(e.target, {\n\t\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\tautoModeEnabled = true;\n\t\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t\t}\n\n\t\t// if requested, watch media queries for object-fit change\n\t\tif (opts.watchMQ) {\n\t\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t}));\n\t\t}\n\t}\n\n\tfix.supportsObjectFit = supportsObjectFit;\n\tfix.supportsObjectPosition = supportsObjectPosition;\n\n\thijackAttributes();\n\n\treturn fix;\n\n}());\n","!function(root, factory) {\n    \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n        define([], function() {\n            return root.svg4everybody = factory();\n        }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n        // only CommonJS-like environments that support module.exports,\n        // like Node.\n        module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n    /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n    function embed(parent, svg, target) {\n        // if the target exists\n        if (target) {\n            // create a document fragment to hold the contents of the target\n            var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n            // conditionally set the viewBox on the svg\n            viewBox && svg.setAttribute(\"viewBox\", viewBox);\n            // copy the contents of the clone into the fragment\n            for (// clone the target\n                var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n                fragment.appendChild(clone.firstChild);\n            }\n            // append the fragment into the svg\n            parent.appendChild(fragment);\n        }\n    }\n    function loadreadystatechange(xhr) {\n        // listen to changes in the request\n        xhr.onreadystatechange = function() {\n            // if the request is ready\n            if (4 === xhr.readyState) {\n                // get the cached html document\n                var cachedDocument = xhr._cachedDocument;\n                // ensure the cached html document based on the xhr response\n                cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"),\n                    cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n                    xhr._embeds.splice(0).map(function(item) {\n                        // get the cached target\n                        var target = xhr._cachedTarget[item.id];\n                        // ensure the cached target\n                        target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)),\n                            // embed the target into the svg\n                            embed(item.parent, item.svg, target);\n                    });\n            }\n        }, // test the ready state change immediately\n            xhr.onreadystatechange();\n    }\n    function svg4everybody(rawopts) {\n        function oninterval() {\n            // while the index exists in the live <use> collection\n            for (// get the cached <use> index\n                var index = 0; index < uses.length; ) {\n                // get the current <use>\n                var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n                if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)),\n                svg && src) {\n                    if (polyfill) {\n                        if (!opts.validate || opts.validate(src, svg, use)) {\n                            // remove the <use> element\n                            parent.removeChild(use);\n                            // parse the src and get the url and id\n                            var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n                            // if the link is external\n                            if (url.length) {\n                                // get the cached xhr request\n                                var xhr = requests[url];\n                                // ensure the xhr request exists\n                                xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(),\n                                    xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n                                    xhr._embeds.push({\n                                        parent: parent,\n                                        svg: svg,\n                                        id: id\n                                    }), // prepare the xhr ready state change event\n                                    loadreadystatechange(xhr);\n                            } else {\n                                // embed the local id into the svg\n                                embed(parent, svg, document.getElementById(id));\n                            }\n                        } else {\n                            // increase the index when the previous value was not \"valid\"\n                            ++index, ++numberOfSvgUseElementsToBypass;\n                        }\n                    }\n                } else {\n                    // increase the index when the previous value was not \"valid\"\n                    ++index;\n                }\n            }\n            // continue the interval\n            (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n        }\n        var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n        polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n        // create xhr requests object\n        var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n        // conditionally start the interval if the polyfill is active\n        polyfill && oninterval();\n    }\n    function getSVGAncestor(node) {\n        for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n        return svg;\n    }\n    return svg4everybody;\n});\n","// Utility function\nfunction Util () {};\n\n/*\n\tclass manipulation functions\n*/\nUtil.hasClass = function(el, className) {\n    if (el.classList) return el.classList.contains(className);\n    else return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'));\n};\n\nUtil.addClass = function(el, className) {\n    var classList = className.split(' ');\n    if (el.classList) el.classList.add(classList[0]);\n    else if (!Util.hasClass(el, classList[0])) el.className += \" \" + classList[0];\n    if (classList.length > 1) Util.addClass(el, classList.slice(1).join(' '));\n};\n\nUtil.removeClass = function(el, className) {\n    var classList = className.split(' ');\n    if (el.classList) el.classList.remove(classList[0]);\n    else if(Util.hasClass(el, classList[0])) {\n        var reg = new RegExp('(\\\\s|^)' + classList[0] + '(\\\\s|$)');\n        el.className=el.className.replace(reg, ' ');\n    }\n    if (classList.length > 1) Util.removeClass(el, classList.slice(1).join(' '));\n};\n\nUtil.toggleClass = function(el, className, bool) {\n    if(bool) Util.addClass(el, className);\n    else Util.removeClass(el, className);\n};\n\nUtil.setAttributes = function(el, attrs) {\n    for(var key in attrs) {\n        el.setAttribute(key, attrs[key]);\n    }\n};\n\n/*\n  DOM manipulation\n*/\nUtil.getChildrenByClassName = function(el, className) {\n    var children = el.children,\n        childrenByClass = [];\n    for (var i = 0; i < el.children.length; i++) {\n        if (Util.hasClass(el.children[i], className)) childrenByClass.push(el.children[i]);\n    }\n    return childrenByClass;\n};\n\nUtil.is = function(elem, selector) {\n    if(selector.nodeType){\n        return elem === selector;\n    }\n\n    var qa = (typeof(selector) === 'string' ? document.querySelectorAll(selector) : selector),\n        length = qa.length,\n        returnArr = [];\n\n    while(length--){\n        if(qa[length] === elem){\n            return true;\n        }\n    }\n\n    return false;\n};\n\n/*\n\tAnimate height of an element\n*/\nUtil.setHeight = function(start, to, element, duration, cb) {\n    var change = to - start,\n        currentTime = null;\n\n    var animateHeight = function(timestamp){\n        if (!currentTime) currentTime = timestamp;\n        var progress = timestamp - currentTime;\n        var val = parseInt((progress/duration)*change + start);\n        element.style.height = val+\"px\";\n        if(progress < duration) {\n            window.requestAnimationFrame(animateHeight);\n        } else {\n            cb();\n        }\n    };\n\n    //set the height of the element before starting animation -> fix bug on Safari\n    element.style.height = start+\"px\";\n    window.requestAnimationFrame(animateHeight);\n};\n\n/*\n\tSmooth Scroll\n*/\n\nUtil.scrollTo = function(final, duration, cb, scrollEl) {\n    var element = scrollEl || window;\n    var start = element.scrollTop || document.documentElement.scrollTop,\n        currentTime = null;\n\n    if(!scrollEl) start = window.scrollY || document.documentElement.scrollTop;\n\n    var animateScroll = function(timestamp){\n        if (!currentTime) currentTime = timestamp;\n        var progress = timestamp - currentTime;\n        if(progress > duration) progress = duration;\n        var val = Math.easeInOutQuad(progress, start, final-start, duration);\n        element.scrollTo(0, val);\n        if(progress < duration) {\n            window.requestAnimationFrame(animateScroll);\n        } else {\n            cb && cb();\n        }\n    };\n\n    window.requestAnimationFrame(animateScroll);\n};\n\n/*\n  Focus utility classes\n*/\n\n//Move focus to an element\nUtil.moveFocus = function (element) {\n    if( !element ) element = document.getElementsByTagName(\"body\")[0];\n    element.focus();\n    if (document.activeElement !== element) {\n        element.setAttribute('tabindex','-1');\n        element.focus();\n    }\n};\n\n/*\n  Misc\n*/\n\nUtil.getIndexInArray = function(array, el) {\n    return Array.prototype.indexOf.call(array, el);\n};\n\nUtil.cssSupports = function(property, value) {\n    if('CSS' in window) {\n        return CSS.supports(property, value);\n    } else {\n        var jsProperty = property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase();});\n        return jsProperty in document.body.style;\n    }\n};\n\n// merge a set of user options into plugin defaults\n// https://gomakethings.com/vanilla-javascript-version-of-jquery-extend/\nUtil.extend = function() {\n    // Variables\n    var extended = {};\n    var deep = false;\n    var i = 0;\n    var length = arguments.length;\n\n    // Check if a deep merge\n    if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\n        deep = arguments[0];\n        i++;\n    }\n\n    // Merge the object into the extended object\n    var merge = function (obj) {\n        for ( var prop in obj ) {\n            if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\n                // If deep merge and property is an object, merge properties\n                if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\n                    extended[prop] = extend( true, extended[prop], obj[prop] );\n                } else {\n                    extended[prop] = obj[prop];\n                }\n            }\n        }\n    };\n\n    // Loop through each object and conduct a merge\n    for ( ; i < length; i++ ) {\n        var obj = arguments[i];\n        merge(obj);\n    }\n\n    return extended;\n};\n\n// Check if Reduced Motion is enabled\nUtil.osHasReducedMotion = function() {\n    if(!window.matchMedia) return false;\n    var matchMediaObj = window.matchMedia('(prefers-reduced-motion: reduce)');\n    if(matchMediaObj) return matchMediaObj.matches;\n    return false; // return false if not supported\n};\n\n/*\n\tPolyfills\n*/\n//Closest() method\nif (!Element.prototype.matches) {\n    Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\nif (!Element.prototype.closest) {\n    Element.prototype.closest = function(s) {\n        var el = this;\n        if (!document.documentElement.contains(el)) return null;\n        do {\n            if (el.matches(s)) return el;\n            el = el.parentElement || el.parentNode;\n        } while (el !== null && el.nodeType === 1);\n        return null;\n    };\n}\n\n//Custom Event() constructor\nif ( typeof window.CustomEvent !== \"function\" ) {\n\n    function CustomEvent ( event, params ) {\n        params = params || { bubbles: false, cancelable: false, detail: undefined };\n        var evt = document.createEvent( 'CustomEvent' );\n        evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n        return evt;\n    }\n\n    CustomEvent.prototype = window.Event.prototype;\n\n    window.CustomEvent = CustomEvent;\n}\n\n/*\n\tAnimation curves\n*/\nMath.easeInOutQuad = function (t, b, c, d) {\n    t /= d/2;\n    if (t < 1) return c/2*t*t + b;\n    t--;\n    return -c/2 * (t*(t-2) - 1) + b;\n};\n\n\n/* JS Utility Classes */\n(function() {\n    // make focus ring visible only for keyboard navigation (i.e., tab key)\n    var focusTab = document.getElementsByClassName('js-tab-focus');\n    function detectClick() {\n        if(focusTab.length > 0) {\n            resetFocusTabs(false);\n            window.addEventListener('keydown', detectTab);\n        }\n        window.removeEventListener('mousedown', detectClick);\n    };\n\n    function detectTab(event) {\n        if(event.keyCode !== 9) return;\n        resetFocusTabs(true);\n        window.removeEventListener('keydown', detectTab);\n        window.addEventListener('mousedown', detectClick);\n    };\n\n    function resetFocusTabs(bool) {\n        var outlineStyle = bool ? '' : 'none';\n        for(var i = 0; i < focusTab.length; i++) {\n            focusTab[i].style.setProperty('outline', outlineStyle);\n        }\n    };\n    window.addEventListener('mousedown', detectClick);\n}());","/**\n * Sharer.js\n *\n * @description Create your own social share buttons\n * @version 0.4.0\n * @author Ellison Leao <ellisonleao@gmail.com>\n * @license GPLv3\n *\n */\n\n(function(window, document) {\n    'use strict';\n    /**\n     * @constructor\n     */\n    var Sharer = function(elem) {\n        this.elem = elem;\n    };\n\n    /**\n     *  @function init\n     *  @description bind the events for multiple sharer elements\n     *  @returns {Empty}\n     */\n    Sharer.init = function() {\n        var elems = document.querySelectorAll('[data-sharer]'),\n            i,\n            l = elems.length;\n\n        for (i = 0; i < l; i++) {\n            elems[i].addEventListener('click', Sharer.add);\n        }\n    };\n\n    /**\n     *  @function add\n     *  @description bind the share event for a single dom element\n     *  @returns {Empty}\n     */\n    Sharer.add = function(elem) {\n        var target = elem.currentTarget || elem.srcElement;\n        var sharer = new Sharer(target);\n        sharer.share();\n    };\n\n    // instance methods\n    Sharer.prototype = {\n        constructor: Sharer,\n        /**\n         *  @function getValue\n         *  @description Helper to get the attribute of a DOM element\n         *  @param {String} attr DOM element attribute\n         *  @returns {String|Empty} returns the attr value or empty string\n         */\n        getValue: function(attr) {\n            var val = this.elem.getAttribute('data-' + attr);\n            // handing facebook hashtag attribute\n            if (val && attr === 'hashtag') {\n                if (!val.startsWith('#')) {\n                    val = '#' + val;\n                }\n            }\n            return val;\n        },\n\n        /**\n         * @event share\n         * @description Main share event. Will pop a window or redirect to a link\n         * based on the data-sharer attribute.\n         */\n        share: function() {\n            var sharer = this.getValue('sharer').toLowerCase(),\n                sharers = {\n                    facebook: {\n                        shareUrl: 'https://www.facebook.com/sharer/sharer.php',\n                        params: {\n                            u: this.getValue('url'),\n                            hashtag: this.getValue('hashtag')\n                        }\n                    },\n                    linkedin: {\n                        shareUrl: 'https://www.linkedin.com/shareArticle',\n                        params: {\n                            url: this.getValue('url'),\n                            mini: true\n                        }\n                    },\n                    email: {\n                        shareUrl: 'mailto:' + this.getValue('to') || '',\n                        params: {\n                            subject: this.getValue('subject'),\n                            body: this.getValue('title') + '\\n' + this.getValue('url')\n                        },\n                        isLink: true\n                    },\n                    whatsapp: {\n                        shareUrl: this.getValue('web') !== null ? 'https://api.whatsapp.com/send' : 'whatsapp://send',\n                        params: {\n                            text: this.getValue('title') + ' ' + this.getValue('url')\n                        },\n                        isLink: true\n                    },\n                },\n                s = sharers[sharer];\n\n            // custom popups sizes\n            if (s) {\n                s.width = this.getValue('width');\n                s.height = this.getValue('height');\n            }\n            return s !== undefined ? this.urlSharer(s) : false;\n        },\n        /**\n         * @event urlSharer\n         * @param {Object} sharer\n         */\n        urlSharer: function(sharer) {\n            var p = sharer.params || {},\n                keys = Object.keys(p),\n                i,\n                str = keys.length > 0 ? '?' : '';\n            for (i = 0; i < keys.length; i++) {\n                if (str !== '?') {\n                    str += '&';\n                }\n                if (p[keys[i]]) {\n                    str += keys[i] + '=' + encodeURIComponent(p[keys[i]]);\n                }\n            }\n            sharer.shareUrl += str;\n\n            if (!sharer.isLink) {\n                var popWidth = sharer.width || 600,\n                    popHeight = sharer.height || 480,\n                    left = window.innerWidth / 2 - popWidth / 2 + window.screenX,\n                    top = window.innerHeight / 2 - popHeight / 2 + window.screenY,\n                    popParams = 'scrollbars=no, width=' + popWidth + ', height=' + popHeight + ', top=' + top + ', left=' + left,\n                    newWindow = window.open(sharer.shareUrl, '', popParams);\n\n                if (window.focus) {\n                    newWindow.focus();\n                }\n            } else {\n                window.location.href = sharer.shareUrl;\n            }\n        }\n    };\n\n    // adding sharer events on domcontentload\n    if (document.readyState === 'complete' || document.readyState !== 'loading') {\n        Sharer.init();\n    } else {\n        document.addEventListener('DOMContentLoaded', Sharer.init);\n    }\n\n    // turbolinks 3 compatibility\n    window.addEventListener('page:load', Sharer.init);\n\n    // turbolinks 5 compatibility\n    window.addEventListener('turbolinks:load', Sharer.init);\n\n    // exporting sharer for external usage\n    window.Sharer = Sharer;\n})(window, document);\n","/**\n * Swiper 5.3.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 10, 2020\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n      typeof define === 'function' && define.amd ? define(factory) :\n          (global = global || self, global.Swiper = factory());\n}(this, function () { 'use strict';\n\n  /**\n   * SSR Window 1.0.1\n   * Better handling for window object in SSR environment\n   * https://github.com/nolimits4web/ssr-window\n   *\n   * Copyright 2018, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: July 18, 2018\n   */\n  var doc = (typeof document === 'undefined') ? {\n    body: {},\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    activeElement: {\n      blur: function blur() {},\n      nodeName: '',\n    },\n    querySelector: function querySelector() {\n      return null;\n    },\n    querySelectorAll: function querySelectorAll() {\n      return [];\n    },\n    getElementById: function getElementById() {\n      return null;\n    },\n    createEvent: function createEvent() {\n      return {\n        initEvent: function initEvent() {},\n      };\n    },\n    createElement: function createElement() {\n      return {\n        children: [],\n        childNodes: [],\n        style: {},\n        setAttribute: function setAttribute() {},\n        getElementsByTagName: function getElementsByTagName() {\n          return [];\n        },\n      };\n    },\n    location: { hash: '' },\n  } : document; // eslint-disable-line\n\n  var win = (typeof window === 'undefined') ? {\n    document: doc,\n    navigator: {\n      userAgent: '',\n    },\n    location: {},\n    history: {},\n    CustomEvent: function CustomEvent() {\n      return this;\n    },\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    getComputedStyle: function getComputedStyle() {\n      return {\n        getPropertyValue: function getPropertyValue() {\n          return '';\n        },\n      };\n    },\n    Image: function Image() {},\n    Date: function Date() {},\n    screen: {},\n    setTimeout: function setTimeout() {},\n    clearTimeout: function clearTimeout() {},\n  } : window; // eslint-disable-line\n\n  /**\n   * Dom7 2.1.3\n   * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n   * http://framework7.io/docs/dom.html\n   *\n   * Copyright 2019, Vladimir Kharlampidi\n   * The iDangero.us\n   * http://www.idangero.us/\n   *\n   * Licensed under MIT\n   *\n   * Released on: February 11, 2019\n   */\n\n  var Dom7 = function Dom7(arr) {\n    var self = this;\n    // Create array-like object\n    for (var i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  };\n\n  function $(selector, context) {\n    var arr = [];\n    var i = 0;\n    if (selector && !context) {\n      if (selector instanceof Dom7) {\n        return selector;\n      }\n    }\n    if (selector) {\n      // String\n      if (typeof selector === 'string') {\n        var els;\n        var tempParent;\n        var html = selector.trim();\n        if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n          var toCreate = 'div';\n          if (html.indexOf('<li') === 0) { toCreate = 'ul'; }\n          if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }\n          if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }\n          if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }\n          if (html.indexOf('<option') === 0) { toCreate = 'select'; }\n          tempParent = doc.createElement(toCreate);\n          tempParent.innerHTML = html;\n          for (i = 0; i < tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n            // Pure ID selector\n            els = [doc.getElementById(selector.trim().split('#')[1])];\n          } else {\n            // Other selectors\n            els = (context || doc).querySelectorAll(selector.trim());\n          }\n          for (i = 0; i < els.length; i += 1) {\n            if (els[i]) { arr.push(els[i]); }\n          }\n        }\n      } else if (selector.nodeType || selector === win || selector === doc) {\n        // Node/element\n        arr.push(selector);\n      } else if (selector.length > 0 && selector[0].nodeType) {\n        // Array of elements or instance of Dom\n        for (i = 0; i < selector.length; i += 1) {\n          arr.push(selector[i]);\n        }\n      }\n    }\n    return new Dom7(arr);\n  }\n\n  $.fn = Dom7.prototype;\n  $.Class = Dom7;\n  $.Dom7 = Dom7;\n\n  function unique(arr) {\n    var uniqueArray = [];\n    for (var i = 0; i < arr.length; i += 1) {\n      if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n    }\n    return uniqueArray;\n  }\n\n  // Classes and attributes\n  function addClass(className) {\n    if (typeof className === 'undefined') {\n      return this;\n    }\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function removeClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function hasClass(className) {\n    if (!this[0]) { return false; }\n    return this[0].classList.contains(className);\n  }\n  function toggleClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i < classes.length; i += 1) {\n      for (var j = 0; j < this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function attr(attrs, value) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 1 && typeof attrs === 'string') {\n      // Get attr\n      if (this[0]) { return this[0].getAttribute(attrs); }\n      return undefined;\n    }\n\n    // Set attrs\n    for (var i = 0; i < this.length; i += 1) {\n      if (arguments$1.length === 2) {\n        // String\n        this[i].setAttribute(attrs, value);\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (var attrName in attrs) {\n          this[i][attrName] = attrs[attrName];\n          this[i].setAttribute(attrName, attrs[attrName]);\n        }\n      }\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function removeAttr(attr) {\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].removeAttribute(attr);\n    }\n    return this;\n  }\n  function data(key, value) {\n    var el;\n    if (typeof value === 'undefined') {\n      el = this[0];\n      // Get value\n      if (el) {\n        if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n          return el.dom7ElementDataStorage[key];\n        }\n\n        var dataKey = el.getAttribute((\"data-\" + key));\n        if (dataKey) {\n          return dataKey;\n        }\n        return undefined;\n      }\n      return undefined;\n    }\n\n    // Set value\n    for (var i = 0; i < this.length; i += 1) {\n      el = this[i];\n      if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n      el.dom7ElementDataStorage[key] = value;\n    }\n    return this;\n  }\n  // Transforms\n  // eslint-disable-next-line\n  function transform(transform) {\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransform = transform;\n      elStyle.transform = transform;\n    }\n    return this;\n  }\n  function transition(duration) {\n    if (typeof duration !== 'string') {\n      duration = duration + \"ms\"; // eslint-disable-line\n    }\n    for (var i = 0; i < this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransitionDuration = duration;\n      elStyle.transitionDuration = duration;\n    }\n    return this;\n  }\n  // Events\n  function on() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    function handleLiveEvent(e) {\n      var target = e.target;\n      if (!target) { return; }\n      var eventData = e.target.dom7EventData || [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n      else {\n        var parents = $(target).parents(); // eslint-disable-line\n        for (var k = 0; k < parents.length; k += 1) {\n          if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n        }\n      }\n    }\n    function handleEvent(e) {\n      var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n      if (eventData.indexOf(e) < 0) {\n        eventData.unshift(e);\n      }\n      listener.apply(this, eventData);\n    }\n    var events = eventType.split(' ');\n    var j;\n    for (var i = 0; i < this.length; i += 1) {\n      var el = this[i];\n      if (!targetSelector) {\n        for (j = 0; j < events.length; j += 1) {\n          var event = events[j];\n          if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n          if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n          el.dom7Listeners[event].push({\n            listener: listener,\n            proxyListener: handleEvent,\n          });\n          el.addEventListener(event, handleEvent, capture);\n        }\n      } else {\n        // Live events\n        for (j = 0; j < events.length; j += 1) {\n          var event$1 = events[j];\n          if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n          if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n          el.dom7LiveListeners[event$1].push({\n            listener: listener,\n            proxyListener: handleLiveEvent,\n          });\n          el.addEventListener(event$1, handleLiveEvent, capture);\n        }\n      }\n    }\n    return this;\n  }\n  function off() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    var events = eventType.split(' ');\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var handlers = (void 0);\n        if (!targetSelector && el.dom7Listeners) {\n          handlers = el.dom7Listeners[event];\n        } else if (targetSelector && el.dom7LiveListeners) {\n          handlers = el.dom7LiveListeners[event];\n        }\n        if (handlers && handlers.length) {\n          for (var k = handlers.length - 1; k >= 0; k -= 1) {\n            var handler = handlers[k];\n            if (listener && handler.listener === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (!listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            }\n          }\n        }\n      }\n    }\n    return this;\n  }\n  function trigger() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var events = args[0].split(' ');\n    var eventData = args[1];\n    for (var i = 0; i < events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j < this.length; j += 1) {\n        var el = this[j];\n        var evt = (void 0);\n        try {\n          evt = new win.CustomEvent(event, {\n            detail: eventData,\n            bubbles: true,\n            cancelable: true,\n          });\n        } catch (e) {\n          evt = doc.createEvent('Event');\n          evt.initEvent(event, true, true);\n          evt.detail = eventData;\n        }\n        // eslint-disable-next-line\n        el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n    return this;\n  }\n  function transitionEnd(callback) {\n    var events = ['webkitTransitionEnd', 'transitionend'];\n    var dom = this;\n    var i;\n    function fireCallBack(e) {\n      /* jshint validthis:true */\n      if (e.target !== this) { return; }\n      callback.call(this, e);\n      for (i = 0; i < events.length; i += 1) {\n        dom.off(events[i], fireCallBack);\n      }\n    }\n    if (callback) {\n      for (i = 0; i < events.length; i += 1) {\n        dom.on(events[i], fireCallBack);\n      }\n    }\n    return this;\n  }\n  function outerWidth(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n      }\n      return this[0].offsetWidth;\n    }\n    return null;\n  }\n  function outerHeight(includeMargins) {\n    if (this.length > 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n      }\n      return this[0].offsetHeight;\n    }\n    return null;\n  }\n  function offset() {\n    if (this.length > 0) {\n      var el = this[0];\n      var box = el.getBoundingClientRect();\n      var body = doc.body;\n      var clientTop = el.clientTop || body.clientTop || 0;\n      var clientLeft = el.clientLeft || body.clientLeft || 0;\n      var scrollTop = el === win ? win.scrollY : el.scrollTop;\n      var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n      return {\n        top: (box.top + scrollTop) - clientTop,\n        left: (box.left + scrollLeft) - clientLeft,\n      };\n    }\n\n    return null;\n  }\n  function styles() {\n    if (this[0]) { return win.getComputedStyle(this[0], null); }\n    return {};\n  }\n  function css(props, value) {\n    var i;\n    if (arguments.length === 1) {\n      if (typeof props === 'string') {\n        if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n      } else {\n        for (i = 0; i < this.length; i += 1) {\n          // eslint-disable-next-line\n          for (var prop in props) {\n            this[i].style[prop] = props[prop];\n          }\n        }\n        return this;\n      }\n    }\n    if (arguments.length === 2 && typeof props === 'string') {\n      for (i = 0; i < this.length; i += 1) {\n        this[i].style[props] = value;\n      }\n      return this;\n    }\n    return this;\n  }\n  // Iterate over the collection passing elements to `callback`\n  function each(callback) {\n    // Don't bother continuing without a callback\n    if (!callback) { return this; }\n    // Iterate over the current collection\n    for (var i = 0; i < this.length; i += 1) {\n      // If the callback returns false\n      if (callback.call(this[i], i, this[i]) === false) {\n        // End the loop early\n        return this;\n      }\n    }\n    // Return `this` to allow chained DOM operations\n    return this;\n  }\n  function filter(callback) {\n    var matchedItems = [];\n    var dom = this;\n    for (var i = 0; i < dom.length; i += 1) {\n      if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }\n    }\n    return new Dom7(matchedItems);\n  }\n  // eslint-disable-next-line\n  function html(html) {\n    if (typeof html === 'undefined') {\n      return this[0] ? this[0].innerHTML : undefined;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].innerHTML = html;\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function text(text) {\n    if (typeof text === 'undefined') {\n      if (this[0]) {\n        return this[0].textContent.trim();\n      }\n      return null;\n    }\n\n    for (var i = 0; i < this.length; i += 1) {\n      this[i].textContent = text;\n    }\n    return this;\n  }\n  function is(selector) {\n    var el = this[0];\n    var compareWith;\n    var i;\n    if (!el || typeof selector === 'undefined') { return false; }\n    if (typeof selector === 'string') {\n      if (el.matches) { return el.matches(selector); }\n      else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n      else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n      compareWith = $(selector);\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    } else if (selector === doc) { return el === doc; }\n    else if (selector === win) { return el === win; }\n\n    if (selector.nodeType || selector instanceof Dom7) {\n      compareWith = selector.nodeType ? [selector] : selector;\n      for (i = 0; i < compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    }\n    return false;\n  }\n  function index() {\n    var child = this[0];\n    var i;\n    if (child) {\n      i = 0;\n      // eslint-disable-next-line\n      while ((child = child.previousSibling) !== null) {\n        if (child.nodeType === 1) { i += 1; }\n      }\n      return i;\n    }\n    return undefined;\n  }\n  // eslint-disable-next-line\n  function eq(index) {\n    if (typeof index === 'undefined') { return this; }\n    var length = this.length;\n    var returnIndex;\n    if (index > length - 1) {\n      return new Dom7([]);\n    }\n    if (index < 0) {\n      returnIndex = length + index;\n      if (returnIndex < 0) { return new Dom7([]); }\n      return new Dom7([this[returnIndex]]);\n    }\n    return new Dom7([this[index]]);\n  }\n  function append() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var newChild;\n\n    for (var k = 0; k < args.length; k += 1) {\n      newChild = args[k];\n      for (var i = 0; i < this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          var tempDiv = doc.createElement('div');\n          tempDiv.innerHTML = newChild;\n          while (tempDiv.firstChild) {\n            this[i].appendChild(tempDiv.firstChild);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (var j = 0; j < newChild.length; j += 1) {\n            this[i].appendChild(newChild[j]);\n          }\n        } else {\n          this[i].appendChild(newChild);\n        }\n      }\n    }\n\n    return this;\n  }\n  function prepend(newChild) {\n    var i;\n    var j;\n    for (i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = doc.createElement('div');\n        tempDiv.innerHTML = newChild;\n        for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n          this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (j = 0; j < newChild.length; j += 1) {\n          this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n        }\n      } else {\n        this[i].insertBefore(newChild, this[i].childNodes[0]);\n      }\n    }\n    return this;\n  }\n  function next(selector) {\n    if (this.length > 0) {\n      if (selector) {\n        if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n          return new Dom7([this[0].nextElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function nextAll(selector) {\n    var nextEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.nextElementSibling) {\n      var next = el.nextElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(next).is(selector)) { nextEls.push(next); }\n      } else { nextEls.push(next); }\n      el = next;\n    }\n    return new Dom7(nextEls);\n  }\n  function prev(selector) {\n    if (this.length > 0) {\n      var el = this[0];\n      if (selector) {\n        if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n          return new Dom7([el.previousElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function prevAll(selector) {\n    var prevEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.previousElementSibling) {\n      var prev = el.previousElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(prev).is(selector)) { prevEls.push(prev); }\n      } else { prevEls.push(prev); }\n      el = prev;\n    }\n    return new Dom7(prevEls);\n  }\n  function parent(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode !== null) {\n        if (selector) {\n          if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n        } else {\n          parents.push(this[i].parentNode);\n        }\n      }\n    }\n    return $(unique(parents));\n  }\n  function parents(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var parent = this[i].parentNode; // eslint-disable-line\n      while (parent) {\n        if (selector) {\n          if ($(parent).is(selector)) { parents.push(parent); }\n        } else {\n          parents.push(parent);\n        }\n        parent = parent.parentNode;\n      }\n    }\n    return $(unique(parents));\n  }\n  function closest(selector) {\n    var closest = this; // eslint-disable-line\n    if (typeof selector === 'undefined') {\n      return new Dom7([]);\n    }\n    if (!closest.is(selector)) {\n      closest = closest.parents(selector).eq(0);\n    }\n    return closest;\n  }\n  function find(selector) {\n    var foundElements = [];\n    for (var i = 0; i < this.length; i += 1) {\n      var found = this[i].querySelectorAll(selector);\n      for (var j = 0; j < found.length; j += 1) {\n        foundElements.push(found[j]);\n      }\n    }\n    return new Dom7(foundElements);\n  }\n  function children(selector) {\n    var children = []; // eslint-disable-line\n    for (var i = 0; i < this.length; i += 1) {\n      var childNodes = this[i].childNodes;\n\n      for (var j = 0; j < childNodes.length; j += 1) {\n        if (!selector) {\n          if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n        } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n          children.push(childNodes[j]);\n        }\n      }\n    }\n    return new Dom7(unique(children));\n  }\n  function remove() {\n    for (var i = 0; i < this.length; i += 1) {\n      if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n    }\n    return this;\n  }\n  function add() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var dom = this;\n    var i;\n    var j;\n    for (i = 0; i < args.length; i += 1) {\n      var toAdd = $(args[i]);\n      for (j = 0; j < toAdd.length; j += 1) {\n        dom[dom.length] = toAdd[j];\n        dom.length += 1;\n      }\n    }\n    return dom;\n  }\n\n  var Methods = {\n    addClass: addClass,\n    removeClass: removeClass,\n    hasClass: hasClass,\n    toggleClass: toggleClass,\n    attr: attr,\n    removeAttr: removeAttr,\n    data: data,\n    transform: transform,\n    transition: transition,\n    on: on,\n    off: off,\n    trigger: trigger,\n    transitionEnd: transitionEnd,\n    outerWidth: outerWidth,\n    outerHeight: outerHeight,\n    offset: offset,\n    css: css,\n    each: each,\n    html: html,\n    text: text,\n    is: is,\n    index: index,\n    eq: eq,\n    append: append,\n    prepend: prepend,\n    next: next,\n    nextAll: nextAll,\n    prev: prev,\n    prevAll: prevAll,\n    parent: parent,\n    parents: parents,\n    closest: closest,\n    find: find,\n    children: children,\n    filter: filter,\n    remove: remove,\n    add: add,\n    styles: styles,\n  };\n\n  Object.keys(Methods).forEach(function (methodName) {\n    $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n  });\n\n  var Utils = {\n    deleteProps: function deleteProps(obj) {\n      var object = obj;\n      Object.keys(object).forEach(function (key) {\n        try {\n          object[key] = null;\n        } catch (e) {\n          // no getter for object\n        }\n        try {\n          delete object[key];\n        } catch (e) {\n          // something got wrong\n        }\n      });\n    },\n    nextTick: function nextTick(callback, delay) {\n      if ( delay === void 0 ) delay = 0;\n\n      return setTimeout(callback, delay);\n    },\n    now: function now() {\n      return Date.now();\n    },\n    getTranslate: function getTranslate(el, axis) {\n      if ( axis === void 0 ) axis = 'x';\n\n      var matrix;\n      var curTransform;\n      var transformMatrix;\n\n      var curStyle = win.getComputedStyle(el, null);\n\n      if (win.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n        if (curTransform.split(',').length > 6) {\n          curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n        }\n        // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n        transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n      } else {\n        transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n        matrix = transformMatrix.toString().split(',');\n      }\n\n      if (axis === 'x') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[4]); }\n      }\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[5]); }\n      }\n      return curTransform || 0;\n    },\n    parseUrlQuery: function parseUrlQuery(url) {\n      var query = {};\n      var urlToParse = url || win.location.href;\n      var i;\n      var params;\n      var param;\n      var length;\n      if (typeof urlToParse === 'string' && urlToParse.length) {\n        urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n        params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n        length = params.length;\n\n        for (i = 0; i < length; i += 1) {\n          param = params[i].replace(/#\\S+/g, '').split('=');\n          query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n        }\n      }\n      return query;\n    },\n    isObject: function isObject(o) {\n      return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n    },\n    extend: function extend() {\n      var args = [], len$1 = arguments.length;\n      while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n      var to = Object(args[0]);\n      for (var i = 1; i < args.length; i += 1) {\n        var nextSource = args[i];\n        if (nextSource !== undefined && nextSource !== null) {\n          var keysArray = Object.keys(Object(nextSource));\n          for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n            var nextKey = keysArray[nextIndex];\n            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n            if (desc !== undefined && desc.enumerable) {\n              if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                to[nextKey] = {};\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n      }\n      return to;\n    },\n  };\n\n  var Support = (function Support() {\n    return {\n      touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n        return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n      }()),\n\n      pointerEvents: !!win.PointerEvent && ('maxTouchPoints' in win.navigator) && win.navigator.maxTouchPoints > 0,\n\n      observer: (function checkObserver() {\n        return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n      }()),\n\n      passiveListener: (function checkPassiveListener() {\n        var supportsPassive = false;\n        try {\n          var opts = Object.defineProperty({}, 'passive', {\n            // eslint-disable-next-line\n            get: function get() {\n              supportsPassive = true;\n            },\n          });\n          win.addEventListener('testPassiveListener', null, opts);\n        } catch (e) {\n          // No support\n        }\n        return supportsPassive;\n      }()),\n\n      gestures: (function checkGestures() {\n        return 'ongesturestart' in win;\n      }()),\n    };\n  }());\n\n  var SwiperClass = function SwiperClass(params) {\n    if ( params === void 0 ) params = {};\n\n    var self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach(function (eventName) {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  };\n\n  var staticAccessors = { components: { configurable: true } };\n\n  SwiperClass.prototype.on = function on (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.once = function once (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    function onceHandler() {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  };\n\n  SwiperClass.prototype.off = function off (events, handler) {\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach(function (eventHandler, index) {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.emit = function emit () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    var events;\n    var data;\n    var context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        var handlers = [];\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  };\n\n  SwiperClass.prototype.useModules = function useModules (modulesParams) {\n    if ( modulesParams === void 0 ) modulesParams = {};\n\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach(function (modulePropName) {\n          var moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  };\n\n  staticAccessors.components.set = function (components) {\n    var Class = this;\n    if (!Class.use) { return; }\n    Class.use(components);\n  };\n\n  SwiperClass.installModule = function installModule (module) {\n    var params = [], len = arguments.length - 1;\n    while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n    var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach(function (key) {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach(function (key) {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  };\n\n  SwiperClass.use = function use (module) {\n    var params = [], len = arguments.length - 1;\n    while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (Array.isArray(module)) {\n      module.forEach(function (m) { return Class.installModule(m); });\n      return Class;\n    }\n    return Class.installModule.apply(Class, [ module ].concat( params ));\n  };\n\n  Object.defineProperties( SwiperClass, staticAccessors );\n\n  function updateSize () {\n    var swiper = this;\n    var width;\n    var height;\n    var $el = swiper.$el;\n    if (typeof swiper.params.width !== 'undefined') {\n      width = swiper.params.width;\n    } else {\n      width = $el[0].clientWidth;\n    }\n    if (typeof swiper.params.height !== 'undefined') {\n      height = swiper.params.height;\n    } else {\n      height = $el[0].clientHeight;\n    }\n    if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n      return;\n    }\n\n    // Subtract paddings\n    width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n    height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n    Utils.extend(swiper, {\n      width: width,\n      height: height,\n      size: swiper.isHorizontal() ? width : height,\n    });\n  }\n\n  function updateSlides () {\n    var swiper = this;\n    var params = swiper.params;\n\n    var $wrapperEl = swiper.$wrapperEl;\n    var swiperSize = swiper.size;\n    var rtl = swiper.rtlTranslate;\n    var wrongRTL = swiper.wrongRTL;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n    var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n    var snapGrid = [];\n    var slidesGrid = [];\n    var slidesSizesGrid = [];\n\n    function slidesForMargin(slideIndex) {\n      if (!params.cssMode) { return true; }\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }\n\n    var offsetBefore = params.slidesOffsetBefore;\n    if (typeof offsetBefore === 'function') {\n      offsetBefore = params.slidesOffsetBefore.call(swiper);\n    }\n\n    var offsetAfter = params.slidesOffsetAfter;\n    if (typeof offsetAfter === 'function') {\n      offsetAfter = params.slidesOffsetAfter.call(swiper);\n    }\n\n    var previousSnapGridLength = swiper.snapGrid.length;\n    var previousSlidesGridLength = swiper.snapGrid.length;\n\n    var spaceBetween = params.spaceBetween;\n    var slidePosition = -offsetBefore;\n    var prevSlideSize = 0;\n    var index = 0;\n    if (typeof swiperSize === 'undefined') {\n      return;\n    }\n    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n      spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n    }\n\n    swiper.virtualSize = -spaceBetween;\n\n    // reset margins\n    if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n    else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n    var slidesNumberEvenToRows;\n    if (params.slidesPerColumn > 1) {\n      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n        slidesNumberEvenToRows = slidesLength;\n      } else {\n        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n      }\n      if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n      }\n    }\n\n    // Calc slides\n    var slideSize;\n    var slidesPerColumn = params.slidesPerColumn;\n    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n    for (var i = 0; i < slidesLength; i += 1) {\n      slideSize = 0;\n      var slide = slides.eq(i);\n      if (params.slidesPerColumn > 1) {\n        // Set slides order\n        var newSlideOrderIndex = (void 0);\n        var column = (void 0);\n        var row = (void 0);\n        if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n          var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n          var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n          var columnsInGroup = groupIndex === 0\n              ? params.slidesPerGroup\n              : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n          newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n          slide\n              .css({\n                '-webkit-box-ordinal-group': newSlideOrderIndex,\n                '-moz-box-ordinal-group': newSlideOrderIndex,\n                '-ms-flex-order': newSlideOrderIndex,\n                '-webkit-order': newSlideOrderIndex,\n                order: newSlideOrderIndex,\n              });\n        } else if (params.slidesPerColumnFill === 'column') {\n          column = Math.floor(i / slidesPerColumn);\n          row = i - (column * slidesPerColumn);\n          if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n            row += 1;\n            if (row >= slidesPerColumn) {\n              row = 0;\n              column += 1;\n            }\n          }\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - (row * slidesPerRow);\n        }\n        slide.css(\n            (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n            (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n        );\n      }\n      if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n      if (params.slidesPerView === 'auto') {\n        var slideStyles = win.getComputedStyle(slide[0], null);\n        var currentTransform = slide[0].style.transform;\n        var currentWebKitTransform = slide[0].style.webkitTransform;\n        if (currentTransform) {\n          slide[0].style.transform = 'none';\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = 'none';\n        }\n        if (params.roundLengths) {\n          slideSize = swiper.isHorizontal()\n              ? slide.outerWidth(true)\n              : slide.outerHeight(true);\n        } else {\n          // eslint-disable-next-line\n          if (swiper.isHorizontal()) {\n            var width = parseFloat(slideStyles.getPropertyValue('width'));\n            var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n            var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n            var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n            var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n            var boxSizing = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing && boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n            }\n          } else {\n            var height = parseFloat(slideStyles.getPropertyValue('height'));\n            var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n            var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n            var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n            var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n            var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing$1 && boxSizing$1 === 'border-box') {\n              slideSize = height + marginTop + marginBottom;\n            } else {\n              slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n            }\n          }\n        }\n        if (currentTransform) {\n          slide[0].style.transform = currentTransform;\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = currentWebKitTransform;\n        }\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n      } else {\n        slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n        if (slides[i]) {\n          if (swiper.isHorizontal()) {\n            slides[i].style.width = slideSize + \"px\";\n          } else {\n            slides[i].style.height = slideSize + \"px\";\n          }\n        }\n      }\n      if (slides[i]) {\n        slides[i].swiperSlideSize = slideSize;\n      }\n      slidesSizesGrid.push(slideSize);\n\n\n      if (params.centeredSlides) {\n        slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n        if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n      } else {\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n        slidePosition = slidePosition + slideSize + spaceBetween;\n      }\n\n      swiper.virtualSize += slideSize + spaceBetween;\n\n      prevSlideSize = slideSize;\n\n      index += 1;\n    }\n    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n    var newSlidesGrid;\n\n    if (\n        rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n      $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n    }\n    if (params.setWrapperSize) {\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n    }\n\n    if (params.slidesPerColumn > 1) {\n      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      if (params.centeredSlides) {\n        newSlidesGrid = [];\n        for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n          var slidesGridItem = snapGrid[i$1];\n          if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n          if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n        }\n        snapGrid = newSlidesGrid;\n      }\n    }\n\n    // Remove last grid elements depending on width\n    if (!params.centeredSlides) {\n      newSlidesGrid = [];\n      for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n        var slidesGridItem$1 = snapGrid[i$2];\n        if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n        if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n          newSlidesGrid.push(slidesGridItem$1);\n        }\n      }\n      snapGrid = newSlidesGrid;\n      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n        snapGrid.push(swiper.virtualSize - swiperSize);\n      }\n    }\n    if (snapGrid.length === 0) { snapGrid = [0]; }\n\n    if (params.spaceBetween !== 0) {\n      if (swiper.isHorizontal()) {\n        if (rtl) { slides.filter(slidesForMargin).css({ marginLeft: (spaceBetween + \"px\") }); }\n        else { slides.filter(slidesForMargin).css({ marginRight: (spaceBetween + \"px\") }); }\n      } else { slides.filter(slidesForMargin).css({ marginBottom: (spaceBetween + \"px\") }); }\n    }\n\n    if (params.centeredSlides && params.centeredSlidesBounds) {\n      var allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize -= params.spaceBetween;\n      var maxSnap = allSlidesSize - swiperSize;\n      snapGrid = snapGrid.map(function (snap) {\n        if (snap < 0) { return -offsetBefore; }\n        if (snap > maxSnap) { return maxSnap + offsetAfter; }\n        return snap;\n      });\n    }\n\n    if (params.centerInsufficientSlides) {\n      var allSlidesSize$1 = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize$1 += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize$1 -= params.spaceBetween;\n      if (allSlidesSize$1 < swiperSize) {\n        var allSlidesOffset = (swiperSize - allSlidesSize$1) / 2;\n        snapGrid.forEach(function (snap, snapIndex) {\n          snapGrid[snapIndex] = snap - allSlidesOffset;\n        });\n        slidesGrid.forEach(function (snap, snapIndex) {\n          slidesGrid[snapIndex] = snap + allSlidesOffset;\n        });\n      }\n    }\n\n    Utils.extend(swiper, {\n      slides: slides,\n      snapGrid: snapGrid,\n      slidesGrid: slidesGrid,\n      slidesSizesGrid: slidesSizesGrid,\n    });\n\n    if (slidesLength !== previousSlidesLength) {\n      swiper.emit('slidesLengthChange');\n    }\n    if (snapGrid.length !== previousSnapGridLength) {\n      if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n      swiper.emit('snapGridLengthChange');\n    }\n    if (slidesGrid.length !== previousSlidesGridLength) {\n      swiper.emit('slidesGridLengthChange');\n    }\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateSlidesOffset();\n    }\n  }\n\n  function updateAutoHeight (speed) {\n    var swiper = this;\n    var activeSlides = [];\n    var newHeight = 0;\n    var i;\n    if (typeof speed === 'number') {\n      swiper.setTransition(speed);\n    } else if (speed === true) {\n      swiper.setTransition(swiper.params.speed);\n    }\n    // Find slides currently in view\n    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) { break; }\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    } else {\n      activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n    }\n\n    // Find new height from highest slide in view\n    for (i = 0; i < activeSlides.length; i += 1) {\n      if (typeof activeSlides[i] !== 'undefined') {\n        var height = activeSlides[i].offsetHeight;\n        newHeight = height > newHeight ? height : newHeight;\n      }\n    }\n\n    // Update Height\n    if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n  }\n\n  function updateSlidesOffset () {\n    var swiper = this;\n    var slides = swiper.slides;\n    for (var i = 0; i < slides.length; i += 1) {\n      slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n    }\n  }\n\n  function updateSlidesProgress (translate) {\n    if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n    var swiper = this;\n    var params = swiper.params;\n\n    var slides = swiper.slides;\n    var rtl = swiper.rtlTranslate;\n\n    if (slides.length === 0) { return; }\n    if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n    var offsetCenter = -translate;\n    if (rtl) { offsetCenter = translate; }\n\n    // Visible Slides\n    slides.removeClass(params.slideVisibleClass);\n\n    swiper.visibleSlidesIndexes = [];\n    swiper.visibleSlides = [];\n\n    for (var i = 0; i < slides.length; i += 1) {\n      var slide = slides[i];\n      var slideProgress = (\n          (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n      ) / (slide.swiperSlideSize + params.spaceBetween);\n      if (params.watchSlidesVisibility) {\n        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n            || (slideAfter > 1 && slideAfter <= swiper.size)\n            || (slideBefore <= 0 && slideAfter >= swiper.size);\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n      }\n      slide.progress = rtl ? -slideProgress : slideProgress;\n    }\n    swiper.visibleSlides = $(swiper.visibleSlides);\n  }\n\n  function updateProgress (translate) {\n    var swiper = this;\n    if (typeof translate === 'undefined') {\n      var multiplier = swiper.rtlTranslate ? -1 : 1;\n      // eslint-disable-next-line\n      translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n    }\n    var params = swiper.params;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    var progress = swiper.progress;\n    var isBeginning = swiper.isBeginning;\n    var isEnd = swiper.isEnd;\n    var wasBeginning = isBeginning;\n    var wasEnd = isEnd;\n    if (translatesDiff === 0) {\n      progress = 0;\n      isBeginning = true;\n      isEnd = true;\n    } else {\n      progress = (translate - swiper.minTranslate()) / (translatesDiff);\n      isBeginning = progress <= 0;\n      isEnd = progress >= 1;\n    }\n    Utils.extend(swiper, {\n      progress: progress,\n      isBeginning: isBeginning,\n      isEnd: isEnd,\n    });\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n    if (isBeginning && !wasBeginning) {\n      swiper.emit('reachBeginning toEdge');\n    }\n    if (isEnd && !wasEnd) {\n      swiper.emit('reachEnd toEdge');\n    }\n    if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n      swiper.emit('fromEdge');\n    }\n\n    swiper.emit('progress', progress);\n  }\n\n  function updateSlidesClasses () {\n    var swiper = this;\n\n    var slides = swiper.slides;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n    var realIndex = swiper.realIndex;\n    var isVirtual = swiper.virtual && params.virtual.enabled;\n\n    slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n    var activeSlide;\n    if (isVirtual) {\n      activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n    } else {\n      activeSlide = slides.eq(activeIndex);\n    }\n\n    // Active classes\n    activeSlide.addClass(params.slideActiveClass);\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (activeSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n            .addClass(params.slideDuplicateActiveClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n            .addClass(params.slideDuplicateActiveClass);\n      }\n    }\n    // Next Slide\n    var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n    if (params.loop && nextSlide.length === 0) {\n      nextSlide = slides.eq(0);\n      nextSlide.addClass(params.slideNextClass);\n    }\n    // Prev Slide\n    var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n    if (params.loop && prevSlide.length === 0) {\n      prevSlide = slides.eq(-1);\n      prevSlide.addClass(params.slidePrevClass);\n    }\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (nextSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicateNextClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicateNextClass);\n      }\n      if (prevSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicatePrevClass);\n      } else {\n        $wrapperEl\n            .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n            .addClass(params.slideDuplicatePrevClass);\n      }\n    }\n  }\n\n  function updateActiveIndex (newActiveIndex) {\n    var swiper = this;\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var params = swiper.params;\n    var previousIndex = swiper.activeIndex;\n    var previousRealIndex = swiper.realIndex;\n    var previousSnapIndex = swiper.snapIndex;\n    var activeIndex = newActiveIndex;\n    var snapIndex;\n    if (typeof activeIndex === 'undefined') {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (typeof slidesGrid[i + 1] !== 'undefined') {\n          if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n            activeIndex = i;\n          } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n            activeIndex = i + 1;\n          }\n        } else if (translate >= slidesGrid[i]) {\n          activeIndex = i;\n        }\n      }\n      // Normalize slideIndex\n      if (params.normalizeSlideIndex) {\n        if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n      }\n    }\n    if (snapGrid.indexOf(translate) >= 0) {\n      snapIndex = snapGrid.indexOf(translate);\n    } else {\n      var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n    }\n    if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n    if (activeIndex === previousIndex) {\n      if (snapIndex !== previousSnapIndex) {\n        swiper.snapIndex = snapIndex;\n        swiper.emit('snapIndexChange');\n      }\n      return;\n    }\n\n    // Get real index\n    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n    Utils.extend(swiper, {\n      snapIndex: snapIndex,\n      realIndex: realIndex,\n      previousIndex: previousIndex,\n      activeIndex: activeIndex,\n    });\n    swiper.emit('activeIndexChange');\n    swiper.emit('snapIndexChange');\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    if (swiper.initialized || swiper.runCallbacksOnInit) {\n      swiper.emit('slideChange');\n    }\n  }\n\n  function updateClickedSlide (e) {\n    var swiper = this;\n    var params = swiper.params;\n    var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n    var slideFound = false;\n    if (slide) {\n      for (var i = 0; i < swiper.slides.length; i += 1) {\n        if (swiper.slides[i] === slide) { slideFound = true; }\n      }\n    }\n\n    if (slide && slideFound) {\n      swiper.clickedSlide = slide;\n      if (swiper.virtual && swiper.params.virtual.enabled) {\n        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n      } else {\n        swiper.clickedIndex = $(slide).index();\n      }\n    } else {\n      swiper.clickedSlide = undefined;\n      swiper.clickedIndex = undefined;\n      return;\n    }\n    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n      swiper.slideToClickedSlide();\n    }\n  }\n\n  var update = {\n    updateSize: updateSize,\n    updateSlides: updateSlides,\n    updateAutoHeight: updateAutoHeight,\n    updateSlidesOffset: updateSlidesOffset,\n    updateSlidesProgress: updateSlidesProgress,\n    updateProgress: updateProgress,\n    updateSlidesClasses: updateSlidesClasses,\n    updateActiveIndex: updateActiveIndex,\n    updateClickedSlide: updateClickedSlide,\n  };\n\n  function getTranslate (axis) {\n    if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n    var swiper = this;\n\n    var params = swiper.params;\n    var rtl = swiper.rtlTranslate;\n    var translate = swiper.translate;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    if (params.virtualTranslate) {\n      return rtl ? -translate : translate;\n    }\n    if (params.cssMode) {\n      return translate;\n    }\n\n    var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n    if (rtl) { currentTranslate = -currentTranslate; }\n\n    return currentTranslate || 0;\n  }\n\n  function setTranslate (translate, byController) {\n    var swiper = this;\n    var rtl = swiper.rtlTranslate;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var wrapperEl = swiper.wrapperEl;\n    var progress = swiper.progress;\n    var x = 0;\n    var y = 0;\n    var z = 0;\n\n    if (swiper.isHorizontal()) {\n      x = rtl ? -translate : translate;\n    } else {\n      y = translate;\n    }\n\n    if (params.roundLengths) {\n      x = Math.floor(x);\n      y = Math.floor(y);\n    }\n\n    if (params.cssMode) {\n      wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n    } else if (!params.virtualTranslate) {\n      $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\"));\n    }\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? x : y;\n\n    // Check if we need to update progress\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== progress) {\n      swiper.updateProgress(translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, byController);\n  }\n\n  function minTranslate () {\n    return (-this.snapGrid[0]);\n  }\n\n  function maxTranslate () {\n    return (-this.snapGrid[this.snapGrid.length - 1]);\n  }\n\n  function translateTo (translate, speed, runCallbacks, translateBounds, internal) {\n    var obj;\n\n    if ( translate === void 0 ) translate = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( translateBounds === void 0 ) translateBounds = true;\n    var swiper = this;\n\n    var params = swiper.params;\n    var wrapperEl = swiper.wrapperEl;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var minTranslate = swiper.minTranslate();\n    var maxTranslate = swiper.maxTranslate();\n    var newTranslate;\n    if (translateBounds && translate > minTranslate) { newTranslate = minTranslate; }\n    else if (translateBounds && translate < maxTranslate) { newTranslate = maxTranslate; }\n    else { newTranslate = translate; }\n\n    // Update progress\n    swiper.updateProgress(newTranslate);\n\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -newTranslate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        }\n      }\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(newTranslate);\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionEnd');\n      }\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(newTranslate);\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionStart');\n      }\n      if (!swiper.animating) {\n        swiper.animating = true;\n        if (!swiper.onTranslateToWrapperTransitionEnd) {\n          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.onTranslateToWrapperTransitionEnd = null;\n            delete swiper.onTranslateToWrapperTransitionEnd;\n            if (runCallbacks) {\n              swiper.emit('transitionEnd');\n            }\n          };\n        }\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  var translate = {\n    getTranslate: getTranslate,\n    setTranslate: setTranslate,\n    minTranslate: minTranslate,\n    maxTranslate: maxTranslate,\n    translateTo: translateTo,\n  };\n\n  function setTransition (duration, byController) {\n    var swiper = this;\n\n    if (!swiper.params.cssMode) {\n      swiper.$wrapperEl.transition(duration);\n    }\n\n    swiper.emit('setTransition', duration, byController);\n  }\n\n  function transitionStart (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var params = swiper.params;\n    var previousIndex = swiper.previousIndex;\n    if (params.cssMode) { return; }\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionStart');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionStart');\n        return;\n      }\n      swiper.emit('slideChangeTransitionStart');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionStart');\n      } else {\n        swiper.emit('slidePrevTransitionStart');\n      }\n    }\n  }\n\n  function transitionEnd$1 (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var previousIndex = swiper.previousIndex;\n    var params = swiper.params;\n    swiper.animating = false;\n    if (params.cssMode) { return; }\n    swiper.setTransition(0);\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex > previousIndex) { dir = 'next'; }\n      else if (activeIndex < previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionEnd');\n\n    if (runCallbacks && activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionEnd');\n        return;\n      }\n      swiper.emit('slideChangeTransitionEnd');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionEnd');\n      } else {\n        swiper.emit('slidePrevTransitionEnd');\n      }\n    }\n  }\n\n  var transition$1 = {\n    setTransition: setTransition,\n    transitionStart: transitionStart,\n    transitionEnd: transitionEnd$1,\n  };\n\n  function slideTo (index, speed, runCallbacks, internal) {\n    var obj;\n\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    var swiper = this;\n    var slideIndex = index;\n    if (slideIndex < 0) { slideIndex = 0; }\n\n    var params = swiper.params;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var previousIndex = swiper.previousIndex;\n    var activeIndex = swiper.activeIndex;\n    var rtl = swiper.rtlTranslate;\n    var wrapperEl = swiper.wrapperEl;\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n    var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n    if (snapIndex >= slidesGrid.length) { snapIndex = slidesGrid.length - 1; }\n\n    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n      swiper.emit('beforeSlideChangeStart');\n    }\n\n    var translate = -snapGrid[snapIndex];\n\n    // Update progress\n    swiper.updateProgress(translate);\n\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      for (var i = 0; i < slidesGrid.length; i += 1) {\n        if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n          slideIndex = i;\n        }\n      }\n    }\n    // Directions locks\n    if (swiper.initialized && slideIndex !== activeIndex) {\n      if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n        if ((activeIndex || 0) !== slideIndex) { return false; }\n      }\n    }\n\n    var direction;\n    if (slideIndex > activeIndex) { direction = 'next'; }\n    else if (slideIndex < activeIndex) { direction = 'prev'; }\n    else { direction = 'reset'; }\n\n\n    // Update Index\n    if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n      swiper.updateActiveIndex(slideIndex);\n      // Update Height\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n      swiper.updateSlidesClasses();\n      if (params.effect !== 'slide') {\n        swiper.setTranslate(translate);\n      }\n      if (direction !== 'reset') {\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      }\n      return false;\n    }\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -translate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n        }\n      }\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      if (!swiper.animating) {\n        swiper.animating = true;\n        if (!swiper.onSlideToWrapperTransitionEnd) {\n          swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            swiper.onSlideToWrapperTransitionEnd = null;\n            delete swiper.onSlideToWrapperTransitionEnd;\n            swiper.transitionEnd(runCallbacks, direction);\n          };\n        }\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  function slideToLoop (index, speed, runCallbacks, internal) {\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var newIndex = index;\n    if (swiper.params.loop) {\n      newIndex += swiper.loopedSlides;\n    }\n\n    return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideNext (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slidePrev (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var rtlTranslate = swiper.rtlTranslate;\n\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n    function normalize(val) {\n      if (val < 0) { return -Math.floor(Math.abs(val)); }\n      return Math.floor(val);\n    }\n    var normalizedTranslate = normalize(translate);\n    var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n    var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n    var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n    if (typeof prevSnap === 'undefined' && params.cssMode) {\n      snapGrid.forEach(function (snap) {\n        if (!prevSnap && normalizedTranslate >= snap) { prevSnap = snap; }\n      });\n    }\n    var prevIndex;\n    if (typeof prevSnap !== 'undefined') {\n      prevIndex = slidesGrid.indexOf(prevSnap);\n      if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n    }\n    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideReset (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideToClosest (speed, runCallbacks, internal, threshold) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( threshold === void 0 ) threshold = 0.5;\n\n    var swiper = this;\n    var index = swiper.activeIndex;\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n    var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n    if (translate >= swiper.snapGrid[snapIndex]) {\n      // The current translate is on or after the current snap index, so the choice\n      // is between the current index and the one after it.\n      var currentSnap = swiper.snapGrid[snapIndex];\n      var nextSnap = swiper.snapGrid[snapIndex + 1];\n      if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n        index += swiper.params.slidesPerGroup;\n      }\n    } else {\n      // The current translate is before the current snap index, so the choice\n      // is between the current index and the one before it.\n      var prevSnap = swiper.snapGrid[snapIndex - 1];\n      var currentSnap$1 = swiper.snapGrid[snapIndex];\n      if ((translate - prevSnap) <= (currentSnap$1 - prevSnap) * threshold) {\n        index -= swiper.params.slidesPerGroup;\n      }\n    }\n    index = Math.max(index, 0);\n    index = Math.min(index, swiper.slidesGrid.length - 1);\n\n    return swiper.slideTo(index, speed, runCallbacks, internal);\n  }\n\n  function slideToClickedSlide () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n    var slideToIndex = swiper.clickedIndex;\n    var realIndex;\n    if (params.loop) {\n      if (swiper.animating) { return; }\n      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      if (params.centeredSlides) {\n        if (\n            (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n            || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n        ) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl\n              .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n              .eq(0)\n              .index();\n\n          Utils.nextTick(function () {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n            .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n            .eq(0)\n            .index();\n\n        Utils.nextTick(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n\n  var slide = {\n    slideTo: slideTo,\n    slideToLoop: slideToLoop,\n    slideNext: slideNext,\n    slidePrev: slidePrev,\n    slideReset: slideReset,\n    slideToClosest: slideToClosest,\n    slideToClickedSlide: slideToClickedSlide,\n  };\n\n  function loopCreate () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    // Remove duplicated slides\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n    var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n    if (params.loopFillGroupWithBlank) {\n      var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n      if (blankSlidesNum !== params.slidesPerGroup) {\n        for (var i = 0; i < blankSlidesNum; i += 1) {\n          var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n          $wrapperEl.append(blankNode);\n        }\n        slides = $wrapperEl.children((\".\" + (params.slideClass)));\n      }\n    }\n\n    if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n    swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n    swiper.loopedSlides += params.loopAdditionalSlides;\n    if (swiper.loopedSlides > slides.length) {\n      swiper.loopedSlides = slides.length;\n    }\n\n    var prependSlides = [];\n    var appendSlides = [];\n    slides.each(function (index, el) {\n      var slide = $(el);\n      if (index < swiper.loopedSlides) { appendSlides.push(el); }\n      if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n      slide.attr('data-swiper-slide-index', index);\n    });\n    for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n      $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n    for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n      $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n  }\n\n  function loopFix () {\n    var swiper = this;\n\n    swiper.emit('beforeLoopFix');\n\n    var activeIndex = swiper.activeIndex;\n    var slides = swiper.slides;\n    var loopedSlides = swiper.loopedSlides;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var allowSlideNext = swiper.allowSlideNext;\n    var snapGrid = swiper.snapGrid;\n    var rtl = swiper.rtlTranslate;\n    var newIndex;\n    swiper.allowSlidePrev = true;\n    swiper.allowSlideNext = true;\n\n    var snapTranslate = -snapGrid[activeIndex];\n    var diff = snapTranslate - swiper.getTranslate();\n\n    // Fix For Negative Oversliding\n    if (activeIndex < loopedSlides) {\n      newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n      newIndex += loopedSlides;\n      var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    } else if (activeIndex >= slides.length - loopedSlides) {\n      // Fix For Positive Oversliding\n      newIndex = -slides.length + activeIndex + loopedSlides;\n      newIndex += loopedSlides;\n      var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged$1 && diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    swiper.emit('loopFix');\n  }\n\n  function loopDestroy () {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var slides = swiper.slides;\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n    slides.removeAttr('data-swiper-slide-index');\n  }\n\n  var loop = {\n    loopCreate: loopCreate,\n    loopFix: loopFix,\n    loopDestroy: loopDestroy,\n  };\n\n  function setGrabCursor (moving) {\n    var swiper = this;\n    if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n    var el = swiper.el;\n    el.style.cursor = 'move';\n    el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n    el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n    el.style.cursor = moving ? 'grabbing' : 'grab';\n  }\n\n  function unsetGrabCursor () {\n    var swiper = this;\n    if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n    swiper.el.style.cursor = '';\n  }\n\n  var grabCursor = {\n    setGrabCursor: setGrabCursor,\n    unsetGrabCursor: unsetGrabCursor,\n  };\n\n  function appendSlide (slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.append(slides[i]); }\n      }\n    } else {\n      $wrapperEl.append(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n  }\n\n  function prependSlide (slides) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    var newActiveIndex = activeIndex + 1;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i = 0; i < slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n      }\n      newActiveIndex = activeIndex + slides.length;\n    } else {\n      $wrapperEl.prepend(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n\n  function addSlide (index, slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var baseLength = swiper.slides.length;\n    if (index <= 0) {\n      swiper.prependSlide(slides);\n      return;\n    }\n    if (index >= baseLength) {\n      swiper.appendSlide(slides);\n      return;\n    }\n    var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n    var slidesBuffer = [];\n    for (var i = baseLength - 1; i >= index; i -= 1) {\n      var currentSlide = swiper.slides.eq(i);\n      currentSlide.remove();\n      slidesBuffer.unshift(currentSlide);\n    }\n\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n        if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n      }\n      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n      $wrapperEl.append(slidesBuffer[i$2]);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeSlide (slidesIndexes) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var newActiveIndex = activeIndexBuffer;\n    var indexToRemove;\n\n    if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n      for (var i = 0; i < slidesIndexes.length; i += 1) {\n        indexToRemove = slidesIndexes[i];\n        if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n        if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n      }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    } else {\n      indexToRemove = slidesIndexes;\n      if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n      if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer && Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeAllSlides () {\n    var swiper = this;\n\n    var slidesIndexes = [];\n    for (var i = 0; i < swiper.slides.length; i += 1) {\n      slidesIndexes.push(i);\n    }\n    swiper.removeSlide(slidesIndexes);\n  }\n\n  var manipulation = {\n    appendSlide: appendSlide,\n    prependSlide: prependSlide,\n    addSlide: addSlide,\n    removeSlide: removeSlide,\n    removeAllSlides: removeAllSlides,\n  };\n\n  var Device = (function Device() {\n    var platform = win.navigator.platform;\n    var ua = win.navigator.userAgent;\n\n    var device = {\n      ios: false,\n      android: false,\n      androidChrome: false,\n      desktop: false,\n      iphone: false,\n      ipod: false,\n      ipad: false,\n      edge: false,\n      ie: false,\n      firefox: false,\n      macos: false,\n      windows: false,\n      cordova: !!(win.cordova || win.phonegap),\n      phonegap: !!(win.cordova || win.phonegap),\n      electron: false,\n    };\n\n    var screenWidth = win.screen.width;\n    var screenHeight = win.screen.height;\n\n    var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n    var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n    var ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n    var edge = ua.indexOf('Edge/') >= 0;\n    var firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n    var windows = platform === 'Win32';\n    var electron = ua.toLowerCase().indexOf('electron') >= 0;\n    var macos = platform === 'MacIntel';\n\n    // iPadOs 13 fix\n    if (!ipad\n        && macos\n        && Support.touch\n        && (\n            (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n            || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n            || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n            || (screenWidth === 768 && screenHeight === 1024) // other\n        )\n    ) {\n      ipad = ua.match(/(Version)\\/([\\d.]+)/);\n      macos = false;\n    }\n\n    device.ie = ie;\n    device.edge = edge;\n    device.firefox = firefox;\n\n    // Android\n    if (android && !windows) {\n      device.os = 'android';\n      device.osVersion = android[2];\n      device.android = true;\n      device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n    }\n    if (ipad || iphone || ipod) {\n      device.os = 'ios';\n      device.ios = true;\n    }\n    // iOS\n    if (iphone && !ipod) {\n      device.osVersion = iphone[2].replace(/_/g, '.');\n      device.iphone = true;\n    }\n    if (ipad) {\n      device.osVersion = ipad[2].replace(/_/g, '.');\n      device.ipad = true;\n    }\n    if (ipod) {\n      device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n      device.ipod = true;\n    }\n    // iOS 8+ changed UA\n    if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n      if (device.osVersion.split('.')[0] === '10') {\n        device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n      }\n    }\n\n    // Webview\n    device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))\n        || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);\n    device.webview = device.webView;\n    device.standalone = device.webView;\n\n    // Desktop\n    device.desktop = !(device.ios || device.android) || electron;\n    if (device.desktop) {\n      device.electron = electron;\n      device.macos = macos;\n      device.windows = windows;\n      if (device.macos) {\n        device.os = 'macos';\n      }\n      if (device.windows) {\n        device.os = 'windows';\n      }\n    }\n\n    // Pixel Ratio\n    device.pixelRatio = win.devicePixelRatio || 1;\n\n    // Export object\n    return device;\n  }());\n\n  function onTouchStart (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n\n    if (swiper.animating && params.preventInteractionOnTransition) {\n      return;\n    }\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    var $targetEl = $(e.target);\n\n    if (params.touchEventsTarget === 'wrapper') {\n      if (!$targetEl.closest(swiper.wrapperEl).length) { return; }\n    }\n    data.isTouchEvent = e.type === 'touchstart';\n    if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n    if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n    if (data.isTouched && data.isMoved) { return; }\n    if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n      swiper.allowClick = true;\n      return;\n    }\n    if (params.swipeHandler) {\n      if (!$targetEl.closest(params.swipeHandler)[0]) { return; }\n    }\n\n    touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    var startX = touches.currentX;\n    var startY = touches.currentY;\n\n    // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n    if (\n        edgeSwipeDetection\n        && ((startX <= edgeSwipeThreshold)\n        || (startX >= win.screen.width - edgeSwipeThreshold))\n    ) {\n      return;\n    }\n\n    Utils.extend(data, {\n      isTouched: true,\n      isMoved: false,\n      allowTouchCallbacks: true,\n      isScrolling: undefined,\n      startMoving: undefined,\n    });\n\n    touches.startX = startX;\n    touches.startY = startY;\n    data.touchStartTime = Utils.now();\n    swiper.allowClick = true;\n    swiper.updateSize();\n    swiper.swipeDirection = undefined;\n    if (params.threshold > 0) { data.allowThresholdMove = false; }\n    if (e.type !== 'touchstart') {\n      var preventDefault = true;\n      if ($targetEl.is(data.formElements)) { preventDefault = false; }\n      if (\n          doc.activeElement\n          && $(doc.activeElement).is(data.formElements)\n          && doc.activeElement !== $targetEl[0]\n      ) {\n        doc.activeElement.blur();\n      }\n\n      var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n      if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n        e.preventDefault();\n      }\n    }\n    swiper.emit('touchStart', e);\n  }\n\n  function onTouchMove (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (!data.isTouched) {\n      if (data.startMoving && data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n      return;\n    }\n    if (data.isTouchEvent && e.type === 'mousemove') { return; }\n    var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n    var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n    var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n    if (e.preventedByNestedSwiper) {\n      touches.startX = pageX;\n      touches.startY = pageY;\n      return;\n    }\n    if (!swiper.allowTouchMove) {\n      // isMoved = true;\n      swiper.allowClick = false;\n      if (data.isTouched) {\n        Utils.extend(touches, {\n          startX: pageX,\n          startY: pageY,\n          currentX: pageX,\n          currentY: pageY,\n        });\n        data.touchStartTime = Utils.now();\n      }\n      return;\n    }\n    if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n      if (swiper.isVertical()) {\n        // Vertical\n        if (\n            (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n            || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n        ) {\n          data.isTouched = false;\n          data.isMoved = false;\n          return;\n        }\n      } else if (\n          (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n          || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n      ) {\n        return;\n      }\n    }\n    if (data.isTouchEvent && doc.activeElement) {\n      if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n        data.isMoved = true;\n        swiper.allowClick = false;\n        return;\n      }\n    }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchMove', e);\n    }\n    if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n    touches.currentX = pageX;\n    touches.currentY = pageY;\n\n    var diffX = touches.currentX - touches.startX;\n    var diffY = touches.currentY - touches.startY;\n    if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n    if (typeof data.isScrolling === 'undefined') {\n      var touchAngle;\n      if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n        data.isScrolling = false;\n      } else {\n        // eslint-disable-next-line\n        if ((diffX * diffX) + (diffY * diffY) >= 25) {\n          touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n        }\n      }\n    }\n    if (data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    if (typeof data.startMoving === 'undefined') {\n      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n        data.startMoving = true;\n      }\n    }\n    if (data.isScrolling) {\n      data.isTouched = false;\n      return;\n    }\n    if (!data.startMoving) {\n      return;\n    }\n    swiper.allowClick = false;\n    if (!params.cssMode) {\n      e.preventDefault();\n    }\n    if (params.touchMoveStopPropagation && !params.nested) {\n      e.stopPropagation();\n    }\n\n    if (!data.isMoved) {\n      if (params.loop) {\n        swiper.loopFix();\n      }\n      data.startTranslate = swiper.getTranslate();\n      swiper.setTransition(0);\n      if (swiper.animating) {\n        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n      }\n      data.allowMomentumBounce = false;\n      // Grab Cursor\n      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(true);\n      }\n      swiper.emit('sliderFirstMove', e);\n    }\n    swiper.emit('sliderMove', e);\n    data.isMoved = true;\n\n    var diff = swiper.isHorizontal() ? diffX : diffY;\n    touches.diff = diff;\n\n    diff *= params.touchRatio;\n    if (rtl) { diff = -diff; }\n\n    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n    data.currentTranslate = diff + data.startTranslate;\n\n    var disableParentSwiper = true;\n    var resistanceRatio = params.resistanceRatio;\n    if (params.touchReleaseOnEdges) {\n      resistanceRatio = 0;\n    }\n    if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n    } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n    }\n\n    if (disableParentSwiper) {\n      e.preventedByNestedSwiper = true;\n    }\n\n    // Directions locks\n    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n\n\n    // Threshold\n    if (params.threshold > 0) {\n      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n        if (!data.allowThresholdMove) {\n          data.allowThresholdMove = true;\n          touches.startX = touches.currentX;\n          touches.startY = touches.currentY;\n          data.currentTranslate = data.startTranslate;\n          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n          return;\n        }\n      } else {\n        data.currentTranslate = data.startTranslate;\n        return;\n      }\n    }\n\n    if (!params.followFinger || params.cssMode) { return; }\n\n    // Update active index in free mode\n    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    if (params.freeMode) {\n      // Velocity\n      if (data.velocities.length === 0) {\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n          time: data.touchStartTime,\n        });\n      }\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n        time: Utils.now(),\n      });\n    }\n    // Update progress\n    swiper.updateProgress(data.currentTranslate);\n    // Update translate\n    swiper.setTranslate(data.currentTranslate);\n  }\n\n  function onTouchEnd (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var $wrapperEl = swiper.$wrapperEl;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchEnd', e);\n    }\n    data.allowTouchCallbacks = false;\n    if (!data.isTouched) {\n      if (data.isMoved && params.grabCursor) {\n        swiper.setGrabCursor(false);\n      }\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    // Return Grab Cursor\n    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(false);\n    }\n\n    // Time diff\n    var touchEndTime = Utils.now();\n    var timeDiff = touchEndTime - data.touchStartTime;\n\n    // Tap, doubleTap, Click\n    if (swiper.allowClick) {\n      swiper.updateClickedSlide(e);\n      swiper.emit('tap click', e);\n      if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n        swiper.emit('doubleTap doubleClick', e);\n      }\n    }\n\n    data.lastClickTime = Utils.now();\n    Utils.nextTick(function () {\n      if (!swiper.destroyed) { swiper.allowClick = true; }\n    });\n\n    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n\n    var currentPos;\n    if (params.followFinger) {\n      currentPos = rtl ? swiper.translate : -swiper.translate;\n    } else {\n      currentPos = -data.currentTranslate;\n    }\n\n    if (params.cssMode) {\n      return;\n    }\n\n    if (params.freeMode) {\n      if (currentPos < -swiper.minTranslate()) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (currentPos > -swiper.maxTranslate()) {\n        if (swiper.slides.length < snapGrid.length) {\n          swiper.slideTo(snapGrid.length - 1);\n        } else {\n          swiper.slideTo(swiper.slides.length - 1);\n        }\n        return;\n      }\n\n      if (params.freeModeMomentum) {\n        if (data.velocities.length > 1) {\n          var lastMoveEvent = data.velocities.pop();\n          var velocityEvent = data.velocities.pop();\n\n          var distance = lastMoveEvent.position - velocityEvent.position;\n          var time = lastMoveEvent.time - velocityEvent.time;\n          swiper.velocity = distance / time;\n          swiper.velocity /= 2;\n          if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n            swiper.velocity = 0;\n          }\n          // this implies that the user stopped moving a finger then released.\n          // There would be no events with distance zero, so the last event is stale.\n          if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n            swiper.velocity = 0;\n          }\n        } else {\n          swiper.velocity = 0;\n        }\n        swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n        data.velocities.length = 0;\n        var momentumDuration = 1000 * params.freeModeMomentumRatio;\n        var momentumDistance = swiper.velocity * momentumDuration;\n\n        var newPosition = swiper.translate + momentumDistance;\n        if (rtl) { newPosition = -newPosition; }\n\n        var doBounce = false;\n        var afterBouncePosition;\n        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n        var needsLoopFix;\n        if (newPosition < swiper.maxTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n              newPosition = swiper.maxTranslate() - bounceAmount;\n            }\n            afterBouncePosition = swiper.maxTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.maxTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (newPosition > swiper.minTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition - swiper.minTranslate() > bounceAmount) {\n              newPosition = swiper.minTranslate() + bounceAmount;\n            }\n            afterBouncePosition = swiper.minTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.minTranslate();\n          }\n          if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n        } else if (params.freeModeSticky) {\n          var nextSlide;\n          for (var j = 0; j < snapGrid.length; j += 1) {\n            if (snapGrid[j] > -newPosition) {\n              nextSlide = j;\n              break;\n            }\n          }\n\n          if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n            newPosition = snapGrid[nextSlide];\n          } else {\n            newPosition = snapGrid[nextSlide - 1];\n          }\n          newPosition = -newPosition;\n        }\n        if (needsLoopFix) {\n          swiper.once('transitionEnd', function () {\n            swiper.loopFix();\n          });\n        }\n        // Fix duration\n        if (swiper.velocity !== 0) {\n          if (rtl) {\n            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n          } else {\n            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n          }\n          if (params.freeModeSticky) {\n            // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n            // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n            // It's easy to see this when simulating touch with mouse events. To fix this,\n            // limit single-slide swipes to the default slide duration. This also has the\n            // nice side effect of matching slide speed if the user stopped moving before\n            // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n            // For faster swipes, also apply limits (albeit higher ones).\n            var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n            var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n            if (moveDistance < currentSlideSize) {\n              momentumDuration = params.speed;\n            } else if (moveDistance < 2 * currentSlideSize) {\n              momentumDuration = params.speed * 1.5;\n            } else {\n              momentumDuration = params.speed * 2.5;\n            }\n          }\n        } else if (params.freeModeSticky) {\n          swiper.slideToClosest();\n          return;\n        }\n\n        if (params.freeModeMomentumBounce && doBounce) {\n          swiper.updateProgress(afterBouncePosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n            swiper.emit('momentumBounce');\n\n            swiper.setTransition(params.speed);\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          });\n        } else if (swiper.velocity) {\n          swiper.updateProgress(newPosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          if (!swiper.animating) {\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          }\n        } else {\n          swiper.updateProgress(newPosition);\n        }\n\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      return;\n    }\n\n    // Find current slide\n    var stopIndex = 0;\n    var groupSize = swiper.slidesSizesGrid[0];\n    for (var i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n      var increment$1 = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n      if (typeof slidesGrid[i + increment$1] !== 'undefined') {\n        if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment$1]) {\n          stopIndex = i;\n          groupSize = slidesGrid[i + increment$1] - slidesGrid[i];\n        }\n      } else if (currentPos >= slidesGrid[i]) {\n        stopIndex = i;\n        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n      }\n    }\n\n    // Find current slide size\n    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n    var increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n    if (timeDiff > params.longSwipesMs) {\n      // Long touches\n      if (!params.longSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (swiper.swipeDirection === 'next') {\n        if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n      if (swiper.swipeDirection === 'prev') {\n        if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n    } else {\n      // Short swipes\n      if (!params.shortSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n      if (!isNavButtonTarget) {\n        if (swiper.swipeDirection === 'next') {\n          swiper.slideTo(stopIndex + increment);\n        }\n        if (swiper.swipeDirection === 'prev') {\n          swiper.slideTo(stopIndex);\n        }\n      } else if (e.target === swiper.navigation.nextEl) {\n        swiper.slideTo(stopIndex + increment);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  }\n\n  function onResize () {\n    var swiper = this;\n\n    var params = swiper.params;\n    var el = swiper.el;\n\n    if (el && el.offsetWidth === 0) { return; }\n\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Save locks\n    var allowSlideNext = swiper.allowSlideNext;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var snapGrid = swiper.snapGrid;\n\n    // Disable locks on resize\n    swiper.allowSlideNext = true;\n    swiper.allowSlidePrev = true;\n\n    swiper.updateSize();\n    swiper.updateSlides();\n\n    swiper.updateSlidesClasses();\n    if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n      swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n\n    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n      swiper.autoplay.run();\n    }\n    // Return locks after resize\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n  }\n\n  function onClick (e) {\n    var swiper = this;\n    if (!swiper.allowClick) {\n      if (swiper.params.preventClicks) { e.preventDefault(); }\n      if (swiper.params.preventClicksPropagation && swiper.animating) {\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  function onScroll () {\n    var swiper = this;\n    var wrapperEl = swiper.wrapperEl;\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? -wrapperEl.scrollLeft : -wrapperEl.scrollTop;\n    // eslint-disable-next-line\n    if (swiper.translate === -0) { swiper.translate = 0; }\n\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== swiper.progress) {\n      swiper.updateProgress(swiper.translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, false);\n  }\n\n  var dummyEventAttached = false;\n  function dummyEventListener() {}\n\n  function attachEvents() {\n    var swiper = this;\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    swiper.onTouchStart = onTouchStart.bind(swiper);\n    swiper.onTouchMove = onTouchMove.bind(swiper);\n    swiper.onTouchEnd = onTouchEnd.bind(swiper);\n    if (params.cssMode) {\n      swiper.onScroll = onScroll.bind(swiper);\n    }\n\n    swiper.onClick = onClick.bind(swiper);\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch && Support.pointerEvents) {\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n        el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n        el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n        if (!dummyEventAttached) {\n          doc.addEventListener('touchstart', dummyEventListener);\n          dummyEventAttached = true;\n        }\n      }\n      if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n        el.addEventListener('mousedown', swiper.onTouchStart, false);\n        doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.addEventListener('click', swiper.onClick, true);\n    }\n    if (params.cssMode) {\n      wrapperEl.addEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    if (params.updateOnWindowResize) {\n      swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n    } else {\n      swiper.on('observerUpdate', onResize, true);\n    }\n  }\n\n  function detachEvents() {\n    var swiper = this;\n\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch && Support.pointerEvents) {\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n        el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      }\n      if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n        el.removeEventListener('mousedown', swiper.onTouchStart, false);\n        doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.removeEventListener('click', swiper.onClick, true);\n    }\n\n    if (params.cssMode) {\n      wrapperEl.removeEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n  }\n\n  var events = {\n    attachEvents: attachEvents,\n    detachEvents: detachEvents,\n  };\n\n  function setBreakpoint () {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var initialized = swiper.initialized;\n    var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n    var params = swiper.params;\n    var $el = swiper.$el;\n    var breakpoints = params.breakpoints;\n    if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n    // Get breakpoint for window width and update parameters\n    var breakpoint = swiper.getBreakpoint(breakpoints);\n\n    if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n      var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n      if (breakpointOnlyParams) {\n        ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n          var paramValue = breakpointOnlyParams[param];\n          if (typeof paramValue === 'undefined') { return; }\n          if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n            breakpointOnlyParams[param] = 'auto';\n          } else if (param === 'slidesPerView') {\n            breakpointOnlyParams[param] = parseFloat(paramValue);\n          } else {\n            breakpointOnlyParams[param] = parseInt(paramValue, 10);\n          }\n        });\n      }\n\n      var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      var wasMultiRow = params.slidesPerColumn > 1;\n      var isMultiRow = breakpointParams.slidesPerColumn > 1;\n      if (wasMultiRow && !isMultiRow) {\n        $el.removeClass(((params.containerModifierClass) + \"multirow \" + (params.containerModifierClass) + \"multirow-column\"));\n      } else if (!wasMultiRow && isMultiRow) {\n        $el.addClass(((params.containerModifierClass) + \"multirow\"));\n        if (breakpointParams.slidesPerColumnFill === 'column') {\n          $el.addClass(((params.containerModifierClass) + \"multirow-column\"));\n        }\n      }\n\n      var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      Utils.extend(swiper.params, breakpointParams);\n\n      Utils.extend(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n      });\n\n      swiper.currentBreakpoint = breakpoint;\n\n      if (needsReLoop && initialized) {\n        swiper.loopDestroy();\n        swiper.loopCreate();\n        swiper.updateSlides();\n        swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n      }\n\n      swiper.emit('breakpoint', breakpointParams);\n    }\n  }\n\n  function getBreakpoint (breakpoints) {\n    // Get breakpoint for window width\n    if (!breakpoints) { return undefined; }\n    var breakpoint = false;\n\n    var points = Object.keys(breakpoints).map(function (point) {\n      if (typeof point === 'string' && point.startsWith('@')) {\n        var minRatio = parseFloat(point.substr(1));\n        var value = win.innerHeight * minRatio;\n        return { value: value, point: point };\n      }\n      return { value: point, point: point };\n    });\n\n    points.sort(function (a, b) { return parseInt(a.value, 10) - parseInt(b.value, 10); });\n    for (var i = 0; i < points.length; i += 1) {\n      var ref = points[i];\n      var point = ref.point;\n      var value = ref.value;\n      if (value <= win.innerWidth) {\n        breakpoint = point;\n      }\n    }\n    return breakpoint || 'max';\n  }\n\n  var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n  function addClasses () {\n    var swiper = this;\n    var classNames = swiper.classNames;\n    var params = swiper.params;\n    var rtl = swiper.rtl;\n    var $el = swiper.$el;\n    var suffixes = [];\n\n    suffixes.push('initialized');\n    suffixes.push(params.direction);\n\n    if (params.freeMode) {\n      suffixes.push('free-mode');\n    }\n    if (params.autoHeight) {\n      suffixes.push('autoheight');\n    }\n    if (rtl) {\n      suffixes.push('rtl');\n    }\n    if (params.slidesPerColumn > 1) {\n      suffixes.push('multirow');\n      if (params.slidesPerColumnFill === 'column') {\n        suffixes.push('multirow-column');\n      }\n    }\n    if (Device.android) {\n      suffixes.push('android');\n    }\n    if (Device.ios) {\n      suffixes.push('ios');\n    }\n\n    if (params.cssMode) {\n      suffixes.push('css-mode');\n    }\n\n    suffixes.forEach(function (suffix) {\n      classNames.push(params.containerModifierClass + suffix);\n    });\n\n    $el.addClass(classNames.join(' '));\n  }\n\n  function removeClasses () {\n    var swiper = this;\n    var $el = swiper.$el;\n    var classNames = swiper.classNames;\n\n    $el.removeClass(classNames.join(' '));\n  }\n\n  var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n  function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n    var image;\n    function onReady() {\n      if (callback) { callback(); }\n    }\n    if (!imageEl.complete || !checkForComplete) {\n      if (src) {\n        image = new win.Image();\n        image.onload = onReady;\n        image.onerror = onReady;\n        if (sizes) {\n          image.sizes = sizes;\n        }\n        if (srcset) {\n          image.srcset = srcset;\n        }\n        if (src) {\n          image.src = src;\n        }\n      } else {\n        onReady();\n      }\n    } else {\n      // image already loaded...\n      onReady();\n    }\n  }\n\n  function preloadImages () {\n    var swiper = this;\n    swiper.imagesToLoad = swiper.$el.find('img');\n    function onReady() {\n      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n      if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n        if (swiper.params.updateOnImagesReady) { swiper.update(); }\n        swiper.emit('imagesReady');\n      }\n    }\n    for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n      var imageEl = swiper.imagesToLoad[i];\n      swiper.loadImage(\n          imageEl,\n          imageEl.currentSrc || imageEl.getAttribute('src'),\n          imageEl.srcset || imageEl.getAttribute('srcset'),\n          imageEl.sizes || imageEl.getAttribute('sizes'),\n          true,\n          onReady\n      );\n    }\n  }\n\n  var images = {\n    loadImage: loadImage,\n    preloadImages: preloadImages,\n  };\n\n  function checkOverflow() {\n    var swiper = this;\n    var params = swiper.params;\n    var wasLocked = swiper.isLocked;\n    var lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n    if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n      swiper.isLocked = lastSlidePosition <= swiper.size;\n    } else {\n      swiper.isLocked = swiper.snapGrid.length === 1;\n    }\n\n    swiper.allowSlideNext = !swiper.isLocked;\n    swiper.allowSlidePrev = !swiper.isLocked;\n\n    // events\n    if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n    if (wasLocked && wasLocked !== swiper.isLocked) {\n      swiper.isEnd = false;\n      swiper.navigation.update();\n    }\n  }\n\n  var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n  var defaults = {\n    init: true,\n    direction: 'horizontal',\n    touchEventsTarget: 'container',\n    initialSlide: 0,\n    speed: 300,\n    cssMode: false,\n    updateOnWindowResize: true,\n    //\n    preventInteractionOnTransition: false,\n\n    // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n    edgeSwipeDetection: false,\n    edgeSwipeThreshold: 20,\n\n    // Free mode\n    freeMode: false,\n    freeModeMomentum: true,\n    freeModeMomentumRatio: 1,\n    freeModeMomentumBounce: true,\n    freeModeMomentumBounceRatio: 1,\n    freeModeMomentumVelocityRatio: 1,\n    freeModeSticky: false,\n    freeModeMinimumVelocity: 0.02,\n\n    // Autoheight\n    autoHeight: false,\n\n    // Set wrapper width\n    setWrapperSize: false,\n\n    // Virtual Translate\n    virtualTranslate: false,\n\n    // Effects\n    effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n    // Breakpoints\n    breakpoints: undefined,\n\n    // Slides grid\n    spaceBetween: 0,\n    slidesPerView: 1,\n    slidesPerColumn: 1,\n    slidesPerColumnFill: 'column',\n    slidesPerGroup: 1,\n    slidesPerGroupSkip: 0,\n    centeredSlides: false,\n    centeredSlidesBounds: false,\n    slidesOffsetBefore: 0, // in px\n    slidesOffsetAfter: 0, // in px\n    normalizeSlideIndex: true,\n    centerInsufficientSlides: false,\n\n    // Disable swiper and hide navigation when container not overflow\n    watchOverflow: false,\n\n    // Round length\n    roundLengths: false,\n\n    // Touches\n    touchRatio: 1,\n    touchAngle: 45,\n    simulateTouch: true,\n    shortSwipes: true,\n    longSwipes: true,\n    longSwipesRatio: 0.5,\n    longSwipesMs: 300,\n    followFinger: true,\n    allowTouchMove: true,\n    threshold: 0,\n    touchMoveStopPropagation: false,\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchReleaseOnEdges: false,\n\n    // Unique Navigation Elements\n    uniqueNavElements: true,\n\n    // Resistance\n    resistance: true,\n    resistanceRatio: 0.85,\n\n    // Progress\n    watchSlidesProgress: false,\n    watchSlidesVisibility: false,\n\n    // Cursor\n    grabCursor: false,\n\n    // Clicks\n    preventClicks: true,\n    preventClicksPropagation: true,\n    slideToClickedSlide: false,\n\n    // Images\n    preloadImages: true,\n    updateOnImagesReady: true,\n\n    // loop\n    loop: false,\n    loopAdditionalSlides: 0,\n    loopedSlides: null,\n    loopFillGroupWithBlank: false,\n\n    // Swiping/no swiping\n    allowSlidePrev: true,\n    allowSlideNext: true,\n    swipeHandler: null, // '.swipe-handler',\n    noSwiping: true,\n    noSwipingClass: 'swiper-no-swiping',\n    noSwipingSelector: null,\n\n    // Passive Listeners\n    passiveListeners: true,\n\n    // NS\n    containerModifierClass: 'swiper-container-', // NEW\n    slideClass: 'swiper-slide',\n    slideBlankClass: 'swiper-slide-invisible-blank',\n    slideActiveClass: 'swiper-slide-active',\n    slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n    slideVisibleClass: 'swiper-slide-visible',\n    slideDuplicateClass: 'swiper-slide-duplicate',\n    slideNextClass: 'swiper-slide-next',\n    slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n    slidePrevClass: 'swiper-slide-prev',\n    slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n    wrapperClass: 'swiper-wrapper',\n\n    // Callbacks\n    runCallbacksOnInit: true,\n  };\n\n  /* eslint no-param-reassign: \"off\" */\n\n  var prototypes = {\n    update: update,\n    translate: translate,\n    transition: transition$1,\n    slide: slide,\n    loop: loop,\n    grabCursor: grabCursor,\n    manipulation: manipulation,\n    events: events,\n    breakpoints: breakpoints,\n    checkOverflow: checkOverflow$1,\n    classes: classes,\n    images: images,\n  };\n\n  var extendedDefaults = {};\n\n  var Swiper = /*@__PURE__*/(function (SwiperClass) {\n    function Swiper() {\n      var assign;\n\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n      var el;\n      var params;\n      if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n        params = args[0];\n      } else {\n        (assign = args, el = assign[0], params = assign[1]);\n      }\n      if (!params) { params = {}; }\n\n      params = Utils.extend({}, params);\n      if (el && !params.el) { params.el = el; }\n\n      SwiperClass.call(this, params);\n\n      Object.keys(prototypes).forEach(function (prototypeGroup) {\n        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n          if (!Swiper.prototype[protoMethod]) {\n            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n          }\n        });\n      });\n\n      // Swiper Instance\n      var swiper = this;\n      if (typeof swiper.modules === 'undefined') {\n        swiper.modules = {};\n      }\n      Object.keys(swiper.modules).forEach(function (moduleName) {\n        var module = swiper.modules[moduleName];\n        if (module.params) {\n          var moduleParamName = Object.keys(module.params)[0];\n          var moduleParams = module.params[moduleParamName];\n          if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n          if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n          if (params[moduleParamName] === true) {\n            params[moduleParamName] = { enabled: true };\n          }\n          if (\n              typeof params[moduleParamName] === 'object'\n              && !('enabled' in params[moduleParamName])\n          ) {\n            params[moduleParamName].enabled = true;\n          }\n          if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n        }\n      });\n\n      // Extend defaults with modules params\n      var swiperParams = Utils.extend({}, defaults);\n      swiper.useModulesParams(swiperParams);\n\n      // Extend defaults with passed params\n      swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n      swiper.originalParams = Utils.extend({}, swiper.params);\n      swiper.passedParams = Utils.extend({}, params);\n\n      // Save Dom lib\n      swiper.$ = $;\n\n      // Find el\n      var $el = $(swiper.params.el);\n      el = $el[0];\n\n      if (!el) {\n        return undefined;\n      }\n\n      if ($el.length > 1) {\n        var swipers = [];\n        $el.each(function (index, containerEl) {\n          var newParams = Utils.extend({}, params, { el: containerEl });\n          swipers.push(new Swiper(newParams));\n        });\n        return swipers;\n      }\n\n      el.swiper = swiper;\n      $el.data('swiper', swiper);\n\n      // Find Wrapper\n      var $wrapperEl;\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        $wrapperEl = $(el.shadowRoot.querySelector((\".\" + (swiper.params.wrapperClass))));\n        // Children needs to return slot items\n        $wrapperEl.children = function (options) { return $el.children(options); };\n      } else {\n        $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n      }\n      // Extend Swiper\n      Utils.extend(swiper, {\n        $el: $el,\n        el: el,\n        $wrapperEl: $wrapperEl,\n        wrapperEl: $wrapperEl[0],\n\n        // Classes\n        classNames: [],\n\n        // Slides\n        slides: $(),\n        slidesGrid: [],\n        snapGrid: [],\n        slidesSizesGrid: [],\n\n        // isDirection\n        isHorizontal: function isHorizontal() {\n          return swiper.params.direction === 'horizontal';\n        },\n        isVertical: function isVertical() {\n          return swiper.params.direction === 'vertical';\n        },\n        // RTL\n        rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n        // Indexes\n        activeIndex: 0,\n        realIndex: 0,\n\n        //\n        isBeginning: true,\n        isEnd: false,\n\n        // Props\n        translate: 0,\n        previousTranslate: 0,\n        progress: 0,\n        velocity: 0,\n        animating: false,\n\n        // Locks\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n\n        // Touch Events\n        touchEvents: (function touchEvents() {\n          var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n          var desktop = ['mousedown', 'mousemove', 'mouseup'];\n          if (Support.pointerEvents) {\n            desktop = ['pointerdown', 'pointermove', 'pointerup'];\n          }\n          swiper.touchEventsTouch = {\n            start: touch[0],\n            move: touch[1],\n            end: touch[2],\n            cancel: touch[3],\n          };\n          swiper.touchEventsDesktop = {\n            start: desktop[0],\n            move: desktop[1],\n            end: desktop[2],\n          };\n          return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n        }()),\n        touchEventsData: {\n          isTouched: undefined,\n          isMoved: undefined,\n          allowTouchCallbacks: undefined,\n          touchStartTime: undefined,\n          isScrolling: undefined,\n          currentTranslate: undefined,\n          startTranslate: undefined,\n          allowThresholdMove: undefined,\n          // Form elements to match\n          formElements: 'input, select, option, textarea, button, video',\n          // Last click time\n          lastClickTime: Utils.now(),\n          clickTimeout: undefined,\n          // Velocities\n          velocities: [],\n          allowMomentumBounce: undefined,\n          isTouchEvent: undefined,\n          startMoving: undefined,\n        },\n\n        // Clicks\n        allowClick: true,\n\n        // Touches\n        allowTouchMove: swiper.params.allowTouchMove,\n\n        touches: {\n          startX: 0,\n          startY: 0,\n          currentX: 0,\n          currentY: 0,\n          diff: 0,\n        },\n\n        // Images\n        imagesToLoad: [],\n        imagesLoaded: 0,\n\n      });\n\n      // Install Modules\n      swiper.useModules();\n\n      // Init\n      if (swiper.params.init) {\n        swiper.init();\n      }\n\n      // Return app instance\n      return swiper;\n    }\n\n    if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n    Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n    Swiper.prototype.constructor = Swiper;\n\n    var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n    Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n      var swiper = this;\n      var params = swiper.params;\n      var slides = swiper.slides;\n      var slidesGrid = swiper.slidesGrid;\n      var swiperSize = swiper.size;\n      var activeIndex = swiper.activeIndex;\n      var spv = 1;\n      if (params.centeredSlides) {\n        var slideSize = slides[activeIndex].swiperSlideSize;\n        var breakLoop;\n        for (var i = activeIndex + 1; i < slides.length; i += 1) {\n          if (slides[i] && !breakLoop) {\n            slideSize += slides[i].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) { breakLoop = true; }\n          }\n        }\n        for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n          if (slides[i$1] && !breakLoop) {\n            slideSize += slides[i$1].swiperSlideSize;\n            spv += 1;\n            if (slideSize > swiperSize) { breakLoop = true; }\n          }\n        }\n      } else {\n        for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n          if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n            spv += 1;\n          }\n        }\n      }\n      return spv;\n    };\n\n    Swiper.prototype.update = function update () {\n      var swiper = this;\n      if (!swiper || swiper.destroyed) { return; }\n      var snapGrid = swiper.snapGrid;\n      var params = swiper.params;\n      // Breakpoints\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      function setTranslate() {\n        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n        swiper.setTranslate(newTranslate);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      var translated;\n      if (swiper.params.freeMode) {\n        setTranslate();\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      } else {\n        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n        } else {\n          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n        }\n        if (!translated) {\n          setTranslate();\n        }\n      }\n      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n      swiper.emit('update');\n    };\n\n    Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n      if ( needUpdate === void 0 ) needUpdate = true;\n\n      var swiper = this;\n      var currentDirection = swiper.params.direction;\n      if (!newDirection) {\n        // eslint-disable-next-line\n        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n      }\n      if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n        return swiper;\n      }\n\n      swiper.$el\n          .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection))\n          .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n      swiper.params.direction = newDirection;\n\n      swiper.slides.each(function (slideIndex, slideEl) {\n        if (newDirection === 'vertical') {\n          slideEl.style.width = '';\n        } else {\n          slideEl.style.height = '';\n        }\n      });\n\n      swiper.emit('changeDirection');\n      if (needUpdate) { swiper.update(); }\n\n      return swiper;\n    };\n\n    Swiper.prototype.init = function init () {\n      var swiper = this;\n      if (swiper.initialized) { return; }\n\n      swiper.emit('beforeInit');\n\n      // Set breakpoint\n      if (swiper.params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n\n      // Add Classes\n      swiper.addClasses();\n\n      // Create loop\n      if (swiper.params.loop) {\n        swiper.loopCreate();\n      }\n\n      // Update size\n      swiper.updateSize();\n\n      // Update slides\n      swiper.updateSlides();\n\n      if (swiper.params.watchOverflow) {\n        swiper.checkOverflow();\n      }\n\n      // Set Grab Cursor\n      if (swiper.params.grabCursor) {\n        swiper.setGrabCursor();\n      }\n\n      if (swiper.params.preloadImages) {\n        swiper.preloadImages();\n      }\n\n      // Slide To Initial Slide\n      if (swiper.params.loop) {\n        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n      } else {\n        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n      }\n\n      // Attach events\n      swiper.attachEvents();\n\n      // Init Flag\n      swiper.initialized = true;\n\n      // Emit\n      swiper.emit('init');\n    };\n\n    Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n      if ( deleteInstance === void 0 ) deleteInstance = true;\n      if ( cleanStyles === void 0 ) cleanStyles = true;\n\n      var swiper = this;\n      var params = swiper.params;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n\n      if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n        return null;\n      }\n\n      swiper.emit('beforeDestroy');\n\n      // Init Flag\n      swiper.initialized = false;\n\n      // Detach events\n      swiper.detachEvents();\n\n      // Destroy loop\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      // Cleanup styles\n      if (cleanStyles) {\n        swiper.removeClasses();\n        $el.removeAttr('style');\n        $wrapperEl.removeAttr('style');\n        if (slides && slides.length) {\n          slides\n              .removeClass([\n                params.slideVisibleClass,\n                params.slideActiveClass,\n                params.slideNextClass,\n                params.slidePrevClass ].join(' '))\n              .removeAttr('style')\n              .removeAttr('data-swiper-slide-index');\n        }\n      }\n\n      swiper.emit('destroy');\n\n      // Detach emitter events\n      Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n        swiper.off(eventName);\n      });\n\n      if (deleteInstance !== false) {\n        swiper.$el[0].swiper = null;\n        swiper.$el.data('swiper', null);\n        Utils.deleteProps(swiper);\n      }\n      swiper.destroyed = true;\n\n      return null;\n    };\n\n    Swiper.extendDefaults = function extendDefaults (newDefaults) {\n      Utils.extend(extendedDefaults, newDefaults);\n    };\n\n    staticAccessors.extendedDefaults.get = function () {\n      return extendedDefaults;\n    };\n\n    staticAccessors.defaults.get = function () {\n      return defaults;\n    };\n\n    staticAccessors.Class.get = function () {\n      return SwiperClass;\n    };\n\n    staticAccessors.$.get = function () {\n      return $;\n    };\n\n    Object.defineProperties( Swiper, staticAccessors );\n\n    return Swiper;\n  }(SwiperClass));\n\n  var Device$1 = {\n    name: 'device',\n    proto: {\n      device: Device,\n    },\n    static: {\n      device: Device,\n    },\n  };\n\n  var Support$1 = {\n    name: 'support',\n    proto: {\n      support: Support,\n    },\n    static: {\n      support: Support,\n    },\n  };\n\n  var Browser = (function Browser() {\n    function isSafari() {\n      var ua = win.navigator.userAgent.toLowerCase();\n      return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n    }\n    return {\n      isEdge: !!win.navigator.userAgent.match(/Edge/g),\n      isSafari: isSafari(),\n      isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n    };\n  }());\n\n  var Browser$1 = {\n    name: 'browser',\n    proto: {\n      browser: Browser,\n    },\n    static: {\n      browser: Browser,\n    },\n  };\n\n  var Resize = {\n    name: 'resize',\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        resize: {\n          resizeHandler: function resizeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('beforeResize');\n            swiper.emit('resize');\n          },\n          orientationChangeHandler: function orientationChangeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('orientationchange');\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        // Emit resize\n        win.addEventListener('resize', swiper.resize.resizeHandler);\n\n        // Emit orientationchange\n        win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        win.removeEventListener('resize', swiper.resize.resizeHandler);\n        win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n    },\n  };\n\n  var Observer = {\n    func: win.MutationObserver || win.WebkitMutationObserver,\n    attach: function attach(target, options) {\n      if ( options === void 0 ) options = {};\n\n      var swiper = this;\n\n      var ObserverFunc = Observer.func;\n      var observer = new ObserverFunc(function (mutations) {\n        // The observerUpdate event should only be triggered\n        // once despite the number of mutations.  Additional\n        // triggers are redundant and are very costly\n        if (mutations.length === 1) {\n          swiper.emit('observerUpdate', mutations[0]);\n          return;\n        }\n        var observerUpdate = function observerUpdate() {\n          swiper.emit('observerUpdate', mutations[0]);\n        };\n\n        if (win.requestAnimationFrame) {\n          win.requestAnimationFrame(observerUpdate);\n        } else {\n          win.setTimeout(observerUpdate, 0);\n        }\n      });\n\n      observer.observe(target, {\n        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n        childList: typeof options.childList === 'undefined' ? true : options.childList,\n        characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n      });\n\n      swiper.observer.observers.push(observer);\n    },\n    init: function init() {\n      var swiper = this;\n      if (!Support.observer || !swiper.params.observer) { return; }\n      if (swiper.params.observeParents) {\n        var containerParents = swiper.$el.parents();\n        for (var i = 0; i < containerParents.length; i += 1) {\n          swiper.observer.attach(containerParents[i]);\n        }\n      }\n      // Observe container\n      swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n      // Observe wrapper\n      swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.observer.observers.forEach(function (observer) {\n        observer.disconnect();\n      });\n      swiper.observer.observers = [];\n    },\n  };\n\n  var Observer$1 = {\n    name: 'observer',\n    params: {\n      observer: false,\n      observeParents: false,\n      observeSlideChildren: false,\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        observer: {\n          init: Observer.init.bind(swiper),\n          attach: Observer.attach.bind(swiper),\n          destroy: Observer.destroy.bind(swiper),\n          observers: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.observer.init();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.observer.destroy();\n      },\n    },\n  };\n\n  function isEventSupported() {\n    var eventName = 'onwheel';\n    var isSupported = eventName in doc;\n\n    if (!isSupported) {\n      var element = doc.createElement('div');\n      element.setAttribute(eventName, 'return;');\n      isSupported = typeof element[eventName] === 'function';\n    }\n\n    if (!isSupported\n        && doc.implementation\n        && doc.implementation.hasFeature\n        // always returns true in newer browsers as per the standard.\n        // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n        && doc.implementation.hasFeature('', '') !== true\n    ) {\n      // This is the only way to test support for the `wheel` event in IE9+.\n      isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n    }\n\n    return isSupported;\n  }\n  var Mousewheel = {\n    lastScrollTime: Utils.now(),\n    lastEventBeforeSnap: undefined,\n    recentWheelEvents: [],\n    event: function event() {\n      if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n      return isEventSupported() ? 'wheel' : 'mousewheel';\n    },\n    normalize: function normalize(e) {\n      // Reasonable defaults\n      var PIXEL_STEP = 10;\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      var sX = 0;\n      var sY = 0; // spinX, spinY\n      var pX = 0;\n      var pY = 0; // pixelX, pixelY\n\n      // Legacy\n      if ('detail' in e) {\n        sY = e.detail;\n      }\n      if ('wheelDelta' in e) {\n        sY = -e.wheelDelta / 120;\n      }\n      if ('wheelDeltaY' in e) {\n        sY = -e.wheelDeltaY / 120;\n      }\n      if ('wheelDeltaX' in e) {\n        sX = -e.wheelDeltaX / 120;\n      }\n\n      // side scrolling on FF with DOMMouseScroll\n      if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n        sX = sY;\n        sY = 0;\n      }\n\n      pX = sX * PIXEL_STEP;\n      pY = sY * PIXEL_STEP;\n\n      if ('deltaY' in e) {\n        pY = e.deltaY;\n      }\n      if ('deltaX' in e) {\n        pX = e.deltaX;\n      }\n\n      if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n        pX = pY;\n        pY = 0;\n      }\n\n      if ((pX || pY) && e.deltaMode) {\n        if (e.deltaMode === 1) { // delta in LINE units\n          pX *= LINE_HEIGHT;\n          pY *= LINE_HEIGHT;\n        } else { // delta in PAGE units\n          pX *= PAGE_HEIGHT;\n          pY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Fall-back if spin cannot be determined\n      if (pX && !sX) {\n        sX = (pX < 1) ? -1 : 1;\n      }\n      if (pY && !sY) {\n        sY = (pY < 1) ? -1 : 1;\n      }\n\n      return {\n        spinX: sX,\n        spinY: sY,\n        pixelX: pX,\n        pixelY: pY,\n      };\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var swiper = this;\n      swiper.mouseEntered = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var swiper = this;\n      swiper.mouseEntered = false;\n    },\n    handle: function handle(event) {\n      var e = event;\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (swiper.params.cssMode) {\n        e.preventDefault();\n      }\n\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) { return true; }\n\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var delta = 0;\n      var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n      var data = Mousewheel.normalize(e);\n\n      if (params.forceToAxis) {\n        if (swiper.isHorizontal()) {\n          if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n          else { return true; }\n        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n        else { return true; }\n      } else {\n        delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n      }\n\n      if (delta === 0) { return true; }\n\n      if (params.invert) { delta = -delta; }\n\n      if (!swiper.params.freeMode) {\n        // Register the new event in a variable which stores the relevant data\n        var newEvent = {\n          time: Utils.now(),\n          delta: Math.abs(delta),\n          direction: Math.sign(delta),\n          raw: event,\n        };\n\n        // Keep the most recent events\n        var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n        if (recentWheelEvents.length >= 2) {\n          recentWheelEvents.shift(); // only store the last N events\n        }\n        var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n        recentWheelEvents.push(newEvent);\n\n        // If there is at least one previous recorded event:\n        //   If direction has changed or\n        //   if the scroll is quicker than the previous one:\n        //     Animate the slider.\n        // Else (this is the first time the wheel is moved):\n        //     Animate the slider.\n        if (prevEvent) {\n          if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta) {\n            swiper.mousewheel.animateSlider(newEvent);\n          }\n        } else {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n\n        // If it's time to release the scroll:\n        //   Return now so you don't hit the preventDefault.\n        if (swiper.mousewheel.releaseScroll(newEvent)) {\n          return true;\n        }\n      } else {\n        // Freemode or scrollContainer:\n\n        // If we recently snapped after a momentum scroll, then ignore wheel events\n        // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n        // or if it's a new scroll (larger delta or inverse sign as last event before\n        // an end-of-momentum snap).\n        var newEvent$1 = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n        var ref = swiper.mousewheel;\n        var lastEventBeforeSnap = ref.lastEventBeforeSnap;\n        var ignoreWheelEvents = lastEventBeforeSnap\n            && newEvent$1.time < lastEventBeforeSnap.time + 500\n            && newEvent$1.delta <= lastEventBeforeSnap.delta\n            && newEvent$1.direction === lastEventBeforeSnap.direction;\n        if (!ignoreWheelEvents) {\n          swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n          if (swiper.params.loop) {\n            swiper.loopFix();\n          }\n          var position = swiper.getTranslate() + (delta * params.sensitivity);\n          var wasBeginning = swiper.isBeginning;\n          var wasEnd = swiper.isEnd;\n\n          if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n          if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n          swiper.setTransition(0);\n          swiper.setTranslate(position);\n          swiper.updateProgress();\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n\n          if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n            swiper.updateSlidesClasses();\n          }\n\n          if (swiper.params.freeModeSticky) {\n            // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n            // the end of a momentum scroll by storing recent (N=15?) wheel events.\n            // 1. do all N events have decreasing or same (absolute value) delta?\n            // 2. did all N events arrive in the last M (M=500?) msecs?\n            // 3. does the earliest event have an (absolute value) delta that's\n            //    at least P (P=1?) larger than the most recent event's delta?\n            // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n            // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n            // Snap immediately and ignore remaining wheel events in this scroll.\n            // See comment above for \"remaining wheel events in this scroll\" determination.\n            // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n            clearTimeout(swiper.mousewheel.timeout);\n            swiper.mousewheel.timeout = undefined;\n            var recentWheelEvents$1 = swiper.mousewheel.recentWheelEvents;\n            if (recentWheelEvents$1.length >= 15) {\n              recentWheelEvents$1.shift(); // only store the last N events\n            }\n            var prevEvent$1 = recentWheelEvents$1.length ? recentWheelEvents$1[recentWheelEvents$1.length - 1] : undefined;\n            var firstEvent = recentWheelEvents$1[0];\n            recentWheelEvents$1.push(newEvent$1);\n            if (prevEvent$1 && (newEvent$1.delta > prevEvent$1.delta || newEvent$1.direction !== prevEvent$1.direction)) {\n              // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n              recentWheelEvents$1.splice(0);\n            } else if (recentWheelEvents$1.length >= 15\n                && newEvent$1.time - firstEvent.time < 500\n                && firstEvent.delta - newEvent$1.delta >= 1\n                && newEvent$1.delta <= 6\n            ) {\n              // We're at the end of the deceleration of a momentum scroll, so there's no need\n              // to wait for more events. Snap ASAP on the next tick.\n              // Also, because there's some remaining momentum we'll bias the snap in the\n              // direction of the ongoing scroll because it's better UX for the scroll to snap\n              // in the same direction as the scroll instead of reversing to snap.  Therefore,\n              // if it's already scrolled more than 20% in the current direction, keep going.\n              var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n              recentWheelEvents$1.splice(0);\n              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 0); // no delay; move on next tick\n            }\n            if (!swiper.mousewheel.timeout) {\n              // if we get here, then we haven't detected the end of a momentum scroll, so\n              // we'll consider a scroll \"complete\" when there haven't been any wheel events\n              // for 500ms.\n              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                var snapToThreshold = 0.5;\n                swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n                recentWheelEvents$1.splice(0);\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 500);\n            }\n          }\n\n          // Emit event\n          if (!ignoreWheelEvents) { swiper.emit('scroll', e); }\n\n          // Stop autoplay\n          if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n          // Return page scroll on edge positions\n          if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n        }\n      }\n\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      return false;\n    },\n    animateSlider: function animateSlider(newEvent) {\n      var swiper = this;\n      // If the movement is NOT big enough and\n      // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n      //   Don't go any further (avoid insignificant scroll movement).\n      if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n        // Return false as a default\n        return true;\n      }\n      // If user is scrolling towards the end:\n      //   If the slider hasn't hit the latest slide or\n      //   if the slider is a loop and\n      //   if the slider isn't moving right now:\n      //     Go to next slide and\n      //     emit a scroll event.\n      // Else (the user is scrolling towards the beginning) and\n      // if the slider hasn't hit the first slide or\n      // if the slider is a loop and\n      // if the slider isn't moving right now:\n      //   Go to prev slide and\n      //   emit a scroll event.\n      if (newEvent.direction < 0) {\n        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n          swiper.slideNext();\n          swiper.emit('scroll', newEvent.raw);\n        }\n      } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n        swiper.slidePrev();\n        swiper.emit('scroll', newEvent.raw);\n      }\n      // If you got here is because an animation has been triggered so store the current time\n      swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n      // Return false as a default\n      return false;\n    },\n    releaseScroll: function releaseScroll(newEvent) {\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n      if (newEvent.direction < 0) {\n        if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n          // Return true to animate scroll on edges\n          return true;\n        }\n      } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n      return false;\n    },\n    enable: function enable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n      target.on(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = true;\n      return true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (!swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.off(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = false;\n      return true;\n    },\n  };\n\n  var Mousewheel$1 = {\n    name: 'mousewheel',\n    params: {\n      mousewheel: {\n        enabled: false,\n        releaseOnEdges: false,\n        invert: false,\n        forceToAxis: false,\n        sensitivity: 1,\n        eventsTarged: 'container',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        mousewheel: {\n          enabled: false,\n          enable: Mousewheel.enable.bind(swiper),\n          disable: Mousewheel.disable.bind(swiper),\n          handle: Mousewheel.handle.bind(swiper),\n          handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n          handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n          animateSlider: Mousewheel.animateSlider.bind(swiper),\n          releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n          lastScrollTime: Utils.now(),\n          lastEventBeforeSnap: undefined,\n          recentWheelEvents: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n          swiper.mousewheel.disable();\n        }\n        if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.cssMode) {\n          swiper.mousewheel.enable();\n        }\n        if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n      },\n    },\n  };\n\n  var Navigation = {\n    update: function update() {\n      // Update Navigation Buttons\n      var swiper = this;\n      var params = swiper.params.navigation;\n\n      if (swiper.params.loop) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          $prevEl.addClass(params.disabledClass);\n        } else {\n          $prevEl.removeClass(params.disabledClass);\n        }\n        $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          $nextEl.addClass(params.disabledClass);\n        } else {\n          $nextEl.removeClass(params.disabledClass);\n        }\n        $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    },\n    onPrevClick: function onPrevClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isBeginning && !swiper.params.loop) { return; }\n      swiper.slidePrev();\n    },\n    onNextClick: function onNextClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isEnd && !swiper.params.loop) { return; }\n      swiper.slideNext();\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (!(params.nextEl || params.prevEl)) { return; }\n\n      var $nextEl;\n      var $prevEl;\n      if (params.nextEl) {\n        $nextEl = $(params.nextEl);\n        if (\n            swiper.params.uniqueNavElements\n            && typeof params.nextEl === 'string'\n            && $nextEl.length > 1\n            && swiper.$el.find(params.nextEl).length === 1\n        ) {\n          $nextEl = swiper.$el.find(params.nextEl);\n        }\n      }\n      if (params.prevEl) {\n        $prevEl = $(params.prevEl);\n        if (\n            swiper.params.uniqueNavElements\n            && typeof params.prevEl === 'string'\n            && $prevEl.length > 1\n            && swiper.$el.find(params.prevEl).length === 1\n        ) {\n          $prevEl = swiper.$el.find(params.prevEl);\n        }\n      }\n\n      if ($nextEl && $nextEl.length > 0) {\n        $nextEl.on('click', swiper.navigation.onNextClick);\n      }\n      if ($prevEl && $prevEl.length > 0) {\n        $prevEl.on('click', swiper.navigation.onPrevClick);\n      }\n\n      Utils.extend(swiper.navigation, {\n        $nextEl: $nextEl,\n        nextEl: $nextEl && $nextEl[0],\n        $prevEl: $prevEl,\n        prevEl: $prevEl && $prevEl[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n      if ($nextEl && $nextEl.length) {\n        $nextEl.off('click', swiper.navigation.onNextClick);\n        $nextEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n      if ($prevEl && $prevEl.length) {\n        $prevEl.off('click', swiper.navigation.onPrevClick);\n        $prevEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n    },\n  };\n\n  var Navigation$1 = {\n    name: 'navigation',\n    params: {\n      navigation: {\n        nextEl: null,\n        prevEl: null,\n\n        hideOnClick: false,\n        disabledClass: 'swiper-button-disabled',\n        hiddenClass: 'swiper-button-hidden',\n        lockClass: 'swiper-button-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        navigation: {\n          init: Navigation.init.bind(swiper),\n          update: Navigation.update.bind(swiper),\n          destroy: Navigation.destroy.bind(swiper),\n          onNextClick: Navigation.onNextClick.bind(swiper),\n          onPrevClick: Navigation.onPrevClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.navigation.init();\n        swiper.navigation.update();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.navigation.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        var ref = swiper.navigation;\n        var $nextEl = ref.$nextEl;\n        var $prevEl = ref.$prevEl;\n        if (\n            swiper.params.navigation.hideOnClick\n            && !$(e.target).is($prevEl)\n            && !$(e.target).is($nextEl)\n        ) {\n          var isHidden;\n          if ($nextEl) {\n            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n          } else if ($prevEl) {\n            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n          }\n          if (isHidden === true) {\n            swiper.emit('navigationShow', swiper);\n          } else {\n            swiper.emit('navigationHide', swiper);\n          }\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      },\n    },\n  };\n\n  var Pagination = {\n    update: function update() {\n      // Render || Update Pagination bullets/items\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el;\n      // Current/Total\n      var current;\n      var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.loop) {\n        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n        if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n          current -= (slidesLength - (swiper.loopedSlides * 2));\n        }\n        if (current > total - 1) { current -= total; }\n        if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n      } else if (typeof swiper.snapIndex !== 'undefined') {\n        current = swiper.snapIndex;\n      } else {\n        current = swiper.activeIndex || 0;\n      }\n      // Types\n      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n        var bullets = swiper.pagination.bullets;\n        var firstIndex;\n        var lastIndex;\n        var midIndex;\n        if (params.dynamicBullets) {\n          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n          $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n          if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n            swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n            if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n            } else if (swiper.pagination.dynamicBulletIndex < 0) {\n              swiper.pagination.dynamicBulletIndex = 0;\n            }\n          }\n          firstIndex = current - swiper.pagination.dynamicBulletIndex;\n          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n          midIndex = (lastIndex + firstIndex) / 2;\n        }\n        bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n        if ($el.length > 1) {\n          bullets.each(function (index, bullet) {\n            var $bullet = $(bullet);\n            var bulletIndex = $bullet.index();\n            if (bulletIndex === current) {\n              $bullet.addClass(params.bulletActiveClass);\n            }\n            if (params.dynamicBullets) {\n              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n              }\n              if (bulletIndex === firstIndex) {\n                $bullet\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev\"))\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              }\n              if (bulletIndex === lastIndex) {\n                $bullet\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next\"))\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            }\n          });\n        } else {\n          var $bullet = bullets.eq(current);\n          var bulletIndex = $bullet.index();\n          $bullet.addClass(params.bulletActiveClass);\n          if (params.dynamicBullets) {\n            var $firstDisplayedBullet = bullets.eq(firstIndex);\n            var $lastDisplayedBullet = bullets.eq(lastIndex);\n            for (var i = firstIndex; i <= lastIndex; i += 1) {\n              bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n            }\n            if (swiper.params.loop) {\n              if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n                for (var i$1 = params.dynamicMainBullets; i$1 >= 0; i$1 -= 1) {\n                  bullets.eq(bullets.length - i$1).addClass(((params.bulletActiveClass) + \"-main\"));\n                }\n                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(((params.bulletActiveClass) + \"-prev\"));\n              } else {\n                $firstDisplayedBullet\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev\"))\n                    .prev()\n                    .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n                $lastDisplayedBullet\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next\"))\n                    .next()\n                    .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            } else {\n              $firstDisplayedBullet\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev\"))\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              $lastDisplayedBullet\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next\"))\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next-next\"));\n            }\n          }\n        }\n        if (params.dynamicBullets) {\n          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n          var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n          var offsetProp = rtl ? 'right' : 'left';\n          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n        }\n      }\n      if (params.type === 'fraction') {\n        $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n        $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n      }\n      if (params.type === 'progressbar') {\n        var progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        var scale = (current + 1) / total;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        $el.html(params.renderCustom(swiper, current + 1, total));\n        swiper.emit('paginationRender', swiper, $el[0]);\n      } else {\n        swiper.emit('paginationUpdate', swiper, $el[0]);\n      }\n      $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    },\n    render: function render() {\n      // Render Container\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n      var $el = swiper.pagination.$el;\n      var paginationHTML = '';\n      if (params.type === 'bullets') {\n        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n        for (var i = 0; i < numberOfBullets; i += 1) {\n          if (params.renderBullet) {\n            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n          } else {\n            paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\"></\" + (params.bulletElement) + \">\";\n          }\n        }\n        $el.html(paginationHTML);\n        swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n      }\n      if (params.type === 'fraction') {\n        if (params.renderFraction) {\n          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + (params.currentClass) + \"\\\"></span>\"\n              + ' / '\n              + \"<span class=\\\"\" + (params.totalClass) + \"\\\"></span>\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type === 'progressbar') {\n        if (params.renderProgressbar) {\n          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n        } else {\n          paginationHTML = \"<span class=\\\"\" + (params.progressbarFillClass) + \"\\\"></span>\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type !== 'custom') {\n        swiper.emit('paginationRender', swiper.pagination.$el[0]);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el) { return; }\n\n      var $el = $(params.el);\n      if ($el.length === 0) { return; }\n\n      if (\n          swiper.params.uniqueNavElements\n          && typeof params.el === 'string'\n          && $el.length > 1\n          && swiper.$el.find(params.el).length === 1\n      ) {\n        $el = swiper.$el.find(params.el);\n      }\n\n      if (params.type === 'bullets' && params.clickable) {\n        $el.addClass(params.clickableClass);\n      }\n\n      $el.addClass(params.modifierClass + params.type);\n\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n        swiper.pagination.dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        $el.addClass(params.progressbarOppositeClass);\n      }\n\n      if (params.clickable) {\n        $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n          e.preventDefault();\n          var index = $(this).index() * swiper.params.slidesPerGroup;\n          if (swiper.params.loop) { index += swiper.loopedSlides; }\n          swiper.slideTo(index);\n        });\n      }\n\n      Utils.extend(swiper.pagination, {\n        $el: $el,\n        el: $el[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var $el = swiper.pagination.$el;\n\n      $el.removeClass(params.hiddenClass);\n      $el.removeClass(params.modifierClass + params.type);\n      if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n      if (params.clickable) {\n        $el.off('click', (\".\" + (params.bulletClass)));\n      }\n    },\n  };\n\n  var Pagination$1 = {\n    name: 'pagination',\n    params: {\n      pagination: {\n        el: null,\n        bulletElement: 'span',\n        clickable: false,\n        hideOnClick: false,\n        renderBullet: null,\n        renderProgressbar: null,\n        renderFraction: null,\n        renderCustom: null,\n        progressbarOpposite: false,\n        type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n        dynamicBullets: false,\n        dynamicMainBullets: 1,\n        formatFractionCurrent: function (number) { return number; },\n        formatFractionTotal: function (number) { return number; },\n        bulletClass: 'swiper-pagination-bullet',\n        bulletActiveClass: 'swiper-pagination-bullet-active',\n        modifierClass: 'swiper-pagination-', // NEW\n        currentClass: 'swiper-pagination-current',\n        totalClass: 'swiper-pagination-total',\n        hiddenClass: 'swiper-pagination-hidden',\n        progressbarFillClass: 'swiper-pagination-progressbar-fill',\n        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n        clickableClass: 'swiper-pagination-clickable', // NEW\n        lockClass: 'swiper-pagination-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        pagination: {\n          init: Pagination.init.bind(swiper),\n          render: Pagination.render.bind(swiper),\n          update: Pagination.update.bind(swiper),\n          destroy: Pagination.destroy.bind(swiper),\n          dynamicBulletIndex: 0,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.pagination.init();\n        swiper.pagination.render();\n        swiper.pagination.update();\n      },\n      activeIndexChange: function activeIndexChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          swiper.pagination.update();\n        }\n      },\n      snapIndexChange: function snapIndexChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.update();\n        }\n      },\n      slidesLengthChange: function slidesLengthChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      snapGridLengthChange: function snapGridLengthChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.pagination.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        if (\n            swiper.params.pagination.el\n            && swiper.params.pagination.hideOnClick\n            && swiper.pagination.$el.length > 0\n            && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n        ) {\n          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n          if (isHidden === true) {\n            swiper.emit('paginationShow', swiper);\n          } else {\n            swiper.emit('paginationHide', swiper);\n          }\n          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      },\n    },\n  };\n\n  /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n  var Controller = {\n    LinearSpline: function LinearSpline(x, y) {\n      var binarySearch = (function search() {\n        var maxIndex;\n        var minIndex;\n        var guess;\n        return function (array, val) {\n          minIndex = -1;\n          maxIndex = array.length;\n          while (maxIndex - minIndex > 1) {\n            guess = maxIndex + minIndex >> 1;\n            if (array[guess] <= val) {\n              minIndex = guess;\n            } else {\n              maxIndex = guess;\n            }\n          }\n          return maxIndex;\n        };\n      }());\n      this.x = x;\n      this.y = y;\n      this.lastIndex = x.length - 1;\n      // Given an x value (x2), return the expected y2 value:\n      // (x1,y1) is the known point before given value,\n      // (x3,y3) is the known point after given value.\n      var i1;\n      var i3;\n\n      this.interpolate = function interpolate(x2) {\n        if (!x2) { return 0; }\n\n        // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n        i3 = binarySearch(this.x, x2);\n        i1 = i3 - 1;\n\n        // We have our indexes i1 & i3, so we can calculate already:\n        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n        return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n      };\n      return this;\n    },\n    // xxx: for now i will just save one spline function to to\n    getInterpolateFunction: function getInterpolateFunction(c) {\n      var swiper = this;\n      if (!swiper.controller.spline) {\n        swiper.controller.spline = swiper.params.loop\n            ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n            : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n      }\n    },\n    setTranslate: function setTranslate(setTranslate$1, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var multiplier;\n      var controlledTranslate;\n      function setControlledTranslate(c) {\n        // this will create an Interpolate function based on the snapGrids\n        // x is the Grid of the scrolled scroller and y will be the controlled scroller\n        // it makes sense to create this only once and recall it for the interpolation\n        // the function does a lot of value caching for performance\n        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n        if (swiper.params.controller.by === 'slide') {\n          swiper.controller.getInterpolateFunction(c);\n          // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n          // but it did not work out\n          controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n        }\n\n        if (!controlledTranslate || swiper.params.controller.by === 'container') {\n          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n          controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n        }\n\n        if (swiper.params.controller.inverse) {\n          controlledTranslate = c.maxTranslate() - controlledTranslate;\n        }\n        c.updateProgress(controlledTranslate);\n        c.setTranslate(controlledTranslate, swiper);\n        c.updateActiveIndex();\n        c.updateSlidesClasses();\n      }\n      if (Array.isArray(controlled)) {\n        for (var i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTranslate(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTranslate(controlled);\n      }\n    },\n    setTransition: function setTransition(duration, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var i;\n      function setControlledTransition(c) {\n        c.setTransition(duration, swiper);\n        if (duration !== 0) {\n          c.transitionStart();\n          if (c.params.autoHeight) {\n            Utils.nextTick(function () {\n              c.updateAutoHeight();\n            });\n          }\n          c.$wrapperEl.transitionEnd(function () {\n            if (!controlled) { return; }\n            if (c.params.loop && swiper.params.controller.by === 'slide') {\n              c.loopFix();\n            }\n            c.transitionEnd();\n          });\n        }\n      }\n      if (Array.isArray(controlled)) {\n        for (i = 0; i < controlled.length; i += 1) {\n          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n            setControlledTransition(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper && byController !== controlled) {\n        setControlledTransition(controlled);\n      }\n    },\n  };\n  var Controller$1 = {\n    name: 'controller',\n    params: {\n      controller: {\n        control: undefined,\n        inverse: false,\n        by: 'slide', // or 'container'\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        controller: {\n          control: swiper.params.controller.control,\n          getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n          setTranslate: Controller.setTranslate.bind(swiper),\n          setTransition: Controller.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      update: function update() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      setTranslate: function setTranslate(translate, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTranslate(translate, byController);\n      },\n      setTransition: function setTransition(duration, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTransition(duration, byController);\n      },\n    },\n  };\n\n  var a11y = {\n    makeElFocusable: function makeElFocusable($el) {\n      $el.attr('tabIndex', '0');\n      return $el;\n    },\n    addElRole: function addElRole($el, role) {\n      $el.attr('role', role);\n      return $el;\n    },\n    addElLabel: function addElLabel($el, label) {\n      $el.attr('aria-label', label);\n      return $el;\n    },\n    disableEl: function disableEl($el) {\n      $el.attr('aria-disabled', true);\n      return $el;\n    },\n    enableEl: function enableEl($el) {\n      $el.attr('aria-disabled', false);\n      return $el;\n    },\n    onEnterKey: function onEnterKey(e) {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (e.keyCode !== 13) { return; }\n      var $targetEl = $(e.target);\n      if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          swiper.a11y.notify(params.lastSlideMessage);\n        } else {\n          swiper.a11y.notify(params.nextSlideMessage);\n        }\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n        if (!(swiper.isBeginning && !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n        if (swiper.isBeginning) {\n          swiper.a11y.notify(params.firstSlideMessage);\n        } else {\n          swiper.a11y.notify(params.prevSlideMessage);\n        }\n      }\n      if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n        $targetEl[0].click();\n      }\n    },\n    notify: function notify(message) {\n      var swiper = this;\n      var notification = swiper.a11y.liveRegion;\n      if (notification.length === 0) { return; }\n      notification.html('');\n      notification.html(message);\n    },\n    updateNavigation: function updateNavigation() {\n      var swiper = this;\n\n      if (swiper.params.loop || !swiper.navigation) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl && $prevEl.length > 0) {\n        if (swiper.isBeginning) {\n          swiper.a11y.disableEl($prevEl);\n        } else {\n          swiper.a11y.enableEl($prevEl);\n        }\n      }\n      if ($nextEl && $nextEl.length > 0) {\n        if (swiper.isEnd) {\n          swiper.a11y.disableEl($nextEl);\n        } else {\n          swiper.a11y.enableEl($nextEl);\n        }\n      }\n    },\n    updatePagination: function updatePagination() {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n          var $bulletEl = $(bulletEl);\n          swiper.a11y.makeElFocusable($bulletEl);\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n        });\n      }\n    },\n    init: function init() {\n      var swiper = this;\n\n      swiper.$el.append(swiper.a11y.liveRegion);\n\n      // Navigation\n      var params = swiper.params.a11y;\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        swiper.a11y.makeElFocusable($nextEl);\n        swiper.a11y.addElRole($nextEl, 'button');\n        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n        $nextEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        swiper.a11y.makeElFocusable($prevEl);\n        swiper.a11y.addElRole($prevEl, 'button');\n        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n        $prevEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation && swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation && swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        $nextEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        $prevEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n        swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n  };\n  var A11y = {\n    name: 'a11y',\n    params: {\n      a11y: {\n        enabled: true,\n        notificationClass: 'swiper-notification',\n        prevSlideMessage: 'Previous slide',\n        nextSlideMessage: 'Next slide',\n        firstSlideMessage: 'This is the first slide',\n        lastSlideMessage: 'This is the last slide',\n        paginationBulletMessage: 'Go to slide {{index}}',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        a11y: {\n          liveRegion: $((\"<span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")),\n        },\n      });\n      Object.keys(a11y).forEach(function (methodName) {\n        swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.init();\n        swiper.a11y.updateNavigation();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      paginationUpdate: function paginationUpdate() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updatePagination();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.destroy();\n      },\n    },\n  };\n\n  /* eslint no-underscore-dangle: \"off\" */\n\n  var Autoplay = {\n    run: function run() {\n      var swiper = this;\n      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n      var delay = swiper.params.autoplay.delay;\n      if ($activeSlideEl.attr('data-swiper-autoplay')) {\n        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n      }\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = Utils.nextTick(function () {\n        if (swiper.params.autoplay.reverseDirection) {\n          if (swiper.params.loop) {\n            swiper.loopFix();\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.isBeginning) {\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else {\n            swiper.autoplay.stop();\n          }\n        } else if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isEnd) {\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n        if (swiper.params.cssMode && swiper.autoplay.running) { swiper.autoplay.run(); }\n      }, delay);\n    },\n    start: function start() {\n      var swiper = this;\n      if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n      if (swiper.autoplay.running) { return false; }\n      swiper.autoplay.running = true;\n      swiper.emit('autoplayStart');\n      swiper.autoplay.run();\n      return true;\n    },\n    stop: function stop() {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return false; }\n      if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n      if (swiper.autoplay.timeout) {\n        clearTimeout(swiper.autoplay.timeout);\n        swiper.autoplay.timeout = undefined;\n      }\n      swiper.autoplay.running = false;\n      swiper.emit('autoplayStop');\n      return true;\n    },\n    pause: function pause(speed) {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return; }\n      if (swiper.autoplay.paused) { return; }\n      if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n      swiper.autoplay.paused = true;\n      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n        swiper.autoplay.paused = false;\n        swiper.autoplay.run();\n      } else {\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      }\n    },\n  };\n\n  var Autoplay$1 = {\n    name: 'autoplay',\n    params: {\n      autoplay: {\n        enabled: false,\n        delay: 3000,\n        waitForTransition: true,\n        disableOnInteraction: true,\n        stopOnLastSlide: false,\n        reverseDirection: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        autoplay: {\n          running: false,\n          paused: false,\n          run: Autoplay.run.bind(swiper),\n          start: Autoplay.start.bind(swiper),\n          stop: Autoplay.stop.bind(swiper),\n          pause: Autoplay.pause.bind(swiper),\n          onVisibilityChange: function onVisibilityChange() {\n            if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n              swiper.autoplay.pause();\n            }\n            if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n              swiper.autoplay.run();\n              swiper.autoplay.paused = false;\n            }\n          },\n          onTransitionEnd: function onTransitionEnd(e) {\n            if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n            swiper.autoplay.paused = false;\n            if (!swiper.autoplay.running) {\n              swiper.autoplay.stop();\n            } else {\n              swiper.autoplay.run();\n            }\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.autoplay.enabled) {\n          swiper.autoplay.start();\n          document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n        }\n      },\n      beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            swiper.autoplay.stop();\n          }\n        }\n      },\n      sliderFirstMove: function sliderFirstMove() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.pause();\n          }\n        }\n      },\n      touchEnd: function touchEnd() {\n        var swiper = this;\n        if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.run();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          swiper.autoplay.stop();\n        }\n        document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      },\n    },\n  };\n\n  var Fade = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n      for (var i = 0; i < slides.length; i += 1) {\n        var $slideEl = swiper.slides.eq(i);\n        var offset = $slideEl[0].swiperSlideOffset;\n        var tx = -offset;\n        if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n        var ty = 0;\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n        }\n        var slideOpacity = swiper.params.fadeEffect.crossFade\n            ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n            : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n        $slideEl\n            .css({\n              opacity: slideOpacity,\n            })\n            .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides;\n      var $wrapperEl = swiper.$wrapperEl;\n      slides.transition(duration);\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        var eventTriggered = false;\n        slides.transitionEnd(function () {\n          if (eventTriggered) { return; }\n          if (!swiper || swiper.destroyed) { return; }\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n          for (var i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    },\n  };\n\n  var EffectFade = {\n    name: 'effect-fade',\n    params: {\n      fadeEffect: {\n        crossFade: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        fadeEffect: {\n          setTranslate: Fade.setTranslate.bind(swiper),\n          setTransition: Fade.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTransition(duration);\n      },\n    },\n  };\n\n  // Swiper Class\n\n  var components = [\n    Device$1,\n    Support$1,\n    Browser$1,\n    Resize,\n    Observer$1,\n    Mousewheel$1,\n    Navigation$1,\n    Pagination$1,\n    Controller$1,\n    A11y,\n    Autoplay$1,\n    EffectFade\n  ];\n\n  if (typeof Swiper.use === 'undefined') {\n    Swiper.use = Swiper.Class.use;\n    Swiper.installModule = Swiper.Class.installModule;\n  }\n\n  Swiper.use(components);\n\n  return Swiper;\n\n}));\n//# sourceMappingURL=swiper.js.map\n","function timeline(collection, options) {\r\n  const timelines = [];\r\n  const warningLabel = 'Timeline:';\r\n  let winWidth = window.innerWidth;\r\n  let resizeTimer;\r\n  let currentIndex = 0;\r\n  // Set default settings\r\n  const defaultSettings = {\r\n    forceVerticalMode: {\r\n      type: 'integer',\r\n      defaultValue: 600\r\n    },\r\n    horizontalStartPosition: {\r\n      type: 'string',\r\n      acceptedValues: ['bottom', 'top'],\r\n      defaultValue: 'top'\r\n    },\r\n    mode: {\r\n      type: 'string',\r\n      acceptedValues: ['horizontal', 'vertical'],\r\n      defaultValue: 'vertical'\r\n    },\r\n    moveItems: {\r\n      type: 'integer',\r\n      defaultValue: 1\r\n    },\r\n    rtlMode: {\r\n      type: 'boolean',\r\n      acceptedValues: [true, false],\r\n      defaultValue: false\r\n    },\r\n    startIndex: {\r\n      type: 'integer',\r\n      defaultValue: 0\r\n    },\r\n    verticalStartPosition: {\r\n      type: 'string',\r\n      acceptedValues: ['left', 'right'],\r\n      defaultValue: 'left'\r\n    },\r\n    verticalTrigger: {\r\n      type: 'string',\r\n      defaultValue: '15%'\r\n    },\r\n    visibleItems: {\r\n      type: 'integer',\r\n      defaultValue: 3\r\n    }\r\n  };\r\n\r\n  // Helper function to test whether values are an integer\r\n  function testValues(value, settingName) {\r\n    if (typeof value !== 'number' && value % 1 !== 0) {\r\n      console.warn(`${warningLabel} The value \"${value}\" entered for the setting \"${settingName}\" is not an integer.`);\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  // Helper function to wrap an element in another HTML element\r\n  function itemWrap(el, wrapper, classes) {\r\n    wrapper.classList.add(classes);\r\n    el.parentNode.insertBefore(wrapper, el);\r\n    wrapper.appendChild(el);\r\n  }\r\n\r\n  // Helper function to wrap each element in a group with other HTML elements\r\n  function wrapElements(items) {\r\n    items.forEach((item) => {\r\n      itemWrap(item.querySelector('.timeline__content'), document.createElement('div'), 'timeline__content__wrap');\r\n      itemWrap(item.querySelector('.timeline__content__wrap'), document.createElement('div'), 'timeline__item__inner');\r\n    });\r\n  }\r\n\r\n  // Helper function to check if an element is partially in the viewport\r\n  function isElementInViewport(el, triggerPosition) {\r\n    const rect = el.getBoundingClientRect();\r\n    const windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n    const defaultTrigger = defaultSettings.verticalTrigger.defaultValue.match(/(\\d*\\.?\\d*)(.*)/);\r\n    let triggerUnit = triggerPosition.unit;\r\n    let triggerValue = triggerPosition.value;\r\n    let trigger = windowHeight;\r\n    if (triggerUnit === 'px' && triggerValue >= windowHeight) {\r\n      console.warn('The value entered for the setting \"verticalTrigger\" is larger than the window height. The default value will be used instead.');\r\n      [, triggerValue, triggerUnit] = defaultTrigger;\r\n    }\r\n    if (triggerUnit === 'px') {\r\n      trigger = parseInt(trigger - triggerValue, 10);\r\n    } else if (triggerUnit === '%') {\r\n      trigger = parseInt(trigger * ((100 - triggerValue) / 100), 10);\r\n    }\r\n    return (\r\n      rect.top <= trigger\r\n      && rect.left <= (window.innerWidth || document.documentElement.clientWidth)\r\n      && (rect.top + rect.height) >= 0\r\n      && (rect.left + rect.width) >= 0\r\n    );\r\n  }\r\n\r\n  // Helper function to add transform styles\r\n  function addTransforms(el, transform) {\r\n    el.style.webkitTransform = transform;\r\n    el.style.msTransform = transform;\r\n    el.style.transform = transform;\r\n  }\r\n\r\n  // Create timelines\r\n  function createTimelines(timelineEl) {\r\n    const timelineName = timelineEl.id ? `#${timelineEl.id}` : `.${timelineEl.className}`;\r\n    const errorPart = 'could not be found as a direct descendant of';\r\n    const data = timelineEl.dataset;\r\n    let wrap;\r\n    let scroller;\r\n    let items;\r\n    const settings = {};\r\n\r\n    // Test for correct HTML structure\r\n    try {\r\n      wrap = timelineEl.querySelector('.timeline__wrap');\r\n      if (!wrap) {\r\n        throw new Error(`${warningLabel} .timeline__wrap ${errorPart} ${timelineName}`);\r\n      } else {\r\n        scroller = wrap.querySelector('.timeline__items');\r\n        if (!scroller) {\r\n          throw new Error(`${warningLabel} .timeline__items ${errorPart} .timeline__wrap`);\r\n        } else {\r\n          items = [].slice.call(scroller.children, 0);\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.warn(e.message);\r\n      return false;\r\n    }\r\n\r\n    // Test setting input values\r\n    Object.keys(defaultSettings).forEach((key) => {\r\n      settings[key] = defaultSettings[key].defaultValue;\r\n\r\n      if (data[key]) {\r\n        settings[key] = data[key];\r\n      } else if (options && options[key]) {\r\n        settings[key] = options[key];\r\n      }\r\n\r\n      if (defaultSettings[key].type === 'integer') {\r\n        if (!settings[key] || !testValues(settings[key], key)) {\r\n          settings[key] = defaultSettings[key].defaultValue;\r\n        }\r\n      } else if (defaultSettings[key].type === 'string') {\r\n        if (defaultSettings[key].acceptedValues && defaultSettings[key].acceptedValues.indexOf(settings[key]) === -1) {\r\n          console.warn(`${warningLabel} The value \"${settings[key]}\" entered for the setting \"${key}\" was not recognised.`);\r\n          settings[key] = defaultSettings[key].defaultValue;\r\n        }\r\n      }\r\n    });\r\n\r\n    // Further specific testing of input values\r\n    const defaultTrigger = defaultSettings.verticalTrigger.defaultValue.match(/(\\d*\\.?\\d*)(.*)/);\r\n    const triggerArray = settings.verticalTrigger.match(/(\\d*\\.?\\d*)(.*)/);\r\n    let [, triggerValue, triggerUnit] = triggerArray;\r\n    let triggerValid = true;\r\n    if (!triggerValue) {\r\n      console.warn(`${warningLabel} No numercial value entered for the 'verticalTrigger' setting.`);\r\n      triggerValid = false;\r\n    }\r\n    if (triggerUnit !== 'px' && triggerUnit !== '%') {\r\n      console.warn(`${warningLabel} The setting 'verticalTrigger' must be a percentage or pixel value.`);\r\n      triggerValid = false;\r\n    }\r\n    if (triggerUnit === '%' && (triggerValue > 100 || triggerValue < 0)) {\r\n      console.warn(`${warningLabel} The 'verticalTrigger' setting value must be between 0 and 100 if using a percentage value.`);\r\n      triggerValid = false;\r\n    } else if (triggerUnit === 'px' && triggerValue < 0) {\r\n      console.warn(`${warningLabel} The 'verticalTrigger' setting value must be above 0 if using a pixel value.`);\r\n      triggerValid = false;\r\n    }\r\n\r\n    if (triggerValid === false) {\r\n      [, triggerValue, triggerUnit] = defaultTrigger;\r\n    }\r\n\r\n    settings.verticalTrigger = {\r\n      unit: triggerUnit,\r\n      value: triggerValue\r\n    };\r\n\r\n    if (settings.moveItems > settings.visibleItems) {\r\n      console.warn(`${warningLabel} The value of \"moveItems\" (${settings.moveItems}) is larger than the number of \"visibleItems\" (${settings.visibleItems}). The value of \"visibleItems\" has been used instead.`);\r\n      settings.moveItems = settings.visibleItems;\r\n    }\r\n\r\n    if (settings.startIndex > (items.length - settings.visibleItems) && items.length > settings.visibleItems) {\r\n      console.warn(`${warningLabel} The 'startIndex' setting must be between 0 and ${items.length - settings.visibleItems} for this timeline. The value of ${items.length - settings.visibleItems} has been used instead.`);\r\n      settings.startIndex = items.length - settings.visibleItems;\r\n    } else if (items.length <= settings.visibleItems) {\r\n      console.warn(`${warningLabel} The number of items in the timeline must exceed the number of visible items to use the 'startIndex' option.`);\r\n      settings.startIndex = 0;\r\n    } else if (settings.startIndex < 0) {\r\n      console.warn(`${warningLabel} The 'startIndex' setting must be between 0 and ${items.length - settings.visibleItems} for this timeline. The value of 0 has been used instead.`);\r\n      settings.startIndex = 0;\r\n    }\r\n\r\n    timelines.push({\r\n      timelineEl,\r\n      wrap,\r\n      scroller,\r\n      items,\r\n      settings\r\n    });\r\n  }\r\n\r\n  if (collection.length) {\r\n    [].forEach.call(collection, createTimelines);\r\n  }\r\n\r\n  // Set height and widths of timeline elements and viewport\r\n  function setHeightandWidths(tl) {\r\n    // Set widths of items and viewport\r\n    function setWidths() {\r\n      tl.itemWidth = tl.wrap.offsetWidth / tl.settings.visibleItems;\r\n      tl.items.forEach((item) => {\r\n        item.style.width = `${tl.itemWidth}px`;\r\n      });\r\n      tl.scrollerWidth = tl.itemWidth * tl.items.length;\r\n      tl.scroller.style.width = `${tl.scrollerWidth}px`;\r\n    }\r\n\r\n    // Set height of items and viewport\r\n    function setHeights() {\r\n      let oddIndexTallest = 0;\r\n      let evenIndexTallest = 0;\r\n      tl.items.forEach((item, i) => {\r\n        item.style.height = 'auto';\r\n        const height = item.offsetHeight;\r\n        if (i % 2 === 0) {\r\n          evenIndexTallest = height > evenIndexTallest ? height : evenIndexTallest;\r\n        } else {\r\n          oddIndexTallest = height > oddIndexTallest ? height : oddIndexTallest;\r\n        }\r\n      });\r\n\r\n      const transformString = `translateY(${evenIndexTallest}px)`;\r\n      tl.items.forEach((item, i) => {\r\n        if (i % 2 === 0) {\r\n          item.style.height = `${evenIndexTallest}px`;\r\n          if (tl.settings.horizontalStartPosition === 'bottom') {\r\n            item.classList.add('timeline__item--bottom');\r\n            addTransforms(item, transformString);\r\n          } else {\r\n            item.classList.add('timeline__item--top');\r\n          }\r\n        } else {\r\n          item.style.height = `${oddIndexTallest}px`;\r\n          if (tl.settings.horizontalStartPosition !== 'bottom') {\r\n            item.classList.add('timeline__item--bottom');\r\n            addTransforms(item, transformString);\r\n          } else {\r\n            item.classList.add('timeline__item--top');\r\n          }\r\n        }\r\n      });\r\n      tl.scroller.style.height = `${evenIndexTallest + oddIndexTallest}px`;\r\n    }\r\n\r\n    if (window.innerWidth > tl.settings.forceVerticalMode) {\r\n      setWidths();\r\n      setHeights();\r\n    }\r\n  }\r\n\r\n  // Create and add arrow controls to horizontal timeline\r\n  function addNavigation(tl) {\r\n    if (tl.items.length > tl.settings.visibleItems) {\r\n      const prevArrow = document.createElement('button');\r\n      const nextArrow = document.createElement('button');\r\n      const topPosition = tl.items[0].offsetHeight;\r\n      prevArrow.className = 'timeline-nav-button timeline-nav-button--prev';\r\n      nextArrow.className = 'timeline-nav-button timeline-nav-button--next';\r\n      prevArrow.textContent = 'Previous';\r\n      nextArrow.textContent = 'Next';\r\n      prevArrow.style.top = `${topPosition}px`;\r\n      nextArrow.style.top = `${topPosition}px`;\r\n      if (currentIndex === 0) {\r\n        prevArrow.disabled = true;\r\n      } else if (currentIndex === (tl.items.length - tl.settings.visibleItems)) {\r\n        nextArrow.disabled = true;\r\n      }\r\n      tl.timelineEl.appendChild(prevArrow);\r\n      tl.timelineEl.appendChild(nextArrow);\r\n    }\r\n  }\r\n\r\n  // Add the centre line to the horizontal timeline\r\n  function addHorizontalDivider(tl) {\r\n    const divider = tl.timelineEl.querySelector('.timeline-divider');\r\n    if (divider) {\r\n      tl.timelineEl.removeChild(divider);\r\n    }\r\n    const topPosition = tl.items[0].offsetHeight;\r\n    const horizontalDivider = document.createElement('span');\r\n    horizontalDivider.className = 'timeline-divider';\r\n    horizontalDivider.style.top = `${topPosition}px`;\r\n    tl.timelineEl.appendChild(horizontalDivider);\r\n  }\r\n\r\n  // Calculate the new position of the horizontal timeline\r\n  function timelinePosition(tl) {\r\n    const position = tl.items[currentIndex].offsetLeft;\r\n    const str = `translate3d(-${position}px, 0, 0)`;\r\n    addTransforms(tl.scroller, str);\r\n  }\r\n\r\n  // Make the horizontal timeline slide\r\n  function slideTimeline(tl) {\r\n    const navArrows = tl.timelineEl.querySelectorAll('.timeline-nav-button');\r\n    const arrowPrev = tl.timelineEl.querySelector('.timeline-nav-button--prev');\r\n    const arrowNext = tl.timelineEl.querySelector('.timeline-nav-button--next');\r\n    const maxIndex = tl.items.length - tl.settings.visibleItems;\r\n    const moveItems = parseInt(tl.settings.moveItems, 10);\r\n    [].forEach.call(navArrows, (arrow) => {\r\n      arrow.addEventListener('click', function(e) {\r\n        e.preventDefault();\r\n        currentIndex = this.classList.contains('timeline-nav-button--next') ? (currentIndex += moveItems) : (currentIndex -= moveItems);\r\n        if (currentIndex === 0 || currentIndex < 0) {\r\n          currentIndex = 0;\r\n          arrowPrev.disabled = true;\r\n          arrowNext.disabled = false;\r\n        } else if (currentIndex === maxIndex || currentIndex > maxIndex) {\r\n          currentIndex = maxIndex;\r\n          arrowPrev.disabled = false;\r\n          arrowNext.disabled = true;\r\n        } else {\r\n          arrowPrev.disabled = false;\r\n          arrowNext.disabled = false;\r\n        }\r\n        timelinePosition(tl);\r\n      });\r\n    });\r\n  }\r\n\r\n  // Set up horizontal timeline\r\n  function setUpHorinzontalTimeline(tl) {\r\n    if (tl.settings.rtlMode) {\r\n      currentIndex = tl.items.length > tl.settings.visibleItems ? tl.items.length - tl.settings.visibleItems : 0;\r\n    } else {\r\n      currentIndex = tl.settings.startIndex;\r\n    }\r\n    tl.timelineEl.classList.add('timeline--horizontal');\r\n    setHeightandWidths(tl);\r\n    timelinePosition(tl);\r\n    addNavigation(tl);\r\n    addHorizontalDivider(tl);\r\n    slideTimeline(tl);\r\n  }\r\n\r\n  // Set up vertical timeline\r\n  function setUpVerticalTimeline(tl) {\r\n    let lastVisibleIndex = 0;\r\n    tl.items.forEach((item, i) => {\r\n      item.classList.remove('animated', 'fadeIn');\r\n      if (!isElementInViewport(item, tl.settings.verticalTrigger) && i > 0) {\r\n        item.classList.add('animated');\r\n      } else {\r\n        lastVisibleIndex = i;\r\n      }\r\n      const divider = tl.settings.verticalStartPosition === 'left' ? 1 : 0;\r\n      if (i % 2 === divider && window.innerWidth > tl.settings.forceVerticalMode) {\r\n        item.classList.add('timeline__item--right');\r\n      } else {\r\n        item.classList.add('timeline__item--left');\r\n      }\r\n    });\r\n    for (let i = 0; i < lastVisibleIndex; i += 1) {\r\n      tl.items[i].classList.remove('animated', 'fadeIn');\r\n    }\r\n    // Bring elements into view as the page is scrolled\r\n    window.addEventListener('scroll', () => {\r\n      tl.items.forEach((item) => {\r\n        if (isElementInViewport(item, tl.settings.verticalTrigger)) {\r\n          item.classList.add('fadeIn');\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  // Reset timelines\r\n  function resetTimelines(tl) {\r\n    tl.timelineEl.classList.remove('timeline--horizontal', 'timeline--mobile');\r\n    tl.scroller.removeAttribute('style');\r\n    tl.items.forEach((item) => {\r\n      item.removeAttribute('style');\r\n      item.classList.remove('animated', 'fadeIn', 'timeline__item--left', 'timeline__item--right');\r\n    });\r\n    const navArrows = tl.timelineEl.querySelectorAll('.timeline-nav-button');\r\n    [].forEach.call(navArrows, (arrow) => {\r\n      arrow.parentNode.removeChild(arrow);\r\n    });\r\n  }\r\n\r\n  // Set up the timelines\r\n  function setUpTimelines() {\r\n    timelines.forEach((tl) => {\r\n      tl.timelineEl.style.opacity = 0;\r\n      if (!tl.timelineEl.classList.contains('timeline--loaded')) {\r\n        wrapElements(tl.items);\r\n      }\r\n      resetTimelines(tl);\r\n      if (window.innerWidth <= tl.settings.forceVerticalMode) {\r\n        tl.timelineEl.classList.add('timeline--mobile');\r\n      }\r\n      if (tl.settings.mode === 'horizontal' && window.innerWidth > tl.settings.forceVerticalMode) {\r\n        setUpHorinzontalTimeline(tl);\r\n      } else {\r\n        setUpVerticalTimeline(tl);\r\n      }\r\n      tl.timelineEl.classList.add('timeline--loaded');\r\n      setTimeout(() => {\r\n        tl.timelineEl.style.opacity = 1;\r\n      }, 500);\r\n    });\r\n  }\r\n\r\n  // Initialise the timelines on the page\r\n  setUpTimelines();\r\n\r\n  window.addEventListener('resize', () => {\r\n    clearTimeout(resizeTimer);\r\n    resizeTimer = setTimeout(() => {\r\n      const newWinWidth = window.innerWidth;\r\n      if (newWinWidth !== winWidth) {\r\n        setUpTimelines();\r\n        winWidth = newWinWidth;\r\n      }\r\n    }, 250);\r\n  });\r\n}\r\n\r\n// Register as a jQuery plugin if the jQuery library is present\r\nif (window.jQuery) {\r\n  (($) => {\r\n    $.fn.timeline = function(opts) {\r\n      timeline(this, opts);\r\n      return this;\r\n    };\r\n  })(window.jQuery);\r\n}\r\n","// File#: _1_accordion\n// Usage: codyhouse.co/license\n(function() {\n    var Accordion = function(element) {\n        this.element = element;\n        this.items = Util.getChildrenByClassName(this.element, 'js-accordion__item');\n        this.showClass = 'is-open';\n        this.animateHeight = (this.element.getAttribute('data-animation') == 'on');\n        this.multiItems = !(this.element.getAttribute('data-multi-items') == 'off');\n        this.initAccordion();\n    };\n\n    Accordion.prototype.initAccordion = function() {\n        //set initial aria attributes\n        for( var i = 0; i < this.items.length; i++) {\n            var button = this.items[i].getElementsByTagName('button')[0],\n                content = this.items[i].getElementsByClassName('js-accordion__panel')[0],\n                isOpen = Util.hasClass(this.items[i], this.showClass) ? 'true' : 'false';\n            Util.setAttributes(button, {'aria-expanded': isOpen, 'aria-controls': 'accordion-content-'+i, 'id': 'accordion-header-'+i});\n            Util.addClass(button, 'js-accordion__trigger');\n            Util.setAttributes(content, {'aria-labelledby': 'accordion-header-'+i, 'id': 'accordion-content-'+i});\n        }\n\n        //listen for Accordion events\n        this.initAccordionEvents();\n    };\n\n    Accordion.prototype.initAccordionEvents = function() {\n        var self = this;\n\n        this.element.addEventListener('click', function(event) {\n            var trigger = event.target.closest('.js-accordion__trigger');\n            //check index to make sure the click didn't happen inside a children accordion\n            if( trigger && Util.getIndexInArray(self.items, trigger.parentElement) >= 0) self.triggerAccordion(trigger);\n        });\n    };\n\n    Accordion.prototype.triggerAccordion = function(trigger) {\n        var self = this;\n        var bool = (trigger.getAttribute('aria-expanded') === 'true');\n\n        this.animateAccordion(trigger, bool);\n    };\n\n    Accordion.prototype.animateAccordion = function(trigger, bool) {\n        var self = this;\n        var item = trigger.closest('.js-accordion__item'),\n            content = item.getElementsByClassName('js-accordion__panel')[0],\n            ariaValue = bool ? 'false' : 'true';\n\n        if(!bool) Util.addClass(item, this.showClass);\n        trigger.setAttribute('aria-expanded', ariaValue);\n\n        if(this.animateHeight) {\n            //store initial and final height - animate accordion content height\n            var initHeight = bool ? content.offsetHeight: 0,\n                finalHeight = bool ? 0 : content.offsetHeight;\n        }\n\n        if(window.requestAnimationFrame && this.animateHeight) {\n            Util.setHeight(initHeight, finalHeight, content, 200, function(){\n                self.resetContentVisibility(item, content, bool);\n            });\n        } else {\n            self.resetContentVisibility(item, content, bool);\n        }\n\n        if( !this.multiItems && !bool) this.closeSiblings(item);\n\n    };\n\n    Accordion.prototype.resetContentVisibility = function(item, content, bool) {\n        Util.toggleClass(item, this.showClass, !bool);\n        content.removeAttribute(\"style\");\n        if(bool && !this.multiItems) { // accordion item has been closed -> check if there's one open to move inside viewport\n            this.moveContent();\n        }\n    };\n\n    Accordion.prototype.closeSiblings = function(item) {\n        //if only one accordion can be open -> search if there's another one open\n        var index = Util.getIndexInArray(this.items, item);\n        for( var i = 0; i < this.items.length; i++) {\n            if(Util.hasClass(this.items[i], this.showClass) && i != index) {\n                this.animateAccordion(this.items[i].getElementsByClassName('js-accordion__trigger')[0], true);\n                return false;\n            }\n        }\n    };\n\n    Accordion.prototype.moveContent = function() { // make sure title of the accordion just opened is inside the viewport\n        var openAccordion = this.element.getElementsByClassName(this.showClass);\n        if(openAccordion.length == 0) return;\n        var boundingRect = openAccordion[0].getBoundingClientRect();\n        if(boundingRect.top < 0 || boundingRect.top > window.innerHeight) {\n            var windowScrollTop = window.scrollY || document.documentElement.scrollTop;\n            window.scrollTo(0, boundingRect.top + windowScrollTop);\n        }\n    };\n\n    //initialize the Accordion objects\n    var accordions = document.getElementsByClassName('js-accordion');\n    if( accordions.length > 0 ) {\n        for( var i = 0; i < accordions.length; i++) {\n            (function(i){new Accordion(accordions[i]);})(i);\n        }\n    }\n}());","// File#: _1_anim-menu-btn\n// Usage: codyhouse.co/license\n(function() {\n    var menuBtns = document.getElementsByClassName('js-anim-menu-btn');\n    if( menuBtns.length > 0 ) {\n        for(var i = 0; i < menuBtns.length; i++) {(function(i){\n            initMenuBtn(menuBtns[i]);\n        })(i);}\n\n        function initMenuBtn(btn) {\n            btn.addEventListener('click', function(event){\n                event.preventDefault();\n                var status = !Util.hasClass(btn, 'anim-menu-btn--state-b');\n                Util.toggleClass(btn, 'anim-menu-btn--state-b', status);\n                // emit custom event\n                var event = new CustomEvent('anim-menu-btn-clicked', {detail: status});\n                btn.dispatchEvent(event);\n            });\n        };\n    }\n}());","// File#: _1_menu\n// Usage: codyhouse.co/license\n(function() {\n    var Menu = function(element) {\n        this.element = element;\n        this.elementId = this.element.getAttribute('id');\n        this.menuItems = this.element.getElementsByClassName('js-menu__content');\n        this.trigger = document.querySelectorAll('[aria-controls=\"'+this.elementId+'\"]');\n        this.selectedTrigger = false;\n        this.menuIsOpen = false;\n        this.initMenu();\n        this.initMenuEvents();\n    };\n\n    Menu.prototype.initMenu = function() {\n        // init aria-labels\n        for(var i = 0; i < this.trigger.length; i++) {\n            Util.setAttributes(this.trigger[i], {'aria-expanded': 'false', 'aria-haspopup': 'true'});\n        }\n        // init tabindex\n        for(var i = 0; i < this.menuItems.length; i++) {\n            this.menuItems[i].setAttribute('tabindex', '0');\n        }\n    };\n\n    Menu.prototype.initMenuEvents = function() {\n        var self = this;\n        for(var i = 0; i < this.trigger.length; i++) {(function(i){\n            self.trigger[i].addEventListener('click', function(event){\n                event.preventDefault();\n                // if the menu had been previously opened by another trigger element -> close it first and reopen in the right position\n                if(Util.hasClass(self.element, 'menu--is-visible') && self.selectedTrigger !=  self.trigger[i]) {\n                    self.toggleMenu(false, false); // close menu\n                }\n                // toggle menu\n                self.selectedTrigger = self.trigger[i];\n                self.toggleMenu(!Util.hasClass(self.element, 'menu--is-visible'), true);\n            });\n        })(i);}\n\n        // keyboard events\n        this.element.addEventListener('keydown', function(event) {\n            // use up/down arrow to navigate list of menu items\n            if( !Util.hasClass(event.target, 'js-menu__content') ) return;\n            if( (event.keyCode && event.keyCode == 40) || (event.key && event.key.toLowerCase() == 'arrowdown') ) {\n                self.navigateItems(event, 'next');\n            } else if( (event.keyCode && event.keyCode == 38) || (event.key && event.key.toLowerCase() == 'arrowup') ) {\n                self.navigateItems(event, 'prev');\n            }\n        });\n    };\n\n    Menu.prototype.toggleMenu = function(bool, moveFocus) {\n        var self = this;\n        // toggle menu visibility\n        Util.toggleClass(this.element, 'menu--is-visible', bool);\n        this.menuIsOpen = bool;\n        if(bool) {\n            this.selectedTrigger.setAttribute('aria-expanded', 'true');\n            Util.moveFocus(this.menuItems[0]);\n            this.element.addEventListener(\"transitionend\", function(event) {Util.moveFocus(self.menuItems[0]);}, {once: true});\n            // position the menu element\n            this.positionMenu();\n            // add class to menu trigger\n            Util.addClass(this.selectedTrigger, 'menu-control--active');\n        } else if(this.selectedTrigger) {\n            this.selectedTrigger.setAttribute('aria-expanded', 'false');\n            if(moveFocus) Util.moveFocus(this.selectedTrigger);\n            // remove class from menu trigger\n            Util.removeClass(this.selectedTrigger, 'menu-control--active');\n            this.selectedTrigger = false;\n        }\n    };\n\n    Menu.prototype.positionMenu = function(event, direction) {\n        var selectedTriggerPosition = this.selectedTrigger.getBoundingClientRect(),\n            menuOnTop = (window.innerHeight - selectedTriggerPosition.bottom) < selectedTriggerPosition.top;\n        // menuOnTop = window.innerHeight < selectedTriggerPosition.bottom + this.element.offsetHeight;\n\n        var left = selectedTriggerPosition.left,\n            right = (window.innerWidth - selectedTriggerPosition.right),\n            isRight = (window.innerWidth < selectedTriggerPosition.left + this.element.offsetWidth);\n\n        var horizontal = isRight ? 'right: '+right+'px;' : 'left: '+left+'px;',\n            vertical = menuOnTop\n                ? 'bottom: '+(window.innerHeight - selectedTriggerPosition.top)+'px;'\n                : 'top: '+selectedTriggerPosition.bottom+'px;';\n        // check right position is correct -> otherwise set left to 0\n        if( isRight && (right + this.element.offsetWidth) > window.innerWidth) horizontal = 'left: '+ parseInt((window.innerWidth - this.element.offsetWidth)/2)+'px;';\n        var maxHeight = menuOnTop ? selectedTriggerPosition.top - 20 : window.innerHeight - selectedTriggerPosition.bottom - 20;\n        this.element.setAttribute('style', horizontal + vertical +'max-height:'+Math.floor(maxHeight)+'px;');\n    };\n\n    Menu.prototype.navigateItems = function(event, direction) {\n        event.preventDefault();\n        var index = Util.getIndexInArray(this.menuItems, event.target),\n            nextIndex = direction == 'next' ? index + 1 : index - 1;\n        if(nextIndex < 0) nextIndex = this.menuItems.length - 1;\n        if(nextIndex > this.menuItems.length - 1) nextIndex = 0;\n        Util.moveFocus(this.menuItems[nextIndex]);\n    };\n\n    Menu.prototype.checkMenuFocus = function() {\n        var menuParent = document.activeElement.closest('.js-menu');\n        if (!menuParent || !this.element.contains(menuParent)) this.toggleMenu(false, false);\n    };\n\n    Menu.prototype.checkMenuClick = function(target) {\n        if( !this.element.contains(target) && !target.closest('[aria-controls=\"'+this.elementId+'\"]')) this.toggleMenu(false);\n    };\n\n    window.Menu = Menu;\n\n    //initialize the Menu objects\n    var menus = document.getElementsByClassName('js-menu');\n    if( menus.length > 0 ) {\n        var menusArray = [];\n        for( var i = 0; i < menus.length; i++) {\n            (function(i){menusArray.push(new Menu(menus[i]));})(i);\n        }\n\n        // listen for key events\n        window.addEventListener('keyup', function(event){\n            if( event.keyCode && event.keyCode == 9 || event.key && event.key.toLowerCase() == 'tab' ) {\n                //close menu if focus is outside menu element\n                menusArray.forEach(function(element){\n                    element.checkMenuFocus();\n                });\n            } else if( event.keyCode && event.keyCode == 27 || event.key && event.key.toLowerCase() == 'escape' ) {\n                // close menu on 'Esc'\n                menusArray.forEach(function(element){\n                    element.toggleMenu(false, false);\n                });\n            }\n        });\n        // close menu when clicking outside it\n        window.addEventListener('click', function(event){\n            menusArray.forEach(function(element){\n                element.checkMenuClick(event.target);\n            });\n        });\n        // on resize -> close all menu elements\n        window.addEventListener('resize', function(event){\n            menusArray.forEach(function(element){\n                element.toggleMenu(false, false);\n            });\n        });\n        // on scroll -> close all menu elements\n        window.addEventListener('scroll', function(event){\n            menusArray.forEach(function(element){\n                if(element.menuIsOpen) element.toggleMenu(false, false);\n            });\n        });\n    }\n}());","// File#: _1_modal-window\n// Usage: codyhouse.co/license\n(function() {\n    var Modal = function(element) {\n        this.element = element;\n        this.triggers = document.querySelectorAll('[aria-controls=\"'+this.element.getAttribute('id')+'\"]');\n        this.firstFocusable = null;\n        this.lastFocusable = null;\n        this.selectedTrigger = null;\n        this.showClass = \"modal--is-visible\";\n        this.initModal();\n    };\n\n    Modal.prototype.initModal = function() {\n        var self = this;\n        //open modal when clicking on trigger buttons\n        if ( this.triggers ) {\n            for(var i = 0; i < this.triggers.length; i++) {\n                this.triggers[i].addEventListener('click', function(event) {\n                    event.preventDefault();\n                    self.selectedTrigger = event.target;\n                    self.showModal();\n                    self.initModalEvents();\n                });\n            }\n        }\n\n        // listen to the openModal event -> open modal without a trigger button\n        this.element.addEventListener('openModal', function(event){\n            if(event.detail) self.selectedTrigger = event.detail;\n            self.showModal();\n            self.initModalEvents();\n        });\n\n        // listen to the closeModal event -> close modal without a trigger button\n        this.element.addEventListener('closeModal', function(event){\n            if(event.detail) self.selectedTrigger = event.detail;\n            self.closeModal();\n        });\n    };\n\n    Modal.prototype.showModal = function() {\n        var self = this;\n        Util.addClass(this.element, this.showClass);\n        this.getFocusableElements();\n        this.firstFocusable.focus();\n        // wait for the end of transitions before moving focus\n        this.element.addEventListener(\"transitionend\", function cb(event) {\n            self.firstFocusable.focus();\n            self.element.removeEventListener(\"transitionend\", cb);\n        });\n        this.emitModalEvents('modalIsOpen');\n    };\n\n    Modal.prototype.closeModal = function() {\n        if(!Util.hasClass(this.element, this.showClass)) return;\n        Util.removeClass(this.element, this.showClass);\n        this.firstFocusable = null;\n        this.lastFocusable = null;\n        if(this.selectedTrigger) this.selectedTrigger.focus();\n        //remove listeners\n        this.cancelModalEvents();\n        this.emitModalEvents('modalIsClose');\n    };\n\n    Modal.prototype.initModalEvents = function() {\n        //add event listeners\n        this.element.addEventListener('keydown', this);\n        this.element.addEventListener('click', this);\n    };\n\n    Modal.prototype.cancelModalEvents = function() {\n        //remove event listeners\n        this.element.removeEventListener('keydown', this);\n        this.element.removeEventListener('click', this);\n    };\n\n    Modal.prototype.handleEvent = function (event) {\n        switch(event.type) {\n            case 'click': {\n                this.initClick(event);\n            }\n            case 'keydown': {\n                this.initKeyDown(event);\n            }\n        }\n    };\n\n    Modal.prototype.initKeyDown = function(event) {\n        if( event.keyCode && event.keyCode == 9 || event.key && event.key == 'Tab' ) {\n            //trap focus inside modal\n            this.trapFocus(event);\n        } else if( (event.keyCode && event.keyCode == 13 || event.key && event.key == 'Enter') && event.target.closest('.js-modal__close')) {\n            event.preventDefault();\n            this.closeModal(); // close modal when pressing Enter on close button\n        }\n    };\n\n    Modal.prototype.initClick = function(event) {\n        //close modal when clicking on close button or modal bg layer\n        if( !event.target.closest('.js-modal__close') && !Util.hasClass(event.target, 'js-modal') ) return;\n        event.preventDefault();\n        this.closeModal();\n    };\n\n    Modal.prototype.trapFocus = function(event) {\n        if( this.firstFocusable == document.activeElement && event.shiftKey) {\n            //on Shift+Tab -> focus last focusable element when focus moves out of modal\n            event.preventDefault();\n            this.lastFocusable.focus();\n        }\n        if( this.lastFocusable == document.activeElement && !event.shiftKey) {\n            //on Tab -> focus first focusable element when focus moves out of modal\n            event.preventDefault();\n            this.firstFocusable.focus();\n        }\n    }\n\n    Modal.prototype.getFocusableElements = function() {\n        //get all focusable elements inside the modal\n        var allFocusable = this.element.querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex=\"-1\"]), [contenteditable], audio[controls], video[controls], summary');\n        this.getFirstVisible(allFocusable);\n        this.getLastVisible(allFocusable);\n    };\n\n    Modal.prototype.getFirstVisible = function(elements) {\n        //get first visible focusable element inside the modal\n        for(var i = 0; i < elements.length; i++) {\n            if( elements[i].offsetWidth || elements[i].offsetHeight || elements[i].getClientRects().length ) {\n                this.firstFocusable = elements[i];\n                return true;\n            }\n        }\n    };\n\n    Modal.prototype.getLastVisible = function(elements) {\n        //get last visible focusable element inside the modal\n        for(var i = elements.length - 1; i >= 0; i--) {\n            if( elements[i].offsetWidth || elements[i].offsetHeight || elements[i].getClientRects().length ) {\n                this.lastFocusable = elements[i];\n                return true;\n            }\n        }\n    };\n\n    Modal.prototype.emitModalEvents = function(eventName) {\n        var event = new CustomEvent(eventName, {detail: this.selectedTrigger});\n        this.element.dispatchEvent(event);\n    };\n\n    //initialize the Modal objects\n    var modals = document.getElementsByClassName('js-modal');\n    if( modals.length > 0 ) {\n        var modalArrays = [];\n        for( var i = 0; i < modals.length; i++) {\n            (function(i){modalArrays.push(new Modal(modals[i]));})(i);\n        }\n\n        window.addEventListener('keydown', function(event){ //close modal window on esc\n            if(event.keyCode && event.keyCode == 27 || event.key && event.key.toLowerCase() == 'escape') {\n                for( var i = 0; i < modalArrays.length; i++) {\n                    (function(i){modalArrays[i].closeModal();})(i);\n                };\n            }\n        });\n    }\n}());","// File#: _1_swipe-content\n(function() {\n    var SwipeContent = function(element) {\n        this.element = element;\n        this.delta = [false, false];\n        this.dragging = false;\n        this.intervalId = false;\n        initSwipeContent(this);\n    };\n\n    function initSwipeContent(content) {\n        content.element.addEventListener('mousedown', handleEvent.bind(content));\n        content.element.addEventListener('touchstart', handleEvent.bind(content));\n    };\n\n    function initDragging(content) {\n        //add event listeners\n        content.element.addEventListener('mousemove', handleEvent.bind(content));\n        content.element.addEventListener('touchmove', handleEvent.bind(content));\n        content.element.addEventListener('mouseup', handleEvent.bind(content));\n        content.element.addEventListener('mouseleave', handleEvent.bind(content));\n        content.element.addEventListener('touchend', handleEvent.bind(content));\n    };\n\n    function cancelDragging(content) {\n        //remove event listeners\n        if(content.intervalId) {\n            (!window.requestAnimationFrame) ? clearInterval(content.intervalId) : window.cancelAnimationFrame(content.intervalId);\n            content.intervalId = false;\n        }\n        content.element.removeEventListener('mousemove', handleEvent.bind(content));\n        content.element.removeEventListener('touchmove', handleEvent.bind(content));\n        content.element.removeEventListener('mouseup', handleEvent.bind(content));\n        content.element.removeEventListener('mouseleave', handleEvent.bind(content));\n        content.element.removeEventListener('touchend', handleEvent.bind(content));\n    };\n\n    function handleEvent(event) {\n        switch(event.type) {\n            case 'mousedown':\n            case 'touchstart':\n                startDrag(this, event);\n                break;\n            case 'mousemove':\n            case 'touchmove':\n                drag(this, event);\n                break;\n            case 'mouseup':\n            case 'mouseleave':\n            case 'touchend':\n                endDrag(this, event);\n                break;\n        }\n    };\n\n    function startDrag(content, event) {\n        content.dragging = true;\n        // listen to drag movements\n        initDragging(content);\n        content.delta = [parseInt(unify(event).clientX), parseInt(unify(event).clientY)];\n        // emit drag start event\n        emitSwipeEvents(content, 'dragStart', content.delta, event.target);\n    };\n\n    function endDrag(content, event) {\n        cancelDragging(content);\n        // credits: https://css-tricks.com/simple-swipe-with-vanilla-javascript/\n        var dx = parseInt(unify(event).clientX),\n            dy = parseInt(unify(event).clientY);\n\n        // check if there was a left/right swipe\n        if(content.delta && (content.delta[0] || content.delta[0] === 0)) {\n            var s = getSign(dx - content.delta[0]);\n\n            if(Math.abs(dx - content.delta[0]) > 30) {\n                (s < 0) ? emitSwipeEvents(content, 'swipeLeft', [dx, dy]) : emitSwipeEvents(content, 'swipeRight', [dx, dy]);\n            }\n\n            content.delta[0] = false;\n        }\n        // check if there was a top/bottom swipe\n        if(content.delta && (content.delta[1] || content.delta[1] === 0)) {\n            var y = getSign(dy - content.delta[1]);\n\n            if(Math.abs(dy - content.delta[1]) > 30) {\n                (y < 0) ? emitSwipeEvents(content, 'swipeUp', [dx, dy]) : emitSwipeEvents(content, 'swipeDown', [dx, dy]);\n            }\n\n            content.delta[1] = false;\n        }\n        // emit drag end event\n        emitSwipeEvents(content, 'dragEnd', [dx, dy]);\n        content.dragging = false;\n    };\n\n    function drag(content, event) {\n        if(!content.dragging) return;\n        // emit dragging event with coordinates\n        (!window.requestAnimationFrame)\n            ? content.intervalId = setTimeout(function(){emitDrag.bind(content, event);}, 250)\n            : content.intervalId = window.requestAnimationFrame(emitDrag.bind(content, event));\n    };\n\n    function emitDrag(event) {\n        emitSwipeEvents(this, 'dragging', [parseInt(unify(event).clientX), parseInt(unify(event).clientY)]);\n    };\n\n    function unify(event) {\n        // unify mouse and touch events\n        return event.changedTouches ? event.changedTouches[0] : event;\n    };\n\n    function emitSwipeEvents(content, eventName, detail, el) {\n        var trigger = false;\n        if(el) trigger = el;\n        // emit event with coordinates\n        var event = new CustomEvent(eventName, {detail: {x: detail[0], y: detail[1], origin: trigger}});\n        content.element.dispatchEvent(event);\n    };\n\n    function getSign(x) {\n        if(!Math.sign) {\n            return ((x > 0) - (x < 0)) || +x;\n        } else {\n            return Math.sign(x);\n        }\n    };\n\n    window.SwipeContent = SwipeContent;\n\n    //initialize the SwipeContent objects\n    var swipe = document.getElementsByClassName('js-swipe-content');\n    if( swipe.length > 0 ) {\n        for( var i = 0; i < swipe.length; i++) {\n            (function(i){new SwipeContent(swipe[i]);})(i);\n        }\n    }\n}());","// File#: _2_flexi-header\n// Usage: codyhouse.co/license\n(function() {\n    var flexHeader = document.getElementsByClassName('js-f-header');\n    if(flexHeader.length > 0) {\n        var menuTrigger = flexHeader[0].getElementsByClassName('js-anim-menu-btn')[0],\n            firstFocusableElement = getMenuFirstFocusable();\n\n        // we'll use these to store the node that needs to receive focus when the mobile menu is closed\n        var focusMenu = false;\n\n        menuTrigger.addEventListener('anim-menu-btn-clicked', function(event){ // toggle menu visibility an small devices\n            Util.toggleClass(document.getElementsByClassName('f-header__nav')[0], 'f-header__nav--is-visible', event.detail);\n            menuTrigger.setAttribute('aria-expanded', event.detail);\n            if(event.detail) firstFocusableElement.focus(); // move focus to first focusable element\n            else if(focusMenu) {\n                focusMenu.focus();\n                focusMenu = false;\n            }\n        });\n\n        // listen for key events\n        window.addEventListener('keyup', function(event){\n            // listen for esc key\n            if( (event.keyCode && event.keyCode == 27) || (event.key && event.key.toLowerCase() == 'escape' )) {\n                // close navigation on mobile if open\n                if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger)) {\n                    focusMenu = menuTrigger; // move focus to menu trigger when menu is close\n                    menuTrigger.click();\n                }\n            }\n            // listen for tab key\n            if( (event.keyCode && event.keyCode == 9) || (event.key && event.key.toLowerCase() == 'tab' )) {\n                // close navigation on mobile if open when nav loses focus\n                if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger) && !document.activeElement.closest('.js-f-header')) menuTrigger.click();\n            }\n        });\n\n        function getMenuFirstFocusable() {\n            var focusableEle = flexHeader[0].getElementsByClassName('f-header__nav')[0].querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex=\"-1\"]), [contenteditable], audio[controls], video[controls], summary'),\n                firstFocusable = false;\n            for(var i = 0; i < focusableEle.length; i++) {\n                if( focusableEle[i].offsetWidth || focusableEle[i].offsetHeight || focusableEle[i].getClientRects().length ) {\n                    firstFocusable = focusableEle[i];\n                    break;\n                }\n            }\n\n            return firstFocusable;\n        };\n\n        function isVisible(element) {\n            return (element.offsetWidth || element.offsetHeight || element.getClientRects().length);\n        };\n    }\n}());","// File#: _2_hiding-nav\n// Usage: codyhouse.co/license\n(function() {\n    var hidingNav = document.getElementsByClassName('js-hide-nav');\n    if(hidingNav.length > 0 && window.requestAnimationFrame) {\n        var mainNav = Array.prototype.filter.call(hidingNav, function(element) {\n                return Util.hasClass(element, 'js-hide-nav--main');\n            }),\n            subNav = Array.prototype.filter.call(hidingNav, function(element) {\n                return Util.hasClass(element, 'js-hide-nav--sub');\n            });\n\n        var scrolling = false,\n            previousTop = window.scrollY,\n            currentTop = window.scrollY,\n            scrollDelta = 10,\n            scrollOffset = 150, // scrollY needs to be bigger than scrollOffset to hide navigation\n            headerHeight = 0;\n\n        var navIsFixed = false; // check if main navigation is fixed\n        if(mainNav.length > 0 && Util.hasClass(mainNav[0], 'hide-nav--fixed')) navIsFixed = true;\n\n        // store button that triggers navigation on mobile\n        var triggerMobile = getTriggerMobileMenu();\n\n        // init navigation and listen to window scroll event\n        initSecondaryNav();\n        resetHideNav();\n        window.addEventListener('scroll', function(event){\n            if(scrolling) return;\n            scrolling = true;\n            window.requestAnimationFrame(resetHideNav);\n        });\n\n        window.addEventListener('resize', function(event){\n            if(scrolling) return;\n            scrolling = true;\n            window.requestAnimationFrame(function(){\n                if(headerHeight > 0 && subNav.length > 0) {\n                    headerHeight = mainNav[0].offsetHeight;\n                    subNav[0].style.top = headerHeight+'px';\n                }\n                // reset both navigation\n                hideNavScrollUp();\n\n                scrolling = false;\n            });\n        });\n\n        function initSecondaryNav() { // if there's a secondary nav, set its top equal to the header height\n            if(subNav.length < 1 || mainNav.length < 1) return;\n            headerHeight = mainNav[0].offsetHeight;\n            subNav[0].style.top = headerHeight+'px';\n        };\n\n        function resetHideNav() { // check if navs need to be hidden/revealed\n            currentTop = window.scrollY;\n            if(currentTop - previousTop > scrollDelta && currentTop > scrollOffset) {\n                hideNavScrollDown();\n            } else if( previousTop - currentTop > scrollDelta || (previousTop - currentTop > 0 && currentTop < scrollOffset) ) {\n                hideNavScrollUp();\n            } else if( previousTop - currentTop > 0 && subNav.length > 0 && subNav[0].getBoundingClientRect().top > 0) {\n                setTranslate(subNav[0], '0%');\n            }\n            // if primary nav is fixed -> toggle bg class\n            if(navIsFixed) {\n                var scrollTop = window.scrollY || window.pageYOffset;\n                Util.toggleClass(mainNav[0], 'hide-nav--has-bg', (scrollTop > headerHeight));\n            }\n            previousTop = currentTop;\n            scrolling = false;\n        };\n\n        function hideNavScrollDown() {\n            // if there's a secondary nav -> it has to reach the top before hiding nav\n            if( subNav.length  > 0 && subNav[0].getBoundingClientRect().top > headerHeight) return;\n            // on mobile -> hide navigation only if dropdown is not open\n            if(triggerMobile && triggerMobile.getAttribute('aria-expanded') == \"true\") return;\n            if( mainNav.length > 0 ) {\n                setTranslate(mainNav[0], '-100%');\n                mainNav[0].addEventListener('transitionend', function cb(){\n                    mainNav[0].removeEventListener('transitionend', cb);\n                    Util.addClass(mainNav[0], 'hide-nav--off-canvas');\n                });\n            }\n            if( subNav.length  > 0 ) setTranslate(subNav[0], '-'+headerHeight+'px');\n        };\n\n        function hideNavScrollUp() {\n            if( mainNav.length > 0 ) {setTranslate(mainNav[0], '0%'); Util.removeClass(mainNav[0], 'hide-nav--off-canvas');}\n            if( subNav.length  > 0 ) setTranslate(subNav[0], '0%');\n        };\n\n        function setTranslate(element, val) {\n            element.style.transform = 'translateY('+val+')';\n        };\n\n        function getTriggerMobileMenu() {\n            // store trigger that toggle mobile navigation dropdown\n            var triggerMobileClass = hidingNav[0].getAttribute('data-mobile-trigger');\n            if(!triggerMobileClass) return false;\n            var trigger = hidingNav[0].getElementsByClassName(triggerMobileClass);\n            if(trigger.length > 0) return trigger[0];\n            return false;\n        };\n\n    } else {\n        // if window requestAnimationFrame is not supported -> add bg class to fixed header\n        var mainNav = document.getElementsByClassName('js-hide-nav--main');\n        if(mainNav.length < 1) return;\n        if(Util.hasClass(mainNav[0], 'hide-nav--fixed')) Util.addClass(mainNav[0], 'hide-nav--has-bg');\n    }\n}());","// File#: _2_menu-bar\n// Usage: codyhouse.co/license\n(function() {\n    var MenuBar = function(element) {\n        this.element = element;\n        this.items = Util.getChildrenByClassName(this.element, 'menu-bar__item');\n        this.mobHideItems = this.element.getElementsByClassName('menu-bar__item--hide');\n        this.moreItemsTrigger = this.element.getElementsByClassName('js-menu-bar__trigger');\n        initMenuBar(this);\n    };\n\n    function initMenuBar(menu) {\n        setMenuTabIndex(menu); // set correct tabindexes for menu item\n        initMenuBarMarkup(menu); // create additional markup\n        checkMenuLayout(menu); // set menu layout\n        Util.addClass(menu.element, 'menu-bar--loaded'); // reveal menu\n\n        // custom event emitted when window is resized\n        menu.element.addEventListener('update-menu-bar', function(event){\n            checkMenuLayout(menu);\n            menu.menuInstance.toggleMenu(false, false); // close dropdown\n        });\n\n        // keyboard events\n        // open dropdown when pressing Enter on trigger element\n        if(menu.moreItemsTrigger.length > 0) {\n            menu.moreItemsTrigger[0].addEventListener('keydown', function(event) {\n                if( (event.keyCode && event.keyCode == 13) || (event.key && event.key.toLowerCase() == 'enter') ) {\n                    menu.menuInstance.selectedTrigger = menu.moreItemsTrigger[0];\n                    menu.menuInstance.toggleMenu(!Util.hasClass(menu.subMenu, 'menu--is-visible'), true);\n                }\n            });\n\n            // close dropdown on esc\n            menu.subMenu.addEventListener('keydown', function(event) {\n                if((event.keyCode && event.keyCode == 27) || (event.key && event.key.toLowerCase() == 'escape')) { // close submenu on esc\n                    menu.menuInstance.toggleMenu(false, true);\n                }\n            });\n        }\n\n        // navigate menu items using left/right arrows\n        menu.element.addEventListener('keydown', function(event) {\n            if( (event.keyCode && event.keyCode == 39) || (event.key && event.key.toLowerCase() == 'arrowright') ) {\n                navigateItems(menu.items, event, 'next');\n            } else if( (event.keyCode && event.keyCode == 37) || (event.key && event.key.toLowerCase() == 'arrowleft') ) {\n                navigateItems(menu.items, event, 'prev');\n            }\n        });\n    };\n\n    function setMenuTabIndex(menu) { // set tabindexes for the menu items to allow keyboard navigation\n        var nextItem = false;\n        for(var i = 0; i < menu.items.length; i++ ) {\n            if(i == 0 || nextItem) menu.items[i].setAttribute('tabindex', '0');\n            else menu.items[i].setAttribute('tabindex', '-1');\n            if(i == 0 && menu.moreItemsTrigger.length > 0) nextItem = true;\n            else nextItem = false;\n        }\n    };\n\n    function initMenuBarMarkup(menu) {\n        if(menu.mobHideItems.length == 0 ) { // no items to hide on mobile - remove trigger\n            if(menu.moreItemsTrigger.length > 0) menu.element.removeChild(menu.moreItemsTrigger[0]);\n            return;\n        }\n\n        if(menu.moreItemsTrigger.length == 0) return;\n\n        // create the markup for the Menu element\n        var content = '';\n        menu.menuControlId = 'submenu-bar-'+Date.now();\n        for(var i = 0; i < menu.mobHideItems.length; i++) {\n            var item = menu.mobHideItems[i].cloneNode(true),\n                svg = item.getElementsByTagName('svg')[0],\n                label = item.getElementsByClassName('menu-bar__label')[0];\n\n            svg.setAttribute('class', 'icon menu__icon');\n            content = content + '<li role=\"menuitem\"><span class=\"menu__content js-menu__content\">'+svg.outerHTML+'<span>'+label.innerHTML+'</span></span></li>';\n        }\n\n        Util.setAttributes(menu.moreItemsTrigger[0], {'role': 'button', 'aria-expanded': 'false', 'aria-controls': menu.menuControlId, 'aria-haspopup': 'true'});\n\n        var subMenu = document.createElement('menu'),\n            customClass = menu.element.getAttribute('data-menu-class');\n        Util.setAttributes(subMenu, {'id': menu.menuControlId, 'class': 'menu js-menu '+customClass});\n        subMenu.innerHTML = content;\n        document.body.appendChild(subMenu);\n\n        menu.subMenu = subMenu;\n        menu.subItems = subMenu.getElementsByTagName('li');\n\n        menu.menuInstance = new Menu(menu.subMenu); // this will handle the dropdown behaviour\n    };\n\n    function checkMenuLayout(menu) { // switch from compressed to expanded layout and viceversa\n        var layout = getComputedStyle(menu.element, ':before').getPropertyValue('content').replace(/\\'|\"/g, '');\n        Util.toggleClass(menu.element, 'menu-bar--collapsed', layout == 'collapsed');\n    };\n\n    function navigateItems(list, event, direction, prevIndex) { // keyboard navigation among menu items\n        event.preventDefault();\n        var index = (typeof prevIndex !== 'undefined') ? prevIndex : Util.getIndexInArray(list, event.target),\n            nextIndex = direction == 'next' ? index + 1 : index - 1;\n        if(nextIndex < 0) nextIndex = list.length - 1;\n        if(nextIndex > list.length - 1) nextIndex = 0;\n        // check if element is visible before moving focus\n        (list[nextIndex].offsetParent === null) ? navigateItems(list, event, direction, nextIndex) : Util.moveFocus(list[nextIndex]);\n    };\n\n    function checkMenuClick(menu, target) { // close dropdown when clicking outside the menu element\n        if(menu.menuInstance && !menu.moreItemsTrigger[0].contains(target) && !menu.subMenu.contains(target)) menu.menuInstance.toggleMenu(false, false);\n    };\n\n    // init MenuBars objects\n    var menuBars = document.getElementsByClassName('js-menu-bar');\n    if( menuBars.length > 0 ) {\n        var j = 0,\n            menuBarArray = [];\n        for( var i = 0; i < menuBars.length; i++) {\n            var beforeContent = getComputedStyle(menuBars[i], ':before').getPropertyValue('content');\n            if(beforeContent && beforeContent !='' && beforeContent !='none') {\n                (function(i){menuBarArray.push(new MenuBar(menuBars[i]));})(i);\n                j = j + 1;\n            }\n        }\n\n        if(j > 0) {\n            var resizingId = false,\n                customEvent = new CustomEvent('update-menu-bar');\n            // update Menu Bar layout on resize\n            window.addEventListener('resize', function(event){\n                clearTimeout(resizingId);\n                resizingId = setTimeout(doneResizing, 150);\n            });\n\n            // close menu when clicking outside it\n            window.addEventListener('click', function(event){\n                menuBarArray.forEach(function(element){\n                    checkMenuClick(element, event.target);\n                });\n            });\n\n            function doneResizing() {\n                for( var i = 0; i < menuBars.length; i++) {\n                    (function(i){menuBars[i].dispatchEvent(customEvent)})(i);\n                };\n            };\n        }\n    }\n}());","// File#: _2_modal-video\n// Usage: codyhouse.co/license\n(function() {\n    var ModalVideo = function(element) {\n        this.element = element;\n        this.modalContent = this.element.getElementsByClassName('js-modal-video__content')[0];\n        this.media = this.element.getElementsByClassName('js-modal-video__media')[0];\n        this.contentIsIframe = this.media.tagName.toLowerCase() == 'iframe';\n        this.modalIsOpen = false;\n        this.initModalVideo();\n    };\n\n    ModalVideo.prototype.initModalVideo = function() {\n        var self = this;\n        // reveal modal content when iframe is ready\n        this.addLoadListener();\n        // listen for the modal element to be open -> set new iframe src attribute\n        this.element.addEventListener('modalIsOpen', function(event){\n            self.modalIsOpen = true;\n            self.media.setAttribute('src', event.detail.closest('[aria-controls]').getAttribute('data-url'));\n        });\n        // listen for the modal element to be close -> reset iframe and hide modal content\n        this.element.addEventListener('modalIsClose', function(event){\n            self.modalIsOpen = false;\n            Util.removeClass(self.element, 'modal-video--loaded');\n            self.media.setAttribute('src', '');\n        });\n    };\n\n    ModalVideo.prototype.addLoadListener = function() {\n        var self = this;\n        if(this.contentIsIframe) {\n            this.media.onload = function () {\n                self.revealContent();\n            };\n        } else {\n            this.media.addEventListener('loadedmetadata', function(){\n                self.revealContent();\n            });\n        }\n\n    };\n\n    ModalVideo.prototype.revealContent = function() {\n        if( !this.modalIsOpen ) return;\n        Util.addClass(this.element, 'modal-video--loaded');\n        this.contentIsIframe ? this.media.contentWindow.focus() : this.media.focus();\n    };\n\n    //initialize the ModalVideo objects\n    var modalVideos = document.getElementsByClassName('js-modal-video');\n    if( modalVideos.length > 0 ) {\n        for( var i = 0; i < modalVideos.length; i++) {\n            (function(i){new ModalVideo(modalVideos[i]);})(i);\n        }\n    }\n}());","// File#: _2_slideshow\n// Usage: codyhouse.co/license\n(function() {\n    var Slideshow = function(opts) {\n        this.options = slideshowAssignOptions(Slideshow.defaults , opts);\n        this.element = this.options.element;\n        this.items = this.element.getElementsByClassName('js-slideshow__item');\n        this.controls = this.element.getElementsByClassName('js-slideshow__control');\n        this.selectedSlide = 0;\n        this.autoplayId = false;\n        this.autoplayPaused = false;\n        this.navigation = false;\n        this.navCurrentLabel = false;\n        this.ariaLive = false;\n        this.moveFocus = false;\n        this.animating = false;\n        this.supportAnimation = Util.cssSupports('transition');\n        this.animationOff = (!Util.hasClass(this.element, 'slideshow--transition-fade') && !Util.hasClass(this.element, 'slideshow--transition-slide'));\n        this.animatingClass = 'slideshow--is-animating';\n        initSlideshow(this);\n        initSlideshowEvents(this);\n        initAnimationEndEvents(this);\n    };\n\n    Slideshow.prototype.showNext = function() {\n        showNewItem(this, this.selectedSlide + 1, 'next');\n    };\n\n    Slideshow.prototype.showPrev = function() {\n        showNewItem(this, this.selectedSlide - 1, 'prev');\n    };\n\n    Slideshow.prototype.showItem = function(index) {\n        showNewItem(this, index, false);\n    };\n\n    Slideshow.prototype.startAutoplay = function() {\n        var self = this;\n        if(this.options.autoplay && !this.autoplayId && !this.autoplayPaused) {\n            self.autoplayId = setInterval(function(){\n                self.showNext();\n            }, self.options.autoplayInterval);\n        }\n    };\n\n    Slideshow.prototype.pauseAutoplay = function() {\n        var self = this;\n        if(this.options.autoplay) {\n            clearInterval(self.autoplayId);\n            self.autoplayId = false;\n        }\n    };\n\n    function slideshowAssignOptions(defaults, opts) {\n        // initialize the object options\n        var mergeOpts = {};\n        mergeOpts.element = (typeof opts.element !== \"undefined\") ? opts.element : defaults.element;\n        mergeOpts.navigation = (typeof opts.navigation !== \"undefined\") ? opts.navigation : defaults.navigation;\n        mergeOpts.autoplay = (typeof opts.autoplay !== \"undefined\") ? opts.autoplay : defaults.autoplay;\n        mergeOpts.autoplayInterval = (typeof opts.autoplayInterval !== \"undefined\") ? opts.autoplayInterval : defaults.autoplayInterval;\n        mergeOpts.swipe = (typeof opts.swipe !== \"undefined\") ? opts.swipe : defaults.swipe;\n        return mergeOpts;\n    };\n\n    function initSlideshow(slideshow) { // basic slideshow settings\n        // if no slide has been selected -> select the first one\n        if(slideshow.element.getElementsByClassName('slideshow__item--selected').length < 1) Util.addClass(slideshow.items[0], 'slideshow__item--selected');\n        slideshow.selectedSlide = Util.getIndexInArray(slideshow.items, slideshow.element.getElementsByClassName('slideshow__item--selected')[0]);\n        // create an element that will be used to announce the new visible slide to SR\n        var srLiveArea = document.createElement('div');\n        Util.setAttributes(srLiveArea, {'class': 'u-accessibility js-slideshow__aria-live', 'aria-live': 'polite', 'aria-atomic': 'true'});\n        slideshow.element.appendChild(srLiveArea);\n        slideshow.ariaLive = srLiveArea;\n    };\n\n    function initSlideshowEvents(slideshow) {\n        // if slideshow navigation is on -> create navigation HTML and add event listeners\n        if(slideshow.options.navigation) {\n            var navigation = document.createElement('ol'),\n                navChildren = '';\n\n            navigation.setAttribute('class', 'slideshow__navigation');\n            for(var i = 0; i < slideshow.items.length; i++) {\n                var className = (i == slideshow.selectedSlide) ? 'class=\"slideshow__nav-item slideshow__nav-item--selected js-slideshow__nav-item\"' :  'class=\"slideshow__nav-item js-slideshow__nav-item\"',\n                    navCurrentLabel = (i == slideshow.selectedSlide) ? '<span class=\"u-accessibility js-slideshow__nav-current-label\">Current Item</span>' : '';\n                navChildren = navChildren + '<li '+className+'><button class=\"reset\"><span class=\"u-accessibility\">'+ (i+1) + '</span>'+navCurrentLabel+'</button></li>';\n            }\n\n            navigation.innerHTML = navChildren;\n            slideshow.navCurrentLabel = navigation.getElementsByClassName('js-slideshow__nav-current-label')[0];\n            slideshow.element.appendChild(navigation);\n            slideshow.navigation = slideshow.element.getElementsByClassName('js-slideshow__nav-item');\n\n            navigation.addEventListener('click', function(event){\n                navigateSlide(slideshow, event, true);\n            });\n            navigation.addEventListener('keyup', function(event){\n                navigateSlide(slideshow, event, (event.key.toLowerCase() == 'enter'));\n            });\n        }\n        // slideshow arrow controls\n        if(slideshow.controls.length > 0) {\n            slideshow.controls[0].addEventListener('click', function(event){\n                event.preventDefault();\n                slideshow.showPrev();\n                updateAriaLive(slideshow);\n            });\n            slideshow.controls[1].addEventListener('click', function(event){\n                event.preventDefault();\n                slideshow.showNext();\n                updateAriaLive(slideshow);\n            });\n        }\n        // swipe events\n        if(slideshow.options.swipe) {\n            //init swipe\n            new SwipeContent(slideshow.element);\n            slideshow.element.addEventListener('swipeLeft', function(event){\n                slideshow.showNext();\n            });\n            slideshow.element.addEventListener('swipeRight', function(event){\n                slideshow.showPrev();\n            });\n        }\n        // autoplay\n        if(slideshow.options.autoplay) {\n            slideshow.startAutoplay();\n            // pause autoplay if user is interacting with the slideshow\n            slideshow.element.addEventListener('mouseenter', function(event){\n                slideshow.pauseAutoplay();\n                slideshow.autoplayPaused = true;\n            });\n            slideshow.element.addEventListener('focusin', function(event){\n                slideshow.pauseAutoplay();\n                slideshow.autoplayPaused = true;\n            });\n            slideshow.element.addEventListener('mouseleave', function(event){\n                slideshow.autoplayPaused = false;\n                slideshow.startAutoplay();\n            });\n            slideshow.element.addEventListener('focusout', function(event){\n                slideshow.autoplayPaused = false;\n                slideshow.startAutoplay();\n            });\n        }\n        // detect if external buttons control the slideshow\n        var slideshowId = slideshow.element.getAttribute('id');\n        if(slideshowId) {\n            var externalControls = document.querySelectorAll('[data-controls=\"'+slideshowId+'\"]');\n            for(var i = 0; i < externalControls.length; i++) {\n                (function(i){externalControlSlide(slideshow, externalControls[i]);})(i);\n            }\n        }\n        // custom event to trigger selection of a new slide element\n        slideshow.element.addEventListener('selectNewItem', function(event){\n            if(event.detail) showNewItem(slideshow, event.detail - 1, false);\n        });\n    };\n\n    function navigateSlide(slideshow, event, keyNav) {\n        // user has interacted with the slideshow navigation -> update visible slide\n        var target = ( Util.hasClass(event.target, 'js-slideshow__nav-item') ) ? event.target : event.target.closest('.js-slideshow__nav-item');\n        if(keyNav && target && !Util.hasClass(target, 'slideshow__nav-item--selected')) {\n            slideshow.showItem(Util.getIndexInArray(slideshow.navigation, target));\n            slideshow.moveFocus = true;\n            updateAriaLive(slideshow);\n        }\n    };\n\n    function initAnimationEndEvents(slideshow) {\n        // remove animation classes at the end of a slide transition\n        for( var i = 0; i < slideshow.items.length; i++) {\n            (function(i){\n                slideshow.items[i].addEventListener('animationend', function(){resetAnimationEnd(slideshow, slideshow.items[i]);});\n                slideshow.items[i].addEventListener('transitionend', function(){resetAnimationEnd(slideshow, slideshow.items[i]);});\n            })(i);\n        }\n    };\n\n    function resetAnimationEnd(slideshow, item) {\n        setTimeout(function(){ // add a delay between the end of animation and slideshow reset - improve animation performance\n            if(Util.hasClass(item,'slideshow__item--selected')) {\n                if(slideshow.moveFocus) Util.moveFocus(item);\n                emitSlideshowEvent(slideshow, 'newItemVisible', slideshow.selectedSlide);\n                slideshow.moveFocus = false;\n            }\n            Util.removeClass(item, 'slideshow__item--slide-out-left slideshow__item--slide-out-right slideshow__item--slide-in-left slideshow__item--slide-in-right');\n            item.removeAttribute('aria-hidden');\n            slideshow.animating = false;\n            Util.removeClass(slideshow.element, slideshow.animatingClass);\n        }, 100);\n    };\n\n    function showNewItem(slideshow, index, bool) {\n        if(slideshow.animating && slideshow.supportAnimation) return;\n        slideshow.animating = true;\n        Util.addClass(slideshow.element, slideshow.animatingClass);\n        if(index < 0) index = slideshow.items.length - 1;\n        else if(index >= slideshow.items.length) index = 0;\n        var exitItemClass = getExitItemClass(bool, slideshow.selectedSlide, index);\n        var enterItemClass = getEnterItemClass(bool, slideshow.selectedSlide, index);\n        // transition between slides\n        if(!slideshow.animationOff) Util.addClass(slideshow.items[slideshow.selectedSlide], exitItemClass);\n        Util.removeClass(slideshow.items[slideshow.selectedSlide], 'slideshow__item--selected');\n        slideshow.items[slideshow.selectedSlide].setAttribute('aria-hidden', 'true'); //hide to sr element that is exiting the viewport\n        if(slideshow.animationOff) {\n            Util.addClass(slideshow.items[index], 'slideshow__item--selected');\n        } else {\n            Util.addClass(slideshow.items[index], enterItemClass+' slideshow__item--selected');\n        }\n        // reset slider navigation appearance\n        resetSlideshowNav(slideshow, index, slideshow.selectedSlide);\n        slideshow.selectedSlide = index;\n        // reset autoplay\n        slideshow.pauseAutoplay();\n        slideshow.startAutoplay();\n        // reset controls/navigation color themes\n        resetSlideshowTheme(slideshow, index);\n        // emit event\n        emitSlideshowEvent(slideshow, 'newItemSelected', slideshow.selectedSlide);\n        if(slideshow.animationOff) {\n            slideshow.animating = false;\n            Util.removeClass(slideshow.element, slideshow.animatingClass);\n        }\n    };\n\n    function getExitItemClass(bool, oldIndex, newIndex) {\n        var className = '';\n        if(bool) {\n            className = (bool == 'next') ? 'slideshow__item--slide-out-right' : 'slideshow__item--slide-out-left';\n        } else {\n            className = (newIndex < oldIndex) ? 'slideshow__item--slide-out-left' : 'slideshow__item--slide-out-right';\n        }\n        return className;\n    };\n\n    function getEnterItemClass(bool, oldIndex, newIndex) {\n        var className = '';\n        if(bool) {\n            className = (bool == 'next') ? 'slideshow__item--slide-in-right' : 'slideshow__item--slide-in-left';\n        } else {\n            className = (newIndex < oldIndex) ? 'slideshow__item--slide-in-left' : 'slideshow__item--slide-in-right';\n        }\n        return className;\n    };\n\n    function resetSlideshowNav(slideshow, newIndex, oldIndex) {\n        if(slideshow.navigation) {\n            Util.removeClass(slideshow.navigation[oldIndex], 'slideshow__nav-item--selected');\n            Util.addClass(slideshow.navigation[newIndex], 'slideshow__nav-item--selected');\n            slideshow.navCurrentLabel.parentElement.removeChild(slideshow.navCurrentLabel);\n            slideshow.navigation[newIndex].getElementsByTagName('button')[0].appendChild(slideshow.navCurrentLabel);\n        }\n    };\n\n    function resetSlideshowTheme(slideshow, newIndex) {\n        var dataTheme = slideshow.items[newIndex].getAttribute('data-theme');\n        if(dataTheme) {\n            if(slideshow.navigation) slideshow.navigation[0].parentElement.setAttribute('data-theme', dataTheme);\n            if(slideshow.controls[0]) slideshow.controls[0].parentElement.setAttribute('data-theme', dataTheme);\n        } else {\n            if(slideshow.navigation) slideshow.navigation[0].parentElement.removeAttribute('data-theme');\n            if(slideshow.controls[0]) slideshow.controls[0].parentElement.removeAttribute('data-theme');\n        }\n    };\n\n    function emitSlideshowEvent(slideshow, eventName, detail) {\n        var event = new CustomEvent(eventName, {detail: detail});\n        slideshow.element.dispatchEvent(event);\n    };\n\n    function updateAriaLive(slideshow) {\n        slideshow.ariaLive.innerHTML = 'Item '+(slideshow.selectedSlide + 1)+' of '+slideshow.items.length;\n    };\n\n    function externalControlSlide(slideshow, button) { // control slideshow using external element\n        button.addEventListener('click', function(event){\n            var index = button.getAttribute('data-index');\n            if(!index) return;\n            event.preventDefault();\n            showNewItem(slideshow, index - 1, false);\n        });\n    };\n\n    Slideshow.defaults = {\n        element : '',\n        navigation : true,\n        autoplay : false,\n        autoplayInterval: 5000,\n        swipe: false\n    };\n\n    window.Slideshow = Slideshow;\n\n    //initialize the Slideshow objects\n    var slideshows = document.getElementsByClassName('js-slideshow');\n    if( slideshows.length > 0 ) {\n        for( var i = 0; i < slideshows.length; i++) {\n            (function(i){\n                var navigation = (slideshows[i].getAttribute('data-navigation') && slideshows[i].getAttribute('data-navigation') == 'off') ? false : true,\n                    autoplay = (slideshows[i].getAttribute('data-autoplay') && slideshows[i].getAttribute('data-autoplay') == 'on') ? true : false,\n                    autoplayInterval = (slideshows[i].getAttribute('data-autoplay-interval')) ? slideshows[i].getAttribute('data-autoplay-interval') : 5000,\n                    swipe = (slideshows[i].getAttribute('data-swipe') && slideshows[i].getAttribute('data-swipe') == 'on') ? true : false;\n                new Slideshow({element: slideshows[i], navigation: navigation, autoplay : autoplay, autoplayInterval : autoplayInterval, swipe : swipe});\n            })(i);\n        }\n    }\n}());\n","// File#: _3_expandable-img-gallery\n// Usage: codyhouse.co/license\n\n(function() {\n    var ExpGallery = function(element) {\n        this.element = element;\n        this.slideshow = this.element.getElementsByClassName('js-exp-lightbox__body')[0];\n        this.slideshowList = this.element.getElementsByClassName('js-exp-lightbox__slideshow')[0];\n        this.slideshowId = this.element.getAttribute('id')\n        this.gallery = document.querySelector('[data-controls=\"'+this.slideshowId+'\"]');\n        this.galleryItems = this.gallery.getElementsByClassName('js-exp-gallery__item');\n        this.lazyload = this.gallery.getAttribute('data-placeholder');\n        initLightboxMarkup(this);\n        lazyLoadLightbox(this);\n        initSlideshow(this);\n        initModal(this);\n        initModalEvents(this);\n    };\n\n    function initLightboxMarkup(gallery) {\n        // create items inside lightbox - modal slideshow\n        var slideshowContent = '';\n        for(var i = 0; i < gallery.galleryItems.length; i++) {\n            var caption = gallery.galleryItems[i].getElementsByClassName('js-exp-gallery__caption'),\n                image = gallery.galleryItems[i].getElementsByTagName('img')[0],\n                caption = gallery.galleryItems[i].getElementsByClassName('js-exp-gallery__caption');\n            // details\n            var src = image.getAttribute('data-src');\n            if(!src) src = image.getAttribute('src');\n            var altAttr = image.getAttribute('alt')\n            altAttr = altAttr ? 'alt=\"'+altAttr+'\"' : '';\n            var draggable = gallery.slideshow.getAttribute('data-swipe') == 'on' ? 'draggable=\"false\" ondragstart=\"return false;\"' : '';\n            var imgBlock = gallery.lazyload\n                ? '<img data-src=\"'+src+'\" data-loading=\"lazy\" src=\"'+gallery.lazyload+'\" '+altAttr+' '+draggable+'>'\n                : '<img src=\"'+src+'\" data-loading=\"lazy\" '+draggable+'>';\n\n            var captionBlock = caption.length > 0\n                ? '<figcaption class=\"exp-lightbox__caption\">'+caption[0].textContent+'</figcaption>'\n                : '';\n\n            slideshowContent = slideshowContent + '<li class=\"slideshow__item js-slideshow__item\"><figure class=\"exp-lightbox__media\"><div class=\"exp-lightbox__media-outer\"><div class=\"exp-lightbox__media-inner\">'+imgBlock+'</div></div>'+captionBlock+'</li>';\n        }\n        gallery.slideshowList.innerHTML = slideshowContent;\n        gallery.slides = gallery.slideshowList.getElementsByClassName('js-slideshow__item');\n\n        // append the morphing image - we will animate it from the selected slide to the final position (and viceversa)\n        var imgMorph = document.createElement(\"div\");\n        Util.setAttributes(imgMorph, {'aria-hidden': 'true', 'class': 'exp-lightbox__clone-img-wrapper js-exp-lightbox__clone-img-wrapper', 'data-exp-morph': gallery.slideshowId});\n        imgMorph.innerHTML = '<svg><defs><clipPath id=\"'+gallery.slideshowId+'-clip\"><rect/></clipPath></defs><image height=\"100%\" width=\"100%\" clip-path=\"url(#'+gallery.slideshowId+'-clip)\"></image></svg>';\n        document.body.appendChild(imgMorph);\n        gallery.imgMorph = document.querySelector('.js-exp-lightbox__clone-img-wrapper[data-exp-morph=\"'+gallery.slideshowId+'\"]');\n        gallery.imgMorphSVG = gallery.imgMorph.getElementsByTagName('svg')[0];\n        gallery.imgMorphRect = gallery.imgMorph.getElementsByTagName('rect')[0];\n        gallery.imgMorphImg = gallery.imgMorph.getElementsByTagName('image')[0];\n\n        // append image for zoom in effect\n        if(gallery.slideshow.getAttribute('data-zoom') == 'on') {\n            var zoomImg = document.createElement(\"div\");\n            Util.setAttributes(zoomImg, {'aria-hidden': 'true', 'class': 'exp-lightbox__zoom exp-lightbox__zoom--no-transition js-exp-lightbox__zoom'});\n            zoomImg.innerHTML = '<img>';\n            gallery.element.appendChild(zoomImg);\n            gallery.zoomImg = gallery.element.getElementsByClassName('js-exp-lightbox__zoom')[0];\n        }\n    };\n\n    function lazyLoadLightbox(gallery) {\n        // lazyload media of selected slide/prev slide/next slide\n        gallery.slideshow.addEventListener('newItemSelected', function(event){\n            // 'newItemSelected' is emitted by the Slideshow object when a new slide is selected\n            gallery.selectedSlide = event.detail;\n            lazyLoadSlide(gallery);\n        });\n    };\n\n    function lazyLoadSlide(gallery) {\n        setSlideMedia(gallery, gallery.selectedSlide);\n        setSlideMedia(gallery, gallery.selectedSlide + 1);\n        setSlideMedia(gallery, gallery.selectedSlide - 1);\n    };\n\n    function setSlideMedia(gallery, index) {\n        if(index < 0) index = gallery.slides.length - 1;\n        if(index > gallery.slides.length - 1) index = 0;\n        var imgs = gallery.slides[index].querySelectorAll('img[data-src]');\n        for(var i = 0; i < imgs.length; i++) {\n            imgs[i].src = imgs[i].getAttribute('data-src');\n        }\n    };\n\n    function initSlideshow(gallery) {\n        if(gallery.slides.length <= 1) {\n            hideSlideshowElements(gallery);\n            return;\n        }\n        var swipe = (gallery.slideshow.getAttribute('data-swipe') && gallery.slideshow.getAttribute('data-swipe') == 'on') ? true : false;\n        gallery.slideshowObj = new Slideshow({element: gallery.slideshow, navigation: false, autoplay : false, swipe : swipe});\n    };\n\n    function hideSlideshowElements(gallery) { // hide slideshow controls if gallery is composed by one item only\n        var slideshowNav = gallery.element.getElementsByClassName('js-slideshow__control');\n        if(slideshowNav.length > 0) {\n            for(var i = 0; i < slideshowNav.length; i++) Util.addClass(slideshowNav[i], 'is-hidden');\n        }\n    };\n\n    function initModal(gallery) {\n        Util.addClass(gallery.element, 'exp-lightbox--no-transition'); // add no-transition class to lightbox - used to select the first visible slide\n        gallery.element.addEventListener('modalIsClose', function(event){ // add no-transition class\n            Util.addClass(gallery.element, 'exp-lightbox--no-transition');\n            gallery.imgMorph.style = '';\n        });\n        // trigger modal lightbox\n        gallery.gallery.addEventListener('click', function(event){\n            openModalLightbox(gallery, event);\n        });\n    };\n\n    function initModalEvents(gallery) {\n        if(gallery.zoomImg) { // image zoom\n            gallery.slideshow.addEventListener('click', function(event){\n                if(event.target.tagName.toLowerCase() == 'img' && event.target.closest('.js-slideshow__item') && !gallery.modalSwiping) modalZoomImg(gallery, event.target);\n            });\n\n            gallery.zoomImg.addEventListener('click', function(event){\n                modalZoomImg(gallery, false);\n            });\n\n            gallery.element.addEventListener('modalIsClose', function(event){\n                modalZoomImg(gallery, false); // close zoom-in image if open\n                closeModalAnimation(gallery);\n            });\n        }\n\n        if(gallery.slideshowObj.options.swipe) { // close gallery when you swipeUp/SwipeDown\n            gallery.slideshowObj.element.addEventListener('swipeUp', function(event){\n                closeModal(gallery);\n            });\n            gallery.slideshowObj.element.addEventListener('swipeDown', function(event){\n                closeModal(gallery);\n            });\n        }\n\n        if(gallery.zoomImg && gallery.slideshowObj.options.swipe) {\n            gallery.slideshowObj.element.addEventListener('swipeLeft', function(event){\n                gallery.modalSwiping = true;\n            });\n            gallery.slideshowObj.element.addEventListener('swipeRight', function(event){\n                gallery.modalSwiping = true;\n            });\n            gallery.slideshowObj.element.addEventListener('newItemVisible', function(event){\n                gallery.modalSwiping = false;\n            });\n        }\n    };\n\n    function openModalLightbox(gallery, event) {\n        var item = event.target.closest('.js-exp-gallery__item');\n        if(!item) return;\n        gallery.selectedSlide = Util.getIndexInArray(gallery.galleryItems, item);\n        setSelectedItem(gallery);\n        lazyLoadSlide(gallery);\n        if(animationSupported) { // start expanding animation\n            window.requestAnimationFrame(function(){\n                animateSelectedImage(gallery);\n                openModal(gallery, item);\n            });\n        } else { // no expanding animation -> show modal\n            openModal(gallery, item);\n            Util.removeClass(gallery.element, 'exp-lightbox--no-transition');\n        }\n    };\n\n    function setSelectedItem(gallery) {\n        // if a specific slide was selected -> make sure to show that item first\n        var lastSelected = gallery.slideshow.getElementsByClassName('slideshow__item--selected');\n        if(lastSelected.length > 0 ) Util.removeClass(lastSelected[0], 'slideshow__item--selected');\n        Util.addClass(gallery.slides[gallery.selectedSlide], 'slideshow__item--selected');\n        if(gallery.slideshowObj) gallery.slideshowObj.selectedSlide = gallery.selectedSlide;\n    };\n\n    function openModal(gallery, item) {\n        gallery.element.dispatchEvent(new CustomEvent('openModal', {detail: item}));\n        gallery.modalSwiping = false;\n    };\n\n    function closeModal(gallery) {\n        gallery.modalSwiping = true;\n        modalZoomImg(gallery, false);\n        gallery.element.dispatchEvent(new CustomEvent('closeModal'));\n    };\n\n    function closeModalAnimation(gallery) { // modal is already closing -> start image closing animation\n        gallery.selectedSlide = gallery.slideshowObj.selectedSlide;\n        // on close - make sure last selected image (of the gallery) is in the viewport\n        var boundingRect = gallery.galleryItems[gallery.selectedSlide].getBoundingClientRect();\n        if(boundingRect.top < 0 || boundingRect.top > window.innerHeight) {\n            var windowScrollTop = window.scrollY || document.documentElement.scrollTop;\n            window.scrollTo(0, boundingRect.top + windowScrollTop);\n        }\n        // animate on close\n        animateSelectedImage(gallery, true);\n    };\n\n    function modalZoomImg(gallery, img) { // toggle zoom-in image\n        if(!gallery.zoomImg) return;\n        var bool = false;\n        if(img) { // open zoom-in image\n            gallery.originImg = img;\n            gallery.zoomImg.children[0].setAttribute('src', img.getAttribute('src'));\n            bool = true;\n        }\n        (animationSupported)\n            ? requestAnimationFrame(function(){animateZoomImg(gallery, bool)})\n            : Util.toggleClass(gallery.zoomImg, 'exp-lightbox__zoom--is-visible', bool);\n    };\n\n    function animateZoomImg(gallery, bool) {\n        if(!gallery.originImg) return;\n\n        var originImgPosition = gallery.originImg.getBoundingClientRect(),\n            originStyle = 'translateX('+originImgPosition.left+'px) translateY('+(originImgPosition.top + gallery.zoomImg.scrollTop)+'px) scale('+ originImgPosition.width/gallery.zoomImg.scrollWidth+')',\n            finalStyle = 'scale(1)';\n\n        if(bool) {\n            gallery.zoomImg.children[0].style.transform = originStyle;\n        } else {\n            gallery.zoomImg.addEventListener('transitionend', function cb(){\n                Util.addClass(gallery.zoomImg, 'exp-lightbox__zoom--no-transition');\n                gallery.zoomImg.scrollTop = 0;\n                gallery.zoomImg.removeEventListener('transitionend', cb);\n            });\n        }\n        setTimeout(function(){\n            Util.removeClass(gallery.zoomImg, 'exp-lightbox__zoom--no-transition');\n            Util.toggleClass(gallery.zoomImg, 'exp-lightbox__zoom--is-visible', bool);\n            gallery.zoomImg.children[0].style.transform = (bool) ? finalStyle : originStyle;\n        }, 50);\n    };\n\n    function animateSelectedImage(gallery, bool) { // create morphing image effect\n        var imgInit = gallery.galleryItems[gallery.selectedSlide].getElementsByTagName('img')[0],\n            imgInitPosition = imgInit.getBoundingClientRect(),\n            imgFinal = gallery.slides[gallery.selectedSlide].getElementsByTagName('img')[0],\n            imgFinalPosition = imgFinal.getBoundingClientRect();\n\n        // retrieve all animation params\n        var scale = imgFinalPosition.width > imgFinalPosition.height ? imgFinalPosition.height/imgInitPosition.height : imgFinalPosition.width/imgInitPosition.width;\n        var initHeight = imgFinalPosition.width > imgFinalPosition.height ? imgInitPosition.height : imgFinalPosition.height/scale,\n            initWidth = imgFinalPosition.width > imgFinalPosition.height ? imgFinalPosition.width/scale : imgInitPosition.width;\n\n        var initTranslateY = (imgInitPosition.height - initHeight)/2,\n            initTranslateX = (imgInitPosition.width - initWidth)/2,\n            initTop = imgInitPosition.top + initTranslateY,\n            initLeft = imgInitPosition.left + initTranslateX;\n\n        // get final states\n        var translateX = imgFinalPosition.left - imgInitPosition.left,\n            translateY = imgFinalPosition.top - imgInitPosition.top;\n\n        var finTranslateX = translateX - initTranslateX,\n            finTranslateY = translateY - initTranslateY;\n\n        var initScaleX = imgInitPosition.width/initWidth,\n            initScaleY = imgInitPosition.height/initHeight,\n            finScaleX = 1,\n            finScaleY = 1;\n\n        if(bool) { // update params if this is a closing animation\n            scale = 1/scale;\n            finScaleX = initScaleX;\n            finScaleY = initScaleY;\n            initScaleX = 1;\n            initScaleY = 1;\n            finTranslateX = -1*finTranslateX;\n            finTranslateY = -1*finTranslateY;\n            initTop = imgFinalPosition.top;\n            initLeft = imgFinalPosition.left;\n            initHeight = imgFinalPosition.height;\n            initWidth = imgFinalPosition.width;\n        }\n\n        // set initial status\n        gallery.imgMorph.setAttribute('style', 'height: '+initHeight+'px; width: '+initWidth+'px; top: '+initTop+'px; left: '+initLeft+'px;');\n        gallery.imgMorphSVG.setAttribute('viewbox', '0 0 '+initWidth+' '+initHeight);\n        Util.setAttributes(gallery.imgMorphImg, {'xlink:href': imgInit.getAttribute('src'), 'href': imgInit.getAttribute('src')});\n        Util.setAttributes(gallery.imgMorphRect, {'style': 'height: '+initHeight+'px; width: '+initWidth+'px;', 'transform': 'translate('+(initWidth/2)*(1 - initScaleX)+' '+(initHeight/2)*(1 - initScaleY)+') scale('+initScaleX+','+initScaleY+')'});\n\n        // reveal image and start animation\n        Util.addClass(gallery.imgMorph, 'exp-lightbox__clone-img-wrapper--is-visible');\n        Util.addClass(gallery.slideshowList, 'slideshow__content--is-hidden');\n        Util.addClass(gallery.galleryItems[gallery.selectedSlide], 'exp-gallery-item-hidden');\n\n        gallery.imgMorph.addEventListener('transitionend', function cb(event){ // reset elements once animation is over\n            if(event.propertyName.indexOf('transform') < 0) return;\n            Util.removeClass(gallery.element, 'exp-lightbox--no-transition');\n            Util.removeClass(gallery.imgMorph, 'exp-lightbox__clone-img-wrapper--is-visible');\n            Util.removeClass(gallery.slideshowList, 'slideshow__content--is-hidden');\n            gallery.imgMorph.removeAttribute('style');\n            gallery.imgMorphRect.removeAttribute('style');\n            gallery.imgMorphRect.removeAttribute('transform');\n            gallery.imgMorphImg.removeAttribute('href');\n            gallery.imgMorphImg.removeAttribute('xlink:href');\n            Util.removeClass(gallery.galleryItems[gallery.selectedSlide], 'exp-gallery-item-hidden');\n            gallery.imgMorph.removeEventListener('transitionend', cb);\n        });\n\n        // trigger expanding/closing animation\n        gallery.imgMorph.style.transform = 'translateX('+finTranslateX+'px) translateY('+finTranslateY+'px) scale('+scale+')';\n        animateRectScale(gallery.imgMorphRect, initScaleX, initScaleY, finScaleX, finScaleY, initWidth, initHeight);\n    };\n\n    function animateRectScale(rect, scaleX, scaleY, finScaleX, finScaleY, width, height) {\n        var currentTime = null,\n            duration =  parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--exp-gallery-animation-duration'))*1000 || 300;\n\n        var animateScale = function(timestamp){\n            if (!currentTime) currentTime = timestamp;\n            var progress = timestamp - currentTime;\n            if(progress > duration) progress = duration;\n\n            var valX = easeOutQuad(progress, scaleX, finScaleX-scaleX, duration),\n                valY = easeOutQuad(progress, scaleY, finScaleY-scaleY, duration);\n\n            rect.setAttribute('transform', 'translate('+(width/2)*(1 - valX)+' '+(height/2)*(1 - valY)+') scale('+valX+','+valY+')');\n            if(progress < duration) {\n                window.requestAnimationFrame(animateScale);\n            }\n        };\n\n        function easeOutQuad(t, b, c, d) {\n            t /= d;\n            return -c * t*(t-2) + b;\n        };\n\n        window.requestAnimationFrame(animateScale);\n    };\n\n    function keyboardNavigateLightbox(gallery, direction) {\n        if(!Util.hasClass(gallery.element, 'modal--is-visible')) return;\n        if(!document.activeElement.closest('.js-exp-lightbox__body') && document.activeElement.closest('.js-modal')) return\n        (direction == 'next') ? gallery.slideshowObj.showNext() : gallery.slideshowObj.showPrev();\n    };\n\n    window.ExpGallery = ExpGallery;\n\n    // init ExpGallery objects\n    var expGalleries = document.getElementsByClassName('js-exp-lightbox'),\n        animationSupported = window.requestAnimationFrame && !Util.osHasReducedMotion();\n    if( expGalleries.length > 0 ) {\n        var expGalleriesArray = [];\n        for( var i = 0; i < expGalleries.length; i++) {\n            (function(i){ expGalleriesArray.push(new ExpGallery(expGalleries[i]));})(i);\n\n            // Lightbox gallery navigation with keyboard\n            window.addEventListener('keydown', function(event){\n                if(event.keyCode && event.keyCode == 39 || event.key && event.key.toLowerCase() == 'arrowright') {\n                    updateLightbox('next');\n                } else if(event.keyCode && event.keyCode == 37 || event.key && event.key.toLowerCase() == 'arrowleft') {\n                    updateLightbox('prev');\n                }\n            });\n\n            function updateLightbox(direction) {\n                for( var i = 0; i < expGalleriesArray.length; i++) {\n                    (function(i){keyboardNavigateLightbox(expGalleriesArray[i], direction);})(i);\n                };\n            };\n        }\n    }\n}());","/**\n * Anchor Scroll\n *\n * @see https://gist.github.com/HoundstoothSTL/5510082\n */\n(function (w, d) {\n    var html = d.querySelector('html');\n\n    function getOffsetTop(element) {\n        var offsetTop = 0;\n\n        do {\n            offsetTop += element.offsetTop;\n            element = element.offsetParent;\n        } while (element);\n\n        return offsetTop;\n    }\n\n    function scrollToAnchor(hash) {\n        var target = d.querySelector(hash);\n\n        if (target) {\n            var offsetTop = getOffsetTop(target);\n\n            setTimeout(function () {\n                html.scrollTop = offsetTop;\n            });\n        }\n    }\n\n    d.addEventListener('DOMContentLoaded', function () {\n        if (w.location.hash) {\n            scrollToAnchor(w.location.hash);\n        }\n    });\n})(window, document);\n","/**\n * Page About\n *\n * 01. Timeline\n */\n\n(function (w, d) {\n    /**\n     * Timeline\n     *\n     * @requires plugins/timeline.js\n     *\n     * @see https://www.cssscript.com/responsive-horizontal-vertical-timeline/\n     */\n    (function () {\n        timeline(d.querySelectorAll('.js-timeline'), {\n            forceVerticalMode: 899,\n            mode: 'horizontal',\n            verticalStartPosition: 'left',\n            visibleItems: 3\n        });\n    }());\n}(window, document));\n","/**\n * Page Home\n *\n * 01. Hero\n * 02. Software Tabs/Accordion\n * 03. References\n */\n\n(function (w, d) {\n\n    /**\n     * Hero\n     *\n     * @requires plugins/swiper.js\n     *\n     * @see https://codepen.io/xgad/post/svg-radial-progress-meters\n     */\n    (function () {\n        var container = d.querySelector('.js-hero');\n\n        if (!container) {\n            return;\n        }\n\n        var progressValue = d.querySelector('.c-progress__value');\n        var circumference = 2 * Math.PI * progressValue.getAttribute('r');\n\n        progressValue.style.strokeDasharray = circumference;\n        progressValue.style.transitionTimingFunction = 'linear';\n\n        new Swiper(container, {\n            speed: 1600,\n            loop: true,\n            effect: 'fade',\n            autoHeight: true,\n            slidesPerView: 1,\n            lazy: true,\n            preventClicks: false,\n            autoplay: {\n                delay: 5000,\n                disableOnInteraction: false,\n                waitForTransition: false\n            },\n            on: {\n                transitionStart: function () {\n                    var duration = this.params.autoplay.delay;\n\n                    progressValue.style.transitionProperty = 'none';\n                    progressValue.style.transitionDuration = 'unset';\n                    progressValue.style.strokeDashoffset = circumference;\n\n                    setTimeout(function () {\n                        progressValue.style.transitionProperty = 'stroke-dashoffset';\n                        progressValue.style.transitionDuration = duration + 'ms';\n                        progressValue.style.strokeDashoffset = 0;\n                    }, 10);\n                }\n            },\n            pagination: {\n                el: '.js-hero__fraction',\n                type: 'fraction',\n            },\n        });\n    }());\n\n\n    /**\n     * Software Tabs/Accordion\n     *\n     * @see https://codepen.io/dillansimmons/pen/ppaGYr\n     */\n    (function () {\n        var container = d.querySelector('.js-tabs-to-accordion');\n\n        if (!container) {\n            return;\n        }\n\n        // Help Functions\n        // function show(el) {\n        //     var el = d.querySelectorAll(el);\n        //     for (i = 0; i < el.length; i++) {\n        //         if (el[i].style.display === 'none') {\n        //             el[i].style.display = 'block';\n        //         }\n        //     }\n        //     return false;\n        // }\n\n        function hide(el) {\n            var el = d.querySelectorAll(el);\n            for (i = 0; i < el.length; i++) {\n                if (el[i].style.display === 'block') {\n                    el[i].style.display = 'none';\n                }\n            }\n            return false;\n        }\n\n        function fadeIn(el) {\n            el.style.opacity = 0;\n            el.style.display = \"block\";\n            var tick = function () {\n                el.style.opacity = +el.style.opacity + 0.05;\n                if (+el.style.opacity < 1) {\n                    (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16)\n                }\n            };\n            tick();\n        }\n\n        function addClass(el, className) {\n            var el = d.querySelectorAll(el);\n\n            for (i = 0; i < el.length; i++) {\n                if (el.classList) {\n                    el[i].classList.add(className);\n                } else {\n                    el[i].className += ' ' + className;\n                }\n            }\n        }\n\n        function removeClass(el, className) {\n            var el = d.querySelectorAll(el);\n\n            for (i = 0; i < el.length; i++) {\n                if (el[i].classList) {\n                    el[i].classList.remove(className);\n                } else {\n                    el[i].className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n                }\n            }\n        }\n\n        // Main function for swapping tabs / content on click\n        function tabMagic(el) {\n            [].forEach.call(el, function (el) {\n                el.addEventListener('click', function () {\n                    hide(\".js-tabs-to-accordion__content\");\n\n                    var activeTab = this.getAttribute(\"rel\");\n                    fadeIn(d.querySelector(\"#\" + activeTab));\n\n                    removeClass(\".js-tabs-to-accordion__item\", \"-active\");\n                    addClass(\"li[rel^='\" + activeTab + \"']\", \"-active\");\n\n                    removeClass(\".js-tabs-to-accordion__heading\", \"-active\");\n                    addClass(\".js-tabs-to-accordion__heading[rel^='\" + activeTab + \"']\", \"-active\");\n                })\n            })\n        }\n\n        // Hide the content and show the first tab\n        hide(\".js-tabs-to-accordion__content\");\n        fadeIn(d.querySelector(\"#tab1\"));\n\n        //Desktop Tabs\n        var tabLi = d.querySelectorAll(\".js-tabs-to-accordion__item\");\n        tabMagic(tabLi);\n\n        // Drawer Tabs\n        var drawer = d.querySelectorAll(\".js-tabs-to-accordion__heading\");\n        tabMagic(drawer);\n    }());\n\n\n    /**\n     * Services\n     *\n     * @requires plugins/swiper.js\n     */\n    (function () {\n        new Swiper('.js-services', {\n            spaceBetween: '2.43902%',\n            slidesPerView: 1,\n            grabCursor: true,\n            autoplay: {\n                delay: 5000,\n                disableOnInteraction: true,\n            },\n            pagination: {\n                el: '.js-services__pag',\n                clickable: true\n            },\n            breakpoints: {\n                // when window width is >= 540px\n                540: {\n                    slidesPerView: 2,\n                },\n                // when window width is >= 1100px\n                1100: {\n                    slidesPerView: 3,\n                }\n            }\n        });\n    }());\n\n\n    /**\n     * References\n     *\n     * @requires plugins/swiper.js\n     */\n    (function () {\n        new Swiper('.js-references', {\n            spaceBetween: 40,\n            slidesPerView: 'auto',\n            freeMode: true,\n            grabCursor: true,\n            autoplay: {\n                delay: 5000,\n                disableOnInteraction: true,\n            },\n            pagination: {\n                el: '.js-references__pag',\n                clickable: true\n            },\n        });\n    }());\n\n}(window, document));\n","/**\n * Sharing\n *\n * Visualizza i pulsanti di condivisione quando il viewport raggiunge\n * il data-offset impostato sull’elemento .js-share\n *\n * @see {@link libraries/util.js}\n * @see {@link https://codyhouse.co/ds/components/app/back-to-top}\n */\n\n(function (w, d) {\n    var share = d.querySelector('.js-sharing');\n\n    if (share) {\n        var scrollOffset = parseInt(share.getAttribute('data-offset'), 10) || 0;\n        var scrolling = false;\n\n        function checkStickyShare() {\n            var windowTop = w.scrollY || d.documentElement.scrollTop;\n            Util.toggleClass(share, 'is-visible', windowTop >= scrollOffset);\n            scrolling = false;\n        }\n\n        if (scrollOffset > 0) {\n            w.addEventListener(\"scroll\", function () {\n                if (!scrolling) {\n                    scrolling = true;\n\n                    if (w.requestAnimationFrame) {\n                        w.requestAnimationFrame(checkStickyShare);\n                    } else {\n                        setTimeout(checkStickyShare, 250);\n                    }\n                }\n            });\n\n            checkStickyShare();\n        }\n    }\n}(window, document));\n","/**\n * Share Counter\n */\n(function(w, d) {\n    function humanizeNumber(num) {\n        if (num >= 1e6) {\n            return (num / 1e6).toFixed(1) + 'M';\n        }\n\n        if (num >= 1e3) {\n            return (num / 1e3).toFixed(1) + 'k';\n        }\n\n        return num;\n    }\n\n    var countButtons = d.querySelectorAll('.js-share-count');\n    var totalContainer = d.querySelector('.js-share-total');\n    var totalValue = 0;\n\n    if (countButtons.length) {\n        var shareUrl = null;\n        countButtons.forEach(function (button) {\n            if (button.dataset.url) {\n                shareUrl = button.dataset.url;\n            }\n        });\n\n        if (shareUrl && 'fetch' in w && 'templateUrl' in w) {\n            fetch(templateUrl + '/share-count/count-stats.php?url=' + encodeURIComponent(shareUrl))\n                .then(function (response) {\n                    return response.json();\n                })\n                .then(function (data) {\n                    if (data.message) {\n                        console.error(data.message);\n\n                        return;\n                    }\n\n                    countButtons.forEach(function (button) {\n                        var counter = d.createElement('span');\n                        Util.addClass(counter, 'c-share__count');\n                        counter.innerText = humanizeNumber(data.share[button.dataset.sharer]);\n                        //button.parentElement.appendChild(counter);\n                        button.appendChild(counter);\n\n                        totalValue += parseInt(data.share[button.dataset.sharer], 10);\n                    });\n\n                    if (totalContainer) {\n                        totalContainer.innerText = humanizeNumber(totalValue);\n                    }\n                });\n        }\n    }\n})(window, document);","/**\n * Supports\n *\n * 01. SVG\n * 02. Object-Fit Image\n * 03. Lazy iframe\n * 04. DataLayer\n */\n(function (w, d) {\n\n    /**\n     * SVG\n     *\n     * @see {@link libraries/svg4everybody.js}\n     */\n    svg4everybody();\n\n\n    /**\n     * Object-Fit Image\n     *\n     * @see {@link libraries/ofi.js}\n     */\n    objectFitImages();\n\n\n    /**\n     * Lazy iframe\n     * Con verifica accettazione cookie\n     *\n     * @see {@link libraries/util.js}\n     */\n    w.onCookiePolicyAccepted(function () {\n        [].slice.call(d.getElementsByTagName('iframe')).forEach(function (iframe) {\n            Util.addClass(iframe, 'lazyload');\n        });\n    });\n\n\n    /**\n     * DataLayer per Cookie Consent Given\n     *\n     * Non spostare questo frammento nella cartella root altrimenti non funziona più il tracking perché\n     * il plugin \"Google Tag Manager for WordPress\" viene caricato dopo root.min.js\n     */\n    w.onCookiePolicyAccepted(function () {\n        if (w.dataLayer) {\n            w.dataLayer.push({\n                'event': 'cookie_consent_given'\n            });\n        }\n    });\n\n}(window, document));\n","/**\n * Video Replacement\n */\n(function (d) {\n\n    function play(video, type, videoId) {\n        var url = '';\n\n        if (type === 'vimeo') {\n            url = 'https://player.vimeo.com/video/' + videoId + '?autoplay=1&byline=0&badge=0&title=0&loop=1';\n        } else {\n            url = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&amp;rel=0&amp;showinfo=0&amp;&amp;autohide=1&amp;color=white';\n        }\n\n        video.innerHTML = '<iframe width=\"1200\" height=\"675\" src=\"' + url + '\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>';\n        video.style.display = 'block';\n    }\n\n    d.querySelectorAll('.js-video').forEach(function (element) {\n        var video = element.querySelector('.js-videoIframe');\n        var image = element.querySelector('.js-videoImage');\n        var playlistItems = element.querySelectorAll('.js-videoItem');\n\n        image.addEventListener('click', function () {\n            image.style.display = 'none';\n\n            play(video, video.dataset.videoType, video.dataset.videoId);\n        });\n\n        playlistItems.forEach(function (playlistItem) {\n            playlistItem.addEventListener('click', function () {\n                playlistItems.forEach(function (element) {\n                    Util.removeClass(element, 'is-active');\n                });\n\n                Util.addClass(playlistItem, 'is-active');\n\n                image.style.display = 'none';\n\n                play(video, playlistItem.dataset.videoType, playlistItem.dataset.videoId);\n            });\n        });\n    });\n\n}(document));\n"]}