0xc485e340…8dfd·#25,809,445·view on Etherscan
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
html,
body {
position: relative;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
background: black;
}
@keyframes blink {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
g.blink-fast {
animation: blink 0.1s steps(1, start) infinite;
}
g.blink-slow {
animation: blink var(--ric-blink-slow) steps(1, start) infinite;
}
#art {
width: 100%;
height: 100%;
background: black;
}
#art img {
max-width: 100%;
height: 100%;
image-rendering: -webkit-optimize-contrast;
-ms-interpolation-mode: nearest-neighbor;
image-rendering: -moz-crisp-edges;
pointer-events: none;
}
#art img,
#art image {
image-rendering: auto;
}
/* start with a blank screen */
#art {
opacity: 0;
visibility: hidden;
}
/* when ready, allow it to render */
html.ready #art {
opacity: 1;
visibility: visible;
}
@keyframes reveal {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.reveal {
opacity: 0;
animation: reveal 0.1s steps(1, start) forwards;
}
/* Phase 3: unfold through center with ease */
g.phase3-unfold{
transform-origin: 400px 400px; /* center of 800x800 */
animation: phase3Unfold var(--dur, 1.6s) cubic-bezier(.22,.61,.36,1) both;
animation-delay: var(--delay, 0s);
}
/* Return from Phase 3 back to original placement */
g.phase3-return{
transform-origin: 400px 400px;
animation: phase3Return var(--retDur, 1.0s) cubic-bezier(.22,.61,.36,1) both;
animation-delay: 0s;
}
/* Outlines: grow in phase 3, then return */
g.phase3-outline{
transform-origin: 400px 400px;
animation: phase3OutlineGrow var(--outlineDur, 0.9s) cubic-bezier(.22,.61,.36,1) both;
animation-delay: var(--outlineDelay, 0s);
}
g.phase3-outline-return{
transform-origin: 400px 400px;
animation: phase3OutlineReturn var(--outlineRetDur, 0.8s) cubic-bezier(.22,.61,.36,1) both;
animation-delay: 0s;
}
g.blink.blink-fast.phase3-unfold {
animation: phase3Unfold var(--dur, 1.6s) cubic-bezier(.22,.61,.36,1) both,
blink 0.1s steps(1, start) infinite;
}
g.blink.blink-fast.phase3-outline {
animation: phase3OutlineGrow var(--outlineDur, 0.9s) cubic-bezier(.22,.61,.36,1) both,
blink 0.1s steps(1, start) infinite;
}
/* Unfold: go to center (50%) */
@keyframes phase3Unfold{
0%{
transform: translate(0px,0px) rotate(0deg) scale(var(--s,1));
}
100%{
transform: translate(var(--toCx,0px), var(--toCy,0px))
rotate(calc(var(--rot,0deg)*0.5))
scale(var(--s,1));
}
}
@keyframes phase3Return{
0%{
transform: translate(calc(var(--toCx,0px) + var(--outDx,0px)),
calc(var(--toCy,0px) + var(--outDy,0px)))
rotate(var(--rot,0deg))
scale(var(--s,1));
}
100%{
transform: translate(0px,0px) rotate(0deg) scale(1);
}
}
@keyframes phase3OutlineGrow{
0%{ transform: scale(1) rotate(0deg); }
100%{ transform: scale(1.2) rotate(calc(var(--rotSign, 1) * 1deg)); }
}
@keyframes phase3OutlineReturn{
0%{ transform: scale(1.2) rotate(calc(var(--rotSign, 1) * 1deg)); }
100%{ transform: scale(1) rotate(0deg); }
}
/* --- Phase toggle panel --- */
#phasePanel{
position: fixed;
left: max(12px, env(safe-area-inset-left));
bottom: max(12px, env(safe-area-inset-bottom));
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: 14px;
background: rgba(20,20,20,.72);
border: 1px solid rgba(255,255,255,.14);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
z-index: 9999;
user-select: none;
}
#phasePanel .panel-body{
display:flex;
align-items:center;
gap:8px;
}
#phasePanel .pbtn{
width: 34px;
height: 34px;
border-radius: 999px;
border: 1px solid rgba(255,255,255,.18);
background: rgba(0,0,0,.25);
color: rgba(255,255,255,.92);
font: 600 13px/1 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
cursor: pointer;
}
#phasePanel .pbtn:hover{ background: rgba(255,255,255,.08); }
#phasePanel .pbtn:active{ transform: translateY(1px); }
#phasePanel .pbtn.active{
background: rgba(255,255,255,.14);
border-color: rgba(255,255,255,.35);
}
#phasePanel .toggle{
width: 34px;
height: 34px;
border-radius: 999px;
border: 1px solid rgba(255,255,255,.18);
background: rgba(0,0,0,.35);
color: rgba(255,255,255,.9);
cursor: pointer;
display:flex;
align-items:center;
justify-content:center;
font: 700 16px/1 system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
}
#phasePanel.collapsed .panel-body{ display:none; }
#art {
touch-action: manipulation;
cursor: pointer;
-webkit-tap-highlight-color: transparent;
user-select: none;
-webkit-user-select: none;
}
foreignObject{overflow: visible}
#art > g,
#art .g-to,
#art foreignObject,
#art img {
pointer-events: none;
}
#phasePanel,
#phasePanel * {
pointer-events: auto;
touch-action: manipulation;
}
#phase-bg {
transform-origin: 400px 400px;
transform-box: view-box;
transition: transform 0.9s cubic-bezier(.22,.61,.36,1);
}
#art.phase3-active #phase-bg {
transform: scale(0.75);
}
</style>
</head>
<body>
<svg id="art" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" width="800" height="800" preserveAspectRatio="xMidYMid meet">
<rect id="phase-bg" width="800" height="800" fill="#111111" />