{"version":3,"sources":["../../../node_modules/svg4everybody/dist/svg4everybody.js","../../../node_modules/smoothscroll-for-websites/SmoothScroll.js","front/_canvas.js","front/_filters.js","front/_projects.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","$","load","width","strokecolor","canvas","ctx","points","getContext","requestAnimFrame","density","z","px","random","py","p","originX","originY","c","Circle","circle","addClass","initHeader","animate","shiftPoint","initAnimation","mouseMove","resize","posx","posy","pageX","pageY","clientX","clientY","innerWidth","clearRect","getDistance","active","draw","TweenLite","to","ease","Sine","easeInOut","onComplete","pos","rad","_this","radius","beginPath","arc","PI","strokeStyle","stroke","p1","p2","pow","jQuery","on","$this","data","$filters","$items","$targets","not","removeClass","fadeOut","fadeIn","ready","each","distance","css"],"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","/**\n * CANVAS.JS\n * Manage canvas animation (introduction section)\n ************************************ */\n\n//= require_self\n\n(function($) { \n\n $(window).load(function() {\n\n if (!!!document.createElement(\"canvas\").getContext) return;\n \n window.requestAnimFrame = (function(){\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n function( callback ){\n window.setTimeout(callback, 1000 / 60);\n };\n })();\n \n var width, height, strokecolor, canvas, ctx, points, target;\n\n initHeader();\n initAnimation();\n addListeners();\n\n function initHeader() {\n \n /**\n * VARS\n ********************************* */\n width = $('#main').width();\n height = $('#main').height();\n target = {x: width/2, y: height/2};\n \n canvas = document.getElementById('canvas');\n strokecolor = canvas.getAttribute(\"data-strokecolor\"); \n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext('2d');\n\n /**\n * GRID\n * - Création des points par rapport à une grille\n * = 3 colonnes / 3 lignes\n * = density : augmente la densité des points au centre\n ********************************* */\n // create points\n points = [];\n\n for(var x = 0; x < width; x = x + width/2) {\n // console.log('new col');\n density = 1;\n for(var y = 0; y < height; y = y + height/6) {\n\n z = 0;\n \n // console.log(density);\n\n while(z < density) {\n var px = x + Math.random()*width/2;\n var py = y + Math.random()*height/4;\n var p = {x: px, originX: px, y: py, originY: py };\n points.push(p);\n z++;\n // console.log('created ' + z + ' point(s)');\n }\n }\n }\n\n /**\n * FOREACH POINT\n * - Création des cercles pleins\n * = c : taille des cercles et couleur/opacité\n ********************************* */\n // assign a circle to each point\n for(var i in points) {\n var c = new Circle(points[i], 20+Math.random()*120);\n points[i].circle = c;\n }\n\n $('.main__content').addClass('main__content--visible');\n }\n\n // Event handling\n function addListeners() {\n window.addEventListener('mousemove', mouseMove);\n window.addEventListener('resize', resize);\n }\n\n function mouseMove(e) {\n var posx = posy = 0;\n if (e.pageX || e.pageY) {\n posx = e.pageX - width*0.1;\n posy = e.pageY - height*0.1;\n }\n else if (e.clientX || e.clientY) {\n posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n }\n target.x = posx;\n target.y = posy;\n }\n\n function resize() {\n width = window.innerWidth;\n height = window.innerHeight; \n canvas.width = width;\n canvas.height = height;\n }\n\n // animation\n function initAnimation() {\n animate();\n for(var i in points) {\n shiftPoint(points[i]);\n }\n }\n\n /**\n * ANIMATE\n * - Réactions au survol de la souris\n * = active : opacité des cercles et des lignes au survol selon la distance\n ********************************* */\n function animate() {\n ctx.clearRect(0,0,width,height);\n for(var i in points) { \n // detect points in range\n if(Math.abs(getDistance(target, points[i])) < 5000) { \n points[i].active = 0.5;\n points[i].circle.active = 0.45;\n } else if(Math.abs(getDistance(target, points[i])) < 25000) { \n points[i].active = 0.35;\n points[i].circle.active = 0.4;\n } else if(Math.abs(getDistance(target, points[i])) < 50000) {\n points[i].active = 0.3;\n points[i].circle.active = 0.35;\n } else {\n points[i].active = 0.25;\n points[i].circle.active = 0.3;\n }\n\n points[i].circle.draw();\n }\n requestAnimFrame(animate);\n }\n\n /**\n * SHIFT POINT\n * - Amplitude du mouvement des points\n * x, y : coordonnées aléatoires x 12\n ********************************* */\n function shiftPoint(p) {\n TweenLite.to(p, 1+1*Math.random(),\n {x: p.originX-10+Math.random()*20,\n y: p.originY-10+Math.random()*20,\n ease:Sine.easeInOut,\n onComplete: function() {\n shiftPoint(p);\n }});\n }\n\n function Circle(pos,rad) {\n var _this = this;\n\n // constructor\n (function() {\n _this.pos = pos || null;\n _this.radius = rad || null;\n })();\n\n this.draw = function() {\n if(!_this.active) return;\n ctx.beginPath();\n ctx.arc(_this.pos.x, _this.pos.y, _this.radius, 0, 2 * Math.PI, false);\n ctx.strokeStyle = 'rgba('+strokecolor+','+ _this.active+')';\n ctx.stroke();\n };\n }\n\n // Util\n function getDistance(p1, p2) {\n return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2);\n }\n });\n})(jQuery);\n","$(function() {\n 'use strict';\n\n $('.js-filters-item').on('click', function(event) {\n event.preventDefault();\n\n var $this = $(this),\n id = $this.data('id'),\n $filters = $('.js-filters-item'),\n $items = $('.js-projects-item'),\n $targets = (id == \"all\") ? $items : $('.js-projects-item[data-category=' + id + ']');\n\n $filters.not($this).removeClass('is-active');\n $this.addClass('is-active');\n\n $items.not($targets).fadeOut();\n $targets.fadeIn();\n });\n\n});\n","$(document).ready(function() {\n\n $('.js-projects-item').each(function() {\n var distance = (Math.random() * 31) + 10;\n\n if(Math.random() > 0.5) {\n $(this).addClass('is-lefty').css('left', distance + \"%\");\n }\n else {\n $(this).addClass('is-righty').css('right', distance + \"%\");\n }\n });\n});\n"]}