﻿/* --- Basics --- */

.loading {
    display: inline-block;
    overflow: hidden;
    height: 1.3em;
    margin-top: -0.3em;
    line-height: 1.5em;
    vertical-align: text-bottom;
}

    .loading::after {
        display: inline-table;
        white-space: pre;
        text-align: left;
    }

    /* --- Types --- */

    /* default loading is ellip */
    .loading::after {
        content: "\A.\A..\A...";
        animation: spin4 2s steps(4) infinite;
    }

    .loading.line::after {
        content: "/\A–\A\\\A|";
        text-align: center;
        animation: spin4 1s steps(4) infinite;
    }

    .loading.line2::after {
        content: "╲\A│\A╱\A─";
        text-align: center;
        animation: spin4 1s steps(4) infinite;
    }

    .loading.plus::after {
        content: "┽\A╀\A┾\A╁";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.dots::after {
        content: "⠋\A⠙\A⠹\A⠸\A⠼\A⠴\A⠦\A⠧\A⠇\A⠏";
        animation: spin10 1s steps(10) infinite;
    }

    .loading.dots2::after {
        content: "⠋\A⠙\A⠚\A⠞\A⠖\A⠦\A⠴\A⠲\A⠳";
        animation: spin9 1s steps(9) infinite;
    }

    .loading.dots3::after {
        content: "⋮\A⋰\A⋯\A⋱";
        text-align: center;
        animation: spin4 1s steps(4) infinite;
    }

    .loading.lifting::after {
        content: "꜈꜍\A꜉꜎\A꜊꜏\A꜋꜐\A꜌꜑";
        animation: spin5 .5s steps(5) infinite alternate;
    }

    .loading.hamburger::after {
        content: "☱\A☲\A☴";
        animation: spin3 .3s steps(3) infinite alternate;
    }

    .loading.bar::after {
        content: "▏\A▎\A▍\A▌\A▋\A▊\A▉";
        animation: spin7 1s steps(7) infinite alternate;
    }

    .loading.bar2::after {
        content: "▁\A▂\A▃\A▄\A▅\A▆\A▇\A█";
        animation: spin8 2s steps(8) infinite alternate;
    }

    .loading.circle::after {
        content: "◴\A◷\A◶\A◵";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.open-circle::after {
        content: "◜\A◠\A◝\A◞\A◡\A◟";
        animation: spin6 .6s steps(6) infinite;
    }

    .loading.arrow::after {
        content: "←\A↖\A↑\A↗\A→\A↘\A↓\A↙";
        animation: spin8 1s steps(8) infinite;
    }

    .loading.triangle::after {
        content: "◢\A◣\A◤\A◥";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.triangles::after {
        content: "▹▹▹▹▹\A ▸▹▹▹▹\A ▹▸▹▹▹\A ▹▹▸▹▹\A ▹▹▹▸▹\A ▹▹▹▹▸";
        animation: spin6 1s steps(6) infinite;
    }

    .loading.beam::after {
        content: "\A=   \A ==  \A === \A ====\A  ===\A   ==\A    =\A";
        animation: spin9 1.2s steps(9) infinite;
        font-family: monospace;
    }

    .loading.bullet::after {
        content: " ●    \A   ●   \A    ●  \A     ● \A      ●\A     ● \A    ●  \A   ●   \A  ●    \A ●     ";
        animation: spin10 1s steps(10) infinite;
    }

    .loading.bullseye::after {
        content: "◎◎◎\A◉◎◎\A◎◉◎\A◎◎◉";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.rhomb::after {
        content: "◇◇◇\A◈◇◇\A◇◈◇\A◇◇◈";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.fish::after {
        content: ">))'>\A  >))'>\A   >))'>\A    >))'>\A     >))'>\A     <'((<\A    <'((<\A   <'((<\A  <'((<\A <'((<\A";
        animation: spin10 5s steps(10) infinite;
    }

    .loading.toggle::after {
        content: "⊶\A⊷";
        animation: spin2 1s steps(2) infinite;
    }

    .loading.countdown::after {
        content: "0\A 1\A 2\A 3\A 4\A 5\A 6\A 7\A 8\A 9";
        animation: spin10 10s steps(10) reverse;
    }

    .loading.time::after {
        content: "🕐\A🕑\A🕒\A🕓\A🕔\A🕕\A🕖\A🕗\A🕘\A🕙\A🕚\A🕛";
        animation: spin12 3s steps(12) infinite;
        width: 1.3em;
    }

    .loading.hearts::after {
        content: "💛\A💙\A💜\A💚";
        animation: spin4 2s steps(4) infinite;
        width: 1.3em;
    }

    .loading.earth::after {
        content: "🌍\A🌎\A🌏";
        animation: spin3 1s steps(3) infinite;
        width: 1.3em;
    }

    .loading.moon::after {
        content: "🌑\A🌒\A🌓\A🌔\A🌕\A🌖\A🌗\A🌘";
        animation: spin8 2s steps(8) infinite;
        width: 1.3em;
    }

    .loading.monkey::after {
        content: "🙈\A🙉\A🙊";
        animation: spin3 1.5s steps(3) infinite;
        width: 1.3em;
    }

    .loading.runner::after {
        content: "🚶\A🏃";
        animation: spin2 1s steps(2) infinite;
        width: 1.3em;
    }

    .loading.box-bounce::after {
        content: "▖\A▘\A▝\A▗";
        animation: spin4 1s steps(4) infinite;
    }

    .loading.star::after {
        content: "✶\A✸\A✹\A✺\A✹\A✷";
        animation: spin6 1s steps(6) infinite;
    }

    .loading.words::after {
        content: "Loading\A Still loading\A Mostly done\A A bit more \A Almost done\A Ready-ish";
        animation: spin6 12s steps(6) infinite;
    }

/* --- Animations --- */

@keyframes spin1 {
    to {
        transform: translateY( -1.5em);
    }
}

@keyframes spin2 {
    to {
        transform: translateY( -3.0em);
    }
}

@keyframes spin3 {
    to {
        transform: translateY( -4.5em);
    }
}

@keyframes spin4 {
    to {
        transform: translateY( -6.0em);
    }
}

@keyframes spin5 {
    to {
        transform: translateY( -7.5em);
    }
}

@keyframes spin6 {
    to {
        transform: translateY( -9.0em);
    }
}

@keyframes spin7 {
    to {
        transform: translateY(-10.5em);
    }
}

@keyframes spin8 {
    to {
        transform: translateY(-12.0em);
    }
}

@keyframes spin9 {
    to {
        transform: translateY(-13.5em);
    }
}

@keyframes spin10 {
    to {
        transform: translateY(-15.0em);
    }
}

@keyframes spin11 {
    to {
        transform: translateY(-16.5em);
    }
}

@keyframes spin12 {
    to {
        transform: translateY(-18.0em);
    }
}
