:root{
  --brand:#e4002b; --brand-dark:#b30022; --brand-soft:#fde7ec;
  --bg:#f5f6f8; --surface:#fff; --border:#e6e8eb; --border-strong:#d4d7db;
  --text:#1d2129; --muted:#646a73; --hint:#8f959e;
  --green:#2ba471; --green-soft:#e8f7f0; --orange:#ff7d00; --orange-soft:#fff3e0;
  --yellow:#d4a017; --yellow-soft:#fdf6e3; --blue:#1664ff; --blue-soft:#e8f0ff;
  --purple:#7f3bd1; --purple-soft:#f3eafc; --gray:#8f959e; --gray-soft:#f0f1f3;
  --red:#e4002b; --red-soft:#fde7ec;
  --shadow:0 1px 4px rgba(0,0,0,.1); --shadow-lg:0 6px 24px rgba(0,0,0,.12);
  --radius:8px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}
button{font-family:inherit;cursor:pointer}
.tabular{font-variant-numeric:tabular-nums;text-align:right}

/* header */
.header{display:flex;align-items:center;gap:8px;background:var(--surface);border-bottom:1px solid var(--border);padding:0 16px;height:54px;position:sticky;top:0;z-index:20}
.brand{display:flex;align-items:center;gap:8px;font-weight:600;font-size:16px;color:var(--brand)}
.brand .logo{width:26px;height:26px;border-radius:6px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px}
.nav{display:flex;gap:2px;flex:1;overflow-x:auto}
.tab-btn{border:none;background:transparent;padding:8px 14px;border-radius:6px;color:var(--muted);font-size:14px;white-space:nowrap}
.tab-btn:hover{background:var(--bg);color:var(--text)}
.tab-btn.active{background:var(--brand);color:#fff}
.header-right{display:flex;align-items:center;gap:8px}
.btn{border:1px solid var(--border-strong);background:var(--surface);color:var(--text);padding:7px 14px;border-radius:6px;font-size:13px}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brand-dark);color:#fff}
.btn.ghost{background:transparent}
.btn.sm{padding:4px 10px;font-size:12px}
.btn.danger{border-color:#f0b8c0;color:var(--brand)}
.user-chip{font-size:13px;color:var(--muted)}

/* layout */
.main{padding:16px;max-width:1280px;margin:0 auto}
.tab{display:none}
.tab.active{display:block}
.sub-nav{display:flex;gap:4px;margin-bottom:12px;flex-wrap:wrap}
.sub-nav button{border:none;background:var(--bg);padding:6px 12px;border-radius:6px;color:var(--muted);font-size:13px}
.sub-nav button.active{background:var(--brand-soft);color:var(--brand)}

/* stats */
.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:16px}
.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}
.stat .k{font-size:13px;color:var(--muted)}
.stat .v{font-size:28px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:6px}
.stat.red .v{color:var(--brand)} .stat.green .v{color:var(--green)}
.stat.orange .v{color:var(--orange)} .stat.blue .v{color:var(--blue)} .stat.purple .v{color:var(--purple)}

/* toolbar */
.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.toolbar input,.toolbar select{border:1px solid var(--border-strong);border-radius:6px;padding:7px 10px;font-size:13px;background:var(--surface)}
.toolbar .grow{flex:1}
.stat-strip{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:-2px 0 14px;font-size:13px;color:var(--hint)}
.stat-strip .stat-total{font-weight:500;color:var(--text)}
.stat-strip .stat-total b{color:var(--brand);font-size:15px;margin:0 2px}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}

