/* Blackmint detail animations (bmfx, add-only). Every rule is scoped to html[data-bmfx] (set by app/bmfx.js only when motion is allowed)
   and to a theme via [data-theme-id]. Transform + opacity only, decorative layers are pointer-events:none. */
html[data-bmfx] #list .pcell,html[data-bmfx] #list .row,html[data-bmfx] #stats .stat{position:relative}
html[data-bmfx] #list .pcell{isolation:isolate}
.bmfx-l,.bmfx-tk,.bmfx-px,.bmfx-shw,.bmfx-hv,.bmfx-ml,.bmfx-ml *{pointer-events:none!important}
html.bmfx-hid [class*="bmfx-"],html.bmfx-hid .bmfx-sp{animation-play-state:paused!important}

/* ---------- price tick ---------- */
.bmfx-tk{position:absolute;display:block;will-change:transform,opacity}
/* Dark: hairline under the price draws left→right, then fades */
html[data-theme-id=dark] .bmfx-tk{left:auto;right:0;width:72%;bottom:1px;height:2px;border-radius:2px;background:#3ddc97;transform-origin:100% 50%;animation:bmfxLine 1.1s cubic-bezier(.2,.7,.2,1) forwards}
html[data-theme-id=dark] .bmfx-tk.dn{background:#ff5c5c}
@keyframes bmfxLine{0%{transform:scaleX(0);opacity:.95}45%{transform:scaleX(1);opacity:.9}100%{transform:scaleX(1);opacity:0}}
/* Light: soft highlighter wash behind the price */
html[data-theme-id=light] .bmfx-tk{top:-3px;bottom:auto;right:-6px;width:calc(100% + 4px);height:1.65em;border-radius:7px;background:rgba(21,128,88,.15);z-index:-1;animation:bmfxWash 1.4s ease-out forwards}
html[data-theme-id=light] .bmfx-tk.dn{background:rgba(208,52,58,.13)}
@keyframes bmfxWash{0%{opacity:0;transform:scale(.94)}25%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1)}}
/* Arcade: four pixels pop out of the price (stepped) */
.bmfx-px{position:absolute;right:-2px;top:.45em;width:0;height:0;display:block}
.bmfx-px i{position:absolute;left:0;top:0;width:4px;height:4px;background:#3ddc97;animation:bmfxPx .6s steps(4) forwards}
.bmfx-px.dn i{background:#ff3b3b}
.bmfx-px i:nth-child(1){--x:8px;--y:-8px}.bmfx-px i:nth-child(2){--x:12px;--y:0px;background:#ffd400}.bmfx-px i:nth-child(3){--x:8px;--y:8px}.bmfx-px i:nth-child(4){--x:16px;--y:-4px;background:#ff6bd6}
@keyframes bmfxPx{0%{transform:translate(0,0);opacity:1}70%{opacity:1}100%{transform:translate(var(--x),var(--y));opacity:0}}

/* ---------- stat-card sweep ---------- */
.bmfx-shw{position:absolute;inset:0;overflow:hidden;border-radius:inherit;z-index:1}
.bmfx-shw i{position:absolute;display:block;will-change:transform,opacity}
html[data-theme-id=dark] .bmfx-shw i{top:-20%;bottom:-20%;left:0;width:38%;background:linear-gradient(100deg,transparent,rgba(61,220,151,.10) 40%,rgba(191,255,227,.16) 50%,rgba(61,220,151,.10) 60%,transparent);transform:translateX(-120%) skewX(-12deg);animation:bmfxSheen 1.5s cubic-bezier(.4,0,.2,1) forwards}
html[data-theme-id=light] .bmfx-shw i{top:-20%;bottom:-20%;left:0;width:45%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.75) 50%,transparent);transform:translateX(-120%) skewX(-12deg);animation:bmfxSheen 1.8s ease-in-out forwards}
@keyframes bmfxSheen{0%{transform:translateX(-120%) skewX(-12deg);opacity:0}15%{opacity:1}100%{transform:translateX(320%) skewX(-12deg);opacity:0}}
html[data-theme-id=arcade] .bmfx-shw i{left:0;right:0;top:0;height:3px;background:#a9b4ff;box-shadow:0 0 6px rgba(169,180,255,.7);opacity:.55;animation:bmfxScan 1.2s steps(10) forwards}
@keyframes bmfxScan{0%{transform:translateY(0);opacity:.6}90%{opacity:.6}100%{transform:translateY(var(--h,80px));opacity:0}}
/* Light: one-time "paper lift" entrance on the cards */
html[data-theme-id=light] #stats .stat.bmfx-lift{animation:bmfxLift .7s cubic-bezier(.2,.8,.2,1) both}
@keyframes bmfxLift{from{opacity:0;transform:translateY(8px)}}

/* ---------- sparkline settle ---------- */
html[data-theme-id=dark] canvas.spk.bmfx-sp{animation:bmfxSpD .7s cubic-bezier(.2,.7,.2,1) both}
@keyframes bmfxSpD{from{opacity:0;transform:translateX(-8px)}}
html[data-theme-id=light] canvas.spk.bmfx-sp{animation:bmfxSpL .9s ease-out both}
@keyframes bmfxSpL{from{opacity:0;transform:translateY(4px) scaleY(.6)}}
html[data-theme-id=arcade] canvas.spk.bmfx-sp{animation:bmfxSpA .5s steps(4) both}
@keyframes bmfxSpA{from{opacity:0}}

/* ---------- coin-row hover (fine pointers only) ---------- */
.bmfx-hv{position:absolute;display:block;z-index:1}
html[data-theme-id=dark] .bmfx-hv{left:12px;right:12px;bottom:0;height:1px;background:linear-gradient(90deg,transparent,#3ddc97 30%,#bfffe3 50%,#3ddc97 70%,transparent);transform-origin:0 50%;animation:bmfxHvD .7s cubic-bezier(.2,.7,.2,1) forwards}
@keyframes bmfxHvD{0%{transform:scaleX(0);opacity:.9}60%{transform:scaleX(1);opacity:.8}100%{transform:scaleX(1);opacity:.35}}
html[data-theme-id=light] .bmfx-hv{top:0;bottom:0;left:0;width:30%;background:linear-gradient(100deg,transparent,rgba(21,128,88,.07) 50%,transparent);animation:bmfxHvL 1s ease-out forwards}
@keyframes bmfxHvL{0%{transform:translateX(-100%);opacity:0}20%{opacity:1}100%{transform:translateX(340%);opacity:0}}
html[data-theme-id=arcade] .bmfx-hv{left:2px;top:50%;width:0;height:0;border-style:solid;border-width:5px 0 5px 7px;border-color:transparent transparent transparent #ffd400;margin-top:-5px;animation:bmfxBlink .8s steps(1) infinite}
@keyframes bmfxBlink{50%{opacity:0}}

/* ---------- mascot ("Minty") on the heart-monitor line ---------- */
.bmfx-ml{position:absolute;overflow:hidden;z-index:4}
/* v1.50b: Minty line-mode host (fixed, click-through, under the nav z30 and sheets; only Minty's own hit area takes taps) */
.bmfx-mh{position:fixed;top:0;right:0;bottom:0;left:0;z-index:25;pointer-events:none!important;contain:layout paint}
.bmfx-m{position:absolute;left:0;top:0;will-change:transform}
.bmfx-mi{transform-origin:50% 100%;will-change:transform}
.bmfx-m svg{display:block;width:100%;height:100%;overflow:visible}
.bmfx-m .lg{transform-box:fill-box;transform-origin:50% 0}
.bmfx-m.walk .lg1{animation:bmfxLeg .3s ease-in-out infinite alternate}
.bmfx-m.walk .lg2{animation:bmfxLeg .3s ease-in-out infinite alternate-reverse}
@keyframes bmfxLeg{from{transform:rotate(-28deg)}to{transform:rotate(28deg)}}
.bmfx-m .ey{transform-box:fill-box;transform-origin:50% 50%;animation:bmfxEye 3.2s steps(1) infinite}
@keyframes bmfxEye{0%,92%,100%{transform:scaleY(1)}94%{transform:scaleY(.12)}}
.bmfx-m .sp{transform-box:fill-box;transform-origin:50% 100%;animation:bmfxSprout 1.6s ease-in-out infinite alternate}
@keyframes bmfxSprout{from{transform:rotate(-10deg)}to{transform:rotate(12deg)}}
/* Arcade: pixel legs swap frames */
.bmfx-m .f2{opacity:0}
.bmfx-m.walk .f1{animation:bmfxF1 .36s steps(1) infinite}
.bmfx-m.walk .f2{animation:bmfxF2 .36s steps(1) infinite}
@keyframes bmfxF1{50%{opacity:0}}
@keyframes bmfxF2{0%{opacity:0}50%{opacity:1}}

@media (prefers-reduced-motion:reduce){[class*="bmfx-"],.bmfx-sp,.bmfx-lift{animation:none!important}.bmfx-ml,.bmfx-mh,.bmfx-tk,.bmfx-px,.bmfx-shw,.bmfx-hv{display:none!important}}
/* v1.44: the strip's tappable bits (socials, the ? tag, recent-spike chips) always paint above Minty, even if a chip pops up under him */
#hbw .bmfm,#hbw .ecgtag,#hbw .spkl{z-index:5}
