{"version":3,"file":"js/app.b2a99716.js","mappings":"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","sources":["webpack://website/./src/App.vue","webpack://website/./src/components/Navigation.vue","webpack://website/./src/components/Navigation.vue?399a","webpack://website/./src/App.vue?7ccd","webpack://website/./src/views/HomeView.vue","webpack://website/./src/components/Intro.vue","webpack://website/./src/components/Intro.vue?4ec2","webpack://website/./src/components/Lights.vue","webpack://website/./src/lib/lights.js","webpack://website/./src/components/Lights.vue?19d9","webpack://website/./src/components/About.vue","webpack://website/./src/components/About.vue?5f92","webpack://website/./src/components/Houndini.vue","webpack://website/./src/components/Houndini.vue?fd4f","webpack://website/./src/components/Code.vue","webpack://website/./src/components/Code.vue?52d4","webpack://website/./src/components/HomePhotography.vue","webpack://website/./src/components/HomePhotography.vue?6d2e","webpack://website/./src/components/Contact.vue","webpack://website/./src/components/Contact.vue?d7c1","webpack://website/./src/components/SiteFooter.vue","webpack://website/./src/components/SiteFooter.vue?41ca","webpack://website/./src/views/HomeView.vue?1da1","webpack://website/./src/router/index.js","webpack://website/./src/lib/fontawesome-icons.js","webpack://website/./src/main.js","webpack://website/./src/components/Work.vue","webpack://website/./src/components/Project.vue","webpack://website/./src/components/Project.vue?93cb","webpack://website/./src/components/Work.vue?37b7","webpack://website/webpack/bootstrap","webpack://website/webpack/runtime/chunk loaded","webpack://website/webpack/runtime/compat get default export","webpack://website/webpack/runtime/define property getters","webpack://website/webpack/runtime/ensure chunk","webpack://website/webpack/runtime/get javascript chunk filename","webpack://website/webpack/runtime/get mini-css chunk filename","webpack://website/webpack/runtime/global","webpack://website/webpack/runtime/hasOwnProperty shorthand","webpack://website/webpack/runtime/load script","webpack://website/webpack/runtime/make namespace object","webpack://website/webpack/runtime/node module decorator","webpack://website/webpack/runtime/publicPath","webpack://website/webpack/runtime/css loading","webpack://website/webpack/runtime/jsonp chunk loading","webpack://website/webpack/startup"],"sourcesContent":["<template>\n  <Navigation></Navigation>\n  <router-view/>\n</template>\n\n<script>\nimport Navigation from '@/components/Navigation.vue';\n\nexport default {\n  name: 'App',\n  components: {\n    Navigation,\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import './scss/main';\n</style>\n","<template>\n  <nav id=\"nav\" class=\"nav\" role=\"navigation\" ref=\"navFocusTrap\">\n    <div>\n      <div class=\"nav-controls\" ref=\"navControls\">\n        <button\n          type=\"button\"\n          :class=\"[{ 'button-override-black': isMenuOpen }, 'button button-shadow button-red nav-control-open']\"\n          @click=\"toggleMenu\"\n          @focus=\"onFocus\"\n          :aria-expanded=\"isMenuOpen?'true':'false'\"\n          aria-controls=\"menu\"\n        >\n          <span v-if=\"!isMenuOpen\">Menu</span>\n          <span v-if=\"isMenuOpen\">Close Menu</span>\n          <span :class=\"[{ 'is-active': isMenuOpen }, 'hamburger hamburger--collapse']\">\n            <span class=\"hamburger-box\">\n              <span class=\"hamburger-inner\"></span>\n            </span>\n          </span>\n        </button>\n      </div>\n      <div id=\"menu\" :class=\"[{ 'is-active': isMenuOpen }, 'nav-overlay']\" ref=\"navOverlay\" aria-label=\"Primary\" role=\"navigation\">\n        <menu :class=\"[{ 'animate-menu': isMenuOpen }, 'nav-menu']\">\n          <router-link @click=\"closeMenu\" to=\"/\">Home</router-link>\n          <!-- <router-link @click=\"closeMenu\" to=\"/about\">About</router-link> -->\n          <router-link @click=\"closeMenu\" to=\"/code\">Code</router-link>\n          <router-link @click=\"closeMenu\" to=\"/photography\">Photography</router-link>\n          <a class=\"nav-external-link nav-external-link-first\" target=\"_blank\" href=\"https://www.instagram.com/eightbitkent/\" rel=\"noopener\" title=\"Kent Widman on Instagram\">\n            <span class=\"icon-launch\"></span>@eightbitkent\n          </a>\n          <a class=\"nav-external-link\" href=\"https://soundcloud.com/kent-widman\" target=\"_blank\" rel=\"noopener\" title=\"Kent Widman on Soundcloud\">\n            <span class=\"icon-launch\"></span>soundcloud\n          </a>\n          <a class=\"nav-external-link\" href=\"https://www.linkedin.com/in/kent-widman/\" target=\"_blank\" rel=\"noopener\" title=\"Kent Widman on LinkedIn\">\n            <span class=\"icon-launch\"></span>linkedin\n          </a>\n        </menu>\n      </div>\n    </div>\n  </nav>\n</template>\n\n<script>\nimport * as focusTrap from 'focus-trap';\n\nexport default {\n  name: 'SiteNavigation',\n  data() {\n    return {\n      isMenuOpen: false,\n      // scroll behavior\n      didScroll: false,\n      lastScrollTop: 0,\n      delta: 5,\n      navbarHeight: 60,\n      ft: null,\n    };\n  },\n  mounted() {\n    this.setup();\n\n    // add focus trap modal\n    this.ft = focusTrap.createFocusTrap(this.$refs.navFocusTrap);\n  },\n  watch: {\n    isMenuOpen(val) {\n      const htmlEl = document.getElementsByTagName('html')[0];\n      if (val) {\n        htmlEl.classList.add('no-scroll', 'nav-open');\n\n        this.hideContentForScreenReaders();\n\n        // add focus trap modal\n        this.ft.activate();\n\n        // setTimeout(() => {\n        //   this.ft.updateContainerElements();\n        // }, 1000);\n      } else {\n        htmlEl.classList.remove('no-scroll', 'nav-open');\n\n        this.showContentForScreenReaders();\n\n        setTimeout(() => {\n          this.$refs.navOverlay.scrollTo(0, 0);\n        }, 300);\n\n        this.ft.deactivate();\n      }\n    },\n  },\n  methods: {\n    openMenu() {\n      this.isMenuOpen = true;\n    },\n    closeMenu() {\n      this.isMenuOpen = false;\n    },\n    toggleMenu() {\n      this.isMenuOpen = !this.isMenuOpen;\n    },\n    setup() {\n      document.addEventListener('scroll', this.onScroll);\n\n      setInterval(this.checkInterval, 250);\n    },\n    onScroll() {\n      this.didScroll = true;\n    },\n    onFocus() {\n      this.lastScrollTop = 0;\n      this.$refs.navControls.classList.remove('nav-up');\n    },\n    checkInterval() {\n      if (this.didScroll) {\n        this.hasScrolled();\n        this.didScroll = false;\n      }\n    },\n    hasScrolled() {\n      const st = window.scrollY;\n\n      // Make sure they scroll more than delta\n      if (Math.abs(this.lastScrollTop - st) <= this.delta) {\n        return;\n      }\n\n      // If they scrolled down and are past the navbar, add class .nav-up.\n      // This is necessary so you never see what is \"behind\" the navbar.\n      if (st > this.lastScrollTop && st > this.navbarHeight && !this.isMenuOpen) {\n        // Scroll Down\n        this.$refs.navControls.classList.add('nav-up');\n      } else {\n        // Scroll Up\n        const windowHeight = window.innerHeight;\n        const documentHeight = document.body.scrollHeight;\n        if (st + windowHeight < documentHeight) {\n          this.$refs.navControls.classList.remove('nav-up');\n        }\n      }\n\n      this.lastScrollTop = st;\n    },\n    hideContentForScreenReaders() {\n      const elementsToHide = document.querySelectorAll('#main');\n      elementsToHide.forEach((e) => { e.setAttribute('aria-hidden', 'true'); });\n    },\n    showContentForScreenReaders() {\n      const elementsToShow = document.querySelectorAll('#main');\n      elementsToShow.forEach((e) => { e.setAttribute('aria-hidden', 'false'); });\n    },\n  },\n  destoyed() {\n    const htmlEl = document.getElementsByTagName('html')[0];\n    htmlEl.classList.remove('no-scroll', 'nav-open');\n\n    if (this.ft) {\n      this.ft.deactivate();\n    }\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@use \"sass:math\";\n@import '../scss/common';\n\n.nav {\n  pointer-events: none;\n  position: absolute;\n  top: 0;\n  width: 100%;\n  z-index: 100;\n}\n\n.nav-controls {\n  pointer-events: visible;\n  position: fixed;\n  right: 20px;\n  top: 20px;\n  transform: translate(0, 0);\n  transition: transform 0.3s ease-in-out,\n              top 0s linear 0.3s;\n  z-index: 200;\n}\n\n.nav-control-open {\n  .hamburger {\n    margin-left: 8px;\n  }\n}\n\n.nav-overlay {\n  pointer-events: none;\n  background-color: $color-off-white;\n  // background-image: url('/images/bg-menu.jpg');\n  // background-position: top center;\n  background-size: math.div(2500px, 2) math.div(1600px, 2);\n  background-repeat: no-repeat;\n  position: fixed;\n  overflow-y: scroll;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 89;\n  transition: transform 0.2s ease-in-out,\n              opacity 0.2s ease-in-out,\n              visibility 0s ease-in-out 0.3s;\n  transform-origin: top center;\n  opacity: 0;\n  visibility: hidden;\n\n  &.is-active {\n    pointer-events: all;\n    transition: transform 0.2s ease-in-out,\n                opacity 0.2s ease-in-out,\n                visibility 0s ease-in-out 0s;\n    transform-origin: top center;\n    opacity: 1;\n    visibility: unset;\n  }\n}\n\n.nav-menu {\n  padding: 110px 0 90px 0;\n  margin: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n\n  @include mq($from: mobile) {\n    padding: 160px 0 90px 0;\n  }\n\n  @include mq($from: tablet-large) {\n    padding: 90px 0 90px 0;\n  }\n\n  a {\n    text-decoration: none;\n    font-size: 1.625rem;\n    color: $color-black;\n    transition: transform 0.2s ease-in-out 0.5s,\n                opacity 0.2s ease-in-out,\n                visibility 0s ease-in-out 0.3s;\n    transform-origin: top center;\n    opacity: 0;\n    visibility: hidden;\n    transform: translate(0, 100px);\n\n    @include mq($from: mobile) {\n      font-size: 2rem\n    }\n  }\n\n  &.animate-menu {\n    a {\n      transform: translate(0, 0);\n      transition: transform 0.5s cubic-bezier(0,.66,.48,1),\n                  opacity 0.5s cubic-bezier(0,.66,.48,1),\n                  visibility 0s cubic-bezier(0,.66,.48,1) 0s;\n      opacity: 1;\n      visibility: unset;\n    }\n\n    a:nth-child(1) {\n      transition-delay: 0.5s - 0.3s;\n    }\n    a:nth-child(2) {\n      transition-delay: 0.55s - 0.3s;\n    }\n    a:nth-child(3) {\n      transition-delay: 0.60s - 0.3s;\n    }\n    a:nth-child(4) {\n      transition-delay: 0.65s - 0.3s;\n    }\n    a:nth-child(5) {\n      transition-delay: 0.70s - 0.3s;\n    }\n    a:nth-child(6) {\n      transition-delay: 0.75s - 0.3s;\n    }\n    a:nth-child(7) {\n      transition-delay: 0.80s - 0.3s;\n    }\n    a:nth-child(8) {\n      transition-delay: 0.85s - 0.3s;\n    }\n    a:nth-child(9) {\n      transition-delay: 0.90s - 0.3s;\n    }\n    a:nth-child(10) {\n      transition-delay: 0.95s - 0.3s;\n    }\n    a:nth-child(11) {\n      transition-delay: 1.00s - 0.3s;\n    }\n    a:nth-child(12) {\n      transition-delay: 1.05s - 0.3s;\n    }\n    a:nth-child(13) {\n      transition-delay: 1.10s - 0.3s;\n    }\n  }\n\n  a + a {\n    margin-top: 1.2em;\n  }\n}\n\n.nav-external-link {\n  span {\n    font-size: 28px;\n    margin-right: 0.4em;\n  }\n}\n\n// .nav-external-link-first {\n//   margin-top: 3vh !important;\n\n//   @include mq($from: tablet-large) {\n//     margin-top: 5vh !important;\n//   }\n// }\n</style>\n","import { render } from \"./Navigation.vue?vue&type=template&id=64e445e8\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js\"\n\nimport \"./Navigation.vue?vue&type=style&index=0&id=64e445e8&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=6b2589b0\"\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=6b2589b0&lang=scss\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n\n  <Intro />\n  <Lights />\n  <About />\n  <Houndini />\n  <Code />\n  <Work />\n  <HomePhotography />\n  <Contact />\n  <SiteFooter />\n</template>\n\n<script>\n// @ is an alias to /src\n// import GlobalNav from '@/components/GlobalNav.vue';\nimport Intro from '@/components/Intro.vue';\nimport Lights from '@/components/Lights.vue';\nimport About from '@/components/About.vue';\nimport Houndini from '@/components/Houndini.vue';\nimport Code from '@/components/Code.vue';\nimport Work from '@/components/Work.vue';\nimport HomePhotography from '@/components/HomePhotography.vue';\nimport Contact from '@/components/Contact.vue';\nimport SiteFooter from '@/components/SiteFooter.vue';\n\nexport default {\n  name: 'HomeView',\n  components: {\n    Intro,\n    Lights,\n    About,\n    Houndini,\n    Code,\n    Work,\n    Contact,\n    HomePhotography,\n    SiteFooter,\n  },\n  metaInfo: {\n    title: 'Home',\n    titleTemplate: '%s | Kent Widman Web Developer',\n    // meta: [\n    //   { charset: 'utf-8' },\n    //   { name: 'viewport', content: 'width=device-width, initial-scale=1' },\n    // ],\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n  @import '../scss/common';\n  @import '../scss/theme/neo';\n  @import '../scss/views/home';\n</style>\n","<template>\n  <section id=\"intro\" class=\"intro neo\">\n    <div class=\"intro-text-wrapper\">\n      <div class=\"intro-text\">\n        <h1>\n          <span class=\"intro-text__part-1\" data-swap-text=\"namdiv tnek\">kent widman</span>\n          <span class=\"intro-text__part-2\" data-swap-text=\"digital dictator\">technical director</span>\n        </h1>\n        <h2>\n          <span class=\"intro-text__part-3\">\n            <span data-swap-text=\"lead developer\">hand crafted</span>\n            <span>&nbsp;</span>\n            <span data-swap-text=\"code guru\">digital blitz</span>\n          </span>\n        </h2>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script>\n// import swapText from '../lib/swap-text';\n\nexport default {\n  name: 'IntroSection',\n  // mounted() {\n  //   swapText.init(document.getElementById('intro'));\n  // },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.intro {\n  background-image: url('~@/assets/intro.jpg');\n  background-position: top center;\n  background-repeat: no-repeat;\n  background-size: cover;\n  padding: 0;\n  height: 100%;\n  min-height: 500px;\n}\n\n.intro-text {\n  h1,\n  h2 {\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n}\n\n.intro-text__part-1,\n.intro-text__part-2,\n.intro-text__part-3 {\n  display: block;\n  font-family: 'Fira Mono', monospace;\n  text-align: left;\n  margin: 0;\n  padding: 0;\n  color: #ffffff;\n\n  span {\n    position: relative;\n\n    &:before {\n      content: attr('data-text');\n      position: absolute;\n      top: 0;\n      left: 0;\n    }\n  }\n}\n\n.intro-text__part-1 {\n  font-size: 13.5vw;\n  margin-bottom: 2vw;\n  text-align: center;\n\n  @media screen and (min-width: 720px) {\n    font-size: 100px;\n    margin-bottom: 0.10em;\n  }\n}\n\n.intro-text__part-2 {\n  font-size: 8.2vw;\n  margin-bottom: 2vw;\n  text-align: center;\n  color: #44f5f3;\n\n  @media screen and (min-width: 720px) {\n    font-size: 60.8px;\n    margin-bottom: 0.2em;\n  }\n}\n\n.intro-text__part-3 {\n  font-size: 5.9vw;\n  color: #f639ed;\n  text-align: center;\n  line-height: 1.1em;\n\n  @media screen and (min-width: 720px) {\n    font-size: 42.5px;\n  }\n}\n\n.intro-text-wrapper {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  transform: translateY(-50%);\n  text-align: center;\n}\n\n.intro-text {\n  display: block;\n  margin: auto;\n  max-width: 668px;\n}\n</style>\n","import { render } from \"./Intro.vue?vue&type=template&id=e014bca4\"\nimport script from \"./Intro.vue?vue&type=script&lang=js\"\nexport * from \"./Intro.vue?vue&type=script&lang=js\"\n\nimport \"./Intro.vue?vue&type=style&index=0&id=e014bca4&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section class=\"lights bgc-purple neo\">\n    <canvas id=\"lightsApp\"></canvas>\n    <div class=\"about-text\">\n      <h3>\n        <span class=\"color-purple\">Digital</span> <span>is a canvas for</span><br>\n        <span class=\"color-purple\">expressing</span> <span>ideas</span><br>\n        <span>convey</span> <span class=\"color-purple\">emotions</span><br>\n        <span class=\"color-purple\">pushing</span> <span>bounderies</span><br>\n        <span>and</span> <span class=\"color-purple\">change</span> <span>minds</span>\n      </h3>\n    </div>\n  </section>\n</template>\n\n<script>\nimport lights from '@/lib/lights';\n\nexport default {\n  name: 'LightsSection',\n  mounted() {\n    lights.init(document.getElementById('lightsApp'));\n  },\n  beforeUnmount() {\n    console.log('beforeUnmount lights');\n    lights.destroy();\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.lights {\n  position: relative;\n  padding: 0 !important;\n}\n\n#lightsApp {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  image-rendering: pixelated;\n}\n\n.about {\n  height: 100%;\n  min-height: 500px;\n  // background-size: contain;\n  // padding-bottom: 10px;\n}\n\n.about-text {\n  position: absolute;\n  transform: translate(0, -50%);\n  top: 50%;\n  left: 10%;\n  right: 10%;\n  color: #ffffff;\n\n  @media screen and (min-width: 641px) {\n    right: 15vh;\n  }\n\n  h3 {\n    margin: 0;\n    text-align: right;\n    font-size: 11vw;\n\n    @media screen and (min-width: 641px) {\n      font-size: 60px;\n    }\n  }\n\n  span span {\n    opacity: 0;\n  }\n\n  span.glitch {\n    &:nth-child(1) {\n      &:before,\n      &:after {\n        animation-delay: 0s;\n        opacity: inherit;\n      }\n    }\n    &:nth-child(2) {\n      &:before,\n      &:after {\n        animation-delay: 5s;\n      }\n    }\n    &:nth-child(3) {\n      &:before,\n      &:after {\n        animation-delay: 3s;\n      }\n    }\n    &:nth-child(4) {\n      &:before,\n      &:after {\n        animation-delay: 7s;\n      }\n    }\n    &:nth-child(5) {\n      &:before,\n      &:after {\n        animation-delay: 1s;\n      }\n    }\n    &:nth-child(6) {\n      &:before,\n      &:after {\n        animation-delay: 8s;\n      }\n    }\n    &:nth-child(7) {\n      &:before,\n      &:after {\n        animation-delay: 2s;\n      }\n    }\n    &:nth-child(8) {\n      &:before,\n      &:after {\n        animation-delay: 4s;\n      }\n    }\n  }\n}\n</style>\n","/* eslint-disable */\nlet canvasElement;\nlet context;\nconst fps = 60;\nlet fpsTimmer = 0;\nlet fadeTime = 0;\nlet matrixSize = [18, 10];\nlet vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\nlet vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\nlet screenSize = [vw, vh];\nlet enableAnimation = true;\nlet changePatternInterval = null;\nconst lightPatterns = [\n  lightPattern1,\n  lightPattern2,\n  lightPattern3,\n  strobe1,\n  strobe2,\n];\n\nlet currenLightPattern = 0;\nlet matrix = null;\nlet colors = [\n  [246, 57, 237], //purple\n  [68, 245, 243], //teal\n]\n\nfunction randomnumber(max, min) {\n  if (typeof min === 'undefined') {\n    min = 0;\n  }\n\n  return Math.floor(Math.random() * max) + min;\n}\n\nfunction init(el) {\n  enableAnimation = true;\n\n  canvasElement = el;\n  context = canvasElement.getContext('2d');\n\n  //build matrix\n  matrix = new Array(matrixSize[0]); // create an empty array of length n\n  for (let y = 0; y < matrixSize[1]; y++) {\n    matrix[y] = new Array(matrixSize[1]); // make each element an array\n    for (let x = 0; x < matrixSize[0]; x++) {\n      matrix[y][x] = [0, 0, 0];\n    }\n  }\n\n  window.addEventListener('resize', screenResize);\n  screenResize();\n\n  // Loop\n  window.requestAnimationFrame(loop);\n\n  changePatternInterval = setInterval(function () {\n    let random_number = randomnumber(lightPatterns.length);\n    while (lightPatterns.length > 1 && currenLightPattern === random_number) {\n      random_number = randomnumber(lightPatterns.length);\n    }\n\n    console.log(`lightPatterns: ${random_number}`);\n\n    // let random_number = randomnumber(3);\n    currenLightPattern = random_number;\n  }, 2000);\n}\n\nfunction destroy() {\n  clearInterval(changePatternInterval);\n  window.removeEventListener('resize', screenResize);\n  enableAnimation = false;\n}\n\nfunction loop() {\n  let now = Date.now();\n  if (now >= fpsTimmer) {\n    lightPatterns[currenLightPattern]();\n    render();\n    now = Date.now();\n    fpsTimmer = now + 1000 / fps;\n  }\n\n  if (enableAnimation) {\n    requestAnimationFrame(loop);\n  } else {\n    context = null;\n    matrix = null;\n  }\n}\n\nfunction render() {\n  let pixelWidth = screenSize[0] / matrixSize[0];\n  let pixelHeight = screenSize[1] / matrixSize[1];\n\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      let color = matrix[y][x];\n      if (color instanceof Array) {\n        context.fillStyle = 'rgb(' + color[0] + ', ' + color[1] + ', ' + color[2] + ')';\n        context.fillRect(x, y, x + 1, y + 1);\n        //console.log(pixelWidth * x, pixelWidth * y, pixelWidth * (x+1), pixelWidth * (y+1));\n      }\n    }\n  }\n}\n\nfunction resize() {\n  context.canvas.width = matrixSize[0];\n  context.canvas.height = matrixSize[1];\n}\n\nfunction lightPattern1() {\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      let tigger = randomnumber(18) === 0;\n      // New pixel\n      if (tigger) {\n        let colorIndex = randomnumber(colors.length);\n        matrix[y][x] = [\n          colors[colorIndex][0],\n          colors[colorIndex][1],\n          colors[colorIndex][2]\n        ];\n      } else {\n        matrix[y][x][0] = Math.floor(matrix[y][x][0] * 0.85);\n        matrix[y][x][1] = Math.floor(matrix[y][x][1] * 0.85);\n        matrix[y][x][2] = Math.floor(matrix[y][x][2] * 0.85);\n      }\n    }\n  }\n}\n\nlet lightPattern2lastIndex = 0;\nlet lightPattern2Index = 0;\nlet lightPattern2IndexSpacing = matrixSize[1] + 10;\n\nfunction lightPattern2() {\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      let tigger = ((lightPattern2Index + x + y * matrixSize[1]) % lightPattern2IndexSpacing) === 0;\n      if (tigger) {\n        lightPattern2lastIndex++\n        let colorIndex = Math.floor(lightPattern2lastIndex / ((matrixSize[0] * matrixSize[1]))) % colors.length;\n        matrix[y][x] = [\n          colors[colorIndex][0],\n          colors[colorIndex][1],\n          colors[colorIndex][2]\n        ];\n      } else {\n        matrix[y][x][0] = Math.floor(matrix[y][x][0] * 0.85);\n        matrix[y][x][1] = Math.floor(matrix[y][x][1] * 0.85);\n        matrix[y][x][2] = Math.floor(matrix[y][x][2] * 0.85);\n      }\n    }\n  }\n\n  lightPattern2Index++;\n}\n\nfunction lightPattern3() {\n\n  // Sprites\n  const sprites = [\n    [\n      [0, 1, 1, 0, 0, 1, 1, 0],\n      [1, 1, 1, 1, 1, 0, 0, 1],\n      [1, 1, 1, 1, 0, 0, 0, 1],\n      [1, 1, 1, 1, 1, 1, 1, 1],\n      [0, 1, 1, 1, 1, 1, 1, 0],\n      [0, 1, 1, 1, 1, 1, 1, 0],\n      [0, 0, 1, 1, 1, 1, 0, 0],\n      [0, 0, 0, 1, 1, 0, 0, 0],\n    ], [\n      [1, 0, 0, 0, 1, 0, 0, 0],\n      [1, 1, 1, 1, 1, 0, 1, 0],\n      [1, 1, 1, 1, 1, 0, 0, 1],\n      [0, 1, 1, 0, 1, 0, 0, 1],\n      [1, 0, 1, 1, 1, 0, 1, 0],\n      [0, 1, 1, 1, 1, 1, 1, 0],\n      [0, 1, 1, 1, 1, 1, 1, 0],\n      [0, 1, 0, 1, 0, 0, 1, 0],\n    ], [\n      [1, 0, 0, 0, 0, 0, 0, 1],\n      [0, 1, 0, 0, 0, 0, 1, 0],\n      [0, 0, 1, 1, 1, 1, 0, 0],\n      [0, 1, 0, 1, 1, 0, 1, 0],\n      [0, 0, 1, 1, 1, 1, 0, 0],\n      [1, 1, 1, 1, 1, 1, 1, 1],\n      [1, 0, 1, 0, 0, 1, 0, 1],\n      [1, 0, 1, 1, 1, 1, 0, 1],\n    ], [\n      [0, 0, 0, 0, 0, 0, 0, 0],\n      [0, 0, 0, 1, 0, 0, 0, 0],\n      [0, 0, 1, 0, 1, 0, 0, 0],\n      [0, 1, 0, 1, 0, 1, 0, 0],\n      [1, 0, 1, 0, 1, 0, 1, 0],\n      [0, 1, 1, 1, 1, 1, 0, 0],\n      [0, 0, 1, 0, 1, 0, 0, 0],\n      [0, 0, 0, 1, 0, 0, 0, 0],\n    ], [\n      [0, 0, 0, 1, 1, 1, 0, 0],\n      [0, 0, 1, 1, 1, 1, 1, 0],\n      [0, 1, 1, 1, 1, 1, 1, 1],\n      [0, 1, 0, 0, 1, 0, 0, 1],\n      [0, 1, 1, 0, 1, 0, 1, 1],\n      [0, 1, 1, 1, 1, 1, 1, 1],\n      [0, 1, 1, 1, 1, 1, 1, 1],\n      [0, 1, 0, 1, 0, 1, 0, 1],\n    ],\n  ];\n\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      matrix[y][x][0] = Math.floor(matrix[y][x][0] * 0.85);\n      matrix[y][x][1] = Math.floor(matrix[y][x][1] * 0.85);\n      matrix[y][x][2] = Math.floor(matrix[y][x][2] * 0.85);\n    }\n  }\n\n  // print sprite\n  const skip = 10 * Math.random() > 2;\n  const sprite = Math.floor(sprites.length * Math.random());\n  const startX = Math.floor(matrixSize[0] * Math.random() - 4);\n  const startY = Math.floor(matrixSize[1] * Math.random() - 4);\n  const colorIndex = randomnumber(colors.length);\n  const flip = Math.round(Math.random()) === 1;\n\n  if (!skip){\n    for (let y = 0; y < 8; y++) {\n      for (let x = 0; x < 8; x++) {\n        const currentX = startX + x;\n        const currentY = startY + y;\n  \n        if (currentX >= 0 && currentY >= 0 && currentX < matrixSize[0] && currentY < matrixSize[1]) {\n          if (flip){\n            if (sprites[sprite][y][7 - x] > 0) {\n              matrix[currentY][currentX][0] = colors[colorIndex][0] * sprites[sprite][y][7 - x];\n              matrix[currentY][currentX][1] = colors[colorIndex][1] * sprites[sprite][y][7 - x];\n              matrix[currentY][currentX][2] = colors[colorIndex][2] * sprites[sprite][y][7 - x];\n            }\n          } else {\n            if (sprites[sprite][y][x] > 0) {\n              matrix[currentY][currentX][0] = colors[colorIndex][0] * sprites[sprite][y][x];\n              matrix[currentY][currentX][1] = colors[colorIndex][1] * sprites[sprite][y][x];\n              matrix[currentY][currentX][2] = colors[colorIndex][2] * sprites[sprite][y][x];\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction strobe1() {\n  let colorIndex = randomnumber(colors.length);\n  let tigger = randomnumber(5) === 0;\n\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      if (tigger) {\n        matrix[y][x] = [\n          colors[colorIndex][0],\n          colors[colorIndex][1],\n          colors[colorIndex][2]\n        ];\n      } else {\n        matrix[y][x][0] = Math.floor(matrix[y][x][0] * 0.6);\n        matrix[y][x][1] = Math.floor(matrix[y][x][1] * 0.6);\n        matrix[y][x][2] = Math.floor(matrix[y][x][2] * 0.6);\n      }\n    }\n  }\n}\n\nfunction strobe2() {\n  let colorIndex = randomnumber(colors.length);\n  let tigger = randomnumber(8) === 0;\n  let horizontal = randomnumber(2);\n  let isHorizontal = horizontal === 1;\n  let divider = randomnumber(8) + 1;\n  let slice = Math.floor(matrixSize[horizontal] / divider);\n  let start = randomnumber(divider) * slice;\n  let end = start + slice;\n\n  for (let y = 0; y < matrixSize[1]; y++) {\n    for (let x = 0; x < matrixSize[0]; x++) {\n      if (isHorizontal && tigger && x >= start && x <= end) {\n        matrix[y][x] = [\n          colors[colorIndex][0],\n          colors[colorIndex][1],\n          colors[colorIndex][2]\n        ];\n      } else if (!isHorizontal && tigger && y >= start && y <= end) {\n        matrix[y][x] = [\n          colors[colorIndex][0],\n          colors[colorIndex][1],\n          colors[colorIndex][2]\n        ];\n      } else {\n        matrix[y][x][0] = Math.floor(matrix[y][x][0] * 0.8);\n        matrix[y][x][1] = Math.floor(matrix[y][x][1] * 0.8);\n        matrix[y][x][2] = Math.floor(matrix[y][x][2] * 0.8);\n      }\n    }\n  }\n}\n\nfunction screenResize() {\n  let matrixSizeWidth,\n    matrixSizeHeight;\n\n  vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n  vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n\n  screenSize = [vw, vh];\n\n  if (vw > vh) {\n    if (vw > 1000) {\n      matrixSizeWidth = Math.round(vw / 80);\n      matrixSizeHeight = Math.round(vh / 80);\n    } else {\n      matrixSizeWidth = Math.round(vw / 40);\n      matrixSizeHeight = Math.round(vh / 40);\n    }\n  } else {\n    if (vh > 1000) {\n      matrixSizeWidth = Math.round(vw / 80);\n      matrixSizeHeight = Math.round(vh / 80);\n    } else {\n      matrixSizeWidth = Math.round(vw / 40);\n      matrixSizeHeight = Math.round(vh / 40);\n    }\n  }\n\n  matrixSize = [matrixSizeWidth, matrixSizeHeight];\n\n  //rebuild matrix\n  for (let y = 0; y < matrixSize[1]; y++) {\n    if (!Array.isArray(matrix[y])) {\n      matrix[y] = new Array(matrixSize[1]);\n      for (let x = 0; x < matrixSize[0]; x++) {\n        matrix[y][x] = [0, 0, 0];\n      }\n    } else {\n      for (let x = 0; x < matrixSize[0]; x++) {\n        if (!Array.isArray(matrix[y][x])) {\n          matrix[y][x] = [0, 0, 0];\n        }\n      }\n    }\n  }\n\n  resize();\n  console.log('resize');\n}\n\nexport default {\n  init: init,\n  destroy: destroy\n};","import { render } from \"./Lights.vue?vue&type=template&id=23e438b0\"\nimport script from \"./Lights.vue?vue&type=script&lang=js\"\nexport * from \"./Lights.vue?vue&type=script&lang=js\"\n\nimport \"./Lights.vue?vue&type=style&index=0&id=23e438b0&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section class=\"about bgc-black light neo padded\">\n    <h2>About</h2>\n    <p>\n      Kent Widman is a Technical Director at Cramer-Krasselt, the Second-largest\n      independent advertising agency in the United States.\n      Born and raised in a ski-town in northern Sweden, music, art, and computers,\n      have always been a big part of his life and identity.\n      Today Kent provides web consulting, codes full-stack websites, and web applications\n      while mentoring developers, recording music at his home studio, play and go to shows, and photography.\n    </p>\n    <h2>Skills</h2>\n    <div class=\"skills\">\n      <div>\n        <h3>Front-End</h3>\n        <ul>\n          <li>HTML5</li>\n          <li>CSS3, SASS/SCSS</li>\n          <li>JavaScript(ES6)</li>\n          <li>Worpress, CraftCMS theming</li>\n          <li>Vue.js, React</li>\n          <li>Canvas</li>\n        </ul>\n      </div>\n      <div>\n        <h3>Back-End</h3>\n        <ul>\n          <li>PHP Frameworks (Custom Worpress Plugins, CraftCMS, Laravel, Code Igniter)</li>\n          <li>Node.js</li>\n          <li>MySQL</li>\n          <li>MongoDB</li>\n          <li>Mongoose</li>\n          <li>Express</li>\n        </ul>\n      </div>\n      <div>\n        <h3>Infrastructure</h3>\n        <ul>\n          <li>Centos/Redhat server admin</li>\n          <li>Apache Web Server Configuration</li>\n          <li>Server Hardening</li>\n          <li>Web Aplication Firewall</li>\n        </ul>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script>\nexport default {\n  name: 'AboutSection',\n};\n</script>\n\n<style lang=\"scss\">\n@import '../scss/common';\n\n.about {\n  background-position: top center;\n  background-attachment: fixed;\n  text-align: center;\n  height: auto;\n}\n\n.skills {\n  max-width: 800px;\n  margin-top: 50px;\n  margin-left: auto;\n  margin-right: auto;\n  display: grid;\n  column-gap: 30px;\n  text-align: left;\n\n  @media screen and (min-width: 700px) {\n    grid-template-columns: 1fr 1fr 1fr;\n  }\n\n  ul {\n    list-style: none;\n    padding-left: 0;\n\n    font-size: 20px;\n    line-height: 1.6;\n\n    @media screen and (min-width: 480px) {\n      font-size: 18px;\n    }\n  }\n}\n</style>\n","import { render } from \"./About.vue?vue&type=template&id=00bf1ae3\"\nimport script from \"./About.vue?vue&type=script&lang=js\"\nexport * from \"./About.vue?vue&type=script&lang=js\"\n\nimport \"./About.vue?vue&type=style&index=0&id=00bf1ae3&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section id=\"code\" class=\"houndini light bgc-purple neo padded\">\n    <h2>Houndini Chrome Plugin</h2>\n    <h3 class=\"tag-line\">Now you see it, now you don't.</h3>\n    <div class=\"houndini-video\">\n      <video preload=\"auto\" playsinline autoplay muted loop>\n        <source src=\"/videos/houndini.mp4\" type=\"video/mp4\" />\n      </video>\n    </div>\n    <div>\n      <p>Escape the Interruption: Say Goodbye to Pre-Roll Video Ads</p>\n      <p>Imagine enjoying your favorite shows without pesky pre-roll video ads. With Houndini, a simple click or keyboard shortcut(Ctrl + B (Windows) or Command + B (Mac)) skips the ads, giving you uninterrupted viewing across various streaming platforms.</p>\n      <p>Elevate your streaming experience with Houndini – because your time is too valuable to be interrupted.</p>\n    </div>\n    <p class=\"links\">\n      <a class=\"btn btn-purple\" href=\"https://chrome.google.com/webstore/detail/houndini/immldcpimndbobdcmdanpoojgeinpioi\" target=\"_blank\">\n        Download free from chrome webstore\n      </a>\n      <a btn btn-purple href=\"https://github.com/kentwidman/houndini\">Github</a>\n    </p>\n  </section>\n</template>\n\n<script>\nexport default {\n  name: 'CodeSection',\n  data() {\n    return {\n      email: '',\n      time: 10,\n    };\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import '../scss/common';\n\n.tag-line {\n  text-align: center;\n}\n\n.houndini-video video {\n  display: block;\n  margin: 3em auto;;\n}\n\n.links{\n  display: flexbox;\n  flex-wrap: wrap;\n  justify-content: center;\n\n  a + a {\n    margin-left: 2em;\n  }\n}\n</style>\n","import { render } from \"./Houndini.vue?vue&type=template&id=bf66eba2\"\nimport script from \"./Houndini.vue?vue&type=script&lang=js\"\nexport * from \"./Houndini.vue?vue&type=script&lang=js\"\n\nimport \"./Houndini.vue?vue&type=style&index=0&id=bf66eba2&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section id=\"code\" class=\"code dark bgc-turquoise neo padded\">\n    <h2>Code Examples</h2>\n    <p>\n      Check out some of my coding demos, and samples from past projects.\n    </p>\n\n    <div class=\"code-examples\">\n      <div class=\"code-example\">\n        <img src=\"../assets/code/kentris/title_bg.gif\" alt=\"\">\n        <div>\n          <h3>Kentris</h3>\n          <p>\n            A Tetris clone of the orginal NES release.\n            Coded in ES6 javascript, html5 canvas, and spitemaps graphics from the orginal game.\n            It has most features coded such as gameplay and highscore.\n          </p>\n          <router-link to=\"/code/kentris\" class=\"button button-white-hover-red\">Play Kentris</router-link>\n        </div>\n      </div>\n      <div class=\"code-example\">\n        <img src=\"../assets/code/elevator-simulator/elevator-simulator.png\" alt=\"\">\n        <div>\n          <h3>Elevator Simulator</h3>\n          <p>\n            The elevator simulator presents a charming 8-bit world bustling with activity across various floors.\n            Characters patiently queue on different floors, some eager to board and others disembarking. <b>In progress.</b>\n          </p>\n          <router-link to=\"/code/elevator-simulator\" class=\"button button-white-hover-red\">\n            View Elevator Simulator</router-link>\n        </div>\n      </div>\n      <div class=\"code-example\">\n        <img src=\"../assets/code/product-filtering/product-filtering.jpg\" alt=\"\">\n        <div>\n          <h3>Product Finder Demo</h3>\n          <p>\n            This demonstration showcases a system for filtering products by multiple tags and categories.\n            The resulting products are displayed in the a hierarchical tree structure.\n          </p>\n          <router-link to=\"/code/product-filtering\" class=\"button button-white-hover-red\">View Coding Example</router-link>\n        </div>\n      </div>\n      <div class=\"code-example\">\n        <img src=\"../assets/code/mustache-loadbar/screen-shoot.gif\" alt=\"\">\n        <div>\n          <h3>Mustache-Loadbar</h3>\n          <p>\n            Imagine a shady character on your screen, a clean-shaven individual with an empty space above their lips.\n            As the site loads the mushtash grows as a progress bar.\n          </p>\n          <router-link to=\"/code/mustache-loadbar\" class=\"button button-white-hover-red\">Watch that mustache grow.</router-link>\n        </div>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script>\nexport default {\n  name: 'CodeSection',\n  data() {\n    return {\n      email: '',\n      time: 10,\n    };\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import '../scss/common';\n.code {\n  background-position: top center;\n  background-attachment: fixed;\n  height: auto !important;\n\n  h1 {\n    padding-top: 50px;\n    margin-bottom: 10px;\n    font-size: 20vw;\n\n    @media screen and (min-width: 480px) {\n      font-size: 150px;\n    }\n  }\n\n  .email {\n    font-size: 24px;\n    text-decoration: none;\n    color: #fff;\n    width: 100%;\n    text-align: center;\n  }\n\n  a {\n    color: #fff;\n    &:hover {\n      color: #fff;\n    }\n  }\n}\n\n.code-examples {\n  max-width: 800px;\n  margin-top: 80px;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.code-example {\n  display: flex;\n  justify-content: space-around;\n  align-items: flex-start;\n\n  > img {\n    width: calc(30% - 30px);\n  }\n\n  > div {\n    width: calc(70% - 30px);\n  }\n}\n\n.code-example + .code-example {\n  margin-top: 80px;\n}\n\n.info,\n.social-links {\n  text-align: left;\n  max-width: 600px;\n  font-size: 1.4em;\n  margin: 60px auto;\n\n  @media screen and (min-width: 480px) {\n    font-size: 40px;\n  }\n\n  & > * {\n    display: flex;\n    justify-content: space-between;\n    margin: 15px 0;\n  }\n}\n\n.social-links__icon {\n  width: calc(15% - 15px);\n  text-align: right;\n\n  @media screen and (min-width: 480px) {\n    width: calc(15% - 15px);\n  }\n}\n\n.social-links__text {\n  width: calc(85% - 15px);\n\n  @media screen and (min-width: 480px) {\n    width: calc(85% - 15px);\n  }\n\n  &-small {\n    @media screen and (min-width: 480px) {\n      font-size: 28px;\n    }\n\n    @media screen and (min-width: 480px) {\n      font-size: 28px;\n    }\n  }\n}\n</style>\n","import { render } from \"./Code.vue?vue&type=template&id=4bd50198\"\nimport script from \"./Code.vue?vue&type=script&lang=js\"\nexport * from \"./Code.vue?vue&type=script&lang=js\"\n\nimport \"./Code.vue?vue&type=style&index=0&id=4bd50198&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section id=\"home-photography\" class=\"home-photography neo light padded\">\n    <h2>Photography</h2>\n    <div class=\"blurb\">\n    <p>Explore Chicago's vibrant music scene through my lens.</p>\n    <router-link class=\"button button-red\" to=\"/photography\">View Show Photos</router-link>\n    </div>\n  </section>\n</template>\n\n<script>\n// import swapText from '../lib/swap-text.js';\nexport default {\n  name: 'HomePhotography',\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.home-photography {\n  max-height: 40vw;\n  min-height: 500px;\n  background-image: url('~@/assets/photography_bg.jpg');\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: 50% 80%;\n\n  h2 {\n    color: $color-white;\n    font-size: 12vw;\n    margin: 0;\n\n    @media screen and (min-width: 1200px) {\n      font-size: 145px;\n      margin-bottom: 0.5em;\n    }\n  }\n\n  p {\n    color: $color-white;\n    line-height: 1.75;\n  }\n\n  .button {\n    font-size: 1.2em;\n  }\n\n  .blurb {\n    max-width: 400px;\n    margin: 0 auto;;\n  }\n}\n</style>\n","import { render } from \"./HomePhotography.vue?vue&type=template&id=32dfbc8d\"\nimport script from \"./HomePhotography.vue?vue&type=script&lang=js\"\nexport * from \"./HomePhotography.vue?vue&type=script&lang=js\"\n\nimport \"./HomePhotography.vue?vue&type=style&index=0&id=32dfbc8d&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n  <section class=\"contact light bgc-purple neo padded\">\n    <h2>contact</h2>\n    <div class=\"social-links\">\n      <div>\n        <span class=\"social-links__icon\"><font-awesome-icon :icon=\"['fas', 'envelope']\" /></span>\n        <span class=\"social-links__text social-links__text-small\">{{ email }}</span>\n      </div>\n      <a href=\"https://www.linkedin.com/in/kent-widman/\">\n        <span class=\"social-links__icon\"><font-awesome-icon :icon=\"['fab', 'linkedin']\" /></span>\n        <span class=\"social-links__text\">@kent-widman</span>\n      </a>\n      <a href=\"https://www.instagram.com/eightbitkent/\">\n        <span class=\"social-links__icon\"><font-awesome-icon :icon=\"['fab', 'instagram']\" /></span>\n        <span class=\"social-links__text\">@eightbitkent</span>\n      </a>\n      <a href=\"https://open.spotify.com/artist/4lcGOrD8Lve5FVMYhnezkp\">\n        <span class=\"social-links__icon\"><font-awesome-icon :icon=\"['fab', 'spotify']\" /></span>\n        <span class=\"social-links__text\">Love in October</span>\n      </a>\n      <a href=\"https://open.spotify.com/artist/4lcGOrD8Lve5FVMYhnezkp\">\n        <span class=\"social-links__icon\"><font-awesome-icon :icon=\"['fab', 'spotify']\" /></span>\n        <span class=\"social-links__text\">Eight Bit Tiger</span>\n      </a>\n    </div>\n  </section>\n</template>\n\n<script>\nexport default {\n  name: 'ContactSection',\n  data() {\n    return {\n      email: '',\n      time: 10,\n    };\n  },\n  mounted() {\n    const timer = setInterval(\n      () => {\n        this.time -= 1;\n        if (this.time > 0) {\n          this.email = this.time;\n        } else {\n          clearInterval(timer);\n          this.email = 'kentwidman@gmail.com';\n        }\n      },\n      1000,\n    );\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@import '../scss/common';\n.contact {\n  background-position: top center;\n  background-attachment: fixed;\n  text-align: center;\n  height: 100vh;\n  min-height: 800px;\n\n  .email {\n    font-size: 24px;\n    text-decoration: none;\n    color: #fff;\n    width: 100%;\n    text-align: center;\n  }\n\n  a {\n    color: #fff;\n    &:hover {\n      color: #fff;\n    }\n  }\n}\n\n.info,\n.social-links {\n  text-align: left;\n  max-width: 380px;\n  font-size: 2.0em;\n  margin: 60px auto;\n\n  @media screen and (min-width: 640px) {\n    font-size: 40px;\n    max-width: 400px;\n  }\n\n  & > * {\n    display: flex;\n    justify-content: space-between;\n    margin: 15px 0;\n  }\n}\n\n.social-links__icon {\n  width: calc(15% - 15px);\n  text-align: right;\n\n  @media screen and (min-width: 640px) {\n    width: calc(15% - 15px);\n  }\n}\n\n.social-links__text {\n  width: calc(85% - 15px);\n\n  @media screen and (min-width: 640px) {\n    width: calc(85% - 15px);\n  }\n\n  &-small {\n    font-size: 18px;\n\n    @media screen and (min-width: 640px) {\n      font-size: 28px;\n    }\n  }\n}\n</style>\n","import { render } from \"./Contact.vue?vue&type=template&id=837e5504\"\nimport script from \"./Contact.vue?vue&type=script&lang=js\"\nexport * from \"./Contact.vue?vue&type=script&lang=js\"\n\nimport \"./Contact.vue?vue&type=style&index=0&id=837e5504&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n<footer class=\"footer\">\n  <div class=\"footer-lower footer-wrapper\">\n    <p class=\"footer-copyright\">© <span>{{ year }}</span> KentWidman.com</p>\n  </div>\n</footer>\n</template>\n\n<script>\nexport default {\n  name: 'FooterSection',\n  data() {\n    return {\n      year: new Date().getFullYear(),\n    };\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.footer {\n  color: $color-white;\n  background-color: $color-black;\n  margin: 0 auto 0;\n  max-width: 1440px;\n  position: relative;\n  z-index: 0;\n  overflow: hidden;\n}\n\n.padding {\n  padding: 20px;\n}\n\n.footer-buttons {\n  margin-top: 64px;\n  text-align: center;\n}\n\n.footer-lower  {\n  padding: 48px 20px 65px;\n}\n\n.footer-copyright {\n  text-align: center;\n}\n\n.footer-links {\n  text-align: center;\n}\n</style>\n","import { render } from \"./SiteFooter.vue?vue&type=template&id=e93e46c4\"\nimport script from \"./SiteFooter.vue?vue&type=script&lang=js\"\nexport * from \"./SiteFooter.vue?vue&type=script&lang=js\"\n\nimport \"./SiteFooter.vue?vue&type=style&index=0&id=e93e46c4&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./HomeView.vue?vue&type=template&id=6bf28441\"\nimport script from \"./HomeView.vue?vue&type=script&lang=js\"\nexport * from \"./HomeView.vue?vue&type=script&lang=js\"\n\nimport \"./HomeView.vue?vue&type=style&index=0&id=6bf28441&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createRouter, createWebHistory } from 'vue-router';\nimport HomeView from '../views/HomeView.vue';\n\nconst routes = [\n  {\n    path: '/',\n    name: 'HomeView',\n    component: HomeView,\n  },\n  {\n    path: '/about',\n    name: 'AboutView',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/AboutView.vue'),\n  },\n  {\n    path: '/code',\n    name: 'CodeView',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/CodeView.vue'),\n  },\n  {\n    path: '/work',\n    name: 'WorkView',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/WorkView.vue'),\n  },\n  {\n    path: '/photography',\n    name: 'Photography',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/PhotographyView.vue'),\n  },\n  {\n    path: '/gallery/:id',\n    name: 'GalleryView',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/GalleryView.vue'),\n  },\n  {\n    path: '/code/product-filtering',\n    name: 'ProductFilteringView',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../code/product-filtering/products.vue'),\n  },\n  {\n    path: '/code/mustache-loadbar',\n    name: 'MustacheLoadbar',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../code/mustache-loadbar/mustache-loadbar.vue'),\n  },\n  {\n    path: '/code/kentris',\n    name: 'Kentris',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../code/kentris/kentris.vue'),\n  },\n  {\n    path: '/code/elevator-simulator',\n    name: 'ElevatorSimulator',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../code/elevator-simulator/elevator-simulator.vue'),\n  },\n  {\n    path: '/code/porsche-racer',\n    name: 'PorscheRacer',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../code/porsche-racer/porsche-racer.vue'),\n  },\n];\n\nconst router = createRouter({\n  history: createWebHistory(process.env.BASE_URL),\n  routes,\n  scrollBehavior(to, from, savedPosition) {\n    console.log({ to, from, savedPosition });\n\n    if (to.path === from.path) {\n      return {};\n    }\n\n    // always scroll to top\n    return { top: 0 };\n  },\n});\n\nexport default router;\n","import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\nimport { library } from '@fortawesome/fontawesome-svg-core';\n\n/*\nName    | Free | Paid | Prefix | NPM Package (free)                  | NPM package (paid)\n---------------------------------------------------------------------------------------------------------\nSolid   | Yes  | Yes  | fas    | @fortawesome/free-solid-svg-icons   | @fortawesome/pro-solid-svg-icons\nRegular | Yes  | Yes  | far    | @fortawesome/free-regular-svg-icons | @fortawesome/pro-regular-svg-icons\nLight   | No   | Yes  | fal    |                                     | @fortawesome/pro-light-svg-icons\nBrands  | Yes  | No   | fab    | @fortawesome/free-brands-svg-icons  |\n*/\n\nimport { faEnvelope } from '@fortawesome/free-solid-svg-icons';\nimport {\n  faLinkedin,\n  faSpotify,\n  faInstagram,\n  faStackOverflow,\n  faGithub,\n} from '@fortawesome/free-brands-svg-icons';\n\n/*\n['far', 'envelope']\n['fab', 'linkedin-in']\n['fab', 'instagram']\n['fab', 'spotify']\n['fab', 'spotify']\n*/\n\nlibrary.add(\n  faEnvelope,\n  faLinkedin,\n  faSpotify,\n  faInstagram,\n  faStackOverflow,\n  faGithub,\n);\n\nexport default FontAwesomeIcon;\n","import { createApp } from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport FontAwesomeIcon from './lib/fontawesome-icons';\n\nwindow.vm = createApp(App)\n  .use(router)\n  .component('font-awesome-icon', FontAwesomeIcon)\n  .mount('#app');\n","<template>\n  <section class=\"work light bgc-black neo padded\">\n    <h2 class=\"work-title\">Digital Work</h2>\n    <Project\n      v-for=\"(workitem, workitemIndex) in work\"\n      :key=\"workitemIndex\"\n      class=\"workitem\"\n      :data=\"workitem\"\n    />\n  </section>\n</template>\n\n<script>\nimport Project from './Project.vue';\n\nconst data = require('../data/work.json');\n\nexport default {\n  name: 'WorkSection',\n  components: {\n    Project,\n  },\n  data() {\n    return {\n      work: data,\n    };\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.work {\n  background-position: top center;\n  background-attachment: fixed;\n  height: auto;\n  padding-bottom: 10px;\n  overflow: hidden;\n}\n\n.work-title {\n  margin-bottom: 1.0em !important;\n}\n</style>\n","<template>\n<article class=\"work-project\">\n  <h1 class=\"work-project-title\">{{title}}</h1>\n  <div class=\"awards\">\n    <div class=\"award\" v-for=\"award in awards\" :key=\"award\" >\n      <svg class=\"awwwards\" v-if=\"award === 'awwwards'\" width=\"141\" height=\"22.3\" viewBox=\"0 0 280 44.3\">\n        <path class=\"logo-fill\" id=\"logo-a1\" d=\"M1.2,20.8c1-5.1,5.5-8.7,11.9-8.7c7.4,0,13.1,3.1,13.1,13.1v18.6h-6.3l-0.8-4c-2.2,2.7-5.1,4.5-9.6,4.5 C4.2,44.3,0,41,0,34.8s5.5-10.2,13.3-10.2h5.2v-1.4c0-3.5-2.6-4.6-5.5-4.6c-2.2,0-4.4,0.7-5.4,3.6L1.2,20.8z M11.3,37.8 c3.5,0,7.2-2.4,7.2-6.4v-0.6h-5.1c-3.3-0.1-5.3,1.2-5.3,3.9C8.1,36.2,9.2,37.8,11.3,37.8z\"></path>\n        <path class=\"logo-fill\" id=\"logo-a2\" d=\"M151,20.8c1-5.1,5.5-8.7,11.9-8.7c7.4,0,13.1,3.1,13.1,13.1v18.6h-6.3l-0.8-4c-2.2,2.7-5.1,4.5-9.6,4.5 c-5.3,0-9.5-3.3-9.5-9.5s5.5-10.2,13.3-10.2h5.2v-1.4c0-3.5-2.6-4.6-5.5-4.6c-2.2,0-4.4,0.7-5.4,3.6L151,20.8z M161.1,37.8 c3.5,0,7.2-2.4,7.2-6.4v-0.6h-5.1c-3.3,0-5.3,1.2-5.3,4C157.9,36.2,159,37.8,161.1,37.8z\"></path>\n        <path class=\"logo-fill\" id=\"logo-r\" d=\"M183,43.9V12.6h7.7v5.1c2.2-3.7,5.7-5.6,9.2-5.6c1.4,0,2.5,0.2,3.8,0.6l-1.4,7.1c-0.9-0.6-1.9-0.9-3.2-0.9 c-4.5,0-8.4,3.7-8.4,13.8v11.1L183,43.9L183,43.9z\"></path>\n        <path class=\"logo-fill\" id=\"logo-d\" d=\"M220.1,12.1c3.2,0,6.2,1.6,7.6,3.3V0h7.7v43.9h-7.7v-3.2c-0.9,1.6-3.7,3.7-7.6,3.7c-9.4,0-14.2-6.5-14.2-16.1 S210.7,12.1,220.1,12.1z M221.2,37.8c4,0,7.2-3.3,7.2-9.5s-3.2-9.5-7.2-9.5s-7.2,3.3-7.2,9.5S217.2,37.8,221.2,37.8z\"></path>\n        <path class=\"logo-fill\" id=\"logo-s\" d=\"M263.2,17.1l-4.6,4.2c-1.4-1.9-3.5-2.7-5.2-2.7c-1.5,0-2.9,0.9-2.9,2.6c0,1.4,1.1,2.4,3,3 c4.3,1.6,11.3,2.9,11.3,9.6c0,5.7-4.3,10.4-11.1,10.4c-6.5,0-10.9-4.6-12.4-8.4l6.1-3.3c1.1,3,3.2,5.2,6.3,5.2 c2.4,0,3.9-1.1,3.9-3.4c0-2.6-4-3.2-7.8-4.8c-3.4-1.4-6.3-3.6-6.3-8.4s3.9-9.1,10-9.1C257.6,12,261.3,14.1,263.2,17.1z\"></path>\n        <polygon class=\"logo-fill\" id=\"logo-w2\" points=\"103,12.6 97.5,34.1 92.2,12.6 85,12.6 79.8,34.1 75.4,21.6 74.9,23.1 72.4,31.1 76.4,43.9 83.2,43.9  88.6,23.7 94,43.9 100.8,43.9 110.8,12.6\"></polygon>\n        <polygon class=\"logo-fill\" id=\"logo-w3\" points=\"140.2,12.6 134.6,34.1 129.3,12.6 122.1,12.6 116.9,34.1 112.5,21.6 112,23.1 109.5,31.1 113.5,43.9  120.3,43.9 125.7,23.7 131.1,43.9 137.9,43.9 147.9,12.6\"></polygon>\n        <path class=\"logo-fill\" id=\"logo-w1\" d=\"M73.7,12.6l-10,31.2h-6.8l-5.4-20.2l-5.4,20.3h-6.8l-10-31.2h7.8l5.6,21.4L48,12.7h7.1l5.3,21.4L66,12.7 L73.7,12.6L73.7,12.6z\"></path>\n        <path class=\"logo-fill\" id=\"logo-p\" d=\"M274.8,33.8c3,0,5.2,2.2,5.2,5.2s-2.2,5.2-5.2,5.2s-5.2-2.2-5.2-5.2S271.9,33.8,274.8,33.8z\"></path>\n      </svg>\n    </div>\n  </div>\n  <p>{{description}}</p>\n  <div :class=\"['pictures', 'images', mobileLayout]\">\n    <!-- <a :href=\"'work/'+slug\">See Work</a> -->\n    <div :class=\"['pictures-wrapper', pictureClass]\" >\n      <button v-for=\"image in images\" :key=\"image.title\" @click=\"rotateLeft\" @keydown.left=rotateLeft @keydown.right=rotateRight class=\"work-image\">\n        <picture>\n          <source media=\"(min-width: 850px)\" :srcset=\"image.srcDesktop\">\n          <source media=\"(min-width: 650px)\" :srcset=\"image.srcTable\">\n          <source media=\"(min-width: 465px)\" :srcset=\"image.srcMobile\">\n          <img :width=\"image.width\" :height=\"image.height\" :src=\"image.srcDesktop\" :alt=\"image.title\" loading=\"lazy\">\n        </picture>\n      </button>\n    </div>\n  </div>\n  <div v-if=\"videos\" class=\"video-wrapper\">\n    <video muted autoplay v-for=\"video in videos\" :key=\"video.srcDesktop\">\n      <source media=\"min-width: 850px\" :src=\"video.srcDesktop\">\n    </video>\n  </div>\n  <div class=\"work-details\">\n    <div class=\"links\" v-if=\"links\">\n      <p v-for=\"link in links\" :key=\"link.url\" class=\"btn-center\">\n        <a class=\"btn btn-black\" :href=\"link.url\">{{link.name}}</a>\n      </p>\n    </div>\n  </div>\n</article>\n</template>\n\n<script>\nexport default {\n  name: 'ProjectSection',\n  props: {\n    data: Object,\n  },\n  data() {\n    console.log(this.data);\n    const data = { ...this.data };\n    data.currentImage = 0;\n    return data;\n  },\n  computed: {\n    pictureClass() {\n      const index = (this.currentImage % 3) + 1;\n      return `select-${index}`;\n    },\n  },\n  methods: {\n    rotateLeft() {\n      this.currentImage += 1;\n    },\n    rotateRight() {\n      this.currentImage -= 1;\n    },\n  },\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style lang=\"scss\">\n@import '../scss/common';\n\n.work-project {\n  margin: 0 auto 10vw auto;\n  max-width: 1200px;\n\n  @media screen and (min-width: 1200px) {\n    margin: 0 auto 120px auto;\n  }\n}\n\n.work-project-title {\n  font-size: 12vw !important;\n  margin: 0;\n\n  @media screen and (min-width: 1200px) {\n    font-size: 145px !important;\n  }\n}\n\n.work-details {\n  a {\n    color: #fff;\n  }\n}\n\n.work-image {\n  padding: 0;\n  margin-bottom: 30px;\n}\n\n.pictures {\n  display: block;\n  position: relative;\n  max-width: 1400px;\n  width: calc(100% + 60px);\n  margin-left: -30px;\n  margin-right: -30px;\n\n  @media screen and (min-width: 480px) {\n    width: 100%;\n    margin-left: 0;\n    margin-right: 0;\n  }\n\n  .pictures-wrapper {\n    @media screen and (min-width: 480px) {\n      display: flex;\n      flex-wrap: wrap;\n    }\n  }\n\n  &.scroll {\n    @media screen and (max-width: 479px) {\n      overflow: auto;\n      width: calc(100% + 60px);\n      margin-left: -30px;\n      margin-right: -30px;\n\n      .pictures-wrapper {\n        width: calc(300% - 120px);\n        display: flex;\n        padding-left: 30px;\n        padding-right: 30px;\n      }\n\n      picture {\n        max-width: calc(100% - 90px);\n        margin-right: 30px;\n\n        &:last-child {\n          margin-right: 0;\n        }\n      }\n    }\n  }\n\n  &.stacked {\n    @media screen and (max-width: 479px) {\n      picture {\n        margin-bottom: 30px;\n      }\n    }\n  }\n}\n\n@media screen and (min-width: 480px) {\n  .work-image {\n    display: block;\n    height: auto;\n    position: absolute;\n    z-index: 1;\n    transform: scale(1, 1) translate(0, 0);\n    transition: all ease-in-out 300ms;\n    box-shadow: rgba(0, 0, 0, 0.21) 10px 10px 10px;\n    border: 2px solid white;\n    cursor: pointer;\n    box-sizing: border-box;\n\n    img {\n      display: block;\n      height: auto\n    }\n\n    &:nth-child(2) {\n      z-index: 2;\n      transform: scale(0.5, 0.5) translate(calc(-50% - 60px), 135%);\n    }\n\n    &:nth-child(3) {\n      z-index: 2;\n      transform: scale(0.5, 0.5) translate(calc(50% + 60px), 135%);\n    }\n  }\n\n  .pictures-wrapper {\n    position: relative;\n    height: 0;\n    padding-bottom: 92%;\n\n    &.select-1 {\n      .work-image {\n        &:nth-child(1) {\n          z-index: 1;\n          transform: scale(1, 1) translate(0, 0);\n        }\n\n        &:nth-child(2) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(-50% - 60px), 135%);\n        }\n\n        &:nth-child(3) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(50% + 60px), 135%);\n        }\n      }\n    }\n\n    &.select-2 {\n      .work-image {\n        &:nth-child(1) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(50% + 60px), 135%);\n        }\n\n        &:nth-child(2) {\n          z-index: 1;\n          transform: scale(1, 1) translate(0, 0);\n        }\n\n        &:nth-child(3) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(-50% - 60px), 135%);\n        }\n      }\n    }\n\n    &.select-3 {\n      .work-image {\n        &:nth-child(1) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(-50% - 60px), 135%);\n        }\n\n        &:nth-child(2) {\n          z-index: 2;\n          transform: scale(0.5, 0.5) translate(calc(50% + 60px), 135%);\n        }\n\n        &:nth-child(3) {\n          z-index: 1;\n          transform: scale(1, 1) translate(0, 0);\n        }\n      }\n    }\n  }\n}\n\npicture {\n  display: block;\n  max-width: 100%;\n  width: 100%;\n  height: auto;\n\n  > img {\n    display: block;\n    max-width: 100%;\n    width: 100%;\n    height: auto;\n  }\n}\n\n.awwwards {\n  fill: #FFF;\n  z-index: 0;\n  transition: all 0.3s;\n}\n</style>\n","import { render } from \"./Project.vue?vue&type=template&id=0692e064\"\nimport script from \"./Project.vue?vue&type=script&lang=js\"\nexport * from \"./Project.vue?vue&type=script&lang=js\"\n\nimport \"./Project.vue?vue&type=style&index=0&id=0692e064&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Work.vue?vue&type=template&id=2e92f2c6\"\nimport script from \"./Work.vue?vue&type=script&lang=js\"\nexport * from \"./Work.vue?vue&type=script&lang=js\"\n\nimport \"./Work.vue?vue&type=style&index=0&id=2e92f2c6&lang=scss\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + \"about\" + \".\" + \"fccca7e6\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + \"about\" + \".\" + \"621ba3e9\" + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"website:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"443\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkwebsite\"] = self[\"webpackChunkwebsite\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(5388); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_createVNode","_component_Navigation","_component_router_view","id","class","role","ref","_createElementVNode","_hoisted_6","_createElementBlock","_hoisted_1","_hoisted_2","type","_normalizeClass","$data","isMenuOpen","onClick","_cache","args","$options","toggleMenu","onFocus","_hoisted_4","_hoisted_5","_component_router_link","closeMenu","to","_hoisted_8","name","data","didScroll","lastScrollTop","delta","navbarHeight","ft","mounted","this","setup","focusTrap","$refs","navFocusTrap","watch","val","htmlEl","document","getElementsByTagName","classList","add","hideContentForScreenReaders","activate","remove","showContentForScreenReaders","setTimeout","navOverlay","scrollTo","deactivate","methods","openMenu","addEventListener","onScroll","setInterval","checkInterval","navControls","hasScrolled","st","window","scrollY","Math","abs","windowHeight","innerHeight","documentHeight","body","scrollHeight","elementsToHide","querySelectorAll","forEach","e","setAttribute","elementsToShow","destoyed","__exports__","components","Navigation","render","_component_Intro","_component_Lights","_component_About","_component_Houndini","_component_Code","_component_Work","_component_HomePhotography","_component_Contact","_component_SiteFooter","_hoisted_3","canvasElement","context","fps","fpsTimmer","matrixSize","vw","max","documentElement","clientWidth","innerWidth","vh","clientHeight","screenSize","enableAnimation","changePatternInterval","lightPatterns","lightPattern1","lightPattern2","lightPattern3","strobe1","strobe2","currenLightPattern","matrix","colors","randomnumber","min","floor","random","init","el","getContext","Array","y","x","screenResize","requestAnimationFrame","loop","random_number","length","console","log","destroy","clearInterval","removeEventListener","now","Date","color","fillStyle","fillRect","resize","canvas","width","height","tigger","colorIndex","lightPattern2lastIndex","lightPattern2Index","lightPattern2IndexSpacing","sprites","skip","sprite","startX","startY","flip","round","currentX","currentY","horizontal","isHorizontal","divider","slice","start","end","matrixSizeWidth","matrixSizeHeight","isArray","lights","getElementById","beforeUnmount","preload","playsinline","autoplay","muted","src","href","target","btn","_hoisted_7","email","time","_imports_0","alt","_imports_1","_imports_2","_imports_3","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_component_font_awesome_icon","icon","_toDisplayString","timer","year","getFullYear","Intro","Lights","About","Houndini","Code","Work","Contact","HomePhotography","SiteFooter","metaInfo","title","titleTemplate","routes","path","component","HomeView","router","createRouter","history","createWebHistory","process","scrollBehavior","from","savedPosition","top","library","faEnvelope","faLinkedin","faSpotify","faInstagram","faStackOverflow","faGithub","FontAwesomeIcon","vm","createApp","App","use","mount","_Fragment","_renderList","work","workitem","workitemIndex","_createBlock","_component_Project","key","viewBox","_ctx","awards","award","description","mobileLayout","pictureClass","images","image","rotateLeft","onKeydown","rotateRight","media","srcset","srcDesktop","srcTable","srcMobile","loading","videos","video","_hoisted_21","links","_hoisted_22","link","url","_hoisted_23","props","Object","currentImage","computed","index","require","Project","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","script","needAttach","scripts","s","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","p","createStylesheet","fullhref","oldTag","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","err","Error","code","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","error","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}