/* ==========================================================================
   AYE AYE, CAPTAIN — interface
   A brass-and-parchment instrument panel sitting over a dark sea.
   ========================================================================== */

:root{
  --ink:        #05090e;
  --ink-2:      #0a1019;
  --panel:      rgba(9,15,23,.86);
  --panel-lite: rgba(18,28,40,.78);
  --hair:       rgba(201,162,39,.26);
  --hair-soft:  rgba(160,190,215,.12);
  --brass:      #c9a227;
  --brass-lite: #f0d27a;
  --parch:      #e9e0ca;
  --parch-dim:  #9fb0c0;
  --muted:      #6b8098;
  --scarlet:    #ef4b42;
  --scarlet-dk: #7a2620;
  --cobalt:     #3ea9f2;
  --cobalt-dk:  #1b4c73;
  --good:       #6fdc8c;
  --warn:       #ffc44d;
  --bad:        #ff6a52;

  --ff-display: "Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,ui-serif,serif;
  --ff-ui:      ui-sans-serif,-apple-system,"Segoe UI",Inter,Roboto,system-ui,sans-serif;
  --ff-mono:    ui-monospace,"SF Mono",Menlo,Consolas,"Roboto Mono",monospace;

  --r:   10px;
  --sh:  0 2px 4px rgba(0,0,0,.5), 0 12px 32px rgba(0,0,0,.45);
  --edge: inset 0 1px 0 rgba(255,255,255,.07), inset 0 -1px 0 rgba(0,0,0,.45);
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;background:var(--ink)}
body{
  font-family:var(--ff-ui);
  color:var(--parch);
  -webkit-font-smoothing:antialiased;
  user-select:none;
  cursor:crosshair;
}
canvas#gl,canvas#hud{position:fixed;inset:0;width:100%;height:100%;display:block}
canvas#hud{pointer-events:none}

/* --- shared panel look --------------------------------------------------- */
.panel,#admiralty,#fleetkit,#status,#mapwrap,#helpcard,.dead-inner,.end-inner,.sb-col,.card{
  background:
    linear-gradient(180deg, rgba(28,42,58,.30), rgba(6,11,17,.16)),
    var(--panel);
  border:1px solid var(--hair);
  border-radius:var(--r);
  box-shadow:var(--sh),var(--edge);
  backdrop-filter:blur(9px) saturate(1.15);
  -webkit-backdrop-filter:blur(9px) saturate(1.15);
}

/* ==========================================================================
   TOP BAR
   ========================================================================== */
#topbar{
  position:fixed;top:0;left:0;right:0;height:74px;
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:26px;
  padding:9px 22px 0;
  pointer-events:none;
  background:linear-gradient(180deg, rgba(4,8,13,.86), rgba(4,8,13,0));
  z-index:20;
}
.fleet{display:flex;flex-direction:column;gap:5px}
.fleet.cobalt{align-items:flex-end}
.fleet-name{
  font-family:var(--ff-display);font-size:12.5px;letter-spacing:.24em;
  color:var(--parch-dim);text-transform:uppercase;
}
.fleet.scarlet .fleet-name{color:#f0938c}
.fleet.cobalt  .fleet-name{color:#96cdf5}
.colours{
  position:relative;width:min(34vw,420px);height:15px;
  background:rgba(0,0,0,.55);border:1px solid var(--hair-soft);border-radius:3px;
  box-shadow:var(--edge);overflow:hidden;
}
.colours .fill{
  position:absolute;inset:0;transform-origin:left;transition:transform .35s cubic-bezier(.2,.8,.2,1);
}
.fleet.cobalt .colours .fill{transform-origin:right}
.fleet.scarlet .fill{background:linear-gradient(90deg,var(--scarlet-dk),var(--scarlet))}
.fleet.cobalt  .fill{background:linear-gradient(270deg,var(--cobalt-dk),var(--cobalt))}
.colours .val{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:var(--ff-mono);font-size:10.5px;font-weight:700;letter-spacing:.10em;
  color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.9);
}
.fleet.laststand .colours{animation:pulseRed 1.1s ease-in-out infinite}
@keyframes pulseRed{0%,100%{box-shadow:var(--edge)}50%{box-shadow:0 0 14px rgba(255,90,70,.75)}}

#centre{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:190px}
#phase{
  font-family:var(--ff-display);font-size:10.5px;letter-spacing:.34em;
  color:var(--brass);text-transform:uppercase;
}
#clock{
  font-family:var(--ff-mono);font-size:29px;font-weight:600;letter-spacing:.04em;
  line-height:1;color:var(--parch);text-shadow:0 2px 10px rgba(0,0,0,.8);
  font-variant-numeric:tabular-nums;
}
#clock.urgent{color:var(--bad);animation:tick 1s steps(1) infinite}
@keyframes tick{50%{opacity:.55}}
#bullion{
  font-family:var(--ff-mono);font-size:9.5px;letter-spacing:.12em;color:var(--muted);
  margin-top:4px;white-space:nowrap;
}
#bullion:empty{display:none}
#bullion.soon{color:var(--brass-lite)}
#bullion.here{color:var(--brass-lite);animation:pulseBrass 1.1s ease-in-out infinite}
@keyframes pulseBrass{50%{opacity:.45}}

