/* PAYBACK v10 board: X-ray reads, rows, grid tiles, explore table. Loaded after terminal.css; see DESIGN.md. */
:root{--clean:#86EFAC;--clean-ink:#04210F;--watch:#F5B83D;--risky:#FF4D6D}

/* X-ray verdict chip: mint and solid when clean, tinted and outlined when not */
.xr{position:relative;z-index:1;display:inline-flex;align-items:center;gap:4px;flex:none;height:18px;padding:0 6px 0 4px;border:0;border-radius:4px;font-size:10.5px;font-weight:700;letter-spacing:.01em;line-height:1;white-space:nowrap;cursor:pointer;transition:background .12s,box-shadow .12s,transform .1s}
.xr svg{width:11px;height:11px;flex:none;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.xr b{font-weight:700}
.xr.clean{background:var(--clean);color:var(--clean-ink);box-shadow:0 0 0 1px #86EFAC,0 0 14px -6px #86EFACaa}
.xr.watch{background:#F5B83D17;color:var(--watch);box-shadow:inset 0 0 0 1px #F5B83D40}
.xr.risky{background:#FF4D6D17;color:var(--risky);box-shadow:inset 0 0 0 1px #FF4D6D40}
button.xr.clean:hover,.xr.clean[aria-expanded=true]{background:#A7F3C4;box-shadow:0 0 0 1px #A7F3C4,0 0 18px -4px #86EFACcc}
button.xr.watch:hover,.xr.watch[aria-expanded=true]{background:#F5B83D26;box-shadow:inset 0 0 0 1px #F5B83D80}
button.xr.risky:hover,.xr.risky[aria-expanded=true]{background:#FF4D6D26;box-shadow:inset 0 0 0 1px #FF4D6D80}
/* bigger invisible hit area for fingers, without growing the chip */
@media(pointer:coarse){.xr[data-xr]::after{content:"";position:absolute;inset:-7px -5px}}
.xr:focus-visible{outline:2px solid #86EFAC99;outline-offset:2px}
.pips{display:inline-flex;gap:2px;margin-left:1px}
.pips:empty{display:none}
.pips i{width:4px;height:4px;border-radius:50%;background:currentColor;opacity:.35}
.xr .pips i.good{background:var(--clean);opacity:1}.xr .pips i.watch{background:var(--watch);opacity:1}.xr .pips i.bad{background:var(--risky);opacity:1}
.xr.clean .pips i.good{background:var(--clean-ink);opacity:.55}
.xr-line{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:500;color:var(--muted)}
.xr-line.clean{color:#A7F3C4}
.xr-line.watch{color:#E8C27A}
.xr-line.risky{color:#FF8FA3}

/* X-ray reveal panel (a manual popover, so it also floats above the Blocked drawer) */
.xr-pop{position:fixed;inset:auto;left:0;top:0;margin:0;width:288px;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);overflow:auto;padding:0;border:1px solid var(--line-2);border-radius:10px;background:#0D0F13;color:var(--text);font-size:12px;line-height:1.4;box-shadow:inset 0 2px 0 var(--lvl,var(--line-2)),0 24px 60px -16px #000,0 0 0 1px #00000080;z-index:80}
.xr-pop:popover-open{animation:xr-in .14s var(--ease,ease-out)}
.xr-pop[data-level=clean]{--lvl:var(--clean)}.xr-pop[data-level=watch]{--lvl:var(--watch)}.xr-pop[data-level=risky]{--lvl:var(--risky)}
@keyframes xr-in{from{opacity:0;translate:0 4px}to{opacity:1;translate:0 0}}
.xr-pop[data-side=up]{animation-name:xr-in-up}
@keyframes xr-in-up{from{opacity:0;translate:0 -4px}to{opacity:1;translate:0 0}}
.xr-pop header{display:flex;align-items:center;gap:8px;padding:12px 12px 8px}
.xr-pop header strong{font-size:13px;font-weight:650;min-width:0}
.xr-pop .xr{cursor:default;height:20px;font-size:11px}
.xr-meta{margin-left:auto;flex:none;font-size:11px;color:var(--faint)}
.xr-pop ul{list-style:none;margin:0;padding:0 12px 6px}
.xr-pop li{display:grid;grid-template-columns:14px minmax(0,1fr);gap:8px;align-items:start;padding:6px 0;border-top:1px solid #15171D;color:var(--muted)}
.xr-pop li:first-child{border-top:0}
.xr-pop li svg{width:14px;height:14px;margin-top:1px;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.xr-pop li.good{color:var(--text)}.xr-pop li.good svg{stroke:var(--clean)}
.xr-pop li.watch svg{stroke:var(--watch)}
.xr-pop li.bad{color:var(--text)}.xr-pop li.bad svg{stroke:var(--risky)}
.xr-pop li span{overflow-wrap:anywhere}
.xr-pop footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 12px;border-top:1px solid var(--line);background:#0A0B0E;border-radius:0 0 10px 10px;font-size:11.5px}
.xr-pop footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--faint)}
.xr-pop footer a{flex:none;color:var(--green);font-weight:600}
.xr-pop footer a:hover{color:#A7F3C4;text-decoration:underline;text-underline-offset:3px}

/* toolbar: Clean only toggle */
.clean-toggle{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--line);border-radius:var(--rc);background:var(--panel);color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer}
.clean-toggle i{width:7px;height:7px;border-radius:50%;background:#86EFAC55;transition:background .12s,box-shadow .12s}
.clean-toggle b{color:var(--faint);font-weight:600}
.clean-toggle:hover{border-color:var(--line-2);color:var(--text);background:var(--surface)}
.clean-toggle[aria-pressed=true]{background:#86EFAC14;border-color:#86EFAC55;color:var(--green)}
.clean-toggle[aria-pressed=true] i{background:var(--clean);box-shadow:0 0 0 3px #86EFAC22}
.clean-toggle[aria-pressed=true] b{color:#A7F3C4}
.board-toolbar>button[data-open-blocked]{white-space:nowrap}

/* column headers: the sort select sizes to its value so it never clips */
.col>header{min-width:0}
.col>header h2{white-space:nowrap}
.col>header .column-controls select{width:auto;field-sizing:content;max-width:132px;padding-inline:6px 4px;cursor:pointer}
#watch-tab{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
#watch-tab svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round}
#watch-tab[aria-pressed=true]{color:var(--green);border-color:#86EFAC55;background:#86EFAC12}
#watch-tab[aria-pressed=true] svg{fill:#86EFAC44}
/* column filters: placed by pulse.js in viewport coordinates; wide enough that no label truncates */
.column-filter .popover,.column-filter .popover[class],.tb-pop .popover,.tb-pop .popover[class]{position:fixed;right:auto;bottom:auto;left:8px;top:8px;width:max-content;min-width:292px;max-width:calc(100vw - 16px);overflow:auto;overscroll-behavior:contain;z-index:70}
.column-filter .popover label,.tb-pop .popover label{white-space:nowrap}
.column-filter .popover .note:empty{display:none}
@media(max-width:1100px){#watch-tab{padding:3px 6px}#watch-tab span{display:none}}

.mobile-lanes .clean-toggle,.mobile-lanes .lanes-note{display:none}

/* board rows */
.list .card{container-type:inline-size;transition:background .12s}
.list .card .mid{gap:4px}
.list .card .l1,.list .card .l2,.list .card .l3{flex-wrap:nowrap;min-width:0}
.list .card .sym{min-width:0;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list .card .pb-tag{flex:none;font-size:9.5px;line-height:15px;padding:0 5px}
.list .card .name{min-width:0;flex:0 1 auto}
.list .card .l2>*{flex:none}
.list .card .l3{gap:6px}
.list .card .right{min-width:0;white-space:nowrap}
.list .card .mc,.list .card .v{white-space:nowrap}
.list .card.arrival{animation:card-in .6s var(--ease,ease-out)}
@keyframes card-in{from{background-color:#86EFAC14}to{background-color:transparent}}
.list .card.read-clean .av .av-track{stroke:#86EFAC1f}
/* drop the least useful facts before anything clips */
/* PAYBACK tag: full word on roomy cards, PB on tight ones so the ticker keeps its room */
.pb-tag .pb-short{display:none}
@container (max-width:300px){.card .pb-tag .pb-word{display:none}.card .pb-tag .pb-short{display:inline}}
/* thresholds leave room for the chart column (16% of the card) */
@container (max-width:490px){.card .l2 .tx{display:none}}
@container (max-width:410px){.card .l2 .soc{display:none}}
@container (max-width:340px){.card .pips{display:none}}
@container (max-width:300px){.card .xr-line{display:none}}
@container (max-width:345px){.card .l2 .muted{display:none}}
@media(min-width:761px) and (max-width:1100px){
 .list .card{grid-template-columns:38px minmax(0,1fr) auto;gap:6px;padding-inline:8px}
 .list .card .l1{gap:4px}
 .list .card .pb-tag{font-size:8.5px;padding:0 4px}
 .list .card .xr{font-size:10px;padding-right:5px}
}

/* grid tiles */
/* rows are max-content: auto rows let a fixed-height list squeeze every tile and clip its bottom */
/* tiles slide under the column header through a soft edge instead of a hard crop */
body[data-view=grid] .list:not(#l-blocked){-webkit-mask-image:linear-gradient(#0000,#000 8px);mask-image:linear-gradient(#0000,#000 8px)}
body[data-view=grid] .list:not(#l-blocked){grid-template-columns:repeat(auto-fill,minmax(max(200px,calc(50% - 4px)),1fr));grid-auto-rows:max-content;gap:8px;padding:8px}
body[data-view=grid] .list:not(#l-blocked) .card{display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:8px;height:auto;min-height:0;padding:0 0 10px;overflow:visible;border:1px solid var(--line);border-radius:8px;background-color:var(--panel)}
body[data-view=grid] .list:not(#l-blocked) .card:hover{border-color:var(--line-2)}
body[data-view=grid] .list:not(#l-blocked) .card.read-clean{border-color:#86EFAC2e}
body[data-view=grid] .list:not(#l-blocked) .card::before{display:none}
body[data-view=grid] .list:not(#l-blocked) .card>.av{width:100%;height:auto;aspect-ratio:16/11;align-self:start;border-radius:7px 7px 0 0;overflow:hidden}
body[data-view=grid] .list:not(#l-blocked) .card>.av .pic{inset:0;border-radius:0}
body[data-view=grid] .list:not(#l-blocked) .card .mid{padding:0 10px;gap:5px}
body[data-view=grid] .list:not(#l-blocked) .card .name{display:block;font-size:11px}
body[data-view=grid] .list:not(#l-blocked) .card .pb-tag .pb-word{display:inline}
body[data-view=grid] .list:not(#l-blocked) .card .pb-tag .pb-short{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .l3{display:grid;justify-items:start;gap:5px;padding-top:2px}
/* grid tiles have room for the full read: two lines, then an ellipsis */
body[data-view=grid] .list:not(#l-blocked) .card .l3 .xr-line{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-width:100%;white-space:normal;line-height:1.4}
body[data-view=grid] .list:not(#l-blocked) .card .l3 .pips{display:inline-flex}
body[data-view=grid] .list:not(#l-blocked) .card .l2 .muted{display:inline}
body[data-view=grid] .list:not(#l-blocked) .card .right{display:grid;grid-template-columns:minmax(0,1fr);justify-items:start;gap:4px;padding:8px 10px 0;margin:0 0 0;border-top:1px solid #15171D}
body[data-view=grid] .list:not(#l-blocked) .card .mc{font-size:15px}
body[data-view=grid] .list:not(#l-blocked) .card .v{font-size:11px}
body[data-view=grid] .list:not(#l-blocked) .card .v .up,body[data-view=grid] .list:not(#l-blocked) .card .v .down{display:inline;font-size:11px}
body[data-view=grid] .list:not(#l-blocked) .card .buy{width:100%;height:30px;margin:4px 0 0;justify-content:center;font-size:12px}
@container (min-width:230px){
 body[data-view=grid] .list:not(#l-blocked) .card .right{grid-template-columns:auto minmax(0,1fr);align-items:baseline;column-gap:10px}
 body[data-view=grid] .list:not(#l-blocked) .card .v{justify-self:end}
 body[data-view=grid] .list:not(#l-blocked) .card .buy{grid-column:1/-1}
}

/* explore table */
#explore table{font-size:12.5px}
#explore th{height:34px;padding:0 12px;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:600;background:var(--panel);border-bottom:1px solid var(--line)}
#explore th button{color:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}
#explore th button:hover{color:var(--text)}
#explore th small{font-size:inherit;color:var(--green);margin-left:3px}
#explore th.th-xr{text-align:left}
#explore td{height:48px;padding:0 12px;border-bottom:1px solid #15171D}
#explore tbody tr{transition:background .12s}
#explore tbody tr:hover{background-color:var(--hover)}
#explore tbody tr td:first-child{box-shadow:inset 2px 0 0 transparent;transition:box-shadow .12s}
#explore tbody tr:hover td:first-child{box-shadow:inset 2px 0 0 var(--green)}
#explore .table-coin{max-width:220px}
#explore .table-coin>span{display:grid;grid-template-columns:auto auto;justify-content:start;align-items:center;column-gap:6px;min-width:0}
#explore .table-coin b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}
#explore .table-coin small{grid-column:1/-1}
#explore .table-coin .pb-tag{font-style:normal;font-size:9px;line-height:14px;padding:0 4px}
#explore .xr-cell{text-align:left}
#explore .xr-cell>div{display:flex;align-items:center;gap:8px;min-width:0}
#explore .xr-cell .xr-line{max-width:230px;font-size:12px}
#explore td .buy{display:inline-flex;gap:4px;height:26px;padding:0 10px}
#explore td .buy svg{width:11px;height:11px}

/* Hot seat: the passed coin taking the most buys right now */
.hotseat{position:relative;isolation:isolate;flex:none;display:flex;align-items:center;gap:20px;height:58px;margin:6px 6px 0;padding:0 8px 0 14px;overflow:hidden;border:1px solid #86EFAC33;border-radius:var(--r);background:radial-gradient(90% 260% at 0% 50%,#86EFAC1f,transparent 58%),var(--panel);box-shadow:inset 0 1px 0 #ffffff0a,0 12px 40px -20px #86EFAC66}
.hotseat[hidden]{display:none}
.hotseat::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(105deg,transparent 35%,#86EFAC14 50%,transparent 65%);transform:translateX(-100%);animation:hs-sheen 5s ease-in-out infinite}
@keyframes hs-sheen{0%,55%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.hs-label{display:flex;align-items:center;gap:8px;flex:none;font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--green);white-space:nowrap}
.hs-label i,.hs-over::before{width:8px;height:8px;border-radius:50%;background:var(--clean);box-shadow:0 0 0 0 #86EFAC88;animation:hs-ember 1.6s ease-out infinite}
@keyframes hs-ember{0%{box-shadow:0 0 0 0 #86EFAC99}100%{box-shadow:0 0 0 8px #86EFAC00}}
.hs-coin{display:flex;align-items:center;gap:10px;min-width:0;flex:0 1 auto}
.hs-coin .pic{position:relative;inset:auto;flex:none;width:38px;height:38px;border-radius:8px;box-shadow:0 0 0 1px #86EFAC44,0 0 18px -4px #86EFAC88}
.hs-id{display:grid;gap:2px;min-width:0}
.hs-id b{font-size:15px;font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hs-id small{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}
.hs-id .hs-over{display:none}
.hotseat .xr{flex:none}
.hs-stat{display:grid;gap:3px;flex:none;white-space:nowrap}
.hs-stat i{font-style:normal;font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--faint)}
.hs-stat b{font-size:14px;font-weight:700;line-height:1.1}
.hs-buys b{color:var(--up)}
.hs-mc b{font-size:16px;color:#fff}
.hs-share{grid-template-columns:auto 52px;column-gap:8px;align-items:center}
.hs-share i{grid-column:1/-1}
.hs-bar{display:block;height:4px;border-radius:2px;background:#FF4D6D55;overflow:hidden}
.hs-bar em{display:block;height:100%;background:var(--up);border-radius:2px}
.hotseat .buy{margin-left:auto;flex:none;height:32px;padding:0 16px;font-size:12.5px}
.hotseat[data-fx=takeover]{animation:bd-takeover 1.1s var(--ease,ease-out)}
@keyframes bd-takeover{0%{border-color:#A7F3C4;box-shadow:inset 0 1px 0 #ffffff0a,0 0 0 3px #86EFAC55,0 12px 50px -10px #86EFACaa}100%{border-color:#86EFAC33;box-shadow:inset 0 1px 0 #ffffff0a,0 12px 40px -20px #86EFAC66}}
.hotseat[data-fx=big]{animation:bd-seat .8s ease-out}
@keyframes bd-seat{0%{background-color:#86EFAC2a}100%{background-color:var(--panel)}}
@media(max-width:1280px){.hotseat .hs-since{display:none}}
@media(max-width:1100px){.hotseat{gap:14px}.hotseat .hs-share,.hotseat .hs-ch{display:none}.hs-id small{max-width:110px}}

/* big buys: the card jolts and flashes, the quick-buy pill pulses */
.list .card[data-fx=big]{animation:bd-big .8s ease-out}
.list .card[data-fx=whale]{animation:bd-whale 1.1s ease-out}
@keyframes bd-big{0%{translate:0;background-color:#86EFAC24}12%{translate:-2px 0}24%{translate:2px 0}36%{translate:-1px 0}48%{translate:0}100%{background-color:transparent}}
@keyframes bd-whale{0%{translate:0;background-color:#86EFAC33;box-shadow:inset 3px 0 0 var(--clean)}8%{translate:-3px 0}16%{translate:3px 0}24%{translate:-3px 0}32%{translate:2px 0}40%{translate:-1px 0}50%{translate:0}100%{background-color:transparent;box-shadow:inset 3px 0 0 transparent}}
.buy[data-fx=glow]{animation:bd-glow 1s ease-out}
@keyframes bd-glow{0%{background:#86EFAC40;box-shadow:0 0 0 0 #86EFACaa,0 0 22px -2px #86EFACcc}100%{box-shadow:0 0 0 8px #86EFAC00,0 0 0 0 transparent}}

/* fallback avatars: ticker on a mint-seeded gradient */
.pic[style*="--ha"]{background:radial-gradient(120% 90% at 20% 10%,hsl(var(--ha) 70% 40% / .55),transparent 60%),linear-gradient(140deg,hsl(var(--ha) 45% 20%),hsl(var(--hb) 55% 11%))}
.pic[style*="--ha"] b{color:hsl(var(--ha) 85% 82%);font-weight:800;letter-spacing:-.02em;text-shadow:0 1px 8px #0006}
body[data-view=grid] .list:not(#l-blocked) .card>.av .pic b{font-size:44px}

/* chart previews: last hour of minute candles, green when up over the window, red when down */
.svg-defs{position:absolute;width:0;height:0;overflow:hidden}
.mini{position:relative;display:block;min-width:0;height:30px;pointer-events:none}
.mini svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.mini polyline{fill:none;stroke-width:1.5;vector-effect:non-scaling-stroke;stroke-linejoin:round;stroke-linecap:round}
.mini.up polyline{stroke:var(--up)}.mini.down polyline{stroke:var(--down)}
.mini b{display:none}
.mini:not(.ready):not(.none)::before{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:linear-gradient(90deg,transparent,#ffffff1a 30%,#ffffff1a 70%,transparent);background-size:200% 100%;animation:mini-wait 1.4s linear infinite}
@keyframes mini-wait{from{background-position:100% 0}to{background-position:-100% 0}}
.mini.none{visibility:hidden}
.mini.ready{animation:mini-in .3s ease-out}
@keyframes mini-in{from{opacity:0}to{opacity:1}}
/* board rows: avatar | facts | chart | numbers */
.list .card{--avw:50px;grid-template-columns:var(--avw) minmax(0,1fr) 16% auto}
.list .card>.av{grid-column:1;grid-row:1}.list .card>.mid{grid-column:2;grid-row:1}.list .card>.mini{grid-column:3;grid-row:1;align-self:center;height:34px}.list .card>.right{grid-column:4;grid-row:1}
@media(min-width:761px) and (max-width:1100px){.list .card{--avw:38px}}
/* narrow three-column tablets: the chart sits quietly behind the numbers instead of taking a column */
@media(min-width:761px) and (max-width:960px){.list .card{grid-template-columns:var(--avw) minmax(0,1fr) auto}.list .card>.mini{grid-column:3;opacity:.4;height:52px;z-index:0}.list .card>.right{grid-column:3;position:relative;z-index:1}}
#l-blocked .card{grid-template-columns:var(--avw) minmax(0,1fr) 84px auto}
@media(max-width:760px){.list .card{--avw:48px}}
/* grid tiles: a full-width chart under the artwork */
body[data-view=grid] .list:not(#l-blocked) .card>.mini{grid-column:1;grid-row:auto;height:44px;margin:-2px 10px -2px;opacity:1;z-index:auto;border-bottom:1px solid #15171D;padding-bottom:6px;box-sizing:content-box}
body[data-view=grid] .list:not(#l-blocked) .card>.mini svg{height:44px}
body[data-view=grid] .list:not(#l-blocked) .card>.mini b{display:block;position:absolute;right:0;top:0;font-size:10.5px;font-weight:700;padding:1px 5px;border-radius:4px;background:#050607b3}
body[data-view=grid] .list:not(#l-blocked) .card>.mini.up b{color:var(--up)}body[data-view=grid] .list:not(#l-blocked) .card>.mini.down b{color:var(--down)}
body[data-view=grid] .list:not(#l-blocked) .card>.av,body[data-view=grid] .list:not(#l-blocked) .card>.mid,body[data-view=grid] .list:not(#l-blocked) .card>.right{grid-column:1;grid-row:auto}
/* explore and hot seat */
#explore th.th-mini{text-align:left}
#explore td.mini-cell{width:96px;padding-inline:8px}
#explore td.mini-cell .mini{width:88px;height:26px}
.hotseat>.mini{flex:0 0 120px;height:34px}
@media(max-width:1280px){.hotseat>.mini{flex-basis:80px}}

/* trade sounds toggle (sounds are off until turned on) */
.sound-toggle{display:grid;place-items:center;flex:none;width:28px;height:28px;padding:0;border:1px solid var(--line);border-radius:var(--rc);background:var(--panel);color:var(--faint);cursor:pointer}
.sound-toggle svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sound-toggle:hover{color:var(--text);border-color:var(--line-2)}
.sound-toggle[aria-pressed=true]{color:var(--green);border-color:#86EFAC55;background:#86EFAC12}
.sound-toggle[aria-pressed=false] .wave,.sound-toggle[aria-pressed=true] .mute{display:none}

/* empty and loading states */
.list .empty{grid-column:1/-1;padding:28px 16px;line-height:1.5;color:var(--faint)}

/* phone */
@media(max-width:760px){
 .board-toolbar{gap:6px}
 /* phone: Clean only lives in the lanes row so the toolbar keeps its view tabs whole */
 .board-toolbar .clean-toggle,.board-toolbar #blocked-count{display:none}
 .board-toolbar .seg{flex:none}
 .mobile-lanes .clean-toggle{display:inline-flex;height:30px;margin-left:auto;padding:0 10px;font-size:12px;border:1px solid var(--line);border-radius:var(--rc);color:var(--muted)}
 .mobile-lanes .clean-toggle[aria-pressed=true]{color:var(--green);border-color:#86EFAC55}
 body[data-view=explore] .mobile-lanes{display:flex}
 body[data-view=explore] .mobile-lanes [data-lane]{display:none}
 body[data-view=explore] .mobile-lanes .lanes-note{display:block;color:var(--muted);font-size:13px;font-weight:600}
 .xr-pop{width:min(320px,calc(100vw - 16px))}
 body[data-view=grid] .list:not(#l-blocked){grid-template-columns:repeat(2,minmax(0,1fr))}
 #explore .xr-cell .xr-line{max-width:160px}
}
@media(max-width:760px){
 .hotseat{gap:10px;height:56px;margin:6px 8px 0;padding:0 6px 0 10px}
 .hotseat .hs-label,.hotseat .hs-buys,.hotseat .hs-share,.hotseat .hs-ch,.hotseat .hs-since,.hs-id small{display:none}
 .hotseat>.mini,.hotseat .xr{display:none}
 .hotseat .hs-coin{flex:1 1 auto}
 .hs-id .hs-over{display:block;max-width:none;color:var(--green);font-weight:700;letter-spacing:.06em;text-transform:uppercase;font-size:9.5px}
 .hs-over::before{content:"";display:inline-block;width:6px;height:6px;margin-right:6px;vertical-align:1px}
 .hs-coin .pic{width:34px;height:34px}
 .hs-id b{font-size:14px}
 .hotseat .buy{padding:0 10px;height:30px}
}
/* reduced motion: effects become still highlights */
@media(prefers-reduced-motion:reduce){
 .xr-pop:popover-open,.list .card.arrival,.hotseat::after,.hs-label i,.hs-over::before,.mini::before,.mini.ready{animation:none}
 .list .card[data-fx=big],.list .card[data-fx=whale],.hotseat[data-fx]{animation:bd-still 1.2s linear}
 .buy[data-fx=glow]{animation:bd-still 1.2s linear}
}
@keyframes bd-still{0%,80%{box-shadow:inset 0 0 0 1px #86EFAC88}100%{box-shadow:none}}

/* ---- round 2: live board, bot-speed controls, parity features, onboarding ---- */
/* notes never widen a popover: they wrap to the width the labels set */
.column-filter .popover .note,.tb-pop .popover .note{width:0;min-width:100%;margin:0;line-height:1.45;color:var(--faint);font-size:11px}
.popover .note.err:empty,.al-pop .note.err:empty{display:none}
.popover .note.err,.al-pop .note.err{color:var(--risky)}

/* toolbar menus: presets, display, shortcuts */
.tb-pop{position:relative;flex:none}
.tb-pop>summary.tb-btn{display:inline-flex;align-items:center;gap:6px;width:auto;height:28px;padding:0 10px;border:1px solid var(--line);border-radius:var(--rc);background:var(--panel);color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap;cursor:pointer;list-style:none}
.tb-btn::-webkit-details-marker{display:none}
.tb-btn svg{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#presets-pop .tb-btn svg{fill:var(--green);stroke:none}
#presets-pop .tb-btn span{color:var(--text);font-variant-numeric:tabular-nums}
.tb-btn small{font-size:inherit;color:var(--faint);font-weight:600}
.tb-pop>.tb-btn:hover,.tb-pop[open]>.tb-btn{border-color:var(--line-2);color:var(--text);background:var(--surface)}
.tb-icon{display:grid;place-items:center;flex:none;width:28px;height:28px;padding:0;border:1px solid var(--line);border-radius:var(--rc);background:var(--panel);color:var(--muted);font-size:13px;font-weight:700}
.tb-icon:hover{color:var(--text);border-color:var(--line-2)}
.tb-icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#presets-form,#display-form{min-width:280px}
@media(max-width:1280px){#display-pop .tb-label{display:none}}

/* Clean only: the one toggle a newcomer needs, so it reads as a real switch */
.board-toolbar .clean-toggle{height:30px;padding:0 12px 0 8px;gap:8px;border-color:#86EFAC33;color:var(--text)}
.clean-toggle i{position:relative;width:24px;height:14px;border-radius:7px;background:#ffffff14;box-shadow:inset 0 0 0 1px #ffffff1f}
.clean-toggle i::after{content:"";position:absolute;left:2px;top:2px;width:10px;height:10px;border-radius:50%;background:var(--muted);transition:transform .16s var(--ease,ease-out),background .16s}
.clean-toggle[aria-pressed=true] i{background:var(--clean);box-shadow:0 0 12px -2px #86EFAC99}
.clean-toggle[aria-pressed=true] i::after{transform:translateX(10px);background:var(--clean-ink)}
.board-toolbar .clean-toggle[aria-pressed=true]{background:#86EFAC1a;border-color:#86EFAC66;color:#A7F3C4}
.clean-toggle b{font-variant-numeric:tabular-nums}

/* lane bar: change window chips, paused state, presets */
.lanebar{container-type:inline-size;display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-bottom:1px solid var(--line);flex:none;min-width:0}
.lanebar .tf,.lanebar .pp{display:flex;gap:2px;padding:2px;border-radius:6px;background:#ffffff08;flex:none}
.lanebar .pp{margin-left:auto}
.lanebar button{height:20px;padding:0 7px;border:0;border-radius:4px;background:transparent;color:var(--faint);font-size:10.5px;font-weight:700;letter-spacing:.02em;line-height:20px;white-space:nowrap}
.lanebar button:hover{color:var(--text)}
.lanebar button[aria-pressed=true]{background:var(--surface-2);color:var(--text);box-shadow:inset 0 0 0 1px var(--line-2)}
.lanebar .pp button b{margin-left:4px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.lanebar .pp button[aria-pressed=true]{color:var(--green)}
.lanebar .pp button[aria-pressed=true] b{color:#A7F3C4}
.paused{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:4px;background:#F5B83D14;color:var(--watch);font-size:10.5px;font-weight:700;white-space:nowrap;flex:none}
.paused::before{content:"";width:6px;height:8px;border-left:2px solid currentColor;border-right:2px solid currentColor;box-sizing:border-box}
.paused b{font-weight:600}
.lane-flash{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;color:var(--info);opacity:0;transform:translateY(4px);transition:opacity .25s,transform .25s}
.lane-flash.on{opacity:1;transform:none}
@container (max-width:330px){.lanebar .pp button b{display:none}}
@container (max-width:280px){.lanebar .lane-flash{display:none}}

/* card tags: KOL buys, copycat, graduated just now. Raised above the card link so they can show their tip */
.tag{position:relative;z-index:1;flex:none;display:inline-flex;align-items:center;height:16px;padding:0 5px;border-radius:4px;font-size:9.5px;font-weight:700;letter-spacing:.02em;line-height:1;white-space:nowrap;cursor:help}
.tag.grad{background:#7DD3FC;color:#03131C;box-shadow:0 0 12px -3px #7DD3FCaa}
.tag.copy{background:#F5B83D14;color:var(--watch);box-shadow:inset 0 0 0 1px #F5B83D40}
.tag.kol{gap:4px;background:#ffffff0d;color:var(--text);box-shadow:inset 0 0 0 1px #ffffff1f;max-width:110px;overflow:hidden;text-overflow:ellipsis}
.tag.kol::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--green);flex:none}
@container (max-width:380px){.card .tag.kol{display:none}}
@container (max-width:320px){.card .tag.copy{display:none}}

/* card actions: alert bell beside the quick buy pill */
.list .card .acts{display:flex;align-items:center;justify-content:flex-end;gap:4px}
.bell{position:relative;z-index:1;display:grid;place-items:center;flex:none;width:22px;height:22px;padding:0;border:1px solid transparent;border-radius:50%;background:transparent;color:var(--faint);cursor:pointer}
.bell svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.bell:hover{color:var(--text);background:var(--surface-2)}
.bell.on{color:var(--watch);border-color:#F5B83D44;background:#F5B83D12}
.bell.on svg{fill:#F5B83D44}
.bell[data-fx=ring]{animation:bd-ring .9s ease-out}
@keyframes bd-ring{0%,100%{rotate:0deg}15%{rotate:16deg}30%{rotate:-14deg}45%{rotate:10deg}60%{rotate:-6deg}75%{rotate:3deg}}
@media(pointer:coarse){.bell::after{content:"";position:absolute;inset:-6px}}
.list .card:not(:hover):not(.sel):not(:focus-within) .bell:not(.on){opacity:.55}
@media(pointer:coarse){.list .card .bell{opacity:1!important}}

/* keyboard pick, paused leftovers, lane moves, graduation */
.list .card.sel{background:var(--hover);box-shadow:inset 2px 0 0 var(--green),inset 0 0 0 1px #86EFAC40}
body[data-view=grid] .list:not(#l-blocked) .card.sel{border-color:#86EFAC88;box-shadow:0 0 0 1px #86EFAC55}
#explore tbody tr.sel{background:var(--hover)}
#explore tbody tr.sel td:first-child{box-shadow:inset 2px 0 0 var(--green)}
.list .card.left{opacity:.45}
.list .card.moved{animation:card-move .7s var(--ease,ease-out)}
@keyframes card-move{from{transform:translateX(-18px);opacity:0;background-color:#7DD3FC1f}60%{opacity:1}to{transform:none;background-color:transparent}}
.list .card[data-fx=grad]{animation:bd-grad 1.6s ease-out}
@keyframes bd-grad{0%{background-color:#7DD3FC33;box-shadow:inset 0 0 0 2px #7DD3FC}35%{background-color:#7DD3FC1a}100%{background-color:transparent;box-shadow:inset 0 0 0 2px transparent}}

/* scale: cards off screen skip layout and paint; columns render 40 at a time */
.list:not(#l-blocked)>.card{content-visibility:auto;contain-intrinsic-size:auto 76px}
body[data-view=grid] .list:not(#l-blocked)>.card{contain-intrinsic-size:auto 340px}
.list>.more,#explore>.more{display:block;width:calc(100% - 16px);height:32px;margin:8px;border:1px dashed var(--line-2);border-radius:var(--rc);background:transparent;color:var(--muted);font-size:12px;font-weight:600}
.list>.more{grid-column:1/-1}
body[data-view=grid] .list:not(#l-blocked)>.more{width:100%;margin:0}
.list>.more:hover,#explore>.more:hover{color:var(--text);border-color:var(--muted)}
#explore>.more{width:auto;margin:10px 12px;padding:0 16px}

/* grid tiles: bell and pill share the bottom row */
body[data-view=grid] .list:not(#l-blocked) .card .acts{grid-column:1/-1;display:flex;width:100%;gap:6px;margin-top:4px}
body[data-view=grid] .list:not(#l-blocked) .card .acts .buy{flex:1;margin:0}
body[data-view=grid] .list:not(#l-blocked) .card .bell{width:30px;height:30px;border-color:var(--line);opacity:1}
body[data-view=grid] .list:not(#l-blocked) .card .l1{flex-wrap:wrap;row-gap:4px}

/* live row: hot seat and the KOL trades strip, side by side when there is room */
.liverow{display:flex;flex-wrap:wrap;gap:6px;margin:6px 6px 0;min-width:0;flex:none}
.liverow:has(>.hotseat[hidden]):has(>.kolstrip[hidden]){display:none}
.liverow>.hotseat{margin:0;flex:1 1 1100px;min-width:0}
.kolstrip{display:flex;align-items:center;gap:10px;flex:1 1 460px;min-width:0;min-height:34px;padding:0 0 0 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}
.kolstrip[hidden]{display:none}
.ks-label{flex:none;font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);white-space:nowrap;cursor:help}
.ks-track{display:flex;align-items:center;gap:6px;min-width:0;flex:1;height:100%;overflow-x:auto;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 88%,#0000);mask-image:linear-gradient(90deg,#000 88%,#0000);padding-right:24px}
.ks-track::-webkit-scrollbar{display:none}
.ks-item{display:inline-flex;align-items:center;gap:6px;flex:none;height:24px;padding:0 9px 0 3px;border-radius:12px;background:var(--surface);color:var(--muted);font-size:11.5px;white-space:nowrap}
.ks-item:hover{background:var(--surface-2)}
.ks-item a{display:inline-flex;align-items:center;gap:6px;color:inherit;text-decoration:none}
.ks-item a:hover b,.ks-item a:hover em{text-decoration:underline;text-underline-offset:2px}
.ks-pic{position:relative;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;overflow:hidden;background:var(--surface-2);flex:none}
.ks-pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ks-pic .ident{width:100%;height:100%;border-radius:50%}
.ks-item b{color:var(--text);font-weight:650;max-width:96px;overflow:hidden;text-overflow:ellipsis}
.ks-item.buy .ks-side{color:var(--up)}.ks-item.sell .ks-side{color:var(--down)}
.ks-item em{font-style:normal;font-weight:700;color:var(--text)}
.ks-item small{color:var(--faint);font-size:10.5px}
.ks-item.fresh{animation:ks-in .6s var(--ease,ease-out)}
@keyframes ks-in{from{transform:translateX(-12px);opacity:0;background:#86EFAC33}to{transform:none;opacity:1}}

/* plain-English tip */
.tip{position:fixed;inset:auto;left:0;top:0;margin:0;max-width:min(260px,calc(100vw - 16px));padding:7px 9px;border:1px solid var(--line-2);border-radius:6px;background:#16181E;color:var(--text);font-size:11.5px;font-weight:500;line-height:1.45;text-align:left;pointer-events:none;box-shadow:0 12px 32px -12px #000;z-index:95}
.tip:popover-open{animation:xr-in .12s ease-out}
[data-tip]{cursor:help}
button[data-tip],summary[data-tip],a[data-tip]{cursor:pointer}

/* alert popover */
.al-pop,.al-pop[class]{position:fixed;inset:auto;right:auto;bottom:auto;margin:0;width:288px;max-width:calc(100vw - 16px);overflow:auto;color:var(--text);z-index:85}
.al-pop:not(:popover-open){display:none}
.al-pop header{display:grid;gap:2px}
.al-pop header b{font-size:13.5px}
.al-pop header small{color:var(--faint);font-size:11.5px}
.al-pop .note{margin:0;font-size:11px;line-height:1.45;color:var(--faint)}

/* shortcuts sheet */
.keys-sheet{width:min(440px,calc(100vw - 24px))}
.keys-sheet header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.keys-sheet h2{margin:0;font-size:16px}
.keys-sheet dl.keys{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:8px 14px;margin:12px 0 16px;font-size:12.5px}
.keys-sheet .keys dt,.keys-sheet .keys dd{display:block;width:auto;margin:0;padding:0}
.keys dt{white-space:nowrap;color:var(--muted)}
.keys dd{margin:0;color:var(--text)}
.keys kbd{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:5px;background:var(--surface);color:var(--text);font:600 11px/1 ui-monospace,SFMono-Regular,Menlo,monospace}
.keys kbd+kbd{margin-left:4px}
.keys-sheet .check-label{display:flex;align-items:flex-start;gap:8px;margin:0 0 10px;font-size:12.5px;line-height:1.45;color:var(--muted)}
.keys-sheet .check-label input{margin-top:2px;flex:none}
.tour-again{width:100%;height:34px;margin-top:4px}

/* saved filters inside the column filter */
.fp{display:grid;gap:8px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.fp-list{display:flex;flex-wrap:wrap;gap:4px}
.fp-chip{display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:5px;overflow:hidden}
.fp-chip button{height:24px;padding:0 8px;border:0;border-radius:0;background:var(--surface);font-size:11.5px;font-weight:600}
.fp-chip button:hover{color:var(--green)}
.fp-chip .fp-del{display:grid;place-items:center;width:22px;padding:0;color:var(--faint);border-left:1px solid var(--line)}
.fp-chip .fp-del svg{width:10px;height:10px;fill:none;stroke:currentColor;stroke-width:2.4}
.fp-chip .fp-del:hover{color:var(--risky)}
.fp-save{display:flex;gap:6px}
.fp-save input{flex:1;min-width:0;height:28px!important}
.fp-save button{flex:none;height:28px}

/* explore extras */
#explore td .row-tags{display:inline-flex;gap:4px;margin-left:8px;vertical-align:middle}
#explore td:first-child{white-space:nowrap}
#explore .watch-cell{white-space:nowrap}
#explore .watch-cell .bell{display:inline-grid;vertical-align:middle;margin-left:4px}

/* display options: hide a metric everywhere it shows */
.hide-chart .list .card>.mini,.hide-chart #explore .mini-cell,.hide-chart #explore .th-mini,.hide-chart .hotseat>.mini{display:none}
.hide-chart .list:not(#l-blocked) .card{grid-template-columns:var(--avw) minmax(0,1fr) auto}
.hide-chart .list:not(#l-blocked) .card>.right{grid-column:3}
.hide-read .card .xr-line,.hide-read #explore .xr-cell .xr-line{display:none}
.hide-tags .tag,.hide-tags .row-tags{display:none!important}
.hide-socials .card .soc{display:none}
.hide-holders .card .hold{display:none}
.hide-tx .card .tx{display:none}
.hide-vol .card .v{display:none}
.hide-age .card .age{display:none}

@media(max-width:1100px){.board-toolbar .tb-btn{padding:0 8px}}
@media(max-width:760px){
 .board-toolbar #display-pop,.board-toolbar #keys-btn{display:none}
 #presets-pop .tb-btn small{display:none}
 .liverow{margin:6px 8px 0}
 .kolstrip{flex-basis:100%;padding-left:10px}
 .lanebar{padding:0 8px}
}
@media(prefers-reduced-motion:reduce){
 .list .card.moved,.ks-item.fresh,.tip:popover-open{animation:none}
 .list .card[data-fx=grad],.bell[data-fx=ring]{animation:bd-still 1.2s linear}
 .lane-flash,.clean-toggle i::after{transition:none}
}
.list .card .v b,.list .card .l2 b,.list .card .mc b{font-weight:inherit}
.gatebar .g-blocked{display:inline-flex;gap:4px;align-items:baseline;height:auto;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}
.gatebar .g-blocked:hover{color:var(--text);text-decoration:underline;text-underline-offset:3px}
@media(max-width:760px){
 .board-toolbar>button[data-open-blocked]{display:none}
 .board-toolbar .seg button{padding-inline:9px}
}

/* motion off from Settings (prefs.js sets data-motion) behaves like the system setting */
:root[data-motion=reduce] :is(.list .card,.hotseat,.hotseat::after,.hs-label i,.hs-over::before,.mini,.mini::before,.ks-item,.tip,.xr-pop,.buy,.bell){animation:none!important}
:root[data-motion=reduce] :is(.list .card[data-fx],.hotseat[data-fx],.buy[data-fx],.bell[data-fx]){animation:bd-still 1.2s linear!important}
:root[data-motion=reduce] :is(.lane-flash,.clean-toggle i::after){transition:none}

/* the filter box keeps a usable width instead of collapsing to a square */
.board-toolbar .board-query{flex:1 1 160px;min-width:96px}
.board-toolbar .board-query input{width:100%;min-width:0}
@media(max-width:900px){#presets-pop .tb-btn small{display:none}}

/* ---- audit pass (AUDIT.md items for pb-board) ---- */
/* column filters: paired min/max fields, a count on the funnel when filters are on */
.column-filter .popover{min-width:340px}
.column-filter .popover .pair{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0;padding:0;border:0;min-width:0}
.column-filter .popover fieldset.pair legend{grid-column:1/-1;margin:0 0 2px;padding:0;font-size:12px;color:var(--text)}
.column-filter .popover .pair label{min-width:0;color:var(--muted);font-size:11.5px}
.column-filter .popover .checks2{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px}
.column-filter .popover .checks2 .check-label{font-size:12px}
.column-filter>summary{position:relative}
.column-filter>summary.on{color:var(--green)}
.column-filter>summary .fc{position:absolute;top:-3px;right:-4px;min-width:14px;height:14px;padding:0 3px;border-radius:7px;background:var(--green);color:var(--clean-ink);font-size:9px;font-weight:800;line-height:14px;text-align:center}

/* gate bar: one sentence a newcomer can read */
.gatebar .g-line{display:inline-flex;align-items:baseline;gap:5px;white-space:nowrap;min-width:0;color:var(--muted)}
.gatebar .g-line b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums}
.gatebar .g-line>i{font-style:normal;color:var(--faint)}
.gatebar .g-line #g-since{color:var(--faint)}
.gatebar .g-short{display:none}
.gatebar .g-blocked b{color:var(--risky)}
@media(max-width:1100px){.gatebar #g-since{display:none}}
@media(max-width:760px){.gatebar .g-long{display:none}.gatebar .g-short{display:inline}}

/* hot seat reserves its height from first paint, so the board never jumps when it fills in */
.hotseat.loading{gap:14px;border-color:var(--line)}
.hotseat.loading::after{animation-duration:2.2s}
.hs-wait{font-size:12px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.hotseat:not(.loading) .hs-wait{display:none}

/* live inserts: the new card fades into its own slot; siblings never slide over it */
.list .card.arrival{animation:card-land .45s var(--ease,ease-out)}
@keyframes card-land{from{opacity:0;transform:translateY(-6px);background-color:#86EFAC1f}60%{opacity:1;transform:none}to{background-color:transparent}}

/* change window label next to the change, so a card never shows two unlabeled percentages */
.card .v .tfl{font-style:normal;font-size:9.5px;font-weight:700;color:var(--faint);margin:0 2px 0 3px;text-transform:uppercase}
.list .card .v .tfl{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .v .tfl{display:inline}

/* phone: the X-ray reason gets its own line under the chip instead of seven characters beside it */
@media(max-width:760px){
 .list:not(#l-blocked) .card{height:auto;min-height:76px;padding-block:8px;contain-intrinsic-size:auto 92px}
 .list:not(#l-blocked) .card .l3{flex-wrap:wrap;row-gap:3px}
 .list:not(#l-blocked) .card .l3 .xr-line{display:block;flex:1 0 100%;max-width:100%}
 body[data-view=grid] .list:not(#l-blocked) .card{padding-block:0 10px}
}

/* explore: the coin column keeps its name, the read is capped, the table fits a 1440 screen */
#explore table{table-layout:auto}
#explore th,#explore td{padding-inline:8px}
#explore td:first-child,#explore th:first-child{min-width:220px;padding-left:12px}
#explore .table-coin{max-width:none;min-width:0}
#explore .table-coin b{max-width:150px}
#explore .table-coin small{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#explore .xr-cell .xr-line{max-width:170px}
#explore td.xr-cell{max-width:260px}
#explore td.mini-cell{width:80px}
#explore td.mini-cell .mini{width:72px}
#explore td:first-child .table-coin{display:inline-flex;vertical-align:middle}
#explore td .row-tags{margin-left:6px}
@media(max-width:1600px){#explore th:nth-child(8),#explore td:nth-child(8),#explore th:nth-child(12),#explore td:nth-child(12){display:none}}
#explore .watch-cell>*{vertical-align:middle}
@media(max-width:900px){.board-toolbar>button[data-open-blocked]{display:none}}

/* round 2b: brand moments, exits, undo, empty art */
.list .card .pb-kol{position:relative;z-index:1;flex:none;max-width:130px;cursor:help}
.hide-tags .pb-kol{display:none!important}
@container (max-width:380px){.card .pb-kol em{display:none}}
@container (max-width:330px){.card .pb-kol{display:none}}
.list .card .av.pb-hot{position:relative;z-index:1;cursor:help}
.tag.exit{background:#FF4D6D;color:#1A0006;box-shadow:0 0 12px -3px #FF4D6Daa}
.list .card[data-fx=exit]{animation:bd-exit 1.1s ease-out}
@keyframes bd-exit{0%{background-color:#FF4D6D2e;box-shadow:inset 3px 0 0 var(--risky)}100%{background-color:transparent;box-shadow:inset 3px 0 0 transparent}}
.undo-bar{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));z-index:96;display:flex;align-items:center;gap:14px;max-width:calc(100vw - 24px);padding:10px 10px 10px 14px;border:1px solid #86EFAC55;border-radius:10px;background:#0D0F13;color:var(--text);font-size:12.5px;box-shadow:0 18px 50px -16px #000;transform:translateX(-50%);animation:xr-in .16s ease-out}
.undo-bar[hidden]{display:none}
.undo-bar span{min-width:0}
.undo-bar button{flex:none;height:28px;padding:0 12px;border-color:#86EFAC55;color:var(--green);font-weight:700}
@media(max-width:760px){.undo-bar{bottom:calc(72px + env(safe-area-inset-bottom))}}
.list .empty-art{display:grid;justify-items:center;gap:4px;padding:28px 16px;text-align:center}
.list .empty-art img{margin-bottom:8px}
.list .empty-art b{font-size:13px;font-weight:600;color:var(--text)}
.list .empty-art span{font-size:12px;color:var(--muted)}
:root[data-motion=reduce] .list .card[data-fx=exit]{animation:bd-still 1.2s linear!important}
@media(prefers-reduced-motion:reduce){.list .card[data-fx=exit]{animation:bd-still 1.2s linear}.undo-bar{animation:none}}

/* round 3: meta radar, KOL scorecard, insert without overlap */
/* new cards fade in place: no offset, so they never draw over the card above */
@keyframes card-land{from{opacity:0;background-color:#86EFAC1f}55%{opacity:1}to{background-color:transparent}}
.metastrip{display:flex;align-items:center;gap:10px;flex:1 1 420px;min-width:0;min-height:34px;padding:0 0 0 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}
.metastrip[hidden]{display:none}
.ms-label{flex:none;font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.ms-track{display:flex;align-items:center;gap:6px;min-width:0;flex:1;height:100%;overflow-x:auto;scrollbar-width:none;padding-right:24px;-webkit-mask-image:linear-gradient(90deg,#000 88%,#0000);mask-image:linear-gradient(90deg,#000 88%,#0000)}
.ms-track::-webkit-scrollbar{display:none}
.ms-chip{display:inline-flex;align-items:center;gap:6px;flex:none;height:24px;padding:0 9px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--muted);font-size:11.5px;white-space:nowrap}
.ms-chip b{color:var(--text);font-weight:700}
.ms-chip span{font-variant-numeric:tabular-nums}
.ms-chip em{font-style:normal;font-size:10px;font-weight:700;padding:0 5px;border-radius:4px;line-height:16px}
.ms-chip em.rising{background:#86EFAC1a;color:var(--green)}.ms-chip em.cooling{background:#ffffff0d;color:var(--faint)}
.ms-chip small{font-size:10.5px;color:var(--faint)}
.ms-chip:hover{border-color:var(--line-2);color:var(--text)}
.ms-chip.on{border-color:#86EFAC66;background:#86EFAC14;color:var(--text)}
.ms-chip.ms-all{color:var(--green);border-color:#86EFAC44}
.kol-card{position:fixed;inset:auto;left:0;top:0;margin:0;width:280px;max-width:calc(100vw - 16px);padding:12px;border:1px solid var(--line-2);border-radius:10px;background:#0D0F13;color:var(--text);font-size:12px;box-shadow:inset 0 2px 0 #C4B5FD,0 24px 60px -16px #000;z-index:88}
.kol-card:popover-open{animation:xr-in .14s ease-out}
.kol-card header{display:flex;align-items:center;gap:8px;position:relative}
.kol-card header .ident,.kol-card header img{width:28px;height:28px;border-radius:50%;flex:none}
.kol-card header img{position:absolute;left:0;top:50%;transform:translateY(-50%);object-fit:cover}
.kol-card header span{display:grid;min-width:0;margin-right:auto}
.kol-card header b{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kol-card header small{color:var(--faint);font-size:11px}
.kol-card header .xr{cursor:default;font-style:normal}
.kol-card dl{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin:12px 0}
.kol-card dl div{display:grid;gap:2px;min-width:0}
.kol-card dt{font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--faint)}
.kol-card dd{margin:0;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.kol-card footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:9px;border-top:1px solid var(--line);font-size:11.5px;color:var(--muted)}
.kol-card footer a{color:var(--green);font-weight:600;margin-left:auto}
.pb-kol[data-kol],.ks-who[data-kol]{cursor:pointer}
@media(max-width:760px){.metastrip{flex-basis:100%;padding-left:10px}}
@media(prefers-reduced-motion:reduce){.kol-card:popover-open{animation:none}}
@media(max-width:760px){.metastrip{display:none}}

/* design review (DESIGN-REVIEW.md, Board) */
/* 1. still checking: one clock chip, no pips, no reason */
.xr.checking{color:var(--muted);background:#ffffff0a;box-shadow:inset 0 0 0 1px #ffffff14;gap:5px;font-variant-numeric:tabular-nums}
.xr.checking i{width:10px;height:10px;border-radius:50%;background:conic-gradient(var(--info) var(--p),#ffffff1a 0);flex:none}
button.xr.checking:hover,.xr.checking[aria-expanded=true]{background:#ffffff14;box-shadow:inset 0 0 0 1px #ffffff26}
/* 2. pips stay on the coin page */
.card .pips{display:none!important}
/* 3. on-palette tags */
.pb-tag,.list .card .pb-tag,#explore .table-coin .pb-tag{background:#86EFAC1a;color:var(--green);box-shadow:inset 0 0 0 1px #86EFAC33}
.tag.exit{background:none;box-shadow:inset 0 0 0 1px #FF4D6D66;color:#FF8FA3}
.tag.copy{background:none;box-shadow:inset 0 0 0 1px #F5B83D66;color:#F5C66B}
/* 4. skeletons at real card height */
.sk-wrap{display:block;padding:0}
.list .sk-wrap{padding:0}
.card.sk{display:grid;grid-template-columns:var(--avw,50px) minmax(0,1fr) 72px;align-items:center;gap:10px;height:76px;padding:6px 10px;border-bottom:1px solid var(--line);pointer-events:none;content-visibility:visible}
.sk-pic{display:block;width:50px;height:50px;border-radius:12px}
.sk-lines,.sk-right{display:grid;gap:7px}
.sk-right{justify-items:end}
.sk-l{display:block;height:9px;border-radius:4px;width:100%}
.sk-l.w60{width:60%}.sk-l.w50{width:50%}.sk-l.w40{width:40%}.sk-l.w30{width:30%}.sk-l.w20{width:20%}.sk-l.w10{width:10%}
.sk-pic,.sk-l{background:linear-gradient(90deg,#ffffff0a 25%,#ffffff14 50%,#ffffff0a 75%);background-size:200% 100%;animation:sk-shine 1.4s linear infinite}
@keyframes sk-shine{from{background-position:100% 0}to{background-position:-100% 0}}
.sk-table{display:grid}
.sk-row{display:grid;grid-template-columns:32px 2fr 1fr 1fr 1fr;align-items:center;gap:16px;height:48px;padding:0 12px;border-bottom:1px solid #15171D}
.sk-row .sk-pic{width:28px;height:28px;border-radius:7px}
.hs-wait{display:flex;align-items:center;gap:14px;flex:1;min-width:0}
.hs-wait .sk-pic{width:38px;height:38px;border-radius:8px;flex:none}
.hs-wait .sk-l{height:10px}
.hs-wait .sk-l.w20{width:120px}.hs-wait .sk-l.w10{width:64px}
/* 5. hot seat: a plain panel; the heat ring on the avatar carries the energy, mint stays for money */
.hotseat,.hotseat.read-clean{background:var(--panel);border-color:var(--line);box-shadow:inset 0 1px 0 #ffffff08}
.hotseat::after{display:none}
.hs-coin .pic{box-shadow:none}
.ks-who .pb-kol{pointer-events:none}
:root[data-motion=reduce] :is(.sk-pic,.sk-l){animation:none}
@media(prefers-reduced-motion:reduce){.sk-pic,.sk-l{animation:none}}

/* round 4: X-ray at a glance. Chip for the verdict, colored numbers for the why, worst first */
.facts{position:relative;z-index:1;display:inline-flex;gap:3px;flex:none;min-width:0}
.fact{display:inline-flex;align-items:baseline;gap:3px;height:16px;padding:0 4px;border-radius:3px;font-size:10.5px;font-weight:700;line-height:16px;font-variant-numeric:tabular-nums;white-space:nowrap;cursor:help}
.fact i{font-style:normal;font-size:9px;font-weight:600;letter-spacing:.02em;opacity:.75}
.fact.good{background:#86EFAC10;color:#A7F3C4}
.fact.watch{background:#F5B83D14;color:#F5C66B}
.fact.bad{background:#FF4D6D1a;color:#FF8FA3;box-shadow:inset 0 0 0 1px #FF4D6D55}
.list .card .l3 .xr-line{flex:1 1 0}
@container (max-width:470px){.card .facts .fact:nth-child(n+4){display:none}}
@container (max-width:400px){.card .facts .fact:nth-child(n+3){display:none}}
@container (max-width:330px){.card .facts .fact:nth-child(n+2){display:none}}
.hide-facts .facts{display:none}
.bond{position:relative;z-index:1;font-size:10.5px;font-weight:700;color:var(--info);font-variant-numeric:tabular-nums;cursor:help}
@container (max-width:380px){.card .l2 .bond{display:none}}
/* copy the contract address */
.ca{position:relative;z-index:1;display:grid;place-items:center;flex:none;width:16px;height:16px;padding:0;border:0;border-radius:3px;background:none;color:var(--faint);opacity:.7}
.ca svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round}
.ca:hover{color:var(--text);background:var(--surface-2);opacity:1}
.ca[data-fx=copied]{animation:bd-copied .9s ease-out}
@keyframes bd-copied{0%,60%{color:var(--green);background:#86EFAC22}100%{color:var(--faint)}}
@media(pointer:coarse){.ca::after{content:"";position:absolute;inset:-6px}}
/* avatar preview */
.pic-zoom{position:fixed;inset:auto;left:0;top:0;margin:0;padding:0;width:180px;height:180px;border:1px solid var(--line-2);border-radius:12px;overflow:hidden;background:var(--panel);box-shadow:0 24px 60px -16px #000;pointer-events:none;z-index:86}
.pic-zoom img{width:100%;height:100%;object-fit:cover;display:block}
.pic-zoom:popover-open{animation:xr-in .12s ease-out}
/* compact cards: two lines, more coins per column */
body.compact .list:not(#l-blocked) .card{--avw:40px;height:58px;min-height:0;padding-block:4px;contain-intrinsic-size:auto 58px}
body.compact .list:not(#l-blocked) .card .av{width:40px;height:40px}
body.compact .list:not(#l-blocked) .card .l2,body.compact .list:not(#l-blocked) .card>.right .v{display:none}
body.compact .list:not(#l-blocked) .card>.mini{height:26px}
body:is(.compact)[data-view=grid] .list:not(#l-blocked) .card{height:auto}
@media(max-width:760px){.list:not(#l-blocked) .card .facts{flex-wrap:wrap}}
@media(prefers-reduced-motion:reduce){.pic-zoom:popover-open,.ca[data-fx=copied]{animation:none}}
/* with the numbers showing, the reason line only takes a row that has room for it; it stays in the X-ray panel and on tiles */
@container (max-width:560px){.list:not(#l-blocked) .card .facts~.xr-line{display:none}}
.hide-facts .list .card .facts~.xr-line{display:block}
/* the ticker never disappears behind tags: it keeps 4 characters, badges shrink first */
.list .card .l1 .sym{flex:0 1 auto;min-width:4.2ch}
.list .card .l1 .pb-kol{flex:0 1 auto;min-width:0;overflow:hidden}
.list .card .l1 .pb-kol span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.list .card .l1 .tag{flex:none}
/* a sell warning outranks a KOL buy when the row is tight */
@container (max-width:470px){.list .card .l1:has(.tag.exit) .pb-kol{display:none}}
.tag.smart{background:none;box-shadow:inset 0 0 0 1px #86EFAC55;color:#A7F3C4}

/* round 6: velocity heat bar, heating up, graduating soon, X mentions */
.list .card .heat{position:relative;z-index:1;display:block;width:56px;height:3px;margin:1px 0 1px auto;border-radius:2px;background:#ffffff12;overflow:hidden;cursor:help}
.list .card .heat::after{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--w,0%);border-radius:2px;transition:width .4s var(--ease,ease-out)}
.list .card .heat.net-in::after{background:var(--up)}.list .card .heat.net-out::after{background:var(--down)}
body[data-view=grid] .list:not(#l-blocked) .card .heat{grid-column:1/-1;width:100%;margin:2px 0}
body.compact .list .card .heat{display:none}
.tag.hot{background:none;box-shadow:inset 0 0 0 1px #F5B83D88;color:#F5C66B}
.tag.soon{background:#7DD3FC14;box-shadow:inset 0 0 0 1px #7DD3FC55;color:#BAE6FD}
.tag.post{background:none;box-shadow:inset 0 0 0 1px #C4B5FD66;color:#DDD6FE}
.fact.banner{background:none;box-shadow:inset 0 0 0 1px #FCD34D59;color:#FDE68A}
.list .card.soon{box-shadow:inset 3px 0 0 #7DD3FC,inset 0 0 24px -8px #7DD3FC55}
.list .card.soon .av-ring{filter:drop-shadow(0 0 4px #7DD3FC88)}
@media(prefers-reduced-motion:reduce){.list .card .heat::after{transition:none}}
/* rows are a fixed 76px on wide screens, so nothing inside a card can push into the next one */
@media(min-width:761px){body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){height:76px;min-height:76px;max-height:76px;overflow:clip}body[data-view=grid] .list:not(#l-blocked)>.card{height:auto;max-height:none;overflow:visible}}
/* KOL faces: identicon underneath, avatar over it */
.pb-kol i.kol-face{position:relative;overflow:hidden;background:none!important;color:transparent}
.pb-kol i.kol-face .ident,.pb-kol i.kol-face img{position:absolute;inset:0;width:100%;height:100%;border-radius:50%;object-fit:cover}
/* the middle column never paints into the chart or the numbers: its track cannot grow and it clips its rows */
.list .card>.mid{min-width:0}
body:not([data-view=grid]) .list .card>.mid,#l-blocked .card>.mid{overflow:hidden}
.fact.more{background:#ffffff0d;color:var(--muted);box-shadow:inset 0 0 0 1px #ffffff1f}
.fact[hidden]{display:none!important}
/* the JS fit pass decides what shows; container rules stay only as a first-paint fallback for very narrow cards */
@container (max-width:470px){.card .facts .fact:nth-child(n+3):not(.more){display:inline-flex}}
@container (max-width:400px){.card .facts .fact:nth-child(n+2):not(.more){display:inline-flex}}
@container (max-width:340px){.card .facts{display:inline-flex}}

/* Compact grid tile (2026-11-03): 40px avatar beside the ticker, one chip row that folds into +N, a 28px chart, then MC, change and buy.
   Readable floor: 12px names and numbers, 10.5px labels. */
body[data-view=grid] .list:not(#l-blocked){grid-template-columns:repeat(auto-fill,minmax(max(196px,calc(50% - 4px)),1fr));gap:6px;padding:6px}
body[data-view=grid] .list:not(#l-blocked)>.card{contain-intrinsic-size:auto 190px}
body[data-view=grid] .list:not(#l-blocked) .card{grid-template-columns:40px minmax(0,1fr) auto;grid-template-areas:"av l1 l1" "av l2 l2" "l3 l3 l3" "mini mini mini" "mc mc v" "heat heat heat" "acts acts acts";column-gap:8px;row-gap:0;padding:8px 10px;align-items:center}
body[data-view=grid] .list:not(#l-blocked) .card>.mid,body[data-view=grid] .list:not(#l-blocked) .card>.right{display:contents}
body[data-view=grid] .list:not(#l-blocked) .card>.av{grid-area:av;width:40px;height:40px;aspect-ratio:auto;align-self:center;border-radius:6px}
body[data-view=grid] .list:not(#l-blocked) .card>.av .pic{border-radius:6px}
body[data-view=grid] .list:not(#l-blocked) .card>.av .pic b{font-size:13px}
body[data-view=grid] .list:not(#l-blocked) .card .l1{grid-area:l1;flex-wrap:nowrap;min-width:0;overflow:hidden;align-self:end}
body[data-view=grid] .list:not(#l-blocked) .card .l1 .sym{font-size:13px}
body[data-view=grid] .list:not(#l-blocked) .card .l1 .name,body[data-view=grid] .list:not(#l-blocked) .card .l1 .tag.extra{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .pb-tag .pb-word{display:none}body[data-view=grid] .list:not(#l-blocked) .card .pb-tag .pb-short{display:inline}
body[data-view=grid] .list:not(#l-blocked) .card .l2{grid-area:l2;flex-wrap:nowrap;min-width:0;overflow:hidden;align-self:start;font-size:12px}
body[data-view=grid] .list:not(#l-blocked) .card .l2 .tx{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .l3{grid-area:l3;display:flex;flex-wrap:nowrap;justify-items:normal;align-items:center;gap:5px;min-width:0;overflow:hidden;padding-top:7px}
body[data-view=grid] .list:not(#l-blocked) .card .l3 .xr-line{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .l3 .facts{flex-wrap:nowrap}
body[data-view=grid] .list:not(#l-blocked) .card>.mini{grid-area:mini;height:28px;margin:7px 0 0;padding:0 0 6px}
body[data-view=grid] .list:not(#l-blocked) .card>.mini svg{height:28px}
body[data-view=grid] .list:not(#l-blocked) .card .mc{grid-area:mc;font-size:13px;padding-top:6px}
body[data-view=grid] .list:not(#l-blocked) .card .mc i,body[data-view=grid] .list:not(#l-blocked) .card .v i,body[data-view=grid] .list:not(#l-blocked) .card .v .tfl{font-size:10.5px}
body[data-view=grid] .list:not(#l-blocked) .card .v{grid-area:v;justify-self:end;font-size:12px;padding-top:6px}
body[data-view=grid] .list:not(#l-blocked) .card .v>i,body[data-view=grid] .list:not(#l-blocked) .card .v [data-f=vol]{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .v .up,body[data-view=grid] .list:not(#l-blocked) .card .v .down{font-size:12px}
body[data-view=grid] .list:not(#l-blocked) .card .heat{grid-area:heat;margin:4px 0 0}
body[data-view=grid] .list:not(#l-blocked) .card .acts{grid-area:acts;margin-top:6px}
body[data-view=grid] .list:not(#l-blocked) .card .buy,body[data-view=grid] .list:not(#l-blocked) .card .bell{height:28px}
body[data-view=grid] .list:not(#l-blocked) .card .bell{width:28px}
body[data-view=grid] .list:not(#l-blocked) .card .fact{font-size:10.5px}body[data-view=grid] .list:not(#l-blocked) .card .fact i{font-size:10.5px}
body[data-view=grid] .list:not(#l-blocked) .card .xr{font-size:10.5px}
body[data-view=grid] .list:not(#l-blocked) .card .tag,body[data-view=grid] .list:not(#l-blocked) .card .pb-tag,body[data-view=grid] .list:not(#l-blocked) .card .pb-tag *{font-size:10.5px}
body[data-view=grid] .list:not(#l-blocked) .card .l2 .soc{display:inline-flex;flex:none}
body[data-view=grid] .list:not(#l-blocked) .card .l2 .hold{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body[data-view=grid] .list:not(#l-blocked) .card .v .tfl{margin-right:4px}
@media(max-width:760px){body[data-view=grid] .list:not(#l-blocked){grid-template-columns:repeat(2,minmax(0,1fr))}body[data-view=grid] .list:not(#l-blocked) .card{grid-template-columns:36px minmax(0,1fr) auto;column-gap:7px;padding:8px}body[data-view=grid] .list:not(#l-blocked) .card>.av{width:36px;height:36px}body[data-view=grid] .list:not(#l-blocked) .card .l2 .hold{display:none}}
.card .l1 .tag[hidden]{display:none!important}
.card .l1.pb-tight .pb-tag .pb-word{display:none}.card .l1.pb-tight .pb-tag .pb-short{display:inline}.card .l1 .pb-tag[hidden]{display:none!important}

/* Board row card (2026-11-03, after Tuss's pulse reference): four lines beside a 72px coin image, CA under the image.
   Line 1 ticker, name, copy, tags | V and MC. Line 2 age, links, holder stats | change, fees, TX, buy ratio.
   Line 3 the coin's X handle. Line 4 the verdict chip and risk pills | bell and quick buy. */
.card .cash{display:none}
.card .vm,.card .ft{display:contents}
.card .st,.card .ffee,.card .fol{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
.card .st svg,.card .ffee svg,.card .fol svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.card .st b,.card .ffee b,.card .fol b{color:var(--text);font-weight:600}
.card .st.st-dev{color:#FCD34D}.card .st.st-dev.st-watch b{color:#FCD34D}
.card .st.st-pro{color:#C4B5FD}.card .st.st-top{color:#7DD3FC}.card .st.st-top.st-watch,.card .st.st-top.st-watch b{color:#FCD34D}.card .st.st-top.st-bad,.card .st.st-top.st-bad b{color:var(--down)}
.card .ffee i{font-style:normal;font-size:10.5px;font-weight:700;color:var(--muted)}.card .ffee svg{display:none}
.card .sx{display:inline-grid;place-items:center;width:16px;height:16px;color:var(--muted)}.card .sx svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2}.card .sx:hover{color:var(--text)}
.card .ratio{position:relative;display:inline-block;flex:none;width:28px;height:3px;border-radius:2px;background:var(--down);overflow:hidden;cursor:help}
.card .ratio i{position:absolute;inset:0 auto 0 0;width:var(--b,50%);background:var(--up);transition:width .4s var(--ease,ease-out)}
.card .lh{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden;white-space:nowrap;font-size:12px}
.card .xh{min-width:0;overflow:hidden;color:#7DD3FC;text-overflow:ellipsis;text-decoration:none;font-weight:600}.card .xh:hover{text-decoration:underline}
.card .lh-note{font-size:10.5px}
.card .chg{display:inline-flex;align-items:baseline;gap:3px;font-size:12px;white-space:nowrap}
@media(min-width:761px){
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){--av:72px;display:grid;grid-template-columns:var(--av) minmax(0,1fr) auto;grid-template-rows:24px 24px 20px 24px;grid-template-areas:"av l1 vm" "av l2 ft" "av lh lh" "cash l3 acts";column-gap:12px;row-gap:2px;align-items:center;height:116px;min-height:116px;max-height:116px;padding:9px 12px;overflow:clip;position:relative}
 .list:not(#l-blocked)>.card{contain-intrinsic-size:auto 116px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.mid,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.right{display:contents}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.av{grid-area:av;width:var(--av);height:var(--av);align-self:start}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.cash{grid-area:cash;display:block;width:auto;height:auto;opacity:1;justify-self:center;max-width:100%;padding:0;border:0;background:none;color:var(--faint);font:600 10.5px/1 var(--mono,ui-monospace,monospace);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:copy}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.cash:hover{color:var(--text)}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.mini{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1{grid-area:l1;display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .sym{flex:0 0 auto;max-width:60%;font-size:15px;font-weight:700}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .name{display:block;flex:0 1 auto;min-width:0;overflow:hidden;color:var(--muted);font-size:13px;text-overflow:ellipsis;white-space:nowrap}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1>.ca{flex:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2{grid-area:l2;display:flex;align-items:center;gap:10px;min-width:0;overflow:hidden}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .age{flex:none;color:var(--up);font-size:13px;font-weight:600}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .soc{display:inline-flex;flex:none;align-items:center;gap:6px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .lh{grid-area:lh}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l3{grid-area:l3;display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l3 .xr-line{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm{grid-area:vm;display:flex;align-items:baseline;justify-content:flex-end;gap:10px;white-space:nowrap}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .v,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .mc{display:inline-flex;align-items:baseline;gap:4px;margin:0;font-size:12px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .v b{font-size:14px;font-weight:700;color:var(--text)}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .mc b{font-size:15px;font-weight:700}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .mc.up b{color:#7DD3FC}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .mc.down b{color:#FCD34D}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm i{font-style:normal;font-size:10.5px;font-weight:700;color:var(--muted)}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft{grid-area:ft;display:flex;align-items:center;justify-content:flex-end;gap:10px;white-space:nowrap;font-size:12px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .tx b{color:var(--text);font-weight:600}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts{grid-area:acts;display:flex;align-items:center;justify-content:flex-end;gap:6px;margin:0}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts .buy{height:24px;padding:0 10px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts .bell{width:24px;height:24px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .heat{position:absolute;left:0;right:0;bottom:0;width:auto;height:2px;margin:0;border-radius:0;background:none;z-index:2}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk):has(.l1 .tag.hot){box-shadow:inset 3px 0 0 #FB923Ccc}
}
/* narrow lanes (under 420px: 1024 screens, or the side panel open) get the tighter row */
.list:not(#l-blocked){container:lane/inline-size}
@media(min-width:761px){@container lane (max-width:420px){
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){--av:56px;grid-template-rows:20px 20px 16px 22px;height:104px;min-height:104px;max-height:104px;column-gap:9px;padding:8px 9px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .sym{font-size:14px;max-width:none}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .name{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .v{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2{gap:7px}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .chg,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .ratio{display:none}
}}
@media(max-width:760px){
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){--av:48px;display:grid;grid-template-columns:var(--av) minmax(0,1fr) auto;grid-template-areas:"av l1 vm" "av l2 ft" "l3 l3 acts";column-gap:10px;row-gap:4px;align-items:center;height:auto;min-height:0;padding:8px 10px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.mid,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.right{display:contents}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.av{grid-area:av;width:var(--av);height:var(--av)}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.mini,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .lh,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l3 .xr-line,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .v,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .chg,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .ratio,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft .ffee{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1{grid-area:l1;display:flex;gap:6px;min-width:0;overflow:hidden}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .name{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2{grid-area:l2;display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .st.st-pro,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .st.st-top{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l3{grid-area:l3;display:flex;flex-wrap:nowrap;gap:5px;min-width:0;overflow:hidden}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm{grid-area:vm;display:flex;justify-content:flex-end}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .vm .mc{margin:0;font-size:14px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .ft{grid-area:ft;display:flex;justify-content:flex-end;font-size:12px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts{grid-area:acts;display:flex;gap:6px;margin:0}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .heat{position:absolute;left:0;right:0;bottom:0;width:auto;height:2px;margin:0;border-radius:0;background:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){position:relative}
}
/* grid tiles keep their compact layout: unwrap the new wrappers, hide the row-only pieces */
body[data-view=grid] .list:not(#l-blocked) .card .vm{display:contents}body[data-view=grid] .list:not(#l-blocked) .card .ft,body[data-view=grid] .list:not(#l-blocked) .card .lh,body[data-view=grid] .list:not(#l-blocked) .card>.cash{display:none}
body[data-view=grid] .list:not(#l-blocked) .card .l2 .st.st-pro,body[data-view=grid] .list:not(#l-blocked) .card .l2 .st.st-top,body[data-view=grid] .list:not(#l-blocked) .card .l2 .st.st-dev{display:none}
/* row cards: readable floor 10.5px on chips, the ring already shows bonding, the crown already shows dev coins */
body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .tag,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .pb-tag,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .pb-tag *,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact i{font-size:10.5px}
body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact{height:18px;line-height:18px;padding:0 5px}
body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .bond,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact[data-l^="Dev coins"]{display:none}
body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .heat{opacity:.75}
@media(max-width:760px){body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .tag,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .pb-tag,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .pb-tag *,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact i{font-size:10.5px}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l2 .bond,body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .fact[data-l^="Dev coins"]{display:none}body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.cash{display:none}}
body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .xr{font-size:10.5px}
.card .l2 .st[hidden],.card .l2 .sx[hidden]{display:none!important}
/* lane header: column search, display shortcut, quick-buy amount */
.col>header .lane-q{display:flex;align-items:center;gap:6px;flex:1 1 120px;min-width:0;max-width:220px;height:28px;margin-left:auto;padding:0 8px;border:1px solid var(--line);border-radius:6px;background:var(--canvas,#050607);color:var(--muted)}
.col>header .lane-q:focus-within{border-color:var(--line-2)}
.col>header .lane-q svg{flex:none;width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2}
.col>header .lane-q input{flex:1;min-width:0;height:100%;padding:0;border:0;background:none;color:var(--text);font:500 12px/1 inherit;outline:none}
.col>header .lane-q input::placeholder{color:var(--faint)}
.col>header .lane-ico{display:grid;place-items:center;flex:none;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:6px;background:none;color:var(--muted)}
.col>header .lane-ico:hover{border-color:var(--line);color:var(--text)}
.col>header .lane-ico svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8}
.lanebar .la{display:inline-flex;align-items:center;gap:4px;height:24px;margin-left:auto;padding:0 6px;border:1px solid var(--line);border-radius:6px;color:var(--up)}
.lanebar .la:focus-within{border-color:#86EFAC66}
.lanebar .la svg{width:12px;height:12px;fill:currentColor;stroke:none}
.lanebar .la input{width:44px;height:100%;padding:0;border:0;background:none;color:var(--text);font:600 12px/1 inherit;font-variant-numeric:tabular-nums;outline:none;-moz-appearance:textfield}
.lanebar .la input::-webkit-inner-spin-button,.lanebar .la input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.lanebar .la input::placeholder{color:var(--muted)}
.lanebar .la+.pp{margin-left:6px}
@media(max-width:1279px){.col>header .lane-q{max-width:150px}}
@media(max-width:1100px){.col>header .lane-q{display:none}}
@media(max-width:1599px){.col>header #watch-tab span{display:none}.col>header #watch-tab{padding:0 7px}}
.col>header .lane-q{min-width:96px}
@media(min-width:761px) and (max-width:960px){.lanebar .la{display:none}.lanebar .pp{margin-left:auto}}
/* keep row pieces above the whole-card ticker link so they get their own hover, tooltip and click */
.card .xh,.card .sx,.card .st,.card .ffee,.card .fol,.card .ratio,.card .chg,.card .age,.card .lh-note,.card .vm .v,.card .vm .mc,.card .ft .tx{position:relative;z-index:1}
/* live verdicts: a 1.2s flip moment, a dimmed chip while a recheck is overdue, and a fade-out when a coin gets blocked */
.card .xr.flip{animation:xr-flip 1.2s var(--ease,ease-out)}
.card .xr.flip.clean{box-shadow:0 0 0 2px #86EFAC66,0 0 14px -2px #86EFAC88}
.card .xr.flip.watch{box-shadow:0 0 0 2px #FCD34D66,0 0 14px -2px #FCD34D88}
.card .xr.flip.risky{box-shadow:0 0 0 2px #FF4D6D66,0 0 14px -2px #FF4D6D88}
@keyframes xr-flip{0%{transform:scale(.92)}18%{transform:scale(1.06)}36%{transform:none}100%{transform:none}}
.card .xr.stale{opacity:.62;filter:saturate(.6)}
.list>.card.leaving{overflow:hidden}
@media(prefers-reduced-motion:reduce){.card .xr.flip{animation:none}}
:root[data-motion=reduce] .card .xr.flip{animation:none}
/* lane empty states: filters hiding a full lane, and the first 90s after boot */
.list .empty-hidden .clear-lane{margin-top:10px;height:30px;padding:0 14px;border:1px solid #86EFAC55;border-radius:6px;background:#86EFAC14;color:var(--up);font:600 12px/1 inherit;cursor:pointer}
.list .empty-hidden .clear-lane:hover{background:#86EFAC22}
.list .empty-hidden b{color:var(--text)}
.list .empty-loading img{animation:empty-breathe 1.8s ease-in-out infinite}
@keyframes empty-breathe{50%{opacity:.55}}
@media(prefers-reduced-motion:reduce){.list .empty-loading img{animation:none}}

/* Polish pass (2026-11-03): one chip spec for every lane card.
   Verdict, checking clock, risk numbers, tags and +N share one box: 18px tall, 6px sides, 4px radius, 10.5px type, tabular numbers.
   Tone is a tint and a hairline in the same hue, never a solid fill or a glow. */
.list .card :is(.xr,.fact,.tag){height:18px!important;min-height:18px;padding:0 6px!important;margin:0!important;gap:4px;border-radius:4px;font-size:10.5px;font-weight:600;line-height:18px!important;letter-spacing:0;font-variant-numeric:tabular-nums;align-items:center;box-sizing:border-box;filter:none}
.list .card .fact i,.list .card .fact b{font-style:normal;font-size:10.5px;line-height:18px;letter-spacing:0}
.list .card .fact i{font-weight:500;opacity:.72}
.list .card .fact b{font-weight:650;display:inline-block;min-width:3ch;text-align:right}
.list .card .fact.good{background:#86EFAC0d;box-shadow:inset 0 0 0 1px #86EFAC2e;color:#A7F3C4}
.list .card .fact.watch{background:#F5B83D0f;box-shadow:inset 0 0 0 1px #F5B83D38;color:#F5C66B}
.list .card .fact.bad{background:#FF4D6D12;box-shadow:inset 0 0 0 1px #FF4D6D42;color:#FF8FA3}
.list .card .fact.more{background:#ffffff08;box-shadow:inset 0 0 0 1px #ffffff1a;color:var(--muted)}
.list .card .fact.banner{background:#FCD34D0d;box-shadow:inset 0 0 0 1px #FCD34D38;color:#FDE68A}
/* verdict: same box as the numbers, told apart by its mark and weight */
.list .card .xr{font-weight:700}
.list .card .xr svg{width:10px;height:10px}
.list .card .xr .pips{display:none}
.list .card .xr.clean{background:#86EFAC14;box-shadow:inset 0 0 0 1px #86EFAC59;color:#86EFAC}
.list .card button.xr.clean:hover,.list .card .xr.clean[aria-expanded=true]{background:#86EFAC24;box-shadow:inset 0 0 0 1px #86EFAC80}
.list .card .xr.watch{background:#F5B83D12;box-shadow:inset 0 0 0 1px #F5B83D4d;color:var(--watch)}
.list .card .xr.risky{background:#FF4D6D14;box-shadow:inset 0 0 0 1px #FF4D6D52;color:var(--risky)}
/* the clock chip keeps one width while it counts, so nothing beside it moves */
.list .card .xr.checking{width:98px;justify-content:flex-start;background:#ffffff08;box-shadow:inset 0 0 0 1px #ffffff1a;color:var(--muted);font-weight:600}
.list .card .xr.checking b{font-weight:600}
.list .card .xr.checking i{width:9px;height:9px}
/* tags on line 1 follow the same tint rule; graduated and sell alerts lose their solid fill and glow */
.list .card .tag.grad{background:#7DD3FC14;box-shadow:inset 0 0 0 1px #7DD3FC59;color:#BAE6FD}
.list .card .tag.exit{background:#FF4D6D14;box-shadow:inset 0 0 0 1px #FF4D6D52;color:#FF8FA3}
.list .card .tag.copy{background:#F5B83D0f;box-shadow:inset 0 0 0 1px #F5B83D4d;color:#F5C66B}
.list .card .tag.hot{background:#F5B83D0f;box-shadow:inset 0 0 0 1px #F5B83D4d}
.list .card .tag.post{background:#C4B5FD0d;box-shadow:inset 0 0 0 1px #C4B5FD47}
.list .card .tag.smart{background:#86EFAC0d;box-shadow:inset 0 0 0 1px #86EFAC3d}
.list .card .tag.kol{background:#ffffff08;box-shadow:inset 0 0 0 1px #ffffff1a}
.list .card .pb-tag{height:18px;line-height:18px;padding:0 6px;border-radius:4px;font-size:10.5px}
.list .card .facts{gap:4px;align-items:center}
.list .card .l1 .name[hidden]{display:none!important}
/* no colored wash behind gainers and losers, no glow on the final stretch; the numbers carry it */
.list .card.gain,.list .card.loss{background-image:none}
.list .card.soon{box-shadow:inset 2px 0 0 #7DD3FC}
.list .card.soon .av-ring{filter:none}
.list .card .chg :is(i,em){font-style:normal;color:var(--muted);font-size:10.5px;font-weight:700}
/* the +N chip always shows when the fit pass un-hides it; an old first-paint rule counted it as a fact */
.list .card .facts .fact.more:not([hidden]){display:inline-flex!important}
@media(min-width:761px){
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk){align-items:center}
 /* the chip row runs under the numbers column too; the fit pass stops it short of bell and buy */
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l3{grid-column:2/4;grid-row:4;gap:4px}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts{grid-column:3;grid-row:4;position:relative;z-index:2}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .l1 .sym{flex:0 1 auto;min-width:0;max-width:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.cash{font-family:inherit;font-size:10.5px;font-weight:500;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:0;color:var(--faint)}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .heat{display:none}
 body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk):has(.l1 .tag.hot){box-shadow:inset 2px 0 0 #F5B83D}
}
@media(max-width:760px){body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .heat{display:none}}
/* lane header never spills into the next lane: the search shrinks first */
.col>header{min-width:0;overflow:hidden}
.col>header h2,.col>header .n{flex:none}
.col>header .lane-q{flex:1 1 60px;min-width:28px}
.col>header .column-controls{flex:none;min-width:0}
/* the KOL badge never shrinks into a stub; the fit pass drops it whole */
.list .card .l1 .pb-kol{flex:none;overflow:visible}
.list .card .l1 .pb-kol[hidden]{display:none!important}
@media(min-width:761px){body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk) .acts{justify-self:end}}
.list .card .facts{height:18px;align-self:center;flex-wrap:nowrap}
/* narrow rows: the short CA may run into the gap beside the 56px image rather than cut to "p..." */
@media(min-width:761px){@container lane (max-width:420px){body:not(.compact):not([data-view=grid]) .list:not(#l-blocked)>.card:not(.sk)>.cash{justify-self:start;max-width:none;overflow:visible;font-size:10px;letter-spacing:-.01em}}}
/* Blocked list: the same row grammar as the lanes, minus buying. Numbers right, reason line under the chips. */
#l-blocked>.card:not(.sk){display:grid;grid-template-columns:48px minmax(0,1fr) auto;grid-template-areas:"av l1 vm" "av l2 ft" "av l3 l3";column-gap:12px;row-gap:4px;align-items:center;height:auto;min-height:0;max-height:none;padding:10px 14px;overflow:hidden}
#l-blocked>.card:not(.sk)>.mid,#l-blocked>.card:not(.sk)>.right{display:contents}
#l-blocked>.card:not(.sk)>.av{grid-area:av;width:48px;height:48px;align-self:start}
#l-blocked>.card:not(.sk)>.cash,#l-blocked>.card:not(.sk)>.mini,#l-blocked>.card:not(.sk) .lh,#l-blocked>.card:not(.sk) .heat,#l-blocked>.card:not(.sk) .ft .ratio,#l-blocked>.card:not(.sk) .ft .ffee{display:none}
#l-blocked>.card:not(.sk) :is(.l1,.l2,.l3){display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;white-space:nowrap}
#l-blocked>.card:not(.sk) .l1{grid-area:l1}#l-blocked>.card:not(.sk) .l2{grid-area:l2;font-size:12px}#l-blocked>.card:not(.sk) .l3{grid-area:l3;gap:4px}
#l-blocked>.card:not(.sk) .l1 .name{display:none}
#l-blocked>.card:not(.sk) .l3 .xr-line{display:block;flex:1 1 0;min-width:0;margin-left:4px}
#l-blocked>.card:not(.sk) .vm{grid-area:vm;display:flex;align-items:baseline;justify-content:flex-end;gap:10px;white-space:nowrap}
#l-blocked>.card:not(.sk) .vm :is(.v,.mc){display:inline-flex;align-items:baseline;gap:4px;margin:0;font-size:12px}
#l-blocked>.card:not(.sk) .vm i{font-style:normal;font-size:10.5px;font-weight:700;color:var(--muted)}
#l-blocked>.card:not(.sk) .vm .mc b{font-size:14px;font-weight:700}
#l-blocked>.card:not(.sk) .ft{grid-area:ft;display:flex;align-items:center;justify-content:flex-end;gap:10px;white-space:nowrap;font-size:12px}
/* only percentages get the fixed number slot; counts sit tight against their label */
.list .card .fact b{min-width:0}
.list .card .fact[data-l$="%"] b{min-width:3ch}
/* the hot seat and the table use the same verdict chip as the cards: tint and hairline, no solid fill, no glow, no pips */
:is(.hotseat,#explore) .xr{height:20px;padding:0 7px;gap:4px;border-radius:4px;font-size:11px;font-weight:700}
:is(.hotseat,#explore) .xr .pips{display:none}
:is(.hotseat,#explore) .xr.clean{background:#86EFAC14;box-shadow:inset 0 0 0 1px #86EFAC59;color:#86EFAC}
:is(.hotseat,#explore) button.xr.clean:hover,:is(.hotseat,#explore) .xr.clean[aria-expanded=true]{background:#86EFAC24;box-shadow:inset 0 0 0 1px #86EFAC80}
:is(.hotseat,#explore) .xr.watch{background:#F5B83D12;box-shadow:inset 0 0 0 1px #F5B83D4d}
:is(.hotseat,#explore) .xr.risky{background:#FF4D6D14;box-shadow:inset 0 0 0 1px #FF4D6D52}
/* Heat: a neutral chip in the same box; the number warms only at the very top */
.list .card .fact.act{background:#ffffff08;box-shadow:inset 0 0 0 1px #ffffff1f;color:var(--text)}
.list .card .fact.act i{color:var(--muted);opacity:1}
.list .card .fact.act[data-l^="Heat 9"] b{color:#FDBA74}
.list .card .fact.act b{min-width:2ch}
/* Blocked view: All or Pumping */
.drawer>header .bk-seg{display:inline-flex;gap:2px;margin-left:auto;padding:2px;border:1px solid var(--line);border-radius:6px;background:var(--canvas,#050607)}
.drawer>header .bk-seg button{margin:0;height:24px;padding:0 9px;border:0;border-radius:4px;background:none;color:var(--muted);font-family:inherit;font-size:12px;font-weight:600;line-height:24px;cursor:pointer}
.drawer>header .bk-seg button b{margin-left:3px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--faint)}
.drawer>header .bk-seg button[aria-pressed=true]{background:var(--surface-2,#171A21);color:var(--text)}
.drawer>header .bk-seg button[aria-pressed=true] b{color:var(--muted)}
.drawer>header .bk-seg+button{margin-left:8px}
.drawer>header>.muted{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bk-empty{margin:0;padding:24px 14px;color:var(--muted);font-size:12.5px}
.bk-empty[hidden]{display:none}
#bk-empty:not([hidden])+.list{display:none}
/* Blocked rows: the reason gets its own line under the chips, so it never loses to them */
#l-blocked>.card:not(.sk){grid-template-areas:"av l1 vm" "av l2 ft" "av l3 l3" "av lw lw"}
#l-blocked>.card:not(.sk) .lw{grid-area:lw;min-width:0}
#l-blocked>.card:not(.sk) .lw .xr-line{display:block;margin:0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* KOLs chip: one button in the line-1 chip set, same box as every tag; names and faces live in its popover */
.list .card .tag.kolc{position:relative;z-index:1;border:0;background:#C4B5FD0d;box-shadow:inset 0 0 0 1px #C4B5FD47;color:#DDD6FE;font-family:inherit;cursor:pointer}
.list .card .tag.kolc b{margin-left:3px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.list .card .tag.kolc.out{background:#F5B83D0f;box-shadow:inset 0 0 0 1px #F5B83D4d;color:#F5C66B}
.list .card .tag.kolc:hover,.list .card .tag.kolc[aria-expanded=true]{background:#C4B5FD1f;box-shadow:inset 0 0 0 1px #C4B5FD80}
.list .card .tag.kolc:focus-visible{outline:2px solid #C4B5FD99;outline-offset:2px}
.list .card .tag.kolc[hidden]{display:none!important}
@media(pointer:coarse){.list .card .tag.kolc::after{content:"";position:absolute;inset:-7px -4px}}
.kols-pop{width:264px;padding:0}
.kols-pop header{padding:11px 12px 8px}
.kols-pop header small{display:block}
.kols-pop .kp-list{display:grid;max-height:260px;overflow:auto;padding:0 4px 4px}
.kols-pop .kp-row{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:8px;min-height:36px;padding:0 8px;border-radius:6px;color:var(--text);text-decoration:none}
.kols-pop .kp-row:hover,.kols-pop .kp-row:focus-visible{background:var(--surface-2,#171A21);outline:none}
.kols-pop .kp-row b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600}
.kols-pop .kp-row span{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
.kols-pop .kp-hold{color:var(--text)}
.kols-pop .kp-sold{color:#F5C66B}
.kols-pop .kp-face{position:relative;width:24px;height:24px;border-radius:50%;overflow:hidden;flex:none}
.kols-pop .kp-face .ident,.kols-pop .kp-face img{position:absolute;inset:0;width:100%;height:100%;border-radius:50%;object-fit:cover}
.kols-pop footer{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0;padding:9px 12px;border-top:1px solid var(--line);font-size:11.5px}
.kols-pop footer span{color:var(--faint)}
.kols-pop footer a{color:var(--green);font-weight:600}
/* Lore: the coin's one-line story, quiet on the handle line; facts in a popover */
.card .lh .lore{position:relative;z-index:1;flex:1 1 0;min-width:0;height:18px;padding:0;border:0;background:none;color:var(--muted);font-family:inherit;font-size:11.5px;font-weight:500;line-height:18px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:help}
.card .lh .lore:hover,.card .lh .lore[aria-expanded=true]{color:var(--text);text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:3px}
.card .lh .lore.lore-low{color:var(--faint)}
.card .lh .lore:focus-visible{outline:2px solid #86EFAC66;outline-offset:1px;border-radius:2px}
.lore-pop{width:300px;padding:0;box-shadow:inset 0 2px 0 var(--line-2),0 24px 60px -16px #000}
.lore-pop header{padding:11px 12px 6px}
.lore-pop header small{display:block}
.lore-pop .lore-conf{flex:none;height:18px;padding:0 6px;border-radius:4px;font-size:10.5px;font-style:normal;font-weight:600;line-height:18px;background:#ffffff08;box-shadow:inset 0 0 0 1px #ffffff1f;color:var(--muted)}
.lore-pop .lore-conf.lore-high{color:#A7F3C4;background:#86EFAC0d;box-shadow:inset 0 0 0 1px #86EFAC38}
.lore-pop .lore-line{margin:0;padding:0 12px 8px;font-size:13px;line-height:1.45;color:var(--text);overflow-wrap:anywhere}
.lore-pop .lore-facts{margin:0;padding:0 12px 10px 26px;display:grid;gap:4px;color:var(--muted);font-size:12px;line-height:1.4}
.lore-pop .lore-facts li{overflow-wrap:anywhere}
.lore-pop .lore-facts a{color:var(--text);text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:3px}
.lore-pop footer{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0;padding:9px 12px;border-top:1px solid var(--line);font-size:11.5px}
.lore-pop footer span{color:var(--faint)}.lore-pop footer a{color:var(--green);font-weight:600}
/* blocked coins shown in a stage lane: one clear red verdict, the buy steps back to a secondary button */
.list .card .xr.blocked{background:#FF4D6D24;box-shadow:inset 0 0 0 1px #FF4D6D8c;color:#FF8FA3}
.list .card button.xr.blocked:hover,.list .card .xr.blocked[aria-expanded=true]{background:#FF4D6D33;box-shadow:inset 0 0 0 1px #FF4D6Dcc}
.card.is-blocked .buy.soft{background:transparent!important;border-color:#ffffff1f!important;color:var(--muted)!important;box-shadow:none!important}
.card.is-blocked .buy.soft:hover,.card.is-blocked .buy.soft:focus-visible{background:#ffffff0d!important;border-color:#ffffff33!important;color:var(--text,#E5E7EB)!important}
.card.is-blocked .buy.soft svg{opacity:.6}
/* the popover headline stays on one line; the check count drops below when the header runs out of room */
.xr-pop header{flex-wrap:wrap;row-gap:2px}
.xr-pop header strong{white-space:nowrap}
/* safety grade: an 18px square letter, first on the chip row. The letter always shows; the tint only backs it up. */
.list .card .grade,.grade-pop .grade.solo{flex:none;display:inline-grid;place-items:center;width:18px;height:18px;padding:0;margin:0;border:0;border-radius:4px;font-family:inherit;font-size:11px;font-weight:800;line-height:1;letter-spacing:0;cursor:pointer;font-variant-numeric:tabular-nums}
.list .card .grade:focus-visible{outline:2px solid #7DD3FC;outline-offset:1px}
.grade.g-a{background:#86EFAC1f;box-shadow:inset 0 0 0 1px #86EFAC66;color:#86EFAC}
.grade.g-b{background:#4ADE8014;box-shadow:inset 0 0 0 1px #4ADE804d;color:#4ADE80}
.grade.g-c{background:#F5B83D14;box-shadow:inset 0 0 0 1px #F5B83D4d;color:var(--watch,#F5B83D)}
.grade.g-d{background:#FA745817;box-shadow:inset 0 0 0 1px #FA745859;color:#FA7458}
.grade.g-f{background:#FF4D6D24;box-shadow:inset 0 0 0 1px #FF4D6D8c;color:#FF8FA3}
.grade.g-wait{background:transparent;box-shadow:inset 0 0 0 1px #ffffff26;color:var(--muted,#6A707A);font-weight:700}
.list .card button.grade:hover,.list .card .grade[aria-expanded=true]{filter:brightness(1.25)}
.grade-pop{box-shadow:inset 0 2px 0 var(--line-2,#272B34),0 24px 60px -16px #000}
.grade-pop header .grade.solo{margin-right:0;width:30px;height:30px;border-radius:6px;font-size:16px;cursor:default}
.gr-list{list-style:none;margin:10px 0;padding:0;display:grid;gap:0}
.gr-list li{display:flex;align-items:flex-start;gap:10px;padding:7px 0;border-top:1px solid #1B1E25}
.gr-list li:first-child{border-top:0}
.gr-list li span{display:grid;gap:2px;min-width:0;margin-right:auto}
.gr-list li b{font-size:12px;font-weight:600;color:var(--text)}
.gr-list li small{font-size:11px;color:var(--soft,#A0A5AF)}
.gr-list li em{flex:none;font-style:normal;font-weight:700;font-variant-numeric:tabular-nums;font-size:12px}
.gr-list li em.neg{color:#FF8FA3}.gr-list li em.pos{color:#86EFAC}
.gr-list li.sk-l{height:14px;margin:8px 0;padding:0;border:0;border-radius:4px;background:linear-gradient(90deg,#12141A,#1B1E25,#12141A);background-size:200% 100%;animation:sk 1.2s linear infinite}
.gr-note{margin:10px 0;color:var(--soft,#A0A5AF);font-size:12px}
@media (prefers-reduced-motion:reduce){.gr-list li.sk-l{animation:none}}
.gr-list li.gr-more b{font-weight:500;color:var(--soft,#A0A5AF)}
.gr-list li.gr-flag b{font-weight:500;color:var(--watch,#F5B83D)}
.gr-uncal{margin:0 0 10px;color:var(--muted,#6A707A);font-size:11px}
/* a grade on a blocked coin: outline only, so a green A never reads as "safe to buy" next to the Blocked chip */
.grade.g-muted{background:transparent!important;box-shadow:inset 0 0 0 1px #ffffff2e!important;color:var(--soft,#A0A5AF)!important}
.gr-block{display:grid;gap:3px;margin:10px 0 0;padding:8px 10px;border-radius:6px;background:#FF4D6D12;box-shadow:inset 0 0 0 1px #FF4D6D40}
.gr-block b{font-size:12px;font-weight:600;color:#FF8FA3}
.gr-block span{font-size:11px;color:var(--soft,#A0A5AF)}
/* strip placeholders: same height as the loaded strip, so nothing below moves when trades land */
.ks-track .sk-pill,.ms-track .sk-pill{flex:none;width:92px;height:18px;border-radius:4px;background:linear-gradient(90deg,#12141A,#1B1E25,#12141A);background-size:200% 100%;animation:sk 1.2s linear infinite}
.strip-empty{color:var(--muted,#6A707A);font-size:11.5px;white-space:nowrap}
@media (prefers-reduced-motion:reduce){.ks-track .sk-pill,.ms-track .sk-pill{animation:none}}
/* tablet (761-1023): three 250px columns crushed the cards (chips under the buy button, 3-letter tickers), so the board view
   uses the phone's lane tabs with one full-width column. Grid and Explore keep their own layouts. */
@media(min-width:761px) and (max-width:1023px){
 body[data-view=board] .mobile-lanes{display:flex;flex:none;align-items:center;gap:20px;height:42px;padding:0 16px;border-bottom:1px solid var(--line)}
 body[data-view=board] .mobile-lanes button{height:42px;background:none;border:0;border-radius:0;padding:0;color:var(--muted);font-size:14px;font-weight:600}
 body[data-view=board] .mobile-lanes .on{color:var(--text);border-bottom:2px solid var(--green)}
 body[data-view=board] #board-columns{display:flex}
 body[data-view=board] .col{display:none;flex:1;min-width:0}
 body[data-view=board][data-lane=new] [data-column=new],body[data-view=board][data-lane=final] [data-column=final],body[data-view=board][data-lane=strong] [data-column=strong]{display:flex}
}
/* grade chip: the letter, then its word (Strong, Solid, Mixed, Weak, Avoid) while the row has room; fit() folds the word first */
.list .card .grade{width:auto;min-width:18px;padding:0 5px;gap:4px;display:inline-flex;align-items:center;justify-content:center}
.list .card .grade b{font-weight:800}
.list .card .grade .gw{font-size:10.5px;font-weight:600;letter-spacing:0}
.list .card .grade .gw[hidden]{display:none}
.list .card .grade:has(.gw[hidden]),.list .card .grade:not(:has(.gw)){width:18px;padding:0}
.gr-base{margin:10px 0 0;padding:8px 10px;border-radius:6px;background:#ffffff06;box-shadow:inset 0 0 0 1px #ffffff12}
.gr-base>b{display:block;font-size:11px;font-weight:600;color:var(--soft,#A0A5AF);text-transform:uppercase;letter-spacing:.06em}
.gr-base ul{list-style:none;margin:6px 0 4px;padding:0;display:grid;gap:5px}
.gr-base li{display:grid;gap:1px;font-size:11.5px}
.gr-base li span{color:var(--soft,#A0A5AF)}
.gr-base li em{font-style:normal;color:var(--text);font-variant-numeric:tabular-nums}
.gr-base li em small{color:var(--muted,#6A707A);font-size:11px}
.gr-base>small{color:var(--muted,#6A707A);font-size:10.5px;cursor:help}
.gr-uncal{margin:10px 0 10px}
/* polled-feed coins: a quiet amber marker on the age line, never folded away */
.list .card .delay{position:relative;z-index:2;flex:none;display:inline-flex;align-items:center;height:16px;padding:0 5px;border-radius:4px;background:#F5B83D12;box-shadow:inset 0 0 0 1px #F5B83D40;color:var(--watch,#F5B83D);font-size:10px;font-weight:600;letter-spacing:.02em;cursor:help}
/* launchpad badge: bottom-right of the avatar, the official logo or a short pill until the file exists */
.av{position:relative}
.av .lp{position:absolute;right:-3px;bottom:-3px;z-index:2}
.lp{display:inline-grid;place-items:center;min-width:16px;height:16px;padding:0 3px;border-radius:5px;background:#0B0C0F;box-shadow:0 0 0 1.5px #050607,inset 0 0 0 1px #ffffff26;color:var(--soft,#A0A5AF);font-size:8.5px;font-weight:800;letter-spacing:.02em;line-height:1;pointer-events:auto}
.lp img{width:14px;height:14px;border-radius:3px;object-fit:cover;display:block}
.lp:has(img){padding:1px}
.lp-payback b{color:#86EFAC}
.table-coin .lp{position:relative;top:-1px;margin-left:6px;vertical-align:middle}
.column-filter .popover .pads{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin:0 0 10px;padding:0;border:0}
.column-filter .popover .pads legend{grid-column:1/-1;margin-bottom:2px}
/* Explore: Trending sort */
.ex-bar{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--line)}
.ex-trend{height:28px;padding:0 12px;border:1px solid var(--line-2,#272B34);border-radius:6px;background:transparent;color:var(--soft,#A0A5AF);font-size:12.5px;font-weight:600;cursor:pointer}
.ex-trend[aria-pressed=true]{border-color:#86EFAC66;color:#86EFAC;background:#86EFAC10}
.ex-bar span{color:var(--muted,#6A707A);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Explore: tags (Copycat, Graduated) beside the name ran into the X-ray column, so the coin column grows to hold them */
#explore table:has(.row-tags .tag) td:first-child,#explore table:has(.row-tags .tag) th:first-child{min-width:330px}
#explore .table-coin>span{grid-template-columns:auto auto auto}
#explore .table-coin small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px}
