/* ===================================================================
   BOOT INTRO — a bare black screen. A single green dot blinks alone
   for 3s, then the title and the first 8 lines of Genuine Undead's
   real, original verified contract source (0x209e639a...dB30221) type
   themselves out slowly, stopping on the contract declaration line.
   Its trailing "{" blinks alone for 3s, then the whole thing fades
   and the real site — already sitting underneath the whole time — is
   revealed. No window frame, no buttons, no prompt: bare text only,
   fully automatic.

   Deliberately its own file, enhanced entirely from JS (see
   boot-intro.js) on top of a static, empty #boot-overlay div already
   in index.html: if that script ever fails to load for any reason,
   the plain inline safety-net script in index.html hides the overlay
   after a few seconds, so the site can never be stuck behind it.
=================================================================== */
#boot-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: #000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  text-align: center;
  cursor: pointer;
  transition: opacity 0.6s ease;
}

#boot-overlay.closing {
  opacity: 0;
  pointer-events: none;
}

.boot-dot-solo {
  width: 16px;
  height: 16px;
  background: #39ff8f;
  box-shadow: 0 0 10px rgba(57, 255, 143, 0.8), 0 0 26px rgba(57, 255, 143, 0.4);
  animation: boot-blink 0.9s steps(1) infinite;
}

@keyframes boot-blink {
  50% { opacity: 0; }
}

.boot-content {
  display: none;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  font-family: 'Courier New', monospace;
}

.boot-title {
  color: #39ff8f;
  font-size: 16px;
  font-weight: bold;
  letter-spacing: 0.3em;
  text-shadow: 0 0 8px rgba(57, 255, 143, 0.6);
  white-space: nowrap;
}

.boot-code {
  color: #39ff8f;
  font-size: 13px;
  line-height: 1.8;
  text-align: left;
  /* pre-wrap (not pre) is the actual fix here: "pre" never wraps, so
     the box just grows as wide as the longest line demands — on a
     narrow phone that's wider than the viewport itself, and since
     there was no width constraint either, it silently overflowed off
     both edges instead of ever being clipped or shrunk. pre-wrap
     keeps the original line breaks (still one typed line at a time)
     but allows any individual line to wrap if it's too long for
     whatever width is actually available, and the max-width+
     overflow-wrap below guarantee it never exceeds the viewport on
     any device, regardless of font-size. */
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  max-width: min(600px, 90vw);
}

.boot-brace.blink {
  animation: boot-blink 0.6s steps(1) infinite;
}

/* Ghost-frame video (see showGhostFrame() in boot-intro.js) - a
   brief, near-black flash right at the end of the sequence, roughly
   the same width the cube itself will appear at on the next screen.
   Deliberately faint (low opacity, like a subliminal/ghost image, not
   a real video moment) and layered on top of everything else in the
   overlay. */
.boot-ghost {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: min(60vw, 480px);
  height: auto;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.35s ease;
}

.boot-ghost.visible {
  opacity: 0.16;
}

@media (pointer: coarse) {
  .boot-ghost {
    width: min(80vw, 380px);
  }
}

@media (pointer: coarse) {
  .boot-title {
    font-size: 12px;
    letter-spacing: 0.2em;
  }

  .boot-code {
    font-size: 11px;
    line-height: 1.7;
    max-width: 88vw;
  }
}
