/* NPC INTELLECT 2.1 — non-blocking motion layer; preserves contrast and existing layout */
:root{--npc-motion-blue:#637bff;--npc-motion-cyan:#32c8ff;--npc-motion-violet:#9170ff}
html{scroll-behavior:smooth}
body{--npc-pointer-x:50%;--npc-pointer-y:20%}
@keyframes npc-enter{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes npc-soft-pulse{0%,100%{opacity:.5}50%{opacity:1}}
@keyframes npc-sweep{from{transform:translateX(-110%)}to{transform:translateX(210%)}}
@keyframes npc-spin{to{transform:rotate(360deg)}}
@keyframes npc-bar-in{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes npc-dot-flow{from{background-position:0 0}to{background-position:48px 0}}
body.npc-motion-ready :is(main,.shell,.npc-app-layout .dash-body){animation:npc-enter .48s ease-out both}
body.npc-motion-ready :is(.panel,.card,.mini-card,.chart-wrap,.npc-intellect-tile){transition:transform .24s ease,box-shadow .24s ease,border-color .24s ease;will-change:auto}
@media(hover:hover) and (pointer:fine){body.npc-motion-ready :is(.mini-card,.npc-intellect-tile):hover{transform:translateY(-3px);box-shadow:0 15px 34px rgba(16,25,62,.23)!important;border-color:#637bff!important}}
body.npc-motion-ready :is(button,.btn,a,select,input,textarea){transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease,transform .18s ease,filter .18s ease}
body.npc-motion-ready :is(button,.btn):not(:disabled):active{transform:scale(.975)}
body.npc-motion-ready :is(button,.btn,a,select,input,textarea):focus-visible{outline:2px solid #63c7ff!important;outline-offset:3px!important}
body.npc-motion-ready .meter-fill{transform-origin:left center;animation:npc-bar-in .8s cubic-bezier(.2,.8,.2,1) both;position:relative;overflow:hidden}
body.npc-motion-ready .meter-fill:after{content:"";position:absolute;inset:0;background:linear-gradient(95deg,transparent 25%,rgba(255,255,255,.24) 50%,transparent 75%);width:55%;animation:npc-sweep 4.5s ease-in-out infinite;pointer-events:none}
body.npc-motion-ready #miniChart{transition:filter .3s ease;display:block}
body.npc-motion-ready #miniChart:hover{filter:brightness(1.09)}
body.npc-motion-ready .npc-intellect-status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#32d7b1;box-shadow:0 0 10px #32d7b177;animation:npc-soft-pulse 2.6s ease-in-out infinite}
body.npc-motion-ready .npc-ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,.25);pointer-events:none;transform:translate(-50%,-50%) scale(0);animation:npc-ripple-expand .55s ease-out forwards}
@keyframes npc-ripple-expand{to{transform:translate(-50%,-50%) scale(5);opacity:0}}
/* Keep all text readable: never override existing black/white contrast rules. */
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}body.npc-motion-ready *,body.npc-motion-ready *::before,body.npc-motion-ready *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
/* Motion for all administrative workspaces: panels, results, tables and progress. */
body.npc-motion-ready :is(#workspace,#results,#dashboard) > :is(section,.panel,.card){animation:npc-enter .52s ease-out both}
body.npc-motion-ready :is(#workspace,#results) table tbody tr{transition:background-color .2s ease,box-shadow .2s ease}
body.npc-motion-ready :is(#workspace,#results) table tbody tr:hover{box-shadow:inset 3px 0 0 #627cff}
body.npc-motion-ready :is(.progress-bar,.progress-fill,[role="progressbar"]){transition:width .7s cubic-bezier(.2,.8,.2,1)}
body.npc-motion-ready :is(.tabs button,.tab,.nav-link){transition:background-color .2s ease,transform .2s ease}
body.npc-motion-ready :is(.tabs button,.tab,.nav-link):hover{transform:translateY(-1px)}
@media(prefers-reduced-motion:reduce){body.npc-motion-ready :is(#workspace,#results,#dashboard)>:is(section,.panel,.card){animation:none!important}}
