/* ========================================
   Network Splash — NovaPush
   Center logo + 4 platform nodes + particle beams
   Slides out to the right when the site finishes loading.
   ======================================== */

:root{
  --net-bg:#070b16;
  --net-blue:#818CF8;
  --net-cyan:#22D3EE;
  --net-purple:#a97bff;
  --net-grad:linear-gradient(135deg,#22D3EE 0%,#818CF8 45%,#A78BFA 100%);
}

/* ===== Splash overlay ===== */
.net-splash{
  position:fixed;inset:0;z-index:9999;
  display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse 55% 45% at 50% 50%,rgba(10,20,45,.6),rgba(7,11,22,.96)),
             radial-gradient(circle at 30% 20%,rgba(62,224,208,.05),transparent 40%),
             radial-gradient(circle at 70% 80%,rgba(139,92,246,.06),transparent 40%);
  overflow:hidden;
  font-family:'Space Grotesk',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
}
/* Slide-out to the right after load */
.net-splash.is-done{
  animation:netSlideOut .8s cubic-bezier(.55,.06,.3,1) forwards;
  pointer-events:none;
}
/* CSS-only safety net: if JavaScript is blocked or fails to load, the splash
   still disappears on its own after 4s so the page is never stuck. */
.net-splash{animation:netAutoHide .5s ease 4s forwards}
@keyframes netAutoHide{to{opacity:0;visibility:hidden;pointer-events:none}}
@keyframes netSlideOut{
  0%{transform:translateX(0) scale(1);opacity:1;filter:blur(0)}
  45%{opacity:1;filter:blur(0)}
  100%{transform:translateX(120%) scale(.92);opacity:0;filter:blur(8px)}
}

/* ===== Scene (the whole network composition) ===== */
.net-scene{
  position:relative;width:420px;height:420px;
  display:flex;align-items:center;justify-content:center;
  animation:netFadeIn .6s ease both;
}
@keyframes netFadeIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}

/* ===== Orbit rings ===== */
.net-ring{position:absolute;border-radius:50%;pointer-events:none}
.net-ring.r1{width:190px;height:190px;border:1px solid rgba(99,102,241,.10)}
.net-ring.r2{width:280px;height:280px;border:1px dashed rgba(139,92,246,.12)}
.net-ring.r3{width:370px;height:370px;border:1px solid rgba(62,224,208,.08)}

.net-orbit{position:absolute;width:370px;height:370px;border-radius:50%;
  border:1px solid transparent;border-top-color:rgba(62,224,208,.25);
  border-right-color:rgba(99,102,241,.18);
  animation:netSpin 8s linear infinite}
@keyframes netSpin{to{transform:rotate(360deg)}}

/* ===== Center logo (SVG wordmark) ===== */
.net-logo-wrap{position:relative;z-index:5;display:flex;flex-direction:column;
  align-items:center;gap:6px}
.net-logo{
  width:130px;height:130px;
  animation:netLogoPulse 3s ease-in-out infinite;
  filter:drop-shadow(0 0 18px rgba(99,102,241,.35));
}
@keyframes netLogoPulse{
  0%,100%{transform:scale(1);filter:drop-shadow(0 0 18px rgba(99,102,241,.35))}
  50%{transform:scale(1.04);filter:drop-shadow(0 0 28px rgba(139,92,246,.5))}
}
.net-logo .ring-glow{
  animation:netLogoGlow 2.4s ease-in-out infinite;
  transform-origin:center;
}
@keyframes netLogoGlow{
  0%,100%{opacity:.4;stroke-width:1.5}
  50%{opacity:.9;stroke-width:2.5}
}

/* ===== Platform nodes ===== */
.net-node{
  position:absolute;width:56px;height:56px;border-radius:16px;
  display:flex;align-items:center;justify-content:center;
  background:rgba(13,20,38,.85);
  border:1px solid rgba(139,92,246,.18);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  box-shadow:0 8px 24px rgba(0,0,0,.4),inset 0 0 0 1px rgba(255,255,255,.03);
}
.net-node svg{width:30px;height:30px}

