/* ============================================
   BIM Animations — Shared Keyframes
   ============================================ */

@keyframes bimSpin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

@keyframes bimFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes bimSlideUp {
    from { opacity: 0; transform: translateY(0.5rem); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes bimSlideDown {
    from { opacity: 0; transform: translateY(-0.5rem); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes bimShake {
    0%, 100% { transform: translateX(0); }
    20%, 60% { transform: translateX(-4px); }
    40%, 80% { transform: translateX(4px); }
}

@keyframes bimPulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

@keyframes bimPump {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.18); }
}

@keyframes bimStatusDotPulse {
    0%, 100% { opacity: 1;  transform: scale(1); }
    50%       { opacity: 0; transform: scale(0.4); }
}

@keyframes bimRestorePulse {
    0%   { box-shadow: 0 0 0 0    rgba(22, 163, 74, 0.45); }
    70%  { box-shadow: 0 0 0 10px rgba(22, 163, 74, 0); }
    100% { box-shadow: 0 0 0 0    rgba(22, 163, 74, 0); }
}

@keyframes bimToastIn {
    from {
        opacity: 0;
        transform: translateX(calc(100% + 24px));
    }
    to {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes bimToastInMobile {
    from {
        opacity: 0;
        transform: translateY(calc(100% + 16px));
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}
