/* desk_extras.css — pins, labels, notes, notifications, health, sparklines, timeline (Signal Desk v2, 03-10-2026). Same tokens as index.html (--bg --s1.. --amber). */
.pinb{background:none;border:0;padding:0 4px 0 0;margin:0;color:var(--ghost);font:700 17px/1 var(--sans);cursor:pointer;vertical-align:-1px;opacity:.55}
.pinb:hover{color:var(--amber);opacity:1}.pinb.on{color:var(--amber);opacity:1}
.sb.lb{padding:0 6px}.sb.lb.good{border-color:#1f5a3c}.sb.lb.bad{border-color:#6b4f1d}.sb.lb.rug{border-color:#6b2a2a}.sb.lb.missed{border-color:#244a77}
.sb.nt{padding:0 6px;cursor:help}
/* header: bell + health */
#xbar{display:flex;align-items:center;gap:8px;margin-right:12px}
.xb{position:relative;background:var(--s1);border:1px solid var(--line);color:var(--dim);border-radius:7px;padding:5px 10px;font:600 13px var(--sans);cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.xb:hover{color:var(--amber);border-color:var(--amber)}
.xb em{font-style:normal;background:var(--amber);color:#1a1200;border-radius:9px;padding:0 6px;font:700 11px/16px var(--mono)}
.xb.ok i{width:8px;height:8px;border-radius:50%;background:var(--up);display:inline-block}.xb.warn i{width:8px;height:8px;border-radius:50%;background:var(--warn);display:inline-block}.xb.bad i{width:8px;height:8px;border-radius:50%;background:var(--down);display:inline-block}
.xp{position:fixed;z-index:70;top:58px;right:14px;width:420px;max-width:calc(100vw - 20px);max-height:72vh;overflow:auto;background:var(--s1);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 44px rgba(0,0,0,.65);display:none;font-family:var(--sans)}
.xp.open{display:block}
.xp h4{margin:0;padding:10px 14px;border-bottom:1px solid var(--soft);font:600 12px var(--mono);letter-spacing:1.5px;color:var(--ghost);text-transform:uppercase;display:flex;justify-content:space-between;align-items:center;gap:10px}
.xp h4 button{background:none;border:1px solid var(--line);color:var(--dim);border-radius:6px;padding:2px 8px;font:500 12px var(--sans);cursor:pointer}.xp h4 button:hover{color:var(--amber)}
.nrow{padding:9px 14px;border-bottom:1px solid var(--soft);cursor:pointer;display:grid;grid-template-columns:22px 1fr auto;gap:8px;align-items:start}
.nrow:hover{background:var(--s2)}.nrow.unread{background:#16140c}.nrow b{font-weight:600;font-size:14px}.nrow span{color:var(--ghost);font-size:12px}.nrow .ic{font-size:15px}
.nrow .nb{grid-column:2 / 4;color:var(--dim);font-size:13px;margin-top:-4px}
.xempty{padding:22px 14px;color:var(--ghost);text-align:center}
.hrow{display:grid;grid-template-columns:18px 1fr auto;gap:8px;padding:7px 14px;border-bottom:1px solid var(--soft);font-size:13px;align-items:center}
.hrow .st{font-weight:700}.hrow.ok .st{color:var(--up)}.hrow.warn .st{color:var(--warn)}.hrow.bad .st{color:var(--down)}.hrow small{color:var(--ghost);font:500 12px var(--mono)}
.xset{padding:8px 14px;color:var(--dim);font-size:13px;display:flex;gap:14px;align-items:center;border-top:1px solid var(--soft)}
/* toasts */
#toasts{position:fixed;z-index:95;top:62px;right:14px;display:flex;flex-direction:column;gap:8px;width:340px;max-width:calc(100vw - 20px);pointer-events:none}
.tst{pointer-events:auto;background:var(--s2);border:1px solid var(--line);border-left:3px solid var(--amber);border-radius:8px;padding:9px 12px;box-shadow:0 10px 30px rgba(0,0,0,.6);cursor:pointer;animation:tin .22s ease-out}
.tst b{display:block;font-size:14px}.tst span{color:var(--dim);font-size:13px}
.tst.alerted{border-left-color:var(--up)}.tst.dead,.tst.drop,.tst.wallet_exit{border-left-color:var(--down)}.tst.fomo_thesis{border-left-color:var(--violet)}.tst.tg_call{border-left-color:var(--info)}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
/* drawer controls */
#dlab{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:8px 0 2px}
.lbtn{background:var(--s2);color:var(--dim);border:1px solid var(--line);border-radius:7px;padding:5px 10px;font:600 13px var(--sans);cursor:pointer}
.lbtn:hover{color:var(--txt);border-color:var(--ghost)}
.lbtn.on.good{color:var(--up);border-color:#1f5a3c;background:#0f2118}.lbtn.on.bad{color:var(--warn);border-color:#6b4f1d;background:#241c0c}.lbtn.on.rug{color:var(--down);border-color:#6b2a2a;background:#241212}.lbtn.on.missed{color:var(--info);border-color:#244a77;background:#101c2b}
.lbtn.pin.on{color:var(--amber);border-color:#6b4f1d;background:#241c0c}
#dnw{margin:6px 0 4px}
#dnw textarea{width:100%;min-height:64px;background:var(--bg);border:1px solid var(--soft);border-radius:6px;color:var(--txt);padding:8px 10px;font:14px var(--sans);resize:vertical}
#dnw .nh{color:var(--ghost);font:500 11px var(--mono);margin-top:4px}
/* sparkline + path chart + timeline */
.spk{display:block;margin-top:2px}
.pchart{width:100%;height:96px;display:block}
.tl{margin-top:4px;border-left:2px solid var(--soft);padding-left:12px}
.tli{position:relative;padding:5px 0 7px}
.tli::before{content:'';position:absolute;left:-18px;top:11px;width:8px;height:8px;border-radius:50%;background:var(--ghost);border:2px solid var(--s1)}
.tli.k-alert::before{background:var(--up)}.tli.k-wallet_out::before,.tli.k-dead::before{background:var(--down)}.tli.k-wallet_in::before{background:var(--violet)}.tli.k-fomo::before{background:var(--violet)}.tli.k-tg::before,.tli.k-private::before{background:var(--info)}.tli.k-x::before{background:#fff}
.tli .t{color:var(--ghost);font:500 11px var(--mono)}.tli .tx{font-size:13px;color:var(--txt);overflow-wrap:anywhere}.tli .tx small{color:var(--dim)}
/* signal-source dots */
.cf{display:inline-flex;gap:2px;margin-left:6px;vertical-align:middle}.cf i{width:5px;height:9px;border-radius:1px;background:var(--nil)}.cf i.on{background:var(--info)}.cf.hi i.on{background:var(--up)}

#tabs button[data-n]:not([data-n=""])::after{content:" " attr(data-n);color:var(--amber);font-weight:700}

td.x{position:relative}.spw{position:absolute;left:8px;top:50%;transform:translateY(-50%);line-height:0;pointer-events:none}

/* narrow screens (phone / small tablet): each row becomes a card — token on top, then age, market cap, score and state; the drawer goes full screen */
@media (max-width:900px){
  .top{flex-wrap:wrap;height:auto;padding:8px 12px;gap:8px}.top .kpis{display:none}.top a{font-size:12px!important;padding:4px 8px!important;margin:0!important}.brand small{display:none}
  .bar{flex-wrap:wrap;gap:8px;padding:8px 12px}.bar .chains,.bar .presets{flex-wrap:wrap}
  .wrap{overflow-x:hidden}
  table,thead,tbody{display:block;width:100%}thead{display:none}colgroup{display:none}
  tbody tr{display:grid;grid-template-columns:repeat(4,1fr);gap:4px 10px;padding:10px 12px;border-bottom:1px solid var(--soft)}
  tbody td{display:none;padding:0;border:0;text-align:left}
  tbody td:nth-child(1){display:block;grid-column:1/-1}
  tbody td:nth-child(2),tbody td:nth-child(3),tbody td:nth-child(8){display:block}
  .spw{display:none}.xp{left:8px!important;right:8px;width:auto!important}
  .dr.open{position:fixed;inset:0;width:100%!important;z-index:80}.dri{width:100%!important}
}

/* layout: the table area fills whatever is left under the header + toolbar. It used to be calc(100vh - 56px - 57px), which assumed a one-row toolbar; the
   Columns / Views / CSV / Help buttons wrap the toolbar onto a second row (99 px), pushing the last table row (and the scrollbar) 42 px below the window. */
body{display:flex;flex-direction:column;height:100vh}
.top,.bar{flex:0 0 auto}
.main{flex:1 1 0;min-height:0;height:auto}

/* nav buttons in the header carry an illustration instead of an arrow */
.nav-i{width:20px;height:20px;display:block;flex:none}
.top a[href$=".html"]{display:inline-flex;align-items:center;gap:7px}

/* Wallets cell: illustrations instead of the letters A / D / out */
.wi{display:inline-flex;align-items:center;gap:4px;margin-left:8px;white-space:nowrap}.wi:first-child{margin-left:0}
.wi img{width:19px;height:19px;display:block}.wi.dim img{opacity:.35}
.st b .wo{font-size:inherit;font-weight:600}

/* TG / X badges: the operator's app icons instead of the letters */
.sb img.bi{width:17px;height:17px;display:block;border-radius:4px}

/* badges: white outline when nothing new; the amber (hot) outline stays when something arrived in the last hour */
.sb.tg:not(.hot),.sb.sx:not(.hot),.sb.fm:not(.hot),.sb.lo{border-color:rgba(236,239,243,.38)}
.sb.tg:not(.hot):hover,.sb.sx:not(.hot):hover,.sb.fm:not(.hot):hover,.sb.lo:hover{border-color:var(--amber)}
/* forensic warning badge (05-10-2026): amber outline, red when the post states >= 2 independent red flags */
.sb.wn{border-color:#6b4f1d;color:var(--warn)}.sb.wn.hot{border-color:#6b2a2a;color:var(--down)}.sb.wn i{font-style:normal;margin-right:2px}
/* forensics marker inside the X badge */
.sb.sx em.fw{font-style:normal;margin-left:3px;color:var(--warn)}.sb.sx em.fw.hot{color:var(--down)}

/* header spacing (06-10-2026): nav links were 22 px (flex gap) + 10-14 px (inline margin) apart = 32-36 px; now 8 px between links, 10 px to the bell, 12 px to the live dot */
.top > a[href$=".html"]{margin-right:0 !important}
.top > a[href$=".html"] + a[href$=".html"]{margin-left:-14px}
.top > #xbar{margin-left:-12px;margin-right:0}
.top > #xbar + .live{margin-left:-10px !important}
