/* ================================
   KEYFRAMES + FX ANIMATIONS
================================ */

@keyframes pulse{
  0%,100%{ transform:scale(1); opacity:.9; }
  50%{ transform:scale(1.35); opacity:1; }
}

.tile.bump{ animation:bump .26s ease-out; }
@keyframes bump{
  0%{ transform:scale(1); }
  60%{ transform:scale(1.05); }
  100%{ transform:scale(1); }
}

/* 3D model shine sweeps */
.model3d__shine{
  position:absolute;
  inset:-40% -20%;
  background: linear-gradient(110deg, transparent 35%, rgba(255,255,255,.14) 50%, transparent 65%);
  transform: translateX(-40%) rotate(8deg);
  animation: modelShineSweep 6.2s ease-in-out infinite;
  pointer-events:none;
  mix-blend-mode: screen;
}
@keyframes modelShineSweep{
  0%   { transform: translateX(-55%) rotate(8deg); opacity:.0; }
  18%  { opacity:.55; }
  60%  { opacity:.35; }
  100% { transform: translateX(55%) rotate(8deg); opacity:.0; }
}

.dropEmpty__modelShine{
  position:absolute;
  inset:-40% -20%;
  background: linear-gradient(110deg, transparent 35%, rgba(255,255,255,.12) 50%, transparent 65%);
  transform: translateX(-40%) rotate(8deg);
  animation: dropModelShine 6.2s ease-in-out infinite;
  pointer-events:none;
  mix-blend-mode: screen;
}
@keyframes dropModelShine{
  0%   { transform: translateX(-55%) rotate(8deg); opacity:.0; }
  18%  { opacity:.5; }
  60%  { opacity:.28; }
  100% { transform: translateX(55%) rotate(8deg); opacity:.0; }
}

/* Cinematic Launch FX */
.launchFx{
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 60;
}

.launchFx__warm{
  position:absolute;
  inset:-20%;
  opacity: 0;
  background:
    radial-gradient(1200px 700px at 25% 20%, rgba(215,192,138,.20), transparent 60%),
    radial-gradient(900px 520px at 75% 30%, rgba(255,255,255,.10), transparent 65%);
  filter: blur(6px);
}
.launchFx__veil{
  position:absolute;
  inset:0;
  opacity: 0;
  background: linear-gradient(180deg, rgba(0,0,0,.72), rgba(0,0,0,.18));
  backdrop-filter: blur(6px);
}
.launchFx__bloom{
  position:absolute;
  inset:-35%;
  opacity: 0;
  background: radial-gradient(circle at 50% 35%, rgba(215,192,138,.45), transparent 55%);
  filter: blur(10px);
  transform: scale(.98);
}
.launchFx__shimmer{
  position:absolute;
  inset:-40%;
  opacity: 0;
  background: linear-gradient(110deg,
    transparent 35%,
    rgba(255,255,255,.18) 48%,
    rgba(215,192,138,.18) 52%,
    transparent 65%
  );
  transform: translateX(-65%) rotate(8deg);
  mix-blend-mode: screen;
}

body.is-launching .launchFx__warm{ animation: warmUp 1.35s ease both; }
body.is-launching .launchFx__veil{ animation: veilOpen 1.1s ease both; }
body.is-launching .launchFx__bloom{ animation: bloomFlash 1.0s ease both; }
body.is-launching .launchFx__shimmer{ animation: shimmerSweep 1.2s ease both; }

@keyframes warmUp{
  0%{ opacity:0; transform: translateY(8px); }
  30%{ opacity:.85; }
  100%{ opacity:0; transform:none; }
}
@keyframes veilOpen{
  0%{ opacity:0; transform: translateY(0); }
  15%{ opacity:.55; }
  100%{ opacity:0; transform: translateY(-18px); }
}
@keyframes bloomFlash{
  0%{ opacity:0; transform: scale(.98); }
  18%{ opacity:.9; transform: scale(1.02); }
  70%{ opacity:.25; }
  100%{ opacity:0; transform: scale(1.03); }
}
@keyframes shimmerSweep{
  0%{ opacity:0; transform: translateX(-65%) rotate(8deg); }
  18%{ opacity:.75; }
  60%{ opacity:.30; }
  100%{ opacity:0; transform: translateX(65%) rotate(8deg); }
}

