/* intro.css -- the envelope slide is a full-screen cover the guest taps open.
   The stage is always one screen tall: wider than a phone (sides crop, the
   envelope is symmetric) and a centred column on desktop. The opening and the
   dissolve are js/motion/envelope.js + css/motion/envelope.css; with motion,
   .is-open only removes an already-invisible overlay -- reduced motion fades here. */
.intro {
  --intro-clear: 0.45s; /* js/intro.js REMOVE_FALLBACK_MS must outlast this */
  position: fixed;
  inset: 0;
  z-index: 100;
  overflow: hidden;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent; /* the whole screen is the button */
  transition: opacity var(--intro-clear) cubic-bezier(0.22, 0.61, 0.36, 1), visibility 0s linear var(--intro-clear);
}
/* Backdrop on its own layer so the envelope can dissolve it (opacity only)
   while the flaps are still on screen. */
.intro::before {
  content: "";
  position: absolute;
  inset: 0;
  background: #ece2cf;
  transition: opacity 0.75s cubic-bezier(0.45, 0.05, 0.55, 0.95); /* = envelope.js DISSOLVE */
}
.intro.is-dissolving::before { opacity: 0; }
.intro .stage {
  position: absolute;
  left: 50%;
  top: 50%;
  width: calc(100svh * 1080 / 1920);
  transform: translate(-50%, -50%);
}
.intro.is-opening { cursor: default; }
.intro.is-clearing { pointer-events: none; }
.intro.is-open { opacity: 0; visibility: hidden; pointer-events: none; }
