html,
body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

body {
    background-color: #2D5B7A;
}

.blinking-circles {
    position: fixed;
    top: 0;
    left: 0;

    width: 100vw;
    height: 100vh;

    pointer-events: none;
}

.circle {
    position: absolute;

    width: 20px;
    height: 20px;

    border-radius: 50%;

    background-color: #197EC1;

    will-change: transform, opacity;
}


/* ------------------------------
   DESKTOP — CIRCLES
------------------------------ */

.circle-1 {
    left: 10%;
    top: 18%;
    animation:
        blink-up 2.8s ease-in-out infinite,
        float-1 9s ease-in-out infinite;
}

.circle-2 {
    left: 38%;
    top: 10%;
    animation:
        blink-up 3.2s ease-in-out infinite,
        float-2 11s ease-in-out infinite;
    animation-delay: 0.7s, 1s;
}

.circle-3 {
    left: 75%;
    top: 25%;
    animation:
        blink-up 2.6s ease-in-out infinite,
        float-3 10s ease-in-out infinite;
    animation-delay: 1.3s, 2s;
}

.circle-4 {
    left: 90%;
    top: 12%;
    animation:
        blink-down 3s ease-in-out infinite,
        float-4 12s ease-in-out infinite;
    animation-delay: 0.3s, 0.5s;
}

.circle-5 {
    left: 53%;
    top: 38%;
    animation:
        blink-down 2.7s ease-in-out infinite,
        float-5 9.5s ease-in-out infinite;
    animation-delay: 1s, 1.5s;
}

.circle-6 {
    left: 25%;
    top: 35%;
    animation:
        blink-up 3.1s ease-in-out infinite,
        float-6 10.5s ease-in-out infinite;
    animation-delay: 1.7s, 2.5s;
}


/* ------------------------------
   BLINKING
------------------------------ */

@keyframes blink-up {
    0%, 100% {
        opacity: 0.53;
    }

    50% {
        opacity: 1;
    }
}

@keyframes blink-down {
    0%, 100% {
        opacity: 1;
    }

    50% {
        opacity: 0.53;
    }
}


/* ------------------------------
   DESKTOP — FLOATING
------------------------------ */

@keyframes float-1 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(2px, -3px, 0);
    }

    50% {
        transform: translate3d(-2px, -1px, 0);
    }

    75% {
        transform: translate3d(1px, 3px, 0);
    }
}

@keyframes float-2 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-3px, 1px, 0);
    }

    50% {
        transform: translate3d(1px, -3px, 0);
    }

    75% {
        transform: translate3d(3px, 2px, 0);
    }
}

@keyframes float-3 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(2px, 2px, 0);
    }

    50% {
        transform: translate3d(-3px, 0, 0);
    }

    75% {
        transform: translate3d(-1px, -3px, 0);
    }
}

@keyframes float-4 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-2px, -2px, 0);
    }

    50% {
        transform: translate3d(2px, 3px, 0);
    }

    75% {
        transform: translate3d(3px, -1px, 0);
    }
}

@keyframes float-5 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(3px, -1px, 0);
    }

    50% {
        transform: translate3d(-1px, -3px, 0);
    }

    75% {
        transform: translate3d(-3px, 2px, 0);
    }
}

@keyframes float-6 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-2px, 3px, 0);
    }

    50% {
        transform: translate3d(2px, 1px, 0);
    }

    75% {
        transform: translate3d(-1px, -2px, 0);
    }
}


/* ------------------------------
   MOBILE
------------------------------ */

@media (max-width: 700px) {

    .circle {
        width: 30px;
        height: 30px;
    }


    /* Mobile animation assignments */

    .circle-1 {
        animation:
            blink-up 2.8s ease-in-out infinite,
            mobile-float-1 7.5s ease-in-out infinite;
    }

    .circle-2 {
        animation:
            blink-up 3.2s ease-in-out infinite,
            mobile-float-2 8.5s ease-in-out infinite;
        animation-delay: 0.7s, 1s;
    }

    .circle-3 {
        animation:
            blink-up 2.6s ease-in-out infinite,
            mobile-float-3 8s ease-in-out infinite;
        animation-delay: 1.3s, 2s;
    }

    .circle-4 {
        animation:
            blink-down 3s ease-in-out infinite,
            mobile-float-4 9s ease-in-out infinite;
        animation-delay: 0.3s, 0.5s;
    }

    .circle-5 {
        animation:
            blink-down 2.7s ease-in-out infinite,
            mobile-float-5 7.8s ease-in-out infinite;
        animation-delay: 1s, 1.5s;
    }

    .circle-6 {
        animation:
            blink-up 3.1s ease-in-out infinite,
            mobile-float-6 8.3s ease-in-out infinite;
        animation-delay: 1.7s, 2.5s;
    }
}


/* ------------------------------
   MOBILE — FASTER FLOATING
------------------------------ */

@keyframes mobile-float-1 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(3px, -5px, 0);
    }

    50% {
        transform: translate3d(-4px, -2px, 0);
    }

    75% {
        transform: translate3d(2px, 5px, 0);
    }
}

@keyframes mobile-float-2 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-4px, 2px, 0);
    }

    50% {
        transform: translate3d(2px, -5px, 0);
    }

    75% {
        transform: translate3d(5px, 3px, 0);
    }
}

@keyframes mobile-float-3 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(3px, 3px, 0);
    }

    50% {
        transform: translate3d(-5px, 0, 0);
    }

    75% {
        transform: translate3d(-2px, -5px, 0);
    }
}

@keyframes mobile-float-4 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-3px, -3px, 0);
    }

    50% {
        transform: translate3d(3px, 5px, 0);
    }

    75% {
        transform: translate3d(5px, -2px, 0);
    }
}

@keyframes mobile-float-5 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(5px, -2px, 0);
    }

    50% {
        transform: translate3d(-2px, -5px, 0);
    }

    75% {
        transform: translate3d(-5px, 3px, 0);
    }
}

@keyframes mobile-float-6 {
    0%, 100% {
        transform: translate3d(0, 0, 0);
    }

    25% {
        transform: translate3d(-3px, 5px, 0);
    }

    50% {
        transform: translate3d(3px, 2px, 0);
    }

    75% {
        transform: translate3d(-2px, -4px, 0);
    }
}