@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
:root{
  --navy:#0A1931;--graph:#2C3142;--cyan:#00D4FF;--nb:#070B14;
  --sw:#F2F5FA;--amber:#FBBF24;--red:#EF4444;--green:#4ADE80;
  --purple:#8B5CF6;--orange:#FF8C00;
  --pbg:rgba(7,11,20,0.85);--bdr:rgba(0,212,255,0.16);
  --bdr2:rgba(0,212,255,0.08);
  --muted:#8A94A8;--muted-2:#5A6478;
}
*{margin:0;padding:0;box-sizing:border-box;}
html,body{width:100%;height:100%;overflow:hidden;background:var(--nb);color:var(--sw);font-family:'Inter',system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;}

/* ══ SPLASH (v1.4 reskin) ══
   Slow-drifting multi-color nebula behind the starfield, instead of the
   flat two-gradient navy backdrop. Colors pull from --purple/--orange so
   it still reads as the same brand family, just less flat. */
#splash{position:fixed;inset:0;z-index:9999;
  background-color:#070B14;
  background-image:
    radial-gradient(1200px 700px at 15% -10%, rgba(0,212,255,0.09), transparent 60%),
    radial-gradient(900px 600px at 95% 110%, rgba(0,119,255,0.07), transparent 60%),
    radial-gradient(720px 520px at 82% 18%, rgba(139,92,246,0.06), transparent 65%),
    radial-gradient(650px 550px at 6% 88%, rgba(255,140,0,0.045), transparent 65%);
  background-repeat:no-repeat;
  background-size:150% 150%;
  animation:splashDrift 48s ease-in-out infinite alternate;
  display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity 1.2s ease;}
@keyframes splashDrift{
  0%{background-position:0% 0%,100% 100%,100% 0%,0% 100%;}
  100%{background-position:9% 7%,91% 93%,86% 12%,12% 90%;}
}
#splash.hide{opacity:0;pointer-events:none;}
#sp-stars{position:absolute;inset:0;z-index:0;display:block;}
.sp-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,212,255,0.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,212,255,0.03) 1px,transparent 1px);background-size:48px 48px;pointer-events:none;z-index:1;
  -webkit-mask-image:radial-gradient(120% 90% at 50% 45%, #000 40%, transparent 88%);
  mask-image:radial-gradient(120% 90% at 50% 45%, #000 40%, transparent 88%);}
.sp-scan{position:absolute;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(0,212,255,0.5),transparent);animation:scan 2.5s linear infinite;}
@keyframes scan{0%{top:0}100%{top:100%}}
.sp-corner{position:absolute;width:28px;height:28px;border-color:rgba(0,212,255,0.4);border-style:solid;}
.sp-corner.tl{top:20px;left:20px;border-width:1px 0 0 1px;}
.sp-corner.tr{top:20px;right:20px;border-width:1px 1px 0 0;}
.sp-corner.bl{bottom:20px;left:20px;border-width:0 0 1px 1px;}
.sp-corner.br{bottom:20px;right:20px;border-width:0 1px 1px 0;}
#sp-logo{width:auto;height:76px;max-width:280px;object-fit:contain;position:relative;z-index:1;margin-bottom:20px;animation:logopulse 2s ease-in-out infinite;}
@keyframes logopulse{0%,100%{filter:drop-shadow(0 0 10px rgba(0,212,255,0.5))}50%{filter:drop-shadow(0 0 30px rgba(0,212,255,1)) drop-shadow(0 0 60px rgba(0,212,255,0.3))}}
.sp-ring{position:absolute;width:130px;height:130px;border-radius:50%;border:1px solid rgba(0,212,255,0.2);animation:ringspin 6s linear infinite;top:calc(50% - 65px - 40px);}
.sp-ring::before{content:'';position:absolute;top:-3px;left:50%;width:6px;height:6px;margin-left:-3px;border-radius:50%;background:var(--cyan);box-shadow:0 0 10px var(--cyan);}
.sp-ring2{position:absolute;width:155px;height:155px;border-radius:50%;border:1px solid rgba(139,92,246,0.14);animation:ringspin 10s linear infinite reverse;top:calc(50% - 77px - 40px);}
.sp-ring2::before{content:'';position:absolute;bottom:-3px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--purple);box-shadow:0 0 8px var(--purple);}
@keyframes ringspin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.sp-sub{font-family:'JetBrains Mono',monospace;font-size:10px;color:rgba(0,212,255,0.6);letter-spacing:4px;position:relative;z-index:1;margin-bottom:6px;}
.sp-powered{position:absolute;left:0;right:0;bottom:20px;display:flex;align-items:center;justify-content:center;gap:8px;z-index:1;}
.sp-powered img{width:38px;height:38px;object-fit:contain;opacity:0.85;}
.sp-powered span{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--muted);text-transform:uppercase;}
.sp-ver{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.25);letter-spacing:3px;position:relative;z-index:1;margin-bottom:32px;}
.sp-bar-wrap{width:280px;height:2px;background:rgba(0,212,255,0.08);border-radius:1px;overflow:hidden;position:relative;z-index:1;margin-bottom:10px;}
.sp-bar{height:100%;width:0%;background:linear-gradient(90deg,var(--cyan),#fff,var(--cyan));border-radius:1px;box-shadow:0 0 8px var(--cyan);transition:width 0.1s linear;}
.sp-msg{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.4);letter-spacing:2px;position:relative;z-index:1;min-height:14px;text-align:center;}

/* ══ APP ══ */
#app{position:fixed;inset:0;display:flex;flex-direction:column;opacity:0;transition:opacity 0.8s ease;
  background:
    radial-gradient(1200px 700px at 15% -10%, rgba(0,212,255,0.05), transparent 60%),
    radial-gradient(900px 600px at 95% 110%, rgba(0,119,255,0.04), transparent 60%),
    var(--nb);
}
#app.show{opacity:1;}

/* ══ TOPBAR ══ */
#topbar{height:46px;min-height:46px;background:rgba(5,7,10,0.98);border-bottom:1px solid var(--bdr);display:flex;align-items:center;padding:0 10px;gap:6px;z-index:500;flex-shrink:0;overflow:visible;}
.tb-logo{height:26px;width:auto;max-width:160px;object-fit:contain;filter:drop-shadow(0 0 6px rgba(0,212,255,0.4));flex-shrink:0;}
.tb-brand{font-family:'Inter',sans-serif;font-size:11px;font-weight:900;color:var(--cyan);letter-spacing:3px;flex-shrink:0;}
.tb-tag{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.5);background:rgba(0,212,255,0.06);border:1px solid rgba(0,212,255,0.12);padding:2px 6px;border-radius:6px;letter-spacing:2px;flex-shrink:0;}
.tb-div{width:1px;height:20px;background:var(--bdr);flex-shrink:0;margin:0 2px;}
.tb-gap{flex:1;}
.tb-btn{padding:5px 11px;border-radius:20px;background:transparent;border:1px solid rgba(0,212,255,0.15);color:rgba(242,245,250,0.55);font-family:'JetBrains Mono',monospace;font-size:9px;cursor:pointer;transition:all 0.15s;letter-spacing:0.5px;display:flex;align-items:center;gap:4px;white-space:nowrap;flex-shrink:0;}
a.tb-btn{text-decoration:none;}
.tb-btn:hover,.tb-btn.on{background:rgba(0,212,255,0.1);border-color:var(--cyan);color:var(--sw);}
.tb-btn.locked-free{opacity:0.55;}
.tb-btn.locked-free:hover{opacity:0.85;border-color:rgba(0,212,255,0.15);background:transparent;}
.lock-badge{font-size:8px;}
.tb-badge{background:var(--cyan);color:#000;font-size:8px;font-weight:700;padding:1px 4px;border-radius:14px;min-width:14px;text-align:center;}
.tb-badge.w{background:var(--amber);}.tb-badge.c{background:var(--red);}
#tb-clock{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--cyan);letter-spacing:2px;padding:4px 10px;border:1px solid rgba(0,212,255,0.15);border-radius:20px;background:rgba(0,212,255,0.04);flex-shrink:0;}
.tb-stat{display:flex;flex-direction:column;align-items:center;flex-shrink:0;}
.tb-stat-v{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--sw);}

