diff --git a/docs/bundle-ef0d2fcfbfeb97467a99.js b/docs/bundle-ae174a5634dc33a81f45.js similarity index 84% rename from docs/bundle-ef0d2fcfbfeb97467a99.js rename to docs/bundle-ae174a5634dc33a81f45.js index 90c835b..bc3b131 100644 --- a/docs/bundle-ef0d2fcfbfeb97467a99.js +++ b/docs/bundle-ae174a5634dc33a81f45.js @@ -7,7 +7,7 @@ function(e,t,n){e.exports=n(/*! ./js/index */8)},/*!************************!*\ function(e,t){e.exports="data:image/png;base64,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"},/*!*******************!*\ !*** ./js/app.js ***! \*******************/ -function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.app=void 0;var r=n(/*! ../sounds/tweet.mp3 */14),i=o(r),a=n(/*! ../sounds/ding.mp3 */13),s=o(a),l=n(/*! ../images/owl.png */1),c=o(l),u=n(/*! ./settings */10),d=n(/*! ./animation-control */6),f=n(/*! ./clock-container */3),v=n(/*! ./modal */9),p="dim",g=new u.Settings;f.clockContainer.updateOpacity(g.clockOpacity);var m=void 0,y=void 0,L=void 0,k=void 0,h=void 0,W=0,b="Leave this running...",E=function(){A(),v.modal.show()},I=function(){x()},Z=function(){V(),m.innerHTML="Please allow notifications to use Eye Hoot."},x=function(){window.Notification&&"denied"!==Notification.permission?Notification.requestPermission(function(e){"granted"===e?N():Z()}):Z()},A=function(){m=document.querySelector(".message"),L=document.querySelector(".break-over"),L.src=s.default,y=document.querySelector(".break-start"),y.src=i.default,k=document.querySelector(".owl-svg")},q=function(e){m.innerHTML=e},V=function(){[k,m].forEach(function(e){return e.classList.add(p)})},O=function(){[k,m].forEach(function(e){e.classList.contains(p)&&e.classList.remove(p)})},R=function(){O(),d.animationControl.playAnimation(),q(d.animationControl.getAnimationMessage())},w=function(){d.animationControl.stopAnimation()},J=function(){O(),d.animationControl.startStopLongBreakAnimation(),q(d.animationControl.longBreakAnimationMessage)},F=function(){d.animationControl.startStopLongBreakAnimation()},B=function(e){var t=new Notification("Eye Hoot",{body:e,icon:c.default,requireInteraction:!0});T(y),t.onclick=C.bind(t)},C=function(){window.focus(),this.close(),g.close(),W=t&&r<=n},d=function(e){e.classList.add(l)},f=function(e){e.classList.contains(l)&&e.classList.remove(l)},v=function(e){var t=e.parentElement,o=t.clientWidth,l=t.offsetLeft,c=t.clientHeight,u=t.offsetTop,d=o+l-r+a,f=c+u-i+s;n.style.left=d+"px",n.style.top=f+"px"},p=function(){n.classList.contains(c)&&n.classList.remove(c),n.classList.add(c),setTimeout(function(){n.classList.remove(c)},2e3)},g=function(e){f(e),v(e),p()},m={isValidNumber:u,markElementInvalid:d,markElementValid:g,clearMarkers:f};t.validation=m},/*!*************************!*\ +function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=document.querySelector(".check-svg"),o=n.getClientRects()[0],r=o.width,i=o.height/2,a=3,s=5,l="settings-input-error",c="visible",u=function(e,t,n){var o=/^(?:[1-9]\d*|0)$/.test(e),r=parseInt(e,10);return o&&r>=t&&r<=n},d=function(e){e.classList.add(l)},f=function(e){e.classList.contains(l)&&e.classList.remove(l)},v=function(e){var t=e.parentElement,o=t.clientWidth,l=t.offsetLeft,c=t.clientHeight,u=t.offsetTop,d=o+l-r+a,f=c+u-i+s;n.style.left=d+"px",n.style.top=f+"px"},m=function(){n.classList.contains(c)&&n.classList.remove(c),n.classList.add(c),setTimeout(function(){n.classList.remove(c)},2e3)},p=function(e){f(e),v(e),m()},g={isValidNumber:u,markElementInvalid:d,markElementValid:p,clearMarkers:f};t.validation=g},/*!*************************!*\ !*** ./css/styles.scss ***! \*************************/ function(e,t){},/*!*************************!*\ @@ -44,4 +44,4 @@ function(e,t,n){e.exports=n.p+"b506a66a688dd0df4b191f1ff1611c45.mp3"},/*!******* !*** ./sounds/tweet.mp3 ***! \**************************/ function(e,t,n){e.exports=n.p+"9a62c3d1f3ca4b470bc4a446f5c9c9e1.mp3"}]); -//# sourceMappingURL=bundle-ef0d2fcfbfeb97467a99.js.map \ No newline at end of file +//# sourceMappingURL=bundle-ae174a5634dc33a81f45.js.map \ No newline at end of file diff --git a/docs/bundle-ae174a5634dc33a81f45.js.map b/docs/bundle-ae174a5634dc33a81f45.js.map new file mode 100644 index 0000000..1b90bea --- /dev/null +++ b/docs/bundle-ae174a5634dc33a81f45.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///bundle-ae174a5634dc33a81f45.js","webpack:///webpack/bootstrap ae174a5634dc33a81f45","webpack:///./images/owl.png","webpack:///./js/app.js","webpack:///./js/clock-container.js","webpack:///./js/controller.js","webpack:///./js/persistence.js","webpack:///./js/animation-control.js","webpack:///./js/conversion.js","webpack:///./js/index.js","webpack:///./js/modal.js","webpack:///./js/settings.js","webpack:///./js/validation.js","webpack:///./sounds/ding.mp3","webpack:///./sounds/tweet.mp3"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","app","undefined","_tweet","_tweet2","_ding","_ding2","_owl","_owl2","_settings","_animationControl","_clockContainer","_modal","DIM_CSS_CLASS","settings","Settings","clockContainer","updateOpacity","clockOpacity","messageElement","audioBreakStartEl","audioBreakOverEl","owlSvg","clock","timeElapsed","WORK_MESSAGE","start","findElements","modal","show","startContinue","requestPermission","handleNotificationDenied","dim","innerHTML","window","Notification","permission","status","startWork","document","querySelector","src","updateMessage","message","forEach","el","classList","add","brighten","contains","remove","startAnimation","animationControl","playAnimation","getAnimationMessage","stopAnimation","startLongBreakAnimation","startStopLongBreakAnimation","longBreakAnimationMessage","stopBreakAnimation","notify","n","body","icon","requireInteraction","playSound","onclick","notificationClickedHandler","bind","focus","this","close","longBreakInterval","startAnimationClock","eyeExerciseDuration","longBreakDuration","element","soundEnabled","play","interval","$","FlipClock","clockFace","countdown","callbacks","stop","stopAnimationClockHandler","eyeExerciseInterval","console","debug","startWorkClock","reset","stopWorkClockHandler","notifyBody","clockContainerEl","opacity","style","controller","_app","update","key","val","APP_KEY","storageAvailable","type","storage","x","setItem","removeItem","e","localStorageAvailable","saveItem","localStorage","save","retrieveItem","getItem","retrieve","defaultVal","result","removeAll","clear","exists","persistence","windowSvg","owlGraphic","eyes","leftEyeShine","rightEyeShine","leftWing","rightWing","feet","querySelectorAll","leftFoot","rightFoot","animationIndex","init","owlGraphicBbox","getBBox","owlGraphicToX","width","owlGraphicToY","y","height","eyesBbox","eyesToX","eyesToY","leftWingBbox","leftWingToX","leftWingToY","rightWingBbox","rightWingToX","rightWingToY","i","length","footEl","footBbox","footToX","footToY","sideToSide","toggle","upDown","aroundRight","aroundLeft","blinkEyes","farFocus","coverEyes","longBreak","EYE_ANIMATIONS","EYE_ANIMATIONS_MESSAGES","SECONDS_IN_MINUTE","secondsToMinutes","minutesToSeconds","stringToBoolean","stringToInt","parseInt","isNaN","Error","stringToFloat","parseFloat","conversion","addEventListener","_controller","_persistence","HAS_SEEN_INTRO_KEY","modalEl","modalOverlayEl","modalCloseEl","modalStartEl","modalLogoEl","_hasSeenIntro","open","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","prototype","_conversion","_validation","DEFAULT_SOUND_ENABLED","DEFAULT_CLOCK_OPACITY","SETTINGS_HIDDEN_CLASS","containerEl","eyeExerciseIntervalEl","getElementsByName","longBreakIntervalEl","longBreakDurationEl","soundEnabledEl","getElementById","clockOpacityEl","closeSettingsEl","openSettingsEl","restoreSettingsEl","_init","_registerEvents","_populateFields","_eyeExerciseDuration","_eyeExerciseInterval","_longBreakInterval","_longBreakDuration","_soundEnabled","_clockOpacity","_this","_numericChangeHandler","evt","_keyPressHandler","_booleanChangeHandler","_rangeChangeHandler","_open","_restore","checked","property","isValid","newVal","currentVal","toString","validation","isValidNumber","min","max","markElementValid","markElementInvalid","clearMarkers","keyCode","blur","preventDefault","get","svgValidEl","svgValidSize","getClientRects","SVG_VALID_MARK_WIDTH","SVG_VALID_MARK_HALF_HEIGHT","SVG_VALID_MARK_WIDTH_ADJUSTMENT","SVG_VALID_MARK_HEIGHT_ADJUSTMENT","ERROR_CSS_CLASS","VISIBLE_CSS_CLASS","isNumeric","test","intVal","_positionValidMark","inputWrapper","parentElement","wrapperWidth","clientWidth","wrapperLeft","offsetLeft","wrapperHeight","clientHeight","wrapperTop","offsetTop","checkLeft","checkTop","left","top","_fadeValidMarkInOut","setTimeout"],"mappings":"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","file":"bundle-ae174a5634dc33a81f45.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** multi main ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(/*! ./js/index */8);\n\n\n/***/ },\n/* 1 */\n/*!************************!*\\\n !*** ./images/owl.png ***!\n \\************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,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\"\n\n/***/ },\n/* 2 */\n/*!*******************!*\\\n !*** ./js/app.js ***!\n \\*******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.app = undefined;\n\t\n\tvar _tweet = __webpack_require__(/*! ../sounds/tweet.mp3 */ 14);\n\t\n\tvar _tweet2 = _interopRequireDefault(_tweet);\n\t\n\tvar _ding = __webpack_require__(/*! ../sounds/ding.mp3 */ 13);\n\t\n\tvar _ding2 = _interopRequireDefault(_ding);\n\t\n\tvar _owl = __webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tvar _owl2 = _interopRequireDefault(_owl);\n\t\n\tvar _settings = __webpack_require__(/*! ./settings */ 10);\n\t\n\tvar _animationControl = __webpack_require__(/*! ./animation-control */ 6);\n\t\n\tvar _clockContainer = __webpack_require__(/*! ./clock-container */ 3);\n\t\n\tvar _modal = __webpack_require__(/*! ./modal */ 9);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar DIM_CSS_CLASS = 'dim';\n\t\n\tvar settings = new _settings.Settings();\n\t_clockContainer.clockContainer.updateOpacity(settings.clockOpacity);\n\t\n\tvar messageElement = void 0;\n\tvar audioBreakStartEl = void 0;\n\tvar audioBreakOverEl = void 0;\n\t\n\tvar owlSvg = void 0;\n\t\n\tvar clock = void 0;\n\tvar timeElapsed = 0;\n\t\n\tvar WORK_MESSAGE = 'Leave this running...';\n\t\n\tvar start = function start() {\n\t findElements();\n\t _modal.modal.show();\n\t};\n\t\n\tvar startContinue = function startContinue() {\n\t requestPermission();\n\t};\n\t\n\tvar handleNotificationDenied = function handleNotificationDenied() {\n\t dim();\n\t messageElement.innerHTML = 'Please allow notifications to use Eye Hoot.';\n\t};\n\t\n\tvar requestPermission = function requestPermission() {\n\t if (window.Notification && Notification.permission !== 'denied') {\n\t Notification.requestPermission(function (status) {\n\t if (status === 'granted') {\n\t startWork();\n\t } else {\n\t handleNotificationDenied();\n\t }\n\t });\n\t } else {\n\t handleNotificationDenied();\n\t }\n\t};\n\t\n\tvar findElements = function findElements() {\n\t messageElement = document.querySelector('.message');\n\t\n\t audioBreakOverEl = document.querySelector('.break-over');\n\t audioBreakOverEl.src = _ding2.default;\n\t audioBreakStartEl = document.querySelector('.break-start');\n\t audioBreakStartEl.src = _tweet2.default;\n\t\n\t owlSvg = document.querySelector('.owl-svg');\n\t};\n\t\n\tvar updateMessage = function updateMessage(message) {\n\t messageElement.innerHTML = message;\n\t};\n\t\n\tvar dim = function dim() {\n\t [owlSvg, messageElement].forEach(function (el) {\n\t return el.classList.add(DIM_CSS_CLASS);\n\t });\n\t};\n\t\n\tvar brighten = function brighten() {\n\t [owlSvg, messageElement].forEach(function (el) {\n\t if (el.classList.contains(DIM_CSS_CLASS)) {\n\t el.classList.remove(DIM_CSS_CLASS);\n\t }\n\t });\n\t};\n\t\n\tvar startAnimation = function startAnimation() {\n\t brighten();\n\t _animationControl.animationControl.playAnimation();\n\t updateMessage(_animationControl.animationControl.getAnimationMessage());\n\t};\n\t\n\tvar stopAnimation = function stopAnimation() {\n\t _animationControl.animationControl.stopAnimation();\n\t};\n\t\n\tvar startLongBreakAnimation = function startLongBreakAnimation() {\n\t brighten();\n\t _animationControl.animationControl.startStopLongBreakAnimation();\n\t updateMessage(_animationControl.animationControl.longBreakAnimationMessage);\n\t};\n\t\n\tvar stopBreakAnimation = function stopBreakAnimation() {\n\t _animationControl.animationControl.startStopLongBreakAnimation();\n\t};\n\t\n\tvar notify = function notify(message) {\n\t var n = new Notification('Eye Hoot', {\n\t body: message,\n\t icon: _owl2.default,\n\t requireInteraction: true\n\t });\n\t playSound(audioBreakStartEl);\n\t n.onclick = notificationClickedHandler.bind(n);\n\t};\n\t\n\tvar notificationClickedHandler = function notificationClickedHandler() {\n\t window.focus();\n\t this.close();\n\t settings.close();\n\t if (timeElapsed < settings.longBreakInterval) {\n\t startAnimation();\n\t startAnimationClock(settings.eyeExerciseDuration);\n\t } else {\n\t startLongBreakAnimation();\n\t startAnimationClock(settings.longBreakDuration);\n\t }\n\t};\n\t\n\tvar playSound = function playSound(element) {\n\t if (settings.soundEnabled) {\n\t element.play();\n\t }\n\t};\n\t\n\tvar startAnimationClock = function startAnimationClock(interval) {\n\t clock = $('.clock').FlipClock(interval, {\n\t clockFace: 'MinuteCounter',\n\t countdown: true,\n\t callbacks: {\n\t stop: stopAnimationClockHandler\n\t }\n\t });\n\t};\n\t\n\tvar stopAnimationClockHandler = function stopAnimationClockHandler() {\n\t if (timeElapsed < settings.longBreakInterval) {\n\t stopAnimation();\n\t timeElapsed = timeElapsed + settings.eyeExerciseDuration + settings.eyeExerciseInterval;\n\t console.debug('stopClockHandler: timeElapsed = ' + timeElapsed);\n\t } else {\n\t stopBreakAnimation();\n\t timeElapsed = 0;\n\t }\n\t playSound(audioBreakOverEl);\n\t startWork();\n\t};\n\t\n\tvar startWork = function startWork() {\n\t updateMessage(WORK_MESSAGE);\n\t dim();\n\t startWorkClock();\n\t};\n\t\n\tvar startWorkClock = function startWorkClock() {\n\t if (clock) {\n\t clock.reset(); // clear old callbacks\n\t }\n\t clock = $('.clock').FlipClock(settings.eyeExerciseInterval, {\n\t clockFace: 'MinuteCounter',\n\t countdown: true,\n\t callbacks: {\n\t stop: stopWorkClockHandler\n\t }\n\t });\n\t};\n\t\n\tvar stopWorkClockHandler = function stopWorkClockHandler() {\n\t var notifyBody = timeElapsed < settings.longBreakInterval ? 'Time for a short break' : 'Time for a long break';\n\t notify(notifyBody);\n\t};\n\t\n\t// public api\n\tvar app = {\n\t start: start,\n\t startContinue: startContinue,\n\t startWork: startWork\n\t};\n\t\n\texports.app = app;\n\n/***/ },\n/* 3 */\n/*!*******************************!*\\\n !*** ./js/clock-container.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar clockContainerEl = document.querySelector('.clock-container');\n\t\n\tvar updateOpacity = function updateOpacity(opacity) {\n\t clockContainerEl.style.opacity = opacity;\n\t};\n\t\n\t// public api\n\tvar clockContainer = {\n\t updateOpacity: updateOpacity\n\t};\n\t\n\texports.clockContainer = clockContainer;\n\n/***/ },\n/* 4 */\n/*!**************************!*\\\n !*** ./js/controller.js ***!\n \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.controller = undefined;\n\t\n\tvar _app = __webpack_require__(/*! ./app */ 2);\n\t\n\tvar _clockContainer = __webpack_require__(/*! ./clock-container */ 3);\n\t\n\tvar update = function update(key, val) {\n\t switch (key) {\n\t case 'introModalClosed':\n\t _app.app.startContinue();\n\t break;\n\t case '_eyeExerciseInterval':\n\t _app.app.startWork();\n\t break;\n\t case '_clockOpacity':\n\t _clockContainer.clockContainer.updateOpacity(val);\n\t default:\n\t break;\n\t }\n\t};\n\t\n\t// public api\n\tvar controller = {\n\t update: update\n\t};\n\t\n\texports.controller = controller;\n\n/***/ },\n/* 5 */\n/*!***************************!*\\\n !*** ./js/persistence.js ***!\n \\***************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar APP_KEY = 'eyehoot';\n\t\n\tvar storageAvailable = function storageAvailable(type) {\n\t try {\n\t var storage = window[type],\n\t x = '__storage_test__';\n\t storage.setItem(x, x);\n\t storage.removeItem(x);\n\t return true;\n\t } catch (e) {\n\t return false;\n\t }\n\t};\n\t\n\tvar localStorageAvailable = storageAvailable('localStorage');\n\t\n\tvar saveItem = function saveItem(key, value) {\n\t localStorage.setItem(APP_KEY + '-' + key, value);\n\t};\n\t\n\tvar save = function save(key, value) {\n\t if (localStorageAvailable) {\n\t saveItem(key, value);\n\t }\n\t};\n\t\n\tvar retrieveItem = function retrieveItem(key) {\n\t return localStorage.getItem(APP_KEY + '-' + key);\n\t};\n\t\n\tvar retrieve = function retrieve(key, defaultVal) {\n\t if (localStorageAvailable) {\n\t var result = retrieveItem(key);\n\t return result == undefined ? defaultVal : result;\n\t } else {\n\t return defaultVal;\n\t }\n\t};\n\t\n\tvar removeAll = function removeAll() {\n\t if (localStorageAvailable) {\n\t localStorage.clear();\n\t }\n\t};\n\t\n\tvar exists = function exists(key) {\n\t var result = retrieveItem(key);\n\t return result == undefined ? false : true;\n\t};\n\t\n\t// public api\n\tvar persistence = {\n\t save: save,\n\t retrieve: retrieve,\n\t removeAll: removeAll,\n\t exists: exists\n\t};\n\t\n\texports.persistence = persistence;\n\n/***/ },\n/* 6 */\n/*!*********************************!*\\\n !*** ./js/animation-control.js ***!\n \\*********************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar windowSvg = document.querySelector('.window-svg');\n\tvar owlGraphic = document.querySelector('.owl-graphic');\n\tvar eyes = document.querySelector('.eyes');\n\tvar leftEyeShine = document.querySelector('.left-eye-shine');\n\tvar rightEyeShine = document.querySelector('.right-eye-shine');\n\tvar leftWing = document.querySelector('.left-wing');\n\tvar rightWing = document.querySelector('.right-wing');\n\tvar feet = document.querySelectorAll('.foot');\n\tvar leftFoot = document.querySelector('.left-foot');\n\tvar rightFoot = document.querySelector('.right-foot');\n\t\n\tvar animationIndex = 0;\n\t\n\tvar init = function init() {\n\t // As of Chrome 64, percentage based transforms work the same way as Firefox\n\t document.body.classList.add('ff');\n\t\n\t // owl-graphic: transform-origin: center bottom\n\t var owlGraphicBbox = owlGraphic.getBBox();\n\t var owlGraphicToX = owlGraphicBbox.x + owlGraphicBbox.width / 2;\n\t var owlGraphicToY = owlGraphicBbox.y + owlGraphicBbox.height;\n\t owlGraphic.style['transform-origin'] = owlGraphicToX + 'px ' + owlGraphicToY + 'px';\n\t\n\t // eyes transform-origin: 50% 50%\n\t var eyesBbox = eyes.getBBox();\n\t var eyesToX = eyesBbox.x + eyesBbox.width / 2;\n\t var eyesToY = eyesBbox.y + eyesBbox.height / 2;\n\t eyes.style['transform-origin'] = eyesToX + 'px ' + eyesToY + 'px';\n\t\n\t // left-wing transform-origin: right top\n\t var leftWingBbox = leftWing.getBBox();\n\t var leftWingToX = leftWingBbox.x + leftWingBbox.width;\n\t var leftWingToY = leftWingBbox.y;\n\t leftWing.style['transform-origin'] = leftWingToX + 'px ' + leftWingToY + 'px';\n\t\n\t // right-wing transform-origin: left top\n\t var rightWingBbox = rightWing.getBBox();\n\t var rightWingToX = rightWingBbox.x;\n\t var rightWingToY = rightWingBbox.y;\n\t rightWing.style['transform-origin'] = rightWingToX + 'px ' + rightWingToY + 'px';\n\t\n\t // foot transform-origin: center top\n\t for (var i = 0; i < feet.length; i++) {\n\t var footEl = feet[i];\n\t var footBbox = footEl.getBBox();\n\t var footToX = footBbox.x + footBbox.width / 2;\n\t var footToY = footBbox.y;\n\t footEl.style['transform-origin'] = footToX + 'px ' + footToY + 'px';\n\t }\n\t};\n\t\n\tvar sideToSide = function sideToSide() {\n\t eyes.classList.toggle('side-to-side');\n\t leftEyeShine.classList.toggle('side-to-side');\n\t rightEyeShine.classList.toggle('side-to-side');\n\t};\n\t\n\tvar upDown = function upDown() {\n\t eyes.classList.toggle('up-down');\n\t leftEyeShine.classList.toggle('up-down');\n\t rightEyeShine.classList.toggle('up-down');\n\t};\n\t\n\tvar aroundRight = function aroundRight() {\n\t eyes.classList.toggle('around-right');\n\t leftEyeShine.classList.toggle('around-right');\n\t rightEyeShine.classList.toggle('around-right');\n\t};\n\t\n\tvar aroundLeft = function aroundLeft() {\n\t eyes.classList.toggle('around-left');\n\t leftEyeShine.classList.toggle('around-left');\n\t rightEyeShine.classList.toggle('around-left');\n\t};\n\t\n\tvar blinkEyes = function blinkEyes() {\n\t eyes.classList.toggle('blink');\n\t};\n\t\n\tvar farFocus = function farFocus() {\n\t windowSvg.classList.toggle('window-visible');\n\t};\n\t\n\tvar coverEyes = function coverEyes() {\n\t rightWing.classList.toggle('forward-up');\n\t leftWing.classList.toggle('forward-up');\n\t};\n\t\n\tvar longBreak = function longBreak() {\n\t owlGraphic.classList.toggle('wobble');\n\t leftWing.classList.toggle('flap-left');\n\t rightWing.classList.toggle('flap-right');\n\t rightFoot.classList.toggle('march');\n\t leftFoot.classList.toggle('march');\n\t};\n\t\n\tvar EYE_ANIMATIONS = [sideToSide, aroundLeft, coverEyes, upDown, aroundRight, blinkEyes, farFocus];\n\t\n\tvar EYE_ANIMATIONS_MESSAGES = ['Move your eyes from side to side', 'Move your eyes around to the left', 'Cover your eyes', 'Move your eyes up and down', 'Move your eyes around to the right', 'Open and close your eyes', 'Look out a window or far away object'];\n\t\n\tvar longBreakAnimationMessage = 'Get up and go for for a walk';\n\t\n\tvar playAnimation = function playAnimation() {\n\t EYE_ANIMATIONS[animationIndex]();\n\t};\n\t\n\tvar stopAnimation = function stopAnimation() {\n\t EYE_ANIMATIONS[animationIndex]();\n\t animationIndex = animationIndex === EYE_ANIMATIONS.length - 1 ? 0 : animationIndex + 1;\n\t};\n\t\n\tvar getAnimationMessage = function getAnimationMessage() {\n\t return EYE_ANIMATIONS_MESSAGES[animationIndex];\n\t};\n\t\n\tvar startStopLongBreakAnimation = function startStopLongBreakAnimation() {\n\t longBreak();\n\t};\n\t\n\t// public api\n\tvar animationControl = {\n\t playAnimation: playAnimation,\n\t stopAnimation: stopAnimation,\n\t getAnimationMessage: getAnimationMessage,\n\t startStopLongBreakAnimation: startStopLongBreakAnimation,\n\t longBreakAnimationMessage: longBreakAnimationMessage\n\t};\n\t\n\tinit();\n\t\n\texports.animationControl = animationControl;\n\n/***/ },\n/* 7 */\n/*!**************************!*\\\n !*** ./js/conversion.js ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar SECONDS_IN_MINUTE = 60;\n\t\n\tvar secondsToMinutes = function secondsToMinutes(val) {\n\t return val / SECONDS_IN_MINUTE;\n\t};\n\t\n\tvar minutesToSeconds = function minutesToSeconds(val) {\n\t return val * SECONDS_IN_MINUTE;\n\t};\n\t\n\tvar stringToBoolean = function stringToBoolean(val) {\n\t return val === 'true' ? true : false;\n\t};\n\t\n\tvar stringToInt = function stringToInt(val) {\n\t var result = parseInt(val, 10);\n\t if (!isNaN(result)) {\n\t return result;\n\t } else {\n\t throw new Error('Expected numeric integer setting');\n\t }\n\t};\n\t\n\tvar stringToFloat = function stringToFloat(val) {\n\t var result = parseFloat(val);\n\t if (!isNaN(result)) {\n\t return result;\n\t } else {\n\t throw new Error('Expected numeric float setting');\n\t }\n\t};\n\t\n\t// public api\n\tvar conversion = {\n\t secondsToMinutes: secondsToMinutes,\n\t minutesToSeconds: minutesToSeconds,\n\t stringToBoolean: stringToBoolean,\n\t stringToInt: stringToInt,\n\t stringToFloat: stringToFloat\n\t};\n\t\n\texports.conversion = conversion;\n\n/***/ },\n/* 8 */\n/*!*********************!*\\\n !*** ./js/index.js ***!\n \\*********************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _app = __webpack_require__(/*! ./app */ 2);\n\t\n\t__webpack_require__(/*! ../css/styles.scss */ 12);\n\t__webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tdocument.addEventListener('DOMContentLoaded', _app.app.start);\n\n/***/ },\n/* 9 */\n/*!*********************!*\\\n !*** ./js/modal.js ***!\n \\*********************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.modal = undefined;\n\t\n\tvar _controller = __webpack_require__(/*! ./controller */ 4);\n\t\n\tvar _persistence = __webpack_require__(/*! ./persistence */ 5);\n\t\n\tvar _owl = __webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tvar _owl2 = _interopRequireDefault(_owl);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar HAS_SEEN_INTRO_KEY = 'hasSeenIntro';\n\t\n\tvar modalEl = document.querySelector('#modal');\n\tvar modalOverlayEl = document.querySelector('#modalOverlay');\n\tvar modalCloseEl = document.querySelector('#modalClose');\n\tvar modalStartEl = document.querySelector('#modalStart');\n\tvar modalLogoEl = document.querySelector('#modalLogo');\n\t\n\tmodalLogoEl.src = _owl2.default;\n\tmodalCloseEl.addEventListener('click', function () {\n\t return close();\n\t});\n\tmodalStartEl.addEventListener('click', function () {\n\t return close();\n\t});\n\t\n\tvar show = function show() {\n\t if (!_hasSeenIntro()) {\n\t open();\n\t _persistence.persistence.save(HAS_SEEN_INTRO_KEY, true);\n\t } else {\n\t _controller.controller.update('introModalClosed');\n\t }\n\t};\n\t\n\tvar open = function open() {\n\t modalEl.classList.toggle('closed');\n\t modalOverlayEl.classList.toggle('closed');\n\t};\n\t\n\tvar close = function close() {\n\t modalEl.classList.toggle('closed');\n\t modalOverlayEl.classList.toggle('closed');\n\t _controller.controller.update('introModalClosed');\n\t};\n\t\n\tvar _hasSeenIntro = function _hasSeenIntro() {\n\t return _persistence.persistence.exists(HAS_SEEN_INTRO_KEY);\n\t};\n\t\n\t// public api\n\tvar modal = {\n\t show: show,\n\t open: open,\n\t close: close\n\t};\n\t\n\texports.modal = modal;\n\n/***/ },\n/* 10 */\n/*!************************!*\\\n !*** ./js/settings.js ***!\n \\************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.Settings = undefined;\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _persistence = __webpack_require__(/*! ./persistence */ 5);\n\t\n\tvar _conversion = __webpack_require__(/*! ./conversion */ 7);\n\t\n\tvar _validation = __webpack_require__(/*! ./validation */ 11);\n\t\n\tvar _controller = __webpack_require__(/*! ./controller */ 4);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar DEFAULT_SOUND_ENABLED = 'true';\n\tvar DEFAULT_CLOCK_OPACITY = '1';\n\tvar SETTINGS_HIDDEN_CLASS = 'settings-hidden';\n\t\n\tvar containerEl = document.querySelector('.settings-container');\n\tvar eyeExerciseIntervalEl = document.getElementsByName('eyeExerciseInterval')[0];\n\tvar longBreakIntervalEl = document.getElementsByName('longBreakInterval')[0];\n\tvar longBreakDurationEl = document.getElementsByName('longBreakDuration')[0];\n\tvar soundEnabledEl = document.getElementById('soundEnabled');\n\tvar clockOpacityEl = document.getElementById('clockOpacity');\n\tvar closeSettingsEl = document.getElementById('settingsClose');\n\tvar openSettingsEl = document.getElementById('settingsOpen');\n\tvar restoreSettingsEl = document.getElementById('restoreSettings');\n\t\n\tvar Settings = exports.Settings = function () {\n\t function Settings() {\n\t _classCallCheck(this, Settings);\n\t\n\t this._init();\n\t this._registerEvents();\n\t this._populateFields();\n\t }\n\t\n\t _createClass(Settings, [{\n\t key: '_init',\n\t value: function _init() {\n\t this._eyeExerciseDuration = (15);\n\t this._eyeExerciseInterval = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_eyeExerciseInterval', (900)));\n\t this._longBreakInterval = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_longBreakInterval', (3600)));\n\t this._longBreakDuration = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_longBreakDuration', (300)));\n\t this._soundEnabled = _conversion.conversion.stringToBoolean(_persistence.persistence.retrieve('_soundEnabled', DEFAULT_SOUND_ENABLED));\n\t this._clockOpacity = _conversion.conversion.stringToFloat(_persistence.persistence.retrieve('_clockOpacity', DEFAULT_CLOCK_OPACITY));\n\t }\n\t }, {\n\t key: '_registerEvents',\n\t value: function _registerEvents() {\n\t var _this = this;\n\t\n\t // numeric inputs\n\t eyeExerciseIntervalEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval');\n\t });\n\t eyeExerciseIntervalEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval', evt);\n\t });\n\t longBreakIntervalEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(longBreakIntervalEl, '_longBreakInterval');\n\t });\n\t longBreakIntervalEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(longBreakIntervalEl, '_longBreakInterval', evt);\n\t });\n\t longBreakDurationEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(longBreakDurationEl, '_longBreakDuration');\n\t });\n\t longBreakDurationEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(longBreakDurationEl, '_longBreakDuration', evt);\n\t });\n\t // checkboxes\n\t soundEnabledEl.addEventListener('change', function () {\n\t return _this._booleanChangeHandler(soundEnabledEl, '_soundEnabled');\n\t });\n\t // ranges\n\t clockOpacityEl.addEventListener('input', function () {\n\t return _this._rangeChangeHandler(clockOpacityEl, '_clockOpacity');\n\t });\n\t // buttons\n\t closeSettingsEl.addEventListener('click', function () {\n\t return _this.close();\n\t });\n\t openSettingsEl.addEventListener('click', function () {\n\t return _this._open();\n\t });\n\t restoreSettingsEl.addEventListener('click', function (evt) {\n\t return _this._restore(evt);\n\t });\n\t }\n\t }, {\n\t key: '_populateFields',\n\t value: function _populateFields() {\n\t eyeExerciseIntervalEl.value = _conversion.conversion.secondsToMinutes(this._eyeExerciseInterval);\n\t longBreakIntervalEl.value = _conversion.conversion.secondsToMinutes(this._longBreakInterval);\n\t longBreakDurationEl.value = _conversion.conversion.secondsToMinutes(this._longBreakDuration);\n\t clockOpacity.value = this._clockOpacity;\n\t soundEnabledEl.checked = this._soundEnabled;\n\t }\n\t }, {\n\t key: '_numericChangeHandler',\n\t value: function _numericChangeHandler(element, property) {\n\t var isValid = true;\n\t var newVal = element.value;\n\t var currentVal = _conversion.conversion.secondsToMinutes(this[property]).toString();\n\t if (newVal !== currentVal) {\n\t if (_validation.validation.isValidNumber(newVal, parseInt(element.min, 10), parseInt(element.max, 10))) {\n\t this[property] = _conversion.conversion.minutesToSeconds(newVal);\n\t _persistence.persistence.save(property, this[property]);\n\t _validation.validation.markElementValid(element);\n\t _controller.controller.update(property);\n\t } else {\n\t isValid = false;\n\t _validation.validation.markElementInvalid(element);\n\t }\n\t } else {\n\t _validation.validation.clearMarkers(element);\n\t }\n\t return isValid;\n\t }\n\t }, {\n\t key: '_keyPressHandler',\n\t value: function _keyPressHandler(element, property, evt) {\n\t if (evt.keyCode === 13) {\n\t var isValid = this._numericChangeHandler(element, property);\n\t if (!isValid) {\n\t element.focus();\n\t } else {\n\t element.blur();\n\t }\n\t }\n\t }\n\t }, {\n\t key: '_booleanChangeHandler',\n\t value: function _booleanChangeHandler(element, property) {\n\t var newVal = element.checked;\n\t if (newVal !== this[property]) {\n\t this[property] = newVal;\n\t _persistence.persistence.save(property, this[property]);\n\t }\n\t }\n\t }, {\n\t key: '_rangeChangeHandler',\n\t value: function _rangeChangeHandler(element, property) {\n\t var newVal = element.value;\n\t _controller.controller.update(property, newVal);\n\t this[property] = newVal;\n\t _persistence.persistence.save(property, this[property]);\n\t }\n\t }, {\n\t key: 'close',\n\t value: function close() {\n\t if (!containerEl.classList.contains(SETTINGS_HIDDEN_CLASS)) {\n\t containerEl.classList.add(SETTINGS_HIDDEN_CLASS);\n\t }\n\t }\n\t }, {\n\t key: '_open',\n\t value: function _open() {\n\t containerEl.classList.remove(SETTINGS_HIDDEN_CLASS);\n\t }\n\t }, {\n\t key: '_restore',\n\t value: function _restore(evt) {\n\t evt.preventDefault();\n\t\n\t _persistence.persistence.removeAll();\n\t this._init();\n\t this._populateFields();\n\t\n\t _controller.controller.update('_eyeExerciseInterval', this._eyeExerciseInterval);\n\t _controller.controller.update('_clockOpacity', this._clockOpacity);\n\t }\n\t }, {\n\t key: 'eyeExerciseInterval',\n\t get: function get() {\n\t return this._eyeExerciseInterval;\n\t }\n\t }, {\n\t key: 'longBreakInterval',\n\t get: function get() {\n\t return this._longBreakInterval;\n\t }\n\t }, {\n\t key: 'eyeExerciseDuration',\n\t get: function get() {\n\t return this._eyeExerciseDuration;\n\t }\n\t }, {\n\t key: 'longBreakDuration',\n\t get: function get() {\n\t return this._longBreakDuration;\n\t }\n\t }, {\n\t key: 'soundEnabled',\n\t get: function get() {\n\t return this._soundEnabled;\n\t }\n\t }, {\n\t key: 'clockOpacity',\n\t get: function get() {\n\t return this._clockOpacity;\n\t }\n\t }]);\n\n\t return Settings;\n\t}();\n\n/***/ },\n/* 11 */\n/*!**************************!*\\\n !*** ./js/validation.js ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar svgValidEl = document.querySelector('.check-svg');\n\tvar svgValidSize = svgValidEl.getClientRects()[0];\n\tvar SVG_VALID_MARK_WIDTH = svgValidSize.width;\n\tvar SVG_VALID_MARK_HALF_HEIGHT = svgValidSize.height / 2;\n\tvar SVG_VALID_MARK_WIDTH_ADJUSTMENT = 3;\n\tvar SVG_VALID_MARK_HEIGHT_ADJUSTMENT = 5;\n\t\n\tvar ERROR_CSS_CLASS = 'settings-input-error';\n\tvar VISIBLE_CSS_CLASS = 'visible';\n\t\n\tvar isValidNumber = function isValidNumber(val, min, max) {\n\t var isNumeric = /^(?:[1-9]\\d*|0)$/.test(val);\n\t var intVal = parseInt(val, 10);\n\t return isNumeric && intVal >= min && intVal <= max;\n\t};\n\t\n\tvar markElementInvalid = function markElementInvalid(element) {\n\t element.classList.add(ERROR_CSS_CLASS);\n\t};\n\t\n\tvar clearMarkers = function clearMarkers(element) {\n\t if (element.classList.contains(ERROR_CSS_CLASS)) {\n\t element.classList.remove(ERROR_CSS_CLASS);\n\t }\n\t};\n\t\n\tvar _positionValidMark = function _positionValidMark(element) {\n\t var inputWrapper = element.parentElement;\n\t var wrapperWidth = inputWrapper.clientWidth;\n\t var wrapperLeft = inputWrapper.offsetLeft;\n\t var wrapperHeight = inputWrapper.clientHeight;\n\t var wrapperTop = inputWrapper.offsetTop;\n\t var checkLeft = wrapperWidth + wrapperLeft - SVG_VALID_MARK_WIDTH + SVG_VALID_MARK_WIDTH_ADJUSTMENT;\n\t var checkTop = wrapperHeight + wrapperTop - SVG_VALID_MARK_HALF_HEIGHT + SVG_VALID_MARK_HEIGHT_ADJUSTMENT;\n\t svgValidEl.style.left = checkLeft + 'px';\n\t svgValidEl.style.top = checkTop + 'px';\n\t};\n\t\n\tvar _fadeValidMarkInOut = function _fadeValidMarkInOut() {\n\t if (svgValidEl.classList.contains(VISIBLE_CSS_CLASS)) {\n\t svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n\t }\n\t svgValidEl.classList.add(VISIBLE_CSS_CLASS);\n\t setTimeout(function () {\n\t svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n\t }, 2000);\n\t};\n\t\n\tvar markElementValid = function markElementValid(element) {\n\t clearMarkers(element);\n\t _positionValidMark(element);\n\t _fadeValidMarkInOut();\n\t};\n\t\n\t// public api\n\tvar validation = {\n\t isValidNumber: isValidNumber,\n\t markElementInvalid: markElementInvalid,\n\t markElementValid: markElementValid,\n\t clearMarkers: clearMarkers\n\t};\n\t\n\texports.validation = validation;\n\n/***/ },\n/* 12 */\n/*!*************************!*\\\n !*** ./css/styles.scss ***!\n \\*************************/\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 13 */\n/*!*************************!*\\\n !*** ./sounds/ding.mp3 ***!\n \\*************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__.p + \"b506a66a688dd0df4b191f1ff1611c45.mp3\";\n\n/***/ },\n/* 14 */\n/*!**************************!*\\\n !*** ./sounds/tweet.mp3 ***!\n \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__.p + \"9a62c3d1f3ca4b470bc4a446f5c9c9e1.mp3\";\n\n/***/ }\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// bundle-ae174a5634dc33a81f45.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ae174a5634dc33a81f45","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdoAAAHfCAMAAADA9+kuAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeBQTFRFAAAAAL7KmHdEAL7KmHdEAL7KmHdEAL7KmHdEAL7KeYVemHdEAL7KmHdEAL7KbItqgoFXmHdEAL7KmHdEAL7KmHdEAL7KmHdEAL7KmHdEAL7KmHdEAL7KmHdEAL7KFbO2mHdEAL7KmHdEAAAAAAsMABcZACMlAC8yADs/AEdLAFNYAF9lAGpxAHZ+AIKKAI6XAJqkAKawALK9AL7KCbnBDw8PD7zBD8LNE7W5HLCwHx8fH8bQJqyoKcHILy8vL6egL7mwL8rTNbCrOaOXPLi3Pz8/P87XQp6PSKebTJqHT09PT9LaUsXGVZZ+X19fX5F2X7SWX9bdaI1tb29vb9rhcohldcC5eJFxe4Rdf39/f7GFf97kgq+chX9UhaKIjM3IjntMj4+Pj698j+LnkZBskrOflaaLmHdEm4xjnn9Pn5+fn610n+Dfn+brpIhbqJ17q5Bnq9XOr6+vr+rusZlytdDGuKF+vqqKv7+/v+7xxbKVyMe1y7uhz6haz8/Pz/L10cOt1djM2My42O7s3tTE39/f3/b44unk5d3Q6+Xb76VJ7+/v7/r78u7n+Pbz/6RB/6lM/69Y/7Vk/7pw/8B8/8aI/8uU/9Gg/9er/9y3/+LD/+jP/+3b//Pn//nz////E0gbegAAACN0Uk5TAA8PHx8vLz8/T09PX19vb29vf3+Pj5+fr6+/v8/P39/f7++9HJISAAAk9UlEQVR42u2d+0Nj2V3AL+ERcAAlPCc8JJmZndnOMDM7N7sJJYoYDY1IKZRoakSjUa90DWJBaGgqI1IEC2zbbbttd9v8q95AEm6Sm9zzPe/cnO8P7ezOcu/hfO73fR6aRiC+QU2JO2Uw0KsmwZ3i1QPdahZcilaf6VLTwE66BgSiVWxZit8nEq3uVwRYyYQ+KBStPqEYsCKre8WiVWwZ5R+6eLSKLSuy4tHqfhVLMSErDq1WQaviZDZkZUCrz6jaBU0ZLk+rJgFanVHNsdtrlU6xDRO6TGj1AK0crMvr9fkm/P453V4Cfr9/yufzDXi9bicrCVpdHyOHaiLVQWJy9vkGvWzcgWknBsxvqPSdlcX83GYqfx67/7yoW5KuGV0CtHWKRRIo9w5PzekEMuefMBF30bAZw74xv38G8nlNUXl1eSIsb54Rh7ZexQJ45eyuwamATknMaR7wYmmoz+f3kwwj4PcNkFuPAesQ/PKgNY1yFwZXnbrM+U09QozThk2k9F48MUiE11f7ncqEVp+DqUzvREBnJnNTLfSoyzvog5hdwGvHcLOF7roJlQutWXZEV1yvX2cv/rHB3jqow2P+ANN3zo11kxrjkvjEofXZOx0f3jfKmG9psnsHfP45Tm+EJoNdjY5JOrTmR4vwa3WN6Zwl4Of7vjkQ3EEbOyIhWoRfazCgu1/mkDOGXtvPTuCK0eFWOuJr4W4G5/TOED+Sz+2esP9pgeU2r5O7sY2oescCescIQuDRDKzMaEv1FF9tmaZrYGxO7yxx8E29E81/tFdmtPf1g1K51ZQxf6dhrcDtalqvaZlZC2xRdOtK0MzyhE1A1e1YhxPZflLQABGV76FBZVZNJpwrYXMKbTupb7k1iPYxiEQbULBY6rlItH41/wxlQqF1q/gUWoWWaxFZCbl4FVqFVqFtMxF6nIRXzT9D0RRahZaB9Kr5ZyczQtGqSqNbi1EKrWuLUQ1bQ5S4pWKhylEKrZJ2q1ho2pgi4Fa0qhzFTgSfATDcEZMcikaXE1WJRaMR11csXF+OCkVX15M7ho1kkhsJtoTnXIbW1I71ZM1kZpLmJK7y0ZMaWVzdsIVaCzgRdWnFQuuiqCCJrZZTmVyPLXLT1thGxkCV5CqTcQk/Q4/OTC6vp5BmMbO1yl59I6tJAyg76/Tp+kSjneM+kzvryyzBxrYMLNlJUP7ohkWj9ZNyTWFMY2aDkWmOrGcMfNmi+s152xrt8hb2NO6shqiDjSYNQtmJ0RuV8Cs78GsWocQO2TxSVl1ysHcGJUELrtauaCMbGfJ5TEY5gd07vJddfnADwtEOYII16AgluIv2YA+PC2eXV8Uaub28LBQO91qbZRektXg1i1CiNa89c0oLlyW5Kd7c/f/7wsnhPjO4IZsP7bBwflNsJZfvj5vzTZEPaqod0a42N8W75oxeNZ3Nq/PCkY1J3CDMOmL149kvXBaR5ObsuJmJXie1yr72Qxttlu3sHr2/QpvOvQbvRpLv1Nnio7PbIkSuTuyVN0OYCQlPa6Gtn9C6Pdf9kyvIdL6vs84p7GC51oTsA7mWh2OvuxtEiiv+sOcJmMra5jt7hRvwdN7U0cVT3JA1sd49uSniytmhXTi12NZoQQdY2qrs8SXmdN6c7BIq7qLlS9vDUlir6tr8bqtt24iHdX4WU3YKSzShZxbVzYBTjpgVbJFYbo5pGmVvG6W1y42BMYUJvTzEnscNqmCbwE1F2hXtBIExpjShFrgpANtQNTLefV+kJjdHDZHyYpuiDeDEK1Q1pQR3Hz6Poap3OLkt0pTLPTpZkOjL2nvBE1mRAtUJPdsFOtyq39+/KtKWQn0qhFV3FF2yGMMMoA5vKE/n7QloHhcrfr9QZCA3hxTYil4/g7bGYrEugNo9ZzCfVUMYQx8QA5UtKy45W3872ON6ske3TKazqrgx1AGdFJnJ1R4x2zawx/Vk3zObz8tdpHksO34mtuPhQzsiZdstvT2O1JJlZgPv5vMQYR7LZJkOpNEow3Mgr+z2uC42ZmSMq3LizPY+DTtkPBBr2I7H1ie5Pa4je8J+Pp3m8b50clzkIFc1bFPAmqPQXjxCvaJ2/cIZt/nMRFrWjbmQrQ+mtmBoRe75QagfJ5jnPM3YNtGR+5iuUOQkt/sEjUeBvR/n+vFyDdkrTvN5czefG7b+YYeX8bBlG22XOCoACo65ka3M52oz/1AoFgWxzYTaI45ytsdJMWQr87lob0WOi1ylJpbaao84agLiaLmSNdnu2rnbUIY/2Tq2y20RRznZ40XesXHDfK7bZLT7Re5yiWuSu2S1xymBZE22jWFLtNQlvuWPtvjeuqKmDeKoCYA5PhYwn6XaxU7NiHa4+4WKHONFyT457bE1Oj4UMp8ndZlkQoj1aAiTU9LHUU722LJgZvdWzITu1xSlSjHUUVGQWEOpmOxxlEP9OGoxQZeC5rMUJm9YU9q9W1Fore52R/Y4ag45hioIm89zi2uLCPzGSnKIU28UEkf1Ii/e3hc4n6a7TT4o7YnAkRRvdjESICFxlMNmeMuGiyuB83m7V1HbiFBzXGeSY1LHUTOoSlsQOp/nFbVdFxYdW6M6qLcVcftAF6rS7gmez6N7tTXD40PBI7EWpZDVVgDaQdTw+FLwfN7cB8kx8SO5+8wqhzRIHEdNIOa0wlWltPgsUgrYj4WPpPSZVQR1j9egZKlPRI4YqprcJkqdihvxaC31xnVEtGOSpT4JobXjRrXdMTMfGUZiUduMtFsIhhGDKBlUxVRbc2fvlQxoLWqL2Lflfy7YFFoQJYWqlNRWAp//0GkE9fa4lxoDaOtTL6WYz1Ip+VwOtA/lxoykIXJ3y9Fk5AmPK2ZwT5KRlBfAA9q2wzJltVGBSyuaRS8FWdAWd4Exsk+mrLZ6ZsWuNPO5TxjOXeS24/EVPR5fS+dpBVIpOUPkGaR23rE0aInC4+vsivXXC28S0T2v2jS09g/vbnzL/VsUyxWn+Xz+WuxXcZ0ON/yK8TwNi7wsYxXZi7QXhCx0uciuLZWfuLJ9IIzsQdj2l1y7JrfIiA35bnkKFus09lvm4rUPDW9eCFHZzWa/ZfiA2CInZcx+JpA2g+CnkgdLNs/d5G+Zr6tO9u3rlyV5/fZhPDncLBuY2fLNflpeElJ1tdgTukZbUQjJvv7w6ZOqvFh4Vx5PmrRqEZIw+0Hq+uDWK07DTZ+9KYLswrMntfL05TsivS3AihZc19B0I0VRmFWCXJXs21cfPn/+9Nnz519b+KgSUPE0ynfu/k092Du4C/fDOSBztqvyJbZepIYeXv04V37MRy9r5vSDV+94s02X3ve1J/by4m44YazR3MBCZK7Lo3xIATKeNb5/yLvGKS2bwTgvsqWRvHvxpJl8cDeaNaLMdku+xHYMJUDGWn18fW+NXz+1m81nb0p/t83RHH/w5IkDW6zaxSEs+5EmQK6UGY+w3Zv+YbPpfIk9m2DJtxrHA9slnGefwNDyvFpvDiX3KeA62nfPm0/nh7izifORvbIZwMff+fbH1sFgfWjVEFm+moWOghajoXd9V6mwkP36n9uxTfPxtB/ZeIWPf1ws/lf1n95gettzadF2IaHFCJDTddb4m+Y8flw3ua9w41KYbNub4++U/u6bVedfGi/GYC5haAclyX0iBAveSkr7ulZFit+tn12z1Jdlj3ZJ/8jOIXy/9Hffq/7jAl7d4gqG1icJ2ih+7nNQcrRPa5S2WPxxQ/TCw9teNImh7tB+3zoWLIssLdpBRmhLXZaX9dav2DC9pqqcskZrxnNPEbT2yUd435m0aH0oaDEWz4RrlbYZ2mccAqm0/sY2Qv+H0l9+u8bz4zjb9kYLbw6UMskF6zz+Renf/qhxft+wL0nFa8yHJWQ33f+PLJHdC7z0B4aWYxF5jA3arPnTL+ozjeJ3bJNb9miblBj/+Hvf/XqtBXEVWj/KCW9wtGa+odfN448aA+T7+bxgjvb5EyTBC5HbE62Ojdas/7xBm893zIuNELRpbLSpDkK7gDafb6RCi6+1yQ5C+xIVbVYitPmOQbuDm9eio33JPPthi/YGtlpVGrRJ9mhf6awXwG03XV5RK8+x8trLNkW7xR4te1+bQ3T7XzObFfjtgWiboU3g7gpZkyiMOrXvDjTIa6wacqVfu9hmaGO4TT2zpfcWNflh3h8It1w8U12vpWO1oQqgtFYetFHcVnyp8fMUhewHHFo/m0gWpLQwAKN6cgg7O2pMFrQ67gKai/pCY3MHx36puVnQfuY8ErPxs4Lx8D3Y+UI+adCmcBPbFURn+xZ7uw2oF7+AEkThDOUWeJifPGg3cLdglvoDz5ASDg4raHK6Y2r79B1et/YSeOCbPGgrcdQtjkVeQImPuWz9WbJd91Y7ELxtPwXg6aoc10Y5nEwfwV73toaits85rUTOOwXsC7h7GQ6Bl8JwXNHocMh1pdRYwJlNx/zn6Ue89oaYTcaFp63JhrFW8kDPzZUI7Qb2JszS6qhXjkWCUz5oS3sw3z5tRRYvnDsH7a7le+LBoMNQlnGdbfEi7LQdY4Hfpp+70TTZyvDBW/ztvifQexNl2YNpOYIG48CDnN6a7QLXbZh3m7gXntlsGiTZyL0HtMcBidBWOgQ4x0bdHQvSzCY/fY3r3kjY6gu1Ncdn5a2+mGSvoPaY69Zpp8HECA57u9ur99a2gPv8I6SN6F/+5osvvvj556b87LNa+UnpX37+c/Ovf/Xll1+h+tvSPm5zf/69IX7xqnJQCe5qALA9npAJbSiDfwRNswMknjx7jRS4fPXTz1Dl579Fa1rYyQq28diDXmPL9ZiSGR0tRsY6yK9yVNNraz356Ydv0M6g+fIzgPwEhe2FzdFRYfwFPOfgu9cGpNk6be3+4F2ZlK085s2rl8+fP3/xsmIEEVTlpxC0n/0SLVLerD0TZyVHEMkdQa9e47pz2jGxrbYI3mNGL3HbhyIsiPoNiOxnnyMXU9Lx+1PK4ps5ojXQN9AgivMZjcM6YiCFfUpjrvG4N6ST/L5ghJaaHINvnuZ7P5fXeUAZ0rP88jVWcCWLZgOBaH/Bm+ztLqzpwztAdrp0zbJCiuiE+tNcei0ej2+n0c/N/TUM7a95oy3Ar4vnfED9nI6a/3C+V+IrGNrfya+0vK+V8PNRWwz5qdT2GO5pud+X6Bwii1LbX0LQ/pYz2RvoxcQCrh4YQBjTqpArp38rs9IegnNa/heGdKEMakfIhTC/oFuLoinwQpQu4JLTOYRBlUtSu7eSqu0XgmKoqC6xq3W6vba2t3fCdwZRU9uf8TbHJ7DVxwLOuUZaaCEykkIMkr8SZI5DILTD3NF2I42rvJJmj69J/tJF5pjzTTDIzpZouQVjk8y9eowTHfMuIAOcbdUkc46SP3eOjnnXoQqwHVzi7DFaZmuJkvle+fy7nzih/VKMo82EdOntMVpm+1Bv3Ofrbp1Kyb/iTPZqF7RXWqg9RiojW93tEd+5/LVUZahKCBXT28Aeo7Tjy+42JSSUalVL/uG/cSa7j5PRlqRLCNpu1OFFMpIVHP/vEx77cxvJboDJTmliZAZ1gItC2J7+sBnZP9F1nmzxyfKvHwMt8sMeIJ5sT8OfNGH7LV3nybZCNgUnOyeILLpFfthMfcaRrK7bs/1WeUw5zmRDcLQ+UWjRLTJ/tvd7dezY/mN1TFkeA7mpWGMMskKSWqhF5s22cgl4I9tPratf+eWzGH5WXBAFs8gPbHnkQLnqW+vZflozpjjr7Zxnu7hZD+cjLDBbBHVx8hHzutTfW95ay/aHn9SO6Y/+h0eDFl6p4L6ttkHGQENdLC+o2WdbT779y5q3WtnWkzXrKf/BcCDlXk8mikWW89LyOumFjbVSl9o9Z0j2f/+s7q0PbBvJmvJXrIzIedkYpyJ4ZPnu4mqQAHC05b2Zxgkzo/yfjQX4Cltbsrr+p//NRGXLK44x3azIpBbStLUGU2WHu8fGKN/8rV2O8cmnLciahdB/vmWmspllXLI8z9zEXiFV63ArFxcXGCjuD77R5K2ftiBryjd+QPkLO6pcGB7CJivYHiM3ba1SuUp+j/ZiuKt/ad4N/ZtWZE3F/TuKg7mtnHZMoLLC7TGoIPWw8KJy78TRDU3ndpIgmEg99u+0XMT73YqXDZEMaEw0Wh/WsCtH2FMMpwp/HdGJJJQ4pgH3bK9yz8si2Xh6RaP14o07UrlVZJeOyz37p2WdWCIbh5ekpriisTtRwsEIt8fOxww1tcqpKlxSs3z7/l8TIZ2GRDb2zvA/tavjKtgY8VDGxKP143u3iss1iCzhzckuJbD3cHePL/G+r/3Kr5OMURiIVzxaH0noUoW7j6ssZ4eZRESnKZFEZu8E+K3dnlWyHbPHE6UxioB4srjOtrL8IlmdkiM43fPj3R2KGvvwyW0Zu8dnqH7iqlDVV2NnldJ3NiUBWo3YAmYsdG8AimJ6Niqmz3ZUq2YosH985qC9t5eFw90HruuL1AYwKANaP+lvEYptVWfH2DtBwHt7fmIqyg5lS9xA925Yh8eF88tGe3J1+b5wuPcwbiNFkavQ9RWUnK0tXWP3sHDWLJS5Oi8c7VHWkBb+Yr2apB1aZN+olZ2NGOWvbEYGsqh7fxzpLm/s1MyXOZknhULh8l7em388LBu/zNZqROcm0dWNpNFUUluJKANvPyYF2m6KNjC23mIWywqyuqjzl1A0lkgkTbn//Ep/Wk+sRpkNZUAKtLBVNAitoeXERnKngWkmuZWIRfUOkS450E6x+e0WoxYJ6R0lcrhaOnGUEgldLWnRQom8rpZmHKVEKlcLX/umRP6GHq16lBIJC8gYC82VOIpPGrTDCgZd8UqDVoXIlOUPpEGrQmS6EjHmhyRB2+PyqY5XJczlfaVT1OZHPOLBekaDi25lup3N198tlD9Ib8bZvvZ+KW9QuOYOBcFnhbaDhNeyp63OU8huLjF7d2XPm1iz3D+LcVio/Fw3DxCW8JxmV9i8/qGxOf9ImC2exDoHFiZLFUe3wgksEtd7uWBC19rLnO4XQnYkaEAv2UXnuZ3O5Rvv5LrI59OVewvZKGwaeBfi6WaYJVrDmOzhDrZvuvr2JGUvl3ec0Hx2k4W+LOFcXnqdpfupResWIQRHOZMdta5q4ezlylN6sE13TvGvG87RHMhywwqTeZ5WuW+25t3ClIams9smOWkoS88sJ2yWhD32iFBZamiX8E7Wu6Cju/FTsj1l12mWaI3giAiVxTibm6o1NM92i4t8e/Ubo1TJ2LJfyznNIZwaaXwtec1ijezctYtNMpW9KNIQOla52Xpd5orrmTboo6WgNCRw00VKQkVxmy/FZqu4/UG7dxJuSV86pTKvmHDD+SI9oeBxWyywZ1lXHrV/JVk5aoXWIZh5nHB55aJIU/JhhmjZhcq2xpgY7SbF403h3m6N9uGq1yss0RrzfUwi43mDAVq6hxJDvR2LI5HJQrqQw64ng0Fxaqj52xKykC0pLuTtbA4yz5KgjTqhpW+Uxw0WaOP0J/YU3SKyun4gxxQtZaPsedzqXVvCI6gab7cmmKzJNswSLdVI2TPb8lW4rZ8wowPi04LJVq61YIXWMMapBVBBgwna06JAi8j2MhhstmhojWkPF7K4aLMiZ5b1NT+nbNEas31sQ2MitGsitYb9RTA5tmiNYB8Hsnhow9cCLSKHK34w2SKjJQ+mEMjioT1gbRFbsF0p8pA0W7SGMcScLBbaNeYz25zt0jUXtFh1KQhaosoUElkctOGLojC24dMiJ1lhjNaYZEwW58KTNI+ZPRXjCizVkzBjtNhsEcliFBqX+ExtTthXhZ0CRQwebFHJYqDlpThZLmVrqq0CgwPbRwYztPymd5NzztUga6zRYrB1rEERoM3zm9oVXsVNWu7WYM4WQBaMNi5uarNF3nIAnJwUnO0ozV4P2YrGfFFUJLNW5C/btFY0UqpdTBvs0PINZKxh8tK1ALTXS8zRQtiOGwzR5jjP7aYwR3svefKNIfR6BUOwB0dkzGltQqlsUYysMUdrBHvoh1Dw7Vz8J7i8gHRTEFlYlBzDQmvMIvXmPfMGS7QC/N1FmNVCLPqFiygeWrQU6DHwoSnhS3+d9Saux8WRLRYBkVQEE60xQt3RQhs/eTGTe1EUKXmmNYuyOG6e7wlCH7kldxAlhcSZ1izKoZSHZkYLL0ZlOxPtKePE9n6ZI3hnNFW0F52JFrDiIoGNtrW7hZtjWMVipUPJFi9YZz930kfVHMPQZjsVLbraRgnQztLo0WKmtRdFpbbMQuRWTSBwsQKKtmPtMURtdwwGJnkU52FJZY/p5rZJErRNouQerIdtKXtMN7dNkKBt0t+bxHpWQtUr0AR1vcUyEVrbwgWe0hqAC9u3OxotaiU5QoTWNpLCU1pI7nPQ2WhRG0AZMrY9tJTWAFwue93ZaK95xFF27T1Mpc1IuyiqbfMfsjiqUW1xlRaQ+6Q7HW2efT3KTm3HMZ8D2MuV73S0iIFUyKCqtp4g5mNW0dF2PFnU3dQpqmo7hPuYqHK11AvJG1TVdtZgHiBvK7SIm6ljpGit50r14T4ko7Ja+qlthBSttSSFG0RBAuQLRRbVImdI2VoqyfO4z0CvIIcVWGSLvEWK9qEn34/9jJiKohjEyKsGtUAK2x4DLoJJK65F1KWNiwa1QArbHhsqimJStSB2tvOk8TEkijpVWNHryMTOtrKSZgT7ARuqFgWUHCdnO4q3gQunzKiiKEhnj9zZlmPkIPYD0MuMa4oqJP3J0ImR8V0tIIpSAXJZtjk52yGi1gDkVmIVIJflgJOznSTLagELVVWzlrOzncfd6ANeqKqYcs5sjVKLwOAQRakKclXWODnbfvxVUaBmrcp9uJeRR0l6A4Bmrcp9qpLn5Gwfk9Si1GpGdnEUubOdxdyfB42iFFpoHEXubEnKjDGV++BInJOz7SPIfRYVWnZx1CKFEBkfrdzH97V584fc2Y7gp7WQE/wUUGiITLqrq5T98CgzKrTwEJl0V5e5iIZHgKwqFlbhs6vLPNeCQ5lRoa0RxAvZBKKNKLQssx9iZ0uAFuBq1X4fqyBuoV4nbuvxCJBVMQqe2BIeRVMqR/EIkBVaDLQRYWgTCi3bxJa4aIGNFlBB7ugT/PDRJkWhhRyWq0rIOGgTotCGFFpMQT1Ad1kUWl2hZVuOIo6jcLfppRRa1mgJ46hZ3KZeUqFljpYsjprGRbuh0DJHmyBEO84+rVVo8dDGCNGOKrSyoiXr643j7uaKKrTM0ZL19UZxl5grtBzQEoXII5pHoZUWLVGI3I+7nUtXaNmjJWrZ9uFuwlRoOaAlyn6wt04rtBzQklSR57HPFlJoOaCNEqW1mLswMwotB7QhotwHc1t8UqHlgJYksR3CPcJcoeWCdocoQMaLoxRafLnWeSS22DcSK7T4kueB9v66U49CKyta/MR2HPu+EIVWcrSPsE8xV2glR1u+NOQRa7Q5xRMPLXYzvnqxBGu0avcAJtoooavFOYVGocWXLAe0j/Cv1EsptNiS5oDWQ3B7rUIrM9ppkusSFVqZ0Y48oB1hi1YdeICJFrc/0ENyn7hCiy1x5mhnrRfYTiu0LkI7QnTttEIrMdoeosviQWjV+fRWWWGNtsYea9ok8McXQWwVT4vorNGO1KKFrpCKKrTSou2pRQvdQg1Dqw7N5Yj2cR1ZaGoLQ6u6eljdAbwzD4bq0QIDKYWWB1qcalRQaxBYIJVQaCVFO96ItochWlVExqszRikEUeCurUIrKdrHNmRh+Q/omBJ9UxGtyjZbtP12aEGF5KSqNHKoM8KXvc3bkgWprUIrJ9ohe7QQtd3RVTmKfcUiQUlpYWqr0HJAC75Zb6QZWojawtCeKqRlOYVMG3TPT9CjUVBbVY5iX7HQUzj7pYnVFoZW7R+oSA4ybfSUFqK2q6pmwbxioVNUWkAlOaFqFliyya5iMe9pibaHTTlKJbY4ae0ynZy2IqNMahZqdVRFwszS2nkHssh9W1WzYJ/WbuBt4WoqQ0wSW5X9YOQ+oLR2WnMWxAQItqbxQFG9kwPIpIEOze1DQNvHIrFV2Q889wGtjJrUUGScQfazpqgyzX2CHiS0nnn62c+Kosq0pTeioUk//exHhchM+z7TGqpM0g+RVe+nJBeQKduhG0MBktuICpGZ5j4hWsVjuEleViEy0wB5mVbxGB4lJ1QVGSxrTKKofghZlCh5S1WRwbLEohY1rsGkj3YV+UKBZbNLD2aO0VpAIRVHMYyiovSjY/RasoqjoJJl4GpH4WSdMyAVR7EsMyIueZvVcKRf1aPERVGIWW2wBwut4055VY+CCeBCCdSjkB9pmDJJs6+X7Xi0B9QLyOO4ZDXPLMUFq6qvB6lFZdg52vICxyA9Z7ukOnqUq4xBDwFah8qFKlqwKlhsMMpokVfBqd0hrAoWKPZ4SCOUVmHyunK2bFwtij2e1IilRZgMu4IgrFwtRXs8rWlM2UZUZsvC1SLUK2Y9Glu2MVVGZpHVxhgHxyjpLaxn29nLGrcp1o+DfZrGmi2ssdfRJ6yiF5AX+ZFtwTam0h9EuaAYRPVrNGWShkXu5PQnSy+IGtI0HmyVRUYU9BVvCc5km62oURaZekOv9dLy4CONvgwFiasWnWuRc5QyH5oRlLVX0BhMBSfnlEWma49/f54/WTNQHq/jahqHYWWRqdrjCdM8TjOuQdmvl6q8NTg9eh+CdyuLTNUed9/1ycdtG+WTDMmW3jo0OjrSb1ltNaGathTt8UQ1smk4VT44onEWr1ohRdEed1vc39CkVXen+zTuAgqkOnMZTRastJXIdeTxfew6O6QJkEF1zJCToF6RGOjW5JKAOq6xtSAfguyTjKzmU6lta0HdEDLXJRvaLpDadl5D/hr1YMYBTWtrte28QAo1qfXLRxaoth1XkVqBJz5tqradto4m364xFIbadlj+g1iJmtHkFFCToLN2UaOunOmVFC2sJNVRarvZzuYYXEmOK6VtF3NcEr9SW1vZbs8Ko1W6A0pt8csVg5rMAkqADpSnbdXwkU1mVEkK09POdEmOtle15PGUVmpHCzfJ4Y5oAKF187ya/AIxyR3Rt0XaLT3cBmS13oBKgKxy4IYQCmMtjfu7BNco+y79WpsIZOWq63vyaTcExw8tIIi7PVUxVPuQhblbl5tkhA58oFdrIxlQJvlesm4jCwul8h1tjtuNLCiUcnHhYsWFZEFsXdsC2nYlWVCY7FJ3e+BOsjC2rmzvXYTdlPXgsg27MLu9XnEtWRDbJfeFUo6tvIn2JQtiu+I2to4Z7ZjW1gJg67Iw2XGLz6DW5tKFngO5qnd7GnZlaIyb3252Dll/l+YGGe48tk5kxzSXyECgw9g6kA14NddI70xHsXUg6xJjXAmmppDj5GuXkw0May6T4Y7Jb1uTnenVXCfIRrnNa465VmQDPs2N0jWGyradj7loWYPyd2suFS/qzuptV9aNA4OaewVZcds0mLpo1esZ69JcLageN9yODdx8Czfr79VcL8OI9YvttlPcFqtl5rxaJwiqVV5qr4WOp82N8dyg1inSPeU+xU23SHi6tA4Sr99daVB+RYGFwo23g1W+bpryzA13HFgA3E3pr6BIh5WPbciEJlwAN9ds+6zfq3WydPsC7Q23GdjARLfW8TI4075wm4GdGexSYO/s8hiK6sZlq09dZ+3BBsZ6FdMHGUDJdJeyEuW5p5v2wdPUgKJZX6MaRKG7JofqXufs89gpZYgJ6IY3hWe6B/Zp7PLG7ymGrehOBBDoitPd6wNbQxyKbWXM++4UQIeoyudcywiv5QSEzBdZ2wsEFhOp8l2G/Yqeo/IOjDmnREvbBxzDqovcpl1AvLhaUtfqNZUKHVoh0hcNOeLdzHJYJJfPImC9k0cKG5IMGUZqYzXqnPFu51iFVtcmVbvDM0PLiaTdhdDzihqKeCo38qa2EtGIo/7G09k8Rf97mk9vx+0ipshyYmun2S3uxpDihiCjtZOW3EgsO2vwSnzTRJwnIJpPp9fitnWmUHR1PZkxWsq8R4FDV9oaySS3EqvRKEphMh7fTqfTuXxJLprZ2zvJmf/dtvnfN+vhhKKxxFbSQJJRRQ6qtPWSSiYTJchRnZmEotHVxEYyZUAkqNQWT2ntJZM0ZT1xJ9Ea+UN/RSZ85v84LXFfLP2M+ZB183kGpihvS6i0iPK4SV5VL6XSbz+VN6ogmabSUprnITpoVW7LaZ49vO2EYUwqei1lltI8A6q6jym9MqjotZIeg791nDb4f07KHuPLqAC0I4pfC5lsZ7SqaiHbND9WaN2KdtRQ2U87GWRASNNH6ZWqZtFSHtFC68E3FfNICdhkf50hD/YpfCC1nR+nWWhsorY1FbBgjzbi/ILZ0ndo/blJ1R5w9HzBOpeJkg9Nemo/CRMPiO18nfI5vvO+PesZLf/g/GiPIodQRX6AO303Yc56O1mn7kFwQPNosgxpsgclv56tGt++odHRfsUVWfpHp6enH4/0IMZW98Xb8QcbjjXVnn5TPEi1k2llfKkZaaQiUM/I+PTk6BAlFbIa6TpjrDqzNNV4vnlRntVEe0Zt+4uzCixlGWoCd5qhn/OM1L90ekRlOCw0d7KR7mPWzZaeoZLbL8nk6COFle1EV+sJs5NDKjJtLv8PqQos40d1HcYAAAAASUVORK5CYII=\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./images/owl.png\n// module id = 1\n// module chunks = 0","import breakStartAudioFile from '../sounds/tweet.mp3';\nimport breakOverAudioFile from '../sounds/ding.mp3';\nimport owlImage from '../images/owl.png';\nimport {Settings} from './settings';\nimport {animationControl} from './animation-control';\nimport {clockContainer} from './clock-container';\nimport {modal} from './modal';\n\nconst DIM_CSS_CLASS = 'dim';\n\nlet settings = new Settings();\nclockContainer.updateOpacity(settings.clockOpacity);\n\nlet messageElement;\nlet audioBreakStartEl;\nlet audioBreakOverEl;\n\nlet owlSvg;\n\nlet clock;\nlet timeElapsed = 0;\n\nconst WORK_MESSAGE = 'Leave this running...';\n\nlet start = function() {\n findElements();\n modal.show();\n};\n\nlet startContinue = function() {\n requestPermission();\n};\n\nlet handleNotificationDenied = function() {\n dim();\n messageElement.innerHTML = 'Please allow notifications to use Eye Hoot.';\n}\n\nlet requestPermission = function() {\n if (window.Notification && Notification.permission !== 'denied') {\n Notification.requestPermission(function(status) {\n if (status === 'granted') {\n startWork();\n } else {\n handleNotificationDenied();\n }\n });\n } else {\n handleNotificationDenied();\n }\n};\n\nlet findElements = function() {\n messageElement = document.querySelector('.message');\n\n audioBreakOverEl = document.querySelector('.break-over');\n audioBreakOverEl.src = breakOverAudioFile;\n audioBreakStartEl = document.querySelector('.break-start');\n audioBreakStartEl.src = breakStartAudioFile;\n\n owlSvg = document.querySelector('.owl-svg');\n};\n\nlet updateMessage = function(message) {\n messageElement.innerHTML = message;\n};\n\nlet dim = function() {\n [owlSvg, messageElement].forEach(el => el.classList.add(DIM_CSS_CLASS));\n}\n\nlet brighten = function() {\n [owlSvg, messageElement].forEach(el => {\n if (el.classList.contains(DIM_CSS_CLASS)) {\n el.classList.remove(DIM_CSS_CLASS);\n }\n });\n}\n\nlet startAnimation = function() {\n brighten();\n animationControl.playAnimation();\n updateMessage(animationControl.getAnimationMessage());\n};\n\nlet stopAnimation = function() {\n animationControl.stopAnimation();\n};\n\nlet startLongBreakAnimation = function() {\n brighten();\n animationControl.startStopLongBreakAnimation();\n updateMessage(animationControl.longBreakAnimationMessage);\n};\n\nlet stopBreakAnimation = function() {\n animationControl.startStopLongBreakAnimation();\n};\n\nlet notify = function(message) {\n let n = new Notification('Eye Hoot', {\n body: message,\n icon: owlImage,\n requireInteraction: true\n });\n playSound(audioBreakStartEl);\n n.onclick = notificationClickedHandler.bind(n);\n};\n\nlet notificationClickedHandler = function() {\n window.focus();\n this.close();\n settings.close();\n if (timeElapsed < settings.longBreakInterval) {\n startAnimation();\n startAnimationClock(settings.eyeExerciseDuration);\n } else {\n startLongBreakAnimation();\n startAnimationClock(settings.longBreakDuration);\n }\n}\n\nlet playSound = function(element) {\n if (settings.soundEnabled) {\n element.play();\n }\n}\n\nlet startAnimationClock = function(interval) {\n clock = $('.clock').FlipClock(interval, {\n clockFace: 'MinuteCounter',\n countdown: true,\n callbacks: {\n stop: stopAnimationClockHandler\n }\n });\n}\n\nlet stopAnimationClockHandler = function() {\n if (timeElapsed < settings.longBreakInterval) {\n stopAnimation();\n timeElapsed = timeElapsed + settings.eyeExerciseDuration + settings.eyeExerciseInterval;\n console.debug(`stopClockHandler: timeElapsed = ${timeElapsed}`);\n } else {\n stopBreakAnimation();\n timeElapsed = 0;\n }\n playSound(audioBreakOverEl);\n startWork();\n}\n\nlet startWork = function() {\n updateMessage(WORK_MESSAGE);\n dim();\n startWorkClock();\n};\n\nlet startWorkClock = function() {\n if (clock) {\n clock.reset(); // clear old callbacks\n }\n clock = $('.clock').FlipClock(settings.eyeExerciseInterval, {\n clockFace: 'MinuteCounter',\n countdown: true,\n callbacks: {\n stop: stopWorkClockHandler\n }\n });\n}\n\nlet stopWorkClockHandler = function() {\n let notifyBody = timeElapsed < settings.longBreakInterval ?\n 'Time for a short break' : 'Time for a long break';\n notify(notifyBody);\n}\n\n// public api\nlet app = {\n start,\n startContinue,\n startWork\n};\n\nexport {app};\n\n\n\n// WEBPACK FOOTER //\n// ./js/app.js","const clockContainerEl = document.querySelector('.clock-container');\n\nlet updateOpacity = function(opacity) {\n clockContainerEl.style.opacity = opacity;\n}\n\n// public api\nlet clockContainer = {\n updateOpacity\n};\n\nexport {clockContainer};\n\n\n\n// WEBPACK FOOTER //\n// ./js/clock-container.js","import {app} from './app';\nimport {clockContainer} from './clock-container';\n\nlet update = function(key, val) {\n switch(key) {\n case 'introModalClosed':\n app.startContinue();\n break;\n case '_eyeExerciseInterval':\n app.startWork();\n break;\n case '_clockOpacity':\n clockContainer.updateOpacity(val);\n default:\n break;\n }\n}\n\n// public api\nlet controller = {\n update\n};\n\nexport {controller};\n\n\n\n// WEBPACK FOOTER //\n// ./js/controller.js","const APP_KEY = 'eyehoot';\n\nlet storageAvailable = function(type) {\n\ttry {\n\t\tvar storage = window[type],\n\t\t\tx = '__storage_test__';\n\t\tstorage.setItem(x, x);\n\t\tstorage.removeItem(x);\n\t\treturn true;\n\t}\n\tcatch(e) {\n\t\treturn false;\n\t}\n};\n\nlet localStorageAvailable = storageAvailable('localStorage');\n\nlet saveItem = function(key, value) {\n localStorage.setItem(`${APP_KEY}-${key}`, value);\n};\n\nlet save = function(key, value) {\n if (localStorageAvailable) {\n saveItem(key, value);\n }\n};\n\nlet retrieveItem = function(key) {\n return localStorage.getItem(`${APP_KEY}-${key}`);\n};\n\nlet retrieve = function(key, defaultVal) {\n if (localStorageAvailable) {\n let result = retrieveItem(key);\n return result == undefined ? defaultVal : result;\n } else {\n return defaultVal;\n }\n};\n\nlet removeAll = function() {\n if (localStorageAvailable) {\n localStorage.clear();\n }\n};\n\nlet exists = function(key) {\n let result = retrieveItem(key);\n return result == undefined ? false : true;\n};\n\n// public api\nlet persistence = {\n save,\n retrieve,\n removeAll,\n exists\n};\n\nexport {persistence};\n\n\n\n// WEBPACK FOOTER //\n// ./js/persistence.js","const windowSvg = document.querySelector('.window-svg');\nconst owlGraphic = document.querySelector('.owl-graphic');\nconst eyes = document.querySelector('.eyes');\nconst leftEyeShine = document.querySelector('.left-eye-shine');\nconst rightEyeShine = document.querySelector('.right-eye-shine');\nconst leftWing = document.querySelector('.left-wing');\nconst rightWing = document.querySelector('.right-wing');\nconst feet = document.querySelectorAll('.foot');\nconst leftFoot = document.querySelector('.left-foot');\nconst rightFoot = document.querySelector('.right-foot');\n\nlet animationIndex = 0;\n\nlet init = function() {\n // As of Chrome 64, percentage based transforms work the same way as Firefox\n document.body.classList.add('ff');\n\n // owl-graphic: transform-origin: center bottom\n const owlGraphicBbox = owlGraphic.getBBox();\n const owlGraphicToX = owlGraphicBbox.x + (owlGraphicBbox.width / 2);\n const owlGraphicToY = owlGraphicBbox.y + owlGraphicBbox.height;\n owlGraphic.style['transform-origin'] = `${owlGraphicToX}px ${owlGraphicToY}px`;\n\n // eyes transform-origin: 50% 50%\n const eyesBbox = eyes.getBBox();\n const eyesToX = eyesBbox.x + (eyesBbox.width / 2);\n const eyesToY = eyesBbox.y + (eyesBbox.height / 2);\n eyes.style['transform-origin'] = `${eyesToX}px ${eyesToY}px`;\n\n // left-wing transform-origin: right top\n const leftWingBbox = leftWing.getBBox();\n const leftWingToX = leftWingBbox.x + leftWingBbox.width;\n const leftWingToY = leftWingBbox.y;\n leftWing.style['transform-origin'] = `${leftWingToX}px ${leftWingToY}px`;\n\n // right-wing transform-origin: left top\n const rightWingBbox = rightWing.getBBox();\n const rightWingToX = rightWingBbox.x;\n const rightWingToY = rightWingBbox.y;\n rightWing.style['transform-origin'] = `${rightWingToX}px ${rightWingToY}px`;\n\n // foot transform-origin: center top\n for (let i = 0; i < feet.length; i++) {\n let footEl = feet[i];\n let footBbox = footEl.getBBox();\n let footToX = footBbox.x + (footBbox.width / 2);\n let footToY = footBbox.y;\n footEl.style['transform-origin'] = `${footToX}px ${footToY}px`;\n }\n}\n\nlet sideToSide = function() {\n eyes.classList.toggle('side-to-side');\n leftEyeShine.classList.toggle('side-to-side');\n rightEyeShine.classList.toggle('side-to-side');\n};\n\nlet upDown = function() {\n eyes.classList.toggle('up-down');\n leftEyeShine.classList.toggle('up-down');\n rightEyeShine.classList.toggle('up-down');\n};\n\nlet aroundRight = function() {\n eyes.classList.toggle('around-right');\n leftEyeShine.classList.toggle('around-right');\n rightEyeShine.classList.toggle('around-right');\n};\n\nlet aroundLeft = function() {\n eyes.classList.toggle('around-left');\n leftEyeShine.classList.toggle('around-left');\n rightEyeShine.classList.toggle('around-left');\n}\n\nlet blinkEyes = function() {\n eyes.classList.toggle('blink');\n};\n\nlet farFocus = function() {\n windowSvg.classList.toggle('window-visible');\n}\n\nlet coverEyes = function() {\n rightWing.classList.toggle('forward-up');\n leftWing.classList.toggle('forward-up');\n}\n\nlet longBreak = function() {\n owlGraphic.classList.toggle('wobble');\n leftWing.classList.toggle('flap-left');\n rightWing.classList.toggle('flap-right');\n rightFoot.classList.toggle('march');\n leftFoot.classList.toggle('march');\n}\n\nlet EYE_ANIMATIONS = [\n sideToSide,\n aroundLeft,\n coverEyes,\n upDown,\n aroundRight,\n blinkEyes,\n farFocus\n];\n\nlet EYE_ANIMATIONS_MESSAGES = [\n 'Move your eyes from side to side',\n 'Move your eyes around to the left',\n 'Cover your eyes',\n 'Move your eyes up and down',\n 'Move your eyes around to the right',\n 'Open and close your eyes',\n 'Look out a window or far away object'\n];\n\nconst longBreakAnimationMessage = 'Get up and go for for a walk';\n\nlet playAnimation = function() {\n EYE_ANIMATIONS[animationIndex]();\n}\n\nlet stopAnimation = function() {\n EYE_ANIMATIONS[animationIndex]();\n animationIndex = (animationIndex === EYE_ANIMATIONS.length - 1) ? 0 : animationIndex + 1;\n}\n\nlet getAnimationMessage = function() {\n return EYE_ANIMATIONS_MESSAGES[animationIndex];\n}\n\nlet startStopLongBreakAnimation = function() {\n longBreak();\n}\n\n// public api\nlet animationControl = {\n playAnimation,\n stopAnimation,\n getAnimationMessage,\n startStopLongBreakAnimation,\n longBreakAnimationMessage\n};\n\ninit();\n\nexport {animationControl};\n\n\n\n// WEBPACK FOOTER //\n// ./js/animation-control.js","const SECONDS_IN_MINUTE = 60;\n\nlet secondsToMinutes = function(val) {\n return val / SECONDS_IN_MINUTE;\n}\n\nlet minutesToSeconds = function(val) {\n return val * SECONDS_IN_MINUTE;\n}\n\nlet stringToBoolean = function(val) {\n return val === 'true' ? true : false;\n}\n\nlet stringToInt = function(val) {\n let result = parseInt(val, 10);\n if (!isNaN(result)) {\n return result;\n } else {\n throw new Error('Expected numeric integer setting');\n }\n}\n\nlet stringToFloat = function(val) {\n let result = parseFloat(val);\n if (!isNaN(result)) {\n return result;\n } else {\n throw new Error('Expected numeric float setting');\n }\n}\n\n// public api\nlet conversion = {\n secondsToMinutes,\n minutesToSeconds,\n stringToBoolean,\n stringToInt,\n stringToFloat\n};\n\nexport {conversion};\n\n\n\n// WEBPACK FOOTER //\n// ./js/conversion.js","require('../css/styles.scss');\nrequire('../images/owl.png');\n\nimport {app} from './app';\n\ndocument.addEventListener('DOMContentLoaded', app.start);\n\n\n\n// WEBPACK FOOTER //\n// ./js/index.js","import {controller} from './controller';\nimport {persistence} from './persistence';\nimport owlImage from '../images/owl.png';\n\nconst HAS_SEEN_INTRO_KEY = 'hasSeenIntro';\n\nconst modalEl = document.querySelector('#modal');\nconst modalOverlayEl = document.querySelector('#modalOverlay');\nconst modalCloseEl = document.querySelector('#modalClose');\nconst modalStartEl = document.querySelector('#modalStart');\nconst modalLogoEl = document.querySelector('#modalLogo');\n\nmodalLogoEl.src = owlImage;\nmodalCloseEl.addEventListener('click', () => close());\nmodalStartEl.addEventListener('click', () => close());\n\nlet show = function() {\n if (!_hasSeenIntro()) {\n open();\n persistence.save(HAS_SEEN_INTRO_KEY, true);\n } else {\n controller.update('introModalClosed');\n }\n};\n\nlet open = function() {\n modalEl.classList.toggle('closed');\n modalOverlayEl.classList.toggle('closed');\n};\n\nlet close = function() {\n modalEl.classList.toggle('closed');\n modalOverlayEl.classList.toggle('closed');\n controller.update('introModalClosed');\n};\n\nlet _hasSeenIntro = function() {\n return persistence.exists(HAS_SEEN_INTRO_KEY);\n};\n\n// public api\nlet modal = {\n show,\n open,\n close\n};\n\nexport {modal};\n\n\n\n// WEBPACK FOOTER //\n// ./js/modal.js","import {persistence} from './persistence';\nimport {conversion} from './conversion';\nimport {validation} from './validation';\nimport {controller} from './controller';\n\nconst DEFAULT_SOUND_ENABLED = 'true';\nconst DEFAULT_CLOCK_OPACITY = '1';\nconst SETTINGS_HIDDEN_CLASS = 'settings-hidden';\n\nconst containerEl = document.querySelector('.settings-container');\nconst eyeExerciseIntervalEl = document.getElementsByName('eyeExerciseInterval')[0];\nconst longBreakIntervalEl = document.getElementsByName('longBreakInterval')[0];\nconst longBreakDurationEl = document.getElementsByName('longBreakDuration')[0];\nconst soundEnabledEl = document.getElementById('soundEnabled');\nconst clockOpacityEl = document.getElementById('clockOpacity');\nconst closeSettingsEl = document.getElementById('settingsClose');\nconst openSettingsEl = document.getElementById('settingsOpen');\nconst restoreSettingsEl = document.getElementById('restoreSettings');\n\nexport class Settings {\n constructor() {\n this._init();\n this._registerEvents();\n this._populateFields();\n }\n\n _init() {\n this._eyeExerciseDuration = DEFAULT_EYE_EXERCISE_DURATION;\n this._eyeExerciseInterval = conversion.stringToInt(persistence.retrieve('_eyeExerciseInterval', DEFAULT_EYE_EXERCISE_INTERVAL));\n this._longBreakInterval = conversion.stringToInt(persistence.retrieve('_longBreakInterval', DEFAULT_LONG_BREAK_INTERVAL));\n this._longBreakDuration = conversion.stringToInt(persistence.retrieve('_longBreakDuration', DEFAULT_LONG_BREAK_DURATION));\n this._soundEnabled = conversion.stringToBoolean(persistence.retrieve('_soundEnabled', DEFAULT_SOUND_ENABLED));\n this._clockOpacity = conversion.stringToFloat(persistence.retrieve('_clockOpacity', DEFAULT_CLOCK_OPACITY));\n }\n\n _registerEvents() {\n // numeric inputs\n eyeExerciseIntervalEl.addEventListener('blur', () => this._numericChangeHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval'));\n eyeExerciseIntervalEl.addEventListener('keypress', (evt) => this._keyPressHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval', evt));\n longBreakIntervalEl.addEventListener('blur', () => this._numericChangeHandler(longBreakIntervalEl, '_longBreakInterval'));\n longBreakIntervalEl.addEventListener('keypress', (evt) => this._keyPressHandler(longBreakIntervalEl, '_longBreakInterval', evt));\n longBreakDurationEl.addEventListener('blur', () => this._numericChangeHandler(longBreakDurationEl, '_longBreakDuration'));\n longBreakDurationEl.addEventListener('keypress', (evt) => this._keyPressHandler(longBreakDurationEl, '_longBreakDuration', evt));\n // checkboxes\n soundEnabledEl.addEventListener('change', () => this._booleanChangeHandler(soundEnabledEl, '_soundEnabled'));\n // ranges\n clockOpacityEl.addEventListener('input', () => this._rangeChangeHandler(clockOpacityEl, '_clockOpacity'))\n // buttons\n closeSettingsEl.addEventListener('click', () => this.close());\n openSettingsEl.addEventListener('click', () => this._open());\n restoreSettingsEl.addEventListener('click', (evt) => this._restore(evt));\n }\n\n _populateFields() {\n eyeExerciseIntervalEl.value = conversion.secondsToMinutes(this._eyeExerciseInterval);\n longBreakIntervalEl.value = conversion.secondsToMinutes(this._longBreakInterval);\n longBreakDurationEl.value = conversion.secondsToMinutes(this._longBreakDuration);\n clockOpacity.value = this._clockOpacity;\n soundEnabledEl.checked = this._soundEnabled;\n }\n\n _numericChangeHandler(element, property) {\n let isValid = true;\n let newVal = element.value;\n let currentVal = conversion.secondsToMinutes(this[property]).toString();\n if (newVal !== currentVal) {\n if (validation.isValidNumber(newVal, parseInt(element.min, 10), parseInt(element.max, 10))) {\n this[property] = conversion.minutesToSeconds(newVal);\n persistence.save(property, this[property]);\n validation.markElementValid(element);\n controller.update(property);\n } else {\n isValid = false;\n validation.markElementInvalid(element);\n }\n } else {\n validation.clearMarkers(element);\n }\n return isValid;\n }\n\n _keyPressHandler(element, property, evt) {\n if (evt.keyCode === 13) {\n let isValid = this._numericChangeHandler(element, property);\n if (!isValid) {\n element.focus();\n } else {\n element.blur();\n }\n }\n }\n\n _booleanChangeHandler(element, property) {\n let newVal = element.checked;\n if (newVal !== this[property]) {\n this[property] = newVal;\n persistence.save(property, this[property]);\n }\n }\n\n\n _rangeChangeHandler(element, property) {\n let newVal = element.value;\n controller.update(property, newVal);\n this[property] = newVal;\n persistence.save(property, this[property]);\n }\n\n close() {\n if (!containerEl.classList.contains(SETTINGS_HIDDEN_CLASS)) {\n containerEl.classList.add(SETTINGS_HIDDEN_CLASS);\n }\n }\n\n _open() {\n containerEl.classList.remove(SETTINGS_HIDDEN_CLASS);\n }\n\n _restore(evt) {\n evt.preventDefault();\n \n persistence.removeAll();\n this._init();\n this._populateFields();\n\n controller.update('_eyeExerciseInterval', this._eyeExerciseInterval);\n controller.update('_clockOpacity', this._clockOpacity);\n }\n\n get eyeExerciseInterval() {\n return this._eyeExerciseInterval;\n }\n\n get longBreakInterval() {\n return this._longBreakInterval;\n }\n\n get eyeExerciseDuration() {\n return this._eyeExerciseDuration;\n }\n\n get longBreakDuration() {\n return this._longBreakDuration;\n }\n\n get soundEnabled() {\n return this._soundEnabled;\n }\n\n get clockOpacity() {\n return this._clockOpacity;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./js/settings.js","const svgValidEl = document.querySelector('.check-svg');\nconst svgValidSize = svgValidEl.getClientRects()[0];\nconst SVG_VALID_MARK_WIDTH = svgValidSize.width;\nconst SVG_VALID_MARK_HALF_HEIGHT = svgValidSize.height / 2;\nconst SVG_VALID_MARK_WIDTH_ADJUSTMENT = 3;\nconst SVG_VALID_MARK_HEIGHT_ADJUSTMENT = 5;\n\nconst ERROR_CSS_CLASS = 'settings-input-error';\nconst VISIBLE_CSS_CLASS = 'visible';\n\nlet isValidNumber = function(val, min, max) {\n let isNumeric = /^(?:[1-9]\\d*|0)$/.test(val);\n let intVal = parseInt(val, 10);\n return isNumeric && (intVal >= min) && (intVal <= max);\n}\n\nlet markElementInvalid = function(element) {\n element.classList.add(ERROR_CSS_CLASS);\n}\n\nlet clearMarkers = function(element) {\n if (element.classList.contains(ERROR_CSS_CLASS)) {\n element.classList.remove(ERROR_CSS_CLASS);\n }\n}\n\nlet _positionValidMark = function(element) {\n let inputWrapper = element.parentElement;\n let wrapperWidth = inputWrapper.clientWidth;\n let wrapperLeft = inputWrapper.offsetLeft;\n let wrapperHeight = inputWrapper.clientHeight;\n let wrapperTop = inputWrapper.offsetTop;\n let checkLeft = wrapperWidth + wrapperLeft - SVG_VALID_MARK_WIDTH + SVG_VALID_MARK_WIDTH_ADJUSTMENT;\n let checkTop = wrapperHeight + wrapperTop - SVG_VALID_MARK_HALF_HEIGHT + SVG_VALID_MARK_HEIGHT_ADJUSTMENT;\n svgValidEl.style.left = `${checkLeft}px`;\n svgValidEl.style.top = `${checkTop}px`;\n}\n\nlet _fadeValidMarkInOut = function() {\n if (svgValidEl.classList.contains(VISIBLE_CSS_CLASS)) {\n svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n }\n svgValidEl.classList.add(VISIBLE_CSS_CLASS);\n setTimeout(() => {\n svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n }, 2000);\n}\n\nlet markElementValid = function(element) {\n clearMarkers(element);\n _positionValidMark(element);\n _fadeValidMarkInOut();\n}\n\n// public api\nlet validation = {\n isValidNumber,\n markElementInvalid,\n markElementValid,\n clearMarkers\n};\n\nexport {validation};\n\n\n\n// WEBPACK FOOTER //\n// ./js/validation.js","module.exports = __webpack_public_path__ + \"b506a66a688dd0df4b191f1ff1611c45.mp3\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sounds/ding.mp3\n// module id = 13\n// module chunks = 0","module.exports = __webpack_public_path__ + \"9a62c3d1f3ca4b470bc4a446f5c9c9e1.mp3\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sounds/tweet.mp3\n// module id = 14\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/bundle-ef0d2fcfbfeb97467a99.js.map b/docs/bundle-ef0d2fcfbfeb97467a99.js.map deleted file mode 100644 index 558a75f..0000000 --- a/docs/bundle-ef0d2fcfbfeb97467a99.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///bundle-ef0d2fcfbfeb97467a99.js","webpack:///webpack/bootstrap ef0d2fcfbfeb97467a99","webpack:///./images/owl.png","webpack:///./js/app.js","webpack:///./js/clock-container.js","webpack:///./js/controller.js","webpack:///./js/persistence.js","webpack:///./js/animation-control.js","webpack:///./js/conversion.js","webpack:///./js/index.js","webpack:///./js/modal.js","webpack:///./js/settings.js","webpack:///./js/validation.js","webpack:///./sounds/ding.mp3","webpack:///./sounds/tweet.mp3"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","app","undefined","_tweet","_tweet2","_ding","_ding2","_owl","_owl2","_settings","_animationControl","_clockContainer","_modal","DIM_CSS_CLASS","settings","Settings","clockContainer","updateOpacity","clockOpacity","messageElement","audioBreakStartEl","audioBreakOverEl","owlSvg","clock","timeElapsed","WORK_MESSAGE","start","findElements","modal","show","startContinue","requestPermission","handleNotificationDenied","dim","innerHTML","window","Notification","permission","status","startWork","document","querySelector","src","updateMessage","message","forEach","el","classList","add","brighten","contains","remove","startAnimation","animationControl","playAnimation","getAnimationMessage","stopAnimation","startLongBreakAnimation","startStopLongBreakAnimation","longBreakAnimationMessage","stopBreakAnimation","notify","n","body","icon","requireInteraction","playSound","onclick","notificationClickedHandler","bind","focus","this","close","longBreakInterval","startAnimationClock","eyeExerciseDuration","longBreakDuration","element","soundEnabled","play","interval","$","FlipClock","clockFace","countdown","callbacks","stop","stopAnimationClockHandler","eyeExerciseInterval","console","debug","startWorkClock","reset","stopWorkClockHandler","notifyBody","clockContainerEl","opacity","style","controller","_app","update","key","val","APP_KEY","storageAvailable","type","storage","x","setItem","removeItem","e","localStorageAvailable","saveItem","localStorage","save","retrieveItem","getItem","retrieve","defaultVal","result","removeAll","clear","exists","persistence","windowSvg","owlGraphic","eyes","leftEyeShine","rightEyeShine","leftWing","rightWing","feet","querySelectorAll","leftFoot","rightFoot","animationIndex","init","InstallTrigger","owlGraphicBbox","getBBox","owlGraphicToX","width","owlGraphicToY","y","height","eyesBbox","eyesToX","eyesToY","leftWingBbox","leftWingToX","leftWingToY","rightWingBbox","rightWingToX","rightWingToY","i","length","footEl","footBbox","footToX","footToY","sideToSide","toggle","upDown","aroundRight","aroundLeft","blinkEyes","farFocus","coverEyes","longBreak","EYE_ANIMATIONS","EYE_ANIMATIONS_MESSAGES","SECONDS_IN_MINUTE","secondsToMinutes","minutesToSeconds","stringToBoolean","stringToInt","parseInt","isNaN","Error","stringToFloat","parseFloat","conversion","addEventListener","_controller","_persistence","HAS_SEEN_INTRO_KEY","modalEl","modalOverlayEl","modalCloseEl","modalStartEl","modalLogoEl","_hasSeenIntro","open","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","prototype","_conversion","_validation","DEFAULT_SOUND_ENABLED","DEFAULT_CLOCK_OPACITY","SETTINGS_HIDDEN_CLASS","containerEl","eyeExerciseIntervalEl","getElementsByName","longBreakIntervalEl","longBreakDurationEl","soundEnabledEl","getElementById","clockOpacityEl","closeSettingsEl","openSettingsEl","restoreSettingsEl","_init","_registerEvents","_populateFields","_eyeExerciseDuration","_eyeExerciseInterval","_longBreakInterval","_longBreakDuration","_soundEnabled","_clockOpacity","_this","_numericChangeHandler","evt","_keyPressHandler","_booleanChangeHandler","_rangeChangeHandler","_open","_restore","checked","property","isValid","newVal","currentVal","toString","validation","isValidNumber","min","max","markElementValid","markElementInvalid","clearMarkers","keyCode","blur","preventDefault","get","svgValidEl","svgValidSize","getClientRects","SVG_VALID_MARK_WIDTH","SVG_VALID_MARK_HALF_HEIGHT","SVG_VALID_MARK_WIDTH_ADJUSTMENT","SVG_VALID_MARK_HEIGHT_ADJUSTMENT","ERROR_CSS_CLASS","VISIBLE_CSS_CLASS","isNumeric","test","intVal","_positionValidMark","inputWrapper","parentElement","wrapperWidth","clientWidth","wrapperLeft","offsetLeft","wrapperHeight","clientHeight","wrapperTop","offsetTop","checkLeft","checkTop","left","top","_fadeValidMarkInOut","setTimeout"],"mappings":"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","file":"bundle-ef0d2fcfbfeb97467a99.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** multi main ***!\n \\******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(/*! ./js/index */8);\n\n\n/***/ },\n/* 1 */\n/*!************************!*\\\n !*** ./images/owl.png ***!\n \\************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/png;base64,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\"\n\n/***/ },\n/* 2 */\n/*!*******************!*\\\n !*** ./js/app.js ***!\n \\*******************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.app = undefined;\n\t\n\tvar _tweet = __webpack_require__(/*! ../sounds/tweet.mp3 */ 14);\n\t\n\tvar _tweet2 = _interopRequireDefault(_tweet);\n\t\n\tvar _ding = __webpack_require__(/*! ../sounds/ding.mp3 */ 13);\n\t\n\tvar _ding2 = _interopRequireDefault(_ding);\n\t\n\tvar _owl = __webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tvar _owl2 = _interopRequireDefault(_owl);\n\t\n\tvar _settings = __webpack_require__(/*! ./settings */ 10);\n\t\n\tvar _animationControl = __webpack_require__(/*! ./animation-control */ 6);\n\t\n\tvar _clockContainer = __webpack_require__(/*! ./clock-container */ 3);\n\t\n\tvar _modal = __webpack_require__(/*! ./modal */ 9);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar DIM_CSS_CLASS = 'dim';\n\t\n\tvar settings = new _settings.Settings();\n\t_clockContainer.clockContainer.updateOpacity(settings.clockOpacity);\n\t\n\tvar messageElement = void 0;\n\tvar audioBreakStartEl = void 0;\n\tvar audioBreakOverEl = void 0;\n\t\n\tvar owlSvg = void 0;\n\t\n\tvar clock = void 0;\n\tvar timeElapsed = 0;\n\t\n\tvar WORK_MESSAGE = 'Leave this running...';\n\t\n\tvar start = function start() {\n\t findElements();\n\t _modal.modal.show();\n\t};\n\t\n\tvar startContinue = function startContinue() {\n\t requestPermission();\n\t};\n\t\n\tvar handleNotificationDenied = function handleNotificationDenied() {\n\t dim();\n\t messageElement.innerHTML = 'Please allow notifications to use Eye Hoot.';\n\t};\n\t\n\tvar requestPermission = function requestPermission() {\n\t if (window.Notification && Notification.permission !== 'denied') {\n\t Notification.requestPermission(function (status) {\n\t if (status === 'granted') {\n\t startWork();\n\t } else {\n\t handleNotificationDenied();\n\t }\n\t });\n\t } else {\n\t handleNotificationDenied();\n\t }\n\t};\n\t\n\tvar findElements = function findElements() {\n\t messageElement = document.querySelector('.message');\n\t\n\t audioBreakOverEl = document.querySelector('.break-over');\n\t audioBreakOverEl.src = _ding2.default;\n\t audioBreakStartEl = document.querySelector('.break-start');\n\t audioBreakStartEl.src = _tweet2.default;\n\t\n\t owlSvg = document.querySelector('.owl-svg');\n\t};\n\t\n\tvar updateMessage = function updateMessage(message) {\n\t messageElement.innerHTML = message;\n\t};\n\t\n\tvar dim = function dim() {\n\t [owlSvg, messageElement].forEach(function (el) {\n\t return el.classList.add(DIM_CSS_CLASS);\n\t });\n\t};\n\t\n\tvar brighten = function brighten() {\n\t [owlSvg, messageElement].forEach(function (el) {\n\t if (el.classList.contains(DIM_CSS_CLASS)) {\n\t el.classList.remove(DIM_CSS_CLASS);\n\t }\n\t });\n\t};\n\t\n\tvar startAnimation = function startAnimation() {\n\t brighten();\n\t _animationControl.animationControl.playAnimation();\n\t updateMessage(_animationControl.animationControl.getAnimationMessage());\n\t};\n\t\n\tvar stopAnimation = function stopAnimation() {\n\t _animationControl.animationControl.stopAnimation();\n\t};\n\t\n\tvar startLongBreakAnimation = function startLongBreakAnimation() {\n\t brighten();\n\t _animationControl.animationControl.startStopLongBreakAnimation();\n\t updateMessage(_animationControl.animationControl.longBreakAnimationMessage);\n\t};\n\t\n\tvar stopBreakAnimation = function stopBreakAnimation() {\n\t _animationControl.animationControl.startStopLongBreakAnimation();\n\t};\n\t\n\tvar notify = function notify(message) {\n\t var n = new Notification('Eye Hoot', {\n\t body: message,\n\t icon: _owl2.default,\n\t requireInteraction: true\n\t });\n\t playSound(audioBreakStartEl);\n\t n.onclick = notificationClickedHandler.bind(n);\n\t};\n\t\n\tvar notificationClickedHandler = function notificationClickedHandler() {\n\t window.focus();\n\t this.close();\n\t settings.close();\n\t if (timeElapsed < settings.longBreakInterval) {\n\t startAnimation();\n\t startAnimationClock(settings.eyeExerciseDuration);\n\t } else {\n\t startLongBreakAnimation();\n\t startAnimationClock(settings.longBreakDuration);\n\t }\n\t};\n\t\n\tvar playSound = function playSound(element) {\n\t if (settings.soundEnabled) {\n\t element.play();\n\t }\n\t};\n\t\n\tvar startAnimationClock = function startAnimationClock(interval) {\n\t clock = $('.clock').FlipClock(interval, {\n\t clockFace: 'MinuteCounter',\n\t countdown: true,\n\t callbacks: {\n\t stop: stopAnimationClockHandler\n\t }\n\t });\n\t};\n\t\n\tvar stopAnimationClockHandler = function stopAnimationClockHandler() {\n\t if (timeElapsed < settings.longBreakInterval) {\n\t stopAnimation();\n\t timeElapsed = timeElapsed + settings.eyeExerciseDuration + settings.eyeExerciseInterval;\n\t console.debug('stopClockHandler: timeElapsed = ' + timeElapsed);\n\t } else {\n\t stopBreakAnimation();\n\t timeElapsed = 0;\n\t }\n\t playSound(audioBreakOverEl);\n\t startWork();\n\t};\n\t\n\tvar startWork = function startWork() {\n\t updateMessage(WORK_MESSAGE);\n\t dim();\n\t startWorkClock();\n\t};\n\t\n\tvar startWorkClock = function startWorkClock() {\n\t if (clock) {\n\t clock.reset(); // clear old callbacks\n\t }\n\t clock = $('.clock').FlipClock(settings.eyeExerciseInterval, {\n\t clockFace: 'MinuteCounter',\n\t countdown: true,\n\t callbacks: {\n\t stop: stopWorkClockHandler\n\t }\n\t });\n\t};\n\t\n\tvar stopWorkClockHandler = function stopWorkClockHandler() {\n\t var notifyBody = timeElapsed < settings.longBreakInterval ? 'Time for a short break' : 'Time for a long break';\n\t notify(notifyBody);\n\t};\n\t\n\t// public api\n\tvar app = {\n\t start: start,\n\t startContinue: startContinue,\n\t startWork: startWork\n\t};\n\t\n\texports.app = app;\n\n/***/ },\n/* 3 */\n/*!*******************************!*\\\n !*** ./js/clock-container.js ***!\n \\*******************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar clockContainerEl = document.querySelector('.clock-container');\n\t\n\tvar updateOpacity = function updateOpacity(opacity) {\n\t clockContainerEl.style.opacity = opacity;\n\t};\n\t\n\t// public api\n\tvar clockContainer = {\n\t updateOpacity: updateOpacity\n\t};\n\t\n\texports.clockContainer = clockContainer;\n\n/***/ },\n/* 4 */\n/*!**************************!*\\\n !*** ./js/controller.js ***!\n \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.controller = undefined;\n\t\n\tvar _app = __webpack_require__(/*! ./app */ 2);\n\t\n\tvar _clockContainer = __webpack_require__(/*! ./clock-container */ 3);\n\t\n\tvar update = function update(key, val) {\n\t switch (key) {\n\t case 'introModalClosed':\n\t _app.app.startContinue();\n\t break;\n\t case '_eyeExerciseInterval':\n\t _app.app.startWork();\n\t break;\n\t case '_clockOpacity':\n\t _clockContainer.clockContainer.updateOpacity(val);\n\t default:\n\t break;\n\t }\n\t};\n\t\n\t// public api\n\tvar controller = {\n\t update: update\n\t};\n\t\n\texports.controller = controller;\n\n/***/ },\n/* 5 */\n/*!***************************!*\\\n !*** ./js/persistence.js ***!\n \\***************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar APP_KEY = 'eyehoot';\n\t\n\tvar storageAvailable = function storageAvailable(type) {\n\t try {\n\t var storage = window[type],\n\t x = '__storage_test__';\n\t storage.setItem(x, x);\n\t storage.removeItem(x);\n\t return true;\n\t } catch (e) {\n\t return false;\n\t }\n\t};\n\t\n\tvar localStorageAvailable = storageAvailable('localStorage');\n\t\n\tvar saveItem = function saveItem(key, value) {\n\t localStorage.setItem(APP_KEY + '-' + key, value);\n\t};\n\t\n\tvar save = function save(key, value) {\n\t if (localStorageAvailable) {\n\t saveItem(key, value);\n\t }\n\t};\n\t\n\tvar retrieveItem = function retrieveItem(key) {\n\t return localStorage.getItem(APP_KEY + '-' + key);\n\t};\n\t\n\tvar retrieve = function retrieve(key, defaultVal) {\n\t if (localStorageAvailable) {\n\t var result = retrieveItem(key);\n\t return result == undefined ? defaultVal : result;\n\t } else {\n\t return defaultVal;\n\t }\n\t};\n\t\n\tvar removeAll = function removeAll() {\n\t if (localStorageAvailable) {\n\t localStorage.clear();\n\t }\n\t};\n\t\n\tvar exists = function exists(key) {\n\t var result = retrieveItem(key);\n\t return result == undefined ? false : true;\n\t};\n\t\n\t// public api\n\tvar persistence = {\n\t save: save,\n\t retrieve: retrieve,\n\t removeAll: removeAll,\n\t exists: exists\n\t};\n\t\n\texports.persistence = persistence;\n\n/***/ },\n/* 6 */\n/*!*********************************!*\\\n !*** ./js/animation-control.js ***!\n \\*********************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar windowSvg = document.querySelector('.window-svg');\n\tvar owlGraphic = document.querySelector('.owl-graphic');\n\tvar eyes = document.querySelector('.eyes');\n\tvar leftEyeShine = document.querySelector('.left-eye-shine');\n\tvar rightEyeShine = document.querySelector('.right-eye-shine');\n\tvar leftWing = document.querySelector('.left-wing');\n\tvar rightWing = document.querySelector('.right-wing');\n\tvar feet = document.querySelectorAll('.foot');\n\tvar leftFoot = document.querySelector('.left-foot');\n\tvar rightFoot = document.querySelector('.right-foot');\n\t\n\tvar animationIndex = 0;\n\t\n\tvar init = function init() {\n\t if (typeof InstallTrigger !== 'undefined') {\n\t document.body.classList.add('ff');\n\t\n\t // owl-graphic: transform-origin: center bottom\n\t var owlGraphicBbox = owlGraphic.getBBox();\n\t var owlGraphicToX = owlGraphicBbox.x + owlGraphicBbox.width / 2;\n\t var owlGraphicToY = owlGraphicBbox.y + owlGraphicBbox.height;\n\t owlGraphic.style['transform-origin'] = owlGraphicToX + 'px ' + owlGraphicToY + 'px';\n\t\n\t // eyes transform-origin: 50% 50%\n\t var eyesBbox = eyes.getBBox();\n\t var eyesToX = eyesBbox.x + eyesBbox.width / 2;\n\t var eyesToY = eyesBbox.y + eyesBbox.height / 2;\n\t eyes.style['transform-origin'] = eyesToX + 'px ' + eyesToY + 'px';\n\t\n\t // left-wing transform-origin: right top\n\t var leftWingBbox = leftWing.getBBox();\n\t var leftWingToX = leftWingBbox.x + leftWingBbox.width;\n\t var leftWingToY = leftWingBbox.y;\n\t leftWing.style['transform-origin'] = leftWingToX + 'px ' + leftWingToY + 'px';\n\t\n\t // right-wing transform-origin: left top\n\t var rightWingBbox = rightWing.getBBox();\n\t var rightWingToX = rightWingBbox.x;\n\t var rightWingToY = rightWingBbox.y;\n\t rightWing.style['transform-origin'] = rightWingToX + 'px ' + rightWingToY + 'px';\n\t\n\t // foot transform-origin: center top\n\t for (var i = 0; i < feet.length; i++) {\n\t var footEl = feet[i];\n\t var footBbox = footEl.getBBox();\n\t var footToX = footBbox.x + footBbox.width / 2;\n\t var footToY = footBbox.y;\n\t footEl.style['transform-origin'] = footToX + 'px ' + footToY + 'px';\n\t }\n\t }\n\t};\n\t\n\tvar sideToSide = function sideToSide() {\n\t eyes.classList.toggle('side-to-side');\n\t leftEyeShine.classList.toggle('side-to-side');\n\t rightEyeShine.classList.toggle('side-to-side');\n\t};\n\t\n\tvar upDown = function upDown() {\n\t eyes.classList.toggle('up-down');\n\t leftEyeShine.classList.toggle('up-down');\n\t rightEyeShine.classList.toggle('up-down');\n\t};\n\t\n\tvar aroundRight = function aroundRight() {\n\t eyes.classList.toggle('around-right');\n\t leftEyeShine.classList.toggle('around-right');\n\t rightEyeShine.classList.toggle('around-right');\n\t};\n\t\n\tvar aroundLeft = function aroundLeft() {\n\t eyes.classList.toggle('around-left');\n\t leftEyeShine.classList.toggle('around-left');\n\t rightEyeShine.classList.toggle('around-left');\n\t};\n\t\n\tvar blinkEyes = function blinkEyes() {\n\t eyes.classList.toggle('blink');\n\t};\n\t\n\tvar farFocus = function farFocus() {\n\t windowSvg.classList.toggle('window-visible');\n\t};\n\t\n\tvar coverEyes = function coverEyes() {\n\t rightWing.classList.toggle('forward-up');\n\t leftWing.classList.toggle('forward-up');\n\t};\n\t\n\tvar longBreak = function longBreak() {\n\t owlGraphic.classList.toggle('wobble');\n\t leftWing.classList.toggle('flap-left');\n\t rightWing.classList.toggle('flap-right');\n\t rightFoot.classList.toggle('march');\n\t leftFoot.classList.toggle('march');\n\t};\n\t\n\tvar EYE_ANIMATIONS = [sideToSide, aroundLeft, coverEyes, upDown, aroundRight, blinkEyes, farFocus];\n\t\n\tvar EYE_ANIMATIONS_MESSAGES = ['Move your eyes from side to side', 'Move your eyes around to the left', 'Cover your eyes', 'Move your eyes up and down', 'Move your eyes around to the right', 'Open and close your eyes', 'Look out a window or far away object'];\n\t\n\tvar longBreakAnimationMessage = 'Get up and go for for a walk';\n\t\n\tvar playAnimation = function playAnimation() {\n\t EYE_ANIMATIONS[animationIndex]();\n\t};\n\t\n\tvar stopAnimation = function stopAnimation() {\n\t EYE_ANIMATIONS[animationIndex]();\n\t animationIndex = animationIndex === EYE_ANIMATIONS.length - 1 ? 0 : animationIndex + 1;\n\t};\n\t\n\tvar getAnimationMessage = function getAnimationMessage() {\n\t return EYE_ANIMATIONS_MESSAGES[animationIndex];\n\t};\n\t\n\tvar startStopLongBreakAnimation = function startStopLongBreakAnimation() {\n\t longBreak();\n\t};\n\t\n\t// public api\n\tvar animationControl = {\n\t playAnimation: playAnimation,\n\t stopAnimation: stopAnimation,\n\t getAnimationMessage: getAnimationMessage,\n\t startStopLongBreakAnimation: startStopLongBreakAnimation,\n\t longBreakAnimationMessage: longBreakAnimationMessage\n\t};\n\t\n\tinit();\n\t\n\texports.animationControl = animationControl;\n\n/***/ },\n/* 7 */\n/*!**************************!*\\\n !*** ./js/conversion.js ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar SECONDS_IN_MINUTE = 60;\n\t\n\tvar secondsToMinutes = function secondsToMinutes(val) {\n\t return val / SECONDS_IN_MINUTE;\n\t};\n\t\n\tvar minutesToSeconds = function minutesToSeconds(val) {\n\t return val * SECONDS_IN_MINUTE;\n\t};\n\t\n\tvar stringToBoolean = function stringToBoolean(val) {\n\t return val === 'true' ? true : false;\n\t};\n\t\n\tvar stringToInt = function stringToInt(val) {\n\t var result = parseInt(val, 10);\n\t if (!isNaN(result)) {\n\t return result;\n\t } else {\n\t throw new Error('Expected numeric integer setting');\n\t }\n\t};\n\t\n\tvar stringToFloat = function stringToFloat(val) {\n\t var result = parseFloat(val);\n\t if (!isNaN(result)) {\n\t return result;\n\t } else {\n\t throw new Error('Expected numeric float setting');\n\t }\n\t};\n\t\n\t// public api\n\tvar conversion = {\n\t secondsToMinutes: secondsToMinutes,\n\t minutesToSeconds: minutesToSeconds,\n\t stringToBoolean: stringToBoolean,\n\t stringToInt: stringToInt,\n\t stringToFloat: stringToFloat\n\t};\n\t\n\texports.conversion = conversion;\n\n/***/ },\n/* 8 */\n/*!*********************!*\\\n !*** ./js/index.js ***!\n \\*********************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _app = __webpack_require__(/*! ./app */ 2);\n\t\n\t__webpack_require__(/*! ../css/styles.scss */ 12);\n\t__webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tdocument.addEventListener('DOMContentLoaded', _app.app.start);\n\n/***/ },\n/* 9 */\n/*!*********************!*\\\n !*** ./js/modal.js ***!\n \\*********************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.modal = undefined;\n\t\n\tvar _controller = __webpack_require__(/*! ./controller */ 4);\n\t\n\tvar _persistence = __webpack_require__(/*! ./persistence */ 5);\n\t\n\tvar _owl = __webpack_require__(/*! ../images/owl.png */ 1);\n\t\n\tvar _owl2 = _interopRequireDefault(_owl);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar HAS_SEEN_INTRO_KEY = 'hasSeenIntro';\n\t\n\tvar modalEl = document.querySelector('#modal');\n\tvar modalOverlayEl = document.querySelector('#modalOverlay');\n\tvar modalCloseEl = document.querySelector('#modalClose');\n\tvar modalStartEl = document.querySelector('#modalStart');\n\tvar modalLogoEl = document.querySelector('#modalLogo');\n\t\n\tmodalLogoEl.src = _owl2.default;\n\tmodalCloseEl.addEventListener('click', function () {\n\t return close();\n\t});\n\tmodalStartEl.addEventListener('click', function () {\n\t return close();\n\t});\n\t\n\tvar show = function show() {\n\t if (!_hasSeenIntro()) {\n\t open();\n\t _persistence.persistence.save(HAS_SEEN_INTRO_KEY, true);\n\t } else {\n\t _controller.controller.update('introModalClosed');\n\t }\n\t};\n\t\n\tvar open = function open() {\n\t modalEl.classList.toggle('closed');\n\t modalOverlayEl.classList.toggle('closed');\n\t};\n\t\n\tvar close = function close() {\n\t modalEl.classList.toggle('closed');\n\t modalOverlayEl.classList.toggle('closed');\n\t _controller.controller.update('introModalClosed');\n\t};\n\t\n\tvar _hasSeenIntro = function _hasSeenIntro() {\n\t return _persistence.persistence.exists(HAS_SEEN_INTRO_KEY);\n\t};\n\t\n\t// public api\n\tvar modal = {\n\t show: show,\n\t open: open,\n\t close: close\n\t};\n\t\n\texports.modal = modal;\n\n/***/ },\n/* 10 */\n/*!************************!*\\\n !*** ./js/settings.js ***!\n \\************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.Settings = undefined;\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _persistence = __webpack_require__(/*! ./persistence */ 5);\n\t\n\tvar _conversion = __webpack_require__(/*! ./conversion */ 7);\n\t\n\tvar _validation = __webpack_require__(/*! ./validation */ 11);\n\t\n\tvar _controller = __webpack_require__(/*! ./controller */ 4);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar DEFAULT_SOUND_ENABLED = 'true';\n\tvar DEFAULT_CLOCK_OPACITY = '1';\n\tvar SETTINGS_HIDDEN_CLASS = 'settings-hidden';\n\t\n\tvar containerEl = document.querySelector('.settings-container');\n\tvar eyeExerciseIntervalEl = document.getElementsByName('eyeExerciseInterval')[0];\n\tvar longBreakIntervalEl = document.getElementsByName('longBreakInterval')[0];\n\tvar longBreakDurationEl = document.getElementsByName('longBreakDuration')[0];\n\tvar soundEnabledEl = document.getElementById('soundEnabled');\n\tvar clockOpacityEl = document.getElementById('clockOpacity');\n\tvar closeSettingsEl = document.getElementById('settingsClose');\n\tvar openSettingsEl = document.getElementById('settingsOpen');\n\tvar restoreSettingsEl = document.getElementById('restoreSettings');\n\t\n\tvar Settings = exports.Settings = function () {\n\t function Settings() {\n\t _classCallCheck(this, Settings);\n\t\n\t this._init();\n\t this._registerEvents();\n\t this._populateFields();\n\t }\n\t\n\t _createClass(Settings, [{\n\t key: '_init',\n\t value: function _init() {\n\t this._eyeExerciseDuration = (15);\n\t this._eyeExerciseInterval = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_eyeExerciseInterval', (900)));\n\t this._longBreakInterval = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_longBreakInterval', (3600)));\n\t this._longBreakDuration = _conversion.conversion.stringToInt(_persistence.persistence.retrieve('_longBreakDuration', (300)));\n\t this._soundEnabled = _conversion.conversion.stringToBoolean(_persistence.persistence.retrieve('_soundEnabled', DEFAULT_SOUND_ENABLED));\n\t this._clockOpacity = _conversion.conversion.stringToFloat(_persistence.persistence.retrieve('_clockOpacity', DEFAULT_CLOCK_OPACITY));\n\t }\n\t }, {\n\t key: '_registerEvents',\n\t value: function _registerEvents() {\n\t var _this = this;\n\t\n\t // numeric inputs\n\t eyeExerciseIntervalEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval');\n\t });\n\t eyeExerciseIntervalEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval', evt);\n\t });\n\t longBreakIntervalEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(longBreakIntervalEl, '_longBreakInterval');\n\t });\n\t longBreakIntervalEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(longBreakIntervalEl, '_longBreakInterval', evt);\n\t });\n\t longBreakDurationEl.addEventListener('blur', function () {\n\t return _this._numericChangeHandler(longBreakDurationEl, '_longBreakDuration');\n\t });\n\t longBreakDurationEl.addEventListener('keypress', function (evt) {\n\t return _this._keyPressHandler(longBreakDurationEl, '_longBreakDuration', evt);\n\t });\n\t // checkboxes\n\t soundEnabledEl.addEventListener('change', function () {\n\t return _this._booleanChangeHandler(soundEnabledEl, '_soundEnabled');\n\t });\n\t // ranges\n\t clockOpacityEl.addEventListener('input', function () {\n\t return _this._rangeChangeHandler(clockOpacityEl, '_clockOpacity');\n\t });\n\t // buttons\n\t closeSettingsEl.addEventListener('click', function () {\n\t return _this.close();\n\t });\n\t openSettingsEl.addEventListener('click', function () {\n\t return _this._open();\n\t });\n\t restoreSettingsEl.addEventListener('click', function (evt) {\n\t return _this._restore(evt);\n\t });\n\t }\n\t }, {\n\t key: '_populateFields',\n\t value: function _populateFields() {\n\t eyeExerciseIntervalEl.value = _conversion.conversion.secondsToMinutes(this._eyeExerciseInterval);\n\t longBreakIntervalEl.value = _conversion.conversion.secondsToMinutes(this._longBreakInterval);\n\t longBreakDurationEl.value = _conversion.conversion.secondsToMinutes(this._longBreakDuration);\n\t clockOpacity.value = this._clockOpacity;\n\t soundEnabledEl.checked = this._soundEnabled;\n\t }\n\t }, {\n\t key: '_numericChangeHandler',\n\t value: function _numericChangeHandler(element, property) {\n\t var isValid = true;\n\t var newVal = element.value;\n\t var currentVal = _conversion.conversion.secondsToMinutes(this[property]).toString();\n\t if (newVal !== currentVal) {\n\t if (_validation.validation.isValidNumber(newVal, parseInt(element.min, 10), parseInt(element.max, 10))) {\n\t this[property] = _conversion.conversion.minutesToSeconds(newVal);\n\t _persistence.persistence.save(property, this[property]);\n\t _validation.validation.markElementValid(element);\n\t _controller.controller.update(property);\n\t } else {\n\t isValid = false;\n\t _validation.validation.markElementInvalid(element);\n\t }\n\t } else {\n\t _validation.validation.clearMarkers(element);\n\t }\n\t return isValid;\n\t }\n\t }, {\n\t key: '_keyPressHandler',\n\t value: function _keyPressHandler(element, property, evt) {\n\t if (evt.keyCode === 13) {\n\t var isValid = this._numericChangeHandler(element, property);\n\t if (!isValid) {\n\t element.focus();\n\t } else {\n\t element.blur();\n\t }\n\t }\n\t }\n\t }, {\n\t key: '_booleanChangeHandler',\n\t value: function _booleanChangeHandler(element, property) {\n\t var newVal = element.checked;\n\t if (newVal !== this[property]) {\n\t this[property] = newVal;\n\t _persistence.persistence.save(property, this[property]);\n\t }\n\t }\n\t }, {\n\t key: '_rangeChangeHandler',\n\t value: function _rangeChangeHandler(element, property) {\n\t var newVal = element.value;\n\t _controller.controller.update(property, newVal);\n\t this[property] = newVal;\n\t _persistence.persistence.save(property, this[property]);\n\t }\n\t }, {\n\t key: 'close',\n\t value: function close() {\n\t if (!containerEl.classList.contains(SETTINGS_HIDDEN_CLASS)) {\n\t containerEl.classList.add(SETTINGS_HIDDEN_CLASS);\n\t }\n\t }\n\t }, {\n\t key: '_open',\n\t value: function _open() {\n\t containerEl.classList.remove(SETTINGS_HIDDEN_CLASS);\n\t }\n\t }, {\n\t key: '_restore',\n\t value: function _restore(evt) {\n\t evt.preventDefault();\n\t\n\t _persistence.persistence.removeAll();\n\t this._init();\n\t this._populateFields();\n\t\n\t _controller.controller.update('_eyeExerciseInterval', this._eyeExerciseInterval);\n\t _controller.controller.update('_clockOpacity', this._clockOpacity);\n\t }\n\t }, {\n\t key: 'eyeExerciseInterval',\n\t get: function get() {\n\t return this._eyeExerciseInterval;\n\t }\n\t }, {\n\t key: 'longBreakInterval',\n\t get: function get() {\n\t return this._longBreakInterval;\n\t }\n\t }, {\n\t key: 'eyeExerciseDuration',\n\t get: function get() {\n\t return this._eyeExerciseDuration;\n\t }\n\t }, {\n\t key: 'longBreakDuration',\n\t get: function get() {\n\t return this._longBreakDuration;\n\t }\n\t }, {\n\t key: 'soundEnabled',\n\t get: function get() {\n\t return this._soundEnabled;\n\t }\n\t }, {\n\t key: 'clockOpacity',\n\t get: function get() {\n\t return this._clockOpacity;\n\t }\n\t }]);\n\n\t return Settings;\n\t}();\n\n/***/ },\n/* 11 */\n/*!**************************!*\\\n !*** ./js/validation.js ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\tvar svgValidEl = document.querySelector('.check-svg');\n\tvar svgValidSize = svgValidEl.getClientRects()[0];\n\tvar SVG_VALID_MARK_WIDTH = svgValidSize.width;\n\tvar SVG_VALID_MARK_HALF_HEIGHT = svgValidSize.height / 2;\n\tvar SVG_VALID_MARK_WIDTH_ADJUSTMENT = 3;\n\tvar SVG_VALID_MARK_HEIGHT_ADJUSTMENT = 5;\n\t\n\tvar ERROR_CSS_CLASS = 'settings-input-error';\n\tvar VISIBLE_CSS_CLASS = 'visible';\n\t\n\tvar isValidNumber = function isValidNumber(val, min, max) {\n\t var isNumeric = /^(?:[1-9]\\d*|0)$/.test(val);\n\t var intVal = parseInt(val, 10);\n\t return isNumeric && intVal >= min && intVal <= max;\n\t};\n\t\n\tvar markElementInvalid = function markElementInvalid(element) {\n\t element.classList.add(ERROR_CSS_CLASS);\n\t};\n\t\n\tvar clearMarkers = function clearMarkers(element) {\n\t if (element.classList.contains(ERROR_CSS_CLASS)) {\n\t element.classList.remove(ERROR_CSS_CLASS);\n\t }\n\t};\n\t\n\tvar _positionValidMark = function _positionValidMark(element) {\n\t var inputWrapper = element.parentElement;\n\t var wrapperWidth = inputWrapper.clientWidth;\n\t var wrapperLeft = inputWrapper.offsetLeft;\n\t var wrapperHeight = inputWrapper.clientHeight;\n\t var wrapperTop = inputWrapper.offsetTop;\n\t var checkLeft = wrapperWidth + wrapperLeft - SVG_VALID_MARK_WIDTH + SVG_VALID_MARK_WIDTH_ADJUSTMENT;\n\t var checkTop = wrapperHeight + wrapperTop - SVG_VALID_MARK_HALF_HEIGHT + SVG_VALID_MARK_HEIGHT_ADJUSTMENT;\n\t svgValidEl.style.left = checkLeft + 'px';\n\t svgValidEl.style.top = checkTop + 'px';\n\t};\n\t\n\tvar _fadeValidMarkInOut = function _fadeValidMarkInOut() {\n\t if (svgValidEl.classList.contains(VISIBLE_CSS_CLASS)) {\n\t svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n\t }\n\t svgValidEl.classList.add(VISIBLE_CSS_CLASS);\n\t setTimeout(function () {\n\t svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n\t }, 2000);\n\t};\n\t\n\tvar markElementValid = function markElementValid(element) {\n\t clearMarkers(element);\n\t _positionValidMark(element);\n\t _fadeValidMarkInOut();\n\t};\n\t\n\t// public api\n\tvar validation = {\n\t isValidNumber: isValidNumber,\n\t markElementInvalid: markElementInvalid,\n\t markElementValid: markElementValid,\n\t clearMarkers: clearMarkers\n\t};\n\t\n\texports.validation = validation;\n\n/***/ },\n/* 12 */\n/*!*************************!*\\\n !*** ./css/styles.scss ***!\n \\*************************/\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 13 */\n/*!*************************!*\\\n !*** ./sounds/ding.mp3 ***!\n \\*************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__.p + \"b506a66a688dd0df4b191f1ff1611c45.mp3\";\n\n/***/ },\n/* 14 */\n/*!**************************!*\\\n !*** ./sounds/tweet.mp3 ***!\n \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__.p + \"9a62c3d1f3ca4b470bc4a446f5c9c9e1.mp3\";\n\n/***/ }\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// bundle-ef0d2fcfbfeb97467a99.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ef0d2fcfbfeb97467a99","module.exports = \"data:image/png;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./images/owl.png\n// module id = 1\n// module chunks = 0","import breakStartAudioFile from '../sounds/tweet.mp3';\nimport breakOverAudioFile from '../sounds/ding.mp3';\nimport owlImage from '../images/owl.png';\nimport {Settings} from './settings';\nimport {animationControl} from './animation-control';\nimport {clockContainer} from './clock-container';\nimport {modal} from './modal';\n\nconst DIM_CSS_CLASS = 'dim';\n\nlet settings = new Settings();\nclockContainer.updateOpacity(settings.clockOpacity);\n\nlet messageElement;\nlet audioBreakStartEl;\nlet audioBreakOverEl;\n\nlet owlSvg;\n\nlet clock;\nlet timeElapsed = 0;\n\nconst WORK_MESSAGE = 'Leave this running...';\n\nlet start = function() {\n findElements();\n modal.show();\n};\n\nlet startContinue = function() {\n requestPermission();\n};\n\nlet handleNotificationDenied = function() {\n dim();\n messageElement.innerHTML = 'Please allow notifications to use Eye Hoot.';\n}\n\nlet requestPermission = function() {\n if (window.Notification && Notification.permission !== 'denied') {\n Notification.requestPermission(function(status) {\n if (status === 'granted') {\n startWork();\n } else {\n handleNotificationDenied();\n }\n });\n } else {\n handleNotificationDenied();\n }\n};\n\nlet findElements = function() {\n messageElement = document.querySelector('.message');\n\n audioBreakOverEl = document.querySelector('.break-over');\n audioBreakOverEl.src = breakOverAudioFile;\n audioBreakStartEl = document.querySelector('.break-start');\n audioBreakStartEl.src = breakStartAudioFile;\n\n owlSvg = document.querySelector('.owl-svg');\n};\n\nlet updateMessage = function(message) {\n messageElement.innerHTML = message;\n};\n\nlet dim = function() {\n [owlSvg, messageElement].forEach(el => el.classList.add(DIM_CSS_CLASS));\n}\n\nlet brighten = function() {\n [owlSvg, messageElement].forEach(el => {\n if (el.classList.contains(DIM_CSS_CLASS)) {\n el.classList.remove(DIM_CSS_CLASS);\n }\n });\n}\n\nlet startAnimation = function() {\n brighten();\n animationControl.playAnimation();\n updateMessage(animationControl.getAnimationMessage());\n};\n\nlet stopAnimation = function() {\n animationControl.stopAnimation();\n};\n\nlet startLongBreakAnimation = function() {\n brighten();\n animationControl.startStopLongBreakAnimation();\n updateMessage(animationControl.longBreakAnimationMessage);\n};\n\nlet stopBreakAnimation = function() {\n animationControl.startStopLongBreakAnimation();\n};\n\nlet notify = function(message) {\n let n = new Notification('Eye Hoot', {\n body: message,\n icon: owlImage,\n requireInteraction: true\n });\n playSound(audioBreakStartEl);\n n.onclick = notificationClickedHandler.bind(n);\n};\n\nlet notificationClickedHandler = function() {\n window.focus();\n this.close();\n settings.close();\n if (timeElapsed < settings.longBreakInterval) {\n startAnimation();\n startAnimationClock(settings.eyeExerciseDuration);\n } else {\n startLongBreakAnimation();\n startAnimationClock(settings.longBreakDuration);\n }\n}\n\nlet playSound = function(element) {\n if (settings.soundEnabled) {\n element.play();\n }\n}\n\nlet startAnimationClock = function(interval) {\n clock = $('.clock').FlipClock(interval, {\n clockFace: 'MinuteCounter',\n countdown: true,\n callbacks: {\n stop: stopAnimationClockHandler\n }\n });\n}\n\nlet stopAnimationClockHandler = function() {\n if (timeElapsed < settings.longBreakInterval) {\n stopAnimation();\n timeElapsed = timeElapsed + settings.eyeExerciseDuration + settings.eyeExerciseInterval;\n console.debug(`stopClockHandler: timeElapsed = ${timeElapsed}`);\n } else {\n stopBreakAnimation();\n timeElapsed = 0;\n }\n playSound(audioBreakOverEl);\n startWork();\n}\n\nlet startWork = function() {\n updateMessage(WORK_MESSAGE);\n dim();\n startWorkClock();\n};\n\nlet startWorkClock = function() {\n if (clock) {\n clock.reset(); // clear old callbacks\n }\n clock = $('.clock').FlipClock(settings.eyeExerciseInterval, {\n clockFace: 'MinuteCounter',\n countdown: true,\n callbacks: {\n stop: stopWorkClockHandler\n }\n });\n}\n\nlet stopWorkClockHandler = function() {\n let notifyBody = timeElapsed < settings.longBreakInterval ?\n 'Time for a short break' : 'Time for a long break';\n notify(notifyBody);\n}\n\n// public api\nlet app = {\n start,\n startContinue,\n startWork\n};\n\nexport {app};\n\n\n\n// WEBPACK FOOTER //\n// ./js/app.js","const clockContainerEl = document.querySelector('.clock-container');\n\nlet updateOpacity = function(opacity) {\n clockContainerEl.style.opacity = opacity;\n}\n\n// public api\nlet clockContainer = {\n updateOpacity\n};\n\nexport {clockContainer};\n\n\n\n// WEBPACK FOOTER //\n// ./js/clock-container.js","import {app} from './app';\nimport {clockContainer} from './clock-container';\n\nlet update = function(key, val) {\n switch(key) {\n case 'introModalClosed':\n app.startContinue();\n break;\n case '_eyeExerciseInterval':\n app.startWork();\n break;\n case '_clockOpacity':\n clockContainer.updateOpacity(val);\n default:\n break;\n }\n}\n\n// public api\nlet controller = {\n update\n};\n\nexport {controller};\n\n\n\n// WEBPACK FOOTER //\n// ./js/controller.js","const APP_KEY = 'eyehoot';\n\nlet storageAvailable = function(type) {\n\ttry {\n\t\tvar storage = window[type],\n\t\t\tx = '__storage_test__';\n\t\tstorage.setItem(x, x);\n\t\tstorage.removeItem(x);\n\t\treturn true;\n\t}\n\tcatch(e) {\n\t\treturn false;\n\t}\n};\n\nlet localStorageAvailable = storageAvailable('localStorage');\n\nlet saveItem = function(key, value) {\n localStorage.setItem(`${APP_KEY}-${key}`, value);\n};\n\nlet save = function(key, value) {\n if (localStorageAvailable) {\n saveItem(key, value);\n }\n};\n\nlet retrieveItem = function(key) {\n return localStorage.getItem(`${APP_KEY}-${key}`);\n};\n\nlet retrieve = function(key, defaultVal) {\n if (localStorageAvailable) {\n let result = retrieveItem(key);\n return result == undefined ? defaultVal : result;\n } else {\n return defaultVal;\n }\n};\n\nlet removeAll = function() {\n if (localStorageAvailable) {\n localStorage.clear();\n }\n};\n\nlet exists = function(key) {\n let result = retrieveItem(key);\n return result == undefined ? false : true;\n};\n\n// public api\nlet persistence = {\n save,\n retrieve,\n removeAll,\n exists\n};\n\nexport {persistence};\n\n\n\n// WEBPACK FOOTER //\n// ./js/persistence.js","const windowSvg = document.querySelector('.window-svg');\nconst owlGraphic = document.querySelector('.owl-graphic');\nconst eyes = document.querySelector('.eyes');\nconst leftEyeShine = document.querySelector('.left-eye-shine');\nconst rightEyeShine = document.querySelector('.right-eye-shine');\nconst leftWing = document.querySelector('.left-wing');\nconst rightWing = document.querySelector('.right-wing');\nconst feet = document.querySelectorAll('.foot');\nconst leftFoot = document.querySelector('.left-foot');\nconst rightFoot = document.querySelector('.right-foot');\n\nlet animationIndex = 0;\n\nlet init = function() {\n if (typeof InstallTrigger !== 'undefined') {\n document.body.classList.add('ff');\n\n // owl-graphic: transform-origin: center bottom\n const owlGraphicBbox = owlGraphic.getBBox();\n const owlGraphicToX = owlGraphicBbox.x + (owlGraphicBbox.width / 2);\n const owlGraphicToY = owlGraphicBbox.y + owlGraphicBbox.height;\n owlGraphic.style['transform-origin'] = `${owlGraphicToX}px ${owlGraphicToY}px`;\n\n // eyes transform-origin: 50% 50%\n const eyesBbox = eyes.getBBox();\n const eyesToX = eyesBbox.x + (eyesBbox.width / 2);\n const eyesToY = eyesBbox.y + (eyesBbox.height / 2);\n eyes.style['transform-origin'] = `${eyesToX}px ${eyesToY}px`;\n\n // left-wing transform-origin: right top\n const leftWingBbox = leftWing.getBBox();\n const leftWingToX = leftWingBbox.x + leftWingBbox.width;\n const leftWingToY = leftWingBbox.y;\n leftWing.style['transform-origin'] = `${leftWingToX}px ${leftWingToY}px`;\n\n // right-wing transform-origin: left top\n const rightWingBbox = rightWing.getBBox();\n const rightWingToX = rightWingBbox.x;\n const rightWingToY = rightWingBbox.y;\n rightWing.style['transform-origin'] = `${rightWingToX}px ${rightWingToY}px`;\n\n // foot transform-origin: center top\n for (let i = 0; i < feet.length; i++) {\n let footEl = feet[i];\n let footBbox = footEl.getBBox();\n let footToX = footBbox.x + (footBbox.width / 2);\n let footToY = footBbox.y;\n footEl.style['transform-origin'] = `${footToX}px ${footToY}px`;\n }\n }\n}\n\nlet sideToSide = function() {\n eyes.classList.toggle('side-to-side');\n leftEyeShine.classList.toggle('side-to-side');\n rightEyeShine.classList.toggle('side-to-side');\n};\n\nlet upDown = function() {\n eyes.classList.toggle('up-down');\n leftEyeShine.classList.toggle('up-down');\n rightEyeShine.classList.toggle('up-down');\n};\n\nlet aroundRight = function() {\n eyes.classList.toggle('around-right');\n leftEyeShine.classList.toggle('around-right');\n rightEyeShine.classList.toggle('around-right');\n};\n\nlet aroundLeft = function() {\n eyes.classList.toggle('around-left');\n leftEyeShine.classList.toggle('around-left');\n rightEyeShine.classList.toggle('around-left');\n}\n\nlet blinkEyes = function() {\n eyes.classList.toggle('blink');\n};\n\nlet farFocus = function() {\n windowSvg.classList.toggle('window-visible');\n}\n\nlet coverEyes = function() {\n rightWing.classList.toggle('forward-up');\n leftWing.classList.toggle('forward-up');\n}\n\nlet longBreak = function() {\n owlGraphic.classList.toggle('wobble');\n leftWing.classList.toggle('flap-left');\n rightWing.classList.toggle('flap-right');\n rightFoot.classList.toggle('march');\n leftFoot.classList.toggle('march');\n}\n\nlet EYE_ANIMATIONS = [\n sideToSide,\n aroundLeft,\n coverEyes,\n upDown,\n aroundRight,\n blinkEyes,\n farFocus\n];\n\nlet EYE_ANIMATIONS_MESSAGES = [\n 'Move your eyes from side to side',\n 'Move your eyes around to the left',\n 'Cover your eyes',\n 'Move your eyes up and down',\n 'Move your eyes around to the right',\n 'Open and close your eyes',\n 'Look out a window or far away object'\n];\n\nconst longBreakAnimationMessage = 'Get up and go for for a walk';\n\nlet playAnimation = function() {\n EYE_ANIMATIONS[animationIndex]();\n}\n\nlet stopAnimation = function() {\n EYE_ANIMATIONS[animationIndex]();\n animationIndex = (animationIndex === EYE_ANIMATIONS.length - 1) ? 0 : animationIndex + 1;\n}\n\nlet getAnimationMessage = function() {\n return EYE_ANIMATIONS_MESSAGES[animationIndex];\n}\n\nlet startStopLongBreakAnimation = function() {\n longBreak();\n}\n\n// public api\nlet animationControl = {\n playAnimation,\n stopAnimation,\n getAnimationMessage,\n startStopLongBreakAnimation,\n longBreakAnimationMessage\n};\n\ninit();\n\nexport {animationControl};\n\n\n\n// WEBPACK FOOTER //\n// ./js/animation-control.js","const SECONDS_IN_MINUTE = 60;\n\nlet secondsToMinutes = function(val) {\n return val / SECONDS_IN_MINUTE;\n}\n\nlet minutesToSeconds = function(val) {\n return val * SECONDS_IN_MINUTE;\n}\n\nlet stringToBoolean = function(val) {\n return val === 'true' ? true : false;\n}\n\nlet stringToInt = function(val) {\n let result = parseInt(val, 10);\n if (!isNaN(result)) {\n return result;\n } else {\n throw new Error('Expected numeric integer setting');\n }\n}\n\nlet stringToFloat = function(val) {\n let result = parseFloat(val);\n if (!isNaN(result)) {\n return result;\n } else {\n throw new Error('Expected numeric float setting');\n }\n}\n\n// public api\nlet conversion = {\n secondsToMinutes,\n minutesToSeconds,\n stringToBoolean,\n stringToInt,\n stringToFloat\n};\n\nexport {conversion};\n\n\n\n// WEBPACK FOOTER //\n// ./js/conversion.js","require('../css/styles.scss');\nrequire('../images/owl.png');\n\nimport {app} from './app';\n\ndocument.addEventListener('DOMContentLoaded', app.start);\n\n\n\n// WEBPACK FOOTER //\n// ./js/index.js","import {controller} from './controller';\nimport {persistence} from './persistence';\nimport owlImage from '../images/owl.png';\n\nconst HAS_SEEN_INTRO_KEY = 'hasSeenIntro';\n\nconst modalEl = document.querySelector('#modal');\nconst modalOverlayEl = document.querySelector('#modalOverlay');\nconst modalCloseEl = document.querySelector('#modalClose');\nconst modalStartEl = document.querySelector('#modalStart');\nconst modalLogoEl = document.querySelector('#modalLogo');\n\nmodalLogoEl.src = owlImage;\nmodalCloseEl.addEventListener('click', () => close());\nmodalStartEl.addEventListener('click', () => close());\n\nlet show = function() {\n if (!_hasSeenIntro()) {\n open();\n persistence.save(HAS_SEEN_INTRO_KEY, true);\n } else {\n controller.update('introModalClosed');\n }\n};\n\nlet open = function() {\n modalEl.classList.toggle('closed');\n modalOverlayEl.classList.toggle('closed');\n};\n\nlet close = function() {\n modalEl.classList.toggle('closed');\n modalOverlayEl.classList.toggle('closed');\n controller.update('introModalClosed');\n};\n\nlet _hasSeenIntro = function() {\n return persistence.exists(HAS_SEEN_INTRO_KEY);\n};\n\n// public api\nlet modal = {\n show,\n open,\n close\n};\n\nexport {modal};\n\n\n\n// WEBPACK FOOTER //\n// ./js/modal.js","import {persistence} from './persistence';\nimport {conversion} from './conversion';\nimport {validation} from './validation';\nimport {controller} from './controller';\n\nconst DEFAULT_SOUND_ENABLED = 'true';\nconst DEFAULT_CLOCK_OPACITY = '1';\nconst SETTINGS_HIDDEN_CLASS = 'settings-hidden';\n\nconst containerEl = document.querySelector('.settings-container');\nconst eyeExerciseIntervalEl = document.getElementsByName('eyeExerciseInterval')[0];\nconst longBreakIntervalEl = document.getElementsByName('longBreakInterval')[0];\nconst longBreakDurationEl = document.getElementsByName('longBreakDuration')[0];\nconst soundEnabledEl = document.getElementById('soundEnabled');\nconst clockOpacityEl = document.getElementById('clockOpacity');\nconst closeSettingsEl = document.getElementById('settingsClose');\nconst openSettingsEl = document.getElementById('settingsOpen');\nconst restoreSettingsEl = document.getElementById('restoreSettings');\n\nexport class Settings {\n constructor() {\n this._init();\n this._registerEvents();\n this._populateFields();\n }\n\n _init() {\n this._eyeExerciseDuration = DEFAULT_EYE_EXERCISE_DURATION;\n this._eyeExerciseInterval = conversion.stringToInt(persistence.retrieve('_eyeExerciseInterval', DEFAULT_EYE_EXERCISE_INTERVAL));\n this._longBreakInterval = conversion.stringToInt(persistence.retrieve('_longBreakInterval', DEFAULT_LONG_BREAK_INTERVAL));\n this._longBreakDuration = conversion.stringToInt(persistence.retrieve('_longBreakDuration', DEFAULT_LONG_BREAK_DURATION));\n this._soundEnabled = conversion.stringToBoolean(persistence.retrieve('_soundEnabled', DEFAULT_SOUND_ENABLED));\n this._clockOpacity = conversion.stringToFloat(persistence.retrieve('_clockOpacity', DEFAULT_CLOCK_OPACITY));\n }\n\n _registerEvents() {\n // numeric inputs\n eyeExerciseIntervalEl.addEventListener('blur', () => this._numericChangeHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval'));\n eyeExerciseIntervalEl.addEventListener('keypress', (evt) => this._keyPressHandler(eyeExerciseIntervalEl, '_eyeExerciseInterval', evt));\n longBreakIntervalEl.addEventListener('blur', () => this._numericChangeHandler(longBreakIntervalEl, '_longBreakInterval'));\n longBreakIntervalEl.addEventListener('keypress', (evt) => this._keyPressHandler(longBreakIntervalEl, '_longBreakInterval', evt));\n longBreakDurationEl.addEventListener('blur', () => this._numericChangeHandler(longBreakDurationEl, '_longBreakDuration'));\n longBreakDurationEl.addEventListener('keypress', (evt) => this._keyPressHandler(longBreakDurationEl, '_longBreakDuration', evt));\n // checkboxes\n soundEnabledEl.addEventListener('change', () => this._booleanChangeHandler(soundEnabledEl, '_soundEnabled'));\n // ranges\n clockOpacityEl.addEventListener('input', () => this._rangeChangeHandler(clockOpacityEl, '_clockOpacity'))\n // buttons\n closeSettingsEl.addEventListener('click', () => this.close());\n openSettingsEl.addEventListener('click', () => this._open());\n restoreSettingsEl.addEventListener('click', (evt) => this._restore(evt));\n }\n\n _populateFields() {\n eyeExerciseIntervalEl.value = conversion.secondsToMinutes(this._eyeExerciseInterval);\n longBreakIntervalEl.value = conversion.secondsToMinutes(this._longBreakInterval);\n longBreakDurationEl.value = conversion.secondsToMinutes(this._longBreakDuration);\n clockOpacity.value = this._clockOpacity;\n soundEnabledEl.checked = this._soundEnabled;\n }\n\n _numericChangeHandler(element, property) {\n let isValid = true;\n let newVal = element.value;\n let currentVal = conversion.secondsToMinutes(this[property]).toString();\n if (newVal !== currentVal) {\n if (validation.isValidNumber(newVal, parseInt(element.min, 10), parseInt(element.max, 10))) {\n this[property] = conversion.minutesToSeconds(newVal);\n persistence.save(property, this[property]);\n validation.markElementValid(element);\n controller.update(property);\n } else {\n isValid = false;\n validation.markElementInvalid(element);\n }\n } else {\n validation.clearMarkers(element);\n }\n return isValid;\n }\n\n _keyPressHandler(element, property, evt) {\n if (evt.keyCode === 13) {\n let isValid = this._numericChangeHandler(element, property);\n if (!isValid) {\n element.focus();\n } else {\n element.blur();\n }\n }\n }\n\n _booleanChangeHandler(element, property) {\n let newVal = element.checked;\n if (newVal !== this[property]) {\n this[property] = newVal;\n persistence.save(property, this[property]);\n }\n }\n\n\n _rangeChangeHandler(element, property) {\n let newVal = element.value;\n controller.update(property, newVal);\n this[property] = newVal;\n persistence.save(property, this[property]);\n }\n\n close() {\n if (!containerEl.classList.contains(SETTINGS_HIDDEN_CLASS)) {\n containerEl.classList.add(SETTINGS_HIDDEN_CLASS);\n }\n }\n\n _open() {\n containerEl.classList.remove(SETTINGS_HIDDEN_CLASS);\n }\n\n _restore(evt) {\n evt.preventDefault();\n \n persistence.removeAll();\n this._init();\n this._populateFields();\n\n controller.update('_eyeExerciseInterval', this._eyeExerciseInterval);\n controller.update('_clockOpacity', this._clockOpacity);\n }\n\n get eyeExerciseInterval() {\n return this._eyeExerciseInterval;\n }\n\n get longBreakInterval() {\n return this._longBreakInterval;\n }\n\n get eyeExerciseDuration() {\n return this._eyeExerciseDuration;\n }\n\n get longBreakDuration() {\n return this._longBreakDuration;\n }\n\n get soundEnabled() {\n return this._soundEnabled;\n }\n\n get clockOpacity() {\n return this._clockOpacity;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./js/settings.js","const svgValidEl = document.querySelector('.check-svg');\nconst svgValidSize = svgValidEl.getClientRects()[0];\nconst SVG_VALID_MARK_WIDTH = svgValidSize.width;\nconst SVG_VALID_MARK_HALF_HEIGHT = svgValidSize.height / 2;\nconst SVG_VALID_MARK_WIDTH_ADJUSTMENT = 3;\nconst SVG_VALID_MARK_HEIGHT_ADJUSTMENT = 5;\n\nconst ERROR_CSS_CLASS = 'settings-input-error';\nconst VISIBLE_CSS_CLASS = 'visible';\n\nlet isValidNumber = function(val, min, max) {\n let isNumeric = /^(?:[1-9]\\d*|0)$/.test(val);\n let intVal = parseInt(val, 10);\n return isNumeric && (intVal >= min) && (intVal <= max);\n}\n\nlet markElementInvalid = function(element) {\n element.classList.add(ERROR_CSS_CLASS);\n}\n\nlet clearMarkers = function(element) {\n if (element.classList.contains(ERROR_CSS_CLASS)) {\n element.classList.remove(ERROR_CSS_CLASS);\n }\n}\n\nlet _positionValidMark = function(element) {\n let inputWrapper = element.parentElement;\n let wrapperWidth = inputWrapper.clientWidth;\n let wrapperLeft = inputWrapper.offsetLeft;\n let wrapperHeight = inputWrapper.clientHeight;\n let wrapperTop = inputWrapper.offsetTop;\n let checkLeft = wrapperWidth + wrapperLeft - SVG_VALID_MARK_WIDTH + SVG_VALID_MARK_WIDTH_ADJUSTMENT;\n let checkTop = wrapperHeight + wrapperTop - SVG_VALID_MARK_HALF_HEIGHT + SVG_VALID_MARK_HEIGHT_ADJUSTMENT;\n svgValidEl.style.left = `${checkLeft}px`;\n svgValidEl.style.top = `${checkTop}px`;\n}\n\nlet _fadeValidMarkInOut = function() {\n if (svgValidEl.classList.contains(VISIBLE_CSS_CLASS)) {\n svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n }\n svgValidEl.classList.add(VISIBLE_CSS_CLASS);\n setTimeout(() => {\n svgValidEl.classList.remove(VISIBLE_CSS_CLASS);\n }, 2000);\n}\n\nlet markElementValid = function(element) {\n clearMarkers(element);\n _positionValidMark(element);\n _fadeValidMarkInOut();\n}\n\n// public api\nlet validation = {\n isValidNumber,\n markElementInvalid,\n markElementValid,\n clearMarkers\n};\n\nexport {validation};\n\n\n\n// WEBPACK FOOTER //\n// ./js/validation.js","module.exports = __webpack_public_path__ + \"b506a66a688dd0df4b191f1ff1611c45.mp3\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sounds/ding.mp3\n// module id = 13\n// module chunks = 0","module.exports = __webpack_public_path__ + \"9a62c3d1f3ca4b470bc4a446f5c9c9e1.mp3\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sounds/tweet.mp3\n// module id = 14\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 7489c4c..57d6bef 100644 --- a/docs/index.html +++ b/docs/index.html @@ -25,7 +25,7 @@ - + @@ -304,5 +304,5 @@

