1 Commits

Author SHA1 Message Date
AlecM33
fbf8a9a1ae minor performance improvements per the lighthouse report 2024-11-12 20:20:21 -05:00
13 changed files with 863 additions and 154 deletions

View File

@@ -10,17 +10,17 @@ export const HTMLFragments = {
<canvas id="canvas"></canvas>
<div id='game-parameters'>
<div>
<img alt='clock' width="20" height="20" src='/images/clock.svg'/>
<img alt='clock' src='/images/clock.svg'/>
<div id='timer-parameters'></div>
</div>
<div>
<img alt='person' width="22" height="20" src='/images/person.svg'/>
<img alt='person' src='/images/person.svg'/>
<div id='game-player-count'></div>
</div>
</div>
</div>
<div>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div>
@@ -84,7 +84,7 @@ export const HTMLFragments = {
</div>
</div>
<div>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div id='game-role' tabindex="0">
@@ -127,7 +127,7 @@ export const HTMLFragments = {
</div>
</div>
<div>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div id='game-people-container'>
@@ -187,7 +187,7 @@ export const HTMLFragments = {
Transfer Mod Powers <img alt='transfer icon' src='/images/shuffle.svg'/>
</button>
<div>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div id="game-players-container">
@@ -229,7 +229,7 @@ export const HTMLFragments = {
<div id='play-pause'> </div>
</div>
<div>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div id='game-role' tabindex="0">
@@ -309,7 +309,7 @@ export const HTMLFragments = {
`<div id='end-of-game-header'>
<h2>&#x1F3C1; The moderator has ended the game. Roles are revealed.</h2>
<div id="end-of-game-buttons">
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' width="25" height="25" src='/images/info.svg'/></button>
<button id='role-info-button' class='app-button'>Roles in This Game <img alt='Info icon' src='/images/info.svg'/></button>
</div>
</div>
<div id='game-people-container'>

View File

@@ -15,6 +15,7 @@ th, thead, tr, tt, u, ul, var {
@font-face {
font-family: 'signika-negative';
src: url("../webfonts/SignikaNegative-Light.woff2") format("woff2");
font-display: swap;
}
html {
@@ -68,131 +69,12 @@ textarea {
resize: none;
}
.toast-top {
top: 2rem;
}
.toast-bottom {
bottom: 140px;
}
.toast-success {
background-color: #bef5cb;
border: 3px solid #8ac78a;
}
.toast-warning {
background-color: #fff5b1;
border: 3px solid #c7c28a;
}
.toast-error {
background-color: #f98e9a;
border: 3px solid #c57272;
}
.toast-neutral {
background-color: #e9e9e9;
border: 3px solid #b7b7b7;
}
.toast-dispel-automatically {
animation: fade-in-slide-down-then-exit ease normal forwards;
}
.toast-not-dispelled-automatically {
animation: fade-in-slide-down ease normal forwards;
}
.toast-short {
animation-duration: 3s;
}
.toast-medium {
animation-duration: 5s;
}
.toast-long {
animation-duration: 8s;
}
.toast-plus-one {
color: #1c8a36;
font-weight: bold;
font-size: 20px;
margin-right: 5px;
}
.toast-minus-one {
font-size: 20px;
margin-right: 5px;
color: #e73333;
font-weight: bold;
}
.toast-plus-role-quantity {
color: #1c8a36;
font-weight: bold;
margin-left: 10px;
}
.toast-minus-role-quantity {
color: #e73333;
font-weight: bold;
margin-left: 10px;
}
#footer {
bottom: 0;
width: 100%;
text-align: center;
align-items: center;
display: flex;
justify-content: center;
flex-wrap: wrap;
color: #d7d7d7;
font-size: 14px;
margin-top: 4em;
margin-bottom: 0.5em;
}
#footer a:not([href='https://www.buymeacoffee.com/alecm33']) img {
width: 32px;
}
#footer a[href='https://www.buymeacoffee.com/alecm33'] img {
width: 200px;
}
#footer a {
color: #f7f7f7;
text-decoration: none;
cursor: pointer;
font-family: 'signika-negative', sans-serif;
margin: 0 0.25em;
}
#footer a:hover {
color: gray;
}
#footer div {
display: flex;
}
.teaser {
text-align:center;
color:gray;
margin-bottom:3em;
}
#footer > div, #footer > a {
margin: 0.5em;
}
#footer div:nth-child(2) > a, #footer div:nth-child(2) > p {
margin: 0 5px;
}
label {
color: #d7d7d7;
font-family: 'signika-negative', sans-serif;
@@ -299,6 +181,7 @@ button {
}
#game-parameters img {
height: 20px;
margin-right: 10px;
}

View File

@@ -95,7 +95,7 @@ a button {
#join-button:hover {
background-color: #326243;
border: 3px solid #1c8a36;
border: 2px solid #1c8a36;
}
#join-form div:nth-child(1) {

111
client/src/styles/toast.css Normal file
View File

@@ -0,0 +1,111 @@
.toast-top {
top: 2rem;
}
.toast-bottom {
bottom: 140px;
}
.toast-success {
background-color: #bef5cb;
border: 3px solid #8ac78a;
}
.toast-warning {
background-color: #fff5b1;
border: 3px solid #c7c28a;
}
.toast-error {
background-color: #f98e9a;
border: 3px solid #c57272;
}
.toast-neutral {
background-color: #e9e9e9;
border: 3px solid #b7b7b7;
}
.toast-dispel-automatically {
animation: fade-in-slide-down-then-exit ease normal forwards;
}
.toast-not-dispelled-automatically {
animation: fade-in-slide-down ease normal forwards;
}
.toast-short {
animation-duration: 3s;
}
.toast-medium {
animation-duration: 5s;
}
.toast-long {
animation-duration: 8s;
}
.toast-plus-one {
color: #1c8a36;
font-weight: bold;
font-size: 20px;
margin-right: 5px;
}
.toast-minus-one {
font-size: 20px;
margin-right: 5px;
color: #e73333;
font-weight: bold;
}
.toast-plus-role-quantity {
color: #1c8a36;
font-weight: bold;
margin-left: 10px;
}
.toast-minus-role-quantity {
color: #e73333;
font-weight: bold;
margin-left: 10px;
}
@keyframes fade-in-slide-down-then-exit {
0% {
opacity: 0;
transform: translateY(-20px);
}
5% {
opacity: 1;
transform: translateY(0px);
}
95% {
opacity: 1;
transform: translateY(0px);
}
100% {
opacity: 0;
transform: translateY(-20px);
}
}
@keyframes fade-in-slide-down {
0% {
opacity: 0;
transform: translateY(-20px);
}
5% {
opacity: 1;
transform: translateY(0px);
}
95% {
opacity: 1;
transform: translateY(0px);
}
100% {
opacity: 1;
transform: translateY(0px);
}
}

View File

@@ -18,6 +18,8 @@
<link rel="stylesheet" href="/styles/modal.css">
<link rel="stylesheet" href="/styles/hamburgers.css">
<link rel="stylesheet" href="/styles/404.css">
<link rel="preload" href="./styles/toast.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/toast.css"></noscript>
</head>
<body>
<div id="mobile-menu-background-overlay"></div>

View File

@@ -15,9 +15,13 @@
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="./styles/GLOBAL.css">
<link rel="stylesheet" href="./styles/create.css">
<link rel="stylesheet" href="./styles/modal.css">
<link rel="stylesheet" href="./styles/confirmation.css">
<link rel="preload" href="./styles/confirmation.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/confirmation.css"></noscript>
<link rel="preload" href="./styles/modal.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/modal.css"></noscript>
<link rel="stylesheet" href="/styles/hamburgers.css">
<link rel="preload" href="./styles/toast.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/toast.css"></noscript>
</head>
<body>
<div id="mobile-menu-background-overlay"></div>

View File

@@ -14,11 +14,14 @@
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="/styles/GLOBAL.css">
<link rel="stylesheet" href="/styles/game.css">
<link rel="stylesheet" href="/styles/create.css">
<link rel="stylesheet" href="/styles/modal.css">
<link rel="stylesheet" href="/styles/confirmation.css">
<link rel="stylesheet" href="/styles/hamburgers.css">
<link rel="preload" href="/webfonts/SignikaNegative-Light.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/styles/toast.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/styles/toast.css"></noscript>
<link rel="preload" href="/styles/create.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/styles/create.css"></noscript>
</head>
<body>
<script src="/dist/game-bundle.js.gz"></script>

View File

@@ -14,10 +14,461 @@
<link rel="icon" href="/favicon.ico">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="./styles/GLOBAL.css">
<link rel="stylesheet" href="./styles/home.css">
<link rel="stylesheet" href="/styles/hamburgers.css">
<link rel="stylesheet" href="./styles/confirmation.css">
<link rel="preload" href="./styles/toast.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/toast.css"></noscript>
<style>
canvas, caption, center, cite, code,
dd, del, dfn, div, dl, dt, em, embed,
fieldset, font, form, h1, h2, h3, h4,
h5, h6, hr, i, iframe, img, ins, kbd,
label, legend, li, menu, object, ol, p,
pre, q, s, samp, small, span, strike,
strong, sub, sup, table, tbody, td, tfoot,
th, thead, tr, tt, u, ul, var {
margin: 0;
padding: 0;
border: 0;
background: transparent;
}
@font-face {
font-family: 'signika-negative';
src: url("../webfonts/SignikaNegative-Light.woff2") format("woff2");
font-display: swap;
}
html {
font-family: 'signika-negative', sans-serif !important;
background-color: #0f0f10;
overflow: auto;
}
body {
display: flex;
flex-direction: column;
align-items: flex-start;
margin: 0 auto;
background-color: #0f0f10;
}
h2 {
color: #e7e7e7;
font-size: 25px;
font-weight: bold;
}
label {
color: #d7d7d7;
font-family: 'signika-negative', sans-serif;
font-size: 20px;
font-weight: normal;
}
input, textarea {
background-color: transparent;
border: 1px solid white;
border-radius: 5px;
color: #d7d7d7;
}
a {
text-decoration: none;
}
textarea, input {
font-family: 'signika-negative', sans-serif;
font-size: 16px;
}
button {
display: flex;
align-items: center;
justify-content: center;
}
.app-button, input[type="submit"] {
font-family: 'signika-negative', sans-serif !important;
padding: 10px;
background-color: #1a7a31;
border-radius: 5px;
color: #e7e7e7;
font-size: 18px;
cursor: pointer;
border: 3px solid transparent;
text-shadow: 0 3px 4px rgb(0 0 0 / 55%);
}
.app-button:active, input[type=submit]:active {
border: 3px solid #21ba45;
}
.submitted {
filter: opacity(0.5);
pointer-events: none;
}
.app-button:hover, input[type="submit"]:hover, #game-link:hover {
background-color: #326243;
border: 3px solid #1a7a31;
}
input {
padding: 10px;
}
.info-message {
pointer-events: none;
display: flex;
align-items: center;
justify-content: center;
position: fixed;
z-index: 1000000;
padding: 10px;
border-radius: 5px;
font-family: 'signika-negative', sans-serif;
font-weight: 100;
box-shadow:
0 1px 1px rgba(0,0,0,0.11),
0 2px 2px rgba(0,0,0,0.11),
0 4px 4px rgba(0,0,0,0.11),
0 8px 8px rgba(0,0,0,0.11),
0 16px 16px rgba(0,0,0,0.11),
0 32px 32px rgba(0,0,0,0.11);
left: 0;
right: 0;
width: fit-content;
max-width: 80%;
min-width: 15em;
font-size: 20px;
margin: 0 auto;
}
#navbar {
display: flex;
align-items: center;
padding: 10px 0;
width: 100%;
background-color: #0f0f10;
height: 45px;
z-index: 53000;
}
#desktop-links > a:nth-child(1) {
margin: 0 0.5em;
width: 50px;
}
#mobile-links a:nth-child(1) {
width: 80px;
margin: 0 auto 3em auto !important;
display: flex;
}
.logo {
display: flex;
align-items: center;
}
#navbar img {
width: 100%;
}
#navbar a:not(.logo) {
color: #f7f7f7;
text-decoration: none;
cursor: pointer;
font-family: 'signika-negative', sans-serif;
border-radius: 5px;
padding: 2px 5px;
font-size: 20px;
margin: 1em;
width: fit-content;
}
#navbar a:hover {
color: gray;
}
.overlay {
position: fixed;
background-size: cover;
height: 100%;
opacity: 75%;
background-color: black;
width: 100%;
z-index: 50000;
}
.hidden {
display: none !important;
}
#mobile-links {
display: flex;
flex-direction: column;
margin-top: 3em;
}
.mobile-link {
margin-top: 1em !important;
margin-left: 2em !important;
}
@media(max-width: 1000px) {
#navbar {
display: flex;
padding: 0;
}
#navbar-hamburger {
z-index: 52000;
position: relative;
}
#desktop-menu {
display: none;
}
#mobile-menu {
position: absolute;
top: 0;
left: 0;
height: auto;
padding-bottom: 2em;
width: 100%;
z-index: 51000;
background-color: #1e1e1e;
}
}
@media(min-width: 1001px) {
#navbar-hamburger, #mobile-menu, #mobile-menu-background-overlay {
display: none;
}
.desktop-link {
display: flex;
}
#desktop-links {
display: flex;
align-items: center;
}
}
@media(max-width: 550px) {
h1 {
font-size: 30px;
}
#step-1 div {
font-size: 20px;
}
.info-message {
padding: 5px;
font-size: 16px;
}
}
body {
align-items: center;
}
button#home-create-button {
padding: 20px;
}
#framed-phone-screenshot, #framed-phone-screenshot-2, .framed-phone-screenshot-container {
max-width: 250px;
width: 40vw;
min-width: 175px;
border-radius: 21px;
aspect-ratio: 1522 / 3290;
}
.framed-phone-screenshot-container {
margin: 0 0 20px 0;
border: 1px solid #464552;
}
#about-container {
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: center;
width: 100%;
}
#about-container > div {
display: flex;
align-items: center;
justify-content: center;
width: fit-content;
flex-wrap: wrap;
padding: 25px 0;
}
#join-container form {
margin: 0;
}
#about-container h2 {
max-width: 17em;
font-size: 22px;
border-left: 1px solid #bababa;
padding: 15px;
margin: 0 15px;
}
#about-container div:nth-child(2) h2 {
margin-bottom: 2em;
}
#homepage-logos {
display: flex;
align-items: center;
}
#home-page-top-section {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
background-color: #0f0f10;
}
form {
display: flex;
flex-wrap: wrap;
margin: 10px 0;
border-radius: 5px;
justify-content: center;
align-items: center;
}
a button {
text-shadow: 0 3px 4px rgb(0 0 0 / 85%);
}
#join-button {
min-width: 6em;
max-height: 3em;
background-color: #1c8a36;
color: #e7e7e7;
font-size: 16px;
}
#join-button:hover {
background-color: #326243;
border: 2px solid #1c8a36;
}
#join-form div:nth-child(1) {
margin-right: 0.5em;
}
h3 {
color: #d7d7d7;
font-weight: normal;
font-size: 20px;
margin-bottom: 1em;
padding: 1em;
max-width: 23em;
font-family: 'signika-negative', sans-serif;
}
img[src='../images/new-logo.png'], #new-logo-container {
max-width: 250px;
width: 25vw;
min-width: 150px;
margin: 1em 0 1em 0;
aspect-ratio: 500 / 641;
}
h3 a {
color: #768df0;
text-decoration: underline;
cursor: pointer;
font-family: 'signika-negative', sans-serif;
width: fit-content;
}
h3 a:hover {
color: gray;
}
form > div {
margin: 15px 0;
}
#create-join {
width: 100%;
max-width: 900px;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-evenly;
margin-bottom: 1em;
}
#join-container {
max-width: 90%;
border: 1px solid #55555599;
background: #5555555c;
padding: 0.5em;
border-radius: 5px;
margin: 20px
}
#join-container > label {
font-size: 35px;
font-family: 'signika-negative', sans-serif;
color: #e7e7e7;
filter: drop-shadow(2px 2px 4px black);
}
#room-code {
background-color: #1e1e1e;
}
label[for="room-code"], label[for="player-name"] {
margin-right: 0.5em;
}
@media (min-width: 700px) {
button#home-create-button {
font-size: 30px;
}
}
@media (max-width: 701px) {
button#home-create-button {
font-size: 5vw;
padding: 15px;
}
img[src='../images/new-logo.png'], #new-logo-container {
margin: 1em 0 0 0;
}
#join-container > label {
font-size: 26px;
}
#room-code {
max-width: 9em;
}
#about-container h2 {
font-size: 18px;
}
}
</style>
</head>
<body>
<div id="mobile-menu-background-overlay"></div>

View File

@@ -12,11 +12,274 @@
<link rel="icon" href="/favicon.ico">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="stylesheet" href="/styles/GLOBAL.css">
<link rel="stylesheet" href="/styles/join.css">
<link rel="stylesheet" href="/styles/modal.css">
<link rel="stylesheet" href="/styles/hamburgers.css">
<link rel="stylesheet" href="/styles/modal.css">
<link rel="preload" href="/styles/toast.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="./styles/toast.css"></noscript>
<link rel="preload" href="/webfonts/SignikaNegative-Light.woff2" as="font" type="font/woff2" crossorigin>
<style>
canvas, caption, center, cite, code,
dd, del, dfn, div, dl, dt, em, embed,
fieldset, font, form, h1, h2, h3, h4,
h5, h6, hr, i, iframe, img, ins, kbd,
label, legend, li, menu, object, ol, p,
pre, q, s, samp, small, span, strike,
strong, sub, sup, table, tbody, td, tfoot,
th, thead, tr, tt, u, ul, var {
margin: 0;
padding: 0;
border: 0;
background: transparent;
}
@font-face {
font-family: 'signika-negative';
src: url("../webfonts/SignikaNegative-Light.woff2") format("woff2");
font-display: swap;
}
html {
font-family: 'signika-negative', sans-serif !important;
background-color: #0f0f10;
overflow: auto;
}
body {
display: flex;
flex-direction: column;
align-items: flex-start;
margin: 0 auto;
background-color: #0f0f10;
}
label {
color: #d7d7d7;
font-family: 'signika-negative', sans-serif;
font-size: 20px;
font-weight: normal;
}
input, textarea {
background-color: transparent;
border: 1px solid white;
border-radius: 5px;
color: #d7d7d7;
}
a {
text-decoration: none;
}
textarea, input {
font-family: 'signika-negative', sans-serif;
font-size: 16px;
}
button {
display: flex;
align-items: center;
justify-content: center;
}
.app-button, input[type="submit"] {
font-family: 'signika-negative', sans-serif !important;
padding: 10px;
background-color: #1a7a31;
border-radius: 5px;
color: #e7e7e7;
font-size: 18px;
cursor: pointer;
border: 3px solid transparent;
text-shadow: 0 3px 4px rgb(0 0 0 / 55%);
}
.app-button:active, input[type=submit]:active {
border: 3px solid #21ba45;
}
.submitted {
filter: opacity(0.5);
pointer-events: none;
}
.app-button:hover, input[type="submit"]:hover, #game-link:hover {
background-color: #326243;
border: 3px solid #1a7a31;
}
#game-parameters {
font-family: signika-negative, sans-serif;
color: #d7d7d7;
font-size: 20px;
}
#game-parameters > div {
display: flex;
align-items: center;
font-size: 25px;
}
input {
padding: 10px;
}
.info-message {
pointer-events: none;
display: flex;
align-items: center;
justify-content: center;
position: fixed;
z-index: 1000000;
padding: 10px;
border-radius: 5px;
font-family: 'signika-negative', sans-serif;
font-weight: 100;
box-shadow:
0 1px 1px rgba(0,0,0,0.11),
0 2px 2px rgba(0,0,0,0.11),
0 4px 4px rgba(0,0,0,0.11),
0 8px 8px rgba(0,0,0,0.11),
0 16px 16px rgba(0,0,0,0.11),
0 32px 32px rgba(0,0,0,0.11);
left: 0;
right: 0;
width: fit-content;
max-width: 80%;
min-width: 15em;
font-size: 20px;
margin: 0 auto;
}
#navbar {
display: flex;
align-items: center;
padding: 10px 0;
width: 100%;
background-color: #0f0f10;
height: 45px;
z-index: 53000;
}
#desktop-links > a:nth-child(1) {
margin: 0 0.5em;
width: 50px;
}
#mobile-links a:nth-child(1) {
width: 80px;
margin: 0 auto 3em auto !important;
display: flex;
}
.logo {
display: flex;
align-items: center;
}
#navbar img {
width: 100%;
}
#navbar a:not(.logo) {
color: #f7f7f7;
text-decoration: none;
cursor: pointer;
font-family: 'signika-negative', sans-serif;
border-radius: 5px;
padding: 2px 5px;
font-size: 20px;
margin: 1em;
width: fit-content;
}
#navbar a:hover {
color: gray;
}
.overlay {
position: fixed;
background-size: cover;
height: 100%;
opacity: 75%;
background-color: black;
width: 100%;
z-index: 50000;
}
.hidden {
display: none !important;
}
#mobile-links {
display: flex;
flex-direction: column;
margin-top: 3em;
}
.mobile-link {
margin-top: 1em !important;
margin-left: 2em !important;
}
@media(max-width: 1000px) {
#navbar {
display: flex;
padding: 0;
}
#navbar-hamburger {
z-index: 52000;
position: relative;
}
#desktop-menu {
display: none;
}
#mobile-menu {
position: absolute;
top: 0;
left: 0;
height: auto;
padding-bottom: 2em;
width: 100%;
z-index: 51000;
background-color: #1e1e1e;
}
}
@media(min-width: 1001px) {
#navbar-hamburger, #mobile-menu, #mobile-menu-background-overlay {
display: none;
}
.desktop-link {
display: flex;
}
#desktop-links {
display: flex;
align-items: center;
}
}
@media(max-width: 550px) {
h1 {
font-size: 30px;
}
#step-1 div {
font-size: 20px;
}
.info-message {
padding: 5px;
font-size: 16px;
}
}
</style>
</head>
<body>
<div id="mobile-menu-background-overlay"></div>

24
package-lock.json generated
View File

@@ -13,7 +13,7 @@
"body-parser": "^1.20.3",
"compression-webpack-plugin": "^10.0.0",
"cors": "^2.8.5",
"express": "^4.21.2",
"express": "^4.21.1",
"express-force-https": "^1.0.0",
"express-rate-limit": "^6.0.1",
"open": "^7.0.3",
@@ -47,7 +47,7 @@
"webpack-remove-debug": "^0.1.0"
},
"engines": {
"node": ">= 20.0.0"
"node": ">= 14.0.0"
}
},
"node_modules/@ampproject/remapping": {
@@ -3934,10 +3934,9 @@
}
},
"node_modules/express": {
"version": "4.21.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"license": "MIT",
"version": "4.21.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
"integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
@@ -3958,7 +3957,7 @@
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.12",
"path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
"qs": "6.13.0",
"range-parser": "~1.2.1",
@@ -3973,10 +3972,6 @@
},
"engines": {
"node": ">= 0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/express-force-https": {
@@ -5862,10 +5857,9 @@
"dev": true
},
"node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"license": "MIT"
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
"integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
},
"node_modules/picocolors": {
"version": "1.1.1",

View File

@@ -30,7 +30,7 @@
"body-parser": "^1.20.3",
"compression-webpack-plugin": "^10.0.0",
"cors": "^2.8.5",
"express": "^4.21.2",
"express": "^4.21.1",
"express-force-https": "^1.0.0",
"express-rate-limit": "^6.0.1",
"open": "^7.0.3",

View File

@@ -83,11 +83,9 @@ router.patch('/:code/players', async function (req, res) {
res.status(200).send({ cookie: data, environment: gameManager.environment });
}).catch((data) => {
console.error(data);
res.set('content-type', 'text/plain');
res.status(data.status || 500).send(data.reason);
});
} else {
res.set('content-type', 'text/plain');
res.status(404).send();
}
}

View File

@@ -95,7 +95,7 @@ const ServerBootstrapper = {
res.setHeader(
'Content-Security-Policy',
"default-src 'self'; font-src 'self' https://fonts.gstatic.com/; img-src 'self' https://img.buymeacoffee.com;" +
" script-src 'self'; style-src 'self' https://fonts.googleapis.com/ 'nonce-" + nonce + "'; frame-src 'self'"
" script-src 'self' https://cdnjs.buymeacoffee.com; style-src 'self' https://cdnjs.buymeacoffee.com https://fonts.googleapis.com/ 'nonce-" + nonce + "'; frame-src 'self'"
);
next();
});