/* ===========================================================
   Bravida — "System Offline"
   Holographic deep-space glass. A frosted panel suspended in a
   dark cosmos, lit by cyan/violet. The state is settled, not
   recovering: nothing here promises a return.
   =========================================================== */

:root {
  /* deep space */
  --void:    #05060f;
  --void-2:  #0a0d1e;
  --ink:     #eaf2ff;
  --ink-soft: #9fb0d4;
  --ink-faint: #5d6a8c;

  /* glass */
  --glass:      rgba(18, 24, 48, 0.42);
  --glass-2:    rgba(10, 14, 32, 0.55);
  --glass-edge: rgba(120, 170, 255, 0.22);
  --glass-solid: #0c1124;          /* @supports fallback */

  /* neon */
  --cyan:    #34e3ff;
  --violet:  #a98bff;
  --magenta: #ff5fd2;
  --glow-cyan:   rgba(52, 227, 255, 0.55);
  --glow-violet: rgba(169, 139, 255, 0.45);

  --rule:      rgba(140, 170, 230, 0.16);
  --rule-soft: rgba(140, 170, 230, 0.09);

  --display: "Space Grotesk", "Segoe UI", system-ui, -apple-system, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
}

* { box-sizing: border-box; }

html { min-height: 100%; }

body {
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0;
  overflow-x: hidden;
  overflow-y: auto;
  color: var(--ink);
  font-family: var(--display);
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(60, 90, 180, 0.10), transparent 62%),
    radial-gradient(90% 70% at 85% 110%, rgba(140, 120, 210, 0.08), transparent 58%),
    radial-gradient(80% 60% at 12% 95%, rgba(52, 227, 255, 0.06), transparent 58%),
    linear-gradient(180deg, var(--void) 0%, var(--void-2) 100%);
  background-attachment: fixed;
}

/* ------------------------------ cosmos ------------------------------ */

/* our star system — a faint deep layer of long-exposure star trails wheeling
   around the celestial pole, set behind the brighter near stars. Translated
   by JS for a gentle mouse-following parallax (this is the "far" layer).
   Pure CSS — no image, so it stays crisp at any resolution. */
.galaxy {
  position: fixed;
  inset: -50px;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  will-change: transform;
  animation: galaxy-breathe 18s ease-in-out infinite alternate;
}

/* the long-exposure star trails: thin concentric rings wheeling around a
   pole in the upper right */