#pips{display:flex;gap:5px;margin-top:4px}
.pip{
  width:20px;height:7px;border-radius:2px;background:rgba(255,255,255,.13);
  border:1px solid rgba(255,255,255,.10);transition:background .3s,box-shadow .3s;
}
.pip.gate{border-radius:4px;width:15px;border-color:var(--hair)}
.pip.scarlet{background:var(--scarlet);box-shadow:0 0 8px rgba(239,75,66,.6)}
.pip.cobalt {background:var(--cobalt);box-shadow:0 0 8px  rgba(62,169,242,.6)}
.pip.hot{animation:hot .7s ease-in-out infinite}
@keyframes hot{50%{transform:scaleY(1.7)}}

/* ==========================================================================
   FEED + OBJECTIVE
   ========================================================================== */
#feed{
  position:fixed;top:86px;right:18px;width:310px;list-style:none;
  display:flex;flex-direction:column;gap:4px;z-index:15;pointer-events:none;
}
#feed li{
  font-size:11.5px;line-height:1.35;padding:5px 9px;border-radius:5px;
  background:rgba(6,11,17,.72);border-left:2px solid var(--muted);
  color:var(--parch-dim);animation:slideIn .28s cubic-bezier(.2,.8,.2,1);
  backdrop-filter:blur(5px);
}
@keyframes slideIn{from{opacity:0;transform:translateX(16px)}}
#feed li.scarlet{border-left-color:var(--scarlet);color:#ffd2ce}
#feed li.cobalt {border-left-color:var(--cobalt); color:#cfe8fb}
#feed li.k-capture,#feed li.k-fort{font-weight:700;letter-spacing:.05em}
#feed li.k-phase{
  border-left-color:var(--brass);color:var(--brass-lite);
  font-family:var(--ff-display);letter-spacing:.14em;text-transform:uppercase;
}
#feed li.k-convoy{border-left-color:var(--brass);color:var(--brass-lite)}

#objective{
  position:fixed;top:92px;left:50%;transform:translateX(-50%);
  font-family:var(--ff-display);font-size:13px;letter-spacing:.20em;
  color:var(--brass-lite);text-shadow:0 2px 10px #000;
  width:clamp(240px,calc(100vw - 620px),560px);
  opacity:0;transition:opacity .4s;pointer-events:none;z-index:16;text-align:center;
}
#objective.show{opacity:1}

/* Sits in the clear band between the Admiralty and the killfeed, so it never
   covers either of them. */
#musterhint{
  position:fixed;top:124px;left:330px;right:346px;margin:0 auto;
  max-width:620px;text-align:center;z-index:16;pointer-events:none;
  padding:10px 20px;border-radius:var(--r);
  background:rgba(6,11,17,.82);border:1px solid var(--hair);box-shadow:var(--sh);
  backdrop-filter:blur(5px);
}
#musterhint b{
  display:block;font-family:var(--ff-display);font-size:13px;letter-spacing:.2em;
  color:var(--brass-lite);margin-bottom:5px;
}
#musterhint span{font-size:11.5px;line-height:1.55;color:var(--parch-dim)}
#musterhint em{color:var(--parch);font-style:normal}

/* ==========================================================================
   ADMIRALTY (the captain's dock)
   ========================================================================== */
#admiralty{
  position:fixed;left:16px;top:88px;width:296px;padding:12px;
  display:flex;flex-direction:column;gap:9px;z-index:18;
}
.ad-head{display:flex;align-items:baseline;justify-content:space-between}
.rank{font-family:var(--ff-display);font-size:12px;letter-spacing:.26em;color:var(--brass)}
.purse{display:flex;align-items:baseline;gap:5px;font-family:var(--ff-mono)}
.purse i{color:var(--brass-lite);font-style:normal;font-size:13px}
.purse b{font-size:17px;color:var(--brass-lite);font-variant-numeric:tabular-nums}
.purse small{font-size:10px;color:var(--good)}
.ad-hint{font-size:9.5px;color:var(--muted);letter-spacing:.04em}
.ad-sep{
  font-family:var(--ff-display);font-size:9.5px;letter-spacing:.26em;color:var(--muted);
  border-top:1px solid var(--hair);padding-top:8px;margin-top:2px;
}

#upgrades{display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px}
.upg{
  position:relative;padding:6px 5px 20px;border-radius:7px;cursor:pointer;
  background:linear-gradient(180deg,rgba(38,54,72,.55),rgba(10,16,24,.55));
  border:1px solid rgba(160,190,215,.14);
  transition:transform .12s,border-color .18s,box-shadow .18s;
  text-align:center;overflow:hidden;
}
.upg:hover{transform:translateY(-2px);border-color:var(--brass);box-shadow:0 5px 16px rgba(0,0,0,.55)}
.upg.max{border-color:rgba(201,162,39,.55)}
.upg.poor{opacity:.44;cursor:not-allowed}
.upg .ic{font-size:16px;line-height:1.1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.7))}
.upg .nm{font-size:8.5px;letter-spacing:.055em;color:var(--parch-dim);line-height:1.2;margin-top:3px;height:20px}
.upg .cost{
  position:absolute;left:0;right:0;bottom:3px;font-family:var(--ff-mono);font-size:9.5px;
  color:var(--brass-lite);
}
.upg.max .cost{color:var(--good)}
.upg .lv{position:absolute;top:4px;right:4px;display:flex;gap:2px}
.upg .lv i{width:4px;height:4px;border-radius:50%;background:rgba(255,255,255,.18)}
.upg .lv i.on{background:var(--brass-lite);box-shadow:0 0 5px var(--brass)}