/* Velvet Curtain Launch FX (LONG) */
.curtain{
  position: fixed;
  inset: 0;
  z-index: 70;
  pointer-events: none;
  opacity: 0;
}
body.is-launching .curtain{ opacity: 1; }

.curtain__grain{
  position:absolute;
  inset:0;
  background-image: radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px);
  background-size: 3px 3px;
  opacity: .06;
  mix-blend-mode: overlay;
}

.curtain__panel{
  position:absolute;
  top:0;
  width: 52%;
  height: 100%;
  background:
    radial-gradient(1200px 700px at 30% 20%, rgba(215,192,138,.12), transparent 60%),
    linear-gradient(180deg, rgba(40,18,24,.96), rgba(10,10,14,.98));
  box-shadow: 0 30px 120px rgba(0,0,0,.75);
  transform: translateZ(0);
  overflow:hidden;
}
.curtain__panel--left{ left:0; border-right: 1px solid rgba(255,255,255,.06); }
.curtain__panel--right{ right:0; border-left: 1px solid rgba(255,255,255,.06); }

.curtain__folds{
  position:absolute;
  inset:-10% -20%;
  background:
    repeating-linear-gradient(
      90deg,
      rgba(255,255,255,.06) 0px,
      rgba(255,255,255,.02) 14px,
      rgba(0,0,0,.06) 28px
    );
  opacity: .18;
  filter: blur(0.2px);
  transform: skewX(-6deg);
}

.curtain__edge{
  position:absolute;
  top:0; bottom:0;
  width: 26px;
  opacity:.85;
  background: linear-gradient(180deg, rgba(215,192,138,.18), rgba(215,192,138,.04), rgba(215,192,138,.12));
  filter: blur(8px);
}
.curtain__panel--left .curtain__edge{ right:-10px; }
.curtain__panel--right .curtain__edge{ left:-10px; }

.curtain__bloom{
  position:absolute;
  inset:-40%;
  opacity: 0;
  background: radial-gradient(circle at 50% 35%, rgba(215,192,138,.52), transparent 55%);
  filter: blur(14px);
  transform: scale(.98);
}

.curtain__seal{
  position:absolute;
  left:50%;
  top:50%;
  transform: translate(-50%,-50%) scale(1);
  width: 176px;
  height: 176px;
  border-radius: 999px;
  display:grid;
  place-items:center;
  opacity: 0;
}

.seal__ring{
  position:absolute;
  inset:0;
  border-radius:999px;
  border: 1px solid rgba(255,255,255,.22);
  background:
    radial-gradient(circle at 30% 30%, rgba(255,255,255,.12), transparent 55%),
    radial-gradient(circle at 70% 70%, rgba(215,192,138,.16), transparent 60%),
    rgba(0,0,0,.30);
  box-shadow: 0 26px 90px rgba(0,0,0,.65);
}

.seal__shine{
  position:absolute;
  inset:-30%;
  border-radius:999px;
  opacity: 0;
  background: linear-gradient(110deg, transparent 35%, rgba(255,255,255,.18) 50%, transparent 65%);
  transform: translateX(-55%) rotate(8deg);
  mix-blend-mode: screen;
}

