@charset "UTF-8";
/* -- RESET -- */
*,
*:before,
*:after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
/* -- /RESET -- */
/* -- VARIABLES -- */
:root {
  --std-radius: 0.25rem;
  --std-gap: 0.5rem;
  --std-pad: 0.5rem;
  --std-pad-lg: 1rem;
  --std-btn-pad: 4px 8px 4px 8px;
  --std-hud-pad: 5px;
  --std-box-pad: 7rem;
  --std-marg: 1rem;
  --std-gap-sm: 0.25rem;
  --std-border-t: 1px;
  --rad-btn-w: 4rem;
  --std-modal-top: 15rem;
  --std-trans-time: 0.5s;
  --checkbox-size: 16px;
  --bg-dark: var(--bs-gray-500);
  --bg-medium: var(--bs-gray-300);
  --bg-light: var(--bs-gray-200);
  --btn-light: var(--bs-gray-600);
  --btn-medium: var(--bs-gray-700);
  --btn-dark: var(--bs-gray-900);
  --bg-game-on: #eed38d;
  --bg-highlight-red: #db5454;
  --bg-highlight-green: #5deb5d;
  --bg-highlight-pink: #d8afd5;
  --txt-dark: var(--bs-gray-900);
  --txt-medium: var(--bs-gray-500);
  --txt-light: var(--bs-gray-100);
}
/* -- /VARIABLES -- */
/* -- STYLES -- */
html,
body {
  color: var(--txt-dark);
}
#body-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  align-items: center;
  font-family: Tahoma;
  background-color: var(--bg-dark);
  gap: var(--std-gap);
  transition: background-color var(--std-trans-time);
}
#header-wrapper {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  width: 100vw;
  background-color: var(--bg-light);
  align-items: center;
  justify-content: flex-end;
  border-bottom: var(--std-border-t) solid var(--txt-dark);
}
main {
  display: flex;
}
#main-wrapper {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  flex-basis: 100%;
}
.footer-wrapper {
  display: block;
  position: relative;
  top: 1rem;
  text-justify: center;
  margin-bottom: 1rem;
  font-weight: bold;
  padding-left: var(--std-pad);
  padding-right: var(--std-pad);
}
/* -- HEADER -- */
h1,
h2 {
  margin: 0;
  padding: 0;
}
h2 {
  margin-bottom: 1rem;
  text-align: center;
}
.header-down {
  height: 50vh;
  transition: height var(--std-trans-time);
}
.header-up {
  height: 3rem;
  transition: height var(--std-trans-time);
}
/* -- /HEADER -- */
/* -- SPLASH -- */
.splash {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  align-items: center;
  gap: var(--std-gap);
}
/* -- /SPLASH -- */
/* -- HIGHSCORE -- */
#highscores {
  width: auto;
  max-width: none;
  padding-top: var(--std-box-pad);
}
#highscore-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  margin-bottom: var(--std-gap);
  column-gap: var(--std-gap);
}
/* -- /HIGHSCORE -- */
/* -- CREDITS -- */
#credits {
  width: auto;
  max-width: none;
  padding-top: var(--std-box-pad);
}
#credits-grid {
  display: grid;
  grid-template-columns: repeat(4, auto);
  margin-bottom: var(--std-gap);
  column-gap: var(--std-gap);
}
/* -- /CREDITS -- */
/* -- /GAME-SETTINGS -- */
#game-settings {
  width: auto;
  max-width: none;
  flex-grow: 0;
  padding-top: var(--std-box-pad);
  transition-duration: var(--std-trans-time);
}
#settings-form {
  display: grid;
  grid-template-rows: auto auto;
  grid-template-columns: auto auto;
  grid-template-areas:
    'player-label player-input'
    'map-label    map-sizes';
  gap: var(--std-gap);
  margin-bottom: var(--std-gap);
}
label {
  white-space: nowrap;
}
.radio-custom {
  width: var(--rad-btn-w);
  text-align: center;
  background-color: var(--btn-light);
  color: var(--txt-light);
  padding: var(--std-btn-pad);
  border: 1px solid black;
}
.btn-check:checked + .btn {
  color: var(--txt-light);
  background-color: var(--btn-dark);
  border-color: var(--btn-dark);
}
.btn-check:hover + .btn {
  color: var(--txt-light);
  background-color: var(--btn-medium);
  border-color: var(--btn-dark);
}
/* -- /GAME-SETTINGS -- */
/* -- STORY & INSTRUCTIONS-- */
.story,
.instructions {
  display: flex;
  color: var(--txt-dark);
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  max-width: 60vw;
  padding: var(--std-pad-lg);
  padding-top: var(--std-box-pad);
  margin-top: var(--std-marg);
  gap: var(--std-gap);
  background-color: var(--bg-light);
  border: 1px solid black;
  border-radius: 5px;
}
.story-fadeout {
  opacity: 0;
  transition: opacity calc(var(--std-trans-time) * 2);
}
.custom-checkbox[type='checkbox']:before {
  position: relative;
  display: block;
  width: var(--checkbox-size);
  height: var(--checkbox-size);
  border: 1px solid #808080;
  content: '';
}
.custom-checkbox[type='checkbox']:after {
  position: relative;
  display: block;
  left: 0px;
  top: calc(var(--checkbox-size) * -1);
  width: var(--checkbox-size);
  height: var(--checkbox-size);
  border: 1px solid var(--txt-dark);
  content: '';
  background-color: white;
  background-position: center;
}
.custom-checkbox[type='checkbox']:hover:after {
  border-color: var(--bg-medium);
}
.custom-checkbox[type='checkbox']:checked:after {
  background-image: url(./images/checkmark.svg);
  background-size: var(--checkbox-size);
}
.custom-checkbox:checked:after {
  background-color: var(--bg-dark) !important;
}
.instructions > p {
  font-size: smaller;
}
#instructions-layout {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-rows: repeat(2, 1fr);
  gap: var(--std-gap);
  font-size: smaller;
}
/* -- /STORY -- */
/* -- GAME -- */
.game {
  display: grid;
  grid-template-columns: repeat(2, auto);
  grid-template-rows: repeat(2, auto);
  gap: var(--std-gap);
}
#game-header {
  display: flex;
  flex-direction: column;
  gap: var(--std-gap);
}
#game-over {
  top: var(--std-modal-top);
}
.menu {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 0.5em;
}
.play-control {
  display: flex;
  text-align: center;
  align-items: center;
  margin: 0;
  gap: 0.5em;
}
.timer {
  display: flex;
  justify-self: flex-start;
  flex: 0 1 0%;
  display: flex;
  color: var(--txt-light);
  background-color: var(--btn-light);
  padding: var(--std-btn-pad);
  border: 1px solid black;
  border-radius: 5px;
}
.play-icon {
  font-size: 1em;
  padding: 3px;
  border: 1px solid black;
  border-radius: 5px;
  width: 2em;
  text-align: center;
  transition-duration: 0.4s;
  background-color: var(--btn-light);
}
.play-icon:hover:enabled {
  color: white;
}
.hud {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  grid-template-rows: repeat(2, 1fr);
  padding: var(--std-hud-pad);
  border: 1px solid black;
  border-radius: var(--std-radius);
  background-color: var(--bg-light);
  text-align: center;
}
#message-box {
  border: 1px solid black;
  border-radius: var(--std-radius);
  background-color: var(--bg-light);
  text-align: center;
}
#preview-next-wave {
  display: grid;
  grid-template-columns: repeat(3, auto);
  grid-template-rows: repeat(5, 1fr);
  grid-template-areas:
    'title title title'
    'item item item'
    'item item item'
    'item item item'
    'item item item';
  border: 1px solid black;
  border-radius: var(--std-radius);
  background-color: var(--bg-light);
  text-align: left;
  padding: var(--std-hud-pad);
  padding-left: 0;
  padding-right: 0;
}
#preview-next-wave-header {
  grid-area: title;
  margin-left: var(--std-pad);
  margin-right: var(--std-pad);
  padding-left: var(--std-pad);
  padding-right: var(--std-pad);
  border-radius: var(--std-radius);
  text-align: center;
}
.preview-next-wave-symbol {
  padding-left: var(--std-pad);
  text-align: center;
}
#wave-size,
#enemy-health,
#enemy-damage,
#enemy-speed {
  text-align: right;
  padding-right: var(--std-pad);
}

