<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Trapped Alien</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
min-height: 100vh;
display: grid;
}
.scene {
position: absolute;
inset: 0;
background: radial-gradient(ellipse at bottom, #999 -100%, #001 100%);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.scene h1 {
position: absolute;
bottom: 0;
font-size: 10vmin;
font-family: Poppins, sans-serif;
font-weight: 200;
padding: .2em;
color: transparent;
-webkit-text-fill-color: transparent;
background: linear-gradient(#fff, #000) no-repeat 50% 50% / 100% 125% text;
letter-spacing: -2px;
word-spacing: 2px;
text-align: center;
filter: drop-shadow(0 0 5px indigo) drop-shadow(0 0 50px indigo);
animation: h1-blink 1s linear infinite;
}
@keyframes h1-blink {
50% {
opacity: 0;
}
}
.hole {
--size: 400px;
--eyes-offset: 20%;
--nose-scale: 3;
--body-size: 60%;
--border-width: 3px;
--body: #27E546;
--body-shadow: rgba(0 0 0 / .3);
--body-highlight: rgba(200 255 200 / .7);
--darker-body: color-mix(in srgb, var(--body), black);
--border: var(--border-width) solid black;
--move: 0;
position: relative;
width: var(--size);
aspect-ratio: 2/.625;
background-color: rgb(53, 33, 68);
border: var(--border);
border-radius: 50%;
box-shadow: 0 5px 0px var(--body-shadow);
}
.hole .stars {
--star-color: #fff;
position: absolute;
inset: 0;
background-color: transparent;
border-radius: inherit;
overflow: hidden;
}
.hole .stars::before,
.hole .stars::after {
content: '';
position: absolute;
display: block;
width: 1px;
height: 1px;
background-color: transparent;
}
.hole .stars-1::before {
box-shadow: 330px 183px #fff, 228px 94px #fff, 83px 58px #fff, 268px 129px #fff, 138px 214px #fff, 134px 90px #fff, 170px 88px #fff, 232px 179px #fff, 45px 219px #fff, 290px 91px #fff, 134px 24px #fff, 5px 110px #fff, 391px 95px #fff, 302px 164px #fff, 321px 206px #fff, 176px 103px #fff, 87px 115px #fff, 192px 27px #fff, 37px 196px #fff, 20px 160px #fff, 220px 204px #fff, 126px 87px #fff, 162px 29px #fff, 177px 64px #fff, 246px 143px #fff, 94px 156px #fff, 262px 11px #fff, 161px 20px #fff, 68px 200px #fff, 362px 15px #fff, 284px 126px #fff, 2px 148px #fff, 139px 235px #fff, 170px 202px #fff, 139px 145px #fff, 114px 4px #fff, 370px 17px #fff, 91px 8px #fff, 393px 99px #fff, 29px 161px #fff, 94px 185px #fff, 345px 159px #fff, 136px 149px #fff, 206px 57px #fff, 189px 149px #fff, 260px 172px #fff, 51px 40px #fff, 208px 66px #fff, 351px 75px #fff, 242px 60px #fff, 340px 153px #fff, 3px 93px #fff, 36px 117px #fff, 164px 90px #fff, 223px 40px #fff, 378px 233px #fff, 207px 159px #fff, 390px 133px #fff, 46px 47px #fff, 20px 207px #fff, 216px 90px #fff, 351px 115px #fff, 153px 39px #fff, 218px 120px #fff, 260px 89px #fff, 316px 52px #fff, 106px 123px #fff, 77px 165px #fff, 165px 197px #fff, 23px 17px #fff, 271px 223px #fff, 82px 122px #fff, 34px 22px #fff, 84px 41px #fff, 132px 10px #fff, 285px 197px #fff, 376px 149px #fff, 114px 141px #fff, 161px 123px #fff, 225px 106px #fff, 59px 114px #fff, 208px 236px #fff, 376px 54px #fff, 220px 34px #fff, 173px 101px #fff, 337px 54px #fff, 221px 79px #fff, 253px 28px #fff, 161px 137px #fff, 195px 161px #fff, 84px 82px #fff, 23px 188px #fff, 333px 38px #fff, 176px 10px #fff, 186px 22px #fff, 187px 62px #fff, 21px 62px #fff, 117px 130px #fff, 128px 167px #fff, 351px 34px #fff, 301px 68px #fff, 212px 220px #fff, 287px 232px #fff, 169px 69px #fff, 9px 85px #fff, 118px 54px #fff, 165px 89px #fff, 214px 218px #fff, 311px 195px #fff, 314px 224px #fff, 186px 21px #fff, 240px 8px #fff, 196px 186px #fff, 342px 2px #fff, 173px 23px #fff, 90px 73px #fff, 90px 9px #fff, 9px 174px #fff, 315px 3px #fff, 347px 121px #fff, 137px 105px #fff, 271px 151px #fff, 389px 44px #fff, 133px 36px #fff, 278px 151px #fff, 287px 46px #fff, 311px 48px #fff, 225px 150px #fff, 35px 219px #fff, 135px 235px #fff, 338px 161px #fff, 26px 199px #fff, 176px 166px #fff, 144px 0px #fff, 276px 117px #fff, 366px 79px #fff, 217px 94px #fff, 153px 151px #fff, 162px 130px #fff, 175px 47px #fff, 156px 83px #fff, 111px 57px #fff, 312px 68px #fff, 367px 121px #fff, 37px 207px #fff, 300px 39px #fff, 259px 79px #fff, 170px 225px #fff, 51px 99px #fff, 3px 161px #fff, 134px 90px #fff, 12px 40px #fff, 54px 201px #fff, 25px 72px #fff, 210px 181px #fff, 228px 16px #fff, 322px 192px #fff, 296px 172px #fff, 207px 92px #fff, 12px 190px #fff, 219px 93px #fff, 149px 166px #fff, 307px 57px #fff, 121px 4px #fff, 265px 115px #fff, 247px 62px #fff, 115px 191px #fff, 390px 162px #fff, 349px 54px #fff, 375px 19px #fff, 206px 7px #fff, 305px 195px #fff, 85px 89px #fff, 280px 230px #fff, 219px 118px #fff, 72px 113px #fff, 41px 186px #fff, 105px 63px #fff, 86px 4px #fff, 320px 38px #fff, 387px 22px #fff, 254px 51px #fff, 202px 130px #fff, 236px 79px #fff, 160px 164px #fff, 300px 228px #fff, 85px 134px #fff, 285px 106px #fff, 221px 91px #fff, 95px 53px #fff, 172px 209px #fff, 349px 205px #fff, 97px 133px #fff, 154px 145px #fff, 143px 61px #fff, 191px 29px #fff, 179px 4px #fff, 47px 171px #fff, 369px 42px #fff, 323px 19px #fff;
animation: stars-anim 5s linear infinite;
}
.hole .stars-1::after {
top: 200%;
box-shadow: 330px 183px #fff, 228px 94px #fff, 83px 58px #fff, 268px 129px #fff, 138px 214px #fff, 134px 90px #fff, 170px 88px #fff, 232px 179px #fff, 45px 219px #fff, 290px 91px #fff, 134px 24px #fff, 5px 110px #fff, 391px 95px #fff, 302px 164px #fff, 321px 206px #fff, 176px 103px #fff, 87px 115px #fff, 192px 27px #fff, 37px 196px #fff, 20px 160px #fff, 220px 204px #fff, 126px 87px #fff, 162px 29px #fff, 177px 64px #fff, 246px 143px #fff, 94px 156px #fff, 262px 11px #fff, 161px 20px #fff, 68px 200px #fff, 362px 15px #fff, 284px 126px #fff, 2px 148px #fff, 139px 235px #fff, 170px 202px #fff, 139px 145px #fff, 114px 4px #fff, 370px 17px #fff, 91px 8px #fff, 393px 99px #fff, 29px 161px #fff, 94px 185px #fff, 345px 159px #fff, 136px 149px #fff, 206px 57px #fff, 189px 149px #fff, 260px 172px #fff, 51px 40px #fff, 208px 66px #fff, 351px 75px #fff, 242px 60px #fff, 340px 153px #fff, 3px 93px #fff, 36px 117px #fff, 164px 90px #fff, 223px 40px #fff, 378px 233px #fff, 207px 159px #fff, 390px 133px #fff, 46px 47px #fff, 20px 207px #fff, 216px 90px #fff, 351px 115px #fff, 153px 39px #fff, 218px 120px #fff, 260px 89px #fff, 316px 52px #fff, 106px 123px #fff, 77px 165px #fff, 165px 197px #fff, 23px 17px #fff, 271px 223px #fff, 82px 122px #fff, 34px 22px #fff, 84px 41px #fff, 132px 10px #fff, 285px 197px #fff, 376px 149px #fff, 114px 141px #fff, 161px 123px #fff, 225px 106px #fff, 59px 114px #fff, 208px 236px #fff, 376px 54px #fff, 220px 34px #fff, 173px 101px #fff, 337px 54px #fff, 221px 79px #fff, 253px 28px #fff, 161px 137px #fff, 195px 161px #fff, 84px 82px #fff, 23px 188px #fff, 333px 38px #fff, 176px 10px #fff, 186px 22px #fff, 187px 62px #fff, 21px 62px #fff, 117px 130px #fff, 128px 167px #fff, 351px 34px #fff, 301px 68px #fff, 212px 220px #fff, 287px 232px #fff, 169px 69px #fff, 9px 85px #fff, 118px 54px #fff, 165px 89px #fff, 214px 218px #fff, 311px 195px #fff, 314px 224px #fff, 186px 21px #fff, 240px 8px #fff, 196px 186px #fff, 342px 2px #fff, 173px 23px #fff, 90px 73px #fff, 90px 9px #fff, 9px 174px #fff, 315px 3px #fff, 347px 121px #fff, 137px 105px #fff, 271px 151px #fff, 389px 44px #fff, 133px 36px #fff, 278px 151px #fff, 287px 46px #fff, 311px 48px #fff, 225px 150px #fff, 35px 219px #fff, 135px 235px #fff, 338px 161px #fff, 26px 199px #fff, 176px 166px #fff, 144px 0px #fff, 276px 117px #fff, 366px 79px #fff, 217px 94px #fff, 153px 151px #fff, 162px 130px #fff, 175px 47px #fff, 156px 83px #fff, 111px 57px #fff, 312px 68px #fff, 367px 121px #fff, 37px 207px #fff, 300px 39px #fff, 259px 79px #fff, 170px 225px #fff, 51px 99px #fff, 3px 161px #fff, 134px 90px #fff, 12px 40px #fff, 54px 201px #fff, 25px 72px #fff, 210px 181px #fff, 228px 16px #fff, 322px 192px #fff, 296px 172px #fff, 207px 92px #fff, 12px 190px #fff, 219px 93px #fff, 149px 166px #fff, 307px 57px #fff, 121px 4px #fff, 265px 115px #fff, 247px 62px #fff, 115px 191px #fff, 390px 162px #fff, 349px 54px #fff, 375px 19px #fff, 206px 7px #fff, 305px 195px #fff, 85px 89px #fff, 280px 230px #fff, 219px 118px #fff, 72px 113px #fff, 41px 186px #fff, 105px 63px #fff, 86px 4px #fff, 320px 38px #fff, 387px 22px #fff, 254px 51px #fff, 202px 130px #fff, 236px 79px #fff, 160px 164px #fff, 300px 228px #fff, 85px 134px #fff, 285px 106px #fff, 221px 91px #fff, 95px 53px #fff, 172px 209px #fff, 349px 205px #fff, 97px 133px #fff, 154px 145px #fff, 143px 61px #fff, 191px 29px #fff, 179px 4px #fff, 47px 171px #fff, 369px 42px #fff, 323px 19px #fff;
animation: stars-anim 5s linear infinite;
}
.hole .stars-2::before {
box-shadow: 372px 112px 1px #fff, 76px 22px 1px #fff, 285px 130px 1px #fff, 304px 204px 1px #fff, 374px 114px 1px #fff, 219px 172px 1px #fff, 36px 139px 1px #fff, 249px 158px 1px #fff, 356px 124px 1px #fff, 254px 159px 1px #fff, 253px 37px 1px #fff, 63px 36px 1px #fff, 194px 32px 1px #fff, 294px 145px 1px #fff, 187px 143px 1px #fff, 266px 132px 1px #fff, 83px 88px 1px #fff, 169px 90px 1px #fff, 258px 80px 1px #fff, 348px 232px 1px #fff, 19px 224px 1px #fff, 364px 70px 1px #fff, 363px 103px 1px #fff, 289px 122px 1px #fff, 156px 122px 1px #fff, 385px 154px 1px #fff, 286px 86px 1px #fff, 133px 193px 1px #fff, 145px 53px 1px #fff, 292px 25px 1px #fff, 59px 132px 1px #fff, 69px 31px 1px #fff, 36px 105px 1px #fff, 126px 104px 1px #fff, 4px 153px 1px #fff, 85px 37px 1px #fff, 144px 97px 1px #fff, 115px 38px 1px #fff, 305px 99px 1px #fff, 285px 110px 1px #fff, 285px 17px 1px #fff, 114px 127px 1px #fff, 60px 237px 1px #fff, 322px 189px 1px #fff, 388px 23px 1px #fff, 243px 58px 1px #fff, 40px 168px 1px #fff, 266px 169px 1px #fff, 247px 17px 1px #fff, 142px 114px 1px #fff, 164px 44px 1px #fff, 309px 101px 1px #fff, 74px 66px 1px #fff, 345px 86px 1px #fff, 53px 97px 1px #fff, 69px 45px 1px #fff, 380px 193px 1px #fff, 296px 3px 1px #fff, 349px 195px 1px #fff, 377px 10px 1px #fff, 288px 11px 1px #fff, 6px 210px 1px #fff, 283px 104px 1px #fff, 79px 149px 1px #fff, 138px 84px 1px #fff, 208px 154px 1px #fff, 173px 103px 1px #fff, 43px 185px 1px #fff, 84px 117px 1px #fff, 164px 132px 1px #fff, 348px 236px 1px #fff, 84px 135px 1px #fff, 104px 19px 1px #fff, 296px 219px 1px #fff, 180px 74px 1px #fff, 303px 63px 1px #fff, 245px 197px 1px #fff, 1px 174px 1px #fff, 192px 30px 1px #fff, 82px 86px 1px #fff, 100px 217px 1px #fff, 132px 222px 1px #fff, 376px 88px 1px #fff, 12px 62px 1px #fff, 84px 0px 1px #fff, 108px 193px 1px #fff, 107px 173px 1px #fff, 227px 206px 1px #fff, 228px 126px 1px #fff, 124px 120px 1px #fff, 86px 20px 1px #fff, 24px 136px 1px #fff, 70px 68px 1px #fff, 281px 225px 1px #fff, 143px 181px 1px #fff, 143px 208px 1px #fff, 200px 33px 1px #fff, 107px 173px 1px #fff, 212px 26px 1px #fff, 331px 69px 1px #fff;
animation: stars-anim 10s linear infinite;
}
@keyframes stars-anim {
from {
transform: translateY(0);
}
to {
transform: translateY(calc(-.9 * var(--size)));
}
}
.alien {
--body-glow: color-mix(in srgb, var(--body), transparent);
position: absolute;
width: 100%;
aspect-ratio: 2/1.5;
bottom: -20%;
display: flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 0 5px var(--body-glow)) drop-shadow(0 0 15px var(--body-glow));
}
.alien:hover {
--move: 1;
}
.alien::before {
content: '';
position: absolute;
inset: calc(-.25 * var(--size));
z-index: 0;
}
.alien .head {
position: absolute;
width: 100%;
aspect-ratio: 1/1.2;
mask: radial-gradient(250% 152% at 50% 0%, #000 50%, #0000 calc(50% + 1px));
}
.alien .head__inner {
position: absolute;
top: 25%;
width: 60%;
left: 50%;
translate: -50% 0;
aspect-ratio: 1/.5;
background-color: var(--body);
border-radius: 50% / 100% 100% 0 0;
box-shadow: 0 10px 0px -2px var(--body-highlight) inset;
z-index: 2;
border: var(--border);
transform-origin: 50% 200%;
scale: var(--move);
top: calc(((var(--move)) * 25%) + ((1 - var(--move)) * 85%));
animation: move calc(3s * var(--move)) linear infinite;
transition-property: top, scale;
transition-duration: .3s;
transition-delay: .5s;
}
@keyframes move {
50% {
transform: translate(0, -10px);
}
}
.alien .head__inner::after {
content: '';
position: absolute;
top: 100%;
left: calc(-1 * var(--border-width));
width: 100%;
aspect-ratio: 1/.7;
background:
radial-gradient(100% 170% at 50% 0%, var(--body) 50%, var(--body-shadow) 50%),
linear-gradient(var(--body), var(--body));
border-radius: 50% / 0 0 100% 100%;
border: var(--border);
border-top: none;
}
.alien .head__inner .eyes {
position: absolute;
top: 100%;
width: 100%;
height: 50%;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
gap: var(--eyes-offset);
}
.alien .head__inner .eyes .eye {
--is-right-eye: -1;
height: 135%;
aspect-ratio: 1;
background-color: black;
border-radius: calc(var(--is-right-eye) * 100%) calc((1 - var(--is-right-eye)) * 100%);
box-shadow: 0 10px 0px -1px gray inset, 0 5px 0px var(--body-shadow);
border: var(--border);
transform: skewY(calc(var(--is-right-eye) *10deg));
animation: blink calc(.5s * var(--blink)) cubic-bezier(0.6, -0.28, 0.735, 0.045) infinite;
}
.alien .head__inner .nose {
position: absolute;
width: 25%;
height: 1em;
background:
radial-gradient(circle, black 50%, transparent calc(50% + .5px)) no-repeat calc(100% - (65%)) 50% / calc(var(--nose-scale) * var(--border-width)) calc(var(--nose-scale) * var(--border-width)),
radial-gradient(circle, black 50%, transparent calc(50% + .5px)) no-repeat calc(100% - (35%)) 50% / calc(var(--nose-scale) * var(--border-width)) calc(var(--nose-scale) * var(--border-width));
left: 50%;
translate: -50% 0;
top: 160%;
z-index: 2;
filter: drop-shadow(0 2px 0px var(--body-shadow));
}
.alien .head__inner .mouth {
--m-border-width: calc(var(--border-width) * 3);
--border: var(--m-border-width) solid black;
position: absolute;
width: 25%;
height: 2em;
top: 165%;
z-index: 2;
left: 50%;
translate: -50% 0;
border-bottom: var(--border);
border-radius: 50%;
box-shadow: 0 3px 0px var(--body-shadow);
}
.alien .body {
--rotate-hand: 1;
position: absolute;
top: 90%;
width: var(--body-size);
aspect-ratio: 1 /.5;
z-index: 2;
border-radius: 50% / 100%;
display: flex;
align-items: flex-start;
justify-content: center;
gap: 50%;
animation: hands-move calc(1s * var(--move)) infinite;
}
.alien .body .hand {
--is-right-hand: -1;
display: inline-block;
height: calc(100% - var(--body-size));
aspect-ratio: 1.2/1;
background-color: var(--darker-body);
margin-top: -10%;
border-radius: 50% / 50% 50% 100% 100%;
box-shadow: inset 0 -5px 0px var(--body-shadow), inset 0 3px 0px var(--body-highlight), 0 5px 0px var(--body-shadow);
border: var(--border);
transform-origin: 50% 100%;
transform: rotate(calc(var(--rotate-hand) * var(--is-right-hand) * -20deg)) translateY(calc((1 - var(--move)) * 0%));
opacity: var(--move);
transition-property: transform, opacity;
transition-duration: .3s;
transition-delay: calc(1 - var(--move) * .3s);
}
@keyframes hands-move {
50% {
gap: 60%;
--rotate-hand: .7;
}
}
</style>
</head>
<body>
<div class="scene">
<div class="hole">
<div class="stars stars-1"></div>
<div class="stars stars-2"></div>
<div class="alien">
<div class="head">
<div class="head__inner">
<div class="eyes">
<div class="eye"></div>
<div class="eye" style="--is-right-eye: 1;"></div>
</div>
<div class="nose"></div>
<div class="mouth"></div>
</div>
</div>
<div class="body">
<div class="hand"></div>
<div class="hand" style="--is-right-hand: 1;"></div>
</div>
</div>
</div>
<h1>Approach the hole!</h1>
</div>
</body>
</html>
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.