@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap');
* {
margin: 0;
padding: 0;
}
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
perspective: 1000px;
overflow: hidden;
background-color: #212121;
font-family: 'Roboto', sans-serif;
}
h1 {
--cb: cubic-bezier(0.71, 0.73, 0.58, 0.83);
--adur: 4s;
position: relative;
font-size: 10vw;
color: white;
-webkit-box-reflect: below 10px
linear-gradient(transparent, rgba(255, 255, 255, 0.1));
display: flex;
animation: whole_heading_animation var(--cb) var(--adur);
perspective: 1000px;
}
h1::after {
content: '';
position: absolute;
bottom: -10%;
left: 0;
display: block;
width: 100%;
height: 0.7vw;
background-color: #b3e5fc;
animation: draw_line 1.5s var(--adur) both;
}
span {
--cb-span: ease-out;
position: relative;
margin: 0 0.5vw;
animation-timing-function: var(--cb);
animation-duration: var(--adur);
transform-style: preserve-3d;
}
span::after,
span::before {
position: absolute;
left: 0;
top: 0;
}
span::after {
animation: after_animation var(--cb-span) var(--adur) both;
}
span::before {
animation: before_animation var(--cb-span) var(--adur) both;
}
span:nth-child(1) {
--tx-1: 30vw;
--ty-1: -10vw;
--tz-1: -3000px;
--rz-1: 1080deg;
--ry-1: 0deg;
--rx-1: 620deg;
animation-name: letter_1_animation;
}
span:nth-child(1)::after,
span:nth-child(1)::before {
content: 'S';
}
span:nth-child(2) {
--tx-2: 26vw;
--ty-2: 10vw;
--tz-2: -2600px;
--rz-2: 0deg;
--ry-2: -70deg;
--rx-2: -620deg;
animation-name: letter_2_animation;
}
span:nth-child(2)::after,
span:nth-child(2)::before {
content: 't';
}
span:nth-child(3) {
--tx-3: 22vw;
--ty-3: -8vw;
--tz-3: -2200px;
--rz-3: 0deg;
--ry-3: 40deg;
--rx-3: 750deg;
animation-name: letter_3_animation;
}
span:nth-child(3)::after,
span:nth-child(3)::before {
content: 'a';
}
span:nth-child(4) {
--tx-4: 18vw;
--ty-4: 10vw;
--tz-4: -1800px;
--rz-4: 0deg;
--ry-4: -50deg;
--rx-4: -900deg;
animation-name: letter_4_animation;
}
span:nth-child(4)::after,
span:nth-child(4)::before {
content: 'c';
}
span:nth-child(5) {
--tx-5: 14vw;
--ty-5: 0vw;
--tz-5: -1400px;
--rz-5: 80deg;
--ry-5: 1080deg;
--rx-5: -620deg;
animation-name: letter_5_animation;
}
span:nth-child(5)::after,
span:nth-child(5)::before {
content: 'k';
}
span:nth-child(6) {
--tx-6: 10vw;
--ty-6: -8vw;
--tz-6: -1000px;
--rz-6: 100deg;
--ry-6: 920deg;
--rx-6: -720deg;
animation-name: letter_6_animation;
}
span:nth-child(6)::after,
span:nth-child(6)::before {
content: 'O';
}
span:nth-child(7) {
--tx-7: 0vw;
--ty-7: -5vw;
--tz-7: -1000px;
--rz-7: 380deg;
--ry-7: -600deg;
--rx-7: 0deg;
animation-name: letter_7_animation;
}
span:nth-child(7)::after,
span:nth-child(7)::before {
content: 'v';
}
span:nth-child(8) {
--tx-8: -4vw;
--ty-8: 8vw;
--tz-8: -1400px;
--rz-8: 20deg;
--ry-8: 0deg;
--rx-8: 820deg;
animation-name: letter_8_animation;
}
span:nth-child(8)::after,
span:nth-child(8)::before {
content: 'e';
}
span:nth-child(9) {
--tx-9: -8vw;
--ty-9: 0vw;
--tz-9: -1800px;
--rz-9: -100deg;
--ry-9: 0deg;
--rx-9: -1020deg;
animation-name: letter_9_animation;
}
span:nth-child(9)::after,
span:nth-child(9)::before {
content: 'r';
}
span:nth-child(10) {
--tx-10: -12vw;
--ty-10: -4vw;
--tz-10: -2200px;
--rz-10: 100deg;
--ry-10: -500deg;
--rx-10: 1000deg;
animation-name: letter_10_animation;
}
span:nth-child(10)::after,
span:nth-child(10)::before {
content: 'f';
}
span:nth-child(11) {
--tx-11: -16vw;
--ty-11: -15vw;
--tz-11: -2600px;
--rz-11: 0deg;
--ry-11: 10deg;
--rx-11: -1020deg;
animation-name: letter_11_animation;
}
span:nth-child(11)::after,
span:nth-child(11)::before {
content: 'l';
}
span:nth-child(12) {
--tx-12: -20vw;
--ty-12: 0vw;
--tz-12: -3000px;
--rz-12: 0deg;
--ry-12: 60deg;
--rx-12: -620deg;
animation-name: letter_12_animation;
}
span:nth-child(12)::after,
span:nth-child(12)::before {
content: 'o';
}
span:nth-child(13) {
--tx-13: -24vw;
--ty-13: 10vw;
--tz-13: -3400px;
--rz-13: -1080deg;
--ry-13: 200deg;
--rx-13: 0deg;
animation-name: letter_13_animation;
}
span:nth-child(13)::after,
span:nth-child(13)::before {
content: 'w';
}
@keyframes whole_heading_animation {
from {
transform: translateZ(-8000px) scale(0);
opacity: 0;
}
25% {
transform: translateZ(-500px);
opacity: 1;
}
to {
transform: translateZ(0);
}
}
@keyframes draw_line {
from {
transform: translateX(-100%);
opacity: 0;
}
to {
transform: translateX(0);
}
}
@keyframes letter_1_animation {
from {
transform: translate3d(var(--tx-1), var(--ty-1), var(--tz-1))
rotateX(var(--rx-1)) rotateY(var(--ry-1)) rotateZ(var(--rz-1));
}
35% {
transform: translate3d(
calc(var(--tx-1) / 3),
calc(var(--ty-1) / 3),
calc(var(--tz-1) / 3)
)
rotateX(calc(var(--rx-1) / 3)) rotateY(calc(var(--ry-1) / 3))
rotateZ(calc(var(--rz-1) / 3));
}
}
@keyframes letter_2_animation {
from {
transform: translate3d(var(--tx-2), var(--ty-2), var(--tz-2))
rotateX(var(--rx-2)) rotateY(var(--ry-2)) rotateZ(var(--rz-2));
}
35% {
transform: translate3d(
calc(var(--tx-2) / 3),
calc(var(--ty-2) / 3),
calc(var(--tz-2) / 3)
)
rotateX(calc(var(--rx-2) / 3)) rotateY(calc(var(--ry-2) / 3))
rotateZ(calc(var(--rz-2) / 3));
}
}
@keyframes letter_3_animation {
from {
transform: translate3d(var(--tx-3), var(--ty-3), var(--tz-3))
rotateX(var(--rx-3)) rotateY(var(--ry-3)) rotateZ(var(--rz-3));
}
35% {
transform: translate3d(
calc(var(--tx-3) / 3),
calc(var(--ty-3) / 3),
calc(var(--tz-3) / 3)
)
rotateX(calc(var(--rx-3) / 3)) rotateY(calc(var(--ry-3) / 3))
rotateZ(calc(var(--rz-3) / 3));
}
}
@keyframes letter_4_animation {
from {
transform: translate3d(var(--tx-4), var(--ty-4), var(--tz-4))
rotateX(var(--rx-4)) rotateY(var(--ry-4)) rotateZ(var(--rz-4));
}
35% {
transform: translate3d(
calc(var(--tx-4) / 3),
calc(var(--ty-4) / 3),
calc(var(--tz-4) / 3)
)
rotateX(calc(var(--rx-4) / 3)) rotateY(calc(var(--ry-4) / 3))
rotateZ(calc(var(--rz-4) / 3));
}
}
@keyframes letter_5_animation {
from {
transform: translate3d(var(--tx-5), var(--ty-5), var(--tz-5))
rotateX(var(--rx-5)) rotateY(var(--ry-5)) rotateZ(var(--rz-5));
}
35% {
transform: translate3d(
calc(var(--tx-5) / 3),
calc(var(--ty-5) / 3),
calc(var(--tz-5) / 3)
)
rotateX(calc(var(--rx-5) / 3)) rotateY(calc(var(--ry-5) / 3))
rotateZ(calc(var(--rz-5) / 3));
}
}
@keyframes letter_6_animation {
from {
transform: translate3d(var(--tx-6), var(--ty-6), var(--tz-6))
rotateX(var(--rx-6)) rotateY(var(--ry-6)) rotateZ(var(--rz-6));
}
35% {
transform: translate3d(
calc(var(--tx-6) / 3),
calc(var(--ty-6) / 3),
calc(var(--tz-6) / 3)
)
rotateX(calc(var(--rx-6) / 3)) rotateY(calc(var(--ry-6) / 3))
rotateZ(calc(var(--rz-6) / 3));
}
}
@keyframes letter_7_animation {
from {
transform: translate3d(var(--tx-7), var(--ty-7), var(--tz-7))
rotateX(var(--rx-7)) rotateY(var(--ry-7)) rotateZ(var(--rz-7));
}
35% {
transform: translate3d(
calc(var(--tx-7) / 3),
calc(var(--ty-7) / 3),
calc(var(--tz-7) / 3)
)
rotateX(calc(var(--rx-7) / 3)) rotateY(calc(var(--ry-7) / 3))
rotateZ(calc(var(--rz-7) / 3));
}
}
@keyframes letter_8_animation {
from {
transform: translate3d(var(--tx-8), var(--ty-8), var(--tz-8))
rotateX(var(--rx-8)) rotateY(var(--ry-8)) rotateZ(var(--rz-8));
}
35% {
transform: translate3d(
calc(var(--tx-8) / 3),
calc(var(--ty-8) / 3),
calc(var(--tz-8) / 3)
)
rotateX(calc(var(--rx-8) / 3)) rotateY(calc(var(--ry-8) / 3))
rotateZ(calc(var(--rz-8) / 3));
}
}
@keyframes letter_9_animation {
from {
transform: translate3d(var(--tx-9), var(--ty-9), var(--tz-9))
rotateX(var(--rx-9)) rotateY(var(--ry-9)) rotateZ(var(--rz-9));
}
35% {
transform: translate3d(
calc(var(--tx-9) / 3),
calc(var(--ty-9) / 3),
calc(var(--tz-9) / 3)
)
rotateX(calc(var(--rx-9) / 3)) rotateY(calc(var(--ry-9) / 3))
rotateZ(calc(var(--rz-9) / 3));
}
}
@keyframes letter_10_animation {
from {
transform: translate3d(var(--tx-10), var(--ty-10), var(--tz-10))
rotateX(var(--rx-10)) rotateY(var(--ry-10)) rotateZ(var(--rz-10));
}
35% {
transform: translate3d(
calc(var(--tx-10) / 3),
calc(var(--ty-10) / 3),
calc(var(--tz-10) / 3)
)
rotateX(calc(var(--rx-10) / 3)) rotateY(calc(var(--ry-10) / 3))
rotateZ(calc(var(--rz-10) / 3));
}
}
@keyframes letter_11_animation {
from {
transform: translate3d(var(--tx-11), var(--ty-11), var(--tz-11))
rotateX(var(--rx-11)) rotateY(var(--ry-11)) rotateZ(var(--rz-11));
}
35% {
transform: translate3d(
calc(var(--tx-11) / 3),
calc(var(--ty-11) / 3),
calc(var(--tz-11) / 3)
)
rotateX(calc(var(--rx-11) / 3)) rotateY(calc(var(--ry-11) / 3))
rotateZ(calc(var(--rz-11) / 3));
}
}
@keyframes letter_12_animation {
from {
transform: translate3d(var(--tx-12), var(--ty-12), var(--tz-12))
rotateX(var(--rx-12)) rotateY(var(--ry-12)) rotateZ(var(--rz-12));
}
35% {
transform: translate3d(
calc(var(--tx-12) / 3),
calc(var(--ty-12) / 3),
calc(var(--tz-12) / 3)
)
rotateX(calc(var(--rx-12) / 3)) rotateY(calc(var(--ry-12) / 3))
rotateZ(calc(var(--rz-12) / 3));
}
}
@keyframes letter_13_animation {
from {
transform: translate3d(var(--tx-13), var(--ty-13), var(--tz-13))
rotateX(var(--rx-13)) rotateY(var(--ry-13)) rotateZ(var(--rz-13));
}
35% {
transform: translate3d(
calc(var(--tx-13) / 3),
calc(var(--ty-13) / 3),
calc(var(--tz-13) / 3)
)
rotateX(calc(var(--rx-13) / 3)) rotateY(calc(var(--ry-13) / 3))
rotateZ(calc(var(--rz-13) / 3));
}
}
@keyframes before_animation {
10% {
transform: translate3d(0, 0, 0) scale(1);
}
70% {
transform: translate3d(-0, -10vw, -3vw) scale(0.9) skew(-20deg);
opacity: 0.1;
}
to {
transform: translate3d(-0.4vw, -0.4vw, -0.4vw) scale(1);
}
}
@keyframes after_animation {
10% {
transform: translate3d(0, 0, 0) scale(1);
}
70% {
transform: translate3d(2vw, 0, 3vw) scale(2) skew(-20deg);
opacity: 0.5;
}
to {
transform: translate3d(0.4vw, 0.4vw, 0.4vw) scale(1);
}
}