:root{--bg:#0b0e13;--panel:#121720;--panel2:#171d27;--line:#252d3a;--text:#edf1f7;--muted:#929eaf;--accent:#74a7ff;--good:#59d69b;--warn:#f0bd63;--bad:#ff7777;--radius:10px;font-family:Arial,Helvetica,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);min-height:100vh}.hidden{display:none!important}button,input,select{font:inherit}.topbar{height:68px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 28px;gap:28px;position:sticky;top:0;background:rgba(11,14,19,.96);backdrop-filter:blur(12px);z-index:10}.brand{display:flex;align-items:center;gap:11px;margin-right:8px}.brand strong{display:block;font-size:14px}.brand span{display:block;color:var(--muted);font-size:11px;margin-top:2px}.brand-mark{width:46px;height:46px;border:1px solid #4e6d99;background:#172335;display:grid;place-items:center;font-size:22px;font-weight:800;border-radius:8px}.brand-mark.small{width:34px;height:34px;font-size:16px}.topbar nav{display:flex;height:100%;align-items:center;gap:4px}.nav-btn,.ghost{background:transparent;color:var(--muted);border:1px solid transparent;padding:9px 12px;border-radius:7px;cursor:pointer}.nav-btn:hover,.nav-btn.active,.ghost:hover{color:var(--text);background:var(--panel2)}.nav-btn.active{border-color:var(--line)}.userbox{margin-left:auto;display:flex;gap:12px;align-items:center;color:var(--muted);font-size:13px}main{max-width:1320px;margin:0 auto;padding:34px 28px 80px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:26px}.page-head h1{font-size:26px;margin:0 0 7px}.page-head p,.muted{color:var(--muted);margin:0}.primary{background:#e9f1ff;color:#0c1119;border:0;padding:10px 15px;font-weight:700;border-radius:7px;cursor:pointer}.primary:hover{filter:brightness(.92)}.primary:disabled{opacity:.5;cursor:not-allowed}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:34px}.stat{background:var(--panel);border:1px solid var(--line);padding:16px;border-radius:var(--radius)}.stat span{display:block;color:var(--muted);font-size:12px}.stat strong{font-size:24px;display:block;margin-top:6px}.section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px}.section-head h2{font-size:15px;margin:0}.batch-list{display:flex;flex-direction:column;gap:10px}.empty{border:1px dashed var(--line);color:var(--muted);padding:38px;text-align:center;border-radius:var(--radius)}.batch{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:17px;cursor:pointer}.batch:hover{border-color:#39475c}.batch-top{display:flex;align-items:flex-start;gap:12px}.batch-title{font-weight:700}.tag{display:inline-flex;align-items:center;padding:3px 7px;border:1px solid var(--line);border-radius:5px;color:var(--muted);font-size:10px;font-weight:700;letter-spacing:.4px}.tag.dry{border-color:#765d2d;color:#ffd98c;background:#2b2417}.tag.live{border-color:#285940;color:#8ae8b5;background:#12251c}.tag.issue{border-color:#6d3838;color:#ff9a9a;background:#2b1717}.batch-meta{margin-top:5px;color:var(--muted);font-size:12px}.batch-counts{margin-left:auto;display:flex;gap:18px;text-align:right}.batch-counts b{display:block;font-size:15px}.batch-counts span{font-size:10px;color:var(--muted);text-transform:uppercase}.progress{height:7px;background:#202734;border-radius:4px;overflow:hidden;margin:15px 0 8px}.progress>div{height:100%;background:#7ea9ed}.batch-foot{display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.form-row{display:flex;gap:10px;margin-bottom:15px}.form-row input{flex:1}.modal{position:fixed;inset:0;background:rgba(0,0,0,.68);display:grid;place-items:center;padding:20px;z-index:50}.modal-card{width:min(620px,100%);max-height:92vh;overflow:auto;background:#11161f;border:1px solid #303947;border-radius:12px;padding:24px;position:relative;box-shadow:0 30px 90px #0008}.modal-card.wide{width:min(820px,100%)}.modal-card.xwide{width:min(1180px,100%)}.modal-close{position:absolute;right:13px;top:10px;background:none;border:0;color:var(--muted);font-size:26px;cursor:pointer}.modal-card h2{margin-top:0}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}label{display:flex;flex-direction:column;gap:7px;color:var(--muted);font-size:12px}input,select{background:#0d1219;border:1px solid var(--line);color:var(--text);border-radius:7px;padding:10px 11px;outline:none}input:focus,select:focus{border-color:#4d6f9c}.dry-toggle{background:#191711;border:1px solid #4a3d21;padding:12px;border-radius:8px;display:flex;flex-direction:row;align-items:center;justify-content:space-between}.dry-toggle span{display:block;color:#f1d69b}.dry-toggle small{display:block;color:#b8a77f;margin-top:3px}.dry-toggle input{width:20px;height:20px}.dropzone{margin-top:16px;border:1px dashed #435269;border-radius:8px;padding:28px;text-align:center;display:block;cursor:pointer;background:#0d1219}.dropzone.drag{border-color:var(--accent);background:#111b2a}.selected-files{margin-top:10px;display:flex;flex-direction:column;gap:7px}.file-row{display:grid;grid-template-columns:1fr 200px 36px;gap:8px;align-items:center;background:var(--panel2);border:1px solid var(--line);padding:8px;border-radius:7px}.file-row .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.file-row button{background:none;border:0;color:var(--bad);font-size:18px;cursor:pointer}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}.alert{padding:10px 12px;border-radius:7px;margin-top:12px;font-size:12px}.alert.error{background:#2b1618;border:1px solid #6a3036;color:#ff9c9c}.login-shell{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:min(430px,100%);text-align:center;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:38px}.login-card .brand-mark{margin:0 auto 18px}.login-card h1{margin:0 0 8px}.login-card p{color:var(--muted);margin:0 0 25px}.toast{position:fixed;right:20px;bottom:20px;background:#e9f1ff;color:#10151d;padding:12px 16px;border-radius:8px;z-index:100;font-weight:700;font-size:12px}.detail-head{display:flex;gap:10px;align-items:center;margin-bottom:18px}.detail-head h2{margin:0}.detail-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-bottom:18px}.detail-box{background:var(--panel2);padding:11px;border:1px solid var(--line);border-radius:7px}.detail-box span{display:block;color:var(--muted);font-size:10px}.detail-box b{display:block;margin-top:4px;font-size:14px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px}table{width:100%;border-collapse:collapse;font-size:11px}th,td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}th{color:var(--muted);background:#0e131b;position:sticky;top:0}td.wrap{white-space:normal;min-width:240px}.status-success{color:var(--good)}.status-warning{color:var(--warn)}.status-needs_review,.status-failed{color:var(--bad)}.detail-actions{display:flex;gap:8px;margin-bottom:16px}.users-row{display:grid;grid-template-columns:1fr 130px 90px 110px;align-items:center;padding:10px;border-bottom:1px solid var(--line);font-size:12px}@media(max-width:800px){.topbar{padding:0 12px;gap:8px}.brand span,.userbox span{display:none}.stats,.detail-grid,.grid2{grid-template-columns:1fr 1fr}.batch-counts{display:none}main{padding:22px 14px}.file-row{grid-template-columns:1fr 140px 30px}}@media(max-width:520px){.stats,.detail-grid,.grid2{grid-template-columns:1fr}.page-head{align-items:stretch;flex-direction:column}.page-head .primary{width:100%}.topbar nav{overflow:auto}.brand strong{font-size:12px}.userbox{margin-left:0}.form-row{flex-direction:column}}

/* v1.0.9 layout polish */
.login-shell{width:100%;min-height:100dvh;place-items:center}.login-card{margin:auto}.page-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.secondary{display:inline-flex;align-items:center;justify-content:center;background:var(--panel2);color:var(--text);border:1px solid var(--line);padding:9px 13px;font-weight:700;border-radius:7px;text-decoration:none;cursor:pointer}.secondary:hover{background:#1d2632;border-color:#3b485a}.secondary.compact{padding:8px 11px;font-size:12px;white-space:nowrap}.sample-strip{margin-top:16px;display:flex;align-items:center;justify-content:space-between;gap:16px;background:#101722;border:1px solid #2b3c53;border-radius:8px;padding:11px 12px}.sample-strip strong{display:block;font-size:12px}.sample-strip span{display:block;color:var(--muted);font-size:11px;margin-top:3px}.batch-top{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:28px}.batch-main{min-width:0}.batch-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:22px}.batch-title-text{font-weight:700;line-height:1.25}.batch-tags{display:inline-flex;align-items:center;gap:5px;flex-wrap:wrap}.batch-meta{line-height:1.45;overflow-wrap:anywhere}.batch-counts{margin-left:0;display:grid;grid-template-columns:repeat(3,68px);gap:8px;text-align:center;align-self:start}.batch-counts>div{padding:0 4px}.batch-counts b{font-variant-numeric:tabular-nums}.detail-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:14px}.detail-head h2{margin:0 0 4px}.detail-subtitle{color:var(--muted);font-size:11px}.detail-head-tags{display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.detail-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;min-height:38px;margin-bottom:16px}.detail-actions-primary,.detail-actions-danger{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.danger{background:#291719;color:#ffabab;border:1px solid #6b3238;padding:9px 13px;font-weight:700;border-radius:7px;cursor:pointer}.danger:hover{background:#351b1e;border-color:#8b4249}.lineage-note{color:var(--muted);font-size:11px}.detail-meta{margin-bottom:12px!important}.modal-actions{align-items:center}
@media(max-width:800px){.batch-top{grid-template-columns:1fr}.page-actions{width:100%}.page-actions>*{flex:1}.sample-strip{align-items:flex-start}.detail-actions{align-items:flex-start;flex-direction:column}.detail-actions-danger{width:100%}.detail-actions-danger .danger{width:100%}}
@media(max-width:520px){.sample-strip{flex-direction:column}.sample-strip .secondary{width:100%}.page-actions{flex-direction:column}.page-actions>*{width:100%}.detail-head{flex-direction:column;gap:8px}.detail-head-tags{justify-content:flex-start}}
