<div class="fire">
	<div class="a">
		<div class="a-1"></div>
		<div class="a-2"></div>
		<div class="a-3"></div>
	</div>
	<div class="b">
		<div class="b-1"></div>
		<div class="b-2"></div>
		<div class="b-3"></div>
		<div class="b-4"></div>
	</div>
</div>
*, *:before, *:after {
	border: 0;
	box-sizing: border-box;
	margin: 0;
	padding: 0;
}
:root {
	--dur: 1s;
	--delay: -0s;
	--state: running;
	--startColor: #dc0;
	--endColor: #c50;
}
body {
	background: #171717;
}
.fire {
	/*-webkit-filter: blur(1px);
	filter: blur(1px);*/
	font-size: 60px;
	margin: 1.5rem auto 0 auto;
/* 	outline: 1px solid #ff0; */
	position: relative;
	width: 2em;
	height: 5.5em;
}
.fire div {
	position: absolute;
	top: 0;
	left: 0;
	will-change: transform;
}
/* Part A */
.a {
	animation: a var(--dur) var(--delay) linear infinite var(--state);
/* 	box-shadow: 0 0 0 1px pink inset; */
}
.a-1 {
	animation: a-1 var(--dur) var(--delay) linear infinite var(--state);
}
.a-2 {
	animation: a-2 var(--dur) var(--delay) linear infinite var(--state);
}
.a-3 {
	animation: a-3 var(--dur) var(--delay) linear infinite var(--state);
}
/* Part B */
.b {
	animation: b var(--dur) var(--delay) linear infinite var(--state);
/* 	box-shadow: 0 0 0 1px cyan inset; */
}
.b-1 {
	animation: b-1 var(--dur) var(--delay) linear infinite var(--state);
}
.b-2 {
	animation: b-2 var(--dur) var(--delay) linear infinite var(--state);
}
.b-3 {
	animation: b-3 var(--dur) var(--delay) linear infinite var(--state);
}
.b-4 {
	animation: b-4 var(--dur) var(--delay) linear infinite var(--state);
}

@keyframes a {
	from, to {
		transform: translate(0.9em,0.8em);
		width: 0.5em;
		height: 0.7em;
	}
	12.5% {
		transform: translate(1.1em,0.1em);
		width: 0.3em;
		height: 0.4em;
	}
	25% {
		transform: translate(1.2em,0);
		width: 0;
		height: 0;
	}32% {
		transform: translate(1em,5.2em);
		width: 0;
		height: 0;
	}
	37.5% {
		transform: translate(0.9em,4.9em);
		width: 0.4em;
		height: 0.3em;
	}
	50% {
		transform: translate(0.7em,4.2em);
		width: 0.7em;
		height: 0.8em;
	}
	62.5% {
		transform: translate(0.4em,2.7em);
		width: 1.3em;
		height: 2.4em;
	}
	75% {
		transform: translate(0.2em,1.5em);
		width: 1.7em;
		height: 3.2em;
	}
	87.5% {
		transform: translate(0.6em,1.1em);
		width: 1.2em;
		height: 2.3em;
	}
}
@keyframes a-1 {
	from, to {
		background-color: var(--endColor);
		border-radius: 70% 0 0 100% / 30% 0 0 50%;
		width: 0.3em;
		height: 0.7em;
	}
	12.5% {
		border-radius: 100% 0 0 100% / 50% 0 0 50%;
		width: 0.2em;
		height: 0.4em;
	}
	25% {
		background-color: var(--endColor);
		width: 0;
		height: 0;
	}
	32% {
		background-color: var(--startColor);
		width: 0;
		height: 0;
	}
	37.5% {
		border-radius: 100% 0 0 0 / 100% 0 0 0;
		width: 0.2em;
		height: 0.3em;
	}
	50% {
		border-radius: 100% 0 20% 100% / 70% 0 20% 30%;
		width: 0.3em;
		height: 0.8em;
	}
	62.5% {
		border-radius: 80% 20% 0 100% / 70% 20% 0 30%;
		transform: translate(0,0);
		width: 0.7em;
		height: 2.2em;
	}
	75% {
		border-radius: 95% 5% 35% 65% / 60% 10% 45% 40%;
		transform: translate(0,0.3em);
		width: 1em;
		height: 2.8em;
	}
	87.5% {
		border-radius: 90% 10% 5% 100% / 40% 10% 5% 60%;
		transform: translate(0,0.1em);
		width: 0.7em;
		height: 1.7em;
	}
}
@keyframes a-2 {
	from, to {
		background-color: var(--endColor);
		border-radius: 50% 50% 0 0 / 100% 100% 0 0;
		transform: translate(0.19em,0);
		width: 0.3em;
		height: 0.2em;
	}
	12.5% {
		border-radius: 50% 50% 50% 0 / 100% 100% 50% 0;
		transform: translate(0.09em,0);
		width: 0.2em;
		height: 0.1em;
	}
	25% {
		background-color: var(--endColor);
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
	32% {
		background-color: var(--startColor);
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
	37.5% {
		border-radius: 0 100% 0 0 / 0 100% 0 0;
		transform: translate(0.15em,0);
		width: 0.1em;
		height: 0.3em;
	}
	50% {
		border-radius: 0 50% 50% 40% / 0 50% 50% 25%;
		transform: translate(0.25em,0);
		width: 0.4em;
		height: 0.8em;
	}
	62.5% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.65em,0.4em);
		width: 0.6em;
		height: 1.4em;
	}
	75% {
		border-radius: 0 100% 100% 0 / 0 30% 70% 0;
		transform: translate(0.95em,0.3em);
		width: 0.5em;
		height: 0.6em;
	}
	87.5% {
		border-radius: 50% 50% 100% 0 / 30% 70% 30% 0;
		transform: translate(0.65em,0);
		width: 0.5em;
		height: 0.4em;
	}
}
@keyframes a-3 {
	from, to {
		background-color: var(--endColor);
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.28em,0.2em);
		width: 0.1em;
		height: 0.4em;
	}
	12.5% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.18em,0.2em);
		width: 0.1em;
		height: 0.2em;
	}
	25% {
		background-color: var(--endColor);
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
	37.5% {
		background-color: var(--startColor);
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
	50% {
		transform: translate(0.29em,0.9em);
		width: 0;
		height: 0;
	}
	62.5% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.67em,1.8em);
		width: 0.1em;
		height: 0.6em;
	}
	75% {
		border-radius: 0 100% 100% 0 / 0 70% 30% 0;
		transform: translate(0.97em,0.9em);
		width: 0.2em;
		height: 1.1em;
	}
	87.5% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.67em,0.4em);
		width: 0.2em;
		height: 1.2em;
	}
}