.red-highlight {
  border-radius: calc(var(--std-radius) / 2);
  animation: red-highlight calc(var(--std-trans-time) * 2) normal;
}
@keyframes red-highlight {
  0% {
    background-color: var(--bg-light);
  }
  50% {
    background-color: var(--bg-highlight-red);
  }
  100% {
    background-color: var(--bg-light);
  }
}
.green-highlight {
  border-radius: calc(var(--std-radius) / 2);
  animation: green-highlight calc(var(--std-trans-time) * 2) normal;
}
@keyframes green-highlight {
  0% {
    background-color: var(--bg-light);
  }
  50% {
    background-color: var(--bg-highlight-green);
  }
  100% {
    background-color: var(--bg-light);
  }
}
.pink-highlight {
  border-radius: calc(var(--std-radius) / 2);
  animation: pink-highlight calc(var(--std-trans-time) * 2) normal;
}
@keyframes pink-highlight {
  0% {
    background-color: var(--bg-light);
  }
  50% {
    background-color: var(--bg-highlight-pink);
  }
  100% {
    background-color: var(--bg-light);
  }
}
#canvases {
  display: flex;
  position: relative;
  margin: auto;
}
.canvas {
  position: absolute;
  background-color: var(--bg-game-on);
  border-radius: var(--std-radius);
  z-index: 1;
}
#foreground-layer {
  background-color: transparent;
  position: relative;
  z-index: 2;
}
.buttons {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  text-align: center;
  padding: var(--std-hud-pad);
  gap: var(--std-gap-sm);
  border: 1px solid black;
  border-radius: var(--std-radius);
  background-color: var(--bg-light);
}
#btn-build-modes {
  display: grid;
  grid-template-columns: 1fr;
  row-gap: var(--std-gap);
}
/* -- /GAME -- */
/* -- MODAL */
.modal-content {
  display: grid;
  grid-template-columns: repeat(3, auto);
  grid-template-rows: repeat(4, auto);
  align-items: center;
  border-radius: var(--std-radius);
  background-color: var(--bg-light);
}
.modal-content > h1,
.modal-content > div,
.modal-content > button {
  margin: 0.5rem;
}
/* -- /MODAL */
/* -- FOOTER -- */
#copyright {
  display: flex;
  gap: var(--std-gap-sm);
}
/* -- /FOOTER -- */
/* -- GENERAL -- */
.standard-button {
  background-color: var(--btn-light);
  color: var(--txt-light);
  padding: var(--std-btn-pad);
  border: 1px solid black;
  border-radius: 5px;
  max-width: 12em;
  transition-duration: 0.4s;
  text-wrap: nowrap;
}
.quit-button {
  background-color: var(--bg-highlight-red);
}
.btn-audio {
  display: flex;
  align-items: center;
  gap: 0.25rem;
}
#btn-audio > img {
  height: 1.5rem;
}
.standard-button:hover:enabled,
.btn-audio.standard-button:hover:enabled,
.play-icon:hover:enabled {
  background-color: var(--btn-dark);
}
.standard-button:active:enabled {
  transition-duration: 0.1s;
  color: black;
  background-color: var(--btn-light);
}
.standard-button:disabled {
  color: var(--txt-medium);
  border-color: transparent;
}
.hidden {
  display: none;
}
.active {
  background-color: lightblue;
  border-color: transparent;
  color: black;
}
#dev-text {
  border-radius: var(--std-radius);
  border: 2px solid;
  text-align: center;
  font-weight: bold;
  background-color: var(--btn-medium);
  animation: color-loop 3s infinite;
}
/* prettier-ignore */
@keyframes color-loop {
  0%   {color: #2038b2;}
  20%  {color: #ce1616;}
  40%  {color: #4ed01a;}
  60%  {color: #dfec11;}
  80%  {color: #c53ace;}
  100% {color: #2038b2;}
}
/* -- /GENERAL -- */
/* -- /STYLES -- */
/* -- MEDIA QUERIES -- */
@media (max-height: 800px) {
  :root {
    --std-box-pad: 2rem;
  }
}
/* -- /MEDIA QUERIES -- */
