:root {
    --nw: 1ch;
    --at: 3s;
    --dbtb: calc(var(--nw) + 6ch);
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: monospace;
}

body {
    height: 100vh;
    width: 100vw;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-evenly;
}

h1 {
    text-align: center;
}

input {
    width: 65vw;
}

#area {
    width: auto;
    max-width: 90vw;
    height: 40vh;
    display: flex;
    align-items: center;
    justify-content: space-evenly;
    overflow-x: scroll;
}

.out {
    padding: 6ch 1.5ch;
    transition: background-color 100ms ease-in-out;
}

.el {
    width: calc(var(--nw) + 3ch);
    line-height: calc(var(--nw) + 3ch);
    text-align: center;
    border: 1px solid;
    border-radius: 1ch;
    background-color: whitesmoke;
}

.mover {
    background-color: #7fe5ff;
    animation-timing-function: linear;
    animation-duration: var(--at);
    animation-fill-mode: forwards;
}

.move-up {
    animation-name: swap-up;
}
.move-down {
    animation-name: swap-down;
}

/* 5 segment animation:
@keyframes swap-up {
    0% {
        transform: translate(0, 0);
    }
    20% {
        transform: translate(
            calc(var(--dbtb) * 0.095),
            calc(var(--dbtb) * -0.309)
        );
    }
    40% {
        transform: translate(
            calc(var(--dbtb) * 0.345),
            calc(var(--dbtb) * -0.5)
        );
    }
    60% {
        transform: translate(
            calc(var(--dbtb) * 0.654),
            calc(var(--dbtb) * -0.5)
        );
    }
    80% {
        transform: translate(
            calc(var(--dbtb) * 0.904),
            calc(var(--dbtb) * -0.309)
        );
    }
    100% {
        transform: translate(calc(var(--dbtb) * 1), 0);
    }
}

@keyframes swap-down {
    0% {
        transform: translate(0, 0);
    }
    20% {
        transform: translate(
            calc(var(--dbtb) * -0.095),
            calc(var(--dbtb) * 0.309)
        );
    }
    40% {
        transform: translate(
            calc(var(--dbtb) * -0.345),
            calc(var(--dbtb) * 0.5)
        );
    }
    60% {
        transform: translate(
            calc(var(--dbtb) * -0.654),
            calc(var(--dbtb) * 0.5)
        );
    }
    80% {
        transform: translate(
            calc(var(--dbtb) * -0.904),
            calc(var(--dbtb) * 0.309)
        );
    }
    100% {
        transform: translate(calc(var(--dbtb) * -1), 0);
    }
}
*/

@keyframes swap-up {
    0% {
        transform: translate(0, 0);
    }
    12.5% {
        transform: translate(calc(var(--dbtb) * 0.038), calc(var(--dbtb) * -0.191));
    }
    25% {
        transform: translate(calc(var(--dbtb) * 0.146), calc(var(--dbtb) * -0.353));
    }
    37.5% {
        transform: translate(calc(var(--dbtb) * 0.308), calc(var(--dbtb) * -0.462));
    }
    50% {
        transform: translate(calc(var(--dbtb) * 0.5), calc(var(--dbtb) * -0.5));
    }
    62.5% {
        transform: translate(calc(var(--dbtb) * 0.691), calc(var(--dbtb) * -0.462));
    }
    75% {
        transform: translate(calc(var(--dbtb) * 0.853), calc(var(--dbtb) * -0.353));
    }
    87.5% {
        transform: translate(calc(var(--dbtb) * 0.961), calc(var(--dbtb) * -0.191));
    }
    100% {
        transform: translate(var(--dbtb), 0);
    }
}

@keyframes swap-down {
    0% {
        transform: translate(0, 0);
    }
    12.5% {
        transform: translate(calc(var(--dbtb) * -0.038), calc(var(--dbtb) * 0.191));
    }
    25% {
        transform: translate(calc(var(--dbtb) * -0.146), calc(var(--dbtb) * 0.353));
    }
    37.5% {
        transform: translate(calc(var(--dbtb) * -0.308), calc(var(--dbtb) * 0.462));
    }
    50% {
        transform: translate(calc(var(--dbtb) * -0.5), calc(var(--dbtb) * 0.5));
    }
    62.5% {
        transform: translate(calc(var(--dbtb) * -0.691), calc(var(--dbtb) * 0.462));
    }
    75% {
        transform: translate(calc(var(--dbtb) * -0.853), calc(var(--dbtb) * 0.353));
    }
    87.5% {
        transform: translate(calc(var(--dbtb) * -0.961), calc(var(--dbtb) * 0.191));
    }
    100% {
        transform: translate(calc(0ch - var(--dbtb)), 0);
    }
}

