.landing{display:flex;flex-direction:column;min-height:100vh;background:var(--bw-abyss);color:var(--bw-ink)}.landing-hero{position:relative;min-height:760px;overflow:hidden;background:linear-gradient(180deg,var(--bw-ocean-deep) 0%,var(--bw-abyss) 100%)}.landing-hero__canvas{position:absolute;top:0;right:0;bottom:0;left:0}.landing-hero__canvas canvas{display:block;width:100%;height:100%}.landing-hero__title-block{position:absolute;z-index:1;left:64px;top:150px;max-width:32rem}.landing-hero__title{display:flex;flex-direction:column;margin:0;font:var(--bw-t-hero);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--bw-ink)}.landing-hero__tagline{margin:var(--bw-s3) 0 0;font:var(--bw-t-body);color:var(--bw-ink-2);max-width:28rem}.landing-hero__watch-link{display:inline-block;margin-top:var(--bw-s5);text-decoration:none}.landing-panel{position:absolute;z-index:1;right:64px;top:84px;width:400px;padding:var(--bw-s5);background:var(--bw-panel);border:var(--bw-rule) solid var(--bw-line);border-radius:var(--bw-radius)}.landing-panel__section+.landing-panel__section{margin-top:var(--bw-s5);padding-top:var(--bw-s5);border-top:var(--bw-rule) solid var(--bw-line)}.landing-panel__title{margin:0 0 var(--bw-s3);font:var(--bw-t-label);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--bw-ink)}.landing-field{display:block;margin-bottom:var(--bw-s3);font-family:var(--bw-font-body)}.landing-field__label{display:block;margin-bottom:var(--bw-s1);font:var(--bw-t-small);letter-spacing:.04em;text-transform:uppercase;color:var(--bw-ink-3)}.landing-field__input,.landing-field__select{width:100%;box-sizing:border-box;padding:var(--bw-s2) var(--bw-s3);font:var(--bw-t-body);color:var(--bw-ink);background:var(--bw-abyss);border:var(--bw-rule) solid var(--bw-line);border-radius:var(--bw-radius)}.landing-field__input:focus-visible,.landing-field__select:focus-visible{outline:3px solid var(--bw-you);outline-offset:2px}.landing-cta{width:100%;margin-top:var(--bw-s2);padding:var(--bw-s3) var(--bw-s4);font:var(--bw-t-label);font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--bw-abyss);background:var(--bw-you);border:none;border-radius:var(--bw-radius);cursor:pointer}.landing-cta:disabled{opacity:.6;cursor:not-allowed}.landing-cta:focus-visible{outline:3px solid var(--bw-you);outline-offset:2px}.landing-secondary{padding:var(--bw-s2) var(--bw-s3);font:var(--bw-t-body);color:var(--bw-ink);background:transparent;border:var(--bw-rule) solid var(--bw-line);border-radius:var(--bw-radius);cursor:pointer}.landing-secondary:focus-visible{outline:3px solid var(--bw-you);outline-offset:2px}.landing-invite-link{display:block;margin:var(--bw-s2) 0;font:var(--bw-t-small);color:var(--bw-you);word-break:break-all}.landing-footer{padding:var(--bw-s5) var(--bw-s6);background:var(--bw-panel);border-top:var(--bw-rule-state) solid var(--bw-line)}.landing-footer__title{margin:0 0 var(--bw-s2);font:var(--bw-t-label);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--bw-ink)}.landing-footer__desc{margin:0 0 var(--bw-s3);font:var(--bw-t-body);color:var(--bw-ink-2)}.landing-footer__links{display:flex;gap:var(--bw-s4);margin:0;padding:0;list-style:none;font:var(--bw-t-mono)}.landing-footer__links a{color:var(--bw-ink-2)}.landing-error{margin:0;padding:var(--bw-s3) var(--bw-s6);font-family:var(--bw-font-body);color:var(--bw-error)}[data-skin=night-watch] .comms-panel{display:flex;flex-direction:column;flex-shrink:0;gap:6px;background:var(--bw-panel);border-top:var(--bw-rule) solid var(--bw-ink);padding:14px var(--bw-s5);color:var(--bw-ink)}[data-skin=night-watch] .comms-panel--empty{border-top:var(--bw-rule) dashed var(--bw-ink-dim)}[data-skin=night-watch] .comms-panel__header{display:flex;justify-content:space-between;align-items:baseline}[data-skin=night-watch] .comms-panel [data-comms-speaker]{font:600 14px var(--bw-font-display);letter-spacing:.22em}[data-skin=night-watch] .comms-panel__hint{font:400 10.5px var(--bw-font-mono);color:var(--bw-ink-3)}[data-skin=night-watch] .comms-panel [data-comms-history]{max-height:111px;overflow-y:auto}[data-skin=night-watch] .comms-panel [data-comms-line=history]{font-family:var(--bw-font-body);font-size:13px;line-height:1.5;color:var(--bw-ink-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-skin=night-watch] .comms-panel [data-comms-line=latest]{font-family:var(--bw-font-body);font-size:16px;line-height:1.5;color:var(--bw-ink)}[data-skin=night-watch] .comms-panel [data-comms-idle]{font:400 13px var(--bw-font-mono);color:var(--bw-ink-3);padding:10px 0}[data-skin=night-watch] .comms-panel__collapsed{display:flex;align-items:baseline;gap:14px}[data-skin=night-watch] .comms-panel__summary-bar{flex:1;display:flex;align-items:baseline;gap:14px;background:var(--bw-panel);border-top:var(--bw-rule) solid var(--bw-ink);padding:var(--bw-s3) var(--bw-s5);cursor:pointer;color:inherit;font:inherit;text-align:left}[data-skin=night-watch] .comms-panel__summary-text{flex:1;min-width:0;font-size:13px;color:var(--bw-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-skin=night-watch] .comms-panel__unread{font:var(--bw-t-mono);color:var(--bw-ink-3)}[data-skin=night-watch] .comms-panel__sound-chip{font:500 11px var(--bw-font-mono);letter-spacing:.06em;color:var(--bw-ink-2);border:1px dashed rgba(230,237,240,.6);background:transparent;padding:var(--bw-s3) var(--bw-s3);cursor:pointer;white-space:nowrap}[data-skin=night-watch] .comms-panel__mute-button{align-self:flex-start;font:500 11px var(--bw-font-mono);letter-spacing:.06em;color:var(--bw-ink-2);border:1px dashed rgba(230,237,240,.6);background:transparent;padding:var(--bw-s3) var(--bw-s3);cursor:pointer;white-space:nowrap}[data-skin=night-watch] .comms-panel--empty .comms-panel__mute-button{padding:var(--bw-s1) var(--bw-s3)}.cutscene{position:absolute;top:0;bottom:0;width:50%;overflow:hidden;pointer-events:none}.cutscene--own{left:0}.cutscene--radar{left:50%}.cutscene__media{display:block;width:100%;height:100%;object-fit:cover}.cutscene__skip{position:absolute;right:var(--bw-s3);bottom:var(--bw-s3);pointer-events:auto;background:var(--bw-panel);color:var(--bw-ink);border:1px solid rgb(230 237 240 / .5);font:var(--bw-t-mono);letter-spacing:.06em;padding:var(--bw-s2) var(--bw-s3);cursor:pointer}.cutscene__skip:focus-visible{outline:2px solid var(--bw-ink);outline-offset:3px}[data-skin=night-watch] .game-over{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:var(--bw-s6)}[data-skin=night-watch] .game-over__panel{display:flex;flex-direction:column;align-items:center;gap:var(--bw-s5);background:var(--bw-panel);border-top:var(--bw-rule-state) solid var(--bw-ink);padding:var(--bw-s8) var(--bw-s7);text-align:center}[data-skin=night-watch] .game-over__panel--victory{border-top-color:var(--bw-you);width:min(720px,100%)}[data-skin=night-watch] .game-over__panel--defeat{border-top-color:var(--bw-them);width:min(480px,100%);padding:var(--bw-s6) var(--bw-s5)}[data-skin=night-watch] .game-over__status{margin:0;font:var(--bw-t-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--bw-ink-3)}[data-skin=night-watch] .game-over__headline{margin:0;font-family:var(--bw-font-display);font-weight:700;line-height:.85}[data-skin=night-watch] .game-over__headline--victory{font-size:112px;color:var(--bw-you)}[data-skin=night-watch] .game-over__headline--defeat{font-size:56px;color:var(--bw-ink)}[data-skin=night-watch] .game-over__quote{margin:0;max-width:44ch;font:400 18px/1.5 var(--bw-font-body);color:var(--bw-ink-2)}[data-skin=night-watch] .game-over__actions{display:flex;gap:var(--bw-s4);margin:0}[data-skin=night-watch] .game-over__action{font:var(--bw-t-label);letter-spacing:.22em;padding:var(--bw-s3) var(--bw-s6);cursor:pointer;border:1px solid var(--bw-ink-3);background:transparent;color:var(--bw-ink-2)}[data-skin=night-watch] .game-over__action--primary{border-color:var(--bw-you);background:var(--bw-you);color:var(--bw-abyss)}[data-skin=night-watch] .game-over__action--primary:focus-visible{outline:var(--bw-rule-state) solid var(--bw-ink);outline-offset:2px}.match-log{box-sizing:border-box;width:min(600px,100%);margin:var(--bw-s6) auto 0;padding:14px var(--bw-s5);background:var(--bw-panel);border-top:var(--bw-rule) solid var(--bw-ink);display:flex;flex-direction:column;gap:6px}.match-log__header{display:flex;justify-content:space-between;align-items:baseline}.match-log__title{margin:0;font:600 14px var(--bw-font-display);letter-spacing:.22em;color:var(--bw-ink)}.match-log__count{font:400 10.5px var(--bw-font-mono);color:var(--bw-ink-3)}.match-log__line{margin:0;font:400 13px/1.5 var(--bw-font-body);color:var(--bw-ink-dim)}.match-log__line--newest{color:var(--bw-ink-2)}.place-fleet{width:100%;max-width:340px;box-sizing:border-box;display:flex;flex-direction:column;flex-shrink:0;gap:var(--bw-s3);color:var(--bw-ink);font-family:var(--bw-font-body)}.place-fleet__panel{background:var(--bw-panel);border-top:var(--bw-rule-state) solid var(--bw-ink);padding:var(--bw-s4) var(--bw-s5);display:flex;flex-direction:column;gap:var(--bw-s3)}.place-fleet__panel-title{font:var(--bw-t-label);letter-spacing:.22em;margin:0}.place-fleet__ships{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;font:500 12px var(--bw-font-mono);letter-spacing:.04em;max-height:180px;overflow-y:auto}.place-fleet__ship-row{display:flex;align-items:center;gap:var(--bw-s3);padding:9px 10px}.place-fleet__ship-row--placed{color:var(--bw-ink-3)}.place-fleet__ship-row--selected{padding:8px 9px;border:2px solid var(--bw-you);background:#ffc46e14}.place-fleet__ship-select{flex:1;touch-action:none;text-align:left;background:none;border:none;padding:0;font:inherit;letter-spacing:inherit;color:inherit;cursor:pointer}.place-fleet__ship-row--placed .place-fleet__ship-select{text-decoration:line-through}.place-fleet__ship-row--selected .place-fleet__ship-select{color:var(--bw-ink)}.place-fleet__ship-select:disabled{cursor:default}.place-fleet__ship-pips{display:flex;gap:2px}.place-fleet__ship-pips i{display:block;width:10px;height:6px;background:var(--bw-ink-dim);font-style:normal}.place-fleet__ship-row:not(.place-fleet__ship-row--placed) .place-fleet__ship-pips i{background:var(--bw-ink)}.place-fleet__ship-tag{width:52px;text-align:right}.place-fleet__controls{display:flex;flex-direction:column;gap:var(--bw-s2)}.place-fleet__place{border:1px solid var(--bw-ink);background:none;color:var(--bw-ink);font:700 15px var(--bw-font-display);letter-spacing:.16em;text-align:center;padding:11px;cursor:pointer}.place-fleet__place:disabled{color:var(--bw-ink-3);border-color:#e6edf059;cursor:default}.place-fleet__two-up{display:grid;grid-template-columns:1fr 1fr;gap:var(--bw-s2)}.place-fleet__two-up button{border:1px solid rgb(230 237 240 / .5);background:none;color:var(--bw-ink);font:700 15px/1 var(--bw-font-display);letter-spacing:.16em;text-align:center;padding:11px;cursor:pointer}.place-fleet__ready{border:2px dashed rgb(230 237 240 / .45);color:var(--bw-ink-3);font:700 17px/1 var(--bw-font-display);letter-spacing:.18em;text-align:center;padding:13px}.place-fleet__ready-hint{font:var(--bw-t-mono);color:var(--bw-ink-3);margin:var(--bw-s2) 0 0}.place-fleet__done{font:var(--bw-t-label);letter-spacing:.1em;text-align:center;margin:0}.place-fleet__reject{background:var(--bw-panel);border-top:var(--bw-rule-state) solid var(--bw-error);padding:var(--bw-s3) var(--bw-s4);display:flex;flex-direction:column;gap:6px}.place-fleet__reject-eyebrow{font:400 10.5px var(--bw-font-mono);color:var(--bw-ink-3);letter-spacing:.06em;margin:0}.place-fleet__reject-headline{font:600 16px var(--bw-font-display);letter-spacing:.14em;margin:0}.place-fleet__reject-reason{font-size:13px;line-height:1.45;color:var(--bw-ink-2);margin:0}body{margin:0}.game-page{display:flex;flex-direction:column;height:100dvh;background:var(--bw-abyss);color:var(--bw-ink)}.game-page__board{flex:1 1 0;min-height:220px;position:relative}.game-page--playing{--bw-playing-topbar: 97.59375px;--bw-playing-comms: 210px;--bw-playing-below: 233.59375px }.game-page--playing>.game-page__topbar{box-sizing:border-box;height:var(--bw-playing-topbar);overflow:hidden}.game-page--playing>.comms-panel{box-sizing:border-box;height:var(--bw-playing-comms);overflow:hidden}.game-page--playing>.game-page__board{flex:0 0 calc(100dvh - var(--bw-playing-topbar) - var(--bw-s4) - var(--bw-playing-comms) - var(--bw-playing-below))}.game-page--playing>.game-page__fleet-status{flex:1 1 0;min-height:0;overflow-y:auto}.game-page__board--spectate{flex:0 0 auto;min-height:0;aspect-ratio:1280 / 420}@media (min-width: 900px) and (min-aspect-ratio: 6/5){.game-page--placing{display:grid;grid-template-columns:340px minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}.game-page--placing>*{grid-column:1 / -1}.game-page--placing>.game-page__board{grid-column:2;grid-row:3;min-height:0}.game-page--placing>.place-fleet{grid-column:1;grid-row:3;overflow-y:auto}}@media (min-width: 900px) and (min-aspect-ratio: 6/5) and (max-height: 719px){.game-page--placing>.place-fleet{grid-row:2 / 4}.game-page--placing>.comms-panel{grid-column:2;grid-row:2}}@media (min-width: 900px) and (min-aspect-ratio: 6/5) and (min-height: 720px){.game-page--placing{grid-template-rows:auto minmax(0,1fr) auto}.game-page--placing>.game-page__board{grid-row:2 / 4}.game-page--placing>.place-fleet{grid-row:2}.game-page--placing>.comms-panel{grid-column:1;grid-row:3}}.game-page__alert{position:fixed;top:76px;left:50%;transform:translate(-50%);z-index:5;max-width:min(560px,calc(100vw - 2 * var(--bw-s4)));margin:0;padding:var(--bw-s1) var(--bw-s3);background:var(--bw-panel);border:1px solid var(--bw-error);color:var(--bw-ink);font:var(--bw-t-small);text-align:center;pointer-events:none}.game-page__topbar{flex-shrink:0;position:relative;padding-top:var(--bw-rule-state);margin-bottom:var(--bw-s4)}.game-page__rule{position:absolute;top:0;left:0;right:0;height:var(--bw-rule-state);background:var(--bw-ink);transition:background var(--bw-d-turn) ease}.game-page__topbar--you .game-page__rule{background:var(--bw-you)}.game-page__topbar--them .game-page__rule{background:var(--bw-them)}.game-page__topbar--lost .game-page__rule{background:none;border-top:var(--bw-rule-state) dashed var(--bw-ink-dim)}.game-page__banner{display:flex;align-items:center;justify-content:space-between;gap:var(--bw-s5);padding:var(--bw-s5) var(--bw-s4) 0}.game-page__title-block{display:flex;flex-direction:column;gap:var(--bw-s1)}.game-page__title{margin:0;font:var(--bw-t-label);letter-spacing:.22em;color:var(--bw-ink)}.game-page__subtitle{margin:0;font:var(--bw-t-mono);letter-spacing:.06em;color:var(--bw-ink-3)}.game-page__turn-pill{font:700 30px/1 var(--bw-font-display);letter-spacing:.14em;text-align:center;transition:background var(--bw-d-turn) ease,border-color var(--bw-d-turn) ease,color var(--bw-d-turn) ease}.game-page__turn-pill--neutral{padding:8px 24px 7px;border:2px solid var(--bw-ink);color:var(--bw-ink)}.game-page__turn-pill--you{padding:10px 26px 9px;background:var(--bw-you);color:#120c04}.game-page__turn-pill--them{padding:10px 26px 9px;border:2px solid var(--bw-them);color:var(--bw-them)}.game-page__turn-pill--lost{padding:10px 26px 9px;border:2px dashed var(--bw-ink-dim);color:var(--bw-ink-2);margin-block:-2px}@media (prefers-reduced-motion: reduce){.game-page__turn-pill--lost,.game-page__topbar--lost .game-page__rule{transition:none}}.game-page__chips{display:flex;flex-direction:column;align-items:flex-end;gap:var(--bw-s1)}.game-page__chip{font:var(--bw-t-mono);letter-spacing:.06em;color:var(--bw-ink-3);background:none;border:none;padding:0;cursor:pointer}.game-page__turn-subtext{margin:var(--bw-s2) 0 0;padding:0 var(--bw-s4);font:var(--bw-t-mono);letter-spacing:.06em;color:var(--bw-ink-dim)}.game-page__topbar--lost .game-page__turn-subtext{color:var(--bw-ink-3)}.game-page__retry{margin-left:var(--bw-s3);padding:2px var(--bw-s2);border:1px solid var(--bw-ink-dim);line-height:1}.game-page__retry:focus-visible{outline:2px solid var(--bw-ink);outline-offset:2px}.game-page__forfeit{flex-shrink:0;position:relative;padding:0 var(--bw-s4)}.game-page__below-min{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);white-space:nowrap;padding:var(--bw-s1) var(--bw-s3);border:1px solid var(--bw-line);color:var(--bw-ink);font:var(--bw-t-small);pointer-events:none}.game-page__forfeit-button{padding:var(--bw-s2) var(--bw-s3);font:var(--bw-t-body);color:var(--bw-ink);background:transparent;border:var(--bw-rule) solid var(--bw-line);border-radius:var(--bw-radius);cursor:pointer}.game-page__forfeit-button:focus-visible{outline:3px solid var(--bw-you);outline-offset:2px}.game-page__fleet-status{flex-shrink:0;display:flex;flex-direction:column;gap:var(--bw-s4);margin-top:var(--bw-s6);padding:0 var(--bw-s4)}.game-page__fleet-status-group{display:flex;flex-direction:column;gap:var(--bw-s2)}.game-page__fleet-label{margin:0;font:var(--bw-t-label);letter-spacing:.22em;color:var(--bw-ink-3)}.game-page__fleet-columns{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;font:500 10.5px IBM Plex Mono;color:#c8d6dc;letter-spacing:.04em}.game-page__fleet-column{display:flex;flex-direction:column;gap:4px}.game-page__fleet-name{margin:0;text-transform:uppercase}.game-page__fleet-column--sunk .game-page__fleet-name{text-decoration:line-through;border:1px solid var(--bw-hit);color:var(--bw-hit);padding:2px 4px}.game-page__fleet-pips{display:flex;gap:2px}.game-page__pip{width:10px;height:6px;background:var(--bw-ink-dim)}.game-page__pip--hit{background:var(--bw-hit)}.game-page__fleet-sunk-label{margin:0;color:var(--bw-hit)}.game-page__shot-stats{margin:0;font:var(--bw-t-mono);letter-spacing:.06em;color:var(--bw-ink-3)}.game-page__spectate-cta{display:inline-block;font:700 13px/1 var(--bw-font-display);letter-spacing:.14em;text-decoration:none;padding:8px 18px 7px;background:var(--bw-you);color:#120c04}.game-page__spectate-fleets{display:flex;flex:1 1 auto;gap:var(--bw-s5);padding:0 var(--bw-s4) var(--bw-s5);overflow:auto}.game-page__spectate-fleet{flex:1 1 0;display:flex;flex-direction:column;gap:var(--bw-s2)}.game-page__spectate-captain{margin:0;font:var(--bw-t-label);letter-spacing:.14em;color:var(--bw-ink)}.game-page__spectate-ships{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font:500 10.5px IBM Plex Mono;color:#c8d6dc;letter-spacing:.04em}[data-skin=night-watch]{--bw-abyss: #05090d;--bw-ocean-deep: #081620;--bw-ocean-mid: #0d2c3c;--bw-ocean-crest: #2b6f82;--bw-panel: rgb(5 10 14 / .9);--bw-ink: #e6edf0;--bw-ink-2: #c8d6dc;--bw-ink-3: #9fb3bd;--bw-ink-dim: #8fa3ad;--bw-line: rgb(140 215 235 / .4);--bw-fog: rgb(4 12 18 / .55);--bw-you: oklch(.8 .14 70);--bw-them: oklch(.8 .1 215);--bw-hit: oklch(.7 .19 42);--bw-sunk-fill: #1c0c07;--bw-error: oklch(.68 .2 25);--bw-hull-hi: #71838d;--bw-hull-lo: #3a4851;--bw-font-display: "Barlow Condensed", sans-serif;--bw-font-body: "IBM Plex Sans", sans-serif;--bw-font-mono: "IBM Plex Mono", monospace;--bw-t-hero: 700 148px/.84 var(--bw-font-display);--bw-t-banner: 700 30px/1 var(--bw-font-display);--bw-t-label: 600 15px/1 var(--bw-font-display);--bw-t-body: 400 16px/1.5 var(--bw-font-body);--bw-t-small: 400 13px/1.5 var(--bw-font-body);--bw-t-mono: 400 11px/1.6 var(--bw-font-mono);--bw-s1: 4px;--bw-s2: 8px;--bw-s3: 12px;--bw-s4: 16px;--bw-s5: 20px;--bw-s6: 24px;--bw-s7: 28px;--bw-s8: 40px;--bw-cell: 38px;--bw-radius: 0;--bw-rule: 2px;--bw-rule-state: 3px;--bw-markers: "shape";--bw-turn-layout: "equal";--bw-d-lock: 80ms;--bw-d-arc: .6s;--bw-d-splash: .7s;--bw-d-sink: 2s;--bw-d-turn: .2s;--bw-d-type: 28ms;--bw-d-hit-scale: .16s}
