/* Ouro Rift — console design system. Cartographer's-console: warm amber = you/value
   (the golden core), cool teal = the void's data (the star-ring). Single dark theme. */
:root{
  --void:#070b14; --void-2:#0a1020; --void-3:#0e1628;
  --panel:rgba(15,24,42,0.72); --panel-2:rgba(20,32,54,0.72);
  --line:rgba(120,150,200,0.16); --line-strong:rgba(120,150,200,0.30);
  --ink:#d3ddf1; --ink-dim:#8a99ba; --ink-faint:#59657f;
  --amber:#f4b45a; --amber-2:#ffc978; --amber-deep:#c9862f;
  --teal:#48cfc6; --teal-dim:rgba(72,207,198,0.55);
  --good:#62c98a; --bad:#ee6a6a; --warn:#e9a13b;
  --glow-amber:0 0 18px rgba(244,180,90,0.35);
  --glow-teal:0 0 18px rgba(72,207,198,0.30);
  --font-display:"Bahnschrift","Segoe UI Semibold","Segoe UI",system-ui,sans-serif;
  --font-mono:"Cascadia Code","Consolas",ui-monospace,monospace;
  --font-body:"Segoe UI",system-ui,-apple-system,sans-serif;
  --r:12px;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;min-height:100%;background:var(--void);color:var(--ink);font-family:var(--font-body);}
body{
  min-height:100dvh;position:relative;
  background:
    radial-gradient(1200px 700px at 78% -8%, rgba(72,207,198,0.10), transparent 60%),
    radial-gradient(900px 600px at 12% 108%, rgba(244,180,90,0.08), transparent 60%),
    var(--void);
}
a{color:var(--teal);text-decoration:none;}
a:hover{text-decoration:underline;}
button{font-family:inherit;color:inherit;cursor:pointer;}
:focus-visible{outline:2px solid var(--amber-2);outline-offset:2px;border-radius:4px;}

/* ambient starfield (fixed, behind everything) */
.starfield{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block;pointer-events:none;}

/* shared wordmark / tagline */
.wordmark{font-family:var(--font-display);font-weight:700;letter-spacing:7px;text-transform:uppercase;
  color:var(--amber);text-shadow:var(--glow-amber);}
.tagline{font-family:var(--font-mono);letter-spacing:2px;color:var(--teal);text-transform:uppercase;opacity:.85;}

/* ===================== AUTH / LANDING ===================== */
.auth-body{display:block;}
.auth-wrap{position:relative;z-index:1;min-height:100dvh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:26px;padding:32px;}
.auth-brand{position:relative;z-index:2;text-align:center;}
.auth-brand .wordmark{font-size:44px;display:block;}
.auth-brand .tagline{font-size:12px;margin-top:8px;}
.auth-card{position:relative;z-index:2;width:100%;max-width:400px;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r);padding:26px 26px 22px;
  backdrop-filter:blur(7px);box-shadow:0 24px 70px rgba(0,0,0,0.5);}
.auth-h{font-family:var(--font-display);font-size:15px;letter-spacing:2px;text-transform:uppercase;
  color:var(--ink-faint);margin:0 0 18px;font-weight:600;}
.auth-form{display:flex;flex-direction:column;gap:14px;}
.field{display:flex;flex-direction:column;gap:6px;}
.field span{font-family:var(--font-display);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-faint);}
.field input{font-family:var(--font-mono);font-size:14px;color:var(--ink);background:rgba(0,0,0,0.35);
  border:1px solid var(--line-strong);border-radius:8px;padding:11px 12px;}
.field input:focus{border-color:var(--teal);outline:none;box-shadow:0 0 0 2px rgba(72,207,198,0.18);}
.btn-primary{margin-top:4px;padding:12px;border-radius:9px;border:1px solid rgba(244,180,90,0.45);
  background:linear-gradient(180deg, rgba(244,180,90,0.20), rgba(244,180,90,0.06));color:var(--amber-2);
  font-family:var(--font-display);letter-spacing:2px;text-transform:uppercase;font-size:14px;transition:.15s;}
.btn-primary:hover{background:linear-gradient(180deg, rgba(244,180,90,0.30), rgba(244,180,90,0.12));}
.auth-links{display:flex;gap:10px;justify-content:center;align-items:center;margin-top:16px;
  font-family:var(--font-mono);font-size:12px;color:var(--ink-faint);flex-wrap:wrap;}
.auth-links .sep{color:var(--ink-faint);}
.auth-error{background:rgba(238,106,106,0.12);border:1px solid rgba(238,106,106,0.4);color:#ffb3b3;
  border-radius:8px;padding:10px 12px;font-size:13px;margin-bottom:14px;}
.auth-note{color:var(--ink-dim);font-size:14px;line-height:1.6;margin:0 0 4px;}

/* the Hoag's-Object ring behind the auth card: golden core + teal ring */
.hoag{position:absolute;top:50%;left:50%;width:min(600px,86vw);aspect-ratio:1;transform:translate(-50%,-50%);
  border-radius:50%;z-index:0;pointer-events:none;opacity:.7;
  background:radial-gradient(circle at center,
    rgba(255,201,120,0.95) 0%, rgba(244,180,90,0.5) 4%, rgba(244,180,90,0.12) 9%, transparent 15%);}
.hoag::before{content:"";position:absolute;inset:9%;border-radius:50%;
  border:2px solid rgba(72,207,198,0.35);
  box-shadow:0 0 60px rgba(72,207,198,0.22), inset 0 0 50px rgba(72,207,198,0.12);}
.hoag::after{content:"";position:absolute;inset:9%;border-radius:50%;
  background:conic-gradient(from 0deg, transparent, rgba(72,207,198,0.10), transparent 25%, transparent 50%,
    rgba(120,150,255,0.08), transparent 75%);}

/* ===================== BOOT / STATUS (status.php) ===================== */
.boot{position:relative;z-index:1;min-height:100dvh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;padding:32px;}
.boot-inner{width:100%;max-width:640px;}
.boot-head{display:flex;align-items:baseline;gap:14px;margin-bottom:4px;}
.boot-head .wordmark{font-size:40px;}
.ver{font-family:var(--font-mono);font-size:11px;letter-spacing:2px;color:var(--ink-faint);text-transform:uppercase;}
.boot .tagline{font-size:12px;margin:0 0 26px;}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:6px 22px;backdrop-filter:blur(6px);box-shadow:0 20px 60px rgba(0,0,0,0.45);}
.panel .row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:15px 0;border-bottom:1px solid var(--line);}
.panel .row:last-child{border-bottom:0;}
.row .label{display:flex;align-items:center;gap:12px;font-family:var(--font-display);letter-spacing:1px;font-size:14px;color:var(--ink);}
.row .val{font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);font-variant-numeric:tabular-nums;text-align:right;}
.dot{width:9px;height:9px;border-radius:50%;flex:none;}
.dot.ok{background:var(--good);box-shadow:0 0 10px var(--good);}
.dot.warn{background:var(--warn);box-shadow:0 0 10px var(--warn);}
.dot.bad{background:var(--bad);box-shadow:0 0 10px var(--bad);}
.val.ok{color:var(--good);} .val.warn{color:var(--warn);} .val.bad{color:var(--bad);}
.boot-foot{display:flex;justify-content:space-between;align-items:center;margin-top:20px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:1px;color:var(--ink-faint);}
.status-strip{display:inline-flex;align-items:center;gap:8px;color:var(--good);text-transform:uppercase;}
.status-strip .dot{width:8px;height:8px;}
.pulse{animation:pulse 2.4s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.45;}}

/* ===================== CONSOLE FRAME ===================== */
.console{position:relative;z-index:1;height:100dvh;display:grid;grid-template-rows:auto 1fr;}
.topbar{display:flex;align-items:center;gap:18px;padding:12px 20px;flex-wrap:wrap;
  background:linear-gradient(180deg, rgba(12,20,36,0.92), rgba(10,16,30,0.72));
  border-bottom:1px solid var(--line);backdrop-filter:blur(6px);}
