/* Animación al cargar la página */
.page-load {
    opacity: 0;
    transform: translateY(30px);
    /* desde abajo */
    animation: appearOnLoad 1s forwards ease-out;
}

@keyframes appearOnLoad {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.fade-in {
    opacity: 0;
    transform: translateY(50px);
    /* por defecto desde abajo */
    transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}

.fade-in.from-top {
    transform: translateY(-50px);
}

.fade-in.from-bottom {
    transform: translateY(50px);
}

.fade-in.from-left {
    transform: translateX(-50px);
}

.fade-in.from-right {
    transform: translateX(50px);
}

.fade-in.visible {
    opacity: 1;
    transform: translate(0, 0);
}