:root{--bg-0:#f4f5f6;--card:#fff;--surface-1:#1c27330a;--surface-2:#1c27330f;--t0:#1c2733;--t1:#5c6672;--t2:#6b7684;--border:#e2e4e7;--border-strong:#d8dbdf;--border-soft:#eceef0;--accent:#135e6b;--warn:#b8873a;--bad:#b3402a;--ok:#2f7d5c;--shadow-card:0 1px 2px #1c27330d;--r:12px;--r-sm:8px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--fs-xs:.75rem;--fs-sm:.8125rem;--fs-base:.875rem;--fs-md:1rem;--fs-lg:1.125rem}*{box-sizing:border-box}body{background:var(--bg-0);color:var(--t0);font-family:-apple-system,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-size:var(--fs-base);margin:0}a{color:var(--accent)}.adm{grid-template-columns:180px minmax(0,1fr);min-height:100vh;display:grid}.adm__side{background:var(--card);border-right:1px solid var(--border);padding:var(--s4) var(--s3);flex-direction:column;gap:2px;display:flex}.adm__brand{padding:0 var(--s2) var(--s3);font-weight:700}.adm__brand span{color:var(--accent)}.adm__side a{align-items:center;gap:var(--s2);min-height:36px;padding:0 var(--s2);border-radius:var(--r-sm);color:var(--t1);font-size:var(--fs-sm);text-decoration:none;display:flex}.adm__side a:hover{background:var(--surface-1)}.adm__side a[aria-current=page]{background:var(--surface-2);color:var(--t0);font-weight:600}.adm__side form{margin-top:auto}.adm__main{padding:var(--s5);gap:var(--s4);flex-direction:column;min-width:0;display:flex}.adm__head{justify-content:space-between;align-items:baseline;gap:var(--s3);display:flex}.adm__head h2{font-size:var(--fs-lg);margin:0}.adm__sub{font-size:var(--fs-xs);color:var(--t2)}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow-card)}.pad{padding:var(--s4)}.btn{padding:6px var(--s3);border:1px solid var(--border-strong);border-radius:var(--r-sm);background:var(--card);color:var(--t0);font:600 var(--fs-xs) inherit;cursor:pointer;font-family:inherit}.btn:hover{background:var(--surface-1)}.login{min-height:100vh;padding:var(--s4);place-items:center;display:grid}.login form{gap:var(--s3);background:var(--card);border:1px solid var(--border);border-radius:var(--r);width:100%;max-width:340px;padding:var(--s5);flex-direction:column;display:flex}.login h1{font-size:var(--fs-lg);margin:0}.login input{padding:var(--s3);border:1px solid var(--border);border-radius:var(--r-sm);font:var(--fs-base) inherit;font-family:inherit}.login button{padding:var(--s3);border-radius:var(--r-sm);background:var(--accent);color:#fff;font:600 var(--fs-base) inherit;cursor:pointer;border:0;font-family:inherit}.login .err{color:var(--bad);font-size:var(--fs-sm);margin:0}.login .hint{color:var(--t2);font-size:var(--fs-xs);margin:0;line-height:1.6}.lab__bar{align-items:center;gap:var(--s3);font-size:var(--fs-xs);color:var(--t2);display:flex}.lab__prog{background:var(--surface-2);border-radius:999px;flex:1;height:6px;overflow:hidden}.lab__prog i{background:var(--accent);height:100%;display:block}.lab__meta{align-items:center;gap:var(--s2);font-size:var(--fs-xs);color:var(--t2);display:flex}.pill{background:var(--surface-2);color:var(--accent);border-radius:999px;padding:1px 7px;font-weight:600}.score{color:var(--accent);font-variant-numeric:tabular-nums;margin-left:auto;font-weight:600}.lab h3{margin:var(--s2) 0 0;font-size:var(--fs-md);line-height:1.35}.lab p.sum{margin:var(--s2) 0 0;font-size:var(--fs-sm);color:var(--t1);line-height:1.7}.dims{gap:var(--s3);margin-top:var(--s3);font-size:var(--fs-xs);color:var(--t2);flex-wrap:wrap;display:flex}.dims b{color:var(--t0);font-variant-numeric:tabular-nums}.lab__acts{gap:var(--s2);margin-top:var(--s4);display:flex}.lab__acts button{border-radius:var(--r-sm);cursor:pointer;min-height:40px;font:600 var(--fs-base) inherit;border:1px solid var(--border-strong);background:var(--card);color:var(--t0);justify-content:center;align-items:center;gap:var(--s2);flex:1;font-family:inherit;display:flex}.lab__acts button kbd{background:var(--surface-2);color:var(--t2);border-radius:4px;padding:1px 5px;font:600 10px ui-monospace,monospace}.lab__acts button.sel:hover{border-color:var(--ok);color:var(--ok)}.lab__acts button.rej:hover{border-color:var(--bad);color:var(--bad)}.lab__acts button.uns:hover{border-color:var(--warn);color:var(--warn)}.lab__note{width:100%;margin-top:var(--s3);padding:var(--s3);border:1px solid var(--border);border-radius:var(--r-sm);font:var(--fs-sm) inherit;resize:vertical;font-family:inherit}.lab__done{align-items:center;gap:var(--s3);font-size:var(--fs-xs);color:var(--t2);display:flex}.lab__done a.btn{align-items:center;text-decoration:none;display:inline-flex}table.src{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}table.src th{text-align:left;color:var(--t2);font-weight:400;font-size:var(--fs-xs);padding:0 var(--s3) var(--s2);border-bottom:1px solid var(--border)}table.src td{padding:var(--s3);border-bottom:1px solid var(--border-soft);vertical-align:top}table.src tr:last-child td{border-bottom:0}.st{font-size:var(--fs-xs);align-items:center;gap:5px;font-weight:600;display:inline-flex}.st--ok{color:var(--t2)}.st--bad{color:var(--bad)}.st i{background:currentColor;border-radius:50%;width:6px;height:6px}.why{margin:var(--s1) 0 0;font-size:var(--fs-xs);color:var(--t2);max-width:44ch;line-height:1.6}.btn--danger:hover{border-color:var(--bad);color:var(--bad)}select{font-size:var(--fs-xs);padding:4px;font-family:inherit}.stages{gap:var(--s3);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));display:grid}.stage{padding:var(--s3);border:1px solid var(--border);border-radius:var(--r-sm);background:var(--card)}.stage__n{font-size:var(--fs-xs);color:var(--t2)}.stage__v{margin-top:var(--s1);font:600 var(--fs-sm) ui-monospace, monospace;font-variant-numeric:tabular-nums;word-break:break-all}.stage--bad{border-color:var(--bad);background:#fdf6f4}.stage--bad .stage__v{color:var(--bad)}.kv{justify-content:space-between;gap:var(--s3);padding:var(--s2) 0;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm);display:flex}.kv:last-child{border-bottom:0}.kv b{font-variant-numeric:tabular-nums}.banner{gap:var(--s3);padding:var(--s3) var(--s4);border-radius:var(--r-sm);font-size:var(--fs-sm);color:#7d2c1c;background:#f7e9e6;border:1px solid #edd3cd;line-height:1.65;display:flex}.banner b{color:var(--bad)}