.topbar .brand{display:flex;flex-direction:column;line-height:1;padding-right:16px;border-right:1px solid var(--line);}
.topbar .brand .wordmark{font-size:20px;letter-spacing:4px;}
.topbar .brand .sub{font-family:var(--font-mono);font-size:10px;letter-spacing:2px;color:var(--ink-faint);text-transform:uppercase;margin-top:5px;}
.readouts{display:flex;align-items:center;gap:6px;flex:1;flex-wrap:wrap;}
.ro{display:flex;flex-direction:column;gap:3px;padding:4px 14px;border-left:1px solid var(--line);}
.ro-k{font-family:var(--font-display);font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--ink-faint);}
.ro-v{font-family:var(--font-mono);font-size:15px;color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums;}
.ro-v.amber{color:var(--amber-2);text-shadow:0 0 10px rgba(244,180,90,0.25);}
.logout-link{font-family:var(--font-display);letter-spacing:1.5px;text-transform:uppercase;font-size:12px;color:var(--ink-dim);
  border:1px solid var(--line-strong);border-radius:8px;padding:8px 14px;}
.logout-link:hover{border-color:var(--bad);color:var(--bad);text-decoration:none;}

.body{display:grid;grid-template-columns:176px minmax(0,1fr) 300px;min-height:0;}
.rail{display:flex;flex-direction:column;gap:6px;padding:16px 12px;
  background:linear-gradient(180deg, rgba(11,18,33,0.7), rgba(8,13,25,0.55));border-right:1px solid var(--line);}
.tab{display:flex;align-items:center;gap:10px;text-align:left;width:100%;padding:12px;background:transparent;
  border:1px solid transparent;border-radius:10px;font-family:var(--font-display);font-size:15px;letter-spacing:1px;
  color:var(--ink-dim);transition:.15s;}
.tab .ico{font-size:13px;color:var(--teal);width:16px;text-align:center;}
.tab:hover{background:rgba(72,207,198,0.06);color:var(--ink);}
.tab.is-active{background:linear-gradient(90deg, rgba(244,180,90,0.14), rgba(244,180,90,0.02));
  border-color:rgba(244,180,90,0.32);color:var(--amber-2);}
.tab.is-active .ico{color:var(--amber);}
.rail-foot{margin-top:auto;font-family:var(--font-mono);font-size:10px;line-height:1.6;color:var(--ink-faint);}

.viewport{position:relative;min-width:0;min-height:0;overflow:hidden;
  background:radial-gradient(130% 100% at 50% 0%, rgba(18,30,52,0.35), transparent 70%);}
.view{position:absolute;inset:0;display:none;overflow-y:auto;padding:44px 34px 28px;}
.view.is-active{display:block;}
.view-label{position:absolute;top:16px;left:50%;transform:translateX(-50%);z-index:6;
  font-family:var(--font-mono);font-size:11px;letter-spacing:3px;color:var(--teal);text-transform:uppercase;
  text-shadow:0 0 12px rgba(72,207,198,0.4);}
.h-eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:3px;color:var(--teal);text-transform:uppercase;margin:0 0 6px;}
.h-title{font-family:var(--font-display);font-weight:700;font-size:26px;letter-spacing:1px;margin:0 0 18px;}
.placeholder{color:var(--ink-dim);font-size:14px;line-height:1.7;max-width:60ch;}
.placeholder b{color:var(--ink);}
.soon{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:11px;letter-spacing:2px;
  text-transform:uppercase;color:var(--amber);border:1px solid rgba(244,180,90,0.35);border-radius:6px;padding:5px 10px;}

.context{border-left:1px solid var(--line);background:linear-gradient(180deg,rgba(11,18,33,0.7),rgba(8,13,25,0.5));
  overflow-y:auto;padding:22px 20px;}
.ctx-eyebrow{font-family:var(--font-mono);font-size:10px;letter-spacing:2.5px;text-transform:uppercase;color:var(--teal);margin-bottom:8px;}
.ctx-title{font-family:var(--font-display);font-size:20px;letter-spacing:.5px;margin:0 0 4px;}
.kv{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line);font-size:13px;}
.kv:last-child{border-bottom:0;}
.kv .k{font-family:var(--font-display);letter-spacing:.6px;color:var(--ink-faint);text-transform:uppercase;font-size:11px;}
.kv .v{font-family:var(--font-mono);color:var(--ink);font-variant-numeric:tabular-nums;}
.kv .v.amber{color:var(--amber-2);}

/* progression meters (SHIP view) */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px;max-width:520px;}
.card h4{font-family:var(--font-display);font-size:13px;letter-spacing:1.6px;text-transform:uppercase;color:var(--ink-faint);margin:0 0 14px;}
.stat{margin-bottom:13px;}
.stat-top{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:12.5px;margin-bottom:5px;}
.stat-top b{color:var(--ink);font-weight:400;} .stat-top span{color:var(--ink-dim);}
.meter{height:8px;border-radius:6px;background:rgba(0,0,0,0.4);border:1px solid var(--line);overflow:hidden;}
.meter > i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,var(--amber-deep),var(--amber));box-shadow:0 0 8px rgba(244,180,90,0.4);}

/* ===================== PHASE 2 — universe & trading ===================== */
.loading{color:var(--ink-faint);font-family:var(--font-mono);font-size:13px;padding:12px 0;}
h4 .cat, .mk-name .cat{font-family:var(--font-mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink-faint);margin-left:6px;}

/* meter colour variants (base is amber) */
.meter.teal > i{background:linear-gradient(90deg,#2f8f89,var(--teal));box-shadow:0 0 8px rgba(72,207,198,0.4);}
.meter.green > i{background:linear-gradient(90deg,#3c8f63,var(--good));box-shadow:0 0 8px rgba(98,201,138,0.35);}

/* --- star chart --- */
.view[data-view="nav"]{padding:0;}
.starchart-wrap{position:absolute;inset:0;}
#starchart{position:absolute;inset:0;width:100%;height:100%;display:block;}
.chart-legend{position:absolute;top:14px;left:16px;display:flex;flex-direction:column;gap:6px;z-index:4;
  font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);background:rgba(8,13,25,0.55);
  padding:9px 11px;border:1px solid var(--line);border-radius:8px;backdrop-filter:blur(4px);}
.lg{display:flex;align-items:center;gap:7px;}
.lg .dot{width:8px;height:8px;box-shadow:none;}
.ring-cur{width:10px;height:10px;border-radius:50%;border:2px solid var(--amber-2);box-sizing:border-box;display:inline-block;}
.chart-hint{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);z-index:4;
  font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);background:rgba(8,13,25,0.55);
  padding:6px 13px;border-radius:20px;border:1px solid var(--line);max-width:82%;text-align:center;}
#chart-tip{position:absolute;display:none;pointer-events:none;z-index:5;font-family:var(--font-mono);font-size:11px;
  color:var(--ink);background:rgba(12,20,36,0.96);border:1px solid var(--line-strong);border-radius:6px;padding:4px 8px;white-space:nowrap;}

/* --- market --- */
.market-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:16px;flex-wrap:wrap;}
.market-head .h-title{margin:0;}
.market-meta{display:flex;gap:18px;font-family:var(--font-mono);font-size:12px;color:var(--ink-dim);}
.market-meta b{color:var(--ink);} .market-meta .amber{color:var(--amber-2);}
table.market{width:100%;border-collapse:collapse;font-size:13px;}
.market th{text-align:left;font-family:var(--font-display);font-size:10px;letter-spacing:1.4px;text-transform:uppercase;
  color:var(--ink-faint);padding:8px 10px;border-bottom:1px solid var(--line-strong);position:sticky;top:0;background:rgba(10,16,30,0.92);backdrop-filter:blur(4px);}
.market td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle;}
.market tr:hover td{background:rgba(72,207,198,0.03);}
.mk-name b{color:var(--ink);font-weight:600;}
.mk-price .price{font-family:var(--font-mono);color:var(--amber-2);font-variant-numeric:tabular-nums;}
.deal{font-family:var(--font-mono);font-size:11px;margin-left:5px;}
.deal.cheap{color:var(--good);} .deal.dear{color:var(--amber);}
.mk-stock,.mk-hold{font-family:var(--font-mono);color:var(--ink-dim);font-variant-numeric:tabular-nums;}
/* keep the qty+Buy+Sell controls (and the hold readout) on one line so a chip-heavy name column can't squeeze them into a wrap */
.mk-hold,.mk-trade{white-space:nowrap;}
.chip{display:inline-block;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.5px;text-transform:uppercase;
  padding:2px 6px;border-radius:5px;margin-left:6px;border:1px solid var(--line-strong);}
