/* Miniora Perfume Theme — Animations v2.0 */

/* ============================================================
   KEYFRAMES
   ============================================================ */
@keyframes fadeLeft  { from{opacity:0;transform:translateX(-30px)} to{opacity:1;transform:none} }
@keyframes fadeUp    { from{opacity:0;transform:translateY(20px)}  to{opacity:1;transform:none} }
@keyframes fadeScale { from{opacity:0;transform:scale(.9) rotate(3deg)} to{opacity:1;transform:none} }
@keyframes slideDown { from{transform:translateY(-100%)} to{transform:translateY(0)} }

@keyframes floatUp   { 0%{transform:translateY(100vh);opacity:0}15%{opacity:1}85%{opacity:1}100%{transform:translateY(-120px);opacity:0} }
@keyframes floatBob  { 0%,100%{transform:translateY(0) rotate(0)} 50%{transform:translateY(-18px) rotate(8deg)} }
@keyframes heroFloat { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-20px)} }
@keyframes bob       { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-4px)} }

@keyframes wiggle    { 0%,100%{transform:rotate(0) scale(1)} 25%{transform:rotate(10deg) scale(1.12)} 75%{transform:rotate(-10deg) scale(1.12)} }
@keyframes iconWig   { 0%,100%{transform:rotate(0)} 25%{transform:rotate(5deg)} 75%{transform:rotate(-5deg)} }
@keyframes spin1     { 0%,100%{transform:rotate(0) scale(1)} 50%{transform:rotate(20deg) scale(1.2)} }

@keyframes badgePulse  { 0%,100%{transform:scale(1)} 50%{transform:scale(1.25)} }
@keyframes priceGlow   { 0%,100%{opacity:1} 50%{opacity:.82} }
@keyframes limitedPulse{ 0%,100%{transform:scale(1) rotate(0)} 50%{transform:scale(1.05) rotate(2deg)} }
@keyframes cornerPop   { 0%,100%{transform:rotate(0) scale(1)} 50%{transform:rotate(10deg) scale(1.12)} }
@keyframes heartbeat   { 0%,100%{transform:scale(1)} 50%{transform:scale(1.35)} }
@keyframes sparkFloat  { 0%,100%{transform:translateY(0) rotate(0)} 50%{transform:translateY(-10px) rotate(10deg)} }

@keyframes deco1     { 0%,100%{transform:translateY(0) rotate(0)} 50%{transform:translateY(-15px) rotate(10deg)} }
@keyframes deco2     { 0%,100%{transform:translateY(0) rotate(0)} 50%{transform:translateY(20px) rotate(-10deg)} }
@keyframes rotateDeco{ to{transform:rotate(360deg)} }

@keyframes scrollHint{ 0%,100%{transform:translateX(-50%) translateY(0)} 50%{transform:translateX(-50%) translateY(10px)} }
@keyframes blink     { 0%,100%{opacity:.3} 50%{opacity:1} }

@keyframes toastIn   { from{opacity:0;transform:translateX(100px) scale(.8)} to{opacity:1;transform:none} }
@keyframes spin      { to{transform:rotate(360deg)} }

/* ============================================================
   APPLIED ANIMATIONS
   ============================================================ */
.float-heart          { animation:floatUp 4s ease-in-out infinite; }
.float-heart:nth-child(1){ animation-delay:0s }
.float-heart:nth-child(2){ animation-delay:1s }
.float-heart:nth-child(3){ animation-delay:2s }
.float-heart:nth-child(4){ animation-delay:1.5s }
.float-heart:nth-child(5){ animation-delay:.5s }

.site-header          { animation:slideDown .6s cubic-bezier(.25,.1,.25,1) both; }
.site-logo .logo-star { animation:spin1 1s ease-in-out infinite; }
.nav-badge            { animation:badgePulse 1.5s ease-in-out infinite; }

.hero-img-inner       { animation:heroFloat 4s ease-in-out infinite; }
.btn-hero             { animation:bob 2s ease-in-out infinite; }
.btn-hero:hover       { animation-play-state:paused; }
.hero-badge-deco.deco-tr { animation:deco1 3s ease-in-out infinite; }
.hero-badge-deco.deco-bl { animation:deco2 3.5s ease-in-out infinite; }
.scroll-hint          { animation:scrollHint 1.5s ease-in-out infinite; }
.scroll-hint .arr     { animation:blink 1.5s ease-in-out infinite; }

.sec-emoji            { animation:wiggle 2s ease-in-out infinite; }
.feat-icon            { animation:iconWig 3s ease-in-out infinite; }
.benefit-emoji        { animation:wiggle 2s ease-in-out infinite; }
.benefit:nth-child(2) .benefit-emoji { animation-delay:.3s; }
.benefit:nth-child(3) .benefit-emoji { animation-delay:.6s; }

.pcard-sparkle        { animation:sparkFloat 2s ease-in-out infinite; }
.pcard-price          { animation:priceGlow 2s ease-in-out infinite; }
.pcard-corner         { animation:cornerPop 3s ease-in-out infinite; }
.pcard-wish.active    { animation:heartbeat 1.2s ease-in-out infinite; }

.pd-limited           { animation:limitedPulse 2s ease-in-out infinite; }
.about-img            { animation:heroFloat 4s ease-in-out infinite; }

.cta-deco-1           { animation:rotateDeco 20s linear infinite; }
.cta-deco-2           { animation:rotateDeco 25s linear infinite reverse; }

.footer-deco-1        { animation:floatBob 4s ease-in-out infinite; }
.footer-deco-2        { animation:floatBob 5s ease-in-out infinite reverse; }
.heart-anim           { animation:heartbeat 1s ease-in-out infinite; }

.ce-emoji             { animation:wiggle 2s ease-in-out infinite; }

.toast                { animation:toastIn .4s cubic-bezier(.34,1.56,.64,1) both; }

/* ============================================================
   SCROLL REVEAL
   ============================================================ */
.reveal {
  opacity:0;
  transform:translateY(28px);
  transition:opacity .65s cubic-bezier(.25,.1,.25,1), transform .65s cubic-bezier(.25,.1,.25,1);
}
.reveal.in { opacity:1; transform:none; }
.reveal.d1 { transition-delay:.1s; }
.reveal.d2 { transition-delay:.2s; }
.reveal.d3 { transition-delay:.3s; }

/* ============================================================
   HOVER TRANSITIONS
   ============================================================ */
.pcard { will-change:transform; }
.pcard-img img { transition:transform .7s cubic-bezier(.25,.1,.25,1); }
.pcard:hover .pcard-img img { transform:scale(1.1); }

.pcard-qadd { transition:opacity .25s ease, transform .25s ease; }
.pcard:hover .pcard-qadd { opacity:1; transform:none; }

.pcard-wish, .pd-wish-btn {
  transition:transform .3s cubic-bezier(.34,1.56,.64,1), color .25s ease, background .25s ease, border-color .25s ease;
}

.nav-link::after { transition:transform .3s cubic-bezier(.25,.1,.25,1); }

.qty-num { transition:transform .2s cubic-bezier(.34,1.56,.64,1); }

.ci-img img { transition:transform .5s cubic-bezier(.25,.1,.25,1); }
.ci-img:hover img { transform:scale(1.08); }

/* Cart item removal animation support */
.cart-item-card {
  transition:all .3s cubic-bezier(.25,.1,.25,1);
  overflow:hidden;
}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media(prefers-reduced-motion:reduce) {
  *,*::before,*::after {
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .float-bg,#sparkle-container { display:none; }
}
