/* --- 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); } }