.scanlines {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9998;
  background: repeating-linear-gradient(
    0deg,
    rgba(255,255,255,0.015) 0px,
    rgba(255,255,255,0.015) 1px,
    transparent 1px,
    transparent 3px
  );
  mix-blend-mode: overlay;
}

.noise {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9997;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

.matrix-canvas {
  position: fixed;
  inset: 0;
  z-index: 9999;
  pointer-events: none;
  opacity: 0;
  background: #04060c;
  transition: opacity 0.5s ease;
}

.matrix-canvas.active {
  opacity: 0.94;
}

.boot-screen {
  position: fixed;
  inset: 0;
  background: #000;
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px;
  transition: opacity 0.6s ease, visibility 0.6s ease;
}

.boot-screen.hidden {
  opacity: 0;
  visibility: hidden;
}

.boot-text {
  font-family: var(--mono);
  color: var(--blue-bright);
  font-size: 13px;
  white-space: pre-wrap;
  max-width: 640px;
  text-shadow: 0 0 8px rgba(111,177,255,0.5);
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.35; }
}

@keyframes glitchTop {
  0% { clip-path: inset(0 0 80% 0); }
  50% { clip-path: inset(40% 0 40% 0); }
  100% { clip-path: inset(80% 0 0 0); }
}

@keyframes glitchBottom {
  0% { clip-path: inset(80% 0 0 0); }
  50% { clip-path: inset(40% 0 40% 0); }
  100% { clip-path: inset(0 0 80% 0); }
}

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

@keyframes scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
