/* Ohh Ship! — Sailing Courier Simulator
   Portrait-first, adapts to landscape. Dark "night bridge" palette. */

:root{
  --bg:#08141b;
  --panel:#0e1f2a;
  --panel2:#132b38;
  --line:#22485c;
  --ink:#dcecf3;
  --dim:#7fa3b4;
  --accent:#f2b134;
  --accent2:#4fd1c5;
  --danger:#ef5b5b;
  --good:#63d471;
  --chartpaper:#f3ead6;
  --r:10px;
  --safe-t:env(safe-area-inset-top,0px);
  --safe-b:env(safe-area-inset-bottom,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;margin:0;overflow:hidden;overscroll-behavior:none}
body{
  background:var(--bg); color:var(--ink);
  font:14px/1.4 ui-rounded,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  user-select:none; -webkit-user-select:none; touch-action:manipulation;
}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
h1{font-size:19px;margin:0}
h2{font-size:15px;margin:0 0 6px}
.hidden{display:none !important}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}

/* ---------------- layout ---------------- */
#app{position:fixed;inset:0;display:flex;flex-direction:column}
#worldWrap{position:relative;flex:1 1 auto;min-height:0;overflow:hidden}
#world{display:block;width:100%;height:100%}
#instruments{display:block;width:100%;height:118px;flex:0 0 auto;background:#091820;border-top:1px solid var(--line)}
#deck{
  flex:0 0 auto;display:grid;grid-template-columns:1fr 1fr 1fr 1.5fr;gap:6px;
  padding:7px 8px calc(7px + var(--safe-b));background:linear-gradient(#0d222d,#081319);
  border-top:1px solid var(--line);
}
@media (max-width:560px){
  #instruments{height:112px}
  #deck{grid-template-columns:1fr 1fr;gap:5px;padding:6px 6px calc(6px + var(--safe-b))}
  .mini{padding:8px 3px;font-size:11.5px}
  .gearbox .mini{padding:8px 0}
  .tiller-track{height:56px}
  .deck-label{font-size:9.5px;letter-spacing:.6px}
  .deck-label .val{font-size:10px}
  .helm-hint{display:none}
  .float-panel{right:8px;left:8px;bottom:62px;width:auto;max-width:none}
  .side-btns{bottom:8px}
}
@media (max-width:380px){
  .deck-label .val{font-size:9px}
}
@media (min-aspect-ratio:13/10){
  #deck{grid-template-columns:0.8fr 0.8fr 0.8fr 2fr}
  #instruments{height:106px}
}

/* ---------------- topbar ---------------- */
#topbar{
  position:absolute;top:0;left:0;right:0;padding:calc(5px + var(--safe-t)) 7px 5px;
  display:flex;justify-content:space-between;align-items:flex-start;gap:6px;flex-wrap:wrap;
  background:linear-gradient(rgba(4,12,17,.85),rgba(4,12,17,0));pointer-events:none;
}

.tb-group{display:flex;align-items:center;gap:5px;pointer-events:auto}
.tb-mid{flex:1;justify-content:center;overflow:hidden}
.tb-clock{font:600 13px/1 ui-monospace,Menlo,monospace;color:var(--accent)}
.tb-money{font:600 13px/1 ui-monospace,Menlo,monospace;color:var(--good)}
.tb-chip{
  font:11px/1 ui-monospace,Menlo,monospace;color:var(--ink);background:rgba(13,40,54,.75);
  border:1px solid var(--line);border-radius:20px;padding:4px 8px;white-space:nowrap
}
.tb-btn{
  background:rgba(13,40,54,.85);border:1px solid var(--line);border-radius:8px;
  padding:6px 9px;font-size:12px;color:var(--ink)
}
/* phone: the readouts drop to their own line rather than being clipped */
@media (max-width:620px){
  .tb-mid{order:3;flex:1 1 100%;justify-content:flex-start;flex-wrap:wrap;overflow:visible}
}
.tb-btn:active{background:var(--panel2)}
.tb-btn.on{background:var(--accent);color:#10202a;border-color:var(--accent);font-weight:600}

/* ---------------- alerts / toasts ---------------- */
#alerts{position:absolute;top:44px;left:0;right:0;display:flex;flex-direction:column;
  align-items:center;gap:4px;pointer-events:none;z-index:5}
