.emoji-reaction-root{position:relative}.float-badge-emoji{border-color:#2d8cf080}.float-badge-emoji.on-cooldown{border-color:#8fa3bf59;color:var(--text-muted)}.emoji-picker{position:absolute;z-index:140;display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:8px;border-radius:14px;background:#0a1628f0;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(232,238,247,.2);box-shadow:0 8px 24px #00000059;right:0;top:calc(100% + 8px);width:max-content;max-width:min(240px,70vw)}.battle-float-badges.corner-top-left .emoji-picker,.battle-float-badges.corner-bottom-left .emoji-picker{right:auto;left:0}.battle-float-badges.corner-bottom-right .emoji-picker,.battle-float-badges.corner-bottom-left .emoji-picker{top:auto;bottom:calc(100% + 8px)}.emoji-picker-item{width:40px;height:40px;min-width:auto;padding:0;border-radius:10px;background:#1a2d4acc;font-size:1.35rem;line-height:1;display:flex;align-items:center;justify-content:center}.emoji-picker-item:hover:not(:disabled){background:#2d8cf059}.emoji-picker-item:active{transform:scale(.94)}.emoji-reaction-overlay{pointer-events:none;z-index:30;display:flex;align-items:center;justify-content:center}.emoji-reaction-overlay.variant-board{position:absolute;top:0;right:0;bottom:0;left:0}.emoji-reaction-overlay.variant-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200}.emoji-reaction-burst{font-size:clamp(3rem,18vw,5.5rem);line-height:1;animation:emoji-burst 3s ease-out forwards;filter:drop-shadow(0 4px 16px rgba(0,0,0,.45))}@keyframes emoji-burst{0%{opacity:0;transform:scale(.35)}12%{opacity:1;transform:scale(1.15)}28%{transform:scale(1.45)}55%{opacity:1;transform:scale(1.25)}to{opacity:0;transform:scale(1.6)}}.board-with-emoji{position:relative}.finished-emoji-action{margin-top:8px;justify-content:center}.finished-emoji-action .emoji-reaction-root{display:inline-block}.finished-emoji-action .float-badge{width:auto;min-width:54px;height:48px;border-radius:24px;flex-direction:row;gap:6px;padding:0 14px}.finished-emoji-action .float-badge-text{max-width:none;font-size:.72rem}.finished-emoji-action .emoji-picker{left:50%;right:auto;transform:translate(-50%);top:calc(100% + 8px)}.battle-float-badges{position:fixed;z-index:120;display:flex;flex-direction:column;gap:4px;touch-action:none;-webkit-user-select:none;user-select:none}.battle-float-badges.corner-top-right{top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));align-items:flex-end}.battle-float-badges.corner-top-left{top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));align-items:flex-start}.battle-float-badges.corner-bottom-right{bottom:max(12px,env(safe-area-inset-bottom));right:max(12px,env(safe-area-inset-right));align-items:flex-end;flex-direction:column-reverse}.battle-float-badges.corner-bottom-left{bottom:max(12px,env(safe-area-inset-bottom));left:max(12px,env(safe-area-inset-left));align-items:flex-start;flex-direction:column-reverse}.battle-float-badges.dragging{opacity:.92}.float-badges-handle{width:54px;height:22px;border-radius:11px;background:#0a1628a6;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid rgba(232,238,247,.15);color:var(--text-muted);font-size:.75rem;line-height:1;cursor:grab;padding:0;min-width:auto;touch-action:none}.float-badges-handle:active{cursor:grabbing}.float-badges-stack{display:flex;flex-direction:column;gap:8px;min-height:240px}.float-badge{width:54px;height:54px;border-radius:50%;background:#0a1628b8;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid rgba(232,238,247,.18);box-shadow:0 2px 10px #00000040;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px;text-align:center;color:var(--text);flex-shrink:0}.float-badge.empty{opacity:.45}.float-badge-icon{font-size:1.15rem;line-height:1}.float-badge-icon.dim{font-size:1rem;opacity:.5}.float-badge-text{font-size:.58rem;font-weight:700;line-height:1.1;max-width:46px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.float-badge-text.dim{opacity:.55}.float-badge-turn.mine{border-color:#2ecc71cc;background:#2f7a54eb;color:#ecfbf2;box-shadow:0 0 14px #2ecc7166}.float-badge-turn.opponent{border-color:#b4584eb3;background:#6e2a30e0;color:#f8e8e6;box-shadow:0 0 12px #a0464147}.float-badge-shot.shot-miss{border-color:#8fa3bf66}.float-badge-shot.shot-hit{border-color:#e74c3c80}.float-badge-shot.shot-sunk{border-color:#f39c128c}.float-badge-timer{border-color:#f39c1266;color:var(--warning)}.float-badge-timer .float-badge-text{font-size:.62rem}button.float-badge{cursor:pointer;font:inherit;-moz-appearance:none;appearance:none;-webkit-appearance:none}button.float-badge:disabled{opacity:.4;cursor:not-allowed}button.float-badge:not(:disabled):active{transform:scale(.96)}.float-badge-action.float-badge-orient{border-color:#2d8cf080}.float-badge-action.float-badge-reset{border-color:#e74c3c73}.placement-float-stack{min-height:auto}.float-badge-offline{border-color:#f39c128c;color:var(--warning)}.board{display:flex;flex-direction:column;gap:var(--board-gap, 2px);width:100%;max-width:100%}.board-row{display:grid;grid-template-columns:minmax(18px,6.5%) repeat(10,minmax(0,1fr));gap:var(--board-gap, 2px);width:100%}.board-corner{aspect-ratio:1;min-width:0}.board-header{display:flex;align-items:center;justify-content:center;aspect-ratio:1;min-width:0;font-size:clamp(.5rem,2.4vw,.7rem);color:var(--text-muted)}.cell{width:100%;aspect-ratio:1;min-width:0;min-height:0;padding:0;background:var(--surface2);border-radius:3px;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.cell.clickable{cursor:pointer}.cell.clickable:hover:not(:disabled){background:#2d8cf04d}.cell.ship{background:var(--ship-intact)}.cell.highlight{background:#2d8cf066}.cell.miss{background:var(--surface)}.cell.miss:after{content:"•";color:var(--text-muted);font-size:clamp(.7rem,3vw,1.2rem)}.cell.miss.auto{background:#64788c59}.cell.miss.auto:after{content:"○";color:var(--text-muted);font-size:clamp(.55rem,2.5vw,.85rem);opacity:.85}.cell.hit{background:var(--danger)}.cell.hit:after{content:"✕";color:#fff;font-size:clamp(.65rem,2.8vw,.9rem)}.cell.sunk{background:#922b21}.cell.sunk:after{content:"✕";color:#fff;font-size:clamp(.65rem,2.8vw,.9rem)}.cell.disabled{opacity:.6;cursor:not-allowed}.sound-toggle{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;font-size:.85rem;font-weight:600;background:var(--surface2);color:var(--text);min-width:auto;align-self:flex-end}.sound-toggle-icon{font-size:1rem;line-height:1}.sound-toggle-label{line-height:1}.app-toolbar{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-bottom:8px}.sound-toggle-circle{width:54px;height:54px;min-width:54px;border-radius:50%;padding:0;justify-content:center;background:#0a1628b8;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border:1px solid rgba(232,238,247,.18);box-shadow:0 2px 10px #00000040}.sound-toggle-circle .sound-toggle-icon{font-size:1.2rem}.sound-toggle-circle:active{transform:scale(.96)}.game-sound-fab{position:fixed;z-index:110;top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left))}.battle-audio-row{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:10px}.game-leave-bar{margin-top:20px;padding-bottom:max(12px,env(safe-area-inset-bottom))}.placement-panel{width:100%;display:flex;flex-direction:column;gap:8px}.placement-dock{background:var(--surface);border-radius:var(--radius);padding:6px 8px}.placement-dock-ships{display:flex;flex-wrap:wrap;gap:5px 6px;justify-content:center;align-items:center}.dock-ship-body{display:flex;gap:2px;cursor:grab;touch-action:none;padding:2px;border-radius:6px;border:2px solid transparent}.dock-ship-body:active{cursor:grabbing}.dock-ship-body.dragging{opacity:.45;border-color:var(--accent)}.dock-cell{width:clamp(12px,3.2vw,18px);height:clamp(12px,3.2vw,18px);background:var(--ship-intact);border-radius:3px;flex-shrink:0}.placement-board-area{touch-action:none}.placement-footer{display:flex;flex-direction:column;gap:8px;margin-top:4px}.placement-timer{font-size:1.1rem;font-weight:700;color:var(--warning);text-align:center}.placement-hint{font-size:.8rem;color:var(--text-muted);text-align:center;margin:0}.placement-toolbar{display:flex;gap:8px;flex-wrap:wrap}.placement-toolbar button{flex:1;min-width:0;padding:10px 12px;font-size:.9rem}.cell.preview-valid{background:#2ecc7173}.cell.preview-invalid{background:#e74c3c73}.cell.ship-draggable{cursor:grab;touch-action:none}.cell.ship-draggable:active{cursor:grabbing}.cell.ship-dragging-source{opacity:.35}.drag-ghost{position:fixed;pointer-events:none;z-index:200;display:flex;flex-direction:row;gap:3px;opacity:.9;transform:translate(-50%,-50%)}.drag-ghost.vertical{flex-direction:column}.drag-ghost .dock-cell{width:clamp(18px,5vw,28px);height:clamp(18px,5vw,28px);box-shadow:0 4px 12px #0006}.home-app{padding-top:0;position:relative}.home-app .app-toolbar{position:absolute;top:max(8px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));z-index:2}.home-splash{position:relative;width:calc(100% + 24px);margin:0 -12px;aspect-ratio:16 / 10;min-height:200px;max-height:42vh;overflow:hidden;border-radius:0 0 var(--radius) var(--radius)}.home-splash-img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 40%}.home-splash-shade{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#0a162826,#0a16280d 35%,#0a16288c 72%,#0a1628eb),radial-gradient(ellipse 80% 60% at 50% 100%,rgba(19,34,56,.4),transparent);pointer-events:none}.home-splash-caption{position:absolute;left:0;right:0;bottom:0;padding:16px 20px 18px;text-align:center}.home-title{margin-bottom:4px;text-shadow:0 2px 12px rgba(0,0,0,.75)}.home-subtitle{margin-bottom:0;text-shadow:0 1px 8px rgba(0,0,0,.7)}.home-card{margin-top:12px}.home-card .home-rules-action{margin-bottom:20px}.rules-page{padding-bottom:72px}.rules-card{max-width:520px;margin:0 auto}.rules-section{margin-bottom:20px}.rules-section h2{font-size:1.05rem;font-weight:700;margin-bottom:10px;color:var(--text)}.rules-list{margin:0;padding-left:1.25rem;color:var(--text);font-size:.92rem;line-height:1.55}.rules-list li{margin-bottom:8px}.rules-list li:last-child{margin-bottom:0}.rules-actions{margin-top:24px;justify-content:center}.rules-back-link{text-decoration:none;display:inline-block}.rules-back-btn{min-width:160px}:root{--bg: #0a1628;--surface: #132238;--surface2: #1a2d4a;--accent: #2d8cf0;--accent-hover: #1a6fd4;--text: #e8eef7;--text-muted: #8fa3bf;--success: #2ecc71;--ship-intact: #2f7a54;--danger: #e74c3c;--warning: #f39c12;--board-gap: 2px;--radius: 12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100dvh;line-height:1.5;overflow-x:hidden}#root{min-height:100dvh}button{font:inherit;cursor:pointer;border:none;border-radius:var(--radius);padding:12px 20px;background:var(--accent);color:#fff;font-weight:600;transition:background .15s}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:var(--surface2);color:var(--text)}button.danger{background:var(--danger)}input{font:inherit;padding:12px 16px;border-radius:var(--radius);border:1px solid var(--surface2);background:var(--surface);color:var(--text);width:100%}.app{width:100%;max-width:480px;margin:0 auto;padding:12px;padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));padding-bottom:max(36px,calc(12px + env(safe-area-inset-bottom)));min-height:100dvh;display:flex;flex-direction:column;overflow-x:hidden}.app-author{position:fixed;left:0;right:0;bottom:max(6px,env(safe-area-inset-bottom));text-align:center;font-size:.72rem;color:var(--text-muted);padding:4px 12px;z-index:50;pointer-events:none}.app-author a{pointer-events:auto;color:var(--text-muted);text-decoration:none}.app-author a:hover{color:var(--accent);text-decoration:underline}.app-author-name{opacity:.85}.app-author-version{opacity:.75}.app-author-sep{opacity:.45}.app-author-stats{opacity:.85}.card{background:var(--surface);border-radius:var(--radius);padding:20px;margin-bottom:16px}.title{font-size:1.5rem;font-weight:700;margin-bottom:8px}.subtitle{color:var(--text-muted);margin-bottom:20px;font-size:.95rem}.home-rules-action{margin-bottom:16px;justify-content:center}.home-rules-link{text-decoration:none;display:inline-block}.home-notice{text-align:center;padding:12px 14px;margin-bottom:16px;background:#f39c1226;border:1px solid rgba(243,156,18,.35);border-radius:var(--radius);color:var(--text);font-size:.92rem}.error{color:var(--danger);margin:8px 0;font-size:.9rem}.timer{font-size:1.25rem;font-weight:700;color:var(--warning);text-align:center;margin:8px 0}.status-bar{text-align:center;padding:10px;background:var(--surface2);border-radius:var(--radius);margin-bottom:12px;font-size:.9rem}.link-button{display:inline;padding:0;margin:0;min-width:0;background:none;border:none;color:var(--accent);font-size:inherit;font-weight:600;text-decoration:underline;vertical-align:baseline}.link-button:hover:not(:disabled){color:var(--accent-hover);background:none}.spinner{width:32px;height:32px;border:3px solid var(--surface2);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:20px auto}@keyframes spin{to{transform:rotate(360deg)}}.invite-qr{display:flex;flex-direction:column;align-items:center;gap:8px;margin:16px 0 8px}.invite-qr-frame{padding:12px;background:#fff;border-radius:var(--radius);box-shadow:0 2px 12px #00000040;color-scheme:only light;line-height:0}.invite-qr-frame img{display:block;width:240px;height:240px;image-rendering:pixelated;image-rendering:crisp-edges;-webkit-optimize-contrast:contrast}.invite-qr-placeholder{background:#fff}.invite-qr-hint{margin:0;font-size:.85rem;color:var(--text-muted)}.link-box{background:var(--surface2);padding:12px;border-radius:var(--radius);word-break:break-all;font-size:.85rem;margin:12px 0}.actions{display:flex;flex-direction:column;gap:10px;margin-top:16px}.actions.row{flex-direction:row;flex-wrap:wrap}.actions.row button{flex:1;min-width:120px}.form-group{margin-bottom:16px}.form-group label{display:block;margin-bottom:6px;font-size:.9rem;color:var(--text-muted)}.boards-container{display:flex;flex-direction:column;gap:16px;width:100%}.board-wrapper{width:100%;max-width:100%}.board-label{text-align:center;font-size:.85rem;color:var(--text-muted);margin-bottom:6px}.fleet-list{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0;justify-content:center}.fleet-chip{padding:6px 12px;background:var(--surface2);border-radius:20px;font-size:.85rem;cursor:pointer;border:2px solid transparent}.fleet-chip.selected{border-color:var(--accent);background:#2d8cf026}.fleet-chip.placed{opacity:.4}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.overlay-content{background:var(--surface);border-radius:var(--radius);padding:24px;text-align:center;max-width:360px;width:100%}.result-win{color:var(--success);font-size:1.5rem;font-weight:700}.result-lose{color:var(--danger);font-size:1.5rem;font-weight:700}.confirm-box{margin-top:16px;padding:14px;background:var(--surface2);border-radius:var(--radius);border:1px solid var(--warning)}.confirm-box p{margin-bottom:12px;font-size:.95rem;line-height:1.4}
