/* Purple Nexus shared animated visual layer
   Safe across homepage + /trading-agent.
   All ambience is pointer-events:none so it can never block controls. */

.pn-icon{
  width:1.2em;height:1.2em;display:inline-block;vertical-align:-.19em;
  flex:0 0 auto;overflow:visible;transform-origin:50% 55%;
  transition:transform .28s ease,filter .28s ease;
}
.pn-icon--sm{width:1.05em;height:1.05em}
.pn-icon--md{width:1.35em;height:1.35em}
.pn-icon--lg{width:1.75em;height:1.75em}
.pn-icon--xl{width:2.2em;height:2.2em}
.pn-icon-link{display:inline-flex;align-items:center;gap:.45rem}
.pn-icon-shell{display:grid!important;place-items:center}
.pn-icon-shell .pn-icon{width:2rem;height:2rem}
.pn-icon-label{display:inline-flex;align-items:center;gap:.42rem;min-width:0}
.pn-icon-label>span{min-width:0;overflow-wrap:anywhere}

.pn-dance-bob{animation:pnBob 2.7s ease-in-out infinite}
.pn-dance-wiggle{animation:pnWiggle 3.1s ease-in-out infinite}
.pn-dance-bounce{animation:pnBounce 2.5s cubic-bezier(.4,0,.2,1) infinite}
.pn-dance-pulse{animation:pnPulse 2.4s ease-in-out infinite}
.pn-dance-sway{animation:pnSway 3.6s ease-in-out infinite}
.pn-dance-pop{animation:pnPop 3s ease-in-out infinite}
.pn-icon-link:hover .pn-icon,.btn:hover .pn-icon,.contact-card:hover .pn-icon{
  transform:translateY(-2px) scale(1.1) rotate(-4deg);
  filter:drop-shadow(0 6px 10px rgba(138,43,226,.28));
}
@keyframes pnBob{0%,100%{transform:translateY(0) rotate(0)}45%{transform:translateY(-3px) rotate(-3deg)}70%{transform:translateY(1px) rotate(2deg)}}
@keyframes pnWiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-7deg)}40%{transform:rotate(6deg)}60%{transform:rotate(-4deg)}80%{transform:rotate(3deg)}}
@keyframes pnBounce{0%,100%{transform:translateY(0) scale(1)}45%{transform:translateY(-4px) scale(1.03)}58%{transform:translateY(1px) scale(.98)}}
@keyframes pnPulse{0%,100%{transform:scale(1);filter:drop-shadow(0 0 0 rgba(168,85,247,0))}50%{transform:scale(1.08);filter:drop-shadow(0 0 8px rgba(168,85,247,.32))}}
@keyframes pnSway{0%,100%{transform:translateX(0) rotate(0)}35%{transform:translateX(-2px) rotate(-5deg)}70%{transform:translateX(2px) rotate(5deg)}}
@keyframes pnPop{0%,100%{transform:scale(1)}12%{transform:scale(1.11) rotate(-4deg)}24%{transform:scale(.98) rotate(2deg)}38%{transform:scale(1.04)}}

/* Random session ambience */
.pn-ambient{
  --pn-a:rgba(168,85,247,.18);
  --pn-b:rgba(34,211,238,.16);
  --pn-c:rgba(244,114,182,.13);
  position:fixed;inset:0;overflow:hidden;pointer-events:none!important;
  user-select:none;z-index:0;contain:strict;
}
main{position:relative;z-index:1}
section{z-index:1}
footer{position:relative;z-index:1}
.pn-ambient *{pointer-events:none!important}

