@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}
@keyframes watchPulse{0%,100%{opacity:1;box-shadow:0 0 4px currentColor}50%{opacity:0.5;box-shadow:0 0 8px currentColor}}
@keyframes nebDrift{0%{transform:translate(0,0) scale(1)}50%{transform:translate(2%,-1%) scale(1.02)}100%{transform:translate(0,0) scale(1)}}
@keyframes flipRingIdle{0%{opacity:0.3}50%{opacity:0.6}100%{opacity:0.3}}
@keyframes spin{from{transform:rotate(0)}
to{transform:rotate(360deg)}
}
@keyframes spinR{from{transform:rotate(0)}
to{transform:rotate(-360deg)}
}
@keyframes floatY{0%,100%{transform:translateY(0)}
50%{transform:translateY(-5px)}
}
@keyframes floatY2{0%,100%{transform:translateY(0)}
50%{transform:translateY(-3px)}
}
@keyframes sweep{0%{transform:translateX(-170%)}
60%{transform:translateX(210%)}
100%{transform:translateX(210%)}
}
@keyframes breatheC{0%,100%{box-shadow:0 0 22px rgba(109,232,225,0.10),0 0 0 1px rgba(109,232,225,0.06)}
50%{box-shadow:0 0 55px rgba(109,232,225,0.26),0 8px 40px rgba(109,232,225,0.12),0 0 0 1px rgba(109,232,225,0.14)}
}
@keyframes glowC{0%,100%{box-shadow:0 0 6px var(--cyan)}
50%{box-shadow:0 0 18px var(--cyan)}
}
@keyframes glowA{0%,100%{box-shadow:0 0 6px var(--amber)}
50%{box-shadow:0 0 16px var(--amber);opacity:0.6}
}
@keyframes glowG{0%,100%{box-shadow:0 0 6px var(--green)}
50%{box-shadow:0 0 14px var(--green)}
}
@keyframes toastIn{from{opacity:0;transform:translateX(24px) scale(0.96)}
to{opacity:1;transform:translateX(0) scale(1)}
}
@keyframes dotBlink{0%,100%{opacity:1}
50%{opacity:0.25}
}
@keyframes materialise{0%{opacity:0;transform:scaleY(0.04) scaleX(0.9);border-color:rgba(95,191,184,0.85);box-shadow:0 0 60px rgba(95,191,184,0.35),inset 0 0 20px rgba(95,191,184,0.12)}
12%{opacity:1;transform:scaleY(0.07) scaleX(1)}
38%{transform:scaleY(0.55) scaleX(1.005)}
62%{transform:scaleY(0.94)}
78%{transform:scaleY(1.025)}
100%{opacity:1;transform:scaleY(1) scaleX(1);border-color:var(--border);box-shadow:none}
}
@keyframes n1pulse{0%,100%{border-color:rgba(220,160,60,0.35);background:rgba(220,160,60,0.05)}
50%{border-color:rgba(220,160,60,0.75);background:rgba(220,160,60,0.09)}
}
@keyframes firePop{0%{box-shadow:0 0 0 transparent}
14%{box-shadow:0 0 70px rgba(80,200,120,0.55),inset 0 0 30px rgba(80,200,120,0.1)}
100%{box-shadow:0 0 22px rgba(80,200,120,0.1)}
}
@keyframes metalShimmer{0%{background-position:200% 0%}
35%{background-position:60% 0%}
50%{background-position:40% 0%}
65%{background-position:60% 0%}
100%{background-position:200% 0%}
}
@keyframes bkPulse{0%,100%{opacity:0.32; filter:drop-shadow(0 0 3px rgba(109,232,225,0.2)) }
50%{opacity:0.9; filter:drop-shadow(0 0 8px rgba(109,232,225,0.7)) }
}
@keyframes lockPulse{0%,100%{text-shadow:0 0 6px rgba(109,232,225,0.4);filter:drop-shadow(0 0 3px rgba(109,232,225,0.2))}
50%{text-shadow:0 0 12px rgba(109,232,225,0.7),0 0 24px rgba(109,232,225,0.3);filter:drop-shadow(0 0 8px rgba(109,232,225,0.5))}
}
@keyframes lockBarPulse{0%,100%{border-left-color:rgba(109,232,225,0.4);box-shadow:inset 3px 0 8px rgba(109,232,225,0.06),inset 0 1px 0 rgba(109,232,225,0.15),inset 0 -1px 0 rgba(0,0,0,0.25),0 4px 16px rgba(0,0,0,0.5),0 0 12px rgba(109,232,225,0.04)}
50%{border-left-color:rgba(109,232,225,0.8);box-shadow:inset 3px 0 12px rgba(109,232,225,0.12),inset 0 1px 0 rgba(109,232,225,0.2),inset 0 -1px 0 rgba(0,0,0,0.25),0 4px 16px rgba(0,0,0,0.5),0 0 18px rgba(109,232,225,0.08)}
}
@keyframes ddPointerDelay{0%,60%{pointer-events:none}100%{pointer-events:all}}
@keyframes walletPulse{0%,100%{box-shadow:0 0 0 0 rgba(79,255,170,0); border-color:rgba(79,255,170,0.25)}
50%{box-shadow:0 0 0 3px rgba(79,255,170,0.08); border-color:rgba(79,255,170,0.45)}
}
@keyframes refDotPulse{0%,100%{transform:scale(1); opacity:0.9}
50%{transform:scale(1.3); opacity:1}
}
@keyframes nudgePulse{0%{transform:scale(1)}
40%{transform:scale(1.35) translateY(3px)}
100%{transform:scale(1)}
}
@keyframes nudgeBob{0%,100%{transform:translateY(0)}
50%{transform:translateY(5px)}
}
@keyframes tfcFloat{0%,100%{transform:translateY(0)}
50%{transform:translateY(-7px)}
}
@keyframes tfcSheen{0%{background-position:200% 50%}
100%{background-position:-200% 50%}
}
@keyframes tfcScan{0%{transform:translateY(-2px); opacity:0}
8%{opacity:1}
92%{opacity:0.8}
100%{transform:translateY(320px); opacity:0}
}
@keyframes tierPulse{0%,100%{box-shadow:0 0 0 0 rgba(109,232,225,0)}
50%{box-shadow:0 0 12px 1px rgba(109,232,225,0.08)}
}
@keyframes tierPulse2{0%,100%{box-shadow:0 0 0 0 rgba(255,215,0,0)}
50%{box-shadow:0 0 12px 1px rgba(255,215,0,0.08)}
}
@keyframes infFlow{from{stroke-dashoffset:0}
to{stroke-dashoffset:-241.0}
}
@keyframes infGlowPulse{0%,100%{opacity:0.4; filter:blur(3px)}
45%{opacity:0.65; filter:blur(4px)}
}
@keyframes infCorePulse{0%,100%{opacity:0.88}
40%{opacity:1; filter:drop-shadow(0 0 4px rgba(200,255,252,1)) drop-shadow(0 0 10px rgba(109,232,225,1))}
65%{opacity:0.92; filter:drop-shadow(0 0 3px rgba(255,215,0,0.8))}
}

/* ═══ PAGE TRANSITIONS ═══ */
@keyframes pageEnter{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:none}}
@keyframes pageExit{0%{opacity:1}100%{opacity:0}}
.scr.page-enter{animation:pageEnter 0.25s cubic-bezier(.16,1,.3,1) forwards}
.scr.page-exit{animation:pageExit 0.15s ease-out forwards}

/* ═══ REDUCED MOTION — respect user preference ═══ */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:0.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:0.01ms !important;
  }
}

/* ═══ EXECUTION CINEMATIC ═══ */
@keyframes execCineVig{
  0%{opacity:0}
  18%{opacity:1}
  75%{opacity:1}
  100%{opacity:0.9}
}
@keyframes execCineSweep{
  from{transform:scaleX(0)}
  to{transform:scaleX(1)}
}
@keyframes execCinePanel{
  from{opacity:0;transform:translateY(10px) scale(0.96)}
  to{opacity:1;transform:translateY(0) scale(1)}
}
@keyframes execCineShimmer{
  to{transform:translateX(320%)}
}
