/* ── PRE-DOOR ── */
@keyframes predoorRays{from{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(360deg)}}
@keyframes glowPulse{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:0.85}50%{transform:translate(-50%,-50%) scale(1.18);opacity:1}}
@keyframes crossFloat{0%,100%{transform:translateY(0) rotate(0deg)}33%{transform:translateY(-8px) rotate(0.4deg)}66%{transform:translateY(-4px) rotate(-0.3deg)}}
@keyframes mandorlaPulse{0%,100%{opacity:0.7;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}
@keyframes crossRaysFade{0%,100%{opacity:0.35}50%{opacity:0.6}}
@keyframes jewelFlash{0%,100%{opacity:0.3;transform:scale(1)}50%{opacity:0.9;transform:scale(1.5)}}
@keyframes jewelCore{0%,100%{opacity:0.75;transform:scale(1)}50%{opacity:1;transform:scale(1.25)}}
@keyframes btnHaloPulse{0%,100%{border-color:rgba(214,179,106,0);transform:scale(1)}50%{border-color:rgba(214,179,106,0.5);transform:scale(1.06)}}
@keyframes btnInnerPulse{0%,100%{opacity:0.4}50%{opacity:1}}
@keyframes chevronNudge{0%,100%{transform:translateX(0)}60%{transform:translateX(3px)}80%{transform:translateX(-1px)}}

/* ── SHARED / GLOBAL ── */
@keyframes haloSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes haloExpand{0%,100%{transform:scale(1);opacity:0.5}50%{transform:scale(1.08);opacity:0.8}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes raysRot{from{transform:translateX(-50%) rotate(0deg)}to{transform:translateX(-50%) rotate(360deg)}}
@keyframes cloudDrift{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes orbit{from{transform:rotate(0deg) translateY(-130px)}to{transform:rotate(360deg) translateY(-130px)}}
@keyframes starSpin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.1)}}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:0.7;text-shadow:0 0 30px rgba(214,179,106,0.8)}}
@keyframes dotBounce{0%,100%{transform:translateY(0);opacity:0.4}50%{transform:translateY(-6px);opacity:1}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}

@keyframes ticketReveal{from{opacity:0;transform:scale(0.9) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}
@keyframes cardSendBack{0%{transform:translateY(0) rotateY(0deg) scale(1) rotateZ(0);opacity:1;z-index:10}40%{transform:translateY(-30px) rotateY(15deg) scale(0.9) rotateZ(5deg);opacity:0.6}100%{transform:translateY(24px) rotateY(-12deg) scale(0.91) rotateZ(0);opacity:1}}
@keyframes particleRise{0%{transform:translateY(0) translateX(0);opacity:0.8}100%{transform:translateY(-80px) translateX(var(--dx,0px));opacity:0}}
@keyframes shimmerPass{0%{left:-100%}100%{left:200%}}
@keyframes shimmer{0%,100%{opacity:0.6}50%{opacity:1}}
@keyframes detailPulse{0%,100%{box-shadow:0 0 0 0 rgba(212,168,67,0)}50%{box-shadow:0 0 0 6px rgba(212,168,67,0.15)}}
@keyframes timelineDotGlow{0%,100%{box-shadow:0 0 8px rgba(212,168,67,0.3)}50%{box-shadow:0 0 20px rgba(212,168,67,0.7),0 0 40px rgba(212,168,67,0.2)}}

/* ── LITURGICAL & STAR BRANING ANIMATIONS ── */
@keyframes starBreathe {
  0%, 100% {
    transform: scale(1) rotate(0deg);
    opacity: 0.9;
  }
  50% {
    transform: scale(1.15) rotate(45deg);
    opacity: 1;
    filter: drop-shadow(0 0 8px rgba(245, 229, 176, 0.9));
  }
}

@keyframes starAuraPulse {
  0%, 100% {
    transform: scale(1);
    opacity: 0.35;
  }
  50% {
    transform: scale(1.35);
    opacity: 0.65;
  }
}

@keyframes liturgicalReveal {
  from {
    opacity: 0;
    transform: scaleX(0.7);
  }
  to {
    opacity: 1;
    transform: scaleX(1);
  }
}

/* Candle flame flicker — organic, no looping pattern */
@keyframes flickerOuter{
  0%  {transform:scaleX(1)    scaleY(1)    rotate(0deg)}
  20% {transform:scaleX(0.88) scaleY(1.06) rotate(-2deg)}
  40% {transform:scaleX(1.05) scaleY(0.94) rotate(1.5deg)}
  60% {transform:scaleX(0.92) scaleY(1.08) rotate(-1deg)}
  80% {transform:scaleX(1.03) scaleY(0.97) rotate(2deg)}
  100%{transform:scaleX(1)    scaleY(1)    rotate(0deg)}
}
@keyframes flickerMid{
  0%  {transform:scaleX(1)    scaleY(1)    rotate(0deg);opacity:1}
  25% {transform:scaleX(0.9)  scaleY(1.1)  rotate(2deg);opacity:0.92}
  50% {transform:scaleX(1.08) scaleY(0.92) rotate(-2deg);opacity:1}
  75% {transform:scaleX(0.93) scaleY(1.07) rotate(1deg);opacity:0.95}
  100%{transform:scaleX(1)    scaleY(1)    rotate(0deg);opacity:1}
}
@keyframes flickerCore{
  0%  {transform:scaleX(1)   scaleY(1);opacity:0.95}
  33% {transform:scaleX(0.85)scaleY(1.15);opacity:0.75}
  66% {transform:scaleX(1.1) scaleY(0.9);opacity:1}
  100%{transform:scaleX(1)   scaleY(1);opacity:0.95}
}
/* Candle entry: aparece desde abajo */
@keyframes candleAppear{
  0%  {opacity:0;transform:translateY(20px) scale(0.82)}
  60% {opacity:1;transform:translateY(-4px) scale(1.04)}
  100%{opacity:1;transform:translateY(0)    scale(1)}
}
/* Ignición: llama nace pequeña y explota suavemente */
@keyframes candleLight{
  0%  {opacity:0;transform:scaleX(0.2) scaleY(0)    rotate(-8deg)}
  30% {opacity:0.9;transform:scaleX(1.5) scaleY(0.5) rotate(5deg)}
  60% {opacity:1;transform:scaleX(0.85) scaleY(1.15) rotate(-3deg)}
  80% {opacity:1;transform:scaleX(1.05) scaleY(0.95) rotate(1deg)}
  100%{opacity:1;transform:scaleX(1)    scaleY(1)    rotate(0deg)}
}
/* Apagado: llama se tuerce y desaparece */
@keyframes candleOut{
  0%  {opacity:1;transform:scaleX(1)    scaleY(1)    rotate(0deg)}
  25% {opacity:0.9;transform:scaleX(0.6) scaleY(1.4) rotate(12deg)}
  50% {opacity:0.5;transform:scaleX(1.2) scaleY(0.4) rotate(-8deg)}
  75% {opacity:0.2;transform:scaleX(0.3) scaleY(0.2)}
  100%{opacity:0;transform:scaleX(0)   scaleY(0)}
}
/* Humo que sube al apagar */
@keyframes smokeRise{
  0%  {stroke-dashoffset:0;opacity:0.6;transform:translateY(0) scaleX(1)}
  50% {opacity:0.4;transform:translateY(-8px) scaleX(1.3)}
  100%{opacity:0;transform:translateY(-18px) scaleX(0.5)}
}
