/* ─── Scoped tokens (spy-terminal identity) ────────────────────────
 * Operation SHADOWBOX has its own neon-on-black visual identity.
 * Chrome (page bg, pure white/black) routes to brand tokens; every
 * panel-status / classification accent is declared once here so the
 * audit sees zero bare literals.
 */
:root {
  --shadow-spy-green: #00ff00;
  --shadow-spy-yellow: #ffff00;
  --shadow-spy-magenta: #ff00ff;
  --shadow-spy-red: #ff4444;
  --shadow-spy-cyan: #44ffff;
  --shadow-spy-mint: #88ff88;
  --shadow-spy-alert: #ff0000;
  --shadow-spy-alert-bright: #ff3333;
  --shadow-spy-alert-deep: #cc0000;
  --shadow-spy-green-bg: #004400;
  --shadow-spy-yellow-bg: #444400;
  --shadow-spy-magenta-bg: #400040;
  --shadow-spy-red-bg: #440000;
  --shadow-spy-cyan-bg: #004444;
  --shadow-spy-mint-bg: #002200;
  --shadow-spy-grid-inner: #001100;
  --shadow-spy-panel-bg: rgba(0, 20, 0, 0.8);
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: 'Source Code Pro', 'Courier New', monospace;
  /* Brand-routed: cosmetically identical to #000 today, but reads from
   * the same surface-0 token as the rest of the site so any future
   * brand-dark adjustment lands here too. The neon-green text color is
   * the page's spy-terminal identity (analogous to clock's iOS-amber
   * accent) and stays scoped via --shadow-spy-green. */
  background: var(--surface-0);
  color: var(--shadow-spy-green);
  overflow: hidden;
  height: 100vh;
  position: relative;
}

.page-title {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Classification Banners */
.classification-banner {
  position: fixed;
  left: 0;
  right: 0;
  height: 30px;
  background: linear-gradient(
    90deg,
    var(--shadow-spy-alert),
    var(--shadow-spy-alert-bright),
    var(--shadow-spy-alert)
  );
  color: var(--pure-white);
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 20px;
  font-weight: bold;
  font-size: 12px;
  z-index: 1000;
  animation: pulse-red 2s ease-in-out infinite alternate;
}

.classification-banner.top {
  top: 0;
}

.classification-banner.bottom {
  bottom: 0;
}

@keyframes pulse-red {
  from {
    background: linear-gradient(
      90deg,
      var(--shadow-spy-alert),
      var(--shadow-spy-alert-bright),
      var(--shadow-spy-alert)
    );
  }
  to {
    background: linear-gradient(
      90deg,
      var(--shadow-spy-alert-deep),
      var(--shadow-spy-alert),
      var(--shadow-spy-alert-deep)
    );
  }
}

/* Dashboard Grid */
.dashboard-grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 10px;
  padding: 40px 10px 40px 10px;
  height: 100vh;
  background: radial-gradient(
    circle at center,
    var(--shadow-spy-grid-inner) 0%,
    var(--pure-black) 70%
  );
}

/* Panel Styles */
.panel {
  background: var(--shadow-spy-panel-bg);
  border: 2px solid var(--shadow-spy-green);
  border-radius: 8px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  position: relative;
  box-shadow: 0 0 20px color-mix(in srgb, var(--shadow-spy-green) 30%, transparent),
    inset 0 0 20px color-mix(in srgb, var(--shadow-spy-green) 10%, transparent);
  animation: panel-glow 3s ease-in-out infinite alternate;
}

@keyframes panel-glow {
  from {
    box-shadow: 0 0 20px color-mix(in srgb, var(--shadow-spy-green) 30%, transparent),
      inset 0 0 20px color-mix(in srgb, var(--shadow-spy-green) 10%, transparent);
  }
  to {
    box-shadow: 0 0 30px color-mix(in srgb, var(--shadow-spy-green) 50%, transparent),
      inset 0 0 30px color-mix(in srgb, var(--shadow-spy-green) 20%, transparent);
  }
}

