/* Entrance animations for TransitionType (Styling/TransitionTypeExtensions.cs). Used by
   Modal/Drawer/RxToastContainer; add @xui-anim-* classes to new overlay-style components as needed. */

@keyframes xui-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes xui-scale-in {
    from { opacity: 0; transform: scale(0.95); }
    to { opacity: 1; transform: scale(1); }
}

@keyframes xui-slide-up-in {
    from { opacity: 0; transform: translateY(16px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes xui-slide-down-in {
    from { opacity: 0; transform: translateY(-16px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes xui-slide-left-in {
    from { opacity: 0; transform: translateX(16px); }
    to { opacity: 1; transform: translateX(0); }
}

@keyframes xui-slide-right-in {
    from { opacity: 0; transform: translateX(-16px); }
    to { opacity: 1; transform: translateX(0); }
}

.xui-anim-fade { animation: xui-fade-in 0.18s ease-out; }
.xui-anim-scale { animation: xui-scale-in 0.18s cubic-bezier(0.16, 1, 0.3, 1); }
.xui-anim-slide-up { animation: xui-slide-up-in 0.2s cubic-bezier(0.16, 1, 0.3, 1); }
.xui-anim-slide-down { animation: xui-slide-down-in 0.2s cubic-bezier(0.16, 1, 0.3, 1); }
.xui-anim-slide-left { animation: xui-slide-left-in 0.2s cubic-bezier(0.16, 1, 0.3, 1); }
.xui-anim-slide-right { animation: xui-slide-right-in 0.2s cubic-bezier(0.16, 1, 0.3, 1); }

@keyframes xui-pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.45; transform: scale(1.15); }
}

.xui-anim-pulse { animation: xui-pulse 1.4s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
    .xui-anim-fade,
    .xui-anim-scale,
    .xui-anim-slide-up,
    .xui-anim-slide-down,
    .xui-anim-slide-left,
    .xui-anim-slide-right,
    .xui-anim-pulse {
        animation: none;
    }
}