Welcome to Eye Hoot

- + diff --git a/docs/styles-ef0d2fcfbfeb97467a99.css b/docs/styles-ae174a5634dc33a81f45.css similarity index 99% rename from docs/styles-ef0d2fcfbfeb97467a99.css rename to docs/styles-ae174a5634dc33a81f45.css index e612d23..7bc2fde 100644 --- a/docs/styles-ef0d2fcfbfeb97467a99.css +++ b/docs/styles-ae174a5634dc33a81f45.css @@ -1,2 +1,2 @@ a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}.clock-container{transform:scale(.75);position:absolute;top:0;left:-25px;opacity:1}.flip-clock-wrapper{margin:0}.flip-clock-divider .flip-clock-label{display:none}.icon{display:inline-block;width:1em;height:1em;vertical-align:middle;stroke-width:0;stroke:currentColor;fill:currentColor}.icon-button{margin-right:1px;margin-bottom:4px}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.9);z-index:4}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:800px;max-width:100%;height:500px;max-height:100%;background-color:#3a3a3a;color:#888;border:1px solid #333;border-radius:4px;box-shadow:0 5px 15px rgba(0,0,0,.5);z-index:5}.modal-header{padding:30px 0;background-color:#333}.modal-title{margin-left:15px;color:#eee;font-size:3rem}.modal-body{position:absolute;top:40;left:0;width:100%;height:100%;padding:20px 50px 20px 20px;overflow:auto;font-size:2rem}.modal-section{margin-bottom:15px}.text-wrap{float:left;margin-right:15px}.modal-actions{margin-top:40px;text-align:center}.modal-start-button{border-radius:5px;border:1px solid #404040;color:#ccc;background:#000;font-size:1em;padding:8px;cursor:pointer;transition:background-color .25s ease,color .25s ease}.modal-start-button:hover{color:brighten(#ccc,25%);background-color:#121212}.accent-button{background-color:#399599}.accent-button:hover{background-color:#2b7174}.modal-close{position:absolute;top:10px;right:10px;border-radius:50%;border:1px solid #404040;color:#ccc;background:#000;font-size:1.1em;padding:5px 8px;cursor:pointer;transition:background-color .25s ease,color .25s ease;z-index:3}.modal-close:hover{color:brighten(#ccc,25%);background-color:#121212}.closed{display:none}@keyframes to-wobble{0%{transform:rotate(0)}to{transform:rotate(-2deg)}}@keyframes wobble{0%{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes to-side{0%{transform:translateX(0)}to{transform:translateX(-10%)}}@keyframes side-to-side{0%{transform:translateX(-10%)}to{transform:translateX(10%)}}@keyframes to-side-small{0%{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes side-to-side-small{0%{transform:translateX(-100%)}to{transform:translateX(60%)}}@keyframes to-up{0%{transform:translateY(0)}to{transform:translateY(-50%)}}@keyframes up-down{0%{transform:translateY(-50%)}to{transform:translateY(50%)}}@keyframes to-up-small{0%{transform:translateY(0)}to{transform:translateY(-70%)}}@keyframes up-down-small{0%{transform:translateY(-70%)}to{transform:translateY(70%)}}@keyframes rot-right{0%{transform:rotate(0deg) translate(-5%) rotate(0deg)}to{transform:rotate(1turn) translate(-5%) rotate(-1turn)}}@keyframes rot-left{0%{transform:rotate(1turn) translate(-5%) rotate(-1turn)}to{transform:rotate(0deg) translate(-5%) rotate(0deg)}}@keyframes rot-small-right{0%{transform:rotate(0deg) translate(-30%) rotate(0deg)}to{transform:rotate(1turn) translate(-30%) rotate(-1turn)}}@keyframes rot-small-left{0%{transform:rotate(1turn) translate(-30%) rotate(-1turn)}to{transform:rotate(0deg) translate(-30%) rotate(0deg)}}@keyframes flap-left{0%{transform:rotate(0deg)}to{transform:rotate(25deg)}}@keyframes flap-right{0%{transform:rotate(0deg)}to{transform:rotate(-25deg)}}@keyframes march{0%{transform:rotateX(0deg)}to{transform:rotateX(60deg)}}@keyframes shrink{0%{transform:scaleY(1)}to{transform:scaleY(.1)}}@keyframes ff-to-side{0%{transform:translateX(0)}to{transform:translateX(-3%)}}@keyframes ff-side-to-side{0%{transform:translateX(-3%)}to{transform:translateX(3%)}}@keyframes ff-to-side-small{0%{transform:translateX(0)}to{transform:translateX(-1%)}}@keyframes ff-side-to-side-small{0%{transform:translateX(-1%)}to{transform:translateX(1%)}}@keyframes ff-to-up{0%{transform:translateY(0)}to{transform:translateY(-4%)}}@keyframes ff-up-down{0%{transform:translateY(-4%)}to{transform:translateY(4%)}}@keyframes ff-to-up-small{0%{transform:translateY(0)}to{transform:translateY(-1%)}}@keyframes ff-up-down-small{0%{transform:translateY(-1%)}to{transform:translateY(1%)}}@keyframes ff-rot-right{0%{transform:rotate(0deg) translate(-3%) rotate(0deg)}to{transform:rotate(1turn) translate(-3%) rotate(-1turn)}}@keyframes ff-rot-left{0%{transform:rotate(1turn) translate(-3%) rotate(-1turn)}to{transform:rotate(0deg) translate(-3%) rotate(0deg)}}@keyframes ff-rot-small-right{0%{transform:rotate(0deg) translate(-.5%) rotate(0deg)}to{transform:rotate(1turn) translate(-.5%) rotate(-1turn)}}@keyframes ff-rot-small-left{0%{transform:rotate(1turn) translate(-.5%) rotate(-1turn)}to{transform:rotate(0deg) translate(-.5%) rotate(0deg)}}.owl-wrapper{width:100%;height:100%;position:relative}.owl-svg{opacity:1}.owl-svg,.window-svg{width:calc(100% - 60px);max-height:calc(100% - 60px);position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);transition:opacity 1s linear,filter 1s linear}.window-svg{opacity:0}.window-visible{opacity:.9}.owl-container{perspective:100px;transform:translateX(70px)}.owl-graphic{transform-origin:center bottom}.iris,.owl-body{fill:#01bdc8}.eye-shine,.sclera,.stomach{fill:#fbfcfc}.nose{fill:#ea9f4b}.eye-liner,.foot,.wing{fill:#967643}.pupil{fill:#000505}.owl-graphic.wobble{animation:to-wobble .5s ease,wobble .75s linear .5s alternate infinite}.eyes.side-to-side{animation:to-side .5s ease,side-to-side 1s ease .5s alternate infinite}.left-eye-shine.side-to-side,.right-eye-shine.side-to-side{animation:to-side-small .5s ease,side-to-side-small 1s ease .5s alternate infinite}.eyes.up-down{animation:to-up .5s ease,up-down 1s ease .5s alternate infinite}.left-eye-shine.up-down,.right-eye-shine.up-down{animation:to-up-small .5s ease,up-down-small 1s ease .5s alternate infinite}.eyes.around-right{animation:rot-right 2s linear 0s normal infinite}.eyes.around-left{animation:rot-left 2s linear 0s normal infinite}.left-eye-shine.around-right,.right-eye-shine.around-right{animation:rot-small-right 2s linear 0s normal infinite}.left-eye-shine.around-left,.right-eye-shine.around-left{animation:rot-small-left 2s linear 0s normal infinite}.eyes.blink{transform-origin:50%;animation:shrink .5s ease 0s alternate infinite}.wing{transform:rotate(0) rotateX(0);transition:transform 1s ease}.left-wing{transform-origin:right top}.left-wing.flap-left{animation:flap-left .5s cubic-bezier(.215,.61,.355,1) 0s alternate infinite}.right-wing{transform-origin:left top}.right-wing.flap-right{animation:flap-right .5s cubic-bezier(.215,.61,.355,1) 0s alternate infinite}.right-wing.forward-up{transform:rotate(-71deg) rotateX(160deg)}.left-wing.forward-up{transform:rotate(66deg) rotateX(160deg)}.foot{transform-origin:center top}.right-foot.march{animation:march .75s ease 0s alternate infinite}.left-foot.march{animation:march .75s ease .75s alternate infinite}.ff .eyes.side-to-side{animation:ff-to-side .5s ease,ff-side-to-side 1s ease .5s alternate infinite}.ff .left-eye-shine.side-to-side,.ff .right-eye-shine.side-to-side{animation:ff-to-side-small .5s ease,ff-side-to-side-small 1s ease .5s alternate infinite}.ff .eyes.up-down{animation:ff-to-up .5s ease,ff-up-down 1s ease .5s alternate infinite}.ff .left-eye-shine.up-down,.ff .right-eye-shine.up-down{animation:ff-to-up-small .5s ease,ff-up-down-small 1s ease .5s alternate infinite}.ff .eyes.around-right{animation:ff-rot-right 2s linear 0s normal infinite}.ff .eyes.around-left{animation:ff-rot-left 2s linear 0s normal infinite}.ff .left-eye-shine.around-right,.ff .right-eye-shine.around-right{animation:ff-rot-small-right 2s linear 0s normal infinite}.ff .left-eye-shine.around-left,.ff .right-eye-shine.around-left{animation:ff-rot-small-left 2s linear 0s normal infinite}input[type=range]::-moz-range-track{height:5px;background:#ddd;border:none;border-radius:3px}input[type=range]:focus::-moz-range-track{background:#ccc}input[type=checkbox],input[type=range]{cursor:pointer}.settings-open{position:absolute;top:15px;right:15px}.settings-open-button{border-radius:5px;border:1px solid #404040;color:#ccc;background:#000;font-size:1.3em;padding:12px;cursor:pointer;transition:background-color .25s ease,color .25s ease}.settings-open-button:hover{color:brighten(#ccc,25%);background-color:#121212}.settings-restore-button{float:right;margin-right:20px;border-radius:5px;border:1px solid #404040;color:#ccc;background:#000;font-size:1em;padding:10px;cursor:pointer;transition:background-color .25s ease,color .25s ease}.settings-restore-button:hover{color:brighten(#ccc,25%);background-color:#121212}.settings-container{position:absolute;top:0;right:0;height:100%;width:330px;padding:10px;z-index:2;color:#ccc;background-color:#000;border-right:1px solid #404040;transition:transform .5s ease}.check-svg{position:absolute;transform:scale(.3);top:0;left:0;opacity:0;transition:opacity 2s ease}.settings-hidden{transform:translateX(330px)}.settings-title{position:absolute;top:15px;left:10px;font-size:1.1em;color:#ccc;text-transform:uppercase;letter-spacing:1.5px}.settings-close{position:absolute;top:10px;right:10px}.settings-close-button{border-radius:50%;border:1px solid #404040;color:#ccc;background:#000;font-size:.7em;padding:5px 8px;cursor:pointer;transition:background-color .25s ease,color .25s ease}.settings-close-button:hover{color:brighten(#ccc,25%);background-color:#121212}.settings-form{position:relative;margin-top:40px;padding-top:10px;border-top:1px solid #404040}.settings-control{margin-bottom:15px}.settings-input-wrapper,.settings-label{display:inline-block}.settings-label{width:75%;font-size:1.1em}.settings-label-small{width:50%}.settings-input-wrapper{width:15%;margin-left:2%}.settings-input-range-wrapper{width:40%}.settings-input-checkbox-wrapper{margin-left:7%}.settings-button-wrapper{width:100%;margin-top:25px}.settings-input{width:100%;padding:5px;font-size:1em;border-radius:3px;border:1px solid #404040;color:#ccc;background:#000;transition:border-color .5s ease}.settings-input-error{border-color:#b30000}.settings-help{font-size:.9em;color:#bfbfbf}.settings-spacer{margin:30px 0;border-bottom:1px solid #404040}.settings-spacer-small{margin-bottom:10px}.settings-about{display:flex;position:absolute;bottom:20px;right:30px}.settings-link{text-decoration:none;color:#b3b3b3}.settings-link-label{margin-top:8px;margin-left:8px}.settings-octicon{fill:#b3b3b3}.visible{opacity:1}*,:after,:before{box-sizing:border-box}body,html{height:100%}body{background:#1a1a1a;font-family:HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-weight:300;color:#f2f2f2;overflow:hidden}:focus{outline-color:transparent;outline-style:none}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.message{margin-top:.9em;font-size:4em;text-align:center;opacity:1;filter:grayscale(0);transition:opacity 1s linear,filter 1s linear}.dim{opacity:.5;filter:grayscale(75%)} -/*# sourceMappingURL=styles-ef0d2fcfbfeb97467a99.css.map*/ \ No newline at end of file +/*# sourceMappingURL=styles-ae174a5634dc33a81f45.css.map*/ \ No newline at end of file diff --git a/docs/styles-ef0d2fcfbfeb97467a99.css.map b/docs/styles-ae174a5634dc33a81f45.css.map similarity index 99% rename from docs/styles-ef0d2fcfbfeb97467a99.css.map rename to docs/styles-ae174a5634dc33a81f45.css.map index 65ffb17..b634c74 100644 --- a/docs/styles-ef0d2fcfbfeb97467a99.css.map +++ b/docs/styles-ae174a5634dc33a81f45.css.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack:///css/css/_reset.scss","webpack:///webpack:///css/css/_flipclock-overrides.scss","webpack:///webpack:///css/css/_icon.scss","webpack:///webpack:///css/css/_modal.scss","webpack:///webpack:///css/css/_vars.scss","webpack:///webpack:///css/css/_mixins.scss","webpack:///webpack:///css/css/_animation.scss","webpack:///webpack:///css/css/_ff-animation.scss","webpack:///webpack:///css/css/_owl.scss","webpack:///webpack:///css/css/_range.scss","webpack:///webpack:///css/css/_settings.scss","webpack:///webpack:///css/css/_app.scss"],"names":[],"mappings":"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","file":"styles-ef0d2fcfbfeb97467a99.css","sourcesContent":["/* http://meyerweb.com/eric/tools/css/reset/ \n v2.0 | 20110126\n License: none (public domain)\n*/\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_reset.scss",".clock-container {\n transform: scale(0.75);\n position: absolute;\n top: 0;\n left: -25px;\n opacity: 1;\n}\n\n.flip-clock-wrapper {\n margin: 0;\n}\n\n.flip-clock-divider .flip-clock-label {\n display: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_flipclock-overrides.scss",".icon {\n display: inline-block;\n width: 1em;\n height: 1em;\n vertical-align: middle;\n stroke-width: 0;\n stroke: currentColor;\n fill: currentColor;\n}\n\n// adjustments needed to make iconmoon svg icons align with text in buttons\n.icon-button {\n margin-right: 1px;\n margin-bottom: 4px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_icon.scss","// https://css-tricks.com/considerations-styling-modal/\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba($settings-background, .9);\n z-index: z(\"modalOverlay\");\n}\n\n.modal {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n width: 800px;\n max-width: 100%;\n height: 500px;\n max-height: 100%;\n\n background-color: $modal-body-background;\n color: $modal-color;\n border: 1px solid $modal-header-background;\n border-radius: 4px;\n\n box-shadow: 0 5px 15px rgba(0,0,0,.5);\n\n z-index: z(\"modal\");\n}\n\n.modal-header {\n padding: 30px 0;\n background-color: $modal-header-background;\n}\n\n.modal-title {\n margin-left: 15px;\n color: $modal-title;\n font-size: 3rem;\n}\n\n.modal-body {\n /* cover the modal */\n position: absolute;\n top: 40;\n left: 0;\n width: 100%;\n height: 100%;\n\n /* spacing as needed */\n padding: 20px 50px 20px 20px;\n\n /* let it scroll */\n overflow: auto;\n\n font-size: 2rem;\n}\n\n.modal-section {\n margin-bottom: 15px;\n}\n\n.text-wrap {\n float: left;\n margin-right: 15px;\n}\n\n.modal-actions {\n margin-top: 40px;\n text-align: center;\n}\n\n.modal-start-button {\n @include settings-button();\n}\n\n.accent-button {\n background-color: $modal-accent;\n &:hover {\n background-color: darken($modal-accent, 10%);\n }\n}\n\n.modal-close {\n position: absolute;\n cursor: pointer;\n top: 10px;\n right: 10px;\n @include settings-button(1.1em, 5px 8px, 50%);\n z-index: z(\"modalClose\");\n}\n\n.closed {\n display: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_modal.scss","$app-background: darken(#333333, 10%);\n$app-color: darken(#fff, 5%);\n$app-font-stack: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n\n$modal-header-background: #333;\n$modal-title: #eee;\n$modal-color: #888;\n$modal-body-background: #3a3a3a;\n$modal-accent: #399599;\n\n$settings-width: 330px;\n$settings-color: darken($app-color, 15%);\n$settings-help-color: darken($app-color, 20%);\n$settings-link-color: darken($app-color, 25%);\n$settings-background: darken($app-background, 15%);\n$settings-input-background: darken($app-background, 10%);\n$settings-border: lighten($app-background, 15%);\n$settings-error: darken(red, 15%);\n\n$owl-main-color: #01bdc8;\n$owl-background-color: #fbfcfc;\n$owl-accent-color: #ea9f4b;\n$owl-extremities-color: #967643;\n$owl-dark-color: #000505;\n\n$z-layers: (\n \"sidebar\": 2,\n \"modalClose\": 3,\n \"modalOverlay\": 4,\n \"modal\": 5\n);\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_vars.scss","// http://stackoverflow.com/questions/9622354/make-a-div-center-of-viewport-horizontally-and-vertically/34084294#34084294\n@mixin center-position() {\n width: calc(100% - 60px);\n max-height: calc(100% - 60px);\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n@mixin settings-button($fontSize: 1em, $padding: 8px, $borderRadius: 5px) {\n border-radius: $borderRadius;\n border: 1px solid $settings-border;\n color: $settings-color;\n background: $settings-input-background;\n font-size: $fontSize;\n padding: $padding;\n cursor: pointer;\n transition: background-color 0.25s ease, color 0.25s ease;\n &:hover {\n color: brighten($settings-color, 25%);\n background-color: lighten($settings-input-background, 7%);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_mixins.scss","@keyframes to-wobble {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(-2deg);\n }\n}\n\n@keyframes wobble {\n 0% {\n transform: rotate(-2deg);\n }\n 100% {\n transform: rotate(2deg);\n }\n}\n\n@keyframes to-side {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-10%);\n }\n}\n\n@keyframes side-to-side {\n 0% {\n transform: translateX(-10%);\n }\n 100% {\n transform: translateX(10%);\n }\n}\n\n@keyframes to-side-small {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100%);\n }\n}\n\n@keyframes side-to-side-small {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(60%);\n }\n}\n\n@keyframes to-up {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-50%);\n }\n}\n\n@keyframes up-down {\n 0% {\n transform: translateY(-50%);\n }\n 100% {\n transform: translateY(50%);\n }\n}\n\n@keyframes to-up-small {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-70%);\n }\n}\n\n\n@keyframes up-down-small {\n 0% {\n transform: translateY(-70%);\n }\n 100% {\n transform: translateY(70%);\n }\n}\n\n/* https://gist.github.com/LeaVerou/1760283/593fa8bf024ccdddf2fe67826aece0b420c9d60e */\n@keyframes rot-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-5%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-5%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes rot-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-5%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-5%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes rot-small-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-30%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-30%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes rot-small-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-30%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-30%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes flap-left {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(25deg);\n }\n}\n\n@keyframes flap-right {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(-25deg);\n }\n}\n\n@keyframes march {\n 0% {\n transform: rotateX(0deg);\n }\n 100% {\n transform: rotateX(60deg);\n }\n}\n\n@keyframes shrink {\n 0% {\n transform: scaleY(1);\n }\n 100% {\n transform: scaleY(0.1);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_animation.scss","@keyframes ff-to-side {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-3%);\n }\n}\n\n@keyframes ff-side-to-side {\n 0% {\n transform: translateX(-3%);\n }\n 100% {\n transform: translateX(3%);\n }\n}\n\n@keyframes ff-to-side-small {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-1%);\n }\n}\n\n@keyframes ff-side-to-side-small {\n 0% {\n transform: translateX(-1%);\n }\n 100% {\n transform: translateX(1%);\n }\n}\n\n@keyframes ff-to-up {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-4%);\n }\n}\n\n@keyframes ff-up-down {\n 0% {\n transform: translateY(-4%);\n }\n 100% {\n transform: translateY(4%);\n }\n}\n\n@keyframes ff-to-up-small {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-1%);\n }\n}\n\n@keyframes ff-up-down-small {\n 0% {\n transform: translateY(-1%);\n }\n 100% {\n transform: translateY(1%);\n }\n}\n\n@keyframes ff-rot-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-3%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-3%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes ff-rot-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-3%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-3%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes ff-rot-small-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-0.5%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-0.5%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes ff-rot-small-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-0.5%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-0.5%)\n\t\t rotate(0deg);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_ff-animation.scss","/* http://stackoverflow.com/questions/9622354/make-a-div-center-of-viewport-horizontally-and-vertically/34084294#34084294 */\n.owl-wrapper {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.owl-svg {\n @include center-position();\n opacity: 1;\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.window-svg {\n @include center-position();\n opacity: 0;\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.window-visible {\n opacity: 0.9;\n}\n\n.owl-container {\n perspective: 100px;\n transform: translateX(70px);\n}\n\n.owl-graphic {\n transform-origin: center bottom;\n}\n\n.owl-body,\n.iris {\n fill: $owl-main-color;\n}\n\n.stomach,\n.sclera,\n.eye-shine {\n fill: $owl-background-color;\n}\n\n.nose {\n fill: $owl-accent-color;\n}\n\n.foot,\n.wing,\n.eye-liner {\n fill: $owl-extremities-color;\n}\n\n.pupil {\n fill: $owl-dark-color;\n}\n\n.owl-graphic.wobble {\n animation: to-wobble 0.5s ease, wobble 0.75s linear 0.5s alternate infinite;\n}\n\n.eyes.side-to-side {\n animation: to-side 0.5s ease, side-to-side 1s ease 0.5s alternate infinite;\n}\n\n.left-eye-shine.side-to-side {\n animation: to-side-small 0.5s ease, side-to-side-small 1s ease 0.5s alternate infinite;\n}\n\n.right-eye-shine.side-to-side {\n animation: to-side-small 0.5s ease, side-to-side-small 1s ease 0.5s alternate infinite;\n}\n\n.eyes.up-down {\n animation: to-up 0.5s ease, up-down 1s ease 0.5s alternate infinite;\n}\n\n.left-eye-shine.up-down {\n animation: to-up-small 0.5s ease, up-down-small 1s ease 0.5s alternate infinite;\n}\n\n.right-eye-shine.up-down {\n animation: to-up-small 0.5s ease, up-down-small 1s ease 0.5s alternate infinite;\n}\n\n.eyes.around-right {\n animation: rot-right 2s linear 0s normal infinite;\n}\n\n.eyes.around-left {\n animation: rot-left 2s linear 0s normal infinite;\n}\n\n.left-eye-shine.around-right {\n animation: rot-small-right 2s linear 0s normal infinite;\n}\n\n.right-eye-shine.around-right {\n animation: rot-small-right 2s linear 0s normal infinite;\n}\n\n.left-eye-shine.around-left {\n animation: rot-small-left 2s linear 0s normal infinite;\n}\n\n.right-eye-shine.around-left {\n animation: rot-small-left 2s linear 0s normal infinite;\n}\n\n.eyes.blink {\n transform-origin: 50%;\n animation: shrink 0.5s ease 0s alternate infinite;\n}\n\n.wing {\n transform: rotateZ(0) rotateX(0);\n transition: transform 1s ease;\n}\n\n.left-wing {\n transform-origin: right top;\n}\n\n/* http://easings.net/#easeOutCubic */\n.left-wing.flap-left {\n animation: flap-left 0.5s cubic-bezier(0.215, 0.61, 0.355, 1) 0s alternate infinite;\n}\n\n.right-wing {\n transform-origin: left top;\n}\n\n/* http://easings.net/#easeOutCubic */\n.right-wing.flap-right {\n animation: flap-right 0.5s cubic-bezier(0.215, 0.61, 0.355, 1) 0s alternate infinite;\n}\n\n.right-wing.forward-up {\n transform: rotateZ(-71deg) rotateX(160deg);\n}\n\n.left-wing.forward-up {\n transform: rotateZ(66deg) rotateX(160deg);\n}\n\n.foot {\n transform-origin: center top;\n}\n\n.right-foot.march {\n animation: march 0.75s ease 0s alternate infinite;\n}\n\n.left-foot.march {\n animation: march 0.75s ease 0.75s alternate infinite;\n}\n\n.ff {\n .eyes.side-to-side {\n animation: ff-to-side 0.5s ease, ff-side-to-side 1s ease 0.5s alternate infinite;\n }\n\n .left-eye-shine.side-to-side {\n animation: ff-to-side-small 0.5s ease, ff-side-to-side-small 1s ease 0.5s alternate infinite;\n }\n\n .right-eye-shine.side-to-side {\n animation: ff-to-side-small 0.5s ease, ff-side-to-side-small 1s ease 0.5s alternate infinite;\n }\n\n .eyes.up-down {\n animation: ff-to-up 0.5s ease, ff-up-down 1s ease 0.5s alternate infinite;\n }\n\n .left-eye-shine.up-down {\n animation: ff-to-up-small 0.5s ease, ff-up-down-small 1s ease 0.5s alternate infinite;\n }\n\n .right-eye-shine.up-down {\n animation: ff-to-up-small 0.5s ease, ff-up-down-small 1s ease 0.5s alternate infinite;\n }\n\n .eyes.around-right {\n animation: ff-rot-right 2s linear 0s normal infinite;\n }\n\n .eyes.around-left {\n animation: ff-rot-left 2s linear 0s normal infinite;\n }\n\n .left-eye-shine.around-right {\n animation: ff-rot-small-right 2s linear 0s normal infinite;\n }\n\n .right-eye-shine.around-right {\n animation: ff-rot-small-right 2s linear 0s normal infinite;\n }\n\n .left-eye-shine.around-left {\n animation: ff-rot-small-left 2s linear 0s normal infinite;\n }\n\n .right-eye-shine.around-left {\n animation: ff-rot-small-left 2s linear 0s normal infinite;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_owl.scss","// http://brennaobrien.com/blog/2014/05/style-input-type-range-in-every-browser.html\n\ninput[type=range]::-moz-range-track {\n height: 5px;\n background: #ddd;\n border: none;\n border-radius: 3px;\n}\n\ninput[type=range]:focus::-moz-range-track {\n background: #ccc;\n}\n\ninput[type=range],\ninput[type=checkbox] {\n cursor: pointer;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_range.scss",".settings-open {\n position: absolute;\n top: 15px;\n right: 15px;\n}\n\n.settings-open-button {\n @include settings-button(1.3em, 12px);\n}\n\n.settings-restore-button {\n float: right;\n margin-right: 20px;\n @include settings-button(1em, 10px);\n}\n\n.settings-container {\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: $settings-width;\n padding: 10px;\n z-index: z(\"sidebar\");\n color: $settings-color;\n background-color: $settings-background;\n border-right: 1px solid $settings-border;\n transition: transform 0.5s ease;\n}\n\n.check-svg {\n position: absolute;\n transform: scale(0.3, 0.3);\n top: 0;\n left: 0;\n opacity: 0;\n transition: opacity 2s ease;\n}\n\n.settings-hidden {\n transform: translateX($settings-width);\n}\n\n.settings-title {\n position: absolute;\n top: 15px;\n left: 10px;\n font-size: 1.1em;\n color: $settings-color;\n text-transform: uppercase;\n letter-spacing: 1.5px;\n}\n\n.settings-close {\n position: absolute;\n top: 10px;\n right: 10px;\n}\n\n.settings-close-button {\n @include settings-button(0.7em, 5px 8px, 50%);\n}\n\n.settings-form {\n position: relative;\n margin-top: 40px;\n padding-top: 10px;\n border-top: 1px solid $settings-border;\n}\n\n.settings-control {\n margin-bottom: 15px;\n}\n\n.settings-label,\n.settings-input-wrapper {\n display: inline-block;\n}\n\n.settings-label {\n width: 75%;\n font-size: 1.1em\n}\n\n.settings-label-small {\n width: 50%;\n}\n\n.settings-input-wrapper {\n width: 15%;\n margin-left: 2%;\n}\n\n.settings-input-range-wrapper {\n width: 40%;\n}\n\n.settings-input-checkbox-wrapper {\n margin-left: 7%;\n}\n\n.settings-button-wrapper {\n width: 100%;\n margin-top: 25px;\n}\n\n.settings-input {\n width: 100%;\n padding: 5px;\n font-size: 1em;\n border-radius: 3px;\n border: 1px solid $settings-border;\n color: $settings-color;\n background: $settings-input-background;\n transition: border-color 0.5s ease;\n}\n\n.settings-input-error {\n border-color: $settings-error;\n}\n\n.settings-help {\n font-size: 0.9em;\n color: $settings-help-color;\n}\n\n.settings-spacer {\n margin: 30px 0;\n border-bottom: 1px solid $settings-border;\n}\n\n.settings-spacer-small {\n margin-bottom: 10px;\n}\n\n.settings-about {\n display: flex;\n position: absolute;\n bottom: 20px;\n right: 30px;\n}\n\n.settings-link {\n text-decoration: none;\n color: $settings-link-color;\n}\n\n.settings-link-label {\n margin-top: 8px;\n margin-left: 8px;\n}\n\n.settings-octicon {\n fill: $settings-link-color;\n}\n\n.visible {\n opacity: 1;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_settings.scss","*, *:before, *:after {\n box-sizing: border-box;\n}\n\nhtml,\nbody {\n height: 100%;\n}\n\nbody {\n background: $app-background;\n font-family: $app-font-stack;\n font-weight: 300;\n color: $app-color;\n overflow: hidden;\n}\n\n// remove blue glow on focused elements\n:focus {\n outline-color: transparent;\n outline-style: none;\n}\n\n// remove input spinner arrows\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\ninput[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\n.message {\n margin-top: 0.9em;\n font-size: 4em;\n text-align: center;\n opacity: 1;\n filter: grayscale(0);\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.dim {\n opacity: 0.5;\n filter: grayscale(75%);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_app.scss"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack:///css/css/_reset.scss","webpack:///webpack:///css/css/_flipclock-overrides.scss","webpack:///webpack:///css/css/_icon.scss","webpack:///webpack:///css/css/_modal.scss","webpack:///webpack:///css/css/_vars.scss","webpack:///webpack:///css/css/_mixins.scss","webpack:///webpack:///css/css/_animation.scss","webpack:///webpack:///css/css/_ff-animation.scss","webpack:///webpack:///css/css/_owl.scss","webpack:///webpack:///css/css/_range.scss","webpack:///webpack:///css/css/_settings.scss","webpack:///webpack:///css/css/_app.scss"],"names":[],"mappings":"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","file":"styles-ae174a5634dc33a81f45.css","sourcesContent":["/* http://meyerweb.com/eric/tools/css/reset/ \n v2.0 | 20110126\n License: none (public domain)\n*/\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_reset.scss",".clock-container {\n transform: scale(0.75);\n position: absolute;\n top: 0;\n left: -25px;\n opacity: 1;\n}\n\n.flip-clock-wrapper {\n margin: 0;\n}\n\n.flip-clock-divider .flip-clock-label {\n display: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_flipclock-overrides.scss",".icon {\n display: inline-block;\n width: 1em;\n height: 1em;\n vertical-align: middle;\n stroke-width: 0;\n stroke: currentColor;\n fill: currentColor;\n}\n\n// adjustments needed to make iconmoon svg icons align with text in buttons\n.icon-button {\n margin-right: 1px;\n margin-bottom: 4px;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_icon.scss","// https://css-tricks.com/considerations-styling-modal/\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba($settings-background, .9);\n z-index: z(\"modalOverlay\");\n}\n\n.modal {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n width: 800px;\n max-width: 100%;\n height: 500px;\n max-height: 100%;\n\n background-color: $modal-body-background;\n color: $modal-color;\n border: 1px solid $modal-header-background;\n border-radius: 4px;\n\n box-shadow: 0 5px 15px rgba(0,0,0,.5);\n\n z-index: z(\"modal\");\n}\n\n.modal-header {\n padding: 30px 0;\n background-color: $modal-header-background;\n}\n\n.modal-title {\n margin-left: 15px;\n color: $modal-title;\n font-size: 3rem;\n}\n\n.modal-body {\n /* cover the modal */\n position: absolute;\n top: 40;\n left: 0;\n width: 100%;\n height: 100%;\n\n /* spacing as needed */\n padding: 20px 50px 20px 20px;\n\n /* let it scroll */\n overflow: auto;\n\n font-size: 2rem;\n}\n\n.modal-section {\n margin-bottom: 15px;\n}\n\n.text-wrap {\n float: left;\n margin-right: 15px;\n}\n\n.modal-actions {\n margin-top: 40px;\n text-align: center;\n}\n\n.modal-start-button {\n @include settings-button();\n}\n\n.accent-button {\n background-color: $modal-accent;\n &:hover {\n background-color: darken($modal-accent, 10%);\n }\n}\n\n.modal-close {\n position: absolute;\n cursor: pointer;\n top: 10px;\n right: 10px;\n @include settings-button(1.1em, 5px 8px, 50%);\n z-index: z(\"modalClose\");\n}\n\n.closed {\n display: none;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_modal.scss","$app-background: darken(#333333, 10%);\n$app-color: darken(#fff, 5%);\n$app-font-stack: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n\n$modal-header-background: #333;\n$modal-title: #eee;\n$modal-color: #888;\n$modal-body-background: #3a3a3a;\n$modal-accent: #399599;\n\n$settings-width: 330px;\n$settings-color: darken($app-color, 15%);\n$settings-help-color: darken($app-color, 20%);\n$settings-link-color: darken($app-color, 25%);\n$settings-background: darken($app-background, 15%);\n$settings-input-background: darken($app-background, 10%);\n$settings-border: lighten($app-background, 15%);\n$settings-error: darken(red, 15%);\n\n$owl-main-color: #01bdc8;\n$owl-background-color: #fbfcfc;\n$owl-accent-color: #ea9f4b;\n$owl-extremities-color: #967643;\n$owl-dark-color: #000505;\n\n$z-layers: (\n \"sidebar\": 2,\n \"modalClose\": 3,\n \"modalOverlay\": 4,\n \"modal\": 5\n);\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_vars.scss","// http://stackoverflow.com/questions/9622354/make-a-div-center-of-viewport-horizontally-and-vertically/34084294#34084294\n@mixin center-position() {\n width: calc(100% - 60px);\n max-height: calc(100% - 60px);\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n}\n\n@mixin settings-button($fontSize: 1em, $padding: 8px, $borderRadius: 5px) {\n border-radius: $borderRadius;\n border: 1px solid $settings-border;\n color: $settings-color;\n background: $settings-input-background;\n font-size: $fontSize;\n padding: $padding;\n cursor: pointer;\n transition: background-color 0.25s ease, color 0.25s ease;\n &:hover {\n color: brighten($settings-color, 25%);\n background-color: lighten($settings-input-background, 7%);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_mixins.scss","@keyframes to-wobble {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(-2deg);\n }\n}\n\n@keyframes wobble {\n 0% {\n transform: rotate(-2deg);\n }\n 100% {\n transform: rotate(2deg);\n }\n}\n\n@keyframes to-side {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-10%);\n }\n}\n\n@keyframes side-to-side {\n 0% {\n transform: translateX(-10%);\n }\n 100% {\n transform: translateX(10%);\n }\n}\n\n@keyframes to-side-small {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100%);\n }\n}\n\n@keyframes side-to-side-small {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(60%);\n }\n}\n\n@keyframes to-up {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-50%);\n }\n}\n\n@keyframes up-down {\n 0% {\n transform: translateY(-50%);\n }\n 100% {\n transform: translateY(50%);\n }\n}\n\n@keyframes to-up-small {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-70%);\n }\n}\n\n\n@keyframes up-down-small {\n 0% {\n transform: translateY(-70%);\n }\n 100% {\n transform: translateY(70%);\n }\n}\n\n/* https://gist.github.com/LeaVerou/1760283/593fa8bf024ccdddf2fe67826aece0b420c9d60e */\n@keyframes rot-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-5%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-5%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes rot-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-5%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-5%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes rot-small-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-30%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-30%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes rot-small-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-30%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-30%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes flap-left {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(25deg);\n }\n}\n\n@keyframes flap-right {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(-25deg);\n }\n}\n\n@keyframes march {\n 0% {\n transform: rotateX(0deg);\n }\n 100% {\n transform: rotateX(60deg);\n }\n}\n\n@keyframes shrink {\n 0% {\n transform: scaleY(1);\n }\n 100% {\n transform: scaleY(0.1);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_animation.scss","@keyframes ff-to-side {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-3%);\n }\n}\n\n@keyframes ff-side-to-side {\n 0% {\n transform: translateX(-3%);\n }\n 100% {\n transform: translateX(3%);\n }\n}\n\n@keyframes ff-to-side-small {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-1%);\n }\n}\n\n@keyframes ff-side-to-side-small {\n 0% {\n transform: translateX(-1%);\n }\n 100% {\n transform: translateX(1%);\n }\n}\n\n@keyframes ff-to-up {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-4%);\n }\n}\n\n@keyframes ff-up-down {\n 0% {\n transform: translateY(-4%);\n }\n 100% {\n transform: translateY(4%);\n }\n}\n\n@keyframes ff-to-up-small {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(-1%);\n }\n}\n\n@keyframes ff-up-down-small {\n 0% {\n transform: translateY(-1%);\n }\n 100% {\n transform: translateY(1%);\n }\n}\n\n@keyframes ff-rot-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-3%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-3%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes ff-rot-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-3%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-3%)\n\t\t rotate(0deg);\n\t}\n}\n\n@keyframes ff-rot-small-right {\n\t0% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-0.5%)\n\t\t rotate(0deg);\n\t}\n\t100% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-0.5%)\n\t\t rotate(-360deg);\n\t}\n}\n\n@keyframes ff-rot-small-left {\n\t0% {\n\t\ttransform: rotate(360deg)\n\t\t translate(-0.5%)\n\t\t rotate(-360deg);\n\t}\n\t100% {\n\t\ttransform: rotate(0deg)\n\t\t translate(-0.5%)\n\t\t rotate(0deg);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_ff-animation.scss","/* http://stackoverflow.com/questions/9622354/make-a-div-center-of-viewport-horizontally-and-vertically/34084294#34084294 */\n.owl-wrapper {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.owl-svg {\n @include center-position();\n opacity: 1;\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.window-svg {\n @include center-position();\n opacity: 0;\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.window-visible {\n opacity: 0.9;\n}\n\n.owl-container {\n perspective: 100px;\n transform: translateX(70px);\n}\n\n.owl-graphic {\n transform-origin: center bottom;\n}\n\n.owl-body,\n.iris {\n fill: $owl-main-color;\n}\n\n.stomach,\n.sclera,\n.eye-shine {\n fill: $owl-background-color;\n}\n\n.nose {\n fill: $owl-accent-color;\n}\n\n.foot,\n.wing,\n.eye-liner {\n fill: $owl-extremities-color;\n}\n\n.pupil {\n fill: $owl-dark-color;\n}\n\n.owl-graphic.wobble {\n animation: to-wobble 0.5s ease, wobble 0.75s linear 0.5s alternate infinite;\n}\n\n.eyes.side-to-side {\n animation: to-side 0.5s ease, side-to-side 1s ease 0.5s alternate infinite;\n}\n\n.left-eye-shine.side-to-side {\n animation: to-side-small 0.5s ease, side-to-side-small 1s ease 0.5s alternate infinite;\n}\n\n.right-eye-shine.side-to-side {\n animation: to-side-small 0.5s ease, side-to-side-small 1s ease 0.5s alternate infinite;\n}\n\n.eyes.up-down {\n animation: to-up 0.5s ease, up-down 1s ease 0.5s alternate infinite;\n}\n\n.left-eye-shine.up-down {\n animation: to-up-small 0.5s ease, up-down-small 1s ease 0.5s alternate infinite;\n}\n\n.right-eye-shine.up-down {\n animation: to-up-small 0.5s ease, up-down-small 1s ease 0.5s alternate infinite;\n}\n\n.eyes.around-right {\n animation: rot-right 2s linear 0s normal infinite;\n}\n\n.eyes.around-left {\n animation: rot-left 2s linear 0s normal infinite;\n}\n\n.left-eye-shine.around-right {\n animation: rot-small-right 2s linear 0s normal infinite;\n}\n\n.right-eye-shine.around-right {\n animation: rot-small-right 2s linear 0s normal infinite;\n}\n\n.left-eye-shine.around-left {\n animation: rot-small-left 2s linear 0s normal infinite;\n}\n\n.right-eye-shine.around-left {\n animation: rot-small-left 2s linear 0s normal infinite;\n}\n\n.eyes.blink {\n transform-origin: 50%;\n animation: shrink 0.5s ease 0s alternate infinite;\n}\n\n.wing {\n transform: rotateZ(0) rotateX(0);\n transition: transform 1s ease;\n}\n\n.left-wing {\n transform-origin: right top;\n}\n\n/* http://easings.net/#easeOutCubic */\n.left-wing.flap-left {\n animation: flap-left 0.5s cubic-bezier(0.215, 0.61, 0.355, 1) 0s alternate infinite;\n}\n\n.right-wing {\n transform-origin: left top;\n}\n\n/* http://easings.net/#easeOutCubic */\n.right-wing.flap-right {\n animation: flap-right 0.5s cubic-bezier(0.215, 0.61, 0.355, 1) 0s alternate infinite;\n}\n\n.right-wing.forward-up {\n transform: rotateZ(-71deg) rotateX(160deg);\n}\n\n.left-wing.forward-up {\n transform: rotateZ(66deg) rotateX(160deg);\n}\n\n.foot {\n transform-origin: center top;\n}\n\n.right-foot.march {\n animation: march 0.75s ease 0s alternate infinite;\n}\n\n.left-foot.march {\n animation: march 0.75s ease 0.75s alternate infinite;\n}\n\n.ff {\n .eyes.side-to-side {\n animation: ff-to-side 0.5s ease, ff-side-to-side 1s ease 0.5s alternate infinite;\n }\n\n .left-eye-shine.side-to-side {\n animation: ff-to-side-small 0.5s ease, ff-side-to-side-small 1s ease 0.5s alternate infinite;\n }\n\n .right-eye-shine.side-to-side {\n animation: ff-to-side-small 0.5s ease, ff-side-to-side-small 1s ease 0.5s alternate infinite;\n }\n\n .eyes.up-down {\n animation: ff-to-up 0.5s ease, ff-up-down 1s ease 0.5s alternate infinite;\n }\n\n .left-eye-shine.up-down {\n animation: ff-to-up-small 0.5s ease, ff-up-down-small 1s ease 0.5s alternate infinite;\n }\n\n .right-eye-shine.up-down {\n animation: ff-to-up-small 0.5s ease, ff-up-down-small 1s ease 0.5s alternate infinite;\n }\n\n .eyes.around-right {\n animation: ff-rot-right 2s linear 0s normal infinite;\n }\n\n .eyes.around-left {\n animation: ff-rot-left 2s linear 0s normal infinite;\n }\n\n .left-eye-shine.around-right {\n animation: ff-rot-small-right 2s linear 0s normal infinite;\n }\n\n .right-eye-shine.around-right {\n animation: ff-rot-small-right 2s linear 0s normal infinite;\n }\n\n .left-eye-shine.around-left {\n animation: ff-rot-small-left 2s linear 0s normal infinite;\n }\n\n .right-eye-shine.around-left {\n animation: ff-rot-small-left 2s linear 0s normal infinite;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_owl.scss","// http://brennaobrien.com/blog/2014/05/style-input-type-range-in-every-browser.html\n\ninput[type=range]::-moz-range-track {\n height: 5px;\n background: #ddd;\n border: none;\n border-radius: 3px;\n}\n\ninput[type=range]:focus::-moz-range-track {\n background: #ccc;\n}\n\ninput[type=range],\ninput[type=checkbox] {\n cursor: pointer;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_range.scss",".settings-open {\n position: absolute;\n top: 15px;\n right: 15px;\n}\n\n.settings-open-button {\n @include settings-button(1.3em, 12px);\n}\n\n.settings-restore-button {\n float: right;\n margin-right: 20px;\n @include settings-button(1em, 10px);\n}\n\n.settings-container {\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: $settings-width;\n padding: 10px;\n z-index: z(\"sidebar\");\n color: $settings-color;\n background-color: $settings-background;\n border-right: 1px solid $settings-border;\n transition: transform 0.5s ease;\n}\n\n.check-svg {\n position: absolute;\n transform: scale(0.3, 0.3);\n top: 0;\n left: 0;\n opacity: 0;\n transition: opacity 2s ease;\n}\n\n.settings-hidden {\n transform: translateX($settings-width);\n}\n\n.settings-title {\n position: absolute;\n top: 15px;\n left: 10px;\n font-size: 1.1em;\n color: $settings-color;\n text-transform: uppercase;\n letter-spacing: 1.5px;\n}\n\n.settings-close {\n position: absolute;\n top: 10px;\n right: 10px;\n}\n\n.settings-close-button {\n @include settings-button(0.7em, 5px 8px, 50%);\n}\n\n.settings-form {\n position: relative;\n margin-top: 40px;\n padding-top: 10px;\n border-top: 1px solid $settings-border;\n}\n\n.settings-control {\n margin-bottom: 15px;\n}\n\n.settings-label,\n.settings-input-wrapper {\n display: inline-block;\n}\n\n.settings-label {\n width: 75%;\n font-size: 1.1em\n}\n\n.settings-label-small {\n width: 50%;\n}\n\n.settings-input-wrapper {\n width: 15%;\n margin-left: 2%;\n}\n\n.settings-input-range-wrapper {\n width: 40%;\n}\n\n.settings-input-checkbox-wrapper {\n margin-left: 7%;\n}\n\n.settings-button-wrapper {\n width: 100%;\n margin-top: 25px;\n}\n\n.settings-input {\n width: 100%;\n padding: 5px;\n font-size: 1em;\n border-radius: 3px;\n border: 1px solid $settings-border;\n color: $settings-color;\n background: $settings-input-background;\n transition: border-color 0.5s ease;\n}\n\n.settings-input-error {\n border-color: $settings-error;\n}\n\n.settings-help {\n font-size: 0.9em;\n color: $settings-help-color;\n}\n\n.settings-spacer {\n margin: 30px 0;\n border-bottom: 1px solid $settings-border;\n}\n\n.settings-spacer-small {\n margin-bottom: 10px;\n}\n\n.settings-about {\n display: flex;\n position: absolute;\n bottom: 20px;\n right: 30px;\n}\n\n.settings-link {\n text-decoration: none;\n color: $settings-link-color;\n}\n\n.settings-link-label {\n margin-top: 8px;\n margin-left: 8px;\n}\n\n.settings-octicon {\n fill: $settings-link-color;\n}\n\n.visible {\n opacity: 1;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_settings.scss","*, *:before, *:after {\n box-sizing: border-box;\n}\n\nhtml,\nbody {\n height: 100%;\n}\n\nbody {\n background: $app-background;\n font-family: $app-font-stack;\n font-weight: 300;\n color: $app-color;\n overflow: hidden;\n}\n\n// remove blue glow on focused elements\n:focus {\n outline-color: transparent;\n outline-style: none;\n}\n\n// remove input spinner arrows\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\ninput[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\n.message {\n margin-top: 0.9em;\n font-size: 4em;\n text-align: center;\n opacity: 1;\n filter: grayscale(0);\n transition: opacity 1s linear, filter 1s linear;\n}\n\n.dim {\n opacity: 0.5;\n filter: grayscale(75%);\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///css/css/_app.scss"],"sourceRoot":""} \ No newline at end of file