/* 1: soft snowfall / star-dust */
.pn-bg-snow .pn-snowflake{
  position:absolute;top:-9vh;left:var(--x);width:var(--s);height:var(--s);
  border-radius:50%;background:radial-gradient(circle,#fff 0 28%,rgba(103,232,249,.88) 38%,rgba(168,85,247,.15) 72%,transparent 74%);
  opacity:var(--o);filter:drop-shadow(0 0 5px rgba(125,211,252,.4));
  animation:pnSnowFall var(--d) linear infinite;animation-delay:var(--delay);
}
@keyframes pnSnowFall{
  0%{transform:translate3d(0,-10vh,0) rotate(0deg)}
  50%{transform:translate3d(var(--drift),52vh,0) rotate(160deg)}
  100%{transform:translate3d(calc(var(--drift) * -.45),112vh,0) rotate(340deg)}
}

/* 2: neon horizon */
.pn-bg-horizon::before{
  content:"";position:absolute;left:-10%;right:-10%;bottom:-24vh;height:58vh;
  background:
    linear-gradient(rgba(168,85,247,.14) 1px,transparent 1px),
    linear-gradient(90deg,rgba(34,211,238,.12) 1px,transparent 1px);
  background-size:38px 30px;transform:perspective(500px) rotateX(61deg);
  transform-origin:50% 100%;opacity:.75;animation:pnGridBreath 7s ease-in-out infinite;
}
.pn-bg-horizon::after{
  content:"";position:absolute;left:50%;bottom:16vh;width:min(42vw,420px);aspect-ratio:1;
  transform:translateX(-50%);border-radius:50%;
  background:radial-gradient(circle at 45% 42%,rgba(255,255,255,.74) 0 3%,rgba(250,204,21,.42) 10%,rgba(244,114,182,.27) 34%,rgba(139,92,246,.12) 56%,transparent 70%);
  filter:blur(.2px);animation:pnSunFloat 8s ease-in-out infinite;
}
@keyframes pnGridBreath{0%,100%{opacity:.45;transform:perspective(500px) rotateX(61deg) translateY(0)}50%{opacity:.72;transform:perspective(500px) rotateX(61deg) translateY(10px)}}
@keyframes pnSunFloat{0%,100%{transform:translateX(-50%) translateY(0) scale(1)}50%{transform:translateX(-50%) translateY(-8px) scale(1.035)}}

/* 3: constellation / network */
.pn-bg-constellation .pn-node{
  position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);
  border-radius:50%;background:linear-gradient(135deg,#67E8F9,#A855F7,#F472B6);
  box-shadow:0 0 14px rgba(103,232,249,.24);opacity:var(--o);
  animation:pnNodePulse var(--d) ease-in-out infinite;animation-delay:var(--delay);
}
.pn-bg-constellation .pn-line{
  position:absolute;left:var(--x);top:var(--y);width:var(--w);height:1px;
  transform:rotate(var(--r));transform-origin:left center;
  background:linear-gradient(90deg,transparent,rgba(103,232,249,.22),rgba(168,85,247,.16),transparent);
  opacity:.65;animation:pnLineGlow var(--d) ease-in-out infinite;
}
@keyframes pnNodePulse{0%,100%{transform:scale(.78);opacity:.35}50%{transform:scale(1.25);opacity:.82}}
@keyframes pnLineGlow{0%,100%{opacity:.2}50%{opacity:.62}}

/* 4: aurora ribbons */
.pn-bg-aurora .pn-aurora{
  position:absolute;width:78vw;height:36vw;min-height:180px;border-radius:50%;
  filter:blur(55px);opacity:.22;mix-blend-mode:screen;
  animation:pnAurora 12s ease-in-out infinite alternate;
}
.pn-bg-aurora .pn-aurora:nth-child(1){left:-22vw;top:4vh;background:linear-gradient(90deg,#7C3AED,#22D3EE);transform:rotate(-12deg)}
.pn-bg-aurora .pn-aurora:nth-child(2){right:-30vw;top:28vh;background:linear-gradient(90deg,#F472B6,#8B5CF6);animation-delay:-4s;transform:rotate(13deg)}
.pn-bg-aurora .pn-aurora:nth-child(3){left:15vw;bottom:-18vh;background:linear-gradient(90deg,#22D3EE,#A855F7,#F59E0B);animation-delay:-7s}
@keyframes pnAurora{0%{transform:translate3d(-3%,0,0) rotate(-8deg) scale(.95)}100%{transform:translate3d(6%,5%,0) rotate(8deg) scale(1.08)}}

/* 5: orbit art */
.pn-bg-orbit .pn-orbit{
  position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);
  border:1px solid rgba(168,85,247,.16);border-radius:50%;
  animation:pnOrbitSpin var(--d) linear infinite;animation-delay:var(--delay);
}
.pn-bg-orbit .pn-orbit::before{
  content:"";position:absolute;left:50%;top:-5px;width:10px;height:10px;border-radius:50%;
  background:linear-gradient(135deg,#67E8F9,#F472B6);box-shadow:0 0 10px rgba(103,232,249,.32);
}
.pn-bg-orbit .pn-orbit::after{
  content:"";position:absolute;inset:22%;border:1px dashed rgba(34,211,238,.13);border-radius:50%;
}
@keyframes pnOrbitSpin{to{transform:rotate(360deg)}}

@media(max-width:600px){
  .pn-ambient{opacity:.82}
  .pn-bg-horizon::before{background-size:28px 24px;bottom:-20vh}
  .pn-bg-horizon::after{width:72vw;bottom:18vh}
  .pn-bg-aurora .pn-aurora{width:105vw;height:58vw;filter:blur(42px);opacity:.18}
  .pn-icon-shell .pn-icon{width:1.85rem;height:1.85rem}
}

@media(prefers-reduced-motion:reduce){
  .pn-dance-bob,.pn-dance-wiggle,.pn-dance-bounce,.pn-dance-pulse,.pn-dance-sway,.pn-dance-pop,
  .pn-ambient *,.pn-ambient::before,.pn-ambient::after{animation:none!important}
}