.alert{
  background:rgba(200,40,40,.92);color:#fff;border-radius:6px;padding:4px 12px;
  font:600 12px/1.3 ui-monospace,Menlo,monospace;letter-spacing:.5px;box-shadow:0 2px 10px #0008
}
.alert.warn{background:rgba(226,158,26,.94);color:#20180a}
.alert.info{background:rgba(20,80,105,.94);color:#dff}

#toasts{position:absolute;left:8px;right:8px;bottom:8px;display:flex;flex-direction:column;
  gap:6px;align-items:center;pointer-events:none;z-index:6}
.toast{
  background:rgba(9,26,35,.95);border:1px solid var(--accent);border-radius:10px;
  padding:8px 13px;max-width:420px;box-shadow:0 4px 16px #000a;animation:pop .25s ease
}
.toast b{color:var(--accent);display:block;font-size:12px;letter-spacing:.6px;text-transform:uppercase}
.toast span{font-size:13px;color:var(--ink)}
@keyframes pop{from{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}

.moor-btn{
  position:absolute;left:50%;transform:translateX(-50%);bottom:14px;z-index:6;
  background:var(--accent);color:#12222c;font-weight:700;border-radius:24px;
  padding:11px 24px;box-shadow:0 4px 14px #000a;animation:pop .2s ease
}
.moor-btn.slip{background:var(--accent2);color:#0b2a28}
.side-btns{position:absolute;right:8px;bottom:8px;display:flex;flex-direction:column;gap:7px;z-index:6}
.round-btn{
  width:46px;height:46px;border-radius:23px;background:rgba(9,26,35,.9);
  border:1px solid var(--line);font-size:21px;line-height:1;color:var(--ink);
  box-shadow:0 2px 8px #0007
}
.round-btn.on{background:var(--accent);color:#12222c;border-color:var(--accent)}
.round-btn.alarm{background:var(--danger);color:#fff;border-color:#ff9c9c}
.float-panel{
  position:absolute;right:60px;bottom:8px;z-index:7;width:270px;max-width:calc(100% - 76px);
  background:rgba(8,22,30,.97);border:1px solid var(--line);border-radius:12px;
  padding:10px 12px;box-shadow:0 6px 22px #000b;font-size:12.5px
}
/* variant that hangs from the topbar instead of sitting on the deck */
.float-panel.top{top:calc(46px + var(--safe-t));bottom:auto;right:8px;width:320px;max-width:calc(100% - 16px)}
@media (max-width:620px){
  .float-panel.top{top:calc(88px + var(--safe-t))}
}
.tb-skip{font-size:14px;line-height:1;padding:4px 8px 5px}
.tide-wave{
  width:100%;height:104px;display:block;margin:2px 0 7px;border:1px solid var(--line);
  border-radius:8px;background:rgba(4,14,20,.6);touch-action:none;cursor:crosshair
}
.float-panel h4{margin:0 0 6px;font-size:13px;color:var(--accent);
  display:flex;justify-content:space-between;align-items:baseline;gap:6px}
.float-panel .kv{font-size:11.5px;margin-bottom:7px}
.float-panel .row{margin-top:7px}
.float-panel .btn{padding:6px 9px;font-size:12px}
.verdict{font-size:11.5px;border-radius:6px;padding:4px 7px;margin:5px 0;line-height:1.4}
.verdict.good{background:#12321c;color:#bff0c4}
.verdict.warn{background:#3a2e10;color:#ffe0a3}
.verdict.bad{background:#3a1516;color:#ffbcbc}
.fleet-row{display:flex;justify-content:space-between;align-items:center;gap:8px;
  padding:6px 0;border-bottom:1px solid #17323f}
.fleet-row:last-child{border-bottom:none}
.fleet-row b{font-size:12.5px}
.fleet-row .meta{font-size:10.5px}
.cargo-tag{
  position:absolute;left:8px;bottom:8px;background:rgba(9,26,35,.85);border:1px solid var(--line);
  border-radius:8px;padding:5px 9px;font:11px/1.35 ui-monospace,Menlo,monospace;color:var(--dim);max-width:60%
}
.cargo-tag b{color:var(--ink)}

/* ---------------- deck controls ---------------- */
.deck-col{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:5px 6px;min-width:0}
.deck-label{font-size:10px;letter-spacing:.9px;text-transform:uppercase;color:var(--dim);
  display:flex;justify-content:space-between;align-items:center;gap:4px;white-space:nowrap}
.deck-label .val{color:var(--accent2);font-family:ui-monospace,Menlo,monospace;font-size:11px}
.sheet-row{display:flex;gap:6px;align-items:stretch;margin-top:4px;height:74px}
.sheet-btns{display:flex;flex-direction:column;gap:4px;justify-content:center;flex:1;min-width:0}
.mini{
  background:var(--panel2);border:1px solid var(--line);border-radius:7px;padding:5px 2px;
  font-size:11px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
.mini:active{background:#1d4256}
.mini.on{background:var(--accent);color:#12222c;border-color:var(--accent);font-weight:600}
.mini.pilot{padding:2px 7px;font-size:10px}
.gearbox{display:flex;gap:3px}
.gearbox .mini{flex:1;padding:5px 0}

/* vertical sliders — a horizontal range rotated, so the thumb styling sticks */
.vsl-wrap{position:relative;width:40px;height:74px;flex:0 0 auto}
.vsl{
  position:absolute;left:-17px;top:17px;width:74px;height:40px;margin:0;
  -webkit-appearance:none;appearance:none;background:transparent;
  transform:rotate(-90deg);touch-action:none;
}
.vsl::-webkit-slider-runnable-track{
  height:16px;border-radius:8px;
  background:linear-gradient(#061219,#0d2531);border:1px solid var(--line);
}
.vsl::-webkit-slider-thumb{
  -webkit-appearance:none;width:16px;height:34px;border-radius:5px;margin-top:-10px;
  background:linear-gradient(90deg,#f7d798,#d99b28);border:1px solid #6b4b12;
  box-shadow:0 1px 3px #0008;
}
.vsl::-moz-range-track{height:16px;border-radius:8px;background:#0a1c25;border:1px solid var(--line)}
.vsl::-moz-range-thumb{width:16px;height:34px;border-radius:5px;background:#e8b455;border:1px solid #6b4b12}

/* horizontal sheet controls: the slider is the boom, seen from above */
.hsl-wrap{margin-top:5px}
.hsl{
  -webkit-appearance:none;appearance:none;width:100%;height:26px;margin:0;
  background:transparent;touch-action:none;display:block
}
.hsl::-webkit-slider-runnable-track{
  height:14px;border-radius:7px;border:1px solid var(--line);
  background:linear-gradient(90deg,#0f2a36 0%,#0a1c25 48%,#173a4a 50%,#0a1c25 52%,#0f2a36 100%);
}
.hsl::-webkit-slider-thumb{
  -webkit-appearance:none;width:15px;height:26px;border-radius:4px;margin-top:-7px;
  background:linear-gradient(#f7d798,#d99b28);border:1px solid #6b4b12;box-shadow:0 1px 3px #0008;
}
.hsl::-moz-range-track{height:14px;border-radius:7px;background:#0a1c25;border:1px solid var(--line)}
.hsl::-moz-range-thumb{width:15px;height:26px;border-radius:4px;background:#e8b455;border:1px solid #6b4b12}
.hsl-scale{display:flex;justify-content:space-between;font-size:9px;color:#4f7386;
  padding:0 2px;margin-top:-2px;letter-spacing:.5px}
.sheet-btns.row2{flex-direction:row;gap:4px;margin-top:5px}
.sheet-btns.row2 .mini{flex:1}

/* tiller */
.tiller-track{
  position:relative;height:52px;margin-top:6px;border-radius:26px;
  background:radial-gradient(circle at 50% 50%,#123040,#08171f);border:1px solid var(--line);
  touch-action:none;overflow:hidden
}
.tiller-centre{position:absolute;left:50%;top:6px;bottom:6px;width:2px;margin-left:-1px;background:#2c5c74}
.tiller-knob{
  position:absolute;top:5px;bottom:5px;width:42px;left:50%;margin-left:-21px;border-radius:18px;
  background:linear-gradient(#f5d08a,#d99b28);border:1px solid #6b4b12;
  box-shadow:0 2px 6px #0007;transition:margin-left .04s linear
}
.helm-hint{font-size:9px;color:#4f7386;text-align:center;margin-top:3px;letter-spacing:.3px}

/* ---------------- overlays ---------------- */
.overlay{position:fixed;inset:0;z-index:20;background:rgba(3,10,14,.96);display:flex;flex-direction:column}
.sheet{flex:1;display:flex;flex-direction:column;min-height:0;
  padding:calc(10px + var(--safe-t)) 10px calc(10px + var(--safe-b));max-width:900px;margin:0 auto;width:100%}
.sheet.narrow{max-width:460px}
.sheet-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;
  padding-bottom:8px;border-bottom:1px solid var(--line)}
.sub{font-size:12px;color:var(--dim);margin-top:3px}
.tabs{display:flex;gap:5px;margin:9px 0}
.tab{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px 4px;font-size:12px}
.tab.on{background:var(--accent);color:#12222c;font-weight:700;border-color:var(--accent)}
.tabbody{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:20px}

/* cards */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:10px;margin-bottom:8px}
.card.tight{padding:8px 10px}
.card h3{margin:0 0 4px;font-size:14px;display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.card .fee{color:var(--good);font-family:ui-monospace,Menlo,monospace;white-space:nowrap}
.meta{font-size:11.5px;color:var(--dim);line-height:1.55}
.meta b{color:var(--ink);font-weight:600}
.row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:7px}
.btn{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px 12px;font-size:12.5px}
.btn.primary{background:var(--accent);color:#12222c;font-weight:700;border-color:var(--accent)}
.btn.danger{background:#5a1f22;border-color:#8c3a3a;color:#ffd7d7}
.btn[disabled]{opacity:.4}
.tagline{display:inline-block;font-size:10px;letter-spacing:.6px;text-transform:uppercase;
  border:1px solid var(--line);border-radius:20px;padding:2px 7px;color:var(--dim);margin-right:4px}
.tagline.hot{border-color:var(--danger);color:#ffb3b3}
.tagline.ok{border-color:var(--good);color:#bff0c4}
.empty{color:var(--dim);text-align:center;padding:26px 10px;font-size:13px}
.bar{height:7px;border-radius:4px;background:#08171f;border:1px solid var(--line);overflow:hidden;margin-top:5px}
.bar i{display:block;height:100%;background:var(--accent2)}
.bar i.warn{background:var(--accent)} .bar i.bad{background:var(--danger)}
.kv{display:grid;grid-template-columns:1fr auto;gap:1px 10px;font-size:12px}
.kv span:nth-child(even){font-family:ui-monospace,Menlo,monospace;color:var(--ink)}
.kv span:nth-child(odd){color:var(--dim)}
hr.sep{border:none;border-top:1px solid var(--line);margin:9px 0}

/* chart */
#chartCanvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;background:var(--chartpaper)}
.chart-bar{position:absolute;left:0;right:0;top:0;display:flex;gap:5px;flex-wrap:wrap;
  padding:calc(6px + var(--safe-t)) 7px 6px;background:linear-gradient(rgba(3,10,14,.75),transparent)}
.chart-info{position:absolute;left:7px;bottom:calc(7px + var(--safe-b));
  background:rgba(6,18,25,.9);border:1px solid var(--line);border-radius:8px;padding:7px 10px;
  font:11.5px/1.5 ui-monospace,Menlo,monospace;max-width:70%}
.chart-readout{position:absolute;right:7px;bottom:calc(7px + var(--safe-b));
  background:rgba(6,18,25,.9);border:1px solid var(--line);border-radius:8px;padding:7px 10px;
  font:11.5px/1.5 ui-monospace,Menlo,monospace;text-align:right;max-width:45%}

/* handbook */
.book-wrap{flex:1;display:flex;gap:10px;min-height:0;margin-top:9px}
.book-list{width:190px;flex:0 0 auto;overflow-y:auto;border-right:1px solid var(--line);padding-right:8px}
.book-item{padding:7px 8px;border-radius:7px;font-size:12.5px;cursor:pointer;color:var(--dim)}
.book-item.on{background:var(--panel2);color:var(--ink)}
.book-item.locked{opacity:.38;font-style:italic}
.book-page{flex:1;overflow-y:auto;padding-right:4px;font-size:13.5px;line-height:1.62}
.book-page h2{font-size:17px;color:var(--accent);margin:0 0 8px}
.book-page p{margin:0 0 10px}
.book-page .why{border-left:3px solid var(--accent2);padding:6px 10px;background:#0d2029;border-radius:0 8px 8px 0;margin-bottom:10px}
.book-page .why b{color:var(--accent2)}
.book-page svg{display:block;margin:4px 0 12px;background:#0a1a22;border:1px solid var(--line);border-radius:8px;max-width:100%}
@media (max-width:560px){
  .book-wrap{flex-direction:column}
  .book-list{width:auto;display:flex;gap:5px;overflow-x:auto;border-right:none;
    border-bottom:1px solid var(--line);padding:0 0 8px;flex:0 0 auto}
  .book-item{white-space:nowrap;border:1px solid var(--line)}
}

/* ---------------- loading ---------------- */
#loading{position:fixed;inset:0;z-index:40;background:#08141b;display:flex;
  align-items:center;justify-content:center;padding:20px;transition:opacity .5s}
#loading.gone{opacity:0;pointer-events:none}
.load-box{max-width:420px;width:100%;text-align:center}
.load-box h1{font-size:30px;color:var(--accent);letter-spacing:.5px}
.load-sub{font-size:12.5px;color:var(--dim);margin:6px 0 20px}
.load-bar{height:5px;border-radius:3px;background:#0d2531;border:1px solid var(--line);overflow:hidden}
.load-bar i{display:block;height:100%;width:0;background:var(--accent2);transition:width .3s}
.load-msg{font:12px/1.5 ui-monospace,Menlo,monospace;color:var(--ink);margin-top:10px;min-height:18px}
.load-credit{font-size:10px;line-height:1.6;color:#54788a;margin-top:26px}
.load-credit b{color:var(--danger);letter-spacing:1px}

/* ---- trim teaching (coach.js) ---- */
.hsl-wrap{position:relative}
.hsl-band{
  position:absolute;top:6px;height:14px;border-radius:7px;pointer-events:none;
  background:rgba(99,212,113,.16);border:1px solid rgba(99,212,113,.38)
}
.val i.trim{font-style:normal;font-weight:700;letter-spacing:.4px}
.val i.trim.warn{color:#ffd479}
.val i.trim.bad{color:#ff8a80}
#tbTide{cursor:pointer}
