<div class="wrapper">
	<h1 data-splitting class="line1">Take care of yourselves out there</h1>
	<h2 data-splitting class="line2">..........................................................................</h2>
</div>
@import url('https://fonts.googleapis.com/css?family=Economica:700&display=swap');

* {
	box-sizing: border-box;
}

body {
	font-family: 'Economica', sans-serif;
	font-size: 2rem;
	text-transform: uppercase;
	min-height: 100vh;
	background-color: black;
	color: orchid;
	display: flex;
	align-items: center;
	justify-content: center;
}

.wrapper {
	width: 546px;
	height: 500px;
	position: relative;
}

.line1 .word,
.line2 .char {
	offset-path: path('M.5 159.7C-.9 341.1 228.4 500 273.2 500.5S546.1 350.1 546 159.7c0-75.9-32.9-131.6-97.2-149.8-116.5-33.1-153.6 48.4-175.6 47.8-24.2-.6-66.9-80.5-172.7-50C33.1 27.1 1.1 82 .5 159.7z');
	offset-position: top;
	offset-anchor: center left;
	position: absolute;
	top: 0;
	left: 0;
}

.line1 .word {
	--i: calc(var(--word-total) - var(--word-index));
	offset-distance: calc(var(--i) * 4.2rem + 37rem);
	offset-rotate: auto 90deg;
	opacity: 0;
	animation: words 900ms calc(var(--word-index) * 320ms + 2300ms) cubic-bezier(.43,.13,.29,.69) forwards;
}

.line2 .char {
	--i: calc(var(--char-total) - var(--char-index));
	offset-distance: calc(var(--char-index) * 1% + 64rem);
	opacity: 0;
	animation: dots 200ms calc(var(--i) * 30ms) forwards;
}

@keyframes dots {
	100% {
		opacity: 1;
	}
}

@keyframes words {
	100% {
		opacity: 1;
		offset-distance: calc(var(--i) * 4.2rem + 36rem);
	}
}
Splitting({
	whitespace: false
})

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://unpkg.com/splitting@1.0.6/dist/splitting.min.js