/* table */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
th{background:#fafbfc;color:var(--muted);font-weight:500;position:sticky;top:0}
tbody tr:hover{background:#fcfcfd}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
/* 维保内容等长文本列：限宽换行，避免撑宽表格 */
td.cell-long{max-width:300px;white-space:normal;word-break:break-word;vertical-align:top}
.row-actions{display:flex;gap:6px}
.empty{padding:40px;text-align:center;color:var(--hint)}

/* badges */
.badge{display:inline-block;padding:2px 9px;border-radius:11px;font-size:12px;font-weight:500}
.b-green{background:var(--green-soft);color:var(--green)}
.b-orange{background:var(--orange-soft);color:var(--orange)}
.b-yellow{background:var(--yellow-soft);color:var(--yellow)}
.b-blue{background:var(--blue-soft);color:var(--blue)}
.b-purple{background:var(--purple-soft);color:var(--purple)}
.b-gray{background:var(--gray-soft);color:var(--gray)}
.b-red{background:var(--red-soft);color:var(--red)}

/* progress */
.progress{height:6px;background:var(--gray-soft);border-radius:3px;overflow:hidden;min-width:80px;display:inline-block;vertical-align:middle}
.progress>i{display:block;height:100%;background:var(--brand)}

/* modal */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;align-items:center;justify-content:center;z-index:50}
.overlay.show{display:flex}
.modal{background:var(--surface);border-radius:12px;width:560px;max-width:94vw;max-height:90vh;overflow:auto;box-shadow:var(--shadow-lg)}
.modal.wide{width:820px}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--border)}
.modal-head h3{font-size:16px;font-weight:600}
.modal-body{padding:20px;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.modal-body.wide{grid-template-columns:1fr 1fr}
.modal-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}
.field{display:flex;flex-direction:column;gap:5px}
.field.full{grid-column:1/-1}
.field label{font-size:12px;color:var(--muted)}
.field input,.field select,.field textarea{border:1px solid var(--border-strong);border-radius:6px;padding:8px 10px;font-size:13px;font-family:inherit}
.field textarea{resize:vertical;min-height:64px}
.x{border:none;background:transparent;font-size:20px;color:var(--hint);cursor:pointer}

/* import mapping */
.import-section{font-size:13px;color:var(--muted);margin:14px 0 6px}
.import-map{display:grid;grid-template-columns:1fr 1fr;gap:12px 18px;align-items:start}
.import-map .im-row{display:flex;align-items:center;gap:8px;font-size:13px}
.import-map .im-row .src{color:var(--text);min-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.import-map .im-row select{border:1px solid var(--border-strong);border-radius:6px;padding:6px 8px;font-size:13px;font-family:inherit;flex:1}
.import-preview{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px;overflow:auto;max-height:200px}
.import-preview table{font-size:12px}
.import-preview th,.import-preview td{padding:6px 8px}

/* toast */
.toast{position:fixed;top:18px;left:50%;transform:translateX(-50%);background:#1d2129;color:#fff;padding:10px 18px;border-radius:8px;font-size:13px;z-index:80;opacity:0;transition:opacity .2s;pointer-events:none}
.toast.show{opacity:1}

/* login */
.login-overlay{position:fixed;inset:0;background:rgba(29,33,41,.55);display:flex;align-items:center;justify-content:center;z-index:90}
.login-card{background:#fff;border-radius:12px;padding:28px;width:340px;box-shadow:var(--shadow-lg)}
.login-card h2{font-size:18px;margin-bottom:4px}
.login-card p{color:var(--muted);font-size:13px;margin-bottom:18px}
.login-card input{width:100%;border:1px solid var(--border-strong);border-radius:6px;padding:10px;font-size:14px;margin-bottom:12px}
.login-card .btn{width:100%}

/* report */
.report-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.report-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.report-card h4{font-size:13px;color:var(--muted);font-weight:500;margin-bottom:8px}

/* mobile */
@media(max-width:860px){
  .stats{grid-template-columns:repeat(2,1fr)}
  .report-grid{grid-template-columns:1fr}
  .modal-body{grid-template-columns:1fr}
  th.hide-sm,td.hide-sm{display:none}
  .nav{order:3;width:100%;overflow-x:auto}
  .header{flex-wrap:wrap;height:auto;padding:10px 12px;gap:8px}
}
