Files
vnidrop/docs/components/hero-scene.css

248 lines
5.1 KiB
CSS

/* Hero transfer scene */
.hero-visual {
position: relative;
width: min(100%, 730px);
margin: 0;
}
.hero-stage {
--pointer-x: 0;
--pointer-y: 0;
position: relative;
width: 100%;
aspect-ratio: 1.13;
isolation: isolate;
perspective: 1200px;
}
.hero-grid {
position: absolute;
z-index: -3;
inset: 9% 2% 4% 7%;
border: 1px solid rgba(168, 85, 247, 0.14);
border-radius: 50%;
background-image:
linear-gradient(rgba(121, 82, 138, 0.07) 1px, transparent 1px),
linear-gradient(90deg, rgba(121, 82, 138, 0.07) 1px, transparent 1px);
background-size: 32px 32px;
transform: rotateX(64deg) rotateZ(-8deg) translateZ(-70px);
mask-image: radial-gradient(circle, black 10%, transparent 70%);
}
.hero-glow {
position: absolute;
z-index: -2;
border-radius: 50%;
filter: blur(60px);
pointer-events: none;
}
.hero-glow-one {
top: 22%;
right: 8%;
width: 37%;
aspect-ratio: 1;
background: rgba(168, 85, 247, 0.23);
transform: translate(calc(var(--pointer-x) * 12px), calc(var(--pointer-y) * 12px));
}
.hero-glow-two {
bottom: 8%;
left: 28%;
width: 30%;
aspect-ratio: 1;
background: rgba(126, 58, 236, 0.16);
transform: translate(calc(var(--pointer-x) * -9px), calc(var(--pointer-y) * -9px));
}
.hero-scene {
position: absolute;
z-index: 1;
inset: 1% -3% auto -1%;
width: 105%;
overflow: visible;
transform: rotateY(calc(var(--pointer-x) * 1.7deg)) rotateX(calc(var(--pointer-y) * -1.7deg));
transform-origin: center;
transition: transform 180ms ease-out;
}
.scene-laptop {
transform: translate(calc(var(--pointer-x) * -4px), calc(var(--pointer-y) * -4px));
transition: transform 200ms ease-out;
}
.scene-phone {
transform: translate(calc(var(--pointer-x) * 7px), calc(var(--pointer-y) * 5px));
transition: transform 200ms ease-out;
}
.scene-orbits {
transform-origin: 385px 325px;
animation: scene-orbits 30s linear infinite;
}
.laptop-files {
transform-origin: 190px 245px;
animation: laptop-files 6s ease-in-out infinite;
}
.conduit-energy {
animation: conduit-energy 2s linear infinite;
}
.approval-gate {
transform-origin: 440px 443px;
animation: gate-hover 5s ease-in-out infinite;
}
.received-file {
transform-origin: 616px 270px;
animation: received-file 7s cubic-bezier(0.34, 1.2, 0.55, 1) infinite;
}
.packet,
.packet-spark {
opacity: 0;
transform-box: fill-box;
transform-origin: center;
}
.packet-one {
animation: hero-packet-one 7s cubic-bezier(0.45, 0.05, 0.35, 1) 0.6s infinite;
}
.packet-two {
animation: hero-packet-two 7s cubic-bezier(0.45, 0.05, 0.35, 1) 3s infinite;
}
.packet-spark-one {
animation: hero-spark-one 7s ease 0.6s infinite;
}
.packet-spark-two {
animation: hero-spark-two 7s ease 3s infinite;
}
.hero-status {
position: absolute;
z-index: 5;
display: flex;
align-items: center;
border: 1px solid rgba(222, 211, 228, 0.95);
background: rgba(255, 255, 255, 0.9);
box-shadow: 0 15px 45px rgba(49, 27, 61, 0.11);
backdrop-filter: blur(12px);
transition: transform 180ms ease-out;
}
.hero-status-secure {
top: 2%;
right: 5%;
gap: 10px;
padding: 10px 13px 10px 10px;
border-radius: 14px;
transform: translate(calc(var(--pointer-x) * 12px), calc(var(--pointer-y) * 8px)) rotate(2deg);
animation: status-hover 6s ease-in-out infinite;
}
.status-icon {
display: grid;
width: 34px;
height: 34px;
place-items: center;
border-radius: 10px;
background: var(--brand-100);
color: var(--brand-600);
}
.status-icon svg {
width: 17px;
}
.hero-status strong,
.hero-status small {
display: block;
}
.hero-status strong {
color: #2b2530;
font-size: 10px;
line-height: 1.4;
}
.hero-status small {
color: #897f8e;
font-size: 8px;
}
.hero-status-route {
top: 18%;
left: 9%;
gap: 8px;
padding: 7px 11px;
border-radius: 999px;
color: #534b57;
font-family: var(--font-mono);
font-size: 8px;
font-weight: 700;
letter-spacing: 0.04em;
transform: translate(calc(var(--pointer-x) * -8px), calc(var(--pointer-y) * -6px)) rotate(-3deg);
}
.status-pulse,
.live-dot {
display: inline-block;
width: 7px;
height: 7px;
border-radius: 50%;
background: #2bc477;
box-shadow: 0 0 0 4px rgba(43, 196, 119, 0.13);
animation: status-pulse 2.4s ease-in-out infinite;
}
.hero-file-label {
position: absolute;
z-index: 4;
bottom: 7%;
left: 7%;
display: flex;
align-items: center;
gap: 11px;
padding: 10px 13px;
border: 1px solid rgba(222, 211, 228, 0.95);
border-radius: 14px;
background: rgba(255, 255, 255, 0.9);
box-shadow: 0 15px 45px rgba(49, 27, 61, 0.11);
backdrop-filter: blur(12px);
transform: translate(calc(var(--pointer-x) * -10px), calc(var(--pointer-y) * -7px)) rotate(-2deg);
transition: transform 180ms ease-out;
}
.file-type-icon {
display: grid;
width: 37px;
height: 37px;
place-items: center;
border-radius: 10px;
background: linear-gradient(135deg, var(--brand-400), var(--brand-600));
color: white;
font-family: var(--font-mono);
font-size: 8px;
font-weight: 800;
}
.hero-file-label strong,
.hero-file-label small {
display: block;
}
.hero-file-label strong {
font-size: 10px;
}
.hero-file-label small {
color: var(--ink-muted);
font-size: 8px;
}