a {
  /* markdown: [text](url) */
  background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
  border-radius: 0.5rem;
  color: var(--general-text-light);
  display: inline-block;
  line-height: 2rem;
  padding: 0 1rem;
  text-decoration: none;
}

body {
  background-color: var(--general-background);
  color: var(--general-text-dark);
  font-family: monospace;
  line-height: 1.25rem;

  >header {
    height: 0;
    overflow: hidden;
  }
}

button {
  background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
  border-radius: 0.5rem;
  color: var(--general-text-light);
  line-height: 1.5rem;
  margin: 0.75rem 0;
  padding: 0.5rem 0.75rem;
  width: 100%;
}

select {
  appearance: none;
  background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
  border-radius: 0.5rem;
  color: var(--general-text-light);
  cursor: pointer;
  height: 2rem;
  padding: 0 2rem 0 1rem;
  width: 100%;
}

i {
  /* markdown: *italic* */
  background: linear-gradient(135deg, var(--panel-background-left), var(--panel-background-right));
  border-radius: 0.25rem 0.25rem 0 0;
  color: var(--general-text-light);
  font-style: normal;
  padding: 0.1rem 0.25rem;
  white-space: nowrap;
}

input {
  margin-top: 0.5rem;

  &[type="text"],
  &[type="number"] {
    background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
    border-radius: 0.5rem;
    color: var(--general-text-light);
    height: 2rem;
    padding: 0 0.5rem;
    width: 8rem;
  }

  &[type="number"]::-webkit-inner-spin-button {
    filter: invert(1);
  }

  &[type="radio"] {
    margin: 0 0.5rem 0.1rem 0.75rem;
    vertical-align: text-bottom;
  }

  &[type="submit"] {
    background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
    border-radius: 0.5rem;
    color: var(--general-text-light);
    display: block;
    line-height: 1.5rem;
    margin: 0.75rem 0;
    padding: 0.5rem 0.75rem;
    white-space: inherit;
    width: 100%;
  }
}

label {
  border-radius: 0.5rem;
  min-height: 2rem;

  &:has(select) {
    display: contents;

    span {
      position: relative;

      &::after {
        color: var(--general-text-light);
        content: '▾';
        pointer-events: none;
        position: absolute;
        right: 0.5rem;
        top: 50%;
        transform: translateY(-50%);
      }
    }
  }

  &:has(input[type="radio"]) {
    background: linear-gradient(135deg, var(--button-background-left), var(--button-background-right));
    color: var(--general-text-light);
    display: inline-block;
    line-height: 2rem;
    margin-right: 0.75rem;
    margin-top: 0.5rem;
    opacity: 0.25;
    padding-right: 0.75rem;

    &:has(input:checked) {
      opacity: 1;
    }

    &:hover {
      cursor: pointer;
    }
  }
}

p {
  margin: 0.75rem 0;
  white-space: pre-wrap;
}


a,
button,
input:not([type="radio"]),
label:has(input[type="radio"]),
select {

  &:focus-within,
  &:focus,
  &:hover {
    box-shadow: 0 0 0.3rem 0.3rem var(--button-focus-shadow);
  }
}

#screen {
  display: flex;

  #messages {
    min-height: 100vh;
    width: 60%;
  }

  #panels {
    align-self: flex-start;
    position: sticky;
    top: 0;
    width: 40%;

    section {
      background-color: var(--panel-body-background);
      border-radius: 0.5rem;
      color: var(--general-text-dark);
      margin: 0.75rem;
      overflow: hidden;

      header {
        background: linear-gradient(135deg, var(--panel-background-left), var(--panel-background-right));
        border-radius: 0.5rem 0.5rem 0 0;
        color: var(--general-text-light);
        padding: 0.75rem;
      }

      >div {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        margin: 0.75rem;

        img {
          float: right;
          margin: 0 0 0.75rem 0.75rem;
          width: 3rem;
        }

        ol {
          li {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: pre;
          }
        }

        p {
          margin: 0;
        }

        .switchers {
          display: flex;
          flex-direction: column;
          gap: 0.75rem;

          label {
            align-items: center;
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
            width: fit-content;

            >span {
              display: block;

              &:first-child {
                width: 12rem;
              }
            }
          }
        }

        .level-board {
          display: flex;
          flex-direction: column;
          flex-wrap: wrap;
          gap: 0.5rem;

          li {
            align-items: center;
            border-radius: 0.5rem;
            display: flex;
            gap: 0.75rem;
            justify-content: space-between;
            overflow: visible;
            padding: 0.5rem;
            white-space: nowrap;

            &.unlocked {
              background-color: var(--level-unlocked-background);
              color: var(--level-unlocked-foreground);
            }

            &.locked {
              background-color: var(--level-locked-background);
              color: var(--level-locked-foreground);
            }

            .level-info span:first-child {
              font-size: 1.5rem;
              margin-right: 0.5rem;
              vertical-align: middle;
            }

            button.level-action {
              align-items: center;
              align-self: stretch;
              border-radius: 0 0.5rem 0.5rem 0;
              display: flex;
              justify-content: center;
              margin: -0.5rem -0.5rem -0.5rem 0;
              min-width: 7rem;
              padding: 0 0.75rem;
              width: auto;

              &:disabled {
                background: none;
                color: var(--level-locked-foreground);
                opacity: 0.4;
                pointer-events: none;
              }
            }
          }
        }
      }
    }
  }
}

.or {
  overflow: hidden;
  text-align: center;
  text-transform: uppercase;

  &:before,
  &:after {
    content: "";
    border-bottom: 1px solid var(--general-text-dark);
    display: inline-block;
    height: 0;
    position: relative;
    vertical-align: middle;
    width: 50%;
  }

  &:before {
    right: 1rem;
    margin-left: -50%;
  }

  &:after {
    left: 1rem;
    margin-right: -50%;
  }
}

@keyframes revealComputer {
  from {
    transform: translateY(-100%) rotateX(90deg);
    opacity: 0;
  }

  to {
    transform: translateY(0) rotateX(0deg);
    opacity: 1;
  }
}

@keyframes revealHuman {
  from {
    transform: translateY(-100%) rotateX(90deg);
    opacity: 0;
  }

  to {
    transform: translateY(0) rotateX(0deg);
    opacity: 1;
  }
}