/* Decorative activity only; plotted values and progress widths remain data-owned. */
#chart-line,.spark path{animation:market-line-breathe 4s ease-in-out infinite;animation-play-state:paused}
#chart-dot{animation:market-point-breathe 2.8s ease-in-out infinite;animation-play-state:paused;transform-box:fill-box;transform-origin:center}
.mini-progress{position:relative;overflow:hidden}
.mini-progress i{position:relative;overflow:hidden}
.mini-progress i:after{content:'';position:absolute;inset:0;transform:translateX(-110%);background:linear-gradient(100deg,transparent,#ffffff9c,transparent);animation:market-progress-flow 3.6s ease-in-out infinite;animation-play-state:paused}
.win-bars i{transform-origin:center bottom;animation:market-bar-breathe 3.4s ease-in-out infinite;animation-play-state:paused}
.win-bars i:nth-child(3n){animation-delay:-1.1s;animation-duration:3.8s}
.win-bars i:nth-child(3n+1){animation-delay:-2.2s;animation-duration:4.2s}
.bot-visuals-running #chart-line,.bot-visuals-running .spark path,.bot-visuals-running #chart-dot,.bot-visuals-running .mini-progress i:after,.bot-visuals-running .win-bars i{animation-play-state:running}
@keyframes market-line-breathe{0%,100%{filter:brightness(1);opacity:1}50%{filter:brightness(1.45);opacity:.55}}
@keyframes market-point-breathe{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.3);opacity:.65}}
@keyframes market-progress-flow{0%,15%{transform:translateX(-110%)}85%,100%{transform:translateX(110%)}}
@keyframes market-bar-breathe{0%,100%{transform:scaleY(1);opacity:1}50%{transform:scaleY(.65);opacity:.6}}
.chart-panel{position:relative;overflow:hidden}
.chart-wrap{position:relative;overflow:hidden}
.chart-wrap:after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 46%,#b6ff461a 50%,transparent 54%);transform:translateX(-110%);animation:chart-scan 5s linear infinite;animation-play-state:paused}
html[data-theme="light"] .chart-wrap:after{background:linear-gradient(90deg,transparent 46%,#ed1c2412 50%,transparent 54%)}
.bot-visuals-running .chart-wrap:after{animation-play-state:running}
@keyframes chart-scan{from{transform:translateX(-110%)}to{transform:translateX(110%)}}
.snapshot-updated .metric-number,.snapshot-updated #chart-value{animation:snapshot-number-confirm .9s ease-out!important}
@keyframes snapshot-number-confirm{0%{opacity:.5;transform:translateY(3px)}100%{opacity:1;transform:translateY(0)}}
#chart-line,.spark path,#chart-dot{animation:none!important;filter:none!important;opacity:1;transform:none!important}
.chart-wrap:after{display:none}
.spark{overflow:visible}
.spark path{stroke-width:3}
.spark-draw-dot{fill:var(--green)}
html[data-theme="light"] .spark-draw-dot{fill:#ed1c24}
/* Keep mobile animation on transforms/opacity; avoid repeated blur/shadow paints. */
@media(max-width:760px){
 .login-art .energy-halo,.login-art .energy-sparks{display:none}
 .login-art,.brand-icon img,.boot-mark{filter:none!important}
 .bot-power.running,html[data-theme="light"] .bot-power.running{animation:none!important}
 .bot-power.running svg{filter:none!important}
 .api-connect-button{animation:mobile-api-pulse 3s ease-in-out infinite!important;box-shadow:none!important}
 .sidebar,.topbar{backdrop-filter:none!important}
 .snapshot-updated .metric-number,.snapshot-updated #chart-value{animation:none!important}
 .usdt-rain .usdt-coin:nth-child(n+4){display:none}
}
@keyframes mobile-api-pulse{0%,100%{opacity:1}50%{opacity:.78}}
/* Do not flash cached final amounts before the entry count-up starts. */
.counters-pending .metric-number,.counters-pending .metric-foot>span:first-child{visibility:hidden}
#app .metric-number>.counter-integer{display:inline-block;font-size:inherit;font-weight:inherit;color:inherit;text-align:right;font-variant-numeric:tabular-nums;letter-spacing:inherit}