.galaxy::after {
  content: "";
  position: absolute;
  inset: -60%;
  background:
    /* fine star trails — closely spaced arcs (distant rotation) */
    repeating-radial-gradient(circle at 82% 14%,
      transparent 0 5px,
      rgba(200, 224, 255, 0.04) 5px 5.4px,
      transparent 5.4px 11px),
    /* brighter, wider-set trails (nearer/brighter stars) */
    repeating-radial-gradient(circle at 82% 14%,
      transparent 0 23px,
      rgba(224, 238, 255, 0.07) 23px 23.8px,
      transparent 23.8px 64px);
  -webkit-mask: radial-gradient(120% 120% at 82% 14%, #000 6%, rgba(0,0,0,0.42) 40%, transparent 74%);
          mask: radial-gradient(120% 120% at 82% 14%, #000 6%, rgba(0,0,0,0.42) 40%, transparent 74%);
  opacity: 0.55;
}

@keyframes galaxy-breathe {
  0%   { opacity: 0.82; }
  100% { opacity: 1; }
}

/* drifting aurora mesh behind the glass */
.aurora {
  position: fixed;
  inset: -20%;
  z-index: 0;
  pointer-events: none;
  opacity: 0.32;
  background:
    radial-gradient(35% 45% at 25% 30%, rgba(52, 227, 255, 0.14), transparent 72%),
    radial-gradient(40% 50% at 78% 40%, rgba(169, 139, 255, 0.15), transparent 72%),
    radial-gradient(30% 40% at 55% 80%, rgba(255, 95, 210, 0.08), transparent 72%);
  filter: blur(24px);
  animation: drift 26s ease-in-out infinite alternate;
}

@keyframes drift {
  0%   { transform: translate3d(-3%, -2%, 0) scale(1.05); }
  100% { transform: translate3d(4%, 3%, 0) scale(1.12); }
}

/* starfield — the bright near stars; translated by JS to follow the pointer
   (this is the "near" parallax layer, so it moves more than the trails) */
.starfield {
  position: fixed;
  inset: -60px;
  z-index: 1;
  pointer-events: none;
  will-change: transform;
  background-image:
    /* bright marquee stars */
    radial-gradient(1.8px 1.8px at 40% 70%, rgba(214, 234, 255, 1), transparent),
    radial-gradient(1.8px 1.8px at 62% 88%, rgba(224, 214, 255, 1), transparent),
    radial-gradient(1.6px 1.6px at 78% 26%, rgba(255,255,255,1), transparent),
    radial-gradient(1.6px 1.6px at 16% 52%, rgba(255,255,255,0.95), transparent),
    radial-gradient(1.6px 1.6px at 8% 70%, rgba(255,255,255,0.95), transparent),
    radial-gradient(1.6px 1.6px at 90% 14%, rgba(214, 234, 255, 0.95), transparent),
    radial-gradient(1.6px 1.6px at 48% 22%, rgba(255,255,255,0.95), transparent),
    radial-gradient(1.6px 1.6px at 72% 60%, rgba(224, 214, 255, 0.9), transparent),
    /* crisp mid stars */
    radial-gradient(1.1px 1.1px at 20% 30%, rgba(255,255,255,1), transparent),
    radial-gradient(1.1px 1.1px at 70% 18%, rgba(255,255,255,0.9), transparent),
    radial-gradient(1.1px 1.1px at 88% 62%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 12% 85%, rgba(255,255,255,0.9), transparent),
    radial-gradient(1.1px 1.1px at 50% 12%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 32% 48%, rgba(255,255,255,0.95), transparent),
    radial-gradient(1.1px 1.1px at 92% 40%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 6% 22%, rgba(255,255,255,0.9), transparent),
    radial-gradient(1.1px 1.1px at 54% 58%, rgba(214, 234, 255, 0.9), transparent),
    radial-gradient(1.1px 1.1px at 84% 80%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 28% 92%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 46% 38%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 4% 46%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 38% 6%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 64% 34%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 80% 48%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 24% 18%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 96% 74%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 18% 6%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 60% 76%, rgba(255,255,255,0.85), transparent),
    radial-gradient(1.1px 1.1px at 34% 66%, rgba(255,255,255,0.8), transparent),
    radial-gradient(1.1px 1.1px at 86% 30%, rgba(255,255,255,0.8), transparent),
    /* faint dust of distant stars */
    radial-gradient(0.8px 0.8px at 36% 16%, rgba(255,255,255,0.7), transparent),
    radial-gradient(0.8px 0.8px at 66% 46%, rgba(255,255,255,0.65), transparent),
    radial-gradient(0.8px 0.8px at 22% 64%, rgba(255,255,255,0.65), transparent),
    radial-gradient(0.8px 0.8px at 74% 70%, rgba(255,255,255,0.65), transparent),
    radial-gradient(0.8px 0.8px at 58% 30%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 14% 38%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 44% 84%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 76% 92%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 10% 58%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 52% 48%, rgba(255,255,255,0.55), transparent),
    radial-gradient(0.8px 0.8px at 30% 78%, rgba(255,255,255,0.6), transparent),
    radial-gradient(0.8px 0.8px at 68% 8%, rgba(255,255,255,0.55), transparent),
    radial-gradient(0.8px 0.8px at 2% 88%, rgba(255,255,255,0.55), transparent),
    radial-gradient(0.8px 0.8px at 94% 56%, rgba(255,255,255,0.6), transparent);
  background-repeat: no-repeat;
  animation: twinkle 6.5s ease-in-out infinite alternate;
}

@keyframes twinkle {
  0%   { opacity: 0.78; }
  100% { opacity: 1; }
}

/* fine scanline sheen sweeping down the whole screen */
.scan {
  position: fixed;
  inset: 0;
  z-index: 6;
  pointer-events: none;
  mix-blend-mode: screen;
  opacity: 0.5;
  background:
    repeating-linear-gradient(
      180deg,
      transparent 0 2px,
      rgba(120, 170, 255, 0.035) 2px 3px
    ),
    linear-gradient(180deg, transparent 40%, rgba(52, 227, 255, 0.06) 50%, transparent 60%);
  background-size: 100% 100%, 100% 220%;
  animation: sweep 7s linear infinite;
}

@keyframes sweep {
  0%   { background-position: 0 0, 0 -120%; }
  100% { background-position: 0 0, 0 120%; }
}

/* ------------------------------- stage ------------------------------- */

.stage {
  position: relative;
  z-index: 2;
  min-height: 100vh;
  min-height: 100dvh;
  display: grid;
  place-items: center;
  padding: clamp(12px, 3vh, 48px) clamp(14px, 4vw, 56px);
}

/* ------------------------------- the glass card ------------------------------- */

.card {
  position: relative;
  width: min(100%, 720px);
  padding: clamp(26px, 4.4vh, 60px) clamp(28px, 6vw, 70px);
  border: 1px solid var(--glass-edge);
  border-radius: 20px;
  background: var(--glass);
  -webkit-backdrop-filter: blur(22px) saturate(150%);
  backdrop-filter: blur(22px) saturate(150%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.10),
    inset 0 0 60px rgba(52, 227, 255, 0.05),
    0 30px 90px -40px rgba(0, 0, 0, 0.9),
    0 0 70px -30px var(--glow-violet);
  overflow: hidden;
}

/* graceful fallback when backdrop-filter is unsupported: keep text legible */
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .card { background: var(--glass-solid); }
}

/* animated neon edge highlight running along the top */
.card::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 20px;
  padding: 1px;
  background: linear-gradient(120deg, transparent 20%, var(--cyan) 45%, var(--violet) 60%, transparent 80%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask-composite: exclude;
  opacity: 0.6;
  pointer-events: none;
}

/* a soft inner glow blob, parked top-right behind content */
.card-glow {
  position: absolute;
  top: -40%;
  right: -20%;
  width: 70%;
  height: 80%;
  background: radial-gradient(circle, var(--glow-cyan), transparent 65%);
  filter: blur(50px);
  opacity: 0.35;
  pointer-events: none;
}

/* ------------------------------- masthead ------------------------------- */

.masthead {
  position: relative;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 20px;
  margin-bottom: clamp(20px, 3.4vh, 44px);
}

.kicker {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 9px;
  margin: 8px 0 0;
  font-family: var(--mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.kicker-sep { color: var(--cyan); }

.current-url {
  overflow-wrap: anywhere;
}

.kicker-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--magenta);
  box-shadow: 0 0 10px var(--magenta);
  animation: pulse-dot 2.4s ease-in-out infinite;
}

@keyframes pulse-dot {
  0%, 100% { opacity: 0.4; transform: scale(0.85); }
  50%      { opacity: 1;   transform: scale(1); }
}

/* the holographic emblem — kept circular & double-ringed, reskinned */
.seal {
  position: relative;
  flex-shrink: 0;
  display: grid;
  justify-items: center;
  align-content: center;
  gap: 2px;
  width: 112px;
  height: 112px;
  border-radius: 50%;
  text-align: center;
  color: var(--cyan);
  background: radial-gradient(circle at 50% 35%, rgba(52, 227, 255, 0.12), transparent 70%);
  box-shadow:
    inset 0 0 0 1.5px rgba(52, 227, 255, 0.55),
    0 0 26px -6px var(--glow-cyan);
}

/* inner concentric ring (preserves the original double-ring identity) */
.seal::before {
  content: "";
  position: absolute;
  inset: 9px;
  border: 1px solid rgba(169, 139, 255, 0.5);
  border-radius: 50%;
}

/* a slow-rotating accent arc orbiting the emblem */
.seal-ring {
  position: absolute;
  inset: -6px;
  border-radius: 50%;
  border: 1.5px solid transparent;
  border-top-color: var(--violet);
  border-right-color: var(--cyan);
  opacity: 0.85;
  animation: orbit 6s linear infinite;
}

@keyframes orbit {
  to { transform: rotate(360deg); }
}

.seal-top,
.seal-bot {
  font-family: var(--mono);
  font-size: 0.5rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.seal-word {
  font-family: var(--display);
  font-weight: 600;
  font-size: 1.34rem;
  line-height: 1;
  letter-spacing: 0.02em;
  color: #fff;
  text-shadow: 0 0 14px var(--glow-cyan);
}

/* ------------------------------- headline ------------------------------- */

.title {
  position: relative;
  margin: 0 0 clamp(14px, 2vh, 22px);
  font-weight: 700;
  font-size: clamp(2.5rem, 6vw + 1vh, 4.6rem);
  line-height: 0.98;
  letter-spacing: -0.03em;
  text-wrap: balance;
  color: #fff;
}

.title em {
  font-style: normal;
  background: linear-gradient(100deg, var(--cyan), var(--violet) 60%, var(--magenta));
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  text-shadow: 0 0 40px var(--glow-violet);
}

.lede {
  max-width: 52ch;
  margin: 0;
  color: var(--ink-soft);
  font-size: clamp(1.02rem, 1.7vw, 1.16rem);
  line-height: 1.62;
}

/* ------------------------------- telemetry ------------------------------- */

.telemetry {
  margin-top: clamp(22px, 3.4vh, 44px);
  padding-top: clamp(16px, 2.2vh, 24px);
  border-top: 1px solid var(--rule);
}

.telemetry-head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin: 0 0 clamp(12px, 1.8vh, 18px);
  font-family: var(--mono);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink);
}

