{"version":3,"sources":["../../node_modules/browser-pack/_prelude.js","../../modules/floor-plan/floor-plan.js","../../modules/carousel/carousel.js","../../modules/filters/filters.js","../../modules/gallery/gallery.js","../../modules/header-video/header-video.js","../../modules/header/header.js","../../modules/hero/hero.js","../../modules/local-nav/local-nav.js","../../modules/location-tabs/location-tabs.js","../../modules/page-section/page-section.js","../../modules/panzoom/panzoom.js","../../modules/parallax/parallax.js","../../modules/press-list/press-list.js","../../modules/scroll-by-section/scroll-by-section.js","../../modules/scroll-section/scroll-section.js","../../modules/toggle-class/toggle-class.js","../../modules/video-landing/video-landing.js","../../node_modules/debounce/index.js","../../node_modules/desandro-matches-selector/matches-selector.js","../../node_modules/ev-emitter/ev-emitter.js","../../node_modules/fizzy-ui-utils/utils.js","../../node_modules/flickity-imagesloaded/flickity-imagesloaded.js","../../node_modules/flickity/js/add-remove-cell.js","../../node_modules/flickity/js/animate.js","../../node_modules/flickity/js/cell.js","../../node_modules/flickity/js/drag.js","../../node_modules/flickity/js/flickity.js","../../node_modules/flickity/js/index.js","../../node_modules/flickity/js/lazyload.js","../../node_modules/flickity/js/page-dots.js","../../node_modules/flickity/js/player.js","../../node_modules/flickity/js/prev-next-button.js","../../node_modules/flickity/js/slide.js","../../node_modules/get-size/get-size.js","../../node_modules/imagesloaded/imagesloaded.js","../../node_modules/jquery.panzoom/dist/jquery.panzoom.js","../../node_modules/js-cookie/src/js.cookie.js","../../node_modules/unidragger/unidragger.js","../../node_modules/unipointer/unipointer.js","../../node_modules/webfontloader/webfontloader.js","../../src/js/lib/init-modules.js","../../src/js/main.js"],"names":["Carousel","el","Flickity","imagesLoaded","autoPlay","require","module","exports","Filters","t","this","$el","$","$filters","find","$active","filter","activeFilter","$items","data","$bottomImages","$bottomImagesWrap","selectFilter","eq","on","e","$target","target","window","global","prototype","selectedFilter","removeClass","addClass","length","slideUp","currentBottomImage","hasClass","slideDown","Gallery","click","bind","$modal","$carousel","$modals","flickitys","close","each","id","pageDots","flickity","draggable","prevNextButtons","targetIndex","currentTarget","select","HeaderVideo","container","querySelector","sections","document","querySelectorAll","button","scrollInit","buttonTrigger","addEventListener","debounce","$body","classList","add","i","element","parentId","offset","getBoundingClientRect","closest","attr","getComputedStyle","getPropertyValue","bottom","setAttribute","contains","activeHeaderBlock","activeHeaderContent","remove","Header","anchor","getAttribute","logo","$compact","children","$full","height","logoOffset","scrolling","scrolled","prevPos","stickyLogoOffset","calculateOffset","scrollNavbar","HEADER_BREAK","compactDiff","scrollTop","pageYOffset","documentElement","direction","currentAnchorPos","top","innerWidth","toggleScrolled","toggleScrolling","resetTransform","offsetHeight","toggleCompact","css","toggleClass","cls","value","timeout","setTimeout","clearTimeout","body","Hero","$inner","$bg","$image","firstX","firstY","currPosX","currPosY","posX","posY","$window","width","BREAKPOINT","setStyleVendor","newPosY","newPosX","frameOffset","photoWidth","photoHeight","pointerX","pageX","left","pointerY","pageY","property","style","LocalNav","offsetEl","topOffset","watchScroll","smoothScrollHandler","windowScrollTop","location","pathname","replace","hostname","preventDefault","hash","is","show","animate","LocationTabs","filters","images","Array","slice","call","forEach","type","current","image","Section","$button_popup","$button_popup_wrapper","$url","$width","$height","open","PanZoom","$movable","args","minScale","maxScale","transition","easing","duration","contain","panzoom","Parallax","$instances","calculateTransform","viewportWidth","viewportHeight","index","instance","$instance","Press","loadMorePosts","pageNumber","$button","prop","ajax","dataType","url","wp","ajaxUrl","action","success","html","alert","$list","append","fadeIn","hasNextPage","hide","error","ScrollBySection","initScrollBySection","scrollFull","evt","event","originalEvent","currentIndex","$currentSection","delta","detail","wheelDelta","$sections","sectionCount","mousewheelevt","test","navigator","userAgent","ScrollSection","sectionIndex","$SECTIONS","initScroll","$parent","parent","nextIndex","topPadding","parseFloat","ToggleClass","targetSelector","className","toggle","initModal","$MODAL","$MODAL_VIDEO","$MODAL_CLOSE","pause","VideoLanding","$media","$form","$videoButton","$videoTrigger","initForm","submitForm","initVideos","initCutout","videoFirsttime","Modernizr","Cookies","THRESHOLD","syncWidth","$viewBoxes","$measure","setWidth","viewBox","split","outerWidth","join","$headingMask","$viewBoxBig","$viewBoxSmall","$viewBoxAll","submitData","serializeArray","name","method","done","trigger","fail","checkMedia","hover","playMedia","result","src","play","scrollBottom","yTopMedia","yBottomMedia","func","wait","immediate","later","last","Date","now","timestamp","apply","context","debounced","arguments","callNow","clear","flush","factory","define","amd","matchesSelector","matchesMethod","ElemProto","Element","matches","prefixes","prefix","elem","selector","EvEmitter","proto","eventName","listener","events","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","off","splice","emitEvent","onceListeners","allOff","fizzyUIUtils","utils","extend","a","b","modulo","num","div","arraySlice","makeArray","obj","isArray","undefined","removeFrom","ary","getParent","parentNode","getQueryElement","handleEvent","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","threshold","timeoutName","_this","docReady","callback","readyState","toDashed","str","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","JSON","parse","createMethods","_createImagesLoaded","onImagesLoadedProgress","cell","getParentCell","img","cellSizeChange","freeScroll","positionSliderAtSelected","slider","getCellsFragment","cells","fragment","createDocumentFragment","appendChild","insert","_makeCells","len","isAppend","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","prepend","getCells","minCellIndex","Math","min","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","animatePrototype","startAnimation","isAnimating","restingFrames","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","transform","firstSlide","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","_unshiftCells","getFrictionFactor","applyForce","force","getRestingPosition","isDraggable","dragVelocity","dragX","dragForce","distance","selectedAttraction","Cell","create","originSide","destroy","unselect","side","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","cellAlign","sideOffset","adjustedX","removeChild","Unidragger","getScrollPosition","pageXOffset","y","defaults","dragThreshold","_touchActionValue","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","_pointerDownDefault","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","pointerDownPointer","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","nodeName","focus","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","removeEventListener","dragStart","dragStartPosition","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","originBound","max","endBound","getLastSlide","dragMoveTime","dragEnd","dragEndRestingSelect","restingX","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","dist","minDist","isWrapAround","slideIndex","slide","wrap","floor","staticClick","clickedCell","cellElem","cellIndex","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","Slide","_Flickity","moveElements","toElem","queryElement","flickityGUID","instances","option","$element","constructor","_create","GUID","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","guid","createElement","_createSlider","watchCSS","activate","opts","isActive","_filterFindCellElements","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","map","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","isOriginLeft","nextMargin","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","right","shorthand","adaptiveHeight","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","isWrap","isInstant","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","getAdjacentCellElements","adjCount","cellElems","uiChange","childUIPointerDown","onresize","isDragging","content","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","LazyLoader","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","srcset","onload","complete","onerror","Unipointer","PageDots","Object","holder","dots","handleClick","onClick","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","hidden","tick","time","stop","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","svgURI","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","lastCell","lastMargin","getStyleSize","isNaN","noop","getZeroSize","innerHeight","measurementsLength","measurements","getStyle","logError","setup","isSetup","padding","borderStyle","borderWidth","boxSizing","isBoxSizeOuter","nodeType","display","offsetWidth","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","message","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","LoadingImage","Background","Image","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","child","1","9","11","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","fn","promise","matrixEquals","first","second","createResetOptions","range","Matrix","c","d","f","g","h","Vector","z","Panzoom","datakey","$elem","$set","$doc","ownerDocument","isSVG","rsvg","namespaceURI","panning","_buildTransform","_transform","cssProps","rupper","_buildTransition","resetDimensions","$empty","self","scale","getMatrix","_checkPanWhenZoomed","rIE11","supportsInputEvent","input","oninput","floating","rmatrix","RegExp","matrix","isVector","inverse","determinant","eventNamespace","cursor","disablePan","disableZoom","disableXAxis","disableYAxis","which","linearZoom","panOnlyWhenZoomed","rangeStep","_initStyle","_bind","_resetStyle","_unbind","isDisabled","dims","absScale","dimensions","border","margin","reset","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","dValue","zoom","resetPan","pan","setTransform","getTransform","transformElem","getScale","sqrt","pow","spaceWLeft","spaceWRight","scaleDiff","conWidth","conHeight","zoomAspectW","zoomAspectH","spaceHTop","spaceHBottom","$zoomRange","val","originalMatrix","isPanning","_transition","relative","surfaceM","startScale","m","focal","clientX","clientY","clientV","o","parentOffset","offsetM","scrollLeft","surfaceV","noSetRange","key","_setOptions","proxy","toDisable","styles","transform-origin","overflow","ns","str_down","str_start","str_click","$reset","isFunction","touches","stopPropagation","_startMove","contextmenu","step","$zoomIn","$zoomOut","startTransform","_getDistance","touch1","touch2","_getMiddle","triggerHandler","moveEvent","endEvent","startDistance","startMiddle","startPageX","startPageY","touch","original","origPageX","origPageY","panOptions","setStart","move","coords","middle","diff","ret","charAt","registeredInModuleLoader","OldCookies","api","noConflict","attributes","decode","s","decodeURIComponent","init","converter","set","expires","toUTCString","stringify","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","cookie","get","json","jar","cookies","parts","read","getJSON","withConverter","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","file","isCursorNode","isClickType","isOkay","_pointerReset","focused","blur","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","startEvent","getTouch","identifier","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","aa","ba","Error","unshift","p","Function","toString","ca","hasOwnProperty","cssText","createTextNode","u","getElementsByTagName","lastChild","v","w","ea","rel","href","media","da","A","onreadystatechange","tagName","B","C","D","E","F","G","fa","H","I","J","ga","substr","ha","j","classes","ia","K","L","ja","ka","M","aria-hidden","N","O","P","Q","T","S","la","R","U","serif","q","V","ma","W","na","oa","qa","l","k","n","r","X","FontFace","xa","vendor","start","pa","ra","sa","ta","ua","va","pop","wa","ya","Da","Ca","Ba","Aa","za","Ea","Ga","Ha","Promise","fonts","then","race","fontfamily","fontStyle","fontWeight","projectId","version","urls","families","testStrings","latin","latin-ext","cyrillic","greek","khmer","Hanuman","thin","extralight","extra-light","ultralight","ultra-light","light","regular","book","medium","semi-bold","semibold","demi-bold","demibold","bold","extra-bold","extrabold","ultra-bold","ultrabold","black","heavy","italic","normal","Fa","Arimo","Cousine","Tinos","text","Typekit","config","async","__webfontfontdeckmodule__","weight","Y","custom","fontdeck","monotype","typekit","google","Z","WebFont","WebFontConfig","initializeModules","modules","Module","mod","active","inactive"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null),\n debounce = require('debounce');\n\nfunction FloorPlan(el) {\n var t = this,\n $window = $(window);\n\n t.$el = $(el);\n t.$svg = t.$el.find('.floor-plan__background svg');\n t.$modal = t.$el.find('.floor-plan__content--modal');\n t.$modalTitle = t.$modal.children('.floor-plan__content-title');\n t.$modalDescription = t.$modal.children('.floor-plan__content-description');\n t.$viewLink = t.$modal.children('.floor-plan__content-view');\n t.$modalContentLinks = t.$modal.children('.floor-plan__content-links');\n\n t.$svg.find('[fill=\"#8C8C8C\"]').hover(function() {\n var curEl = this;\n t.dtime = setTimeout( function(){\n t.hover(curEl);\n } , 300);\n }, function() {\n clearTimeout(t.dtime);\n }).click( function(e){\n $('.js-floor-active').removeClass('js-floor-active');\n t.$modal.hide();\n });\n\n t.$svg.find('[fill=\"#F4C316\"]').hover(function() {\n var curEl = this;\n t.hover(curEl);\n }, function() {\n clearTimeout(t.dtime);\n }).click( function(e){\n $('.js-floor-active').removeClass('js-floor-active');\n t.$modal.hide();\n });\n\n $window.on('resize', debounce(function() {\n if ( $window.width() <= 800 ) {\n t.$modal.hide();\n }\n }));\n}\n\nFloorPlan.prototype.hover = function (target) {\n var t = this,\n $target = $(target),\n floor,\n data = $target.data('group');\n\n $('.js-floor-active').removeClass('js-floor-active');\n\n for (var i = data.start_floor; i <= data.end_floor; i++) {\n for (var j = 0; j < data.partition.length; j++) {\n $('.floor--' + i + '-' + data.partition[j]).addClass('js-floor-active');\n }\n\n if (data.partition.length === 8) {\n $('.floor--' + i).addClass('js-floor-active');\n }\n\n if (data.status === 'amenity' && !data.plan_image) {\n $('.floor--' + i).addClass('floor--amenity-disabled');\n }\n }\n\n t.$modalTitle.text(data.title);\n t.$viewLink.attr('href', data.pdf_link);\n\n if (data.status === \"available\") {\n t.$modalDescription.html(data.description);\n } else {\n t.$modalDescription.html(data.amenity_description);\n }\n\n t.$modalContentLinks.empty();\n if (data.page_links && data.page_links.length) {\n data.page_links.forEach(({ link: { url, title, target } }) => {\n const a = document.createElement('a');\n const text = title || url\n const linkText = document.createTextNode(text);\n a.appendChild(linkText);\n a.title = text;\n a.href = url;\n a.target = target;\n t.$modalContentLinks.append(a);\n })\n }\n\n t.$modal.fadeIn(300);\n};\n\nmodule.exports = FloorPlan;\n","var Flickity = require('flickity-imagesloaded');\n\nfunction Carousel(el) {\n var flkty = new Flickity( el, {\n imagesLoaded: true,\n autoPlay: 3600\n });\n}\n\nmodule.exports = Carousel;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\nfunction Filters(el) {\n var t = this;\n t.$el = $(el);\n t.$filters = t.$el.find('[data-filter]');\n t.$active = t.$filters.filter('.filters__item--active');\n t.activeFilter = null;\n t.$items = $(t.$el.data('item-selector'));\n t.$bottomImages = $('[data-filter-show]');\n t.$bottomImagesWrap = $('.js-bottom-images');\n\n t.selectFilter(t.$filters.eq(0));\n\n t.$filters.on('click', function(e) {\n var $target = $(e.target);\n\n t.selectFilter($target);\n });\n}\n\nFilters.prototype.selectFilter = function ($target) {\n var t = this,\n selectedFilter = $target.data('filter');\n\n if (selectedFilter == t.activeFilter) {\n return;\n }\n\n t.$active.removeClass('filters__item--active');\n $target.addClass('filters__item--active');\n\n if (t.$bottomImages.length) {\n t.$bottomImages.slideUp();\n }\n\n if (selectedFilter) {\n t.$items.removeClass('js-filter-visible');\n t.$items.filter('[data-filter-type=\"' + selectedFilter + '\"]').addClass('js-filter-visible');\n\n if (t.$bottomImages.length) {\n var currentBottomImage = t.$bottomImages.filter('[data-filter-show=\"' + selectedFilter + '\"]');\n if ( currentBottomImage.hasClass('has-content')) {\n currentBottomImage.slideDown();\n t.$bottomImagesWrap.slideDown();\n } else {\n t.$bottomImagesWrap.slideUp();\n }\n }\n }\n\n t.activeFilter = selectedFilter;\n t.$active = $target;\n};\n\nmodule.exports = Filters;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null),\n Flickity = require('flickity-imagesloaded');\n\nfunction Gallery(el) {\n var t = this;\n t.$el = $(el);\n t.$el.on('click', '[data-modal]', t.click.bind(t));\n t.$modal = t.$el.find('.modal');\n t.$carousel = t.$modal.find('.modal-images');\n t.$modals = [];\n t.flickitys = [];\n t.$modal.on('click', '.modal-close', t.close.bind(t));\n\n if (t.$modal.length > 1) {\n t.$modal.each(function () {\n var id = $(this).data('index');\n var $carousel = $(this).find('.modal-images');\n t.$modals[id] = $(this);\n t.flickitys[id] = new Flickity( $carousel[0], {\n imagesLoaded: true,\n pageDots: false\n } );\n });\n } else {\n t.flickity = new Flickity( t.$carousel[0], {\n imagesLoaded: true,\n draggable: false,\n prevNextButtons: false,\n pageDots: false\n } );\n }\n}\n\nGallery.prototype.click = function (e) {\n var t = this,\n targetIndex = $(e.currentTarget).data('modal');\n\n if (t.flickitys.length) {\n t.$modals[targetIndex].addClass('js-active');\n } else {\n t.flickity.select(targetIndex, false, true);\n t.$modal.addClass('js-active');\n }\n};\n\nGallery.prototype.close = function () {\n this.$modal.removeClass('js-active');\n};\n\nmodule.exports = Gallery;\n","var debounce = require('debounce');\nvar $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\n/**\n * Initializes the site header.\n * @constructor\n * @param {Object} el - The site header element.\n */\nfunction HeaderVideo(el) {\n var t = this;\n\n t.el = el;\n t.container = el.querySelector('.container');\n t.sections = document.querySelectorAll('.video-landing__block, .video-landing__content');\n t.button = document.querySelector('.header-video .video-landing__header-button');\n\n t.scrollInit();\n t.buttonTrigger();\n window.addEventListener('scroll', debounce(t.scrollInit.bind(t)));\n $(window).on('dock72.broker.success dock72.broker.fail', t.scrollInit.bind(t));\n\n};\n\nHeaderVideo.prototype.buttonTrigger = function() {\n var t = this,\n $body = $('body');\n t.button.addEventListener(\"click\", function() {\n var modalVd = document.querySelector('.video-landing__form');\n modalVd.classList.add( 'js-video-active' );\n $body.addClass('js-video-modal-active');\n });\n\n};\n\nHeaderVideo.prototype.scrollInit = function() {\n var t = this,\n i,\n element,\n parentId,\n offset,\n isVisible;\n\n for ( i = 0; i < t.sections.length; i++ ) {\n element = t.sections[i];\n offset = element.getBoundingClientRect();\n parentId = $(element).closest('.video-landing').attr('id');\n isVisible = window.getComputedStyle(element).getPropertyValue('display') !== 'none';\n if (isVisible && offset.bottom >= 0) {\n t.button.setAttribute(\"data-video-id\", parentId);\n if( element.classList.contains('video-landing__block') ) {\n t.activeHeaderBlock();\n } else {\n t.activeHeaderContent();\n }\n break;\n }\n }\n};\n\nHeaderVideo.prototype.activeHeaderBlock = function() {\n var t = this;\n t.el.classList.remove( 'js-header-video-content' );\n};\n\nHeaderVideo.prototype.activeHeaderContent = function() {\n var t = this;\n t.el.classList.add( 'js-header-video-content' );\n};\n\nmodule.exports = HeaderVideo;\n","var debounce = require('debounce'),\n $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\nvar HEADER_BREAK = 1100;\n\n/**\n * Initializes the site header.\n * @constructor\n * @param {Object} el - The site header element.\n */\nfunction Header(el) {\n var t = this;\n\n t.el = el;\n t.$el = $(el);\n t.anchor = document.querySelector(t.el.getAttribute('data-scroll-anchor'));\n t.logo = t.el.querySelector('.logo');\n\n // use jQuery for `css` convenience\n t.$compact = t.$el.children('.header__container--compact');\n t.$full = t.$el.children('.header__container--full');\n\n if (! t.anchor) {\n return;\n }\n\n t.offset = 0;\n t.height = 0;\n t.logoOffset = 0;\n t.scrolling = false;\n t.scrolled = false;\n t.prevPos = 0;\n t.stickyLogoOffset = 0;\n\n t.calculateOffset();\n\n window.addEventListener('scroll', t.scrollNavbar.bind(t));\n window.addEventListener('resize', debounce(t.calculateOffset.bind(t)));\n}\n\nHeader.prototype.scrollNavbar = function () {\n var t = this,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop,\n compactDiff,\n fullDiff,\n direction = scrollTop > t.prevPos ? 'up' : 'down',\n currentAnchorPos = t.anchor.getBoundingClientRect().top;\n\n t.prevPos = scrollTop;\n\n if (window.innerWidth < HEADER_BREAK || scrollTop < t.offset) {\n t.toggleScrolled(false);\n t.toggleScrolling(false);\n t.resetTransform();\n return;\n }\n\n compactDiff = scrollTop - t.offset;\n fullDiff = compactDiff - t.logo.offsetHeight - t.logoOffset + t.height;\n\n // scrolling up, top of logo hits the threshold\n // don't move according to scroll position any more\n if (fullDiff > 0 && (direction == 'up' || currentAnchorPos < t.logoOffset - t.height)) {\n t.toggleScrolled(true);\n t.toggleScrolling(false);\n return;\n } else {\n t.toggleScrolling(true);\n t.toggleCompact(false);\n }\n\n // scrolling down, bottom of hero logo meets bottom of headre\n if (currentAnchorPos >= t.height - t.logo.offsetHeight) {\n if (direction == 'down') {\n t.$full.css('transform', 'translate3d(0, -100%, 0)');\n }\n t.toggleScrolled(false);\n }\n\n t.$compact.css('transform', 'translate3d(0, -' + compactDiff + 'px, 0)');\n};\n\nHeader.prototype.resetTransform = function () {\n var t = this;\n t.$compact.css('transform', '');\n t.$full.css('transform', '');\n};\n\nHeader.prototype.toggleClass = function (cls, value) {\n var t = this;\n\n if (value) {\n t.el.classList.add(cls);\n } else {\n t.el.classList.remove(cls);\n }\n\n};\n\nHeader.prototype.toggleScrolled = function(value) {\n var t = this;\n\n if (t.scrolled === value) {\n if (value && ! t.toggleScrolled.timeout) {\n t.toggleScrolled.timeout = setTimeout(function() {\n t.toggleCompact(true);\n t.toggleScrolled.timeout = null;\n }, 300);\n }\n return;\n }\n\n if (typeof t.toggleScrolled.timeout !== 'undefined' && t.toggleScrolled.timeout) {\n clearTimeout(t.toggleScrolled.timeout);\n t.toggleScrolled.timeout = null;\n }\n\n t.scrolled = value;\n t.toggleClass('js-nav-scrolled', t.scrolled);\n\n if (value) {\n t.toggleScrolled.timeout = setTimeout(function() {\n t.toggleCompact(true);\n t.resetTransform();\n t.toggleScrolled.timeout = null;\n }, 300);\n } else {\n t.toggleCompact(false);\n }\n}\n\nHeader.prototype.toggleCompact = function(value) {\n var t = this;\n\n t.toggleClass('js-nav-compact', value);\n\n};\n\nHeader.prototype.toggleScrolling = function(value) {\n var t = this;\n\n if (t.scrolling === value) {\n return;\n }\n\n t.scrolling = value;\n t.toggleClass('js-nav-scrolling', t.scrolling);\n}\n\nHeader.prototype.calculateOffset = function () {\n var t = this;\n\n t.height = t.el.offsetHeight;\n t.logoOffset = t.logo.getBoundingClientRect().top;\n t.offset = t.anchor.getBoundingClientRect().top + document.body.scrollTop - t.logoOffset;\n};\n\nmodule.exports = Header;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null),\n debounce = require('debounce');\n\nvar BREAKPOINT = 800;\n\n/**\n * Initializes the hero module.\n * @constructor\n * @param {Object} el - The hero element.\n */\nfunction Hero(el) {\n var $el = $(el),\n $inner = $el.children('.hero__container'),\n $bg = $el.find('.hero__bg'),\n $image = $el.find('.hero__image'),\n firstX = false,\n firstY = false,\n currPosX = false,\n currPosY = false,\n posX = false,\n posY = false,\n $window = $(window);\n\n $window.on('resize', debounce(function() {\n if ($window.width() < BREAKPOINT) {\n setStyleVendor($image[0], 'Transform', '');\n }\n }));\n\n $inner.on('mousemove', function(e) {\n if ($window.width() < BREAKPOINT) {\n return;\n }\n var frameOffset = $bg.offset(),\n photoWidth = $image.width(),\n photoHeight = $image.height(),\n pointerX = e.pageX - frameOffset.left,\n pointerY = e.pageY - frameOffset.top,\n newPosY,\n newPosX;\n\n // these variables store the current image position to prevent\n // jumps when mouse cursor goes out of the image and back in\n if ( currPosX === false || currPosY === false ) {\n currPosX = -photoWidth / 2;\n currPosY = - photoHeight / 2;\n }\n\n // if the cursor is moving outside of the image, reset the entrance\n // point and store current image position if it's set\n if ( pointerX < 0 || pointerY < 0 || pointerX > $bg.width() || pointerY > $bg.height() ) {\n firstX = false;\n firstY = false;\n\n if (posX !== false && posY !== false) {\n currPosX = posX;\n currPosY = posY;\n }\n return;\n }\n\n // image position is calculated in relative with the distance\n // the mouse cursor has moved, so we need to store the\n // cursor entrance coordinates\n if ( firstX === false || firstY === false ) {\n firstX = pointerX;\n firstY = pointerY;\n return;\n }\n\n // calculate new position in relation to the distance the\n // cursor has moved since it enters the image\n newPosX = currPosX - (pointerX - firstX) * 0.15;\n newPosY = currPosY - (pointerY - firstY) * 0.15;\n\n // if the new coordinates are out of bounds, don't set them\n if ( newPosY < -photoHeight * 5 / 12 && newPosY > -photoHeight * 7 / 12 ) {\n posY = newPosY;\n }\n if ( newPosX < -photoWidth * 5 / 12 && newPosX > -photoWidth * 7 / 12 ) {\n posX = newPosX;\n }\n\n // set browser vendor specific prefixes for transform\n setStyleVendor($image[0], 'Transform', 'translate3d(' + posX + 'px, ' + posY + 'px, 0)');\n });\n\n // if the cursor leaves the hero, reset the entrance points and\n // store the current position\n $inner.on('mouseleave', function(e) {\n if ($window.width() < BREAKPOINT) {\n return;\n }\n currPosX = posX;\n currPosY = posY;\n firstX = false;\n firstY = false;\n });\n}\n\nfunction setStyleVendor(element, property, value) {\n element.style[\"webkit\" + property] = value;\n element.style[\"moz\" + property] = value;\n element.style[\"ms\" + property] = value;\n element.style[\"o\" + property] = value;\n}\n\nmodule.exports = Hero;","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\nfunction LocalNav(el) {\n var t = this;\n\n t.el = el;\n t.container = el.querySelector('.local-nav__container');\n t.offsetEl = document.querySelector(t.el.getAttribute('data-header-offset'));\n t.topOffset = 0;\n\n window.addEventListener('scroll', t.watchScroll.bind(t));\n window.addEventListener('resize', t.watchScroll.bind(t));\n t.el.addEventListener('click', t.smoothScrollHandler());\n\n}\n\nLocalNav.prototype.watchScroll = function () {\n var t = this,\n currPos = t.el.getBoundingClientRect().top;\n\n if (currPos > t.offsetEl.offsetHeight) {\n if (t.el.classList.contains('js-sticky')) {\n t.el.style.height = '';\n t.el.classList.remove('js-sticky');\n }\n return;\n }\n\n if (!t.el.classList.contains('js-sticky')) {\n t.el.style.height = t.container.offsetHeight + 'px';\n t.el.classList.add('js-sticky');\n }\n};\n\nLocalNav.prototype.smoothScrollHandler = function() {\n var t = this;\n \n return function(e) {\n var anchor,\n windowScrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n \n if (e.target && e.target.classList.contains('js-local-nav-item')) {\n if (location.pathname.replace(/^\\//,'') == e.target.pathname.replace(/^\\//,'') && location.hostname == e.target.hostname) {\n e.preventDefault();\n anchor = document.querySelector(e.target.hash);\n\n if (anchor) {\n // Search for matching section and show if is hidden\n if (!$(anchor).is(':visible')) {\n $(anchor).show();\n }\n\n $('html,body').animate({\n scrollTop: anchor.getBoundingClientRect().top + windowScrollTop - t.offsetEl.offsetHeight - t.el.offsetHeight\n }, 1000);\n }\n\n }\n }\n };\n};\n\nmodule.exports = LocalNav;\n","function LocationTabs(el) {\n var filters = el.querySelectorAll(\"[data-filter]\"),\n images = el.querySelectorAll(\".filters-background__block\");\n if ( filters && images) {\n filters = Array.prototype.slice.call( filters );\n filters.forEach(function( filter ) {\n filter.addEventListener(\"click\", function() {\n $(\".location-tabs__list\").scrollTop(0);\n var type = this.getAttribute(\"data-filter\"),\n current = el.querySelector(\"#filters-bg-\" + type );\n if ( type ) {\n images = Array.prototype.slice.call( images );\n images.forEach(function( image ) {\n if ( image.classList.contains(\"js-item-active\") ) {\n image.classList.add(\"js-item-old\");\n image.classList.remove(\"js-item-active\");\n }\n });\n setTimeout(function() {\n current.classList.add(\"js-item-active\");\n }, 100 );\n\n setTimeout(function() {\n images.forEach(function( image ) {\n if ( image.classList.contains(\"js-item-old\") ) {\n image.classList.remove(\"js-item-old\");\n }\n });\n }, 2000 );\n }\n });\n });\n }\n}\n\nmodule.exports = LocationTabs;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\n/**\n * Initializes the Section module.\n * @constructor\n * @param {Object} el - The section element.\n */\n\nfunction Section(el) {\n var $el = $(el),\n $button_popup = $el.find('.page-section__button-popup'),\n $button_popup_wrapper = $el.find('.page-section__button-popup-wrapper'),\n $url = $el.find('.page-section__button-popup').attr('data-popup-url'),\n $width = $el.find('.page-section__button-popup').attr('data-popup-width'),\n $height = $el.find('.page-section__button-popup').attr('data-popup-height');\n\n $button_popup.add($button_popup_wrapper).on('click',function(){\n window.open($url, \"Name\", \"menubar=yes,resizable=0,width=\"+$width+\",height=\"+$height);\n });\n}\n\nmodule.exports = Section;\n\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\nrequire( 'jquery.panzoom' );\n\nfunction PanZoom(el) {\n var $el = $(el),\n $movable = $el.children('[data-pan-zoom]'),\n args = {\n minScale: 1,\n maxScale: 2,\n transition: true,\n easing: \"ease-out\",\n duration: 100,\n contain: 'automatic'\n }\n\n $movable.panzoom( args );\n\n if ( $el.data( 'zoom' ) == '1' ) {\n $movable.panzoom('zoom', 2);\n }\n}\n\nmodule.exports = PanZoom;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null),\n debounce = require('debounce');\n\nfunction Parallax(el) {\n this.$el = $(el);\n this.$instances = $(el).find('[data-parallax-group]');\n this.$window = $(window);\n\n this.$window.on('scroll', this.calculateTransform.bind(this));\n}\n\nParallax.prototype.calculateTransform = function () {\n var t = this,\n scrollTop = t.$window.scrollTop() - 98,\n viewportWidth = t.$window.width(),\n viewportHeight = t.$window.height();\n if (viewportWidth >= 800) {\n t.$instances.each(function(index, instance) {\n var t = this,\n $instance = $(instance),\n top = $instance.offset().top,\n offset = 120 * (top + $instance.height() / 2.5 - scrollTop - viewportHeight / 2) / viewportHeight;\n $instance.find('[data-parallax-layer]').css('transform', 'translate3d(0,' + offset + 'px,0)');\n });\n }\n this.$window.on('resize', debounce(function() {\n $('[data-parallax-layer]').css('transform', '');\n }, 200));\n\n};\n\nmodule.exports = Parallax;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null),\n wp = (typeof window !== \"undefined\" ? window['wpVars'] : typeof global !== \"undefined\" ? global['wpVars'] : null);\n\nfunction Press(el) {\n var $el = $(el),\n $button = $el.find('.press-list__button'),\n $list = $el.find('.press-list__items'),\n pageNumber = 1;\n\n $button.on('click', function(e) {\n e.preventDefault();\n loadMorePosts();\n })\n\n function loadMorePosts() {\n pageNumber++;\n\n // disable button\n $button.prop(\"disabled\", true);\n\n $.ajax({\n type: \"POST\",\n dataType: \"json\",\n url: wp.ajaxUrl,\n data: {\n pageNumber: pageNumber,\n action: 'more_post_ajax'\n },\n success: function(data){\n //re-enable button\n $button.prop(\"disabled\",false);\n\n // do nothing if data is empty\n if (! data.html) {\n alert( 'An error occurred while getting Press items. Please try again or contact site administrator.' );\n return;\n }\n\n // append data.html to the list\n $list.append(data.html).fadeIn(300);\n\n // if there's no next page, hide button\n if (! data.hasNextPage) {\n $button.hide();\n }\n },\n error : function() {\n alert( 'An error occurred while getting Press items. Please try again or contact site administrator.' );\n }\n\n });\n return false;\n }\n\n}\n\nmodule.exports = Press;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\nfunction ScrollBySection(el) {\n this.initScrollBySection();\n}\n\nScrollBySection.prototype.initScrollBySection = function (e) {\n var scrolling = false,\n mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? \"DOMMouseScroll\" : \"mousewheel\", //FF doesn't recognize mousewheel as of FF3.x\n $sections = $('[data-scroll]'),\n sectionCount = $sections.length,\n timeout = null,\n $window = $(window);\n\n function scrollFull(e){\n if (scrolling) {\n return;\n }\n\n scrolling = true;\n $('body').css('overflow', 'hidden');\n\n var evt = window.event || e //equalize event object\n evt = evt.originalEvent ? evt.originalEvent : evt; //convert to originalEvent if possible\n var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta //check for detail first, because it is used by Opera and FF\n var scrollTop = $window.scrollTop();\n var offset = $window.width() >= 800 ? 12 : 8;\n\n var currentIndex,\n $currentSection;\n\n for (currentIndex = 0; currentIndex < $sections.length; currentIndex++) {\n if ($sections.eq(currentIndex).offset().top - offset > scrollTop) {\n break;\n }\n }\n\n if(delta > 0) {\n if(currentIndex == 0) {\n currentIndex = 0;\n }\n if(currentIndex != 0) {\n $currentSection = $sections.eq(currentIndex);\n if ($currentSection.offset().top + $currentSection.height() <= scrollTop + $window.height()) {\n currentIndex --;\n } else {\n currentIndex -= 2;\n }\n }\n }\n else{\n if(currentIndex >= sectionCount) {\n currentIndex = sectionCount;\n }\n }\n\n if (!timeout) {\n timeout = setTimeout(function() {\n $('body, html').animate({\n scrollTop: $sections.eq(currentIndex).offset().top - offset\n }, 300, function() {\n timeout = null;\n });\n }, 100);\n }\n\n setTimeout(function() {\n scrolling = false;\n }, 1500);\n }\n $(document).on(mousewheelevt, scrollFull);\n};\n\nmodule.exports = ScrollBySection;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\nvar $SECTIONS = $('[data-module-init=\"scroll-section\"]');\n\nfunction ScrollSection(el) {\n this.$el = $(el);\n this.sectionIndex = $SECTIONS.index(this.$el);\n this.$body = $('body, html');\n this.$window = $(window);\n this.$button = this.$el.find('[data-scroll-section-target]');\n this.$button.on('click', this.initScroll.bind(this));\n this.$parent = this.$el.parent();\n}\n\nScrollSection.prototype.initScroll = function() {\n var t = this,\n nextIndex = 0,\n topPadding = parseFloat(t.$parent.css('paddingTop'));\n\n if ( t.sectionIndex < $SECTIONS.length - 1) {\n nextIndex = t.sectionIndex + 1;\n }\n\n t.$body.animate({\n scrollTop: $SECTIONS.eq(nextIndex).offset().top - topPadding\n }, 300);\n\n};\n\nmodule.exports = ScrollSection;\n","/**\n * Toggle class on a target element when clicked\n * @param el\n */\n\nfunction ToggleClass(el) {\n var targetSelector = el.getAttribute('data-toggle-class-target');\n\n this.target = document.querySelector(targetSelector);\n\n if (! this.target) {\n this.target = document.documentElement;\n }\n this.className = el.getAttribute('data-toggle-class');\n el.addEventListener('click', this.click.bind(this));\n};\n\nToggleClass.prototype.click = function () {\n this.target.classList.toggle(this.className);\n};\n\nmodule.exports = ToggleClass;","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\nvar Modernizr = (typeof window !== \"undefined\" ? window['Modernizr'] : typeof global !== \"undefined\" ? global['Modernizr'] : null);\nvar debounce = require( 'debounce' );\nvar Cookies = require( 'js-cookie' );\n\nvar THRESHOLD = 40,\n $MODAL,\n $MODAL_VIDEO,\n $MODAL_CLOSE;\n\ninitModal();\n\nfunction initModal() {\n $MODAL = $('.video-landing__modal');\n $MODAL_VIDEO = $MODAL.find('video');\n $MODAL_CLOSE = $MODAL.children('.video-landing__close');\n\n if ($MODAL_CLOSE) {\n $MODAL_CLOSE.on('click', function() {\n $MODAL_VIDEO[0].pause();\n $MODAL.removeClass('js-active');\n });\n }\n}\n\nfunction VideoLanding(el) {\n this.$el = $(el);\n this.$media = this.$el.find('.video-landing__video-unlocked:not([autoplay=\"autoplay\"])');\n this.$window = $(window);\n this.$body = $('body');\n this.$form = this.$body.find('.video-landing__form');\n this.$videoButton = this.$el.find('.video-landing__button-cta');\n this.$videoTrigger = this.$el.find('.video-landing__trigger');\n\n this.initForm();\n this.submitForm();\n this.initVideos();\n this.initCutout();\n this.videoFirsttime();\n // Need to recalculate when webfont is active for Safari\n this.$window.on('webfont-active', this.initCutout.bind(this));\n}\n\nVideoLanding.prototype.videoFirsttime = function () {\n $('.video-landing').addClass('js-loaded');\n};\n\nVideoLanding.prototype.initCutout = function () {\n var t = this,\n $headingMask = t.$el.find('.video-landing__headline--measure'),\n $viewBoxBig = t.$el.find('.video-landing__viewbox'),\n $viewBoxSmall = t.$el.find('.video-landing__viewbox-small'),\n $viewBoxAll = t.$el.find('.video-landing__viewbox-all');\n\n function syncWidth($viewBoxes, $measure, offset, setWidth) {\n $viewBoxes.each(function(index, viewBox) {\n var split = viewBox.getAttribute('viewBox').split(' ');\n split[2] = $measure.outerWidth() + offset;\n viewBox.setAttribute('viewBox', split.join(' '));\n if (setWidth) {\n viewBox.setAttribute('width', split[2]);\n }\n });\n }\n\n syncWidth($viewBoxBig, $headingMask, 55, true);\n syncWidth($viewBoxSmall, $headingMask, 55, true);\n syncWidth($viewBoxAll, $viewBoxSmall, 105, false);\n};\n\nVideoLanding.prototype.initForm = function () {\n var t = this;\n\n // event delegation\n t.$el.on('click', '[data-modal-toggle]', function() {\n t.$el.addClass('js-video-active');\n t.$body.addClass('js-video-modal-active');\n });\n t.$body.on('click', '.form-trigger', function() {\n t.$el.removeClass('js-video-active');\n t.$body.removeClass('js-video-modal-active');\n });\n};\n\nVideoLanding.prototype.submitForm = function () {\n var t = this;\n\n t.$form.find('form').on('submit', function(e){\n e.preventDefault();\n\n var submitData = $(this).serializeArray(),\n data = {};\n\n for ( var i = 0; i < submitData.length; i++ ) {\n data[submitData[i].name] = submitData[i].value;\n }\n\n $.ajax({\n method: \"POST\",\n url: \"/wp-json/dock72/v1/broker/rsvp\",\n data: data\n }).done(function() {\n t.$form.addClass( 'js-form-successful' );\n t.$window.trigger('dock72.broker.success');\n }).fail(function() {\n t.$el.removeClass('js-video-active');\n t.$body.removeClass('js-video-modal-active');\n setTimeout(function() {\n t.$el.addClass('js-form-failed');\n t.$body.addClass('js-form-failed-active');\n t.$window.trigger('dock72.broker.fail');\n }, 300);\n });\n });\n};\n\nVideoLanding.prototype.initVideos = function () {\n var t = this;\n t.checkMedia();\n t.$window.on('scroll', t.checkMedia.bind(t));\n t.$videoTrigger.hover(\n function () {\n t.$el.addClass('js-button-hovered');\n },\n function() {\n t.$el.removeClass('js-button-hovered');\n }\n );\n t.$videoTrigger.on('click', t.playMedia.bind(t));\n\n Modernizr.on('videoautoplay', function(result) {\n if (result) {\n t.$videoTrigger.on('click', function() {\n $MODAL.addClass( 'js-active' );\n });\n }\n });\n};\n\nVideoLanding.prototype.playMedia = function () {\n var t = this;\n var src = ( t.$media[0].src ) ? t.$media[0].src : t.$media.find('source')[0].src;\n $MODAL_VIDEO[0].src = src;\n $MODAL_VIDEO[0].play();\n};\n\nVideoLanding.prototype.checkMedia = function () {\n var t = this,\n scrollTop = t.$window.scrollTop() + THRESHOLD,\n scrollBottom = scrollTop + t.$window.height() - 2 * THRESHOLD;\n\n t.$media.each(function() {\n var yTopMedia = $(this).offset().top,\n yBottomMedia = $(this).height() + yTopMedia;\n\n if (scrollTop < yBottomMedia && scrollBottom > yTopMedia) { //view explaination in `In brief` section above\n this.play();\n } else {\n this.pause();\n }\n });\n};\n\nmodule.exports = VideoLanding;\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'imagesloaded/imagesloaded'\n ], function( Flickity, imagesLoaded ) {\n return factory( window, Flickity, imagesLoaded );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('flickity'),\n require('imagesloaded')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.imagesLoaded\n );\n }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) {\n return;\n }\n var _this = this;\n function onImagesLoadedProgress( instance, image ) {\n var cell = _this.getParentCell( image.img );\n _this.cellSizeChange( cell && cell.element );\n if ( !_this.options.freeScroll ) {\n _this.positionSliderAtSelected();\n }\n }\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n","/**\n * @license jquery.panzoom.js v3.2.2\n * Updated: Wed May 08 2019\n * Add pan and zoom functionality to any element\n * Copyright (c) timmy willison\n * Released under the MIT license\n * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt\n */\n\n(function(global, factory) {\n\t// AMD\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery' ], function(jQuery) {\n\t\t\treturn factory(global, jQuery);\n\t\t});\n\t// CommonJS/Browserify\n\t} else if (typeof exports === 'object') {\n\t\tfactory(global, (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null));\n\t// Global\n\t} else {\n\t\tfactory(global, global.jQuery);\n\t}\n}(typeof window !== 'undefined' ? window : this, function(window, $) {\n\t'use strict';\n\n\tvar document = window.document;\n\tvar datakey = '__pz__';\n\tvar slice = Array.prototype.slice;\n\tvar rIE11 = /trident\\/7./i;\n\tvar supportsInputEvent = (function() {\n\t\t// IE11 returns a false positive\n\t\tif (rIE11.test(navigator.userAgent)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar input = document.createElement('input');\n\t\tinput.setAttribute('oninput', 'return');\n\t\treturn typeof input.oninput === 'function';\n\t})();\n\n\t// Regex\n\tvar rupper = /([A-Z])/g;\n\tvar rsvg = /^http:[\\w\\.\\/]+svg$/;\n\n\tvar floating = '(\\\\-?\\\\d[\\\\d\\\\.e-]*)';\n\tvar commaSpace = '\\\\,?\\\\s*';\n\tvar rmatrix = new RegExp(\n\t\t'^matrix\\\\(' +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + '\\\\)$'\n\t);\n\n\t/**\n\t * Utility for determining transform matrix equality\n\t * Checks backwards to test translation first\n\t * @param {Array} first\n\t * @param {Array} second\n\t */\n\tfunction matrixEquals(first, second) {\n\t\tvar i = first.length;\n\t\twhile(--i) {\n\t\t\tif (Math.round(+first[i]) !== Math.round(+second[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Creates the options object for reset functions\n\t * @param {Boolean|Object} opts See reset methods\n\t * @returns {Object} Returns the newly-created options object\n\t */\n\tfunction createResetOptions(opts) {\n\t\tvar options = { range: true, animate: true };\n\t\tif (typeof opts === 'boolean') {\n\t\t\toptions.animate = opts;\n\t\t} else {\n\t\t\t$.extend(options, opts);\n\t\t}\n\t\treturn options;\n\t}\n\n\t/**\n\t * Represent a transformation matrix with a 3x3 matrix for calculations\n\t * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)\n\t * @param {Array|Number} a An array of six values representing a 2d transformation matrix\n\t */\n\tfunction Matrix(a, b, c, d, e, f, g, h, i) {\n\t\tif ($.type(a) === 'array') {\n\t\t\tthis.elements = [\n\t\t\t\t+a[0], +a[2], +a[4],\n\t\t\t\t+a[1], +a[3], +a[5],\n\t\t\t\t 0, 0, 1\n\t\t\t];\n\t\t} else {\n\t\t\tthis.elements = [\n\t\t\t\ta, b, c,\n\t\t\t\td, e, f,\n\t\t\t\tg || 0, h || 0, i || 1\n\t\t\t];\n\t\t}\n\t}\n\n\tMatrix.prototype = {\n\t\t/**\n\t\t * Multiply a 3x3 matrix by a similar matrix or a vector\n\t\t * @param {Matrix|Vector} matrix\n\t\t * @return {Matrix|Vector} Returns a vector if multiplying by a vector\n\t\t */\n\t\tx: function(matrix) {\n\t\t\tvar isVector = matrix instanceof Vector;\n\n\t\t\tvar a = this.elements,\n\t\t\t\tb = matrix.elements;\n\n\t\t\tif (isVector && b.length === 3) {\n\t\t\t\t// b is actually a vector\n\t\t\t\treturn new Vector(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[1] + a[2] * b[2],\n\t\t\t\t\ta[3] * b[0] + a[4] * b[1] + a[5] * b[2],\n\t\t\t\t\ta[6] * b[0] + a[7] * b[1] + a[8] * b[2]\n\t\t\t\t);\n\t\t\t} else if (b.length === a.length) {\n\t\t\t\t// b is a 3x3 matrix\n\t\t\t\treturn new Matrix(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[3] + a[2] * b[6],\n\t\t\t\t\ta[0] * b[1] + a[1] * b[4] + a[2] * b[7],\n\t\t\t\t\ta[0] * b[2] + a[1] * b[5] + a[2] * b[8],\n\n\t\t\t\t\ta[3] * b[0] + a[4] * b[3] + a[5] * b[6],\n\t\t\t\t\ta[3] * b[1] + a[4] * b[4] + a[5] * b[7],\n\t\t\t\t\ta[3] * b[2] + a[4] * b[5] + a[5] * b[8],\n\n\t\t\t\t\ta[6] * b[0] + a[7] * b[3] + a[8] * b[6],\n\t\t\t\t\ta[6] * b[1] + a[7] * b[4] + a[8] * b[7],\n\t\t\t\t\ta[6] * b[2] + a[7] * b[5] + a[8] * b[8]\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false; // fail\n\t\t},\n\t\t/**\n\t\t * Generates an inverse of the current matrix\n\t\t * @returns {Matrix}\n\t\t */\n\t\tinverse: function() {\n\t\t\tvar d = 1 / this.determinant(),\n\t\t\t\ta = this.elements;\n\t\t\treturn new Matrix(\n\t\t\t\td * ( a[8] * a[4] - a[7] * a[5]),\n\t\t\t\td * (-(a[8] * a[1] - a[7] * a[2])),\n\t\t\t\td * ( a[5] * a[1] - a[4] * a[2]),\n\n\t\t\t\td * (-(a[8] * a[3] - a[6] * a[5])),\n\t\t\t\td * ( a[8] * a[0] - a[6] * a[2]),\n\t\t\t\td * (-(a[5] * a[0] - a[3] * a[2])),\n\n\t\t\t\td * ( a[7] * a[3] - a[6] * a[4]),\n\t\t\t\td * (-(a[7] * a[0] - a[6] * a[1])),\n\t\t\t\td * ( a[4] * a[0] - a[3] * a[1])\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Calculates the determinant of the current matrix\n\t\t * @returns {Number}\n\t\t */\n\t\tdeterminant: function() {\n\t\t\tvar a = this.elements;\n\t\t\treturn a[0] * (a[8] * a[4] - a[7] * a[5]) - a[3] * (a[8] * a[1] - a[7] * a[2]) + a[6] * (a[5] * a[1] - a[4] * a[2]);\n\t\t}\n\t};\n\n\t/**\n\t * Create a vector containing three values\n\t */\n\tfunction Vector(x, y, z) {\n\t\tthis.elements = [ x, y, z ];\n\t}\n\n\t/**\n\t * Get the element at zero-indexed index i\n\t * @param {Number} i\n\t */\n\tVector.prototype.e = Matrix.prototype.e = function(i) {\n\t\treturn this.elements[ i ];\n\t};\n\n\t/**\n\t * Create a Panzoom object for a given element\n\t * @constructor\n\t * @param {Element} elem - Element to use pan and zoom\n\t * @param {Object} [options] - An object literal containing options to override default options\n\t * (See Panzoom.defaults for ones not listed below)\n\t * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself\n\t * e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzoom('zoomIn'); });)\n\t * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut\n\t * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control\n\t * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method\n\t * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events\n\t */\n\tfunction Panzoom(elem, options) {\n\n\t\t// Allow instantiation without `new` keyword\n\t\tif (!(this instanceof Panzoom)) {\n\t\t\treturn new Panzoom(elem, options);\n\t\t}\n\n\t\t// Sanity checks\n\t\tif (elem.nodeType !== 1) {\n\t\t\t$.error('Panzoom called on non-Element node');\n\t\t}\n\t\tif (!$.contains(document, elem)) {\n\t\t\t$.error('Panzoom element must be attached to the document');\n\t\t}\n\n\t\t// Don't remake\n\t\tvar d = $.data(elem, datakey);\n\t\tif (d) {\n\t\t\treturn d;\n\t\t}\n\n\t\t// Extend default with given object literal\n\t\t// Each instance gets its own options\n\t\tthis.options = options = $.extend({}, Panzoom.defaults, options);\n\t\tthis.elem = elem;\n\t\tvar $elem = this.$elem = $(elem);\n\t\tthis.$set = options.$set && options.$set.length ? options.$set : $elem;\n\t\tthis.$doc = $(elem.ownerDocument || document);\n\t\tthis.$parent = $elem.parent();\n\t\tthis.parent = this.$parent[0];\n\n\t\t// This is SVG if the namespace is SVG\n\t\t// However, while <svg> elements are SVG, we want to treat those like other elements\n\t\tthis.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n\n\t\tthis.panning = false;\n\n\t\t// Save the original transform value\n\t\t// Save the prefixed transform style key\n\t\t// Set the starting transform\n\t\tthis._buildTransform();\n\n\t\t// Build the appropriately-prefixed transform style property name\n\t\t// De-camelcase\n\t\tthis._transform = $.cssProps.transform ? $.cssProps.transform.replace(rupper, '-$1').toLowerCase() : 'transform';\n\n\t\t// Build the transition value\n\t\tthis._buildTransition();\n\n\t\t// Build containment dimensions\n\t\tthis.resetDimensions();\n\n\t\t// Add zoom and reset buttons to `this`\n\t\tvar $empty = $();\n\t\tvar self = this;\n\t\t$.each([ '$zoomIn', '$zoomOut', '$zoomRange', '$reset' ], function(i, name) {\n\t\t\tself[ name ] = options[ name ] || $empty;\n\t\t});\n\n\t\tthis.enable();\n\n\t\tthis.scale = this.getMatrix()[0];\n\t\tthis._checkPanWhenZoomed();\n\n\t\t// Save the instance\n\t\t$.data(elem, datakey, this);\n\t}\n\n\t// Attach regex for possible use (immutable)\n\tPanzoom.rmatrix = rmatrix;\n\n\tPanzoom.defaults = {\n\t\t// Should always be non-empty\n\t\t// Used to bind jQuery events without collisions\n\t\t// A guid is not added here as different instantiations/versions of panzoom\n\t\t// on the same element is not supported, so don't do it.\n\t\teventNamespace: '.panzoom',\n\n\t\t// Whether or not to transition the scale\n\t\ttransition: true,\n\n\t\t// Default cursor style for the element\n\t\tcursor: 'move',\n\n\t\t// There may be some use cases for zooming without panning or vice versa\n\t\tdisablePan: false,\n\t\tdisableZoom: false,\n\n\t\t// Pan only on the X or Y axes\n\t\tdisableXAxis: false,\n\t\tdisableYAxis: false,\n\n\t\t// Set whether you'd like to pan on left (1), middle (2), or right click (3)\n\t\twhich: 1,\n\n\t\t// The increment at which to zoom\n\t\t// Should be a number greater than 0\n\t\tincrement: 0.3,\n\n\t\t// When no scale is passed, this option tells\n\t\t// the `zoom` method to increment\n\t\t// the scale *linearly* based on the increment option.\n\t\t// This often ends up looking like very little happened at larger zoom levels.\n\t\t// The default is to multiply/divide the scale based on the increment.\n\t\tlinearZoom: false,\n\n\t\t// Pan only when the scale is greater than minScale\n\t\tpanOnlyWhenZoomed: false,\n\n\t\t// min and max zoom scales\n\t\tminScale: 0.3,\n\t\tmaxScale: 6,\n\n\t\t// The default step for the range input\n\t\t// Precendence: default < HTML attribute < option setting\n\t\trangeStep: 0.05,\n\n\t\t// Animation duration (ms)\n\t\tduration: 200,\n\t\t// CSS easing used for scale transition\n\t\teasing: 'ease-in-out',\n\n\t\t// Indicate that the element should be contained within it's parent when panning\n\t\t// Note: this does not affect zooming outside of the parent\n\t\t// Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)\n\t\t// 'invert' is useful for a large panzoom element where you don't want to show anything behind it\n\t\tcontain: false\n\t};\n\n\tPanzoom.prototype = {\n\t\tconstructor: Panzoom,\n\n\t\t/**\n\t\t * @returns {Panzoom} Returns the instance\n\t\t */\n\t\tinstance: function() {\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Enable or re-enable the panzoom instance\n\t\t */\n\t\tenable: function() {\n\t\t\t// Unbind first\n\t\t\tthis._initStyle();\n\t\t\tthis._bind();\n\t\t\tthis.disabled = false;\n\t\t},\n\n\t\t/**\n\t\t * Disable panzoom\n\t\t */\n\t\tdisable: function() {\n\t\t\tthis.disabled = true;\n\t\t\tthis._resetStyle();\n\t\t\tthis._unbind();\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the current panzoom instance is disabled\n\t\t */\n\t\tisDisabled: function() {\n\t\t\treturn this.disabled;\n\t\t},\n\n\t\t/**\n\t\t * Destroy the panzoom instance\n\t\t */\n\t\tdestroy: function() {\n\t\t\tthis.disable();\n\t\t\t$.removeData(this.elem, datakey);\n\t\t},\n\n\t\t/**\n\t\t * Builds the restricing dimensions from the containment element\n\t\t * Also used with focal points\n\t\t * Call this method whenever the dimensions of the element or parent are changed\n\t\t */\n\t\tresetDimensions: function() {\n\t\t\t// Reset container properties\n\t\t\tthis.container = this.parent.getBoundingClientRect();\n\n\t\t\t// Set element properties\n\t\t\tvar elem = this.elem;\n\t\t\t// getBoundingClientRect() works with SVG, offsetWidth does not\n\t\t\tvar dims = elem.getBoundingClientRect();\n\t\t\tvar absScale = Math.abs(this.scale);\n\t\t\tthis.dimensions = {\n\t\t\t\twidth: dims.width,\n\t\t\t\theight: dims.height,\n\t\t\t\tleft: $.css(elem, 'left', true) || 0,\n\t\t\t\ttop: $.css(elem, 'top', true) || 0,\n\t\t\t\t// Borders and margins are scaled\n\t\t\t\tborder: {\n\t\t\t\t\ttop: $.css(elem, 'borderTopWidth', true) * absScale || 0,\n\t\t\t\t\tbottom: $.css(elem, 'borderBottomWidth', true) * absScale || 0,\n\t\t\t\t\tleft: $.css(elem, 'borderLeftWidth', true) * absScale || 0,\n\t\t\t\t\tright: $.css(elem, 'borderRightWidth', true) * absScale || 0\n\t\t\t\t},\n\t\t\t\tmargin: {\n\t\t\t\t\ttop: $.css(elem, 'marginTop', true) * absScale || 0,\n\t\t\t\t\tleft: $.css(elem, 'marginLeft', true) * absScale || 0\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Return the element to it's original transform matrix\n\t\t * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.\n\t\t * @param {Boolean} [options.silent] Silence the reset event\n\t\t */\n\t\treset: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\t// Reset the transform to its original value\n\t\t\tvar matrix = this.setMatrix(this._origTransform, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('reset', matrix);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Only resets zoom level\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()\n\t\t */\n\t\tresetZoom: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\toptions.dValue = origMatrix[ 3 ];\n\t\t\tthis.zoom(origMatrix[0], options);\n\t\t},\n\n\t\t/**\n\t\t * Only reset panning\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()\n\t\t */\n\t\tresetPan: function(options) {\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\tthis.pan(origMatrix[4], origMatrix[5], createResetOptions(options));\n\t\t},\n\n\t\t/**\n\t\t * Sets a transform on the $set\n\t\t * For SVG, the style attribute takes precedence\n\t\t * and allows us to animate\n\t\t * @param {String} transform\n\t\t */\n\t\tsetTransform: function(transform) {\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t$.style($set[i], 'transform', transform);\n\n\t\t\t\t// Support IE9-11, Edge 13-14+\n\t\t\t\t// Set attribute alongside style attribute\n\t\t\t\t// since IE and Edge do not respect style settings on SVG\n\t\t\t\t// See https://css-tricks.com/transforms-on-svg-elements/\n\t\t\t\tif (this.isSVG) {\n\t\t\t\t\t$set[i].setAttribute('transform', transform);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Retrieving the transform is different for SVG\n\t\t * (unless a style transform is already present)\n\t\t * Uses the $set collection for retrieving the transform\n\t\t * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')\n\t\t * to have it formatted into matrix format for use by Panzoom\n\t\t * @returns {String} Returns the current transform value of the element\n\t\t */\n\t\tgetTransform: function(transform) {\n\t\t\tvar $set = this.$set;\n\t\t\tvar transformElem = $set[0];\n\t\t\tif (transform) {\n\t\t\t\tthis.setTransform(transform);\n\t\t\t} else {\n\n\t\t\t\t// IE and Edge still set the transform style properly\n\t\t\t\t// They just don't render it on SVG\n\t\t\t\t// So we get a correct value here\n\t\t\t\ttransform = $.style(transformElem, 'transform');\n\n\t\t\t\tif (this.isSVG && (!transform || transform === 'none')) {\n\t\t\t\t\ttransform = $.attr(transformElem, 'transform') || 'none';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert any transforms set by the user to matrix format\n\t\t\t// by setting to computed\n\t\t\tif (transform !== 'none' && !rmatrix.test(transform)) {\n\n\t\t\t\t// Get computed and set for next time\n\t\t\t\tthis.setTransform(transform = $.css(transformElem, 'transform'));\n\t\t\t}\n\n\t\t\treturn transform || 'none';\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)\n\t\t * @param {String} [transform] matrix-formatted transform value\n\t\t * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix\n\t\t */\n\t\tgetMatrix: function(transform) {\n\t\t\tvar matrix = rmatrix.exec(transform || this.getTransform());\n\t\t\tif (matrix) {\n\t\t\t\tmatrix.shift();\n\t\t\t}\n\t\t\treturn matrix || [ 1, 0, 0, 1, 0, 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Get the current scale.\n\t\t * @param {String} [transform] matrix-formatted transform value\n\t\t * @returns {Number} Current scale relative to the initial scale (height / width = 1)\n\t\t */\n\t\tgetScale: function(matrix) {\n\t\t\treturn Math.sqrt(Math.pow(matrix[0], 2) + Math.pow(matrix[1], 2));\n\t\t},\n\n\t\t/**\n\t\t * Given a matrix object, quickly set the current matrix of the element\n\t\t * @param {Array|String} matrix\n\t\t * @param {Object} [options]\n\t\t * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set\n\t\t * @param {Boolean} [options.contain] Override the global contain option\n\t\t * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.\n\t\t * @param {Boolean} [options.silent] If true, the change event will not be triggered\n\t\t * @returns {Array} Returns the newly-set matrix\n\t\t */\n\t\tsetMatrix: function(matrix, options) {\n\t\t\tif (this.disabled) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\t// Convert to array\n\t\t\tif (typeof matrix === 'string') {\n\t\t\t\tmatrix = this.getMatrix(matrix);\n\t\t\t}\n\t\t\tvar scale = this.getScale(matrix);\n\t\t\tvar contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;\n\n\t\t\t// Apply containment\n\t\t\tif (contain) {\n\t\t\t\tvar dims = options.dims;\n\t\t\t\tif (!dims) {\n\t\t\t\t\tthis.resetDimensions();\n\t\t\t\t\tdims = this.dimensions;\n\t\t\t\t}\n\t\t\t\tvar spaceWLeft, spaceWRight, scaleDiff;\n\t\t\t\tvar container = this.container;\n\t\t\t\tvar width = dims.width;\n\t\t\t\tvar height = dims.height;\n\t\t\t\tvar conWidth = container.width;\n\t\t\t\tvar conHeight = container.height;\n\t\t\t\tvar zoomAspectW = conWidth / width;\n\t\t\t\tvar zoomAspectH = conHeight / height;\n\n\t\t\t\t// If the element is not naturally centered,\n\t\t\t\t// assume full space right\n\t\t\t\tif (this.$parent.css('textAlign') !== 'center' || $.css(this.elem, 'display') !== 'inline') {\n\t\t\t\t\t// offsetWidth gets us the width without the transform\n\t\t\t\t\tscaleDiff = (width - this.elem.offsetWidth) / 2;\n\t\t\t\t\tspaceWLeft = scaleDiff - dims.border.left;\n\t\t\t\t\tspaceWRight = width - conWidth - scaleDiff + dims.border.right;\n\t\t\t\t} else {\n\t\t\t\t\tspaceWLeft = spaceWRight = ((width - conWidth) / 2);\n\t\t\t\t}\n\t\t\t\tvar spaceHTop = ((height - conHeight) / 2) + dims.border.top;\n\t\t\t\tvar spaceHBottom = ((height - conHeight) / 2) - dims.border.top - dims.border.bottom;\n\n\t\t\t\tif (contain === 'invert' || contain === 'automatic' && zoomAspectW < 1.01) {\n\t\t\t\t\tmatrix[4] = Math.max(Math.min(matrix[4], spaceWLeft - dims.border.left), -spaceWRight);\n\t\t\t\t} else {\n\t\t\t\t\tmatrix[4] = Math.min(Math.max(matrix[4], spaceWLeft), -spaceWRight);\n\t\t\t\t}\n\n\t\t\t\tif (contain === 'invert' || (contain === 'automatic' && zoomAspectH < 1.01)) {\n\t\t\t\t\tmatrix[5] = Math.max(Math.min(matrix[5], spaceHTop - dims.border.top), -spaceHBottom);\n\t\t\t\t} else {\n\t\t\t\t\tmatrix[5] = Math.min(Math.max(matrix[5], spaceHTop), -spaceHBottom);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate\n\t\t\tif (options.animate !== 'skip') {\n\t\t\t\t// Set transition\n\t\t\t\tthis.transition(!options.animate);\n\t\t\t}\n\n\t\t\t// Update range element\n\t\t\tif (options.range) {\n\t\t\t\tthis.$zoomRange.val(scale);\n\t\t\t}\n\n\t\t\t// Set the matrix on this.$set\n\t\t\tif (this.options.disableXAxis || this.options.disableYAxis) {\n\t\t\t\tvar originalMatrix = this.getMatrix();\n\t\t\t\tif (this.options.disableXAxis) {\n\t\t\t\t\tmatrix[4] = originalMatrix[4];\n\t\t\t\t}\n\t\t\t\tif (this.options.disableYAxis) {\n\t\t\t\t\tmatrix[5] = originalMatrix[5];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.setTransform('matrix(' + matrix.join(',') + ')');\n\n\t\t\tthis.scale = scale;\n\n\t\t\t// Disable/enable panning if zooming is at minimum and panOnlyWhenZoomed is true\n\t\t\tthis._checkPanWhenZoomed(scale);\n\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('change', matrix);\n\t\t\t}\n\n\t\t\treturn matrix;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the panzoom element is currently being dragged\n\t\t */\n\t\tisPanning: function() {\n\t\t\treturn this.panning;\n\t\t},\n\n\t\t/**\n\t\t * Apply the current transition to the element, if allowed\n\t\t * @param {Boolean} [off] Indicates that the transition should be turned off\n\t\t */\n\t\ttransition: function(off) {\n\t\t\tif (!this._transition) { return; }\n\t\t\tvar transition = off || !this.options.transition ? 'none' : this._transition;\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t// Avoid reflows when zooming\n\t\t\t\tif ($.style($set[i], 'transition') !== transition) {\n\t\t\t\t\t$.style($set[i], 'transition', transition);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pan the element to the specified translation X and Y\n\t\t * Note: this is not the same as setting jQuery#offset() or jQuery#position()\n\t\t * @param {Number} x\n\t\t * @param {Number} y\n\t\t * @param {Object} [options] These options are passed along to setMatrix\n\t\t * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)\n\t\t * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.\n\t\t * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix\n\t\t */\n\t\tpan: function(x, y, options) {\n\t\t\tif (this.options.disablePan) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\tvar matrix = options.matrix;\n\t\t\tif (!matrix) {\n\t\t\t\tmatrix = this.getMatrix();\n\t\t\t}\n\t\t\t// Cast existing matrix values to numbers\n\t\t\tif (options.relative) {\n\t\t\t\tx += +matrix[4];\n\t\t\t\ty += +matrix[5];\n\t\t\t}\n\t\t\tmatrix[4] = x;\n\t\t\tmatrix[5] = y;\n\t\t\tthis.setMatrix(matrix, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('pan', matrix[4], matrix[5]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Zoom in/out the element using the scale properties of a transform matrix\n\t\t * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out\n\t\t * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.\n\t\t * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)\n\t\t * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.\n\t\t * If an object, set the clientX and clientY properties to the position relative to the parent\n\t\t * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)\n\t\t * @param {Boolean} [opts.silent] Silence the zoom event\n\t\t * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved\n\t\t * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d\n\t\t * where a/d are the horizontal/vertical scale values and b/c are the skew values\n\t\t * (5 and 6 of matrix array are the tx/ty transform values).\n\t\t * Normally, the scale is set to both the a and d values of the matrix.\n\t\t * This option allows you to specify a different d value for the zoom.\n\t\t * For instance, to flip vertically, you could set -1 as the dValue.\n\t\t */\n\t\tzoom: function(scale, opts) {\n\t\t\t// Shuffle arguments\n\t\t\tif (typeof scale === 'object') {\n\t\t\t\topts = scale;\n\t\t\t\tscale = null;\n\t\t\t} else if (!opts) {\n\t\t\t\topts = {};\n\t\t\t}\n\t\t\tvar options = $.extend({}, this.options, opts);\n\t\t\t// Check if disabled\n\t\t\tif (options.disableZoom) { return; }\n\t\t\tvar animate = false;\n\t\t\tvar matrix = options.matrix || this.getMatrix();\n\t\t\tvar surfaceM = new Matrix(matrix);\n\t\t\tvar startScale = this.getScale(matrix);\n\n\t\t\t// Calculate zoom based on increment\n\t\t\tif (typeof scale !== 'number') {\n\t\t\t\tif (options.linearZoom) {\n\t\t\t\t\tscale = 1 + (options.increment * (scale ? -1 : 1)) / startScale;\n\t\t\t\t} else {\n\t\t\t\t\tscale = scale ? (1 / (1 + options.increment)) : (1 + options.increment);\n\t\t\t\t}\n\t\t\t\tanimate = true;\n\t\t\t} else {\n\t\t\t\tscale = 1 / startScale;\n\t\t\t}\n\n\t\t\t// Constrain scale\n\t\t\tscale = Math.max(Math.min(scale, options.maxScale / startScale), options.minScale / startScale);\n\t\t\tvar m = surfaceM.x(new Matrix(scale, 0, 0, 0, (typeof options.dValue === 'number' ? options.dValue / startScale : scale), 0));\n\n\t\t\t// Calculate focal point based on scale\n\t\t\tvar focal = options.focal;\n\t\t\tif (focal && !options.disablePan) {\n\t\t\t\t// Adapted from code by Florian Günther\n\t\t\t\t// https://github.com/florianguenther/zui53\n\t\t\t\tthis.resetDimensions();\n\t\t\t\tvar dims = options.dims = this.dimensions;\n\t\t\t\tvar clientX = focal.clientX;\n\t\t\t\tvar clientY = focal.clientY;\n\n\t\t\t\t// Adjust the focal point for transform-origin 50% 50%\n\t\t\t\t// SVG elements have a transform origin of 0 0\n\t\t\t\tif (!this.isSVG) {\n\t\t\t\t\tclientX -= (dims.width / startScale) / 2;\n\t\t\t\t\tclientY -= (dims.height / startScale) / 2;\n\t\t\t\t}\n\n\t\t\t\tvar clientV = new Vector(clientX, clientY, 1);\n\t\t\t\t// Supply an offset manually if necessary\n\t\t\t\tvar o = this.parentOffset || this.$parent.offset();\n\t\t\t\tvar offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());\n\t\t\t\tvar surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));\n\t\t\t\tsurfaceM = surfaceM.x(new Matrix([scale, 0, 0, scale, 0, 0]));\n\t\t\t\tclientV = offsetM.x(surfaceM.x(surfaceV));\n\t\t\t\tmatrix[4] = +matrix[4] + (clientX - clientV.e(0));\n\t\t\t\tmatrix[5] = +matrix[5] + (clientY - clientV.e(1));\n\t\t\t}\n\n\t\t\t// Set the scale\n\t\t\tmatrix[0] = m.e(0);\n\t\t\tmatrix[1] = m.e(3);\n\t\t\tmatrix[2] = m.e(1);\n\t\t\tmatrix[3] = m.e(4);\n\n\t\t\t// Calling zoom may still pan the element\n\t\t\tthis.setMatrix(matrix, {\n\t\t\t\tanimate: typeof options.animate !== 'undefined' ? options.animate : animate,\n\t\t\t\t// Set the zoomRange value\n\t\t\t\trange: !options.noSetRange\n\t\t\t});\n\n\t\t\t// Trigger zoom event\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('zoom', scale, options);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get/set option on an existing instance\n\t\t * @returns {Array|undefined} If getting, returns an array of all values\n\t\t * on each instance for a given key. If setting, continue chaining by returning undefined.\n\t\t */\n\t\toption: function(key, value) {\n\t\t\tvar options;\n\t\t\tif (!key) {\n\t\t\t\t// Avoids returning direct reference\n\t\t\t\treturn $.extend({}, this.options);\n\t\t\t}\n\n\t\t\tif (typeof key === 'string') {\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn this.options[ key ] !== undefined ?\n\t\t\t\t\t\tthis.options[ key ] :\n\t\t\t\t\t\tnull;\n\t\t\t\t}\n\t\t\t\toptions = {};\n\t\t\t\toptions[ key ] = value;\n\t\t\t} else {\n\t\t\t\toptions = key;\n\t\t\t}\n\n\t\t\tthis._setOptions(options);\n\t\t},\n\n\t\t/**\n\t\t * Internally sets options\n\t\t * @param {Object} options - An object literal of options to set\n\t\t * @private\n\t\t */\n\t\t_setOptions: function(options) {\n\t\t\t$.each(options, $.proxy(function(key, value) {\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._resetStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._unbind();\n\t\t\t\t}\n\t\t\t\tthis.options[ key ] = value;\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\t\t// Set these on the instance\n\t\t\t\t\t\tthis[ key ] = value;\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._bind();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cursor':\n\t\t\t\t\t\t$.style(this.elem, 'cursor', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'minScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('min', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'maxScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('max', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'rangeStep':\n\t\t\t\t\t\tthis.$zoomRange.attr('step', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'startTransform':\n\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'easing':\n\t\t\t\t\t\tthis._buildTransition();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'transition':\n\t\t\t\t\t\tthis.transition();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'panOnlyWhenZoomed':\n\t\t\t\t\t\tthis._checkPanWhenZoomed();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '$set':\n\t\t\t\t\t\tif (value instanceof $ && value.length) {\n\t\t\t\t\t\t\tthis.$set = value;\n\t\t\t\t\t\t\t// Reset styles\n\t\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t},\n\n\t\t/**\n\t\t * Disable/enable panning depending on whether the current scale\n\t\t * matches the minimum\n\t\t * @param {Number} [scale]\n\t\t * @private\n\t\t */\n\t\t_checkPanWhenZoomed: function(scale) {\n\t\t\tvar options = this.options;\n\t\t\tif (options.panOnlyWhenZoomed) {\n\t\t\t\tif (!scale) {\n\t\t\t\t\tscale = this.getMatrix()[0];\n\t\t\t\t}\n\t\t\t\tvar toDisable = scale <= options.minScale;\n\t\t\t\tif (options.disablePan !== toDisable) {\n\t\t\t\t\tthis.option('disablePan', toDisable);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Initialize base styles for the element and its parent\n\t\t * @private\n\t\t */\n\t\t_initStyle: function() {\n\t\t\tvar styles = {\n\t\t\t\t// Set the same default whether SVG or HTML\n\t\t\t\t// transform-origin cannot be changed to 50% 50% in IE9-11 or Edge 13-14+\n\t\t\t\t'transform-origin': this.isSVG ? '0 0' : '50% 50%'\n\t\t\t};\n\t\t\t// Set elem styles\n\t\t\tif (!this.options.disablePan) {\n\t\t\t\tstyles.cursor = this.options.cursor;\n\t\t\t}\n\t\t\tthis.$set.css(styles);\n\n\t\t\t// Set parent to relative if set to static\n\t\t\tvar $parent = this.$parent;\n\t\t\t// No need to add styles to the body\n\t\t\tif ($parent.length && !$.nodeName(this.parent, 'body')) {\n\t\t\t\tstyles = {\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t};\n\t\t\t\tif ($parent.css('position') === 'static') {\n\t\t\t\t\tstyles.position = 'relative';\n\t\t\t\t}\n\t\t\t\t$parent.css(styles);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Undo any styles attached in this plugin\n\t\t * @private\n\t\t */\n\t\t_resetStyle: function() {\n\t\t\tthis.$elem.css({\n\t\t\t\t'cursor': '',\n\t\t\t\t'transition': ''\n\t\t\t});\n\t\t\tthis.$parent.css({\n\t\t\t\t'overflow': '',\n\t\t\t\t'position': ''\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Binds all necessary events\n\t\t * @private\n\t\t */\n\t\t_bind: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar str_down = 'mousedown' + ns + ' pointerdown' + ns + ' MSPointerDown' + ns;\n\t\t\tvar str_start = 'touchstart' + ns + ' ' + str_down;\n\t\t\tvar str_click = 'touchend' + ns + ' click' + ns + ' pointerup' + ns + ' MSPointerUp' + ns;\n\t\t\tvar events = {};\n\t\t\tvar $reset = this.$reset;\n\t\t\tvar $zoomRange = this.$zoomRange;\n\n\t\t\t// Bind panzoom events from options\n\t\t\t$.each([ 'Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset' ], function() {\n\t\t\t\tvar m = options[ 'on' + this ];\n\t\t\t\tif ($.isFunction(m)) {\n\t\t\t\t\tevents[ 'panzoom' + this.toLowerCase() + ns ] = m;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Bind $elem drag and click/touchdown events\n\t\t\t// Bind touchstart if either panning or zooming is enabled\n\t\t\tif (!options.disablePan || !options.disableZoom) {\n\t\t\t\tevents[ str_start ] = function(e) {\n\t\t\t\t\tvar touches;\n\t\t\t\t\tif (e.type === 'touchstart' ?\n\t\t\t\t\t\t// Touch\n\t\t\t\t\t\t(touches = e.touches || e.originalEvent.touches) &&\n\t\t\t\t\t\t\t((touches.length === 1 && !options.disablePan) || touches.length === 2) :\n\t\t\t\t\t\t// Mouse/Pointer: Ignore unexpected click types\n\t\t\t\t\t\t// Support: IE10 only\n\t\t\t\t\t\t// IE10 does not support e.button for MSPointerDown, but does have e.which\n\t\t\t\t\t\t!options.disablePan && (e.which || e.originalEvent.which) === options.which) {\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tself._startMove(e, touches);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Prevent the contextmenu event\n\t\t\t\t// if we're binding to right-click\n\t\t\t\tif (options.which === 3) {\n\t\t\t\t\tevents.contextmenu = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$elem.on(events);\n\n\t\t\t// Bind reset\n\t\t\tif ($reset.length) {\n\t\t\t\t$reset.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.reset();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Set default attributes for the range input\n\t\t\tif ($zoomRange.length) {\n\t\t\t\t$zoomRange.attr({\n\t\t\t\t\t// Only set the range step if explicit or\n\t\t\t\t\t// set the default if there is no attribute present\n\t\t\t\t\tstep: options.rangeStep === Panzoom.defaults.rangeStep &&\n\t\t\t\t\t\t$zoomRange.attr('step') ||\n\t\t\t\t\t\toptions.rangeStep,\n\t\t\t\t\tmin: options.minScale,\n\t\t\t\t\tmax: options.maxScale\n\t\t\t\t}).prop({\n\t\t\t\t\tvalue: this.getMatrix()[0]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// No bindings if zooming is disabled\n\t\t\tif (options.disableZoom) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $zoomIn = this.$zoomIn;\n\t\t\tvar $zoomOut = this.$zoomOut;\n\n\t\t\t// Bind zoom in/out\n\t\t\t// Don't bind one without the other\n\t\t\tif ($zoomIn.length && $zoomOut.length) {\n\t\t\t\t// preventDefault cancels future mouse events on touch events\n\t\t\t\t$zoomIn.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom();\n\t\t\t\t});\n\t\t\t\t$zoomOut.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom(true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($zoomRange.length) {\n\t\t\t\tevents = {};\n\t\t\t\t// Cannot prevent default action here\n\t\t\t\tevents[ str_down ] = function() {\n\t\t\t\t\tself.transition(true);\n\t\t\t\t};\n\t\t\t\t// Zoom on input events if available and change events\n\t\t\t\t// See https://github.com/timmywil/jquery.panzoom/issues/90\n\t\t\t\tevents[ (supportsInputEvent ? 'input' : 'change') + ns ] = function() {\n\t\t\t\t\tself.zoom(+this.value, { noSetRange: true });\n\t\t\t\t};\n\t\t\t\t$zoomRange.on(events);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Unbind all events\n\t\t * @private\n\t\t */\n\t\t_unbind: function() {\n\t\t\tthis.$elem\n\t\t\t\t.add(this.$zoomIn)\n\t\t\t\t.add(this.$zoomOut)\n\t\t\t\t.add(this.$reset)\n\t\t\t\t.off(this.options.eventNamespace);\n\t\t},\n\n\t\t/**\n\t\t * Builds the original transform value\n\t\t * @private\n\t\t */\n\t\t_buildTransform: function() {\n\t\t\t// Save the original transform\n\t\t\t// Retrieving this also adds the correct prefixed style name\n\t\t\t// to jQuery's internal $.cssProps\n\t\t\treturn this._origTransform = this.getTransform(this.options.startTransform);\n\t\t},\n\n\t\t/**\n\t\t * Set transition property for later use when zooming\n\t\t * @private\n\t\t */\n\t\t_buildTransition: function() {\n\t\t\tif (this._transform) {\n\t\t\t\tvar options = this.options;\n\t\t\t\tthis._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Calculates the distance between two touch points\n\t\t * Remember pythagorean?\n\t\t * @param {Array} touches\n\t\t * @returns {Number} Returns the distance\n\t\t * @private\n\t\t */\n\t\t_getDistance: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn Math.sqrt(Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) + Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2));\n\t\t},\n\n\t\t/**\n\t\t * Constructs an approximated point in the middle of two touch points\n\t\t * @returns {Object} Returns an object containing pageX and pageY\n\t\t * @private\n\t\t */\n\t\t_getMiddle: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn {\n\t\t\t\tclientX: ((touch2.clientX - touch1.clientX) / 2) + touch1.clientX,\n\t\t\t\tclientY: ((touch2.clientY - touch1.clientY) / 2) + touch1.clientY\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Trigger a panzoom event on our element\n\t\t * The event is passed the Panzoom instance\n\t\t * @param {String|jQuery.Event} event\n\t\t * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger\n\t\t * @private\n\t\t */\n\t\t_trigger: function (event) {\n\t\t\tif (typeof event === 'string') {\n\t\t\t\tevent = 'panzoom' + event;\n\t\t\t}\n\t\t\tthis.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));\n\t\t},\n\n\t\t/**\n\t\t * Starts the pan\n\t\t * This is bound to mouse/touchmove on the element\n\t\t * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list\n\t\t * @param {TouchList} [touches] The touches list if present\n\t\t * @private\n\t\t */\n\t\t_startMove: function(event, touches) {\n\t\t\tif (this.panning) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar moveEvent, endEvent,\n\t\t\t\tstartDistance, startScale, startMiddle,\n\t\t\t\tstartPageX, startPageY, touch;\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar matrix = this.getMatrix();\n\t\t\tvar original = matrix.slice(0);\n\t\t\tvar origPageX = +original[4];\n\t\t\tvar origPageY = +original[5];\n\t\t\tvar panOptions = { matrix: matrix, animate: 'skip' };\n\t\t\tvar type = event.type;\n\n\t\t\t// Use proper events\n\t\t\tif (type === 'pointerdown') {\n\t\t\t\tmoveEvent = 'pointermove';\n\t\t\t\tendEvent = 'pointerup';\n\t\t\t} else if (type === 'touchstart') {\n\t\t\t\tmoveEvent = 'touchmove';\n\t\t\t\tendEvent = 'touchend';\n\t\t\t} else if (type === 'MSPointerDown') {\n\t\t\t\tmoveEvent = 'MSPointerMove';\n\t\t\t\tendEvent = 'MSPointerUp';\n\t\t\t} else {\n\t\t\t\tmoveEvent = 'mousemove';\n\t\t\t\tendEvent = 'mouseup';\n\t\t\t}\n\n\t\t\t// Add namespace\n\t\t\tmoveEvent += ns;\n\t\t\tendEvent += ns;\n\n\t\t\t// Remove any transitions happening\n\t\t\tthis.transition(true);\n\n\t\t\t// Indicate that we are currently panning\n\t\t\tthis.panning = true;\n\n\t\t\t// Trigger start event\n\t\t\tthis._trigger('start', event, touches);\n\n\t\t\tvar setStart = function(event, touches) {\n\t\t\t\tif (touches) {\n\t\t\t\t\tif (touches.length === 2) {\n\t\t\t\t\t\tif (startDistance != null) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstartDistance = self._getDistance(touches);\n\t\t\t\t\t\tstartScale = self.getScale(matrix);\n\t\t\t\t\t\tstartMiddle = self._getMiddle(touches);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (startPageX != null) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ((touch = touches[0])) {\n\t\t\t\t\t\tstartPageX = touch.pageX;\n\t\t\t\t\t\tstartPageY = touch.pageY;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (startPageX != null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstartPageX = event.pageX;\n\t\t\t\tstartPageY = event.pageY;\n\t\t\t};\n\n\t\t\tsetStart(event, touches);\n\n\t\t\tvar move = function(e) {\n\t\t\t\tvar coords;\n\t\t\t\te.preventDefault();\n\t\t\t\ttouches = e.touches || e.originalEvent.touches;\n\t\t\t\tsetStart(e, touches);\n\n\t\t\t\tif (touches) {\n\t\t\t\t\tif (touches.length === 2) {\n\n\t\t\t\t\t\t// Calculate move on middle point\n\t\t\t\t\t\tvar middle = self._getMiddle(touches);\n\t\t\t\t\t\tvar diff = self._getDistance(touches) - startDistance;\n\n\t\t\t\t\t\t// Set zoom\n\t\t\t\t\t\tself.zoom(diff * (options.increment / 100) + startScale, {\n\t\t\t\t\t\t\tfocal: middle,\n\t\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\t\tanimate: 'skip'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Set pan\n\t\t\t\t\t\tself.pan(\n\t\t\t\t\t\t\t+matrix[4] + middle.clientX - startMiddle.clientX,\n\t\t\t\t\t\t\t+matrix[5] + middle.clientY - startMiddle.clientY,\n\t\t\t\t\t\t\tpanOptions\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstartMiddle = middle;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcoords = touches[0] || { pageX: 0, pageY: 0 };\n\t\t\t\t}\n\n\t\t\t\tif (!coords) {\n\t\t\t\t\tcoords = e;\n\t\t\t\t}\n\n\t\t\t\tself.pan(\n\t\t\t\t\torigPageX + coords.pageX - startPageX,\n\t\t\t\t\torigPageY + coords.pageY - startPageY,\n\t\t\t\t\tpanOptions\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Bind the handlers\n\t\t\t$(document)\n\t\t\t\t.off(ns)\n\t\t\t\t.on(moveEvent, move)\n\t\t\t\t.on(endEvent, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t// Unbind all document events\n\t\t\t\t\t$(this).off(ns);\n\t\t\t\t\tself.panning = false;\n\t\t\t\t\t// Trigger our end event\n\t\t\t\t\t// Simply set the type to \"panzoomend\" to pass through all end properties\n\t\t\t\t\t// jQuery's `not` is used here to compare Array equality\n\t\t\t\t\te.type = 'panzoomend';\n\t\t\t\t\tself._trigger(e, matrix, !matrixEquals(matrix, original));\n\t\t\t\t});\n\t\t}\n\t};\n\n\t// Add Panzoom as a static property\n\t$.Panzoom = Panzoom;\n\n\t/**\n\t * Extend jQuery\n\t * @param {Object|String} options - The name of a method to call on the prototype\n\t * or an object literal of options\n\t * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call\n\t */\n\t$.fn.panzoom = function(options) {\n\t\tvar instance, args, m, ret;\n\n\t\t// Call methods widget-style\n\t\tif (typeof options === 'string') {\n\t\t\tret = [];\n\t\t\targs = slice.call(arguments, 1);\n\t\t\tthis.each(function() {\n\t\t\t\tinstance = $.data(this, datakey);\n\n\t\t\t\tif (!instance) {\n\t\t\t\t\tret.push(undefined);\n\n\t\t\t\t// Ignore methods beginning with `_`\n\t\t\t\t} else if (options.charAt(0) !== '_' &&\n\t\t\t\t\ttypeof (m = instance[ options ]) === 'function' &&\n\t\t\t\t\t// If nothing is returned, do not add to return values\n\t\t\t\t\t(m = m.apply(instance, args)) !== undefined) {\n\n\t\t\t\t\tret.push(m);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Return an array of values for the jQuery instances\n\t\t\t// Or the value itself if there is only one\n\t\t\t// Or keep chaining\n\t\t\treturn ret.length ?\n\t\t\t\t(ret.length === 1 ? ret[0] : ret) :\n\t\t\t\tthis;\n\t\t}\n\n\t\treturn this.each(function() { new Panzoom(this, options); });\n\t};\n\n\treturn Panzoom;\n}));\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/* Web Font Loader v1.6.28 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function p(a,b,c){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.o=b||a;this.c=this.o.document}var da=!!window.FontFace;function t(a,b,c,d){b=a.c.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&(\"style\"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.c.createTextNode(d));return b}function u(a,b,c){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)}\nfunction w(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(\" \").replace(/\\s+/g,\" \").replace(/^\\s+|\\s+$/,\"\")}function y(a,b){for(var c=a.className.split(/\\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}\nfunction ea(a){return a.o.location.hostname||a.a.location.hostname}function z(a,b,c){function d(){m&&e&&f&&(m(g),m=null)}b=t(a,\"link\",{rel:\"stylesheet\",href:b,media:\"all\"});var e=!1,f=!0,g=null,m=c||null;da?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error(\"Stylesheet failed to load\");d()}):setTimeout(function(){e=!0;d()},0);u(a,\"head\",b)}\nfunction A(a,b,c,d){var e=a.c.getElementsByTagName(\"head\")[0];if(e){var f=t(a,\"script\",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&\"loaded\"!=this.readyState&&\"complete\"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,\"HEAD\"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error(\"Script load timeout\")))},d||5E3);return f}return null};function B(){this.a=0;this.c=null}function C(a){a.a++;return function(){a.a--;D(a)}}function E(a,b){a.c=b;D(a)}function D(a){0==a.a&&a.c&&(a.c(),a.c=null)};function F(a){this.a=a||\"-\"}F.prototype.c=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\\W_]+/g,\"\").toLowerCase());return b.join(this.a)};function G(a,b){this.c=a;this.f=4;this.a=\"n\";var c=(b||\"n4\").match(/^([nio])([1-9])$/i);c&&(this.a=c[1],this.f=parseInt(c[2],10))}function fa(a){return H(a)+\" \"+(a.f+\"00\")+\" 300px \"+I(a.c)}function I(a){var b=[];a=a.split(/,\\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['\"]/g,\"\");-1!=d.indexOf(\" \")||/^\\d/.test(d)?b.push(\"'\"+d+\"'\"):b.push(d)}return b.join(\",\")}function J(a){return a.a+a.f}function H(a){var b=\"normal\";\"o\"===a.a?b=\"oblique\":\"i\"===a.a&&(b=\"italic\");return b}\nfunction ga(a){var b=4,c=\"n\",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.c=a;this.f=a.o.document.documentElement;this.h=b;this.a=new F(\"-\");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c(\"wf\",\"loading\")]);K(a,\"loading\")}function L(a){if(a.g){var b=y(a.f,a.a.c(\"wf\",\"active\")),c=[],d=[a.a.c(\"wf\",\"loading\")];b||c.push(a.a.c(\"wf\",\"inactive\"));w(a.f,c,d)}K(a,\"inactive\")}function K(a,b,c){if(a.j&&a.h[b])if(c)a.h[b](c.c,J(c));else a.h[b]()};function ja(){this.c={}}function ka(a,b,c){var d=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&d.push(f(b[e],c))}return d};function M(a,b){this.c=a;this.f=b;this.a=t(this.c,\"span\",{\"aria-hidden\":\"true\"},this.f)}function N(a){u(a.c,\"body\",a.a)}function O(a){return\"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:\"+I(a.c)+\";\"+(\"font-style:\"+H(a)+\";font-weight:\"+(a.f+\"00\")+\";\")};function P(a,b,c,d,e,f){this.g=a;this.j=b;this.a=d;this.c=c;this.f=e||3E3;this.h=f||void 0}P.prototype.start=function(){var a=this.c.o.document,b=this,c=q(),d=new Promise(function(d,e){function f(){q()-c>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(f,25)},function(){e()})}f()}),e=null,f=new Promise(function(a,d){e=setTimeout(d,b.f)});Promise.race([f,d]).then(function(){e&&(clearTimeout(e),e=null);b.g(b.a)},function(){b.j(b.a)})};function Q(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||\"BESbswy\";this.f={};this.w=e||3E3;this.u=f||null;this.m=this.j=this.h=this.g=null;this.g=new M(this.c,this.s);this.h=new M(this.c,this.s);this.j=new M(this.c,this.s);this.m=new M(this.c,this.s);a=new G(this.a.c+\",serif\",J(this.a));a=O(a);this.g.a.style.cssText=a;a=new G(this.a.c+\",sans-serif\",J(this.a));a=O(a);this.h.a.style.cssText=a;a=new G(\"serif\",J(this.a));a=O(a);this.j.a.style.cssText=a;a=new G(\"sans-serif\",J(this.a));a=\nO(a);this.m.a.style.cssText=a;N(this.g);N(this.h);N(this.j);N(this.m)}var R={D:\"serif\",C:\"sans-serif\"},S=null;function T(){if(null===S){var a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent);S=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return S}Q.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f[\"sans-serif\"]=this.m.a.offsetWidth;this.A=q();U(this)};\nfunction la(a,b,c){for(var d in R)if(R.hasOwnProperty(d)&&b===a.f[R[d]]&&c===a.f[R[d]])return!0;return!1}function U(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f[\"sans-serif\"])||(d=T()&&la(a,b,c));d?q()-a.A>=a.w?T()&&la(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):ma(a):V(a,a.v)}function ma(a){setTimeout(p(function(){U(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.m.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.m=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c(\"wf\",a.c,J(a).toString(),\"active\")],[b.a.c(\"wf\",a.c,J(a).toString(),\"loading\"),b.a.c(\"wf\",a.c,J(a).toString(),\"inactive\")]);K(b,\"fontactive\",a);this.m=!0;na(this)};\nW.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c(\"wf\",a.c,J(a).toString(),\"active\")),d=[],e=[b.a.c(\"wf\",a.c,J(a).toString(),\"loading\")];c||d.push(b.a.c(\"wf\",a.c,J(a).toString(),\"inactive\"));w(b.f,d,e)}K(b,\"fontinactive\",a);na(this)};function na(a){0==--a.f&&a.j&&(a.m?(a=a.a,a.g&&w(a.f,[a.a.c(\"wf\",\"active\")],[a.a.c(\"wf\",\"loading\"),a.a.c(\"wf\",\"inactive\")]),K(a,\"active\")):L(a.a))};function oa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}oa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;pa(this,new ha(this.c,a),a)};\nfunction qa(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,m=d||null||{};if(0===c.length&&f)L(b.a);else{b.f+=c.length;f&&(b.j=f);var h,l=[];for(h=0;h<c.length;h++){var k=c[h],n=m[k.c],r=b.a,x=k;r.g&&w(r.f,[r.a.c(\"wf\",x.c,J(x).toString(),\"loading\")]);K(r,\"fontloading\",x);r=null;if(null===X)if(window.FontFace){var x=/Gecko.*Firefox\\/(\\d+)/.exec(window.navigator.userAgent),xa=/OS X.*Version\\/10\\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);\nX=x?42<parseInt(x[1],10):xa?!1:!0}else X=!1;X?r=new P(p(b.g,b),p(b.h,b),b.c,k,b.s,n):r=new Q(p(b.g,b),p(b.h,b),b.c,k,b.s,a,n);l.push(r)}for(h=0;h<l.length;h++)l[h].start()}},0)}function pa(a,b,c){var d=[],e=c.timeout;ia(b);var d=ka(a.a,c,a.c),f=new W(a.c,b,e);a.h=d.length;b=0;for(c=d.length;b<c;b++)d[b].load(function(b,d,c){qa(a,f,b,d,c)})};function ra(a,b){this.c=a;this.a=b}\nra.prototype.load=function(a){function b(){if(f[\"__mti_fntLst\"+d]){var c=f[\"__mti_fntLst\"+d](),e=[],h;if(c)for(var l=0;l<c.length;l++){var k=c[l].fontfamily;void 0!=c[l].fontStyle&&void 0!=c[l].fontWeight?(h=c[l].fontStyle+c[l].fontWeight,e.push(new G(k,h))):e.push(new G(k))}a(e)}else setTimeout(function(){b()},50)}var c=this,d=c.a.projectId,e=c.a.version;if(d){var f=c.c.o;A(this.c,(c.a.api||\"https://fast.fonts.net/jsapi\")+\"/\"+d+\".js\"+(e?\"?v=\"+e:\"\"),function(e){e?a([]):(f[\"__MonotypeConfiguration__\"+\nd]=function(){return c.a},b())}).id=\"__MonotypeAPIScript__\"+d}else a([])};function sa(a,b){this.c=a;this.a=b}sa.prototype.load=function(a){var b,c,d=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new B;b=0;for(c=d.length;b<c;b++)z(this.c,d[b],C(g));var m=[];b=0;for(c=e.length;b<c;b++)if(d=e[b].split(\":\"),d[1])for(var h=d[1].split(\",\"),l=0;l<h.length;l+=1)m.push(new G(d[0],h[l]));else m.push(new G(d[0]));E(g,function(){a(m,f)})};function ta(a,b){a?this.c=a:this.c=ua;this.a=[];this.f=[];this.g=b||\"\"}var ua=\"https://fonts.googleapis.com/css\";function va(a,b){for(var c=b.length,d=0;d<c;d++){var e=b[d].split(\":\");3==e.length&&a.f.push(e.pop());var f=\"\";2==e.length&&\"\"!=e[1]&&(f=\":\");a.a.push(e.join(f))}}\nfunction wa(a){if(0==a.a.length)throw Error(\"No fonts to load!\");if(-1!=a.c.indexOf(\"kit=\"))return a.c;for(var b=a.a.length,c=[],d=0;d<b;d++)c.push(a.a[d].replace(/ /g,\"+\"));b=a.c+\"?family=\"+c.join(\"%7C\");0<a.f.length&&(b+=\"&subset=\"+a.f.join(\",\"));0<a.g.length&&(b+=\"&text=\"+encodeURIComponent(a.g));return b};function ya(a){this.f=a;this.a=[];this.c={}}\nvar za={latin:\"BESbswy\",\"latin-ext\":\"\\u00e7\\u00f6\\u00fc\\u011f\\u015f\",cyrillic:\"\\u0439\\u044f\\u0416\",greek:\"\\u03b1\\u03b2\\u03a3\",khmer:\"\\u1780\\u1781\\u1782\",Hanuman:\"\\u1780\\u1781\\u1782\"},Aa={thin:\"1\",extralight:\"2\",\"extra-light\":\"2\",ultralight:\"2\",\"ultra-light\":\"2\",light:\"3\",regular:\"4\",book:\"4\",medium:\"5\",\"semi-bold\":\"6\",semibold:\"6\",\"demi-bold\":\"6\",demibold:\"6\",bold:\"7\",\"extra-bold\":\"8\",extrabold:\"8\",\"ultra-bold\":\"8\",ultrabold:\"8\",black:\"9\",heavy:\"9\",l:\"3\",r:\"4\",b:\"7\"},Ba={i:\"i\",italic:\"i\",n:\"n\",normal:\"n\"},\nCa=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;\nfunction Da(a){for(var b=a.f.length,c=0;c<b;c++){var d=a.f[c].split(\":\"),e=d[0].replace(/\\+/g,\" \"),f=[\"n4\"];if(2<=d.length){var g;var m=d[1];g=[];if(m)for(var m=m.split(\",\"),h=m.length,l=0;l<h;l++){var k;k=m[l];if(k.match(/^[\\w-]+$/)){var n=Ca.exec(k.toLowerCase());if(null==n)k=\"\";else{k=n[2];k=null==k||\"\"==k?\"n\":Ba[k];n=n[1];if(null==n||\"\"==n)n=\"4\";else var r=Aa[n],n=r?r:isNaN(n)?\"4\":n.substr(0,1);k=[k,n].join(\"\")}}else k=\"\";k&&g.push(k)}0<g.length&&(f=g);3==d.length&&(d=d[2],g=[],d=d?d.split(\",\"):\ng,0<d.length&&(d=za[d[0]])&&(a.c[e]=d))}a.c[e]||(d=za[e])&&(a.c[e]=d);for(d=0;d<f.length;d+=1)a.a.push(new G(e,f[d]))}};function Ea(a,b){this.c=a;this.a=b}var Fa={Arimo:!0,Cousine:!0,Tinos:!0};Ea.prototype.load=function(a){var b=new B,c=this.c,d=new ta(this.a.api,this.a.text),e=this.a.families;va(d,e);var f=new ya(e);Da(f);z(c,wa(d),C(b));E(b,function(){a(f.a,f.c,Fa)})};function Ga(a,b){this.c=a;this.a=b}Ga.prototype.load=function(a){var b=this.a.id,c=this.c.o;b?A(this.c,(this.a.api||\"https://use.typekit.net\")+\"/\"+b+\".js\",function(b){if(b)a([]);else if(c.Typekit&&c.Typekit.config&&c.Typekit.config.fn){b=c.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],m=b[f+1],h=0;h<m.length;h++)e.push(new G(g,m[h]));try{c.Typekit.load({events:!1,classes:!1,async:!0})}catch(l){}a(e)}},2E3):a([])};function Ha(a,b){this.c=a;this.f=b;this.a=[]}Ha.prototype.load=function(a){var b=this.f.id,c=this.c.o,d=this;b?(c.__webfontfontdeckmodule__||(c.__webfontfontdeckmodule__={}),c.__webfontfontdeckmodule__[b]=function(b,c){for(var g=0,m=c.fonts.length;g<m;++g){var h=c.fonts[g];d.a.push(new G(h.name,ga(\"font-weight:\"+h.weight+\";font-style:\"+h.style)))}a(d.a)},A(this.c,(this.f.api||\"https://f.fontdeck.com/s/css/js/\")+ea(this.c)+\"/\"+b+\".js\",function(b){b&&a([])})):a([])};var Y=new oa(window);Y.a.c.custom=function(a,b){return new sa(b,a)};Y.a.c.fontdeck=function(a,b){return new Ha(b,a)};Y.a.c.monotype=function(a,b){return new ra(b,a)};Y.a.c.typekit=function(a,b){return new Ga(b,a)};Y.a.c.google=function(a,b){return new Ea(b,a)};var Z={load:p(Y.load,Y)};\"function\"===typeof define&&define.amd?define(function(){return Z}):\"undefined\"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}());\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\n\n/**\n * Finds all elements with a \"data-module-init\" attribute\n * and calls the corresponding script\n */\nfunction initializeModules() {\n var modules = document.querySelectorAll( \"[data-module-init]\" );\n\n for ( var i = 0; i < modules.length; i++ ) {\n var el = modules[ i ];\n var $el = $( el );\n var name = el.getAttribute( \"data-module-init\" );\n\n // Find the module script\n try {\n var Module = require( \"modules/\" + name );\n } catch ( e ) {\n console.log( e.toString() );\n var Module = false;\n }\n\n // Initialize the module with the calling element\n if ( typeof Module === \"function\" && !$el.data( \"module\" ) ) {\n var mod = new Module( el );\n\n // Save module instance to jQuery data\n $( el ).data( \"module\", mod );\n }\n }\n}\n\nmodule.exports = initializeModules;\n","var $ = (typeof window !== \"undefined\" ? window['jQuery'] : typeof global !== \"undefined\" ? global['jQuery'] : null);\nvar WebFont = require('webfontloader');\nvar initializeModules = require( \"./lib/init-modules.js\" );\n\n$(function() {\n WebFont.load({\n custom: {\n families: ['AkzidenzGroteskPro', 'Rhode-Semibold']\n },\n active: function() {\n $(window).trigger('webfont-active');\n },\n inactive: function() {\n $(window).trigger('webfont-inactive');\n }\n });\n\tinitializeModules();\n});\n"]}