:root{
  --teal:#0f6f63; --teal-dark:#0a4f47; --teal-light:#e6f2ef;
  --amber:#c8873f; --amber-light:#fdf3e6;
  --ink:#1d2b2a; --ink-2:#4c5c5a; --ink-3:#8a9a98;
  --line:#e2e9e7; --bg:#f5f8f7; --white:#fff;
  --ok:#2c8a5f; --warn:#d08b26; --danger:#c4453c; --info:#3a7ca5;
  --radius:12px; --shadow:0 1px 3px rgba(20,50,45,.08), 0 8px 24px rgba(20,50,45,.05);
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.6}
.loading{padding:60px;text-align:center;color:var(--ink-3)}
a{color:var(--teal);text-decoration:none}
button{font-family:inherit;font-size:14px;cursor:pointer}

/* ---------- 布局 ---------- */
.layout{display:flex;min-height:100vh}
.sidebar{width:228px;flex:0 0 228px;background:linear-gradient(180deg,var(--teal-dark),#0d5c53);color:#dff0ec;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{padding:20px 18px 14px;border-bottom:1px solid rgba(255,255,255,.12)}
.brand h1{margin:0;font-size:17px;letter-spacing:.5px;color:#fff}
.brand p{margin:4px 0 0;font-size:11.5px;color:#9dc8bf}
.nav{padding:10px 8px;overflow-y:auto;flex:1}
.nav button{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;margin:2px 0;background:none;border:0;border-radius:9px;color:#cfe6e1;text-align:left;font-size:13.5px}
.nav button:hover{background:rgba(255,255,255,.09);color:#fff}
.nav button.active{background:#fff;color:var(--teal-dark);font-weight:600}
.nav .disabled{opacity:.5;cursor:not-allowed}
.nav .disabled:hover{background:none;color:#cfe6e1}
.nav .group{padding:12px 14px 4px;font-size:11px;color:#7fb3a9;letter-spacing:1px}
.nav .badge{margin-left:auto;background:var(--amber);color:#fff;border-radius:8px;font-size:10px;padding:0 6px;line-height:16px}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{background:var(--white);border-bottom:1px solid var(--line);padding:12px 22px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:5}
.topbar h2{margin:0;font-size:17px}
.topbar .meta{color:var(--ink-3);font-size:12.5px}
.topbar .spacer{flex:1}
.userchip{display:flex;align-items:center;gap:8px;background:var(--teal-light);border-radius:20px;padding:4px 12px 4px 6px}
.avatar{width:26px;height:26px;border-radius:50%;background:var(--teal);color:#fff;display:grid;place-items:center;font-size:12px}
.content{padding:20px 22px 60px;max-width:1440px}

/* ---------- 组件 ---------- */
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px}
.card-head{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.card-head h3{margin:0;font-size:15px}
.card-head .spacer{flex:1}
.card-head .hint{font-size:12px;color:var(--ink-3)}
.card-body{padding:16px}
.grid{display:grid;gap:14px}
.grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1100px){.grid.c4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.c3{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* 菜单按钮：桌面隐藏，窄屏显示 */
.menu-btn{display:none}
.nav-mask{display:none}

@media(max-width:820px){
  .grid.c2,.grid.c3,.grid.c4{grid-template-columns:1fr}
  .content{padding:14px 14px 70px}
  .topbar{padding:10px 14px;gap:10px}
  .topbar h2{font-size:15px}
  .topbar #page-meta{display:none}
  .userchip span span{display:none}
  .menu-btn{display:inline-flex}
  /* 侧栏改为抽屉：脱离布局，不再占用宽度（关键修复） */
  .sidebar{position:fixed;left:0;top:0;height:100vh;width:82vw;max-width:300px;flex:0 0 auto;
    z-index:40;transform:translateX(-100%);transition:transform .22s ease;box-shadow:0 0 40px rgba(10,40,35,.35)}
  .layout{display:block}
  .main{width:100%;min-width:0}
  .nav{padding-bottom:40px}
  #app.nav-open .sidebar{transform:none}
  #app.nav-open .nav-mask{display:block;position:fixed;inset:0;background:rgba(16,38,34,.42);z-index:30}
  table{font-size:12.5px}
  th,td{padding:7px 8px}
  .card-body{padding:12px}
  .modal{max-height:92vh}
  .modal-body{padding:14px}
  .row>*{min-width:100%}
}

/* 手机竖屏：表格横向滚动，避免挤压 */
@media(max-width:820px){
  .card-body{overflow-x:auto}
  .card-body table{min-width:560px}
  .stat .value{font-size:20px}
}

.stat{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}
.stat .label{font-size:12.5px;color:var(--ink-3)}
.stat .value{font-size:24px;font-weight:700;margin-top:2px;letter-spacing:-.5px}
.stat .sub{font-size:12px;color:var(--ink-3);margin-top:2px}
.stat.teal .value{color:var(--teal)}
.stat.amber .value{color:var(--amber)}

table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:9px 10px;background:#f7faf9;color:var(--ink-2);font-weight:600;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:9px 10px;border-bottom:1px solid #eef3f2;vertical-align:middle}
tr:hover td{background:#fbfdfc}
.num{text-align:right;font-variant-numeric:tabular-nums}
.mono{font-variant-numeric:tabular-nums}

.tag{display:inline-block;padding:1px 8px;border-radius:20px;font-size:11.5px;line-height:18px;border:1px solid transparent;white-space:nowrap}
.tag.gray{background:#f0f4f3;color:var(--ink-2);border-color:var(--line)}
.tag.teal{background:var(--teal-light);color:var(--teal-dark)}
.tag.amber{background:var(--amber-light);color:#96652a}
.tag.ok{background:#e8f5ee;color:var(--ok)}
.tag.warn{background:#fdf2e0;color:var(--warn)}
.tag.danger{background:#fbeceb;color:var(--danger)}
.tag.info{background:#eaf2f8;color:var(--info)}

.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:9px;border:1px solid var(--line);background:var(--white);color:var(--ink);font-size:13.5px}
.btn:hover{border-color:#c9d8d5;background:#fafcfb}
.btn.primary{background:var(--teal);border-color:var(--teal);color:#fff}
.btn.primary:hover{background:var(--teal-dark)}
.btn.ghost{background:none;border-color:transparent;color:var(--teal)}
.btn.danger{color:var(--danger);border-color:#f0d3d1}
.btn.sm{padding:4px 10px;font-size:12.5px}
.btn:disabled{opacity:.5;cursor:not-allowed}

input,select,textarea{font-family:inherit;font-size:13.5px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--white);color:var(--ink);width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid #cfe6e1;border-color:var(--teal)}
label.field{display:block;margin-bottom:12px}
label.field span{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:4px}
label.field span em{color:var(--danger);font-style:normal;margin-left:3px}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input[type=search]{max-width:260px}
.row{display:flex;gap:12px;flex-wrap:wrap}
.row>*{flex:1;min-width:150px}

.alert{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;margin-bottom:8px;font-size:13px;border:1px solid}
.alert.info{background:#f2f8fb;border-color:#d8e8f1;color:#2b6484}
.alert.warn{background:#fdf7ec;border-color:#f2e0c2;color:#8a6320}
.alert.danger{background:#fdf0ef;border-color:#f3d6d4;color:#95302a}
.alert.ok{background:#f0f8f4;border-color:#d5ebdf;color:#20694a}

.empty{padding:26px;text-align:center;color:var(--ink-3);font-size:13px}
.ph{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px}
.notice{background:var(--amber-light);border:1px solid #f0ddc0;color:#8a6320;padding:9px 12px;border-radius:10px;font-size:12.5px;margin-bottom:12px}
.disclaim{font-size:12px;color:var(--ink-3);background:#f7faf9;border-left:3px solid var(--teal-light);padding:8px 12px;border-radius:6px}

/* 步骤条 */
.steps{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.step{display:flex;align-items:center;gap:6px;padding:5px 12px;border-radius:20px;background:#f0f4f3;color:var(--ink-3);font-size:12.5px}
.step.done{background:var(--teal-light);color:var(--teal-dark)}
.step.active{background:var(--teal);color:#fff;font-weight:600}

/* 弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(16,38,34,.45);display:grid;place-items:center;z-index:50;padding:20px}
.modal{background:var(--white);border-radius:14px;box-shadow:0 20px 60px rgba(10,40,35,.3);width:min(720px,100%);max-height:88vh;display:flex;flex-direction:column}
.modal.wide{width:min(1040px,100%)}
.modal-head{padding:15px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center}
.modal-head h3{margin:0;font-size:16px}
.modal-head .x{margin-left:auto;background:none;border:0;font-size:20px;color:var(--ink-3);line-height:1}
.modal-body{padding:18px 20px;overflow:auto}
.modal-foot{padding:13px 20px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end;background:#fbfdfc;border-radius:0 0 14px 14px}

/* 提示 */
#toast-root{position:fixed;right:18px;bottom:18px;z-index:80;display:flex;flex-direction:column;gap:8px}
.toast{background:#123a34;color:#eaf6f3;padding:10px 14px;border-radius:10px;font-size:13px;box-shadow:var(--shadow);max-width:380px;animation:in .18s ease}
.toast.err{background:#8e2f2a}
.toast.warn{background:#8a6320}
@keyframes in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* 登录 */
.login-wrap{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}
@media(max-width:900px){.login-wrap{grid-template-columns:1fr}.login-side{display:none}}
.login-side{background:linear-gradient(150deg,var(--teal-dark),#0f6f63 55%,#17796c);color:#e8f6f2;padding:54px 46px;display:flex;flex-direction:column;justify-content:center}
.login-side h1{font-size:30px;margin:0 0 10px;letter-spacing:1px}
.login-side p{color:#b6d8d1;margin:0 0 26px;font-size:14px}
.login-side ul{margin:0;padding-left:18px;color:#cfe8e3;font-size:13.5px;line-height:2}
.login-main{display:grid;place-items:center;padding:36px}
.login-card{width:min(400px,100%)}
.login-card h2{margin:0 0 4px;font-size:20px}
.login-card>p{color:var(--ink-3);font-size:13px;margin:0 0 20px}
.demo-accounts{display:grid;gap:6px;margin-top:8px}
.demo-acc{display:flex;align-items:center;gap:8px;padding:8px 11px;border:1px dashed var(--line);border-radius:10px;background:#fbfdfc;font-size:12.5px;text-align:left;width:100%}
.demo-acc:hover{border-color:var(--teal);background:var(--teal-light)}
.demo-acc b{color:var(--teal-dark)}
.kv{display:grid;grid-template-columns:96px 1fr;gap:6px 10px;font-size:13px}
.kv dt{color:var(--ink-3)}
.kv dd{margin:0}
.muted{color:var(--ink-3)}
.small{font-size:12.5px}
.nowrap{white-space:nowrap}
.right{text-align:right}
h4.sect{margin:18px 0 8px;font-size:14px;color:var(--ink-2)}