.telemetry-head span {
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  color: var(--ink-faint);
}

.grid {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: clamp(9px, 1.5vh, 14px);
}

.row {
  display: grid;
  grid-template-columns: minmax(8.5em, auto) 1fr minmax(5.5em, max-content);
  align-items: center;
  gap: clamp(10px, 2vw, 18px);
}

.label {
  font-family: var(--mono);
  font-size: 0.82rem;
  letter-spacing: 0.04em;
  color: var(--ink-soft);
}

/* diagnostic bar — a track with a glowing fill */
.bar {
  position: relative;
  height: 5px;
  border-radius: 4px;
  background: rgba(140, 170, 230, 0.10);
  overflow: hidden;
}

.bar-fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: 18%;
  border-radius: 4px;
  background: linear-gradient(90deg, var(--cyan), var(--violet));
  box-shadow: 0 0 12px -2px var(--glow-cyan);
  animation: flat-pulse 3.2s ease-in-out infinite;
}

@keyframes flat-pulse {
  0%, 100% { opacity: 0.55; }
  50%      { opacity: 1; }
}

/* status pill */
.pill {
  justify-self: end;
  padding: 3px 11px;
  border-radius: 999px;
  border: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 0.64rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  white-space: nowrap;
}

/* per-state accents — all "settled offline", none implying recovery */
.row[data-state="severed"] .bar-fill { width: 8%;  background: linear-gradient(90deg, var(--magenta), #ff8f6b); }
.row[data-state="severed"] .pill { color: #ff8aa6; border-color: rgba(255, 95, 130, 0.4); }

.row[data-state="dark"] .bar-fill { width: 4%; opacity: 0.4; background: rgba(140, 170, 230, 0.5); animation: none; }
.row[data-state="dark"] .pill { color: var(--ink-faint); }

.row[data-state="offline"] .bar-fill { width: 12%; }
.row[data-state="offline"] .pill { color: var(--cyan); border-color: rgba(52, 227, 255, 0.35); }

.row[data-state="standby"] .bar-fill { width: 64%; background: linear-gradient(90deg, var(--violet), var(--cyan)); }
.row[data-state="standby"] .pill { color: var(--violet); border-color: rgba(169, 139, 255, 0.4); }

/* ------------------------------- footer log ------------------------------- */

.card-foot {
  margin-top: clamp(20px, 3vh, 40px);
  padding-top: clamp(14px, 2vh, 22px);
  border-top: 1px solid var(--rule-soft);
}

.log-label {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 0 0 10px;
  font-family: var(--mono);
  font-size: 0.66rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

.log-cursor {
  width: 8px;
  height: 14px;
  background: var(--cyan);
  box-shadow: 0 0 10px var(--glow-cyan);
  animation: blink 1.1s steps(1) infinite;
}

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

.log-line {
  margin: 0;
  min-height: 1.6em;
  font-family: var(--mono);
  font-size: clamp(0.86rem, 1.5vw, 0.98rem);
  line-height: 1.5;
  color: var(--ink);
  transition: opacity 0.4s ease;
}

.log-line::before {
  content: "› ";
  color: var(--cyan);
}

.stamp {
  margin: 10px 0 0;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

/* =========================================================
   MOBILE & RESPONSIVE
   ========================================================= */

/* tablets and small laptops */
@media (max-width: 720px) {
  .card { padding: clamp(28px, 7vw, 48px); border-radius: 18px; }
  .lede { max-width: 100%; }
}

/* phones */
@media (max-width: 560px) {
  .stage { padding: 14px; }

  .card { padding: clamp(22px, 4vh, 32px) 22px; border-radius: 16px; }

  /* stack masthead: emblem above, kicker below — centered */
  .masthead {
    flex-direction: column-reverse;
    align-items: center;
    text-align: center;
    gap: clamp(10px, 2vh, 16px);
    margin-bottom: clamp(16px, 2.6vh, 24px);
  }

  .kicker { margin-top: 0; justify-content: center; font-size: 0.66rem; }

  .seal { width: 88px; height: 88px; }
  .seal::before { inset: 7px; }
  .seal-word { font-size: 1.08rem; }

  .title { font-size: clamp(2.3rem, 12vw, 3.1rem); }

  .lede { line-height: 1.55; }

  /* the scanline is the first effect to retire on small screens */
  .scan { display: none; }

  .row {
    grid-template-columns: 1fr auto;
    grid-template-areas:
      "label pill"
      "bar   bar";
    gap: 7px 12px;
  }
  .label { grid-area: label; }
  .pill  { grid-area: pill; }
  .bar   { grid-area: bar; }
}

/* very small phones */
@media (max-width: 380px) {
  .card { padding: 24px 18px; }
  .kicker { font-size: 0.6rem; letter-spacing: 0.14em; }
  .telemetry-head { letter-spacing: 0.16em; }
}

/* short viewports — shrink big vertical consumers so it still fits one screen */
@media (max-height: 720px) {
  .seal { width: 92px; height: 92px; }
  .seal-word { font-size: 1.12rem; }
  .title { font-size: clamp(2.2rem, 5vw + 1vh, 3.6rem); }
  .lede { line-height: 1.5; }
}

@media (max-height: 560px) {
  .aurora { display: none; }
  .seal { width: 76px; height: 76px; }
  .seal::before { inset: 6px; }
  .seal-word { font-size: 1rem; }
  .lede { font-size: 0.98rem; line-height: 1.45; }
  .telemetry { margin-top: 18px; padding-top: 14px; }
  .grid { gap: 8px; }
}

/* landscape phones — put the masthead back in a row to reclaim height */
@media (max-height: 480px) and (min-width: 480px) {
  .masthead { flex-direction: row; align-items: flex-start; text-align: left; }
  .kicker { justify-content: flex-start; }
  .grid { gap: 7px; }
}

/* respect the do-not-animate preference */
@media (prefers-reduced-motion: reduce) {
  .galaxy,
  .aurora,
  .starfield,
  .scan,
  .kicker-dot,
  .seal-ring,
  .bar-fill,
  .log-cursor,
  .card::before {
    animation: none !important;
  }
  .log-line { transition: none; }
  .seal-ring { opacity: 0.5; }
}
