/* from: https://codepen.io/alterebro/pen/abZzNRo  */

@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
:root {
    --atom-size: 110px;
    --atom-color-hex: #e3eff1;
    --atom-color-shadow: #525252;
    --atom-color-rgb: 235, 235, 235;
    --nucleus-size: calc(var(--atom-size) / 5);
    --electron-color-hex: #bdf6fa;
    --electron-size: calc(var(--atom-size) / 25);
    --electron-orbit-size: calc(var(--atom-size) / 2.5);
    --electron-speed: 3s;
    --electron-speed-omega: 2.8s;
}


/* Atom */

.atom {
    position: relative;
    box-sizing: border-box;
    width: var(--atom-size);
    height: var(--atom-size);
}


/* Nucleus */

.atom::before {
    content: '360\00b0';
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    display: flex;
    position: relative;
    justify-content: center;
    align-items: center;
    font-family: Poppins, sans-serif;
    font-size: calc(var( --atom-size) / 5);
    font-weight: bolder;
    text-shadow: 1px 1px 2px var( --atom-color-shadow);
    color: rgba(var(--atom-color-rgb), .8);
    top: 40%;
    left: 40%;
    width: var(--nucleus-size);
    height: var(--nucleus-size);
}


/* Electron Orbit */

.atom>[class^="electron"] {
    box-sizing: border-box;
    border-top: solid rgba(var(--atom-color-rgb), .5) 1px;
    border-right: solid rgba(var(--atom-color-rgb), .35) 2px;
    border-bottom: solid rgba(var(--atom-color-rgb), .2) 4px;
    border-left: solid rgba(var(--atom-color-rgb), 0) 2px;
    border-radius: 100%;
    width: 100%;
    height: var(--electron-orbit-size);
    position: absolute;
    top: 50%;
    margin-top: calc(var(--electron-orbit-size) / -2);
    animation: var(--electron-speed) electron-orbit infinite linear;
}

.atom>.electron-omega {
    box-sizing: border-box;
    transform: rotate(-90deg);
    animation: var(--electron-speed-omega) electron-orbit infinite linear;
}

@keyframes electron-orbit {
    0% {
        border-top: solid rgba(var(--atom-color-rgb), .5) 1px;
        border-right: solid rgba(var(--atom-color-rgb), .35) 2px;
        border-bottom: solid rgba(var(--atom-color-rgb), .2) 4px;
        border-left: solid rgba(var(--atom-color-rgb), 0) 2px;
    }
    25% {
        border-top: solid rgba(var(--atom-color-rgb), .35) 1px;
        border-right: solid rgba(var(--atom-color-rgb), .2) 2px;
        border-bottom: solid rgba(var(--atom-color-rgb), 0) 4px;
        border-left: solid rgba(var(--atom-color-rgb), .5) 2px;
    }
    50% {
        border-top: solid rgba(var(--atom-color-rgb), .2) 1px;
        border-right: solid rgba(var(--atom-color-rgb), 0) 2px;
        border-bottom: solid rgba(var(--atom-color-rgb), .5) 4px;
        border-left: solid rgba(var(--atom-color-rgb), .35) 2px;
    }
    75% {
        border-top: solid rgba(var(--atom-color-rgb), 0) 1px;
        border-right: solid rgba(var(--atom-color-rgb), .5) 2px;
        border-bottom: solid rgba(var(--atom-color-rgb), .35) 4px;
        border-left: solid rgba(var(--atom-color-rgb), .2) 2px;
    }
    100% {
        border-top: solid rgba(var(--atom-color-rgb), .5) 1px;
        border-right: solid rgba(var(--atom-color-rgb), .35) 2px;
        border-bottom: solid rgba(var(--atom-color-rgb), .2) 4px;
        border-left: solid rgba(var(--atom-color-rgb), 0) 2px;
    }
}


/* Electron Unit */

.atom [class^="electron"]::after {
    content: '';
    display: block;
    margin-top: calc(var(--electron-size) / -2);
    position: absolute;
    box-sizing: border-box;
    width: 0;
    height: 0;
    border-top: calc(var(--electron-size) / 2) solid transparent;
    border-bottom: calc(var(--electron-size) / 2) solid transparent;
    border-left: var(--electron-size) solid rgba(var(--atom-color-rgb), 1);
    top: 50%;
    left: calc(var(--electron-size) / -1);
    transform: scale(1);
    animation: calc(var(--electron-speed) * 2) electron infinite ease-in-out;
}

.atom .electron-omega::after {
    box-sizing: border-box;
    animation: calc(var(--electron-speed-omega) * 2) electron infinite ease-in-out;
}

@keyframes electron {
    0% {
        left: calc(var(--electron-size) / -1);
        transform: scale(1);
        transform: rotate(0deg);
    }
    12.5% {
        top: 100%;
        transform: scale(1.5);
        transform: rotate(-45deg);
    }
    25% {
        left: 100%;
        transform: scale(1);
        transform: rotate(-90deg);
    }
    37.5% {
        top: 0%;
        transform: scale(.25);
        transform: rotate(-135deg);
    }
    50% {
        left: calc(var(--electron-size) / -1);
        transform: scale(1);
        transform: rotate(-180deg);
    }
    62.5% {
        top: 100%;
        transform: scale(1.5);
        transform: rotate(-225deg);
    }
    75% {
        left: 100%;
        transform: scale(1);
        transform: rotate(-270deg);
    }
    87.5% {
        top: 0%;
        transform: scale(.25);
        transform: rotate(-315deg);
    }
    100% {
        left: calc(var(--electron-size) / -1);
        transform: scale(1);
        transform: rotate(-360deg);
    }
}