/* ======================================================
   Sayonara_Alice.exe — v72.08
   Memory Pulse Transition
   ------------------------------------------------------
   The current memory is covered before its final frame, so
   frame zero can never flash between clips. The pulse uses
   compositor-friendly opacity/transform animation only.
====================================================== */

/* JS constant CROSSFADE_MS = 820. This last-loaded layer is the
   authoritative transition duration for the pooled video slots. */
.v72-opening .v72-opening-video {
  transition: opacity .82s cubic-bezier(.32, 0, .18, 1) !important;
}

/* The portal pulse is purely decorative and never controls readiness. */
.v72-opening .v72-video-portal::before,
.v72-opening .v72-video-portal::after {
  content: "";
  position: absolute;
  pointer-events: none;
  opacity: 0;
}

/* Expanding memory wave. */
.v72-opening .v72-video-portal::before {
  z-index: 7;
  left: 50%;
  top: 50%;
  width: 18%;
  aspect-ratio: 1;
  border: 1px solid rgb(173 250 255 / .78);
  border-radius: 50%;
  box-shadow:
    0 0 10px rgb(119 239 255 / .38),
    0 0 30px rgb(42 126 255 / .23),
    inset 0 0 12px rgb(189 253 255 / .18);
  transform: translate(-50%, -50%) scale(.22);
  will-change: opacity, transform;
}

/* A restrained refraction sweep, kept inside the portrait. */
.v72-opening .v72-video-portal::after {
  z-index: 6;
  top: -8%;
  bottom: -8%;
  left: -42%;
  width: 34%;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgb(126 237 255 / .025) 20%,
    rgb(205 253 255 / .2) 48%,
    rgb(70 145 255 / .065) 70%,
    transparent 100%
  );
  transform: skewX(-11deg) translateX(-145%);
  will-change: opacity, transform;
}

.v72-opening.is-memory-pulsing .v72-video-portal::before {
  animation: v72MemoryPulseRing 1.02s cubic-bezier(.16, .72, .2, 1) both;
}

.v72-opening.is-memory-pulsing .v72-video-portal::after {
  animation: v72MemoryPulseSweep .92s cubic-bezier(.2, .7, .2, 1) both;
}

.v72-opening.is-memory-pulsing .v72-video-edge {
  animation: v72MemoryEdgePulse 1.02s ease-out both;
}

.v72-opening.is-memory-pulsing .v72-video-sheen {
  animation: v72MemorySheenBreath .92s ease-out both;
}

/* The large orbit answers the two portals with one subtle system pulse.
   It is already disabled by the historical mobile rules. */
.v72-opening.is-memory-pulsing .v72-memory-orbit {
  animation: v72MemoryOrbitPulse 1.08s ease-out both;
}

@keyframes v72MemoryPulseRing {
  0% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(.22);
  }
  14% { opacity: .72; }
  68% { opacity: .18; }
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(7.2);
  }
}

@keyframes v72MemoryPulseSweep {
  0% {
    opacity: 0;
    transform: skewX(-11deg) translateX(-145%);
  }
  18% { opacity: .62; }
  72% { opacity: .2; }
  100% {
    opacity: 0;
    transform: skewX(-11deg) translateX(465%);
  }
}

@keyframes v72MemoryEdgePulse {
  0%, 100% {
    opacity: 1;
    box-shadow:
      inset 0 0 0 1px rgb(167 248 255 / .06),
      inset 0 0 26px rgb(0 0 0 / .1),
      inset 0 -36px 46px rgb(0 0 0 / .15);
  }
  28% {
    opacity: 1;
    box-shadow:
      inset 0 0 0 1px rgb(205 253 255 / .42),
      inset 0 0 38px rgb(74 204 255 / .13),
      inset 0 -36px 46px rgb(0 0 0 / .12),
      0 0 20px rgb(89 228 255 / .23),
      0 0 48px rgb(47 105 255 / .16);
  }
}

@keyframes v72MemorySheenBreath {
  0%, 100% { opacity: .34; }
  28% { opacity: .8; }
}

@keyframes v72MemoryOrbitPulse {
  0% {
    opacity: .62;
    transform: translateY(-50%) scale(1);
  }
  32% {
    opacity: .92;
    transform: translateY(-50%) scale(1.025);
    box-shadow:
      0 0 92px rgb(45 138 255 / .11),
      inset 0 0 86px rgb(100 230 255 / .065);
  }
  100% {
    opacity: .62;
    transform: translateY(-50%) scale(1.055);
  }
}

@media (max-width: 780px) {
  .v72-opening .v72-video-portal::before {
    width: 21%;
  }

  .v72-opening .v72-video-portal::after {
    width: 42%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .v72-opening.is-memory-pulsing .v72-video-portal::before,
  .v72-opening.is-memory-pulsing .v72-video-portal::after,
  .v72-opening.is-memory-pulsing .v72-video-edge,
  .v72-opening.is-memory-pulsing .v72-video-sheen,
  .v72-opening.is-memory-pulsing .v72-memory-orbit {
    animation: none !important;
  }
}