.seal__logo{
  position:absolute;
  width: 90px;
  height: 90px;
  overflow:hidden;
  filter: drop-shadow(0 10px 28px rgba(215,192,138,.16));
}
.seal__logo img{
  width: 90px;
  height: 90px;
  object-fit: contain;
  display:block;
}
.seal__logo--left{
  left: 50%;
  top: 50%;
  transform: translate(-50%,-58%);
  clip-path: inset(0 50% 0 0);
}
.seal__logo--right{
  left: 50%;
  top: 50%;
  transform: translate(-50%,-58%);
  clip-path: inset(0 0 0 50%);
}

.seal__text{
  position:absolute;
  bottom: 34px;
  font-weight: 900;
  letter-spacing: .22em;
  font-size: .78rem;
  color: rgba(255,255,255,.82);
}

body.is-launching .curtain__bloom{
  animation: curtainBloomLong 1.6s ease both;
}
body.is-launching .curtain__seal{
  animation: sealInLong 1.2s ease both, sealOutLong .9s ease both;
  animation-delay: 0s, 2.9s;
}
body.is-launching .seal__shine{
  opacity:1;
  animation: sealShineLong 1.6s ease both;
  animation-delay: .45s;
}

body.is-launching .seal__logo--left{
  animation: sealSplitLeftLong 1.4s cubic-bezier(.2,.9,.2,1) both;
  animation-delay: 1.2s;
}
body.is-launching .seal__logo--right{
  animation: sealSplitRightLong 1.4s cubic-bezier(.2,.9,.2,1) both;
  animation-delay: 1.2s;
}

body.is-launching .curtain__panel--left{
  animation:
    curtainLeftOpenLong 2.2s cubic-bezier(.15,.92,.15,1) both,
    curtainDropLong 2.6s cubic-bezier(.15,.92,.15,1) both;
  animation-delay: 2.6s, 5.4s;
}
body.is-launching .curtain__panel--right{
  animation:
    curtainRightOpenLong 2.2s cubic-bezier(.15,.92,.15,1) both,
    curtainDropLong 2.6s cubic-bezier(.15,.92,.15,1) both;
  animation-delay: 2.6s, 5.4s;
}

@keyframes curtainBloomLong{
  0%{ opacity:0; transform: scale(.98); }
  18%{ opacity:.95; transform: scale(1.02); }
  60%{ opacity:.35; }
  100%{ opacity:0; transform: scale(1.03); }
}
@keyframes sealInLong{
  from{ opacity:0; transform: translate(-50%,-50%) scale(.90); filter: blur(12px); }
  to{ opacity:1; transform: translate(-50%,-50%) scale(1); filter:none; }
}
@keyframes sealOutLong{
  from{ opacity:1; }
  to{ opacity:0; transform: translate(-50%,-54%) scale(.98); filter: blur(12px); }
}
@keyframes sealShineLong{
  0%{ opacity:0; transform: translateX(-60%) rotate(8deg); }
  20%{ opacity:.75; }
  100%{ opacity:0; transform: translateX(60%) rotate(8deg); }
}
@keyframes sealSplitLeftLong{
  0%{ transform: translate(-50%,-58%) translateX(0); }
  100%{ transform: translate(-50%,-58%) translateX(-22px); }
}
@keyframes sealSplitRightLong{
  0%{ transform: translate(-50%,-58%) translateX(0); }
  100%{ transform: translate(-50%,-58%) translateX(22px); }
}
@keyframes curtainLeftOpenLong{ from{ transform: translateX(0); } to{ transform: translateX(-56vw); } }
@keyframes curtainRightOpenLong{ from{ transform: translateX(0); } to{ transform: translateX(56vw); } }
@keyframes curtainDropLong{ 0%{ top:0; } 100%{ top: 120vh; } }

@media (prefers-reduced-motion: reduce){
  .launchFx__warm,
  .launchFx__veil,
  .launchFx__bloom,
  .launchFx__shimmer,
  .curtain__panel,
  .curtain__seal,
  .curtain__bloom,
  .seal__shine,
  .seal__logo{
    animation:none !important;
  }
  body.is-launching .curtain{ opacity:0; }
}
