/* ==========================================================
   控件 / 表格 / 表单 / 弹层
   ========================================================== */
.inp,select.inp,textarea.inp{
  height:26px;line-height:24px;padding:0 6px;border:1px solid var(--border);border-radius:2px;
  background:#fff;color:var(--text);outline:none;vertical-align:middle;
}
textarea.inp{height:auto;padding:5px 6px;line-height:1.5;}
.inp:focus,select.inp:focus,textarea.inp:focus{border-color:var(--brand-3);box-shadow:0 0 0 2px rgba(60,134,200,.15);}
.inp[readonly]{background:#f5f7f9;color:var(--text-2);}
.inp.w60{width:60px;} .inp.w80{width:80px;} .inp.w120{width:120px;}
.inp.w160{width:160px;} .inp.w220{width:220px;} .inp.w320{width:320px;}
.inp.date{width:130px;} .inp.dt{width:165px;}
select.inp{padding:0 2px;}
.chk{vertical-align:-2px;}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:4px;height:26px;padding:0 12px;
  border:1px solid var(--border);background:#fff;color:var(--text);border-radius:2px;cursor:pointer;
  white-space:nowrap;font-size:13px;
}
.btn:hover{background:#f2f6fa;border-color:#b9c4d0;text-decoration:none;}
.btn-primary{background:var(--brand-2);border-color:var(--brand-2);color:#fff;}
.btn-primary:hover{background:var(--brand-3);border-color:var(--brand-3);color:#fff;}
.btn-danger{background:var(--err);border-color:var(--err);color:#fff;}
.btn-danger:hover{background:#e8564c;border-color:#e8564c;color:#fff;}
.btn-ok{background:var(--ok);border-color:var(--ok);color:#fff;}
.btn-ok:hover{background:#22b169;border-color:#22b169;color:#fff;}
.btn-sm{height:22px;padding:0 8px;font-size:12px;}
.btn-lg{height:32px;padding:0 18px;font-size:14px;}
.btn[disabled]{opacity:.5;cursor:not-allowed;}
.btn-link{border:none;background:none;color:var(--brand-2);padding:0 4px;height:auto;}
.btn-link.danger{color:var(--err);}

table.grid{width:100%;background:#fff;font-size:13px;}
table.grid th{
  background:var(--panel-2);color:var(--text-2);font-weight:700;text-align:left;
  padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;font-size:12.5px;
}
table.grid td{padding:5px 8px;border-bottom:1px solid var(--border-2);vertical-align:middle;}
table.grid tbody tr:nth-child(even){background:#fbfcfd;}
table.grid tbody tr:hover{background:#eef5fc;}
table.grid td.num,table.grid th.num{text-align:right;font-variant-numeric:tabular-nums;}
table.grid td.c,table.grid th.c{text-align:center;}
table.grid .empty{padding:40px;text-align:center;color:var(--muted);}
.tbl-wrap{overflow:auto;}

.tag{display:inline-block;padding:1px 6px;border-radius:2px;font-size:11px;line-height:16px;white-space:nowrap;}
.tag-default{background:#eef1f5;color:var(--text-2);}
.tag-ok{background:#e6f6ed;color:var(--ok);}
.tag-warn{background:#fdf2e0;color:var(--warn);}
.tag-err{background:#fdeceb;color:var(--err);}
.tag-info{background:#e8f1fa;color:var(--info);}
.tag-gray{background:#eef1f5;color:var(--muted);}

.pager{display:flex;align-items:center;gap:4px;padding:8px 10px;background:#fff;border-top:1px solid var(--border-2);font-size:12px;}
.pager .pager-info{color:var(--text-2);margin-right:6px;}
.pager a.pg{min-width:24px;height:22px;line-height:20px;text-align:center;border:1px solid var(--border);border-radius:2px;color:var(--text);background:#fff;}
.pager a.pg:hover{border-color:var(--brand-3);color:var(--brand-2);text-decoration:none;}
.pager a.pg.on{background:var(--brand-2);border-color:var(--brand-2);color:#fff;font-weight:700;}
.pager a.pg.dis{opacity:.45;pointer-events:none;}

.form-table{width:100%;}
.form-table th{width:110px;text-align:right;padding:7px 8px;color:var(--text-2);font-weight:400;vertical-align:top;}
.form-table td{padding:6px 8px;}
.form-table td .tip{color:var(--muted);font-size:12px;margin-top:3px;}
.form-table .req::before{content:'*';color:var(--err);margin-right:3px;}
.form-actions{padding:10px;border-top:1px solid var(--border-2);background:var(--panel-2);display:flex;gap:8px;justify-content:center;}
.form-grid{display:flex;flex-wrap:wrap;}
.form-grid .cell{display:flex;align-items:center;padding:6px 0;width:50%;}
.form-grid .cell.full{width:100%;align-items:flex-start;}
.form-grid .cell>label{width:100px;text-align:right;color:var(--text-2);padding-right:8px;flex:0 0 100px;}
.form-grid .cell.full>label{padding-top:4px;}

.flash{margin:0 0 10px;padding:7px 12px;border-radius:2px;font-size:12.5px;border:1px solid;}
.flash-success{background:#eaf7f0;border-color:#bfe5d0;color:#1a7a4c;}
.flash-error{background:#fdeceb;border-color:#f5c6c3;color:#b8352c;}
.flash-warn{background:#fdf4e5;border-color:#f2ddb5;color:#96650a;}
.empty-box{padding:50px;text-align:center;color:var(--muted);}

.mask{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:200;display:none;align-items:center;justify-content:center;}
.mask.on{display:flex;}
.modal{background:#fff;border-radius:4px;min-width:360px;max-width:92vw;box-shadow:0 8px 30px rgba(0,0,0,.28);}
.modal-head{padding:8px 12px;border-bottom:1px solid var(--border-2);font-weight:700;color:var(--brand);display:flex;justify-content:space-between;align-items:center;}
.modal-head .x{cursor:pointer;color:var(--muted);font-size:16px;line-height:1;}
.modal-body{padding:12px;max-height:68vh;overflow:auto;}
.modal-foot{padding:8px 12px;border-top:1px solid var(--border-2);background:var(--panel-2);display:flex;justify-content:flex-end;gap:8px;}

.stat-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.stat{flex:1 1 160px;background:#fff;border:1px solid var(--border);border-radius:3px;padding:10px 12px;}
.stat .lab{color:var(--text-2);font-size:12px;}
.stat .val{font-size:22px;font-weight:700;color:var(--brand);margin-top:2px;font-variant-numeric:tabular-nums;}
.stat .sub{font-size:11px;color:var(--muted);}

.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);background:#fff;padding:0 8px;}
.tabs a{padding:7px 14px;color:var(--text-2);border:1px solid transparent;border-bottom:none;position:relative;top:1px;}
.tabs a.on{background:#fff;border-color:var(--border);color:var(--brand);font-weight:700;border-bottom:1px solid #fff;}
.tabs a:hover{text-decoration:none;color:var(--brand-2);}

.text-c{text-align:center;} .text-r{text-align:right;}
.muted{color:var(--muted);} .strong{font-weight:700;}
.nowrap{white-space:nowrap;} .mt8{margin-top:8px;} .mb8{margin-bottom:8px;}
.flex{display:flex;gap:8px;align-items:center;} .spacer{flex:1;}
.link-row a{margin-right:8px;}
.bar-out{display:inline-block;width:80px;height:8px;background:#eef1f5;border-radius:2px;vertical-align:middle;margin-right:6px;overflow:hidden;}
.bar{display:block;height:8px;background:var(--brand-3);}
.tree-toggle{cursor:pointer;color:var(--brand-2);margin-right:4px;font-size:11px;}

/* 登录页 */
.login-wrap{display:flex;height:100vh;align-items:center;justify-content:center;background:linear-gradient(135deg,#1b4468,#2f6fb0);}
.login-box{width:340px;background:#fff;border-radius:4px;box-shadow:0 10px 30px rgba(0,0,0,.3);overflow:hidden;}
.login-box .hd{padding:16px;text-align:center;background:#f7f9fb;border-bottom:1px solid var(--border-2);}
.login-box .hd b{font-size:16px;color:var(--brand);}
.login-box .bd{padding:18px;}
.login-box .row{margin-bottom:12px;}
.login-box .row input{width:100%;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:2px;outline:none;}
.login-box .row input:focus{border-color:var(--brand-3);}
.login-box .btn{width:100%;height:34px;font-size:14px;}
.login-box .ft{padding:8px;text-align:center;color:var(--muted);font-size:11px;background:#f7f9fb;}
