@font-face {
  font-family: 'NotoSans';
  src: url('assets/notosans-nerdfont-regular.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}

:root {
  --kanvas-font: 'NotoSans';
  --kanvas-radius: 0.25rem;
}

.kanvas {
  width: 100%;
  height: 100%;
  min-height: 8rem;
  min-width: 8rem;
  margin-bottom: auto;
  margin-left: auto;
  margin-right: auto;
  margin-top: 0;
}

.kanvas-wrapper {
  font-family: var(--kanvas-font);
  width: 100%;
  height: 100%;
  min-height: 100%;
  position: relative;
}

.kanvas-wrapper:focus,
.kanvas-wrapper:focus-visible {
  outline: none;
}

.kanvas-toolbar {
  font-size: var(--kanvas-size);
  line-height: calc(2 * var(--kanvas-size));
  vertical-align: middle;
  opacity: 0;
  background-color: black;
  min-width: 100%;
  position: sticky;
  top: 0;
  left: 0;
  z-index: 1;
  border-radius: var(--kanvas-radius);
  transition: opacity 0.2s ease-in, background-color 0.2s ease-in;
  background-color: unset;
}

.kanvas-toolbar.active {
  opacity: 1;
}

.kanvas-toolbar span {
  filter: drop-shadow(1px 1px 1px darkslategray);
}

.kanvas-footer {
  position: fixed;
  z-index: 2;
  bottom: 0;
  top: unset;
}

.kanvas-overlay {
  position: absolute;
  top: calc(2.2 * var(--kanvas-size));
  right: 0;
  width: var(--kanvas-overlay-width, 15rem);
  min-width: 8.75rem;
  max-width: 25rem;
  max-height: var(--kanvas-canvas-height, min(72vh, 40rem));
  display: flex;
  flex-direction: column;
  gap: 0.3em;
  z-index: 2;
  pointer-events: auto;
  background: hsl(var(--kanvas-color), 0%, 9%);
  border: 1px solid hsl(var(--kanvas-color), 10%, 24%);
  border-radius: calc(1.5 * var(--kanvas-radius));
  box-shadow: 1px 1px 4px hsla(var(--kanvas-color), 20%, 2%, 0.55);
  padding: 0.4em;
  opacity: 0.85;
  overflow-x: hidden;
  overflow-y: auto;
}

.kanvas-resolution {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 0.2em;
  border-bottom: 1px solid hsl(var(--kanvas-color), 10%, 20%);
  padding: 0.1em 0.1em 0.35em 0.1em;
  cursor: grab;
  user-select: none;
}

.kanvas-resolution .kanvas-button {
  padding: 0.2em 0.3em;
  margin-right: 0;
}

.kanvas-resolution .kanvas-sizebox {
  font-size: 0.75em !important;
  line-height: 1.6;
  background: hsl(var(--kanvas-color), 0%, 22%);
  color: hsl(var(--kanvas-color), 0%, 100%) !important;
  border-radius: var(--kanvas-radius);
  padding: 0.15em 0.35em;
  border: none;
  text-align: right;
  width: 4.5em;
  min-height: unset;
}

.kanvas-shapes {
  margin-top: 0.2em;
}

.kanvas-shapes-titles {
  color: hsl(var(--kanvas-color), 0%, 90%);
  font-size: 0.8em;
  line-height: 1.25em;
  user-select: none;
  cursor: pointer;
  padding: 0.5em 0 0.5em 0;
}

.kanvas-overlay.overlay-collapsed > :not(.kanvas-resolution) {
  display: none;
}

.kanvas-overlay.collapsed .kanvas-shapes .kanvas-shapes-list {
  display: none;
}

.kanvas-shapes-list {
  display: flex;
  flex-direction: column;
  gap: 0.2em;
  overflow-y: auto;
  max-height: 45vh;
  padding-right: 0.1em;
}

.kanvas-shapes-item {
  font-family: var(--kanvas-font);
  font-size: 0.76em;
  text-align: left;
  border: none;
  border-radius: var(--kanvas-radius);
  padding: 0.375em;
  color: hsl(var(--kanvas-color), 0%, 88%);
  background: hsl(var(--kanvas-color), 4%, 15%);
  cursor: pointer;
}

.kanvas-shapes-item:hover {
  background: hsl(var(--kanvas-color), 45%, 28%);
}

.kanvas-shapes-item.active {
  background: hsl(var(--kanvas-color), 55%, 33%);
}

.kanvas-shapes-empty {
  color: hsl(var(--kanvas-color), 0%, 65%);
  font-size: 0.74em;
  font-style: italic;
  padding: 0.25em;
}

.kanvas-tools {
  display: flex;
  flex-direction: column;
  gap: 0.25em;
  border-top: 1px solid hsl(var(--kanvas-color), 10%, 20%);
  padding-top: 0.35em;
}

.kanvas-tools-title {
  font-size: 0.8em;
  color: hsl(var(--kanvas-color), 0%, 78%);
  line-height: 1.2;
  user-select: none;
}

.kanvas-tools .kanvas-section {
  display: none;
  opacity: 0;
}

.kanvas-tools .kanvas-section.active {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.2em;
  opacity: 0.9;
  animation: kanvas-fade-in 0.5s ease-in forwards;
}

.kanvas-stages {
  display: flex;
  flex-direction: column;
  gap: 0.25em;
}

.kanvas-stages-titles {
  display: flex;
  align-items: center;
  gap: 0.3em;
  color: hsl(var(--kanvas-color), 0%, 90%);
  font-size: 0.8em;
  cursor: pointer;
}

.kanvas-stages.collapsed .kanvas-stages-list {
  display: none;
}

.kanvas-stages-titles .kanvas-stage-control {
  margin-left: auto;
  font-size: 1.2em;
}

.kanvas-stages-list {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.2em;
  max-height: 45vh;
  overflow-y: auto;
}

.kanvas-stage-item {
  display: block;
  position: relative;
  text-align: left;
  border: none;
  border-radius: var(--kanvas-radius);
  padding: 0;
  font-family: var(--kanvas-font);
  color: hsl(var(--kanvas-color), 0%, 88%);
  background: hsl(var(--kanvas-color), 4%, 15%);
  cursor: pointer;
  overflow: hidden;
}

.kanvas-stage-item:hover {
  background: hsl(var(--kanvas-color), 45%, 28%);
}

.kanvas-stage-item.active {
  background: hsl(var(--kanvas-color), 55%, 33%);
  box-shadow: inset 0 0 0 0.125rem hsl(var(--kanvas-color), 65%, 58%), 0 0 0 0.0625rem hsla(var(--kanvas-color), 0%, 0%, 0.35);
}

.kanvas-stage-item.active .kanvas-stage-meta {
  background: linear-gradient(180deg, hsla(var(--kanvas-color), 65%, 18%, 0.72) 0%, hsla(var(--kanvas-color), 55%, 22%, 0.15) 48%, hsla(var(--kanvas-color), 65%, 16%, 0.84) 100%);
}

.kanvas-stage-thumb {
  position: relative;
  width: 100%;
  min-height: 4.5rem;
  aspect-ratio: 5 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: inherit;
  background: hsl(var(--kanvas-color), 0%, 12%);
  color: hsl(var(--kanvas-color), 0%, 62%);
  font-size: 0.72em;
}

.kanvas-stage-thumb img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

.kanvas-stage-label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 600;
  color: hsl(var(--kanvas-color), 0%, 96%);
  text-shadow: 0 0.0625em 0.125em hsla(var(--kanvas-color), 0%, 0%, 0.7);
}

.kanvas-stage-meta {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 0.15em;
  min-width: 0;
  padding: 0.35em 0.4em;
  background: linear-gradient(180deg, hsla(var(--kanvas-color), 0%, 4%, 0.7) 0%, hsla(var(--kanvas-color), 0%, 4%, 0.08) 48%, hsla(var(--kanvas-color), 0%, 4%, 0.8) 100%);
  pointer-events: none;
}

.kanvas-stage-meta * {
  pointer-events: auto;
}

.kanvas-stage-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.4em;
}

