:root{--bg:#EDF1F3;--surface:#FFFFFF;--ink:#15222C;--muted:#5B6974;--line:#D5DDE2;--teal:#0B6B66;--teal-ink:#FFFFFF;--signal:#D98A0B;--signal-soft:#FDF1DC;--ok:#2B7A4B;--bad:#B2391A;--bad-soft:#FBE8E2;--ok-soft:#E3F2E8;color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0);padding-bottom:env(safe-area-inset-bottom,0)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0E161B;--surface:#16222A;--ink:#E3EAEE;--muted:#93A3AE;--line:#263640;--teal:#46B5AC;--teal-ink:#06201E;--signal:#F0B23E;--signal-soft:#33280F;--ok:#5CC08A;--bad:#F07A5A;--bad-soft:#3A1E17;--ok-soft:#142D20;color-scheme:dark}}:root[data-theme=dark]{--bg:#0E161B;--surface:#16222A;--ink:#E3EAEE;--muted:#93A3AE;--line:#263640;--teal:#46B5AC;--teal-ink:#06201E;--signal:#F0B23E;--signal-soft:#33280F;--ok:#5CC08A;--bad:#F07A5A;--bad-soft:#3A1E17;--ok-soft:#142D20;color-scheme:dark}html{scroll-padding-top:env(safe-area-inset-top,0)}*,:after,:before{box-sizing:inherit}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 Zen Kaku Gothic New,Noto Sans SC,Hiragino Sans,Yu Gothic,system-ui,sans-serif;-webkit-font-smoothing:antialiased}html:lang(zh-CN) body{font-family:Noto Sans SC,Zen Kaku Gothic New,system-ui,sans-serif}#app{max-width:480px;margin:0 auto;min-height:100vh;padding-bottom:84px}.lvl-num,.num,.res-score{font-family:Barlow Condensed,Zen Kaku Gothic New,sans-serif;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;letter-spacing:.01em}button{font:inherit;color:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--teal);outline-offset:2px}.top{display:flex;justify-content:space-between;align-items:center;padding:14px 18px 6px}.brand{font-weight:700;font-size:17px;letter-spacing:.02em}.brand-sub{font-size:11px;color:var(--muted)}.langs{display:flex;border:1px solid var(--line);border-radius:999px;overflow:hidden}.lg{border:0;background:transparent;padding:5px 10px;font-size:12px;color:var(--muted)}.lg.on{background:var(--ink);color:var(--bg)}.pad{padding:8px 18px 24px}.h1{font-size:22px;margin:10px 0 4px}.h3{color:var(--muted);font-weight:500;margin:26px 0 8px}.h3,.h4{font-size:13px}.h4{margin:18px 0 6px}.lead{margin:0 0 16px;font-size:14px}.lead,.muted{color:var(--muted)}.small{font-size:12.5px}.err{color:var(--bad);background:var(--bad-soft);padding:10px 12px;border-radius:8px;font-size:13.5px}.btn{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:11px 16px;font-weight:500}.btn.primary{background:var(--teal);border-color:var(--teal);color:var(--teal-ink)}.btn.alert{background:var(--bad);border-color:var(--bad);color:#fff}.btn.wide{width:100%;margin-top:16px;padding:14px}.btn.sm{padding:6px 10px;font-size:12.5px}.btn:disabled{opacity:.6;cursor:default}.card{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 16px}.card.quiet p{margin:4px 0 0;color:var(--muted);font-size:14px}.card.alert{border-color:var(--bad)}.rowbtn{display:flex;justify-content:space-between}.lvl{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:16px 18px 14px;margin-top:6px}.lvl-row{display:flex;justify-content:space-between;align-items:flex-end}.lvl-num{font-size:84px;line-height:.82;font-weight:700}.lvl-num .lv{font-size:22px;margin-right:4px;color:var(--muted);font-weight:600}.lvl-meta{display:flex;flex-direction:column;align-items:flex-end;gap:6px;font-size:18px}.tierchip{display:inline-block;font-size:12px;border:1px solid var(--teal);color:var(--teal);border-radius:999px;padding:2px 10px;font-family:Zen Kaku Gothic New,Noto Sans SC,sans-serif}.ladder{position:relative;height:12px;background:repeating-linear-gradient(90deg,var(--line) 0 2px,transparent 2px 10%);border-radius:3px;margin:18px 0 4px;outline:1px solid var(--line)}.ladder i{position:absolute;inset:0 auto 0 0;background:var(--teal);border-radius:3px;transition:width .6s ease}.ladder .goal{position:absolute;right:-2px;top:-20px;font:600 13px Barlow Condensed,sans-serif;color:var(--muted)}.lvl-cap{margin:6px 0 0;font-size:12.5px;color:var(--muted)}.waiting{display:flex;gap:14px;align-items:center;padding:16px;border:1px dashed var(--line);border-radius:14px}.waiting p{margin:0;font-size:14px}.waiting small{color:var(--muted)}.pulse{width:10px;height:10px;border-radius:50%;background:var(--muted);flex:none;animation:p 2.4s ease-in-out infinite}@keyframes p{50%{opacity:.25}}.incoming{display:flex;flex-direction:column;gap:6px;width:100%;text-align:left;border:0;border-left:6px solid var(--signal);background:var(--signal-soft);border-radius:4px 14px 14px 4px;padding:14px 16px;animation:in .5s cubic-bezier(.2,.9,.3,1.2)}@keyframes in{0%{transform:translateY(-10px);opacity:0}}.incoming[data-tstate=late]{border-left-color:var(--bad);background:var(--bad-soft)}.in-top{display:flex;align-items:center;gap:8px;font-size:12px}.in-label{font-weight:700}.timer-sm{margin-left:auto;font:700 22px Barlow Condensed,sans-serif}.in-from{font-weight:700;font-size:16px}.in-from small{font-weight:400;color:var(--muted);font-size:12px}.in-prev{font-size:13.5px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.in-cta{align-self:flex-end;font-weight:700;color:var(--teal);font-size:13px}.tag{font-size:11px;padding:1px 8px;border-radius:4px;border:1px solid var(--muted);color:var(--muted)}.tag.u{border-color:var(--bad);color:var(--bad);font-weight:700}.hist{list-style:none;margin:0;padding:0}.hist li{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.hist small{display:block;color:var(--muted);font-size:12px}.sc{font-size:12px;text-align:right}.sc b{font-size:24px;margin-right:6px}.sc.p b{color:var(--ok)}.sc.f b{color:var(--bad)}.thread{padding:0 0 24px}.th-head{display:flex;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid var(--line);position:-webkit-sticky;position:sticky;top:env(safe-area-inset-top,0);background:var(--bg);z-index:2}.th-head small{display:block;color:var(--muted);font-size:12px}.th-head .tag{margin-left:auto}.back{border:0;background:none;font-size:28px;line-height:1;padding:0 6px}.chat{padding:16px 14px;display:flex;flex-direction:column;gap:10px}.bubble{max-width:86%;padding:10px 14px;border-radius:16px;font-size:14.5px;white-space:pre-wrap}.bubble p{margin:0}.bubble time{display:block;font-size:11px;color:var(--muted);margin-top:4px}.them{background:var(--surface);border:1px solid var(--line);border-bottom-left-radius:4px;align-self:flex-start}.me{background:var(--teal);color:var(--teal-ink);border-bottom-right-radius:4px;align-self:flex-end}.me time{color:inherit;opacity:.75}.banner{margin:0 14px 10px;padding:10px 12px;background:var(--bad-soft);border-radius:8px;font-size:13px}.timer{display:flex;align-items:center;gap:10px;margin:0 14px;font-size:12px;color:var(--muted)}.timer b{font-size:22px;color:var(--ink)}.tbar{flex:1 1;height:6px;background:var(--line);position:relative;overflow:visible}.tbar,.tbar i{border-radius:3px}.tbar i{inset:0 auto 0 0;background:var(--ok);width:0}.tbar em,.tbar i{position:absolute}.tbar em{top:-4px;bottom:-4px;width:2px;background:var(--ink)}.timer[data-tstate=warn] .tbar i{background:var(--signal)}.timer[data-tstate=late] .tbar i{background:var(--bad)}.timer[data-tstate=late] b{color:var(--bad)}.composer{margin:12px 14px 0}textarea{width:100%;min-height:120px;border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--surface);color:var(--ink);font:inherit;resize:vertical}.comp-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.result{margin:6px 14px 0;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:16px}.res-top{display:flex;justify-content:space-between;align-items:center}.stamp{font-weight:700;font-size:18px;padding:4px 14px;border:2px solid;border-radius:6px;transform:rotate(-4deg)}.pass .stamp{color:var(--ok)}.fail .stamp{color:var(--bad)}.res-score{font-size:64px;font-weight:700;line-height:1}.res-score small{font-size:20px;color:var(--muted)}.crit{color:var(--bad);font-weight:700}.brk,.crit{margin:6px 0}.brk{display:grid;grid-template-columns:1fr 90px 46px;grid-gap:8px;gap:8px;align-items:center;font-size:12.5px}.bk{height:6px;background:var(--line);border-radius:3px;overflow:hidden}.bk i{display:block;height:100%;background:var(--teal)}.brk b{text-align:right;font-size:16px}.crits{list-style:none;padding:0;margin:14px 0 0}.crits li{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--line);font-size:13.5px}.crits b{font-weight:500}.crits small{display:block;color:var(--muted);font-size:12.5px}.mk{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700}.ok .mk{background:var(--ok-soft);color:var(--ok)}.mid .mk{background:var(--signal-soft);color:var(--signal)}.ng .mk{background:var(--bad-soft);color:var(--bad)}.ctag,.itag{font-style:normal;font-size:10px;padding:0 5px;border-radius:3px;margin-left:4px;vertical-align:1px}.ctag{background:var(--bad);color:#fff}.itag{border:1px solid var(--teal);color:var(--teal)}.model{margin:0;padding:12px 14px;border-left:3px solid var(--teal);background:var(--bg);border-radius:0 8px 8px 0;font-size:14px;white-space:pre-wrap}.refs{padding:0;list-style:none;margin:0;font-size:13px}.refs li{margin:6px 0}.refs b{display:block}.gain{font-size:22px;color:var(--ok);margin:18px 0 0}.gain small{font-family:Zen Kaku Gothic New,sans-serif;font-size:12px;color:var(--muted)}.cert{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 16px}.cert.done{border-color:var(--ok);background:var(--ok-soft)}.cert ul{list-style:none;padding:0;margin:0}.cert li{display:flex;gap:10px;align-items:center;padding:6px 0;font-size:14px;color:var(--muted)}.cert li.ok{color:var(--ink)}.cert li .mk{background:var(--line)}.cert li.ok .mk{background:var(--ok);color:#fff}.stats{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;margin:14px 0 0}.stats div{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px}.stats dt{font-size:11px;color:var(--muted)}.stats dd{margin:0;font-size:26px;font-weight:700}.cases{list-style:none;padding:0;margin:0}.cases li{display:grid;grid-template-columns:34px 1fr auto;grid-gap:8px;gap:8px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px}.cases .d{font:600 13px Barlow Condensed,sans-serif;color:var(--muted)}.cases .st{font-size:12px;color:var(--muted)}.cases .cleared .st b{font-size:18px;color:var(--ok)}.cases .locked .nm{color:var(--muted)}.cases .inprog .st{color:var(--signal);font-weight:700}.prof{display:grid;grid-template-columns:auto 1fr;grid-gap:4px 14px;gap:4px 14px;font-size:13.5px;margin:0}.prof dt{color:var(--muted)}.code,.prof dd{margin:0}.code{list-style:none;padding:0}.code li{padding:12px 0;border-bottom:1px solid var(--line)}.code p{margin:2px 0 0;font-size:13.5px;color:var(--muted)}.form{gap:12px}.form,.form label{display:flex;flex-direction:column}.form label{gap:4px;font-size:13px;color:var(--muted)}input,select{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:15px}.form .check{flex-direction:row;align-items:flex-start;gap:10px;color:var(--ink);font-size:13.5px}.check input{margin-top:4px;width:18px;height:18px}.preview{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;font-size:13px}.preview:empty{display:none}.preview b{font-size:20px}.rules ol{padding-left:20px;margin:0;font-size:13.5px}.rules li{margin:4px 0}.adm{list-style:none;padding:0;margin:14px 0 0}.adm li{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:10px}.adm-h{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.adm p{margin:6px 0}.adm-b{display:flex;gap:8px;flex-wrap:wrap}.chip{font-size:11px;border:1px solid var(--line);border-radius:999px;padding:1px 8px;color:var(--muted)}.chip.ok{border-color:var(--ok);color:var(--ok)}.tabs{position:fixed;left:0;right:0;bottom:0;justify-content:center;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0);z-index:5}.tab,.tabs{display:flex}.tab{flex:1 1;max-width:120px;border:0;background:none;padding:8px 0 10px;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--muted)}.tab svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linejoin:round;stroke-linecap:round}.tab.on{color:var(--teal);font-weight:700}.inbox{display:flex;flex-direction:column;gap:10px}.count{font-size:12px;color:var(--signal);margin-left:6px}.av,.count{font-weight:700}.av{display:inline-grid;place-items:center;flex:none;width:30px;height:30px;border-radius:50%;background:hsl(var(--h) 45% 88%);color:hsl(var(--h) 55% 28%);font-size:14px;margin-right:8px;vertical-align:middle}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .av{background:hsl(var(--h) 30% 26%);color:hsl(var(--h) 60% 85%)}}:root[data-theme=dark] .av{background:hsl(var(--h) 30% 26%);color:hsl(var(--h) 60% 85%)}.th-head .av{margin-right:0}.in-from,.who{display:flex;align-items:center}.in-from{flex-wrap:wrap}.in-from small{margin-left:8px}.dot{width:8px;height:8px;border-radius:50%;background:var(--signal);margin-left:auto}.composer .comp-row{flex-wrap:wrap;gap:8px}.btns{display:flex;gap:8px;width:100%}.btns .btn{flex:1 1}.btns .btn.primary{flex:1.4 1}.judging{margin:8px 0;color:var(--muted);font-size:13.5px;animation:p 1.6s ease-in-out infinite}.bubble.dots{color:var(--muted);font-style:italic}.pad0{margin:22px 14px 0}.pv-note{margin:0;padding:6px 18px;font-size:11.5px;background:var(--signal-soft);color:var(--ink)}.call{padding:0 0 24px}.stage{display:flex;flex-direction:column;align-items:center;text-align:center;padding:22px 20px 12px}.big-av{width:104px;height:104px;border-radius:50%;display:grid;place-items:center;font-size:44px;font-weight:700;background:hsl(var(--h) 45% 88%);color:hsl(var(--h) 55% 28%);box-shadow:0 0 0 0 hsl(var(--h) 50% 50%/.35);transition:box-shadow .3s}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .big-av{background:hsl(var(--h) 30% 26%);color:hsl(var(--h) 60% 85%)}}:root[data-theme=dark] .big-av{background:hsl(var(--h) 30% 26%);color:hsl(var(--h) 60% 85%)}.big-av.talk{animation:talk 1.1s ease-in-out infinite}@keyframes talk{0%,to{box-shadow:0 0 0 0 hsl(var(--h) 50% 50%/.35)}50%{box-shadow:0 0 0 14px hsl(var(--h) 50% 50%/0)}}.status{margin:12px 0 4px;font-size:12.5px;color:var(--muted);min-height:1.4em}.caption{margin:0;font-size:17px;line-height:1.7;max-width:34em;min-height:3.4em}.stage-tools{display:flex;gap:8px;margin-top:10px}.microw{display:flex;align-items:center;gap:14px;margin:4px 0 12px}.mic{width:72px;height:72px;border-radius:50%;border:0;background:var(--teal);color:var(--teal-ink);display:grid;place-items:center;flex:none}.mic svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}.mic.on{background:var(--bad);color:#fff;animation:talk 1.1s ease-in-out infinite;--h:10}#micl{font-weight:700}.tx{margin:18px 14px 0;border-top:1px solid var(--line);padding-top:10px}.tx summary{cursor:pointer;font-size:13px;color:var(--muted)}.txl{list-style:none;padding:0;margin:8px 0 0}.txl li{padding:10px 0;border-bottom:1px solid var(--line)}.txl p{margin:2px 0 0;font-size:14px;white-space:pre-wrap}.who2{font-size:12px;font-weight:700;display:flex;gap:8px;align-items:center}.txl li.mgr .who2{color:var(--teal)}.who2 time{margin-left:auto}.mtag,.who2 time{font-weight:400;color:var(--muted)}.mtag{font-size:11px}.pad-x{padding:0 14px}.rv{margin-top:18px}.rv-h{display:flex;align-items:center;gap:4px;color:var(--ink);font-size:15px;font-weight:700}.rv-h small{color:var(--muted);font-weight:400;margin-left:8px;font-size:12px}.rv-a{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-top:10px}.rv-a.fail{border-left:4px solid var(--bad)}.rv-a.pass{border-left:4px solid var(--ok)}.rv-meta{display:flex;gap:10px;align-items:center;font-size:13px}.rv-meta .sc{margin-left:auto}.rv-fb{font-size:13.5px;background:var(--bg);padding:8px 10px;border-radius:8px}.rv-fb b{display:block;font-size:12px}.cases li.link{cursor:pointer}.cases li.link .nm{text-decoration:underline;-webkit-text-decoration-color:var(--line);text-decoration-color:var(--line);text-underline-offset:3px}.vnote{margin:6px 0 4px;border-color:var(--signal)}.vnote p{margin:4px 0 8px}.vpanel{width:100%;max-width:400px;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px;margin-top:10px;gap:10px}.vpanel,.vpanel label{display:flex;flex-direction:column}.vpanel label{gap:4px;font-size:12.5px;color:var(--muted)}.vrow{display:flex;gap:8px}.vrow select{flex:1 1;min-width:0;font-size:13px;padding:8px}.seg{display:flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;margin:8px 0 14px}.seg button{flex:1 1;border:0;background:var(--surface);padding:9px 4px;font-size:13px;color:var(--muted)}.seg button.on{background:var(--ink);color:var(--bg);font-weight:700}.note{background:var(--ok-soft);padding:8px 12px;border-radius:8px;font-size:13px}.btnrow{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}.btnrow .btn{flex:1 1}.two{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px}.form textarea{min-height:100px;font-size:14px}.gen{padding:14px;margin-top:10px}.gen,.scprev{background:var(--surface);border:1px solid var(--line);border-radius:12px}.scprev{padding:12px 14px}.quote{font-size:15px;border-left:3px solid var(--signal);padding-left:10px;margin:8px 0}.scprev .mk{background:var(--line);font-size:11px}.jsonbox{margin-top:10px}.jsonbox textarea{font:12px/1.5 ui-monospace,Menlo,Consolas,monospace;min-height:220px}.baselist{list-style:none;padding:0;margin:0}.baselist li{padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}.baselist label{display:flex;gap:10px;align-items:center}.dig{font-size:13px;white-space:pre-wrap;color:var(--ink)}input[type=file]{font-size:13px;padding:8px}#toast{border:0;position:fixed;left:50%;top:calc(env(safe-area-inset-top,0px) + 10px);transform:translate(-50%,-150%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:999px;font-size:13.5px;transition:transform .35s ease;z-index:9;white-space:nowrap}#toast.on{transform:translate(-50%)}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.login{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:28px 24px}.login .brand{font-size:24px}.login-lead{font-size:14px}.login-foot,.login-lead{color:var(--muted);margin:18px 0 0}.login-foot{font-size:11.5px}.signout{display:inline-block;margin-top:12px;color:var(--muted);font-size:13px}input.locked,select.locked{background:var(--bg);color:var(--ink);border-style:dashed;opacity:1}.form .src{font-size:11.5px;color:var(--teal)}.form .src.soft{color:var(--muted)}.card.bulk{margin:4px 0 14px}.card.bulk p{margin:6px 0 10px}.card.bulk label{display:flex;flex-direction:column;gap:4px;margin:8px 0}.drop{border:2px dashed var(--line);border-radius:12px;padding:18px;text-align:center;cursor:pointer;color:var(--teal);font-weight:700}.drop input{display:block;margin:0 auto 6px;font-weight:400}.bklist{list-style:none;padding:0;margin:8px 0;max-height:60vh;overflow:auto}.bklist li{display:flex;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}.bklist li>div{flex:1 1;min-width:0}.bklist b{display:block;font-size:13.5px}.bklist small{display:block;color:var(--muted);font-size:11.5px}.bklist select{max-width:42%;font-size:12px;padding:6px}.bklist .bst{font-size:12px;font-weight:700;white-space:nowrap}.bklist li.new .bst,.bklist li.updated .bst{color:var(--ok)}.bklist li.error .bst,.errtxt{color:var(--bad)}.bklist li.working .bst,.chip.warn{color:var(--signal)}.chip.warn{border-color:var(--signal)}a.chip{text-decoration:none}.adm li.pend{border-left:4px solid var(--signal)}