#orders{display:grid;grid-template-columns:repeat(5,1fr);gap:5px}
.ord{
  position:relative;aspect-ratio:1;border-radius:7px;cursor:pointer;overflow:hidden;
  background:linear-gradient(180deg,rgba(44,62,82,.6),rgba(10,16,24,.6));
  border:1px solid rgba(160,190,215,.16);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  transition:transform .12s,border-color .18s;
}
.ord:hover{transform:translateY(-2px);border-color:var(--brass)}
.ord.armed{border-color:var(--brass-lite);box-shadow:0 0 0 1px var(--brass),0 0 16px rgba(240,210,122,.4)}
.ord.cool,.ord.poor{opacity:.42;cursor:not-allowed}
.ord .ic{font-size:15px}
.ord .c{font-family:var(--ff-mono);font-size:8.5px;color:var(--brass-lite)}
.ord .sweep{
  position:absolute;inset:0;background:rgba(0,0,0,.66);
  transform-origin:bottom;transition:transform .25s linear;pointer-events:none;
}
.ad-sep em{font-family:var(--ff-mono);font-style:normal;font-size:8.5px;color:var(--brass-lite);letter-spacing:.08em;float:right}
#requests{display:flex;flex-direction:column;gap:3px}
.req{
  font-size:10px;padding:3px 7px;border-radius:4px;background:rgba(255,196,77,.12);
  border-left:2px solid var(--warn);color:var(--warn);
}
.req.urgent{
  background:rgba(255,106,82,.14);border-left-color:var(--bad);color:#ffd2ce;
  animation:reqpulse 1.5s ease-in-out infinite;
}
@keyframes reqpulse{50%{background:rgba(255,106,82,.30)}}

/* ==========================================================================
   SHIP STATUS
   ========================================================================== */
/* ==========================================================================
   FLEET KIT — what the crew can see of the captain's work
   ========================================================================== */
#fleetkit{
  position:fixed;left:16px;top:88px;width:296px;padding:11px 12px;
  display:flex;flex-direction:column;gap:8px;z-index:18;
}
.fk-cap{font-size:9.5px;letter-spacing:.14em;color:var(--muted)}
.fk-cap b{color:var(--parch);letter-spacing:.06em}
.fk-hint{font-size:9px;color:var(--muted);letter-spacing:.04em}
.fk-hint b{color:var(--brass-lite);font-family:var(--ff-mono)}
#fk-upgrades{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px}
.fku{
  position:relative;padding:5px 3px 4px;border-radius:5px;text-align:center;
  background:rgba(255,255,255,.03);border:1px solid rgba(160,190,215,.10);
}
.fku.on{border-color:rgba(201,162,39,.4);background:rgba(201,162,39,.08)}
.fku .ic{font-size:13px;line-height:1.1;opacity:.55}
.fku.on .ic{opacity:1}
.fku .nm{font-size:7.5px;letter-spacing:.05em;color:var(--muted);margin-top:3px;line-height:1.25;height:19px}
.fku.on .nm{color:var(--parch-dim)}
.fku .lv{position:absolute;top:3px;right:3px;display:flex;gap:2px}
.fku .lv i{width:3.5px;height:3.5px;border-radius:50%;background:rgba(255,255,255,.16)}
.fku .lv i.on{background:var(--brass-lite);box-shadow:0 0 4px var(--brass)}

/* ==========================================================================
   FLEET TALK
   ========================================================================== */
#chatwrap{
  position:fixed;left:16px;bottom:308px;width:330px;z-index:19;
  display:flex;flex-direction:column;gap:5px;align-items:flex-start;
}
/* Grows upward out of the bottom, and stops before it reaches the Admiralty.
   Older lines simply scroll off the top. */
#chatlog{
  list-style:none;display:flex;flex-direction:column;justify-content:flex-end;gap:3px;
  pointer-events:none;width:100%;
  max-height:calc(100vh - 590px);overflow:hidden;
}
#chatlog li{
  font-size:11px;line-height:1.35;padding:4px 8px;border-radius:5px;
  background:rgba(6,11,17,.66);backdrop-filter:blur(5px);
  border-left:2px solid var(--hair-soft);color:var(--parch-dim);
  /* Slides in, then dims on its own as it ages out of relevance. */
  animation:slideUp .24s cubic-bezier(.2,.8,.2,1), chatAge 2s ease 18s forwards;
  overflow-wrap:anywhere;
}
@keyframes chatAge{to{opacity:.42}}
@keyframes slideUp{from{opacity:0;transform:translateY(8px)}}
#chatlog li .who{color:var(--parch);font-weight:600}
#chatlog li.cap{border-left-color:var(--brass);background:rgba(28,22,8,.72)}
#chatlog li.cap .who{color:var(--brass-lite)}
#chatlog li.mine{border-left-color:var(--good)}