.kanvas-stage-order {
  color: hsl(var(--kanvas-color), 0%, 12%) !important;
  background-color: hsl(var(--kanvas-color), 0%, 85%);
  font-family: monospace;
  vertical-align: top;
  padding: 0.1em 0.4em 0.1em 0.4em !important;
  border-radius: 2px !important;
  font-weight: bolder;
  position: absolute;
  top: 0.35em;
  right: 2.7em;
}

.kanvas-stage-remove {
  position: absolute;
  top: 0.35em;
  right: 0.35em;
  font-size: 1.6em;
  background-color: rgba(0, 0, 0, 0.4);
  align-items: center;
  z-index: 2;
  pointer-events: auto;
  padding: 0 !important;
}

.kanvas-stage-heading:hover {
  color: hsl(var(--kanvas-color), 0%, 96%) !important;
}

.kanvas-stage-resolution {
  color: hsl(var(--kanvas-color), 0%, 86%);
  line-height: 1.2;
  text-shadow: 0 0.0625em 0.125em hsla(var(--kanvas-color), 0%, 0%, 0.7);
}

@media (max-width: 900px) {
  .kanvas-overlay {
    width: min(46vw, 17.5rem);
  }
}

@media (max-width: 700px) {
  .kanvas-overlay {
    position: static;
    width: 100%;
    max-height: 12.5rem;
    margin-top: 0.4em;
  }

  .kanvas-shapes-list {
    max-height: 9.375rem;
  }
}

