
/* V16.2 premium interaction layer */
.envelopes .envelope-stage{perspective:1200px}
.envelopes.is-visible .envelope-message{animation:envelopeMessageIn 1.1s cubic-bezier(.16,1,.3,1) both}
@keyframes envelopeMessageIn{from{opacity:0;transform:translateY(28px) scale(.96);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
.fall-envelope{transition:transform .35s ease,filter .35s ease}
.fall-envelope:hover,.fall-envelope:focus-visible{transform:translateY(-6px) scale(1.18) rotate(-4deg);filter:drop-shadow(0 0 18px rgba(240,213,138,.7))}
.envelope-pop.show .envelope-pop-inner{animation:letterReveal .7s cubic-bezier(.16,1,.3,1) both}
@keyframes letterReveal{from{opacity:0;transform:translateY(24px) scale(.94) rotateX(8deg)}to{opacity:1;transform:none}}
.finale.is-visible .finale-bg{animation:finaleKenBurns 9s ease-out both}
@keyframes finaleKenBurns{from{transform:scale(1.08);filter:saturate(.65) brightness(.72)}to{transform:scale(1);filter:saturate(1) brightness(1)}}
.finale.is-visible .finale-content h2{animation:finaleTitle 1.1s cubic-bezier(.16,1,.3,1) .08s both}
.finale.is-visible .final-number{animation:finalNumber 1.15s cubic-bezier(.16,1,.3,1) .22s both}
.finale.is-visible .final-text{animation:finaleText .85s ease .42s both}
.finale.is-visible .final-date{animation:finaleText .85s ease .54s both}
.finale.is-visible .final-wait{animation:finaleText .95s cubic-bezier(.16,1,.3,1) .66s both}
@keyframes finaleTitle{from{opacity:0;transform:translateY(30px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes finalNumber{from{opacity:0;transform:scale(.78);filter:blur(5px)}to{opacity:1;transform:scale(1);filter:none}}
@keyframes finaleText{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.envelopes.is-visible .envelope-message,.envelope-pop.show .envelope-pop-inner,.finale.is-visible .finale-bg,.finale.is-visible .finale-content>*{animation:none!important}.fall-envelope{transition:none}}