/* ── TOPBAR DROPDOWN GROUPS ── */
.tb-dropdown{position:relative;flex-shrink:0;}
.tb-dgroup{padding:5px 11px;border-radius:20px;background:transparent;border:1px solid rgba(0,212,255,0.15);color:rgba(242,245,250,0.55);font-family:'JetBrains Mono',monospace;font-size:9px;cursor:pointer;transition:all 0.15s;letter-spacing:0.5px;display:flex;align-items:center;gap:4px;white-space:nowrap;}
.tb-dgroup:hover,.tb-dgroup.open,.tb-dgroup.has-on{background:rgba(0,212,255,0.1);border-color:var(--cyan);color:var(--sw);}
.tb-dgroup .car{font-size:7px;opacity:0.6;margin-left:2px;}
.tb-dmenu{position:absolute;top:calc(100% + 4px);left:0;background:rgba(5,7,10,0.98);border:1px solid var(--cyan);border-radius:10px;display:none;flex-direction:column;min-width:150px;z-index:600;box-shadow:0 8px 24px rgba(0,0,0,0.6);padding:4px;gap:2px;}
.tb-dmenu.open{display:flex;}
.tb-dmenu .tb-btn{width:100%;justify-content:flex-start;border-color:transparent;}
.tb-dmenu .tb-btn:hover,.tb-dmenu .tb-btn.on{background:rgba(0,212,255,0.12);border-color:var(--cyan);}

/* ── HISTORY MODE ── */
#history-banner{position:fixed;top:46px;left:0;right:0;z-index:450;background:linear-gradient(90deg,rgba(0,212,255,0.18),rgba(0,212,255,0.04));border-bottom:1px solid var(--cyan);color:var(--cyan);font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:2px;text-align:center;padding:5px 0;display:none;align-items:center;justify-content:center;gap:10px;}
#history-banner.show{display:flex;}
.hist-icon{width:14px;height:14px;object-fit:contain;filter:drop-shadow(0 0 4px var(--cyan));vertical-align:middle;}
.ui-icon{width:13px;height:13px;object-fit:contain;vertical-align:-2px;margin-right:3px;}
.ui-icon.close{width:11px;height:11px;margin-right:0;opacity:0.7;cursor:pointer;}
.ui-icon.close:hover{opacity:1;}
#hist-scrubber{width:100%;height:40px;background-image:url('https://i.postimg.cc/CMczwZ3R/Timeline-Scrubber-Track-Handle.png');background-repeat:no-repeat;background-position:center;background-size:contain;position:relative;margin-top:6px;}
#hist-scrubber input[type=range]{width:100%;height:40px;opacity:0;cursor:pointer;position:relative;z-index:2;margin:0;}
.tb-stat-l{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(0,212,255,0.3);letter-spacing:1px;}
.live-dot{width:5px;height:5px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:blink 1.4s ease-in-out infinite;flex-shrink:0;}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0.15}}

/* ══ BODY ══ */
#body{flex:1;display:flex;min-height:0;position:relative;}
#canvas-wrap{flex:1;min-width:0;position:relative;overflow:hidden;}
#sim-canvas{position:absolute;inset:0;width:100%;height:100%;}

/* ══ HUD OVERLAYS ══ */
.hud{position:absolute;font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.18);letter-spacing:1px;pointer-events:none;line-height:2;}
#hud-tl{top:8px;left:8px;}
#hud-tr{top:8px;right:8px;text-align:right;}
#hud-bl{bottom:56px;left:8px;}
#zoom-info{position:absolute;bottom:56px;right:8px;font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.2);letter-spacing:1px;text-align:right;pointer-events:none;}

/* ══ SATELLITE FOCUS BADGE ══ */
#focus-badge{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:250;background:rgba(5,7,10,0.9);border:1px solid var(--cyan);border-radius:8px;padding:6px 10px;display:flex;align-items:center;gap:10px;backdrop-filter:blur(10px);box-shadow:0 0 12px rgba(0,212,255,0.15);}
#focus-badge-name{font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:700;color:var(--cyan);letter-spacing:1.5px;}
#focus-badge-clear{font-family:'JetBrains Mono',monospace;font-size:10px;color:rgba(242,245,250,0.5);cursor:pointer;padding:0 2px;}
#focus-badge-clear:hover{color:var(--red);}

/* ══ RELAY LIVE BANNER ══ */
#relay-live-banner{position:absolute;top:12px;left:12px;z-index:250;background:rgba(5,7,10,0.9);border:1px solid var(--red);border-radius:8px;padding:6px 10px;display:flex;align-items:center;gap:7px;backdrop-filter:blur(10px);box-shadow:0 0 12px rgba(239,68,68,0.2);font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:700;color:#ff8080;letter-spacing:1px;}
#relay-live-banner .dot{width:7px;height:7px;border-radius:50%;background:var(--red);animation:relayLivePulse 1.4s ease-in-out infinite;}
#relay-live-banner #relay-live-host{color:#f2f5fa;}
@keyframes relayLivePulse{0%,100%{opacity:1;}50%{opacity:0.25;}}

/* ══ SAT TOOLTIP ══ */
#sat-tip{position:absolute;pointer-events:none;opacity:0;transition:opacity 0.15s;z-index:300;}
#sat-tip.pinned{top:56px;right:8px;left:auto!important;}
#country-tip{position:absolute;pointer-events:none;opacity:0;transition:opacity 0.15s;z-index:300;}
#country-tip.pinned{top:56px;left:8px;right:auto!important;}

/* ══ RELAY OBSERVER-ONLY MODE ══
   Applied when an expired/archived-license account reaches QOSE via a
   relay invite link (see auth.js completeAuthGate). They get the 3D
   scene (needed to watch Relay at all) but not the controls a real paid
   session has — launch, ops, data, tools, admin. Bridge stays available
   (communication, not sim control). Relay's own topbar button is
   DELIBERATELY hidden too, not excluded like Bridge — it opens the HOST
   panel (start-a-session, generate-invite-link, approve/deny), and an
   observer must never be able to become a host of their own session.
   Their own join/status UI comes from #relay-join-overlay instead, which
   relayCheckJoinParam() already opens automatically on load — no topbar
   entry point needed for it. */
body.relay-observer-only #topbar .tb-btn:not([onclick*="bridge-panel"]),
body.relay-live-watching #topbar .tb-btn:not([onclick*="bridge-panel"]){display:none!important;}
body.relay-observer-only #launch-panel,
body.relay-live-watching #launch-panel{display:none!important;}
#sat-tip.show{opacity:1;}
#country-tip.show{opacity:1;}
.st-box{background:rgba(5,7,10,0.96);border:1px solid rgba(0,212,255,0.25);border-radius:10px;padding:10px 12px;min-width:160px;backdrop-filter:blur(10px);}
.st-name{font-family:'Inter',sans-serif;font-size:9px;font-weight:700;color:var(--cyan);letter-spacing:2px;margin-bottom:8px;padding-bottom:5px;border-bottom:1px solid var(--bdr2);}
.st-row{display:flex;justify-content:space-between;margin-bottom:2px;gap:12px;}
.st-k{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.3);letter-spacing:1px;}
.st-v{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--sw);}
.st-v.g{color:var(--green)}.st-v.y{color:var(--amber)}.st-v.r{color:var(--red)}