.panel-header {
  background: color-mix(in srgb, var(--shadow-spy-green) 10%, transparent);
  padding: 8px 12px;
  border-bottom: 1px solid var(--shadow-spy-green);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  font-weight: bold;
}

.panel-title {
  color: var(--shadow-spy-green);
  text-shadow: 0 0 5px var(--shadow-spy-green);
}

.panel-status {
  padding: 2px 8px;
  border-radius: 3px;
  font-size: 10px;
  font-weight: bold;
  text-transform: uppercase;
}

.panel-status.online {
  background: var(--shadow-spy-green-bg);
  color: var(--shadow-spy-green);
  animation: blink-green 1s infinite;
}
.panel-status.scanning {
  background: var(--shadow-spy-yellow-bg);
  color: var(--shadow-spy-yellow);
  animation: blink-yellow 1.5s infinite;
}
.panel-status.decrypting {
  background: var(--shadow-spy-magenta-bg);
  color: var(--shadow-spy-magenta);
  animation: blink-purple 2s infinite;
}
.panel-status.active {
  background: var(--shadow-spy-red-bg);
  color: var(--shadow-spy-red);
  animation: blink-red 1.2s infinite;
}
.panel-status.monitoring {
  background: var(--shadow-spy-cyan-bg);
  color: var(--shadow-spy-cyan);
  animation: blink-cyan 1.8s infinite;
}
.panel-status.operational {
  background: var(--shadow-spy-mint-bg);
  color: var(--shadow-spy-mint);
}

@keyframes blink-green {
  0%,
  50% {
    opacity: 1;
  }
  51%,
  100% {
    opacity: 0.3;
  }
}
@keyframes blink-yellow {
  0%,
  50% {
    opacity: 1;
  }
  51%,
  100% {
    opacity: 0.3;
  }
}
@keyframes blink-purple {
  0%,
  50% {
    opacity: 1;
  }
  51%,
  100% {
    opacity: 0.3;
  }
}
@keyframes blink-red {
  0%,
  50% {
    opacity: 1;
  }
  51%,
  100% {
    opacity: 0.3;
  }
}
@keyframes blink-cyan {
  0%,
  50% {
    opacity: 1;
  }
  51%,
  100% {
    opacity: 0.3;
  }
}

.panel-content {
  flex: 1;
  padding: 10px;
  overflow: hidden;
  position: relative;
}

/* Data Stream Styles */
.data-stream {
  height: 100%;
  overflow: hidden;
  font-size: 12px;
  line-height: 1.2;
  position: relative;
  /* Feed lines are joined with \n in shadowbox.js; without pre-wrap they
   * collapse into one paragraph and wrap character-by-character on phones. */
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.data-stream::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 20px;
  background: linear-gradient(to bottom, var(--shadow-spy-panel-bg), transparent);
  z-index: 10;
}

.data-stream::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 20px;
  background: linear-gradient(to top, var(--shadow-spy-panel-bg), transparent);
  z-index: 10;
}

/* Specialized Panel Colors */
.satellite-panel .data-stream {
  color: var(--shadow-spy-green);
}
.network-panel .data-stream {
  color: var(--shadow-spy-yellow);
}
.crypto-panel .data-stream {
  color: var(--shadow-spy-magenta);
}
.tracking-panel .data-stream {
  color: var(--shadow-spy-red);
}
.sigint-panel .data-stream {
  color: var(--shadow-spy-cyan);
}
.mission-panel .data-stream {
  color: var(--shadow-spy-mint);
}

/* Mission Progress Bar */
.mission-progress {
  margin-top: 10px;
  padding: 10px;
  background: color-mix(in srgb, var(--pure-black) 50%, transparent);
  border-radius: 4px;
}

.progress-bar {
  width: 100%;
  height: 20px;
  background: color-mix(in srgb, var(--pure-black) 70%, transparent);
  border: 1px solid var(--shadow-spy-green);
  border-radius: 10px;
  overflow: hidden;
  position: relative;
}

