/* ===== Keyframes ===== */
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeInUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}
@keyframes letterIn{from{opacity:0;transform:translateY(40px) rotate(6deg)}to{opacity:1;transform:translateY(0) rotate(0)}}
@keyframes twinkle{0%,100%{opacity:.5;letter-spacing:.5em}50%{opacity:1;letter-spacing:.62em}}
@keyframes twinkleStar{0%{opacity:.35}100%{opacity:.75}}
@keyframes shimmer{to{background-position:220% center}}
@keyframes sheen{0%,60%{left:-120%}100%{left:140%}}
@keyframes pulseBtn{0%,100%{box-shadow:0 12px 34px rgba(245,199,110,.35);transform:scale(1)}50%{box-shadow:0 18px 52px rgba(247,168,184,.55);transform:scale(1.02)}}
@keyframes glowPulse{0%,100%{opacity:.7;transform:translateX(-50%) scale(1)}50%{opacity:1;transform:translateX(-50%) scale(1.08)}}
@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(8px)}}
@keyframes sound{0%,100%{transform:scaleY(.35)}50%{transform:scaleY(1)}}
@keyframes flicker{0%{transform:translateX(-50%) scale(1) rotate(-3deg);opacity:.9}100%{transform:translateX(-52%) scale(1.12) rotate(3deg);opacity:1}}
@keyframes cakeSpin{0%{transform:rotateY(-14deg)}100%{transform:rotateY(14deg)}}
@keyframes kenburns{0%{transform:scale(1.18) translate(2%,-2%)}100%{transform:scale(1) translate(0,0)}}
@keyframes heartbeat{0%,100%{transform:scale(1)}25%{transform:scale(1.18)}40%{transform:scale(1)}60%{transform:scale(1.12)}}
@keyframes caret{0%,100%{opacity:1}50%{opacity:0}}
@keyframes cardIn{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:none}}
@keyframes auroraShift{0%{transform:translate(-4%,0) scale(1)}100%{transform:translate(4%,3%) scale(1.12)}}
@keyframes bgShift{0%{background-position:0% 0%}100%{background-position:100% 100%}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes floatUp{0%{transform:translateY(0) translateX(0) rotate(-6deg)}50%{transform:translateY(-55vh) translateX(24px) rotate(6deg)}100%{transform:translateY(-118vh) translateX(-14px) rotate(-4deg)}}

/* ===== Scroll reveal ===== */
.reveal-up{opacity:0;transform:translateY(38px) scale(.985);filter:blur(2px);transition:opacity .9s cubic-bezier(.2,.8,.2,1),transform .9s cubic-bezier(.2,.8,.2,1),filter .9s ease}
.reveal-up.is-visible{opacity:1;transform:none;filter:none}
.content{opacity:0}
.content.is-visible{opacity:1;transition:opacity 1s ease}

/* No-JS / reduced motion safety */
.no-js .reveal-up,.no-js .content{opacity:1;transform:none;filter:none}
@media (prefers-reduced-motion:reduce){
 *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
 .reveal-up{opacity:1;transform:none;filter:none}
 .hero__title .letter,.hero__script,.hero__scroll{opacity:1}
}
