Vue App
\ No newline at end of file
+Vue App
\ No newline at end of file
diff --git a/js/app.d427fa24.js b/js/app.d427fa24.js
new file mode 100644
index 0000000..31d53d5
--- /dev/null
+++ b/js/app.d427fa24.js
@@ -0,0 +1,2 @@
+(function(e){function t(t){for(var a,o,n=t[0],l=t[1],h=t[2],u=0,m=[];u4?i("li",{on:{click:e.togglePublic}},[e._v(" Select Roles ")]):e._e(),e.players.length>2?i("li",{on:{click:e.randomizeSeatings}},[i("em",[e._v("R")]),e._v("andomize Seatings ")]):e._e()]):e._e()],1)],1)},r=[],o=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"square",class:{public:e.isPublic},attrs:{id:"townsquare"}},[i("ul",{staticClass:"circle",class:["size-"+e.players.length]},e._l(e.players,(function(t,a){return i("Player",{key:a,attrs:{player:t,roles:e.roles,"is-public":e.isPublic},on:{"add-reminder":e.openReminderModal,"set-role":e.openRoleModal,"remove-player":e.removePlayer}})})),1),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableReminders.length,expression:"availableReminders.length"}],on:{close:e.closeModal}},[i("h2",[e._v("Choose a reminder token:")]),i("ul",{staticClass:"reminders"},e._l(e.availableReminders,(function(t){return i("li",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.addReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})),0)]),i("Modal",{directives:[{name:"show",rawName:"v-show",value:e.availableRoles.length,expression:"availableRoles.length"}],on:{close:e.closeModal}},[i("h2",[e._v("Choose a new role:")]),i("ul",{staticClass:"tokens"},e._l(e.availableRoles,(function(t){return i("li",{key:t.id,staticClass:"token",class:[t.id,t.team],on:{click:function(i){return e.setRole(t)}}},[e._v(" "+e._s(t.name)+" ")])})),0)])],1)},n=[],l=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",[i("div",{staticClass:"player",class:{dead:e.player.hasDied,"no-vote":e.player.hasVoted,traveller:e.player.role&&"traveller"===e.player.role.team}},[i("div",{staticClass:"shroud",on:{click:function(t){return e.toggleStatus()}}}),i("div",{staticClass:"life",on:{click:function(t){return e.toggleStatus()}}}),i("div",{staticClass:"token",class:[e.player.role.id],on:{click:function(t){return e.changeRole()}}},[e.player.role.firstNight?i("span",{staticClass:"leaf-left"}):e._e(),e.player.role.otherNight?i("span",{staticClass:"leaf-right"}):e._e(),e.player.role.reminders&&e.player.role.reminders.length?i("span",{class:["leaf-top"+e.player.role.reminders.length]}):e._e(),e.player.role.setup?i("span",{staticClass:"leaf-orange"}):e._e(),i("div",[e._v(e._s(e.player.role.name))])]),e.player.role.ability?i("div",{staticClass:"ability"},[e._v(" "+e._s(e.player.role.ability)+" ")]):e._e(),i("div",{staticClass:"name",on:{click:e.changeName}},[e._v(" "+e._s(e.player.name)+" "),i("span",{staticClass:"remove",on:{click:function(t){return t.stopPropagation(),e.$emit("remove-player",e.player)}}},[i("font-awesome-icon",{attrs:{icon:"times-circle"}})],1)])]),e.player.reminders?e._l(e.player.reminders,(function(t){return i("div",{key:t.role+" "+t.name,staticClass:"reminder",class:[t.role],on:{click:function(i){return e.removeReminder(t)}}},[e._v(" "+e._s(t.name)+" ")])})):e._e(),i("div",{staticClass:"reminder add",on:{click:function(t){return e.$emit("add-reminder",e.player)}}})],2)},h=[],d={props:{player:{type:Object,required:!0},roles:{type:Map,required:!0},isPublic:{type:Boolean,required:!0}},data(){return{}},methods:{toggleStatus(){this.isPublic?this.player.hasDied?this.player.hasVoted?(this.$set(this.player,"hasVoted",!1),this.$set(this.player,"hasDied",!1)):this.$set(this.player,"hasVoted",!0):this.$set(this.player,"hasDied",!0):this.$set(this.player,"hasDied",!this.player.hasDied)},changeRole(){this.$emit("set-role",this.player)},changeName(){const e=prompt("Player name",this.player.name);this.player.name=e||this.player.name},removeReminder(e){this.player.reminders.splice(this.player.reminders.indexOf(e),1)}}},u=d,m=(i("74c9"),i("2877")),f=Object(m["a"])(u,l,h,!1,null,null,null),c=f.exports,y=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal-fade"}},[i("div",{staticClass:"modal-backdrop",on:{click:e.close}},[i("div",{staticClass:"modal",attrs:{role:"dialog","aria-labelledby":"modalTitle","aria-describedby":"modalDescription"},on:{click:function(e){e.stopPropagation()}}},[e._t("default")],2)])])},p=[],g={methods:{close(){this.$emit("close")}}},b=g,N=(i("30db"),Object(m["a"])(b,y,p,!1,null,null,null)),v=N.exports,k={components:{Modal:v,Player:c},props:{isPublic:{type:Boolean,required:!0},players:{type:Array,required:!0},roles:{type:Map,required:!0}},data(){return{selectedPlayer:!1,availableReminders:[],availableRoles:[]}},methods:{openReminderModal(e){this.selectedPlayer=e,this.availableReminders=[],this.roles.forEach(e=>{this.players.some(t=>t.role.id===e.id)&&(this.availableReminders=[...this.availableReminders,...e.reminders.map(t=>({role:e.id,name:t}))])}),this.availableReminders.push({role:"good",name:"Good"}),this.availableReminders.push({role:"evil",name:"Evil"})},openRoleModal(e){this.selectedPlayer=e,this.availableRoles=[],this.roles.forEach(t=>{t.id!==e.role&&this.availableRoles.push(t)}),this.availableRoles.push({})},addReminder(e){this.selectedPlayer.reminders.push(e),this.closeModal()},setRole(e){this.selectedPlayer.role=e,this.closeModal()},closeModal(){this.selectedPlayer=!1,this.availableReminders=[],this.availableRoles=[]},removePlayer(e){confirm(`Do you really want to remove ${e.name}?`)&&this.players.splice(this.players.indexOf(e),1)}}},w=k,_=(i("3636"),Object(m["a"])(w,o,n,!1,null,null,null)),D=_.exports,M=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{staticClass:"info"},[e.players.length<5?i("li",[e._v("Please add more players!")]):e._e(),i("li",[e._v(" "+e._s(e.players.length)+" "),i("font-awesome-icon",{staticClass:"players",attrs:{icon:"users"}}),e._v(" "+e._s(e.teams.alive)+" "),i("font-awesome-icon",{staticClass:"alive",attrs:{icon:"heartbeat"}}),e._v(" "+e._s(e.teams.votes)+" "),i("font-awesome-icon",{staticClass:"votes",attrs:{icon:"vote-yea"}})],1),e.players.length>=5?i("li",[e._v(" "+e._s(e.teams.townsfolk)+" "),i("font-awesome-icon",{staticClass:"townsfolk",attrs:{icon:"user-friends"}}),e._v(" "+e._s(e.teams.outsiders)+" "),i("font-awesome-icon",{staticClass:"outsider",attrs:{icon:e.teams.outsiders>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.minions)+" "),i("font-awesome-icon",{staticClass:"minion",attrs:{icon:e.teams.minions>1?"user-friends":"user"}}),e._v(" "+e._s(e.teams.demons)+" "),i("font-awesome-icon",{staticClass:"demon",attrs:{icon:e.teams.demons>1?"user-friends":"user"}}),e.teams.travellers?[e._v(" "+e._s(e.teams.travellers)+" "),i("font-awesome-icon",{staticClass:"traveller",attrs:{icon:e.teams.travellers>1?"user-friends":"user"}})]:e._e()],2):e._e()])},S=[],B=i("634a"),T={props:{players:{type:Array,required:!0}},computed:{teams:function(){const e=this.players.filter(e=>"traveller"!==e.role.team).length,t=this.players.filter(e=>!0!==e.hasDied).length;return{...B[e-5],travellers:this.players.length-e,alive:t,votes:t+this.players.filter(e=>!0===e.hasDied&&!0!==e.hasVoted).length}}}},R=T,E=(i("8d43"),Object(m["a"])(R,M,S,!1,null,null,null)),P=E.exports,O=i("b1d9");const C=new Map(O.filter(e=>e.set===(window.location.hash.substr(1)||"TB")).sort((e,t)=>t.team.localeCompare(e.team)).map(e=>[e.id,e]));var x={components:{TownSquare:D,TownInfo:P},data:()=>({isPublic:!0,isControlOpen:!1,players:[],roles:C,set:"TB"}),methods:{togglePublic(){this.isPublic=!this.isPublic,this.isControlOpen=!1},addPlayer(){const e=prompt("Player name");e&&this.players.push({name:e,role:{},reminders:[]})},randomizeSeatings(){confirm("Are you sure you want to randomize seatings?")&&(this.players=this.players.map(e=>[Math.random(),e]).sort((e,t)=>e[0]-t[0]).map(e=>e[1]))},keyup({key:e}){switch(e){case"g":this.togglePublic();break;case"a":this.addPlayer();break;case"r":this.randomizeSeatings();break}}},mounted(){localStorage.players&&(this.players=JSON.parse(localStorage.players))},watch:{players:{handler(e){console.log("new player",e),localStorage.players=JSON.stringify(e)},deep:!0}}},V=x,I=(i("5c0b"),Object(m["a"])(V,s,r,!1,null,null,null)),A=I.exports,Y=i("ecee"),j=i("c074"),$=i("ad3d");Y["c"].add(j["f"],j["b"],j["g"],j["e"],j["d"],j["c"],j["a"]),a["a"].component("font-awesome-icon",$["a"]),a["a"].config.productionTip=!1,new a["a"]({render:e=>e(A)}).$mount("#app")},"5c0b":function(e,t,i){"use strict";var a=i("9c0c"),s=i.n(a);s.a},"634a":function(e){e.exports=JSON.parse('[{"townsfolk":3,"outsiders":0,"minions":1,"demons":1},{"townsfolk":3,"outsiders":1,"minions":1,"demons":1},{"townsfolk":5,"outsiders":0,"minions":1,"demons":1},{"townsfolk":5,"outsiders":1,"minions":1,"demons":1},{"townsfolk":5,"outsiders":2,"minions":1,"demons":1},{"townsfolk":7,"outsiders":0,"minions":2,"demons":1},{"townsfolk":7,"outsiders":1,"minions":2,"demons":1},{"townsfolk":7,"outsiders":2,"minions":2,"demons":1},{"townsfolk":9,"outsiders":0,"minions":3,"demons":1},{"townsfolk":9,"outsiders":1,"minions":3,"demons":1},{"townsfolk":9,"outsiders":2,"minions":3,"demons":1}]')},"74c9":function(e,t,i){"use strict";var a=i("9fd8"),s=i.n(a);s.a},"7a65":function(e,t,i){},"8d43":function(e,t,i){"use strict";var a=i("7a65"),s=i.n(a);s.a},"9c0c":function(e,t,i){},"9fd8":function(e,t,i){},b1d9:function(e){e.exports=JSON.parse('[{"id":"washerwoman","name":"Washerwoman","set":"TB","team":"townsfolk","firstNight":true,"otherNight":false,"reminders":["Townsfolk","Decoy"],"setup":false,"ability":"You start knowing 1 of 2 players is a particular Townsfolk."},{"id":"librarian","name":"Librarian","set":"TB","team":"townsfolk","firstNight":true,"otherNight":false,"reminders":["Outsider","Decoy"],"setup":false,"ability":"You start knowing that 1 of 2 players is a particular Outsider. (Or that zero are in play)"},{"id":"investigator","name":"Investigator","set":"TB","team":"townsfolk","firstNight":true,"otherNight":false,"reminders":["Minion","Decoy"],"setup":false,"ability":"You start knowing 1 of 2 players is a particular Minion."},{"id":"chef","name":"Chef","set":"TB","team":"townsfolk","firstNight":true,"otherNight":false,"reminders":[],"setup":false,"ability":"You start knowing how many pairs of evil players there are."},{"id":"empath","name":"Empath","set":"TB","team":"townsfolk","firstNight":true,"otherNight":true,"reminders":[],"setup":false,"ability":"Each night, you learn how many of your 2 alive neighbours are evil."},{"id":"fortuneteller","name":"Fortune Teller","set":"TB","team":"townsfolk","firstNight":true,"otherNight":true,"reminders":["Decoy"],"setup":false,"ability":"Each night, choose 2 players: you learn if either is a Demon. There is 1 good player that registers falsely to you."},{"id":"undertaker","name":"Undertaker","set":"TB","team":"townsfolk","firstNight":false,"otherNight":true,"reminders":["Executed"],"setup":false,"ability":"Each night*, you learn which character died by execution today."},{"id":"monk","name":"Monk","set":"TB","team":"townsfolk","firstNight":false,"otherNight":true,"reminders":["Protected"],"setup":false,"ability":"Each night*, choose a player (not yourself): they are safe from the Demon tonight."},{"id":"ravenkeeper","name":"Ravenkeeper","set":"TB","team":"townsfolk","firstNight":false,"otherNight":true,"reminders":[],"setup":false,"ability":"If you die at night, you are woken to choose a player: you learn their character."},{"id":"mayor","name":"Mayor","set":"TB","team":"townsfolk","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"ability":"If only 3 players live & no execution occurs, your team wins. If you die at night, another player might die instead."},{"id":"slayer","name":"Slayer","set":"TB","team":"townsfolk","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"ability":"Once per game, during the day, publicly choose a player: if they are the Demon, they die."},{"id":"soldier","name":"Soldier","set":"TB","team":"townsfolk","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"ability":"You are safe from the Demon."},{"id":"virgin","name":"Virgin","set":"TB","team":"townsfolk","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"ability":"The first time you are nominated, if the nominator is a Townsfolk, they are executed immediately."},{"id":"butler","name":"Butler","set":"TB","team":"outsider","firstNight":true,"otherNight":true,"reminders":["Master"],"setup":false,"ability":"Each night, choose a player (not yourself): tomorrow, you may only vote if they are voting too."},{"id":"drunk","name":"Drunk","set":"TB","team":"outsider","firstNight":false,"otherNight":false,"reminders":["Drunk"],"setup":true,"ability":"You do not know you are the Drunk. You think you are a Townsfolk, but your ability malfunctions."},{"id":"recluse","name":"Recluse","set":"TB","team":"outsider","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"ability":"You might register as evil and as a Minion or Demon, even if dead."},{"id":"saint","name":"Saint","set":"TB","team":"outsider","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"ability":"If you die by execution, your team loses."},{"id":"baron","name":"Baron","set":"TB","team":"minion","firstNight":false,"otherNight":false,"reminders":[],"setup":true,"ability":"There are extra Outsiders in play. [+2 Outsiders]"},{"id":"poisoner","name":"Poisoner","set":"TB","team":"minion","firstNight":true,"otherNight":true,"reminders":["Poisoned"],"setup":false,"ability":"Each night, choose a player: their ability malfunctions tonight and tomorrow day."},{"id":"spy","name":"Spy","set":"TB","team":"minion","firstNight":true,"otherNight":true,"reminders":[],"setup":false,"ability":"Each night, you see the Grimoire. You might register as good and as a Townsfolk or Outsider, even if dead."},{"id":"scarletwoman","name":"Scarlet Woman","set":"TB","team":"minion","firstNight":false,"otherNight":true,"reminders":["Demon"],"setup":false,"ability":"If there are 5 or more players alive (Travellers don\'t count) and the Demon dies, you become the Demon."},{"id":"imp","name":"Imp","set":"TB","team":"demon","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"ability":"Each night*, choose a player: they die. If you kill yourself this way, a Minion becomes the Imp."},{"id":"grandmother","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Grandchild"],"setup":false,"name":"Grandmother","team":"townsfolk","ability":"You start knowing a good player & character. If the Demon kills them, you die too."},{"id":"sailor","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Drunk"],"setup":false,"name":"Sailor","team":"townsfolk","ability":"Each night, choose a player: either you or they are drunk until dusk. You can not die."},{"id":"chambermaid","set":"BMR","firstNight":true,"otherNight":true,"reminders":[],"setup":false,"name":"Chambermaid","team":"townsfolk","ability":"Each night, choose 2 alive players (not yourself): you learn how many woke tonight due to their ability."},{"id":"exorcist","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Chosen"],"setup":false,"name":"Exorcist","team":"townsfolk","ability":"Each night*, choose a player (not the same as last night): the Demon, if chosen, learns who you are & does not act tonight."},{"id":"innkeeper","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Protected","Drunk"],"setup":false,"name":"Innkeeper","team":"townsfolk","ability":"Each night*, choose 2 players: they cannot die tonight, but 1 is drunk until dusk."},{"id":"gambler","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Gambler","team":"townsfolk","ability":"Each night*, choose a player & guess their character: if you guess wrong, you die."},{"id":"gossip","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Gossip","team":"townsfolk","ability":"Each day, you may make a public statement. Tonight, if it was true, a player dies."},{"id":"courtier","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Drunk 1","Drunk 2","Drunk 3","Used"],"setup":false,"name":"Courtier","team":"townsfolk","ability":"Once per game, at night, choose a character: they are drunk for 3 nights & 3 days."},{"id":"professor","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Alive","Used"],"setup":false,"name":"Professor","team":"townsfolk","ability":"Once per game, at night*, choose a dead player. If they are a Townsfolk, they are resurrected."},{"id":"minstrel","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Everyone drunk"],"setup":false,"name":"Minstrel","team":"townsfolk","ability":"If a Minion died today, all other players (except Travelers) are drunk all night, until dusk."},{"id":"tealady","set":"BMR","firstNight":false,"otherNight":false,"reminders":["Protected"],"setup":false,"name":"Tea Lady","team":"townsfolk","ability":"If both your alive neighbors are good, they can not die."},{"id":"pacifist","set":"BMR","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Pacifist","team":"townsfolk","ability":"Executed good players might not die."},{"id":"fool","set":"BMR","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"name":"Fool","team":"townsfolk","ability":"The first time you die, you don\'t."},{"id":"tinker","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Tinker","team":"outsider","ability":"You might die at any time."},{"id":"moonchild","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Moonchild","team":"outsider","ability":"When you learn that you died, choose 1 alive player: if good, they die tonight."},{"id":"goon","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Drunk"],"setup":false,"name":"Goon","team":"outsider","ability":"Each night, the 1st player to choose you with their ability is drunk until dusk. You become their alignment."},{"id":"lunatic","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Attack 1","Attack 2","Attack 3","Decoy"],"setup":false,"name":"Lunatic","team":"outsider","ability":"You think you are a Demon, but your abilities malfunction. The Demon knows who you are & who you attack."},{"id":"godfather","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Died today","Die"],"setup":true,"name":"Godfather","team":"minion","ability":"You start knowing which Outsiders are in-play. If 1 died today, choose a player tonight: they die. [-1 or +1 Outsider]"},{"id":"devilsadvocate","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Survives execution"],"setup":false,"name":"Devils Advocate","team":"minion","ability":"Each night, choose a living player (not the same as last night): if executed tomorrow, they do not die."},{"id":"assassin","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die","Used"],"setup":false,"name":"Assassin","team":"minion","ability":"Once per game, at night*, choose a player: they die, even if for some reason they could not."},{"id":"mastermind","set":"BMR","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Mastermind","team":"minion","ability":"If the Demon dies by execution, play for 1 more day. If a player is then executed, their team loses."},{"id":"po","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die 1","Die 2","Die 3","Attack x3"],"setup":false,"name":"Po","team":"demon","ability":"Each night*, you may choose a player: they die. If you chose no-one last night, choose 3 players tonight."},{"id":"zombuul","set":"BMR","firstNight":false,"otherNight":true,"reminders":["No death today","Die"],"setup":false,"name":"Zombuul","team":"demon","ability":"Each night*, if no-one died today, choose a player: they die. The 1st time you die, you live but register as dead."},{"id":"pukka","set":"BMR","firstNight":true,"otherNight":true,"reminders":["Poisoned","Die"],"setup":false,"name":"Pukka","team":"demon","ability":"Each night, choose a player: they are poisoned until tomorrow night, then die. You act on the 1st night."},{"id":"shabaloth","set":"BMR","firstNight":false,"otherNight":true,"reminders":["Die 1","Die 2","Alive"],"setup":false,"name":"Shabaloth","team":"demon","ability":"Each night*, choose 2 players: they die. A dead player you chose last night might be regurgitated."},{"id":"clockmaker","set":"SNV","firstNight":true,"otherNight":false,"reminders":[],"setup":false,"name":"Clockmaker","team":"townsfolk","ability":"You start knowing how many steps from the Demon to its nearest Minion."},{"id":"dreamer","set":"SNV","firstNight":true,"otherNight":true,"reminders":[],"setup":false,"name":"Dreamer","team":"townsfolk","ability":"Each night, choose a player (not yourself): you learn 1 good & 1 evil character, 1 of which is correct."},{"id":"snakecharmer","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Poisoned"],"setup":false,"name":"Snake Charmer","team":"townsfolk","ability":"Each night, choose an alive player: a chosen Demon swaps characters & alignments with you & is then poisoned."},{"id":"mathematician","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Abnormal effect"],"setup":false,"name":"Mathematician","team":"townsfolk","ability":"Each night, you learn how many players\' abilities worked abnormally (since dawn) due to another character\'s ability."},{"id":"flowergirl","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Demon did vote","Demon did not vote"],"setup":false,"name":"Flowergirl","team":"townsfolk","ability":"Each night*, you learn if the Demon voted today."},{"id":"towncrier","set":"SNV","firstNight":false,"otherNight":true,"reminders":["No Minion nominated","Minion nominated"],"setup":false,"name":"Town Crier","team":"townsfolk","ability":"Each night*, you learn if a Minion nominated today."},{"id":"oracle","set":"SNV","firstNight":false,"otherNight":true,"reminders":[],"setup":false,"name":"Oracle","team":"townsfolk","ability":"Each night*, you learn how many dead players are evil."},{"id":"savant","set":"SNV","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Savant","team":"townsfolk","ability":"Each day, you may visit the Storyteller to learn 2 things in private: 1 is true & 1 is false."},{"id":"seamstress","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Used"],"setup":false,"name":"Seamstress","team":"townsfolk","ability":"Once per game, at night, choose 2 players (not yourself): you learn if they are the same alignment."},{"id":"philosopher","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Used","Drunk"],"setup":false,"name":"Philosopher","team":"townsfolk","ability":"Once per game, at night, choose a good character: become them. If you duplicate an in-play character, they are drunk."},{"id":"artist","set":"SNV","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"name":"Artist","team":"townsfolk","ability":"Once per game, during the day, privately ask the Storyteller any yes/no question."},{"id":"juggler","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Correct"],"setup":false,"name":"Juggler","team":"townsfolk","ability":"On your 1st day, publicly guess up to 5 player\'s characters. That night, you learn how many you got correct."},{"id":"sage","set":"SNV","firstNight":false,"otherNight":true,"reminders":[],"setup":false,"name":"Sage","team":"townsfolk","ability":"If the Demon kills you, you learn that it is 1 of 2 players."},{"id":"mutant","set":"SNV","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Mutant","team":"outsider","ability":"If you are \\"mad\\" about being an Outsider, you might be executed."},{"id":"sweetheart","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Drunk"],"setup":false,"name":"Sweetheart","team":"outsider","ability":"If you die, 1 player is drunk from now on."},{"id":"barber","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Swap"],"setup":false,"name":"Barber","team":"outsider","ability":"If you die, tonight the Demon may choose 2 players to swap characters."},{"id":"klutz","set":"SNV","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Klutz","team":"outsider","ability":"When you learn that you died, publicly choose 1 alive good player: if they are evil, your team loses."},{"id":"eviltwin","set":"SNV","firstNight":true,"otherNight":false,"reminders":["Twin"],"setup":false,"name":"Evil Twin","team":"minion","ability":"You & an opposing player know each other. If the good player is executed, evil wins. Good can\'t win if you both live."},{"id":"witch","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Cursed"],"setup":false,"name":"Witch","team":"minion","ability":"Each night, choose a player: if they nominate tomorrow, they die. If just 3 players live, you lose this ability."},{"id":"cerenovus","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Mad"],"setup":false,"name":"Cerenovus","team":"minion","ability":"Each night, choose a player & a good character: they are \\"mad\\" they are this character tomorrow, or might be executed."},{"id":"pithag","set":"SNV","firstNight":false,"otherNight":true,"reminders":[],"setup":false,"name":"Pit Hag","team":"minion","ability":"Each night*, choose a player & a character they become (if not-in-play). If a Demon is made, deaths tonight are arbitrary."},{"id":"fanggu","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":true,"name":"Fang Gu","team":"demon","ability":"Each night*, choose a player: they die. The 1st Outsider chosen becomes an evil Fang Gu & you die instead. [+1 Outsider]"},{"id":"vigormortis","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Die","Poisoned","Ability active"],"setup":true,"name":"Vigormortis","team":"demon","ability":"Each night*, choose a player: they die. Minions you kill keep their ability & poison 1 Townsfolk neighbor. [-1 Outsider]."},{"id":"nodashii","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Die","Poisoned"],"setup":false,"name":"No Dashii","team":"demon","ability":"Each night*, choose a player: they die. Your 2 Townsfolk neighbors are poisoned."},{"id":"vortox","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Vortox","team":"demon","ability":"Each night*, choose a player: they die. Good abilities yield false information. Each day, if no-one was executed, evil wins."},{"id":"scapegoat","set":"TB","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Scapegoat","team":"traveler","ability":"If a player of your alignment is executed, you might be executed instead."},{"id":"gunslinger","set":"TB","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Gunslinger","team":"traveler","ability":"Each day, after the 1st vote has been tallied, you may choose a player that voted: they die."},{"id":"beggar","set":"TB","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Beggar","team":"traveler","ability":"You must use a vote token to vote. Dead players may choose to give you theirs. If so, you learn their alignment."},{"id":"bureaucrat","set":"TB","firstNight":true,"otherNight":true,"reminders":["Vote x3"],"setup":false,"name":"Bureaucrat","team":"traveler","ability":"Each night, choose a player (not yourself): their vote counts as 3 votes tomorrow."},{"id":"thief","set":"TB","firstNight":true,"otherNight":true,"reminders":["Negative vote"],"setup":false,"name":"Thief","team":"traveler","ability":"Each night, choose a player (not yourself): their vote counts negatively tomorrow."},{"id":"apprentice","set":"BMR","firstNight":true,"otherNight":false,"reminders":["Apprentice ability"],"setup":false,"name":"Apprentice","team":"traveler","ability":"On your 1st night, you gain a Townsfolk ability (if good), or a Minion ability (if evil)."},{"id":"matron","set":"BMR","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Matron","team":"traveler","ability":"Each day, you may choose up to 3 pairs of players to swap seats. Players may not leave their seats to talk in private."},{"id":"voudon","set":"BMR","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Voudon","team":"traveler","ability":"Only you & the dead can vote. They don\'t need a vote token to do so. A 50% majority is not required."},{"id":"judge","set":"BMR","firstNight":false,"otherNight":false,"reminders":["Used"],"setup":false,"name":"Judge","team":"traveler","ability":"Once per game, if another player nominated, you may choose to force the current execution to pass or fail."},{"id":"bishop","set":"BMR","firstNight":false,"otherNight":false,"reminders":["Nominate Good","Nominate Evil"],"setup":false,"name":"Bishop","team":"traveler","ability":"Only the Storyteller can nominate. At least 1 opposite player must be nominated each day."},{"id":"butcher","set":"SNV","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Butcher","team":"traveler","ability":"Each day, after the 1st execution, you nominate again."},{"id":"bonecollector","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Used","Ability active"],"setup":false,"name":"Bone Collector","team":"traveler","ability":"Once per game, at night, choose a dead player: they regain their ability until dusk."},{"id":"harlot","set":"SNV","firstNight":false,"otherNight":true,"reminders":["Die"],"setup":false,"name":"Harlot","team":"traveler","ability":"Each night*, choose a living player: if they agree, you learn their character, but you both might die."},{"id":"barista","set":"SNV","firstNight":true,"otherNight":true,"reminders":["Ability x2","Healthy & Sober"],"setup":false,"name":"Barista","team":"traveler","ability":"Each night, until dusk, 1) a player becomes sober, healthy & gets true info, or 2) their ability works twice. They learn which."},{"id":"deviant","set":"SNV","firstNight":false,"otherNight":false,"reminders":[],"setup":false,"name":"Deviant","team":"traveler","ability":"If you were funny today, you can not be exiled."}]')},d4b2:function(e,t,i){}});
+//# sourceMappingURL=app.d427fa24.js.map
\ No newline at end of file
diff --git a/js/app.d427fa24.js.map b/js/app.d427fa24.js.map
new file mode 100644
index 0000000..66c7e19
--- /dev/null
+++ b/js/app.d427fa24.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Modal.vue?1f08","webpack:///./src/components/TownSquare.vue?b88a","webpack:///./src/App.vue?44ae","webpack:///./src/components/TownSquare.vue?1b54","webpack:///./src/components/Player.vue?08bd","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","on","keyup","players","isPublic","roles","staticClass","$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","localStorage","JSON","parse","watch","newPlayers","console","log","stringify","deep","add","config","productionTip","h","App","$mount"],"mappings":"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","file":"js/app.d427fa24.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\",\"tabindex\":\"-1\"},on:{\"keyup\":_vm.keyup}},[_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 \"),_c('em',[_vm._v(\"G\")]),_vm._v(\"rimoire\")]),(_vm.players.length < 20)?_c('li',{on:{\"click\":_vm.addPlayer}},[_c('em',[_vm._v(\"A\")]),_vm._v(\"dd 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}},[_c('em',[_vm._v(\"R\")]),_vm._v(\"andomize 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 && _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 }","\n
\n
\n \n \n
\n \n \n \n \n
{{ player.role.name }}
\n
\n
\n {{ player.role.ability }}\n
\n
\n {{ player.name }}\n \n \n \n
\n
\n \n
\n {{ reminder.name }}\n
\n \n \n
\n\n\n\n\n\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=ca766350&\"\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 }","\n\n \n
\n
\n \n
\n
\n \n\n\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","\n
\n\n\n\n\n\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","\n
\n \n \n
\n \n
\n
Toggle Grimoire
\n
\n Add Player\n
\n
4\">\n Select Roles\n
\n
2\">\n Randomize Seatings\n
\n
\n
\n
\n\n\n\n\n\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=6930d2e4&\"\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":""}
\ No newline at end of file