mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
191 lines
4.1 KiB
CSS
191 lines
4.1 KiB
CSS
/* Direct / relay network scene */
|
|
.network-visual {
|
|
position: relative;
|
|
width: 100%;
|
|
min-height: 520px;
|
|
overflow: hidden;
|
|
border: 1px solid #302737;
|
|
border-radius: 27px;
|
|
background: radial-gradient(circle at center, rgba(168, 85, 247, 0.1), transparent 47%), #151117;
|
|
}
|
|
|
|
.network-grid {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-image:
|
|
linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
|
|
background-size: 30px 30px;
|
|
mask-image: radial-gradient(circle at center, black, transparent 79%);
|
|
}
|
|
|
|
.network-device {
|
|
position: absolute;
|
|
z-index: 4;
|
|
top: 178px;
|
|
display: grid;
|
|
width: 105px;
|
|
height: 145px;
|
|
place-items: center;
|
|
border: 5px solid #3b3340;
|
|
border-radius: 20px;
|
|
background: linear-gradient(145deg, #29222d, #171419);
|
|
box-shadow: 0 22px 60px rgba(0, 0, 0, 0.38);
|
|
color: #d89bff;
|
|
}
|
|
|
|
.network-device-left { left: 30px; transform: rotate(-5deg); }
|
|
.network-device-right { right: 30px; transform: rotate(5deg); }
|
|
.network-device svg { width: 31px; }
|
|
.network-device small {
|
|
position: absolute;
|
|
bottom: 14px;
|
|
color: #756b79;
|
|
font-family: var(--font-mono);
|
|
font-size: 7px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.09em;
|
|
}
|
|
|
|
.network-device-top {
|
|
position: absolute;
|
|
top: 8px;
|
|
left: 50%;
|
|
width: 35px;
|
|
height: 5px;
|
|
border-radius: 999px;
|
|
background: #080609;
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.network-routes {
|
|
position: absolute;
|
|
z-index: 2;
|
|
inset: 34px 0 auto;
|
|
width: 100%;
|
|
height: calc(100% - 40px);
|
|
overflow: visible;
|
|
}
|
|
|
|
.network-direct-glow,
|
|
.network-direct,
|
|
.network-direct-pulse,
|
|
.network-relay-base,
|
|
.network-relay-line {
|
|
fill: none;
|
|
stroke-linecap: round;
|
|
}
|
|
|
|
.network-direct-glow {
|
|
stroke: rgba(168, 85, 247, 0.26);
|
|
stroke-width: 20;
|
|
filter: url(#network-route-glow);
|
|
}
|
|
|
|
.network-direct {
|
|
stroke: #3d3343;
|
|
stroke-width: 8;
|
|
}
|
|
|
|
.network-direct-pulse {
|
|
stroke: url(#network-route-gradient);
|
|
stroke-width: 3;
|
|
stroke-dasharray: 4 18;
|
|
animation: network-dash 2.2s linear infinite;
|
|
}
|
|
|
|
.network-relay-base {
|
|
stroke: #2e2732;
|
|
stroke-width: 5;
|
|
}
|
|
|
|
.network-relay-line {
|
|
stroke: #776681;
|
|
stroke-width: 2;
|
|
stroke-dasharray: 4 11;
|
|
animation: network-dash 3.4s linear infinite reverse;
|
|
}
|
|
|
|
.network-direct-label {
|
|
position: absolute;
|
|
z-index: 5;
|
|
top: 62px;
|
|
left: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 9px;
|
|
padding: 7px 10px;
|
|
border: 1px solid #372c3c;
|
|
border-radius: 999px;
|
|
background: rgba(25, 20, 28, 0.82);
|
|
color: #9a8fa0;
|
|
font-family: var(--font-mono);
|
|
font-size: 7px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.08em;
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.network-relay-node {
|
|
position: absolute;
|
|
z-index: 5;
|
|
bottom: 39px;
|
|
left: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.relay-core {
|
|
position: relative;
|
|
z-index: 2;
|
|
display: grid;
|
|
width: 66px;
|
|
height: 66px;
|
|
margin-bottom: 11px;
|
|
place-items: center;
|
|
border: 1px solid #5c426a;
|
|
border-radius: 20px;
|
|
background: linear-gradient(145deg, #312139, #1d1721);
|
|
box-shadow: 0 0 45px rgba(168, 85, 247, 0.18);
|
|
color: #d294fc;
|
|
transform: rotate(45deg);
|
|
}
|
|
|
|
.relay-core svg { width: 24px; transform: rotate(-45deg); }
|
|
.network-relay-node strong { color: #d9d1dc; font-size: 10px; }
|
|
.network-relay-node small { color: #756b79; font-size: 7px; }
|
|
|
|
.relay-ring {
|
|
position: absolute;
|
|
top: -18px;
|
|
left: 50%;
|
|
border: 1px solid rgba(168, 85, 247, 0.3);
|
|
border-radius: 50%;
|
|
transform: translateX(-50%);
|
|
animation: relay-ring 3s ease-out infinite;
|
|
}
|
|
|
|
.relay-ring-one { width: 100px; height: 100px; }
|
|
.relay-ring-two { width: 136px; height: 136px; animation-delay: 1.2s; }
|
|
|
|
.network-packet {
|
|
position: absolute;
|
|
z-index: 3;
|
|
display: grid;
|
|
width: 26px;
|
|
height: 32px;
|
|
place-items: center;
|
|
border: 1px solid #aa65d2;
|
|
border-radius: 6px;
|
|
background: #2c2231;
|
|
color: #d69bfa;
|
|
opacity: 0;
|
|
}
|
|
|
|
.network-packet svg { width: 13px; }
|
|
.network-packet-one { animation: network-packet-top 6s ease-in-out infinite; }
|
|
.network-packet-two { animation: network-packet-bottom 7s ease-in-out 2.2s infinite; }
|
|
|