:root {
  --night: #0b1622;
  --navy: #102a43;
  --orange: #ff5b1f;
  --ink: #e6eef6;
  --dim: #8fa6bc;
  color-scheme: dark;
}
* { box-sizing: border-box; }
html, body {
  margin: 0;
  height: 100%;
  overflow: hidden;
  background: var(--night);
  color: var(--ink);
  font: 16px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}
#shoalcity-canvas {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  outline: none;
  touch-action: none;
  background: var(--night);
}
#boot, .fatal {
  position: fixed;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.25rem;
  padding: 24px;
  background: radial-gradient(120% 90% at 50% 0%, var(--navy) 0%, var(--night) 70%);
  transition: opacity .45s ease;
  z-index: 10;
}
#boot.done { opacity: 0; pointer-events: none; }
.card { text-align: center; width: min(420px, 100%); }
.mark {
  width: 72px;
  height: 72px;
  fill: none;
  stroke: var(--orange);
  stroke-width: 4.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.mark path:nth-child(1) { opacity: 1; }
.mark path:nth-child(2) { opacity: .62; }
.mark path:nth-child(3) { opacity: .3; }
h1 { margin: .35rem 0 .15rem; font-size: 2rem; letter-spacing: .02em; font-weight: 650; }
p { margin: .25rem 0; color: var(--dim); }
.bar {
  margin: 1.25rem 0 .5rem;
  height: 6px;
  border-radius: 3px;
  background: rgba(255, 255, 255, .09);
  overflow: hidden;
}
.bar i { display: block; height: 100%; width: 0%; background: var(--orange); transition: width .15s linear; }
.bar.indeterminate i { width: 35%; animation: slide 1.1s ease-in-out infinite; }
@keyframes slide { 0% { margin-left: -35%; } 100% { margin-left: 100%; } }
.meta { font-size: .8125rem; min-height: 1.2em; }
.hint { font-size: .8125rem; color: var(--dim); opacity: .8; text-align: center; }
.failed .bar { display: none; }
.failed h1 { color: var(--orange); }
.failed #boot-text { color: var(--ink); }
.failed .mark { opacity: .6; }
.fatal a, #boot a { color: var(--orange); }
@media (prefers-reduced-motion: reduce) {
  #boot { transition: none; }
  .bar.indeterminate i { animation: none; width: 100%; opacity: .5; }
}
