<div class="pattern1">
	<div>
body,
html {
	height: 100%;
	display: grid;
}

body {
	background: #fff;
	animation: invert 4s cubic-bezier(0.25, 0.125, 0.25, 0.85) infinite -0.65s;
	margin: 0px;
	padding: 0px;
	&:before {
		content: "";
		position: absolute;
		width: 100%;
		height: 100%;
		top: 0;
		left: 0;
		background: blue;
		z-index: 10;
		mix-blend-mode: lighten;
	}
}

.pattern1 {
	position: relative;
	width: 60px;
	height: 224px;
	margin: auto;
	&:before,
	&:after {
		content: "";
		box-shadow: 0 0 0 2px #000;
		position: absolute;
		background-image: url("data:image/svg+xml, %3Csvg width='24' height='24' viewBox='0 0 24 24'  style='transform:scaleY(-1)' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cstyle%3E.dot%7Bstroke:%23000;stroke-linecap:round; stroke-width:4px; animation:bounce 1s cubic-bezier(0.75,0.125,0.25,0.85) infinite;%7D @keyframes bounce%7B 50%25%7B transform:translateY(-9px); %7D %7D.dash%7Bstroke:%23000;stroke-width:2px;transform-origin:6px 6.5px;stroke-linecap:round;animation:turn 1s cubic-bezier(0.25,0.125,0.25,0.45) infinite%7D @keyframes turn%7B 50%25%7B transform:rotate(90deg); %7D 100%25%7B transform:rotate(180deg); %7D %7D;%3C/style%3E%3C/defs%3E%3Cpath class='dash' d='M 6 0 L 6 13'/%3E%3Cpath class='dot' d='M 6 18 L 6 18' /%3E%3C/svg%3E"),
			url("data:image/svg+xml, %3Csvg width='24' height='24' viewBox='0 0 24 24' style='transform:scaleY(-1)' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cstyle%3E.dot%7Bstroke:%23000;stroke-linecap:round; stroke-width:4px; animation:bounce 1s cubic-bezier(0.75,0.125,0.25,0.85) infinite;%7D @keyframes bounce%7B 50%25%7B transform:translateY(-9px); %7D %7D.dash%7Bstroke:%23000;stroke-width:2px;transform-origin:6px 6.5px;stroke-linecap:round;animation:turn 1s cubic-bezier(0.25,0.125,0.25,0.45) infinite%7D @keyframes turn%7B 50%25%7B transform:rotate(90deg); %7D 100%25%7B transform:rotate(180deg); %7D %7D;%3C/style%3E%3C/defs%3E%3Cpath class='dash' d='M 6 0 L 6 13'/%3E%3Cpath class='dot' d='M 6 18 L 6 18' /%3E%3C/svg%3E"),
			linear-gradient(to right, #fff, #fff);
		background-position: 0 calc(50% + 12px), 12px 50%;
		@keyframes bgShift {
			to {
				background-position: 24px calc(50% + 36px), 36px calc(50% + 24px);
			}
		}
	}
	&:before {
		width: 75px;
		height: 75px;
		border-radius: 100%;
		bottom: 100%;
		left: calc(50% - 37.5px);
		animation: bgShift 5s linear infinite,
			bounce 1s cubic-bezier(0.85, 0.25, 0.25, 0.85) infinite,
			invert 4s cubic-bezier(0.25, 0.125, 0.25, 0.85) infinite -0.65s;
		transform: translateY(0) scaleY(0.85) scaleX(1.15);
		transform-origin: bottom;
		@keyframes bounce {
			50% {
				transform: translateY(-112.5px) scaleY(1.05) scaleX(1);
			}
		}
		@keyframes invert {
			12.49% {
				filter: invert(0);
			}
			12.5% {
				filter: invert(1);
			}
			62.49% {
				filter: invert(1);
			}
			62.5% {
				filter: invert(0);
			}
		}
	}
	&:after {
		content: "";
		position: absolute;
		width: 100%;
		height: 100%;
		left: 0;
		top: 0;
		box-shadow: inset 0 0 0 2px #fff, 0 0 0 2px #000;
		-webkit-mask: radial-gradient(ellipse at top, transparent 50px, #000 50px) 50%
				calc(0% - 20px) / 600px 180px no-repeat,
			radial-gradient(ellipse at bottom, transparent 50px, #000 50px) 50%
				calc(100% + 20px) / 600px 180px no-repeat;
		-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 50px);
		animation: bgShift 5s linear infinite,
			turn 4s cubic-bezier(0.25, 0.125, 0.25, 1.15) infinite -0.05s,
			bend 4s ease-in-out infinite;
		@keyframes bend {
			0% {
				-webkit-mask-position: 50% calc(0% - 20px), 50% calc(100% + 50px);
			}
			12.5% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 50px);
			}
			25% {
				-webkit-mask-position: 50% calc(0% - 20px), 50% calc(100% + 50px);
			}
			37.5% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 50px);
			}
			50% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 20px);
			}
			62.5% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 50px);
			}
			75% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 20px);
			}
			87.5% {
				-webkit-mask-position: 50% calc(0% - 50px), 50% calc(100% + 50px);
			}
			100% {
				-webkit-mask-position: 50% calc(0% - 20px), 50% calc(100% + 50px);
			}
		}
		@keyframes turn {
			33% {
				transform: rotate(0deg);
			}
			50% {
				transform: rotate(-180deg);
			}
			82% {
				transform: rotate(-180deg);
			}
			100% {
				transform: rotate(-360deg);
			}
		}
	}
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.