/* ===========================================================
   ANIMATIONS
===========================================================*/

/* Live Pulse */

@keyframes pulse-live{
    0%, 100%{ opacity:1; }
    50%{ opacity:0.4; }
}

.badge-live .badge-dot{
    animation:pulse-live 1.4s ease-in-out infinite;
}

/* Fade In Up */

@keyframes fade-in-up{
    from{ opacity:0; transform:translateY(12px); }
    to{ opacity:1; transform:translateY(0); }
}

.fade-in-up{
    animation:fade-in-up 0.5s ease both;
}

/* Count Flash */

@keyframes count-flash{
    0%{ color:var(--color-gold-hover); }
    100%{ color:var(--color-gold); }
}

.flash-update{
    animation:count-flash 0.4s ease;
}

/* Sold Stamp */

@keyframes sold-stamp{
    0%{ transform:scale(0.6) rotate(-8deg); opacity:0; }
    60%{ transform:scale(1.08) rotate(-8deg); opacity:1; }
    100%{ transform:scale(1) rotate(-8deg); opacity:1; }
}

.sold-stamp{
    animation:sold-stamp 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}

.transition-base{
    transition:all var(--transition-base);
}

/* Card Grid Entry Stagger */

.card-grid > *{
    animation:fade-in-up 0.4s ease both;
}

.card-grid > *:nth-child(1){ animation-delay:0.02s; }
.card-grid > *:nth-child(2){ animation-delay:0.06s; }
.card-grid > *:nth-child(3){ animation-delay:0.10s; }
.card-grid > *:nth-child(4){ animation-delay:0.14s; }