/* ==========================================================================
   overlays.css — CRT scanlines, vignette, noise, frame-border, HUD brackets
   Mobile-first. Base = 320px.
   ========================================================================== */

/* ---------- CRT scanlines overlay ---------- */
.crt-overlay {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9999;
  opacity: 0.5; /* Reduced on mobile (base) */
}

.crt-overlay canvas {
  width: 100%;
  height: 100%;
}

/* CRT flicker on section change */
.crt-overlay.flicker {
  animation: crt-flicker 0.15s ease-out;
}

@keyframes crt-flicker {
  0%  { opacity: 0.3; }
  25% { opacity: 0.5; }
  50% { opacity: 0.35; }
  75% { opacity: 0.5; }
  100% { opacity: 0.5; }
}

/* ---------- CRT sweep line ---------- */
.crt-scanline {
  position: fixed;
  left: -50vw;
  width: 200vw;
  height: 4px;
  pointer-events: none;
  z-index: 9999;
  background: linear-gradient(
    to bottom,
    transparent 0%,
    rgba(255, 255, 255, 0.03) 20%,
    rgba(255, 255, 255, 0.08) 50%,
    rgba(255, 255, 255, 0.03) 80%,
    transparent 100%
  );
  opacity: 0;
  top: -4px;
}

/* ---------- Vignette overlay ---------- */
.vignette {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: -2;
  background: radial-gradient(
    ellipse at center,
    transparent 0%,
    transparent 30%,
    rgba(0, 0, 0, 0.4) 65%,
    rgba(0, 0, 0, 0.75) 100%
  );
}

/* ---------- Noise texture overlay ---------- */
.noise {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: var(--z-noise, 9990);
  opacity: 0.03;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
}

/* ---------- Frame border ----------
   Shown on all screens via palette.js. Thinner on mobile. */
.frame-border {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9992;
  border: 4px solid transparent;
  opacity: 0;
  transition: opacity 0.15s ease, border-color 0.15s ease;
}

.frame-border.active {
  opacity: 1;
}

.frame-border[data-scheme="articles"] {
  border-color: var(--cosmic-purple);
  box-shadow: inset 0 0 80px rgba(168, 85, 247, 0.2);
}

.frame-border[data-scheme="about"] {
  border-color: var(--aurora-teal);
  box-shadow: inset 0 0 80px rgba(20, 184, 166, 0.2);
}

.frame-border[data-scheme="contact"] {
  border-color: var(--deep-ember);
  box-shadow: inset 0 0 80px rgba(239, 68, 68, 0.2);
}

/* Article-specific color schemes */
.frame-border[data-scheme="article-discovery"] {
  border-color: #f97316;
  box-shadow: inset 0 0 80px rgba(249, 115, 22, 0.2);
}

.frame-border[data-scheme="article-mvp"] {
  border-color: #06b6d4;
  box-shadow: inset 0 0 80px rgba(6, 182, 212, 0.2);
}

.frame-border[data-scheme="article-maintenance"] {
  border-color: #22c55e;
  box-shadow: inset 0 0 80px rgba(34, 197, 94, 0.2);
}

.frame-border[data-scheme="article-tokens"] {
  border-color: #a855f7;
  box-shadow: inset 0 0 80px rgba(168, 85, 247, 0.2);
}

.frame-border[data-scheme="article-taste"] {
  border-color: #ec4899;
  box-shadow: inset 0 0 80px rgba(236, 72, 153, 0.2);
}

/* ---------- HUD corner brackets ----------
   Smaller on mobile, larger on md+. */
.hud-brackets {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9993;
}

.hud-bracket {
  position: absolute;
  width: 16px;
  height: 16px;
  border-color: var(--accent);
  border-style: solid;
  border-width: 0;
  border-radius: 2px;
  opacity: 0.2;
  transition: opacity 0.15s ease, border-color 0.15s ease;
}

.hud-brackets.hud-active .hud-bracket {
  opacity: 0.85;
}

.hud-bracket--tl {
  top: 8px;
  left: 8px;
  border-top-width: 2px;
  border-left-width: 2px;
}

.hud-bracket--tr {
  top: 8px;
  right: 8px;
  border-top-width: 2px;
  border-right-width: 2px;
}

.hud-bracket--bl {
  bottom: 8px;
  left: 8px;
  border-bottom-width: 2px;
  border-left-width: 2px;
}

.hud-bracket--br {
  bottom: 8px;
  right: 8px;
  border-bottom-width: 2px;
  border-right-width: 2px;
}

/* ---------- HUD flash (star kill feedback) ---------- */
.hud-brackets.hud-flash .hud-bracket {
  border-color: #ffffff;
  opacity: 1;
  transition: none;
}

/* ---------- Responsive: tablet (md+) ---------- */
@media (min-width: 768px) {
  .crt-overlay {
    opacity: 1; /* Full intensity on tablet+ */
  }

  @keyframes crt-flicker {
    0%  { opacity: 0.6; }
    25% { opacity: 1; }
    50% { opacity: 0.7; }
    75% { opacity: 1; }
    100% { opacity: 1; }
  }

  .frame-border {
    border-width: 6px;
  }

  /* Larger HUD brackets on tablet+ */
  .hud-bracket {
    width: 28px;
    height: 28px;
    border-radius: 3px;
  }

  .hud-bracket--tl {
    top: 18px;
    left: 18px;
    border-top-width: 3px;
    border-left-width: 3px;
  }

  .hud-bracket--tr {
    top: 18px;
    right: 18px;
    border-top-width: 3px;
    border-right-width: 3px;
  }

  .hud-bracket--bl {
    bottom: 72px;
    left: 18px;
    border-bottom-width: 3px;
    border-left-width: 3px;
  }

  .hud-bracket--br {
    bottom: 72px;
    right: 18px;
    border-bottom-width: 3px;
    border-right-width: 3px;
  }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .crt-overlay.flicker {
    animation: none;
  }

  .crt-scanline {
    display: none;
  }
}
