.review-board{display:flex;justify-content:center;align-items:center}.review-layout{display:grid;grid-template-columns:auto 360px;gap:24px;align-items:start}.review-panel{background:linear-gradient(180deg,#0f172a,#020617);border-radius:16px;padding:16px;height:fit-content;display:flex;flex-direction:column}.review-title{margin:0 0 12px;font-size:20px;font-weight:700}.review-controls{display:flex;gap:10px;margin-bottom:14px}.review-controls button{width:42px;height:36px;border-radius:8px;background:#fff;border:none;font-size:16px;cursor:pointer}.review-moves{overflow-y:auto;max-height:420px;padding-right:6px}.review-move{display:grid;grid-template-columns:30px 26px 1fr;gap:6px;padding:6px 8px;border-radius:6px;font-size:14px;opacity:.85}.review-move.active{background:#3b82f640;opacity:1}.review-move .color.white{color:#facc15;font-weight:700}.review-move .color.black{color:#60a5fa;font-weight:700}@media(max-width:900px){.review-layout{grid-template-columns:1fr}.review-panel{margin-top:16px}}body{margin:0;overflow-y:auto}.game-info{background:linear-gradient(180deg,#0f172a,#020617);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:12px;width:360px;max-width:360px}.game-info h2{margin:0;font-size:20px;font-weight:700}.game-info .turn-indicator{padding:8px 12px;border-radius:10px;font-weight:600;text-align:center;font-size:14px}.game-info .turn-indicator.my-turn{background:#22c55e33;color:#22c55e}.game-info .turn-indicator.opponent-turn{background:#94a3b833;color:#cbd5f5}.game-info .hint-toggle{display:flex;align-items:center;gap:8px;font-size:14px}.game-info .players{display:grid;grid-template-columns:1fr;gap:12px}.game-info .player{display:flex;flex-direction:column;gap:6px}.game-info .moves-list{margin-top:8px;display:flex;flex-direction:column;gap:6px;max-height:300px;overflow-y:auto}.game-info .review-controls{display:flex;gap:10px}.game-info .chat-panel{margin-top:8px}@media(max-width:900px){.game-info{width:100%;max-width:100%}}@media(min-width:1024px){.game-page{display:flex;flex-direction:row;align-items:flex-start;justify-content:center;gap:32px}.chess-board-wrapper{flex:0 0 auto}.review-panel{width:340px;flex-shrink:0}}.past-games-page{max-width:960px;margin:0 auto;padding:24px}.past-games-table{width:100%}.past-games-page .past-games-header{display:grid!important;grid-template-columns:3fr 1fr 1.5fr 1fr;gap:12px;padding:12px 16px;font-weight:700;border-bottom:1px solid rgba(255,255,255,.3)}.past-games-page .past-games-row{display:grid!important;grid-template-columns:3fr 1fr 1.5fr 1fr;gap:12px;align-items:center;padding:14px 16px;margin-top:8px;background:#ffffff0d;border-radius:10px}.past-games-row:hover{background:#ffffff14}.result-1-0{color:#22c55e}.result-0-1{color:#ef4444}.result-aborted{color:#94a3b8}.result-resigned{color:#f97316}.review-btn{padding:6px 14px;border-radius:8px;background:linear-gradient(#4f86c6,#345f96);color:#fff;border:none;cursor:pointer}.review-btn:hover{opacity:.9}@media(max-width:768px){.past-games-page .past-games-header{display:none!important}.past-games-page .past-games-row{grid-template-columns:1fr!important;gap:6px;padding:14px}.past-games-page .past-games-row>div{text-align:left}.past-games-page .past-games-row .players{font-weight:700;margin-bottom:4px}.past-games-page .past-games-row .result:before{content:"Result: ";opacity:.7;margin-right:4px}.past-games-page .past-games-row div:nth-child(3):before{content:"Date: ";opacity:.7;margin-right:4px}.past-games-page .review-btn{width:100%;margin-top:8px}}.past-games-page{max-width:800px;margin:0 auto}.past-games-toolbar{margin-bottom:12px}.past-games-toolbar select{padding:6px 10px;border-radius:6px}.past-games-header,.past-games-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;align-items:center;gap:10px}.past-games-header{font-weight:700;opacity:.8;margin-bottom:8px}.past-games-row{padding:10px;border-radius:8px;background:#ffffff0a;margin-bottom:8px}.review-btn{padding:6px 14px;border-radius:8px}.pagination{display:flex;justify-content:center;gap:12px;margin-top:16px}.row-index{text-align:center;font-weight:700;opacity:.7}@media(max-width:520px){.past-games-header,.past-games-row{grid-template-columns:1fr 1fr 1fr 1fr}.row-index{display:none}}.past-games-page{max-width:900px;margin:0 auto}.past-games-header-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.back-btn{padding:6px 14px;font-size:14px}.fullscreen-btn{display:none}@media(max-width:768px){.fullscreen-btn{display:inline-flex;align-items:center;justify-content:center}}*,*:before,*:after{box-sizing:border-box}:root{--square-light: #f0d9b5;--square-dark: #b58863;--board-light: var(--square-light);--board-dark: var(--square-dark);--board-highlight: #fbbf24;--selected-border: #00b4ff;--legal-dot: rgba(10, 10, 12, .95);--legal-dot-contrast: rgba(255, 255, 255, .72);--legal-dot-selected: rgba(0, 180, 255, .95);--piece-halo-w: rgba(0,0,0,.45);--piece-halo-b: rgba(249,250,251,.5);--square-focus: rgba(249, 115, 22, .95);--page-bg: radial-gradient(circle at top, #1f2933, #020617);--panel-bg: rgba(15, 23, 42, .92);--border-subtle: rgba(148, 163, 184, .45);--text-main: #e5e7eb;--text-muted: #9ca3af}body{margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--page-bg);color:var(--text-main);-webkit-font-smoothing:antialiased}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.app-shell{display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.5rem;background:#0f172af2;border-bottom:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.topbar h1{margin:0;font-size:1.4rem}.topbar nav a{color:var(--text-main);text-decoration:none;margin-left:1rem;opacity:.8}.topbar nav a:hover,.topbar nav a:focus-visible{opacity:1;text-decoration:underline}.main-content{flex:1;padding:1.5rem;display:flex;justify-content:center;align-items:stretch}.info-column{background:var(--panel-bg);border-radius:1rem;padding:1rem;box-shadow:0 20px 40px #00000073;border:1px solid var(--border-subtle)}.board-header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem;font-size:.95rem}.board-header-row span{font-weight:500}.board-header-row .btn{font-size:.85rem;padding:.35rem .9rem;border-radius:999px}.board-header-row .btn-outline-light{border-color:#94a3b8e6;color:var(--text-main)}.board-header-row .btn-outline-light:hover,.board-header-row .btn-outline-light:focus-visible{border-color:#60a5fa;background-color:#2563eb59}.board-header-row .btn:focus-visible{outline:2px solid #fbbf24;outline-offset:2px}.board-header{width:100%;margin-bottom:.5rem;text-align:center;font-weight:500;font-size:.95rem;color:var(--text-muted)}@media(max-width:600px){.board-column{padding:.75rem}}.square.light{background:var(--board-light)}.square.dark{background:var(--board-dark)}.square:hover{filter:brightness(1.03)}.square:focus-visible{box-shadow:inset 0 0 0 3px #f97316}Help color-blind users by adding a tiny dot on dark squares .square.dark:after{content:"";position:absolute;width:4px;height:4px;border-radius:999px;background:#0f172acc;top:4px;right:4px;opacity:.6}.piece{font-size:3.8rem;line-height:1;-webkit-user-select:none;user-select:none;filter:drop-shadow(0 4px 4px rgba(0,0,0,.4))}.piece-w{color:#f9fafb;text-shadow:-1px -1px 2px #333,1px -1px 2px #333,-1px 1px 2px #333,1px 1px 2px #333}.piece-b{color:#111827}.square.dark .piece-b{text-shadow:0 0 1px #f9fafb}.players{display:flex;flex-direction:column;gap:.25rem;font-size:.95rem;margin-bottom:.75rem}.status-line{font-size:.9rem;margin-bottom:.75rem}.result-tag{display:inline-block;margin-left:.5rem;padding:.15rem .5rem;border-radius:999px;background:#22c55e33;border:1px solid #22c55eaa;font-size:.8rem}.moves-list{max-height:380px;overflow-y:auto;padding-right:.25rem}.moves-list::-webkit-scrollbar{width:8px}.moves-list::-webkit-scrollbar-track{background:#0f172ae6}.moves-list::-webkit-scrollbar-thumb{background:#4b5563;border-radius:999px}.move-row{display:flex;align-items:center;gap:.4rem;padding:.2rem 0;font-size:.95rem}.move-row:nth-child(odd){background:#0f172a80;border-radius:.3rem}.move-num{width:2.3rem;text-align:right;opacity:.7}.move-color{width:1.5rem;font-weight:600}.move-color.white{color:#facc15}.move-color.black{color:#60a5fa}.move-notation{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.empty{opacity:.8;font-size:.9rem}.error{color:#fecaca}.new-game-form{margin-top:1.5rem;padding:1rem 1.5rem;background:#0f172ad9;border-radius:1rem;display:flex;flex-direction:column;gap:1rem;max-width:600px;margin-left:auto;margin-right:auto;box-shadow:0 20px 40px #00000073;border:1px solid var(--border-subtle)}.player-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}@media(max-width:600px){.chess-board{height:80vw;max-height:none;display:grid;grid-template-rows:repeat(8,1fr);aspect-ratio:1 / 1}.piece{transform:translateY(-2px);font-size:3rem}}.player-card{background:#0f172ae6;border-radius:.75rem;padding:.75rem 1rem;border:1px solid rgba(148,163,184,.4)}.player-card h3{margin-top:0;margin-bottom:.5rem}.player-card label{display:flex;flex-direction:column;font-size:.85rem;margin-bottom:.5rem;gap:.25rem}.player-card input{border-radius:.5rem;border:1px solid rgba(148,163,184,.6);padding:.4rem .6rem;background:#020617;color:var(--text-main)}.player-card input:focus-visible{outline:2px solid #38bdf8;outline-offset:2px}.primary-btn{border:1px solid rgba(140,190,255,.25);background:linear-gradient(180deg,#4b83bd,#2f5f95);color:#fff}.primary-btn:disabled{opacity:.6;cursor:default}.primary-btn:focus-visible{outline:2px solid #fbbf24;outline-offset:2px}.info-header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.info-header-row h2{margin:0}.square.light{background:#fafafa}.square.dark{background:#9ca3af}.piece{transform:translateY(-2px);font-size:3rem;filter:drop-shadow(0 4px 4px rgba(0,0,0,.35));-webkit-user-select:none;user-select:none}.square.selected{background-color:rgba(120,208,218,);border:3px solid #00b4ff;box-sizing:border-box}.square.selected.hover-highlight{border:3px solid #00b4ff}.square.legal-move{box-sizing:border-box}.square.legal-move:after{content:"";position:absolute;width:12px;height:12px;border-radius:50%;background:#000;box-shadow:0 1px 4px #00000059;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none}.square.light.legal-move:after{border:1px solid rgba(0,0,0,.45)}.square.dark.legal-move:after{border:1px solid rgba(255,255,255,.12)}.square:hover:not(.selected):not(.legal-move){filter:brightness(1.03)}.square.selected.legal-move{border-color:#00b4ff}.players{display:flex;justify-content:space-between;gap:16px}.player{display:flex;flex-direction:column;min-width:160px}.player-line{display:flex;gap:6px;align-items:baseline}.captured-pieces{margin-top:4px;display:flex;gap:6px;font-size:20px;line-height:1;flex-wrap:wrap}.captured-black .captured-piece{color:#111;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}.captured-white .captured-piece{color:#f8f8f8;text-shadow:-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000}.captured-empty{opacity:.6}.captured-piece{display:inline-flex}.capture-tag{margin-left:8px;opacity:.7;font-size:12px}.status-line{display:flex;align-items:center;gap:10px}.result-tag{padding:2px 8px;border-radius:999px;background:#ffffff2e}.game-over-banner{margin-top:10px;padding:10px 12px;border-radius:12px;font-weight:700;background:#00000040;border:1px solid rgba(255,255,255,.2)}.capture-ring{position:absolute;width:44px;height:44px;border-radius:999px;left:50%;top:50%;transform:translate(-50%,-50%);border:4px solid rgba(0,0,0,.35);box-sizing:border-box}.legal-dot{position:absolute;width:14px;height:14px;border-radius:999px;left:50%;top:50%;transform:translate(-50%,-50%);background:#00000059}.promo-overlay{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9999}.promo-modal{background:#141414f2;border:1px solid rgba(255,255,255,.15);border-radius:14px;padding:16px;width:320px;color:#fff}.promo-title{font-weight:700;margin-bottom:12px}.promo-buttons{display:grid;grid-template-columns:1fr 1fr;gap:10px}.promo-btn{padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:#ffffff14;color:#fff;cursor:pointer}.promo-cancel{margin-top:12px;width:100%;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:transparent;color:#fff;cursor:pointer}.promo-overlay{position:fixed;inset:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:9999}.promo-pop{background:#121212f2;border:1px solid rgba(255,255,255,.18);border-radius:14px;padding:14px;width:280px;color:#fff}.promo-title{font-weight:700;margin-bottom:10px}.promo-row{display:flex;gap:10px;align-items:center}.promo-select{flex:1;padding:10px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:#ffffff14;color:#fff}.promo-ok,.promo-cancel{padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:#ffffff1a;color:#fff;cursor:pointer}.promo-cancel{margin-top:10px;width:100%;background:transparent}.square{position:relative}.promo-inline{position:absolute;inset:4px;display:grid;grid-template-columns:1fr 1fr;gap:4px;background:#0000008c;border-radius:10px;padding:4px;z-index:5}.promo-inline-btn{border:1px solid rgba(255,255,255,.22);background:#ffffff1a;border-radius:8px;color:#fff;font-size:22px;cursor:pointer;line-height:1}.promo-inline-btn:hover{background:#ffffff2e}.modal{background:#fff;padding:24px;border-radius:10px;text-align:center;width:320px}.winner-big{font-size:24px;margin:16px 0}.modal-backdrop{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:999}.modal{background:#fff;padding:22px;border-radius:12px;width:360px;text-align:center}.winner-big{font-size:22px;margin:10px 0 16px}.rating-box{border:1px solid #ddd;border-radius:10px;padding:12px;margin:12px 0;text-align:left}.rating-row{display:flex;justify-content:space-between;padding:6px 0}.modal-actions{display:flex;gap:10px;justify-content:center}.time-control{margin-top:1.5rem;display:flex;justify-content:center}.time-control label{display:flex;flex-direction:column;align-items:center;gap:.4rem;font-weight:600}.time-control select{width:260px;padding:.65rem .75rem;font-size:1rem;border-radius:8px}.gameover-overlay{position:fixed;inset:0;display:grid;place-items:center;padding:16px;background:#0f172a8c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:9999}.gameover-modal{width:min(520px,92vw);background:#f1f5f9;color:#0f172a;border-radius:18px;padding:22px 22px 18px;box-shadow:0 30px 70px #0f172a59;border:1px solid rgba(15,23,42,.08);text-align:center}.draw-line,.winner-line{margin:12px 0 0;font-size:1.15rem;font-weight:700}.winner-line{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}.winner-name{font-weight:800}.winner-suffix{font-weight:700;opacity:.9}.winner-badge{font-size:.75rem;font-weight:800;padding:6px 10px;border-radius:999px;border:1px solid rgba(15,23,42,.12);letter-spacing:.6px}.winner-badge.white{background:#f8fafc}.winner-badge.black{background:#0f172a;color:#fff;border-color:#fff3}.rating-line{margin:10px 0 0;font-size:1rem;color:#0f172ae6}.rating-pill{display:inline-block;padding:4px 10px;border-radius:999px;font-weight:800;border:1px solid rgba(15,23,42,.12)}.rating-pill.pos{background:#22c55e1f}.rating-pill.neg{background:#ef44441f}.gameover-actions{display:flex;gap:12px;justify-content:center;margin-top:18px}.gameover-actions .primary-btn,.gameover-actions .secondary-btn{min-width:140px;padding:10px 14px;border-radius:10px;font-weight:700}@media(max-width:380px){.gameover-actions{flex-direction:column}.gameover-actions .primary-btn,.gameover-actions .secondary-btn{width:100%}}.gameover-modal{background:#fff;color:#0f172a}.winner-badge.black{background:#0f172a;color:#fff;border-color:#334155}.winner-line{color:#0f172a}.gameover-title:after{content:"";display:block;width:64px;height:3px;margin:10px auto 0;border-radius:999px;background:linear-gradient(90deg,#60a5fa,#2563eb)}.winner-suffix{color:#334155}.rating-pill.pos{color:#166534;background:#22c55e26}.rating-pill.neg{color:#7f1d1d;background:#ef444426}.gameover-modal,.gameover-modal *{color:#0f172a}.gameover-title{color:#1e52db;font-weight:800}.draw-line{color:#eab308}.winner-line,.winner-name{color:#0f172a}.winner-suffix{color:#475569}.winner-badge.white{background:#f1f5f9;color:#0f172a;border-color:#0f172a33}.winner-badge.black{background:#0f172a;color:#fff;border-color:#60a5fa73}.rating-line{color:#0f172a}.rating-pill{color:#0f172a;border-color:#0f172a2e}.rating-pill.pos{color:#166534;background:#22c55e2e}.rating-pill.neg{color:#7f1d1d;background:#ef44442e}.gameover-overlay{z-index:999999}.lobby-card h3{margin:0 0 10px}.lobby-card label{display:flex;flex-direction:column;gap:6px;margin-top:10px;font-size:.9rem}.secondary-btn{border:1px solid rgba(148,163,184,.55);background:transparent;color:var(--text-main)}.secondary-btn:hover{border-color:#60a5fa}.lobby-grid{margin-top:16px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;max-width:980px;margin-left:auto;margin-right:auto}@media(max-width:900px){.lobby-grid{grid-template-columns:1fr}}.lobby-card{background:#0f172ae6;border:1px solid rgba(148,163,184,.4);border-radius:14px;padding:14px;text-align:left}.lobby-card label{display:flex;flex-direction:column;gap:6px;margin-top:10px}.lobby-card select{padding:10px 12px;border-radius:10px;border:1px solid rgba(148,163,184,.55);background:#020617;color:var(--text-main)}.gameover-actions .primary-btn{background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;border:none;font-weight:800}.gameover-actions .primary-btn:hover{background:linear-gradient(135deg,#1d4ed8,#1e40af)}.gameover-actions .primary-btn:focus-visible{outline:2px solid #93c5fd;outline-offset:2px}.gameover-actions .secondary-btn{background:#f8fafc;color:#1e293b;border:1px solid #cbd5e1;font-weight:700}.gameover-actions .secondary-btn:hover{background:#e2e8f0;border-color:#94a3b8;color:#0f172a}.gameover-actions .secondary-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.winner-line{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:14px;font-size:1.15rem}.winner-badge{font-size:.75rem;font-weight:800;padding:6px 12px;border-radius:999px;letter-spacing:.6px}.winner-badge.white{background:#f1f5f9;color:#1e293b;border:1px solid #cbd5e1}.winner-badge.black{background:#0f172a;color:#fff;border:1px solid #334155}.winner-name{font-weight:900;color:#0f172a}.winner-suffix{font-weight:700;color:#475569}.winner-line span:last-child{font-size:1.25rem}.rating-line{margin-top:10px;font-size:1rem;color:#334155}.rating-pill{margin-left:6px;padding:4px 12px;border-radius:999px;font-weight:800;font-size:.95rem}.rating-pill.pos{color:#166534;background:#22c55e2e;border:1px solid rgba(34,197,94,.45)}.rating-pill.neg{color:#7f1d1d;background:#ef44442e;border:1px solid rgba(239,68,68,.45)}.topbar-right{display:flex;align-items:center;gap:12px}.user-chip{padding:6px 12px;border-radius:999px;background:#ffffff14;border:1px solid rgba(148,163,184,.35);font-weight:600;font-size:.9rem}.coord{position:absolute;font-size:11px;font-weight:800;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.9;color:#000;text-shadow:0 0 2px #fff}.coord{position:absolute;z-index:100;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:13px;font-weight:900;color:#000;text-shadow:0 0 2px #fff}.piece{position:relative;z-index:20}.legal-dot,.capture-ring{z-index:10}.coord{position:absolute;z-index:100;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:12px;font-weight:800;opacity:.85}.coord.file{left:auto!important;right:6px!important;bottom:4px!important}.square.light .coord{color:#334155;text-shadow:none}.square.dark .coord{color:#f8fafc;text-shadow:0 1px 2px rgba(0,0,0,.35)}:root{--piece-light: #f1f5f9;--piece-dark: #111827;--piece-stroke-light: #1f2937;--piece-stroke-dark: #cbd5e1;--hi: .4;--sh: .2}.piece-img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:92%;height:92%;object-fit:contain;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:20}.piece-img{width:110%!important;height:110%!important}.piece-img.king{width:96%;height:96%}.legal-dot,.capture-ring{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:10}.piece-img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:82%;height:82%;object-fit:contain;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:20}.square.light{background:#e5e7eb}.square.dark{background:#64748b}.lobby-card{margin:18px auto 0;max-width:560px;padding:16px;border-radius:14px;background:#0f172ae0;border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 40px #00000073}.lobby-row-center{margin-top:10px;justify-content:center}.lobby-label{display:flex;flex-direction:column;gap:6px;font-weight:700;font-size:.9rem;color:#ffffffe6;min-width:210px}.lobby-select{width:100%;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.16);background:#ffffff14;color:#fff;outline:none}.lobby-select:focus{border-color:#60a5fabf;box-shadow:0 0 0 3px #60a5fa38}.lobby-sep{margin:14px 0;border:none;height:1px;background:#ffffff1f}.lobby-btn{min-width:170px;padding:10px 14px;border-radius:10px;font-weight:800}.secondary-btn:hover{background:#ffffff29}.clock{margin-top:6px;display:inline-flex;align-items:center;justify-content:center;min-width:92px;padding:8px 10px;border-radius:10px;font-weight:900;letter-spacing:.5px;background:#ffffff1a;border:1px solid rgba(255,255,255,.16);color:#fff}.clock.active{background:#3b82f638;border-color:#3b82f68c;box-shadow:0 0 0 3px #3b82f62e}.piece-white{color:#edeff2}.square.dark{background:#475569}.piece-white{text-shadow:0 0 2px rgba(0,0,0,.6)}.time-low{color:#ef4444;font-weight:900}.clock.active .time-low{animation:timeBlink 1s steps(1) infinite}@keyframes timeBlink{50%{opacity:.6}}.topbar-actions{display:flex;align-items:center;gap:10px}.topbar-title{margin:0;cursor:pointer;-webkit-user-select:none;user-select:none}.topbar-btn{padding:10px 14px;border-radius:10px;font-family:inherit;font-size:.95rem;font-weight:800;letter-spacing:.2px;cursor:pointer;border:1px solid transparent;color:#fff}.topbar-btn-primary{background:linear-gradient(180deg,#3b82f6,#2563eb);box-shadow:0 10px 22px #2563eb59}.topbar-btn-secondary{background:#ffffff1a;border-color:#ffffff2e}.topbar-btn:disabled{opacity:.6;cursor:default;box-shadow:none}.topbar-btn:active{transform:translateY(1px)}.topbar-link{color:#fff;text-decoration:none;font-weight:800;opacity:.9}.topbar-link:hover{opacity:1}.user-chip{padding:6px 14px;border-radius:999px;background:#ffffff24;font-weight:600;cursor:default;-webkit-user-select:none;user-select:none}.user-chip .elo{opacity:.7;font-weight:500}.captures{display:flex;align-items:center;gap:8px;margin-top:6px;opacity:.9}.captures-row{display:inline-flex;gap:2px;flex-wrap:wrap}.cap{font-size:16px;line-height:1}.cap-score{font-size:12px;opacity:.75}.gameover-overlay{position:fixed;inset:0;background:#050c18b8;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.gameover-modal{width:min(92vw,420px);background:linear-gradient(180deg,#102a44,#0b1f33);color:#f3f8ff;border:1px solid rgba(140,190,255,.18);border-radius:16px;padding:22px 20px;box-shadow:0 18px 55px #000000a6}.gameover-title{margin:0 0 12px;text-align:center;font-size:22px;font-weight:800;letter-spacing:.2px;color:#fff}.draw-line,.winner-line,.rating-line{margin:10px 0;text-align:center;color:#f3f8ff}.draw-line{font-size:18px;font-weight:700}.winner-line{display:flex;align-items:center;justify-content:center;gap:8px;font-size:18px;font-weight:700}.winner-name{color:#fff}.winner-suffix{opacity:.92;font-weight:700}.winner-badge{display:inline-flex;align-items:center;justify-content:center;height:22px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:800;letter-spacing:.4px}.winner-badge.white{background:#eaf2ff;color:#0b1f33}.winner-badge.black{background:#ffffff0f;color:#f3f8ff;border:1px solid rgba(140,190,255,.28)}.rating-line{font-size:14px;font-weight:600;opacity:.95}.rating-pill{display:inline-flex;align-items:center;justify-content:center;margin-left:8px;height:24px;padding:0 10px;border-radius:999px;font-weight:800;font-size:13px;letter-spacing:.2px}.rating-pill.pos{background:#1f8f4df2;color:#fff}.rating-pill.neg{background:#b93a3af2;color:#fff}.gameover-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}.primary-btn,.secondary-btn{appearance:none;-webkit-appearance:none;width:100%;height:42px;border-radius:10px;font-size:14px;font-weight:800;letter-spacing:.2px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;box-sizing:border-box;-webkit-user-select:none;user-select:none}.primary-btn:hover{filter:brightness(1.06)}.secondary-btn:hover{background:#ffffff14}.primary-btn:focus-visible,.secondary-btn:focus-visible{outline:3px solid rgba(140,190,255,.55);outline-offset:2px}.gameover-modal,.gameover-modal *{color:#f5f9ff}.gameover-title{color:#fff}.winner-line{color:#fff;font-weight:800}.winner-name{color:#fff;font-weight:900}.winner-suffix{color:#eaf2ff;opacity:1;font-weight:800}.gameover-modal .secondary-btn{border:1px solid rgba(148,163,184,.55);background:transparent;color:#f5f9ff}.gameover-modal .secondary-btn:hover,.gameover-modal .secondary-btn:focus-visible{color:#fff;background:#ffffff14}.lobby-btn{max-width:260px}.topbar-btn{appearance:none;-webkit-appearance:none;height:34px;padding:0 12px;border-radius:10px;border:1px solid rgba(148,163,184,.55);background:#ffffff0a;color:var(--text-main);font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;box-sizing:border-box}.topbar-btn:hover{background:#ffffff14}.topbar-btn:focus-visible{outline:3px solid rgba(140,190,255,.55);outline-offset:2px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.topbar-title{margin:0;flex:0 0 auto;white-space:nowrap}.topbar-right{display:flex;align-items:center;gap:10px;flex:0 0 auto}.player-label{margin-right:6px;white-space:nowrap}.chess-board.disabled{pointer-events:none}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:auto;clip:rect(0,0,0,0);white-space:nowrap;border:0}.chat-header{display:flex;align-items:center;justify-content:space-between;gap:10px}.chat-title{display:inline-flex;align-items:center;gap:10px;font-weight:900;letter-spacing:.2px}.chat-dot{width:10px;height:10px;border-radius:999px;background:#94a3b899;box-shadow:0 0 0 3px #94a3b826}.chat-dot[data-status=connected]{background:#22c55ef2;box-shadow:0 0 0 3px #22c55e38}.chat-dot[data-status=loading]{background:#3b82f6f2;box-shadow:0 0 0 3px #3b82f638}.chat-dot[data-status=error]{background:#ef4444f2;box-shadow:0 0 0 3px #ef444438}.chat-badge{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800;border:1px solid rgba(148,163,184,.35);background:#ffffff0f;color:var(--text-main)}.chat-badge.connected{border-color:#22c55e59;background:#22c55e1f}.chat-badge.loading{border-color:#3b82f659;background:#3b82f61f}.chat-badge.error{border-color:#ef444459;background:#ef44441f}.chat-error{border-radius:12px;border:1px solid rgba(239,68,68,.35);background:#ef44441f;padding:10px 12px;color:#fecaca;font-weight:700;font-size:13px}.chat-list{border-radius:12px;border:1px solid rgba(148,163,184,.28);background:#02061759;padding:10px;overflow-y:auto}.chat-empty{opacity:.75;font-size:13px;padding:6px 2px}.chat-row{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.chat-row.mine{align-items:flex-end}.chat-row.theirs{align-items:flex-start}.chat-meta{display:inline-flex;gap:8px;font-size:12px;opacity:.85}.chat-sender{font-weight:800;color:#eaf2ff}.chat-time{color:#e5e7ebbf}.chat-bubble{max-width:min(520px,92%);padding:10px 12px;border-radius:14px;line-height:1.35;word-break:break-word;border:1px solid rgba(148,163,184,.25);box-shadow:0 10px 18px #0000002e}.chat-bubble.theirs{background:#ffffff0f;color:var(--text-main)}.chat-bubble.mine{background:linear-gradient(135deg,#2563ebf2,#1d4ed8f2);border-color:#93c5fd59;color:#fff}.chat-input{flex:1 1 auto;min-width:0;width:100%;box-sizing:border-box}.chat-input::placeholder{color:#e5e7eb99}.chat-input:focus-visible{outline:3px solid rgba(96,165,250,.55);outline-offset:2px;border-color:#60a5fabf}.chat-send{flex:0 0 auto;width:auto;white-space:nowrap}.chat-input:disabled{opacity:.7;cursor:not-allowed}.chat-send:disabled{opacity:.6;cursor:not-allowed}.primary-btn{position:static}.chat-compose{position:relative;display:flex;align-items:center;gap:8px;width:100%}.chat-input{flex:1;min-width:0}.chat-send{flex:0 0 auto}.emoji-toggle{border:1px solid #ddd;background:#fff;border-radius:6px;padding:6px 8px;cursor:pointer}.emoji-picker{position:absolute;bottom:44px;left:0;background:#fff;border:1px solid #ddd;border-radius:8px;padding:6px;display:grid;grid-template-columns:repeat(6,1fr);gap:4px;box-shadow:0 6px 16px #00000026;z-index:10}.emoji-btn{background:none;border:none;font-size:20px;cursor:pointer}.topbar-btn.danger{background:#c62828}.topbar-btn.danger:hover{background:#b71c1c}.legal-dot{position:absolute;width:14px;height:14px;border-radius:999px;background:#00000073;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:none}.capture-ring{position:absolute;width:70%;height:70%;border-radius:999px;border:4px solid rgba(0,0,0,.45);left:50%;top:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:none}.piece-img{z-index:20}.ai-text{font-weight:600;letter-spacing:.4px}.ai-icon{margin-left:8px;font-size:1.2em;vertical-align:middle}.lobby-btn:hover .ai-icon{transform:scale(1.15);transition:transform .2s ease}.ai-image{width:20px;height:20px;min-width:40px;min-height:40px;object-fit:contain;flex-shrink:0}.ai-text{line-height:1}.ai-image{position:static!important}.piece-img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:90%;height:90%;object-fit:contain;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:20}.legal-dot{width:14px;height:14px;border-radius:50%;background:#00000073}.capture-ring{width:70%;height:70%;border-radius:50%;border:4px solid rgba(0,0,0,.45)}.coord{position:absolute;z-index:30;font-size:12px;font-weight:800;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.85}.coord.rank{top:4px;left:6px}.coord.file{right:6px;bottom:4px}@media(max-width:768px){.chess-board{max-width:100%}}.auth-page{display:flex;align-items:center;justify-content:center;padding:16px}.auth-card{width:100%;max-width:420px;background:#0f172aeb;border-radius:16px;padding:22px 20px;border:1px solid rgba(148,163,184,.35);box-shadow:0 24px 50px #0000008c}.auth-title{margin:0 0 16px;text-align:center;font-size:1.5rem;font-weight:800}.auth-toggle{display:flex;gap:10px;margin-bottom:16px}.auth-toggle button{flex:1}.auth-card form{display:flex;flex-direction:column;gap:14px}.auth-card label{display:flex;flex-direction:column;gap:6px;font-size:.9rem;font-weight:600;color:#e5e7eb}.auth-card input{padding:10px 12px;border-radius:10px;border:1px solid rgba(148,163,184,.55);background:#020617;color:#f9fafb;font-size:1rem}.auth-card input::placeholder{color:#e5e7eb99}.auth-card input:focus-visible{outline:3px solid rgba(96,165,250,.6);outline-offset:2px;border-color:#60a5fad9}.auth-card .error{color:#fecaca;background:#ef44441f;border:1px solid rgba(239,68,68,.35);padding:8px 10px;border-radius:10px;font-size:.85rem;text-align:center}.full-width{width:100%}@media(max-width:420px){.auth-card{padding:18px 16px}.auth-title{font-size:1.35rem}}.centered{min-height:calc(100vh - 64px);display:flex;justify-content:center;align-items:flex-start;padding:24px 16px}@media(min-width:769px){.centered{align-items:flex-start;padding-top:96px}}.lobby-card{margin:18px auto 0;max-width:560px;padding:18px 16px;border-radius:16px;background:#0f172aeb;border:1px solid rgba(148,163,184,.35);box-shadow:0 24px 50px #0000008c;text-align:left}.lobby-row{display:flex;gap:12px;align-items:flex-end;justify-content:center;flex-wrap:wrap}.lobby-row-center{justify-content:center;margin-top:12px}.lobby-label{display:flex;flex-direction:column;gap:6px;font-weight:700;font-size:.9rem;color:#e5e7eb;min-width:220px}.lobby-select{width:100%;padding:10px 12px;border-radius:10px;border:1px solid rgba(148,163,184,.55);background:#020617;color:#f9fafb;font-size:1rem}.lobby-select:focus-visible{outline:3px solid rgba(96,165,250,.6);outline-offset:2px;border-color:#60a5fad9}.lobby-sep{margin:16px 0;border:none;height:1px;background:#94a3b840}.lobby-btn{min-width:220px;max-width:260px;padding:10px 16px;border-radius:10px;font-weight:800}.ai-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;white-space:nowrap}.ai-text{font-weight:700;letter-spacing:.4px}.lobby-card .error{margin-top:10px;color:#fecaca;background:#ef44441f;border:1px solid rgba(239,68,68,.35);padding:8px 10px;border-radius:10px;font-size:.85rem;text-align:center}@media(max-width:420px){.lobby-card{padding:16px 14px}.lobby-label{min-width:100%}.lobby-btn{width:100%;max-width:100%}}.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;background:#0f172af2;border-bottom:1px solid rgba(148,163,184,.35);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.topbar-title{margin:0;font-size:1.4rem;font-weight:900;cursor:pointer;-webkit-user-select:none;user-select:none}.topbar-right{display:flex;align-items:center;gap:10px}.user-chip{padding:6px 14px;border-radius:999px;background:#ffffff24;font-weight:600;cursor:default}.turn-indicator.human-turn{color:#0f8;font-weight:700;animation:pulse 1.2s infinite}.turn-indicator.ai-turn{color:#fc0}@keyframes pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.square.last-from{box-shadow:inset 0 0 0 3px #ffaa00e6}.square.last-to{box-shadow:inset 0 0 0 3px #50c8fff2;animation:pulseMove .8s ease-out 1}@keyframes pulseMove{0%{box-shadow:inset 0 0 0 6px #50c8ff}to{box-shadow:inset 0 0 0 3px #50c8fff2}}.info-column{flex:1}@media(max-width:768px){.info-column{width:100%;max-height:none;overflow-y:visible}}@media(max-width:768px){.game-chat-wrap{max-height:220px;overflow-y:auto}}.chat-panel{background:var(--panel-bg);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:0 20px 40px #00000059;padding:12px;display:flex;flex-direction:column;gap:10px}.game-chat-wrap,.chat-panel{width:100%;min-width:0}@media(max-width:768px){.chat-panel{height:auto;max-height:none}.chat-list{max-height:200px;overflow-y:auto}.chat-compose{position:sticky;bottom:0;background:var(--panel-bg);padding-top:8px}}.open-chat-btn{margin-top:10px;width:100%;padding:10px;font-size:16px;border-radius:8px}@media(max-height:500px){.chat-list{max-height:140px}}.board-controls{margin-top:8px;display:flex;justify-content:center}.hint-toggle{display:flex;gap:6px;align-items:center;font-size:14px}.lobby-card{width:100%;max-width:420px;margin:0 auto}@media(max-width:768px){.lobby-card{padding:16px}.lobby-row{margin-bottom:14px}}.lobby-btn{width:100%;min-height:48px;font-size:16px}@media(max-width:768px){.user-picker-list{max-height:220px;overflow-y:auto}}.ai-btn{background:linear-gradient(135deg,#222,#111);border:1px solid #00ff88}.hint-toggle-overlay input{transform:scale(1.1)}@media(max-width:768px){.hint-toggle-overlay{top:6px;right:6px;font-size:14px;padding:8px 12px}}@media(max-width:768px){.board-column{flex:none;width:100%}}@media(max-width:768px){.info-column{margin-top:24px;width:100%}}.board-container{position:relative;width:fit-content;margin:0 auto}.board-overlay-controls{position:absolute;top:8px;right:8px;display:flex;gap:6px;z-index:5}.fullscreen-btn{background:#000000a6;color:#fff;border:none;padding:6px 10px;border-radius:10px;font-size:13px}@media(max-width:768px){.board-fullscreen{position:fixed;inset:0;background:#000;z-index:9999;overflow:auto}.board-fullscreen .info-column{display:none}.board-fullscreen .board-column{width:100%;height:100%}}.mobile-toggle-bar{display:none}@media(max-width:768px){.mobile-toggle-bar{display:flex;position:sticky;top:0;z-index:20;background:#111;border-radius:10px;overflow:auto;margin-bottom:8px}.mobile-toggle-bar button{flex:1;padding:12px;font-size:15px;border:none;background:#222;color:#aaa}.mobile-toggle-bar button.active{background:#000;color:#fff;font-weight:600}}html,body{max-width:100%;overflow-x:hidden}.board-overlay-top{position:absolute;top:8px;left:8px;right:8px;display:flex;justify-content:space-between;z-index:10}@media(max-width:768px){.info-column{display:none}}.board-overlay-top{position:absolute;top:8px;left:8px;right:8px;z-index:10}.board-overlay-center{position:absolute;top:48px;width:100%;text-align:center;z-index:10}.board-column{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:0;margin:0}.board-shell{position:relative;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:48px}.app,.layout{min-height:0;height:auto}body{background:#0b1220}@media(max-width:768px){#root{padding:0!important;max-width:100%}}@media(min-width:769px){.main-content{display:flex;justify-content:center;align-items:flex-start;padding:24px}.info-column{display:block;width:100%}}.auth-mode-switch{display:flex;gap:8;margin-bottom:16px}@media(max-width:768px){.auth-mode-switch{flex-direction:column;align-items:stretch}.auth-mode-switch button{width:100%}}@media(min-width:769px){.auth-mode-switch{flex-direction:row;justify-content:center}}.auth-controls{display:flex;gap:8px}@media(max-width:768px){.auth-controls{flex-direction:column;align-items:stretch}.auth-controls button{width:100%}}@media(max-width:768px){.app-header{align-items:flex-start}}.app-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px}.header-actions{display:flex;gap:8px}@media(max-width:768px){.app-header{flex-direction:column;align-items:stretch;gap:8px}.header-actions{flex-direction:column;width:100%}.header-actions button{width:100%}}@media(max-width:768px){.board-shell,.board-column{height:auto!important;min-height:auto!important;flex:none!important}}@media(max-width:768px){.info-column{position:static!important;width:100%;margin-top:12px}}.board-header{height:32px;display:flex;align-items:center;justify-content:center}@media(max-width:768px){.board-column{padding-bottom:env(safe-area-inset-bottom);padding-bottom:12px}}@media(max-width:768px){.board-column{padding-bottom:max(12px,env(safe-area-inset-bottom))}}.game-turn-indicator{height:32px;display:flex;justify-content:center;align-items:center;margin-bottom:4px}.turn-pill{font-size:14px;padding:4px 10px;border-radius:999px;font-weight:600;white-space:nowrap}.turn-pill.your-turn{background:#1e7f43;color:#fff}.turn-pill.opponent-turn{background:#444;color:#ddd}.board-column{position:relative}.board-overlay-top{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:6px 8px;z-index:10;pointer-events:none}.board-overlay-top button,.board-overlay-top label{pointer-events:auto}.board-header{min-height:24px;display:flex;align-items:center;justify-content:center}.turn-indicator{font-size:13px;font-weight:600;opacity:1;transition:opacity .2s ease}.turn-indicator.ai-turn{opacity:0}.square{width:100%;height:100%;position:relative}.board-column{position:relative;display:flex;justify-content:center;align-items:center;height:auto}.chess-board{width:min(92vmin,100%);aspect-ratio:1 / 1;display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr)}@media(max-width:768px){html,body,#root,.app,.layout,.main-content,.board-shell,.board-column{height:auto!important;min-height:0!important;overflow:visible!important}}@media(max-width:768px){.chess-board{width:min(96vw,calc(100svh - 64px));height:min(96vw,calc(100svh - 64px));aspect-ratio:1 / 1}}@media(max-width:768px){html,body,#root{height:auto;overflow:visible}.board-shell,.board-column{height:auto!important;overflow:visible!important}.chess-board{width:min(96vw,calc(100svh - 64px));height:min(96vw,calc(100svh - 64px));aspect-ratio:1 / 1}.rank-row{display:contents}}.chess-board{display:grid;grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr);aspect-ratio:1 / 1}@media(max-width:768px){.chess-board{width:min(96vw,calc(100svh - 64px));height:min(96vw,calc(100svh - 64px))}}@media(min-width:769px){.chess-board{width:min(560px,90vw)}}.rank-row{display:contents}.game-page{display:flex;flex-direction:column;align-items:center;gap:24px;width:100%}@media(min-width:769px){.game-page{flex-direction:row;align-items:flex-start;justify-content:center;gap:32px}.board-column{flex:0 0 auto}.info-column{flex:0 0 360px}}
