.move-motion(@className, @keyframeName) {
    .make-motion(@className, @keyframeName);
    .@{className}-enter-active, .@{className}-appear {
        opacity: 0;
        animation-timing-function: @yy-ease-in-out;
    }
    .@{className}-leave-active {
        animation-timing-function: @yy-ease-in-out;
    }
}

.move-motion(move-up, moveUp);

// moveUpIn
@keyframes moveUpIn {
    0% {
        transform-origin: 0 0;
        transform: translateY(-100%);
        opacity: 0;
    }
    100% {
        transform-origin: 0 0;
        transform: translateY(0%);
        opacity: 1;
    }
}

@keyframes moveUpOut {
    0% {
        transform-origin: 0 0;
        transform: translateY(0%);
        opacity: 1;
    }
    100% {
        transform-origin: 0 0;
        transform: translateY(-100%);
        opacity: 0;
    }
}

.move-motion(move-message, moveMessage);
@keyframes moveMessageIn {
    0% {
        opacity: 0;
        transform-origin: 0 0;
        transform: translateY(-100%);
    }
    100% {
        opacity: 1;
        transform-origin: 0 0;
        transform: translateY(0%);
    }
}

@keyframes moveMessageOut {
    0% {
        transform-origin: 0 0;
        transform: translateY(0%);
        opacity: 1;
    }
    70% {
        transform-origin: 0 0;
        transform: translateY(-100%);
        height: auto;
        padding: 10px 16px;
        margin-bottom: 14px;
        opacity: 0;
    }
    100% {
        transform-origin: 0 0;
        transform: translateY(-100%);
        height: 0;
        padding: 0;
        margin-bottom: 0;
        opacity: 0;
    }
}