.net-node.top{top:12px;left:50%;animation:netNodeTop .7s cubic-bezier(.34,1.56,.64,1) .2s both,netFloatY 4s ease-in-out 1s infinite}
.net-node.right{right:12px;top:50%;animation:netNodeRight .7s cubic-bezier(.34,1.56,.64,1) .35s both,netFloatX 4.6s ease-in-out 1.1s infinite reverse}
.net-node.bottom{bottom:12px;left:50%;animation:netNodeBottom .7s cubic-bezier(.34,1.56,.64,1) .5s both,netFloatY 4.4s ease-in-out 1.3s infinite reverse}
.net-node.left{left:12px;top:50%;animation:netNodeLeft .7s cubic-bezier(.34,1.56,.64,1) .65s both,netFloatX 4.2s ease-in-out 1.2s infinite}

@keyframes netNodeTop{from{opacity:0;transform:translateX(-50%) translateY(20px) scale(.3)}to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}
@keyframes netNodeRight{from{opacity:0;transform:translateY(-50%) translateX(-20px) scale(.3)}to{opacity:1;transform:translateY(-50%) translateX(0) scale(1)}}
@keyframes netNodeBottom{from{opacity:0;transform:translateX(-50%) translateY(-20px) scale(.3)}to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}
@keyframes netNodeLeft{from{opacity:0;transform:translateY(-50%) translateX(20px) scale(.3)}to{opacity:1;transform:translateY(-50%) translateX(0) scale(1)}}
@keyframes netFloatY{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(-6px)}}
@keyframes netFloatX{0%,100%{transform:translateY(-50%) translateX(0)}50%{transform:translateY(-50%) translateX(-6px)}}

/* ripple pulse under nodes */
.net-node::after{
  content:'';position:absolute;inset:-4px;border-radius:18px;
  border:1px solid rgba(139,92,246,.25);
  animation:netRipple 3s ease-out infinite;
}
@keyframes netRipple{0%{opacity:.6;transform:scale(1)}100%{opacity:0;transform:scale(1.6)}}

/* ===== SVG beams layer ===== */
.net-beams{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3}
.net-beam-line{stroke-dasharray:6 8;animation:netBeamDash 1.5s linear infinite}
@keyframes netBeamDash{to{stroke-dashoffset:-28}}

/* ===== Brand text under logo ===== */
.net-brand{
  position:absolute;bottom:-54px;left:50%;transform:translateX(-50%);
  text-align:center;z-index:6;white-space:nowrap;
  animation:netBrandIn .8s ease .9s both;
}
.net-brand .b-title{
  font-size:1.1rem;font-weight:700;letter-spacing:6px;
  background:var(--net-grad);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}
.net-brand .b-sub{
  margin-top:3px;font-size:.66rem;letter-spacing:3px;color:#6b7a99;
  animation:netSubPulse 2s ease-in-out infinite;
}
@keyframes netBrandIn{from{opacity:0;transform:translateX(-50%) translateY(10px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@keyframes netSubPulse{0%,100%{opacity:.5}50%{opacity:1}}

.net-dots{display:flex;gap:5px;justify-content:center;margin-top:10px}
.net-dots span{width:6px;height:6px;border-radius:50%;background:var(--net-cyan);
  animation:netDotBounce 1.2s ease-in-out infinite}
.net-dots span:nth-child(2){animation-delay:.15s;background:var(--net-blue)}
.net-dots span:nth-child(3){animation-delay:.3s;background:var(--net-purple)}
@keyframes netDotBounce{0%,100%{transform:translateY(0);opacity:.4}50%{transform:translateY(-6px);opacity:1}}

/* ===== Responsive ===== */
@media(max-width:480px){
  .net-scene{width:300px;height:300px;transform:scale(.78)}
}

/* Accessibility */
@media (prefers-reduced-motion:reduce){
  .net-orbit,.net-logo,.net-node::after,.net-beam-line,
  .net-brand .b-sub,.net-dots span{animation:none!important}
  .net-splash.is-done{animation:none!important;opacity:0!important;visibility:hidden!important;display:none!important}
}
