{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/i/icons/xd.svg","webpack:///./src/assets/i/icons/linked.svg","webpack:///./src/assets/i/pagespeed/6.png","webpack:///./src/components/Header.vue?9e6f","webpack:///./src/assets/i/icons/opencart.svg","webpack:///./src/assets/i/icons/email.svg","webpack:///./src/assets/i/icons/snow.svg","webpack:///./src/assets/i/projects/chocolana/0.jpg","webpack:///./src/assets/i/projects/chocolana/4.jpg","webpack:///./src/assets/i/projects/p3week/4.jpg","webpack:///./src/assets/i/icons/linux.svg","webpack:///./src/assets/i/icons/process_5.svg","webpack:///./src/assets/i/icons/photoshop.svg","webpack:///./src/assets/i/icons/aem.svg","webpack:///./src/assets/i/icons/confluence.svg","webpack:///./src/assets/i/projects/chocolana/7.jpg","webpack:///./src/assets/i/icons/indesign.svg","webpack:///./src/assets/i/icons/skype.svg","webpack:///./src/assets/i/icons/telegram.svg","webpack:///./src/assets/i/icons/bitrix.svg","webpack:///./src/assets/i/icons/jquery.svg","webpack:///./src/assets/i/icons/html.svg","webpack:///./src/assets/i/projects/p3week/0.jpg","webpack:///./src/assets/i/projects/chocolana/2.jpg","webpack:///./src/assets/i/icons/docker.svg","webpack:///./src/components/PageSpeed.vue?6ee5","webpack:///./src/assets/i/projects/villathassos/2.jpg","webpack:///./src/assets/i/projects/villabansko/2.jpg","webpack:///./src/assets/i/projects/brokertop/2.jpg","webpack:///./src/assets/i/icons/process_4.svg","webpack:///./src/assets/i/icons/fb.svg","webpack:///./src/assets/i/projects/tatyanavoilokova/2.jpg","webpack:///./src/assets/i/icons/php.svg","webpack:///./src/assets/i/icons/vue.svg","webpack:///./src/assets/i/projects/p3week/5.jpg","webpack:///./src/App.vue","webpack:///./src/assets/js/scrollTo.js","webpack:///./src/assets/js/config.js","webpack:///./src/components/Footer.vue","webpack:///./src/components/Footer.vue?e772","webpack:///./src/components/Header.vue","webpack:///./src/assets/js/themeChange.js","webpack:///./src/assets/js/themeFromLocalStorage.js","webpack:///./src/components/ThemeChange.vue","webpack:///./src/components/ThemeChange.vue?0c39","webpack:///./src/assets/js/imgScroll.js","webpack:///./src/assets/js/imgBg.js","webpack:///./src/assets/js/mobileMenuToggle.js","webpack:///./src/components/Header.vue?a581","webpack:///./src/App.vue?061d","webpack:///./src/views/Blog.vue","webpack:///./src/views/Blog.vue?2af0","webpack:///./src/views/Error404.vue","webpack:///./src/views/Error404.vue?e6e0","webpack:///./src/components/About.vue","webpack:///./src/components/About.vue?9861","webpack:///./src/assets/js/getDate.js","webpack:///./src/constants/index.js","webpack:///./src/components/Clock.vue","webpack:///./src/components/Clock.vue?1d4f","webpack:///./src/components/Contacts.vue","webpack:///./src/components/Contacts.vue?4557","webpack:///./src/assets/js/svgInline.js","webpack:///./src/components/Paw.vue","webpack:///./src/components/Paw.vue?3d13","webpack:///./src/assets/js/logoCanvas.js","webpack:///./src/assets/js/randomSlogan.js","webpack:///./src/components/HomeBlock.vue","webpack:///./src/components/HomeBlock.vue?615b","webpack:///./src/components/PageSpeed.vue","webpack:///./src/components/PageSpeed.vue?39aa","webpack:///./src/components/Projects.vue","webpack:///./src/assets/js/popup.js","webpack:///./src/components/Projects.vue?cc31","webpack:///./src/views/Home.vue","webpack:///./src/views/Home.vue?46dd","webpack:///./src/views/Together.vue","webpack:///./src/views/Together.vue?0650","webpack:///./src/router/index.js","webpack:///./src/main.js","webpack:///./src/assets/i/icons/logo_3.svg","webpack:///./src/assets/i/projects/villabansko/1.jpg","webpack:///./src/assets/i/projects/chocolana/5.jpg","webpack:///./src/components/HomeBlock.vue?e811","webpack:///./src/assets/i/projects/p3week/7.jpg","webpack:///./src/assets/i/projects/chocolana/1.jpg","webpack:///./src/assets/i/icons/nuxt.svg","webpack:///./src/assets/i/icons/inst.svg","webpack:///./src/assets/i/icons/process_3.svg","webpack:///./src/assets/i/icons/logo_4_white.svg","webpack:///./src/assets/i/projects/brokertop/0.jpg","webpack:///./src/assets/i/icons/git.svg","webpack:///./src/assets/i/icons/macos.svg","webpack:///./src/components/Clock.vue?0de7","webpack:///./src/assets/i/projects/p3week/2.jpg","webpack:///./src/assets/i/icons/joomla.svg","webpack:///./src/assets/i/projects/villathassos/3.jpg","webpack:///./src/App.vue?055e","webpack:///./src/assets/i/icons/netpeak-spider.svg","webpack:///./src/components/Projects.vue?b56e","webpack:///./src/assets/i/icons/figma.svg","webpack:///./src/components/About.vue?ce19","webpack:///./src/assets/i/icons/hybris.svg","webpack:///./src/assets/i/icons/python.svg","webpack:///./src/assets/i/icons/react.svg","webpack:///./src/assets/i/icons/logo_3_black.svg","webpack:///./src/assets/i/icons/process_1.svg","webpack:///./src/assets/i/pagespeed/4.png","webpack:///./src/assets/i/icons/css.svg","webpack:///./src/assets/i/projects/villathassos/4.jpg","webpack:///./src/components/ThemeChange.vue?d0bb","webpack:///./src/assets/i/icons/yext.svg","webpack:///./src/assets/i/icons/loading.svg","webpack:///./src/assets/i/icons sync ^.*\\.svg$","webpack:///./src/assets/i/icons/js.svg","webpack:///./src/components/Paw.vue?70d1","webpack:///./src/assets/i/projects/brokertop/1.jpg","webpack:///./src/assets/i/projects/chocolana/3.jpg","webpack:///./src/assets/i/icons/jira.svg","webpack:///./src/assets/i/projects/tatyanavoilokova/4.jpg","webpack:///./src/assets/i/icons/gimp.svg","webpack:///./src/assets/i/projects/tatyanavoilokova/5.jpg","webpack:///./src/assets/i/projects/p3week/6.jpg","webpack:///./src/assets/i/projects/brokertop/3.jpg","webpack:///./src/assets/i/icons/sass.svg","webpack:///./src/assets/i/projects/tatyanavoilokova/3.jpg","webpack:///./src/assets/i/icons/oracle.svg","webpack:///./src/assets/i/projects/p3week/1.jpg","webpack:///./src/assets/i/projects/p3week/3.jpg","webpack:///./src/assets/i/icons/filezilla.svg","webpack:///./src/assets/i/qr_code.svg","webpack:///./src/assets/i/avatar.jpg","webpack:///./src/components/Footer.vue?9783","webpack:///./src/views/Together.vue?f81d","webpack:///./src/assets/i/bg_video.mp4","webpack:///./src/assets/i/projects/tatyanavoilokova/1.jpg","webpack:///./src/assets/i/icons/logo_4.svg","webpack:///./src/assets/i/icons/illustrator.svg","webpack:///./src/assets/i/pagespeed/1.png","webpack:///./src/assets/i/icons/process_2.svg","webpack:///./src/assets/i/icons/logo_2.svg","webpack:///./src/assets/i/projects/chocolana/6.jpg","webpack:///./src/assets/i/projects/tatyanavoilokova/0.jpg","webpack:///./src/assets/i/icons/process_6.svg","webpack:///./src/assets/i/icons/mysql.svg","webpack:///./src/assets/i/icons/logo_5.svg","webpack:///./src/assets/i/icons/logo.svg","webpack:///./src/assets/i/icons/less.svg","webpack:///./src/assets/i/icons/c++.svg","webpack:///./src/assets/i/after_dark.mp3","webpack:///./src/assets/i/icons/phone.svg","webpack:///./src/assets/i/icons/gulp.svg","webpack:///./src/assets/i/projects/villabansko/0.jpg","webpack:///./src/assets/i/projects/villathassos/1.jpg","webpack:///./src/assets/i/projects/tatyanavoilokova/6.jpg","webpack:///./src/assets/i/icons/wordpress.svg","webpack:///./src/assets/i/pagespeed/3.png","webpack:///./src/assets/i/projects/villathassos/0.jpg","webpack:///./src/components/Contacts.vue?7630","webpack:///./src/assets/i/icons/logo_5s.svg"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_ctx","path","_createBlock","_component_Header","_createVNode","_component_router_view","_component_Footer","scrollTo","id","e","document","getElementById","replace","scrollIntoView","behavior","location","href","email","phone","footerLinks","icon","require","title","__exports__","class","_createElementVNode","_hoisted_9","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_component_ThemeChange","_hoisted_4","_hoisted_5","_Fragment","$data","menuItem","active","$options","onClick","_hoisted_7","src","alt","replaceAll","themeChange","themeName","querySelector","dataset","theme","localStorage","setItem","themeFromLocalStorage","_localStorage$getItem","getItem","themeItems","imgScroll","changeImgSrc","querySelectorAll","forEach","pageYOffset","innerHeight","getBoundingClientRect","top","classList","remove","$img","createElement","$classList","className","$src","split","add","$title","after","addEventListener","imgBg","changeImgBg","offsetTop","imgSrc","style","backgroundImage","mobileMenuToggle","toggle","components","ThemeChange","created","this","handleScroll","activeId","menuItems","methods","pathname","blockId","itemsProcessed","index","array","scrollY","getAttribute","history","pushState","link","charAt","toUpperCase","rep","repWith","join","topmenuItemHighlight","$topmenuItem","mounted","unmounted","removeEventListener","metaInfo","meta","content","Footer","Header","render","listDir","illustrations","console","log","keys","aboutActive","ref","aboutItems","img","aboutItemsAll","aboutSkillsMore","getDate","$clocks","today","Date","clockMinutes","getUTCMinutes","clockSeconds","getUTCSeconds","$gmt","gmt","clockHours","getUTCHours","transform","innerHTML","API_KEY","BASE_URL","clockLocations","cityShort","onBeforeUnmount","clearInterval","onMounted","setInterval","updateWeather","async","updatedTemps","Promise","all","map","getWeather","temp","response","fetch","city","json","main","_data$main","toFixed","error","contactsLinks","svgInline","images","image","then","res","text","parser","DOMParser","svg","parseFromString","parentNode","replaceChild","catch","logoCanvas","canvas","ctx","getContext","textStr","canvasH","height","clientHeight","canvasW","width","clientWidth","grad","createLinearGradient","addColorStop","windowWidth","innerWidth","fontSize","font","fillStyle","textAlign","textBaseline","strokeStyle","lineWidth","fillText","strokeText","randomSlogan","delay","slogans","Math","floor","random","setTimeout","_component_carousel","autoplay","i18n","transition","wrap-around","addons","_component_pagination","_component_navigation","next","prev","slide","_component_slide","data-src","Carousel","Navigation","Pagination","Slide","pageSpeedSlides","project","mainImg","price","desc","_hoisted_6","_hoisted_8","type","_hoisted_10","popupHide","popupShow","$contentData","$popupContent","popupProjectShow","imagesList","projectPrice","description","projects","startDate","timeElapsed","timer","updateTime","now","diff","years","days","hours","minutes","seconds","isVisible","onUnmounted","audio","Audio","loop","playAudio","play","routes","component","Blog","Error404","Home","Together","router","createRouter","createWebHistory","process","sensitive","createApp","App","use","mount","webpackContext","req","webpackContextResolve","Error","code","resolve"],"mappings":"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A0B,8B,qBCA3CC,EAAOD,QAAU,IAA0B,4B,4CCA3CC,EAAOD,QAAU,IAA0B,2B,yDCA3C,W,kCCAA,W,qBCAAC,EAAOD,QAAU,IAA0B,+B,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,2B,4CCA3CC,EAAOD,QAAU,IAA0B,gC,4CCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,8B,qBCA3CC,EAAOD,QAAU,IAA0B,2B,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,8B,qBCA3CC,EAAOD,QAAU,IAA0B,0B,qBCA3CC,EAAOD,QAAU,IAA0B,2B,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,wB,qBCA3CC,EAAOD,QAAU,IAA0B,iC,qBCA3CC,EAAOD,QAAU,IAA0B,0B,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,8B,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,kCCA3C,W,qBCAAC,EAAOD,QAAU,IAA0B","file":"js/app.9efb357b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/xd.2f0803d8.svg\";","module.exports = __webpack_public_path__ + \"img/linked.5884025d.svg\";","module.exports = __webpack_public_path__ + \"img/6.8fbd7298.png\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Header.vue?vue&type=style&index=0&id=0e1e5989&lang=scss\"","module.exports = __webpack_public_path__ + \"img/opencart.c7f8c363.svg\";","module.exports = __webpack_public_path__ + \"img/email.a2a21f10.svg\";","module.exports = __webpack_public_path__ + \"img/snow.31c34915.svg\";","module.exports = __webpack_public_path__ + \"img/0.450909c1.jpg\";","module.exports = __webpack_public_path__ + \"img/4.3a6b5835.jpg\";","module.exports = __webpack_public_path__ + \"img/4.d2cb9858.jpg\";","module.exports = __webpack_public_path__ + \"img/linux.603d2fd4.svg\";","module.exports = __webpack_public_path__ + \"img/process_5.4b00a7ff.svg\";","module.exports = __webpack_public_path__ + \"img/photoshop.0807c3eb.svg\";","module.exports = __webpack_public_path__ + \"img/aem.c0135fa2.svg\";","module.exports = __webpack_public_path__ + \"img/confluence.213773fc.svg\";","module.exports = __webpack_public_path__ + \"img/7.0325fa5a.jpg\";","module.exports = __webpack_public_path__ + \"img/indesign.383cd18c.svg\";","module.exports = __webpack_public_path__ + \"img/skype.c2c2baf9.svg\";","module.exports = __webpack_public_path__ + \"img/telegram.22c6ce97.svg\";","module.exports = __webpack_public_path__ + \"img/bitrix.51586b69.svg\";","module.exports = __webpack_public_path__ + \"img/jquery.8ec9bacf.svg\";","module.exports = __webpack_public_path__ + \"img/html.220c351e.svg\";","module.exports = __webpack_public_path__ + \"img/0.f6f2415f.jpg\";","module.exports = __webpack_public_path__ + \"img/2.35102446.jpg\";","module.exports = __webpack_public_path__ + \"img/docker.f54c0ed0.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PageSpeed.vue?vue&type=style&index=0&id=5d23cd9b&lang=scss\"","module.exports = __webpack_public_path__ + \"img/2.1179cd11.jpg\";","module.exports = __webpack_public_path__ + \"img/2.aa3df836.jpg\";","module.exports = __webpack_public_path__ + \"img/2.4efbb5f5.jpg\";","module.exports = __webpack_public_path__ + \"img/process_4.370420f1.svg\";","module.exports = __webpack_public_path__ + \"img/fb.db5cff25.svg\";","module.exports = __webpack_public_path__ + \"img/2.936a10a4.jpg\";","module.exports = __webpack_public_path__ + \"img/php.cdf5b5e1.svg\";","module.exports = __webpack_public_path__ + \"img/vue.c3182097.svg\";","module.exports = __webpack_public_path__ + \"img/5.6a0fc0d1.jpg\";","<template>\n <Header v-if=\"$route.path !== '/together'\" />\n <router-view />\n <Footer v-if=\"$route.path !== '/together'\" />\n</template>\n\n<script>\nimport Footer from '@/components/Footer'\nimport Header from '@/components/Header'\n\nexport default {\n name: 'App',\n components: {\n Footer,\n Header\n }\n}\n</script>\n\n<style lang=\"scss\">@import 'assets/styles/_styles.scss';</style>","// scroll to the block with ID\nconst scrollTo = (id) => {\n if (!id) return\n\n const e = document.getElementById(id.replace('/#', '').replace('#', ''))\n\n // if there is no element with ID to scroll\n if (!e) {\n window.location.href = id\n\n return\n }\n\n // scroll to element\n e.scrollIntoView({\n behavior: 'smooth'\n })\n}\n\nexport default scrollTo","const email = 'info@foxartbox.com'\nconst phone = '+359 (88) 27-444-30'\n\nexport {email, phone}","<template>\n <div class=\"footer\">\n <div class=\"wrap\">\n <span class=\"gotop\" @click.prevent=\"scrollTo('top')\"></span>\n\n <img :src=\"require('../assets/i/qr_code.svg')\" class=\"qr_code\" alt=\"\">\n\n <ul class=\"social_links\">\n <li v-for=\"(footerLink) in footerLinks\" :key=\"footerLink.href\" class=\"social_links__item\">\n <a :href=\"footerLink.href\" :title=\"footerLink.title\" class=\"social_links__link\" target=\"_blank\">\n <img :src=\"footerLink.icon\" class=\"social_links__img\" :alt=\"footerLink.title\">\n </a>\n </li>\n </ul>\n\n <p class=\"footer__phone\"><a :href=\"'tel:' + phone.replace(/[()-]/g, '').replaceAll(' ', '')\">{{ phone }}</a></p>\n\n <p class=\"footer_slogan\">stay true</p>\n\n <p class=\"footer_copyright\">© 2010 - {{ new Date().getFullYear() }}</p>\n\n <p class=\"footer_logo\">\n <span class=\"footer_logo__link\" @click.prevent=\"scrollTo('top')\">\n <img :src=\"require('../assets/i/icons/logo_5s.svg')\" class=\"footer_logo__img\" alt=\"\">\n </span>\n </p>\n </div>\n </div>\n</template>\n\n<script setup>\nimport scrollTo from '../assets/js/scrollTo'\nimport {phone} from '../assets/js/config'\n\nconst footerLinks = [\n { href: '//web.facebook.com/foxartbox/', icon: require('../assets/i/icons/fb.svg'), title: 'Facebook' },\n { href: '//www.instagram.com/denis_fox_web/', icon: require('../assets/i/icons/inst.svg'), title: 'Instagram' }\n]\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.footer {\n animation: bgGradient 10s ease infinite;\n background: linear-gradient(-45deg, $c_gradient_home_start, darken($c_theme_cyperpunk, 30%), $c_theme_cyperpunk, lighten($c_gradient_home_start, 30%));\n background-size: 400% 400%;\n color: #fff;\n padding: 100px 0;\n position: relative;\n text-align: center;\n\n a {\n color: #fff;\n display: inline-block;\n text-decoration: none;\n\n &:hover {\n text-decoration: none;\n }\n }\n\n &__desc {\n text-transform: uppercase;\n }\n}\n\n.footer_copyright {\n align-items: center;\n display: flex;\n justify-content: center;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.footer_logo {\n display: flex;\n justify-content: center;\n\n &__link {\n cursor: pointer;\n\n &:hover {\n .footer_logo__img {\n filter: invert(0);\n }\n }\n }\n\n &__img {\n filter: invert(100%);\n height: 30px;\n transition: $transition;\n width: 150px;\n }\n}\n\n.footer_slogan {\n font-size: 10px;\n text-transform: uppercase;\n}\n</style>","import script from \"./Footer.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=89157394&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-89157394\"]])\n\nexport default __exports__","<template>\n <div class=\"header\">\n <div id=\"top\" class=\"js-block-scroll\"></div>\n\n <div class=\"topmenu js-topmenu\">\n <ThemeChange />\n\n <div class=\"wrap\">\n <ul class=\"topmenu_list\">\n <li v-for=\"menuItem in menuItems\" :key=\"menuItem.title\" class=\"topmenu_list__item\">\n <a :class=\"{active: (menuItem.href | replace('/#', '') === activeId)}\"\n :href=\"menuItem.href\"\n class=\"topmenu_list__link js-topmenu-link\"\n @click.prevent=\"scrollTo(menuItem.href); mobileMenuToggle()\">{{ menuItem.title }}\n </a>\n </li>\n </ul>\n\n <div class=\"topmenu_mobile\">\n <span class=\"topmenu_mobile__logo\" @click.prevent=\"scrollTo('top'); mobileMenuToggle()\"><img :src=\"require('../assets/i/icons/logo_4.svg')\" alt=\"\"></span>\n\n <div class=\"topmenu_mobile__toggle\" @click=\"mobileMenuToggle\"><span></span></div>\n </div>\n </div>\n\n <a :href=\"'tel:' + phone.replace(/[()-]/g, '').replaceAll(' ', '')\" class=\"topmenu_phone\">{{ phone }}</a>\n </div>\n\n <div class=\"topmenu_fade\" @click=\"mobileMenuToggle\"></div>\n </div>\n</template>\n\n<script>\nimport ThemeChange from './ThemeChange'\n\nimport imgScroll from '../assets/js/imgScroll'\nimport imgBg from '../assets/js/imgBg'\nimport mobileMenuToggle from '../assets/js/mobileMenuToggle'\nimport scrollTo from '../assets/js/scrollTo'\n\nimport 'vue3-carousel/dist/carousel.css'\n// import { meta } from 'vue-meta';\nimport {phone} from '../assets/js/config'\n\n// for interview\n// import toBeOrNotToBe from '../assets/js/interview/toBeOrNotToBe'\n\nexport default {\n name: 'Header',\n components: {\n ThemeChange\n },\n created() {\n window.addEventListener('scroll', this.handleScroll)\n\n // check if there is theme at localStorage\n // this.themeFromLocalStorage()\n },\n data() {\n return {\n activeId : '',\n menuItems: [\n {title: 'Home', href: '/#top'},\n {title: 'About me', href: '/#about'},\n {title: 'Projects', href: '/#projects'},\n {title: 'Pagespeed', href: '/#pagespeed'},\n // {title: 'Process', href: '/#process'},\n {title: 'Contacts', href: '/#contacts'},\n // {title: 'Blog', href: '/blog'}\n ],\n phone\n }\n },\n methods: {\n mobileMenuToggle,\n scrollTo,\n\n // on scroll\n handleScroll() {\n // allow only on home page\n if (window.location.pathname !== '/') return\n\n let blockId = 'top'\n let itemsProcessed = 0\n\n document.querySelectorAll('.js-block-scroll').forEach((e, index, array) => {\n itemsProcessed++\n\n // change block ID if it's in viewport\n if (window.scrollY > e.offsetTop - 100) {\n blockId = e.getAttribute('id')\n this.activeId = blockId\n }\n\n // get to end of array | change url | change active menu item\n if (itemsProcessed === array.length) {\n // change url to current menu item\n history.pushState(null, null, '/#' + blockId)\n\n // remove active class from all menu items\n document.querySelectorAll('.js-topmenu-link').forEach((link) => {\n link.classList.remove('active')\n })\n\n // add active class to scrolled block\n document.querySelector('.js-topmenu').querySelector('[href=\"/#' + blockId + '\"]').classList.add('active')\n\n // change title\n document.title = blockId.charAt(0).toUpperCase() + blockId.slice(1) + ' | Foxartbox'\n }\n })\n },\n\n replace(e, rep, repWith) {\n return e.split(rep).join(repWith)\n },\n\n topmenuItemHighlight() {\n const $topmenuItem = document.querySelector('.js-topmenu-link[href=\"' + window.location.pathname + '\"]')\n\n if (!$topmenuItem) return\n\n $topmenuItem.classList.add('active')\n }\n },\n mounted() {\n imgScroll()\n imgBg()\n\n // highlight menu item on inner pages\n this.topmenuItemHighlight()\n\n // *** interview JS [START]\n // toBeOrNotToBe()\n // *** interview JS [END]\n },\n unmounted() {\n window.removeEventListener('scroll', this.handleScroll)\n },\n metaInfo: {\n // Set the meta description for this component\n meta: [\n {\n name: 'description',\n content: 'Web-sites development. Fast & simple. By Denis FOX',\n },\n ],\n },\n}\n</script>\n\n<style lang=\"scss\">\n@use '../assets/styles/vars' as *;\n\n.topmenu {\n background-color: #fff;\n box-shadow: 0 0 7px #000;\n font-size: 16px;\n left: 0;\n position: fixed;\n text-transform: uppercase;\n top: 0;\n transition: $transition;\n width: 100%;\n z-index: 9;\n\n &__bg {\n background-color: rgba($c_gradient_home_start, .8);\n display: none;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n transition: $transition;\n width: 100%;\n z-index: 8;\n }\n}\n\n.topmenu_active {\n .topmenu {\n background-color: #fff;\n }\n\n .topmenu_list {\n a,\n a:visited {\n color: #000;\n\n &.active {\n color: #fff;\n }\n }\n }\n\n .topmenu_mobile__toggle,\n .topmenu_mobile__toggle:visited {\n > span {\n background-color: #000;\n }\n }\n\n .topmenu_mobile__logo,\n .topmenu_mobile__logo:visited {\n color: #000;\n\n img {\n filter: invert(100%);\n }\n }\n}\n\n.topmenu_fade {\n background-color: #000;\n display: none;\n height: 100%;\n left: 0;\n opacity: .7;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 7;\n}\n\n.topmenu_list {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n\n &__link {\n color: #000;\n display: block;\n opacity: .7;\n outline: 0 none;\n padding: 10px 20px;\n position: relative;\n text-decoration: none;\n\n &:hover,\n &.active {\n color: #fff;\n opacity: 1;\n text-decoration: none;\n\n &::after {\n top: 0;\n }\n }\n\n &::after {\n background-color: #000;\n content: \"\";\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n top: -150px;\n transition: $transition;\n width: 100%;\n z-index: -1;\n }\n\n &--logo {\n opacity: 1;\n\n img {\n filter: invert(0);\n width: 30px;\n height: 30px;\n }\n }\n\n @media #{$tablet} {\n padding: 20px 30px;\n text-align: center;\n\n &::after {\n display: none;\n }\n\n &:hover,\n &.active {\n background-color: #000;\n color: #fff;\n }\n }\n }\n\n &__item {\n display: block;\n }\n\n @media #{$tablet} {\n background-color: #fff;\n box-shadow: 0 4px 7px #000;\n display: none;\n left: 0;\n position: absolute;\n top: 100%;\n width: 100%;\n }\n}\n\n.topmenu_mobile {\n align-items: center;\n display: none;\n justify-content: space-between;\n\n &__logo {\n align-items: center;\n color: #000;\n cursor: pointer;\n display: flex;\n padding: 4px 0;\n text-decoration: none;\n transition: $transition;\n\n img {\n display: block;\n height: 40px;\n filter: invert(100%);\n margin: 0 10px 0 0;\n width: 40px;\n\n @media #{$tablet} {\n filter: invert(0);\n }\n }\n\n &:hover {\n opacity: 0.7;\n }\n }\n\n &__toggle {\n display: block;\n cursor: pointer;\n height: 40px;\n position: relative;\n text-decoration: none;\n width: 40px;\n\n &::after,\n &::before,\n > span {\n background-color: #000;\n content: \"\";\n display: block;\n height: 2px;\n left: 8px;\n margin: 0 0 4px;\n position: absolute;\n top: 19px;\n transition: $transition;\n width: 22px;\n }\n\n &::after {\n top: 13px;\n }\n\n &::before {\n top: 25px;\n }\n }\n\n @media #{$tablet} {\n display: flex;\n }\n}\n\n.topmenu_mobile_active {\n @media #{$tablet} {\n .topmenu {\n &__bg {\n display: block;\n }\n }\n\n .topmenu_list {\n display: block;\n }\n\n .topmenu_fade {\n display: block;\n }\n\n .topmenu_mobile {\n &__toggle {\n &::after,\n &::before {\n top: 18px;\n }\n\n &::after {\n transform: rotate(-45deg);\n }\n\n &::before {\n transform: rotate(45deg);\n }\n\n > span {\n left: 100px;\n opacity: 0;\n }\n }\n }\n }\n}\n\n.topmenu_phone {\n color: #000;\n font-size: 14px;\n opacity: 0.7;\n position: absolute;\n right: 10px;\n text-decoration: none;\n top: 50%;\n transform: translateY(-50%);\n\n &:hover {\n opacity: 1;\n }\n\n @media #{$tablet} {\n right: 90px;\n }\n\n @media #{$mobile_s} {\n display: none;\n }\n}\n</style>","// theme change\nconst themeChange = (themeName) => {\n document.querySelector('html').dataset.theme = themeName\n\n localStorage.setItem('theme', themeName)\n}\n\nexport default themeChange","// set theme from localStorage\nconst themeFromLocalStorage = () => {\n document.querySelector('html').dataset.theme = localStorage.getItem('theme') ?? ''\n}\n\nexport default themeFromLocalStorage","<template>\n <ul class=\"theme_change\">\n <li v-for=\"themeItem in themeItems\" :key=\"themeItem.name\" class=\"theme_change__item\">\n <span :class=\"'theme_change__link--type-' + themeItem.class\" :title=\"themeItem.title\" class=\"theme_change__link\" @click.prevent=\"themeChange(themeItem.name)\"></span>\n </li>\n </ul>\n</template>\n\n<script setup>\nimport themeChange from '../assets/js/themeChange'\nimport themeFromLocalStorage from '../assets/js/themeFromLocalStorage'\n\nthemeFromLocalStorage()\n\nconst themeItems = [\n {name: 'theme_standart', title: 'Default theme', class: '1'},\n {name: 'theme_black_and_white', title: 'Black & white theme', class: '2'},\n {name: 'theme_cyperpunk', title: 'Cyberpunk theme', class: '3'},\n {name: 'theme_forest', title: 'Forest theme', class: '4'},\n {name: 'theme_yellow', title: 'Yellow theme', class: '5'}\n]\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.theme_change {\n display: flex;\n font-size: 1rem;\n left: 0.5rem;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n\n &__item {\n margin: 0 0.5rem 0 0;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &__link {\n background-color: #000;\n border-radius: 50%;\n box-shadow: 0 0 3px #000;\n display: block;\n height: 24px;\n width: 24px;\n\n &:hover {\n opacity: 0.7;\n }\n\n &--type-1 {\n background: $c_theme_cyperpunk;\n }\n\n &--type-2 {\n background: linear-gradient(-45deg, #000, #fff);\n }\n\n &--type-3 {\n background: linear-gradient(-45deg, $c_gradient_home_start, $c_theme_cyperpunk);\n }\n\n &--type-4 {\n background: linear-gradient(-45deg, $c_gradient_home_start, $c_theme_forest);\n }\n\n &--type-5 {\n background: linear-gradient(-45deg, darken($c_theme_yellow, 50%), $c_theme_yellow, lighten($c_theme_yellow, 50%));\n }\n }\n\n @media #{$tablet} {\n left: 90px;\n }\n\n @media #{$mobile_s} {\n left: 50%;\n transform: translate(-50%,-50%);\n }\n}\n\n.topmenu {\n background-color: #fff;\n box-shadow: 0 0 7px #000;\n font-size: 16px;\n left: 0;\n position: fixed;\n text-transform: uppercase;\n top: 0;\n transition: $transition;\n width: 100%;\n z-index: 9;\n\n &__bg {\n background-color: rgba($c_gradient_home_start, .8);\n display: none;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n transition: $transition;\n width: 100%;\n z-index: 8;\n }\n}\n\n.topmenu_active {\n .topmenu {\n background-color: #fff;\n }\n\n .topmenu_list {\n a,\n a:visited {\n color: #000;\n\n &.active {\n color: #fff;\n }\n }\n }\n\n .topmenu_mobile__toggle,\n .topmenu_mobile__toggle:visited {\n > span {\n background-color: #000;\n }\n }\n\n .topmenu_mobile__logo,\n .topmenu_mobile__logo:visited {\n color: #000;\n\n img {\n filter: invert(100%);\n }\n }\n}\n\n.topmenu_fade {\n background-color: #000;\n display: none;\n height: 100%;\n left: 0;\n opacity: .7;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 7;\n}\n\n.topmenu_list {\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n\n &__link {\n color: #000;\n display: block;\n opacity: .7;\n outline: 0 none;\n padding: 10px 20px;\n position: relative;\n text-decoration: none;\n\n &:hover,\n &.active {\n color: #fff;\n opacity: 1;\n text-decoration: none;\n\n &::after {\n top: 0;\n }\n }\n\n &::after {\n background-color: #000;\n content: \"\";\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n top: -150px;\n transition: $transition;\n width: 100%;\n z-index: -1;\n }\n\n &--logo {\n opacity: 1;\n\n img {\n filter: invert(0);\n width: 30px;\n height: 30px;\n }\n }\n\n @media #{$mobile} {\n padding: 20px 30px;\n text-align: center;\n\n &::after {\n display: none;\n }\n\n &:hover,\n &.active {\n background-color: #000;\n color: #fff;\n }\n }\n }\n\n &__item {\n display: block;\n }\n\n @media #{$tablet} {\n background-color: #fff;\n box-shadow: 0 4px 7px #000;\n display: none;\n left: 0;\n position: absolute;\n top: 100%;\n width: 100%;\n }\n}\n\n.topmenu_mobile {\n align-items: center;\n display: none;\n justify-content: space-between;\n\n &__logo {\n align-items: center;\n color: #000;\n cursor: pointer;\n display: flex;\n padding: 4px 0;\n text-decoration: none;\n transition: $transition;\n\n img {\n display: block;\n height: 40px;\n filter: invert(100%);\n margin: 0 10px 0 0;\n width: 40px;\n\n @media #{$tablet} {\n filter: invert(0);\n }\n }\n\n &:hover {\n opacity: .7;\n }\n }\n\n &__toggle {\n display: block;\n cursor: pointer;\n height: 40px;\n position: relative;\n text-decoration: none;\n width: 40px;\n\n &::after,\n &::before,\n > span {\n background-color: #000;\n content: \"\";\n display: block;\n height: 2px;\n left: 8px;\n margin: 0 0 4px;\n position: absolute;\n top: 19px;\n transition: $transition;\n width: 22px;\n }\n\n &::after {\n top: 13px;\n }\n\n &::before {\n top: 25px;\n }\n }\n\n @media #{$tablet} {\n display: flex;\n }\n}\n\n.topmenu_mobile_active {\n @media #{$mobile} {\n .topmenu {\n &__bg {\n display: block;\n }\n }\n\n .topmenu_list {\n display: block;\n }\n\n .topmenu_fade {\n display: block;\n }\n\n .topmenu_mobile {\n &__toggle {\n &::after {\n top: 18px;\n transform: rotate(-45deg);\n }\n\n &::before {\n top: 18px;\n transform: rotate(45deg);\n }\n\n > span {\n left: 100px;\n opacity: 0;\n }\n }\n }\n }\n}\n\n.topmenu_phone {\n color: #000;\n font-size: 14px;\n opacity: .7;\n position: absolute;\n right: 10px;\n text-decoration: none;\n top: 50%;\n transform: translateY(-50%);\n\n &:hover {\n opacity: 1;\n }\n\n @media #{$tablet} {\n right: 90px;\n }\n\n @media #{$mobile_s} {\n display: none;\n }\n}\n</style>","import script from \"./ThemeChange.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ThemeChange.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ThemeChange.vue?vue&type=style&index=0&id=51209dd3&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-51209dd3\"]])\n\nexport default __exports__","const imgScroll = () => {\n const changeImgSrc = () => {\n document.querySelectorAll('.js-img-scroll').forEach((e) => {\n if (window.pageYOffset + window.innerHeight >= e.getBoundingClientRect().top) {\n e.classList.remove('js-img-scroll')\n\n // create img element\n const $img = document.createElement('img')\n let $classList = e.className\n const $src = e.dataset.src\n\n if (!$src) return\n\n // copy all classes from span to img\n if ($classList) {\n $classList.split(' ').forEach((c) => {\n $img.classList.add(c)\n })\n }\n\n $img.src = $src\n\n const $title = e.title\n\n if ($title) {\n // alt text\n $img.alt = $title\n\n // title\n $img.title = $title\n }\n\n // append img\n e.after($img)\n\n // remove main element (span)\n e.remove()\n }\n })\n }\n\n window.addEventListener('orientationChange', changeImgSrc)\n window.addEventListener('resize', changeImgSrc)\n window.addEventListener('scroll', changeImgSrc)\n\n changeImgSrc()\n}\n\nexport default imgScroll","const imgBg = () => {\n const changeImgBg = () => {\n document.querySelectorAll('.js-img-bg').forEach((e) => {\n if (window.pageYOffset + window.innerHeight >= e.offsetTop) {\n e.classList.remove('js-img-bg')\n const imgSrc = e.dataset.src\n if (imgSrc) e.style.backgroundImage = 'url(' + imgSrc + ')'\n }\n })\n }\n\n changeImgBg()\n\n window.addEventListener('orientationChange', changeImgBg)\n window.addEventListener('resize', changeImgBg)\n window.addEventListener('scroll', changeImgBg)\n}\n\nexport default imgBg","// theme change\nconst mobileMenuToggle = () => {\n document.querySelector('html').classList.toggle('topmenu_mobile_active')\n}\n\nexport default mobileMenuToggle","import { render } from \"./Header.vue?vue&type=template&id=0e1e5989\"\nimport script from \"./Header.vue?vue&type=script&lang=js\"\nexport * from \"./Header.vue?vue&type=script&lang=js\"\n\nimport \"./Header.vue?vue&type=style&index=0&id=0e1e5989&lang=scss\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=09de6389\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=09de6389&lang=scss\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n\t<div class=\"content_inner\">\n\t\t<div class=\"wrap\">\n\t\t\t<h1>Blog</h1>\n\n\t\t\t<p>Here will be BLOG with JS</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\n// import About from '@/components/About'\n\nexport default {\n\tcomponents: {\n\t\t// About,\n\t\t// Contacts,\n\t\t// HomeBlock,\n\t\t// Process,\n\t\t// Projects\n\t},\n\tcreated() {\n\t\tdocument.title = \"Blog | Foxartbox\"\n\t},\n\tmethods: {\n\t\tlistDir() {\n\t\t\tconst illustrations = require.context(\n\t\t\t\t'@/assets/i/icons',\n\t\t\t\ttrue,\n\t\t\t\t/^.*\\.svg$/\n\t\t\t)\n\n\t\t\tconsole.log(illustrations.keys())\n\t\t}\n\t},\n\tmounted() {\n\t\t// highlight menu item on inner pages\n\t\t// this.listDir()\n\t}\n}\n</script>","import { render } from \"./Blog.vue?vue&type=template&id=59fa78bd\"\nimport script from \"./Blog.vue?vue&type=script&lang=js\"\nexport * from \"./Blog.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n\t<div class=\"error error_404\">\n\t\t<h1 class=\"h1 h1--dark\">404 Error :(((</h1>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: \"Error404\"\n}\n</script>","import { render } from \"./Error404.vue?vue&type=template&id=17171960\"\nimport script from \"./Error404.vue?vue&type=script&lang=js\"\nexport * from \"./Error404.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n\t<div id=\"about\" class=\"about js-block-scroll\">\n\t\t<div class=\"wrap\">\n\t\t\t<h2>About me</h2>\n\n\t\t\t<div :data-src=\"require('../assets/i/avatar.jpg')\" class=\"about_main_img js-img-bg\"></div>\n\n\t\t\t<div :class=\"{ 'active': aboutActive }\" class=\"about_skills_wrap\">\n\t\t\t\t<ul class=\"about_skills\">\n\t\t\t\t\t<li v-for=\"aboutItem in aboutItems\" :key=\"aboutItem.title\" class=\"about_skills__item\">\n\t\t\t\t\t\t<a :href=\"aboutItem.link\" class=\"about_skills__link\" target=\"_blank\">\n\t\t\t\t\t\t\t<img :src=\"aboutItem.img\" :title=\"aboutItem.title\" class=\"about_skills__img\" :alt=\"aboutItem.title\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<ul class=\"about_skills_all\">\n\t\t\t\t\t<li v-for=\"item in aboutItemsAll\" :key=\"item.title\" class=\"about_skills_all__item\">\n\t\t\t\t\t\t<a :href=\"item.link\" class=\"about_skills_all__link\" target=\"_blank\">\n\t\t\t\t\t\t\t<img :src=\"item.img\" :title=\"item.title\" class=\"about_skills_all__img\" :alt=\"item.title\">\n <span class=\"about_skills_all__title\">{{ item.title }}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\n\t\t\t\t<p class=\"text-center\">\n\t\t\t\t\t<button class=\"about_skills_more btn btn__main js-about-skills-more\" @click=\"aboutSkillsMore\"><span>All skills</span><span>Show less</span></button>\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"about__content\">\n\t\t\t\t<p>My name is Denis FOX.</p>\n\n\t\t\t\t<p>I'm a web-developer.</p>\n\n\t\t\t\t<p>10 years in web development. I make fast & adaptive websites by w3c standards.</p>\n\n\t\t\t\t<h3>GITHUB</h3>\n\n\t\t\t\t<p><a class=\"about__link\" href=\"//github.com/dfox47\" target=\"_blank\" title=\"my GIT repo\">github.com/dfox47</a></p>\n\n\t\t\t\t<h3>Main skills:</h3>\n\n\t\t\t\t<p>JS, HTML, CSS, Figma</p>\n\n\t\t\t\t<h3>Additional skills</h3>\n\n\t\t\t\t<p>SEO, PHP, Gimp, Git</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\nimport {ref} from 'vue'\n\nconst aboutActive = ref(false)\n\nconst aboutItems = [\n {title: 'JS', img: require('../assets/i/icons/js.svg'), link: '//www.javascript.com/'},\n {title: 'HTML', img: require('../assets/i/icons/html.svg'), link: '//en.wikipedia.org/wiki/HTML'},\n {title: 'CSS', img: require('../assets/i/icons/css.svg'), link: '//en.wikipedia.org/wiki/CSS'},\n {title: 'Figma', img: require('../assets/i/icons/figma.svg'), link: '//en.wikipedia.org/wiki/Figma_(software)'},\n]\n\nconst aboutItemsAll = [\n {title: 'Adobe Experience Manager', img: require('../assets/i/icons/aem.svg'), link: '//business.adobe.com/blog/basics/adobe-experience-manager'},\n {title: 'Adobe Indesign', img: require('../assets/i/icons/indesign.svg'), link: '//en.wikipedia.org/wiki/Adobe_InDesign'},\n {title: 'Adobe Photoshop', img: require('../assets/i/icons/photoshop.svg'), link: '//en.wikipedia.org/wiki/Adobe_Photoshop'},\n {title: 'Adobe illustrator', img: require('../assets/i/icons/illustrator.svg'),link: '//en.wikipedia.org/wiki/Adobe_Illustrator'},\n {title: 'Bitrix', img: require('../assets/i/icons/bitrix.svg'), link: '//ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D1%80%D0%B8%D0%BA%D1%8124'},\n {title: 'Confluence', img: require('../assets/i/icons/confluence.svg'), link: '//en.wikipedia.org/wiki/Confluence_(software)'},\n {title: 'Docker', img: require('../assets/i/icons/docker.svg'), link: '//www.docker.com/'},\n {title: 'Filezilla', img: require('../assets/i/icons/filezilla.svg'), link: '//filezilla-project.org/'},\n {title: 'Gimp', img: require('../assets/i/icons/gimp.svg'), link: '//en.wikipedia.org/wiki/GIMP'},\n {title: 'Git', img: require('../assets/i/icons/git.svg'), link: '//en.wikipedia.org/wiki/Git'},\n {title: 'Gulp', img: require('../assets/i/icons/gulp.svg'), link: '//en.wikipedia.org/wiki/Gulp.js'},\n {title: 'Jira', img: require('../assets/i/icons/jira.svg'), link: '//en.wikipedia.org/wiki/Jira_(software)'},\n {title: 'Joomla', img: require('../assets/i/icons/joomla.svg'), link: '//en.wikipedia.org/wiki/Joomla'},\n {title: 'LESS', img: require('../assets/i/icons/less.svg'), link: '//en.wikipedia.org/wiki/Less_(stylesheet_language)'},\n {title: 'Linux', img: require('../assets/i/icons/linux.svg'), link: '//en.wikipedia.org/wiki/Linux'},\n {title: 'MacOS', img: require('../assets/i/icons/macos.svg'), link: '//en.wikipedia.org/wiki/MacOS'},\n {title: 'Mysql', img: require('../assets/i/icons/mysql.svg'), link: '//en.wikipedia.org/wiki/MySQL'},\n {title: 'Nuxt', img: require('../assets/i/icons/nuxt.svg'), link: '//nuxt.com/'},\n {title: 'Opencart', img: require('../assets/i/icons/opencart.svg'), link: '//en.wikipedia.org/wiki/OpenCart'},\n {title: 'Php', img: require('../assets/i/icons/php.svg'), link: '//en.wikipedia.org/wiki/PHP'},\n {title: 'Python', img: require('../assets/i/icons/python.svg'), link: '//en.wikipedia.org/wiki/Python_(programming_language)'},\n {title: 'React', img: require('../assets/i/icons/react.svg'), link: '//react.dev/'},\n {title: 'SAP Hybris', img: require('../assets/i/icons/hybris.svg'), link: '//en.wikipedia.org/wiki/Hybris_(company)'},\n {title: 'SASS', img: require('../assets/i/icons/sass.svg'), link: '//en.wikipedia.org/wiki/Sass_(stylesheet_language)'},\n {title: 'Service now', img: require('../assets/i/icons/snow.svg'), link: '//en.wikipedia.org/wiki/ServiceNow'},\n {title: 'Vue', img: require('../assets/i/icons/vue.svg'), link: '//vuejs.org/'},\n {title: 'Wordpress', img: require('../assets/i/icons/wordpress.svg'), link: '//en.wikipedia.org/wiki/WordPress'},\n {title: 'Yext', img: require('../assets/i/icons/yext.svg'), link: '//www.yext.com/index.html'},\n]\n\n// Method to toggle `aboutActive`\nconst aboutSkillsMore = () => {\n aboutActive.value = !aboutActive.value;\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.about {\n font-size: 20px;\n margin: 0 auto;\n padding: 50px 0 100px;\n\n &__content {\n margin: 0 auto;\n max-width: 400px;\n width: 100%;\n }\n\n\t&__link {\n color: $c_text;\n }\n}\n\n\n.about_skills {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n margin: 0 auto;\n min-height: 9rem;\n padding: 3rem 0 0;\n\n &__img {\n display: block;\n height: 50px;\n object-fit: contain;\n width: 50px;\n }\n\n &__item {\n padding: 4px;\n }\n\n @media #{$mobile_min} {\n &__img {\n filter: grayscale(30%) brightness(.5);\n transition: filter, height, width, margin-top, .2s cubic-bezier(.25, 1, .5, 1);\n will-change: filter;\n }\n\n &__item {\n &:has(+ .about_skills__item:hover) {\n .about_skills__img {\n filter: inherit;\n height: 80px;\n margin: -20px 0 0;\n width: 80px;\n }\n }\n\n &:hover {\n .about_skills__img {\n filter: inherit;\n height: 100px;\n margin: -40px 0 0;\n width: 100px;\n }\n\n + .about_skills__item {\n .about_skills__img {\n filter: inherit;\n height: 80px;\n margin: -20px 0 0;\n width: 80px;\n }\n }\n }\n }\n }\n}\n\n.about_skills_all {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n margin: 0 auto;\n max-height: 0;\n max-width: 50rem;\n overflow: hidden;\n position: relative;\n transition: max-height 1s cubic-bezier(0,1,0,1);\n\n &__img {\n display: block;\n height: 6rem;\n object-fit: contain;\n padding: .7rem;\n transition: $transition;\n width: 6rem;\n\n &:hover {\n padding: 0;\n }\n }\n\n &__link {\n color: $c_text;\n display: block;\n font-size: 0.8rem;\n max-width: 84px;\n text-align: center;\n text-decoration: none;\n\n &:hover {\n opacity: 0.7;\n }\n }\n\n &__title {\n display: block;\n }\n}\n\n.about_skills_more {\n span {\n &:last-child {\n display: none;\n }\n }\n}\n\n.about_skills_wrap {\n padding: 0 0 2rem;\n\n &.active {\n .about_skills_more {\n span {\n &:first-child {\n display: none;\n }\n\n &:last-child {\n display: block;\n }\n }\n }\n\n .about_skills_all {\n max-height: 1000px;\n transition: max-height 1.5s ease-in-out;\n }\n }\n}\n\n.about_main_img {\n background-repeat: no-repeat;\n background-size: cover;\n border-radius: 50%;\n display: block;\n margin: 3rem auto;\n max-width: 25rem;\n position: relative;\n width: 100%;\n z-index: 3;\n\n &::after {\n background: radial-gradient(ellipse at center,rgba(#fff,0) 0,rgba(#fff,0) 50%,#fff 70%,#fff 100%);\n content: \"\";\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 5;\n }\n\n &::before {\n content: \"\";\n display: block;\n padding: 100% 0 0;\n position: relative;\n width: 100%;\n }\n}\n</style>","import script from \"./About.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./About.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./About.vue?vue&type=style&index=0&id=0588309a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0588309a\"]])\n\nexport default __exports__","// theme change\nconst getDate = () => {\n const $clocks = document.querySelectorAll('.js-clock')\n\n if (!$clocks) return\n\n const today = new Date()\n const clockMinutes = today.getUTCMinutes()\n const clockSeconds = today.getUTCSeconds()\n\n $clocks.forEach((e) => {\n const $gmt = e.dataset.gmt ? e.dataset.gmt : 0\n\n let clockHours = today.getUTCHours() + +$gmt\n\n if (clockHours > 23) {\n clockHours = clockHours - 24\n }\n else if (clockHours < 0) {\n clockHours = clockHours + 24\n }\n\n // dark mode\n if (clockHours > 19 || clockHours < 8) {\n e.classList.add('clock--dark')\n }\n\n e.querySelector('.js-clock-hours').style.transform = 'rotate(' + (30 * clockHours + today.getUTCMinutes() / 2) + 'deg)'\n e.querySelector('.js-clock-minutes').style.transform = 'rotate(' + (6 * clockMinutes) + 'deg)'\n e.querySelector('.js-clock-seconds').style.transform = 'rotate(' + (6 * clockSeconds) + 'deg)'\n\n e.querySelector('.js-clock-digital').innerHTML = ('0' + clockHours).slice(-2) + ':' + ('0' + clockMinutes).slice(-2)\n })\n}\n\nexport default getDate","export const API_KEY = '7361ee272fb6f5a3d88323ba1e92f4ed'\nexport const BASE_URL = 'https://api.openweathermap.org/data/2.5/weather'","<template>\n <div class=\"clock_list\">\n <div class=\"clock js-clock\" v-for=\"city in clockLocations\" :key=\"city.name\" :data-gmt=\"city.gmt\">\n <div class=\"clock__title\">\n {{ city.name }} <span class=\"clock__temp\">{{ city.temp }} °C</span>\n </div>\n\n <div class=\"clock_analog\">\n <div class=\"clock_number clock_number__3\">3</div>\n <div class=\"clock_number clock_number__6\">6</div>\n <div class=\"clock_number clock_number__9\">9</div>\n <div class=\"clock_number clock_number__12\">12</div>\n\n <div class=\"clock_arrow clock_arrow__seconds js-clock-seconds\"></div>\n <div class=\"clock_arrow clock_arrow__minutes js-clock-minutes\"></div>\n <div class=\"clock_arrow clock_arrow__hours js-clock-hours\"></div>\n </div>\n\n <div class=\"clock_digital js-clock-digital\"></div>\n\n <div>\n\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport {onBeforeUnmount, onMounted, ref} from 'vue'\nimport getDate from '../assets/js/getDate'\nimport {API_KEY, BASE_URL} from '../constants'\n\nconst clockLocations = ref([\n {name: 'New York', gmt: '-5', cityShort: 'New York'},\n {name: 'Sofia', gmt: '+3', cityShort: 'Sofia'},\n {name: 'Tokyo', gmt: '+9', cityShort: 'Tokyo'}\n])\n\nonBeforeUnmount(() => {\n clearInterval(getDate)\n})\n\nonMounted(() => {\n setInterval(getDate, 1000)\n updateWeather()\n})\n\n// Update weather data for each location\nconst updateWeather = async () => {\n const updatedTemps = await Promise.all(\n clockLocations.value.map(location => getWeather(location.cityShort))\n )\n\n clockLocations.value = clockLocations.value.map((location, index) => ({\n ...location,\n temp: updatedTemps[index]\n }))\n}\n\n// more info https://openweathermap.org/current\nconst getWeather = async (city) => {\n try {\n const response = await fetch(`${BASE_URL}?q=${city}&units=metric&appid=${API_KEY}`)\n const data = await response.json()\n return data?.main?.temp.toFixed(0)\n } catch (error) {\n console.error('Error fetching weather:', error)\n return 'N/A'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.clock {\n margin: 30px;\n\n &--dark {\n .clock_analog {\n background-color: #000;\n color: #fff;\n\n &::after {\n background-color: #fff;\n }\n }\n\n .clock_arrow {\n &__hours {\n background-color: #fff;\n }\n\n &__minutes {\n background-color: #fff;\n }\n }\n }\n\n &__temp {\n font-size: .5em;\n margin: 0 0 0 1em;\n opacity: 0.7;\n position: absolute;\n white-space: nowrap;\n }\n\n &__title {\n font-size: 22px;\n font-weight: 700;\n margin: 0 0 1em;\n text-align: center;\n position: relative;\n }\n}\n\n.clock_analog {\n border: 1px solid #000;\n border-radius: 50%;\n height: 200px;\n position: relative;\n width: 200px;\n z-index: 1;\n\n &::after {\n background-color: #000;\n border-radius: 50%;\n content: \"\";\n height: 8px;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%,-50%);\n width: 8px;\n z-index: 5;\n }\n}\n\n.clock_arrow {\n background-color: #000;\n border-radius: 10px;\n position: absolute;\n transform-origin: bottom;\n width: 3px;\n\n &__hours {\n left: 48%;\n top: 25%;\n height: 25%;\n width: 8px;\n z-index: 1;\n }\n\n &__minutes {\n height: 35%;\n left: 48.5%;\n top: 16%;\n z-index: 2;\n }\n\n &__seconds {\n background-color: $c_main;\n height: 40%;\n left: 48.5%;\n top: 10%;\n z-index: 3;\n }\n}\n\n.clock_digital {\n font-size: 16px;\n font-weight: 700;\n margin: 1em 0 0;\n text-align: center;\n}\n\n.clock_list {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n padding: 0 0 100px;\n}\n\n.clock_number {\n font-size: 16px;\n font-weight: 700;\n padding: 4px;\n position: absolute;\n z-index: 3;\n\n &__3 {\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n\n &__6 {\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n &__9 {\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n\n &__12 {\n left: 50%;\n top: 0;\n transform: translateX(-50%);\n }\n}\n\n.clock_time {\n align-items: center;\n display: flex;\n font-size: 24px;\n font-weight: 700;\n justify-content: center;\n padding: 20px 0;\n}\n</style>","import script from \"./Clock.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Clock.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Clock.vue?vue&type=style&index=0&id=57aae429&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-57aae429\"]])\n\nexport default __exports__","<template>\n <div id=\"contacts\" class=\"contacts js-block-scroll\">\n <h2>Contacts</h2>\n\n <p class=\"text-center\">\n Contact with me and you will get fast, multilingual website with clean code.\n </p>\n\n <div class=\"contacts__content\">\n <ul class=\"contacts_links\">\n <li class=\"contacts_links__item\" v-for=\"(contactsLink) in contactsLinks\" :key=\"contactsLink.href\">\n <a class=\"contacts_links__link\" :href=\"contactsLink.href\" target=\"_blank\">\n <img class=\"contacts_links__img\" :src=\"contactsLink.icon\" alt=\"\">\n <span>{{ contactsLink.title }}</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script setup>\nimport {email, phone} from '../assets/js/config'\n\nconst contactsLinks = [\n {href: 'mailto:' + email, icon: require('../assets/i/icons/email.svg'), title: email},\n {href: '//t.me/dfoxweb', icon: require('../assets/i/icons/telegram.svg'), title: '@dfoxweb'},\n {href: 'tel:' + phone.replace(/[()-]/g, '').replaceAll(' ', ''), icon: require('../assets/i/icons/phone.svg'), title: phone}\n]\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.contacts {\n color: $c_text;\n margin: 0 auto;\n max-width: 980px;\n padding: $spacer * 3 $spacer;\n position: relative;\n transition: $transition;\n width: 100%;\n z-index: 3;\n\n &__content {\n margin: 0 auto;\n max-width: 300px;\n padding: 0 0 $spacer;\n width: 100%;\n }\n\n &__wrap {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n padding: 73px 23px 0;\n }\n}\n\n.contacts_links {\n font-size: 20px;\n margin: 30px 0;\n\n &__img {\n display: block;\n left: 0;\n position: absolute;\n top: 0;\n max-width: 24px;\n width: 100%;\n }\n\n &__item {\n display: block;\n margin: 0 0 11px;\n position: relative;\n\n &:last-child {\n margin: 0;\n }\n }\n\n &__link {\n align-items: center;\n color: #000;\n display: flex;\n min-height: 23px;\n padding: 0 0 0 40px;\n position: relative;\n text-decoration: none;\n width: 100%;\n\n &:hover {\n text-decoration: none;\n }\n }\n}\n</style>","import script from \"./Contacts.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Contacts.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Contacts.vue?vue&type=style&index=0&id=61500cee&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-61500cee\"]])\n\nexport default __exports__","const svgInline = () => {\n const images = document.querySelectorAll('.js-svg-inline')\n\n if (!images) return\n\n images.forEach(image => {\n fetch(image.dataset.src)\n .then(res => res.text())\n .then(data => {\n const parser = new DOMParser()\n const svg = parser.parseFromString(data, 'image/svg+xml').querySelector('svg')\n\n if (!svg) return\n\n if (image.id) svg.id = image.id\n\n if (image.className) svg.classList = image.classList\n\n svg.classList.remove('js-svg-inline')\n\n if (!image.parentNode) return\n\n image.parentNode.replaceChild(svg, image)\n })\n .catch(error => console.error(error))\n })\n}\n\nexport default svgInline","<template>\n <span :data-src=\"require('../assets/i/icons/logo_4.svg')\" class=\"paw js-svg-inline\"></span>\n</template>\n\n<script setup>\nimport svgInline from '../assets/js/svgInline'\nimport {onMounted} from 'vue'\n\nonMounted (() => {\n svgInline()\n})\n</script>\n\n<style lang=\"scss\">\n@use '../assets/styles/vars' as *;\n\n@keyframes pawFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes pawNail {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.paw {\n display: inline-block;\n height: 330px;\n margin: 70px 0 25px;\n position: relative;\n width: 330px;\n\n &__item {\n fill: #fff;\n opacity: 0;\n transition: $transition;\n\n &--bottom {\n animation: 2s pawFadeIn forwards;\n animation-delay: .9s;\n }\n\n &--finger_1 {\n animation: 2s pawFadeIn forwards;\n animation-delay: 1.1s;\n }\n\n &--finger_2 {\n animation: 2s pawFadeIn forwards;\n animation-delay: 1.3s;\n }\n\n &--finger_3 {\n animation: 2s pawFadeIn forwards;\n animation-delay: 1.5s;\n }\n\n &--finger_4 {\n animation: 2s pawFadeIn forwards;\n animation-delay: 1.7s;\n }\n\n &--nail_1,\n &--nail_2,\n &--nail_3,\n &--nail_4 {\n animation: .5s pawNail forwards;\n animation-delay: 3.5s;\n transform: translateY(10%);\n }\n }\n\n @media #{$mobile} {\n height: 290px;\n width: 290px;\n }\n}\n</style>","import script from \"./Paw.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Paw.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Paw.vue?vue&type=style&index=0&id=44e76644&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","const logoCanvas = () => {\n const canvas = document.querySelector('.js-home-block-desc')\n const ctx = canvas.getContext('2d')\n const textStr = 'FOXARTBOX'\n\n const canvasH = canvas.height = canvas.clientHeight\n const canvasW = canvas.width = canvas.clientWidth\n\n const grad = ctx.createLinearGradient(0,0,canvasW,0)\n grad.addColorStop(0, '#640d6b')\n grad.addColorStop(1, '#ee0979')\n\n const windowWidth = window.innerWidth\n\n let fontSize = 100\n\n if (windowWidth < 660) {\n fontSize = 50\n }\n else if (windowWidth < 980) {\n fontSize = 70\n }\n\n ctx.font = '700 ' + fontSize + 'px Arial, Helvetica, sans-serif'\n ctx.fillStyle = grad\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n ctx.strokeStyle = '#000'\n ctx.lineWidth = 1\n\n ctx.fillText(textStr , canvasW / 2, canvasH / 2)\n ctx.strokeText(textStr , canvasW / 2, canvasH / 2)\n}\n\nexport default logoCanvas","const randomSlogan = () => {\n document.querySelectorAll('.js-random-slogan').forEach((e) => {\n const delay = 4000\n\n const randomSlogan = () => {\n const slogans = [\n \"Believe in miracles & JavaScript\",\n \"Earned. Not given\",\n \"Eat. Sleep. Code. Repeat\",\n \"Fast websites\",\n \"Mobile friendly. Only\",\n \"Satisfied client. Always\",\n \"W3C standards\",\n \"Websites support\"\n ]\n\n e.innerHTML = slogans[Math.floor(Math.random() * slogans.length)]\n\n e.classList.remove('active')\n\n setTimeout(() => {\n e.classList.add('active')\n }, delay - 1000)\n }\n\n randomSlogan()\n\n setInterval(function () {\n randomSlogan()\n }, delay)\n })\n}\n\nexport default randomSlogan","<template>\n <div>\n <div class=\"home_block js-home-block\">\n <canvas id=\"projector\" class=\"home_block__bg\" height=\"941\" width=\"1266\" />\n\n <div class=\"home_block__content js-home-block-content\">\n <Paw />\n <canvas class=\"home_block__desc js-home-block-desc\" />\n <div class=\"home_block__slogan js-random-slogan\" />\n <button class=\"btn btn__link js-scroll-to\" type=\"button\" @click.prevent=\"scrollTo('about')\">About me</button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport Paw from './Paw'\nimport imgScroll from '../assets/js/imgScroll'\nimport logoCanvas from '../assets/js/logoCanvas'\nimport randomSlogan from '../assets/js/randomSlogan'\nimport scrollTo from '../assets/js/scrollTo'\nimport {onMounted} from 'vue'\n\nonMounted (() => {\n imgScroll()\n logoCanvas()\n randomSlogan()\n})\n\nscrollTo()\n</script>\n\n<style lang=\"scss\">\n@use '../assets/styles/vars' as *;\n\n.home {\n h1 {\n display: none;\n }\n}\n\n.home_block {\n align-items: center;\n animation: bgGradient 10s ease infinite;\n background: linear-gradient(-45deg, darken($c_theme_cyperpunk, 50%), $c_theme_cyperpunk, $c_gradient_home_start);\n background-size: 400% 400%;\n color: #fff;\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n justify-content: center;\n min-height: 100vh;\n padding: 100px 0;\n perspective: 1000px;\n position: relative;\n text-align: center;\n transition: $transition;\n\n &__bg {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 1;\n }\n\n &__content {\n align-items: center;\n display: flex;\n flex-direction: column;\n position: relative;\n transform-style: preserve-3d;\n width: 100%;\n z-index: 3;\n }\n\n &__desc {\n animation: blur 5s infinite;\n font-size: 98px;\n font-weight: 700;\n height: 110px;\n letter-spacing: 0.05em;\n line-height: 1;\n margin: 0 0 0.25em;\n max-width: 660px;\n position: relative;\n text-transform: uppercase;\n width: 100%;\n transition: $transition;\n\n @media #{$tablet} {\n height: 90px;\n max-width: 500px;\n }\n\n @media #{$mobile} {\n height: 60px;\n max-width: 320px;\n }\n }\n\n &__slogan {\n font-size: 29px;\n margin: 0 0 1.4em;\n min-height: 39px;\n opacity: 1;\n text-transform: uppercase;\n transition: all 1s ease-in-out;\n\n &.active {\n opacity: 0;\n transition: all 1s ease-in-out;\n }\n\n @media #{$tablet} {\n font-size: 24px;\n }\n\n @media #{$mobile} {\n font-size: 16px;\n }\n }\n\n @media #{$mobile} {\n min-height: 0;\n }\n}\n</style>","import script from \"./HomeBlock.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HomeBlock.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HomeBlock.vue?vue&type=style&index=0&id=3f1d5fbb&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div id=\"pagespeed\" class=\"carousel_wrap js-block-scroll\">\n <h2>PageSpeed</h2>\n\n <carousel :autoplay=\"2500\" :i18n=\"{\n 'iconArrowRight': 'Next',\n 'iconArrowLeft': 'Prev',\n }\" :transition=\"500\" :wrap-around=\"true\">\n <slide v-for=\"slide in pageSpeedSlides\" :key=\"slide\">\n <span :data-src=\"slide.img\" :title=\"slide.title\" class=\"pagespeed_slide js-img-bg\"></span>\n </slide>\n\n <template #addons>\n <pagination />\n <navigation>\n <template #next></template>\n <template #prev></template>\n </navigation>\n </template>\n </carousel>\n </div>\n</template>\n\n<script>\n// examples https://ismail9k.github.io/vue3-carousel/examples.html\nimport {Carousel, Navigation, Pagination, Slide} from 'vue3-carousel'\n\nexport default {\n name: 'Page Speed',\n components: {\n Carousel,\n Navigation,\n Pagination,\n Slide\n },\n data() {\n return {\n pageSpeedSlides: [\n {href: '/', img: require('../assets/i/pagespeed/1.png'), title: 'Foxartbox'},\n {href: '//villathassos.com/', img: require('../assets/i/pagespeed/6.png'), title: 'Villa Thassos'},\n {href: '//algatech.net/', img: require('../assets/i/pagespeed/3.png'), title: 'Algatech'},\n {href: '', img: require('../assets/i/pagespeed/4.png'), title: 'Foxartbox'},\n // {href: '//brokertop.ru/', img: require('../assets/i/pagespeed/2.png'), title: 'Brokertop'},\n ]\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n@use '../assets/styles/vars' as *;\n\n.carousel {\n margin: 0 auto;\n max-width: 800px;\n\n &__liveregion {\n display: none;\n }\n\n &__next,\n &__prev {\n background-color: #000;\n border-radius: 50%;\n height: 70px;\n margin: 0;\n opacity: .3;\n transition: $transition;\n width: 70px;\n\n &:hover {\n opacity: 1;\n }\n\n &::after,\n &::before {\n background-color: #fff;\n border-radius: 4px;\n content: \"\";\n height: 4px;\n left: 23px;\n position: absolute;\n width: 30px;\n }\n\n &::after {\n top: 23px;\n transform: rotate(45deg);\n }\n\n &::before {\n top: 43px;\n transform: rotate(-45deg);\n }\n }\n\n &__next {\n background-color: #000;\n }\n\n &__prev {\n background-color: #000;\n\n &::after,\n &::before {\n left: 17px;\n }\n\n &::after {\n transform: rotate(-45deg);\n }\n\n &::before {\n transform: rotate(45deg);\n }\n }\n\n &__pagination {\n margin: 3rem 0 0;\n }\n\n &__pagination-button {\n border: 1px solid rgba(#000, .9);\n border-radius: 50%;\n height: 2rem;\n margin: 0 .5rem;\n transition: $transition;\n width: 2rem;\n\n &::after {\n display: none;\n }\n\n &--active {\n background-color: #000;\n }\n }\n}\n\n.carousel_wrap {\n padding: 7rem 0 0;\n}\n\n.pagespeed_slide {\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n display: block;\n width: 100%;\n\n &::after {\n content: \"\";\n display: block;\n padding: 60% 0 0;\n position: relative;\n }\n}\n\n</style>","import { render } from \"./PageSpeed.vue?vue&type=template&id=5d23cd9b\"\nimport script from \"./PageSpeed.vue?vue&type=script&lang=js\"\nexport * from \"./PageSpeed.vue?vue&type=script&lang=js\"\n\nimport \"./PageSpeed.vue?vue&type=style&index=0&id=5d23cd9b&lang=scss\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div id=\"projects\" class=\"js-block-scroll\">\n <h2>Projects</h2>\n\n <div class=\"wrap2\">\n <div class=\"projects_list\">\n <button\n v-for=\"project in projects\"\n :key=\"project.name\"\n :style=\"'background-image: url(' + project.mainImg + ');'\"\n class=\"projects_list__link\"\n @click=\"popupProjectShow(project.title, project.price, project.desc, project.href, project.images)\"\n >\n <span class=\"projects_list__title\">{{ project.name }}</span>\n <span class=\"projects_list__price\">{{ project.price }}</span>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"popup js-popup\">\n <div class=\"popup__bg\" @click=\"popupHide()\"></div>\n\n <div class=\"popup__content_wrap\">\n <button class=\"btn btn__close\" type=\"button\" @click=\"popupHide()\"></button>\n\n <div class=\"popup__content js-popup-content\"></div>\n </div>\n </div>\n</template>\n\n<script>\nimport {popupHide, popupProjectShow, popupShow} from '../assets/js/popup'\n\nexport default {\n name: 'Projects',\n data() {\n return {\n projects: [\n {\n name: 'Tatyana Voilokova',\n desc: 'Welcome to Tatyana Voilkova Photography, where moments come to life in stunning images. She is passionate about freezing time, creating memories, and telling stories through the art of photography.',\n href: 'tatyanavoilokova.com',\n id: 1,\n mainImg: require('../assets/i/projects/tatyanavoilokova/0.jpg'),\n price: '1500 € | 3 weeks',\n title: 'Tatyana Voilokova',\n images: [\n {src: require('../assets/i/projects/tatyanavoilokova/1.jpg')},\n {src: require('../assets/i/projects/tatyanavoilokova/2.jpg')},\n {src: require('../assets/i/projects/tatyanavoilokova/3.jpg')},\n {src: require('../assets/i/projects/tatyanavoilokova/4.jpg')},\n {src: require('../assets/i/projects/tatyanavoilokova/5.jpg')},\n {src: require('../assets/i/projects/tatyanavoilokova/6.jpg')}\n ]\n },\n {\n name: 'Brokertop',\n desc: 'Rent or sale commercial and private objects of real estate.',\n href: 'brokertop.ru',\n id: 5,\n mainImg: require('../assets/i/projects/brokertop/0.jpg'),\n price: '5000 € | 3 months',\n title: 'Brokertop | Real estate agency',\n images: [\n {src: require('../assets/i/projects/brokertop/1.jpg')},\n {src: require('../assets/i/projects/brokertop/2.jpg')},\n {src: require('../assets/i/projects/brokertop/3.jpg')}\n ]\n },\n {\n name: 'Chocolana',\n desc: 'Website for the pastry shop «Chocolana» with the ability to create a personalized chocolate set. Food photography, design and programming.',\n href: 'chocolana.com',\n id: 4,\n mainImg: require('../assets/i/projects/chocolana/0.jpg'),\n price: '3500 € | 3 months',\n title: 'Chocolana online shop',\n images: [\n {src: require('../assets/i/projects/chocolana/1.jpg')},\n {src: require('../assets/i/projects/chocolana/2.jpg')},\n {src: require('../assets/i/projects/chocolana/3.jpg')},\n {src: require('../assets/i/projects/chocolana/4.jpg')},\n {src: require('../assets/i/projects/chocolana/5.jpg')},\n {src: require('../assets/i/projects/chocolana/6.jpg')},\n {src: require('../assets/i/projects/chocolana/7.jpg')}\n ]\n },\n {\n name: 'Villabansko',\n desc: 'Elegant design solution for a premium villa booking. Web-site presents facilities and gives an overview of the main features.',\n href: 'villabansko.com',\n id: 3,\n mainImg: require('../assets/i/projects/villabansko/0.jpg'),\n price: '2500 € | 1 month',\n title: 'Villa Pirin Golf',\n images: [\n {src: require('../assets/i/projects/villabansko/1.jpg')},\n {src: require('../assets/i/projects/villabansko/2.jpg')}\n ]\n },\n {\n name: 'Villathassos',\n desc: 'Premium villa on Thassos for sale.',\n href: 'villathassos.com',\n id: 2,\n mainImg: require('../assets/i/projects/villathassos/0.jpg'),\n price: '2500 € | 1 month',\n title: 'Villa at Thassos',\n images: [\n {src: require('../assets/i/projects/villathassos/1.jpg')},\n {src: require('../assets/i/projects/villathassos/2.jpg')},\n {src: require('../assets/i/projects/villathassos/3.jpg')},\n {src: require('../assets/i/projects/villathassos/4.jpg')}\n ]\n },\n {\n name: 'P3week',\n desc: 'International forum web site on the topic of cooperation between the state and private business (public-private enterprise). A redesign of the existing site was made in order to improve usability.',\n href: 'p3week.ru',\n id: 1,\n mainImg: require('../assets/i/projects/p3week/0.jpg'),\n price: '7800 € | 4 months',\n title: 'P3week forum',\n images: [\n {src: require('../assets/i/projects/p3week/1.jpg')},\n {src: require('../assets/i/projects/p3week/2.jpg')},\n {src: require('../assets/i/projects/p3week/3.jpg')},\n {src: require('../assets/i/projects/p3week/4.jpg')},\n {src: require('../assets/i/projects/p3week/5.jpg')},\n {src: require('../assets/i/projects/p3week/6.jpg')},\n {src: require('../assets/i/projects/p3week/7.jpg')}\n ]\n }\n ]\n }\n },\n methods: {\n popupHide,\n popupProjectShow,\n popupShow\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../assets/styles/vars' as *;\n\n.project {\n color: #000;\n position: relative;\n\n &__content {\n min-height: 600px;\n padding: 100px 0 30px;\n position: relative;\n\n &::after,\n &::before {\n content: \"\";\n left: 0;\n position: absolute;\n width: 100%;\n z-index: -1;\n }\n\n &::after {\n bottom: 0;\n height: 45%;\n }\n\n &::before {\n height: 55%;\n top: 0;\n }\n }\n\n &__desc {\n font-size: 20px;\n line-height: 1.7;\n padding: 30px 0 0;\n\n @media #{$tablet} {\n font-size: 16px;\n }\n }\n\n &__img {\n display: block;\n width: 100%;\n }\n\n &__link {\n color: $c_main;\n\n &:hover {\n color: $c_link_hover;\n }\n }\n\n &__price {\n color: $c_shadow;\n }\n\n &__title {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n\n @media #{$tablet} {\n h3 {\n padding: 0 0 .3em;\n width: 100%;\n }\n }\n }\n}\n\n.project_images {\n &__item {\n display: block;\n margin: 30px auto;\n }\n}\n\n.project_more {\n align-items: center;\n display: none;\n flex-direction: column;\n min-height: calc(100vh - 70px);\n position: relative;\n\n &::after {\n animation: loading 2s linear infinite;\n background: url(#{$icons}/loading.svg) no-repeat center scroll transparent;\n background-size: contain;\n content: \"\";\n display: block;\n height: 40px;\n left: 50%;\n margin: -20px 0 0 -20px;\n position: absolute;\n top: 50%;\n width: 40px;\n z-index: -1;\n }\n\n &.active {\n display: flex;\n }\n\n .owl-carousel {\n min-height: calc(100vh - 70px);\n\n button {\n &.owl-dot {\n border: 2px solid #000;\n border-radius: 50%;\n height: 16px;\n margin: 0 8px;\n position: relative;\n width: 16px;\n\n span {\n border: 1px solid #fff;\n border-radius: 50%;\n display: block;\n height: 18px;\n left: -3px;\n position: absolute;\n top: -3px;\n width: 18px;\n }\n\n &.active {\n background-color: #000;\n }\n }\n }\n }\n\n .owl-dots {\n bottom: 30px;\n display: flex;\n justify-content: center;\n left: 0;\n position: absolute;\n width: 100%;\n z-index: 3;\n }\n\n .owl-item {\n background-color: #fff;\n min-height: calc(100vh - 70px);\n }\n\n .owl-nav {\n position: absolute;\n }\n\n .owl-stage {\n min-height: calc(100vh - 70px);\n }\n\n .owl-stage-outer {\n min-height: calc(100vh - 70px);\n }\n\n @media #{$tablet} {\n min-height: 340px;\n\n .owl-carousel,\n .owl-item,\n .owl-stage,\n .owl-stage-outer {\n min-height: 340px;\n }\n }\n}\n\n.project_more_item {\n background-position: center;\n background-repeat: no-repeat;\n background-size: contain;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 1;\n}\n\n.projects_list {\n display: grid;\n gap: 2rem;\n grid-template-columns: repeat(3, 1fr);\n position: relative;\n\n &__link {\n background-repeat: no-repeat;\n background-size: cover;\n display: block;\n overflow: hidden;\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n padding: 50% 0 0;\n position: relative;\n }\n\n &::before {\n background-color: #000;\n content: \"\";\n height: 100%;\n left: 0;\n opacity: 0;\n position: absolute;\n top: 0;\n transition: $transition;\n width: 100%;\n z-index: 3;\n }\n\n &:hover {\n &::before {\n opacity: .8;\n }\n\n .projects_list {\n &__title {\n letter-spacing: .05em;\n opacity: 1;\n }\n }\n }\n }\n\n &__price {\n background-color: $c_main;\n border-bottom: 2px solid #fff;\n border-left: 2px solid #fff;\n color: #fff;\n font-size: 1.1rem;\n padding: .5em 1em;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 3;\n }\n\n &__title {\n color: #fff;\n display: block;\n font-size: 1.5rem;\n font-weight: 800;\n left: 50%;\n letter-spacing: 10em;\n opacity: 0;\n position: absolute;\n text-transform: uppercase;\n top: 50%;\n transform: translate(-50%,-50%);\n transition: $transition;\n white-space: nowrap;\n z-index: 5;\n }\n\n @media #{$mobile} {\n grid-template-columns: 1fr;\n }\n}\n</style>","// hide popup\nconst popupHide = () => {\n document.querySelector('html').classList.remove('popup_active')\n}\n\n// show popup and put content from template\nconst popupShow = (id) => {\n const $contentData = document.querySelector('.js-project-desc[data-popup=\"' + id + '\"]')\n const $popupContent = document.querySelector('.js-popup-content')\n\n if (!$popupContent || !$contentData) return\n\n $popupContent.innerHTML = $contentData.innerHTML\n\n // show popup\n document.querySelector('html').classList.add('popup_active')\n}\n\n// show project popup with data at link\nconst popupProjectShow = (title, price, desc, href, images) => {\n const $popupContent = document.querySelector('.js-popup-content')\n\n if (!$popupContent) return\n\n let imagesList = ''\n const projectPrice = price ? '<div class=\"project__price\">' + price + '</div>' : ''\n const description = desc ? '<p class=\"project__desc\">' + desc + '</p>' : ''\n const link = href ? '<p><a class=\"project__link\" href=\"//' + href + '\" target=\"_blank\">www.' + href + '</a></p>' : ''\n\n images.forEach((e) => {\n imagesList += '<img class=\"project_images__item\" src=\"' + e.src + '\" alt=\"\" loading=\"lazy\">'\n })\n\n $popupContent.innerHTML = '<div class=\"project__title\">' +\n '<h3>' + title + '</h3>' +\n projectPrice +\n '</div>' +\n description +\n link +\n '<div class=\"project_images\">' + imagesList + '</div>'\n\n // show popup\n document.querySelector('html').classList.add('popup_active')\n}\n\nexport {popupHide, popupProjectShow, popupShow}","import { render } from \"./Projects.vue?vue&type=template&id=2357f63b&scoped=true\"\nimport script from \"./Projects.vue?vue&type=script&lang=js\"\nexport * from \"./Projects.vue?vue&type=script&lang=js\"\n\nimport \"./Projects.vue?vue&type=style&index=0&id=2357f63b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/ntt/Documents/projects/foxartbox.com/www/fab/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2357f63b\"]])\n\nexport default __exports__","<template>\n <div class=\"content\">\n <HomeBlock />\n <About />\n <Projects />\n <PageSpeed />\n <Contacts />\n <Clock />\n </div>\n</template>\n\n<script setup>\nimport About from '../components/About'\nimport Clock from '../components/Clock'\nimport Contacts from '../components/Contacts'\nimport HomeBlock from '../components/HomeBlock'\nimport PageSpeed from '../components/PageSpeed'\nimport Projects from '../components/Projects'\n\ndocument.title = 'Home | Foxartbox'\n</script>","import script from \"./Home.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Home.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"together\">\n <div class=\"together__content\">\n <h1>Together</h1>\n\n <div class=\"together_timer\">\n <div class=\"together_timer__item\">\n {{ timeElapsed.years }}<span class=\"together_timer__value\">years</span>\n </div>\n\n <div class=\"together_timer__item\">\n {{ timeElapsed.days }}<span class=\"together_timer__value\">days</span>\n </div>\n\n <div class=\"together_timer__item\">\n {{ timeElapsed.hours }}<span class=\"together_timer__value\">hours</span>\n </div>\n\n <div class=\"together_timer__item\">\n {{ timeElapsed.minutes }}<span class=\"together_timer__value\">minutes</span>\n </div>\n\n <div class=\"together_timer__item\">\n {{ timeElapsed.seconds }}<span class=\"together_timer__value\">seconds</span>\n </div>\n </div>\n </div>\n\n <video class=\"together__video\" autoplay muted loop>\n <source src=\"../assets/i/bg_video.mp4\" type=\"video/mp4\">\n </video>\n </div>\n\n <div v-if=\"isVisible\" class=\"together__preview\" @click=\"playAudio\">ENTER</div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from \"vue\"\ndocument.title = 'Together4ever'\n\nconst startDate = new Date(\"2022-10-10T00:00:00\")\nconst timeElapsed = ref('')\nlet timer = null\n\nconst updateTime = () => {\n const now = new Date()\n let diff = Math.floor((now - startDate) / 1000)\n\n const years = Math.floor(diff / (365 * 24 * 3600))\n diff %= 365 * 24 * 3600\n\n const days = Math.floor(diff / (24 * 3600))\n diff %= 24 * 3600\n\n const hours = Math.floor(diff / 3600)\n diff %= 3600\n\n const minutes = Math.floor(diff / 60)\n const seconds = diff % 60\n\n timeElapsed.value = { years, days, hours, minutes, seconds }\n}\n\nconst isVisible = ref(true)\n\nonMounted(() => {\n updateTime()\n timer = setInterval(updateTime, 1000)\n})\n\nonUnmounted(() => {\n clearInterval(timer)\n})\n\nconst audio = new Audio(require('../assets/i/after_dark.mp3'))\naudio.type = 'audio/mp3'\naudio.loop = true\n\nconst playAudio = () => {\n audio.play()\n isVisible.value = false\n}\n</script>\n\n<style lang=\"scss\">\n.together {\n align-content: center;\n align-items: center;\n color: #fff;\n display: flex;\n flex-direction: column;\n height: 100%;\n height: 100vh;\n justify-content: center;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 1;\n\n h1 {\n letter-spacing: 0.5em;\n }\n\n &__content {\n position: relative;\n z-index: 9;\n }\n\n &_timer {\n display: flex;\n font-size: 7rem;\n font-weight: 700;\n text-align: center;\n text-shadow: 0 0 6px #000;\n\n &__item {\n margin: 0 .1em 0 0;\n position: relative;\n }\n\n &__value {\n font-size: .25em;\n font-weight: 400;\n margin: 0 0 0 .1em;\n opacity: .55;\n }\n }\n\n &__preview {\n background-color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 5rem;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 3;\n }\n\n &__video {\n height: 100%;\n object-fit: cover;\n position: absolute;\n left: 0;\n display: block;\n top: 0;\n z-index: 6;\n width: 100%;\n }\n}\n</style>\n","import script from \"./Together.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Together.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Together.vue?vue&type=style&index=0&id=525ddbc0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import {createRouter, createWebHistory} from 'vue-router'\n\nimport Blog from '../views/Blog'\nimport Error404 from '../views/Error404'\nimport Home from '../views/Home'\nimport Together from '../views/Together'\n\nconst routes = [\n {\n component: Blog,\n name: 'Blog',\n path: '/blog'\n },\n {\n component: Error404,\n name: 'Error404',\n path: '/:pathMatch(.*)*'\n },\n {\n component: Home,\n name: 'Home',\n path: '/'\n },\n {\n component: Together,\n name: 'Together',\n path: '/together'\n }\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n sensitive: false\n})\n\nexport default router","import { createApp } from 'vue'\nimport App from './App.vue'\nimport router from './router'\n\ncreateApp(App).use(router).mount('#app')","module.exports = __webpack_public_path__ + \"img/logo_3.d6246a2b.svg\";","module.exports = __webpack_public_path__ + \"img/1.1888e214.jpg\";","module.exports = __webpack_public_path__ + \"img/5.9f514f1b.jpg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./HomeBlock.vue?vue&type=style&index=0&id=3f1d5fbb&lang=scss\"","module.exports = __webpack_public_path__ + \"img/7.fa3094c6.jpg\";","module.exports = __webpack_public_path__ + \"img/1.6964a7b3.jpg\";","module.exports = __webpack_public_path__ + \"img/nuxt.3431a6ca.svg\";","module.exports = __webpack_public_path__ + \"img/inst.d87f27fe.svg\";","module.exports = __webpack_public_path__ + \"img/process_3.8673e4e6.svg\";","module.exports = __webpack_public_path__ + \"img/logo_4_white.b8f40327.svg\";","module.exports = __webpack_public_path__ + \"img/0.d318adf7.jpg\";","module.exports = __webpack_public_path__ + \"img/git.aa4a6709.svg\";","module.exports = __webpack_public_path__ + \"img/macos.2ba362ca.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Clock.vue?vue&type=style&index=0&id=57aae429&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/2.19fe6780.jpg\";","module.exports = __webpack_public_path__ + \"img/joomla.d8aa2e45.svg\";","module.exports = __webpack_public_path__ + \"img/3.f1bd9419.jpg\";","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=09de6389&lang=scss\"","module.exports = __webpack_public_path__ + \"img/netpeak-spider.18b7067f.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Projects.vue?vue&type=style&index=0&id=2357f63b&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/figma.7afd7e4c.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./About.vue?vue&type=style&index=0&id=0588309a&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/hybris.30023878.svg\";","module.exports = __webpack_public_path__ + \"img/python.3255f8df.svg\";","module.exports = __webpack_public_path__ + \"img/react.af5ac421.svg\";","module.exports = __webpack_public_path__ + \"img/logo_3_black.5eededc4.svg\";","module.exports = __webpack_public_path__ + \"img/process_1.a282f62f.svg\";","module.exports = __webpack_public_path__ + \"img/4.9abb22fa.png\";","module.exports = __webpack_public_path__ + \"img/css.64549b8a.svg\";","module.exports = __webpack_public_path__ + \"img/4.1182f173.jpg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ThemeChange.vue?vue&type=style&index=0&id=51209dd3&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/yext.bc7aa8d5.svg\";","module.exports = __webpack_public_path__ + \"img/loading.c12ace2d.svg\";","var map = {\n\t\"./aem.svg\": \"23bb\",\n\t\"./bitrix.svg\": \"3515\",\n\t\"./c++.svg\": \"ec8c\",\n\t\"./confluence.svg\": \"2439\",\n\t\"./css.svg\": \"8ce4\",\n\t\"./docker.svg\": \"414a\",\n\t\"./email.svg\": \"195b\",\n\t\"./fb.svg\": \"4f33\",\n\t\"./figma.svg\": \"792a\",\n\t\"./filezilla.svg\": \"c36f\",\n\t\"./gimp.svg\": \"afea\",\n\t\"./git.svg\": \"6078\",\n\t\"./gulp.svg\": \"f251\",\n\t\"./html.svg\": \"378a\",\n\t\"./hybris.svg\": \"79bf\",\n\t\"./illustrator.svg\": \"d53b\",\n\t\"./indesign.svg\": \"284f\",\n\t\"./inst.svg\": \"5dfa\",\n\t\"./jira.svg\": \"acc4\",\n\t\"./joomla.svg\": \"6e20\",\n\t\"./jquery.svg\": \"352f\",\n\t\"./js.svg\": \"9c00\",\n\t\"./less.svg\": \"eb8a\",\n\t\"./linked.svg\": \"0dd7\",\n\t\"./linux.svg\": \"2157\",\n\t\"./loading.svg\": \"96a0\",\n\t\"./logo.svg\": \"e9c6\",\n\t\"./logo_2.svg\": \"daf3\",\n\t\"./logo_3.svg\": \"56ee\",\n\t\"./logo_3_black.svg\": \"811b\",\n\t\"./logo_4.svg\": \"d0f5\",\n\t\"./logo_4_white.svg\": \"5f25\",\n\t\"./logo_5.svg\": \"e78b\",\n\t\"./logo_5s.svg\": \"ff79\",\n\t\"./macos.svg\": \"60c5\",\n\t\"./mysql.svg\": \"e6ff\",\n\t\"./netpeak-spider.svg\": \"761b\",\n\t\"./nuxt.svg\": \"5d9c\",\n\t\"./opencart.svg\": \"1705\",\n\t\"./oracle.svg\": \"b61d\",\n\t\"./phone.svg\": \"f012\",\n\t\"./photoshop.svg\": \"2262\",\n\t\"./php.svg\": \"532b\",\n\t\"./process_1.svg\": \"8281\",\n\t\"./process_2.svg\": \"d7c3\",\n\t\"./process_3.svg\": \"5f0b\",\n\t\"./process_4.svg\": \"4643\",\n\t\"./process_5.svg\": \"2218\",\n\t\"./process_6.svg\": \"e1fc\",\n\t\"./python.svg\": \"7b0a\",\n\t\"./react.svg\": \"7fa7\",\n\t\"./sass.svg\": \"b1f8\",\n\t\"./skype.svg\": \"297f\",\n\t\"./snow.svg\": \"1976\",\n\t\"./telegram.svg\": \"2abb\",\n\t\"./vue.svg\": \"54f8\",\n\t\"./wordpress.svg\": \"f997\",\n\t\"./xd.svg\": \"00eb\",\n\t\"./yext.svg\": \"9363\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9959\";","module.exports = __webpack_public_path__ + \"img/js.307290cb.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Paw.vue?vue&type=style&index=0&id=44e76644&lang=scss\"","module.exports = __webpack_public_path__ + \"img/1.eb81d663.jpg\";","module.exports = __webpack_public_path__ + \"img/3.2c64e978.jpg\";","module.exports = __webpack_public_path__ + \"img/jira.a397460c.svg\";","module.exports = __webpack_public_path__ + \"img/4.fa681122.jpg\";","module.exports = __webpack_public_path__ + \"img/gimp.782db698.svg\";","module.exports = __webpack_public_path__ + \"img/5.04c513fd.jpg\";","module.exports = __webpack_public_path__ + \"img/6.7429d03c.jpg\";","module.exports = __webpack_public_path__ + \"img/3.67445551.jpg\";","module.exports = __webpack_public_path__ + \"img/sass.e5739ba9.svg\";","module.exports = __webpack_public_path__ + \"img/3.df12dbad.jpg\";","module.exports = __webpack_public_path__ + \"img/oracle.386671e6.svg\";","module.exports = __webpack_public_path__ + \"img/1.aaa714ad.jpg\";","module.exports = __webpack_public_path__ + \"img/3.5129a7d7.jpg\";","module.exports = __webpack_public_path__ + \"img/filezilla.296994a9.svg\";","module.exports = __webpack_public_path__ + \"img/qr_code.c7dc13ca.svg\";","module.exports = __webpack_public_path__ + \"img/avatar.3b9a5201.jpg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Footer.vue?vue&type=style&index=0&id=89157394&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Together.vue?vue&type=style&index=0&id=525ddbc0&lang=scss\"","module.exports = __webpack_public_path__ + \"media/bg_video.9884c1c2.mp4\";","module.exports = __webpack_public_path__ + \"img/1.321f39e9.jpg\";","module.exports = __webpack_public_path__ + \"img/logo_4.0c56cdde.svg\";","module.exports = __webpack_public_path__ + \"img/illustrator.5d573074.svg\";","module.exports = __webpack_public_path__ + \"img/1.da564568.png\";","module.exports = __webpack_public_path__ + \"img/process_2.b2c94f7f.svg\";","module.exports = __webpack_public_path__ + \"img/logo_2.77a74bd7.svg\";","module.exports = __webpack_public_path__ + \"img/6.01a92b5c.jpg\";","module.exports = __webpack_public_path__ + \"img/0.1a7a68b5.jpg\";","module.exports = __webpack_public_path__ + \"img/process_6.bab3898c.svg\";","module.exports = __webpack_public_path__ + \"img/mysql.d348e471.svg\";","module.exports = __webpack_public_path__ + \"img/logo_5.4d6e3033.svg\";","module.exports = __webpack_public_path__ + \"img/logo.9b9399f2.svg\";","module.exports = __webpack_public_path__ + \"img/less.7db3931f.svg\";","module.exports = __webpack_public_path__ + \"img/c++.076decba.svg\";","module.exports = __webpack_public_path__ + \"media/after_dark.9a4ab24e.mp3\";","module.exports = __webpack_public_path__ + \"img/phone.ebd122bc.svg\";","module.exports = __webpack_public_path__ + \"img/gulp.ef7b0ab1.svg\";","module.exports = __webpack_public_path__ + \"img/0.73555a4c.jpg\";","module.exports = __webpack_public_path__ + \"img/1.86373b90.jpg\";","module.exports = __webpack_public_path__ + \"img/6.0c0ec3d6.jpg\";","module.exports = __webpack_public_path__ + \"img/wordpress.bae85200.svg\";","module.exports = __webpack_public_path__ + \"img/3.4b8f9ab2.png\";","module.exports = __webpack_public_path__ + \"img/0.bdaf3873.jpg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Contacts.vue?vue&type=style&index=0&id=61500cee&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/logo_5s.6ffe665c.svg\";"],"sourceRoot":""}