:root{
  --bg:#07070b; --win:rgba(17,16,27,.84); --win2:#15141f; --head:rgba(255,255,255,.02); --line:#23213a; --line2:#34315a;
  --ink:#f3f1ff; --ink2:#bdb8dc; --muted:#78749c; --acc:#b9a6ff; --acc2:#8f72ff; --up:#43e0a1; --down:#ff5f7e; --amber:#ffc46b;
  --sans:'Geist',ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif; --mono:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:400 14px/1.5 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}
[hidden]{display:none!important}
button{font:inherit;color:inherit;cursor:pointer}
.bgfx{position:fixed;inset:0;pointer-events:none;background:
  radial-gradient(900px 520px at 18% 12%,rgba(143,114,255,.12),transparent 60%),
  radial-gradient(800px 600px at 85% 90%,rgba(185,166,255,.08),transparent 60%),
  radial-gradient(rgba(255,255,255,.035) 1px,transparent 1.4px) 0 0/22px 22px}

/* top bar */
.top{position:relative;z-index:5;height:54px;display:flex;align-items:center;gap:18px;padding:0 18px;border-bottom:1px solid var(--line);background:rgba(10,9,16,.7);backdrop-filter:blur(10px)}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;font:700 15px var(--sans);letter-spacing:.14em}
.brand img{width:28px;height:28px;filter:drop-shadow(0 0 12px rgba(185,166,255,.35))}
.pipe{display:flex;align-items:center;gap:8px;font:500 12px var(--mono);color:var(--muted)}
.pipe span{padding:3px 8px;border-radius:6px;transition:all .25s}
.pipe span.on{color:#120f1f;background:var(--acc);box-shadow:0 0 18px rgba(185,166,255,.45)}
.pipe i{width:10px;height:1px;background:var(--line2)}
.sp{flex:1}
.pill{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 12px;border-radius:8px;border:1px solid var(--line);background:var(--win2);font:500 12px var(--mono);color:var(--ink2)}
.pill.live b{width:7px;height:7px;border-radius:50%;background:var(--muted)}
.pill.live.on b{background:var(--up);box-shadow:0 0 10px var(--up);animation:pulse 1.6s infinite}
.pill.ca{color:#120f1f;background:var(--acc);border-color:var(--acc);font-weight:700}
.btn{height:30px;padding:0 14px;border-radius:8px;border:1px solid var(--line2);background:linear-gradient(180deg,#1d1a2e,#15131f);font:600 12.5px var(--sans)}
.btn:hover{border-color:var(--acc)}
.btn.on{border-color:var(--up);color:var(--up)}
@keyframes pulse{50%{opacity:.35}}

/* desk + windows */
.desk{position:relative;height:calc(100% - 54px - 30px)}
.win{position:absolute;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:14px;background:var(--win);backdrop-filter:blur(14px);box-shadow:0 24px 60px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.03);overflow:hidden;transition:box-shadow .3s,border-color .3s}
.win.focus{border-color:rgba(185,166,255,.55);box-shadow:0 24px 60px rgba(0,0,0,.45),0 0 0 1px rgba(185,166,255,.18),0 0 40px rgba(143,114,255,.18)}
.win>header{display:flex;align-items:center;gap:9px;height:38px;padding:0 12px;border-bottom:1px solid var(--line);background:var(--head);cursor:grab;user-select:none;flex:none}
.win>header b{font:600 13px var(--sans)}
.win>header em{font:400 11.5px var(--mono);color:var(--muted);font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ic{width:20px;height:20px;display:grid;place-items:center;border-radius:6px;background:rgba(185,166,255,.12);color:var(--acc);font:700 11px var(--mono)}
.tag{font:500 11px var(--mono);color:var(--ink2);padding:2px 8px;border-radius:6px;border:1px solid var(--line);white-space:nowrap}
.body{flex:1;min-height:0;position:relative}
.scroll{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
#w-scan{left:1%;top:1.5%;width:31%;height:57%}
#w-term{left:1%;top:60%;width:31%;height:38.5%}
#w-map{left:33%;top:1.5%;width:36%;height:57%}
#w-room{left:33%;top:60%;width:36%;height:38.5%}
#w-books{left:70%;top:1.5%;width:29%;height:41%}
#w-notes{left:70%;top:44%;width:29%;height:54.5%}

/* scanner */
.tbl{width:100%;border-collapse:collapse;font:500 12.5px var(--mono)}
.tbl th{position:sticky;top:0;background:#121120;text-align:left;font:500 10.5px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:9px 12px;border-bottom:1px solid var(--line)}
.tbl td{padding:0 12px;height:40px;border-bottom:1px solid rgba(255,255,255,.035);white-space:nowrap}
.tbl .r{text-align:right}
.tbl tr.row{animation:rowIn .45s both}
.tbl tr.row.hot td{background:rgba(185,166,255,.10)}
.tbl tr.row.hot td:first-child{box-shadow:inset 3px 0 0 var(--acc)}
.tbl tr.empty td{color:var(--muted);font:400 13px var(--sans);height:60px}
.coin{display:flex;align-items:center;gap:9px;font:600 13px var(--sans)}
.coin img,.coin .mono{width:22px;height:22px;border-radius:6px;object-fit:cover;background:#221f36;display:grid;place-items:center;font:700 10px var(--mono);color:var(--acc)}
.up{color:var(--up)}.dn{color:var(--down)}.mut{color:var(--muted)}
@keyframes rowIn{from{opacity:0;transform:translateY(6px)}}

/* terminal */
.term{padding:12px 14px;font:500 12.5px/1.65 var(--mono);color:var(--ink2)}
.term .ln{white-space:pre-wrap;word-break:break-word}
.term .p{color:var(--acc)}.term .ok{color:var(--up)}.term .bad{color:var(--down)}.term .dim{color:var(--muted)}
.term .cur{display:inline-block;width:7px;height:14px;background:var(--acc);vertical-align:-2px;animation:pulse 1s steps(2) infinite}

/* owner map */
.map{display:grid;grid-template-columns:1fr 250px;min-height:0}
.bubwrap{position:relative;min-height:0;border-right:1px solid var(--line);background:radial-gradient(circle at 50% 45%,rgba(143,114,255,.10),transparent 70%)}
#bub{position:absolute;inset:0;width:100%;height:100%}
#bub .cl{transform-box:fill-box;transform-origin:center;animation:pop .5s cubic-bezier(.3,1.5,.5,1) both}
@keyframes pop{from{transform:scale(0);opacity:0}}
.stamp{position:absolute;right:18px;top:16px;font:800 30px var(--mono);letter-spacing:.12em;padding:4px 14px;border:3px solid currentColor;border-radius:10px;transform:rotate(-8deg) scale(1.6);opacity:0;transition:all .35s cubic-bezier(.3,1.6,.5,1)}
.stamp.on{opacity:1;transform:rotate(-8deg) scale(1)}
.stamp.skip{color:var(--down);text-shadow:0 0 18px rgba(255,95,126,.5)}
.stamp.clean{color:var(--up);text-shadow:0 0 18px rgba(67,224,161,.45)}
.facts{padding:12px 14px;overflow:auto;display:flex;flex-direction:column;gap:9px}
.fx{font:400 12.5px/1.5 var(--sans);color:var(--ink2)}
.fx.muted{color:var(--muted)}
.fct{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:9px;background:rgba(255,255,255,.025);border:1px solid var(--line);animation:rowIn .4s both}
.fct span{font:500 10.5px var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.fct b{font:600 15px var(--mono)}
.fct i{font:400 11.5px var(--sans);font-style:normal;color:var(--ink2)}
.fct.bad{border-color:rgba(255,95,126,.4);background:rgba(255,95,126,.06)}
.fct.bad b{color:var(--down)}

/* the room */
.room{display:flex;flex-direction:column;gap:10px;padding:12px 14px}
.prop{flex:1;min-height:0;display:flex;align-items:stretch}
.idle{align-self:center;color:var(--muted);font:400 13px/1.55 var(--sans);max-width:440px}
.card{flex:1;display:flex;flex-direction:column;gap:10px}
.ptop{display:flex;align-items:center;gap:10px}
.psym{font:700 20px var(--sans)}
.pmeta{font:500 12px var(--mono);color:var(--muted)}
.clock{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;font:700 16px var(--mono);border:2px solid var(--acc);color:var(--acc);box-shadow:0 0 20px rgba(185,166,255,.25)}
.ghostbtn{height:40px;border-radius:10px;display:grid;place-items:center;font:700 13px var(--mono);letter-spacing:.06em;color:#120f1f;background:linear-gradient(180deg,#cfc2ff,#a58dff);box-shadow:0 0 30px rgba(143,114,255,.35);transition:transform .15s}
.ghostbtn.press{transform:scale(.96)}
.ghostbtn.dead{background:#25223a;color:var(--muted);box-shadow:none}
.meter{display:flex;height:10px;border-radius:6px;overflow:hidden;background:#1e1c2e}
.meter .mt{background:var(--up);width:0;transition:width .35s}
.meter .ms{background:var(--down);width:0;margin-left:auto;transition:width .35s}
.mlab{display:flex;justify-content:space-between;font:500 11.5px var(--mono);color:var(--muted)}
.mlab b{color:var(--ink)}
.vbtns{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.vb{height:40px;border-radius:10px;border:1px solid var(--line2);background:#16141f;font:700 13.5px var(--sans);transition:all .15s}
.vb.take:hover,.vb.take.mine{border-color:var(--up);color:var(--up);background:rgba(67,224,161,.08)}
.vb.skip:hover,.vb.skip.mine{border-color:var(--down);color:var(--down);background:rgba(255,95,126,.08)}
.vb:disabled{opacity:.45;cursor:default}
.verdict{font:700 13px var(--mono);min-height:18px}
.vs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.vs div{padding:8px 10px;border-radius:9px;border:1px solid var(--line);background:rgba(255,255,255,.02);display:flex;flex-direction:column}
.vs span{font:500 10.5px var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.vs b{font:700 16px var(--mono)}

/* books */
.books{display:flex;flex-direction:column;gap:10px;padding:12px 14px;min-height:0}
.eqrow{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.eq{display:flex;flex-direction:column;padding:8px 10px;border-radius:10px;border:1px solid rgba(185,166,255,.35);background:rgba(185,166,255,.06)}
.eq.g{border-color:var(--line);background:rgba(255,255,255,.02)}
.eq span{font:500 10.5px var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.eq b{font:700 20px var(--mono)}
.eq i{font:600 12px var(--mono);font-style:normal}
#curve{width:100%;height:96px;flex:none}
.pos{display:flex;flex-direction:column;gap:6px;overflow:auto;min-height:0}
.pr{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:8px;background:rgba(255,255,255,.025);font:500 12.5px var(--mono);animation:rowIn .4s both}
.pr b{font:600 13px var(--sans)}

/* journal */
.notes{padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.nt{display:grid;grid-template-columns:52px 1fr;gap:8px;font:400 13px/1.5 var(--sans);color:var(--ink2);animation:rowIn .4s both}
.nt time{font:500 11px var(--mono);color:var(--muted);padding-top:2px}
.nt.skip p,.nt.veto p{color:#ffc2cf}.nt.buy p{color:#c9f7e3}.nt.sell p{color:var(--ink)}.nt.propose p{color:#e2dbff}
.nt p{margin:0}

/* status bar */
.status{position:relative;z-index:5;height:30px;display:flex;align-items:center;gap:22px;padding:0 18px;border-top:1px solid var(--line);background:rgba(10,9,16,.85);font:500 11.5px var(--mono);color:var(--muted)}
.status .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--up);margin-right:6px;box-shadow:0 0 8px var(--up)}

/* the ghost cursor */
#ghost{position:fixed;left:0;top:0;z-index:50;pointer-events:none;will-change:transform}
#ghost svg{position:absolute;left:-6px;top:-5px;filter:drop-shadow(0 0 10px rgba(185,166,255,.75)) drop-shadow(0 6px 10px rgba(0,0,0,.5));animation:float 2.4s ease-in-out infinite}
#ghost .trail{position:absolute;left:-2px;top:-1px;width:16px;height:16px;border-radius:50%;background:radial-gradient(circle,rgba(185,166,255,.35),transparent 70%);will-change:transform}
.glab{position:absolute;left:30px;top:24px;white-space:nowrap;font:600 11.5px var(--mono);color:#120f1f;background:var(--acc);padding:3px 8px;border-radius:7px;box-shadow:0 6px 18px rgba(0,0,0,.4)}
@keyframes float{50%{transform:translate(1px,-3px) rotate(-2deg)}}
.ripple{position:fixed;z-index:49;width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;border:2px solid var(--acc);opacity:0;pointer-events:none}
.ripple.go{animation:rip .55s ease-out}
@keyframes rip{from{transform:scale(.3);opacity:1}to{transform:scale(1.6);opacity:0}}
.toast{position:fixed;left:50%;bottom:48px;transform:translate(-50%,20px);z-index:60;padding:10px 16px;border-radius:10px;background:#1b1830;border:1px solid var(--line2);font:600 13px var(--sans);opacity:0;transition:all .3s;pointer-events:none}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* phones and small screens: windows stack, the ghost rests */
@media (max-width:1100px){
  html,body{overflow:auto;height:auto}
  .pipe{display:none}
  .top{padding:0 12px;gap:10px}
  #connect{display:none}
  .desk{height:auto;display:flex;flex-direction:column;gap:12px;padding:12px}
  .win{position:relative;left:auto!important;top:auto!important;width:auto!important;height:auto!important}
  .win>header{cursor:default}
  #w-scan .body,#w-term .body,#w-notes .body{max-height:330px}
  .map{grid-template-columns:1fr}.bubwrap{height:260px;border-right:0;border-bottom:1px solid var(--line)}
  .status{flex-wrap:wrap;height:auto;padding:8px 12px;gap:10px}
  #stApi{display:none}
  #ghost,.ripple{display:none}
}

/* fixes: one-line ghost button, tighter room, scanner verdict tags */
.ghostbtn{display:flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;height:36px}
.room{gap:8px;padding:10px 14px}
.card{gap:8px}
.vb{height:36px}
.prop{overflow:hidden}
.vs div{padding:6px 10px}
.tbl .pass{font:700 10.5px var(--mono);letter-spacing:.08em;color:#120f1f;background:var(--acc);padding:2px 7px;border-radius:5px}
.tbl .why{font:500 11px var(--mono);color:var(--muted)}
.tbl tr.row:not(.hot) td:last-child{opacity:.9}

/* scanner columns fit the window; long reasons end in an ellipsis */
.tbl{table-layout:fixed}
.tbl th:nth-child(1){width:30%}.tbl th:nth-child(2){width:15%}.tbl th:nth-child(3){width:11%}.tbl th:nth-child(4){width:15%}.tbl th:nth-child(5){width:29%}
.tbl td{overflow:hidden;text-overflow:ellipsis}
.tbl td:first-child .coin{overflow:hidden;text-overflow:ellipsis}
.tbl th,.tbl td{padding-left:10px;padding-right:10px}

/* idle peek: the row the ghost is glancing at */
.tbl tr.row.peek td{background:rgba(185,166,255,.07);transition:background .2s}
