* { margin: 0; padding: 0; box-sizing: border-box; }

html, body {
  width: 100%;
  height: 100%;
  background: #000;
  overflow: hidden;
  cursor: none;
}

/* Stage is the configured resolution, scaled to fit the physical screen */
#stage {
  position: absolute;
  top: 50%;
  left: 50%;
  transform-origin: center center;
  background: #000;
  overflow: hidden;
}

.layer {
  position: absolute;
  inset: 0;
  visibility: hidden;
}
.layer.showing { visibility: visible; }
.layer.front { z-index: 2; }
.layer.back { z-index: 1; }

.layer img,
.layer video {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}
.layer iframe {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
  background: #000;
}

#idle {
  position: absolute;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  color: #333;
  font: 400 28px/1.4 system-ui, sans-serif;
}
#idle.showing { display: flex; }

/* ---- transitions ---- */
.layer { will-change: opacity, transform; }

/* fade */
.t-fade.pre  { opacity: 0; }
.t-fade.go   { opacity: 1; transition: opacity .8s ease; }
.t-fade.out  { opacity: 0; transition: opacity .8s ease; }

/* slide-left */
.t-slide-left.pre { transform: translateX(100%); }
.t-slide-left.go  { transform: translateX(0); transition: transform .8s cubic-bezier(.4,0,.2,1); }
.t-slide-left.out { transform: translateX(-100%); transition: transform .8s cubic-bezier(.4,0,.2,1); }

/* slide-up */
.t-slide-up.pre { transform: translateY(100%); }
.t-slide-up.go  { transform: translateY(0); transition: transform .8s cubic-bezier(.4,0,.2,1); }
.t-slide-up.out { transform: translateY(-100%); transition: transform .8s cubic-bezier(.4,0,.2,1); }

/* zoom */
.t-zoom.pre { opacity: 0; transform: scale(1.12); }
.t-zoom.go  { opacity: 1; transform: scale(1); transition: opacity .8s ease, transform .9s cubic-bezier(.2,.6,.2,1); }
.t-zoom.out { opacity: 0; transition: opacity .8s ease; }

/* none */
.t-none.pre, .t-none.go, .t-none.out { transition: none; }
.t-none.out { opacity: 0; }
