/* === BREATHING === */
@keyframes breathe {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% {
    transform: scale(calc(1 + var(--void-breathing) * 0.03));
    opacity: calc(1 - var(--void-breathing) * 0.15);
  }
}
.breathing { animation: breathe 4s ease-in-out infinite; }

/* === PROCESSING DOTS === */
@keyframes processingPulse {
  0%, 100% { opacity: 0.2; }
  50% { opacity: 0.6; }
}
.void-processing { animation: processingPulse 2s ease-in-out infinite; }

/* === NOISE OVERLAY === */
#void-overlay::before {
  content: '';
  position: absolute;
  inset: -50%;
  width: 200%;
  height: 200%;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
  opacity: min(var(--void-noise), 0.5);
  animation: noiseShift 0.5s steps(4) infinite;
  pointer-events: none;
  mix-blend-mode: overlay;
}
@keyframes noiseShift {
  0% { transform: translate(0, 0); }
  25% { transform: translate(-5%, -5%); }
  50% { transform: translate(5%, -10%); }
  75% { transform: translate(-10%, 5%); }
}

/* === SCAN LINES === */
#void-overlay::after {
  content: '';
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 2px,
    rgba(0, 0, 0, 0.15) 2px,
    rgba(0, 0, 0, 0.15) 4px
  );
  opacity: min(var(--void-scanlines), 0.4);
  pointer-events: none;
}

/* === CRT GLOW === */
.crt-active #void-container {
  text-shadow:
    0 0 calc(var(--void-crt) * 10px) rgba(139, 0, 0, calc(var(--void-crt) * 0.3)),
    0 0 calc(var(--void-crt) * 20px) rgba(139, 0, 0, calc(var(--void-crt) * 0.15));
}
.crt-active #void-overlay {
  box-shadow: inset 0 0 calc(var(--void-crt) * 150px) rgba(0, 0, 0, calc(var(--void-crt) * 0.5));
}

/* === GHOST DRIFT === */
@keyframes ghostDrift {
  0% { opacity: 0; transform: translateY(0) translateX(0); }
  15% { opacity: var(--ghost-max-opacity, 0.12); }
  85% { opacity: var(--ghost-max-opacity, 0.12); }
  100% { opacity: 0; transform: translateY(-30px) translateX(20px); }
}
.ghost-fragment.active { animation: ghostDrift 8s ease-in-out forwards; }

/* === FLINCH === */
.flinch-target { will-change: transform; }

/* === TRUTH REVEAL === */
@keyframes glitchReveal {
  0% { opacity: 0; transform: translateX(-2px); filter: blur(4px); }
  50% { opacity: 0.5; filter: blur(1px); }
  100% { opacity: 1; transform: translateX(0); filter: blur(0); }
}

/* === TYPEWRITER CURSOR === */
.typewriter-cursor::after {
  content: '|';
  animation: cursorBlink 1s step-end infinite;
  color: var(--void-accent);
  font-weight: 400;
}
@keyframes cursorBlink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

/* === DEPTH PULSE === */
@keyframes depthPulse {
  0%, 100% { opacity: 0.3; }
  50% { opacity: 0.6; }
}
#depth-indicator { animation: depthPulse 4s ease-in-out infinite; }

/* === DEVASTATING FLASH === */
@keyframes devastatingFlash {
  0% { background: transparent; }
  5% { background: rgba(139, 0, 0, 0.06); }
  100% { background: transparent; }
}
.devastating-flash { animation: devastatingFlash 2s ease-out; }

/* === TIMER GLITCH === */
@keyframes timerGlitch {
  0%, 90%, 100% { opacity: 1; transform: none; }
  92% { opacity: 0.5; transform: translateX(2px); }
  94% { opacity: 1; transform: translateX(-1px); }
  96% { opacity: 0.3; transform: translateX(1px) skewX(2deg); }
  98% { opacity: 1; transform: none; }
}
.timer-glitch { animation: timerGlitch 8s ease-in-out infinite; }

/* === ORIENT FADE === */
.orient-enter { animation: orientFade 2s ease-out; }
@keyframes orientFade { from { opacity: 0; } to { opacity: 1; } }

