/* EVIDRYX V9 Motion System — GPU-friendly, responsive and honest about network state.
   Decorative animations never claim that a live financial verification has occurred. */
:root{--ev-motion-ease:cubic-bezier(.18,.78,.24,1);--ev-motion-teal:#45f0bd;--ev-motion-blue:#62bbee}
html{scroll-behavior:smooth}
body{overflow-x:clip}
/* Viewport entrances: enabled by JS, so pages remain usable without scripting. */
.motion-enabled [data-motion-reveal]{opacity:0;transform:translate3d(0,23px,0);filter:blur(5px);transition:opacity .72s var(--ev-motion-ease),transform .8s var(--ev-motion-ease),filter .72s ease;transition-delay:var(--motion-delay,0ms)}
.motion-enabled [data-motion-reveal].motion-visible{opacity:1;transform:translate3d(0,0,0);filter:blur(0)}
/* Subtle glass lighting across customer and admin workspaces. */
:is(.tool-card,.glass,.workspace,.feature,.mined-hero,.overview-grid article,.premium-modal,.route-visual,.diagnostic-card,.case-btn){position:relative}
:is(.tool-card,.overview-grid article,.case-btn,.watchitem,.txrow,.diagnostic-card,.service-tabs button,.tabs button){transition:transform .28s var(--ev-motion-ease),border-color .28s ease,box-shadow .28s ease,background .28s ease}
@media(hover:hover) and (pointer:fine){
 :is(.tool-card,.overview-grid article,.case-btn,.watchitem,.txrow,.service-tabs button,.tabs button):hover{transform:translate3d(0,-3px,0);box-shadow:0 12px 32px rgba(2,222,190,.09)}
 :is(.tool-card,.overview-grid article,.case-btn):hover{border-color:rgba(105,244,207,.65)}
}
:where(a,button,input,select,textarea):focus-visible{outline:2px solid var(--ev-motion-teal);outline-offset:3px}
:where(input,select,textarea){transition:border-color .22s ease,box-shadow .22s ease,background-color .22s ease}
:where(button,a.tool-card,.button-quiet,.primary){-webkit-tap-highlight-color:transparent;touch-action:manipulation}
:where(button,.tool-card,.primary,.button-quiet):active:not(:disabled){transform:scale(.985)}
/* Case status animation: only pulse the CURRENT, observed phase, not future phases. */
.v8-step.current .v8-dot{box-shadow:0 0 0 0 rgba(51,227,184,.25);animation:ev-case-current 2.5s ease-in-out infinite}
@keyframes ev-case-current{60%{box-shadow:0 0 0 8px rgba(51,227,184,0)}100%{box-shadow:0 0 0 0 rgba(51,227,184,0)}}
/* Ambient signal animation behind sections, low-opacity, never obscures controls. */
:is(.mined-hero,.hero,.route-visual,.launch-visual){isolation:isolate}
.mined-hero:before{content:"";pointer-events:none;position:absolute;z-index:0;inset:-120% 45% -120% -45%;background:linear-gradient(115deg,transparent 44%,rgba(72,249,224,.09) 49%,transparent 53%);transform:translateX(-42%);animation:ev-hero-light 13s linear infinite}
@keyframes ev-hero-light{to{transform:translateX(200%)}}
/* Branded loading state appears only during real API calls. */
.ev-api-activity{position:fixed;z-index:9998;top:0;left:0;right:0;pointer-events:none;opacity:0;transform:translateY(-110%);transition:opacity .26s ease,transform .26s ease;display:flex;flex-direction:column;align-items:center;gap:6px; padding-top:env(safe-area-inset-top, 0px)}
.ev-api-activity.ev-active{opacity:1;transform:translateY(0)}
.ev-api-rail{width:100%;height:3px;position:relative;overflow:hidden;background:rgba(24,180,154,.16)}
.ev-api-rail:before{content:"";position:absolute;inset:0;transform:translateX(-110%);width:44%;background:linear-gradient(90deg,transparent,#69ffd7,#57b8ff,transparent);box-shadow:0 0 18px rgba(36,246,198,.7);animation:ev-api-load 1.5s ease-in-out infinite}
.ev-api-label{display:inline-flex;align-items:center;gap:8px;margin:5px 10px 0;padding:7px 13px;border:1px solid rgba(58,218,188,.38);border-radius:999px;background:rgba(5,23,33,.96);font:700 10px/1.3 system-ui,sans-serif;color:#c1fff0;letter-spacing:.045em;box-shadow:0 9px 30px #0008;text-align:center}
.ev-api-label:before{content:"";width:7px;height:7px;flex:0 0 7px;border-radius:50%;background:#66f6cf;box-shadow:0 0 10px #33d9b7;animation:ev-blink 1s ease-in-out infinite}
@keyframes ev-api-load{to{transform:translateX(320%)}}
@keyframes ev-blink{50%{opacity:.28}}
/* Real route diagram: lines and wallet nodes animate AFTER the API returns. */
#routeGraph .node-edge{stroke-dasharray:750;stroke-dashoffset:750;animation:ev-draw-route 1.25s ease var(--edge-delay,0s) both}
#routeGraph .node-circle{transform-box:fill-box;transform-origin:center;animation:ev-node-appear .48s cubic-bezier(.2,1.5,.4,1) var(--node-delay,0s) both;filter:drop-shadow(0 0 10px rgba(66,244,185,.21))}
#routeGraph .node-label,#routeGraph .node-tag{animation:ev-text-appear .65s ease .35s both}
@keyframes ev-draw-route{to{stroke-dashoffset:0}}
@keyframes ev-node-appear{from{opacity:0;transform:scale(.35)}to{opacity:1;transform:scale(1)}}
@keyframes ev-text-appear{from{opacity:0}to{opacity:1}}
/* Wallet visualization gets a translucent moving scan only while actively retrieving records. */
#graphWrap{position:relative;overflow:hidden}
#graphWrap.ev-fetching:after{content:"";position:absolute;z-index:3;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 0%,rgba(46,243,202,.10) 48%,transparent 65%);animation:ev-graph-read 1.75s linear infinite}
#graphWrap.ev-fetching:before{content:"FETCHING PUBLIC TRANSACTION DATA";z-index:4;position:absolute;top:12px;left:12px;font:700 10px/1.4 system-ui,sans-serif;letter-spacing:.1em;color:#b4ffe9;background:rgba(5,20,28,.87);padding:7px 10px;border:1px solid rgba(72,224,195,.3);border-radius:7px}
@keyframes ev-graph-read{from{transform:translateX(-110%)}to{transform:translateX(110%)}}
/* Diagnostic scan: animated needle, tied to real request; no falsely completed bar. */
.scan-panel:not([hidden]){animation:ev-panel-open .44s var(--ev-motion-ease) both}
.scan-panel:not([hidden]) .scan-track{box-shadow:inset 0 0 0 1px rgba(113,255,214,.13),0 0 23px rgba(34,230,181,.1)}
.scan-panel li{animation:ev-list-in .45s var(--ev-motion-ease) both}
@keyframes ev-panel-open{from{opacity:.6;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@keyframes ev-list-in{from{opacity:0;transform:translateX(-11px)}to{opacity:1;transform:translateX(0)}}
/* Activity monitoring: pulse only when the browser has a real, authorized watch count. */
#watchPanel.ev-has-watches .monitor-top h3:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-right:8px;background:#51eec2;box-shadow:0 0 0 3px rgba(81,238,194,.16);animation:ev-blink 2.5s infinite}
/* Dynamic results are drawn in as they are inserted by page logic. */
.ev-motion-pop{animation:ev-list-in .4s var(--ev-motion-ease) both}
button:disabled{cursor:progress}
/* Animated SVG icon accent; restrained to visible icons, not fake status indicators. */
.tool-icon svg,.brand-icon{transition:transform .4s var(--ev-motion-ease),filter .4s ease}
@media(hover:hover){.tool-card:hover .tool-icon svg{transform:scale(1.12) rotate(-3deg)}.brand:hover .brand-icon{transform:rotate(-8deg) scale(1.04);filter:drop-shadow(0 0 15px rgba(57,255,187,.45))}}
@media(max-width:690px){
 .ev-api-label{max-width:min(88vw,320px);font-size:9px}
 :is(.tool-card,.overview-grid article,.case-btn,.watchitem,.txrow):hover{transform:none}
 #graphWrap.ev-fetching:before{font-size:8px;max-width:70%;letter-spacing:.03em}
 .motion-enabled [data-motion-reveal]{transform:translate3d(0,12px,0);filter:none}
}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 .motion-enabled [data-motion-reveal]{opacity:1!important;transform:none!important;filter:none!important;transition:none!important}
 .ev-api-activity,.ev-api-rail:before,.ev-api-label:before,#routeGraph .node-edge,#routeGraph .node-circle,#routeGraph .node-label,#routeGraph .node-tag,.scan-panel,.scan-panel li,.v8-step.current .v8-dot,.mined-hero:before,#graphWrap.ev-fetching:after,.ev-motion-pop,#watchPanel.ev-has-watches .monitor-top h3:before{animation:none!important;transition:none!important}
 #routeGraph .node-edge{stroke-dashoffset:0!important}
 .ev-api-activity{transition:none!important}
 :is(.tool-card,.overview-grid article,.case-btn,.watchitem,.txrow,.service-tabs button,.tabs button):hover{transform:none!important}
}
@media print{.ev-api-activity,[data-motion-reveal]{display:revert!important;opacity:1!important;transform:none!important;filter:none!important}}