/* ══ SPEED BAR ══ */
#speed-bar{position:absolute;bottom:10px;left:50%;transform:translateX(-50%);z-index:200;background:var(--pbg);border:1px solid var(--bdr);border-radius:14px;padding:6px 14px;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 10px;max-width:94vw;backdrop-filter:blur(14px);}
.sp-lbl{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.4);letter-spacing:2px;}
.sp-btn{padding:4px 10px;border-radius:8px;cursor:pointer;background:transparent;border:1px solid rgba(0,212,255,0.15);color:rgba(242,245,250,0.5);font-family:'JetBrains Mono',monospace;font-size:10px;transition:all 0.12s;letter-spacing:1px;}
.sp-btn:hover,.sp-btn.on{background:rgba(0,212,255,0.12);border-color:var(--cyan);color:var(--sw);}
#pause-btn{padding:4px 12px;border-radius:8px;cursor:pointer;background:rgba(0,212,255,0.08);border:1px solid var(--cyan);color:var(--cyan);font-family:'JetBrains Mono',monospace;font-size:10px;transition:all 0.12s;}
#pause-btn:hover{background:rgba(0,212,255,0.18);}
.sp-time{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.5);letter-spacing:1px;min-width:120px;text-align:center;}

/* ══ PANELS ══ */
.panel{position:fixed;z-index:400;background:var(--pbg);border:1px solid var(--bdr);border-radius:16px;backdrop-filter:blur(20px);box-shadow:0 8px 40px rgba(0,0,0,0.7),0 0 0 1px rgba(0,212,255,0.03) inset;display:flex;flex-direction:column;overflow:hidden;}
.ph{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:rgba(0,212,255,0.05);border-bottom:1px solid var(--bdr);cursor:grab;gap:8px;flex-shrink:0;}
.ph:active{cursor:grabbing;}
.pt{font-family:'Inter',sans-serif;font-size:9px;font-weight:700;color:var(--cyan);letter-spacing:2px;}
.pc{width:16px;height:16px;border-radius:50%;background:rgba(239,68,68,0.1);border:1px solid rgba(239,68,68,0.3);color:rgba(239,68,68,0.7);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:9px;transition:all 0.12s;flex-shrink:0;}
.pc:hover{background:rgba(239,68,68,0.25);color:#fff;}
.pb{padding:10px;overflow-y:auto;flex:1;min-height:0;}

/* ── QOSE BRIDGE ── */
.bridge-list{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;gap:8px;margin:4px 0 8px;padding-right:2px;}
.bridge-empty{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(242,245,250,0.35);text-align:center;padding:20px 0;}
.bridge-msg{background:rgba(0,212,255,0.05);border:1px solid var(--bdr2);border-radius:10px;padding:6px 8px;}
.bridge-msg.mine{background:rgba(0,212,255,0.1);border-color:rgba(0,212,255,0.25);}
.bridge-msg-head{display:flex;align-items:baseline;gap:6px;margin-bottom:3px;flex-wrap:wrap;}
.bridge-msg-author{font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:700;color:var(--cyan);}
.bridge-msg-org{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(242,245,250,0.4);letter-spacing:0.5px;}
.bridge-msg-time{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(242,245,250,0.3);margin-left:auto;}
.bridge-msg-body{font-family:'Inter',sans-serif;font-size:11px;color:var(--sw);line-height:1.4;word-break:break-word;white-space:pre-wrap;}
.bridge-inputrow{display:flex;gap:6px;flex-shrink:0;border-top:1px solid var(--bdr2);padding-top:8px;}
.bridge-input{flex:1;resize:none;background:rgba(0,212,255,0.04);border:1px solid rgba(0,212,255,0.15);border-radius:8px;color:var(--sw);font-family:'Inter',sans-serif;font-size:11px;padding:6px 8px;max-height:60px;}
.bridge-input:focus{outline:none;border-color:var(--cyan);}
.bridge-send{background:rgba(0,212,255,0.1);border:1px solid var(--cyan);color:var(--cyan);font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;border-radius:20px;padding:0 12px;cursor:pointer;transition:all 0.15s;}
.bridge-send:hover{background:var(--cyan);color:#000;}
.bridge-msg-author{cursor:pointer;}
.bridge-msg-author:hover{text-decoration:underline;}
.bridge-myprofile-link{font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:1px;color:rgba(0,212,255,0.6);cursor:pointer;white-space:nowrap;}
.bridge-myprofile-link:hover{color:var(--cyan);}
.bridge-profile-backdrop{position:fixed;inset:0;background:rgba(0,0,0,0.65);z-index:700;display:none;align-items:center;justify-content:center;}
/* bridge.js (v2, 29 Jul 2026) opens/closes both the create-conversation
   and profile modals via classList.add/remove('active') — not by setting
   style.display directly the way the old bridge.js and relay.js's join
   overlay both do. Without this rule, the shared backdrop class had no
   default-hidden state for that pattern to toggle: #bridge-create-overlay
   (no inline style at all) stayed visible from page load with nothing
   ever having shown it, and #bridge-profile-backdrop (old inline
   style="display:none") could never be shown at all, since an inline
   style always wins over a class rule and nothing here ever cleared it.
   relay-join-overlay is unaffected — it still manages its own visibility
   via inline style.display, which continues to override this rule either
   way. (Fixed 09 Aug 2026 — "bridge appears on load and won't close.")*/
.bridge-profile-backdrop.active{display:flex;}
.bridge-profile-modal{position:relative;width:min(90vw,380px);max-height:80vh;}
.bp-field{margin-bottom:12px;}
.bp-label{display:block;font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:2px;color:rgba(0,212,255,0.4);margin-bottom:3px;}
.bp-value{font-family:'Inter',sans-serif;font-size:13px;color:var(--sw);}
.bp-bio-text{font-family:'Inter',sans-serif;font-size:12px;color:var(--sw);line-height:1.4;white-space:pre-wrap;word-break:break-word;}
.bridge-avatar-tiny{width:16px;height:16px;object-fit:contain;vertical-align:-3px;margin-right:2px;border-radius:6px;}
.bridge-msg-avatar{width:14px;height:14px;cursor:pointer;}
.bp-avatar-picker{display:flex;gap:8px;flex-wrap:wrap;}
.bp-avatar-option{width:44px;height:44px;object-fit:contain;padding:4px;border:1px solid var(--bdr2);border-radius:10px;cursor:pointer;background:rgba(0,212,255,0.03);transition:all 0.12s;}
.bp-avatar-option:hover{border-color:rgba(0,212,255,0.4);}
.bp-avatar-option.selected{border-color:var(--cyan);background:rgba(0,212,255,0.1);box-shadow:0 0 0 1px var(--cyan);}
/* bridge.js (v2) builds bare <img> tags in #bp-avatar-picker with no base
   class — only a conditional 'selected' — so the base look lives here. */
#bp-avatar-picker img{width:44px;height:44px;object-fit:contain;padding:4px;border:1px solid var(--bdr2);border-radius:10px;cursor:pointer;background:rgba(0,212,255,0.03);transition:all 0.12s;}
#bp-avatar-picker img:hover{border-color:rgba(0,212,255,0.4);}
#bp-avatar-picker img.selected{border-color:var(--cyan);background:rgba(0,212,255,0.1);box-shadow:0 0 0 1px var(--cyan);}
.relay-join-modal{position:relative;width:min(92vw,420px);max-height:80vh;}
.hub-profile-modal{position:relative;width:min(92vw,340px);max-height:80vh;}
.relay-join-status{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--sw);line-height:1.6;margin:10px 0;}
.relay-join-status .k{color:rgba(0,212,255,0.5);font-size:9px;letter-spacing:1px;display:block;margin-bottom:2px;}
.relay-join-status .v{margin-bottom:10px;display:block;}
.relay-pill{display:inline-block;padding:3px 10px;border-radius:8px;font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;}
.relay-pill.pending{background:rgba(255,140,0,0.12);border:1px solid var(--amber);color:var(--amber);}
.relay-pill.approved{background:rgba(74,222,128,0.1);border:1px solid var(--green);color:var(--green);}
.relay-pill.denied{background:rgba(239,68,68,0.1);border:1px solid var(--red);color:#ff8080;}
.relay-pill.expired{background:rgba(242,245,250,0.08);border:1px solid rgba(242,245,250,0.25);color:rgba(242,245,250,0.5);}

/* ── BRIDGE: Directory / DMs / Groups ── */
.bridge-mode-toggle{display:flex;gap:4px;margin-bottom:8px;flex-shrink:0;}
.bridge-mode-btn{flex:1;text-align:center;padding:5px;font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;border:1px solid var(--bdr2);color:rgba(242,245,250,0.4);cursor:pointer;border-radius:8px;}
.bridge-mode-btn.active{border-color:var(--cyan);color:var(--cyan);background:rgba(0,212,255,0.06);}
.bridge-direct-actions{display:flex;gap:6px;margin-bottom:8px;flex-shrink:0;}
.bridge-direct-action-btn{flex:1;padding:6px;font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:1px;background:rgba(0,212,255,0.08);border:1px solid var(--cyan);color:var(--cyan);cursor:pointer;border-radius:8px;}
.bridge-direct-action-btn:hover{background:var(--cyan);color:#000;}
.bridge-direct-list{flex:1;overflow-y:auto;min-height:0;margin-bottom:8px;}
.bridge-direct-row{display:flex;align-items:center;gap:8px;padding:8px 6px;border-bottom:1px solid var(--bdr2);cursor:pointer;}
.bridge-direct-row:hover{background:rgba(0,212,255,0.05);}
.bridge-direct-row-name{font-family:'Inter',sans-serif;font-size:11px;color:var(--sw);}
.bridge-direct-row-sub{font-family:'JetBrains Mono',monospace;font-size:7px;letter-spacing:1px;color:rgba(242,245,250,0.35);margin-left:auto;}
.bridge-direct-back{font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:1px;color:rgba(0,212,255,0.6);cursor:pointer;padding:2px 0 8px;flex-shrink:0;}
.bridge-direct-back:hover{color:var(--cyan);}
.bridge-thread-title{display:flex;align-items:center;gap:6px;font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:1px;color:var(--cyan);padding:4px 2px 8px;flex-shrink:0;border-bottom:1px solid var(--bdr2);margin-bottom:6px;}
.bridge-thread-title .bridge-thread-badge{font-size:7px;color:rgba(242,245,250,0.4);border:1px solid var(--bdr2);border-radius:6px;padding:1px 5px;letter-spacing:1px;}
.bridge-group-check{width:14px;height:14px;accent-color:var(--cyan);flex-shrink:0;}
.bridge-group-name-input{width:100%;margin-bottom:8px;box-sizing:border-box;}
.bridge-create-btn{width:100%;margin-top:6px;padding:8px;}
.bridge-inline-error{background:rgba(239,68,68,0.1);border:1px solid rgba(239,68,68,0.4);color:#ff8080;font-family:'JetBrains Mono',monospace;font-size:9px;line-height:1.4;padding:8px;border-radius:8px;margin-bottom:8px;word-break:break-word;}
.pb::-webkit-scrollbar{width:3px;}.pb::-webkit-scrollbar-thumb{background:rgba(0,212,255,0.15);border-radius:6px;}

/* FORM */
.fl{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.5);letter-spacing:1px;margin-bottom:3px;display:block;}
.fi{width:100%;padding:5px 8px;border-radius:8px;background:rgba(0,0,0,0.4);border:1px solid rgba(0,212,255,0.15);color:var(--sw);font-family:'JetBrains Mono',monospace;font-size:11px;outline:none;transition:border-color 0.15s;margin-bottom:7px;}
select.fi{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='rgba(0,212,255,0.5)'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;background-color:rgba(0,0,0,0.6);padding-right:24px;cursor:pointer;}
select.fi option{background:#0A1931;color:var(--sw);}
.fi:focus{border-color:var(--cyan);}
.fi option{background:#0A1931;}
.fr{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.sec{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.35);letter-spacing:2px;margin:8px 0 6px;padding-bottom:3px;border-bottom:1px solid var(--bdr2);}

/* SAT TYPE GRID */
.stgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-bottom:8px;}
.stb{padding:6px 3px;border-radius:10px;text-align:center;cursor:pointer;border:1px solid rgba(0,212,255,0.1);background:rgba(0,0,0,0.3);transition:all 0.15s;}
.stb:hover{border-color:rgba(0,212,255,0.3);}
.stb.sel{border-color:var(--cyan);background:rgba(0,212,255,0.08);}
.stb img{width:36px;height:36px;object-fit:contain;display:block;margin:0 auto 3px;}
.stb-n{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(242,245,250,0.5);letter-spacing:0.5px;line-height:1.3;}
.stb.sel .stb-n{color:var(--cyan);}

/* ORBIT CHIPS */
.ochips{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:8px;}
.oc{padding:4px 2px;border-radius:8px;text-align:center;cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:8px;border:1px solid rgba(0,212,255,0.1);background:rgba(0,0,0,0.3);color:rgba(242,245,250,0.45);transition:all 0.12s;}
.oc.sel,.oc:hover{border-color:var(--cyan);background:rgba(0,212,255,0.08);color:var(--sw);}
.oc .ca{font-size:7px;color:rgba(0,212,255,0.3);display:block;margin-top:1px;}
/* Launch-mode chip (AUTO/MANUAL) — visually matches .oc but kept as its own
   class so onSelOrbit()/onSelSatType()'s blanket `.oc` deselect doesn't wipe
   its selected state when the user picks an orbit or satellite type. */
.lmc{padding:4px 2px;border-radius:8px;text-align:center;cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:8px;border:1px solid rgba(0,212,255,0.1);background:rgba(0,0,0,0.3);color:rgba(242,245,250,0.45);transition:all 0.12s;}
.lmc.sel,.lmc:hover{border-color:var(--cyan);background:rgba(0,212,255,0.08);color:var(--sw);}
.lmc .ca{font-size:7px;color:rgba(0,212,255,0.3);display:block;margin-top:1px;}

/* PRESETS */
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:8px;}
.pbtn{padding:6px 4px;border-radius:8px;cursor:pointer;text-align:center;background:rgba(0,0,0,0.3);border:1px solid rgba(0,212,255,0.1);color:rgba(242,245,250,0.55);font-family:'JetBrains Mono',monospace;font-size:8px;transition:all 0.12s;line-height:1.4;}
.pbtn:hover{border-color:var(--amber);color:var(--amber);background:rgba(251,191,36,0.06);}

/* LAUNCH BTN */
.lbtn{width:100%;padding:10px;border-radius:12px;background:linear-gradient(135deg,rgba(0,212,255,0.15),rgba(0,212,255,0.04));border:1px solid var(--cyan);color:var(--cyan);font-family:'Inter',sans-serif;font-size:10px;font-weight:700;letter-spacing:2px;cursor:pointer;transition:all 0.18s;margin-top:4px;}
.lbtn:hover{background:rgba(0,212,255,0.2);box-shadow:0 0 20px rgba(0,212,255,0.25);}
.lbtn:disabled{opacity:0.5;cursor:not-allowed;box-shadow:none;}

/* FLEET TABLE */
.ftabs{display:flex;border-bottom:1px solid var(--bdr);margin-bottom:7px;}
.ftab{padding:4px 9px;font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.35);cursor:pointer;border-bottom:2px solid transparent;transition:all 0.12s;white-space:nowrap;}
.ftab.on{color:var(--cyan);border-bottom-color:var(--cyan);}
.fsearch{width:100%;padding:4px 8px;border-radius:8px;margin-bottom:7px;background:rgba(0,0,0,0.4);border:1px solid rgba(0,212,255,0.12);color:var(--sw);font-family:'JetBrains Mono',monospace;font-size:10px;outline:none;}
.fsearch:focus{border-color:var(--cyan);}
.ft{width:100%;border-collapse:collapse;}
.ft th{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(0,212,255,0.35);letter-spacing:1px;padding:3px 4px;text-align:left;border-bottom:1px solid var(--bdr2);}
.ft tr.sr{cursor:pointer;transition:background 0.1s;border-bottom:1px solid rgba(0,212,255,0.03);}
.ft tr.sr:hover{background:rgba(0,212,255,0.04);}
.ft td{padding:3px 4px;font-family:'JetBrains Mono',monospace;font-size:8px;}
.ob{padding:1px 4px;border-radius:6px;font-size:7px;font-family:'Inter',sans-serif;font-weight:700;}
.sdot{width:5px;height:5px;border-radius:50%;display:inline-block;margin-right:3px;}

/* HEALTH BAR */
.hbar-wrap{width:40px;height:3px;background:rgba(0,0,0,0.4);border-radius:6px;overflow:hidden;display:inline-block;vertical-align:middle;}
.hbar{height:100%;border-radius:6px;transition:width 0.3s;}

/* LOG */
.lfils{display:flex;gap:3px;margin-bottom:6px;flex-wrap:wrap;}
.lfil{padding:2px 6px;border-radius:6px;font-family:'JetBrains Mono',monospace;font-size:7px;letter-spacing:1px;cursor:pointer;border:1px solid rgba(0,212,255,0.1);color:rgba(242,245,250,0.35);transition:all 0.12s;}
.lfil.on{border-color:var(--cyan);color:var(--cyan);background:rgba(0,212,255,0.06);}
.le{display:flex;gap:5px;padding:3px 0;border-bottom:1px solid rgba(0,212,255,0.03);font-family:'JetBrains Mono',monospace;font-size:8px;line-height:1.5;}
.lt{color:rgba(0,212,255,0.35);white-space:nowrap;flex-shrink:0;font-size:7px;}
.ldot2{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:3px;}
.lm{color:rgba(242,245,250,0.65);}
#log-list{overflow-y:auto;max-height:200px;}

/* LIVE DATA PANEL */
.ld-section{margin-bottom:10px;}
.ld-title{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.4);letter-spacing:2px;margin-bottom:5px;padding-bottom:3px;border-bottom:1px solid var(--bdr2);}
.ld-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px;}
.ld-k{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.35);}
.ld-v{font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--sw);}
.ld-v.ok{color:var(--green)}.ld-v.warn{color:var(--amber)}.ld-v.crit{color:var(--red)}
.ld-item{background:rgba(0,0,0,0.3);border:1px solid var(--bdr2);border-radius:8px;padding:5px 7px;margin-bottom:4px;}
.ld-item-title{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--amber);margin-bottom:2px;}
.ld-item-sub{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(242,245,250,0.4);}

