/* Fortifi — coming soon screen.
   Fortifi slate with a pale light rising from below; sized to be read across a room. */

/* Fill the screen exactly, with a fallback for browsers predating dvh. */
.stage {
  min-height: 100vh;
  min-height: 100dvh;
}

/* The ground. Two stacked radials: the glow from beneath, over a slate that
   deepens towards the top. Fixed so it never bands as the box resizes. */
body {
  background-color: #11151F;
  background-image:
    radial-gradient(80% 55% at 50% 106%,
      rgba(228, 230, 240, 0.55) 0%,
      rgba(150, 160, 190, 0.38) 24%,
      rgba(70, 82, 110, 0.30) 46%,
      rgba(17, 21, 31, 0) 72%),
    radial-gradient(120% 95% at 50% -10%,
      #3A4359 0%,
      #232A3A 48%,
      #11151F 100%);
  background-attachment: fixed;
}

:focus-visible {
  outline: 2px solid #E4E6EA;
  outline-offset: 4px;
  border-radius: 2px;
}

/* ── Live signal ─────────────────────────────────────────
   The one thing on screen that says this is running, not parked. */
.pulse-dot {
  display: inline-block;
  width: 0.5em;
  height: 0.5em;
  border-radius: 50%;
  background: #E4E6EA;
  animation: pulse 2.4s ease-out infinite;
}

@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(228, 230, 234, 0.55); }
  70%  { box-shadow: 0 0 0 0.75em rgba(228, 230, 234, 0); }
  100% { box-shadow: 0 0 0 0 rgba(228, 230, 234, 0); }
}

/* ── Reduced motion ──────────────────────────────────────
   Nothing pulses. */
@media (prefers-reduced-motion: reduce) {
  .pulse-dot {
    animation: none;
  }

  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
