{"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":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,GAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,gECvJTW,EAAOD,QAAU,IAA0B,uB,yECA3CC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,sB,kCCA3C,W,4CCAAC,EAAOD,QAAU,IAA0B,6B,uBCA3CC,EAAOD,QAAU,IAA0B,0B,qBCA3CC,EAAOD,QAAU,IAA0B,yB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,0B,qBCA3CC,EAAOD,QAAU,IAA0B,8B,qBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3CC,EAAOD,QAAU,IAA0B,wB,qBCA3CC,EAAOD,QAAU,IAA0B,+B,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,6B,uBCA3CC,EAAOD,QAAU,IAA0B,0B,uBCA3CC,EAAOD,QAAU,IAA0B,6B,qBCA3CC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,2B,oCCA3C,W,qBCAAC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,4CCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3CC,EAAOD,QAAU,IAA0B,uB,gDCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,wB,uBCA3CC,EAAOD,QAAU,IAA0B,wB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,mOCCX,cAAhB+B,SAAOC,MAAI,iBAAzBC,eAA6CC,GAAAb,SAAA,sBAC7Cc,eAAeC,GACe,cAAhBL,SAAOC,MAAI,iBAAzBC,eAA6CI,GAAAhB,SAAA,2B,UCF/C,MAAMiB,EAAYC,IAChB,IAAKA,EAAI,OAET,MAAMC,EAAIC,SAASC,eAAeH,EAAGI,QAAQ,KAAM,IAAIA,QAAQ,IAAK,KAG/DH,EAOLA,EAAEI,eAAe,CACfC,SAAU,WAPVjB,OAAOkB,SAASC,KAAOR,GAWZD,QCnBf,MAAMU,EAAQ,qBACRC,EAAQ,sB,oXCiCd,MAAMC,EAAc,CAClB,CAAEH,KAAM,gCAAiCI,KAAMC,EAAQ,QAA6BC,MAAO,YAC3F,CAAEN,KAAM,qCAAsCI,KAAMC,EAAQ,QAA+BC,MAAO,c,qlCC9BpG,MAAMC,EAA2B,IAAgB,EAAQ,CAAC,CAAC,YAAY,qBAExD,Q,SCPRC,MAAM,U,EACTC,eAA4C,OAAvCjB,GAAG,MAAMgB,MAAM,mB,YAEfA,MAAM,sB,GAGJA,MAAM,Q,GACLA,MAAM,gB,wBAULA,MAAM,kB,YAGqDC,eAAa,qB,GAAbC,G,iGApBtEC,eA4BM,MA5BNC,EA4BM,CA3BJC,EAEAJ,eAsBM,MAtBNK,EAsBM,CArBJ1B,eAAe2B,GAEfN,eAgBM,MAhBNO,EAgBM,CAfJP,eAQK,KARLQ,EAQK,qBAPHN,eAMKO,2BANkBC,YAAZC,I,iBAAXT,eAMK,MAN8BrC,IAAK8C,EAASd,MAAOE,MAAM,sB,CAC5DC,eAII,KAJAD,MAAK,iBAAAa,OAAYD,EAASpB,KAAOsB,UAAQ,KAAM,MAAQH,YAEnD,uCADLnB,KAAMoB,EAASpB,KAEfuB,QAAK,mBAAUD,WAASF,EAASpB,MAAOsB,sBAAgB,c,eAAOF,EAASd,OAAK,U,QAKpFG,eAIM,MAJNe,EAIM,CAHJf,eAA0J,QAApJD,MAAM,uBAAwBe,QAAK,+BAAUD,WAAS,OAAQA,sBAAgB,e,CAAIb,eAA2D,OAArDgB,IAAKpB,EAAQ,QAAiCqB,IAAI,I,YAEhJjB,eAAiF,OAA5ED,MAAM,yBAA0Be,QAAK,oBAAED,+C,OAIhDb,eAAyG,KAArGT,KAAI,OAAWmB,QAAMvB,QAAQ,SAAU,IAAI+B,WAAW,IAAK,IAAKnB,MAAM,iB,eAAmBW,SAAK,OAGpGV,eAA0D,OAArDD,MAAM,eAAgBe,QAAK,oBAAED,kDC3BtC,MAAMM,EAAeC,IACnBnC,SAASoC,cAAc,QAAQC,QAAQC,MAAQH,EAE/CI,aAAaC,QAAQ,QAASL,IAGjBD,QCNf,MAAMO,EAAwBA,KAAM,IAAAC,EAClC1C,SAASoC,cAAc,QAAQC,QAAQC,MAAqC,QAAhCI,EAAGH,aAAaI,QAAQ,gBAAQ,IAAAD,IAAI,IAGnED,Q,0FCOfA,IAEA,MAAMG,EAAa,CACjB,CAAC/E,KAAM,iBAAyB+C,MAAO,gBAAyBE,MAAO,KACvE,CAACjD,KAAM,wBAAyB+C,MAAO,sBAAyBE,MAAO,KACvE,CAACjD,KAAM,kBAAyB+C,MAAO,kBAAyBE,MAAO,KACvE,CAACjD,KAAM,eAAyB+C,MAAO,eAAyBE,MAAO,KACvE,CAACjD,KAAM,eAAyB+C,MAAO,eAAyBE,MAAO,M,8YCbzE,MAAM,EAA2B,IAAgB,EAAQ,CAAC,CAAC,YAAY,qBAExD,QCRf,MAAM+B,EAAYA,KAChB,MAAMC,EAAeA,KACnB9C,SAAS+C,iBAAiB,kBAAkBC,QAASjD,IACnD,GAAIZ,OAAO8D,YAAc9D,OAAO+D,aAAenD,EAAEoD,wBAAwBC,IAAK,CAC5ErD,EAAEsD,UAAUC,OAAO,iBAGnB,MAAMC,EAAgBvD,SAASwD,cAAc,OAC7C,IAAIC,EAAkB1D,EAAE2D,UACxB,MAAMC,EAAgB5D,EAAEsC,QAAQN,IAEhC,IAAK4B,EAAM,OAGPF,GACFA,EAAWG,MAAM,KAAKZ,QAASrF,IAC7B4F,EAAKF,UAAUQ,IAAIlG,KAIvB4F,EAAKxB,IAAM4B,EAEX,MAAMG,EAAS/D,EAAEa,MAEbkD,IAEFP,EAAKvB,IAAM8B,EAGXP,EAAK3C,MAAQkD,GAIf/D,EAAEgE,MAAMR,GAGRxD,EAAEuD,aAKRnE,OAAO6E,iBAAiB,oBAAqBlB,GAC7C3D,OAAO6E,iBAAiB,SAAUlB,GAClC3D,OAAO6E,iBAAiB,SAAUlB,GAElCA,KAGaD,QChDf,MAAMoB,EAAQA,KACZ,MAAMC,EAAcA,KAClBlE,SAAS+C,iBAAiB,cAAcC,QAASjD,IAC/C,GAAIZ,OAAO8D,YAAc9D,OAAO+D,aAAenD,EAAEoE,UAAW,CAC1DpE,EAAEsD,UAAUC,OAAO,aACnB,MAAMc,EAASrE,EAAEsC,QAAQN,IACrBqC,IAAQrE,EAAEsE,MAAMC,gBAAkB,OAASF,EAAS,SAK9DF,IAEA/E,OAAO6E,iBAAiB,oBAAqBE,GAC7C/E,OAAO6E,iBAAiB,SAAUE,GAClC/E,OAAO6E,iBAAiB,SAAUE,IAGrBD,QCjBf,MAAMM,EAAmBA,KACvBvE,SAASoC,cAAc,QAAQiB,UAAUmB,OAAO,0BAGnCD,QP0CA,I,UAAA,CACb1G,KAAM,SACN4G,WAAY,CACVC,eAEFC,UACExF,OAAO6E,iBAAiB,SAAUY,KAAKC,eAKzCpJ,OACE,MAAO,CACLqJ,SAAW,GACXC,UAAW,CACT,CAACnE,MAAO,OAAgBN,KAAM,SAC9B,CAACM,MAAO,WAAgBN,KAAM,WAC9B,CAACM,MAAO,WAAgBN,KAAM,cAC9B,CAACM,MAAO,YAAiBN,KAAM,eAE/B,CAACM,MAAO,WAAgBN,KAAM,eAGhCE,UAGJwE,QAAS,CACPT,mBACA1E,WAGAgF,eAEE,GAAiC,MAA7B1F,OAAOkB,SAAS4E,SAAkB,OAEtC,IAAIC,EAAU,MACVC,EAAiB,EAErBnF,SAAS+C,iBAAiB,oBAAoBC,QAAQ,CAACjD,EAAGqF,EAAOC,KAC/DF,IAGIhG,OAAOmG,QAAUvF,EAAEoE,UAAY,MACjCe,EAAkBnF,EAAEwF,aAAa,MACjCX,KAAKE,SAAaI,GAIhBC,IAAmBE,EAAMpJ,SAE3BuJ,QAAQC,UAAU,KAAM,KAAM,KAAOP,GAGrClF,SAAS+C,iBAAiB,oBAAoBC,QAAS0C,IACrDA,EAAKrC,UAAUC,OAAO,YAIxBtD,SAASoC,cAAc,eAAeA,cAAc,YAAc8C,EAAU,MAAM7B,UAAUQ,IAAI,UAGhG7D,SAASY,MAAQsE,EAAQS,OAAO,GAAGC,cAAgBV,EAAQ7F,MAAM,GAAK,mBAK5Ea,QAAQH,EAAG8F,EAAKC,GACd,OAAO/F,EAAE6D,MAAMiC,GAAKE,KAAKD,IAG3BE,uBACE,MAAMC,EAAejG,SAASoC,cAAc,0BAA4BjD,OAAOkB,SAAS4E,SAAW,MAE9FgB,GAELA,EAAa5C,UAAUQ,IAAI,YAG/BqC,UACErD,IACAoB,IAGAW,KAAKoB,wBAMPG,YACEhH,OAAOiH,oBAAoB,SAAUxB,KAAKC,eAE5CwB,SAAU,CAERC,KAAM,CACJ,CACEzI,KAAM,cACN0I,QAAS,0D,UQzIjB,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAAS,KAErD,UbCA,IACb1I,KAAM,MACN4G,WAAY,CACV+B,SACAC,Y,UcPJ,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAASC,KAErD,U,uBCRT5F,MAAM,iB,GACVC,eAIM,OAJDD,MAAM,QAAM,CAChBC,eAAa,UAAT,QAEJA,eAAgC,SAA7B,+BAAyB,G,IAH7BI,I,iDADDF,eAMM,MANNC,GAMM,IAMQ,QACduD,WAAY,GAOZE,UACC3E,SAASY,MAAQ,oBAElBoE,QAAS,CACR2B,UACC,MAAMC,EAAgBjG,UAMtBkG,QAAQC,IAAIF,EAAcG,UAG5Bb,aC9BD,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAAS,MAErD,U,UCNTpF,MAAM,mB,GACVC,eAA2C,MAAvCD,MAAM,eAAc,kBAAc,G,IAAtCK,I,iDADDF,eAEM,MAFNC,GAEM,IAIQ,QACdrD,KAAM,YCHP,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAAS,MAErD,U,8mCCiDf,MAAMmJ,EAAcC,gBAAI,GAElBC,EAAa,CACjB,CAACtG,MAAO,KAAUuG,IAAKxG,EAAQ,QAAmC+E,KAAM,yBACxE,CAAC9E,MAAO,OAAUuG,IAAKxG,EAAQ,QAAmC+E,KAAM,gCACxE,CAAC9E,MAAO,MAAUuG,IAAKxG,EAAQ,QAAmC+E,KAAM,+BACxE,CAAC9E,MAAO,QAAUuG,IAAKxG,EAAQ,QAAmC+E,KAAM,6CAGpE0B,EAAgB,CACpB,CAACxG,MAAO,2BAA4BuG,IAAKxG,EAAQ,QAA8B+E,KAAM,6DACrF,CAAC9E,MAAO,iBAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,0CACrF,CAAC9E,MAAO,kBAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,2CACrF,CAAC9E,MAAO,oBAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,6CACrF,CAAC9E,MAAO,SAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,wEACrF,CAAC9E,MAAO,aAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,iDACrF,CAAC9E,MAAO,SAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,qBACrF,CAAC9E,MAAO,YAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,4BACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,gCACrF,CAAC9E,MAAO,MAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,+BACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,mCACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,2CACrF,CAAC9E,MAAO,SAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,kCACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,sDACrF,CAAC9E,MAAO,QAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,iCACrF,CAAC9E,MAAO,QAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,iCACrF,CAAC9E,MAAO,QAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,iCACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,eACrF,CAAC9E,MAAO,WAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,oCACrF,CAAC9E,MAAO,MAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,+BACrF,CAAC9E,MAAO,SAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,yDACrF,CAAC9E,MAAO,QAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,gBACrF,CAAC9E,MAAO,aAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,4CACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,sDACrF,CAAC9E,MAAO,cAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,sCACrF,CAAC9E,MAAO,MAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,gBACrF,CAAC9E,MAAO,YAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,qCACrF,CAAC9E,MAAO,OAAqBuG,IAAKxG,EAAQ,QAAqC+E,KAAM,8BAIjF2B,EAAkBA,KACtBL,EAAY1I,OAAS0I,EAAY1I,O,opCC5FnC,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,YAAY,qBAExD,UCPf,MAAMgJ,GAAUA,KACd,MAAMC,EAAUvH,SAAS+C,iBAAiB,aAE1C,IAAKwE,EAAS,OAEd,MAAMC,EAAQ,IAAIC,KACZC,EAAeF,EAAMG,gBACrBC,EAAeJ,EAAMK,gBAE3BN,EAAQvE,QAASjD,IACf,MAAM+H,EAAO/H,EAAEsC,QAAQ0F,IAAMhI,EAAEsC,QAAQ0F,IAAM,EAE7C,IAAIC,EAAaR,EAAMS,gBAAiBH,EAEpCE,EAAa,GACfA,GAA0B,GAEnBA,EAAa,IACpBA,GAA0B,KAIxBA,EAAa,IAAMA,EAAa,IAClCjI,EAAEsD,UAAUQ,IAAI,eAGlB9D,EAAEqC,cAAc,mBAAmBiC,MAAM6D,UAAgB,WAAa,GAAKF,EAAaR,EAAMG,gBAAkB,GAAK,OACrH5H,EAAEqC,cAAc,qBAAqBiC,MAAM6D,UAAc,UAAa,EAAIR,EAAgB,OAC1F3H,EAAEqC,cAAc,qBAAqBiC,MAAM6D,UAAc,UAAa,EAAIN,EAAgB,OAE1F7H,EAAEqC,cAAc,qBAAqB+F,WAAa,IAAMH,GAAY3I,OAAO,GAAK,KAAO,IAAMqI,GAAcrI,OAAO,MAIvGiI,UCnCR,MAAMc,GAAU,mCACVC,GAAW,kD,iyBC+BxB,MAAMC,EAAiBrB,eAAI,CACzB,CAACpJ,KAAM,WAAYkK,IAAK,KAAMQ,UAAW,YACzC,CAAC1K,KAAM,QAASkK,IAAK,KAAMQ,UAAW,SACtC,CAAC1K,KAAM,QAASkK,IAAK,KAAMQ,UAAW,WAGxCC,eAAgB,KACdC,cAAcnB,MAGhBoB,eAAU,KACRC,YAAYrB,GAAS,KACrBsB,MAIF,MAAMA,EAAgBC,UACpB,MAAMC,QAAqBC,QAAQC,IACjCV,EAAehK,MAAM2K,IAAI5I,GAAY6I,EAAW7I,EAASkI,aAG3DD,EAAehK,MAAQgK,EAAehK,MAAM2K,IAAI,CAAC5I,EAAU+E,KAAU,IAChE/E,EACH8I,KAAML,EAAa1D,OAKjB8D,EAAaL,UACjB,IAAI,MACF,MAAMO,QAAiBC,MAAM,GAAGhB,QAAciB,wBAA2BlB,MACnE3M,QAAa2N,EAASG,OAC5B,OAAW,OAAJ9N,QAAI,IAAJA,GAAU,QAAN,EAAJA,EAAM+N,YAAI,WAAN,EAAJC,EAAYN,KAAKO,QAAQ,GAChC,MAAOC,GAEP,OADA9C,QAAQ8C,MAAM,0BAA2BA,GAClC,Q,gYC7DX,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,YAAY,qBAExD,U,8aCgBf,MAAMC,EAAgB,CACpB,CAACtJ,KAAM,UAAYC,EAAOG,KAAMC,EAAQ,QAAgCC,MAAOL,GAC/E,CAACD,KAAM,iBAAkBI,KAAMC,EAAQ,QAAmCC,MAAO,YACjF,CAACN,KAAM,OAASE,EAAMN,QAAQ,SAAU,IAAI+B,WAAW,IAAK,IAAKvB,KAAMC,EAAQ,QAAgCC,MAAOJ,I,seCrBxH,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,YAAY,qBAExD,UCRf,MAAMqJ,GAAYA,KAChB,MAAMC,EAAS9J,SAAS+C,iBAAiB,kBAEpC+G,GAELA,EAAO9G,QAAQ+G,IACbV,MAAMU,EAAM1H,QAAQN,KACjBiI,KAAKC,GAAOA,EAAIC,QAChBF,KAAKvO,IACJ,MAAM0O,EAAS,IAAIC,UACbC,EAAMF,EAAOG,gBAAgB7O,EAAM,iBAAiB2G,cAAc,OAEnEiI,IAEDN,EAAMjK,KAAIuK,EAAIvK,GAAKiK,EAAMjK,IAEzBiK,EAAMrG,YAAW2G,EAAIhH,UAAY0G,EAAM1G,WAE3CgH,EAAIhH,UAAUC,OAAO,iBAEhByG,EAAMQ,YAEXR,EAAMQ,WAAWC,aAAaH,EAAKN,MAEpCU,MAAMd,GAAS9C,QAAQ8C,MAAMA,OAIrBE,U,2DCpBfnB,eAAW,KACTmB,O,wHCJF,MAAM,GAAc,GAEL,UCPf,MAAMa,GAAaA,KACjB,MAAMC,EAAY3K,SAASoC,cAAc,uBACnCwI,EAAYD,EAAOE,WAAW,MAC9BC,EAAY,YAEZC,EAAUJ,EAAOK,OAAWL,EAAOM,aACnCC,EAAUP,EAAOQ,MAAWR,EAAOS,YAEnCC,EAAOT,EAAIU,qBAAqB,EAAE,EAAEJ,EAAQ,GAClDG,EAAKE,aAAa,EAAG,WACrBF,EAAKE,aAAa,EAAG,WAErB,MAAMC,EAAcrM,OAAOsM,WAE3B,IAAIC,EAAW,IAEXF,EAAc,IAChBE,EAAW,GAEJF,EAAc,MACrBE,EAAW,IAGbd,EAAIe,KAAO,OAASD,EAAW,kCAC/Bd,EAAIgB,UAAYP,EAChBT,EAAIiB,UAAY,SAChBjB,EAAIkB,aAAe,SACnBlB,EAAImB,YAAc,OAClBnB,EAAIoB,UAAY,EAEhBpB,EAAIqB,SAASnB,EAAUI,EAAU,EAAGH,EAAU,GAC9CH,EAAIsB,WAAWpB,EAAUI,EAAU,EAAGH,EAAU,IAGnCL,UClCf,MAAMyB,GAAeA,KACnBnM,SAAS+C,iBAAiB,qBAAqBC,QAASjD,IACtD,MAAMqM,EAAQ,IAERD,EAAeA,KACnB,MAAME,EAAU,CACd,mCACA,oBACA,2BACA,gBACA,wBACA,2BACA,gBACA,oBAGFtM,EAAEoI,UAAYkE,EAAQC,KAAKC,MAAMD,KAAKE,SAAWH,EAAQpQ,SAEzD8D,EAAEsD,UAAUC,OAAO,UAEnBmJ,WAAW,KACT1M,EAAEsD,UAAUQ,IAAI,WACfuI,EAAQ,MAGbD,IAEAxD,aAAY,WACVwD,MACCC,MAIQD,U,qZCVfzD,eAAW,KACT7F,IACA6H,KACAyB,OAGFtM,I,2UCxBA,MAAM,GAAc,GAEL,U,UCNRC,GAAG,YAAYgB,MAAM,iC,GACxBC,eAAkB,UAAd,aAAS,G,oMADfE,eAmBM,MAnBNC,GAmBM,CAlBJC,GAEAzB,eAeWgN,GAfAC,SAAU,KAAOC,KAAM,C,4CAG5BC,WAAY,IAAMC,eAAa,G,CAKxBC,OAAM,eACf,IAAc,CAAdrN,eAAcsN,GACdtN,eAGauN,QAFAC,KAAI,eAAf,IAA2B,IAChBC,KAAI,eAAf,IAA2B,I,+BARxB,IAAgC,qBAAvClM,eAEQO,2BAFeC,kBAAT2L,I,iBAAd5N,eAEQ6N,GAFiCzO,IAAKwO,GAAK,C,uBACjD,IAA0F,CAA1FrM,eAA0F,QAAnFuM,WAAUF,EAAMjG,IAAMvG,MAAOwM,EAAMxM,MAAOE,MAAM,6B,2DAkBhD,IACbjD,KAAM,aACN4G,WAAY,CACV8I,iBACAC,mBACAC,mBACAC,eAEFjS,OACE,MAAO,CACLkS,gBAAiB,CACf,CAACrN,KAAM,IAAyB6G,IAAKxG,EAAQ,QAAkCC,MAAO,aACtF,CAACN,KAAM,sBAAyB6G,IAAKxG,EAAQ,QAAkCC,MAAO,iBACtF,CAACN,KAAM,kBAAyB6G,IAAKxG,EAAQ,QAAkCC,MAAO,YACtF,CAACN,KAAM,GAAyB6G,IAAKxG,EAAQ,QAAkCC,MAAO,iB,UClC9F,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAAS,MAErD,U,6ECRRd,GAAG,WAAWgB,MAAM,mB,UACvBC,eAAiB,UAAb,YAAQ,I,IAEPD,MAAM,S,IACJA,MAAM,iB,mBAQDA,MAAM,wB,IACNA,MAAM,wB,IAMfA,MAAM,kB,IAGJA,MAAM,uB,UAGTC,eAAmD,OAA9CD,MAAM,mCAAiC,U,6EAzBhDC,eAiBM,MAjBNG,GAiBM,CAhBJC,GAEAJ,eAaM,MAbNK,GAaM,CAZJL,eAWM,MAXNO,GAWM,qBAVJL,eASSO,2BARWC,WAAXmM,I,iBADT3M,eASS,UAPNrC,IAAKgP,EAAQ/P,KACbwG,MAAK,wCAA6BuJ,EAAQC,QAAU,MACrD/M,MAAM,sBACLe,QAAK,GAAED,mBAAiBgM,EAAQhN,MAAOgN,EAAQE,MAAOF,EAAQG,KAAMH,EAAQtN,KAAMsN,EAAQ9D,S,CAE3F/I,eAA4D,OAA5DiN,GAA4D,eAAtBJ,EAAQ/P,MAAI,GAClDkD,eAA6D,OAA7De,GAA6D,eAAvB8L,EAAQE,OAAK,a,YAM3D/M,eAQM,MARNkN,GAQM,CAPJlN,eAAkD,OAA7CD,MAAM,YAAae,QAAK,eAAED,iBAE/Bb,eAIM,MAJNC,GAIM,CAHJD,eAA2E,UAAnED,MAAM,iBAAiBoN,KAAK,SAAUrM,QAAK,eAAED,iBAErDuM,QAAmD,ICzBzD,MAAMC,GAAYA,KAChBpO,SAASoC,cAAc,QAAQiB,UAAUC,OAAO,iBAI5C+K,GAAavO,IACjB,MAAMwO,EAAgBtO,SAASoC,cAAc,gCAAkCtC,EAAK,MAC9EyO,EAAgBvO,SAASoC,cAAc,qBAExCmM,GAAkBD,IAEvBC,EAAcpG,UAAYmG,EAAanG,UAGvCnI,SAASoC,cAAc,QAAQiB,UAAUQ,IAAI,kBAIzC2K,GAAmBA,CAAC5N,EAAOkN,EAAOC,EAAMzN,EAAMwJ,KAClD,MAAMyE,EAAgBvO,SAASoC,cAAc,qBAE7C,IAAKmM,EAAe,OAEpB,IAAIE,EAAa,GACjB,MAAMC,EAAeZ,EAAQ,+BAAiCA,EAAQ,SAAW,GAC3Ea,EAAcZ,EAAO,4BAA8BA,EAAO,OAAS,GACnErI,EAAOpF,EAAO,uCAAyCA,EAAO,yBAA2BA,EAAO,WAAa,GAEnHwJ,EAAO9G,QAASjD,IACd0O,GAAc,0CAA4C1O,EAAEgC,IAAM,6BAGpEwM,EAAcpG,UAAY,mCACfvH,EAAS,QAClB8N,EACA,SACAC,EACAjJ,EACA,+BAAiC+I,EAAa,SAGhDzO,SAASoC,cAAc,QAAQiB,UAAUQ,IAAI,iBDRhC,QACbhG,KAAM,WACNpC,OACE,MAAO,CACLmT,SAAU,CACR,CACE/Q,KAAM,oBACNkQ,KAAM,wMACNzN,KAAM,uBACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,mBACPlN,MAAO,oBACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,WAGlB,CACE9C,KAAM,YACNkQ,KAAM,8DACNzN,KAAM,eACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,oBACPlN,MAAO,iCACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,WAGlB,CACE9C,KAAM,YACNkQ,KAAM,6IACNzN,KAAM,gBACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,oBACPlN,MAAO,wBACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,WAGlB,CACE9C,KAAM,cACNkQ,KAAM,gIACNzN,KAAM,kBACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,mBACPlN,MAAO,mBACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,WAGlB,CACE9C,KAAM,eACNkQ,KAAM,qCACNzN,KAAM,mBACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,mBACPlN,MAAO,mBACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,WAGlB,CACE9C,KAAM,SACNkQ,KAAM,uMACNzN,KAAM,YACNR,GAAI,EACJ+N,QAASlN,EAAQ,QACjBmN,MAAO,oBACPlN,MAAO,eACPkJ,OAAQ,CACN,CAAC/H,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,SACd,CAACoB,IAAKpB,EAAQ,cAMxBqE,QAAS,CACPoJ,aACAI,oBACAH,e,UErIJ,MAAM,GAA2B,IAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAE1E,U,iECUfrO,SAASY,MAAQ,mB,yQChBjB,MAAM,GAAc,GAEL,U,+0BCiCfZ,SAASY,MAAQ,gBAEjB,MAAMiO,EAAY,IAAIpH,KAAK,uBACrBqH,EAAc7H,eAAI,IACxB,IAAI8H,EAAQ,KAEZ,MAAMC,EAAaA,KACjB,MAAMC,EAAM,IAAIxH,KAChB,IAAIyH,EAAO5C,KAAKC,OAAO0C,EAAMJ,GAAa,KAE1C,MAAMM,EAAQ7C,KAAKC,MAAM2C,EAAO,SAChCA,GAAQ,QAER,MAAME,EAAO9C,KAAKC,MAAM2C,EAAO,OAC/BA,GAAQ,MAER,MAAMG,EAAQ/C,KAAKC,MAAM2C,EAAO,MAChCA,GAAQ,KAER,MAAMI,EAAUhD,KAAKC,MAAM2C,EAAO,IAC5BK,EAAUL,EAAO,GAEvBJ,EAAYxQ,MAAQ,CAAE6Q,QAAOC,OAAMC,QAAOC,UAASC,YAG/CC,EAAYvI,gBAAI,GAEtByB,eAAU,KACRsG,IACAD,EAAQpG,YAAYqG,EAAY,OAGlCS,eAAY,KACVhH,cAAcsG,KAGhB,MAAMW,EAAQ,IAAIC,MAAMhP,EAAQ,SAChC+O,EAAMxB,KAAO,YACbwB,EAAME,MAAO,EAEb,MAAMC,EAAYA,KAChBH,EAAMI,OACNN,EAAUlR,OAAQ,G,wqBC3EpB,MAAM,GAAc,GAEL,UCAf,MAAMyR,GAAS,CACb,CACEC,UAAWC,GACXpS,KAAM,OACN0B,KAAM,SAER,CACEyQ,UAAWE,GACXrS,KAAM,WACN0B,KAAM,oBAER,CACEyQ,UAAWG,GACXtS,KAAM,OACN0B,KAAM,KAER,CACEyQ,UAAWI,GACXvS,KAAM,WACN0B,KAAM,cAIJ8Q,GAASC,gBAAa,CAC1B9K,QAAS+K,gBAAiBC,IAC1BT,UACAU,WAAW,IAGEJ,UChCfK,eAAUC,IAAKC,IAAIP,IAAQQ,MAAM,S,uBCJjCrT,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,oCCA3C,W,uBCAAC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,yB,uBCA3CC,EAAOD,QAAU,IAA0B,yB,uBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3CC,EAAOD,QAAU,IAA0B,iC,uBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,wB,uBCA3CC,EAAOD,QAAU,IAA0B,0B,oCCA3C,W,uECAAC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,sB,kCCA3C,W,uBCAAC,EAAOD,QAAU,IAA0B,mC,oCCA3C,W,uBCAAC,EAAOD,QAAU,IAA0B,0B,kCCA3C,W,uBCAAC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,2B,uBCA3CC,EAAOD,QAAU,IAA0B,0B,uBCA3CC,EAAOD,QAAU,IAA0B,iC,qBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3CC,EAAOD,QAAU,IAA0B,sB,uBCA3CC,EAAOD,QAAU,IAA0B,wB,uBCA3CC,EAAOD,QAAU,IAA0B,sB,oCCA3C,W,qBCAAC,EAAOD,QAAU,IAA0B,yB,uBCA3CC,EAAOD,QAAU,IAA0B,4B,qBCA3C,IAAI0L,EAAM,CACT,YAAa,OACb,eAAgB,OAChB,YAAa,OACb,mBAAoB,OACpB,YAAa,OACb,eAAgB,OAChB,cAAe,OACf,WAAY,OACZ,cAAe,OACf,kBAAmB,OACnB,aAAc,OACd,YAAa,OACb,aAAc,OACd,aAAc,OACd,eAAgB,OAChB,oBAAqB,OACrB,iBAAkB,OAClB,aAAc,OACd,aAAc,OACd,eAAgB,OAChB,eAAgB,OAChB,WAAY,OACZ,aAAc,OACd,eAAgB,OAChB,cAAe,OACf,gBAAiB,OACjB,aAAc,OACd,eAAgB,OAChB,eAAgB,OAChB,qBAAsB,OACtB,eAAgB,OAChB,qBAAsB,OACtB,eAAgB,OAChB,gBAAiB,OACjB,cAAe,OACf,cAAe,OACf,uBAAwB,OACxB,aAAc,OACd,iBAAkB,OAClB,eAAgB,OAChB,cAAe,OACf,kBAAmB,OACnB,YAAa,OACb,kBAAmB,OACnB,kBAAmB,OACnB,kBAAmB,OACnB,kBAAmB,OACnB,kBAAmB,OACnB,kBAAmB,OACnB,eAAgB,OAChB,cAAe,OACf,aAAc,OACd,cAAe,OACf,aAAc,OACd,iBAAkB,OAClB,YAAa,OACb,kBAAmB,OACnB,WAAY,OACZ,aAAc,QAIf,SAAS6H,EAAeC,GACvB,IAAIjR,EAAKkR,EAAsBD,GAC/B,OAAO3T,EAAoB0C,GAE5B,SAASkR,EAAsBD,GAC9B,IAAI3T,EAAoBW,EAAEkL,EAAK8H,GAAM,CACpC,IAAIhR,EAAI,IAAIkR,MAAM,uBAAyBF,EAAM,KAEjD,MADAhR,EAAEmR,KAAO,mBACHnR,EAEP,OAAOkJ,EAAI8H,GAEZD,EAAe/J,KAAO,WACrB,OAAO7K,OAAO6K,KAAKkC,IAEpB6H,EAAeK,QAAUH,EACzBxT,EAAOD,QAAUuT,EACjBA,EAAehR,GAAK,Q,uBChFpBtC,EAAOD,QAAU,IAA0B,uB,oCCA3C,W,qBCAAC,EAAOD,QAAU,IAA0B,sB,4CCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,yB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,2B,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,sB,qBCA3CC,EAAOD,QAAU,IAA0B,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 &amp; 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":""}