/* =====================================================
   KEYFRAMES
===================================================== */
@keyframes cpulse  { 0%,100% { opacity: .25 } 50% { opacity: 1 } }
@keyframes dblink  { 0%,100% { opacity: .15 } 50% { opacity: .9 } }
@keyframes livepulse { 0%,100% { opacity: 1; transform: scale(1) } 50% { opacity: .4; transform: scale(.75) } }
@keyframes bounce  { 0%,100% { transform: translateY(0) } 50% { transform: translateY(7px) } }
@keyframes wapop   { from { transform: scale(0); opacity: 0 } to { transform: scale(1); opacity: 1 } }

/* =====================================================
   HERO CIRCUIT LINES
===================================================== */
.cline { stroke: #1476BD; stroke-width: 1.5; fill: none; animation: cpulse 3.2s ease-in-out infinite; }
.cline:nth-child(2) { animation-delay: .6s; }
.cline:nth-child(3) { animation-delay: 1.1s; }
.cline:nth-child(4) { animation-delay: 1.6s; }
.cline:nth-child(5) { animation-delay: .4s; }
.cline:nth-child(6) { animation-delay: 2s; }
.cline:nth-child(7) { animation-delay: 1.4s; }
.cline:nth-child(8) { animation-delay: .9s; }
.cdot { fill: #FECE00; animation: dblink 2.6s ease-in-out infinite; }
.cdot:nth-child(odd) { animation-delay: .8s; }

/* =====================================================
   HERO BACKGROUND CIRCUIT TRACKS
===================================================== */
@keyframes ctrackdraw {
  0%   { stroke-dashoffset: 1600; opacity: 0; }
  12%  { opacity: .22; }
  80%  { stroke-dashoffset: 0; opacity: .2; }
  90%  { opacity: .32; }
  100% { stroke-dashoffset: 0; opacity: .14; }
}
@keyframes ctdotpulse {
  0%, 100% { opacity: .12; }
  50%       { opacity: .5; }
}
.ctrack {
  stroke: #1476BD; stroke-width: 1.2; fill: none;
  stroke-linecap: round; stroke-linejoin: round;
  stroke-dasharray: 1600;
  animation: ctrackdraw 9s ease-out infinite;
  opacity: 0;
}
.ctrack:nth-child(1)  { animation-delay: 0s; }
.ctrack:nth-child(2)  { animation-delay: 1s; }
.ctrack:nth-child(3)  { animation-delay: 2s; }
.ctrack:nth-child(4)  { animation-delay: 3s; }
.ctrack:nth-child(5)  { animation-delay: .7s; }
.ctrack:nth-child(6)  { animation-delay: 1.8s; }
.ctrack:nth-child(7)  { animation-delay: 2.6s; }
.ctrack:nth-child(8)  { animation-delay: 4s; }
.ctrack:nth-child(9)  { animation-delay: 1.4s; }
.ctrack:nth-child(10) { animation-delay: 3.5s; }
.ctdot {
  fill: #1476BD;
  animation: ctdotpulse 3s ease-in-out infinite;
}
.ctdot:nth-child(odd) { animation-delay: 1.2s; }

/* =====================================================
   SCROLL REVEAL CLASSES
===================================================== */
.fade-up  { opacity: 0; transform: translateY(28px); transition: opacity .7s ease, transform .7s ease; }
.fade-up.vis { opacity: 1; transform: translateY(0); }

.slide-l  { opacity: 0; transform: translateX(-28px); transition: opacity .7s, transform .7s; }
.slide-l.vis { opacity: 1; transform: translateX(0); }

.slide-r  { opacity: 0; transform: translateX(28px); transition: opacity .7s, transform .7s; }
.slide-r.vis { opacity: 1; transform: translateX(0); }

/* ── Stagger delays ── */
.d1 { transition-delay: .1s; }
.d2 { transition-delay: .2s; }
.d3 { transition-delay: .3s; }
.d4 { transition-delay: .4s; }
.d5 { transition-delay: .5s; }