/* DEBRIS PANEL */
.deb-stat{background:rgba(0,0,0,0.3);border:1px solid var(--bdr2);border-radius:8px;padding:6px 8px;margin-bottom:5px;}
.deb-num{font-family:'Inter',sans-serif;font-size:18px;font-weight:700;color:var(--red);}
.deb-lbl{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.3);letter-spacing:1px;}
.risk-bar{height:6px;border-radius:8px;background:rgba(0,0,0,0.4);overflow:hidden;margin:5px 0;}
.risk-fill{height:100%;border-radius:8px;transition:width 0.5s;}

/* COVERAGE */
.cov-big{font-family:'Inter',sans-serif;font-size:32px;font-weight:900;color:var(--cyan);text-align:center;margin:10px 0 4px;}
.cov-lbl{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(0,212,255,0.3);letter-spacing:2px;text-align:center;margin-bottom:10px;}

/* GROUND STATION */
.gs-item{display:flex;justify-content:space-between;align-items:center;padding:5px 7px;background:rgba(0,0,0,0.3);border:1px solid var(--bdr2);border-radius:8px;margin-bottom:4px;}
.gs-name{font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--sw);}
.gs-coords{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(0,212,255,0.35);}
.gs-del{padding:2px 6px;border-radius:6px;background:rgba(239,68,68,0.08);border:1px solid rgba(239,68,68,0.2);color:rgba(239,68,68,0.6);font-family:'JetBrains Mono',monospace;font-size:8px;cursor:pointer;transition:all 0.12s;}
.gs-del:hover{background:rgba(239,68,68,0.2);color:#fff;}

/* CONJUNCTION */
.conj-item{padding:6px 8px;background:rgba(239,68,68,0.04);border:1px solid rgba(239,68,68,0.15);border-radius:8px;margin-bottom:4px;}
.conj-sats{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--red);}
.conj-dist{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.4);}

