:root{--bg:#0f1522;--bg-2:#161e2e;--panel:#1b2436;--panel-edge:#2c3850;--ink:#e8edf5;--ink-dim:#9aa7bd;--accent:#ffc53d;--p0:#ff5d5d;--p0-soft:#ff5d5d2e;--p1:#4ea1ff;--p1-soft:#4ea1ff2e;--tile:#3a4a66;--tile-hi:#4a5d7f;--tile-lo:#26324a;--open:#dfe5ee;--open-edge:#c7d0dd;--radius:12px;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(ellipse at 50% -10%, #22314d 0%, transparent 55%), radial-gradient(circle at 1px 1px, #ffffff0a 1px, transparent 0) 0 0 / 22px 22px, var(--bg);min-height:100vh;margin:0}button{font:inherit;color:inherit}.icon{vertical-align:-.18em;flex:none;width:1.1em;height:1.1em}.btn{cursor:pointer;border:1px solid var(--panel-edge);background:var(--panel);border-radius:999px;justify-content:center;align-items:center;gap:.45em;padding:.7em 1.4em;font-weight:600;transition:background .15s,transform .1s,box-shadow .15s;display:inline-flex}.btn:hover:not(:disabled){background:#24304a}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:focus-visible,.mode:focus-visible,.cell:focus-visible,.tab:focus-visible,.face:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.btn--primary{background:var(--accent);color:#241a02;border-color:#d49b12}.btn--primary:hover:not(:disabled){background:#ffd266}.btn--ghost{background:0 0}.btn--small{padding:.4em .95em;font-size:.85rem}.logo{letter-spacing:-.03em;color:var(--ink);margin:0;font-size:clamp(3rem,12vw,5rem);font-weight:800;line-height:1}.logo span{color:var(--p0)}.logo span:after{content:"";background:var(--p1);border-radius:50%;width:.22em;height:.22em;margin-left:.06em;display:inline-block}.logo--medium{font-size:clamp(2.4rem,9vw,3.2rem)}.logo--small{font-size:1.45rem}.menu{place-items:center;min-height:100vh;padding:24px 16px;display:grid}.menu__box{text-align:center;flex-direction:column;align-items:center;gap:.75rem;width:100%;max-width:440px;display:flex}.menu__tag{color:var(--ink-dim);margin:.25rem 0 1.25rem}.menu__modes{gap:.6rem;width:100%;margin-bottom:.5rem;display:grid}.mode{cursor:pointer;text-align:left;border-radius:var(--radius);border:1px solid var(--panel-edge);background:var(--panel);gap:.15rem;padding:.9rem 1.1rem;transition:transform .12s,border-color .12s,background .12s;display:grid}.mode:hover{background:#1f2a40;border-color:#3f5072;transform:translateY(-2px)}.mode strong{font-size:1.05rem}.mode span{color:var(--ink-dim);font-size:.85rem}.mode--primary{background:linear-gradient(135deg, #ffc53d24, #ffc53d0a), var(--panel);border-color:#ffc53d8c}.duel,.solo{flex-direction:column;gap:14px;max-width:1100px;margin:0 auto;padding:12px 16px 24px;display:flex}.topbar{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.topbar__status{min-width:10em;color:var(--ink-dim);flex:1;font-weight:600}.topbar__actions{flex-wrap:wrap;gap:.5rem;display:flex}.duel__layout{grid-template-columns:180px minmax(0,1fr) 180px;align-items:start;gap:16px;display:grid}.duel__center{flex-direction:column;align-items:center;gap:10px;min-width:0;display:flex}.duel__info{flex-wrap:wrap;align-items:center;gap:.75rem;width:100%;max-width:580px;min-height:2em;display:flex}.duel__last{color:var(--ink-dim);font-size:.9rem}.pill{background:var(--panel);border:1px solid var(--panel-edge);--flag-color:var(--accent);border-radius:999px;align-items:center;gap:.4em;padding:.25em .75em;font-size:.85rem;font-weight:600;display:inline-flex}.duel__controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:1rem;display:flex}.hint{color:var(--ink-dim);text-align:center;margin:0;font-size:.85rem}.bomb-btn{color:var(--ink)}.bomb-btn:not(:disabled){border-color:#ffc53d99}.bomb-btn--armed{background:var(--accent);color:#241a02;animation:1.2s ease-in-out infinite pulse;box-shadow:0 0 0 4px #ffc53d40}@keyframes pulse{50%{box-shadow:0 0 0 8px #ffc53d14}}.player{border-radius:var(--radius);background:var(--panel);border:1px solid var(--panel-edge);--me:var(--p0);--me-soft:var(--p0-soft);flex-direction:column;gap:10px;padding:14px;transition:border-color .2s,box-shadow .2s;display:flex;position:relative}.player--p1{--me:var(--p1);--me-soft:var(--p1-soft)}.player--active{border-color:var(--me);box-shadow:0 0 0 1px var(--me), 0 0 24px var(--me-soft)}.player__name{align-items:center;gap:.5em;min-width:0;font-weight:700;display:flex}.player__label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.player__dot{background:var(--me);border-radius:50%;flex:none;width:12px;height:12px}.player__you{text-transform:uppercase;letter-spacing:.06em;background:var(--accent);color:#241a02;border-radius:999px;padding:1px 6px;font-size:.65rem}.player__score strong{color:var(--me);font-variant-numeric:tabular-nums;font-size:2.6rem;line-height:1}.player__score span{color:var(--ink-dim);margin-left:.3em}.player__bar{background:var(--bg-2);border-radius:999px;height:6px;overflow:hidden}.player__bar span{background:var(--me);border-radius:inherit;height:100%;transition:width .4s ease-out;display:block}.player__bomb{color:var(--accent);align-items:center;gap:.4em;font-size:.85rem;display:flex}.player__bomb--used{color:var(--ink-dim);opacity:.6;text-decoration:line-through}.player__turn{text-transform:uppercase;letter-spacing:.08em;background:var(--me);color:#fff;border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:800;position:absolute;top:-10px;right:12px}.board-frame{background:var(--bg-2);border:1px solid var(--panel-edge);border-radius:14px;width:min(100%,580px);padding:8px;transition:box-shadow .2s;box-shadow:0 20px 50px #00000059}.board-frame--armed{box-shadow:0 0 0 2px var(--accent), 0 20px 50px #00000059}.board{-webkit-user-select:none;user-select:none;gap:2px;width:100%;display:grid;container-type:inline-size}.cell{aspect-ratio:1;cursor:default;border:0;border-radius:4px;place-items:center;min-width:0;padding:0;font-size:clamp(.55rem,3.6cqi,1.15rem);font-weight:800;line-height:1;display:grid;position:relative}.cell .icon{width:72%;height:72%}.cell--hidden{background:linear-gradient(160deg, var(--tile-hi), var(--tile) 55%);box-shadow:inset 0 1px 0 #ffffff1f, inset 0 -2px 0 var(--tile-lo)}.board--interactive .cell--hidden{cursor:pointer}.board--interactive .cell--hidden:hover{background:linear-gradient(160deg,#5b7097,#4a5d7f 55%)}.cell__mark{color:var(--accent);font-size:.95em}.cell--open{background:var(--open);box-shadow:inset 0 0 0 1px var(--open-edge);animation:.18s ease-out open}@keyframes open{0%{opacity:.4;transform:scale(.85)}}.cell--n1{color:#1f5fd6}.cell--n2{color:#1c8a3f}.cell--n3{color:#d42f2f}.cell--n4{color:#2a2a8c}.cell--n5{color:#8a2020}.cell--n6{color:#138080}.cell--n7{color:#222}.cell--n8{color:#666}.cell--flag{background:var(--tile-lo);color:#e8edf5;--flag-color:var(--accent)}.cell--flag.cell--p0{background:linear-gradient(160deg, #ff7a7a, var(--p0));--flag-color:#fff;color:#4a0c0c;animation:.35s ease-out claim}.cell--flag.cell--p1{background:linear-gradient(160deg, #78b8ff, var(--p1));--flag-color:#fff;color:#0b2a52;animation:.35s ease-out claim}@keyframes claim{0%{transform:scale(1.35)}}.cell--mine,.cell--wrongFlag{color:#1b2436;background:#c9d1dd}.cell--exploded{color:#2a0606;background:#ff5d5d}.cell--wrongFlag:after{content:"";background:linear-gradient(45deg,#0000 45%,#d42f2f 45% 55%,#0000 55%),linear-gradient(-45deg,#0000 45%,#d42f2f 45% 55%,#0000 55%);position:absolute;inset:18%}.cell--open.cell--recent{background:#fff1c2;box-shadow:inset 0 0 0 1px #ecd082}.cell--flag.cell--recent{box-shadow:0 0 0 2px var(--accent), 0 0 12px #ffc53d80;z-index:1}.cell--preview{outline:2px solid var(--accent);outline-offset:-2px;filter:brightness(1.2)}.tabs{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.tab{cursor:pointer;border:1px solid var(--panel-edge);background:var(--panel);border-radius:10px;gap:2px;padding:.5em 1em;font-weight:600;display:grid}.tab small{color:var(--ink-dim);font-size:.75rem;font-weight:400}.tab--active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.solo__bar{justify-content:center;align-items:center;gap:1.25rem;display:flex}.counter{border:1px solid var(--panel-edge);color:#ff6b6b;font-variant-numeric:tabular-nums;background:#0a0f19;border-radius:10px;justify-content:center;align-items:center;gap:.4em;min-width:5.5em;padding:.35em .8em;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:1.25rem;font-weight:700;display:inline-flex}.face{cursor:pointer;border:1px solid var(--panel-edge);background:var(--panel);border-radius:12px;width:48px;height:48px;font-size:1.6rem;line-height:1}.face:hover{background:#24304a}.board-scroll{justify-content:center;padding-bottom:4px;display:flex;overflow-x:auto}.solo .board-frame{flex:none;min-width:0}.solo__footer{--flag-color:var(--accent);flex-wrap:wrap;justify-content:center;align-items:center;gap:1rem;display:flex}.overlay{z-index:50;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#060a12b8;place-items:center;padding:16px;animation:.2s ease-out fade-in;display:grid;position:fixed;inset:0}@keyframes fade-in{0%{opacity:0}}.overlay__box{background:var(--panel);border:1px solid var(--panel-edge);text-align:center;border-radius:16px;width:100%;max-width:440px;padding:24px 28px;box-shadow:0 24px 60px #00000080}.overlay__box h2{letter-spacing:-.02em;color:var(--accent);margin:0 0 .5rem;font-size:2rem}.overlay__buttons{flex-wrap:wrap;justify-content:center;gap:.6rem;display:flex}.show-result{z-index:40;position:fixed;bottom:16px;right:16px}.rules{text-align:left;max-width:600px;max-height:calc(100vh - 32px);overflow-y:auto}.rules h3{margin:1.1rem 0 .4rem}.rules p,.rules ul{margin:.4rem 0;line-height:1.55}.rules ul{padding-left:1.2em}.rules .btn{margin:1.25rem auto 0;display:flex}.lobby,.waiting{text-align:left;align-items:stretch}.lobby .logo,.lobby .menu__tag,.waiting .logo,.waiting .menu__tag{text-align:center;margin-bottom:0}.field-label{color:var(--ink-dim);margin-top:.75rem;font-size:.85rem}.text-input{width:100%;min-width:0;font:inherit;color:var(--ink);background:var(--bg-2);border:1px solid var(--panel-edge);border-radius:10px;padding:.65em .9em}.text-input:focus{outline:3px solid var(--accent);outline-offset:1px}.text-input--code{text-transform:uppercase;letter-spacing:.3em;text-align:center;font-weight:700}.lobby__create{margin-top:.5rem}.lobby__or{color:var(--ink-dim);align-items:center;gap:.75rem;font-size:.8rem;display:flex}.lobby__or:before,.lobby__or:after{content:"";border-top:1px solid var(--panel-edge);flex:1}.lobby__join,.waiting__link{gap:.5rem;display:flex}.lobby__join .btn,.waiting__link .btn{white-space:nowrap}.lobby__back,.waiting>.btn--ghost{align-self:center;margin-top:.5rem}.form-error{color:#ffc9d2;background:#3a1620;border:1px solid #7a2a3a;border-radius:10px;margin:0;padding:.6em .9em}.waiting__code{letter-spacing:.25em;text-align:center;color:var(--accent);background:var(--bg-2);border:1px dashed var(--panel-edge);-webkit-user-select:all;user-select:all;font-variant-numeric:tabular-nums;border-radius:14px;padding:.2em 0 .2em .25em;font-size:clamp(2.4rem,11vw,3.4rem);font-weight:800}.waiting__status{color:var(--ink-dim);flex-wrap:wrap;justify-content:center;align-items:center;gap:.5rem;margin:.5rem 0;display:flex}.spinner{border:2px solid var(--panel-edge);border-top-color:var(--accent);border-radius:50%;width:14px;height:14px;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.conn{color:var(--ink);background:#24304a;border-radius:999px;margin-left:.6em;padding:1px 8px;font-size:.75rem}.conn--closed{color:#ffc9d2;background:#3a1620}.toast{z-index:60;color:#ffe3e8;background:#3a1620;border:1px solid #7a2a3a;border-radius:10px;max-width:calc(100% - 32px);padding:.7em 1.2em;animation:.2s ease-out fade-in;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0006}@media (width<=860px){.duel__layout{grid-template-columns:1fr 1fr}.duel__center{order:2;grid-column:1/-1}.player{gap:6px;padding:10px 12px}.player__score strong{font-size:1.9rem}.board-frame{padding:5px}.board{gap:1px}.cell{border-radius:3px}.duel__controls .hint{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