#chatbox{
  display:flex;align-items:center;gap:7px;width:100%;padding:5px 8px;border-radius:6px;
  background:rgba(6,11,17,.94);border:1px solid var(--hair);box-shadow:var(--sh);
  pointer-events:auto;
}
.cb-to{font-family:var(--ff-display);font-size:9px;letter-spacing:.2em;color:var(--brass);white-space:nowrap}
#chatinput{
  flex:1;background:none;border:0;outline:0;color:var(--parch);
  font-family:var(--ff-ui);font-size:12px;caret-color:var(--brass-lite);
}

#status{position:fixed;left:16px;bottom:16px;width:264px;padding:11px 12px;z-index:18}
.ship-line{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:7px}
#hullname{font-family:var(--ff-display);font-size:13.5px;letter-spacing:.18em;color:var(--parch)}
#rolebadge{
  font-size:8.5px;letter-spacing:.18em;padding:2px 6px;border-radius:3px;
  background:rgba(201,162,39,.18);color:var(--brass-lite);border:1px solid var(--hair);
}
#rolebadge:empty{display:none}
.meters{display:flex;flex-direction:column;gap:6px}
.meter{display:grid;grid-template-columns:38px 1fr 32px;align-items:center;gap:8px}
.meter label{font-size:9.5px;letter-spacing:.13em;color:var(--parch-dim)}
.meter span{font-family:var(--ff-mono);font-size:11.5px;text-align:right;color:var(--parch);font-variant-numeric:tabular-nums}
.track{height:11px;background:rgba(0,0,0,.6);border-radius:2px;overflow:hidden;box-shadow:var(--edge)}
.meter.thin .track{height:5px}
.track i{display:block;height:100%;width:0;transition:width .16s linear;border-radius:2px}
#m-hull{background:linear-gradient(90deg,#8a3428,#e2694f)}
#m-sail{background:linear-gradient(90deg,#6f6650,#e4d7b4)}
#m-crew{background:linear-gradient(90deg,#2d6c5c,#5fd3ae)}
#m-stam{background:linear-gradient(90deg,#4a5a76,#8fb4e8)}
.track.low i{animation:lowpulse .8s ease-in-out infinite}
@keyframes lowpulse{50%{filter:brightness(1.7)}}

/* --- how much canvas is out ---------------------------------------------
   The single setting that decides how fast the ship goes. It used to be an
   eight-pixel grey word hidden under the compass rose. */
.sailbox,.gunbox{margin-top:8px}
.sailbox label,.gunbox label{
  display:flex;justify-content:space-between;align-items:baseline;
  font-size:9px;letter-spacing:.16em;color:var(--brass);margin-bottom:4px;
}
.sailbox label em,.gunbox label em{font-style:normal;font-size:8px;color:var(--muted);letter-spacing:.06em}
#sailladder{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
#sailladder i{
  position:relative;height:19px;border-radius:3px;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.42);border:1px solid rgba(160,190,215,.14);transition:all .14s;
}
#sailladder i b{font-family:var(--ff-mono);font-size:8px;letter-spacing:.04em;color:var(--muted);font-weight:400}
#sailladder i.on{background:rgba(201,162,39,.20);border-color:rgba(201,162,39,.36)}
#sailladder i.on b{color:var(--brass-lite)}
#sailladder i.at{
  background:linear-gradient(180deg,var(--brass-lite),var(--brass));
  border-color:var(--brass-lite);box-shadow:0 0 12px rgba(240,210,122,.34);
}
#sailladder i.at b{color:#0a0f16;font-weight:700}