.progress-fill {
  height: 100%;
  background: linear-gradient(
    90deg,
    var(--shadow-spy-green-bg),
    var(--shadow-spy-green),
    var(--shadow-spy-green-bg)
  );
  width: 0%;
  transition: width 0.5s ease;
  animation: progress-glow 2s ease-in-out infinite alternate;
}

@keyframes progress-glow {
  from {
    box-shadow: 0 0 10px color-mix(in srgb, var(--shadow-spy-green) 50%, transparent);
  }
  to {
    box-shadow: 0 0 20px color-mix(in srgb, var(--shadow-spy-green) 80%, transparent);
  }
}

.progress-text {
  text-align: center;
  display: block;
  margin-top: 8px;
  font-size: 12px;
  color: var(--shadow-spy-mint);
}

/* Exit Controls */
.exit-controls {
  position: fixed;
  top: 50px;
  right: 20px;
  z-index: 1000;
  display: flex;
  gap: 10px;
}

.abort-btn,
.stealth-btn {
  padding: 10px 15px;
  font-family: inherit;
  font-size: 11px;
  font-weight: bold;
  text-transform: uppercase;
  border: 2px solid;
  border-radius: 4px;
  background: color-mix(in srgb, var(--pure-black) 80%, transparent);
  cursor: pointer;
  transition: all 0.3s ease;
}

.abort-btn {
  color: var(--shadow-spy-red);
  border-color: var(--shadow-spy-red);
}

.abort-btn:hover {
  background: color-mix(in srgb, var(--shadow-spy-red) 10%, transparent);
  box-shadow: 0 0 15px color-mix(in srgb, var(--shadow-spy-red) 50%, transparent);
}

.stealth-btn {
  color: var(--shadow-spy-cyan);
  border-color: var(--shadow-spy-cyan);
}

.stealth-btn:hover {
  background: color-mix(in srgb, var(--shadow-spy-cyan) 10%, transparent);
  box-shadow: 0 0 15px color-mix(in srgb, var(--shadow-spy-cyan) 50%, transparent);
}

/* Typing animation for data streams */
.typing-line {
  overflow: hidden;
  white-space: nowrap;
  animation: typing 2s steps(40, end), cursor-blink 1s step-end infinite;
}

@keyframes typing {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}

@keyframes cursor-blink {
  0%,
  50% {
    border-right: 2px solid;
  }
  51%,
  100% {
    border-right: 2px solid transparent;
  }
}

/* Scroll animation */
@keyframes scroll-up {
  0% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-100%);
  }
}

.scrolling-data {
  animation: scroll-up 20s linear infinite;
}

/* Glitch effect */
@keyframes glitch {
  0%,
  98% {
    transform: translateX(0);
  }
  99% {
    transform: translateX(-2px);
  }
  100% {
    transform: translateX(2px);
  }
}

.glitch {
  animation: glitch 0.3s infinite;
}

/* Stealth mode (hidden) */
.stealth-mode {
  opacity: 0;
  transition: opacity 0.5s ease;
}

/* Phones need a readable, scrollable dashboard rather than a desktop grid
 * compressed into three narrow columns. */
@media (max-width: 640px) {
  body {
    height: auto;
    min-height: 100dvh;
    overflow-x: hidden;
    overflow-y: auto;
  }

  .classification-banner {
    justify-content: center;
    padding: 0 12px;
    font-size: 14px;
  }

  .classification-banner .operation-name,
  .classification-banner .timestamp,
  .classification-banner .clearance-level,
  .classification-banner .agency {
    display: none;
  }

  .dashboard-grid {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: none;
    height: auto;
    min-height: 100dvh;
    gap: 12px;
    padding: 42px 8px 112px;
  }

  .panel {
    min-height: 220px;
  }

  .panel-header,
  .data-stream,
  .progress-text {
    font-size: 14px;
    line-height: 1.4;
  }

  .panel-status {
    font-size: 12px;
  }

  .exit-controls {
    top: auto;
    right: 8px;
    bottom: 38px;
    left: 8px;
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px;
  }

  .abort-btn,
  .stealth-btn {
    padding: 9px 10px;
    font-size: 14px;
  }
}
