:root {
  color-scheme: dark;
  font-family: ui-monospace, "Cascadia Mono", "SFMono-Regular", Menlo, monospace;
  background: #10201b;
  color: #f5efd7;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  min-height: 100vh;
  background:
    radial-gradient(circle at 80% 10%, #30654e 0, transparent 32rem),
    linear-gradient(160deg, #142a23, #09110f 72%);
}

main {
  width: min(1040px, calc(100% - 2rem));
  margin: 0 auto;
  padding: 2rem 0 3rem;
}

header { max-width: 760px; }
.eyebrow { color: #f1be58; text-transform: uppercase; letter-spacing: .12em; }
h1 { margin: .2rem 0; font: 700 clamp(2rem, 7vw, 4.8rem)/1 system-ui, sans-serif; }
p { line-height: 1.55; }
code { color: #ffd477; }

.controls {
  display: flex;
  flex-wrap: wrap;
  gap: .7rem;
  align-items: end;
  margin: 1.5rem 0 1rem;
}

.file-picker {
  display: grid;
  gap: .35rem;
  min-width: min(100%, 23rem);
}

input, button {
  min-height: 2.8rem;
  border: 1px solid #7da58f;
  border-radius: .35rem;
  padding: .6rem .85rem;
  background: #172e27;
  color: inherit;
  font: inherit;
}

button:not(:disabled) { cursor: pointer; }
button:not(:disabled):hover { background: #275541; }
button:disabled { opacity: .45; }
.status { min-height: 1.6rem; color: #f1be58; }
.status.error { color: #ff8d7e; }

.audio-gate {
  display: flex;
  align-items: center;
  gap: .8rem;
  min-height: 3.2rem;
  margin: -.4rem 0 .8rem;
}

#audio-state { color: #c9d8d0; }
#audio-state[data-state="locked"] { color: #ffd477; }
#audio-state[data-state="running"] { color: #8ed9b6; }
#audio-state[data-state="failed"] { color: #ff8d7e; }

.screen {
  display: grid;
  place-items: center;
  min-height: 24rem;
  overflow: hidden;
  border: 2px solid #466c5b;
  border-radius: .5rem;
  background: #000;
  box-shadow: 0 1.5rem 5rem #0008;
}

canvas {
  display: block;
  width: min(100%, 640px);
  aspect-ratio: 4 / 3;
  image-rendering: pixelated;
  outline: none;
}

details { margin-top: 1.5rem; }
li { margin: .5rem 0; }
a { color: #8ed9b6; }
