:root{--notebook-bg:#f5f0e8;--notebook-paper:#faf8f3;--notebook-line:#a8c0d8;--notebook-ink:#2c3e50;--notebook-ink-light:#5a7a96;--notebook-border:#5a7a96;--notebook-border-light:#c5d5e5;--notebook-accent:#27ae60;--notebook-accent-bg:#d5f5e3;--notebook-error:#c0392b;--notebook-error-bg:#fadbd8;--notebook-success:#27ae60;--notebook-success-bg:#d5f5e3;--notebook-shadow:2px 2px 0 var(--notebook-border)}body{font-family:Amatic SC,cursive,sans-serif;font-weight:700}.page-shell{gap:12px;max-width:1200px;min-height:100vh;margin:0 auto;padding:16px;display:grid}.hero-panel{border:2px solid var(--notebook-border);background:#faf8f3e6;border-radius:6px;gap:12px;padding:16px;display:grid;position:relative}.paper-clip{width:24px;height:60px;color:var(--notebook-border);opacity:.6;pointer-events:none;position:absolute;top:-12px;right:20px}.corner-fold{pointer-events:none;width:40px;height:40px;position:absolute;bottom:0;right:0}.corner-fold:before{content:"";border-style:solid;border-width:0 0 40px 40px;border-color:transparent transparent var(--notebook-border-light) transparent;width:0;height:0;position:absolute;bottom:0;right:0}.corner-fold:after{content:"";border-style:solid;border-width:0 0 36px 36px;border-color:transparent transparent var(--notebook-paper) transparent;width:0;height:0;position:absolute;bottom:2px;right:2px}.eyebrow{text-transform:uppercase;letter-spacing:.2em;color:var(--notebook-ink-light);margin:0 0 4px;font-size:1rem}h1,h2,p{margin:0}h1{color:var(--notebook-ink);font-size:clamp(2rem,4vw,3rem);line-height:1.1}h2{color:var(--notebook-ink);font-size:1.5rem}.hero-copy{max-width:720px;color:var(--notebook-ink-light);font-size:1.2rem;line-height:1.4}.muted-copy{color:var(--notebook-ink-light);font-size:1.1rem;line-height:1.4}.lobby-card,.ruleset-preview{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:6px;gap:4px;padding:12px;display:grid}.ruleset-preview strong,.lobby-code{letter-spacing:.1em;color:var(--notebook-ink);font-size:clamp(1.4rem,4vw,2rem)}.ruleset-preview span,.lobby-card__status,.lobby-card__players,.lobby-card__meta{color:var(--notebook-ink-light);font-size:1.1rem}.ruleset-preview--compact{grid-template-columns:auto 1fr;justify-self:start;align-items:end;gap:2px 18px;width:min(100%,360px);padding:10px 14px 12px}.ruleset-preview--compact p{grid-column:1/-1}.ruleset-preview--compact strong{line-height:1}.ruleset-preview--compact span{align-self:center}.lobby-card__label{color:var(--notebook-ink-light);text-transform:uppercase;letter-spacing:.15em;font-size:1rem}.ruleset-grid{color:var(--notebook-ink);gap:4px;font-size:1.1rem;display:grid}.forms-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;display:grid}.panel{border:2px solid var(--notebook-border);background:#faf8f3e6;border-radius:6px;gap:10px;padding:14px;display:grid}.panel--action-card{min-height:250px}.panel--action-card>.notebook-button:first-of-type{margin-top:auto}.panel--open-lobbies{min-height:190px}label{color:var(--notebook-ink);gap:4px;font-size:1.2rem;font-weight:700;display:grid}input{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);width:100%;color:var(--notebook-ink);border-radius:4px;padding:8px 10px;font-family:inherit;font-size:1.3rem}input:focus{outline:2px solid var(--notebook-border);outline-offset:1px}input::placeholder{color:var(--notebook-ink-light);opacity:.6}.notebook-button{border:2px solid var(--notebook-border);background:var(--notebook-paper);color:var(--notebook-ink);cursor:pointer;border-radius:4px;padding:8px 14px;font-family:inherit;font-size:1.2rem;font-weight:700;transition:all .15s}.notebook-button--danger{background:var(--notebook-error);color:var(--notebook-paper);border-color:var(--notebook-error)}.notebook-button--danger:hover:not(:disabled){background:#a93226}.notebook-button--secondary{color:var(--notebook-ink-light);border-color:var(--notebook-border-light);background:0 0}.notebook-button--secondary:hover:not(:disabled){color:var(--notebook-ink);background:#faf8f380}.error-banner{border:2px solid var(--notebook-error);background:var(--notebook-error-bg);color:var(--notebook-error);text-align:center;border-radius:4px;padding:8px 12px;font-size:1.2rem}.success-banner{border:2px solid var(--notebook-success);background:var(--notebook-success-bg);color:var(--notebook-success);text-align:center;border-radius:4px;padding:8px 12px;font-size:1.2rem}.connection-badge{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);width:fit-content;color:var(--notebook-ink-light);border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:1.1rem;display:inline-flex}.connection-row{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.connection-badge--fixed{white-space:nowrap;width:250px;min-height:30px;overflow:hidden}.connection-badge--fixed svg{flex:none}.notification-stack{z-index:20;gap:6px;display:grid;position:fixed;bottom:16px;right:16px}.notification-pill{border:2px solid var(--notebook-border);background:var(--notebook-paper);color:var(--notebook-ink);box-shadow:var(--notebook-shadow);border-radius:4px;margin:0;padding:8px 12px;font-size:1.2rem}.settings-field{gap:2px;display:grid}.settings-field label{color:var(--notebook-ink-light);text-transform:uppercase;letter-spacing:.1em;font-size:1rem}.settings-value{color:var(--notebook-ink);margin:0;font-size:1.4rem}.settings-value--muted{color:var(--notebook-ink-light);font-size:1.2rem}.modal-overlay{z-index:100;background:#f5f0e8d9;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-content{background:var(--notebook-paper);border:2px solid var(--notebook-border);width:90%;max-width:400px;box-shadow:var(--notebook-shadow);border-radius:6px;gap:10px;padding:20px;display:grid;position:relative}.modal-content p{font-size:1.2rem;line-height:1.4}.modal-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}@keyframes pulse-text{0%,to{opacity:1}50%{opacity:.6}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-shake{animation:.4s ease-in-out shake}.animate-pulse-text{animation:2s ease-in-out infinite pulse-text}.animate-fade-in-up{animation:.3s ease-out forwards fade-in-up}@media (width<=960px){.page-shell,.hero-panel,.panel{padding:12px}.forms-grid,.game-grid,.game-grid--battle{grid-template-columns:1fr}}@media (width<=720px){.notification-stack{bottom:12px;left:12px;right:12px}.modal-actions{flex-direction:column}h1{font-size:1.6rem}.connection-row{display:grid}.connection-badge--fixed{width:100%}}@media (width<=600px){.page-shell{gap:8px;padding:8px}.hero-panel,.panel{padding:10px}h1{font-size:1.8rem}h2{font-size:1.3rem}input{padding:6px 8px;font-size:1.1rem}.notebook-button{padding:6px 12px;font-size:1.1rem}.ruleset-preview strong,.lobby-code{font-size:1.4rem}.ruleset-preview--compact{grid-template-columns:1fr;width:100%}.panel--action-card,.panel--open-lobbies{min-height:0}.hero-copy,.muted-copy,.error-banner,.success-banner{font-size:1rem}}.auth-page{--auth-readable-font:"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-family:var(--auth-readable-font);align-content:start;gap:14px;padding-top:clamp(12px,2.4vw,28px);font-weight:500}.auth-page h1,.auth-page h2{letter-spacing:.03em;font-family:Amatic SC,cursive,sans-serif;font-weight:700}.auth-page__hero{background:var(--notebook-paper);grid-template-columns:minmax(0,1fr) minmax(260px,380px);align-items:center;gap:clamp(14px,3vw,28px);min-height:auto;padding:clamp(16px,3vw,28px)}.auth-page__hero h1{font-size:clamp(2.3rem,5.4vw,4.2rem)}.auth-page__hero .hero-copy{color:#3d5368;max-width:760px;font-family:var(--auth-readable-font);font-size:clamp(.95rem,1.7vw,1.05rem);font-weight:500;line-height:1.55}.auth-page .eyebrow{color:#4d6b86;font-family:var(--auth-readable-font);letter-spacing:.16em;font-size:.78rem;font-weight:700}.auth-page__hint{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:6px;gap:8px;padding:14px 16px 16px;display:grid}.auth-page__hint span{color:#4d6b86;letter-spacing:.14em;text-transform:uppercase;font-size:.78rem;font-weight:700}.auth-page__hint strong{color:var(--notebook-ink);letter-spacing:.02em;font-size:clamp(1.45rem,2.5vw,2rem);font-weight:600;line-height:1.25}.auth-page__hint p{color:#3d5368;font-size:.95rem;font-weight:500;line-height:1.5}.auth-page__forms{grid-template-columns:minmax(0,1.05fr) minmax(280px,.95fr);align-items:start;gap:14px}.auth-page__form{background:var(--notebook-paper);gap:12px;padding:clamp(16px,2.4vw,22px);position:relative}.auth-page__form h2{font-size:clamp(1.7rem,3vw,2.25rem)}.auth-page__field{color:var(--notebook-ink);font-family:var(--auth-readable-font);gap:8px;font-size:.98rem;font-weight:600}.auth-page__label-icon{align-items:center;gap:7px;display:inline-flex}.auth-page__form input{color:#233446;min-height:48px;font-family:var(--auth-readable-font);letter-spacing:0;font-size:1rem;font-weight:500}.auth-page__form input::placeholder{color:#7b90a3;opacity:1}.auth-page__form .notebook-button{min-height:50px;font-family:var(--auth-readable-font);letter-spacing:0;margin-top:4px;font-size:.95rem;font-weight:600}@media (width>=900px){.auth-page__form--login{min-height:100%}.auth-page__form--login .notebook-button{margin-top:auto}}@media (width<=820px){.auth-page__hero,.auth-page__forms{grid-template-columns:1fr}.auth-page__hint{max-width:none}}@media (width<=520px){.auth-page{padding-inline:10px}.auth-page__hero,.auth-page__form{padding:14px}.auth-page__hint strong{word-break:break-word;font-size:1.45rem}}.games-list-page__hero{grid-template-columns:minmax(0,1fr) auto;align-items:center}.games-list-page__hero-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.games-list-page__hero-actions .connection-badge{align-items:center;gap:6px}.games-list-page__grid{gap:12px;display:grid}.games-list-page__stats{gap:14px;display:grid}.games-list-page__stats h2{margin:0}.games-list-page__stats-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.games-list-page__stat-card{border:2px solid var(--notebook-border-light);background:#ffffff73;border-radius:8px;gap:4px;padding:12px;display:grid}.games-list-page__stat-card strong{color:var(--notebook-ink);font-size:1.8rem;line-height:1}.games-list-page__stat-card span,.games-list-page__stats-empty{color:var(--notebook-ink-light)}.games-list-page__recent-results{flex-wrap:wrap;gap:8px;display:flex}.games-list-page__result{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:999px;padding:5px 9px;font-weight:700}.games-list-page__result--win{border-color:var(--notebook-success);background:var(--notebook-success-bg);color:var(--notebook-success)}.games-list-page__result--loss{border-color:var(--notebook-error);background:var(--notebook-error-bg);color:var(--notebook-error)}.games-list-page__state,.games-list-page__empty{text-align:center;justify-items:center}.games-list-page__empty{padding:28px}.games-list-page__empty p{color:var(--notebook-ink-light);font-size:1.1rem}.game-card{border:2px solid var(--notebook-border);background:#faf8f3eb;border-radius:8px;gap:12px;padding:14px;display:grid}.game-card__header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.game-card__status{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);color:var(--notebook-ink-light);letter-spacing:.05em;text-transform:uppercase;border-radius:999px;padding:4px 10px;font-size:.95rem;font-weight:700;display:inline-flex}.game-card__status--placement{color:#8a6200;background:#fff2cc;border-color:#d9a441}.game-card__status--active{border-color:var(--notebook-success);background:var(--notebook-success-bg);color:var(--notebook-success)}.game-card__status--your-turn{border-color:var(--notebook-border);color:var(--notebook-ink);background:#e8f4f8}.game-card__opponent{color:var(--notebook-ink-light);flex-wrap:wrap;align-items:center;gap:8px;font-size:1.15rem;display:flex}.game-card__opponent strong{color:var(--notebook-ink)}.game-card__bot-badge{border:1px solid var(--notebook-border-light);color:var(--notebook-ink-light);letter-spacing:.08em;text-transform:uppercase;background:#e8f4f8;border-radius:999px;padding:3px 8px;font-size:.8rem;font-weight:700}.game-card__actions{flex-wrap:wrap;gap:10px;display:flex}.game-card__leave-btn{border:2px solid var(--notebook-error);color:var(--notebook-error);background:0 0;border-radius:4px;padding:8px 14px;font-size:1.1rem;font-weight:700}.game-card__leave-btn:hover:not(:disabled){background:var(--notebook-error-bg)}.game-card__leave-btn:disabled{opacity:.5;cursor:not-allowed}@media (width<=720px){.games-list-page__hero{grid-template-columns:1fr}.games-list-page__hero-actions{justify-content:stretch}.games-list-page__hero-actions>*{justify-content:center;width:100%}.games-list-page__stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.game-card__actions{flex-direction:column}}.board-panel{gap:8px;display:grid}.board-panel__header{justify-content:space-between;align-items:center;display:flex}.board-panel__header h2{color:#34495e;margin:0;font-size:1.3rem}.board-grid{background:#faf8f3;border:2px solid #5a7a96;border-radius:6px;align-items:stretch;gap:0;width:100%;max-width:min(100%,480px);display:grid;overflow:hidden}.board-coordinate{color:#5a7a96;-webkit-user-select:none;user-select:none;background:#f0ebe1;border:1px solid #c5d5e5;place-items:center;min-width:22px;min-height:22px;font-size:.8rem;font-weight:700;line-height:1;display:grid}.board-cell{aspect-ratio:1;color:#2c3e50;background:0 0;border:1px solid #c5d5e5;place-items:center;width:100%;min-width:0;padding:0;font-size:1.2rem;transition:background-color .15s;display:grid}.board-panel--active .board-panel__header h2{color:#27ae60}.board-panel--active .board-grid{border-color:#27ae60;box-shadow:0 0 0 4px #27ae601f}.board-panel--watching .board-grid{background:#fbf9f4;border-color:#8fa7bd}.board-cell--ship{background:repeating-linear-gradient(45deg,#e8e4dc,#e8e4dc 2px,#d4cdc0 2px 4px)}.board-cell--selected{background:khaki;box-shadow:inset 0 0 0 2px #2c3e5059}.board-cell--preview-valid{background:#c8e6c9}.board-cell--preview-invalid{background:#ffcdd2}.board-cell--miss{color:#7f8c8d;background:#eef3f6}.board-cell--hit{color:#c0392b;background:#fde4e2}.board-cell--clickable:not(:disabled):hover{cursor:crosshair;background:#d5f5e3;box-shadow:inset 0 0 0 2px #27ae60}.board-panel--target .board-cell--clickable:not(:disabled){background-image:radial-gradient(circle,#27ae602e 0 12%,#0000 13%)}.board-cell:focus-visible{outline-offset:-3px;z-index:1;outline:3px solid #2c3e50;position:relative}.board-cell:disabled{cursor:default}.hand-drawn-x{color:#c0392b;width:70%;height:70%;animation:.3s ease-out forwards draw-x}.hand-drawn-x path{stroke-dasharray:40;stroke-dashoffset:40px;animation:.4s ease-out .1s forwards draw-stroke}.hand-drawn-circle{color:#7f8c8d;width:55%;height:55%;animation:.3s ease-out forwards draw-circle}.hand-drawn-circle path{stroke-dasharray:60;stroke-dashoffset:60px;animation:.5s ease-out .1s forwards draw-stroke}@keyframes draw-stroke{to{stroke-dashoffset:0}}@keyframes draw-x{0%{opacity:0;transform:scale(.5)rotate(-10deg)}to{opacity:1;transform:scale(1)rotate(0)}}@keyframes draw-circle{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}@media (width<=600px){.board-cell{font-size:.9rem}.board-coordinate{min-width:18px;min-height:18px;font-size:.7rem}}.game-shell{gap:8px;max-width:1200px;min-height:100vh;margin:0 auto;padding:10px 12px 16px;display:grid}.game-header{border:2px solid var(--notebook-border);background:#faf8f3e6;border-radius:6px;gap:4px;height:fit-content;padding:8px 14px 10px;display:grid}.game-hero{grid-template-columns:minmax(0,1fr) auto;align-items:end;padding:14px 16px}.game-hero h1{font-size:clamp(2rem,4vw,3rem)}.status-card{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);min-width:230px;color:var(--notebook-ink-light);border-radius:6px;gap:2px;padding:10px 12px;font-size:1.05rem;display:grid}.status-card--compact{align-self:end}.battle-title{justify-content:center;align-items:center;gap:10px;display:flex}.battle-title h1{color:var(--notebook-ink);margin:0;font-size:clamp(1.4rem,3vw,2rem)}.battle-icon{color:var(--notebook-ink-light);opacity:.7}.vs-arena{justify-content:center;align-items:center;gap:12px;padding:4px 0;display:flex}.player-card{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:6px;align-items:center;gap:6px;min-width:120px;padding:6px 12px;display:flex}.player-card--me{border-color:var(--notebook-border);background:linear-gradient(135deg, var(--notebook-paper) 0%, #e8f4f8 100%)}.player-card--opponent{border-color:var(--notebook-border-light);opacity:.9}.player-avatar{border:2px solid var(--notebook-border-light);width:32px;height:32px;color:var(--notebook-ink-light);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:flex}.player-card--me .player-avatar{border-color:var(--notebook-border);color:var(--notebook-ink)}.player-info{flex-direction:column;gap:2px;display:flex}.player-name{color:var(--notebook-ink);font-size:.95rem;font-weight:700}.player-role{color:var(--notebook-ink-light);text-transform:uppercase;letter-spacing:.1em;font-size:.7rem}.vs-divider{flex-direction:column;align-items:center;gap:4px;display:flex}.vs-text{color:var(--notebook-ink-light);letter-spacing:.1em;font-size:1.2rem;font-weight:700}.vs-line{background:var(--notebook-border-light);border-radius:1px;width:2px;height:20px}.game-meta{color:var(--notebook-ink-light);border-top:1px dashed var(--notebook-border-light);flex-wrap:wrap;justify-content:center;gap:6px;padding-top:2px;font-size:.8rem;display:flex}.turn-banner{border:2px dashed var(--notebook-border-light);color:var(--notebook-ink-light);border-radius:999px;justify-self:center;margin:2px 0 0;padding:4px 14px;font-size:1rem}.turn-banner--active{border-style:solid;border-color:var(--notebook-accent);background:var(--notebook-accent-bg);color:var(--notebook-accent)}.lobby-code{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:8px;padding:2px 8px;font-family:monospace;font-size:.8rem}.turn-indicator{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:8px;padding:2px 8px;font-size:.85rem}.turn-indicator--active{border-color:var(--notebook-accent);background:var(--notebook-accent-bg);color:var(--notebook-accent);font-weight:700;animation:2s ease-in-out infinite pulse-turn}@keyframes pulse-turn{0%,to{box-shadow:0 0 #27ae604d}50%{box-shadow:0 0 0 4px #27ae6000}}.connection-badge{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:8px;padding:2px 8px;font-size:.8rem}.game-grid{grid-template-columns:minmax(420px,.95fr) minmax(300px,.85fr);justify-content:space-between;align-items:start;gap:10px;display:grid}.game-grid--battle{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:clamp(20px,7vw,110px)}.game-panel{border:2px solid var(--notebook-border);background:#faf8f3e6;border-radius:6px;height:fit-content;padding:8px}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:4px;margin-bottom:6px;display:grid}.stat-item{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);border-radius:4px;flex-direction:column;align-items:center;padding:4px 6px;display:flex}.stat-label{color:var(--notebook-ink-light);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.side-panel{align-self:start}.placement-control-panel{max-height:calc(100vh - 20px);top:10px;overflow:auto;position:sticky!important}.stat-value{color:var(--notebook-ink);font-size:1rem;font-weight:700}.rematch-panel{text-align:center;gap:6px;padding-top:4px;display:grid}.rematch-text{color:var(--notebook-ink-light);margin:0;font-size:.85rem}.winner-text{color:var(--notebook-accent);margin:0;font-size:1.4rem;font-weight:700}.winner-celebration{flex-direction:column;align-items:center;gap:8px;animation:.5s ease-out fade-in-up;display:flex}.loser-text{flex-direction:column;align-items:center;gap:8px;display:flex}.confetti{animation:.6s ease-out forwards confetti-pop}@keyframes confetti-pop{0%{opacity:0;transform:scale(0)rotate(-30deg)}to{opacity:1;transform:scale(1)rotate(0)}}.notebook-button{border:2px solid var(--notebook-border);background:var(--notebook-paper);color:var(--notebook-ink);border-radius:4px;padding:8px 14px;font-size:.9rem;font-weight:700;transition:all .15s}.notebook-button:hover:not(:disabled){background:#e8f4f8;transform:translateY(-1px)}.notebook-button--primary{background:var(--notebook-ink);color:var(--notebook-paper);border-color:var(--notebook-ink)}.notebook-button--primary:hover:not(:disabled){background:#34495e}.notebook-button:disabled{opacity:.5;cursor:not-allowed}.error-banner{border:2px solid var(--notebook-error);background:var(--notebook-error-bg);color:var(--notebook-error);text-align:center;border-radius:4px;margin:0;padding:8px 12px;font-size:.9rem}.notification-stack--inline{z-index:20;position:fixed;bottom:16px;right:16px}.modal-overlay{z-index:30;background:#2c3e5066;justify-content:center;align-items:center;animation:.2s ease-out fade-in;display:flex;position:fixed;inset:0}.modal-content{background:var(--notebook-paper);border:2px solid var(--notebook-border);text-align:center;border-radius:6px;width:90%;max-width:360px;padding:20px 24px;animation:.2s ease-out fade-in-up}.modal-content h3{color:var(--notebook-ink);margin:0 0 12px;font-size:1.2rem}.modal-content p{color:var(--notebook-ink-light);margin:0 0 20px;font-size:.95rem}.modal-actions{justify-content:center;gap:12px;display:flex}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.placement-toolbar{flex-wrap:wrap;gap:8px;display:flex}.placement-toolbar .notebook-button:last-child{border-color:var(--notebook-error);color:var(--notebook-error)}.placement-progress-card{border:2px solid var(--notebook-border-light);background:#e8f4f88c;border-radius:6px;gap:8px;padding:10px;display:grid}.placement-progress-card__topline{color:var(--notebook-ink);justify-content:space-between;gap:12px;font-size:1rem;display:flex}.progress-bar{background:var(--notebook-border-light);border-radius:999px;width:100%;height:8px;overflow:hidden}.progress-bar__value{border-radius:inherit;background:var(--notebook-accent);height:100%;transition:width .3s}.placement-submit-button{width:100%}.board-legend{color:var(--notebook-ink-light);flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:.9rem;display:flex}.board-legend span{align-items:center;gap:5px;display:inline-flex}.battle-legend{border:1px dashed var(--notebook-border-light);background:#faf8f3c7;border-radius:6px;justify-content:center;padding:4px 8px}.legend-swatch{border:1px solid var(--notebook-border);border-radius:3px;width:16px;height:16px;display:inline-block}.legend-swatch--ship{background:repeating-linear-gradient(45deg,#e8e4dc,#e8e4dc 2px,#d4cdc0 2px 4px)}.legend-swatch--selected{background:khaki}.legend-swatch--valid{background:#c8e6c9}.legend-swatch--invalid,.legend-swatch--hit{background:#ffcdd2}.legend-swatch--miss{background:#eef3f6}.legend-swatch--target{background:#d5f5e3}.fleet-summary{gap:6px;display:grid}.fleet-summary__row{border:1px solid var(--notebook-border-light);background:var(--notebook-paper);color:var(--notebook-ink-light);border-radius:6px;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:7px 9px;display:grid}.fleet-summary__row strong{color:var(--notebook-ink)}.fleet-list{gap:6px;display:grid}.fleet-slot{border:2px solid var(--notebook-border-light,#c5d5e5);background:var(--notebook-paper,#faf8f3);cursor:pointer;text-align:left;border-radius:6px;align-items:center;gap:12px;padding:8px 12px;font-family:inherit;transition:all .15s;display:flex}.fleet-slot:hover{border-color:var(--notebook-border,#5a7a96);background:#e8f4f8}.fleet-slot--selected{border-color:var(--notebook-border,#5a7a96);box-shadow:2px 2px 0 var(--notebook-border,#5a7a96);background:#e8f4f8}.fleet-slot--placed{opacity:.6}.fleet-slot--placed:hover{opacity:.8}.fleet-slot span{color:var(--notebook-ink-light,#5a7a96);font-size:.9rem}.button-row{justify-content:flex-end;gap:12px;display:flex}.notification-pill{color:#2c3e50;background:#faf8f3;border:2px solid #5a7a96;border-radius:6px;margin:0;padding:10px 14px;box-shadow:2px 2px #5a7a96}@media (width<=960px){.game-shell{padding:16px}.game-header h1{font-size:1.6rem}.game-grid,.game-grid--battle{grid-template-columns:1fr;gap:14px}.game-hero{grid-template-columns:1fr}.placement-control-panel{max-height:none;top:auto;position:relative!important}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.vs-arena{gap:10px}.player-card{min-width:auto;padding:6px 10px}.player-name{font-size:.85rem}}@media (width<=600px){.game-meta{gap:8px;font-size:.85rem}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}.stat-item{padding:4px 6px}.stat-value{font-size:1rem}.vs-arena{flex-direction:column;gap:8px}.vs-divider{flex-direction:row}.vs-line{width:40px;height:2px}.player-card{justify-content:center;width:100%}}.game-side-panels{gap:8px;display:grid}.game-chat-panel{display:none}@media (width>=1024px){.game-side-panels{grid-template-columns:1fr 320px}.game-chat-panel{border:2px solid var(--notebook-border);background:#faf8f3e6;border-radius:6px;grid-template-rows:auto 1fr auto;gap:8px;height:fit-content;max-height:400px;padding:8px;display:grid}}.game-chat-header{border-bottom:1px solid var(--notebook-border-light);padding:4px 8px}.game-chat-title{color:var(--notebook-ink);font-size:.9rem;font-weight:700}.game-chat-messages{flex-direction:column;gap:6px;padding:4px;display:flex;overflow-y:auto}.game-chat-message{background:var(--notebook-paper);border:1px solid var(--notebook-border-light);border-radius:4px;flex-direction:column;gap:2px;padding:6px 8px;display:flex}.game-chat-message--self{background:linear-gradient(135deg, var(--notebook-paper) 0%, #e8f4f8 100%);border-color:var(--notebook-border)}.game-chat-sender{color:var(--notebook-ink-light);font-size:.75rem;font-weight:700}.game-chat-text{color:var(--notebook-ink);word-break:break-word;font-size:.9rem}.game-chat-time{color:var(--notebook-ink-light);align-self:flex-end;font-size:.7rem}.game-chat-error{background:var(--notebook-error-bg);color:var(--notebook-error);border-radius:4px;justify-content:space-between;align-items:center;padding:6px 8px;font-size:.85rem;display:flex}.game-chat-error-close{color:var(--notebook-error);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:1.2rem}.game-chat-form{border-top:1px solid var(--notebook-border-light);gap:8px;padding-top:4px;display:flex}.game-chat-input{border:2px solid var(--notebook-border-light);background:var(--notebook-paper);color:var(--notebook-ink);resize:none;border-radius:4px;flex:1;padding:6px 8px;font-family:inherit;font-size:.9rem}.game-chat-input:focus{border-color:var(--notebook-border);outline:none}.game-chat-send{border:2px solid var(--notebook-border);background:var(--notebook-ink);color:var(--notebook-paper);cursor:pointer;white-space:nowrap;border-radius:4px;padding:6px 12px;font-size:.85rem;font-weight:700}.game-chat-send:hover:not(:disabled){background:#34495e}.game-chat-send:disabled{opacity:.5;cursor:not-allowed}:root{color:#2c3e50;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f5f0e8;background-image:linear-gradient(#a8c0d8 1px,#0000 1px),linear-gradient(90deg,#a8c0d8 1px,#0000 1px);background-size:28px 28px;font-family:Amatic SC,cursive,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input{font:inherit}button{cursor:pointer;border:0}#root{min-height:100vh}