.chip.teal{color:var(--teal);border-color:var(--teal-dim);}
.chip.amber{color:var(--amber-2);border-color:rgba(244,180,90,0.4);}
.chip.red{color:var(--bad);border-color:rgba(238,106,106,0.45);}
.qty{width:54px;font-family:var(--font-mono);font-size:13px;color:var(--ink);background:rgba(0,0,0,0.35);
  border:1px solid var(--line-strong);border-radius:6px;padding:6px 8px;text-align:right;}
.mini{font-family:var(--font-display);font-size:12px;letter-spacing:.5px;padding:6px 11px;border-radius:7px;
  border:1px solid var(--line-strong);background:rgba(255,255,255,0.02);color:var(--ink);margin-left:5px;transition:.15s;}
.mini.buy{border-color:rgba(244,180,90,0.42);color:var(--amber-2);}
.mini.buy:hover:not(:disabled){background:rgba(244,180,90,0.15);}
.mini.sell{border-color:var(--teal-dim);color:var(--teal);}
.mini.sell:hover:not(:disabled){background:rgba(72,207,198,0.13);}
.mini:disabled{opacity:.32;cursor:not-allowed;}

/* --- ship --- */
.ship-actions{display:flex;align-items:center;gap:12px;margin-top:8px;}
.hint{font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);}
.ship-reg{color:var(--ink-faint);font-family:var(--font-mono);font-size:12px;margin-top:16px;}

/* --- context / scout / departures --- */
.context .fac{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);margin:2px 0 12px;}
.context .fac .dot{width:9px;height:9px;box-shadow:none;}
.ctx-blurb{font-size:12.5px;line-height:1.6;color:var(--ink-dim);margin:12px 0 14px;font-style:italic;}
.here{color:var(--good);font-family:var(--font-mono);font-size:13px;padding:8px 0;}
.nolane{color:var(--ink-faint);font-family:var(--font-mono);font-size:12px;padding:8px 0;line-height:1.5;}
.seam-star{color:var(--amber);font-size:15px;}
.jump-btn{width:100%;padding:11px;border-radius:9px;border:1px solid rgba(72,207,198,0.5);
  background:linear-gradient(180deg,rgba(72,207,198,0.18),rgba(72,207,198,0.05));color:var(--teal);
  font-family:var(--font-display);letter-spacing:1.5px;text-transform:uppercase;font-size:13px;margin-top:6px;transition:.15s;}
.jump-btn:hover:not(:disabled){background:rgba(72,207,198,0.28);}
.jump-btn:disabled{opacity:.4;border-color:var(--line);color:var(--ink-faint);cursor:not-allowed;}
.departures{margin-top:18px;border-top:1px solid var(--line);padding-top:12px;}
.dep-head{font-family:var(--font-display);font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint);margin-bottom:8px;}
.dep{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--line);cursor:pointer;}
.dep:hover{background:rgba(72,207,198,0.04);}
.dep-name{flex:1;display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink);}
.dep-name .dot{width:8px;height:8px;box-shadow:none;}
.dep-fuel{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);}
.jump-mini{padding:4px 9px;font-size:11px;border-color:var(--teal-dim);color:var(--teal);}
.jump-mini:hover:not(:disabled){background:rgba(72,207,198,0.12);}

/* --- toast --- */
.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,20px);z-index:50;
  background:rgba(12,20,36,0.96);border:1px solid var(--line-strong);border-radius:10px;padding:12px 20px;
  font-family:var(--font-mono);font-size:13px;color:var(--ink);box-shadow:0 12px 40px rgba(0,0,0,0.5);
  opacity:0;pointer-events:none;transition:.25s;backdrop-filter:blur(6px);max-width:80vw;}
.toast.show{opacity:1;transform:translate(-50%,0);}
.toast.good{border-color:rgba(98,201,138,0.5);}
.toast.bad{border-color:rgba(238,106,106,0.5);color:#ffc7c7;}

/* ===================== PHASE 3 — dealer, outfitting, reputation ===================== */
.hostile-banner{background:rgba(238,106,106,0.12);border:1px solid rgba(238,106,106,0.45);color:#ffb3b3;
  border-radius:var(--r);padding:14px 16px;font-size:13px;line-height:1.6;max-width:60ch;}

/* hangar / installed modules — a name+stats row with actions */
.fleet-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);}
.fleet-row:last-child{border-bottom:0;}
.fleet-main b{color:var(--ink);}
.fleet-stats{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);margin-top:3px;}
.fleet-actions{display:flex;gap:6px;flex:none;align-items:center;}

/* dealer / equipment cards */
.deal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin-top:6px;}
.deal-card{background:rgba(0,0,0,0.22);border:1px solid var(--line);border-radius:10px;padding:13px;display:flex;flex-direction:column;gap:6px;}
.deal-top{display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.deal-top b{color:var(--ink);font-size:14px;}
.deal-stats{font-family:var(--font-mono);font-size:11px;color:var(--teal);}
.deal-slots{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-faint);letter-spacing:.5px;}
.deal-blurb{font-size:12px;line-height:1.5;color:var(--ink-dim);font-style:italic;margin:2px 0;flex:1;}
.deal-buy{margin-top:4px;}
.deal-buy .mini{margin-left:0;width:100%;}
/* port-exclusive hulls — an amber-lit card + a "found only here" note */
.deal-excl-card{border-color:rgba(244,180,90,0.42);background:linear-gradient(180deg,rgba(244,180,90,0.09),rgba(0,0,0,0.22));box-shadow:0 0 14px rgba(244,180,90,0.10);}
.deal-excl{font-size:11px;line-height:1.45;color:var(--amber-2);margin:0 0 2px;letter-spacing:.2px;}

/* outfitting slots */
.slot-bar{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px;}
.slot-chip{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.5px;color:var(--ink-dim);
  border:1px solid var(--line-strong);border-radius:6px;padding:4px 9px;background:rgba(0,0,0,0.2);}
.out-sub{font-family:var(--font-display);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-faint);margin:16px 0 8px;}

