/* Concept: a night pond seen from above. Pixel-art ships on a teal grid, a black hood tile hiding the enemy half. Yellow is used only for ZFROG things: LEDs, hits, the primary action. */
:root{
  --ink:#0a1410;
  --pond:#10231b;
  --pond-2:#16301f;
  --water:#10393a;
  --line:#25423a;
  --text:#e8f0e4;
  --mute:#92ab9d;
  --yellow:#f7d417;
  --yellow-ink:#1a1500;
  --hood:#050807;
  --lily:#6aa84f;
  --danger:#e0685a;
  --f-display:"Silkscreen","Courier New",monospace;
  --f-body:"Bricolage Grotesque",system-ui,sans-serif;
  --f-mono:"DM Mono",ui-monospace,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box}
body{background:var(--ink);color:var(--text);font-family:var(--f-body);font-size:16px;line-height:1.55;
  padding-block:0;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.shell{max-width:1080px;margin:0 auto;padding-block:40px 64px;display:flex;flex-direction:column;gap:56px}
h1,h2,h3{font-family:var(--f-display);font-weight:700;letter-spacing:.02em;margin:0;text-wrap:balance}
h1{font-size:clamp(40px,8vw,76px);line-height:1;color:var(--yellow)}
h2{font-size:clamp(20px,3.4vw,28px);line-height:1.15}
h3{font-size:16px}
p{margin:0}
.eyebrow{font-family:var(--f-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.lede{max-width:62ch;color:var(--text);font-size:18px}
.note{font-size:14px;color:var(--mute);max-width:70ch}
header{display:flex;flex-direction:column;gap:18px}
.tags{display:flex;flex-wrap:wrap;gap:8px}
.tag{font-family:var(--f-mono);font-size:12px;border:1px solid var(--line);padding:4px 10px;color:var(--mute)}
section{display:flex;flex-direction:column;gap:22px;min-width:0}
.sec-head{display:flex;flex-direction:column;gap:6px}

/* controls */
.bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
button{font-family:var(--f-display);font-size:14px;letter-spacing:.04em;cursor:pointer}
.btn{padding:11px 16px;border:2px solid var(--line);background:transparent;color:var(--text)}
.btn:hover:not(:disabled){border-color:var(--mute)}
.btn.primary{background:var(--yellow);border-color:var(--yellow);color:var(--yellow-ink)}
.btn.primary:hover:not(:disabled){background:#ffe53b}
.btn:disabled{opacity:.4;cursor:not-allowed}
:focus-visible{outline:3px solid var(--yellow);outline-offset:2px}
label.sel{display:flex;gap:8px;align-items:center;font-family:var(--f-mono);font-size:13px;color:var(--mute)}
select{background:var(--pond);color:var(--text);border:2px solid var(--line);padding:9px 10px;font-family:var(--f-mono);font-size:13px}

/* arena */
.arena{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px}
@media(max-width:760px){.arena{grid-template-columns:minmax(0,1fr)}}
.side{display:flex;flex-direction:column;gap:10px;min-width:0}
.side-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.side-head span{font-family:var(--f-mono);font-size:12px;color:var(--mute)}
.bwrap{display:grid;grid-template-columns:22px minmax(0,1fr);grid-template-rows:20px auto;max-width:460px;width:100%}
.letters{grid-column:2;display:grid;grid-template-columns:repeat(6,1fr);font-family:var(--f-mono);font-size:12px;color:var(--mute);text-align:center;align-items:end}
.nums{grid-row:2;display:grid;grid-template-rows:repeat(6,1fr);font-family:var(--f-mono);font-size:12px;color:var(--mute);align-items:center}
.board{position:relative;grid-column:2;grid-row:2;aspect-ratio:1;background:var(--water);border:2px solid var(--line);overflow:hidden}
.board.mini{border-width:1px}
.ships{position:absolute;inset:0;pointer-events:none}
.ships canvas{position:absolute;image-rendering:pixelated;height:auto;filter:drop-shadow(0 2px 0 rgba(0,0,0,.35))}
.cells{position:absolute;inset:0;display:grid;grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(6,1fr)}
.cell{position:relative;border:1px solid rgba(232,240,228,.07);background:transparent;padding:0;color:inherit;font:inherit;border-radius:0}
.cell.hood{background:var(--hood) repeating-linear-gradient(45deg,rgba(247,212,23,.06) 0 2px,transparent 2px 9px);border-color:#0f1c16}
.cell.hood.live{cursor:crosshair}
.cell.hood.live:hover{outline:2px solid var(--yellow);outline-offset:-2px}
.cell.fade{transition:background-color .6s,opacity .6s}
.cell.open{background:transparent}
.cell:disabled{cursor:default}
.m{position:absolute;inset:0;pointer-events:none}
.m-hit::before,.m-hit::after{content:"";position:absolute;left:14%;top:44%;width:72%;height:13%;background:var(--yellow);box-shadow:0 0 0 2px var(--hood)}
.m-hit::before{transform:rotate(45deg)}
.m-hit::after{transform:rotate(-45deg)}
.m-miss::before{content:"";position:absolute;left:30%;top:30%;width:40%;height:40%;border:3px solid rgba(232,240,228,.65);border-radius:50%}
.board.mini .m-hit::before,.board.mini .m-hit::after{left:26%;top:46%;width:48%;height:8%;box-shadow:0 0 0 1px var(--hood)}
.m-pop{animation:pop .45s ease-out}
@keyframes pop{from{transform:scale(1.9);opacity:.2}to{transform:scale(1);opacity:1}}
.cell.last{box-shadow:inset 0 0 0 2px var(--text)}

/* flow strip */
.flow{display:flex;flex-direction:column;gap:10px;border:2px solid var(--line);background:var(--pond);padding:16px}
.flow-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:baseline}
#status{font-family:var(--f-display);font-size:16px}
#score{font-family:var(--f-mono);font-size:13px;color:var(--mute)}
.steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
@media(max-width:560px){.steps{grid-template-columns:minmax(0,1fr)}}
.step{border:1px solid var(--line);padding:10px 12px;font-size:14px;color:var(--mute);display:flex;flex-direction:column;gap:2px}
.step b{font-family:var(--f-mono);font-weight:500;font-size:12px;letter-spacing:.08em;text-transform:uppercase}
.step.on{border-color:var(--yellow);color:var(--text);background:rgba(247,212,23,.08)}
.step.done{color:var(--text);border-color:var(--lily)}
#cipher{font-family:var(--f-mono);font-size:12px;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:1.4em}
.sim{font-size:13px;color:var(--mute)}

/* result card */
#endzone{display:none;gap:22px;align-items:flex-start;flex-wrap:wrap}
#endzone.show{display:flex}
.endcopy{flex:1 1 260px;display:flex;flex-direction:column;gap:12px;min-width:0}

/* fleet roster */
.roster{display:flex;flex-direction:column;border-top:1px solid var(--line)}
.row{display:grid;grid-template-columns:minmax(0,260px) minmax(0,1fr);gap:22px;align-items:center;padding:20px 0;border-bottom:1px solid var(--line)}
@media(max-width:620px){.row{grid-template-columns:minmax(0,1fr);gap:12px}}
.stage{background:var(--water);border:2px solid var(--line);padding:14px;display:flex;align-items:center;min-height:84px}
.stage canvas{image-rendering:pixelated;max-width:100%;height:auto}
.row h3{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.row h3 small{font-family:var(--f-mono);font-size:12px;font-weight:400;color:var(--mute)}
.row p{color:var(--mute);margin-top:6px;max-width:56ch}

/* chain view */
.chain{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border:2px solid var(--line)}
@media(max-width:700px){.chain{grid-template-columns:minmax(0,1fr)}}
.col{padding:20px;display:flex;flex-direction:column;gap:10px}
.col+.col{border-left:2px solid var(--line)}
@media(max-width:700px){.col+.col{border-left:0;border-top:2px solid var(--line)}}
.col.enc{background:var(--hood)}
.col h3{display:flex;gap:10px;align-items:center}
.col ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px}
.dot{width:12px;height:12px;display:inline-block;background:var(--yellow)}
.dot.pub{background:transparent;border:2px solid var(--mute)}

/* legend + swatches */
.legend{display:flex;flex-wrap:wrap;gap:22px}
.leg{display:flex;gap:12px;align-items:center}
.leg .cell{width:56px;height:56px;flex:none;background:var(--water);border:1px solid rgba(232,240,228,.12)}
.leg .cell.hood{background:var(--hood) repeating-linear-gradient(45deg,rgba(247,212,23,.06) 0 2px,transparent 2px 9px)}
.sw{display:flex;flex-wrap:wrap;gap:10px}
.sw div{width:104px;font-family:var(--f-mono);font-size:11px;color:var(--mute)}
.sw i{display:block;height:44px;border:1px solid var(--line);margin-bottom:4px}

/* share card */
.cardwrap{display:flex;flex-wrap:wrap;gap:28px;align-items:flex-start}
.card{width:100%;max-width:420px;background:var(--pond);border:2px solid var(--yellow);padding:18px;display:flex;flex-direction:column;gap:14px}
.card-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.card-top b{font-family:var(--f-display);font-size:18px;color:var(--yellow)}
.card-top span{font-family:var(--f-mono);font-size:11px;color:var(--mute)}
.card .stats{display:flex;gap:18px;flex-wrap:wrap;font-family:var(--f-mono);font-size:13px}
.card .stats b{font-size:20px;font-weight:500;display:block;color:var(--text)}
.card .stats span{color:var(--mute)}
.card q{font-family:var(--f-display);font-size:15px;quotes:none;line-height:1.35}
.card small{font-size:11px;color:var(--mute);line-height:1.4}
.statusline{border-top:1px solid var(--line);padding-top:20px;font-size:14px;color:var(--mute);display:flex;flex-direction:column;gap:6px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* site additions */
body{min-height:100vh}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.brand{font-family:var(--f-display);font-weight:700;font-size:22px;color:var(--yellow)}
.net{font-family:var(--f-mono);font-size:12px;color:var(--mute)}
.panel{border:2px solid var(--line);background:var(--pond);padding:18px;display:flex;flex-direction:column;gap:14px;min-width:0}
.panel h3{margin:0}
.glist{display:flex;flex-direction:column;gap:8px}
.grow{display:flex;justify-content:space-between;align-items:center;gap:10px;border:1px solid var(--line);padding:8px 12px;font-family:var(--f-mono);font-size:13px;flex-wrap:wrap}
.log{display:flex;flex-direction:column;gap:4px;font-family:var(--f-mono);font-size:12px;color:var(--mute);max-height:220px;overflow:auto}
.log a{color:var(--yellow)}
.err{color:var(--danger);font-family:var(--f-mono);font-size:13px}
.row2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:22px}
@media(max-width:760px){.row2{grid-template-columns:minmax(0,1fr)}}
.wallet{font-family:var(--f-mono);font-size:12px}
.cell.yours:disabled{cursor:default}
a{color:var(--yellow)}

[hidden]{display:none!important}