/* EXPORT PANEL */
.exp-section{margin-bottom:10px;}
.exp-field{margin-bottom:6px;}
.org-preview{width:60px;height:60px;border:1px solid var(--bdr);border-radius:8px;object-fit:contain;background:rgba(0,0,0,0.3);display:none;}
.exp-btn{width:100%;padding:8px;border-radius:8px;cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;transition:all 0.15s;margin-bottom:5px;}
.exp-btn.primary{background:rgba(0,212,255,0.1);border:1px solid var(--cyan);color:var(--cyan);}
.exp-btn.primary:hover{background:rgba(0,212,255,0.2);}
.exp-btn.secondary{background:rgba(0,0,0,0.3);border:1px solid rgba(0,212,255,0.15);color:rgba(242,245,250,0.5);}
.exp-btn.secondary:hover{border-color:var(--cyan);color:var(--sw);}

/* LAUNCHES PANEL */
.launch-item{padding:6px 8px;background:rgba(0,0,0,0.3);border:1px solid var(--bdr2);border-radius:8px;margin-bottom:4px;}
.launch-name{font-family:'JetBrains Mono',monospace;font-size:8px;color:var(--sw);margin-bottom:2px;}
.launch-detail{font-family:'JetBrains Mono',monospace;font-size:7px;color:rgba(0,212,255,0.4);}
.launch-time{font-family:'JetBrains Mono',monospace;font-size:7px;color:var(--amber);}

/* TOOLTIP helper */
.has-tip{position:relative;cursor:help;}
.tip-box{display:none;position:absolute;bottom:calc(100% + 5px);left:50%;transform:translateX(-50%);background:rgba(5,7,10,0.97);border:1px solid var(--bdr);border-radius:8px;padding:6px 8px;width:180px;font-family:'Inter',sans-serif;font-size:10px;color:rgba(242,245,250,0.7);z-index:999;pointer-events:none;line-height:1.5;}
.has-tip:hover .tip-box{display:block;}

/* KESSLER WARNING */
#kessler-warn{position:fixed;top:60px;left:50%;transform:translateX(-50%);z-index:800;width:min(92vw,480px);box-sizing:border-box;display:none;align-items:center;gap:10px;background:rgba(239,68,68,0.12);border:1px solid var(--red);border-radius:10px;padding:8px 14px;font-family:'Inter',sans-serif;font-size:10px;color:var(--red);letter-spacing:1.5px;animation:kpulse 1s ease-in-out infinite;backdrop-filter:blur(10px);}
#kessler-warn-text{flex:1;line-height:1.4;}
#kessler-warn-close{flex-shrink:0;cursor:pointer;opacity:0.7;padding:4px;}
#kessler-warn-close:hover{opacity:1;}
@keyframes kpulse{0%,100%{box-shadow:0 0 10px rgba(239,68,68,0.3)}50%{box-shadow:0 0 25px rgba(239,68,68,0.6)}}