/* --- are the guns loaded ------------------------------------------------- */
#guns{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.gb{
  display:grid;grid-template-columns:34px 1fr;gap:6px;align-items:center;
  padding:3px 6px;border-radius:4px;background:rgba(0,0,0,.38);
  border:1px solid rgba(160,190,215,.12);transition:border-color .16s;
}
.gb span{font-family:var(--ff-mono);font-size:8.5px;letter-spacing:.08em;color:var(--muted)}
.gb .track{height:7px}
.gb .track i{background:linear-gradient(90deg,#6a5420,var(--warn));transition:width .1s linear}
.gb.ready{border-color:rgba(111,220,140,.46);background:rgba(111,220,140,.09)}
.gb.ready span{color:var(--good)}
.gb.ready .track i{background:linear-gradient(90deg,#2d6c4a,var(--good))}

#stations{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-top:8px}
.st{
  text-align:center;padding:4px 2px 3px;border-radius:5px;cursor:pointer;
  background:rgba(255,255,255,.035);border:1px solid rgba(160,190,215,.12);
  transition:border-color .16s,background .16s;
}
.st:hover{border-color:var(--brass);background:rgba(201,162,39,.10)}
.st b{display:block;font-family:var(--ff-mono);font-size:14px;color:var(--parch);line-height:1}
.st span{display:block;font-size:7.5px;letter-spacing:.10em;color:var(--muted);margin-top:2px}
.st.hi b{color:var(--brass-lite)}

#loadout{display:flex;gap:6px;margin-top:7px}
.lo{
  flex:1;text-align:center;font-family:var(--ff-mono);font-size:10px;padding:4px 3px;
  border-radius:4px;background:rgba(0,0,0,.36);color:var(--parch-dim);
  border:1px solid rgba(160,190,215,.10);
}
#lo-shot{color:var(--brass-lite);letter-spacing:.06em}
.lo.empty{color:var(--bad);border-color:rgba(255,106,82,.4)}

/* ==========================================================================
   MINIMAP
   ========================================================================== */
#mapwrap{position:fixed;right:16px;bottom:16px;padding:6px;z-index:18;line-height:0}
#minimap{width:222px;height:134px;border-radius:5px;display:block}

/* ==========================================================================
   SCOREBOARD
   ========================================================================== */
#scoreboard{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(3,6,10,.62);backdrop-filter:blur(4px);z-index:40;
}
.sb-inner{display:flex;flex-direction:column;gap:12px;width:min(880px,92vw)}
.sb-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.sb-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:9px 14px;border-radius:var(--r);background:var(--panel);
  border:1px solid var(--hair);box-shadow:var(--sh);
}
#sb-count{font-family:var(--ff-mono);font-size:11px;letter-spacing:.1em;color:var(--parch-dim);flex:1 1 260px}
#sb-count b{color:var(--parch)}
.sb-actions{display:flex;gap:8px;flex:0 0 auto}
.sb-actions button{
  display:flex;flex-direction:column;align-items:center;gap:2px;white-space:nowrap;
  font-family:var(--ff-display);font-size:10px;letter-spacing:.18em;color:var(--brass-lite);
  padding:6px 13px;border-radius:5px;cursor:pointer;
  background:linear-gradient(180deg,rgba(40,56,74,.7),rgba(10,16,24,.7));
  border:1px solid var(--hair);transition:border-color .16s,transform .12s,opacity .16s;
}
.sb-actions button:hover:not(:disabled){border-color:var(--brass-lite);transform:translateY(-1px)}
.sb-actions button:disabled{opacity:.34;cursor:not-allowed}
.sb-actions button em{
  font-family:var(--ff-ui);font-size:8.5px;letter-spacing:.02em;font-style:normal;color:var(--muted);
}
.sb-col{padding:14px}
.sb-col h3{
  font-family:var(--ff-display);font-size:13px;letter-spacing:.22em;margin-bottom:10px;
  padding-bottom:7px;border-bottom:1px solid var(--hair);
}
#sb-scarlet h3{color:var(--scarlet)}
#sb-cobalt  h3{color:var(--cobalt)}
.sb-row{
  display:grid;grid-template-columns:1fr 34px 42px 34px 40px 52px;gap:6px;align-items:center;
  padding:5px 6px;border-radius:4px;font-size:11.5px;
}
.sb-row.head{font-size:8.5px;letter-spacing:.14em;color:var(--muted);border-bottom:1px solid var(--hair-soft)}
.sb-row.me{background:rgba(201,162,39,.13)}
.sb-row.down{opacity:.42}
.sb-row .n{display:flex;align-items:center;gap:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-row .num{font-family:var(--ff-mono);text-align:right;font-variant-numeric:tabular-nums;color:var(--parch-dim)}
.tag{font-size:7.5px;letter-spacing:.1em;padding:1px 4px;border-radius:2px;background:rgba(255,255,255,.1);color:var(--muted)}
.tag.cap{background:rgba(201,162,39,.24);color:var(--brass-lite)}
.tag.want{background:rgba(111,220,140,.18);color:var(--good)}

/* ==========================================================================
   DEAD / END
   ========================================================================== */
#deadpanel{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:38;pointer-events:none}
.dead-inner{padding:24px 28px;text-align:center;pointer-events:auto;width:min(720px,94vw)}
.dead-inner h2{font-family:var(--ff-display);font-size:22px;letter-spacing:.20em;color:var(--bad)}
#deadwhy{font-size:12.5px;color:var(--parch-dim);margin:6px 0 16px}
.dead-step{margin-bottom:10px}
.dead-step b{
  display:block;font-family:var(--ff-display);font-size:12px;letter-spacing:.20em;color:var(--brass-lite);
}
.dead-step span{display:block;font-size:11px;color:var(--muted);margin-top:3px}
#hullpick{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-bottom:16px}
.hp{
  position:relative;padding:11px 9px 13px;border-radius:7px;cursor:pointer;text-align:left;
  background:linear-gradient(180deg,rgba(38,54,72,.55),rgba(10,16,24,.55));
  border:1px solid rgba(160,190,215,.14);transition:transform .12s,border-color .18s;
}
.hp:hover{transform:translateY(-3px);border-color:var(--brass)}
.hp.on{border-color:var(--brass-lite);box-shadow:0 0 0 1px var(--brass),0 0 18px rgba(240,210,122,.3)}
.hp-top{display:flex;align-items:baseline;justify-content:space-between;gap:6px}
.hp b{font-family:var(--ff-display);font-size:12px;letter-spacing:.13em;color:var(--parch)}
.hp-top span{font-size:8px;letter-spacing:.11em;color:var(--muted)}
.hp-stats{margin:8px 0 7px;display:flex;flex-direction:column;gap:3px}
.hs{display:grid;grid-template-columns:32px 1fr;gap:6px;align-items:center}
.hs label{font-size:7.5px;letter-spacing:.09em;color:var(--muted)}
.hs .track{height:5px}
.hs .track i{display:block;height:100%;background:linear-gradient(90deg,#4a5a76,#8fb4e8)}
.hp.on .hs .track i{background:linear-gradient(90deg,#6a5420,var(--brass-lite))}
.hp em{display:block;font-size:9.5px;color:var(--parch-dim);font-style:normal;line-height:1.35}
.hp-pick{
  position:absolute;left:0;right:0;bottom:0;padding:2px 0;opacity:0;
  font-family:var(--ff-mono);font-size:7.5px;letter-spacing:.2em;
  background:var(--brass-lite);color:#0a0f16;border-radius:0 0 6px 6px;
}
.hp.on .hp-pick{opacity:1}
#respawn{font-family:var(--ff-mono);font-size:13px;letter-spacing:.14em;color:var(--parch-dim)}
#respawn b{color:var(--brass-lite);font-size:17px}
#respawn small{display:block;font-family:var(--ff-ui);font-size:10.5px;letter-spacing:0;color:var(--muted);margin-top:6px}

#endscreen{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(3,6,10,.78);backdrop-filter:blur(7px);z-index:50;
}
.end-inner{padding:28px 34px;text-align:center;width:min(760px,94vw)}
#end-victor{font-family:var(--ff-display);font-size:34px;letter-spacing:.20em;line-height:1.15}
#end-victor.scarlet{color:var(--scarlet);text-shadow:0 0 34px rgba(239,75,66,.5)}
#end-victor.cobalt {color:var(--cobalt); text-shadow:0 0 34px rgba(62,169,242,.5)}
#end-reason{font-size:12px;letter-spacing:.16em;color:var(--parch-dim);margin:6px 0 18px}
#end-board{display:grid;grid-template-columns:1fr 1fr;gap:14px;text-align:left;margin-bottom:16px}
#end-next{font-family:var(--ff-mono);font-size:11px;letter-spacing:.14em;color:var(--muted)}

/* ==========================================================================
   HELP, TOAST, MISC
   ========================================================================== */
#helpcard{
  position:fixed;right:16px;bottom:178px;width:330px;padding:12px 14px;z-index:19;
  font-size:11px;line-height:1.45;transition:opacity .3s,transform .3s;
  /* It shares the right-hand column with the killfeed above and the chart
     below, so it is never allowed to grow into either. */
  max-height:calc(100vh - 320px);overflow-y:auto;scrollbar-width:thin;
}
#helpcard.hide{opacity:0;transform:translateX(14px);pointer-events:none}
#helpcard h3{font-family:var(--ff-display);font-size:10.5px;letter-spacing:.24em;color:var(--brass);margin-bottom:6px}
#helpcard h3+p,#helpcard p{color:var(--parch-dim);font-size:10px;line-height:1.5}
#helpcard dl{display:grid;grid-template-columns:72px 1fr;gap:2px 9px;margin-bottom:10px}
#helpcard dt{font-family:var(--ff-mono);font-size:9.5px;color:var(--brass-lite);letter-spacing:.04em}
#helpcard dd{color:var(--parch-dim);font-size:10px}
#helpcard em{color:var(--parch);font-style:italic}
#helpcard b{color:var(--parch)}
#helpcard dt em{font-style:normal;font-size:8px;color:var(--muted);letter-spacing:.02em}
#helpcard .help-foot{font-size:9.5px;color:var(--muted);margin-top:8px}
#helpcard.crew .cap-only{display:none}

/* ==========================================================================
   THE COACH — one lesson, at the moment it becomes true, once ever
   ========================================================================== */
#coach{
  position:fixed;left:50%;top:96px;transform:translate(-50%,-10px);
  width:min(520px,72vw);padding:11px 16px 12px;border-radius:8px;z-index:44;
  background:linear-gradient(180deg,rgba(24,36,50,.95),rgba(8,13,20,.95));
  border:1px solid var(--brass);box-shadow:var(--sh),0 0 30px rgba(201,162,39,.18);
  opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;text-align:center;
}
#coach.show{opacity:1;transform:translate(-50%,0)}
/* While a lesson is up it owns the top of the screen; the killfeed steps back
   rather than being written over. */
body.coaching #feed{opacity:.22;transition:opacity .3s}
#coach b{
  display:block;font-family:var(--ff-display);font-size:12px;letter-spacing:.20em;
  color:var(--brass-lite);margin-bottom:5px;
}
#coach span{display:block;font-size:11.5px;line-height:1.5;color:var(--parch-dim)}
#coach span b{display:inline;font-family:var(--ff-mono);font-size:11px;letter-spacing:0;color:var(--parch);margin:0}

#toast{
  position:fixed;left:50%;bottom:118px;transform:translate(-50%,10px);
  padding:8px 18px;border-radius:6px;background:rgba(6,11,17,.92);
  border:1px solid var(--hair);font-size:12px;letter-spacing:.06em;color:var(--brass-lite);
  opacity:0;transition:opacity .22s,transform .22s;pointer-events:none;z-index:45;
  box-shadow:var(--sh);
}
#toast.show{opacity:1;transform:translate(-50%,0)}

#conn{
  position:fixed;left:50%;top:78px;transform:translateX(-50%);
  font-family:var(--ff-mono);font-size:10.5px;letter-spacing:.14em;color:var(--warn);
  z-index:46;opacity:0;transition:opacity .3s;
}
#conn.show{opacity:1}
#conn.bad{color:var(--bad);max-width:min(92vw,760px);text-align:center;line-height:1.5}

.fullcover{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:var(--ink);z-index:99}
.card{padding:30px 34px;max-width:460px;text-align:center}
.card h1{font-family:var(--ff-display);font-size:22px;letter-spacing:.2em;color:var(--bad);margin-bottom:10px}
.card p{font-size:12.5px;line-height:1.6;color:var(--parch-dim)}
.card code{font-family:var(--ff-mono);font-size:11.5px;color:var(--brass-lite)}

/* --- the join card ------------------------------------------------------- */
#joincard{z-index:100}
.card.join h1{color:var(--brass-lite);font-size:26px;margin-bottom:6px}
.card.join .sub{font-size:11.5px;color:var(--muted);margin-bottom:22px}
.card.join label{
  display:block;font-family:var(--ff-display);font-size:9.5px;letter-spacing:.24em;
  color:var(--brass);margin:0 0 7px;text-align:left;
}
#join-name{
  width:100%;padding:10px 12px;margin-bottom:18px;border-radius:6px;
  background:rgba(0,0,0,.45);border:1px solid var(--hair);color:var(--parch);
  font-family:var(--ff-ui);font-size:14px;outline:0;caret-color:var(--brass-lite);
}
#join-name:focus{border-color:var(--brass-lite)}
.join-sides{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:22px}
.js{
  padding:9px 4px;border-radius:6px;cursor:pointer;
  font-family:var(--ff-display);font-size:10px;letter-spacing:.16em;color:var(--parch-dim);
  background:rgba(255,255,255,.04);border:1px solid var(--hair-soft);transition:all .16s;
}
.js:hover{border-color:var(--hair)}
.js.on{color:var(--parch);background:rgba(201,162,39,.12);border-color:var(--brass)}
.js.scarlet.on{background:rgba(239,75,66,.18);border-color:var(--scarlet);color:#ffd2ce}
.js.cobalt.on{background:rgba(62,169,242,.18);border-color:var(--cobalt);color:#cfe8fb}
.join-go{
  width:100%;padding:12px;border-radius:7px;cursor:pointer;
  font-family:var(--ff-display);font-size:13px;letter-spacing:.24em;color:#0a0f16;
  background:linear-gradient(180deg,var(--brass-lite),var(--brass));
  border:0;transition:transform .12s,filter .16s;
}
.join-go:hover{transform:translateY(-1px);filter:brightness(1.1)}
.join-room{font-size:10.5px!important;color:var(--muted)!important;margin-top:18px}
.join-room b{color:var(--parch-dim)}

/* ==========================================================================
   THE BRIEFING — six pages of rules, shown once on a first ever visit
   ========================================================================== */
#briefing{
  background:radial-gradient(120% 90% at 50% 0%,#0d1824 0%,var(--ink) 70%);
  z-index:101;display:none;
}
#briefing:not([hidden]){display:flex}
.bf{
  width:min(920px,94vw);max-height:92vh;display:flex;flex-direction:column;
  background:linear-gradient(180deg,rgba(18,28,40,.94),rgba(7,12,19,.96));
  border:1px solid var(--hair);border-radius:12px;box-shadow:var(--sh),var(--edge);
  overflow:hidden;
}
.bf-head{
  display:flex;align-items:center;gap:16px;padding:16px 22px;
  border-bottom:1px solid var(--hair);
}
.bf-head h1{
  flex:1;font-family:var(--ff-display);font-size:16px;letter-spacing:.28em;color:var(--brass-lite);
}
.bf-dots{display:flex;gap:7px}
.bf-dots i{
  width:9px;height:9px;border-radius:50%;cursor:pointer;
  background:rgba(160,190,215,.20);border:1px solid var(--hair-soft);transition:all .16s;
}
.bf-dots i:hover{background:rgba(201,162,39,.4)}
.bf-dots i.on{background:var(--brass-lite);border-color:var(--brass-lite);box-shadow:0 0 10px rgba(240,210,122,.5)}
#bf-x{
  font-family:var(--ff-mono);font-size:9.5px;letter-spacing:.14em;color:var(--muted);
  background:0;border:0;cursor:pointer;padding:4px 2px;
}
#bf-x:hover{color:var(--parch)}

.bf-body{flex:1;overflow-y:auto;scrollbar-width:thin}
.bf-page{display:grid;grid-template-columns:320px 1fr;gap:28px;padding:26px 28px;align-items:start}
.bf-art svg{width:100%;height:auto;border-radius:8px;border:1px solid var(--hair-soft);display:block}
.bf-text h2{
  font-family:var(--ff-display);font-size:21px;letter-spacing:.16em;color:var(--parch);margin-bottom:12px;
}
.bf-text p{font-size:13px;line-height:1.62;color:var(--parch-dim);margin-bottom:11px}
.bf-text p b{color:var(--parch);font-weight:600}
.bf-text dl{
  display:grid;grid-template-columns:104px 1fr;gap:5px 12px;margin-top:14px;
  padding-top:12px;border-top:1px solid var(--hair-soft);
}
.bf-text dt{font-family:var(--ff-mono);font-size:10.5px;color:var(--brass-lite);letter-spacing:.03em}
.bf-text dt em{font-style:normal;font-size:8.5px;color:var(--muted)}
.bf-text dd{font-size:11.5px;color:var(--parch-dim)}

.bf-foot{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 22px;border-top:1px solid var(--hair);
}
.bf-foot button{
  font-family:var(--ff-display);font-size:11px;letter-spacing:.20em;color:var(--parch-dim);
  padding:9px 20px;border-radius:6px;cursor:pointer;
  background:rgba(255,255,255,.05);border:1px solid var(--hair-soft);transition:all .16s;
}
.bf-foot button:hover:not(:disabled){border-color:var(--brass);color:var(--parch)}
.bf-foot button:disabled{opacity:.3;cursor:not-allowed}
.bf-foot button.pri{
  color:#0a0f16;border:0;background:linear-gradient(180deg,var(--brass-lite),var(--brass));
}
.bf-foot button.pri:hover{filter:brightness(1.1)}
#bf-count{font-family:var(--ff-mono);font-size:10.5px;letter-spacing:.16em;color:var(--muted)}
.bf-foot button.ghost{
  font-family:var(--ff-ui);font-size:9.5px;letter-spacing:.10em;padding:7px 12px;
  color:var(--muted);background:0;border:1px solid transparent;
}
.bf-foot button.ghost:hover:not(:disabled){color:var(--brass-lite);border-color:var(--hair-soft)}

/* A visible way into the rules, for anyone who does not know F1 exists. */
#orders-btn{
  position:fixed;right:16px;top:62px;width:26px;height:26px;border-radius:50%;z-index:24;
  font-family:var(--ff-display);font-size:13px;color:var(--brass);cursor:pointer;
  background:rgba(6,11,17,.82);border:1px solid var(--hair);
  transition:color .16s,border-color .16s,transform .12s;
}
#orders-btn:hover{color:var(--brass-lite);border-color:var(--brass-lite);transform:scale(1.1)}

