{"version":3,"sources":["webpack:///webpack/bootstrap bbcb5cb6e2bb546e3398","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/outlayer/outlayer.js","webpack:///./node_modules/isotope-layout/js/layout-mode.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/vanilla-lazyload/dist/lazyload.es2015.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/tap-listener/tap-listener.js","webpack:///./node_modules/object-fit-images/dist/ofi.common-js.js","webpack:///./node_modules/object-fit-videos/object-fit-videos.js","webpack:///./node_modules/details-element-polyfill/dist/details-element-polyfill.js","webpack:///./node_modules/isotope-layout/js/isotope.js","webpack:///./node_modules/outlayer/item.js","webpack:///./node_modules/isotope-layout/js/layout-modes/masonry.js","webpack:///./node_modules/masonry-layout/masonry.js","webpack:///./node_modules/isotope-layout/js/layout-modes/fit-rows.js","webpack:///./node_modules/isotope-layout/js/layout-modes/vertical.js","webpack:///./node_modules/isotope-layout/js/item.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity-imagesloaded/flickity-imagesloaded.js","webpack:///./node_modules/imagesloaded/imagesloaded.js","webpack:///./node_modules/intersection-observer/intersection-observer.js"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error","factory","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","matchesSelector","apply","utils","a","b","prop","num","div","arraySlice","Array","slice","makeArray","obj","isArray","_typeof","removeFrom","ary","index","indexOf","splice","getParent","elem","selector","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","method","type","this","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","args","arguments","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","className","instance","data","__WEBPACK_AMD_DEFINE_FACTORY__","getStyleSize","value","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","style","getComputedStyle","isBoxSizeOuter","isSetup","getSize","createElement","width","padding","borderStyle","borderWidth","boxSizing","documentElement","appendChild","Math","round","removeChild","setup","nodeType","display","size","height","innerWidth","innerHeight","outerWidth","outerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","EvEmitter","Cell","Slide","animatePrototype","moveElements","toElem","GUID","instances","Flickity","element","queryElement","flickityGUID","option","$element","extend","constructor","defaults","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","percentPosition","resize","selectedAttraction","setGallerySize","createMethods","proto","id","guid","eventName","selectedIndex","restingFrames","x","velocity","originSide","rightToLeft","viewport","_createSlider","watchCSS","on","listener","activate","opts","isActive","classList","add","_filterFindCellElements","children","slider","reloadCells","tabIndex","emitEvent","initialIndex","isInitActivated","cells","select","dispatchEvent","cellSelector","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","slides","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","len","cell","setPosition","max","slideableWidth","updateSlides","_containSlides","slidesWidth","target","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateTarget","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","positionSliderAtSelected","setCellAlign","cursorPosition","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","selectedSlide","wrapAround","_unshiftCells","beforeShiftCells","afterShiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","modulo","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","selectCell","queryCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","cellElems","slideIndex","uiChange","childUIPointerDown","onresize","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","focus","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","destroy","removeAttribute","removeEventListener","removeData","bridget","setJQuery","jq","events","_events","listeners","once","onceEvents","_onceEvents","off","onceListeners","allOff","Item","noop","Outlayer","outlayerGUID","_getOption","layout","containerStyle","position","initLayout","originLeft","originTop","resizeContainer","transitionDuration","hiddenStyle","opacity","transform","visibleStyle","subclass","Parent","SubClass","create","oldOption","compatOptions","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","items","_itemize","itemElems","_filterFindItemElements","item","itemSelector","getItemElements","_resetLayout","_manageStamps","_isLayoutInited","layoutItems","_getMeasurement","_getItemsForLayout","_layoutItems","_postLayout","filter","isIgnored","_emitCompleteOnItems","queue","_getItemLayoutPosition","isLayoutInstant","_processLayoutQueue","y","updateStagger","_positionItem","stagger","time","matches","unit","mult","msUnits","getMilliseconds","goTo","moveTo","_getContainerSize","_setContainerMeasure","measure","isWidth","elemSize","onComplete","count","doneCount","tick","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","_manageStamp","boundingRect","getBoundingClientRect","_boundingRect","top","bottom","_getElementOffset","thisRect","isResizeBound","unbindResize","needsResizeLayout","addItems","appended","reveal","prepended","previousItems","hide","revealItemElements","getItems","hideItemElements","removeItems","Layout","ms","LayoutMode","isotope","filteredItems","needsVerticalResizeLayout","getColumnWidth","getSegmentSize","getRowHeight","segment","segmentName","outerSize","firstItemSize","getFirstItemSize","firstItem","modes","Mode","getTopOffset","ownerDocument","clientTop","isBelowViewport","container","getLeftOffset","clientLeft","isAtRightOfViewport","documentWidth","isAboveViewport","isAtLeftOfViewport","isInsideViewport","createInstance","classObj","CustomEvent","detail","createEvent","initCustomEvent","canvas","replaceExtToWebp","condition","runningOnBrowser","isBot","test","navigator","userAgent","supportsClassList","supportsWebp","getContext","toDataURL","addClass","getData","attribute","setWasProcessedData","attrName","setAttribute","setData","getWasProcessedData","setSourcesInChildren","parentTag","dataAttrName","toWebpFlag","childTag","tagName","attrValue","setAttributeIfValue","setSourcesFunctions","IMG","settings","to_webp","srcsetDataName","data_srcset","parent","sizesDataValue","data_sizes","srcsetDataValue","srcDataValue","data_src","IFRAME","VIDEO","srcDataName","load","setSources","setSourcesFunction","setValue","backgroundImage","setSourcesBgImage","callbackIfSet","argument","removeAllEventListeners","loadHandler","errorHandler","eventHandler","success","class_loaded","class_error","callback_load","callback_error","RegExp","removeClass","class_loading","addOneShotEventListeners","addAllEventListeners","managedTags","removeFromArray","elements","indexes","pop","LazyLoad","instanceSettings","_settings","assign","elements_selector","throttle","class_initial","skip_invisible","callback_set","callback_processed","callback_enter","_queryOriginNode","_previousLoopTime","_loopTimeout","_boundHandleScroll","handleScroll","bind","_isFirstLoop","update","_loopThroughElements","forceDownload","_elements","elementsLength","processedIndexes","isFirstLoop","offsetParent","_stopScrollHandler","_purgeElements","_startScrollHandler","_isHandlingScroll","now","Date","remainingTime","loadAll","force","revealElement","optionsItem","autoInitialize","lazyLoadOptions","matchesMethod","ElemProto","Element","prefixes","Unipointer","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","pageY","TapListener","bindTap","unbindTap","tapElement","isIgnoringMouseUp","pointerPoint","scrollX","scrollY","OFI","propRegex","testImg","Image","object-position","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","img","placeholder","onImageReady","naturalWidth","fixOne","el","parsed","fontFamily","props","exec","ofi","skipTest","srcset","src","naturalHeight","descriptors","set","ss","keepSrcUsable","warn","picturefill","pf","_","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","imgs","startAutoMode","getElementsByTagName","e","watchMQ","getOfiImageMaybe","HTMLImageElement","String","hijackAttributes","videos","isEdge","$el","parsePosition","fitIt","setCss","getCss","$wrap","replaceChild","wrapCss","overflow","key","border","margin","doWork","videoRatio","videoWidth","videoHeight","wrapWidth","clientWidth","wrapHeight","clientHeight","wrapRatio","newHeight","newWidth","autoplay","play","initialize","running","evt","initEvent","requestAnimationFrame","innerHTML","support","closedHeight","open","openedHeight","elementExpands","styles","_ref","setAccessibilityAttributes","root","findElementsWithTagName","summary","details","findClosestElementWithTagName","hasAttribute","eventIsSignificant","defaultPrevented","ctrlKey","metaKey","shiftKey","isContentEditable","onTogglingTrigger","which","preventDefault","triggerToggle","closest","head","insertAdjacentHTML","getOwnPropertyDescriptor","defineProperties","_value","wasOpen","_this2","MutationObserver","mutations","mutation","addedNodes","observe","subtree","childList","attributeName","attributes","isOpen","trim","Isotope","layoutMode","isJQueryFiltering","sortAscending","itemGUID","_sorters","_getSorters","sortHistory","_initLayoutMode","_updateItemsSortData","initialOpts","_layout","arrange","_getIsInstant","filtered","_filter","_bindArrangeComplete","_isInstant","_noTransition","_hideReveal","_sort","needReveal","needHide","isLayoutComplete","isHideComplete","isRevealComplete","arrangeParallelCallback","hiddenMatched","visibleUnmatched","_getFilterTest","isMatched","isHidden","is","updateSortData","getSortData","sorter","mungeSorter","split","query","attrMatch","getValue","child","textContent","getValueGetter","parser","sortDataParsers","_parseInt","_x","toString","val","_parseFloat","_x2","sortBy","sortBys","_getIsSameSortBy","itemSorter","sortAsc","itemA","itemB","sortData","isAscending","direction","getItemSorter","sort","_mode","mode","Error","_filterRevealAdded","insert","filteredInsertItems","_remove","shuffle","random","fn","returnValue","getFilteredItemElements","docElemStyle","transitionProperty","transition","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","_transn","ingProperties","clean","onEnd","css","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","_transitionTo","curX","curY","didNotMove","isTransitioning","transX","transY","transitionStyle","getTranslate","to","onTransitionEnd","isCleaning","_nonTransition","_removeStyles","_transition","from","enableTransition","transitionProps","duration","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","-webkit-transform","propertyName","isEmptyObj","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","delay","removeElem","getHideRevealTransitionEndProperty","onRevealTransitionEnd","styleProperty","optionStyle","onHideTransitionEnd","Masonry","MasonryMode","keepModeMethods","measureColumns","isFitWidth","fitWidth","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","firstItemElem","containerWidth","gutter","excess","remainder","colSpan","colPosition","horizontalOrder","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","offset","firstX","lastX","firstCol","floor","lastCol","stampMaxY","_getContainerFitWidth","unusedCols","previousWidth","FitRows","itemWidth","Vertical","horizontalAlignment","sorters","_destroy","side","renderPosition","setDefaultTarget","marginProperty","getPositionValue","wrapShift","lastCell","lastMargin","changeSelected","isSelected","classMethod","isAnimating","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","shiftWrapCells","firstSlide","positionX","progress","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","getFrictionFactor","isDraggable","dragForce","dragX","applyForce","Unidragger","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","_childUIPointerDownDrag","onDeactivateDrag","updateDraggable","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDownFocus","okayPointerDown","_pointerDownPreventDefault","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","focusNodes","INPUT","TEXTAREA","SELECT","nodeName","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","isTouchScrolling","_dragPointerUp","dragStart","dragStartPosition","_dragPointerMove","_dragMove","dragMove","previousDragX","originBound","dragMoveTime","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","md","isWrapAround","wrap","staticClick","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","_bindHandles","touchAction","handle","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","focused","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","onclick","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","onTap","createElementNS","path","pathMovements","shape","x0","x1","y1","x2","y2","x3","getArrowMovements","arrowShape","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","setDots","addDots","removeDots","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","hidden","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","flickity","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","getCellLazyImages","onload","complete","onerror","imagesLoaded","_createImagesLoaded","$","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","9","11","LoadingImage","Background","url","reURL","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","proxyImage","unbindEvents","makeJQueryPlugin","promise","IntersectionObserverEntry","intersectionRatio","registry","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_observationTargets","some","_registerInstance","entry","_monitorIntersections","_checkForIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","t","_parseRootMargin","opt_rootMargin","margins","parts","_monitoringIntersections","_monitoringInterval","setInterval","addEvent","_domObserver","characterData","clearInterval","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","performance","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","html","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","Number","toFixed","opt_options","timer","rootMargin","join","node","opt_useCapture","attachEvent","detatchEvent","host"],"mappings":"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","file":"vendor.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bbcb5cb6e2bb546e3398","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/fizzy-ui-utils/utils.js","/*!\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\n\n// WEBPACK FOOTER //\n// ./node_modules/get-size/get-size.js","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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'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 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\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\n var index;\n var initialIndex = this.options.initialIndex;\n if ( this.isInitActivated ) {\n index = this.selectedIndex;\n } else if ( initialIndex !== undefined ) {\n index = this.cells[ initialIndex ] ? initialIndex : 0;\n } else {\n index = 0;\n }\n // select instantly\n this.select( index, false, true );\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 or NodeList or HTMLElement} elems\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\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 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 = 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\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\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\n * @returns {Flickity.Cell} item\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\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\n * @returns {Flickit.Cell} 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, Selector String, or Number} selector\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 // 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\nproto.childUIPointerDown = function( event ) {\n this.emitEvent( 'childUIPointerDown', [ event ] );\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 if ( !this.isActive ) {\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#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.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} elem\n * @returns {Flickity}\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;\n\nreturn Flickity;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/flickity.js","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/ev-emitter/ev-emitter.js","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter 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 // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/outlayer/outlayer.js","/**\n * Isotope LayoutMode\n */\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 'get-size/get-size',\n 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('get-size'),\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.LayoutMode = factory(\n window.getSize,\n window.Outlayer\n );\n }\n\n}( window, function factory( getSize, Outlayer ) {\n 'use strict';\n\n // layout mode class\n function LayoutMode( isotope ) {\n this.isotope = isotope;\n // link properties\n if ( isotope ) {\n this.options = isotope.options[ this.namespace ];\n this.element = isotope.element;\n this.items = isotope.filteredItems;\n this.size = isotope.size;\n }\n }\n\n var proto = LayoutMode.prototype;\n\n /**\n * some methods should just defer to default Outlayer method\n * and reference the Isotope instance as `this`\n **/\n var facadeMethods = [\n '_resetLayout',\n '_getItemLayoutPosition',\n '_manageStamp',\n '_getContainerSize',\n '_getElementOffset',\n 'needsResizeLayout',\n '_getOption'\n ];\n\n facadeMethods.forEach( function( methodName ) {\n proto[ methodName ] = function() {\n return Outlayer.prototype[ methodName ].apply( this.isotope, arguments );\n };\n });\n\n // ----- ----- //\n\n // for horizontal layout modes, check vertical size\n proto.needsVerticalResizeLayout = function() {\n // don't trigger if size did not change\n var size = getSize( this.isotope.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.isotope.size && size;\n return hasSizes && size.innerHeight != this.isotope.size.innerHeight;\n };\n\n // ----- measurements ----- //\n\n proto._getMeasurement = function() {\n this.isotope._getMeasurement.apply( this, arguments );\n };\n\n proto.getColumnWidth = function() {\n this.getSegmentSize( 'column', 'Width' );\n };\n\n proto.getRowHeight = function() {\n this.getSegmentSize( 'row', 'Height' );\n };\n\n /**\n * get columnWidth or rowHeight\n * segment: 'column' or 'row'\n * size 'Width' or 'Height'\n **/\n proto.getSegmentSize = function( segment, size ) {\n var segmentName = segment + size;\n var outerSize = 'outer' + size;\n // columnWidth / outerWidth // rowHeight / outerHeight\n this._getMeasurement( segmentName, outerSize );\n // got rowHeight or columnWidth, we can chill\n if ( this[ segmentName ] ) {\n return;\n }\n // fall back to item of first element\n var firstItemSize = this.getFirstItemSize();\n this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] ||\n // or size of container\n this.isotope.size[ 'inner' + size ];\n };\n\n proto.getFirstItemSize = function() {\n var firstItem = this.isotope.filteredItems[0];\n return firstItem && firstItem.element && getSize( firstItem.element );\n };\n\n // ----- methods that should reference isotope ----- //\n\n proto.layout = function() {\n this.isotope.layout.apply( this.isotope, arguments );\n };\n\n proto.getSize = function() {\n this.isotope.getSize();\n this.size = this.isotope.size;\n };\n\n // -------------------------- create -------------------------- //\n\n LayoutMode.modes = {};\n\n LayoutMode.create = function( namespace, options ) {\n\n function Mode() {\n LayoutMode.apply( this, arguments );\n }\n\n Mode.prototype = Object.create( proto );\n Mode.prototype.constructor = Mode;\n\n // default options\n if ( options ) {\n Mode.options = options;\n }\n\n Mode.prototype.namespace = namespace;\n // register in Isotope\n LayoutMode.modes[ namespace ] = Mode;\n\n return Mode;\n };\n\n return LayoutMode;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/layout-mode.js","/*!\n * Flickity v2.1.2\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-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 /*jshint strict: false*/\n return Flickity;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/index.js","var getDefaultSettings = () => ({\n\telements_selector: \"img\",\n\tcontainer: window,\n\tthreshold: 300,\n\tthrottle: 150,\n\tdata_src: \"src\",\n\tdata_srcset: \"srcset\",\n\tdata_sizes: \"sizes\",\n\tclass_loading: \"loading\",\n\tclass_loaded: \"loaded\",\n\tclass_error: \"error\",\n\tclass_initial: \"initial\",\n\tskip_invisible: true,\n\tcallback_load: null,\n\tcallback_error: null,\n\tcallback_set: null,\n\tcallback_processed: null,\n\tcallback_enter: null,\n\tto_webp: false\n});\n\nconst getTopOffset = function(element) {\n\treturn (\n\t\telement.getBoundingClientRect().top +\n\t\twindow.pageYOffset -\n\t\telement.ownerDocument.documentElement.clientTop\n\t);\n};\n\nconst isBelowViewport = function(element, container, threshold) {\n\tconst fold =\n\t\tcontainer === window\n\t\t\t? window.innerHeight + window.pageYOffset\n\t\t\t: getTopOffset(container) + container.offsetHeight;\n\treturn fold <= getTopOffset(element) - threshold;\n};\n\nconst getLeftOffset = function(element) {\n\treturn (\n\t\telement.getBoundingClientRect().left +\n\t\twindow.pageXOffset -\n\t\telement.ownerDocument.documentElement.clientLeft\n\t);\n};\n\nconst isAtRightOfViewport = function(element, container, threshold) {\n\tconst documentWidth = window.innerWidth;\n\tconst fold =\n\t\tcontainer === window\n\t\t\t? documentWidth + window.pageXOffset\n\t\t\t: getLeftOffset(container) + documentWidth;\n\treturn fold <= getLeftOffset(element) - threshold;\n};\n\nconst isAboveViewport = function(element, container, threshold) {\n\tconst fold =\n\t\tcontainer === window ? window.pageYOffset : getTopOffset(container);\n\treturn fold >= getTopOffset(element) + threshold + element.offsetHeight;\n};\n\nconst isAtLeftOfViewport = function(element, container, threshold) {\n\tconst fold =\n\t\tcontainer === window ? window.pageXOffset : getLeftOffset(container);\n\treturn fold >= getLeftOffset(element) + threshold + element.offsetWidth;\n};\n\nfunction isInsideViewport(element, container, threshold) {\n\treturn (\n\t\t!isBelowViewport(element, container, threshold) &&\n\t\t!isAboveViewport(element, container, threshold) &&\n\t\t!isAtRightOfViewport(element, container, threshold) &&\n\t\t!isAtLeftOfViewport(element, container, threshold)\n\t);\n}\n\n/* Creates instance and notifies it through the window element */\nconst createInstance = function(classObj, options) {\n\tvar event;\n\tlet eventString = \"LazyLoad::Initialized\";\n\tlet instance = new classObj(options);\n\ttry {\n\t\t// Works in modern browsers\n\t\tevent = new CustomEvent(eventString, { detail: { instance } });\n\t} catch (err) {\n\t\t// Works in Internet Explorer (all versions)\n\t\tevent = document.createEvent(\"CustomEvent\");\n\t\tevent.initCustomEvent(eventString, false, false, { instance });\n\t}\n\twindow.dispatchEvent(event);\n};\n\n/* Auto initialization of one or more instances of lazyload, depending on the \n options passed in (plain object or an array) */\nfunction autoInitialize(classObj, options) {\n\tif (!options) {\n\t\treturn;\n\t}\n\tif (!options.length) {\n\t\t// Plain object\n\t\tcreateInstance(classObj, options);\n\t} else {\n\t\t// Array of objects\n\t\tfor (let i = 0, optionsItem; (optionsItem = options[i]); i += 1) {\n\t\t\tcreateInstance(classObj, optionsItem);\n\t\t}\n\t}\n}\n\nconst replaceExtToWebp = (value, condition) =>\n\tcondition ? value.replace(/\\.(jpe?g|png)/gi, \".webp\") : value;\n\nconst detectWebp = () => {\n\tvar webpString = \"image/webp\";\n\tvar canvas = document.createElement(\"canvas\");\n\n\tif (canvas.getContext && canvas.getContext(\"2d\")) {\n\t\treturn canvas.toDataURL(webpString).indexOf(`data:${webpString}`) === 0;\n\t}\n\n\treturn false;\n};\n\nconst runningOnBrowser = typeof window !== \"undefined\";\n\nconst isBot =\n\t(runningOnBrowser && !(\"onscroll\" in window)) ||\n\t/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent);\nconst supportsClassList =\n\trunningOnBrowser && \"classList\" in document.createElement(\"p\");\n\nconst supportsWebp = runningOnBrowser && detectWebp();\n\nconst addClass = (element, className) => {\n\tif (supportsClassList) {\n\t\telement.classList.add(className);\n\t\treturn;\n\t}\n\telement.className += (element.className ? \" \" : \"\") + className;\n};\n\nconst removeClass = (element, className) => {\n\tif (supportsClassList) {\n\t\telement.classList.remove(className);\n\t\treturn;\n\t}\n\telement.className = element.className.\n\t\treplace(new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), \" \").\n\t\treplace(/^\\s+/, \"\").\n\t\treplace(/\\s+$/, \"\");\n};\n\nconst dataPrefix = \"data-\";\nconst processedDataName = \"was-processed\";\nconst processedDataValue = \"true\";\n\nconst getData = (element, attribute) => {\n\treturn element.getAttribute(dataPrefix + attribute);\n};\n\nconst setData = (element, attribute, value) => {\n\tvar attrName = dataPrefix + attribute;\n\tif (value === null) {\n\t\telement.removeAttribute(attrName);\n\t\treturn;\n\t}\n\telement.setAttribute(attrName, value);\n};\n\nconst setWasProcessedData = element =>\n\tsetData(element, processedDataName, processedDataValue);\n\nconst getWasProcessedData = element =>\n\tgetData(element, processedDataName) === processedDataValue;\n\nconst setSourcesInChildren = function(\n\tparentTag,\n\tattrName,\n\tdataAttrName,\n\ttoWebpFlag\n) {\n\tfor (let i = 0, childTag; (childTag = parentTag.children[i]); i += 1) {\n\t\tif (childTag.tagName === \"SOURCE\") {\n\t\t\tlet attrValue = getData(childTag, dataAttrName);\n\t\t\tsetAttributeIfValue(childTag, attrName, attrValue, toWebpFlag);\n\t\t}\n\t}\n};\n\nconst setAttributeIfValue = function(\n\telement,\n\tattrName,\n\tvalue,\n\ttoWebpFlag\n) {\n\tif (!value) {\n\t\treturn;\n\t}\n\telement.setAttribute(attrName, replaceExtToWebp(value, toWebpFlag));\n};\n\nconst setSourcesImg = (element, settings) => {\n\tconst toWebpFlag = supportsWebp && settings.to_webp;\n\tconst srcsetDataName = settings.data_srcset;\n\tconst parent = element.parentNode;\n\n\tif (parent && parent.tagName === \"PICTURE\") {\n\t\tsetSourcesInChildren(parent, \"srcset\", srcsetDataName, toWebpFlag);\n\t}\n\tconst sizesDataValue = getData(element, settings.data_sizes);\n\tsetAttributeIfValue(element, \"sizes\", sizesDataValue);\n\tconst srcsetDataValue = getData(element, srcsetDataName);\n\tsetAttributeIfValue(element, \"srcset\", srcsetDataValue, toWebpFlag);\n\tconst srcDataValue = getData(element, settings.data_src);\n\tsetAttributeIfValue(element, \"src\", srcDataValue, toWebpFlag);\n};\n\nconst setSourcesIframe = (element, settings) => {\n\tconst srcDataValue = getData(element, settings.data_src);\n\n\tsetAttributeIfValue(element, \"src\", srcDataValue);\n};\n\nconst setSourcesVideo = (element, settings) => {\n\tconst srcDataName = settings.data_src;\n\tconst srcDataValue = getData(element, srcDataName);\n\n\tsetSourcesInChildren(element, \"src\", srcDataName);\n\tsetAttributeIfValue(element, \"src\", srcDataValue);\n\telement.load();\n};\n\nconst setSourcesBgImage = (element, settings) => {\n\tconst toWebpFlag = supportsWebp && settings.to_webp;\n\tconst srcDataValue = getData(element, settings.data_src);\n\n\tif (srcDataValue) {\n\t\tlet setValue = replaceExtToWebp(srcDataValue, toWebpFlag);\n\t\telement.style.backgroundImage = `url(\"${setValue}\")`;\n\t}\n};\n\nconst setSourcesFunctions = {\n\tIMG: setSourcesImg,\n\tIFRAME: setSourcesIframe,\n\tVIDEO: setSourcesVideo\n};\n\nconst setSources = (element, settings) => {\n\tconst tagName = element.tagName;\n\tconst setSourcesFunction = setSourcesFunctions[tagName];\n\tif (setSourcesFunction) {\n\t\tsetSourcesFunction(element, settings);\n\t\treturn;\n\t}\n\tsetSourcesBgImage(element, settings);\n};\n\nconst callbackIfSet = function(callback, argument) {\n\tif (callback) {\n\t\tcallback(argument);\n\t}\n};\n\nconst genericLoadEventName = \"load\";\nconst mediaLoadEventName = \"loadeddata\";\nconst errorEventName = \"error\";\n\nconst addEventListener = (element, eventName, handler) => {\n\telement.addEventListener(eventName, handler);\n};\n\nconst removeEventListener = (element, eventName, handler) => {\n\telement.removeEventListener(eventName, handler);\n};\n\nconst addAllEventListeners = (element, loadHandler, errorHandler) => {\n\taddEventListener(element, genericLoadEventName, loadHandler);\n\taddEventListener(element, mediaLoadEventName, loadHandler);\n\taddEventListener(element, errorEventName, errorHandler);\n};\n\nconst removeAllEventListeners = (element, loadHandler, errorHandler) => {\n\tremoveEventListener(element, genericLoadEventName, loadHandler);\n\tremoveEventListener(element, mediaLoadEventName, loadHandler);\n\tremoveEventListener(element, errorEventName, errorHandler);\n};\n\nconst eventHandler = function(event, success, settings) {\n\tconst className = success ? settings.class_loaded : settings.class_error;\n\tconst callback = success ? settings.callback_load : settings.callback_error;\n\tconst element = event.target;\n\n\tremoveClass(element, settings.class_loading);\n\taddClass(element, className);\n\tcallbackIfSet(callback, element);\n};\n\nconst addOneShotEventListeners = (element, settings) => {\n\tconst loadHandler = event => {\n\t\teventHandler(event, true, settings);\n\t\tremoveAllEventListeners(element, loadHandler, errorHandler);\n\t};\n\tconst errorHandler = event => {\n\t\teventHandler(event, false, settings);\n\t\tremoveAllEventListeners(element, loadHandler, errorHandler);\n\t};\n\taddAllEventListeners(element, loadHandler, errorHandler);\n};\n\nconst managedTags = [\"IMG\", \"IFRAME\", \"VIDEO\"];\n\nfunction revealElement(element, settings, force) {\n\tif (!force && getWasProcessedData(element)) {\n\t\treturn; // element has already been processed and force wasn't true\n\t}\n\tcallbackIfSet(settings.callback_enter, element);\n\tif (managedTags.indexOf(element.tagName) > -1) {\n\t\taddOneShotEventListeners(element, settings);\n\t\taddClass(element, settings.class_loading);\n\t}\n\tsetSources(element, settings);\n\tsetWasProcessedData(element);\n\tcallbackIfSet(settings.callback_set, element);\n}\n\nconst removeFromArray = (elements, indexes) => {\n\twhile (indexes.length) {\n\t\telements.splice(indexes.pop(), 1);\n\t}\n};\n\n/*\n * Constructor\n */\n\nconst LazyLoad = function(instanceSettings) {\n\tthis._settings = Object.assign({}, getDefaultSettings(), instanceSettings);\n\tthis._queryOriginNode =\n\t\tthis._settings.container === window\n\t\t\t? document\n\t\t\t: this._settings.container;\n\n\tthis._previousLoopTime = 0;\n\tthis._loopTimeout = null;\n\tthis._boundHandleScroll = this.handleScroll.bind(this);\n\n\tthis._isFirstLoop = true;\n\twindow.addEventListener(\"resize\", this._boundHandleScroll);\n\tthis.update();\n};\n\nLazyLoad.prototype = {\n\t_loopThroughElements: function(forceDownload) {\n\t\tconst settings = this._settings,\n\t\t\telements = this._elements,\n\t\t\telementsLength = !elements ? 0 : elements.length;\n\t\tlet i,\n\t\t\tprocessedIndexes = [],\n\t\t\tisFirstLoop = this._isFirstLoop;\n\n\t\tif (isFirstLoop) {\n\t\t\tthis._isFirstLoop = false;\n\t\t}\n\n\t\tif (elementsLength === 0) {\n\t\t\tthis._stopScrollHandler();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (i = 0; i < elementsLength; i++) {\n\t\t\tlet element = elements[i];\n\t\t\t/* If must skip_invisible and element is invisible, skip it */\n\t\t\tif (settings.skip_invisible && element.offsetParent === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tisBot ||\n\t\t\t\tforceDownload ||\n\t\t\t\tisInsideViewport(\n\t\t\t\t\telement,\n\t\t\t\t\tsettings.container,\n\t\t\t\t\tsettings.threshold\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (isFirstLoop) {\n\t\t\t\t\taddClass(element, settings.class_initial);\n\t\t\t\t}\n\t\t\t\tthis.load(element);\n\t\t\t\tprocessedIndexes.push(i);\n\t\t\t}\n\t\t}\n\n\t\t// Removing processed elements from this._elements.\n\t\tremoveFromArray(elements, processedIndexes);\n\t},\n\n\t_purgeElements: function() {\n\t\tconst elements = this._elements,\n\t\t\telementsLength = elements.length;\n\t\tlet i,\n\t\t\tprocessedIndexes = [];\n\n\t\tfor (i = 0; i < elementsLength; i++) {\n\t\t\tif (getWasProcessedData(elements[i])) {\n\t\t\t\tprocessedIndexes.push(i);\n\t\t\t}\n\t\t}\n\t\tremoveFromArray(elements, processedIndexes);\n\t},\n\n\t_startScrollHandler: function() {\n\t\tif (!this._isHandlingScroll) {\n\t\t\tthis._isHandlingScroll = true;\n\t\t\tthis._settings.container.addEventListener(\n\t\t\t\t\"scroll\",\n\t\t\t\tthis._boundHandleScroll\n\t\t\t);\n\t\t}\n\t},\n\n\t_stopScrollHandler: function() {\n\t\tif (this._isHandlingScroll) {\n\t\t\tthis._isHandlingScroll = false;\n\t\t\tthis._settings.container.removeEventListener(\n\t\t\t\t\"scroll\",\n\t\t\t\tthis._boundHandleScroll\n\t\t\t);\n\t\t}\n\t},\n\n\thandleScroll: function() {\n\t\tconst throttle = this._settings.throttle;\n\n\t\tif (throttle !== 0) {\n\t\t\tlet now = Date.now();\n\t\t\tlet remainingTime = throttle - (now - this._previousLoopTime);\n\t\t\tif (remainingTime <= 0 || remainingTime > throttle) {\n\t\t\t\tif (this._loopTimeout) {\n\t\t\t\t\tclearTimeout(this._loopTimeout);\n\t\t\t\t\tthis._loopTimeout = null;\n\t\t\t\t}\n\t\t\t\tthis._previousLoopTime = now;\n\t\t\t\tthis._loopThroughElements();\n\t\t\t} else if (!this._loopTimeout) {\n\t\t\t\tthis._loopTimeout = setTimeout(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tthis._previousLoopTime = Date.now();\n\t\t\t\t\t\tthis._loopTimeout = null;\n\t\t\t\t\t\tthis._loopThroughElements();\n\t\t\t\t\t}.bind(this),\n\t\t\t\t\tremainingTime\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._loopThroughElements();\n\t\t}\n\t},\n\n\tloadAll: function() {\n\t\tthis._loopThroughElements(true);\n\t},\n\n\tupdate: function() {\n\t\t// Converts to array the nodeset obtained querying the DOM from _queryOriginNode with elements_selector\n\t\tthis._elements = Array.prototype.slice.call(\n\t\t\tthis._queryOriginNode.querySelectorAll(\n\t\t\t\tthis._settings.elements_selector\n\t\t\t)\n\t\t);\n\t\tthis._purgeElements();\n\t\tthis._loopThroughElements();\n\t\tthis._startScrollHandler();\n\t},\n\n\tdestroy: function() {\n\t\twindow.removeEventListener(\"resize\", this._boundHandleScroll);\n\t\tif (this._loopTimeout) {\n\t\t\tclearTimeout(this._loopTimeout);\n\t\t\tthis._loopTimeout = null;\n\t\t}\n\t\tthis._stopScrollHandler();\n\t\tthis._elements = null;\n\t\tthis._queryOriginNode = null;\n\t\tthis._settings = null;\n\t},\n\n\tload: function(element, force) {\n\t\trevealElement(element, this._settings, force);\n\t}\n};\n\n/* Automatic instances creation if required (useful for async script loading) */\nif (runningOnBrowser) {\n\tautoInitialize(LazyLoad, window.lazyLoadOptions);\n}\n\nexport default LazyLoad;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/vanilla-lazyload/dist/lazyload.es2015.js","/**\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\n\n// WEBPACK FOOTER //\n// ./node_modules/desandro-matches-selector/matches-selector.js","/*!\n * Unipointer v2.3.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 ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/unipointer/unipointer.js","/*!\n * Tap listener v2.0.0\n * listens to taps\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.TapListener = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- TapListener -------------------------- //\n\nfunction TapListener( elem ) {\n this.bindTap( elem );\n}\n\n// inherit Unipointer & EventEmitter\nvar proto = TapListener.prototype = Object.create( Unipointer.prototype );\n\n/**\n * bind tap event to element\n * @param {Element} elem\n */\nproto.bindTap = function( elem ) {\n if ( !elem ) {\n return;\n }\n this.unbindTap();\n this.tapElement = elem;\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindTap = function() {\n if ( !this.tapElement ) {\n return;\n }\n this._bindStartEvent( this.tapElement, true );\n delete this.tapElement;\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n var pointerPoint = Unipointer.getPointerPoint( pointer );\n var boundingRect = this.tapElement.getBoundingClientRect();\n var scrollX = window.pageXOffset;\n var scrollY = window.pageYOffset;\n // calculate if pointer is inside tapElement\n var isInside = pointerPoint.x >= boundingRect.left + scrollX &&\n pointerPoint.x <= boundingRect.right + scrollX &&\n pointerPoint.y >= boundingRect.top + scrollY &&\n pointerPoint.y <= boundingRect.bottom + scrollY;\n // trigger callback if pointer is inside element\n if ( isInside ) {\n this.emitEvent( 'tap', [ event, pointer ] );\n }\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 var _this = this;\n setTimeout( function() {\n delete _this.isIgnoringMouseUp;\n }, 400 );\n }\n};\n\nproto.destroy = function() {\n this.pointerDone();\n this.unbindTap();\n};\n\n// ----- ----- //\n\nreturn TapListener;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/tap-listener/tap-listener.js","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/object-fit-images/dist/ofi.common-js.js","/**\n * Object Fit Videos\n * Polyfill for object-fit and object-position CSS properties on video elements\n * Covers IE9, IE10, IE11, Edge, Safari <10\n *\n * Usage\n * In your CSS, add a special font-family tag for IE/Edge\n * video {\n * object-fit: cover;\n * font-family: 'object-fit: cover;';\n * }\n *\n * Before the closing body tag, or whenever the DOM is ready,\n * make the JavaScript call\n * objectFitVideos();\n *\n * All video elements with the special CSS property will be targeted\n *\n * @license MIT (https://opensource.org/licenses/MIT)\n * @author Todd Miller \n * @version 1.0.2\n * @changelog\n * 2016-08-19 - Adds object-position support.\n * 2016-08-19 - Add throttle function for more performant resize events\n * 2016-08-19 - Initial release with object-fit support, and\n * object-position default 'center'\n * 2016-10-14 - No longer relies on window load event, instead requires a specific\n * function call to initialize the videos for object fit and position.\n * 2016-11-28 - Support CommonJS environment, courtesy of @msorensson\n * 2016-12-05 - Refactors the throttling function to support IE\n * 2017-09-26 - Fix an issue with autplay not working on polyfilled videos\n * - Adds the capability to specify elements to polyfill,\n * instead of just checking every video element for the\n * CSS property. Slight performance gain in most usecases,\n * and a bigger gain in a few usecases.\n * 2017-10-24 - Add user agent check to enable polyfill for all Edge browsers.\n * object-fit is supported on Edge >= 16, but currently just for images.\n */\nvar objectFitVideos = function (videos) {\n 'use strict';\n\n var isEdge = navigator.userAgent.indexOf('Edge/') >= 0;\n\n var testImg = new Image(),\n supportsObjectFit = 'object-fit' in testImg.style && !isEdge,\n supportsObjectPosition = 'object-position' in testImg.style && !isEdge,\n propRegex = /(object-fit|object-position)\\s*:\\s*([-\\w\\s%]+)/g;\n\n if (!supportsObjectFit || !supportsObjectPosition) {\n initialize(videos);\n throttle('resize', 'optimizedResize');\n }\n\n /**\n * Parse the style and look for the special font-family tag\n * @param {object} $el The element to parse\n * @return {object} The font-family properties we're interested in\n */\n function getStyle ($el) {\n var style = getComputedStyle($el).fontFamily,\n parsed = null,\n props = {};\n\n while ((parsed = propRegex.exec(style)) !== null) {\n props[parsed[1]] = parsed[2];\n }\n\n if (props['object-position'])\n return parsePosition(props);\n\n return props;\n }\n\n /**\n * Initialize all the relevant video elements and get them fitted\n */\n function initialize (videos) {\n var index = -1;\n\n if (!videos) {\n // if no videos given, query all video elements\n videos = document.querySelectorAll('video');\n } else if (!('length' in videos)) {\n // convert to an array for proper looping if an array or NodeList\n // was not given\n videos = [videos];\n }\n\n while (videos[++index]) {\n var style = getStyle(videos[index]);\n\n // only do work if the property is on the element\n if (style['object-fit'] || style['object-position']) {\n // set the default values\n style['object-fit'] = style['object-fit'] || 'fill';\n fitIt(videos[index], style);\n }\n }\n }\n\n /**\n * Object Fit\n * @param {object} $el Element to fit\n * @return {object} The element's relevant properties\n */\n function fitIt ($el, style) {\n // fill is the default behavior, no action is necessary\n if (style['object-fit'] === 'fill')\n return;\n\n // convenience style properties on the source element\n var setCss = $el.style,\n getCss = window.getComputedStyle($el);\n\n // create and insert a wrapper element\n var $wrap = document.createElement('object-fit');\n $wrap.appendChild($el.parentNode.replaceChild($wrap, $el));\n\n // style the wrapper element to mostly match the source element\n var wrapCss = {\n height: '100%',\n width: '100%',\n boxSizing: 'content-box',\n display: 'inline-block',\n overflow: 'hidden'\n };\n\n 'backgroundColor backgroundImage borderColor borderStyle borderWidth bottom fontSize lineHeight left opacity margin position right top visibility'.replace(/\\w+/g, function (key) {\n wrapCss[key] = getCss[key];\n });\n\n for (var key in wrapCss)\n $wrap.style[key] = wrapCss[key];\n\n // give the source element some saner styles\n setCss.border = setCss.margin = setCss.padding = 0;\n setCss.display = 'block';\n setCss.opacity = 1;\n\n // set up the event handlers\n $el.addEventListener('loadedmetadata', doWork);\n window.addEventListener('optimizedResize', doWork);\n\n // we may have missed the loadedmetadata event, so if the video has loaded\n // enough data, just drop the event listener and execute\n if ($el.readyState >= 1) {\n $el.removeEventListener('loadedmetadata', doWork);\n doWork();\n }\n\n /**\n * Do the actual sizing. Math.\n * @methodOf fitIt\n */\n function doWork () {\n // the actual size and ratio of the video\n // we do this here, even though it doesn't change, because\n // at this point we can be sure the metadata has loaded\n var videoWidth = $el.videoWidth,\n videoHeight = $el.videoHeight,\n videoRatio = videoWidth / videoHeight;\n\n var wrapWidth = $wrap.clientWidth,\n wrapHeight = $wrap.clientHeight,\n wrapRatio = wrapWidth / wrapHeight;\n\n var newHeight = 0,\n newWidth = 0;\n setCss.marginLeft = setCss.marginTop = 0;\n\n // basically we do the opposite action for contain and cover,\n // depending on whether the video aspect ratio is less than or\n // greater than the wrapper's aspect ratio\n if (videoRatio < wrapRatio ?\n style['object-fit'] === 'contain' : style['object-fit'] === 'cover') {\n newHeight = wrapHeight * videoRatio;\n newWidth = wrapWidth / videoRatio;\n\n setCss.width = Math.round(newHeight) + 'px';\n setCss.height = wrapHeight + 'px';\n\n if (style['object-position-x'] === 'left')\n setCss.marginLeft = 0;\n else if (style['object-position-x'] === 'right')\n setCss.marginLeft = Math.round(wrapWidth - newHeight) + 'px';\n else\n setCss.marginLeft = Math.round((wrapWidth - newHeight) / 2) + 'px';\n } else {\n newWidth = wrapWidth / videoRatio;\n\n setCss.width = wrapWidth + 'px';\n setCss.height = Math.round(newWidth) + 'px';\n\n if (style['object-position-y'] === 'top')\n setCss.marginTop = 0;\n else if (style['object-position-y'] === 'bottom')\n setCss.marginTop = Math.round(wrapHeight - newWidth) + 'px';\n else\n setCss.marginTop = Math.round((wrapHeight - newWidth) / 2) + 'px';\n }\n\n // play the video if autoplay is set\n if ($el.autoplay)\n $el.play();\n }\n }\n\n /**\n * Split the object-position property into x and y position properties\n * @param {object} style Relevant element styles\n * @return {object} The style object with the added x and y props\n */\n function parsePosition (style) {\n if (~style['object-position'].indexOf('left'))\n style['object-position-x'] = 'left';\n else if (~style['object-position'].indexOf('right'))\n style['object-position-x'] = 'right';\n else\n style['object-position-x'] = 'center';\n\n if (~style['object-position'].indexOf('top'))\n style['object-position-y'] = 'top';\n else if (~style['object-position'].indexOf('bottom'))\n style['object-position-y'] = 'bottom';\n else\n style['object-position-y'] = 'center';\n\n return style;\n }\n\n /**\n * Throttle an event with RequestAnimationFrame API for better performance\n * @param {string} type The event to throttle\n * @param {string} name Custom event name to listen for\n * @param {object} obj Optional object to attach the event to\n */\n function throttle (type, name, obj) {\n obj = obj || window;\n var running = false,\n evt = null;\n\n // IE does not support the CustomEvent constructor\n // so if that fails do it the old way\n try {\n evt = new CustomEvent(name);\n } catch (e) {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n var func = function () {\n if (running) return;\n\n running = true;\n requestAnimationFrame(function () {\n obj.dispatchEvent(evt);\n running = false;\n });\n };\n\n obj.addEventListener(type, func);\n }\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined')\n module.exports = objectFitVideos;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/object-fit-videos/object-fit-videos.js","/*\nDetails Element Polyfill 2.3.1\nCopyright © 2019 Javan Makhmali\n */\n(function() {\n \"use strict\";\n var element = document.createElement(\"details\");\n element.innerHTML = \"ab\";\n element.setAttribute(\"style\", \"position: absolute; left: -9999px\");\n var support = {\n open: \"open\" in element && elementExpands(),\n toggle: \"ontoggle\" in element\n };\n function elementExpands() {\n (document.body || document.documentElement).appendChild(element);\n var closedHeight = element.offsetHeight;\n element.open = true;\n var openedHeight = element.offsetHeight;\n element.parentNode.removeChild(element);\n return closedHeight != openedHeight;\n }\n var styles = '\\ndetails, summary {\\n display: block;\\n}\\ndetails:not([open]) > *:not(summary) {\\n display: none;\\n}\\nsummary::before {\\n content: \"►\";\\n padding-right: 0.3rem;\\n font-size: 0.6rem;\\n cursor: default;\\n}\\n[open] > summary::before {\\n content: \"▼\";\\n}\\n';\n var _ref = [], forEach = _ref.forEach, slice = _ref.slice;\n if (!support.open) {\n polyfillStyles();\n polyfillProperties();\n polyfillToggle();\n polyfillAccessibility();\n }\n if (support.open && !support.toggle) {\n polyfillToggleEvent();\n }\n function polyfillStyles() {\n document.head.insertAdjacentHTML(\"afterbegin\", \"\");\n }\n function polyfillProperties() {\n var prototype = document.createElement(\"details\").constructor.prototype;\n var setAttribute = prototype.setAttribute, removeAttribute = prototype.removeAttribute;\n var open = Object.getOwnPropertyDescriptor(prototype, \"open\");\n Object.defineProperties(prototype, {\n open: {\n get: function get() {\n if (this.tagName == \"DETAILS\") {\n return this.hasAttribute(\"open\");\n } else {\n if (open && open.get) {\n return open.get.call(this);\n }\n }\n },\n set: function set(value) {\n if (this.tagName == \"DETAILS\") {\n return value ? this.setAttribute(\"open\", \"\") : this.removeAttribute(\"open\");\n } else {\n if (open && open.set) {\n return open.set.call(this, value);\n }\n }\n }\n },\n setAttribute: {\n value: function value(name, _value) {\n var _this = this;\n var call = function call() {\n return setAttribute.call(_this, name, _value);\n };\n if (name == \"open\" && this.tagName == \"DETAILS\") {\n var wasOpen = this.hasAttribute(\"open\");\n var result = call();\n if (!wasOpen) {\n var summary = this.querySelector(\"summary\");\n if (summary) summary.setAttribute(\"aria-expanded\", true);\n triggerToggle(this);\n }\n return result;\n }\n return call();\n }\n },\n removeAttribute: {\n value: function value(name) {\n var _this2 = this;\n var call = function call() {\n return removeAttribute.call(_this2, name);\n };\n if (name == \"open\" && this.tagName == \"DETAILS\") {\n var wasOpen = this.hasAttribute(\"open\");\n var result = call();\n if (wasOpen) {\n var summary = this.querySelector(\"summary\");\n if (summary) summary.setAttribute(\"aria-expanded\", false);\n triggerToggle(this);\n }\n return result;\n }\n return call();\n }\n }\n });\n }\n function polyfillToggle() {\n onTogglingTrigger(function(element) {\n element.hasAttribute(\"open\") ? element.removeAttribute(\"open\") : element.setAttribute(\"open\", \"\");\n });\n }\n function polyfillToggleEvent() {\n if (window.MutationObserver) {\n new MutationObserver(function(mutations) {\n forEach.call(mutations, function(mutation) {\n var target = mutation.target, attributeName = mutation.attributeName;\n if (target.tagName == \"DETAILS\" && attributeName == \"open\") {\n triggerToggle(target);\n }\n });\n }).observe(document.documentElement, {\n attributes: true,\n subtree: true\n });\n } else {\n onTogglingTrigger(function(element) {\n var wasOpen = element.getAttribute(\"open\");\n setTimeout(function() {\n var isOpen = element.getAttribute(\"open\");\n if (wasOpen != isOpen) {\n triggerToggle(element);\n }\n }, 1);\n });\n }\n }\n function polyfillAccessibility() {\n setAccessibilityAttributes(document);\n if (window.MutationObserver) {\n new MutationObserver(function(mutations) {\n forEach.call(mutations, function(mutation) {\n forEach.call(mutation.addedNodes, setAccessibilityAttributes);\n });\n }).observe(document.documentElement, {\n subtree: true,\n childList: true\n });\n } else {\n document.addEventListener(\"DOMNodeInserted\", function(event) {\n setAccessibilityAttributes(event.target);\n });\n }\n }\n function setAccessibilityAttributes(root) {\n findElementsWithTagName(root, \"SUMMARY\").forEach(function(summary) {\n var details = findClosestElementWithTagName(summary, \"DETAILS\");\n summary.setAttribute(\"aria-expanded\", details.hasAttribute(\"open\"));\n if (!summary.hasAttribute(\"tabindex\")) summary.setAttribute(\"tabindex\", \"0\");\n if (!summary.hasAttribute(\"role\")) summary.setAttribute(\"role\", \"button\");\n });\n }\n function eventIsSignificant(event) {\n return !(event.defaultPrevented || event.ctrlKey || event.metaKey || event.shiftKey || event.target.isContentEditable);\n }\n function onTogglingTrigger(callback) {\n addEventListener(\"click\", function(event) {\n if (eventIsSignificant(event)) {\n if (event.which <= 1) {\n var element = findClosestElementWithTagName(event.target, \"SUMMARY\");\n if (element && element.parentNode && element.parentNode.tagName == \"DETAILS\") {\n callback(element.parentNode);\n }\n }\n }\n }, false);\n addEventListener(\"keydown\", function(event) {\n if (eventIsSignificant(event)) {\n if (event.keyCode == 13 || event.keyCode == 32) {\n var element = findClosestElementWithTagName(event.target, \"SUMMARY\");\n if (element && element.parentNode && element.parentNode.tagName == \"DETAILS\") {\n callback(element.parentNode);\n event.preventDefault();\n }\n }\n }\n }, false);\n }\n function triggerToggle(element) {\n var event = document.createEvent(\"Event\");\n event.initEvent(\"toggle\", false, false);\n element.dispatchEvent(event);\n }\n function findElementsWithTagName(root, tagName) {\n return (root.tagName == tagName ? [ root ] : []).concat(typeof root.getElementsByTagName == \"function\" ? slice.call(root.getElementsByTagName(tagName)) : []);\n }\n function findClosestElementWithTagName(element, tagName) {\n if (typeof element.closest == \"function\") {\n return element.closest(tagName);\n } else {\n while (element) {\n if (element.tagName == tagName) {\n return element;\n } else {\n element = element.parentNode;\n }\n }\n }\n }\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/details-element-polyfill/dist/details-element-polyfill.js","/*!\n * Isotope v3.0.6\n *\n * Licensed GPLv3 for open source use\n * or Isotope Commercial License for commercial use\n *\n * https://isotope.metafizzy.co\n * Copyright 2010-2018 Metafizzy\n */\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 'outlayer/outlayer',\n 'get-size/get-size',\n 'desandro-matches-selector/matches-selector',\n 'fizzy-ui-utils/utils',\n './item',\n './layout-mode',\n // include default layout modes\n './layout-modes/masonry',\n './layout-modes/fit-rows',\n './layout-modes/vertical'\n ],\n function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) {\n return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('outlayer'),\n require('get-size'),\n require('desandro-matches-selector'),\n require('fizzy-ui-utils'),\n require('./item'),\n require('./layout-mode'),\n // include default layout modes\n require('./layout-modes/masonry'),\n require('./layout-modes/fit-rows'),\n require('./layout-modes/vertical')\n );\n } else {\n // browser global\n window.Isotope = factory(\n window,\n window.Outlayer,\n window.getSize,\n window.matchesSelector,\n window.fizzyUIUtils,\n window.Isotope.Item,\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( window, Outlayer, getSize, matchesSelector, utils,\n Item, LayoutMode ) {\n\n'use strict';\n\n// -------------------------- vars -------------------------- //\n\nvar jQuery = window.jQuery;\n\n// -------------------------- helpers -------------------------- //\n\nvar trim = String.prototype.trim ?\n function( str ) {\n return str.trim();\n } :\n function( str ) {\n return str.replace( /^\\s+|\\s+$/g, '' );\n };\n\n// -------------------------- isotopeDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Isotope = Outlayer.create( 'isotope', {\n layoutMode: 'masonry',\n isJQueryFiltering: true,\n sortAscending: true\n });\n\n Isotope.Item = Item;\n Isotope.LayoutMode = LayoutMode;\n\n var proto = Isotope.prototype;\n\n proto._create = function() {\n this.itemGUID = 0;\n // functions that sort items\n this._sorters = {};\n this._getSorters();\n // call super\n Outlayer.prototype._create.call( this );\n\n // create layout modes\n this.modes = {};\n // start filteredItems with all items\n this.filteredItems = this.items;\n // keep of track of sortBys\n this.sortHistory = [ 'original-order' ];\n // create from registered layout modes\n for ( var name in LayoutMode.modes ) {\n this._initLayoutMode( name );\n }\n };\n\n proto.reloadItems = function() {\n // reset item ID counter\n this.itemGUID = 0;\n // call super\n Outlayer.prototype.reloadItems.call( this );\n };\n\n proto._itemize = function() {\n var items = Outlayer.prototype._itemize.apply( this, arguments );\n // assign ID for original-order\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n item.id = this.itemGUID++;\n }\n this._updateItemsSortData( items );\n return items;\n };\n\n\n // -------------------------- layout -------------------------- //\n\n proto._initLayoutMode = function( name ) {\n var Mode = LayoutMode.modes[ name ];\n // set mode options\n // HACK extend initial options, back-fill in default options\n var initialOpts = this.options[ name ] || {};\n this.options[ name ] = Mode.options ?\n utils.extend( Mode.options, initialOpts ) : initialOpts;\n // init layout mode instance\n this.modes[ name ] = new Mode( this );\n };\n\n\n proto.layout = function() {\n // if first time doing layout, do all magic\n if ( !this._isLayoutInited && this._getOption('initLayout') ) {\n this.arrange();\n return;\n }\n this._layout();\n };\n\n // private method to be used in layout() & magic()\n proto._layout = function() {\n // don't animate first layout\n var isInstant = this._getIsInstant();\n // layout flow\n this._resetLayout();\n this._manageStamps();\n this.layoutItems( this.filteredItems, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n };\n\n // filter + sort + layout\n proto.arrange = function( opts ) {\n // set any options pass\n this.option( opts );\n this._getIsInstant();\n // filter, sort, and layout\n\n // filter\n var filtered = this._filter( this.items );\n this.filteredItems = filtered.matches;\n\n this._bindArrangeComplete();\n\n if ( this._isInstant ) {\n this._noTransition( this._hideReveal, [ filtered ] );\n } else {\n this._hideReveal( filtered );\n }\n\n this._sort();\n this._layout();\n };\n // alias to _init for main plugin method\n proto._init = proto.arrange;\n\n proto._hideReveal = function( filtered ) {\n this.reveal( filtered.needReveal );\n this.hide( filtered.needHide );\n };\n\n // HACK\n // Don't animate/transition first layout\n // Or don't animate/transition other layouts\n proto._getIsInstant = function() {\n var isLayoutInstant = this._getOption('layoutInstant');\n var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :\n !this._isLayoutInited;\n this._isInstant = isInstant;\n return isInstant;\n };\n\n // listen for layoutComplete, hideComplete and revealComplete\n // to trigger arrangeComplete\n proto._bindArrangeComplete = function() {\n // listen for 3 events to trigger arrangeComplete\n var isLayoutComplete, isHideComplete, isRevealComplete;\n var _this = this;\n function arrangeParallelCallback() {\n if ( isLayoutComplete && isHideComplete && isRevealComplete ) {\n _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] );\n }\n }\n this.once( 'layoutComplete', function() {\n isLayoutComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'hideComplete', function() {\n isHideComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'revealComplete', function() {\n isRevealComplete = true;\n arrangeParallelCallback();\n });\n };\n\n // -------------------------- filter -------------------------- //\n\n proto._filter = function( items ) {\n var filter = this.options.filter;\n filter = filter || '*';\n var matches = [];\n var hiddenMatched = [];\n var visibleUnmatched = [];\n\n var test = this._getFilterTest( filter );\n\n // test each item\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n if ( item.isIgnored ) {\n continue;\n }\n // add item to either matched or unmatched group\n var isMatched = test( item );\n // item.isFilterMatched = isMatched;\n // add to matches if its a match\n if ( isMatched ) {\n matches.push( item );\n }\n // add to additional group if item needs to be hidden or revealed\n if ( isMatched && item.isHidden ) {\n hiddenMatched.push( item );\n } else if ( !isMatched && !item.isHidden ) {\n visibleUnmatched.push( item );\n }\n }\n\n // return collections of items to be manipulated\n return {\n matches: matches,\n needReveal: hiddenMatched,\n needHide: visibleUnmatched\n };\n };\n\n // get a jQuery, function, or a matchesSelector test given the filter\n proto._getFilterTest = function( filter ) {\n if ( jQuery && this.options.isJQueryFiltering ) {\n // use jQuery\n return function( item ) {\n return jQuery( item.element ).is( filter );\n };\n }\n if ( typeof filter == 'function' ) {\n // use filter as function\n return function( item ) {\n return filter( item.element );\n };\n }\n // default, use filter as selector string\n return function( item ) {\n return matchesSelector( item.element, filter );\n };\n };\n\n // -------------------------- sorting -------------------------- //\n\n /**\n * @params {Array} elems\n * @public\n */\n proto.updateSortData = function( elems ) {\n // get items\n var items;\n if ( elems ) {\n elems = utils.makeArray( elems );\n items = this.getItems( elems );\n } else {\n // update all items if no elems provided\n items = this.items;\n }\n\n this._getSorters();\n this._updateItemsSortData( items );\n };\n\n proto._getSorters = function() {\n var getSortData = this.options.getSortData;\n for ( var key in getSortData ) {\n var sorter = getSortData[ key ];\n this._sorters[ key ] = mungeSorter( sorter );\n }\n };\n\n /**\n * @params {Array} items - of Isotope.Items\n * @private\n */\n proto._updateItemsSortData = function( items ) {\n // do not update if no items\n var len = items && items.length;\n\n for ( var i=0; len && i < len; i++ ) {\n var item = items[i];\n item.updateSortData();\n }\n };\n\n // ----- munge sorter ----- //\n\n // encapsulate this, as we just need mungeSorter\n // other functions in here are just for munging\n var mungeSorter = ( function() {\n // add a magic layer to sorters for convienent shorthands\n // `.foo-bar` will use the text of .foo-bar querySelector\n // `[foo-bar]` will use attribute\n // you can also add parser\n // `.foo-bar parseInt` will parse that as a number\n function mungeSorter( sorter ) {\n // if not a string, return function or whatever it is\n if ( typeof sorter != 'string' ) {\n return sorter;\n }\n // parse the sorter string\n var args = trim( sorter ).split(' ');\n var query = args[0];\n // check if query looks like [an-attribute]\n var attrMatch = query.match( /^\\[(.+)\\]$/ );\n var attr = attrMatch && attrMatch[1];\n var getValue = getValueGetter( attr, query );\n // use second argument as a parser\n var parser = Isotope.sortDataParsers[ args[1] ];\n // parse the value, if there was a parser\n sorter = parser ? function( elem ) {\n return elem && parser( getValue( elem ) );\n } :\n // otherwise just return value\n function( elem ) {\n return elem && getValue( elem );\n };\n\n return sorter;\n }\n\n // get an attribute getter, or get text of the querySelector\n function getValueGetter( attr, query ) {\n // if query looks like [foo-bar], get attribute\n if ( attr ) {\n return function getAttribute( elem ) {\n return elem.getAttribute( attr );\n };\n }\n\n // otherwise, assume its a querySelector, and get its text\n return function getChildText( elem ) {\n var child = elem.querySelector( query );\n return child && child.textContent;\n };\n }\n\n return mungeSorter;\n })();\n\n // parsers used in getSortData shortcut strings\n Isotope.sortDataParsers = {\n 'parseInt': function( val ) {\n return parseInt( val, 10 );\n },\n 'parseFloat': function( val ) {\n return parseFloat( val );\n }\n };\n\n // ----- sort method ----- //\n\n // sort filteredItem order\n proto._sort = function() {\n if ( !this.options.sortBy ) {\n return;\n }\n // keep track of sortBy History\n var sortBys = utils.makeArray( this.options.sortBy );\n if ( !this._getIsSameSortBy( sortBys ) ) {\n // concat all sortBy and sortHistory, add to front, oldest goes in last\n this.sortHistory = sortBys.concat( this.sortHistory );\n }\n // sort magic\n var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending );\n this.filteredItems.sort( itemSorter );\n };\n\n // check if sortBys is same as start of sortHistory\n proto._getIsSameSortBy = function( sortBys ) {\n for ( var i=0; i < sortBys.length; i++ ) {\n if ( sortBys[i] != this.sortHistory[i] ) {\n return false;\n }\n }\n return true;\n };\n\n // returns a function used for sorting\n function getItemSorter( sortBys, sortAsc ) {\n return function sorter( itemA, itemB ) {\n // cycle through all sortKeys\n for ( var i = 0; i < sortBys.length; i++ ) {\n var sortBy = sortBys[i];\n var a = itemA.sortData[ sortBy ];\n var b = itemB.sortData[ sortBy ];\n if ( a > b || a < b ) {\n // if sortAsc is an object, use the value given the sortBy key\n var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc;\n var direction = isAscending ? 1 : -1;\n return ( a > b ? 1 : -1 ) * direction;\n }\n }\n return 0;\n };\n }\n\n // -------------------------- methods -------------------------- //\n\n // get layout mode\n proto._mode = function() {\n var layoutMode = this.options.layoutMode;\n var mode = this.modes[ layoutMode ];\n if ( !mode ) {\n // TODO console.error\n throw new Error( 'No layout mode: ' + layoutMode );\n }\n // HACK sync mode's options\n // any options set after init for layout mode need to be synced\n mode.options = this.options[ layoutMode ];\n return mode;\n };\n\n proto._resetLayout = function() {\n // trigger original reset layout\n Outlayer.prototype._resetLayout.call( this );\n this._mode()._resetLayout();\n };\n\n proto._getItemLayoutPosition = function( item ) {\n return this._mode()._getItemLayoutPosition( item );\n };\n\n proto._manageStamp = function( stamp ) {\n this._mode()._manageStamp( stamp );\n };\n\n proto._getContainerSize = function() {\n return this._mode()._getContainerSize();\n };\n\n proto.needsResizeLayout = function() {\n return this._mode().needsResizeLayout();\n };\n\n // -------------------------- adding & removing -------------------------- //\n\n // HEADS UP overwrites default Outlayer appended\n proto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // add to filteredItems\n this.filteredItems = this.filteredItems.concat( filteredItems );\n };\n\n // HEADS UP overwrites default Outlayer prepended\n proto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // layout previous items\n this.layoutItems( this.filteredItems );\n // add to items and filteredItems\n this.filteredItems = filteredItems.concat( this.filteredItems );\n this.items = items.concat( this.items );\n };\n\n proto._filterRevealAdded = function( items ) {\n var filtered = this._filter( items );\n this.hide( filtered.needHide );\n // reveal all new items\n this.reveal( filtered.matches );\n // layout new items, no transition\n this.layoutItems( filtered.matches, true );\n return filtered.matches;\n };\n\n /**\n * Filter, sort, and layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\n proto.insert = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // append item elements\n var i, item;\n var len = items.length;\n for ( i=0; i < len; i++ ) {\n item = items[i];\n this.element.appendChild( item.element );\n }\n // filter new stuff\n var filteredInsertItems = this._filter( items ).matches;\n // set flag\n for ( i=0; i < len; i++ ) {\n items[i].isLayoutInstant = true;\n }\n this.arrange();\n // reset flag\n for ( i=0; i < len; i++ ) {\n delete items[i].isLayoutInstant;\n }\n this.reveal( filteredInsertItems );\n };\n\n var _remove = proto.remove;\n proto.remove = function( elems ) {\n elems = utils.makeArray( elems );\n var removeItems = this.getItems( elems );\n // do regular thing\n _remove.call( this, elems );\n // bail if no items to remove\n var len = removeItems && removeItems.length;\n // remove elems from filteredItems\n for ( var i=0; len && i < len; i++ ) {\n var item = removeItems[i];\n // remove item from collection\n utils.removeFrom( this.filteredItems, item );\n }\n };\n\n proto.shuffle = function() {\n // update random sortData\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n item.sortData.random = Math.random();\n }\n this.options.sortBy = 'random';\n this._sort();\n this._layout();\n };\n\n /**\n * trigger fn without transition\n * kind of hacky to have this in the first place\n * @param {Function} fn\n * @param {Array} args\n * @returns ret\n * @private\n */\n proto._noTransition = function( fn, args ) {\n // save transitionDuration before disabling\n var transitionDuration = this.options.transitionDuration;\n // disable transition\n this.options.transitionDuration = 0;\n // do it\n var returnValue = fn.apply( this, args );\n // re-enable transition for reveal\n this.options.transitionDuration = transitionDuration;\n return returnValue;\n };\n\n // ----- helper methods ----- //\n\n /**\n * getter method for getting filtered item elements\n * @returns {Array} elems - collection of item elements\n */\n proto.getFilteredItemElements = function() {\n return this.filteredItems.map( function( item ) {\n return item.element;\n });\n };\n\n // ----- ----- //\n\n return Isotope;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/isotope.js","/**\n * Outlayer Item\n */\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 - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/outlayer/item.js","/*!\n * Masonry layout mode\n * sub-classes Masonry\n * https://masonry.desandro.com\n */\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 '../layout-mode',\n 'masonry-layout/masonry'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode'),\n require('masonry-layout')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode,\n window.Masonry\n );\n }\n\n}( window, function factory( LayoutMode, Masonry ) {\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var MasonryMode = LayoutMode.create('masonry');\n\n var proto = MasonryMode.prototype;\n\n var keepModeMethods = {\n _getElementOffset: true,\n layout: true,\n _getMeasurement: true\n };\n\n // inherit Masonry prototype\n for ( var method in Masonry.prototype ) {\n // do not inherit mode methods\n if ( !keepModeMethods[ method ] ) {\n proto[ method ] = Masonry.prototype[ method ];\n }\n }\n\n var measureColumns = proto.measureColumns;\n proto.measureColumns = function() {\n // set items, used if measuring first item\n this.items = this.isotope.filteredItems;\n measureColumns.call( this );\n };\n\n // point to mode options for fitWidth\n var _getOption = proto._getOption;\n proto._getOption = function( option ) {\n if ( option == 'fitWidth' ) {\n return this.options.isFitWidth !== undefined ?\n this.options.isFitWidth : this.options.fitWidth;\n }\n return _getOption.apply( this.isotope, arguments );\n };\n\n return MasonryMode;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/layout-modes/masonry.js","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\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 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/masonry-layout/masonry.js","/**\n * fitRows layout mode\n */\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 '../layout-mode'\n ],\n factory );\n } else if ( typeof exports == 'object' ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar FitRows = LayoutMode.create('fitRows');\n\nvar proto = FitRows.prototype;\n\nproto._resetLayout = function() {\n this.x = 0;\n this.y = 0;\n this.maxY = 0;\n this._getMeasurement( 'gutter', 'outerWidth' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n\n var itemWidth = item.size.outerWidth + this.gutter;\n // if this element cannot fit in the current row\n var containerWidth = this.isotope.size.innerWidth + this.gutter;\n if ( this.x !== 0 && itemWidth + this.x > containerWidth ) {\n this.x = 0;\n this.y = this.maxY;\n }\n\n var position = {\n x: this.x,\n y: this.y\n };\n\n this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight );\n this.x += itemWidth;\n\n return position;\n};\n\nproto._getContainerSize = function() {\n return { height: this.maxY };\n};\n\nreturn FitRows;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/layout-modes/fit-rows.js","/**\n * vertical layout mode\n */\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 '../layout-mode'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar Vertical = LayoutMode.create( 'vertical', {\n horizontalAlignment: 0\n});\n\nvar proto = Vertical.prototype;\n\nproto._resetLayout = function() {\n this.y = 0;\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) *\n this.options.horizontalAlignment;\n var y = this.y;\n this.y += item.size.outerHeight;\n return { x: x, y: y };\n};\n\nproto._getContainerSize = function() {\n return { height: this.y };\n};\n\nreturn Vertical;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/layout-modes/vertical.js","/**\n * Isotope Item\n**/\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 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.Item = factory(\n window.Outlayer\n );\n }\n\n}( window, function factory( Outlayer ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\n// sub-class Outlayer Item\nfunction Item() {\n Outlayer.Item.apply( this, arguments );\n}\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar _create = proto._create;\nproto._create = function() {\n // assign id, used for original-order sorting\n this.id = this.layout.itemGUID++;\n _create.call( this );\n this.sortData = {};\n};\n\nproto.updateSortData = function() {\n if ( this.isIgnored ) {\n return;\n }\n // default sorters\n this.sortData.id = this.id;\n // for backward compatibility\n this.sortData['original-order'] = this.id;\n this.sortData.random = Math.random();\n // go thru getSortData obj and apply the sorters\n var getSortData = this.layout.options.getSortData;\n var sorters = this.layout._sorters;\n for ( var key in getSortData ) {\n var sorter = sorters[ key ];\n this.sortData[ key ] = sorter( this.element, this );\n }\n};\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n // call super\n _destroy.apply( this, arguments );\n // reset display, #741\n this.css({\n display: ''\n });\n};\n\nreturn Item;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/isotope-layout/js/item.js","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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-selected', 'false' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.removeAttribute('aria-selected');\n this.element.style[ side ] = '';\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 side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\n/**\n * @param {Integer} factor - 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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/cell.js","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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.changeSelected( true );\n};\n\nproto.unselect = function() {\n this.changeSelected( false );\n};\n\nproto.changeSelected = function( isSelected ) {\n var classMethod = isSelected ? 'add' : 'remove';\n this.cells.forEach( function( cell ) {\n cell.element.classList[ classMethod ]('is-selected');\n cell.element.setAttribute( 'aria-selected', isSelected.toString() );\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\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/slide.js","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n x = x + this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var value = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = this.isAnimating ?\n 'translate3d(' + value + ',0,0)' : 'translateX(' + value + ')';\n\n // scroll event\n var firstSlide = this.slides[0];\n if ( firstSlide ) {\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n }\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 if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/animate.js","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'childUIPointerDown', this._childUIPointerDownDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\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\nproto._childUIPointerDownDrag = function( event ) {\n // allow focus & preventDefault even when not draggable\n // so child UI elements keep focus on carousel. #721\n event.preventDefault();\n this.pointerDownFocus( event );\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 this.pointerDownPointer = pointer;\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 = 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( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\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\n * @param {Integer} index - slide index\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/drag.js","/*!\n * Unidragger v2.3.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 this.pointerDownPointer = pointer;\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\n\n// WEBPACK FOOTER //\n// ./node_modules/unidragger/unidragger.js","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'tap-listener/tap-listener',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, TapListener, utils ) {\n return factory( window, Flickity, TapListener, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('tap-listener'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.TapListener,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, TapListener, 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( TapListener.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.on( 'tap', this.onTap );\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.bindTap( this.element );\n // click events from keyboard\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 // do regular TapListener destroy\n TapListener.prototype.destroy.call( this );\n // click events from keyboard\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.onTap = 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\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function( event ) {\n // only allow clicks from keyboard\n var focused = document.activeElement;\n if ( focused && focused == this.element ) {\n this.onTap( event, event );\n }\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};\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/prev-next-button.js","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'tap-listener/tap-listener',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, TapListener, utils ) {\n return factory( window, Flickity, TapListener, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('tap-listener'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.TapListener,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, TapListener, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = new TapListener();\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.on( 'tap', this.onTap );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.bindTap( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n TapListener.prototype.destroy.call( this );\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 = 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};\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/page-dots.js","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/player.js","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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\n * @param {Integer} index\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\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 */\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/add-remove-cell.js","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\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 */\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity/js/lazyload.js","/*!\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flickity-imagesloaded/flickity-imagesloaded.js","/*!\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\n\n// WEBPACK FOOTER //\n// ./node_modules/imagesloaded/imagesloaded.js","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections();\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(\n this._checkForIntersections, this.POLL_INTERVAL);\n }\n else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body &&\n parent != document.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/intersection-observer/intersection-observer.js"],"sourceRoot":""}