/* TICKER */
#ticker{position:absolute;bottom:0;left:0;right:0;height:22px;background:rgba(0,0,0,0.7);border-top:1px solid var(--bdr2);overflow:hidden;z-index:100;}
.ticker-inner{display:flex;align-items:center;height:100%;white-space:nowrap;animation:tickscroll 60s linear infinite;}
@keyframes tickscroll{0%{transform:translateX(100vw)}100%{transform:translateX(-100%)}}
.tick-item{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.5);margin:0 20px;letter-spacing:1px;}
.tick-item.hi{color:var(--amber);}
.tick-item.crit{color:var(--red);}
.tick-sep{color:rgba(0,212,255,0.2);margin:0 8px;}

/* ── VERIFYING-SESSION STATE (v1.3.1) ── */
#sp-checking{display:flex;align-items:center;gap:9px;margin-top:10px;position:relative;z-index:2;}
.sp-checking-dot{width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);animation:blink 1s ease-in-out infinite;}
.sp-checking-text{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.5);letter-spacing:3px;}

/* ── ACCESS GATE — cut-corner console card (v1.4 reskin) ──
   Angular clip-path shape (cut top-left / bottom-right) instead of a
   rounded panel — nothing else in QOSE uses this silhouette, so it
   reads as its own distinct "terminal card" identity. A diagonal tag
   chip sits in the cut top-left notch, a tick-mark rail runs down the
   right edge, and the sweep line now traces the whole clipped outline. */