/* === QUESTION EMERGENCE: breathes into existence from the void === */
.void-question {
  animation: questionEmerge 1.5s ease-out;
}
@keyframes questionEmerge {
  0% { opacity: 0; transform: scale(0.98); filter: blur(3px); }
  50% { filter: blur(1px); }
  100% { opacity: 1; transform: scale(1); filter: blur(0); }
}

/* === FULLSCREEN IMMERSION === */
:fullscreen #void-canvas { opacity: 1 !important; }
:fullscreen #void-overlay { opacity: 0.7; }
:-webkit-full-screen #void-canvas { opacity: 1 !important; }
:-webkit-full-screen #void-overlay { opacity: 0.7; }

/* === VOID TRUTH ENTER === */
.void-truth-enter { animation: truthSlideIn 0.8s ease-out forwards; }
@keyframes truthSlideIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* === SCREEN INVERSION FLASH === */
@keyframes invertFlash {
  0%, 100% { filter: none; }
  3% { filter: invert(1) hue-rotate(180deg); }
  6% { filter: none; }
  8% { filter: invert(0.5) hue-rotate(90deg) saturate(3); }
  10% { filter: none; }
}
.invert-flash { animation: invertFlash 0.4s ease-out; }

/* === GHOST TYPING CURSOR === */
@keyframes ghostType {
  0%, 100% { opacity: 0; }
  20%, 80% { opacity: 0.3; }
}
.ghost-typing { animation: ghostType 3s ease-in-out; color: #333; }

/* === TRUTH MEMORY FLASH === */
@keyframes memoryFlash {
  0% { opacity: 0; transform: translateY(0) scale(1); filter: blur(0); }
  10% { opacity: 0.15; }
  30% { opacity: 0.15; transform: translateY(-5px) scale(1.01); }
  100% { opacity: 0; transform: translateY(-20px) scale(0.98); filter: blur(4px); }
}
.truth-memory {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  max-width: 600px;
  padding: 0 24px;
  font-family: var(--void-font);
  font-weight: 700;
  font-size: 16px;
  color: var(--void-accent);
  opacity: 0;
  pointer-events: none;
  z-index: 3;
  text-align: center;
  animation: memoryFlash 4s ease-out forwards;
}

/* === SCREEN TEAR === */
@keyframes screenTear {
  0% { clip-path: inset(0); }
  10% { clip-path: inset(40% 0 50% 0); transform: translateX(4px); }
  20% { clip-path: inset(0); transform: none; }
  30% { clip-path: inset(60% 0 30% 0); transform: translateX(-3px); }
  40% { clip-path: inset(0); transform: none; }
  100% { clip-path: inset(0); }
}
.screen-tear { animation: screenTear 0.3s steps(2) forwards; }

/* === VOID WHISPER TEXT === */
.void-whisper {
  position: fixed;
  bottom: 48px;
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--void-font);
  font-weight: 700;
  font-size: 12px;
  color: #1a1a1a;
  letter-spacing: 0.15em;
  opacity: 0;
  z-index: 5;
  pointer-events: none;
  transition: opacity 2s ease;
}
.void-whisper.visible { opacity: 1; }

/* === SECOND VOICE === */
.void-truth[style*="004466"] {
  animation: secondVoiceEnter 1s ease-out;
}
@keyframes secondVoiceEnter {
  0% { opacity: 0; transform: translateX(-20px); }
  100% { opacity: 1; transform: translateX(0); }
}

/* === REALITY FRACTURE TERMINAL === */
@keyframes terminalFlicker {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.7; }
}

/* === MOBILE KEYBOARD: hide overlapping fixed elements when typing === */
@media (max-height: 500px) and (max-width: 768px) {
  .void-whisper, #depth-indicator, #session-timer { display: none !important; }
}

/* === TEXTAREA SHRINK === */
#void-input {
  transition: max-height 2s ease, font-size 2s ease, letter-spacing 1s ease;
}

/* === BODY TILT + DIM === */
body {
  transition: transform 8s ease-in-out, filter 3s ease !important;
}

/* === HONESTY METER === */
@keyframes meterPulse {
  0%, 100% { opacity: 0.6; }
  50% { opacity: 1; }
}

/* === COPY PROTECTION HINT === */
.void-truth::selection { background: transparent !important; color: transparent !important; }
.void-truth.devastating::selection { background: #8b0000 !important; color: #8b0000 !important; }
