mirror of https://github.com/bra1n/townsquare.git
1 line
60 KiB
Plaintext
1 line
60 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Modal.vue?1f08","webpack:///./src/components/TownSquare.vue?b88a","webpack:///./src/App.vue?42f2","webpack:///./src/components/TownSquare.vue?1b54","webpack:///./src/components/Player.vue?54a5","webpack:///src/components/Player.vue","webpack:///./src/components/Player.vue?1369","webpack:///./src/components/Player.vue","webpack:///./src/components/Modal.vue?1e4c","webpack:///src/components/Modal.vue","webpack:///./src/components/Modal.vue?0f3c","webpack:///./src/components/Modal.vue","webpack:///src/components/TownSquare.vue","webpack:///./src/components/TownSquare.vue?335a","webpack:///./src/components/TownSquare.vue","webpack:///./src/components/TownInfo.vue?2ae8","webpack:///src/components/TownInfo.vue","webpack:///./src/components/TownInfo.vue?6260","webpack:///./src/components/TownInfo.vue","webpack:///src/App.vue","webpack:///./src/App.vue?b65f","webpack:///./src/App.vue","webpack:///./src/main.js","webpack:///./src/App.vue?6ee5","webpack:///./src/components/Player.vue?6d3c","webpack:///./src/components/TownInfo.vue?ca37"],"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","render","_vm","this","_h","$createElement","_c","_self","attrs","players","isPublic","roles","staticClass","on","$event","isControlOpen","togglePublic","_v","addPlayer","_e","randomizeSeatings","staticRenderFns","class","public","_l","player","index","openReminderModal","openRoleModal","removePlayer","directives","rawName","availableReminders","expression","closeModal","reminder","role","addReminder","_s","availableRoles","id","team","setRole","dead","hasDied","hasVoted","traveller","toggleStatus","changeRole","reminders","ability","changeName","stopPropagation","$emit","removeReminder","props","type","required","Map","Boolean","methods","$set","prompt","indexOf","component","close","_t","components","Modal","Player","Array","selectedPlayer","forEach","some","map","confirm","teams","alive","votes","townsfolk","outsiders","minions","demons","travellers","computed","nontravellers","filter","game","set","location","hash","substr","sort","a","b","localeCompare","TownSquare","TownInfo","Math","random","add","config","productionTip","h","App","$mount"],"mappings":"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","file":"js/app.95a8e036.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 = \"/townsquare/\";\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([\"56d7\",\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=style&index=0&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('TownInfo',{attrs:{\"players\":_vm.players}}),_c('TownSquare',{attrs:{\"is-public\":_vm.isPublic,\"players\":_vm.players,\"roles\":_vm.roles}}),_c('div',{staticClass:\"controls\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"cogs\"},on:{\"click\":function($event){_vm.isControlOpen = !_vm.isControlOpen}}}),(_vm.isControlOpen)?_c('ul',[_c('li',{on:{\"click\":_vm.togglePublic}},[_vm._v(\" Toggle Grimoire \")]),(_vm.players.length < 20)?_c('li',{on:{\"click\":_vm.addPlayer}},[_vm._v(\" Add Player \")]):_vm._e(),(_vm.players.length > 4)?_c('li',{on:{\"click\":_vm.togglePublic}},[_vm._v(\" Select Roles \")]):_vm._e(),(_vm.players.length > 2)?_c('li',{on:{\"click\":_vm.randomizeSeatings}},[_vm._v(\" Randomize Seatings \")]):_vm._e()]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"square\",class:{ public: _vm.isPublic },attrs:{\"id\":\"townsquare\"}},[_c('ul',{staticClass:\"circle\",class:['size-' + _vm.players.length]},_vm._l((_vm.players),function(player,index){return _c('Player',{key:index,attrs:{\"player\":player,\"roles\":_vm.roles,\"is-public\":_vm.isPublic},on:{\"add-reminder\":_vm.openReminderModal,\"set-role\":_vm.openRoleModal,\"remove-player\":_vm.removePlayer}})}),1),_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.availableReminders.length),expression:\"availableReminders.length\"}],on:{\"close\":_vm.closeModal}},[_c('h2',[_vm._v(\"Choose a reminder token:\")]),_c('ul',{staticClass:\"reminders\"},_vm._l((_vm.availableReminders),function(reminder){return _c('li',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.addReminder(reminder)}}},[_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}),0)]),_c('Modal',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.availableRoles.length),expression:\"availableRoles.length\"}],on:{\"close\":_vm.closeModal}},[_c('h2',[_vm._v(\"Choose a new role:\")]),_c('ul',{staticClass:\"tokens\"},_vm._l((_vm.availableRoles),function(role){return _c('li',{key:role.id,staticClass:\"token\",class:[role.id, role.team],on:{\"click\":function($event){return _vm.setRole(role)}}},[_vm._v(\" \"+_vm._s(role.name)+\" \")])}),0)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"player\",class:{\n dead: _vm.player.hasDied,\n 'no-vote': _vm.player.hasVoted,\n traveller: _vm.player.role.team === 'traveller'\n }},[_c('div',{staticClass:\"shroud\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),_c('div',{staticClass:\"life\",on:{\"click\":function($event){return _vm.toggleStatus()}}}),_c('div',{staticClass:\"token\",class:[_vm.player.role.id],on:{\"click\":function($event){return _vm.changeRole()}}},[(_vm.player.role.firstNight)?_c('span',{staticClass:\"leaf-left\"}):_vm._e(),(_vm.player.role.otherNight)?_c('span',{staticClass:\"leaf-right\"}):_vm._e(),(_vm.player.role.reminders && _vm.player.role.reminders.length)?_c('span',{class:['leaf-top' + _vm.player.role.reminders.length]}):_vm._e(),(_vm.player.role.setup)?_c('span',{staticClass:\"leaf-orange\"}):_vm._e(),_c('div',[_vm._v(_vm._s(_vm.player.role.name))])]),(_vm.player.role.ability)?_c('div',{staticClass:\"ability\"},[_vm._v(\" \"+_vm._s(_vm.player.role.ability)+\" \")]):_vm._e(),_c('div',{staticClass:\"name\",on:{\"click\":_vm.changeName}},[_vm._v(\" \"+_vm._s(_vm.player.name)+\" \"),_c('span',{staticClass:\"remove\",on:{\"click\":function($event){$event.stopPropagation();return _vm.$emit('remove-player', _vm.player)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"times-circle\"}})],1)])]),(_vm.player.reminders)?_vm._l((_vm.player.reminders),function(reminder){return _c('div',{key:reminder.role + ' ' + reminder.name,staticClass:\"reminder\",class:[reminder.role],on:{\"click\":function($event){return _vm.removeReminder(reminder)}}},[_vm._v(\" \"+_vm._s(reminder.name)+\" \")])}):_vm._e(),_c('div',{staticClass:\"reminder add\",on:{\"click\":function($event){return _vm.$emit('add-reminder', _vm.player)}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <li>\n <div\n class=\"player\"\n :class=\"{\n dead: player.hasDied,\n 'no-vote': player.hasVoted,\n traveller: player.role.team === 'traveller'\n }\"\n >\n <div class=\"shroud\" @click=\"toggleStatus()\"></div>\n <div class=\"life\" @click=\"toggleStatus()\"></div>\n <div class=\"token\" @click=\"changeRole()\" :class=\"[player.role.id]\">\n <span class=\"leaf-left\" v-if=\"player.role.firstNight\"></span>\n <span class=\"leaf-right\" v-if=\"player.role.otherNight\"></span>\n <span\n v-if=\"player.role.reminders && player.role.reminders.length\"\n v-bind:class=\"['leaf-top' + player.role.reminders.length]\"\n ></span>\n <span class=\"leaf-orange\" v-if=\"player.role.setup\"></span>\n <div>{{ player.role.name }}</div>\n </div>\n <div class=\"ability\" v-if=\"player.role.ability\">\n {{ player.role.ability }}\n </div>\n <div class=\"name\" @click=\"changeName\">\n {{ player.name }}\n <span class=\"remove\" @click.stop=\"$emit('remove-player', player)\">\n <font-awesome-icon icon=\"times-circle\" />\n </span>\n </div>\n </div>\n <template v-if=\"player.reminders\">\n <div\n class=\"reminder\"\n v-bind:key=\"reminder.role + ' ' + reminder.name\"\n v-for=\"reminder in player.reminders\"\n v-bind:class=\"[reminder.role]\"\n @click=\"removeReminder(reminder)\"\n >\n {{ reminder.name }}\n </div>\n </template>\n <div class=\"reminder add\" @click=\"$emit('add-reminder', player)\"></div>\n </li>\n</template>\n\n<script>\nexport default {\n props: {\n player: {\n type: Object,\n required: true\n },\n roles: {\n type: Map,\n required: true\n },\n isPublic: {\n type: Boolean,\n required: true\n }\n },\n data() {\n return {};\n },\n methods: {\n toggleStatus() {\n if (this.isPublic) {\n if (!this.player.hasDied) {\n this.$set(this.player, \"hasDied\", true);\n } else if (this.player.hasVoted) {\n this.$set(this.player, \"hasVoted\", false);\n this.$set(this.player, \"hasDied\", false);\n } else {\n this.$set(this.player, \"hasVoted\", true);\n }\n } else {\n this.$set(this.player, \"hasDied\", !this.player.hasDied);\n }\n },\n changeRole() {\n this.$emit(\"set-role\", this.player);\n },\n changeName() {\n const name = prompt(\"Player name\", this.player.name);\n this.player.name = name || this.player.name;\n },\n removeReminder(reminder) {\n this.player.reminders.splice(this.player.reminders.indexOf(reminder), 1);\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"../vars.scss\";\n\n/***** Player token *****/\n.circle .player {\n margin-bottom: 10px;\n padding-top: $token + 6px;\n\n .shroud {\n content: \" \";\n background: url(\"../assets/shroud.png\") center -10px no-repeat;\n background-size: auto 100%;\n position: absolute;\n margin-left: -2/6 * $token;\n width: 2/3 * $token;\n height: 2/3 * $token;\n left: 50%;\n top: -30px;\n cursor: pointer;\n opacity: 0;\n transform: perspective(400px) scale(1.5);\n transform-origin: top center;\n transition: all 200ms ease-in-out;\n z-index: 2;\n &:hover {\n opacity: 0.5;\n top: -10px;\n transform: scale(1);\n }\n }\n\n &.dead .shroud {\n opacity: 1;\n top: 0;\n transform: perspective(400px) scale(1);\n }\n &.dead .name {\n opacity: 0.5;\n }\n}\n\n/****** Life token *******/\n.player .life {\n border-radius: 50%;\n height: $token + 6px;\n width: $token + 6px;\n background: url(\"../assets/life.png\") center center;\n background-size: 100%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n transition: transform 200ms ease-in-out;\n transform: perspective(400px) rotateY(180deg);\n backface-visibility: hidden;\n position: absolute;\n left: 50%;\n top: 0;\n margin-left: ($token + 6) / -2;\n}\n\n#townsquare.public .player {\n .shroud {\n transform: perspective(400px) rotateX(90deg);\n pointer-events: none;\n }\n\n .life {\n transform: perspective(400px) rotateY(0deg);\n }\n\n &.dead {\n &.traveller {\n filter: grayscale(100%);\n }\n\n &.no-vote .life:after {\n display: none;\n }\n\n .life {\n background-image: url(\"../assets/death.png\");\n\n &:after {\n content: \" \";\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n background: url(\"../assets/vote.png\") center center no-repeat;\n background-size: 50%;\n height: $token + 3px;\n pointer-events: none;\n }\n }\n }\n}\n\n/***** Role token ******/\n.circle .token {\n border-radius: 50%;\n height: $token + 6px;\n width: $token + 6px;\n background: url(\"../assets/token.png\") center center;\n background-size: 100%;\n text-align: center;\n color: black;\n font-weight: 600;\n text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff,\n 1px 1px 0 #fff, 0 0 5px rgba(0, 0, 0, 0.75);\n padding-top: $token * 0.7;\n font-family: \"Papyrus\", serif;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n transition: transform 200ms ease-in-out;\n transform: perspective(400px) rotateY(0deg);\n backface-visibility: hidden;\n position: absolute;\n left: 50%;\n top: 0;\n margin-left: ($token + 6) / -2;\n\n &:before {\n content: \" \";\n background-size: 100%;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n }\n\n span {\n position: absolute;\n width: 100%;\n height: 100%;\n background-size: 100%;\n left: 0;\n top: 0;\n pointer-events: none;\n &.leaf-left {\n background-image: url(\"../assets/leaf-left.png\");\n }\n &.leaf-orange {\n background-image: url(\"../assets/leaf-orange.png\");\n }\n &.leaf-right {\n background-image: url(\"../assets/leaf-right.png\");\n }\n &.leaf-top1 {\n background-image: url(\"../assets/leaf-top1.png\");\n }\n &.leaf-top2 {\n background-image: url(\"../assets/leaf-top2.png\");\n }\n &.leaf-top3 {\n background-image: url(\"../assets/leaf-top3.png\");\n }\n &.leaf-top4 {\n background-image: url(\"../assets/leaf-top4.png\");\n }\n &.leaf-top5 {\n background-image: url(\"../assets/leaf-top5.png\");\n }\n }\n}\n\n#townsquare.public .token {\n transform: perspective(400px) rotateY(-180deg);\n}\n\n/***** Player name *****/\n.name {\n font-size: 120%;\n line-height: 120%;\n filter: drop-shadow(0 0 1px rgba(0, 0, 0, 1))\n drop-shadow(0 0 1px rgba(0, 0, 0, 1)) drop-shadow(0 0 1px rgba(0, 0, 0, 1));\n cursor: pointer;\n span {\n display: none;\n }\n &:hover span {\n display: inline-block;\n &:hover {\n color: red;\n }\n }\n}\n\n/***** Ability text *****/\n#townsquare.public .ability {\n display: none;\n}\n.circle .ability {\n position: absolute;\n padding: 5px 10px;\n top: 20px;\n right: 100%;\n width: 200px;\n z-index: 25;\n font-size: 80%;\n background: rgba(0, 0, 0, 0.7);\n border-radius: 10px;\n border: 3px solid black;\n text-align: left;\n display: none;\n &:after {\n content: \" \";\n border: 10px solid transparent;\n position: absolute;\n left: 100%;\n width: 0;\n height: 0;\n border-left-color: black;\n top: 20px;\n margin: 0 2px;\n }\n}\n\n.player:hover .ability {\n display: block;\n}\n\n/***** Reminder token *****/\n.circle .reminder {\n background: url(\"../assets/reminder.png\") center center;\n background-size: 100%;\n width: $token / 2;\n height: $token / 2;\n color: black;\n font-size: 50%;\n font-weight: bold;\n display: block;\n margin: 5px ($token / -4) 0;\n text-align: center;\n padding-top: $token * 0.3 + 2px;\n border-radius: 50%;\n line-height: 90%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n transition: all 200ms;\n cursor: pointer;\n\n &:before,\n &:after {\n content: \" \";\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-size: 100%;\n background-position: center 0;\n background-repeat: no-repeat;\n background-image: url(\"../assets/icons/plus.png\");\n transition: opacity 200ms;\n }\n\n &:after {\n background-image: url(\"../assets/icons/x.png\");\n opacity: 0;\n }\n\n &.add {\n opacity: 0;\n top: 30px;\n &:after {\n display: none;\n }\n }\n\n &:hover:before {\n opacity: 0;\n }\n &:hover:after {\n opacity: 1;\n }\n}\n.circle li:hover .reminder.add {\n opacity: 1;\n top: 0;\n}\n.circle li:hover .reminder.add:before {\n opacity: 1;\n}\n\n#townsquare.public .reminder {\n opacity: 0;\n pointer-events: none;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Player.vue?vue&type=template&id=50428575&\"\nimport script from \"./Player.vue?vue&type=script&lang=js&\"\nexport * from \"./Player.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Player.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal-fade\"}},[_c('div',{staticClass:\"modal-backdrop\",on:{\"click\":_vm.close}},[_c('div',{staticClass:\"modal\",attrs:{\"role\":\"dialog\",\"aria-labelledby\":\"modalTitle\",\"aria-describedby\":\"modalDescription\"},on:{\"click\":function($event){$event.stopPropagation();}}},[_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\nexport default {\n methods: {\n close() {\n this.$emit(\"close\");\n }\n }\n};\n</script>\n<template>\n <transition name=\"modal-fade\">\n <div class=\"modal-backdrop\" @click=\"close\">\n <div\n class=\"modal\"\n role=\"dialog\"\n aria-labelledby=\"modalTitle\"\n aria-describedby=\"modalDescription\"\n @click.stop=\"\"\n >\n <slot></slot>\n </div>\n </div>\n </transition>\n</template>\n<style lang=\"scss\">\n.modal-backdrop {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 100;\n}\n\n.modal {\n background: rgba(0, 0, 0, 0.8);\n padding: 10px 20px;\n border-radius: 10px;\n box-shadow: 2px 2px 20px 1px #000;\n overflow-x: auto;\n display: flex;\n flex-direction: column;\n max-width: 60%;\n\n h2 {\n margin: 0;\n text-align: center;\n }\n}\n\n.modal-fade-enter,\n.modal-fade-leave-active {\n opacity: 0;\n}\n\n.modal-fade-enter-active,\n.modal-fade-leave-active {\n transition: opacity 0.2s ease;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Modal.vue?vue&type=template&id=510cf159&\"\nimport script from \"./Modal.vue?vue&type=script&lang=js&\"\nexport * from \"./Modal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Modal.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"townsquare\" class=\"square\" v-bind:class=\"{ public: isPublic }\">\n <ul class=\"circle\" v-bind:class=\"['size-' + players.length]\">\n <Player\n v-for=\"(player, index) in players\"\n :key=\"index\"\n :player=\"player\"\n :roles=\"roles\"\n :is-public=\"isPublic\"\n @add-reminder=\"openReminderModal\"\n @set-role=\"openRoleModal\"\n @remove-player=\"removePlayer\"\n ></Player>\n </ul>\n <Modal v-show=\"availableReminders.length\" @close=\"closeModal\">\n <h2>Choose a reminder token:</h2>\n <ul class=\"reminders\">\n <li\n v-for=\"reminder in availableReminders\"\n class=\"reminder\"\n v-bind:class=\"[reminder.role]\"\n v-bind:key=\"reminder.role + ' ' + reminder.name\"\n @click=\"addReminder(reminder)\"\n >\n {{ reminder.name }}\n </li>\n </ul>\n </Modal>\n <Modal v-show=\"availableRoles.length\" @close=\"closeModal\">\n <h2>Choose a new role:</h2>\n <ul class=\"tokens\">\n <li\n v-for=\"role in availableRoles\"\n class=\"token\"\n v-bind:class=\"[role.id, role.team]\"\n v-bind:key=\"role.id\"\n @click=\"setRole(role)\"\n >\n {{ role.name }}\n </li>\n </ul>\n </Modal>\n </div>\n</template>\n\n<script>\nimport Player from \"./Player\";\nimport Modal from \"./Modal\";\n\nexport default {\n components: {\n Modal,\n Player\n },\n props: {\n isPublic: {\n type: Boolean,\n required: true\n },\n players: {\n type: Array,\n required: true\n },\n roles: {\n type: Map,\n required: true\n }\n },\n data() {\n return {\n selectedPlayer: false,\n availableReminders: [],\n availableRoles: []\n };\n },\n methods: {\n openReminderModal(player) {\n this.selectedPlayer = player;\n this.availableReminders = [];\n this.roles.forEach(role => {\n if (this.players.some(p => p.role.id === role.id)) {\n this.availableReminders = [\n ...this.availableReminders,\n ...role.reminders.map(name => ({ role: role.id, name }))\n ];\n }\n });\n this.availableReminders.push({ role: \"good\", name: \"Good\" });\n this.availableReminders.push({ role: \"evil\", name: \"Evil\" });\n },\n openRoleModal(player) {\n this.selectedPlayer = player;\n this.availableRoles = [];\n this.roles.forEach(role => {\n if (role.id !== player.role) {\n this.availableRoles.push(role);\n }\n });\n this.availableRoles.push({});\n },\n addReminder(reminder) {\n this.selectedPlayer.reminders.push(reminder);\n this.closeModal();\n },\n setRole(role) {\n this.selectedPlayer.role = role;\n this.closeModal();\n },\n closeModal() {\n this.selectedPlayer = false;\n this.availableReminders = [];\n this.availableRoles = [];\n },\n removePlayer(player) {\n if (confirm(`Do you really want to remove ${player.name}?`)) {\n this.players.splice(this.players.indexOf(player), 1);\n }\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"../vars.scss\";\n\n@each $img, $fontsize in $roles {\n .token.#{$img} {\n &:before {\n background-image: url(\"../assets/icons/#{$img}.png\");\n }\n font-size: $fontsize;\n }\n\n .reminder.#{$img}:before {\n background-image: url(\"../assets/icons/#{$img}.png\");\n }\n}\n\n.circle {\n padding: 0;\n width: 100%;\n height: 100%;\n list-style: none;\n margin: 0;\n\n li {\n position: absolute;\n top: 0;\n left: 50%;\n height: 50%;\n transform-origin: 0 100%;\n text-align: center;\n\n &:hover {\n z-index: 25 !important;\n }\n\n > * {\n margin-left: -100px;\n width: 200px;\n }\n }\n}\n\n@mixin on-circle($item-count) {\n $angle: (360 / $item-count);\n $rot: 0;\n\n @for $i from 1 through $item-count {\n &:nth-child(#{$i}) {\n transform: rotate($rot * 1deg);\n @if $i - 1 <= $item-count / 2 {\n z-index: $item-count - $i + 1;\n .ability {\n left: 100%;\n right: auto;\n &:after {\n border-left-color: transparent;\n border-right-color: black;\n left: auto;\n right: 100%;\n }\n }\n } @else {\n z-index: $i - 1;\n }\n > * {\n transform: rotate($rot * -1deg);\n }\n .life,\n .token {\n transition-delay: $i * 50ms;\n }\n }\n $rot: $rot + $angle;\n }\n}\n\n@for $i from 1 through 20 {\n .circle.size-#{$i} li {\n @include on-circle($item-count: $i);\n }\n}\n\n#townsquare {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n padding: 20px;\n}\n\n/***** Role token modal ******/\nul.tokens {\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n align-items: center;\n overflow: hidden;\n justify-content: center;\n font-size: 75%;\n line-height: 100%;\n\n .token {\n border-radius: 50%;\n height: 120px;\n width: 120px;\n background: url(\"../assets/token.png\") center center;\n background-size: 100%;\n text-align: center;\n color: black;\n margin: 5px;\n font-weight: 600;\n text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff,\n 1px 1px 0 #fff, 0 0 5px rgba(0, 0, 0, 0.75);\n padding-top: 85px;\n font-family: \"Papyrus\", serif;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n transition: transform 500ms ease;\n\n &.townsfolk {\n box-shadow: 0 0 10px $townsfolk, 0 0 10px #004cff;\n }\n &.outsider {\n box-shadow: 0 0 10px $outsider, 0 0 10px $outsider;\n }\n &.minion {\n box-shadow: 0 0 10px $minion, 0 0 10px $minion;\n }\n &.demon {\n box-shadow: 0 0 10px $demon, 0 0 10px $demon;\n }\n &.traveller {\n box-shadow: 0 0 10px $traveller, 0 0 10px $traveller;\n }\n\n &:before {\n content: \" \";\n background-size: 100%;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n\n/***** Reminder token modal ******/\nul.reminders {\n @extend .tokens;\n\n .reminder {\n background: url(\"../assets/reminder.png\") center center;\n background-size: 100%;\n width: 100px;\n height: 100px;\n color: black;\n font-size: 65%;\n font-weight: bold;\n display: block;\n margin: 5px;\n text-align: center;\n border-radius: 50%;\n border: 3px solid black;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n cursor: pointer;\n padding-top: 65px;\n transition: transform 500ms ease;\n\n &:before {\n content: \" \";\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-size: 100%;\n background-position: center 0;\n background-repeat: no-repeat;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownSquare.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TownSquare.vue?vue&type=template&id=f5756096&\"\nimport script from \"./TownSquare.vue?vue&type=script&lang=js&\"\nexport * from \"./TownSquare.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TownSquare.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"info\"},[(_vm.players.length < 5)?_c('li',[_vm._v(\"Please add more players!\")]):_vm._e(),_c('li',[_vm._v(\" \"+_vm._s(_vm.players.length)+\" \"),_c('font-awesome-icon',{staticClass:\"players\",attrs:{\"icon\":\"users\"}}),_vm._v(\" \"+_vm._s(_vm.teams.alive)+\" \"),_c('font-awesome-icon',{staticClass:\"alive\",attrs:{\"icon\":\"heartbeat\"}}),_vm._v(\" \"+_vm._s(_vm.teams.votes)+\" \"),_c('font-awesome-icon',{staticClass:\"votes\",attrs:{\"icon\":\"vote-yea\"}})],1),(_vm.players.length >= 5)?_c('li',[_vm._v(\" \"+_vm._s(_vm.teams.townsfolk)+\" \"),_c('font-awesome-icon',{staticClass:\"townsfolk\",attrs:{\"icon\":\"user-friends\"}}),_vm._v(\" \"+_vm._s(_vm.teams.outsiders)+\" \"),_c('font-awesome-icon',{staticClass:\"outsider\",attrs:{\"icon\":_vm.teams.outsiders > 1 ? 'user-friends' : 'user'}}),_vm._v(\" \"+_vm._s(_vm.teams.minions)+\" \"),_c('font-awesome-icon',{staticClass:\"minion\",attrs:{\"icon\":_vm.teams.minions > 1 ? 'user-friends' : 'user'}}),_vm._v(\" \"+_vm._s(_vm.teams.demons)+\" \"),_c('font-awesome-icon',{staticClass:\"demon\",attrs:{\"icon\":_vm.teams.demons > 1 ? 'user-friends' : 'user'}}),(_vm.teams.travellers)?[_vm._v(\" \"+_vm._s(_vm.teams.travellers)+\" \"),_c('font-awesome-icon',{staticClass:\"traveller\",attrs:{\"icon\":_vm.teams.travellers > 1 ? 'user-friends' : 'user'}})]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <ul class=\"info\">\n <li v-if=\"players.length < 5\">Please add more players!</li>\n <li>\n {{ players.length }} <font-awesome-icon class=\"players\" icon=\"users\" />\n {{ teams.alive }} <font-awesome-icon class=\"alive\" icon=\"heartbeat\" />\n {{ teams.votes }} <font-awesome-icon class=\"votes\" icon=\"vote-yea\" />\n </li>\n <li v-if=\"players.length >= 5\">\n {{ teams.townsfolk }}\n <font-awesome-icon class=\"townsfolk\" icon=\"user-friends\" />\n {{ teams.outsiders }}\n <font-awesome-icon\n class=\"outsider\"\n v-bind:icon=\"teams.outsiders > 1 ? 'user-friends' : 'user'\"\n />\n {{ teams.minions }}\n <font-awesome-icon\n class=\"minion\"\n v-bind:icon=\"teams.minions > 1 ? 'user-friends' : 'user'\"\n />\n {{ teams.demons }}\n <font-awesome-icon\n class=\"demon\"\n v-bind:icon=\"teams.demons > 1 ? 'user-friends' : 'user'\"\n />\n <template v-if=\"teams.travellers\">\n {{ teams.travellers }}\n <font-awesome-icon\n class=\"traveller\"\n v-bind:icon=\"teams.travellers > 1 ? 'user-friends' : 'user'\"\n />\n </template>\n </li>\n </ul>\n</template>\n\n<script>\nimport gameJSON from \"./../game\";\n\nexport default {\n props: {\n players: {\n type: Array,\n required: true\n }\n },\n computed: {\n teams: function() {\n const nontravellers = this.players.filter(\n player => player.role.team !== \"traveller\"\n ).length;\n const alive = this.players.filter(player => player.hasDied !== true)\n .length;\n return {\n ...gameJSON[nontravellers - 5],\n travellers: this.players.length - nontravellers,\n alive,\n votes:\n alive +\n this.players.filter(\n player => player.hasDied === true && player.hasVoted !== true\n ).length\n };\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@import \"../vars.scss\";\n\n.info {\n position: absolute;\n display: flex;\n left: 50%;\n top: 50%;\n width: 20%;\n height: 20%;\n margin-left: -10%;\n margin-top: -5%;\n padding: 0;\n align-items: center;\n align-content: center;\n justify-content: center;\n flex-wrap: wrap;\n background: url(\"../assets/demon-head.png\") center center no-repeat;\n background-size: auto 100%;\n\n li {\n display: block;\n white-space: nowrap;\n font-weight: bold;\n text-align: center;\n padding: 0 5px;\n width: 100%;\n filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.7));\n\n svg {\n margin-right: 10px;\n }\n\n .players {\n color: #00f700;\n }\n .alive {\n color: #ff4a50;\n }\n .votes {\n color: #1cfff2;\n }\n .townsfolk {\n color: $townsfolk;\n }\n .outsider {\n color: $outsider;\n }\n .minion {\n color: $minion;\n }\n .demon {\n color: $demon;\n }\n .traveller {\n color: $traveller;\n }\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TownInfo.vue?vue&type=template&id=5664962c&\"\nimport script from \"./TownInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./TownInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TownInfo.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\">\n <TownInfo :players=\"players\"></TownInfo>\n <TownSquare\n :is-public=\"isPublic\"\n :players=\"players\"\n :roles=\"roles\"\n ></TownSquare>\n <div class=\"controls\">\n <font-awesome-icon icon=\"cogs\" @click=\"isControlOpen = !isControlOpen\"/>\n <ul v-if=\"isControlOpen\">\n <li v-on:click=\"togglePublic\">\n Toggle Grimoire\n </li>\n <li v-on:click=\"addPlayer\" v-if=\"players.length < 20\">\n Add Player\n </li>\n <li v-on:click=\"togglePublic\" v-if=\"players.length > 4\">\n Select Roles\n </li>\n <li v-on:click=\"randomizeSeatings\" v-if=\"players.length > 2\">\n Randomize Seatings\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<script>\nimport TownSquare from \"./components/TownSquare\";\nimport TownInfo from \"./components/TownInfo\";\nimport rolesJSON from \"./roles\";\n\nconst roles = new Map(\n rolesJSON\n .filter(r => r.set === (window.location.hash.substr(1) || \"TB\"))\n .sort((a, b) => b.team.localeCompare(a.team))\n .map(role => [role.id, role])\n);\n\nexport default {\n components: {\n TownSquare,\n TownInfo\n },\n data: () => ({\n isPublic: true,\n isControlOpen: false,\n players: [\n // {\n // name: \"Steffen\",\n // role: roles.get(\"baron\"),\n // reminders: [{ role: \"imp\", name: \"Die\" }]\n // },\n // { name: \"Tino\", role: roles.get(\"beggar\"), reminders: [] },\n // { name: \"Basti\", role: roles.get(\"chef\"), reminders: [] },\n // { name: \"Bernd\", role: roles.get(\"ravenkeeper\"), reminders: [] },\n // { name: \"Tim\", role: roles.get(\"drunk\"), reminders: [] },\n // { name: \"Yann\", role: roles.get(\"librarian\"), reminders: [] },\n // { name: \"Marie\", role: roles.get(\"empath\"), reminders: [] },\n // { name: \"Bogdan\", role: roles.get(\"scarletwoman\"), reminders: [] },\n // { name: \"Sean\", role: roles.get(\"recluse\"), reminders: [] },\n // { name: \"Petra\", role: roles.get(\"undertaker\"), reminders: [] }\n ],\n roles,\n set: \"TB\"\n }),\n methods: {\n togglePublic() {\n this.isPublic = !this.isPublic;\n this.isControlOpen = false;\n },\n addPlayer() {\n const name = prompt(\"Player name\");\n if (name) {\n this.players.push({\n name,\n role: {},\n reminders: []\n });\n }\n },\n randomizeSeatings() {\n if (confirm(\"Are you sure you want to randomize seatings?\")) {\n this.players = this.players\n .map(a => [Math.random(), a])\n .sort((a, b) => a[0] - b[0])\n .map(a => a[1]);\n }\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n@font-face {\n font-family: \"Papyrus\";\n src: url(\"assets/fonts/papyrus.eot\"); /* IE9*/\n src: url(\"assets/fonts/papyrus.eot?#iefix\") format(\"embedded-opentype\"),\n /* IE6-IE8 */ url(\"assets/fonts/papyrus.woff2\") format(\"woff2\"),\n /* chrome firefox */ url(\"assets/fonts/papyrus.woff\") format(\"woff\"),\n /* chrome firefox */ url(\"assets/fonts/papyrus.ttf\") format(\"truetype\"),\n /* chrome firefox opera Safari, Android, iOS 4.2+*/\n url(\"assets/fonts/papyrus.svg#PapyrusW01\") format(\"svg\"); /* iOS 4.1- */\n}\n\nhtml,\nbody {\n font-size: 1.2em;\n line-height: 1.4;\n background: url(\"assets/background.jpg\") center center;\n background-size: cover;\n color: white;\n height: 100%;\n font-family: \"Roboto Condensed\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n padding: 0;\n margin: 0;\n}\n\n* {\n box-sizing: border-box;\n position: relative;\n}\n\n#app {\n height: 100%;\n}\n\n// Controls\n.controls {\n position: absolute;\n right: 0;\n top: 0;\n text-align: right;\n padding: 10px;\n svg {\n cursor: pointer;\n }\n ul {\n display: flex;\n list-style-type: none;\n padding: 0;\n margin: 0;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 0 10px black;\n li {\n padding: 5px 10px;\n color: white;\n text-align: center;\n background: rgba(0, 0, 0, 0.7);\n margin-bottom: 1px;\n cursor: pointer;\n &:hover {\n background-color: red;\n }\n }\n }\n}\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=7aff27ba&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport App from \"./App\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faUsers,\n faHeartbeat,\n faVoteYea,\n faUserFriends,\n faUser,\n faTimesCircle,\n faCogs\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\n\nlibrary.add(\n faUsers,\n faHeartbeat,\n faVoteYea,\n faUserFriends,\n faUser,\n faTimesCircle,\n faCogs\n);\n\nVue.component(\"font-awesome-icon\", FontAwesomeIcon);\n\nVue.config.productionTip = false;\n\nnew Vue({\n render: h => h(App)\n}).$mount(\"#app\");\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Player.vue?vue&type=style&index=0&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TownInfo.vue?vue&type=style&index=0&lang=scss&\""],"sourceRoot":""} |