:root{color:#f0f6fc;font-synthesis-weight:none;text-rendering:optimizelegibility;--bg:#0d1117;--panel:#0d1117;--panel-alt:#111820;--line:#30363d;--line-soft:#21262d;--text:#f0f6fc;--muted:#8b949e;--green:#3fb98c;--red:#d46a55;--blue:#5b7cfa;--fail:#d46a55;--input-bg:#0b1016;--surface-strong:#0d1117f5;--surface-soft:#0d1117eb;--overlay-bg:#0d1117f0;--toast-bg:#0d1117f5;--shadow:0 18px 44px #0006;background:#0d1117;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.45}:root[data-theme=light]{color:#1f2933;--bg:#f4f7fb;--panel:#fff;--panel-alt:#edf2f7;--line:#cfd8e3;--line-soft:#e5ebf2;--text:#1f2933;--muted:#667085;--green:#1f8a70;--red:#c94f3d;--blue:#3b6cff;--fail:#c94f3d;--input-bg:#fff;--surface-strong:#fffffff5;--surface-soft:#ffffffeb;--overlay-bg:#f4f7fbf0;--toast-bg:#fffffffa;--shadow:0 18px 44px #1f293329;background:#f4f7fb}html,body,#app{width:100%;min-height:100%;margin:0}*{box-sizing:border-box}body{background:var(--bg)}body,.panel,.command-panel,.toast,.profile-card,.admin-panel,.duel-row,.ranking-row,.theme-menu,.boot-loading{transition:background-color .18s,border-color .18s,color .18s,box-shadow .18s,opacity .18s,transform .18s}*{scrollbar-width:thin;scrollbar-color:var(--line) var(--bg)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{border:2px solid var(--bg);background:var(--line);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#3f4a56}button,input,select,textarea{font:inherit}button{border:1px solid var(--line);min-height:32px;color:var(--text);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;justify-content:center;align-items:center;gap:6px;padding:6px 10px;font-weight:700;display:inline-flex}button:hover:not(:disabled){border-color:var(--green);color:var(--green)}button.danger:hover:not(:disabled){border-color:var(--red);color:#fff;background:#d46a551f}button.primary:hover:not(:disabled),button.success:hover:not(:disabled){border-color:var(--green);color:#fff}button:disabled{cursor:not-allowed;opacity:.45}button.primary,button.success{border-color:var(--green);background:var(--green);color:#fff}button.danger{border-color:var(--red);color:#ffd8d0}button.ghost{background:0 0}.icon-only{width:32px;margin:3px 10px;padding:0}input,select,textarea{border:1px solid var(--line);background:var(--input-bg);width:100%;min-height:32px;color:var(--text);border-radius:4px;padding:6px 8px}input:focus,select:focus,textarea:focus{border-color:var(--green);outline:0}textarea{resize:vertical;max-height:120px}a{color:var(--green);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:800;text-decoration:none}table{border-collapse:collapse;width:100%}th,td{border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:middle;padding:7px 6px}th{color:var(--muted);font:800 11px/1.2 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}td,code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.muted{color:var(--muted)}.topbar{z-index:20;border-bottom:1px solid var(--line);background:var(--bg);grid-template-columns:auto minmax(120px,1fr) auto;align-items:center;gap:10px;min-height:52px;padding:8px 12px;display:grid;position:sticky;top:0}.brand{border-color:#0000;justify-content:flex-start;padding-left:0;font-size:16px;font-weight:900}.brand img{object-fit:contain;flex:0 0 25px;width:25px;height:25px}.brand em{color:var(--muted);font:700 11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.status-pill,.session-user{align-items:center;gap:6px;display:inline-flex}.status-pill{border:1px solid var(--line);min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;padding:6px 8px;overflow:hidden}.status-pill.error{border-color:var(--red);color:#ffd8d0;background:#d46a551a}.session{align-items:center;gap:8px;display:flex}.theme-picker{position:relative}.theme-menu{z-index:30;border:1px solid var(--line);background:var(--panel);min-width:120px;box-shadow:var(--shadow);border-radius:4px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);right:0}.theme-menu button{background:0 0;border:0;border-radius:4px;justify-content:flex-start}.theme-menu button.active{background:color-mix(in srgb, var(--green) 14%, transparent);color:var(--green)}.boot-screen{z-index:1000;background:#181818;place-items:center;display:grid;position:fixed;inset:0;overflow:hidden}.boot-screen.leaving{pointer-events:none;animation:.26s forwards boot-fade-out}.boot-loading{color:#fff;letter-spacing:0;font-size:clamp(32px,6vw,58px);font-weight:900;position:relative}.session-menu{z-index:30;border:1px solid var(--line);background:var(--bg);min-width:150px;padding:6px;position:absolute;top:calc(100% + 6px);right:0}.session-user{min-height:40px}.home-grid,.room-grid{gap:14px;padding:14px;display:grid}.home-grid{grid-template-columns:minmax(280px,1fr) minmax(420px,2fr) minmax(280px,1fr);height:calc(100vh - 52px);min-height:calc(100vh - 52px)}.room-grid{grid-template:"head head head""roster roster roster""comms submissions problems"minmax(0,1fr)/minmax(320px,1fr) minmax(300px,.85fr) minmax(360px,1fr);height:calc(100vh - 52px);min-height:620px}.panel,.command-panel,.arena-head{border:1px solid var(--line);background:var(--panel);min-width:0;box-shadow:var(--shadow);border-radius:4px;transition:border-color .16s,transform .16s,box-shadow .16s;animation:.18s both card-in}.panel:hover,.command-panel:hover,.arena-head:hover{box-shadow:var(--shadow);border-color:#3fb98c70;transform:translateY(-1px)}.admin-room,.duel-row,.ranking-row,.room-card,.achievement,.profile-section{animation:.22s both card-in}.panel,.command-panel{padding:12px;overflow:auto}.arena-head{grid-area:head;grid-template-columns:minmax(0,1fr) minmax(420px,.9fr);align-items:center;gap:18px;padding:12px 14px;display:grid}.roster-panel{grid-area:roster;padding:8px 12px}.comms-panel{grid-area:comms;grid-template-rows:minmax(0,1fr) auto auto;gap:10px;display:grid}.home-chat-panel{min-height:0;display:grid}.home-room-panel{grid-template-rows:auto auto minmax(0,1fr);display:grid}.home-chat-panel .chat{grid-template-rows:auto minmax(0,1fr) auto;min-height:0;display:grid}.submissions-panel{grid-area:submissions;grid-template-rows:auto minmax(0,1fr);gap:10px;display:grid;overflow:hidden}.problems-panel{grid-area:problems;grid-template-rows:auto minmax(0,1fr);gap:10px;display:grid;overflow:hidden}.section-head,.panel-title{align-items:center;gap:8px;margin-bottom:10px;display:flex}.panel-title{border-bottom:1px solid var(--line-soft);margin-bottom:8px;padding-bottom:7px}.panel-title strong{letter-spacing:0;font:900 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.panel-title em{color:var(--muted);margin-left:auto;font:700 11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.section-head h1,.section-head h2,.arena-head h1,.center-screen h1,.end-card h1,.ban-overlay h1{color:var(--text);letter-spacing:0;margin:0}.section-head h1,.arena-head h1{font-size:24px;line-height:1.1}.section-head h2{font-size:16px}.section-head p,.arena-head p,.center-screen p,.end-card p,.ban-overlay p{color:var(--muted);margin:3px 0 0}.eyebrow{color:var(--green);margin:0 0 5px;font:900 11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.timer-block{gap:9px;display:grid}.timer-block>strong{color:var(--green);text-align:center;font:900 44px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.duel-progress{border:1px solid var(--line);height:28px;font:900 13px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:flex}.duel-progress>div{align-items:center;min-width:0;padding:0 8px;display:flex;overflow:hidden}.duel-progress .red-fill{background:var(--red);justify-content:flex-start}.duel-progress .blue-fill{background:var(--blue);justify-content:flex-end}.create-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.home-announcement{border:1px solid var(--line-soft);background:var(--panel-alt);border-radius:4px;margin:12px 0 14px;padding:10px 12px}.home-announcement h3{color:var(--green);margin:0 0 6px;font:900 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.home-announcement p{color:var(--muted);overflow-wrap:anywhere;margin:0}.create-form label{color:var(--muted);gap:5px;font-weight:700;display:grid}.difficulty-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.wide{grid-column:1/-1}.admin-panel{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.admin-panel p{color:var(--muted);margin:0 0 8px}.admin-room-list{gap:0;display:grid}.admin-moderation{border-bottom:1px solid var(--line-soft);grid-template-columns:repeat(4,minmax(0,1fr));align-items:center;gap:6px;margin-bottom:8px;padding-bottom:10px;display:grid}.admin-moderation input{grid-column:1/-1}.admin-room{border-bottom:1px solid var(--line-soft);grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 0;display:grid}.admin-room span{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.home-tabs{grid-template-columns:repeat(2,1fr);gap:6px;margin-bottom:10px;display:grid}.home-tabs button.active{border-color:var(--green);color:var(--green)}.duel-table,.ranking-list{border:1px solid var(--line-soft);border-radius:4px;min-height:0;overflow:auto}.duel-row,.ranking-row{border:0;border-bottom:1px solid var(--line-soft);width:100%;min-height:34px;color:var(--text);text-align:left;background:0 0;border-radius:0;display:grid}.duel-row{grid-template-columns:74px minmax(0,1fr) 76px}.duel-head{color:var(--muted);pointer-events:none;font-weight:900}.duel-row span,.duel-row code,.duel-row em{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.duel-row .room-line{min-width:0}.duel-row .room-line em{color:var(--muted);margin:0 5px;font-style:normal}.duel-row .room-line em.result-win{color:#86efac}.duel-row .room-line em.result-draw{color:#fde68a}.room-player{font-weight:800}.duel-row em{color:var(--muted);font-style:normal}.duel-row em.lobby{color:var(--green)}.duel-row em.arena{color:var(--blue)}.duel-row em.finished{color:#fde68a}.duel-row em.closed{color:var(--red)}.ranking-row{grid-template-columns:42px 26px minmax(0,1fr) 72px 56px;align-items:center}.ranking-row strong{text-overflow:ellipsis;overflow:hidden}.room-list,.history-list,.teams,.problem-grid,.votes,.system-flow{gap:0;display:grid}.teams{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.room-card,.history-list p,.team-card,.problem-card,.vote,.player-row{border:1px solid var(--line-soft);background:var(--panel);border-radius:4px;transition:border-color .14s,transform .14s,background .14s}.room-card:hover,.history-list p:hover,.team-card:hover,.problem-card:hover,.vote:hover,.player-row:hover{background:var(--panel-alt);border-color:#3fb98c5c;transform:translateY(-1px)}.roster-toggle{border-color:#0000;justify-content:flex-start;width:100%;padding:4px 0}.roster-toggle strong{font:900 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.roster-toggle span{color:var(--muted);margin-left:auto;font:800 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.room-card{grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;margin-bottom:8px;padding:9px;display:grid}.room-card strong,.room-card span,.history-list span,.history-list strong{display:block}.room-card span,.history-list span{color:var(--muted);font-size:12px}.room-card em{color:var(--muted);font:900 11px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.room-card em.live{color:var(--green)}.history-list p{justify-content:space-between;margin:0;padding:8px 0;display:flex}.room-controls{border-top:1px solid var(--line);gap:8px;padding-top:10px;display:grid}.match-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.segmented{grid-template-columns:auto repeat(3,1fr);gap:6px;display:grid}.segmented button.active{border-color:var(--green);color:var(--green)}.close-box{grid-template-columns:minmax(0,1fr) auto;gap:6px;display:grid}.team-card{margin-bottom:0;padding:10px}.team-card h3{margin:0 0 8px;font:900 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.team-card.red h3{color:var(--red)}.team-card.blue h3{color:var(--blue)}.player-row{grid-template-columns:34px minmax(0,1fr);gap:8px;margin-top:6px;padding:7px;display:grid}.avatar,.chat-avatar{border:1px solid var(--line);background:var(--panel-alt);color:var(--green);border-radius:50%;place-items:center;font:900 13px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:inline-grid}.avatar{width:32px;height:32px}.chat-avatar{width:22px;height:22px}img.avatar,img.chat-avatar{object-fit:cover}.segmented .leave-seat{border-color:var(--red);color:#ffd8d0}.player-main{align-items:baseline;gap:8px;min-width:0;display:flex}.player-main span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.player-main small{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.player-tags{flex-wrap:wrap;grid-column:2;gap:5px;display:flex}.player-row em,.difficulty-badge{border:1px solid var(--line);color:var(--muted);align-items:center;gap:4px;padding:1px 5px;font:800 10px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:inline-flex}.player-row.banned{color:var(--red)}.ban-tools{grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto auto;gap:5px;display:grid!important}.problem-grid{overflow:auto}.problem-card{gap:5px;margin-bottom:8px;padding:8px;display:grid}.problem-card>div:first-child{justify-content:space-between;gap:8px;display:flex}.problem-mask{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:900}.problem-card.red{color:var(--red)}.problem-card.blue{color:var(--blue)}.problem-actions{grid-template-columns:repeat(3,1fr);gap:5px;display:grid}.difficulty-badge{border-color:var(--line);color:color-mix(in srgb, var(--difficulty-color) 76%, white)}.chat{grid-template-rows:auto minmax(0,1fr) auto;min-height:0;display:grid}.chat-log{border:1px solid var(--line-soft);background:var(--input-bg);border-radius:4px;flex-direction:column;gap:0;height:auto;min-height:210px;display:flex;overflow:auto}.chat-line{grid-template-columns:26px minmax(92px,.4fr) minmax(0,1fr);gap:6px;margin:0;padding:7px;animation:.18s both line-in;display:grid}.chat-line>span:nth-child(2),.chat-name{color:var(--muted);font:800 11px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:contents}.chat-line.bubble{border:1px solid var(--line-soft);background:var(--panel-alt);border-radius:4px;grid-template-columns:26px minmax(0,1fr);width:fit-content;max-width:min(78%,620px);margin:4px 8px}.chat-line.mine{text-align:right;grid-template-columns:minmax(0,1fr) 26px;align-self:flex-end}.chat-line.mine .chat-avatar{grid-area:1/2}.chat-line.mine .chat-name,.chat-line.mine .chat-text{grid-column:1}.chat-line.theirs .chat-name{grid-column:2}.chat-line.theirs .chat-avatar{grid-area:1/1}.chat-line.bubble .chat-text{grid-row:2}.chat-line.theirs .chat-text{grid-column:2}.chat-line.system,.chat-line.judge{border-bottom:1px solid var(--line-soft)}.chat-name,.name-button{white-space:normal;background:0 0;border:0;justify-content:flex-start;min-height:0;padding:0}.title-name{min-height:0;font:inherit;background:0 0;border:0;padding:0;display:inline}.chat-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.chat-log .private{color:#f0c674}.chat-log .system{color:var(--muted)}.chat-log .judge.ok .chat-text{color:var(--green)}.chat-log .judge.fail .chat-text{color:var(--fail)}.chat-form{grid-template-columns:minmax(0,1fr) auto;gap:6px;margin-top:8px;display:grid}.home-chat-panel .chat-log{height:auto;min-height:0}.judge-log{min-height:0;overflow:auto}.judge-log>div:last-child{border:1px solid var(--line-soft)}.judge-log p,.system-flow p{border-bottom:1px solid var(--line-soft);margin:0;padding:6px}.judge-log p{grid-template-columns:74px 64px minmax(0,1fr) 54px;gap:8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:grid}.judge-log time{color:var(--muted)}.judge-log .ok strong,.feed-table .ok td:last-child{color:var(--green)}.judge-log .fail strong,.feed-table .fail td:last-child{color:var(--fail)}.vote{grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:6px;margin-bottom:8px;padding:7px;display:grid}.feed-table{border:1px solid var(--line-soft);align-self:stretch;display:block;overflow:auto}.feed-table thead,.feed-table tbody,.feed-table tr{table-layout:fixed;width:100%;display:table}.feed-table td{color:var(--text)}.feed-table td:first-child{color:var(--muted)}.system-flow{border:1px solid var(--line-soft);min-height:0;color:var(--muted);font-size:12px;overflow:auto}.center-screen{text-align:center;align-content:center;place-items:center;min-height:calc(100vh - 52px);padding:24px;display:grid}.end-overlay,.ban-overlay,.profile-overlay{z-index:50;background:var(--overlay-bg);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.toast-stack{z-index:70;pointer-events:none;gap:8px;width:min(360px,100vw - 32px);display:grid;position:fixed;bottom:16px;right:16px}.toast{border:1px solid var(--line);border-left:4px solid var(--green);background:var(--toast-bg);box-shadow:var(--shadow);border-radius:4px;grid-template-columns:26px minmax(0,1fr);align-items:start;column-gap:10px;padding:10px 12px;animation:.22s both toast-in;display:grid}.toast>img{border-radius:4px;width:22px;height:22px}.toast>strong,.toast>span{grid-column:2}.toast.warning{border-left-color:var(--red)}.toast.success{border-left-color:var(--green)}.toast strong,.toast span{display:block}.toast strong{margin-bottom:4px;font:900 12px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.toast span{color:var(--muted);overflow-wrap:anywhere}.end-card,.ban-overlay>div{border:1px solid var(--line);background:var(--bg);width:min(560px,100%);box-shadow:var(--shadow);text-align:center;border-radius:4px;padding:28px}.end-card h1,.ban-overlay h1{font-size:38px}.ban-overlay{z-index:80}.ban-overlay svg{color:var(--red)}.ban-overlay small{color:var(--muted)}.profile-page{min-height:calc(100vh - 52px);padding:16px;position:relative;overflow:auto}.profile-loading-overlay{z-index:20;background:var(--overlay-bg);position:fixed;inset:52px 0 0}.profile-card{border:1px solid var(--line);background:var(--bg);width:100%;box-shadow:var(--shadow);border-radius:4px;margin:0 auto;padding:18px;position:relative;overflow:auto}.profile-close{position:absolute;top:10px;right:10px}.profile-head{grid-template-columns:220px minmax(0,1fr);gap:18px;display:grid}.profile-avatar{border:1px solid var(--line);object-fit:cover;border-radius:300px;width:150px;height:150px}.profile-html{border:1px solid var(--line-soft);overflow-wrap:anywhere;border-radius:4px;min-height:160px;padding:12px}.profile-source{white-space:pre-wrap;overflow-wrap:anywhere;min-height:100%;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.profile-editor{resize:vertical;width:100%;min-height:160px;margin:0}.profile-actions{gap:8px;margin:12px 0;display:flex}.profile-stats,.profile-section p{border-bottom:1px solid var(--line-soft);justify-content:space-between;gap:10px;padding:8px 0;display:flex}.profile-section h2{font-size:15px}.achievement-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.achievement{border:1px solid var(--line-soft);border-radius:4px;grid-template-columns:42px minmax(0,1fr);gap:8px;min-height:118px;padding:10px;display:grid}.achievement>svg{color:var(--green)}.achievement.complete{background:#d4af3714;border-color:#d4af378c}.achievement.complete>svg,.achievement.complete h3,.achievement.complete span{color:#d4af37}.achievement h3,.achievement p{margin:0}.achievement span{color:var(--green);font:800 11px/1.4 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}@media (width<=1180px){.home-grid,.room-grid{grid-template-columns:1fr;height:auto;min-height:calc(100vh - 52px)}.room-grid{grid-template-rows:auto;grid-template-areas:"head""roster""comms""submissions""problems"}.arena-head,.profile-head,.achievement-grid{grid-template-columns:1fr}}@keyframes card-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes line-in{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}@keyframes toast-in{0%{opacity:0;transform:translateY(10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes float-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes boot-fade-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@media (width<=720px){.topbar,.create-form,.admin-room,.admin-moderation,.close-box,.chat-form,.room-card,.vote,.judge-log p{grid-template-columns:1fr}.timer-block>strong{font-size:32px}.segmented,.problem-actions,.teams,.match-actions{grid-template-columns:1fr}.chat-line{grid-template-columns:26px minmax(0,1fr)}.chat-line.bubble{width:calc(100% - 16px)}.chat-text{grid-column:2}.chat-line.mine .chat-text{grid-column:1}}
