/* GSAP owns motion. CSS supplies stable, non-interactive overlay geometry. */
.page-curtain {
  position: fixed;
  inset: 0;
  z-index: 10000;
  pointer-events: none;
  overflow: hidden;
}
.page-curtain-pane {
  position: absolute;
  inset: 0 auto 0 0;
  width: 51%;
  background: var(--ink, #0b1017);
  transform: scaleY(0);
  transform-origin: 0 100%;
}
.page-curtain-pane:nth-child(2) {
  left: 49%;
  transform-origin: 0 0;
}
.page-curtain-label {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 22px;
  color: var(--paper, #f1f3f6);
  font: italic clamp(30px, 6vw, 80px)/1.1 Georgia, serif;
  letter-spacing: -.05em;
  opacity: 0;
}
.is-page-leaving .page-curtain,
.is-transition-arrival .page-curtain { pointer-events: auto; }
.is-transition-arrival .page-curtain-pane { transform: scaleY(1); }
.is-transition-arrival .page-curtain-label { opacity: 1; }
.dialog-media-flight {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 10;
  overflow: hidden;
  pointer-events: none;
  background: #03070d;
  transform-origin: 0 0;
}
.dialog-media-flight img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.project-dialog.has-media-flight { transform: none; }
@media (prefers-reduced-motion: reduce) {
  .page-curtain { display: none; }
}
.user-motion-paused .page-curtain { display: none; }
