/* 退出・进入共通 */
.scene-transition-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: rgba(255, 255, 255, 0.92);
  pointer-events: none;
  opacity: 0;
  transition: opacity 2s cubic-bezier(0.4, 0, 0.2, 1);
}

.scene-transition-overlay.is-visible {
  opacity: 1;
}

.scene-transition-overlay.is-hiding {
  opacity: 0;
}

/* 初回描画前のフラッシュ防止（进入待ち） */
html.scene-transition-pending::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 9998;
  background: rgba(255, 255, 255, 0.92);
  pointer-events: none;
}

html.scene-transition-pending .scene-bg-layer,
html.scene-transition-pending .scene-bg-layer2,
html.scene-transition-pending .scene-game-layer {
  filter: blur(12px);
}

/* 退出・进入：背景とゲーム内容の両方をぼかす */
body.scene-transition-exiting .scene-bg-layer,
body.scene-transition-exiting .scene-bg-layer2,
body.scene-transition-exiting .scene-game-layer {
  filter: blur(12px);
  transition: filter 2s cubic-bezier(0.4, 0, 0.2, 1);
}

body.scene-transition-enter-start .scene-bg-layer,
body.scene-transition-enter-start .scene-bg-layer2,
body.scene-transition-enter-start .scene-game-layer {
  filter: blur(12px);
}

body.scene-transition-revealing .scene-bg-layer,
body.scene-transition-revealing .scene-bg-layer2,
body.scene-transition-revealing .scene-game-layer {
  filter: blur(0);
  transition: filter 2s cubic-bezier(0.4, 0, 0.2, 1);
}

@media (prefers-reduced-motion: reduce) {
  .scene-transition-overlay,
  body.scene-transition-exiting .scene-bg-layer,
  body.scene-transition-exiting .scene-bg-layer2,
  body.scene-transition-exiting .scene-game-layer,
  body.scene-transition-revealing .scene-bg-layer,
  body.scene-transition-revealing .scene-bg-layer2,
  body.scene-transition-revealing .scene-game-layer {
    transition-duration: 0.4s;
  }
}
