{"version":3,"sources":["../../../node_modules/svg4everybody/dist/svg4everybody.js","../../../node_modules/smoothscroll-for-websites/SmoothScroll.js","../../../node_modules/aos/dist/aos.js","vendors/_debounce.js","front/_modernizr.js","front/components/_cursor.js","front/components/_loader.js","front/utilities/_browser.js","front/utilities/_javascript.js","front/utilities/_parallax.js","front/views/_navigation.js","front/_app.js"],"names":["root","factory","define","amd","svg4everybody","module","exports","this","embed","parent","svg","target","fragment","document","createDocumentFragment","viewBox","hasAttribute","getAttribute","setAttribute","clone","cloneNode","childNodes","length","appendChild","firstChild","loadreadystatechange","xhr","onreadystatechange","readyState","cachedDocument","_cachedDocument","implementation","createHTMLDocument","body","innerHTML","responseText","_cachedTarget","_embeds","splice","map","item","id","getElementById","getSVGAncestor","node","nodeName","toLowerCase","parentNode","rawopts","polyfill","opts","Object","inIframe","window","top","self","test","navigator","userAgent","match","requests","requestAnimationFrame","setTimeout","uses","getElementsByTagName","numberOfSvgUseElementsToBypass","oninterval","index","use","src","attributeName","validate","removeChild","srcSplit","split","url","shift","join","XMLHttpRequest","open","send","push","activeElement","observer","refreshSize","deltaBufferTimer","defaultOptions","frameRate","animationTime","stepSize","pulseAlgorithm","pulseScale","pulseNormalize","accelerationDelta","accelerationMax","keyboardSupport","arrowScroll","fixedBackground","excluded","options","isExcluded","isFrame","direction","x","y","initDone","documentElement","deltaBuffer","isMac","platform","key","left","up","right","down","spacebar","pageup","pagedown","end","home","arrowKeys","37","38","39","40","init","html","windowHeight","innerHeight","scrollHeight","compatMode","indexOf","addEvent","keydown","isOldSafari","offsetHeight","pendingRefresh","fullPageElem","createElement","style","cssText","height","MutationObserver","observe","attributes","childList","characterData","clearfix","clear","backgroundAttachment","que","pending","lastScroll","Date","now","scrollArray","elem","directionCheck","elapsed","factor","Math","min","lastX","lastY","start","scrollRoot","getScrollRoot","isWindowScroll","$scrollBehavior","el","uniqueID","smoothBehaviorForElement","scrollBehavior","getComputedStyle","isScrollBehaviorSmooth","step","time","scrollX","scrollY","i","finished","position","pulse","scrollBy","scrollLeft","scrollTop","requestFrame","wheel","event","defaultPrevented","ctrlKey","isNodeName","shadowRoot","deltaX","wheelDeltaX","deltaY","wheelDeltaY","isDivisible","abs","wheelDelta","deltaMode","overflowing","overflowingAncestor","clearTimeout","localStorage","SS_deltaBuffer","e","dpiScaledWheelDelta","allDeltasDivisableBy","isTouchpad","preventDefault","scheduleClearCache","isChrome","defineProperty","value","frameElement","modifier","altKey","metaKey","shiftKey","keyCode","contains","buttonTypes","type","isControl","URL","classList","isInsideYoutubeVideo","isContentEditable","clientHeight","scrollingElement","scrollRemaining","mousedown","clearCacheTimer","cacheX","cacheY","setInterval","setCache","elems","cache","rootScrollHeight","cached","isOverflowCSS","overflowNotHidden","overflowAutoOrScroll","isContentOverflowing","parentElement","getPropertyValue","overflow","fn","arg","addEventListener","removeEvent","removeEventListener","tag","n","divisor","floor","SCROLL_ROOT","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","element","delay","WebKitMutationObserver","MozMutationObserver","dummy","bodyScrollTop","pulse_","exp","isEdge","isSafari","isMobile","isIEWin7","isEnabledForBrowser","supportsPassive","get","wheelOpt","passive","wheelEvent","SmoothScroll","optionsToSet","hasOwnProperty","destroy","disconnect","SmoothScrollOptions","t","AOS","m","o","__esModule","default","j","arguments","k","w","b","once","O","h","assign","prototype","call","u","s","d","p","offset","easing","duration","disable","startEvent","throttleDelay","debounceDelay","disableMutationObserver","all","atob","mobile","phone","tablet","S","forEach","removeAttribute","isSupported","console","info","querySelector","ready","refresh","refreshHard","v","g","apply","c","f","a","_","M","r","TypeError","leading","maxWait","trailing","cancel","flush","valueOf","replace","l","slice","Symbol","iterator","constructor","NaN","parseInt","Function","toString","max","Array","addedNodes","removedNodes","dataset","aos","children","concat","subtree","vendor","opera","substr","enumerable","configurable","writable","pageYOffset","add","remove","anchor","anchorPlacement","isNaN","querySelectorAll","offsetLeft","offsetTop","tagName","offsetParent","loaded","$","debounce","func","inDebounce","context","args","throttle","limit","inThrottle","lastFunc","lastRan","undefined","classes","tests","ModernizrProto","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","on","cb","addTest","name","addAsyncTest","Modernizr","prefixes","is","obj","_prefixes","docElement","isSVG","setClasses","className","baseVal","reJS","RegExp","supportsHtml5Styles","supportsUnknownElements","html5","reSkip","saveClones","expando","expanID","expandoData","addStyleSheet","ownerDocument","insertBefore","lastChild","getElements","elements","getExpandoData","data","createElem","canHaveChildren","tagUrn","frag","shivDocument","shivCSS","hasCSS","createFrag","shivMethods","version","addElements","newElements","docEl","reMedia","shivNamespace","supportsShivableSheets","namespaces","parentWindow","applyElement","removeNode","attachEvent","createWrapper","nodes","wrapper","specified","nodeValue","shivPrint","shivedSheet","wrappers","ownerWindow","printShived","removeSheet","_removeSheetTimer","imports","sheet","collection","styleSheets","sheets","pop","disabled","media","er","pair","parts","reElements","replacement","shivCssText","reverse","result","addWrappers","removeWrappers","hasOwnProp","_hasOwnProperty","omPrefixes","domPrefixes","feature","featureNameSplit","last","Boolean","_trigger","_domPrefixes","object","property","_l","res","cbs","cssomPrefixes","_cssomPrefixes","atRule","prop","rule","cssrule","CSSRule","toUpperCase","prefix","createElementNS","needsFallback","hasEvent","eventName","cssToDOM","str","m1","m2","domToCSS","newSyntax","CSS","oldSyntax","injectElementWithStyles","testnames","ret","docOverflow","mod","div","fake","getBody","styleSheet","createTextNode","background","matchMedia","mq","msMatchMedia","mql","matches","bool","currentStyle","testStyles","fnBind","that","modElem","mStyle","testProps","props","prefixed","skipValueTest","supports","conditionText","nativeTestProps","afterInit","propsLength","before","cleanElems","unshift","testProp","useValue","testPropsAll","ucProp","charAt","testDOMProps","testAllProps","prefixedCSS","prefixedProp","usePrefix","DocumentTouch","query","featureNames","aliasIdx","nameIdx","featureIdx","aliases","testRunner","$cursor","$icon","$action","iconDefault","iconAction","$body","css","clientY","clientX","hover","addClass","removeClass","$doc","$loader","$win","isCompatible","cssSupports","isIE11","MSInputMethodContext","documentMode","browserIsCompatible","prepend","$parallax","setTransform","each","$this","parents","hasClass","outerHeight","translate","factors","random","attr","$chapter","margin","$section","$item","blanks","markers","paths","path_lengths","scroll_direction","scroll_tmp","update","observables","intersectionRatio","current_path","strokeDashoffset","sensitivity","round","new_path","boundingClientRect","bottom","is_leaving_start","is_leaving_end","is_reaching_start","is_reaching_end","update_markers","marker","IntersectionObserver","threshold","steps","thresholds","ratio","build_threshold_list","blank","path","path_length","getTotalLength","strokeDasharray","$tmp","appendTo","width","vhOffset","vwOffset","vh_unit","$html","load","href","substring","animate"],"mappings":"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","file":"front.js","sourcesContent":["!function(root, factory) {\n \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n define([], function() {\n return root.svg4everybody = factory();\n }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n svg && src) {\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});","//\n// SmoothScroll for websites v1.4.9 (Balazs Galambosi)\n// http://www.smoothscroll.net/\n//\n// Licensed under the terms of the MIT license.\n//\n// You may use it in your theme if you credit me. \n// It is also free to use on any individual website.\n//\n// Exception:\n// The only restriction is to not publish any \n// extension for browsers or native application\n// without getting a written permission first.\n//\n\n(function () {\n \n// Scroll Variables (tweakable)\nvar defaultOptions = {\n\n // Scrolling Core\n frameRate : 150, // [Hz]\n animationTime : 400, // [ms]\n stepSize : 100, // [px]\n\n // Pulse (less tweakable)\n // ratio of \"tail\" to \"acceleration\"\n pulseAlgorithm : true,\n pulseScale : 4,\n pulseNormalize : 1,\n\n // Acceleration\n accelerationDelta : 50, // 50\n accelerationMax : 3, // 3\n\n // Keyboard Settings\n keyboardSupport : true, // option\n arrowScroll : 50, // [px]\n\n // Other\n fixedBackground : true, \n excluded : '' \n};\n\nvar options = defaultOptions;\n\n\n// Other Variables\nvar isExcluded = false;\nvar isFrame = false;\nvar direction = { x: 0, y: 0 };\nvar initDone = false;\nvar root = document.documentElement;\nvar activeElement;\nvar observer;\nvar refreshSize;\nvar deltaBuffer = [];\nvar deltaBufferTimer;\nvar isMac = /^Mac/.test(navigator.platform);\n\nvar key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, \n pageup: 33, pagedown: 34, end: 35, home: 36 };\nvar arrowKeys = { 37: 1, 38: 1, 39: 1, 40: 1 };\n\n/***********************************************\n * INITIALIZE\n ***********************************************/\n\n/**\n * Tests if smooth scrolling is allowed. Shuts down everything if not.\n */\nfunction initTest() {\n if (options.keyboardSupport) {\n addEvent('keydown', keydown);\n }\n}\n\n/**\n * Sets up scrolls array, determines if frames are involved.\n */\nfunction init() {\n \n if (initDone || !document.body) return;\n\n initDone = true;\n\n var body = document.body;\n var html = document.documentElement;\n var windowHeight = window.innerHeight; \n var scrollHeight = body.scrollHeight;\n \n // check compat mode for root element\n root = (document.compatMode.indexOf('CSS') >= 0) ? html : body;\n activeElement = body;\n \n initTest();\n\n // Checks if this script is running in a frame\n if (top != self) {\n isFrame = true;\n }\n\n /**\n * Safari 10 fixed it, Chrome fixed it in v45:\n * This fixes a bug where the areas left and right to \n * the content does not trigger the onmousewheel event\n * on some pages. e.g.: html, body { height: 100% }\n */\n else if (isOldSafari &&\n scrollHeight > windowHeight &&\n (body.offsetHeight <= windowHeight || \n html.offsetHeight <= windowHeight)) {\n\n var fullPageElem = document.createElement('div');\n fullPageElem.style.cssText = 'position:absolute; z-index:-10000; ' +\n 'top:0; left:0; right:0; height:' + \n root.scrollHeight + 'px';\n document.body.appendChild(fullPageElem);\n \n // DOM changed (throttled) to fix height\n var pendingRefresh;\n refreshSize = function () {\n if (pendingRefresh) return; // could also be: clearTimeout(pendingRefresh);\n pendingRefresh = setTimeout(function () {\n if (isExcluded) return; // could be running after cleanup\n fullPageElem.style.height = '0';\n fullPageElem.style.height = root.scrollHeight + 'px';\n pendingRefresh = null;\n }, 500); // act rarely to stay fast\n };\n \n setTimeout(refreshSize, 10);\n\n addEvent('resize', refreshSize);\n\n // TODO: attributeFilter?\n var config = {\n attributes: true, \n childList: true, \n characterData: false \n // subtree: true\n };\n\n observer = new MutationObserver(refreshSize);\n observer.observe(body, config);\n\n if (root.offsetHeight <= windowHeight) {\n var clearfix = document.createElement('div'); \n clearfix.style.clear = 'both';\n body.appendChild(clearfix);\n }\n }\n\n // disable fixed background\n if (!options.fixedBackground && !isExcluded) {\n body.style.backgroundAttachment = 'scroll';\n html.style.backgroundAttachment = 'scroll';\n }\n}\n\n/**\n * Removes event listeners and other traces left on the page.\n */\nfunction cleanup() {\n observer && observer.disconnect();\n removeEvent(wheelEvent, wheel);\n removeEvent('mousedown', mousedown);\n removeEvent('keydown', keydown);\n removeEvent('resize', refreshSize);\n removeEvent('load', init);\n}\n\n\n/************************************************\n * SCROLLING \n ************************************************/\n \nvar que = [];\nvar pending = false;\nvar lastScroll = Date.now();\n\n/**\n * Pushes scroll actions to the scrolling queue.\n */\nfunction scrollArray(elem, left, top) {\n \n directionCheck(left, top);\n\n if (options.accelerationMax != 1) {\n var now = Date.now();\n var elapsed = now - lastScroll;\n if (elapsed < options.accelerationDelta) {\n var factor = (1 + (50 / elapsed)) / 2;\n if (factor > 1) {\n factor = Math.min(factor, options.accelerationMax);\n left *= factor;\n top *= factor;\n }\n }\n lastScroll = Date.now();\n } \n \n // push a scroll command\n que.push({\n x: left, \n y: top, \n lastX: (left < 0) ? 0.99 : -0.99,\n lastY: (top < 0) ? 0.99 : -0.99, \n start: Date.now()\n });\n \n // don't act if there's a pending queue\n if (pending) {\n return;\n } \n\n var scrollRoot = getScrollRoot();\n var isWindowScroll = (elem === scrollRoot || elem === document.body);\n \n // if we haven't already fixed the behavior, \n // and it needs fixing for this sesh\n if (elem.$scrollBehavior == null && isScrollBehaviorSmooth(elem)) {\n elem.$scrollBehavior = elem.style.scrollBehavior;\n elem.style.scrollBehavior = 'auto';\n }\n\n var step = function (time) {\n \n var now = Date.now();\n var scrollX = 0;\n var scrollY = 0; \n \n for (var i = 0; i < que.length; i++) {\n \n var item = que[i];\n var elapsed = now - item.start;\n var finished = (elapsed >= options.animationTime);\n \n // scroll position: [0, 1]\n var position = (finished) ? 1 : elapsed / options.animationTime;\n \n // easing [optional]\n if (options.pulseAlgorithm) {\n position = pulse(position);\n }\n \n // only need the difference\n var x = (item.x * position - item.lastX) >> 0;\n var y = (item.y * position - item.lastY) >> 0;\n \n // add this to the total scrolling\n scrollX += x;\n scrollY += y; \n \n // update last values\n item.lastX += x;\n item.lastY += y;\n \n // delete and step back if it's over\n if (finished) {\n que.splice(i, 1); i--;\n } \n }\n\n // scroll left and top\n if (isWindowScroll) {\n window.scrollBy(scrollX, scrollY);\n } \n else {\n if (scrollX) elem.scrollLeft += scrollX;\n if (scrollY) elem.scrollTop += scrollY; \n }\n \n // clean up if there's nothing left to do\n if (!left && !top) {\n que = [];\n }\n \n if (que.length) { \n requestFrame(step, elem, (1000 / options.frameRate + 1)); \n } else { \n pending = false;\n // restore default behavior at the end of scrolling sesh\n if (elem.$scrollBehavior != null) {\n elem.style.scrollBehavior = elem.$scrollBehavior;\n elem.$scrollBehavior = null;\n }\n }\n };\n \n // start a new queue of actions\n requestFrame(step, elem, 0);\n pending = true;\n}\n\n\n/***********************************************\n * EVENTS\n ***********************************************/\n\n/**\n * Mouse wheel handler.\n * @param {Object} event\n */\nfunction wheel(event) {\n\n if (!initDone) {\n init();\n }\n \n var target = event.target;\n\n // leave early if default action is prevented \n // or it's a zooming event with CTRL \n if (event.defaultPrevented || event.ctrlKey) {\n return true;\n }\n \n // leave embedded content alone (flash & pdf)\n if (isNodeName(activeElement, 'embed') || \n (isNodeName(target, 'embed') && /\\.pdf/i.test(target.src)) ||\n isNodeName(activeElement, 'object') ||\n target.shadowRoot) {\n return true;\n }\n\n var deltaX = -event.wheelDeltaX || event.deltaX || 0;\n var deltaY = -event.wheelDeltaY || event.deltaY || 0;\n \n if (isMac) {\n if (event.wheelDeltaX && isDivisible(event.wheelDeltaX, 120)) {\n deltaX = -120 * (event.wheelDeltaX / Math.abs(event.wheelDeltaX));\n }\n if (event.wheelDeltaY && isDivisible(event.wheelDeltaY, 120)) {\n deltaY = -120 * (event.wheelDeltaY / Math.abs(event.wheelDeltaY));\n }\n }\n \n // use wheelDelta if deltaX/Y is not available\n if (!deltaX && !deltaY) {\n deltaY = -event.wheelDelta || 0;\n }\n\n // line based scrolling (Firefox mostly)\n if (event.deltaMode === 1) {\n deltaX *= 40;\n deltaY *= 40;\n }\n\n var overflowing = overflowingAncestor(target);\n\n // nothing to do if there's no element that's scrollable\n if (!overflowing) {\n // except Chrome iframes seem to eat wheel events, which we need to \n // propagate up, if the iframe has nothing overflowing to scroll\n if (isFrame && isChrome) {\n // change target to iframe element itself for the parent frame\n Object.defineProperty(event, \"target\", {value: window.frameElement});\n return parent.wheel(event);\n }\n return true;\n }\n \n // check if it's a touchpad scroll that should be ignored\n if (isTouchpad(deltaY)) {\n return true;\n }\n\n // scale by step size\n // delta is 120 most of the time\n // synaptics seems to send 1 sometimes\n if (Math.abs(deltaX) > 1.2) {\n deltaX *= options.stepSize / 120;\n }\n if (Math.abs(deltaY) > 1.2) {\n deltaY *= options.stepSize / 120;\n }\n \n scrollArray(overflowing, deltaX, deltaY);\n event.preventDefault();\n scheduleClearCache();\n}\n\n/**\n * Keydown event handler.\n * @param {Object} event\n */\nfunction keydown(event) {\n\n var target = event.target;\n var modifier = event.ctrlKey || event.altKey || event.metaKey || \n (event.shiftKey && event.keyCode !== key.spacebar);\n \n // our own tracked active element could've been removed from the DOM\n if (!document.body.contains(activeElement)) {\n activeElement = document.activeElement;\n }\n\n // do nothing if user is editing text\n // or using a modifier key (except shift)\n // or in a dropdown\n // or inside interactive elements\n var inputNodeNames = /^(textarea|select|embed|object)$/i;\n var buttonTypes = /^(button|submit|radio|checkbox|file|color|image)$/i;\n if ( event.defaultPrevented ||\n inputNodeNames.test(target.nodeName) ||\n isNodeName(target, 'input') && !buttonTypes.test(target.type) ||\n isNodeName(activeElement, 'video') ||\n isInsideYoutubeVideo(event) ||\n target.isContentEditable || \n modifier ) {\n return true;\n }\n\n // [spacebar] should trigger button press, leave it alone\n if ((isNodeName(target, 'button') ||\n isNodeName(target, 'input') && buttonTypes.test(target.type)) &&\n event.keyCode === key.spacebar) {\n return true;\n }\n\n // [arrwow keys] on radio buttons should be left alone\n if (isNodeName(target, 'input') && target.type == 'radio' &&\n arrowKeys[event.keyCode]) {\n return true;\n }\n \n var shift, x = 0, y = 0;\n var overflowing = overflowingAncestor(activeElement);\n\n if (!overflowing) {\n // Chrome iframes seem to eat key events, which we need to \n // propagate up, if the iframe has nothing overflowing to scroll\n return (isFrame && isChrome) ? parent.keydown(event) : true;\n }\n\n var clientHeight = overflowing.clientHeight; \n\n if (overflowing == document.body) {\n clientHeight = window.innerHeight;\n }\n\n switch (event.keyCode) {\n case key.up:\n y = -options.arrowScroll;\n break;\n case key.down:\n y = options.arrowScroll;\n break; \n case key.spacebar: // (+ shift)\n shift = event.shiftKey ? 1 : -1;\n y = -shift * clientHeight * 0.9;\n break;\n case key.pageup:\n y = -clientHeight * 0.9;\n break;\n case key.pagedown:\n y = clientHeight * 0.9;\n break;\n case key.home:\n if (overflowing == document.body && document.scrollingElement)\n overflowing = document.scrollingElement;\n y = -overflowing.scrollTop;\n break;\n case key.end:\n var scroll = overflowing.scrollHeight - overflowing.scrollTop;\n var scrollRemaining = scroll - clientHeight;\n y = (scrollRemaining > 0) ? scrollRemaining + 10 : 0;\n break;\n case key.left:\n x = -options.arrowScroll;\n break;\n case key.right:\n x = options.arrowScroll;\n break; \n default:\n return true; // a key we don't care about\n }\n\n scrollArray(overflowing, x, y);\n event.preventDefault();\n scheduleClearCache();\n}\n\n/**\n * Mousedown event only for updating activeElement\n */\nfunction mousedown(event) {\n activeElement = event.target;\n}\n\n\n/***********************************************\n * OVERFLOW\n ***********************************************/\n\nvar uniqueID = (function () {\n var i = 0;\n return function (el) {\n return el.uniqueID || (el.uniqueID = i++);\n };\n})();\n\nvar cacheX = {}; // cleared out after a scrolling session\nvar cacheY = {}; // cleared out after a scrolling session\nvar clearCacheTimer;\nvar smoothBehaviorForElement = {};\n\n//setInterval(function () { cache = {}; }, 10 * 1000);\n\nfunction scheduleClearCache() {\n clearTimeout(clearCacheTimer);\n clearCacheTimer = setInterval(function () { \n cacheX = cacheY = smoothBehaviorForElement = {}; \n }, 1*1000);\n}\n\nfunction setCache(elems, overflowing, x) {\n var cache = x ? cacheX : cacheY;\n for (var i = elems.length; i--;)\n cache[uniqueID(elems[i])] = overflowing;\n return overflowing;\n}\n\nfunction getCache(el, x) {\n return (x ? cacheX : cacheY)[uniqueID(el)];\n}\n\n// (body) (root)\n// | hidden | visible | scroll | auto |\n// hidden | no | no | YES | YES |\n// visible | no | YES | YES | YES |\n// scroll | no | YES | YES | YES |\n// auto | no | YES | YES | YES |\n\nfunction overflowingAncestor(el) {\n var elems = [];\n var body = document.body;\n var rootScrollHeight = root.scrollHeight;\n do {\n var cached = getCache(el, false);\n if (cached) {\n return setCache(elems, cached);\n }\n elems.push(el);\n if (rootScrollHeight === el.scrollHeight) {\n var topOverflowsNotHidden = overflowNotHidden(root) && overflowNotHidden(body);\n var isOverflowCSS = topOverflowsNotHidden || overflowAutoOrScroll(root);\n if (isFrame && isContentOverflowing(root) || \n !isFrame && isOverflowCSS) {\n return setCache(elems, getScrollRoot()); \n }\n } else if (isContentOverflowing(el) && overflowAutoOrScroll(el)) {\n return setCache(elems, el);\n }\n } while ((el = el.parentElement));\n}\n\nfunction isContentOverflowing(el) {\n return (el.clientHeight + 10 < el.scrollHeight);\n}\n\n// typically for and \nfunction overflowNotHidden(el) {\n var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');\n return (overflow !== 'hidden');\n}\n\n// for all other elements\nfunction overflowAutoOrScroll(el) {\n var overflow = getComputedStyle(el, '').getPropertyValue('overflow-y');\n return (overflow === 'scroll' || overflow === 'auto');\n}\n\n// for all other elements\nfunction isScrollBehaviorSmooth(el) {\n var id = uniqueID(el);\n if (smoothBehaviorForElement[id] == null) {\n var scrollBehavior = getComputedStyle(el, '')['scroll-behavior'];\n smoothBehaviorForElement[id] = ('smooth' == scrollBehavior);\n }\n return smoothBehaviorForElement[id];\n}\n\n\n/***********************************************\n * HELPERS\n ***********************************************/\n\nfunction addEvent(type, fn, arg) {\n window.addEventListener(type, fn, arg || false);\n}\n\nfunction removeEvent(type, fn, arg) {\n window.removeEventListener(type, fn, arg || false); \n}\n\nfunction isNodeName(el, tag) {\n return el && (el.nodeName||'').toLowerCase() === tag.toLowerCase();\n}\n\nfunction directionCheck(x, y) {\n x = (x > 0) ? 1 : -1;\n y = (y > 0) ? 1 : -1;\n if (direction.x !== x || direction.y !== y) {\n direction.x = x;\n direction.y = y;\n que = [];\n lastScroll = 0;\n }\n}\n\nif (window.localStorage && localStorage.SS_deltaBuffer) {\n try { // #46 Safari throws in private browsing for localStorage \n deltaBuffer = localStorage.SS_deltaBuffer.split(',');\n } catch (e) { } \n}\n\nfunction isTouchpad(deltaY) {\n if (!deltaY) return;\n if (!deltaBuffer.length) {\n deltaBuffer = [deltaY, deltaY, deltaY];\n }\n deltaY = Math.abs(deltaY);\n deltaBuffer.push(deltaY);\n deltaBuffer.shift();\n clearTimeout(deltaBufferTimer);\n deltaBufferTimer = setTimeout(function () {\n try { // #46 Safari throws in private browsing for localStorage\n localStorage.SS_deltaBuffer = deltaBuffer.join(',');\n } catch (e) { } \n }, 1000);\n var dpiScaledWheelDelta = deltaY > 120 && allDeltasDivisableBy(deltaY); // win64 \n return !allDeltasDivisableBy(120) && !allDeltasDivisableBy(100) && !dpiScaledWheelDelta;\n} \n\nfunction isDivisible(n, divisor) {\n return (Math.floor(n / divisor) == n / divisor);\n}\n\nfunction allDeltasDivisableBy(divisor) {\n return (isDivisible(deltaBuffer[0], divisor) &&\n isDivisible(deltaBuffer[1], divisor) &&\n isDivisible(deltaBuffer[2], divisor));\n}\n\nfunction isInsideYoutubeVideo(event) {\n var elem = event.target;\n var isControl = false;\n if (document.URL.indexOf ('www.youtube.com/watch') != -1) {\n do {\n isControl = (elem.classList && \n elem.classList.contains('html5-video-controls'));\n if (isControl) break;\n } while ((elem = elem.parentNode));\n }\n return isControl;\n}\n\nvar requestFrame = (function () {\n return (window.requestAnimationFrame || \n window.webkitRequestAnimationFrame || \n window.mozRequestAnimationFrame ||\n function (callback, element, delay) {\n window.setTimeout(callback, delay || (1000/60));\n });\n})();\n\nvar MutationObserver = (window.MutationObserver || \n window.WebKitMutationObserver ||\n window.MozMutationObserver); \n\nvar getScrollRoot = (function() {\n var SCROLL_ROOT = document.scrollingElement;\n return function() {\n if (!SCROLL_ROOT) {\n var dummy = document.createElement('div');\n dummy.style.cssText = 'height:10000px;width:1px;';\n document.body.appendChild(dummy);\n var bodyScrollTop = document.body.scrollTop;\n var docElScrollTop = document.documentElement.scrollTop;\n window.scrollBy(0, 3);\n if (document.body.scrollTop != bodyScrollTop)\n (SCROLL_ROOT = document.body);\n else \n (SCROLL_ROOT = document.documentElement);\n window.scrollBy(0, -3);\n document.body.removeChild(dummy);\n }\n return SCROLL_ROOT;\n };\n})();\n\n\n/***********************************************\n * PULSE (by Michael Herf)\n ***********************************************/\n \n/**\n * Viscous fluid with a pulse for part and decay for the rest.\n * - Applies a fixed force over an interval (a damped acceleration), and\n * - Lets the exponential bleed away the velocity over a longer interval\n * - Michael Herf, http://stereopsis.com/stopping/\n */\nfunction pulse_(x) {\n var val, start, expx;\n // test\n x = x * options.pulseScale;\n if (x < 1) { // acceleartion\n val = x - (1 - Math.exp(-x));\n } else { // tail\n // the previous animation ended here:\n start = Math.exp(-1);\n // simple viscous drag\n x -= 1;\n expx = 1 - Math.exp(-x);\n val = start + (expx * (1 - start));\n }\n return val * options.pulseNormalize;\n}\n\nfunction pulse(x) {\n if (x >= 1) return 1;\n if (x <= 0) return 0;\n\n if (options.pulseNormalize == 1) {\n options.pulseNormalize /= pulse_(1);\n }\n return pulse_(x);\n}\n\n\n/***********************************************\n * FIRST RUN\n ***********************************************/\n\nvar userAgent = window.navigator.userAgent;\nvar isEdge = /Edge/.test(userAgent); // thank you MS\nvar isChrome = /chrome/i.test(userAgent) && !isEdge; \nvar isSafari = /safari/i.test(userAgent) && !isEdge; \nvar isMobile = /mobile/i.test(userAgent);\nvar isIEWin7 = /Windows NT 6.1/i.test(userAgent) && /rv:11/i.test(userAgent);\nvar isOldSafari = isSafari && (/Version\\/8/i.test(userAgent) || /Version\\/9/i.test(userAgent));\nvar isEnabledForBrowser = (isChrome || isSafari || isIEWin7) && !isMobile;\n\nvar supportsPassive = false;\ntry {\n window.addEventListener(\"test\", null, Object.defineProperty({}, 'passive', {\n get: function () {\n supportsPassive = true;\n } \n }));\n} catch(e) {}\n\nvar wheelOpt = supportsPassive ? { passive: false } : false;\nvar wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' : 'mousewheel'; \n\nif (wheelEvent && isEnabledForBrowser) {\n addEvent(wheelEvent, wheel, wheelOpt);\n addEvent('mousedown', mousedown);\n addEvent('load', init);\n}\n\n\n/***********************************************\n * PUBLIC INTERFACE\n ***********************************************/\n\nfunction SmoothScroll(optionsToSet) {\n for (var key in optionsToSet)\n if (defaultOptions.hasOwnProperty(key)) \n options[key] = optionsToSet[key];\n}\nSmoothScroll.destroy = cleanup;\n\nif (window.SmoothScrollOptions) // async API\n SmoothScroll(window.SmoothScrollOptions);\n\nif (typeof define === 'function' && define.amd)\n define(function() {\n return SmoothScroll;\n });\nelse if ('object' == typeof exports)\n module.exports = SmoothScroll;\nelse\n window.SmoothScroll = SmoothScroll;\n\n})();\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});","// https://codepen.io/jh3y/pen/opNYWy\n$(function() {\n 'use strict';\n\n var debounce = function debounce(func, delay) {\n var inDebounce = void 0;\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(function () {\n return func.apply(context, args);\n }, delay);\n };\n };\n\n window.debounce = debounce;\n\n var throttle = function throttle(func, limit) {\n var inThrottle = void 0;\n var lastFunc = void 0;\n var lastRan = void 0;\n return function () {\n var context = this;\n var args = arguments;\n if (!inThrottle) {\n func.apply(context, args);\n lastRan = Date.now();\n inThrottle = true;\n } else {\n clearTimeout(lastFunc);\n lastFunc = setTimeout(function () {\n if (Date.now() - lastRan >= limit) {\n func.apply(context, args);\n lastRan = Date.now();\n }\n }, limit - (Date.now() - lastRan));\n }\n };\n };\n\n window.throttle = throttle;\n\n});","/*!\n * modernizr v3.0.0-alpha.4\n * Build http://modernizr.com/download/#-cssanimations-csstransforms-csstransforms3d-csstransitions-flexbox-addtest-atrule-domprefixes-hasevent-mq-prefixed-prefixedcss-prefixes-printshiv-testallprops-testprop-teststyles-dontmin\n *\n * Copyright (c)\n * Faruk Ates\n * Paul Irish\n * Alex Sexton\n * Ryan Seddon\n * Alexander Farkas\n * Patrick Kettner\n * Stu Cox\n * Richard Herrera\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(window, document, undefined){\n var classes = [];\n \n\n var tests = [];\n \n\n /**\n *\n * ModernizrProto is the constructor for Modernizr\n *\n * @class\n * @access public\n */\n\n var ModernizrProto = {\n // The current version, dummy\n _version: '3.0.0-alpha.4',\n\n // Any settings that don't work as separate modules\n // can go in here as configuration.\n _config: {\n 'classPrefix' : '',\n 'enableClasses' : true,\n 'enableJSClass' : true,\n 'usePrefixes' : true\n },\n\n // Queue of tests\n _q: [],\n\n // Stub these for people who are listening\n on: function(test, cb) {\n // I don't really think people should do this, but we can\n // safe guard it a bit.\n // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n // This is in case people listen to synchronous tests. I would leave it out,\n // but the code to *disallow* sync tests in the real version of this\n // function is actually larger than this.\n var self = this;\n setTimeout(function() {\n cb(self[test]);\n }, 0);\n },\n\n addTest: function(name, fn, options) {\n tests.push({name : name, fn : fn, options : options});\n },\n\n addAsyncTest: function(fn) {\n tests.push({name : null, fn : fn});\n }\n };\n\n \n\n // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n var Modernizr = function() {};\n Modernizr.prototype = ModernizrProto;\n\n // Leak modernizr globally when you `require` it rather than force it here.\n // Overwrite name so constructor name is nicer :D\n Modernizr = new Modernizr();\n\n \n\n /**\n * List of property values to set for css tests. See ticket #21\n * http://git.io/vUGl4\n *\n * @memberof Modernizr\n * @name Modernizr._prefixes\n * @optionName Modernizr._prefixes\n * @optionProp prefixes\n * @access public\n * @example\n *\n * Modernizr._prefixes is the internal list of prefixes that we test against\n * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply\n * an array of kebab-case vendor prefixes you can use within your code.\n *\n * Some common use cases include\n *\n * Generating all possible prefixed version of a CSS property\n * ```js\n * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');\n *\n * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'\n * ```\n *\n * Generating all possible prefixed version of a CSS value\n * ```js\n * rule = 'display:' + Modernizr._prefixes.join('flex; display:') + 'flex';\n *\n * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'\n * ```\n */\n\n var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : []);\n\n // expose these for the plugin API. Look in the source for how to join() them against your input\n ModernizrProto._prefixes = prefixes;\n\n \n\n /**\n * is returns a boolean if the typeof an obj is exactly type.\n *\n * @access private\n * @function is\n * @param {*} obj - A thing we want to check the type of\n * @param {string} type - A string to compare the typeof against\n * @returns {boolean}\n */\n\n function is(obj, type) {\n return typeof obj === type;\n }\n ;\n\n /**\n * Run through all tests and detect their support in the current UA.\n *\n * @access private\n */\n\n function testRunner() {\n var featureNames;\n var feature;\n var aliasIdx;\n var result;\n var nameIdx;\n var featureName;\n var featureNameSplit;\n\n for (var featureIdx in tests) {\n featureNames = [];\n feature = tests[featureIdx];\n // run the test, throw the return value into the Modernizr,\n // then based on that boolean, define an appropriate className\n // and push it into an array of classes we'll join later.\n //\n // If there is no name, it's an 'async' test that is run,\n // but not directly added to the object. That should\n // be done with a post-run addTest call.\n if (feature.name) {\n featureNames.push(feature.name.toLowerCase());\n\n if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n // Add all the aliases into the names list\n for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n }\n }\n }\n\n // Run the test, or use the raw value if it's not a function\n result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n\n // Set each of the names on the Modernizr object\n for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n featureName = featureNames[nameIdx];\n // Support dot properties as sub tests. We don't do checking to make sure\n // that the implied parent tests have been added. You must call them in\n // order (either in the test, or make the parent test a dependency).\n //\n // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n // hashtag famous last words\n featureNameSplit = featureName.split('.');\n\n if (featureNameSplit.length === 1) {\n Modernizr[featureNameSplit[0]] = result;\n } else {\n // cast to a Boolean, if not one already\n /* jshint -W053 */\n if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n }\n\n classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n }\n }\n }\n\n ;\n\n /**\n * docElement is a convenience wrapper to grab the root element of the document\n *\n * @access private\n * @returns {HTMLElement|SVGElement} The root element of the document\n */\n\n var docElement = document.documentElement;\n \n\n /**\n * A convenience helper to check if the document we are running in is an SVG document\n *\n * @access private\n * @returns {boolean}\n */\n\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n \n\n /**\n * setClasses takes an array of class names and adds them to the root element\n *\n * @access private\n * @function setClasses\n * @param {string[]} classes - Array of class names\n */\n\n // Pass in an and array of class names, e.g.:\n // ['no-webp', 'borderradius', ...]\n function setClasses(classes) {\n var className = docElement.className;\n var classPrefix = Modernizr._config.classPrefix || '';\n\n if (isSVG) {\n className = className.baseVal;\n }\n\n // Change `no-js` to `js` (independently of the `enableClasses` option)\n // Handle classPrefix on this too\n if (Modernizr._config.enableJSClass) {\n var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n }\n\n if (Modernizr._config.enableClasses) {\n // Add the new classes\n className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n isSVG ? docElement.className.baseVal = className : docElement.className = className;\n }\n\n }\n\n ;\n\n/**\n * @optionName html5printshiv\n * @optionProp html5printshiv\n */\n\n // Take the html5 variable out of the html5shiv scope so we can return it.\n var html5;\n if (!isSVG) {\n\n /**\n * @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n */\n ;(function(window, document) {\n /*jshint evil:true */\n /** version */\n var version = '3.7.2';\n\n /** Preset options */\n var options = window.html5 || {};\n\n /** Used to skip problem elements */\n var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n /** Not all elements can be cloned in IE **/\n var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n /** Detect whether the browser supports default html5 styles */\n var supportsHtml5Styles;\n\n /** Name of the expando, to work with multiple documents or to re-shiv one document */\n var expando = '_html5shiv';\n\n /** The id for the the documents expando */\n var expanID = 0;\n\n /** Cached data for each document */\n var expandoData = {};\n\n /** Detect whether the browser supports unknown elements */\n var supportsUnknownElements;\n\n (function() {\n try {\n var a = document.createElement('a');\n a.innerHTML = '';\n //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n supportsHtml5Styles = ('hidden' in a);\n\n supportsUnknownElements = a.childNodes.length == 1 || (function() {\n // assign a false positive if unable to shiv\n (document.createElement)('a');\n var frag = document.createDocumentFragment();\n return (\n typeof frag.cloneNode == 'undefined' ||\n typeof frag.createDocumentFragment == 'undefined' ||\n typeof frag.createElement == 'undefined'\n );\n }());\n } catch(e) {\n // assign a false positive if detection fails => unable to shiv\n supportsHtml5Styles = true;\n supportsUnknownElements = true;\n }\n\n }());\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a style sheet with the given CSS text and adds it to the document.\n * @private\n * @param {Document} ownerDocument The document.\n * @param {String} cssText The CSS text.\n * @returns {StyleSheet} The style element.\n */\n function addStyleSheet(ownerDocument, cssText) {\n var p = ownerDocument.createElement('p'),\n parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n p.innerHTML = 'x';\n return parent.insertBefore(p.lastChild, parent.firstChild);\n }\n\n /**\n * Returns the value of `html5.elements` as an array.\n * @private\n * @returns {Array} An array of shived element node names.\n */\n function getElements() {\n var elements = html5.elements;\n return typeof elements == 'string' ? elements.split(' ') : elements;\n }\n\n /**\n * Extends the built-in list of html5 elements\n * @memberOf html5\n * @param {String|Array} newElements whitespace separated list or array of new element names to shiv\n * @param {Document} ownerDocument The context document.\n */\n function addElements(newElements, ownerDocument) {\n var elements = html5.elements;\n if(typeof elements != 'string'){\n elements = elements.join(' ');\n }\n if(typeof newElements != 'string'){\n newElements = newElements.join(' ');\n }\n html5.elements = elements +' '+ newElements;\n shivDocument(ownerDocument);\n }\n\n /**\n * Returns the data associated to the given document\n * @private\n * @param {Document} ownerDocument The document.\n * @returns {Object} An object of data.\n */\n function getExpandoData(ownerDocument) {\n var data = expandoData[ownerDocument[expando]];\n if (!data) {\n data = {};\n expanID++;\n ownerDocument[expando] = expanID;\n expandoData[expanID] = data;\n }\n return data;\n }\n\n /**\n * returns a shived element for the given nodeName and document\n * @memberOf html5\n * @param {String} nodeName name of the element\n * @param {Document} ownerDocument The context document.\n * @returns {Object} The shived element.\n */\n function createElement(nodeName, ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createElement(nodeName);\n }\n if (!data) {\n data = getExpandoData(ownerDocument);\n }\n var node;\n\n if (data.cache[nodeName]) {\n node = data.cache[nodeName].cloneNode();\n } else if (saveClones.test(nodeName)) {\n node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n } else {\n node = data.createElem(nodeName);\n }\n\n // Avoid adding some elements to fragments in IE < 9 because\n // * Attributes like `name` or `type` cannot be set/changed once an element\n // is inserted into a document/fragment\n // * Link elements with `src` attributes that are inaccessible, as with\n // a 403 response, will cause the tab/window to crash\n // * Script elements appended to fragments will execute when their `src`\n // or `text` property is set\n return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n }\n\n /**\n * returns a shived DocumentFragment for the given document\n * @memberOf html5\n * @param {Document} ownerDocument The context document.\n * @returns {Object} The shived DocumentFragment.\n */\n function createDocumentFragment(ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createDocumentFragment();\n }\n data = data || getExpandoData(ownerDocument);\n var clone = data.frag.cloneNode(),\n i = 0,\n elems = getElements(),\n l = elems.length;\n for(;i+~])(' + getElements().join('|') + ')(?=[[\\\\s,>+~#.:]|$)', 'gi'),\n replacement = '$1' + shivNamespace + '\\\\:$2';\n\n while (index--) {\n pair = parts[index] = parts[index].split('}');\n pair[pair.length - 1] = pair[pair.length - 1].replace(reElements, replacement);\n parts[index] = pair.join('}');\n }\n return parts.join('{');\n }\n\n /**\n * Removes the given wrappers, leaving the original elements.\n * @private\n * @params {Array} wrappers An array of printable wrappers.\n */\n function removeWrappers(wrappers) {\n var index = wrappers.length;\n while (index--) {\n wrappers[index].removeNode();\n }\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Shivs the given document for print.\n * @memberOf html5\n * @param {Document} ownerDocument The document to shiv.\n * @returns {Document} The shived document.\n */\n function shivPrint(ownerDocument) {\n var shivedSheet,\n wrappers,\n data = getExpandoData(ownerDocument),\n namespaces = ownerDocument.namespaces,\n ownerWindow = ownerDocument.parentWindow;\n\n if (!supportsShivableSheets || ownerDocument.printShived) {\n return ownerDocument;\n }\n if (typeof namespaces[shivNamespace] == 'undefined') {\n namespaces.add(shivNamespace);\n }\n\n function removeSheet() {\n clearTimeout(data._removeSheetTimer);\n if (shivedSheet) {\n shivedSheet.removeNode(true);\n }\n shivedSheet= null;\n }\n\n ownerWindow.attachEvent('onbeforeprint', function() {\n\n removeSheet();\n\n var imports,\n length,\n sheet,\n collection = ownerDocument.styleSheets,\n cssText = [],\n index = collection.length,\n sheets = Array(index);\n\n // convert styleSheets collection to an array\n while (index--) {\n sheets[index] = collection[index];\n }\n // concat all style sheet CSS text\n while ((sheet = sheets.pop())) {\n // IE does not enforce a same origin policy for external style sheets...\n // but has trouble with some dynamically created stylesheets\n if (!sheet.disabled && reMedia.test(sheet.media)) {\n\n try {\n imports = sheet.imports;\n length = imports.length;\n } catch(er){\n length = 0;\n }\n\n for (index = 0; index < length; index++) {\n sheets.push(imports[index]);\n }\n\n try {\n cssText.push(sheet.cssText);\n } catch(er){}\n }\n }\n\n // wrap all HTML5 elements with printable elements and add the shived style sheet\n cssText = shivCssText(cssText.reverse().join(''));\n wrappers = addWrappers(ownerDocument);\n shivedSheet = addStyleSheet(ownerDocument, cssText);\n\n });\n\n ownerWindow.attachEvent('onafterprint', function() {\n // remove wrappers, leaving the original elements, and remove the shived style sheet\n removeWrappers(wrappers);\n clearTimeout(data._removeSheetTimer);\n data._removeSheetTimer = setTimeout(removeSheet, 500);\n });\n\n ownerDocument.printShived = true;\n return ownerDocument;\n }\n\n /*--------------------------------------------------------------------------*/\n\n // expose API\n html5.type += ' print';\n html5.shivPrint = shivPrint;\n\n // shiv for print\n shivPrint(document);\n\n }(this, document));\n }\n\n ;\n\n /**\n * If the browsers follow the spec, then they would expose vendor-specific style as:\n * elem.style.WebkitBorderRadius\n * instead of something like the following, which would be technically incorrect:\n * elem.style.webkitBorderRadius\n\n * Webkit ghosts their properties in lowercase but Opera & Moz do not.\n * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n * erik.eae.net/archives/2008/03/10/21.48.10/\n\n * More here: github.com/Modernizr/Modernizr/issues/issue/21\n *\n * @access private\n * @returns {string} The string representing the vendor-specific style properties\n */\n\n var omPrefixes = 'Moz O ms Webkit';\n \n\n /**\n * List of JavaScript DOM values used for tests\n *\n * @memberof Modernizr\n * @name Modernizr._domPrefixes\n * @optionName Modernizr._domPrefixes\n * @optionProp domPrefixes\n * @access public\n * @example\n *\n * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n * than kebab-case properties, all properties are their Capitalized variant\n *\n * ```js\n * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n * ```\n */\n\n var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n ModernizrProto._domPrefixes = domPrefixes;\n \n\n /**\n * hasOwnProp is a shim for hasOwnProperty that is needed for Safari 2.0 support\n *\n * @author kangax\n * @access private\n * @function hasOwnProp\n * @param {object} object - The object to check for a property\n * @param {string} property - The property to check for\n * @returns {boolean}\n */\n\n // hasOwnProperty shim by kangax needed for Safari 2.0 support\n var hasOwnProp;\n\n (function() {\n var _hasOwnProperty = ({}).hasOwnProperty;\n /* istanbul ignore else */\n /* we have no way of testing IE 5.5 or safari 2,\n * so just assume the else gets hit */\n if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) {\n hasOwnProp = function(object, property) {\n return _hasOwnProperty.call(object, property);\n };\n }\n else {\n hasOwnProp = function(object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n };\n }\n })();\n\n \n\n\n // _l tracks listeners for async tests, as well as tests that execute after the initial run\n ModernizrProto._l = {};\n\n /**\n * Modernizr.on is a way to listen for the completion of async tests. Being\n * asynchronous, they may not finish before your scripts run. As a result you\n * will get a possibly false negative `undefined` value.\n *\n * @memberof Modernizr\n * @name Modernizr.on\n * @access public\n * @function on\n * @param {string} feature - String name of the feature detect\n * @param {function} cb - Callback function returning a Boolean - true if feature is supported, false if not\n * @example\n *\n * ```js\n * Modernizr.on('flash', function( result ) {\n * if (result) {\n * // the browser has flash\n * } else {\n * // the browser does not have flash\n * }\n * });\n * ```\n */\n\n ModernizrProto.on = function(feature, cb) {\n // Create the list of listeners if it doesn't exist\n if (!this._l[feature]) {\n this._l[feature] = [];\n }\n\n // Push this test on to the listener list\n this._l[feature].push(cb);\n\n // If it's already been resolved, trigger it on next tick\n if (Modernizr.hasOwnProperty(feature)) {\n // Next Tick\n setTimeout(function() {\n Modernizr._trigger(feature, Modernizr[feature]);\n }, 0);\n }\n };\n\n /**\n * _trigger is the private function used to signal test completion and run any\n * callbacks registered through [Modernizr.on](#modernizr-on)\n *\n * @memberof Modernizr\n * @name Modernizr._trigger\n * @access private\n * @function _trigger\n * @param {string} feature - string name of the feature detect\n * @param {function|boolean} [res] - A feature detection function, or the boolean =\n * result of a feature detection function\n */\n\n ModernizrProto._trigger = function(feature, res) {\n if (!this._l[feature]) {\n return;\n }\n\n var cbs = this._l[feature];\n\n // Force async\n setTimeout(function() {\n var i, cb;\n for (i = 0; i < cbs.length; i++) {\n cb = cbs[i];\n cb(res);\n }\n }, 0);\n\n // Don't trigger these again\n delete this._l[feature];\n };\n\n /**\n * addTest allows you to define your own feature detects that are not currently\n * included in Modernizr (under the covers it's the exact same code Modernizr\n * uses for its own [feature detections](https://github.com/Modernizr/Modernizr/tree/master/feature-detects)). Just like the offical detects, the result\n * will be added onto the Modernizr object, as well as an appropriate className set on\n * the html element when configured to do so\n *\n * @memberof Modernizr\n * @name Modernizr.addTest\n * @optionName Modernizr.addTest()\n * @optionProp addTest\n * @access public\n * @function addTest\n * @param {string|object} feature - The string name of the feature detect, or an\n * object of feature detect names and test\n * @param {function|boolean} test - Function returning true if feature is supported,\n * false if not. Otherwise a boolean representing the results of a feature detection\n * @example\n *\n * The most common way of creating your own feature detects is by calling\n * `Modernizr.addTest` with a string (preferably just lowercase, without any\n * punctuation), and a function you want executed that will return a boolean result\n *\n * ```js\n * Modernizr.addTest('itsTuesday', function() {\n * var d = new Date();\n * return d.getDay() === 2;\n * });\n * ```\n *\n * When the above is run, it will set Modernizr.itstuesday to `true` when it is tuesday,\n * and to `false` every other day of the week. One thing to notice is that the names of\n * feature detect functions are always lowercased when added to the Modernizr object. That\n * means that `Modernizr.itsTuesday` will not exist, but `Modernizr.itstuesday` will.\n *\n *\n * Since we only look at the returned value from any feature detection function,\n * you do not need to actually use a function. For simple detections, just passing\n * in a statement that will return a boolean value works just fine.\n *\n * ```js\n * Modernizr.addTest('hasJquery', 'jQuery' in window);\n * ```\n *\n * Just like before, when the above runs `Modernizr.hasjquery` will be true if\n * jQuery has been included on the page. Not using a function saves a small amount\n * of overhead for the browser, as well as making your code much more readable.\n *\n * Finally, you also have the ability to pass in an object of feature names and\n * their tests. This is handy if you want to add multiple detections in one go.\n * The keys should always be a string, and the value can be either a boolean or\n * function that returns a boolean.\n *\n * ```js\n * var detects = {\n * 'hasjquery': 'jQuery' in window,\n * 'itstuesday': function() {\n * var d = new Date();\n * return d.getDay() === 2;\n * }\n * }\n *\n * Modernizr.addTest(detects);\n * ```\n *\n * There is really no difference between the first methods and this one, it is\n * just a convenience to let you write more readable code.\n */\n\n function addTest(feature, test) {\n\n if (typeof feature == 'object') {\n for (var key in feature) {\n if (hasOwnProp(feature, key)) {\n addTest(key, feature[ key ]);\n }\n }\n } else {\n\n feature = feature.toLowerCase();\n var featureNameSplit = feature.split('.');\n var last = Modernizr[featureNameSplit[0]];\n\n // Again, we don't check for parent test existence. Get that right, though.\n if (featureNameSplit.length == 2) {\n last = last[featureNameSplit[1]];\n }\n\n if (typeof last != 'undefined') {\n // we're going to quit if you're trying to overwrite an existing test\n // if we were to allow it, we'd do this:\n // var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n // docElement.className = docElement.className.replace( re, '' );\n // but, no rly, stuff 'em.\n return Modernizr;\n }\n\n test = typeof test == 'function' ? test() : test;\n\n // Set the value (this is the magic, right here).\n if (featureNameSplit.length == 1) {\n Modernizr[featureNameSplit[0]] = test;\n } else {\n // cast to a Boolean, if not one already\n /* jshint -W053 */\n if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = test;\n }\n\n // Set a single class (either `feature` or `no-feature`)\n /* jshint -W041 */\n setClasses([(!!test && test != false ? '' : 'no-') + featureNameSplit.join('-')]);\n /* jshint +W041 */\n\n // Trigger the event\n Modernizr._trigger(feature, test);\n }\n\n return Modernizr; // allow chaining.\n }\n\n // After all the tests are run, add self to the Modernizr prototype\n Modernizr._q.push(function() {\n ModernizrProto.addTest = addTest;\n });\n\n \n\n\n var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n ModernizrProto._cssomPrefixes = cssomPrefixes;\n \n\n /**\n * atRule returns a given CSS property at-rule (eg @keyframes), possibly in\n * some prefixed form, or false, in the case of an unsupported rule\n *\n * @memberof Modernizr\n * @name Modernizr.atRule\n * @optionName Modernizr.atRule()\n * @optionProp atRule\n * @access public\n * @function atRule\n * @param {string} prop - String name of the @-rule to test for\n * @returns {string|false} The string representing the (possibly prefixed)\n * valid version of the @-rule, or `false` when it is unsupported.\n * @example\n * ```js\n * var keyframes = Modernizr.atRule('@keyframes');\n *\n * if (keyframes) {\n * // keyframes are supported\n * // could be `@-webkit-keyframes` or `@keyframes`\n * } else {\n * // keyframes === `false`\n * }\n * ```\n *\n */\n\n var atRule = function(prop) {\n var length = prefixes.length;\n var cssrule = window.CSSRule;\n var rule;\n\n if (typeof cssrule === 'undefined') {\n return undefined;\n }\n\n if (!prop) {\n return false;\n }\n\n // remove literal @ from beginning of provided property\n prop = prop.replace(/^@/, '');\n\n // CSSRules use underscores instead of dashes\n rule = prop.replace(/-/g, '_').toUpperCase() + '_RULE';\n\n if (rule in cssrule) {\n return '@' + prop;\n }\n\n for (var i = 0; i < length; i++) {\n // prefixes gives us something like -o-, and we want O_\n var prefix = prefixes[i];\n var thisRule = prefix.toUpperCase() + '_' + rule;\n\n if (thisRule in cssrule) {\n return '@-' + prefix.toLowerCase() + '-' + prop;\n }\n }\n\n return false;\n };\n\n ModernizrProto.atRule = atRule;\n\n \n\n /**\n * createElement is a convenience wrapper around document.createElement. Since we\n * use createElement all over the place, this allows for (slightly) smaller code\n * as well as abstracting away issues with creating elements in contexts other than\n * HTML documents (e.g. SVG documents).\n *\n * @access private\n * @function createElement\n * @returns {HTMLElement|SVGElement} An HTML or SVG element\n */\n\n function createElement() {\n if (typeof document.createElement !== 'function') {\n // This is the case in IE7, where the type of createElement is \"object\".\n // For this reason, we cannot call apply() as Object is not a Function.\n return document.createElement(arguments[0]);\n } else if (isSVG) {\n return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n } else {\n return document.createElement.apply(document, arguments);\n }\n }\n\n ;\n\n /**\n * Modernizr.hasEvent() detects support for a given event\n *\n * @memberof Modernizr\n * @name Modernizr.hasEvent\n * @optionName Modernizr.hasEvent()\n * @optionProp hasEvent\n * @access public\n * @function hasEvent\n * @param {string|*} eventName is the name of an event to test for (e.g. \"resize\")\n * @param {Element|string} [element=HTMLDivElement] is the element|document|window|tagName to test on\n * @returns {boolean}\n * @example\n * `Modernizr.hasEvent` lets you determine if the browser supports a supplied event.\n * By default, it does this detection on a div element\n *\n * ```js\n * hasEvent('blur') // true;\n * ```\n *\n * However, you are able to give an object as a second argument to hasEvent to\n * detect an event on something other than a div.\n *\n * ```js\n * hasEvent('devicelight', window) // true;\n * ```\n *\n */\n\n var hasEvent = (function(undefined) {\n\n // Detect whether event support can be detected via `in`. Test on a DOM element\n // using the \"blur\" event b/c it should always exist. bit.ly/event-detection\n var needsFallback = !('onblur' in document.documentElement);\n\n function inner(eventName, element) {\n\n var isSupported;\n if (!eventName) { return false; }\n if (!element || typeof element === 'string') {\n element = createElement(element || 'div');\n }\n\n // Testing via the `in` operator is sufficient for modern browsers and IE.\n // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and\n // \"resize\", whereas `in` \"catches\" those.\n eventName = 'on' + eventName;\n isSupported = eventName in element;\n\n // Fallback technique for old Firefox - bit.ly/event-detection\n if (!isSupported && needsFallback) {\n if (!element.setAttribute) {\n // Switch to generic element if it lacks `setAttribute`.\n // It could be the `document`, `window`, or something else.\n element = createElement('div');\n }\n\n element.setAttribute(eventName, '');\n isSupported = typeof element[eventName] === 'function';\n\n if (element[eventName] !== undefined) {\n // If property was created, \"remove it\" by setting value to `undefined`.\n element[eventName] = undefined;\n }\n element.removeAttribute(eventName);\n }\n\n return isSupported;\n }\n return inner;\n })();\n\n\n ModernizrProto.hasEvent = hasEvent;\n \n\n /**\n * cssToDOM takes a kebab-case string and converts it to camelCase\n * e.g. box-sizing -> boxSizing\n *\n * @access private\n * @function cssToDOM\n * @param {string} name - String name of kebab-case prop we want to convert\n * @returns {string} The camelCase version of the supplied name\n */\n\n function cssToDOM(name) {\n return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n return m1 + m2.toUpperCase();\n }).replace(/^-/, '');\n }\n ;\n\n /**\n * domToCSS takes a camelCase string and converts it to kebab-case\n * e.g. boxSizing -> box-sizing\n *\n * @access private\n * @function domToCSS\n * @param {string} name - String name of camelCase prop we want to convert\n * @returns {string} The kebab-case version of the supplied name\n */\n\n function domToCSS(name) {\n return name.replace(/([A-Z])/g, function(str, m1) {\n return '-' + m1.toLowerCase();\n }).replace(/^ms-/, '-ms-');\n }\n ;\n/*!\n{\n \"name\": \"CSS Supports\",\n \"property\": \"supports\",\n \"caniuse\": \"css-featurequeries\",\n \"tags\": [\"css\"],\n \"builderAliases\": [\"css_supports\"],\n \"notes\": [{\n \"name\": \"W3 Spec\",\n \"href\": \"http://dev.w3.org/csswg/css3-conditional/#at-supports\"\n },{\n \"name\": \"Related Github Issue\",\n \"href\": \"github.com/Modernizr/Modernizr/issues/648\"\n },{\n \"name\": \"W3 Info\",\n \"href\": \"http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface\"\n }]\n}\n!*/\n\n var newSyntax = 'CSS' in window && 'supports' in window.CSS;\n var oldSyntax = 'supportsCSS' in window;\n Modernizr.addTest('supports', newSyntax || oldSyntax);\n\n\n /**\n * getBody returns the body of a document, or an element that can stand in for\n * the body if a real body does not exist\n *\n * @access private\n * @function getBody\n * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n * artificially created element that stands in for the body\n */\n\n function getBody() {\n // After page load injecting a fake body doesn't work so check if body exists\n var body = document.body;\n\n if (!body) {\n // Can't use the real body create a fake one.\n body = createElement(isSVG ? 'svg' : 'body');\n body.fake = true;\n }\n\n return body;\n }\n\n ;\n\n /**\n * injectElementWithStyles injects an element with style element and some CSS rules\n *\n * @access private\n * @function injectElementWithStyles\n * @param {string} rule - String representing a css rule\n * @param {function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean}\n */\n\n function injectElementWithStyles(rule, callback, nodes, testnames) {\n var mod = 'modernizr';\n var style;\n var ret;\n var node;\n var docOverflow;\n var div = createElement('div');\n var body = getBody();\n\n if (parseInt(nodes, 10)) {\n // In order not to give false positives we create a node for each test\n // This also allows the method to scale for unspecified uses\n while (nodes--) {\n node = createElement('div');\n node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n div.appendChild(node);\n }\n }\n\n style = createElement('style');\n style.type = 'text/css';\n style.id = 's' + mod;\n\n // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n (!body.fake ? div : body).appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(document.createTextNode(rule));\n }\n div.id = mod;\n\n if (body.fake) {\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = 'hidden';\n docOverflow = docElement.style.overflow;\n docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n ret = callback(div, rule);\n // If this is done after page load we don't want to remove the body so check if body exists\n if (body.fake) {\n body.parentNode.removeChild(body);\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n docElement.offsetHeight;\n } else {\n div.parentNode.removeChild(div);\n }\n\n return !!ret;\n\n }\n\n ;\n\n /**\n * Modernizr.mq tests a given media query, live against the current state of the window\n * adapted from matchMedia polyfill by Scott Jehl and Paul Irish\n * gist.github.com/786768\n *\n * @memberof Modernizr\n * @name Modernizr.mq\n * @optionName Modernizr.mq()\n * @optionProp mq\n * @access public\n * @function mq\n * @param {string} mq - String of the media query we want to test\n * @returns {boolean}\n * @example\n * Modernizr.mq allows for you to programmatically check if the current browser\n * window state matches a media query.\n *\n * ```js\n * var query = Modernizr.mq('(min-width: 900px)');\n *\n * if (query) {\n * // the browser window is larger than 900px\n * }\n * ```\n *\n * Only valid media queries are supported, therefore you must always include values\n * with your media query\n *\n * ```js\n * // good\n * Modernizr.mq('(min-width: 900px)');\n *\n * // bad\n * Modernizr.mq('min-width');\n * ```\n *\n * If you would just like to test that media queries are supported in general, use\n *\n * ```js\n * Modernizr.mq('only all'); // true if MQ are supported, false if not\n * ```\n *\n *\n * Note that if the browser does not support media queries (e.g. old IE) mq will\n * always return false.\n */\n\n var mq = (function() {\n var matchMedia = window.matchMedia || window.msMatchMedia;\n if (matchMedia) {\n return function(mq) {\n var mql = matchMedia(mq);\n return mql && mql.matches || false;\n };\n }\n\n return function(mq) {\n var bool = false;\n\n injectElementWithStyles('@media ' + mq + ' { #modernizr { position: absolute; } }', function(node) {\n bool = (window.getComputedStyle ?\n window.getComputedStyle(node, null) :\n node.currentStyle)['position'] == 'absolute';\n });\n\n return bool;\n };\n })();\n\n\n ModernizrProto.mq = mq;\n\n \n\n /**\n * testStyles injects an element with style element and some CSS rules\n *\n * @memberof Modernizr\n * @name Modernizr.testStyles\n * @optionName Modernizr.testStyles()\n * @optionProp testStyles\n * @access public\n * @function testStyles\n * @param {string} rule - String representing a css rule\n * @param {function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean}\n * @example\n *\n * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n * along with (possibly multiple) DOM elements. This lets you check for features\n * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n *\n * ```js\n * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n * // elem is the first DOM node in the page (by default #modernizr)\n * // rule is the first argument you supplied - the CSS rule in string form\n *\n * addTest('widthworks', elem.style.width === '9px')\n * });\n * ```\n *\n * If your test requires multiple nodes, you can include a third argument\n * indicating how many additional div elements to include on the page. The\n * additional nodes are injected as children of the `elem` that is returned as\n * the first argument to the callback.\n *\n * ```js\n * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n * document.getElementById('modernizr').style.width === '1px'; // true\n * document.getElementById('modernizr2').style.width === '2px'; // true\n * elem.firstChild === document.getElementById('modernizr2'); // true\n * }, 1);\n * ```\n *\n * By default, all of the additional elements have an ID of `modernizr[n]`, where\n * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n * the second additional is `#modernizr3`, etc.).\n * If you want to have more meaningful IDs for your function, you can provide\n * them as the fourth argument, as an array of strings\n *\n * ```js\n * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n * elem.firstChild === document.getElementById('foo'); // true\n * elem.lastChild === document.getElementById('bar'); // true\n * }, 2, ['foo', 'bar']);\n * ```\n *\n */\n\n var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n \n\n\n /**\n * contains checks to see if a string contains another string\n *\n * @access private\n * @function contains\n * @param {string} str - The string we want to check for substrings\n * @param {string} substr - The substring we want to search the first string for\n * @returns {boolean}\n */\n\n function contains(str, substr) {\n return !!~('' + str).indexOf(substr);\n }\n\n ;\n\n /**\n * nativeTestProps allows for us to use native feature detection functionality if available.\n * some prefixed form, or false, in the case of an unsupported rule\n *\n * @access private\n * @function nativeTestProps\n * @param {array} props - An array of property names\n * @param {string} value - A string representing the value we want to check via @supports\n * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n */\n\n // Accepts a list of property names and a single value\n // Returns `undefined` if native detection not available\n function nativeTestProps (props, value) {\n var i = props.length;\n // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n if ('CSS' in window && 'supports' in window.CSS) {\n // Try every prefixed variant of the property\n while (i--) {\n if (window.CSS.supports(domToCSS(props[i]), value)) {\n return true;\n }\n }\n return false;\n }\n // Otherwise fall back to at-rule (for Opera 12.x)\n else if ('CSSSupportsRule' in window) {\n // Build a condition string for every prefixed variant\n var conditionText = [];\n while (i--) {\n conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n }\n conditionText = conditionText.join(' or ');\n return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n return getComputedStyle(node, null).position == 'absolute';\n });\n }\n return undefined;\n }\n ;\n\n /**\n * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n *\n * @access private\n * @function fnBind\n * @param {function} fn - a function you want to change `this` reference to\n * @param {object} that - the `this` you want to call the function with\n * @returns {function} The wrapped version of the supplied function\n */\n\n function fnBind(fn, that) {\n return function() {\n return fn.apply(that, arguments);\n };\n }\n\n ;\n\n /**\n * testDOMProps is a generic DOM property test; if a browser supports\n * a certain property, it won't return undefined for it.\n */\n function testDOMProps(props, obj, elem) {\n var item;\n\n for (var i in props) {\n if (props[i] in obj) {\n\n // return the property name as a string\n if (elem === false) {\n return props[i];\n }\n\n item = obj[props[i]];\n\n // let's bind a function\n if (is(item, 'function')) {\n // bind to obj unless overriden\n return fnBind(item, elem || obj);\n }\n\n // return the unbound function or obj or value\n return item;\n }\n }\n return false;\n }\n\n ;\n\n /**\n * Create our \"modernizr\" element that we do most feature tests on.\n *\n * @access private\n */\n\n var modElem = {\n elem : createElement('modernizr')\n };\n\n // Clean up this element\n Modernizr._q.push(function() {\n delete modElem.elem;\n });\n\n \n\n var mStyle = {\n style : modElem.elem.style\n };\n\n // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n // the front of the queue.\n Modernizr._q.unshift(function() {\n delete mStyle.style;\n });\n\n \n\n // testProps is a generic CSS / DOM property test.\n\n // In testing support for a given CSS property, it's legit to test:\n // `elem.style[styleName] !== undefined`\n // If the property is supported it will return an empty string,\n // if unsupported it will return undefined.\n\n // We'll take advantage of this quick test and skip setting a style\n // on our modernizr element, but instead just testing undefined vs\n // empty string.\n\n // Property names can be provided in either camelCase or kebab-case.\n\n function testProps(props, prefixed, value, skipValueTest) {\n skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n // Try native detect first\n if (!is(value, 'undefined')) {\n var result = nativeTestProps(props, value);\n if (!is(result, 'undefined')) {\n return result;\n }\n }\n\n // Otherwise do it properly\n var afterInit, i, propsLength, prop, before;\n\n // If we don't have a style element, that means we're running async or after\n // the core tests, so we'll need to create our own elements to use\n\n // inside of an SVG element, in certain browsers, the `style` element is only\n // defined for valid tags. Therefore, if `modernizr` does not have one, we\n // fall back to a less used element and hope for the best.\n var elems = ['modernizr', 'tspan'];\n while (!mStyle.style) {\n afterInit = true;\n mStyle.modElem = createElement(elems.shift());\n mStyle.style = mStyle.modElem.style;\n }\n\n // Delete the objects if we created them.\n function cleanElems() {\n if (afterInit) {\n delete mStyle.style;\n delete mStyle.modElem;\n }\n }\n\n propsLength = props.length;\n for (i = 0; i < propsLength; i++) {\n prop = props[i];\n before = mStyle.style[prop];\n\n if (contains(prop, '-')) {\n prop = cssToDOM(prop);\n }\n\n if (mStyle.style[prop] !== undefined) {\n\n // If value to test has been passed in, do a set-and-check test.\n // 0 (integer) is a valid property value, so check that `value` isn't\n // undefined, rather than just checking it's truthy.\n if (!skipValueTest && !is(value, 'undefined')) {\n\n // Needs a try catch block because of old IE. This is slow, but will\n // be avoided in most cases because `skipValueTest` will be used.\n try {\n mStyle.style[prop] = value;\n } catch (e) {}\n\n // If the property value has changed, we assume the value used is\n // supported. If `value` is empty string, it'll fail here (because\n // it hasn't changed), which matches how browsers have implemented\n // CSS.supports()\n if (mStyle.style[prop] != before) {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n // Otherwise just return true, or the property name if this is a\n // `prefixed()` call\n else {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n }\n cleanElems();\n return false;\n }\n\n ;\n\n /**\n * testProp() investigates whether a given style property is recognized\n * Property names can be provided in either camelCase or kebab-case.\n *\n * @memberof Modernizr\n * @name Modernizr.testProp\n * @access public\n * @optionName Modernizr.testProp()\n * @optionProp testProp\n * @function testProp\n * @param {string} prop - Name of the CSS property to check\n * @param {string} [value] - Name of the CSS value to check\n * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported\n * @returns {boolean}\n * @example\n *\n * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed\n * version of the string.\n *\n * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing)\n *\n * ```js\n * Modernizr.testProp('pointerEvents') // true\n * ```\n *\n * You can also provide a value as an optional second argument to check if a\n * specific value is supported\n *\n * ```js\n * Modernizr.testProp('pointerEvents', 'none') // true\n * Modernizr.testProp('pointerEvents', 'penguin') // false\n * ```\n */\n\n var testProp = ModernizrProto.testProp = function(prop, value, useValue) {\n return testProps([prop], undefined, value, useValue);\n };\n \n\n /**\n * testPropsAll tests a list of DOM properties we want to check against.\n * We specify literally ALL possible (known and/or likely) properties on\n * the element including the non-vendor prefixed one, for forward-\n * compatibility.\n */\n function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n // did they call .prefixed('boxSizing') or are we just testing a prop?\n if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n return testProps(props, prefixed, value, skipValueTest);\n\n // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n } else {\n props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n return testDOMProps(props, prefixed, elem);\n }\n }\n\n // Modernizr.testAllProps() investigates whether a given style property,\n // or any of its vendor-prefixed variants, is recognized\n //\n // Note that the property names must be provided in the camelCase variant.\n // Modernizr.testAllProps('boxSizing')\n ModernizrProto.testAllProps = testPropsAll;\n\n \n\n /**\n * prefixed returns the prefixed or nonprefixed property name variant of your input\n *\n * @memberof Modernizr\n * @name Modernizr.prefixed\n * @optionName Modernizr.prefixed()\n * @optionProp prefixed\n * @access public\n * @function prefixed\n * @param {string} prop - String name of the property to test for\n * @param {object} [obj]- An object to test for the prefixed properties on\n * @returns {string|false} The string representing the (possibly prefixed) valid\n * version of the property, or `false` when it is unsupported.\n * @example\n *\n * Modernizr.prefixed takes a string css value in the DOM style camelCase (as\n * opposed to the css style kebab-case) form and returns the (possibly prefixed)\n * version of that property that the browser actually supports.\n *\n * For example, in older Firefox...\n * ```js\n * prefixed('boxSizing')\n * ```\n * returns 'MozBoxSizing'\n *\n * In newer Firefox, as well as any other browser that support the unprefixed\n * version would simply return `boxSizing`. Any browser that does not support\n * the property at all, it will return `false`.\n *\n * By default, prefixed is checked against a DOM element. If you want to check\n * for a property on another object, just pass it as a second argument\n *\n * ```js\n * var rAF = prefixed('requestAnimationFrame', window);\n *\n * raf(function() {\n * renderFunction();\n * })\n * ```\n *\n * Note that this will return _the actual function_ - not the name of the function.\n * If you need the actual name of the property, pass in `false` as a third argument\n *\n * ```js\n * var rAFProp = prefixed('requestAnimationFrame', window, false);\n *\n * rafProp === 'WebkitRequestAnimationFrame' // in older webkit\n * ```\n *\n * One common use case for prefixed is if you're trying to determine which transition\n * end event to bind to, you might do something like...\n * ```js\n * var transEndEventNames = {\n * 'WebkitTransition' : 'webkitTransitionEnd', * Saf 6, Android Browser\n * 'MozTransition' : 'transitionend', * only for FF < 15\n * 'transition' : 'transitionend' * IE10, Opera, Chrome, FF 15+, Saf 7+\n * };\n *\n * var transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n * ```\n *\n * If you want a similar lookup, but in kebab-case, you can use [prefixedCSS](#modernizr-prefixedcss).\n */\n\n var prefixed = ModernizrProto.prefixed = function(prop, obj, elem) {\n if (prop.indexOf('@') === 0) {\n return atRule(prop);\n }\n\n if (prop.indexOf('-') != -1) {\n // Convert kebab-case to camelCase\n prop = cssToDOM(prop);\n }\n if (!obj) {\n return testPropsAll(prop, 'pfx');\n } else {\n // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n return testPropsAll(prop, obj, elem);\n }\n };\n\n \n\n /**\n * prefixedCSS is just like [prefixed](#modernizr-prefixed), but the returned values are in\n * kebab-case (e.g. `box-sizing`) rather than camelCase (boxSizing).\n *\n * @memberof Modernizr\n * @name Modernizr.prefixedCSS\n * @optionName Modernizr.prefixedCSS()\n * @optionProp prefixedCSS\n * @access public\n * @function prefixedCSS\n * @param {string} prop - String name of the property to test for\n * @returns {string|false} The string representing the (possibly prefixed)\n * valid version of the property, or `false` when it is unsupported.\n * @example\n *\n * `Modernizr.prefixedCSS` is like `Modernizr.prefixed`, but returns the result\n * in hyphenated form\n *\n * ```js\n * Modernizr.prefixedCSS('transition') // '-moz-transition' in old Firefox\n * ```\n *\n * Since it is only useful for CSS style properties, it can only be tested against\n * an HTMLElement.\n *\n * Properties can be passed as both the DOM style camelCase or CSS style kebab-case.\n */\n\n var prefixedCSS = ModernizrProto.prefixedCSS = function(prop) {\n var prefixedProp = prefixed(prop);\n return prefixedProp && domToCSS(prefixedProp);\n };\n \n\n /**\n * testAllProps determines whether a given CSS property is supported in the browser\n *\n * @memberof Modernizr\n * @name Modernizr.testAllProps\n * @optionName Modernizr.testAllProps()\n * @optionProp testAllProps\n * @access public\n * @function testAllProps\n * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n * @param {string} [value] - String of the value to test\n * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n * @example\n *\n * testAllProps determines whether a given CSS property, in some prefixed form,\n * is supported by the browser.\n *\n * ```js\n * testAllProps('boxSizing') // true\n * ```\n *\n * It can optionally be given a CSS value in string form to test if a property\n * value is valid\n *\n * ```js\n * testAllProps('display', 'block') // true\n * testAllProps('display', 'penguin') // false\n * ```\n *\n * A boolean can be passed as a third parameter to skip the value check when\n * native detection (@supports) isn't available.\n *\n * ```js\n * testAllProps('shapeOutside', 'content-box', true);\n * ```\n */\n\n function testAllProps (prop, value, skipValueTest) {\n return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n }\n ModernizrProto.testAllProps = testAllProps;\n \n/*!\n{\n \"name\": \"CSS Animations\",\n \"property\": \"cssanimations\",\n \"caniuse\": \"css-animation\",\n \"polyfills\": [\"transformie\", \"csssandpaper\"],\n \"tags\": [\"css\"],\n \"warnings\": [\"Android < 4 will pass this test, but can only animate a single property at a time\"],\n \"notes\": [{\n \"name\" : \"Article: 'Dispelling the Android CSS animation myths'\",\n \"href\": \"http://goo.gl/OGw5Gm\"\n }]\n}\n!*/\n/* DOC\nDetects whether or not elements can be animated using CSS\n*/\n\n Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));\n\n/*!\n{\n \"name\": \"Flexbox\",\n \"property\": \"flexbox\",\n \"caniuse\": \"flexbox\",\n \"tags\": [\"css\"],\n \"notes\": [{\n \"name\": \"The _new_ flexbox\",\n \"href\": \"http://dev.w3.org/csswg/css3-flexbox\"\n }],\n \"warnings\": [\n \"A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect.\"\n ]\n}\n!*/\n/* DOC\nDetects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.\n*/\n\n Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));\n\n/*!\n{\n \"name\": \"CSS Transforms\",\n \"property\": \"csstransforms\",\n \"caniuse\": \"transforms2d\",\n \"tags\": [\"css\"]\n}\n!*/\n\n Modernizr.addTest('csstransforms', function() {\n // Android < 3.0 is buggy, so we sniff and blacklist\n // http://git.io/hHzL7w\n return navigator.userAgent.indexOf('Android 2.') === -1 &&\n testAllProps('transform', 'scale(1)', true);\n });\n\n/*!\n{\n \"name\": \"CSS Transforms 3D\",\n \"property\": \"csstransforms3d\",\n \"caniuse\": \"transforms3d\",\n \"tags\": [\"css\"],\n \"warnings\": [\n \"Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004\"\n ]\n}\n!*/\n\n Modernizr.addTest('csstransforms3d', function() {\n var ret = !!testAllProps('perspective', '1px', true);\n var usePrefix = Modernizr._config.usePrefixes;\n\n // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n // some conditions. As a result, Webkit typically recognizes the syntax but\n // will sometimes throw a false positive, thus we must do a more thorough check:\n if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {\n var mq;\n // Use CSS Conditional Rules if available\n if (Modernizr.supports) {\n mq = '@supports (perspective: 1px)';\n } else {\n // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.\n // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n mq = '@media (transform-3d)';\n if (usePrefix) {\n mq += ',(-webkit-transform-3d)';\n }\n }\n // If loaded inside the body tag and the test element inherits any padding, margin or borders it will fail #740\n mq += '{#modernizr{left:9px;position:absolute;height:5px;margin:0;padding:0;border:0}}';\n\n testStyles(mq, function(elem) {\n ret = elem.offsetLeft === 9 && elem.offsetHeight === 5;\n });\n }\n\n return ret;\n });\n\n/*!\n{\n \"name\": \"CSS Transitions\",\n \"property\": \"csstransitions\",\n \"caniuse\": \"css-transitions\",\n \"tags\": [\"css\"]\n}\n!*/\n\n Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));\n\n/*!\n MixBlendMode\n!*/\n Modernizr.addTest('mix-blend-mode', function(){\n return Modernizr.testProp('mixBlendMode');\n });\n \n/*!\n{\n \"name\": \"Touch Events\",\n \"property\": \"touchevents\",\n \"caniuse\" : \"touch\",\n \"tags\": [\"media\", \"attribute\"],\n \"notes\": [{\n \"name\": \"Touch Events spec\",\n \"href\": \"https://www.w3.org/TR/2013/WD-touch-events-20130124/\"\n }],\n \"warnings\": [\n \"Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device\"\n ],\n \"knownBugs\": [\n \"False-positive on some configurations of Nokia N900\",\n \"False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695\"\n ]\n}\n!*/\n/* DOC\nIndicates if the browser supports the W3C Touch Events API.\n\nThis *does not* necessarily reflect a touchscreen device:\n\n* Older touchscreen devices only emulate mouse events\n* Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that\n* Some browsers & OS setups may enable touch APIs when no touchscreen is connected\n* Future browsers may implement other event models for touch interactions\n\nSee this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/).\n\nIt's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](http://www.html5rocks.com/en/mobile/touchandmouse/).\n\nThis test will also return `true` for Firefox 4 Multitouch support.\n*/\n\n // Chrome (desktop) used to lie about its support on this, but that has since been rectified: http://crbug.com/36415\n Modernizr.addTest('touchevents', function() {\n var bool;\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n bool = true;\n } else {\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n // https://git.io/vznFH\n var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');\n testStyles(query, function(node) {\n bool = node.offsetTop === 9;\n });\n }\n return bool;\n });\n\n\n // Run each test\n testRunner();\n\n // Remove the \"no-js\" class if it exists\n setClasses(classes);\n\n delete ModernizrProto.addTest;\n delete ModernizrProto.addAsyncTest;\n\n // Run the things that are supposed to run after the tests\n for (var i = 0; i < Modernizr._q.length; i++) {\n Modernizr._q[i]();\n }\n\n // Leak Modernizr namespace\n window.Modernizr = Modernizr;\n\n\n;\n\n})(window, document);\n","$(function() {\n\n\n /*\n * VARIABLES\n ***********************************/\n var $cursor = $('.js-cursor'),\n $icon = $('.js-cursor-icon'),\n $action = $('.js-action'),\n iconDefault = $icon.data('default'),\n iconAction = $icon.data('action');\n\n $body.on('mousemove', function(event) {\n $cursor.css('top', event.clientY);\n $cursor.css('left', event.clientX);\n });\n\n $action.hover(function() {\n $icon.css('background-image', 'url(\"' + iconAction + '\")');\n $cursor.addClass('in-action');\n }, function() {\n $icon.css('background-image', 'url(\"' + iconDefault + '\")');\n $cursor.removeClass('in-action');\n });\n\n $doc.ready(function() {\n $icon.css('background-image', 'url(\"' + iconDefault + '\")');\n });\n\n});\n","/**\n * LOADER.JS\n * Manage loader hide on window load\n ************************************ */\n\n$(function() {\n 'use strict';\n\n\n /**\n * Variables\n ********************* */\n var $loader = $('.js-loader');\n\n\n /**\n * Actions\n ********************* */\n $win.on('load', function() {\n $loader.removeClass('is-active');\n });\n\n});\n","/**\n * _browser.js\n * Display a message to non supported browser.\n *\n * If needed you can update the markup of the message\n * and/or the body of browserIsCompatible() function to adjust the test based on which browsers you want to support.\n */\n\n$(function() {\n 'use strict';\n\n var html = '
\\\n
\\\n

Votre navigateur est désuet !

\\\n

Mettez à jour votre navigateur pour afficher correctement ce site Web.

\\\n

Mettre à jour maintenant

\\\n

\\\n
\\\n

';\n\n function browserIsCompatible(){\n // By default we treat all browsers has compatible\n var isCompatible = true;\n\n /*\n * No IE versions supports @supports{} and if we rely on caniuse stats this feature is pretty well supported :\n * https://caniuse.com/#search=supports\n * So this must cover our comptaibility expectations (usually last 2 versions)\n */\n var cssSupports = 'CSS' in window && 'supports' in window.CSS || 'supportsCSS' in window;\n // Target IE11 only : https://stackoverflow.com/questions/21825157/internet-explorer-11-detection\n var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\n\n // If doesn't support @supports{} and is not IE11\n if(!cssSupports && !isIE11){\n isCompatible = false;\n }\n\n return isCompatible;\n }\n\n // When DOM is ready, if browser is not supported then we display the disclaimer message.\n $(document).ready(function(){\n if(!browserIsCompatible()){\n $('body').prepend(html);\n\n $('#close-browser').on('click', function() {\n $('#browser').remove();\n });\n }\n });\n\n});\n","/**\n * _javascript.js\n * Display a message to JavaScript disabled browser.\n */\n\n$(function() {\n 'use strict';\n\n $(document).ready(function(){\n $('#javascript-disabled').remove();\n });\n\n});\n","// Parallax\n\n$(function() {\n 'use strict';\n\n\n // Variables\n var $parallax = $('.js-parallax');\n\n\n // Functions\n function setTransform(init) {\n\n $parallax.each(function() {\n var $this = $(this),\n $section = $this.parents('.js-section');\n\n if($section.hasClass('is-active') || init) {\n var height = $this.outerHeight(),\n offset = $this.data('parallax-offset'),\n reference = offset + height / 2,\n scrollTop = $win.scrollTop() + $win.outerHeight() / 2,\n factor = $this.data('parallax-factor'),\n translate = (reference - scrollTop) / factor;\n\n $this.css(Modernizr.prefixed('transform'), 'translate3d(0, ' + translate + 'px, 0)');\n }\n });\n }\n\n\n $win.on('load', function() {\n\n\n // Load\n $parallax.each(function() {\n var $this = $(this),\n offset = $this.offset().top,\n factors = [2, 3, 4, 5, 6, 7, 8, 9, 10],\n factor = $this.data('parallax-factor') ? $this.data('parallax-factor') : factors[Math.floor(Math.random()*factors.length)];\n\n $this.attr('data-parallax-offset', offset);\n $this.attr('data-parallax-factor', factor);\n });\n\n\n // Init\n setTransform(true);\n\n\n // Scroll\n $win.on('scroll', function() {\n setTransform(false);\n });\n\n });\n\n});\n","$(function() {\n\n\n /*\n * VARIABLES\n ***********************************/\n var $item = $('.js-navigation-item'),\n $chapter = $('.js-chapter'),\n margin = $win.outerHeight();\n\n\n\n /*\n * INIT\n ***********************************/\n\n $win.on('scroll', function() {\n var scrollTop = $win.scrollTop();\n\n $chapter.each(function() {\n var $this = $(this),\n $section = $this.parents('.js-section'),\n id = $this.attr('id'),\n $item = $('.js-navigation-item[data-id=' + id + ']'),\n start = $this.offset().top - margin,\n end = (start + $this.outerHeight()) + margin / 2;\n\n if(scrollTop >= start && scrollTop < end) {\n $section.addClass('is-active');\n\n if($item.length > 0) {\n $item.addClass('is-active');\n }\n }\n else {\n $section.removeClass('is-active');\n\n if($item.length > 0) {\n $item.removeClass('is-active');\n }\n }\n });\n });\n\n});\n","$(function() {\n\n if (('IntersectionObserver' in window)) {\n\n\n /*\n * VARIABLES\n ***********************************/\n\n var blanks = [];\n var markers = document.querySelectorAll('[id*=\"marker-\"]');\n var paths = [];\n var path_lengths = [];\n var observer;\n var scroll_direction = 1;\n var scroll_tmp = window.scrollY;\n var is_updating = false;\n\n\n /*\n * FUNCTIONS\n ***********************************/\n \n // Generates the threshold array for IntersectionObserver (ex: [0, 0.1, 0.2, …, 0.9, 1])\n var build_threshold_list = function (steps) {\n var thresholds = [];\n\n for (var i=1.0; i<=steps; i++) {\n var ratio = i/steps;\n thresholds.push(ratio);\n }\n\n thresholds.push(0);\n return thresholds;\n };\n\n // Init all vars ans objects\n var init = function () {\n // Initiate IntersectionObserver\n observer = new IntersectionObserver(update, { threshold: build_threshold_list(100) });\n\n // Browse all blanks and init vars\n document.querySelectorAll('.js-blank').forEach(function (blank, index) {\n var path = document.getElementById(blank.getAttribute(\"data-target\"));\n var path_length = Math.round(path.getTotalLength());\n\n path.style.strokeDasharray = path_length;\n path.style.strokeDashoffset = path_length;\n \n observer.observe(blank);\n\n blanks.push(blank);\n paths.push(path);\n path_lengths.push(path_length);\n });\n \n // Initiate SmootScroll - https://github.com/gblazex/smoothscroll-for-websites/wiki\n // SmoothScroll({\n // animationTime: 2000,\n // stepSize: 100,\n // accelerationDelta: 50,\n // accelerationMax: 1,\n // });\n \n // Add class to body after init\n document.body.classList.add('is-init');\n };\n \n // Update vars for paths. Trigerred by IntersectionObserver\n var update = function (observables) {\n \n // Browse all element observed \n observables.forEach(function(o) {\n // If element is in viewport\n if(o.intersectionRatio > 0) {\n var index = parseInt(o.target.getAttribute('data-index')); // Get the index of element\n var current_path = paths[index].style.strokeDashoffset; // Get the current size of path\n var sensitivity = Math.round(path_lengths[index] / 20);\n\n var new_path = current_path;\n\n if(\n (scroll_direction > 0 && o.boundingClientRect.top > 0) || // Scrolling Down and intersectionRatio is increasing\n (scroll_direction < 0 && o.boundingClientRect.bottom > o.boundingClientRect.height) // Scrolling Up and intersectionRatio is decreasing\n ) {\n new_path = Math.round(path_lengths[index] + path_lengths[index] * o.intersectionRatio);\n }\n \n var is_leaving_start = (current_path < path_lengths[index] + sensitivity && new_path >= path_lengths[index] + sensitivity);\n var is_leaving_end = (current_path > path_lengths[index] * 2 - sensitivity && new_path <= path_lengths[index] * 2 - sensitivity);\n var is_reaching_start = (current_path > path_lengths[index] + sensitivity && new_path <= path_lengths[index] + sensitivity);\n var is_reaching_end = (current_path < path_lengths[index] * 2 - sensitivity && new_path >= path_lengths[index] * 2 - sensitivity);\n\n \n if(is_leaving_start || is_leaving_end) {\n update_markers();\n } else if(is_reaching_start) {\n update_markers(index);\n paths[index].style.strokeDashoffset = path_lengths[index] * 2;\n } else if(is_reaching_end) {\n update_markers(index+1);\n paths[index].style.strokeDashoffset = path_lengths[index] * 2;\n }\n\n paths[index].style.strokeDashoffset = new_path;\n }\n });\n };\n \n var update_markers = function (index) {\n\n markers.forEach(function(marker) {\n marker.classList.remove('is-active');\n });\n \n if(typeof index !== 'undefined') {\n markers[index].classList.add('is-active');\n }\n };\n \n var vh_unit = function () {\n var $tmp = $('
').appendTo($('body'));\n\n $tmp.css({ height: '100vh', width: 0});\n var vhOffset = $tmp.height() - $(window).height();\n\n $tmp.css({ height: 0, width: '100vw'});\n var vwOffset = $tmp.width() - $(window).width();\n\n $tmp.remove();\n\n if(vhOffset > 0){\n $('html').attr('style', '--vh-offset: ' + vhOffset + 'px;');\n }\n\n if(vwOffset > 0){\n $('html').attr('style', '--vw-offset: ' + vwOffset + 'px;');\n }\n };\n \n\n\n /*\n * LISTENERS\n ***********************************/\n \n\n // Set data attributes on body depending of the scroll direction\n document.addEventListener('scroll', function(event) {\n if(window.scrollY - scroll_tmp > 0) {\n scroll_direction = 1;\n } else {\n scroll_direction = -1;\n }\n document.body.setAttribute('data-scroll-direction', scroll_direction);\n scroll_tmp = window.scrollY;\n });\n \n // Init\n init();\n vh_unit();\n\n }\n});\n"]}