/* Narrow: stack the diagram above the words. */
@media (max-width:760px){
  .bf-page{grid-template-columns:1fr;gap:16px;padding:18px}
  .bf-art{max-width:320px;margin:0 auto}
}
/* Short: keep the two columns, but fit the page without scrolling for it. */
@media (max-height:680px){
  .bf-head{padding:11px 18px}
  .bf-head h1{font-size:13px}
  .bf-page{grid-template-columns:240px 1fr;gap:20px;padding:16px 20px}
  .bf-text h2{font-size:17px;margin-bottom:8px}
  .bf-text p{font-size:11.5px;line-height:1.5;margin-bottom:8px}
  .bf-text dl{gap:3px 10px;margin-top:9px;padding-top:9px}
  .bf-text dd{font-size:10.5px}
  .bf-foot{padding:9px 18px}
  .bf-foot button{padding:7px 15px;font-size:10px}
}
@media (max-width:760px) and (max-height:680px){
  .bf-page{grid-template-columns:1fr}
  .bf-art{max-width:230px}
}

[hidden]{display:none!important}

/* --- narrow screens ------------------------------------------------------ */
@media (max-width:1180px){
  #helpcard{display:none}
  #musterhint{top:auto;bottom:318px;left:16px;right:16px;max-width:none;padding:8px 14px}
  #musterhint b{font-size:11.5px}
  #musterhint span{font-size:10.5px}
  #admiralty,#fleetkit{width:250px}
  #chatwrap{width:270px}
  #minimap{width:176px;height:106px}
}
/* Short windows: give the Admiralty back some vertical room rather than
   letting it and the chat fight over the same column. */
