*{box-sizing:border-box}body{color:#e8e4d8;-webkit-font-smoothing:antialiased;background:#0a0a10;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:14px}h1,h2,h3{font-family:inherit}.bot-upload{color:#e8e4d8;background:#1a1a22;border-radius:6px;padding:16px}.bot-upload h2{color:#fae09a;margin:0 0 12px;font-size:18px}.bot-upload form{flex-direction:column;gap:10px;display:flex}.bot-upload label{color:#9a937a;flex-direction:column;gap:4px;font-size:12px;display:flex}.bot-upload input[type=text],.bot-upload input[type=password],.bot-upload input[type=file]{color:#e8e4d8;background:#0f0f14;border:1px solid #2b2b35;border-radius:4px;padding:8px;font-family:inherit;font-size:13px}.bot-upload-actions{align-items:center;gap:8px;display:flex}.bot-upload button{color:#1a1a22;cursor:pointer;background:#fae09a;border:none;border-radius:4px;padding:9px 16px;font-size:13px;font-weight:600}.bot-upload button.bot-upload-forget{color:#9a937a;background:0 0;padding:6px 10px;font-weight:400}.bot-upload button.bot-upload-forget:hover{color:#e8e4d8}.bot-upload button:disabled{opacity:.5;cursor:not-allowed}.bot-upload .status{margin:4px 0 0;font-size:12px}.bot-upload .status.ok{color:#6eff9a}.bot-upload .status.err{color:#ff6e6e;word-break:break-word}.leaderboard{color:#e8e4d8;background:#1a1a22;border-radius:6px;padding:16px}.leaderboard h2{color:#fae09a;margin:0 0 12px;font-size:18px}.leaderboard table{border-collapse:collapse;width:100%;font-size:13px}.leaderboard th,.leaderboard td{text-align:left;border-bottom:1px solid #2b2b35;padding:6px 8px}.leaderboard th{color:#9a937a;text-transform:uppercase;letter-spacing:.5px;font-size:11px;font-weight:400}.leaderboard .num{text-align:right;font-variant-numeric:tabular-nums}.leaderboard .empty{color:#777;font-size:13px;font-style:italic}.recent-matches{color:#e8e4d8;background:#1a1a22;border-radius:6px;padding:16px}.recent-matches h2{color:#fae09a;margin:0 0 12px;font-size:18px}.recent-matches ul{max-height:300px;margin:0;padding:0;list-style:none;overflow-y:auto}.recent-matches li{border-bottom:1px solid #2b2b35;grid-template-columns:1fr 60px 1fr auto;align-items:center;gap:8px;padding:6px 0;font-size:12px;display:grid}.recent-matches .name{color:#bbb;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.recent-matches .name.winner{color:#fae09a;font-weight:700}.recent-matches .score{text-align:center;font-variant-numeric:tabular-nums;color:#e8e4d8}.recent-matches .rating{color:#777;font-variant-numeric:tabular-nums;justify-self:end;font-size:11px}.recent-matches .empty{color:#777;font-size:13px;font-style:italic}.board-svg{background:#15151a;width:100%;height:auto;display:block}.featured{color:#e8e4d8;background:#1a1a22;border-radius:6px;flex-direction:column;gap:12px;padding:16px;display:flex}.featured-header{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.featured-header h2{color:#fae09a;margin:0;font-size:18px}.featured-header .status{color:#9a937a;font-size:12px}.featured-empty{text-align:center;color:#777;padding:40px 0;font-style:italic}.featured-scores{grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;font-size:16px;display:grid}.featured-scores .side{background:#0f0f14;border-left:3px solid #0000;border-radius:4px;align-items:center;gap:10px;padding:8px 12px;display:flex}.featured-scores .side.white{justify-content:flex-start}.featured-scores .side.black{border-left:none;border-right:3px solid #0000;justify-content:flex-end}.featured-scores .side.to-move{background:#1e1e28;border-color:#fae09a}.featured-scores .side.won .name{color:#6eff9a}.featured-scores .name{flex:1;font-weight:500}.featured-scores .score{color:#fae09a;text-align:center;font-variant-numeric:tabular-nums;min-width:30px;font-size:22px;font-weight:700}.featured-scores .swatch{background:#f4f1ea;border:1px solid #9c988e;border-radius:50%;width:18px;height:18px}.featured-scores .side.black .swatch{background:#1a1a1a;border-color:#050505}.featured-scores .vs{color:#555;font-size:12px}.game-result{color:#e8e4d8;text-align:center;background:#0f0f14;border-radius:4px;padding:10px 14px;font-size:13px}.my-panel{color:#e8e4d8;background:#1a1a22;border-radius:6px;padding:16px}.my-panel h2{color:#fae09a;margin:0 0 12px;font-size:18px}.my-panel .empty{color:#777;font-size:13px;font-style:italic}.my-panel .status.err{color:#ff8a8a;margin:4px 0;font-size:12px}.my-panel-header{justify-content:space-between;align-items:baseline;display:flex}.my-panel-header .whoami{color:#9a937a;font-variant-numeric:tabular-nums;font-size:12px}.my-tabs{gap:4px;margin-bottom:8px;display:flex}.my-tabs button{color:#cfc09a;cursor:pointer;background:#24242e;border:1px solid #2b2b35;border-radius:4px;padding:4px 10px;font-size:12px}.my-tabs button.active{color:#fae09a;background:#3a2e1c;border-color:#544026}.my-tabs button.refresh{margin-left:auto;padding:4px 8px}.my-tabs button:disabled{opacity:.5;cursor:default}.my-matches,.my-logs{max-height:320px;margin:0;padding:0;font-size:12px;list-style:none;overflow:auto}.my-matches li{font-variant-numeric:tabular-nums;border-bottom:1px solid #22222b;grid-template-columns:auto auto 1fr auto auto;align-items:center;gap:8px;padding:5px 4px;display:grid}.my-matches li.won .outcome{color:#6eff9a}.my-matches li.lost .outcome{color:#ff6e6e}.my-matches .side{color:#7a6f5a;font-size:11px}.my-matches .delta{font-weight:600}.my-matches .delta.up{color:#6eff9a}.my-matches .delta.down{color:#ff8a8a}.my-matches .when{color:#6b6550;font-size:11px}.my-logs li{border-bottom:1px solid #22222b;grid-template-columns:auto auto auto 1fr;align-items:baseline;gap:8px;padding:4px;font-family:ui-monospace,SFMono-Regular,monospace;display:grid}.my-logs .when{color:#6b6550;font-size:10px}.my-logs .lvl{border-radius:3px;padding:0 5px;font-size:10px;font-weight:600}.my-logs .lvl.lvl-info{color:#8abedd;background:#1e3248}.my-logs .lvl.lvl-warn{color:#f0c878;background:#3e321e}.my-logs .lvl.lvl-error{color:#ffa0a0;background:#3e1e1e}.my-logs .vs{color:#9a937a;font-size:11px}.my-logs .msg{word-break:break-word}.my-stats{flex-direction:column;gap:14px;display:flex}.my-stats .stat-row{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.my-stats .stat-box{background:#24242e;border:1px solid #2b2b35;border-radius:4px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.my-stats .stat-label{color:#9a937a;text-transform:uppercase;letter-spacing:.04em;font-size:11px}.my-stats .stat-value{color:#fae09a;font-variant-numeric:tabular-nums;font-size:22px;font-weight:600}.my-stats .stat-sub{color:#7a6f5a;font-variant-numeric:tabular-nums;font-size:11px}.my-stats .stat-block{background:#20202a;border-radius:4px;padding:10px 12px}.my-stats .stat-block h3{color:#9a937a;text-transform:uppercase;letter-spacing:.04em;margin:0 0 8px;font-size:12px;font-weight:500}.rating-chart{color:#fae09a;--accent:#fae09a;width:100%;height:140px;display:block}.chart-empty{color:#7a6f5a;text-align:center;padding:20px 4px;font-size:12px}.stat-opp{font-variant-numeric:tabular-nums;margin:0;padding:0;font-size:12px;list-style:none}.stat-opp li{grid-template-columns:90px 1fr 44px 54px;align-items:center;gap:8px;padding:3px 0;display:grid}.stat-opp .opp-name{color:#cfc09a;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;overflow:hidden}.stat-opp .opp-bar{background:#2b2b35;border-radius:2px;height:8px;position:relative;overflow:hidden}.stat-opp .opp-fill{background:#fae09a;height:100%;display:block}.stat-opp .opp-rate{color:#fae09a;text-align:right}.stat-opp .opp-count{color:#7a6f5a;text-align:right;font-size:11px}.app{color:#e8e4d8;background:#0a0a10;flex-direction:column;min-height:100vh;display:flex}.app-header{background:#15151a;border-bottom:1px solid #2b2b35;justify-content:space-between;align-items:center;padding:14px 24px;display:flex}.app-header h1{color:#fae09a;letter-spacing:.5px;margin:0;font-size:22px}.app-header .connection{color:#9a937a;align-items:center;gap:8px;font-size:12px;display:flex}.app-header .dot{border-radius:50%;width:8px;height:8px;display:inline-block}.app-header .dot.ok{background:#6eff9a;box-shadow:0 0 6px #6eff9a}.app-header .dot.off{background:#ff6e6e}.round-info{color:#cfc09a}.app-main{flex:1;grid-template-columns:minmax(0,1fr) 360px;gap:16px;padding:16px;display:grid}.col{flex-direction:column;gap:16px;min-width:0;display:flex}@media (width<=1000px){.app-main{grid-template-columns:1fr}}