.kanvas-toolbar input[type='range'] {
  display: unset;
}

.kanvas-toolbar input[type="number"] {
  background-color: transparent;
  border: none;
  font-family: var(--kanvas-font);
  font-size: 0.8em;
  width: 3.8em;
  color: hsl(var(--kanvas-color), 0%, 85%);
  padding: 0;
  text-align: right;
}

.kanvas-toolbar input[type="number"]:focus {
  outline: none;
}

.konvajs-content {
  background: black;
  width: fit-content !important;
  height: fit-content !important;
}

.kanvas-separator {
  opacity: 0.3;
  font-size: calc(1.1 * var(--kanvas-size));
  position: relative;
  vertical-align: top;
  line-height: 1.6em;
  margin-right: -0.25rem;
  cursor: pointer;
  filter: blur(1px) !important;
}

.kanvas-section {
  display: none;
  opacity: 0;
}

.kanvas-section.active {
  display: inline;
  opacity: 0.75;
  animation: kanvas-fade-in 0.5s ease-in forwards;
}

.kanvas-button {
  color: hsl(var(--kanvas-color), 0%, 85%);
  padding: 0.3em 0.3em 0.3em 0.4em;
  border-radius: var(--kanvas-radius);
  cursor: pointer;
  user-select: none;
  transition: background-color 0.3s ease, color 0.2s ease, text-shadow 0.2s ease, filter 0.2s ease;
  margin-right: -0.25rem;
  letter-spacing: 0.125em;
}
.kanvas-toolbar .kanvas-button:hover {
  color: hsl(var(--kanvas-color), 0%, 96%);
  text-shadow: 0 0.0625em 0 hsla(var(--kanvas-color), 0%, 100%, 0.08), 0 -0.0625em 0 hsla(var(--kanvas-color), 0%, 0%, 0.5), 0 0 0.625em hsla(var(--kanvas-color), 55%, 75%, 0.16);
  filter: saturate(1.08);
}
.kanvas-toolbar .kanvas-button.active {
  color: hsl(180, 100%, 60%);
  text-shadow: 1px 1px 4px hsla(var(--kanvas-color), 0%, 100%, 0.2);
  filter: brightness(1.3);
}
.kanvas-button.disabled {
  opacity: 0.5;
}

.kanvas-button.disabled:hover {
  opacity: 0.5;
  background-color: transparent;
}

.kanvas-paint-controls {
  display: flex;
  align-items: center;
  vertical-align: top;
}

.kanvas-slider {
  padding: 0;
  margin-top: calc(var(--kanvas-size) / -4);
  width: calc(4 * var(--kanvas-size)) !important;
  height: calc(0.6 * var(--kanvas-size));
  background-color: hsl(var(--kanvas-color), 0%, 25%) !important;
  overflow: hidden;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  border-radius: var(--kanvas-radius);
  vertical-align: middle;
  min-height: calc(0.6 * var(--kanvas-size));
  max-height: calc(0.6 * var(--kanvas-size));
}

.kanvas-slider::-webkit-slider-thumb {
  height: calc(0.6 * var(--kanvas-size));
  width: calc(0.8 * var(--kanvas-size));
  background-color: hsl(180, 54%, 61%);
  border-radius: var(--kanvas-radius);
}

.kanvas-slider::-webkit-slider-runnable-track,
.kanvas-slider::-webkit-slider-thumb {
  -webkit-appearance: none;
}