/* factions / reputation */
.factions-grid{display:block;}
.faction-card{margin-bottom:12px;max-width:640px;}
.fac-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;}
.fac-name{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:16px;letter-spacing:.5px;color:var(--ink);}
.fac-name .dot{width:10px;height:10px;box-shadow:none;}
.fac-tier{font-family:var(--font-mono);font-size:12px;}
.fac-tier.good{color:var(--good);} .fac-tier.bad{color:var(--bad);} .fac-tier.neutral{color:var(--ink-dim);}
.rep-bar{position:relative;height:9px;border-radius:6px;background:rgba(0,0,0,0.4);border:1px solid var(--line);overflow:hidden;margin-bottom:10px;}
.rep-bar > i{display:block;height:100%;border-radius:6px;}
.rep-bar.good > i{background:linear-gradient(90deg,#3c8f63,var(--good));}
.rep-bar.bad > i{background:linear-gradient(90deg,var(--bad),#a83a3a);}
.rep-bar.neutral > i{background:linear-gradient(90deg,rgba(120,150,200,0.4),rgba(120,150,200,0.6));}
.rep-zero{position:absolute;left:50%;top:-1px;bottom:-1px;width:1px;background:rgba(211,221,241,0.4);z-index:2;}

/* ===================== PHASE 4 — arcade combat ===================== */
.combat-overlay{position:fixed;inset:0;z-index:100;overflow:hidden;
  background:radial-gradient(circle at 50% 40%, #0e1a2e 0%, #070d18 60%, #04070e 100%);}
.combat-canvas{position:absolute;inset:0;display:block;}

.cbt-top{position:absolute;top:18px;left:50%;transform:translateX(-50%);width:min(560px,92vw);text-align:center;z-index:2;}
.cbt-name{font-family:var(--font-display);font-size:18px;letter-spacing:1px;color:#ffd6b0;text-shadow:0 0 14px rgba(238,106,106,0.5);}
.cbt-name .cbt-tier{font-family:var(--font-mono);font-size:11px;letter-spacing:1px;color:var(--ink-faint);text-shadow:none;}
.cbt-bars{display:flex;flex-direction:column;gap:5px;margin-top:8px;}
.cbt-bar{display:flex;align-items:center;gap:8px;}
.cbt-bar-l{font-family:var(--font-display);font-size:10px;letter-spacing:1px;text-transform:uppercase;color:var(--ink-faint);width:52px;text-align:right;}
.cbt-track{flex:1;height:12px;border-radius:7px;background:rgba(0,0,0,0.5);border:1px solid var(--line);overflow:hidden;}
.cbt-fill{display:block;width:0;height:100%;border-radius:7px;transition:width .12s linear;}
.cbt-fill.amber{background:linear-gradient(90deg,var(--amber-deep),var(--amber));}
.cbt-fill.teal{background:linear-gradient(90deg,#2f8f89,var(--teal));}
.cbt-bar-v{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);width:66px;text-align:left;font-variant-numeric:tabular-nums;}
.cbt-sub{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);margin-top:6px;}
.cbt-sub .hit, .hit{color:var(--bad);}

.cbt-banner{position:absolute;top:36%;left:50%;transform:translate(-50%,-50%);text-align:center;z-index:2;pointer-events:none;width:90vw;}
.cbt-big{font-family:var(--font-display);font-weight:700;font-size:42px;letter-spacing:6px;color:var(--amber-2);text-shadow:0 0 26px rgba(244,180,90,0.6);}
.cbt-small{font-family:var(--font-mono);font-size:13px;color:var(--ink);margin-top:8px;}
.cbt-small.paused{color:var(--teal);letter-spacing:2px;}

.cbt-deck{position:absolute;bottom:0;left:0;right:0;z-index:2;padding:16px 22px 20px;
  background:linear-gradient(0deg, rgba(8,13,25,0.97), rgba(8,13,25,0.6) 78%, transparent);}
.cbt-deck .cbt-bars{max-width:520px;}
.cbt-deck .cbt-name{font-size:14px;color:var(--amber-2);text-shadow:none;text-align:left;margin-bottom:6px;}
.cbt-cols{display:flex;gap:28px;margin-top:14px;flex-wrap:wrap;}
.cbt-lbl{font-family:var(--font-display);font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint);margin-bottom:8px;}
.cbt-power{min-width:240px;}
.cbt-pwrow{display:flex;align-items:center;gap:8px;margin-bottom:7px;}
.cbt-pwname{font-family:var(--font-display);font-size:12px;color:var(--ink);width:66px;}
.cbt-pip-btn{width:24px;height:24px;border-radius:6px;border:1px solid var(--line-strong);background:rgba(255,255,255,0.03);color:var(--ink);font-size:15px;line-height:1;padding:0;}
.cbt-pip-btn:hover{border-color:var(--amber);color:var(--amber-2);}
.cbt-pips{display:inline-flex;gap:4px;}
.cbt-pips i{width:13px;height:13px;border-radius:3px;background:rgba(255,255,255,0.08);border:1px solid var(--line);display:block;}
.cbt-pips i.on{background:linear-gradient(180deg,var(--amber),var(--amber-deep));box-shadow:0 0 6px rgba(244,180,90,0.5);border-color:transparent;}
.cbt-actions{min-width:240px;}
.cbt-targets{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.cbt-targ{padding:6px 11px;border-radius:7px;border:1px solid var(--line-strong);background:rgba(255,255,255,0.02);color:var(--ink-dim);font-family:var(--font-display);font-size:12px;}
.cbt-targ.on{border-color:var(--teal);color:var(--teal);background:rgba(72,207,198,0.12);}
.cbt-btns{display:flex;gap:8px;}
.cbt-cmd{padding:10px 16px;border-radius:8px;border:1px solid var(--line-strong);background:rgba(255,255,255,0.03);color:var(--ink);font-family:var(--font-display);letter-spacing:1px;font-size:13px;}
.cbt-cmd:hover{border-color:var(--amber);color:var(--amber-2);}
.cbt-cmd.flee{border-color:rgba(238,106,106,0.4);color:var(--bad);}
.cbt-cmd.flee:hover{background:rgba(238,106,106,0.12);}

.cbt-result{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:3;text-align:center;
  background:rgba(10,16,30,0.97);border:1px solid var(--line-strong);border-radius:14px;padding:26px 36px;min-width:280px;box-shadow:0 24px 70px rgba(0,0,0,0.6);}
.cbt-res-title{font-family:var(--font-display);font-size:22px;letter-spacing:2px;color:var(--amber-2);margin-bottom:14px;}
.cbt-res-line{font-family:var(--font-mono);font-size:13px;color:var(--ink);padding:3px 0;}
.cbt-res-line.lvl{color:var(--good);margin-top:6px;}
.cbt-result .cbt-cmd{margin-top:18px;}

@media (max-width:1080px){ .body{grid-template-columns:150px minmax(0,1fr);} .context{display:none;} }
@media (max-width:640px){ .body{grid-template-columns:minmax(0,1fr);} .rail{flex-direction:row;overflow-x:auto;} .rail-foot{display:none;} }
@media (prefers-reduced-motion:reduce){.pulse{animation:none;}}

/* ============================================================
 * Phase 4 REBUILD — flying combat overlay (.ocb-*) + Drydock
 * ============================================================ */
.ocb-overlay{position:fixed;inset:0;z-index:1000;background:#070b12;overflow:hidden;font-family:var(--font-mono);}
.ocb-canvas{position:absolute;inset:0;display:block;width:100%;height:100%;}
.ocb-top,.ocb-deck{position:absolute;z-index:4;background:var(--panel);border:1px solid var(--line);border-radius:12px;
  backdrop-filter:blur(3px);box-shadow:0 8px 30px rgba(0,0,0,0.5);}
.ocb-top{top:14px;left:50%;transform:translateX(-50%);width:min(520px,72vw);padding:10px 14px;}
.ocb-row{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.ocb-ename{font-size:13px;letter-spacing:.5px;color:var(--amber-2);}
.ocb-ename b{color:#ee6a6a;}
.ocb-etier{font-family:var(--font-display);font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--ink-faint);}
.ocb-bars{display:flex;flex-direction:column;gap:6px;margin-top:9px;}
.ocb-bar{display:grid;grid-template-columns:52px 1fr 64px;align-items:center;gap:9px;}
.ocb-bl{font-family:var(--font-display);font-size:10px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-faint);}
.ocb-track{height:9px;border-radius:6px;background:rgba(255,255,255,0.07);overflow:hidden;position:relative;}
.ocb-track i{position:absolute;inset:0 auto 0 0;width:0;border-radius:6px;transition:width .08s linear;}
.ocb-fill.amber{background:linear-gradient(90deg,var(--amber),var(--amber-2));}
.ocb-fill.teal{background:linear-gradient(90deg,#2e9e97,var(--teal));}
.ocb-fill.energy{background:linear-gradient(90deg,#2f6fb5,#5fb0ff);}
.ocb-bv{font-size:11px;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums;}

.ocb-deck{left:14px;bottom:12px;padding:11px 15px;display:flex;gap:18px;align-items:center;flex-wrap:wrap;max-width:calc(100% - 28px);}
.ocb-yname{font-size:12px;letter-spacing:.5px;color:var(--amber-2);margin-bottom:8px;}
.ocb-deck .ocb-bars{min-width:210px;}
.ocb-ord{display:flex;gap:14px;align-items:center;}
.ocb-cell{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:48px;}
.ocb-num{font-size:19px;line-height:1;font-variant-numeric:tabular-nums;}
.ocb-num.mis{color:#ff9a76;} .ocb-num.flr{color:#8ff2e8;} .ocb-num.mns{color:#ff9a76;}
.ocb-num.low{color:#ff5a5a;}
.ocb-lbl{font-family:var(--font-display);font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-faint);}
.ocb-slipmini{width:44px;height:6px;border-radius:3px;background:rgba(255,255,255,0.09);overflow:hidden;position:relative;}
.ocb-slipmini i{position:absolute;inset:0 auto 0 0;width:0;background:var(--teal);}
.ocb-legend{display:flex;flex-wrap:wrap;gap:7px 12px;align-content:center;max-width:360px;}
.ocb-k{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--ink-faint);}
.ocb-legend kbd{font-family:var(--font-mono);font-size:10px;color:var(--ink);background:rgba(255,255,255,0.05);
  border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:2px 6px;min-width:20px;text-align:center;}
.ocb-btns{display:flex;gap:8px;align-items:center;}
.ocb-cmd{font-family:var(--font-mono);font-size:12px;letter-spacing:.8px;text-transform:uppercase;color:#0a1018;font-weight:700;cursor:pointer;
  background:linear-gradient(180deg,var(--amber-2),var(--amber));border:none;border-radius:8px;padding:9px 15px;box-shadow:0 3px 0 var(--amber-deep);}
.ocb-cmd:active{transform:translateY(2px);box-shadow:0 1px 0 var(--amber-deep);}
.ocb-cmd.ghost{background:transparent;color:var(--teal);box-shadow:none;border:1px solid var(--line);font-weight:600;}
.ocb-icon{font-family:var(--font-mono);background:transparent;border:1px solid var(--line);color:var(--ink-dim);border-radius:8px;width:38px;height:38px;cursor:pointer;font-size:15px;}

.ocb-banner{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;gap:6px;align-items:center;justify-content:center;text-align:center;pointer-events:none;}
.ocb-banner.dim::before{content:"";position:absolute;inset:0;background:rgba(3,6,12,0.5);}
.ocb-big{position:relative;font-family:var(--font-display);font-weight:800;letter-spacing:5px;font-size:clamp(26px,6vw,52px);text-transform:uppercase;color:var(--ink);text-shadow:0 0 24px rgba(72,207,198,0.35);}
.ocb-sub{position:relative;font-size:13px;letter-spacing:2px;color:var(--ink-dim);text-transform:uppercase;}
.ocb-sub.amber{color:var(--amber-2);}
.ocb-result{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:6;text-align:center;min-width:300px;max-width:90vw;
  padding:26px 34px;background:rgba(10,16,30,0.97);border:1px solid var(--line-strong);border-radius:14px;box-shadow:0 24px 70px rgba(0,0,0,0.6);}
.ocb-res-title{font-family:var(--font-display);font-size:22px;letter-spacing:2px;color:var(--amber-2);margin-bottom:14px;}
.ocb-res-line{font-family:var(--font-mono);font-size:13px;color:var(--ink);padding:3px 0;}
.ocb-res-line.lvl{color:var(--good);margin-top:6px;}
.ocb-result .ocb-cmd{margin-top:18px;}
@media (max-width:640px){ .ocb-deck{gap:12px;padding:9px 11px;} .ocb-legend{max-width:200px;} }

/* ---- Drydock (engage tab) ---- */
.cbt-lbl{font-family:var(--font-display);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-dim);margin-bottom:7px;}
.stance-row{display:flex;flex-wrap:wrap;gap:7px;}
.mini.stance{border-color:var(--line);}
.mini.stance.on{border-color:var(--amber);color:var(--amber-2);background:rgba(244,180,90,0.14);box-shadow:0 0 0 1px var(--amber);}
.rig-inv{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px;}
.rig-chip{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);border:1px solid var(--line);border-radius:8px;padding:5px 10px;}
.rig-chip b{color:var(--teal);}
.rig-lvl{font-family:var(--font-mono);font-size:11px;color:var(--amber-2);border:1px solid var(--line);border-radius:8px;padding:5px 10px;margin-left:auto;}
.rig-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;}
.rig-track{border:1px solid var(--line);border-radius:10px;background:rgba(0,0,0,0.18);padding:11px 12px;}
.rig-th{font-family:var(--font-display);font-size:12px;letter-spacing:1px;text-transform:uppercase;color:var(--amber-2);margin-bottom:8px;}
.rig-tier{border-top:1px solid rgba(255,255,255,0.06);padding:8px 0;}
.rig-tier:first-of-type{border-top:none;}
.rig-tn{font-size:12px;color:var(--ink);}
.rig-td{font-size:10.5px;color:var(--ink-faint);line-height:1.4;margin:3px 0 7px;}
.rig-trow{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.rig-cost{font-size:10px;color:var(--amber-2);font-variant-numeric:tabular-nums;}
.rig-badge{font-family:var(--font-display);font-size:9px;letter-spacing:1px;text-transform:uppercase;color:var(--ink-faint);border:1px solid var(--line);border-radius:20px;padding:2px 8px;}
.rig-badge.on{color:#0a1018;background:var(--teal);border-color:var(--teal);}
.exch-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;}
.exch-item{border:1px solid var(--line);border-radius:10px;background:rgba(0,0,0,0.18);padding:11px 12px;}
.exch-h{font-size:13px;color:var(--teal);margin-bottom:9px;}
.exch-row{display:flex;align-items:center;justify-content:space-between;gap:8px;}

/* ===================== PHASE 4.5 — Comms / market intel ===================== */
.tab-badge{margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  font-family:var(--font-mono);font-size:10px;line-height:18px;text-align:center;
  background:var(--amber);color:#1a1205;font-weight:700;}
#comms-scanner .cat{font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);}

.news-card{position:relative;background:var(--panel-2);border:1px solid var(--line);
  border-left:3px solid var(--fac,var(--teal));border-radius:var(--r);padding:12px 14px;margin-bottom:10px;
  cursor:pointer;transition:.15s;max-width:720px;}
.news-card:hover{border-color:var(--teal-dim);background:rgba(72,207,198,0.05);}
.news-card.breaking{border-color:rgba(244,180,90,0.45);box-shadow:0 0 0 1px rgba(244,180,90,0.12);}
.news-top{display:flex;align-items:center;gap:8px;margin-bottom:5px;}
.news-flash{font-family:var(--font-mono);font-size:9px;letter-spacing:1.5px;background:var(--amber);color:#1a1205;
  padding:2px 6px;border-radius:4px;font-weight:700;}
.news-head{font-family:var(--font-display);font-size:15px;color:var(--ink);letter-spacing:.3px;}
.news-detail{color:var(--ink-dim);font-size:13px;line-height:1.6;margin:2px 0 8px;}
.news-chips{display:flex;flex-wrap:wrap;gap:5px;}
.news-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:9px;
  font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);flex-wrap:wrap;}
.news-loc{display:flex;align-items:center;gap:6px;color:var(--ink-dim);}
.news-loc .dot{width:8px;height:8px;border-radius:50%;display:inline-block;box-shadow:none;}
.news-time{font-variant-numeric:tabular-nums;}

.mk-event{background:linear-gradient(180deg,rgba(244,180,90,0.12),rgba(244,180,90,0.03));
  border:1px solid rgba(244,180,90,0.4);border-radius:var(--r);padding:11px 14px;margin-bottom:14px;}
.mk-event.sev3{border-color:rgba(238,106,106,0.5);background:linear-gradient(180deg,rgba(238,106,106,0.12),rgba(238,106,106,0.03));}
.mk-event-head{font-family:var(--font-display);font-size:14px;color:var(--amber-2);letter-spacing:.3px;margin-bottom:3px;}
.mk-event.sev3 .mk-event-head{color:#ffb3b3;}
.mk-event-detail{color:var(--ink-dim);font-size:12.5px;line-height:1.55;margin-bottom:7px;}
.tab-badge.teal{background:var(--teal);}

/* ---- contracts / job board ---- */
.ct-card{position:relative;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r);
  padding:12px 14px;margin-bottom:10px;max-width:720px;}
.ct-card.active{border-left:3px solid var(--amber);background:rgba(244,180,90,0.05);}
.ct-top{display:flex;align-items:center;gap:8px;margin-bottom:5px;}
.ct-title{font-family:var(--font-display);font-size:14px;color:var(--ink);letter-spacing:.3px;flex:1;}
.ct-detail{color:var(--ink-dim);font-size:12.5px;line-height:1.55;margin:2px 0 8px;}
.ct-foot{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);}
.ct-tgt{color:var(--teal);cursor:pointer;}
.ct-tgt:hover{text-decoration:underline;}
.ct-reward{color:var(--amber-2);font-variant-numeric:tabular-nums;}
.ct-xp{color:var(--good);} .ct-rep{color:var(--teal);}
.ct-time{margin-left:auto;font-variant-numeric:tabular-nums;}
.ct-action{margin-top:10px;}
.ct-hint{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-dim);}
.ct-drop{flex:none;width:22px;height:22px;border-radius:6px;border:1px solid var(--line);background:transparent;
  color:var(--ink-faint);font-size:12px;cursor:pointer;line-height:1;}
.ct-drop:hover{border-color:var(--bad);color:var(--bad);}

/* ---- cantina (NPCs + rumors) ---- */
.npc-card{display:flex;gap:14px;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r);
  padding:14px;margin-bottom:10px;max-width:720px;}
.npc-face{flex:none;width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-size:17px;font-weight:700;color:#08111f;letter-spacing:1px;
  background:var(--fac,#48cfc6);border:1px solid rgba(255,255,255,0.18);box-shadow:0 0 16px color-mix(in srgb,var(--fac,#48cfc6) 45%, transparent);}
.npc-body{flex:1;min-width:0;}
.npc-head{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;}
.npc-head b{font-family:var(--font-display);font-size:15px;color:var(--ink);letter-spacing:.4px;}
.npc-role{font-family:var(--font-mono);font-size:10px;letter-spacing:1.4px;text-transform:uppercase;color:var(--ink-faint);}
.npc-greet{font-size:12px;color:var(--ink-dim);font-style:italic;margin:3px 0 0;}
.rumor{font-size:13px;line-height:1.55;color:var(--ink);border-left:2px solid var(--line-strong);padding:3px 0 3px 11px;margin:9px 0 0;}
.rumor-intel{border-color:var(--amber);} .rumor-tip{border-color:var(--teal);}
.rumor-whisper{border-color:#b58cff;} .rumor-lore{border-color:var(--line-strong);color:var(--ink-dim);font-style:italic;}
.npc-action{margin-top:9px;}
.npc-action .mini{margin-left:0;}

/* ---- deep-space POI card (context rail) ---- */
.poi-card{background:linear-gradient(180deg,rgba(72,207,198,0.10),rgba(72,207,198,0.02));border:1px solid var(--teal-dim);
  border-radius:var(--r);padding:12px 13px;margin-bottom:14px;}
.poi-card.poi-anomaly{border-color:rgba(181,140,255,0.5);background:linear-gradient(180deg,rgba(181,140,255,0.13),transparent);}
.poi-card.poi-derelict{border-color:rgba(244,180,90,0.45);background:linear-gradient(180deg,rgba(244,180,90,0.10),transparent);}
.poi-top{font-family:var(--font-display);font-size:14px;color:var(--teal);letter-spacing:.3px;margin-bottom:4px;}
.poi-card.poi-anomaly .poi-top{color:#c9a6ff;} .poi-card.poi-derelict .poi-top{color:var(--amber-2);}
.poi-detail{font-size:12px;line-height:1.5;color:var(--ink-dim);margin-bottom:7px;}
.poi-reward{font-family:var(--font-mono);font-size:11.5px;color:var(--amber-2);margin-bottom:10px;}
.poi-risk{color:var(--bad);}
.poi-btns{display:flex;gap:8px;}
.poi-btns .mini{margin-left:0;}

/* ============================================================
   PHASE 4.6 — contraband risk chip, heat meter, customs modal
   ============================================================ */
.chip.risk{background:rgba(238,106,106,0.16);color:#ff9a6a;border:1px solid rgba(238,106,106,0.5);}
.meter.heat i{background:linear-gradient(90deg,var(--amber),var(--bad));}

/* the customs inspection: a forced decision — bribe / surrender / run */
.cust-overlay{position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;
  background:rgba(4,8,16,0.80);backdrop-filter:blur(3px);padding:20px;}
.cust-overlay.show{display:flex;animation:custFade .18s ease-out;}
@keyframes custFade{from{opacity:0;}to{opacity:1;}}
.cust-card{width:min(560px,96vw);background:linear-gradient(180deg,var(--void-3),var(--void-2));
  border:1px solid rgba(238,106,106,0.45);border-radius:var(--r);
  box-shadow:0 24px 80px rgba(0,0,0,0.6),0 0 40px rgba(238,106,106,0.12);padding:22px 22px 16px;}
.cust-flash{display:inline-block;font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:2px;
  color:var(--void);background:var(--bad);padding:5px 10px;border-radius:5px;}
.cust-title{margin:12px 0 6px;color:var(--amber-2);font-family:var(--font-display);font-size:18px;letter-spacing:.3px;}
.cust-lede{margin:0 0 16px;color:var(--ink);line-height:1.55;font-size:13.5px;}
.cust-lede b{color:var(--amber-2);}
.cust-opts{display:flex;flex-direction:column;gap:10px;}
.cust-opt{display:grid;grid-template-columns:1fr auto;gap:2px 12px;text-align:left;
  background:var(--panel-2);border:1px solid var(--line-strong);border-radius:10px;padding:12px 14px;cursor:pointer;color:var(--ink);
  font-family:inherit;transition:border-color .12s,background .12s;}
.cust-opt:hover:not(:disabled){border-color:var(--teal-dim);background:rgba(72,207,198,0.06);}
.cust-opt:disabled{opacity:.45;cursor:not-allowed;}
.cust-opt .co-h{font-weight:700;font-size:14px;}
.cust-opt .co-cost{justify-self:end;font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--amber-2);}
.cust-opt .co-sub{grid-column:1 / -1;color:var(--ink-dim);font-size:12px;margin-top:2px;line-height:1.45;}
.cust-opt.run:hover:not(:disabled){border-color:rgba(238,106,106,0.55);background:rgba(238,106,106,0.06);}
.cust-opt.run .co-cost{color:var(--bad);}
.cust-foot{margin-top:14px;text-align:center;}

/* ---- Phase 4.7: faction repair (reparations + hints) ---- */
.fac-note{margin:0 0 12px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel);line-height:1.5;}
.fac-note b{color:var(--amber-2);}
.fac-repair{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:11px;padding-top:10px;border-top:1px solid var(--line);}
.fac-repair .mini{margin-left:0;white-space:nowrap;}
.fac-earn{margin-top:9px;padding-top:9px;border-top:1px solid var(--line);}

/* ---- Phase 4.8: multishot weapon label in the outfitting catalog ---- */
.deal-stats .ms-chip{color:var(--amber-2);font-family:var(--font-mono);font-weight:700;}

/* ============================================================
   PHASE 5 — audio deck + generated art
   ============================================================ */

/* --- the audio bar (player.js builds it, self-hidden if no assets) --- */
.oaudio{
  position:fixed; left:14px; bottom:14px; z-index:60;
  display:flex; align-items:center; gap:8px;
  padding:7px 12px; border-radius:999px;
  background:var(--panel); border:1px solid var(--line-strong);
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px);
  box-shadow:0 6px 20px rgba(0,0,0,0.45);
  font-family:var(--font-display); color:var(--ink-dim);
}
.oaudio .oa-btn{ background:transparent; border:0; color:var(--ink); cursor:pointer;
  font-size:15px; line-height:1; padding:3px 5px; border-radius:6px; }
.oaudio .oa-btn:hover{ color:var(--amber-2); text-shadow:var(--glow-amber); }
.oaudio .oa-mute.is-muted{ color:var(--ink-faint); }
.oaudio .oa-vol{ width:72px; accent-color:var(--teal); cursor:pointer; }
.oaudio .oa-now{ font-size:12px; letter-spacing:.03em; color:var(--teal);
  max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.oaudio:not(.oa-armed) .oa-vol,
.oaudio:not(.oa-armed) .oa-skip,
.oaudio:not(.oa-armed) .oa-mood{ display:none; }
.oaudio .oa-mood{ display:inline-flex; align-items:center; gap:5px; font-size:11px; letter-spacing:.03em;
  color:var(--ink-dim); cursor:pointer; user-select:none; white-space:nowrap; padding-left:8px;
  border-left:1px solid var(--line); }
.oaudio .oa-mood input{ accent-color:var(--amber); cursor:pointer; margin:0; }
.oaudio .oa-mood:hover{ color:var(--amber-2); }
.oaudio:not(.oa-armed) .oa-now{ color:var(--amber); animation:oaPulse 2.2s ease-in-out infinite; }
@keyframes oaPulse{ 0%,100%{opacity:.55} 50%{opacity:1} }
@media (max-width:720px){ .oaudio .oa-now{ max-width:84px; } .oaudio .oa-vol{ width:52px; } }

/* --- generated art: subjects rendered on pure black → `screen` drops the black --- */
.gen-screen{ mix-blend-mode:screen; }

/* commodity icon in the market name cell */
.mk-name .mk-icon{ width:26px; height:26px; border-radius:5px; vertical-align:middle;
  margin-right:8px; mix-blend-mode:screen; display:inline-block; }

/* faction sigil on the Factions cards */
.fac-sigil{ width:52px; height:52px; border-radius:8px; mix-blend-mode:screen;
  float:right; margin:-2px -2px 4px 8px; }

/* ship art (dealer / active ship / combat portrait) */
.ship-art{ width:100%; max-width:220px; aspect-ratio:1/1; object-fit:contain;
  mix-blend-mode:screen; display:block; margin:0 auto; }
.deal-card .ship-art{ max-width:120px; }

/* NPC portrait in the cantina — fills the circular avatar face (no blend) */
.npc-face.has-img{ padding:0; overflow:hidden; border:1px solid var(--line-strong); }
.npc-face .npc-portrait{ width:100%; height:100%; object-fit:cover; border-radius:50%; display:block; }

/* port / economy establishing art — a subtle hero banner */
.port-hero{ position:relative; width:100%; height:104px; border-radius:var(--r) var(--r) 0 0;
  background-size:cover; background-position:center; overflow:hidden;
  box-shadow:inset 0 -40px 44px -18px var(--void); }
.port-hero::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(7,11,20,.15), rgba(7,11,20,.82)); }
.port-hero .port-cap{ position:absolute; left:12px; bottom:8px; z-index:2;
  font-family:var(--font-display); color:var(--ink); text-shadow:0 1px 6px #000; }

/* brand hero (menu / dossier) */
.brand-hero{ width:100%; max-width:420px; display:block; margin:0 auto; mix-blend-mode:screen; }

/* combat HUD ship-art thumbnails (dossier) */
.ocb-thumb{ width:34px; height:34px; border-radius:6px; object-fit:cover; vertical-align:middle;
  margin-right:7px; mix-blend-mode:screen; display:inline-block; }

/* cantina: NPC speak button + establishing hero */
.npc-head .npc-speak{ background:transparent; border:0; cursor:pointer; font-size:13px; line-height:1;
  padding:0 4px; opacity:.6; }
.npc-head .npc-speak:hover{ opacity:1; text-shadow:var(--glow-teal); }
.cantina-hero{ margin-bottom:14px; }

/* ---- named residents (JR1.3/1.4): the memorable cast, on top of the crowd ---- */
.cantina-section{ margin:0 0 20px; }
.cantina-sub{ font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-faint);
  margin:0 0 12px; padding-bottom:6px; border-bottom:1px solid var(--line); }
.resident-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:14px; margin-bottom:6px; }
.resident-card{ display:flex; gap:14px; background:var(--panel-2); border:1px solid var(--line);
  border-left:3px solid var(--fac,var(--teal)); border-radius:var(--r); padding:14px; }
.res-face{ position:relative; flex:none; width:84px; height:84px; border-radius:10px; overflow:hidden;
  border:1px solid var(--line-strong); background:#05080a; box-shadow:0 0 16px -6px var(--fac,var(--teal)); }
.res-portrait{ width:100%; height:100%; object-fit:cover; display:block; }
.res-noface{ display:flex; width:100%; height:100%; align-items:center; justify-content:center;
  font-size:30px; font-weight:700; color:var(--fac,var(--teal)); }
.res-syn{ position:absolute; bottom:0; left:0; right:0; text-align:center; font-size:8.5px; letter-spacing:.12em;
  text-transform:uppercase; background:rgba(5,8,10,.72); color:#dfeef0; padding:2px 0; }
.res-body{ flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.res-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.res-head b{ font-size:15px; color:var(--ink); }
.res-met,.res-new{ font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; padding:1.5px 7px;
  border-radius:20px; border:1px solid var(--line); }
.res-met{ color:var(--teal); border-color:var(--teal-dim); }
.res-new{ color:var(--ink-faint); }
.res-travel{ font-size:9.5px; letter-spacing:.06em; text-transform:uppercase; padding:1.5px 7px; border-radius:20px;
  color:#b58cff; border:1px solid rgba(181,140,255,.4); }
.cantina-section.sightings{ opacity:.92; }
.sighting{ font-size:12.5px; color:var(--ink-dim); padding:5px 0; border-bottom:1px dashed var(--line); }
.sighting b{ color:var(--teal); font-weight:600; }
.sighting:last-child{ border-bottom:0; }
.res-role{ font-size:11.5px; color:var(--fac,var(--amber)); letter-spacing:.02em; }
.res-bio{ font-size:12px; color:var(--ink-dim); margin:2px 0 0; line-height:1.4; }
.res-line{ font-size:12.5px; color:var(--ink); font-style:italic; margin:4px 0 0;
  border-left:2px solid var(--line-strong); padding-left:9px; line-height:1.4; }
.res-line .npc-speak{ background:transparent; border:0; cursor:pointer; font-size:12px; opacity:.7; }
.res-line .npc-speak:hover{ opacity:1; text-shadow:var(--glow-teal); }
.res-warmth{ display:flex; align-items:center; gap:9px; margin-top:6px; }
.res-warmth .wl{ font-size:10px; letter-spacing:.08em; text-transform:uppercase; min-width:60px; }
.res-warmth .wl.hostile{ color:#ff7a7a; } .res-warmth .wl.wary{ color:#ffb055; }
.res-warmth .wl.neutral{ color:var(--ink-faint); } .res-warmth .wl.friendly{ color:var(--teal); }
.res-warmth .wl.warm{ color:var(--amber-2); }
.res-warmth .wbar{ flex:1; height:5px; border-radius:3px; background:rgba(120,150,200,.14); overflow:hidden; }
.res-warmth .wbar i{ display:block; height:100%; border-radius:3px;
  background:linear-gradient(90deg,var(--teal),var(--amber-2)); box-shadow:var(--glow-teal); }
.res-actions{ display:flex; gap:8px; margin-top:9px; }
@media (max-width:560px){ .resident-grid{ grid-template-columns:1fr; } }
/* thread offers on a dossier */
.res-offers{ margin-top:8px; display:flex; flex-direction:column; gap:6px; }
.res-offer{ display:flex; align-items:center; gap:8px; padding:6px 9px; border-radius:8px;
  background:rgba(244,180,90,.07); border:1px solid rgba(244,180,90,.28); }
.ro-t{ flex:1; font-size:12px; color:var(--amber-2); letter-spacing:.01em; }
.mini.gold{ border-color:var(--amber-deep); color:var(--amber-2); }
.mini.gold:hover{ background:rgba(244,180,90,.16); box-shadow:var(--glow-amber); }

/* ---- the Journal (JR2): story threads ---- */
.thread-card{ position:relative; background:linear-gradient(180deg,rgba(20,32,54,.82),var(--panel-2));
  border:1px solid var(--line-strong); border-left:3px solid var(--amber); border-radius:var(--r);
  padding:14px 16px; margin-bottom:12px; }
.thread-card.is-choice{ border-left-color:var(--teal); box-shadow:0 0 22px -12px var(--teal); }
.th-head{ display:flex; align-items:center; gap:10px; }
.th-head b{ font-size:15px; color:var(--ink); flex:1; }
.th-scope{ font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; padding:2px 8px; border-radius:20px; white-space:nowrap; }
.th-scope.hard{ color:var(--amber-2); border:1px solid var(--amber-deep); background:rgba(244,180,90,.08); }
.th-scope.soft{ color:var(--teal); border:1px solid var(--teal-dim); }
.th-giver{ display:flex; align-items:center; gap:7px; font-size:11.5px; color:var(--ink-dim); }
.th-giver img{ width:26px; height:26px; border-radius:50%; object-fit:cover; border:1px solid var(--line-strong); }
.th-narr{ font-size:13px; color:var(--ink-dim); line-height:1.5; margin:8px 0 0; }
.th-obj{ margin-top:10px; font-size:12.5px; color:var(--teal); letter-spacing:.02em; }
.th-choices{ display:flex; flex-direction:column; gap:9px; margin-top:12px; }
.th-opt{ text-align:left; cursor:pointer; background:rgba(72,207,198,.05); border:1px solid var(--line-strong);
  border-radius:9px; padding:10px 12px; color:var(--ink); transition:border-color .15s, background .15s; }
.th-opt:hover{ border-color:var(--teal); background:rgba(72,207,198,.12); }
.th-opt b{ display:block; font-size:13.5px; color:var(--amber-2); margin-bottom:3px; }
.th-opt span{ display:block; font-size:12px; color:var(--ink-dim); line-height:1.45; }
.th-drop{ position:absolute; top:12px; right:14px; background:transparent; border:0; cursor:pointer;
  font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-faint); }
.th-drop:hover{ color:#ff7a7a; }
/* explicit hand-in / objective legibility (parity with contract cards) */
.th-obj.warn{ color:var(--amber-2); }
.th-tgt{ color:var(--teal); cursor:pointer; }
.th-tgt:hover{ text-decoration:underline; }
.th-held{ color:var(--ink-faint); font-family:var(--font-mono); font-size:11px; }
.th-do{ margin-top:11px; }
/* active quest surfaced inline on a resident's dossier */
.res-active{ margin-top:9px; padding:8px 10px; border-radius:8px;
  background:rgba(72,207,198,.06); border:1px solid var(--teal-dim); }
.res-active .th-obj, .res-active .th-do{ margin-top:6px; }
.ra-t{ display:block; font-size:11px; letter-spacing:.04em; text-transform:uppercase; color:var(--teal); }
.res-carry{ margin-top:9px; padding:8px 10px; border-radius:8px; font-size:12px; color:var(--ink-dim);
  background:rgba(244,180,90,.07); border:1px solid rgba(244,180,90,.28); }
.res-carry b{ color:var(--amber-2); }

/* ---- handler-DM hails (JR1.5) in the Comms feed ---- */
.hail-card{ display:flex; gap:12px; align-items:flex-start; background:var(--panel-2);
  border:1px solid var(--line); border-left:3px solid var(--teal); border-radius:var(--r);
  padding:12px 14px; margin-bottom:10px; }
.hail-card.unread{ border-left-color:var(--amber); box-shadow:0 0 20px -12px var(--amber); }
.hail-face{ flex:none; width:44px; height:44px; border-radius:50%; object-fit:cover;
  border:1px solid var(--line-strong); background:#05080a; }
.hail-face.nofc{ display:flex; align-items:center; justify-content:center; font-weight:700; color:var(--teal); }
.hail-body{ flex:1; min-width:0; }
.hail-head{ display:flex; align-items:baseline; gap:8px; }
.hail-head b{ font-size:13.5px; color:var(--ink); }
.hail-age{ font-size:10.5px; color:var(--ink-faint); letter-spacing:.04em; }
.hail-text{ margin:4px 0 0; font-size:13px; color:var(--ink-dim); line-height:1.5; }

/* per-page header banners (standalone: full radius + spacing) */
.page-hero{ border-radius:var(--r); margin-bottom:14px; }

/* ===================== RIFT NET — async multiplayer (Phase 6) ===================== */
.kv .v.teal{ color:var(--teal); }

/* presence — who's flying now */
.pres-list{ display:flex; flex-direction:column; }
.pres-row{ display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); font-size:13px; }
.pres-row:last-child{ border-bottom:0; }
.pres-row.here{ background:rgba(72,207,198,0.06); border-radius:8px; padding-left:8px; padding-right:8px; }
.pres-name{ color:var(--ink); font-weight:600; min-width:130px; }
.pres-meta{ font-family:var(--font-mono); font-size:11px; color:var(--ink-dim); flex:1; }
.pres-where{ font-family:var(--font-mono); font-size:11px; color:var(--teal); }
.pres-ago{ font-family:var(--font-mono); font-size:10.5px; color:var(--ink-faint); min-width:46px; text-align:right; }

/* comms channels + chat log */
.chan-row{ display:flex; gap:8px; margin-bottom:10px; }
.mini.chan{ border-color:var(--line); margin-left:0; }
.mini.chan.on{ border-color:var(--teal); color:var(--teal); background:rgba(72,207,198,0.13); box-shadow:0 0 0 1px var(--teal-dim); }
.chat-log{ display:flex; flex-direction:column; gap:2px; max-height:260px; overflow-y:auto; padding:6px; margin-bottom:10px;
  background:rgba(0,0,0,0.22); border:1px solid var(--line); border-radius:10px; }
.chat-msg{ display:flex; align-items:baseline; gap:8px; padding:4px 6px; border-radius:7px; font-size:13px; line-height:1.5; }
.chat-msg.mine{ background:rgba(244,180,90,0.07); }
.chat-who{ font-family:var(--font-display); font-size:11px; letter-spacing:.4px; color:var(--amber-2); flex:none; min-width:84px; }
.chat-msg.mine .chat-who{ color:var(--amber); }
.chat-body{ color:var(--ink); flex:1; word-break:break-word; }
.chat-ago{ font-family:var(--font-mono); font-size:10px; color:var(--ink-faint); flex:none; }
.chat-compose{ display:flex; gap:8px; }
.chat-input{ flex:1; font-family:var(--font-body); font-size:13px; color:var(--ink); background:rgba(0,0,0,0.35);
  border:1px solid var(--line-strong); border-radius:8px; padding:9px 12px; }
.chat-input:disabled{ opacity:.4; }
.chat-compose .mini{ flex:none; margin-left:0; }

/* captains' consignment — player-to-player listings */
.listing-card{ background:var(--panel-2); border:1px solid var(--line); border-radius:10px; padding:12px 14px; margin-bottom:10px; }
.listing-card.mine{ border-color:rgba(244,180,90,0.34); }
.listing-top{ display:flex; align-items:center; gap:4px; }
.listing-top b{ color:var(--ink); }
.listing-price{ font-family:var(--font-mono); font-size:13px; color:var(--amber-2); margin:5px 0; }
.listing-foot{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:6px; }
.listing-foot .mini{ margin-left:0; }
.list-form{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.list-sel{ font-family:var(--font-body); font-size:13px; color:var(--ink); background:rgba(0,0,0,0.35);
  border:1px solid var(--line-strong); border-radius:8px; padding:8px 10px; flex:1; min-width:150px; }
.qty.price{ width:90px; }
.list-form .mini{ margin-left:0; }

/* shared-economy ticker */
.tk-list{ display:flex; flex-direction:column; gap:1px; max-height:230px; overflow-y:auto; }
.tk-row{ padding:6px 4px; border-bottom:1px solid var(--line); font-size:12.5px; line-height:1.5; color:var(--ink-dim); }
.tk-row:last-child{ border-bottom:0; }
.tk-name{ color:var(--ink); font-weight:600; }
.tk-buy{ color:var(--teal); } .tk-sell{ color:var(--amber-2); }

/* ===================== Phase 6.1 — comms wheel · confidants · DMs ===================== */
/* presence/confidant action column */
.pres-name{ display:flex; align-items:center; }
.pres-act{ flex:none; margin-left:auto; display:flex; gap:6px; align-items:center; }
.pres-act .mini{ margin-left:0; padding:4px 9px; font-size:11px; }
.conf-star{ color:var(--amber-2); margin:0 2px; }

/* comms wheel — the ONLY group composer (safe preset phrases) */
.wheel{ margin-top:10px; }
.wheel-cats{ display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.mini.wheel-cat{ margin-left:0; font-size:11px; padding:5px 9px; border-color:var(--line); color:var(--ink-dim); }
.mini.wheel-cat.on{ border-color:var(--amber); color:var(--amber-2); background:rgba(244,180,90,0.12); }
.wheel-grid{ display:flex; flex-wrap:wrap; gap:6px; }
.mini.wheel-phrase{ margin-left:0; font-size:12px; padding:6px 10px; border-color:var(--teal-dim); color:var(--teal);
  background:rgba(72,207,198,0.06); font-family:var(--font-body); letter-spacing:0; }
.mini.wheel-phrase:hover:not(:disabled){ background:rgba(72,207,198,0.16); }
.wheel-compose{ display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.wheel-lbl{ font-family:var(--font-body); font-size:13px; color:var(--ink); }
.wheel-compose .list-sel{ flex:1; min-width:150px; }
.wheel-compose .mini{ margin-left:0; }

/* confidants (trusted friends) + requests */
.conf-row{ display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); font-size:13px; }
.conf-row:last-child{ border-bottom:0; }
.conf-row.unread{ background:rgba(72,207,198,0.06); border-radius:8px; padding-left:8px; padding-right:8px; }
.pdot{ display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--ink-faint); margin-right:7px; flex:none; }
.pdot.on{ background:var(--good); box-shadow:0 0 6px rgba(98,201,138,0.7); }
.conf-unread{ display:inline-block; min-width:16px; height:16px; padding:0 5px; margin-left:6px; border-radius:8px;
  font-family:var(--font-mono); font-size:10px; line-height:16px; text-align:center; background:var(--teal); color:#04201e; font-weight:700; }

/* DM thread (free text, confidants only) */
.dm-card h4{ display:flex; align-items:center; gap:8px; }
.mini.dm-close{ margin-left:auto; padding:3px 8px; font-size:11px; }
.dm-log{ background:rgba(72,207,198,0.04); }
.dm-log .chat-msg{ padding-left:8px; border-left:2px solid var(--teal-dim); }
.dm-log .chat-msg.mine{ border-left-color:var(--amber); }