#sp-gate,#sp-forgot,#sp-reset{
  display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:16px;
  position:relative;z-index:2;
  background:linear-gradient(160deg,rgba(0,212,255,0.08),rgba(7,11,20,0.68));
  border:1px solid rgba(0,212,255,0.28);
  clip-path:polygon(26px 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%,0 26px);
  padding:34px 34px 26px;
  backdrop-filter:blur(14px);
  box-shadow:0 0 0 1px rgba(0,212,255,0.03) inset, 0 24px 60px rgba(0,0,0,0.55), 0 0 50px rgba(0,212,255,0.07);
}
#sp-gate::before,#sp-forgot::before,#sp-reset::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(0,212,255,0.5) 50%,transparent 70%);
  background-size:220% 220%;
  clip-path:polygon(26px 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%,0 26px);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;padding:1px;
  opacity:.55;
  animation:gateSweep 4.5s ease-in-out infinite;
}
#sp-gate::after,#sp-forgot::after,#sp-reset::after{
  content:'';position:absolute;top:14px;bottom:14px;right:9px;width:3px;pointer-events:none;
  background-image:repeating-linear-gradient(180deg,rgba(0,212,255,0.55) 0,rgba(0,212,255,0.55) 3px,transparent 3px,transparent 9px);
  opacity:.6;
}
@keyframes gateSweep{0%,100%{background-position:0% 0%;opacity:.25}50%{background-position:100% 100%;opacity:.75}}
.sp-gate-tag{
  position:absolute;top:0;left:0;
  font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:2px;color:#EAFCFF;
  background:linear-gradient(135deg,rgba(0,212,255,0.9),rgba(0,119,255,0.7));
  padding:4px 10px 4px 7px;
  clip-path:polygon(0 0,100% 0,calc(100% - 9px) 100%,0 100%);
  text-shadow:0 0 6px rgba(0,212,255,0.6);
}
.sp-gate-label{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(0,212,255,0.6);letter-spacing:3px;margin-top:6px;}
.sp-code-input{background:rgba(4,8,16,0.55);border:1px solid rgba(0,212,255,0.2);color:#F2F5FA;font-family:'JetBrains Mono',monospace;font-size:13px;padding:9px 14px;text-align:center;letter-spacing:4px;outline:none;width:220px;border-radius:10px;box-shadow:inset 0 1px 3px rgba(0,0,0,0.4);transition:all .15s;}
.sp-code-input:focus{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(0,212,255,0.12),inset 0 1px 3px rgba(0,0,0,0.4);}
.sp-code-btn{background:linear-gradient(135deg,rgba(0,212,255,0.2),rgba(0,119,255,0.12));border:1px solid rgba(0,212,255,0.55);color:#EAFCFF;font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:600;letter-spacing:2.5px;padding:9px 26px;cursor:pointer;margin-top:4px;border-radius:10px;box-shadow:0 4px 18px rgba(0,212,255,0.14);transition:all .15s;}
.sp-code-btn:hover{background:linear-gradient(135deg,rgba(0,212,255,0.32),rgba(0,119,255,0.2));box-shadow:0 6px 24px rgba(0,212,255,0.26);transform:translateY(-1px);}
.sp-gate-error{font-family:'JetBrains Mono',monospace;font-size:8px;color:#EF4444;letter-spacing:2px;height:14px;transition:opacity 0.3s;}
#sp-name-input,#sp-email-input,#sp-password-input,#sp-organization-input{letter-spacing:0.5px;text-align:left;padding-left:14px;margin-bottom:6px;}
#sp-organization-row,#sp-name-row{width:220px;}
.sp-gate-switch{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(242,245,250,0.5);letter-spacing:1px;margin-top:10px;cursor:pointer;text-decoration:underline;text-underline-offset:2px;}
.sp-gate-switch:hover{color:rgba(0,212,255,0.8);}
.sp-show-pw{font-family:'JetBrains Mono',monospace;font-size:8px;color:rgba(242,245,250,0.45);letter-spacing:1px;cursor:pointer;margin:-2px 0 6px 0;text-align:left;width:220px;}
.sp-show-pw:hover{color:rgba(0,212,255,0.7);}
.sp-gate-note{font-family:'JetBrains Mono',monospace;font-size:7.5px;color:rgba(242,245,250,0.35);letter-spacing:0.5px;width:220px;line-height:1.5;margin-top:6px;}
.sp-gate-consent{width:220px;margin-top:8px;font-family:'JetBrains Mono',monospace;font-size:7.5px;color:rgba(242,245,250,0.55);line-height:1.5;}
.sp-gate-consent label{display:flex;align-items:flex-start;gap:6px;cursor:pointer;}
.sp-gate-consent input[type="checkbox"]{margin-top:1px;flex-shrink:0;accent-color:var(--cyan);cursor:pointer;}
.sp-gate-consent a{color:var(--cyan);text-decoration:none;}
.sp-gate-consent a:hover{text-decoration:underline;}

/* ── CODE EDITOR PANEL ── */
#monaco-container{width:100%;height:340px;border:1px solid rgba(0,212,255,0.2);border-radius:10px;overflow:hidden;}

/* ══ BRIDGE v2 — 3-column layout (09 Aug 2026) ══
   Matches bridge.js (v2 UX, 29 Jul 2026) / Emmanuel's mockup: left sidebar
   (channels/DMs/groups), center chat, right members-or-directory panel.
   Reuses existing design tokens (--cyan, --sw, --bdr, --bdr2) and the same
   type system (Inter body, JetBrains Mono labels/meta) as the rest of QOSE
   — this is a new layout, not a new visual language. */

.b2-layout{display:flex;min-height:0;flex:1;padding:0;gap:0;}

/* — Left: sidebar — */
.b2-sidebar{width:220px;flex-shrink:0;display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--bdr2);padding:10px;box-sizing:border-box;}
.b2-search{margin-bottom:0;}
.b2-new-btn{width:100%;padding:7px;margin:8px 0 4px;text-align:center;}
.b2-sidebar-scroll{flex:1;overflow-y:auto;min-height:0;margin-top:4px;}
.b2-sidebar-section{font-family:'JetBrains Mono',monospace;font-size:7.5px;letter-spacing:2px;color:rgba(0,212,255,0.35);margin:10px 0 4px;padding-bottom:2px;border-bottom:1px solid var(--bdr2);}
.b2-sidebar-section:first-child{margin-top:2px;}
.b2-item{display:flex;align-items:center;gap:7px;padding:6px 6px;border-radius:8px;cursor:pointer;font-family:'Inter',sans-serif;font-size:11px;color:rgba(242,245,250,0.75);transition:background 0.12s;}
.b2-item:hover{background:rgba(0,212,255,0.05);}
.b2-item.active{background:rgba(0,212,255,0.1);color:var(--sw);}
.b2-item-icon{width:14px;text-align:center;flex-shrink:0;color:rgba(0,212,255,0.5);font-family:'JetBrains Mono',monospace;font-size:11px;}
.b2-item-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.b2-badge{background:var(--cyan);color:#000;font-family:'JetBrains Mono',monospace;font-size:8px;font-weight:700;border-radius:10px;padding:1px 6px;flex-shrink:0;}
.b2-empty-hint{font-family:'JetBrains Mono',monospace;font-size:8.5px;color:rgba(242,245,250,0.3);padding:6px 4px;text-align:center;}
.b2-avatar{width:24px;height:24px;object-fit:contain;border-radius:8px;flex-shrink:0;background:rgba(0,212,255,0.05);}

/* — Center: chat — */
.b2-chat{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;}
.b2-chat-header{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--bdr2);flex-shrink:0;}
.b2-chat-title{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:1px;color:var(--sw);}
.b2-pill{font-family:'JetBrains Mono',monospace;font-size:7px;letter-spacing:1px;color:rgba(0,212,255,0.7);border:1px solid var(--bdr2);border-radius:8px;padding:2px 7px;}
.b2-messages{flex:1;overflow-y:auto;min-height:0;padding:12px 14px;display:flex;flex-direction:column;gap:12px;}
.b2-empty-state{font-family:'JetBrains Mono',monospace;font-size:9px;color:rgba(242,245,250,0.3);text-align:center;padding:30px 0;}
.b2-msg{display:flex;gap:9px;align-items:flex-start;}
.b2-msg .b2-avatar{width:28px;height:28px;cursor:pointer;}
.b2-msg-body{flex:1;min-width:0;}
.b2-msg-head{display:flex;align-items:baseline;gap:6px;margin-bottom:2px;flex-wrap:wrap;}
.b2-msg-author{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;color:var(--cyan);cursor:pointer;}
.b2-msg-author:hover{text-decoration:underline;}
.b2-msg-org{font-family:'JetBrains Mono',monospace;font-size:7.5px;color:rgba(242,245,250,0.4);letter-spacing:0.5px;}
.b2-msg-time{font-family:'JetBrains Mono',monospace;font-size:7.5px;color:rgba(242,245,250,0.3);margin-left:auto;}
.b2-msg-content{font-family:'Inter',sans-serif;font-size:12px;color:var(--sw);line-height:1.45;word-break:break-word;white-space:pre-wrap;}
.b2-inputrow{margin:0 14px 12px;flex-shrink:0;}

/* — Right: members / directory — */
.b2-rightpanel{width:220px;flex-shrink:0;display:flex;flex-direction:column;min-height:0;border-left:1px solid var(--bdr2);padding:10px;box-sizing:border-box;}
.b2-rp-tabs{margin-bottom:8px;}
.b2-rp-content{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;gap:2px;}
.b2-rp-member{display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px;cursor:pointer;transition:background 0.12s;}
.b2-rp-member:hover{background:rgba(0,212,255,0.05);}
.b2-rp-member-name{font-family:'Inter',sans-serif;font-size:11px;color:var(--sw);}
.b2-rp-member-org{font-family:'JetBrains Mono',monospace;font-size:7.5px;color:rgba(242,245,250,0.4);}

/* — New conversation modal — */
.b2-userlist{max-height:280px;overflow-y:auto;margin:4px 0 8px;}
.b2-userpick{display:flex;align-items:center;gap:8px;padding:7px 6px;border-radius:8px;cursor:pointer;transition:background 0.12s;}
.b2-userpick:hover{background:rgba(0,212,255,0.05);}
.b2-userpick.selected{background:rgba(0,212,255,0.1);}
.b2-userpick-name{font-family:'Inter',sans-serif;font-size:11px;color:var(--sw);flex:1;}
.b2-userpick-check{width:16px;text-align:center;color:var(--cyan);font-size:12px;flex-shrink:0;}
.b2-error{background:rgba(239,68,68,0.1);border:1px solid rgba(239,68,68,0.4);color:#ff8080;font-family:'JetBrains Mono',monospace;font-size:9px;line-height:1.4;padding:8px;border-radius:8px;margin-top:4px;word-break:break-word;}

/* — Narrow-viewport fallback — the comment in bridge.js says QOSE runs
   desktop-mode always, but the phone frame this ships in can still be
   narrower than 3 columns comfortably fit; collapse the side columns
   rather than let them get crushed unreadably thin. */
/* ══════════════════════════════════════════════
   MISSION HUB (v1.3) — card-based landing shown
   inside #splash after QDI Auth, before any app boots.
   Reuses the existing token set (--nb,--cyan,--amber,
   --green,--bdr,--muted) rather than introducing new ones.
   ══════════════════════════════════════════════ */
#sp-hub{width:100%;max-width:920px;padding:24px 20px 40px;position:relative;z-index:2;overflow-y:auto;max-height:92vh;}
/* Distinct backdrop for the hub screen — a soft duotone spotlight plus a
   diagonal grid (vs. the splash's square grid), sitting behind the cards
   so the hub reads as its own "space" rather than a straight continuation
   of the login screen. */
.hub-bg-glow{position:absolute;inset:-40px -20px;z-index:-1;pointer-events:none;
  background-image:
    radial-gradient(560px 360px at 50% 0%, rgba(0,212,255,0.09), transparent 65%),
    radial-gradient(420px 320px at 85% 90%, rgba(139,92,246,0.06), transparent 65%),
    radial-gradient(420px 320px at 10% 85%, rgba(0,119,255,0.05), transparent 65%),
    linear-gradient(45deg,rgba(0,212,255,0.025) 1px,transparent 1px),
    linear-gradient(-45deg,rgba(0,212,255,0.025) 1px,transparent 1px);
  background-size:auto,auto,auto,42px 42px,42px 42px;
  -webkit-mask-image:radial-gradient(90% 80% at 50% 30%, #000 45%, transparent 92%);
  mask-image:radial-gradient(90% 80% at 50% 30%, #000 45%, transparent 92%);
}
.hub-eyebrow{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:5px;color:rgba(0,212,255,0.5);text-align:center;margin-bottom:10px;}
.hub-title{font-family:'Inter',sans-serif;font-size:22px;font-weight:900;letter-spacing:3px;text-align:center;color:var(--sw);margin-bottom:26px;}
.hub-greeting{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:0.5px;text-align:center;color:rgba(242,245,250,0.5);margin-top:-18px;margin-bottom:26px;}

.hub-control-row{max-width:560px;margin:0 auto 20px;display:flex;gap:10px;align-items:center;}
.hub-search-wrap{flex:1;position:relative;}
.hub-search-input{width:100%;background:rgba(0,212,255,0.04);border:1px solid rgba(0,212,255,0.18);border-radius:24px;color:var(--sw);font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:1px;padding:11px 16px 11px 38px;outline:none;transition:all .15s;}
.hub-search-input::placeholder{color:rgba(138,148,168,0.7);}
.hub-search-input:focus{border-color:var(--cyan);background:rgba(0,212,255,0.07);box-shadow:0 0 0 3px rgba(0,212,255,0.08);}
.hub-search-icon{position:absolute;left:15px;top:50%;transform:translateY(-50%);width:12px;height:12px;border:1.5px solid var(--cyan);border-radius:50%;opacity:.7;}
.hub-search-icon::after{content:'';position:absolute;width:5px;height:1.5px;background:var(--cyan);right:-5px;bottom:-1px;transform:rotate(45deg);}

.hub-bridge-pill{flex-shrink:0;display:flex;align-items:center;gap:7px;background:rgba(0,212,255,0.05);border:1px solid rgba(0,212,255,0.2);border-radius:24px;padding:7px 14px 7px 9px;cursor:pointer;transition:all .15s;position:relative;}
.hub-bridge-pill:hover{border-color:var(--cyan);background:rgba(0,212,255,0.09);}
.hub-bridge-pill img{width:20px;height:20px;object-fit:contain;}
.hub-bridge-pill span{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1.5px;color:var(--sw);}
.hub-bridge-ping{position:absolute;top:5px;right:7px;width:5px;height:5px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:blink 1.6s ease-in-out infinite;}

/* ── HUB ACCOUNT PILL (v1.3.4) ──
   Mirrors .hub-bridge-pill's shape/weight so it reads as part of the same
   control row, but opens a small dropdown with the signed-in account,
   Hard Reset, and Sign Out instead of navigating away. */
.hub-account-wrap{position:relative;flex-shrink:0;}
.hub-account-pill{display:flex;align-items:center;gap:8px;background:rgba(0,212,255,0.05);border:1px solid rgba(0,212,255,0.2);border-radius:24px;padding:5px 12px 5px 6px;cursor:pointer;transition:all .15s;}
.hub-account-pill:hover,.hub-account-pill.open{border-color:var(--cyan);background:rgba(0,212,255,0.09);}
.hub-account-avatar{width:24px;height:24px;border-radius:50%;object-fit:contain;background:linear-gradient(135deg,rgba(0,212,255,0.35),rgba(0,119,255,0.2));border:1px solid rgba(0,212,255,0.4);flex-shrink:0;}
.hub-account-email{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:0.5px;color:var(--sw);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hub-account-caret{font-size:8px;color:rgba(0,212,255,0.5);transition:transform .15s;}
.hub-account-pill.open .hub-account-caret{transform:rotate(180deg);}
.hub-account-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:230px;background:rgba(5,7,10,0.98);border:1px solid var(--cyan);border-radius:12px;padding:10px;z-index:50;box-shadow:0 12px 30px rgba(0,0,0,0.6);}
.hub-account-menu-who{display:flex;align-items:center;gap:9px;padding:2px 4px 10px;border-bottom:1px solid rgba(0,212,255,0.12);margin-bottom:8px;}
.hub-account-menu-avatar{width:34px;height:34px;border-radius:50%;object-fit:contain;background:linear-gradient(135deg,rgba(0,212,255,0.35),rgba(0,119,255,0.2));border:1px solid rgba(0,212,255,0.4);flex-shrink:0;}
.hub-account-menu-name{font-family:'Inter',sans-serif;font-size:11px;font-weight:700;color:var(--sw);margin-bottom:2px;}
/* Unlike Bridge's profile UI (which keeps email out of the shared chat
   directory), the hub is a private account view — the email is always
   shown here so there's never ambiguity about which account is signed in. */
.hub-account-menu-email{font-family:'JetBrains Mono',monospace;font-size:8.5px;letter-spacing:0.3px;color:rgba(0,212,255,0.7);word-break:break-all;}
.hub-tier-pill{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:0.8px;font-weight:600;padding:2px 7px;border-radius:9px;margin-top:4px;}
.hub-tier-pill.tier-free{background:rgba(107,119,133,0.2);color:var(--gray,#5A6478);}
.hub-tier-pill.tier-paid{background:rgba(0,212,255,0.15);color:var(--cyan);}
.hub-tier-pill-compact{margin-top:0;}
.hub-account-menu-btn{width:100%;display:flex;align-items:center;gap:7px;background:transparent;border:1px solid rgba(0,212,255,0.15);color:rgba(242,245,250,0.75);font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:1px;padding:8px 10px;border-radius:8px;cursor:pointer;transition:all .12s;text-align:left;}
.hub-account-menu-btn:not(:last-child){margin-bottom:6px;}
.hub-account-menu-btn:hover{border-color:var(--cyan);background:rgba(0,212,255,0.08);color:var(--sw);}
.hub-account-menu-btn.danger:hover{border-color:var(--red);background:rgba(239,68,68,0.1);color:#ff8080;}

.hub-cat-row{display:flex;justify-content:center;gap:8px;margin-bottom:26px;flex-wrap:wrap;}
.hub-cat-btn{font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:2px;padding:6px 15px;border-radius:20px;border:1px solid rgba(0,212,255,0.15);background:transparent;color:var(--muted);cursor:pointer;transition:all .15s;}
.hub-cat-btn.on{background:rgba(0,212,255,0.1);border-color:var(--cyan);color:var(--sw);}

.hub-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;}
.hub-card{position:relative;border:1px solid var(--bdr);border-radius:16px;background:linear-gradient(160deg,rgba(0,212,255,0.05),rgba(7,11,20,0.5));backdrop-filter:blur(6px);padding:18px 16px 14px;cursor:pointer;transition:all .18s ease;overflow:hidden;}
.hub-card::before{content:'';position:absolute;inset:0;border-radius:16px;padding:1px;background:linear-gradient(135deg,rgba(0,212,255,0.5),rgba(0,212,255,0) 45%,rgba(0,212,255,0) 55%,rgba(0,212,255,0.35));-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .25s;pointer-events:none;}
.hub-card:hover{transform:translateY(-3px);border-color:rgba(0,212,255,0.4);box-shadow:0 14px 32px rgba(0,212,255,0.1);}
.hub-card:hover::before{opacity:1;}
.hub-card.hub-hide{display:none;}
.hub-card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:12px;}
.hub-card-icon{height:30px;width:auto;max-width:150px;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;transition:all .18s ease;}
.hub-card-icon img{height:100%;width:auto;object-fit:contain;}
.hub-card:hover .hub-card-icon img{filter:drop-shadow(0 0 6px rgba(0,212,255,0.5));}
.hub-card-owner{font-family:'JetBrains Mono',monospace;font-size:7px;letter-spacing:1.5px;color:rgba(138,148,168,0.55);text-align:right;line-height:1.5;}
.hub-card-owner b{color:rgba(0,212,255,0.6);font-weight:500;}
.hub-card-name{font-family:'Inter',sans-serif;font-size:14px;font-weight:700;letter-spacing:1px;color:var(--sw);margin-bottom:4px;}
.hub-card-tag{font-family:'Inter',sans-serif;font-size:11px;color:var(--muted);line-height:1.4;margin-bottom:14px;min-height:30px;}
.hub-card-foot{display:flex;align-items:center;justify-content:space-between;}
.hub-card-cat{font-family:'JetBrains Mono',monospace;font-size:7px;letter-spacing:1.5px;padding:3px 7px;border-radius:10px;border:1px solid;}
.hub-card-cat.sim{color:var(--cyan);border-color:rgba(0,212,255,0.3);background:rgba(0,212,255,0.06);}
.hub-card-cat.tool{color:var(--amber);border-color:rgba(251,191,36,0.3);background:rgba(251,191,36,0.06);}
.hub-card-status{display:flex;align-items:center;gap:5px;font-family:'JetBrains Mono',monospace;font-size:7.5px;color:var(--green);letter-spacing:1px;}
.hub-dot{width:5px;height:5px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:blink 1.6s ease-in-out infinite;}
.hub-foot-note{text-align:center;font-family:'JetBrains Mono',monospace;font-size:8px;letter-spacing:1.5px;color:rgba(138,148,168,0.4);margin-top:26px;}