.kanvas-slider::-moz-range-thumb {
  height: calc(0.6 * var(--kanvas-size));
  width: calc(0.8 * var(--kanvas-size));
  background-color: hsl(180, 54%, 61%);
  border-radius: var(--kanvas-radius);
}

.kanvas-slider::-moz-range-track,
.kanvas-slider::-webkit-slider-runnable-track {
  border: none;
  background: none;
  width: 100%;
  height: 100%;
}

.kanvas-slider::after {
  display: none;
}

.kanvas-select {
  background: transparent;
  color: hsl(var(--kanvas-color), 0%, 85%);
  border: none;
}

.kanvas-select option {
  background: hsl(var(--kanvas-color), 0%, 20%);
  color: hsl(var(--kanvas-color), 0%, 85%);
  border: none;
  list-style: none;
}

.kanvas-select:hover {
  background-color: hsl(var(--kanvas-color), 50%, 50%);
}

.kanvas-select:focus {
  outline: none;
  border: none;
  box-shadow: none;
}

.kanvas-colorpicker {
  width: calc(2 * var(--kanvas-size));
  border: none;
  padding: 0;
  margin: 0;
  cursor: pointer;
  background: unset;
  vertical-align: middle;
}

.kanvas-checkbox {
  accent-color: hsl(var(--kanvas-color), 55%, 55%);
  vertical-align: middle;
}

.kanvas-textbox {
  border: none;
  background: hsl(var(--kanvas-color), 0%, 80%);
  width: calc(6 * var(--kanvas-size));
  border-radius: var(--kanvas-radius);
}

.kanvas-textbox:focus {
  outline: none;
  border: none;
  box-shadow: none;
}

.kanvas-text {
  font-size: 0.7em;
  cursor: pointer;
  opacity: 0.75;
}

.kanvas-text.active {
  display: inline;
  opacity: 0.75;
  animation: kanvas-fade-in 1.0s ease-in forwards;
}

.kanvas-settings {
  display: none;
  background: hsl(var(--kanvas-color), 0%, 10%);
  margin-top: 0.15em;
  padding: 0.5em;
  border-radius: var(--kanvas-radius);
  border: 1px solid hsl(var(--kanvas-color), 10%, 22%);
  filter: drop-shadow(0.125em 0.125em 0.125em hsl(var(--kanvas-color), 50%, 0%));
  flex-direction: column;
  gap: 0.28em;
}

.kanvas-settings-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  color: hsl(var(--kanvas-color), 0%, 90%);
  font-size: 0.8em;
  line-height: 1.2;
  padding-bottom: 0.25em;
  border-bottom: 1px solid hsl(var(--kanvas-color), 10%, 18%);
  margin-bottom: 0.1em;
}
.kanvas-settings-reset {
  background: none;
  border: 1px solid hsl(var(--kanvas-color), 10%, 30%);
  border-radius: 0.1875rem;
  color: hsl(var(--kanvas-color), 40%, 70%);
  font-size: 0.9em;
  padding: 0.1em 0.4em;
  cursor: pointer;
  line-height: 1.2;
}
.kanvas-settings-reset:hover {
  border-color: hsl(var(--kanvas-color), 40%, 50%);
  color: hsl(var(--kanvas-color), 60%, 85%);
}

.kanvas-settings-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5em;
  min-height: 1.9em;
}

.kanvas-settings label {
  color: hsl(var(--kanvas-color), 0%, 82%);
  font-size: 0.75em;
  line-height: 1.2;
  min-width: 0;
}

.kanvas-settings input[type="number"] {
  width: 5.2em;
  font-family: var(--kanvas-font);
  font-size: 0.75em;
  line-height: 1.6;
  background: hsl(var(--kanvas-color), 0%, 22%);
  color: hsl(var(--kanvas-color), 0%, 100%);
  border-radius: var(--kanvas-radius);
  padding: 0.15em 0.35em;
  border: none;
  text-align: right;
}

.kanvas-settings input[type="number"]:focus {
  outline: none;
}

.kanvas-settings input[type="checkbox"] {
  accent-color: hsl(var(--kanvas-color), 55%, 55%);
}

.kanvas-size label {
  font-family: var(--kanvas-font);
  font-size: 0.8em;
  vertical-align: top;
}

@keyframes kanvas-fade-in {
  0% {
    opacity: 0;
  }

  100% {
    opacity: 0.75;
  }
}

.kanvas input[type="number"] {
  vertical-align: middle !important;
}