@keyframes b {
	from, to {
		transform: translate(0.8em,4.4em);
		width: 0.5em;
		height: 0.9em;
	}
	12.5% {
		transform: translate(0.6em,3.8em);
		width: 0.7em;
		height: 1.5em;
	}
	25% {
		transform: translate(0.5em,3.2em);
		width: 1em;
		height: 2em;
	}
	37.5% {
		transform: translate(0.1em,2.7em);
		width: 1.8em;
		height: 2.2em;
	}
	50% {
		transform: translate(0.5em,1.9em);
		width: 1.3em;
		height: 2.3em;
	}
	62.5% {
		transform: translate(0.9em,0.7em);
		width: 0.8em;
		height: 1.5em;
	}
	75% {
		transform: translate(1em,0.2em);
		width: 0.5em;
		height: 0.9em;
	}
	87.5% {
		transform: translate(1.2em,0);
		width: 0.3em;
		height: 0.4em;
	}94% {
		transform: translate(1.3em,0);
		width: 0;
		height: 0;
	}97% {
		transform: translate(1.1em,4.9em);
		width: 0;
		height: 0;
	}
}
@keyframes b-1 {
	from, to {
		background-color: var(--startColor);
		border-radius: 100% 0 0 100% / 50% 0 0 50%;
		transform: translate(0,0.5em);
		width: 0.22em;
		height: 0.3em;
	}
	12.5% {
		border-radius: 100% 0 0 100% / 50% 0 0 50%;
		transform: translate(0,0.5em);
		width: 0.22em;
		height: 1em;
	}
	25% {
		border-radius: 100% 0 15% 95% / 50% 0 15% 50%;
		transform: translate(0,0.4em);
		width: 0.32em;
		height: 1.6em;
	}
	37.5% {
		border-radius: 100% 0 0 100% / 50% 0 0 50%;
		transform: translate(0,0.1em);
		width: 1.02em;
		height: 0.8em;
	}
	50% {
		border-radius: 100% 0 0 100% / 70% 0 0 30%;
		transform: translate(0,0.1em);
		width: 0.52em;
		height: 0.4em;
	}
	62.5% {
		border-radius: 100% 0 0 100% / 80% 0 0 20%;
		transform: translate(0,0);
		width: 0.32em;
		height: 0.7em;
	}
	75% {
		border-radius: 100% 0 0 50% / 50% 0 0 25%;
		transform: translate(0,0.2em);
		width: 0.22em;
		height: 0.7em;
	}
	87.5% {
		border-radius: 100% 0 0 100% / 50% 0 0 50%;
		transform: translate(0,0.1em);
		width: 0.12em;
		height: 0.2em;
	}94% {
		background-color: var(--endColor);
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}97% {
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
}
@keyframes b-2 {
	from, to {
		background-color: var(--startColor);
		border-radius: 80% 50% 0 0 / 20% 20% 50% 0;
		transform: translate(0.2em,0);
		width: 0.12em;
		height: 0.8em;
	}
	12.5% {
		border-radius: 100% 100% 50% 25% / 0 25% 5% 5%;
		transform: translate(0.2em,0);
		width: 0.22em;
		height: 1.4em;
	}
	25% {
		border-radius: 50% 100% 50% 25% / 50% 25% 15% 15%;
		transform: translate(0.3em,0);
		width: 0.42em;
		height: 1.9em;
	}
	37.5% {
		border-radius: 50% 50% 0 100% / 15% 5% 0 50%;
		transform: translate(0.6em,0);
		width: 0.42em;
		height: 2.2em;
	}
	50% {
		border-radius: 50% 50% 100% 15% / 10% 15% 35% 65%;
		transform: translate(0.5em,0);
		width: 0.6em;
		height: 1.6em;
	}
	62.5% {
		border-radius: 0 100% 100% 0 / 0 15% 30% 75%;
		transform: translate(0.3em,0);
		width: 0.3em;
		height: 1.5em;
	}
	75% {
		border-radius: 50% 50% 0 0 / 25% 25% 0 0;
		transform: translate(0.2em,0);
		width: 0.12em;
		height: 0.9em;
	}
	87.5% {
		border-radius: 50% / 50%;
		transform: translate(0.1em,0);
		width: 0.12em;
		height: 0.4em;
	}94% {
		background-color: var(--endColor);
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}97% {
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
}
@keyframes b-3 {
	from, to {
		background-color: var(--startColor);
		border-radius: 0 100% 100% 10% / 0 70% 30% 10%;
		transform: translate(0.3em,0.1em);
		width: 0.2em;
		height: 0.8em;
	}
	12.5% {
		border-radius: 0 100% 100% 10% / 0 70% 30% 10%;
		transform: translate(0.4em,0.3em);
		width: 0.3em;
		height: 1.2em;
	}
	25% {
		border-radius: 0 100% 100% 10% / 0 40% 60% 10%;
		transform: translate(0.7em,0.3em);
		width: 0.3em;
		height: 1.7em;
	}
	37.5% {
		border-radius: 0 100% 100% 0 / 0 40% 60% 0;
		transform: translate(1em,0.1em);
		width: 0.8em;
		height: 1.6em;
	}
	50% {
		border-radius: 0 100% 100% 0 / 0 40% 60% 0;
		transform: translate(0.9em,0.1em);
		width: 0.4em;
		height: 1.3em;
	}
	62.5% {
		border-radius: 0 100% 100% 0 / 0 30% 70% 0;
		transform: translate(0.6em,0.2em);
		width: 0.2em;
		height: 0.9em;
	}
	75% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.3em,0.3em);
		width: 0.2em;
		height: 0.6em;
	}
	87.5% {
		border-radius: 0 100% 100% 0 / 0 50% 50% 0;
		transform: translate(0.19em,0.1em);
		width: 0.1em;
		height: 0.2em;
	}94% {
		background-color: var(--endColor);
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}97% {
		border-radius: 50%;
		transform: translate(0,0);
		width: 0;
		height: 0;
	}
}
@keyframes b-4 {
	from, 37.5%, to {
		background-color: var(--startColor);
		border-radius: 100% 0 0 60% / 30% 0 10% 70%;
		transform: translate(0.9em,1.3em);
		width: 0;
		height: 0;
	}
	50% {
		border-radius: 100% 0 0 60% / 30% 0 10% 70%;
		transform: translate(0.4em,1.4em);
		width: 0.2em;
		height: 1.4em;
	}
	62.5% {
		border-radius: 75% 25% 25% 60% / 50% 50% 100% 40%;
		transform: translate(0,1.5em);
		width: 0.3em;
		height: 1em;
	}
	75% {
		border-radius: 50% 50% 25% 60% / 50% 50% 100% 40%;
		transform: translate(0,1.6em);
		width: 0;
		height: 0;
	}
	94% {
		background-color: var(--endColor);
	}
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.