/* nav-console.css - the Nav Console (1.11.9.111). See nav-console.js.

   Same machine as the chat deck (chat-deck.css): the moulded green-black
   housing with painted screws, a green phosphor CRT, the rectangular lamp
   strip and a sloped deck of graphite keys with amber legends. The price
   board is the one screen that is not a CRT: it is a split-flap board, the
   kind that hangs over a station concourse, framed in the same housing.

   On phones since 1.11.9.122 as the whole of mobile shipping, with the map
   pane hidden: see the PHONE block at the end of this file. */

body.fm-mobile #gNavLayer, body.fm-mobile .nvc-pop{display:none!important}
/* The two tabs the console replaces. body.fm-nav is set by nav-console.js only
   once the console exists, so a failed load leaves the old tabs on the bar. */
body.fm-nav .galaxy-stab[data-gstab="markets"],
body.fm-nav .galaxy-stab[data-gstab="stribor"]{display:none!important}

#gNavConsole{
  --nv-ph:#7cf0a4; --nv-ph-glow:rgba(66,255,126,.35); --nv-amb:#f5c26a;
  flex:0 0 auto;margin:6px 6px 6px;border-radius:9px;padding:8px 12px 10px;
  font-family:'Share Tech Mono',ui-monospace,monospace;user-select:none;
  background:
    radial-gradient(circle at 35% 35%,#4a524a 0,#151815 3px,#000 3.5px,transparent 4px) 6px 6px/9px 9px no-repeat,
    radial-gradient(circle at 35% 35%,#4a524a 0,#151815 3px,#000 3.5px,transparent 4px) calc(100% - 6px) 6px/9px 9px no-repeat,
    radial-gradient(circle at 35% 35%,#4a524a 0,#151815 3px,#000 3.5px,transparent 4px) 6px calc(100% - 6px)/9px 9px no-repeat,
    radial-gradient(circle at 35% 35%,#4a524a 0,#151815 3px,#000 3.5px,transparent 4px) calc(100% - 6px) calc(100% - 6px)/9px 9px no-repeat,
    linear-gradient(180deg,#1b201b,#0a0c0a);
  box-shadow:0 0 0 1px #000,0 4px 14px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 0 1px #262c26,inset 0 -2px 0 rgba(0,0,0,.6)}
/* Plate and collapse key (1.11.9.117). The plate was 9-10px text in dark brass and
   the collapse control a 22x16 arrow; players could not read the one or find the
   other. The key is now a labelled amber key like the CB set's, and a collapsed
   console can be opened by clicking anywhere on its plate. */
.nvc-plate{display:flex;align-items:center;gap:12px;min-height:28px;padding:0 6px 0 12px;letter-spacing:.18em;color:#c99a4e;text-shadow:0 1px 0 #000;white-space:nowrap}
.nvc-plate>b{font-weight:400;font-size:13px}
.nvc-plate>span{font-size:13px;flex:1;text-align:right;overflow:hidden;text-overflow:ellipsis;color:#f0c070}
.nvc-min .nvc-plate{cursor:pointer}
.nvc-min-k{flex:0 0 auto;height:26px;padding:0 14px;border:0;border-radius:4px;cursor:pointer;font-family:inherit;font-size:12px;letter-spacing:.14em;white-space:nowrap;
  background:linear-gradient(#262b26,#171a17);color:#f5c26a;box-shadow:0 3px 0 #060706,0 4px 4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-min-k:hover{color:#ffd88a}
.nvc-min-k:active{transform:translateY(2px);box-shadow:0 1px 0 #060706}
.nvc-min .nvc-min-k{background:linear-gradient(#ffc76a,#d8922a);color:#1b1206;font-weight:700;
  box-shadow:0 3px 0 #6a4410,0 4px 5px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.45)}
.nvc-min .nvc-min-k:hover{background:linear-gradient(#ffd88a,#e8a23a)}
.nvc-body{display:flex;gap:18px;margin-top:10px;padding:0 4px 0 7px}
.nvc-min .nvc-body{display:none}
.nvc-screen{flex:1 1 auto;min-width:0;height:214px;position:relative;box-sizing:border-box}

/* ── CRT ─────────────────────────────────────────────────────────────── */
.nvc-crt{border-radius:12px/15px;overflow:auto;padding:10px 14px;margin:7px;height:200px;
  background:radial-gradient(ellipse at 50% 45%,#0a1a0e 0%,#05100a 65%,#020805 100%);color:var(--nv-ph);
  box-shadow:inset 0 0 40px rgba(0,0,0,.9),inset 0 0 10px rgba(66,255,126,.08),0 0 0 2px #000,0 0 0 7px #121612,0 0 0 8px #2c332c;
  font-size:13px;line-height:18px;text-shadow:0 0 6px var(--nv-ph-glow)}
.nvc-crt::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.22) 0 1px,transparent 1px 3px),radial-gradient(ellipse at 28% 14%,rgba(220,255,220,.05),transparent 40%)}
.nvc-crt.red{background:radial-gradient(ellipse at 50% 45%,#1e0a06 0%,#120604 65%,#070202 100%);color:#ffb08a;text-shadow:0 0 6px rgba(255,90,60,.35);
  box-shadow:inset 0 0 40px rgba(0,0,0,.9),inset 0 0 12px rgba(255,90,60,.12),0 0 0 2px #000,0 0 0 7px #161212,0 0 0 8px #332c2c}
.nvc-crt::-webkit-scrollbar{width:6px}.nvc-crt::-webkit-scrollbar-thumb{background:rgba(124,240,164,.25);border-radius:3px}
.nvt-head{display:flex;justify-content:space-between;gap:10px;white-space:nowrap}
.nvt-inv{background:var(--nv-ph);color:#03140a;padding:0 6px;text-shadow:none}
.nvc-crt.red .nvt-inv{background:#ff8a6a;color:#1a0502}
.nvt-rule{border-top:1px dashed rgba(124,240,164,.35);margin:6px 0 4px}
.nvc-crt.red .nvt-rule{border-top-color:rgba(255,138,106,.4)}
.nvt-l{display:flex;justify-content:space-between;gap:12px}
.nvt-l>span:last-child{text-align:right}
.nvt-legs{display:flex;flex-direction:column}
.nvt-leg{display:grid;grid-template-columns:28px 1fr auto;gap:8px}
.nvt-leg.warn{color:#ff8a6a;text-shadow:0 0 6px rgba(255,90,60,.4)}
.nvt-dim{opacity:.6}.nvt-gold{color:#f0b454}.nvt-ok{color:#9bffba}
.nvt-bad{color:#ff6a6a;text-shadow:0 0 6px rgba(255,80,60,.4)}
.nvt-warn{color:#f0b454}
.nvt-click{cursor:pointer}.nvt-click:hover{background:rgba(124,240,164,.08)}
.nvt-cur{animation:nvBlink 1.1s steps(1,end) infinite}
@keyframes nvBlink{0%{opacity:1}50%{opacity:0}}
.nvc-empty{padding:18px 16px;color:#8a8a7a;font-size:12px;letter-spacing:.08em}

/* ── Split-flap board ─────────────────────────────────────────────────── */
.nvc-flapboard{display:flex;flex-direction:column;gap:6px;padding:2px 0}
.nvb-top{display:flex;align-items:center;gap:8px;white-space:nowrap;min-width:0}
.nvb-cargo{background:none;border:0;padding:0;cursor:pointer}
.nvb-cargo:hover .nvf i{box-shadow:inset 0 0 0 1px rgba(240,180,84,.5)}
.nvb-ico{flex:0 0 auto;width:30px;height:30px;padding:2px;border:0;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  background:#050705;box-shadow:inset 0 1px 3px #000,0 0 0 1px #2a302a}
.nvb-ico img{max-width:26px;max-height:26px;image-rendering:pixelated}
.nvb-ico:hover{box-shadow:inset 0 1px 3px #000,0 0 0 1px #f0b454}
.nvb-ico-none{color:#8a6a34;font-family:inherit;font-size:13px}
.nvb-net{flex:0 0 auto;height:26px;padding:0 10px;border:0;border-radius:4px;cursor:pointer;font-family:inherit;font-size:10px;letter-spacing:.1em;white-space:nowrap;
  background:radial-gradient(ellipse at 50% 40%,#ff7a5a,#c22a14 65%,#7a1408);color:#200402;
  box-shadow:0 3px 0 #3a0c04,0 4px 4px rgba(0,0,0,.5),0 0 14px rgba(232,64,42,.55),inset 0 1px 0 rgba(255,255,255,.3)}
.nvb-net:active{transform:translateY(2px)}
.nvb-net.on{background:linear-gradient(#262b26,#171a17);color:#e2d8c0;box-shadow:0 3px 0 #060706,0 4px 4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.1)}
.nvb-net.off{background:linear-gradient(#1a1414,#110c0c);color:#5a4040;cursor:default;box-shadow:inset 0 1px 2px #000,0 0 0 1px #2a1a1a}
.nvb-net.off:active{transform:none}
.nvb-held{font-size:11px;letter-spacing:.08em;color:#c8b48a;overflow:hidden;text-overflow:ellipsis}
.nvb-held .dim{opacity:.6}
.nvb-bar{font-size:10px;letter-spacing:.1em;color:#4ecdc4;border:1px solid #2a6a66;padding:1px 6px;border-radius:2px}
.nvb-find input{width:100%;box-sizing:border-box;background:#050805;border:1px solid #2c4a34;color:var(--nv-ph);font-family:inherit;font-size:13px;padding:4px 8px;border-radius:3px;outline:none}
.nvb-table{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;background:#070807;border-radius:5px;
  box-shadow:inset 0 2px 6px #000,0 0 0 1px #000,0 0 0 4px #121612;padding:4px 6px 6px}
.nvb-body{flex:1 1 auto;min-height:0;overflow-y:auto}
.nvb-body::-webkit-scrollbar{width:6px}.nvb-body::-webkit-scrollbar-thumb{background:#2a2e2a;border-radius:3px}
.nvb-row{display:grid;grid-template-columns:auto auto auto auto auto auto 1fr;column-gap:12px;align-items:center;padding:3px 4px;border-bottom:1px solid #0d100d}
.nvb-row.best{background:rgba(240,180,84,.08);box-shadow:inset 0 0 0 1px rgba(240,180,84,.45)}
.nvb-h{font-size:11px;letter-spacing:.12em;color:#c99a4e;padding:2px 4px 4px;border-bottom:0}
.nvb-port{cursor:pointer}
.nvb-act{justify-self:end}
.nvf{display:inline-flex;white-space:nowrap}
.nvf i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;width:12px;height:20px;margin-right:1px;border-radius:2px;
  font-size:13px;color:#f2eee0;
  background:linear-gradient(180deg,#1d1d1b 0%,#151513 49%,#030303 49%,#030303 51%,#131311 51%,#0f0f0d 100%);
  box-shadow:inset 0 0 0 1px #000,0 1px 0 rgba(255,255,255,.04)}
.nvf.gold i{color:#ffce4d;width:14px;height:24px;font-size:16px}
.nvf.grn i{color:#7cf0a4}.nvf.red i{color:#ff8a6a}.nvf.dim i{color:#8a8a7a}.nvf.pale i{color:#e2d8c0}
.nvf i.flip{animation:nvFlip .32s ease-out}
@keyframes nvFlip{0%{transform:scaleY(1)}40%{transform:scaleY(.05);filter:brightness(1.6)}100%{transform:scaleY(1)}}
.nvc-net .nvb-h{color:#a84a34}
.nvc-net .nvb-row.best{background:rgba(255,90,60,.08);box-shadow:inset 0 0 0 1px rgba(255,106,74,.45)}

/* ── Side: lamps and the key tray ─────────────────────────────────────── */
.nvc-side{flex:0 0 340px;display:flex;flex-direction:column;gap:10px}
.nvc-lamps{display:flex;align-items:center;gap:8px;padding:5px 10px;background:#070907;border-radius:4px;
  box-shadow:inset 0 2px 4px rgba(0,0,0,.8),inset 0 0 0 1px #1a1f1a,0 1px 0 rgba(255,255,255,.05)}
.nvc-lamp{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:9px;letter-spacing:.06em;color:#8c8a7c}
.nvc-lamp i{display:block;width:26px;height:12px;border-radius:2px;background:#1a1d1a;box-shadow:inset 0 0 0 1px rgba(0,0,0,.5),0 1px 0 rgba(255,255,255,.25)}
.nvc-lamp.on{color:#c8b48a}.nvc-lamp.on i{background:radial-gradient(#ffe2a8,#f0b454);box-shadow:inset 0 0 0 1px rgba(0,0,0,.4),0 0 8px rgba(240,180,84,.7)}
.nvc-lamp.at{color:#d8c8a8}.nvc-lamp.at i{background:radial-gradient(#ffc0b0,#e8402a);box-shadow:inset 0 0 0 1px rgba(0,0,0,.4),0 0 8px rgba(232,64,42,.7)}
.nvc-lamp.link i{background:radial-gradient(#d8ffe0,#5ad27a);box-shadow:inset 0 0 0 1px rgba(0,0,0,.4),0 0 8px rgba(90,210,122,.6)}
.nvc-sp{flex:1}
.nvc-deck{perspective:800px;perspective-origin:50% 0%}
.nvc-tray{transform:rotateX(14deg);transform-origin:50% 0%;background:linear-gradient(#141814,#080a08);border-radius:7px;padding:9px 9px 11px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),inset 0 0 0 1px #1f241f,0 8px 12px rgba(0,0,0,.5);display:flex;flex-direction:column;gap:8px}
.nvc-row{display:grid;gap:6px;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);align-items:center}
.nvc-row-qty{display:flex;gap:6px}
.nvc-row-qty .nvc-k{flex:1 1 0}
.nvc-row-qty .nvc-k.wide{flex:2 1 0}
.nvc-note{font-size:10px;letter-spacing:.1em;color:#a86a5a;text-align:center;line-height:1.3}
.nvc-qty{display:flex;align-items:center;gap:4px;height:32px;padding:0 6px;border-radius:4px;background:#050705;box-shadow:inset 0 1px 3px #000,0 0 0 1px #1f241f;flex:0 0 86px}
.nvc-qty span{font-size:10px;letter-spacing:.12em;color:#c99a4e}
.nvc-qty input{width:52px;background:transparent;border:0;outline:none;color:var(--nv-ph);font-family:inherit;font-size:13px;text-shadow:0 0 6px var(--nv-ph-glow)}
.nvc-k{position:relative;border:0;border-radius:4px;cursor:pointer;min-width:0;height:32px;padding:0 4px;
  font-family:'Share Tech Mono',ui-monospace,monospace;font-size:11px;letter-spacing:.06em;line-height:1.1;text-transform:uppercase;
  display:flex;align-items:center;justify-content:center;gap:4px;white-space:nowrap;overflow:hidden;
  background:linear-gradient(#262b26,#171a17);color:var(--nv-amb);box-shadow:0 4px 0 #060706,0 6px 5px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-k:active{transform:translateY(3px);box-shadow:0 1px 0 #060706,0 2px 3px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-k:focus-visible{outline:2px solid #f0b454;outline-offset:2px}
.nvc-k[disabled]{cursor:default;opacity:.38}
.nvc-k[disabled]:active{transform:none}
.nvc-k.sm{height:24px;font-size:10px;padding:0 10px;box-shadow:0 3px 0 #060706,0 4px 4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-k .led{position:absolute;left:5px;top:4px;width:5px;height:5px;border-radius:50%;background:rgba(0,0,0,.3)}
.nvc-k .led.on{background:#fff2c0;box-shadow:0 0 5px 1px rgba(255,220,140,.9)}
.nvc-k.cream{color:#e2d8c0}
.nvc-k.red{background:linear-gradient(#3a1a14,#24100c);color:#ff8a6a;box-shadow:0 4px 0 #0c0403,0 6px 5px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-k.org,.nvc-k.sel{background:linear-gradient(#f0b454,#b97f2a);color:#1a0f02;box-shadow:0 4px 0 #4a3010,0 6px 5px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.35)}
.nvc-k.sel{box-shadow:0 4px 0 #4a3010,0 6px 5px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.35),0 0 14px rgba(240,180,84,.45)}
.nvc-k.sm.org{box-shadow:0 3px 0 #4a3010,0 4px 4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.35)}
.nvc-k.grn{background:linear-gradient(#1d3a26,#10241a);color:#42ff7e;box-shadow:0 4px 0 #04100a,0 6px 5px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.1)}
.nvc-k.grn.on{background:linear-gradient(#46e07a,#1f9a48);color:#021006;box-shadow:0 4px 0 #0a3a1a,0 6px 5px rgba(0,0,0,.55),0 0 16px 2px rgba(70,255,125,.5)}
.nvc-k.sm.grn{box-shadow:0 3px 0 #04100a,0 4px 4px rgba(0,0,0,.5)}

/* ── The mini select on a world ───────────────────────────────────────── */
.nvc-pop{--nv-ph:#7cf0a4;--nv-ph-glow:rgba(66,255,126,.35);--nv-amb:#f5c26a;position:absolute;z-index:6;width:262px;box-sizing:border-box;padding:7px;border-radius:7px;font-family:'Share Tech Mono',ui-monospace,monospace;
  background:linear-gradient(180deg,#1b201b,#0a0c0a);box-shadow:0 0 0 1px #000,0 10px 24px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 0 1px #262c26}
.nvp-scr{border-radius:6px/8px;padding:8px 10px;background:radial-gradient(ellipse at 50% 40%,#0a1a0e,#030a05);color:#7cf0a4;font-size:12px;line-height:17px;
  box-shadow:inset 0 0 18px rgba(0,0,0,.9),0 0 0 2px #000,0 0 0 4px #121612;text-shadow:0 0 6px rgba(66,255,126,.3)}
.nvc-pop.net .nvt-inv{background:#ff8a6a;color:#1a0502}
.nvc-pop.net .nvp-scr{color:#ffb08a;text-shadow:0 0 6px rgba(255,90,60,.3)}
.nvp-top{display:flex;justify-content:space-between;gap:8px;margin-bottom:4px;white-space:nowrap}
.nvp-l{display:flex;justify-content:space-between;gap:8px}
.nvp-l b{font-weight:400;color:#f0b454}
.nvp-rule{border-top:1px dashed rgba(124,240,164,.35);margin:5px 0}
.nvp-keys{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:8px}
.nvp-keys .nvc-k{height:28px;font-size:10px}
.nvp-keys .nvc-k:last-child:nth-child(odd){grid-column:1 / -1}

/* Narrow centre column (set by nav-console.js under 1050px). */
.nvc-narrow .nvc-side{flex-basis:250px}
.nvc-narrow .nvc-body{gap:12px}
.nvc-narrow .nvf i{width:10px;height:17px;font-size:11px}
.nvc-narrow .nvf.gold i{width:12px;height:20px;font-size:13px}
.nvc-narrow .nvb-row{column-gap:8px;grid-template-columns:auto auto auto auto 1fr}
.nvc-narrow .nvb-held .dim{display:none}
.nvc-narrow .nvc-k{font-size:10px;letter-spacing:.03em}
.nvc-narrow .nvc-lamps{gap:5px;padding:5px 7px}
.nvc-narrow .nvc-lamp i{width:22px}
.nvc-narrow .nvc-qty{flex-basis:76px}
.nvc-narrow .nvc-qty input{width:44px}

/* Short screens: the console is the first thing to give way to the map. */
@media (max-height:820px){ .nvc-screen{height:176px} .nvc-crt{height:162px} }

/* ── HANGAR (1.11.9.111) ─────────────────────────────────────────────────
   A dry dock, not a form: back wall ribs, a row of bay lights, a perspective
   deck, docking clamps and the hull on its pad, drawn in CSS around the
   fleet's own pixel sprite. A hull you do not own is shown as a cold cyan
   hologram with PREVIEW on it. */
#gHangar{flex:1 1 auto;min-height:0;overflow-y:auto;padding:8px 8px 14px;display:flex;flex-direction:column;gap:12px;background:#050605;
  font-family:'Share Tech Mono',ui-monospace,monospace;--nv-ph:#7cf0a4;--nv-ph-glow:rgba(66,255,126,.35);--nv-amb:#f5c26a}
.nvh-plate{display:flex;align-items:center;gap:12px;padding:8px 14px;border-radius:7px;letter-spacing:.2em;color:#8a6a34;white-space:nowrap;
  background:linear-gradient(180deg,#1b201b,#0a0c0a);box-shadow:0 0 0 1px #000,inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 0 1px #262c26}
.nvh-plate b{font-weight:400;font-size:11px;color:#c8a050}
.nvh-plate span{flex:1;font-size:11px;overflow:hidden;text-overflow:ellipsis}
.nvh-plate .nvc-k{flex:0 0 auto}
.nvh-top{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:12px}
.nvh-bay{position:relative;height:320px;border-radius:10px;overflow:hidden;
  background:linear-gradient(180deg,#0a0e0b 0%,#0d120f 45%,#060807 58%,#030403 100%);
  box-shadow:inset 0 0 50px rgba(0,0,0,.9),0 0 0 2px #000,0 0 0 7px #121612,0 0 0 8px #2c332c;margin:8px}
.nvh-wall{position:absolute;left:0;right:0;top:0;height:58%;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.035) 0 2px,transparent 2px 46px),
             repeating-linear-gradient(90deg,transparent 0 44px,rgba(0,0,0,.5) 44px 46px),
             linear-gradient(180deg,transparent 70%,rgba(0,0,0,.6))}
.nvh-wall::after{content:"";position:absolute;left:0;right:0;bottom:22%;height:3px;background:#1f2a22;box-shadow:0 1px 0 rgba(255,255,255,.05)}
.nvh-stencil{position:absolute;right:22px;top:58px;font-family:'Doto','Share Tech Mono',monospace;font-weight:700;font-size:44px;letter-spacing:.12em;color:rgba(240,180,84,.09)}
.nvh-lights{position:absolute;left:6%;right:6%;top:0;display:flex;justify-content:space-between;z-index:2}
.nvh-lights i{position:relative;width:54px;height:6px;border-radius:0 0 4px 4px;background:#fff1c8;box-shadow:0 0 10px 2px rgba(255,220,150,.7)}
.nvh-lights i::after{content:"";position:absolute;left:-40px;right:-40px;top:6px;height:240px;pointer-events:none;
  background:radial-gradient(ellipse at 50% 0%,rgba(255,225,160,.12),transparent 65%)}
.nvh-floor{position:absolute;left:-20%;right:-20%;bottom:0;height:44%;transform:perspective(380px) rotateX(58deg);transform-origin:50% 0%;
  background:linear-gradient(rgba(124,240,164,.10) 1px,transparent 1px) 0 0/48px 48px,linear-gradient(90deg,rgba(124,240,164,.10) 1px,transparent 1px) 0 0/48px 48px,
             linear-gradient(180deg,#0b100c,#050605)}
.nvh-pad{position:absolute;left:50%;bottom:9%;width:56%;height:46px;transform:translateX(-50%);border-radius:50%;
  background:radial-gradient(ellipse,rgba(240,180,84,.22),transparent 70%);box-shadow:0 0 0 2px rgba(240,180,84,.35),0 0 30px rgba(240,180,84,.25)}
.nvh-clamp{position:absolute;top:46%;width:13%;height:16px;background:repeating-linear-gradient(135deg,#e8b81e 0 8px,#111 8px 16px);box-shadow:0 2px 6px #000}
.nvh-clamp::after{content:"";position:absolute;top:-10px;width:18px;height:36px;background:#2a302a;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 2px 6px #000}
.nvh-clamp.l{left:0}.nvh-clamp.l::after{right:-12px}
.nvh-clamp.r{right:0}.nvh-clamp.r::after{left:-12px}
.nvh-ship{position:absolute;left:50%;top:50%;width:min(64%,640px);transform:translate(-50%,-58%);animation:nvhBob 5s ease-in-out infinite;z-index:1}
.nvh-ship img{display:block;width:100%;height:auto;image-rendering:pixelated;filter:drop-shadow(0 14px 10px rgba(0,0,0,.8))}
.nvh-burn{position:absolute;left:-6%;top:22%;width:16%;height:56%;border-radius:50%;pointer-events:none;
  background:radial-gradient(ellipse at 100% 50%,rgba(255,200,120,.55),rgba(255,120,40,.15) 45%,transparent 70%);animation:nvhBurn .18s steps(2,end) infinite alternate}
.nvh-bay.preview .nvh-ship img{filter:grayscale(1) sepia(1) hue-rotate(130deg) saturate(2.4) brightness(1.15) drop-shadow(0 0 10px rgba(80,230,255,.55));opacity:.82}
.nvh-bay.preview .nvh-ship::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,rgba(80,230,255,.10) 0 1px,transparent 1px 3px);pointer-events:none}
.nvh-bay.preview .nvh-burn{display:none}
.nvh-bay.preview .nvh-pad{background:radial-gradient(ellipse,rgba(80,230,255,.22),transparent 70%);box-shadow:0 0 0 2px rgba(80,230,255,.35),0 0 30px rgba(80,230,255,.25)}
.nvh-sweep{position:absolute;left:0;right:0;height:2px;top:0;background:linear-gradient(90deg,transparent,rgba(124,240,164,.5),transparent);box-shadow:0 0 12px rgba(124,240,164,.4);animation:nvhSweep 6s linear infinite;z-index:2}
.nvh-tag{position:absolute;left:16px;top:18px;display:flex;gap:10px;align-items:center;z-index:3;font-size:14px}
.nvh-ok{color:#7cf0a4;text-shadow:0 0 6px rgba(66,255,126,.5);font-size:11px;letter-spacing:.12em}
.nvh-pv{color:#7fe8ff;text-shadow:0 0 6px rgba(80,230,255,.6);font-size:11px;letter-spacing:.12em;border:1px solid rgba(80,230,255,.5);padding:0 6px}
.nvh-desc{position:absolute;left:16px;right:16px;bottom:22px;z-index:3;font-size:12px;color:#c8b48a;text-shadow:0 1px 2px #000}
.nvh-hazard{position:absolute;left:0;right:0;bottom:0;height:10px;background:repeating-linear-gradient(135deg,#e8b81e 0 10px,#111 10px 20px);opacity:.85;z-index:3}
@keyframes nvhBob{0%,100%{transform:translate(-50%,-58%)}50%{transform:translate(-50%,-62%)}}
@keyframes nvhBurn{from{opacity:.75}to{opacity:1}}
@keyframes nvhSweep{0%{top:0;opacity:0}8%{opacity:1}92%{opacity:1}100%{top:100%;opacity:0}}
.nvh-read.nvc-crt{height:auto;min-height:300px;margin:8px}
.nvh-seg{display:flex;gap:2px;margin:3px 0 8px}
.nvh-seg i{flex:1;height:10px;background:rgba(124,240,164,.08)}
.nvh-seg i.on{background:#7cf0a4;box-shadow:0 0 5px rgba(124,240,164,.7)}
.nvh-buy{width:100%;height:38px;margin:4px 0 6px;font-size:12px}
.nvc-k.hang{background:linear-gradient(#e0503a,#9a2a18);color:#fff0e8;box-shadow:0 4px 0 #3a0c04,0 6px 5px rgba(0,0,0,.55),0 0 14px rgba(232,64,42,.5)}
/* One row for every hull (1.11.9.114). Seven hulls on a 4-wide grid put the three
   heavy ones on a second row below the fold, where nobody saw them. */
.nvh-rack{display:grid;grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:6px;padding:0 8px}
.nvh-card{display:flex;flex-direction:column;gap:4px;align-items:stretch;padding:6px;border:0;border-radius:7px;cursor:pointer;text-align:left;font-family:inherit;
  background:linear-gradient(180deg,#1b201b,#0a0c0a);box-shadow:0 0 0 1px #000,inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 0 1px #262c26,0 4px 10px rgba(0,0,0,.5)}
.nvh-card:hover{box-shadow:0 0 0 1px #000,inset 0 0 0 1px #5a4a2a,0 4px 10px rgba(0,0,0,.5)}
.nvh-card.on{box-shadow:0 0 0 2px #f0b454,0 0 16px rgba(240,180,84,.35),inset 0 1px 0 rgba(255,255,255,.07)}
.nvh-card-art{height:56px;border-radius:5px;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 70%,#0e1610,#030503);box-shadow:inset 0 0 12px #000}
.nvh-card-art img{max-width:88%;max-height:52px;image-rendering:pixelated}
.nvh-card-n{font-size:10px;letter-spacing:.04em;color:#e2d8c0;line-height:1.25}
.nvh-card-s{font-size:9px;color:#8a9a8a;letter-spacing:.02em}
.nvh-card-p{font-size:10px;color:#f0b454;margin-top:auto}
.nvh-card.own .nvh-card-p{color:#7cf0a4}
.nvh-card.own .nvh-card-n::after{content:" \25CF";color:#7cf0a4;text-shadow:0 0 6px #42ff7e}
.nvh-sheds{margin:0 8px;border-radius:9px;padding:10px 14px 14px;background:linear-gradient(180deg,#1b201b,#0a0c0a);
  box-shadow:0 0 0 1px #000,inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 0 1px #262c26}
.nvh-sec{display:flex;align-items:baseline;gap:12px;margin-bottom:8px;letter-spacing:.18em}
.nvh-sec b{font-weight:400;font-size:11px;color:#c8a050}
.nvh-sec span{font-size:9px;color:#6a6a5a;letter-spacing:.1em}
.nvh-shed-body{padding:10px 12px;border-radius:6px;background:#040805;box-shadow:inset 0 0 14px #000,0 0 0 2px #000,0 0 0 4px #121612;font-size:13px;color:#b8f0c8}
.nvh-shed-body input,.nvh-shed-body select{background:#050805!important;border:1px solid #2c4a34!important;color:#7cf0a4!important;font-family:inherit!important}
@media (max-width:1500px){ .nvh-top{grid-template-columns:minmax(0,1fr) 250px} .nvh-bay{height:270px} }
.nvh-shed-body input[type=range]{accent-color:#7cf0a4}

/* NO LANES (1.11.9.112). The lane legend and the Lane Shares tab go with them,
   on phones as well: the lanes are gone everywhere, not just on the console. */
#gLegend{display:none!important}
.galaxy-stab[data-gstab="contracts"]{display:none!important}

/* ── Readable console (1.11.9.120) ────────────────────────────────────────
   Players could not read the open console: 13px phosphor, 11px keys, 9px lamp
   labels. Text and keys inside the open console go up, and the screen grows
   with them so a flight plan still shows about ten legs before it scrolls.
   The price board keeps its width: under the narrow layout the key tray stays
   close to its old width and only its lettering grows, because the board's
   last column (the PLOT key) is the first thing a wider tray pushes off. */
.nvc-screen{height:254px}
.nvc-crt{height:240px;font-size:16px;line-height:22px}
.nvt-leg{grid-template-columns:34px 1fr auto;gap:10px}
.nvc-empty{font-size:14px}
.nvb-find input{font-size:15px}
.nvc-lamp{font-size:11px}
.nvc-lamp i{width:30px;height:14px}
.nvc-k{height:38px;font-size:13px}
.nvc-k.sm{height:28px;font-size:12px}
.nvc-k .led{width:6px;height:6px}
.nvc-qty{height:38px}
.nvc-qty span{font-size:12px}
.nvc-qty input{font-size:16px}
.nvc-note{font-size:12px}
.nvc-pop{width:290px}
.nvp-scr{font-size:14px;line-height:20px}
.nvp-keys .nvc-k{height:32px;font-size:12px}
/* Wide centre column: room for a bigger tray and bigger flaps. */
.nvc-side{flex-basis:372px}
.nvf i{width:14px;height:24px;font-size:15px}
.nvf.gold i{width:16px;height:27px;font-size:18px}
.nvb-h{font-size:13px}
.nvb-held{font-size:13px}
.nvc-qty{flex-basis:96px}
.nvc-qty input{width:58px}
/* Narrow centre column (most desktops): the tray and the flaps keep their old
   size, the board has no width to spare. Key lettering still grows, and a long
   label (ALL PORTS) wraps onto two lines instead of being cut. */
.nvc-k{white-space:normal;text-align:center;line-height:1.05}
.nvc-narrow .nvc-side{flex-basis:250px}
.nvc-narrow .nvc-k{font-size:12px;letter-spacing:.01em;padding:0 3px}
.nvc-narrow .nvc-lamp{font-size:10px}
.nvc-narrow .nvc-lamp i{width:22px}
.nvc-narrow .nvf i{width:10px;height:17px;font-size:11px}
.nvc-narrow .nvf.gold i{width:12px;height:20px;font-size:13px}
.nvc-narrow .nvb-h{font-size:11px}
.nvc-narrow .nvb-held{font-size:11px}
.nvc-narrow .nvc-qty{flex-basis:76px}
.nvc-narrow .nvc-qty input{width:44px}
@media (max-height:820px){ .nvc-screen{height:206px} .nvc-crt{height:192px} }

/* ── Departure LED board (1.11.9.120) ─────────────────────────────────────
   Replaces the per-character split-flap rows (option C of the board mockups).
   Amber dot-matrix on black, alternate rows banded, the best row lit. Each row
   is the port in Doto with a plain line under it saying what the number means,
   then price, then the money for this quantity, then the key. The cargo picker
   above keeps its flaps. */
.nvb-table.nvl{background:#050403;padding:0;overflow:hidden;box-shadow:inset 0 2px 6px #000,0 0 0 1px #000,0 0 0 4px #121612,inset 0 0 0 1px #2a1f10}
.nvl-h,.nvl-row{display:grid;grid-template-columns:minmax(0,1fr) 92px 96px 58px;column-gap:12px;align-items:center}
.nvl-h{padding:6px 12px;background:#1a1206;color:#ffb54a;font-size:12px;letter-spacing:.16em}
.nvl-h>span:nth-child(2),.nvl-h>span:nth-child(3){text-align:right}
.nvl-row{padding:5px 12px;background:#050403}
.nvl-row.alt{background:#0d0a05}
.nvl-row.best{background:#2a1c08;box-shadow:inset 3px 0 0 #ffb54a}
.nvl-port{display:flex;flex-direction:column;gap:1px;min-width:0;cursor:pointer}
.nvl-port b{font-family:'Doto','Share Tech Mono',ui-monospace,monospace;font-weight:700;font-size:19px;letter-spacing:.04em;line-height:1.05;color:#ffb54a;
  text-shadow:0 0 8px rgba(255,170,60,.45);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nvl-row.best .nvl-port b{color:#ffe0a0}
.nvl-port:hover b{color:#ffd88a}
.nvl-sub{font-style:normal;font-size:12px;letter-spacing:.08em;color:#b07a3a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nvl-sub.hi{color:#ffd88a}
.nvl-sub.bad{color:#d0705a}
.nvl-x{color:#7a5a30}
.nvl-price,.nvl-gross{font-family:'Doto','Share Tech Mono',ui-monospace,monospace;font-weight:700;text-align:right;white-space:nowrap}
.nvl-price{font-size:22px;color:#ffcf7a;text-shadow:0 0 8px rgba(255,190,90,.5)}
.nvl-gross{font-size:19px;color:#8dffb0;text-shadow:0 0 8px rgba(80,255,140,.4)}
.nvl-gross.neg{color:#ff8a6a;text-shadow:0 0 8px rgba(255,90,60,.4)}
.nvl .tick{animation:nvlTick .9s ease-out}
@keyframes nvlTick{0%{filter:brightness(2.2)}100%{filter:none}}
.nvl-row .nvc-k.sm{height:30px;width:100%;padding:0 4px}
/* Stribor Net book: the same board in the Net's red. */
.nvc-net .nvb-table.nvl{box-shadow:inset 0 2px 6px #000,0 0 0 1px #000,0 0 0 4px #161212,inset 0 0 0 1px #3a1610}
.nvc-net .nvl-h{background:#2a0c06;color:#ff8a6a}
.nvc-net .nvl-row.best{background:#2e0e08;box-shadow:inset 3px 0 0 #ff6a4a}
.nvc-net .nvl-port b{color:#ff9a6a;text-shadow:0 0 8px rgba(255,90,60,.45)}
.nvc-net .nvl-row.best .nvl-port b{color:#ffc0a0}
/* Narrow centre column: tighter columns, smaller numbers. */
.nvc-narrow .nvl-h,.nvc-narrow .nvl-row{grid-template-columns:minmax(0,1fr) 66px 92px 50px;column-gap:8px}
.nvl-h>span{white-space:nowrap}
.nvc-narrow .nvl-h{font-size:11px;letter-spacing:.06em}
.nvc-narrow .nvl-h,.nvc-narrow .nvl-row{padding-left:9px;padding-right:9px}
.nvc-narrow .nvl-port b{font-size:16px}
.nvc-narrow .nvl-price{font-size:18px}
.nvc-narrow .nvl-gross{font-size:16px}
.nvc-narrow .nvl-sub{font-size:11px}
@media (prefers-reduced-motion:reduce){ .nvl .tick{animation:none} }

/* ══ PHONE (1.11.9.122) ═════════════════════════════════════════════════════
   Mobile shipping is the console alone. The Sector Map was never usable at
   390px (labels collide, every world is a fingertip-sized hit target, and a
   drag fights the page), so the map pane is not shown; galaxy.js still loads
   its data, which the console reads, and stops animating it (onGalaxyOpen).
   Scoped to body.fm-nav, which exists only once the console is built: if the
   console fails, the phone keeps the map and the old tabs.

   Layout, top to bottom: the plate, the keys (mode, side, quantity), then the
   screen. Keys first, because the board can run to dozens of ports and the
   controls should not end up under them. The console scrolls as one column. */
body.fm-mobile.fm-nav #gMapPane{display:none!important}
body.fm-mobile #gNavConsole{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;margin:6px;padding:8px 8px 12px;border-radius:8px}
body.fm-mobile #gNavConsole.nvc-min .nvc-body{display:flex}
body.fm-mobile #nvcMinK{display:none}
body.fm-mobile .nvc-plate{padding:0 4px 0 8px;gap:8px}
body.fm-mobile .nvc-plate>b,body.fm-mobile .nvc-plate>span{font-size:11px;letter-spacing:.12em}
body.fm-mobile .nvc-body{flex-direction:column;gap:10px;margin-top:8px;padding:0}
body.fm-mobile .nvc-side,body.fm-mobile .nvc-narrow .nvc-side{flex:0 0 auto;order:-1;gap:8px}
body.fm-mobile .nvc-lamps{display:none}
body.fm-mobile .nvc-deck{perspective:none}
body.fm-mobile .nvc-tray{transform:none;padding:7px}
body.fm-mobile .nvc-row{gap:5px}
body.fm-mobile .nvc-row+.nvc-row{margin-top:6px}
body.fm-mobile .nvc-k,body.fm-mobile .nvc-narrow .nvc-k{height:42px;font-size:11px;letter-spacing:.04em;padding:0 3px}
body.fm-mobile .nvc-qty,body.fm-mobile .nvc-narrow .nvc-qty{flex-basis:auto;height:42px}
body.fm-mobile .nvc-qty input,body.fm-mobile .nvc-narrow .nvc-qty input{width:64px;font-size:16px}
body.fm-mobile .nvc-screen{height:auto;min-height:260px}
body.fm-mobile .nvc-crt{height:auto;min-height:240px;margin:6px;font-size:13px;line-height:19px}
body.fm-mobile .nvb-top{flex-wrap:wrap;row-gap:6px;padding:4px 2px 8px}
body.fm-mobile .nvb-top .nvc-k.sm{width:42px;height:38px;flex:0 0 auto}
body.fm-mobile .nvb-held{flex:1 0 100%;font-size:12px}
body.fm-mobile .nvc-narrow .nvl-h,body.fm-mobile .nvc-narrow .nvl-row{grid-template-columns:minmax(0,1fr) 60px 66px 58px;column-gap:6px;padding-left:7px;padding-right:7px}
body.fm-mobile .nvl-row{min-height:50px}
body.fm-mobile .nvl-row .nvc-k.sm{height:38px}
body.fm-mobile .nvl-port b{font-size:15px}
body.fm-mobile .nvb-find input{font-size:16px;height:40px}
/* The hangar replaces the console while it is open (nav-console.js hides the
   map pane, which the console follows). */
body.fm-mobile #gHangar{padding:6px 6px 14px}
/* The strip key that used to read MAP opens the console: labelled from the
   attribute mobile.js sets, so its own text and data-i18n stay untouched. */
body.fm-mobile.fm-nav .galaxy-stab[data-gstab="map"][data-fm-label]{font-size:0!important}
body.fm-mobile.fm-nav .galaxy-stab[data-gstab="map"][data-fm-label]::after{content:attr(data-fm-label);font-size:.7rem;letter-spacing:.14em}
