:root{
  --bg:#f6f7f9; --card:#fff; --line:#e6e8ec; --text:#1f2329; --muted:#8a9099;
  --accent:#0f766e; --accent-soft:#e6f4f1; --red:#d4483d; --orange:#d97706; --gray:#6b7280; --green:#0f766e;
}
*{box-sizing:border-box}
[hidden]{display:none !important}
html,body{margin:0;padding:0}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px}

/* login */
.login-wrap{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#f6f7f9,#eef1f4)}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:34px 32px;width:340px;box-shadow:0 10px 40px rgba(20,30,50,.08)}
.brand{font-size:20px;font-weight:700}
.brand-sub{color:var(--muted);margin:4px 0 22px;font-size:13px}
.login-card input{width:100%;height:42px;border:1px solid var(--line);border-radius:9px;padding:0 12px;font-size:14px;outline:none}
.login-card input:focus{border-color:var(--accent)}
.btn-primary{width:100%;height:42px;margin-top:12px;background:var(--accent);color:#fff;border:none;border-radius:9px;font-size:15px;cursor:pointer}
.btn-primary:hover{background:#0c635c}
.login-err{color:var(--red);font-size:13px;margin-top:10px;min-height:18px}

/* topbar */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--card);border-bottom:1px solid var(--line)}
.title{font-size:18px;font-weight:700}
.subtitle{color:var(--muted);font-size:13px;margin-top:2px}
.top-actions{display:flex;align-items:center;gap:10px}
.tabs{display:flex;background:#eef0f3;border-radius:9px;padding:3px}
.tabs button{border:none;background:transparent;padding:6px 14px;border-radius:7px;font-size:13px;color:var(--muted);cursor:pointer}
.tabs button.active{background:#fff;color:var(--text);box-shadow:0 1px 3px rgba(0,0,0,.08);font-weight:600}
.btn-ghost{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 14px;font-size:13px;cursor:pointer;color:var(--text)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}

/* stats */
.stats{display:flex;gap:14px;padding:18px 24px 4px;flex-wrap:wrap}
.stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 18px;min-width:150px}
.stat-label{color:var(--muted);font-size:12px}
.stat-val{font-size:20px;font-weight:700;margin-top:4px}
.stat-val.small{font-size:13px;font-weight:500;color:var(--muted)}

/* toolbar */
.toolbar{display:flex;align-items:center;justify-content:space-between;padding:14px 24px 10px}
.toolbar-left{display:flex;align-items:center;gap:10px}
.toolbar input{width:260px;height:36px;border:1px solid var(--line);border-radius:8px;padding:0 12px;outline:none;background:#fff}
.toolbar input:focus{border-color:var(--accent)}
.toolbar select{height:36px;border:1px solid var(--line);border-radius:8px;padding:0 10px;background:#fff;max-width:200px}
.person-cell{font-size:12px;color:#4b5563}
.dir-cell{color:var(--muted)}
.tag-dir{display:inline-block;padding:1px 7px;border-radius:6px;font-size:10px;background:#eef0f3;color:var(--gray);margin-left:2px;vertical-align:middle}
.hint{color:var(--muted);font-size:12px}

/* table */
.table-wrap{padding:0 24px 40px;overflow-x:auto}
.topbar{flex-wrap:wrap;gap:10px}
.top-actions{flex-wrap:wrap}
.toolbar{flex-wrap:wrap;gap:10px}
@media (max-width:640px){.stats{padding:12px}.stat{flex:1 1 40%;min-width:0}.toolbar input{width:100%}.table-wrap{padding:0 12px 24px}}
.grid{width:100%;border-collapse:separate;border-spacing:0;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.grid th,.grid td{padding:11px 14px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.grid thead th{background:#fafbfc;font-size:12px;color:var(--muted);font-weight:600}
.grid tbody tr.acc-row{cursor:pointer}
.grid tbody tr.acc-row:hover{background:#fafdfc}
.grid .num{text-align:right;font-variant-numeric:tabular-nums}
.grid tbody td.num{font-weight:600}
.col-rank{width:48px;color:var(--muted)}
.col-toggle{width:30px}
.col-act{width:90px}
.toggle{display:inline-block;width:18px;color:var(--muted);transition:transform .15s}
tr.open .toggle{transform:rotate(90deg);color:var(--accent)}
.acc-name{display:block;font-weight:600}
.acc-id{display:block;color:var(--muted);font-size:12px;font-weight:400;margin-top:2px}

/* material panel */
tr.panel td{padding:0;background:#fafbfc}
.panel-inner{padding:12px 16px 18px 46px;overflow-x:auto}
.panel-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.mini-btn{border:1px solid var(--line);background:#fff;border-radius:7px;padding:5px 12px;font-size:12px;cursor:pointer}
.mini-btn:hover{border-color:var(--accent);color:var(--accent)}
.panel-count{color:var(--muted);font-size:12px}
.mgrid{width:100%;border-collapse:collapse;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.mgrid th,.mgrid td{padding:9px 12px;border-bottom:1px solid var(--line);font-size:13px;white-space:nowrap}
.mgrid th{background:#f3f5f7;color:var(--muted);font-weight:600;text-align:left}
.mgrid .num{text-align:right;font-variant-numeric:tabular-nums}
.mid{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#334155}
.mname{max-width:340px;overflow:hidden;text-overflow:ellipsis}
.src{display:inline-block;padding:1px 8px;border-radius:20px;background:#eef0f3;color:#4b5563;font-size:11px;margin-right:4px}
.tag{display:inline-block;padding:1px 8px;border-radius:6px;font-size:11px;margin-right:5px}
.tag-hq{background:var(--accent-soft);color:var(--green)}
.tag-lq{background:#fdecea;color:var(--red)}
.tag-ineff{background:#f0f1f3;color:var(--gray)}
.tag-carry{background:#fef3e2;color:var(--orange)}
.panel-empty{color:var(--muted);font-size:13px;padding:14px}
.panel-empty.warn{color:var(--orange);background:#fef7ed;border:1px solid #fde6c7;border-radius:8px}
.skeleton{color:var(--muted);font-size:13px;padding:14px}
.badge{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px}
.badge-yes{background:var(--accent-soft);color:var(--green)}
.badge-no{background:#f3f4f6;color:var(--gray)}

.empty{text-align:center;color:var(--muted);padding:60px}
.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:#1f2329;color:#fff;padding:9px 18px;border-radius:9px;font-size:13px;opacity:0;transition:opacity .2s;pointer-events:none}
.toast.show{opacity:.95}