@media (max-height:820px){
  #chatwrap{bottom:232px}
  /* The status panel has grown a sail ladder and a gun readout. On a short
     window something has to give, and the crew-station grid is the part you
     can also reach with Z X C V. */
  .sailbox,.gunbox{margin-top:6px}
  #sailladder i{height:17px}
  #chatwrap{bottom:296px}
  #musterhint{bottom:306px}
  #status{padding:9px 11px}
  .meters{gap:4px}
  .st{padding:3px 2px 3px}
  .st b{font-size:12px}
  #coach{top:76px;padding:9px 14px 10px}
  /* The bottom padding is what reserves room for the absolutely positioned
     cost — shrink the tile by all means, but never take that away. */
  .upg{padding:4px 4px 17px}
  .upg .nm{height:18px;font-size:8px;line-height:1.15;margin-top:2px}
  .upg .ic{font-size:14px}
  .upg .cost{bottom:2px;font-size:9px}
  .ord{padding:5px 2px}
  #helpcard{display:none}
}
@media (max-width:860px){
  #status{width:226px}
  #sailladder i b{font-size:7px}
  #coach{width:86vw;font-size:11px}
  #feed{width:230px}
  #chatwrap{width:224px}
  .colours{width:26vw}
  .sb-actions button{padding:5px 8px;letter-spacing:.1em}
}
