:root{
  --navy:#0f2a4a; --navy2:#16385f; --primary:#1d6fe0; --primary-d:#155bbd;
  --bg:#f4f6fa; --panel:#ffffff; --line:#e3e8f0; --text:#1f2a37; --muted:#7b8794;
  --green:#16a34a; --amber:#f59e0b; --red:#ef4444; --blue:#3b82f6; --indigo:#6366f1; --orange:#f97316;
  --shadow:0 2px 10px rgba(15,42,74,.06); --radius:12px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}
#app{height:100vh}
a{text-decoration:none;color:inherit}
button{font-family:inherit;cursor:pointer}
h1,h2,h3,h4{margin:0}

/* ---------- 按钮 ---------- */
.btn{border:1px solid var(--line);background:#fff;color:var(--text);padding:7px 14px;border-radius:8px;font-size:13px;transition:.15s}
.btn:hover{border-color:var(--primary)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-d)}
.btn.ghost{background:transparent}
.btn.danger{background:var(--red);border-color:var(--red);color:#fff}
.btn.block{width:100%;padding:10px;font-size:15px;margin-top:6px}
.btn.sm{padding:5px 10px;font-size:12px}
.link{background:none;border:none;color:var(--primary);padding:2px 6px;font-size:13px}
.link.danger{color:var(--red)}
.link:hover{text-decoration:underline}
.link.primary{font-weight:600}

/* ---------- 布局 ---------- */
.layout{display:flex;height:100vh;overflow:hidden}
.sidebar{width:212px;background:var(--navy);color:#cdd9e8;display:flex;flex-direction:column;flex-shrink:0}
.side-brand{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px 12px;border-bottom:1px solid rgba(255,255,255,.08)}
.side-logo-plate{display:inline-flex;align-items:center;justify-content:center}
.side-logo-plate img{height:60px;width:auto;display:block}
.side-name{color:#aebccf;font-size:11px;letter-spacing:.5px;font-weight:500;text-align:center}
.logo{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#2f7ff0,#16a3c9);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:18px}
.logo.sm{width:28px;height:28px;font-size:15px;border-radius:7px}
.nav{padding:10px;display:flex;flex-direction:column;gap:3px;overflow:auto}
.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;color:#cdd9e8;font-size:14px}
.nav-item:hover{background:rgba(255,255,255,.07);color:#fff}
.nav-item.active{background:var(--primary);color:#fff}
.ni{font-size:16px;width:20px;text-align:center}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{height:56px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 18px;gap:14px;flex-shrink:0}
.tb-logo{height:30px;width:auto;display:block;flex-shrink:0}
.tb-title{font-weight:600;color:var(--navy);flex:1;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tb-right{display:flex;align-items:center;gap:12px}
.uinfo{font-size:13px;color:var(--text)}
.role-badge{background:var(--navy);color:#fff;font-size:11px;padding:2px 8px;border-radius:20px;margin-left:4px}
.hamburger{display:none;border:none;background:none;font-size:20px}

.content{padding:20px;overflow:auto;flex:1}

/* ---------- 页面通用 ---------- */
.page-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px;gap:16px;flex-wrap:wrap}
.page-head h2{font-size:19px;color:var(--navy)}
.sub{margin:4px 0 0;color:var(--muted);font-size:12.5px}
.actions{display:flex;gap:8px;flex-wrap:wrap}
.empty{text-align:center;color:var(--muted);padding:40px;background:var(--panel);border-radius:var(--radius);border:1px dashed var(--line)}
.loading{color:var(--muted);padding:30px;text-align:center}

/* ---------- 卡片 / 网格 ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);margin-bottom:16px}
.card h4{font-size:14px;color:var(--navy);margin-bottom:12px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}

/* ---------- KPI ---------- */
.kpi-row{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);border-left:4px solid var(--primary)}
.kpi-v{font-size:21px;font-weight:700;color:var(--navy)}
.kpi-t{font-size:12px;color:var(--muted);margin-top:4px}
.kpi-blue{border-left-color:var(--blue)} .kpi-orange{border-left-color:var(--orange)}
.kpi-green{border-left-color:var(--green)} .kpi-red{border-left-color:var(--red)}
.kpi-amber{border-left-color:var(--amber)} .kpi-indigo{border-left-color:var(--indigo)}

/* ---------- 表格 ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
table.grid{width:100%;border-collapse:collapse;font-size:13px}
table.grid.compact td,table.grid.compact th{padding:6px 10px}
table.grid th{background:#f7f9fc;color:var(--muted);font-weight:600;text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
table.grid td{padding:10px 12px;border-bottom:1px solid #f0f3f8;white-space:nowrap}
table.grid tbody tr:hover{background:#fafcff}
table.grid tbody tr:last-child td{border-bottom:none}

/* ---------- 状态标签 ---------- */
.tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:600;border:1px solid transparent}
.tag-gray{background:#eef1f5;color:#64748b}
.tag-amber{background:#fef3c7;color:#b45309}
.tag-blue{background:#dbeafe;color:#1d4ed8}
.tag-green{background:#dcfce7;color:#15803d}
.tag-red{background:#fee2e2;color:#b91c1c}
/* 文本颜色工具类 */
.red{color:var(--red)} .amber{color:var(--amber)} .indigo{color:var(--indigo)}
.rose{color:#e11d48} .blue{color:var(--blue)} .green{color:var(--green)} .orange{color:var(--orange)}
/* 迷你统计 */
.mini-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.mini-stats>div{text-align:center;padding:10px 6px;background:var(--panel);border-radius:10px}
.mini-stats b{display:block;font-size:18px;color:var(--navy)}
.mini-stats span{font-size:11.5px;color:var(--muted)}

/* ---------- 表单 ---------- */
.form-row{margin-bottom:12px}
.form-row label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:5px}
.form-row label i{color:var(--red);margin-left:3px}
.form-row input,.form-row select,.form-row textarea{
  width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:#fff;font-family:inherit}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:none;border-color:var(--primary)}
.form-row textarea{min-height:64px;resize:vertical}

/* ---------- 抽屉 / 弹窗 ---------- */
.overlay{position:fixed;inset:0;background:rgba(15,32,56,.45);display:flex;justify-content:flex-end;opacity:0;transition:.25s;z-index:50}
.overlay.show{opacity:1}
.drawer{width:560px;max-width:94vw;background:#fff;height:100%;display:flex;flex-direction:column;box-shadow:-4px 0 24px rgba(0,0,0,.15);transform:translateX(20px);transition:.25s}
.overlay.show .drawer{transform:none}
.drawer-head,.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line);font-weight:600;color:var(--navy)}
.drawer-body,.modal-body{padding:18px 20px;overflow:auto;flex:1}
.drawer-foot,.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;background:#fafcff}
.x{border:none;background:none;font-size:22px;color:var(--muted);line-height:1}
.modal{width:520px;max-width:94vw;background:#fff;border-radius:14px;max-height:90vh;display:flex;flex-direction:column;margin:auto;align-self:center;box-shadow:0 12px 40px rgba(0,0,0,.2)}
.overlay{align-items:flex-start}
.blk{margin:16px 0 8px;font-size:13px;color:var(--navy)}

/* ---------- 明细编辑器 / KV ---------- */
.items-editor{margin-top:4px;overflow-x:auto}
.items-editor table.grid.compact{min-width:940px}
.items-editor input[type=number]{width:88px}
.profit-pos{color:#2e7d32;font-weight:600}
.profit-neg{color:#c62828;font-weight:600}
.pur-total{color:var(--navy)}
.btn-del{border:1px solid var(--line);background:#fff;border-radius:6px;padding:3px 8px;color:var(--red);font-size:12px}
.kv{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px dashed var(--line);font-size:13px}
.kv span{color:var(--muted)} .kv b{font-weight:600}
.approve-bar{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:10px}
.approve-bar textarea{width:100%;min-height:56px;border:1px solid var(--line);border-radius:8px;padding:8px;font-family:inherit}
.approve-bar .btn{width:100%}
.logs{list-style:none;padding:0;margin:0}
.logs li{padding:8px 0;border-bottom:1px dashed var(--line);font-size:13px}
.muted{color:var(--muted)}
.top-list .top-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line)}
.top-row .rank{width:22px;height:22px;border-radius:50%;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px}
.top-row .nm{flex:1} .top-row .amt{font-weight:600;color:var(--navy)}

/* ---------- Tabs ---------- */
.tabs{display:flex;gap:6px;margin-bottom:14px;border-bottom:1px solid var(--line)}
.tab{border:none;background:none;padding:9px 16px;font-size:14px;color:var(--muted);border-bottom:2px solid transparent}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.recon-bar{display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px}
.recon-bar label{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.recon-bar select,.recon-bar input{padding:7px 10px;border:1px solid var(--line);border-radius:8px}

/* ---------- 图表 ---------- */
.chart{width:100%;height:auto;max-width:100%}
.chart .grid-line{stroke:#eef1f5;stroke-width:1}
.chart .axis{font-size:11px;fill:var(--muted)}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-top:8px}
.legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.legend.col{flex-direction:column;gap:6px}
.donut-wrap{display:flex;gap:20px;align-items:center;flex-wrap:wrap}
.donut{max-width:200px}
.donut-center{font-size:22px;font-weight:700;fill:var(--navy)}
.donut-sub{font-size:11px;fill:var(--muted)}

/* ---------- Toast ---------- */
#toast-box{position:fixed;top:18px;right:18px;z-index:100;display:flex;flex-direction:column;gap:10px}
.toast{background:var(--navy);color:#fff;padding:11px 18px;border-radius:9px;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.2);opacity:0;transform:translateY(-8px);transition:.3s;max-width:320px}
.toast.show{opacity:1;transform:none}
.toast-success{background:var(--green)} .toast-error{background:var(--red)} .toast-info{background:var(--navy)}

/* ---------- 登录 ---------- */
.login-page{height:100vh;display:flex;flex-direction:column;overflow:hidden;background:#07162b}
.login-top{height:58px;flex-shrink:0;display:flex;align-items:center;padding:0 26px;background:linear-gradient(90deg,#081a31,#0b2545);border-bottom:1px solid rgba(84,152,240,.16);position:relative;z-index:4}
.lt-logo{width:102px;height:46px;margin-right:14px;flex-shrink:0;background:linear-gradient(135deg,#fff3c0 0%,#f7d36b 26%,#d99e2b 52%,#a9760a 74%,#ffe7a0 100%);-webkit-mask:url(/assets/img/logo.png) no-repeat center/100% 100%;mask:url(/assets/img/logo.png) no-repeat center/100% 100%;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}
.lt-company{color:#e9f2ff;font-size:18px;font-weight:600;letter-spacing:1.5px}
.login-main{flex:1;display:flex;position:relative;overflow:hidden;background:linear-gradient(135deg,#061529,#0a2b52 46%,#0c3f74)}
.login-bg{position:absolute;inset:0;z-index:0;background:url("/assets/img/login-bg.svg") repeat;background-size:480px 480px;pointer-events:none;opacity:.95}
.login-main::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:radial-gradient(circle at 80% 26%,rgba(64,146,255,.26),transparent 46%),radial-gradient(circle at 12% 88%,rgba(28,116,214,.22),transparent 46%)}
.login-hero{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;padding:0 3vw 4vh 6vw;position:relative;z-index:3}
.hero-title{margin:0;font-size:clamp(30px,3.3vw,50px);font-weight:800;letter-spacing:2px;line-height:1.16;color:#7fb6ff;background:linear-gradient(92deg,#d3e6ff 0%,#79b0ff 46%,#4a92f0 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 3px 16px rgba(58,138,240,.4))}
.hero-slogan{display:flex;gap:30px;margin:26px 0 0;font-size:clamp(17px,1.7vw,26px);font-weight:600;color:#dbe8fb;letter-spacing:4px;text-shadow:0 2px 12px rgba(0,0,0,.35)}
.login-side{width:clamp(360px,34vw,500px);flex-shrink:0;display:flex;align-items:center;justify-content:center;padding:0 4vw;position:relative;z-index:3}
.login-card{background:#fff;border-radius:10px;padding:30px 36px 26px;width:100%;max-width:372px;box-shadow:0 28px 70px rgba(3,18,42,.45)}
.login-welcome{margin:0 0 22px;text-align:center;color:var(--primary);font-size:26px;font-weight:600;letter-spacing:3px}
#lf .inp{width:100%;box-sizing:border-box;padding:12px 14px;margin-bottom:14px;border:1px solid #e4e9f2;background:#f2f6fb;border-radius:6px;font-size:14px;color:#1f2a37}
#lf .inp:focus{outline:none;border-color:var(--primary);background:#fff}
#lf .remember{display:flex;align-items:center;gap:7px;font-size:13px;color:#334155;margin:2px 0 16px;cursor:pointer;user-select:none}
#lf .remember input{width:15px;height:15px;margin:0;accent-color:var(--primary)}
#login-btn{height:44px;padding:0;font-size:15px;letter-spacing:6px;border-radius:6px;margin-top:2px}
.err{color:var(--red);font-size:12px;min-height:16px;margin-top:8px}
.login-tip{margin-top:18px;border-top:1px solid #eef2f7;padding-top:14px}
.login-tip b{display:block;color:#26313f;font-size:13.5px;font-weight:700;margin-bottom:6px}
.login-tip p{margin:0;color:#93a0b0;font-size:12px;line-height:1.7}

/* ---------- 响应式 ---------- */
@media (max-width:1100px){.kpi-row{grid-template-columns:repeat(3,1fr)}.grid-2{grid-template-columns:1fr}}
@media (max-width:820px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:60;transform:translateX(-100%);transition:.25s}
  .sidebar.open{transform:none}
  .hamburger{display:block}
  .kpi-row{grid-template-columns:repeat(2,1fr)}
  .tb-title{font-size:13px}
  .tb-logo{height:24px}
  .login-hero{display:none}
  .login-side{width:100%;padding:0 18px}
  .login-top{height:52px;padding:0 16px}
  .lt-logo{width:80px;height:36px;margin-right:10px}
  .lt-company{font-size:15px}
  .content{padding:14px}
}

/* ---------- 标签页 ---------- */
.tab{cursor:pointer;padding:8px 16px;border:1px solid transparent;border-bottom:none;background:#fff;color:var(--muted);font-size:14px;border-radius:8px 8px 0 0;margin-bottom:-1px}
.tab:hover{color:var(--navy)}
.tab.active{color:var(--navy);font-weight:600;border-color:var(--line);background:var(--panel)}
.tab .cnt{font-size:12px;color:var(--primary);margin-left:4px}

/* ---------- 业务员业绩排行 ---------- */
.rank-bar-wrap{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line)}
.rank-bar-wrap:last-child{border-bottom:none}
.rank-idx{width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
.rank-idx.top{background:var(--amber)}
.rank-name{flex:1;color:var(--navy);font-size:13px}
.rank-amt{color:var(--text);font-weight:600;font-size:13px}
.rank-track{flex:2;height:8px;background:#eef2f7;border-radius:6px;overflow:hidden;min-width:80px}
.rank-fill{height:100%;background:linear-gradient(90deg,#2f7ff0,#16a3c9);border-radius:6px}
.rank-cnt{color:#94a3b8;font-size:12px;flex:none;width:52px;text-align:right}

/* ---------- 销售对账单（打印） ---------- */
#print-area{display:none}
.stmt{max-width:820px;margin:0 auto;padding:24px;font-size:13px;color:#1f2937;line-height:1.65}
.stmt-head{display:flex;align-items:center;gap:16px;justify-content:space-between;border-bottom:2px solid var(--navy);padding-bottom:14px;margin-bottom:16px}
.stmt-logo{height:46px}
.stmt-company{flex:1}.stmt-company h1{font-size:20px;color:var(--navy);margin:0}.stmt-company p{margin:2px 0 0;color:#64748b;font-size:12px}
.stmt-meta{text-align:right;color:#475569;font-size:12px;line-height:1.7}
.stmt-customer{background:#f1f5f9;border-radius:8px;padding:10px 12px;margin-bottom:14px;font-size:13px}
.stmt-customer b{color:var(--navy)}
.stmt-table{width:100%;border-collapse:collapse;margin-bottom:12px}
.stmt-table th,.stmt-table td{border:1px solid #cbd5e1;padding:8px 10px;text-align:left}
.stmt-table th{background:#f1f5f9;color:var(--navy);font-weight:600}
.stmt-table td:nth-child(3),.stmt-table td:nth-child(4),.stmt-table td:nth-child(5),
.stmt-table th:nth-child(3),.stmt-table th:nth-child(4),.stmt-table th:nth-child(5){text-align:right}
.stmt-table tfoot td{font-weight:600;background:#fafafa}
.stmt-total-label{text-align:right!important;color:var(--navy)}
.stmt-note{color:#475569;margin:6px 0 4px}
.stmt-sign{display:flex;justify-content:space-between;gap:16px;margin-top:44px;color:#334155;font-size:13px}
.stmt-sign div{min-width:30%}

@media print{
  body *{visibility:hidden}
  #print-area,#print-area *{visibility:visible}
  #print-area{display:block!important;position:absolute;left:0;top:0;width:100%;padding:0}
  .stmt{max-width:none;padding:0}
  .stmt-head{border-color:#1f2937}
  .qstmt,.astmt{max-width:none;padding:0}
}

/* ===== 生成单据：报价单（还原 项目报价单模版.xlsx） ===== */
.qstmt{font-size:13px;color:#1f2937;line-height:1.7;max-width:820px;margin:0 auto;padding:18px}
.q-top{display:flex;align-items:center;justify-content:center;border-bottom:3px double #1f2937;padding-bottom:8px}
.q-company{font-size:18px;font-weight:700;color:#0f172a;text-align:center;width:100%}
.q-badge{font-size:12px;color:#b45309;border:1px solid #f59e0b;border-radius:6px;padding:3px 10px;background:#fffbeb;white-space:nowrap}
.q-title{text-align:center;font-size:24px;font-weight:700;letter-spacing:8px;margin:14px 0 8px;color:#0f172a}
.q-date{text-align:right;color:#334155;margin-bottom:8px}
.q-table{width:100%;border-collapse:collapse;margin-bottom:12px}
.q-table th,.q-table td{border:1px solid #94a3b8;padding:7px 9px;text-align:center}
.q-table th{background:#f1f5f9;color:#0f172a;font-weight:600}
.q-table td:nth-child(2),.q-table td:nth-child(3){text-align:left}
.q-table tfoot td{font-weight:600}
.q-total{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-top:8px;padding:6px 2px;font-size:14px}
.q-total .q-xs{color:#334155;font-size:13px}
.q-confirm{margin-top:18px;font-size:15px;letter-spacing:2px;color:#0f172a}

/* ===== 生成单据：交货验收单（还原 交货验收单模板.docx） ===== */
.astmt{font-size:13px;color:#1f2937;line-height:1.7;max-width:820px;margin:0 auto;padding:18px}
.a-title{text-align:center;font-size:22px;font-weight:700;letter-spacing:6px;margin-bottom:12px;color:#0f172a}
.a-head{display:flex;justify-content:space-between;gap:16px;font-size:13px;padding:2px 2px}
.a-head span{flex:1}
.a-head2{font-size:13px;padding:4px 2px 10px;border-bottom:1px solid #94a3b8;margin-bottom:8px}
.a-table{width:100%;border-collapse:collapse;margin-bottom:14px}
.a-table th,.a-table td{border:1px solid #94a3b8;padding:7px 9px;text-align:center}
.a-table th{background:#f1f5f9;color:#0f172a;font-weight:600}
.a-table td:nth-child(3),.a-table td:nth-child(4){text-align:left}
.a-sign{display:flex;justify-content:space-between;gap:16px;margin-top:40px;font-size:13px;color:#334155}
.a-sign div{min-width:30%}

/* ===== 生成预览弹窗 ===== */
.gen-doc .gen-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}
.gen-doc .gen-bar label{font-size:13px;color:#475569}
.gen-doc .gen-bar select,.gen-doc .gen-bar input[type=date],.gen-doc .gen-bar input[type=number]{padding:5px 8px;border:1px solid var(--line);border-radius:6px;font-size:13px;background:#fff;font-family:inherit}
.gen-doc .gen-grid2{display:grid;grid-template-columns:90px 1fr 90px 1fr 90px 1fr;gap:8px;align-items:center;margin-bottom:6px}
.gen-doc .gen-grid2 label{font-size:13px;color:#475569;text-align:right}
.gen-doc .gen-grid2 input{grid-column:auto / span 1;padding:6px 8px;border:1px solid var(--line);border-radius:6px;font-size:13px;background:#fff;font-family:inherit}
.gen-doc .gen-grid2 input:nth-of-type(2n){grid-column:auto / span 1}
.gen-doc .rtl{text-align:right!important}
.gen-doc .gen-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}

/* ===== 单据预览（生成 / 打印 → 预览 → 保存为 PDF / 打印） ===== */
.ov-wide .modal{width:920px;max-width:96vw}
.doc-preview{background:#eef1f6;padding:16px;border-radius:10px;display:flex;justify-content:center}
.doc-preview .paper{background:#fff;box-shadow:0 2px 14px rgba(15,32,56,.12);width:100%;max-width:820px;border-radius:4px;overflow:hidden}
.bl-lists{display:flex;flex-direction:column;gap:6px;margin-bottom:4px}
.bl-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}
.bl-hr{border:none;border-top:1px dashed #cbd5e1;margin:10px 0}
.bl-name{height:34px;border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:0 10px}

/* ===== 通用辅助 ===== */
.sm{font-size:12px}
.right{text-align:right}
.strong{font-weight:600}
.mt{margin-top:14px}

/* ===== 合同到期提醒横幅 ===== */
.alert-banner{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:10px;margin-bottom:14px;border:1px solid transparent}
.alert-banner.warn{background:#fff7ed;border-color:#fed7aa}
.alert-banner.danger{background:#fef2f2;border-color:#fecaca}
.alert-banner .ab-ico{font-size:20px}
.alert-banner .ab-txt{flex:1;font-size:13px;color:#334155}
.alert-banner .ab-txt b{color:#0f172a}
.ab-chip{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:600;margin-left:6px}
.ab-chip.red{background:#fee2e2;color:#b91c1c}
.ab-chip.amber{background:#fef3c7;color:#b45309}
.row-overdue{background:#fef2f2!important}
.row-overdue td:first-child{box-shadow:inset 3px 0 0 #dc2626}
.row-alert{background:#fffbeb!important}
.row-alert td:first-child{box-shadow:inset 3px 0 0 #f59e0b}

/* ===== 维度下钻：分段控件 + 可点击排行 ===== */
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;gap:10px}
.card-head h4{margin:0}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg-btn{background:#fff;border:none;padding:6px 14px;font-size:13px;cursor:pointer;color:#475569}
.seg-btn.active{background:var(--navy);color:#fff}
.rank-bar-wrap.clickable{cursor:pointer;transition:.15s}
.rank-bar-wrap.clickable:hover{background:#f1f5f9}
.rank-bar-wrap .rank-name{flex:1}
.rank-idx.red{background:#fee2e2;color:#b91c1c}
.rank-idx.amber{background:#fef3c7;color:#b45309}

/* ===== 工作台提醒卡 ===== */
.alert-card.red{border-left:4px solid #dc2626}
.alert-card.amber{border-left:4px solid #f59e0b}

/* ===== 对账单视觉微调 ===== */
.stmt-meta{text-align:right;color:#475569;font-size:12px;line-height:1.9}
.stmt-meta b{color:var(--navy)}
.stmt-rule{height:1px;background:var(--line);margin:2px 0 12px}
.stmt-trial{margin-top:10px;padding:8px 12px;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:8px;font-size:12px;color:#475569}
.stmt-trial b{color:var(--green)}

/* ===== Logo / 品牌微调 ===== */
.side-brand .side-logo{height:30px;width:auto}
.tb-logo{height:30px;width:auto}

/* ===== 筛选 / 查询分组 ===== */
.filter-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:14px}
.filter-bar .fb-group{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;padding-right:10px;border-right:1px dashed var(--line)}
.filter-bar .fb-group:last-of-type{border-right:none}
.filter-bar .fb-group > b{font-size:12px;color:var(--navy);margin-right:2px;font-weight:700}
.filter-bar select,.filter-bar input[type=text],.filter-bar input[type=date]{padding:6px 9px;border:1px solid var(--line);border-radius:7px;font-size:13px;background:#fff;font-family:inherit}
.filter-bar input[type=text]{min-width:180px}
.filter-bar .filter-count{margin-left:auto;font-size:12.5px;color:var(--muted)}

/* ===== 侧栏分组 ===== */
.nav-group{margin-bottom:4px}
.nav-group-title{font-size:11px;color:var(--muted);padding:12px 18px 4px;letter-spacing:1px}
/* 合并壳 Tab（独立类名，避免与 finance / pricelist 内部 .tabs/.tab 冲突） */
.grp-tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin:0 0 16px}
.grp-tab{appearance:none;border:none;background:transparent;padding:10px 16px;font-size:14px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s}
.grp-tab:hover{color:var(--text)}
.grp-tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.grp-tab-body{min-height:220px}

/* ===== 通知中心（信息发布与接收） ===== */
.lk{color:var(--primary);cursor:pointer;text-decoration:none;font-weight:600}
.lk:hover{text-decoration:underline}
.badge{display:inline-block;background:var(--purple,#7c3aed);color:#fff;font-size:11px;line-height:1;padding:2px 7px;border-radius:9px;margin-left:4px;vertical-align:middle}
.radio,.chk{display:inline-flex;align-items:center;gap:5px;font-size:13px;cursor:pointer}
.chk{width:100%;padding:4px 2px}
#nt-users .chk{width:100%}
.msg-detail h3{margin:0 0 10px;font-size:18px;color:var(--navy,#0f172a)}
.msg-meta{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:12.5px;color:var(--muted,#64748b);background:var(--panel,#f8fafc);border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:8px 12px;margin-bottom:12px}
.msg-content{white-space:pre-wrap;line-height:1.7;font-size:14px;color:var(--text,#1e293b);background:#fff;border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:12px 14px;margin-bottom:14px}
.msg-section{margin-top:8px;padding-top:10px;border-top:1px dashed var(--line,#e2e8f0)}
.msg-section-title{font-size:13px;font-weight:700;color:var(--navy,#0f172a);margin-bottom:8px}
.msg-section textarea{width:100%;border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13px;resize:vertical;margin-bottom:8px}
.msg-replies{margin-top:6px;max-height:260px;overflow:auto}
.msg-reply{border:1px solid var(--line,#e2e8f0);border-radius:8px;padding:8px 10px;margin-bottom:8px;background:var(--panel,#f8fafc)}
.msg-reply-head{font-size:12px;color:var(--muted,#64748b);margin-bottom:3px}
.msg-reply-body{font-size:13.5px;color:var(--text,#1e293b);white-space:pre-wrap}
.msg-recip-list{display:flex;flex-direction:column;gap:6px}
.msg-recip{display:flex;align-items:center;gap:14px;font-size:13px;padding:6px 10px;border:1px solid var(--line,#e2e8f0);border-radius:7px;background:#fff}
.msg-recip > span:first-child{flex:1;min-width:0}
.msg-recip > span:nth-child(2),.msg-recip > span:nth-child(3){flex:0 0 auto}

/* ---------- 基本设置 ---------- */
.set-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.set-card .actions{margin-top:12px}
.set-card .hint{margin:8px 0 0;font-size:12.5px;color:var(--muted)}
.set-card .hint.err{color:var(--red)}
.swatches{display:flex;flex-wrap:wrap;gap:10px;margin:6px 0 14px}
.swatch{position:relative;width:54px;height:54px;border-radius:10px;border:2px solid transparent;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.12);transition:.15s}
.swatch:hover{transform:translateY(-2px)}
.swatch.active{border-color:#fff;outline:2px solid var(--text);outline-offset:1px}
.swatch span{position:absolute;left:0;right:0;bottom:4px;text-align:center;color:#fff;font-size:10px;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.color-custom{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.color-custom label{font-size:13px;color:var(--muted)}
.color-custom input[type=color]{width:42px;height:30px;border:1px solid var(--line);border-radius:6px;background:#fff;padding:2px;cursor:pointer}
.link.warn{color:var(--amber)}
@media(max-width:720px){.set-grid{grid-template-columns:1fr}}

/* ---------- 旧版数据查询 ---------- */
.cat-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 6px}
.cat-tab{padding:7px 14px;border:1px solid var(--line);background:var(--card);border-radius:20px;cursor:pointer;font-size:13px;color:var(--muted);transition:.15s;display:inline-flex;align-items:center;gap:6px}
.cat-tab:hover{border-color:var(--primary);color:var(--text)}
.cat-tab.active{background:var(--primary);border-color:var(--primary);color:#fff}
.cat-tab .cnt{background:rgba(255,255,255,.25);border-radius:10px;padding:0 7px;font-size:11px;font-weight:600}
.cat-tab:not(.active) .cnt{background:var(--bg-soft);color:var(--muted)}
.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 14px;background:var(--bg-soft);border:1px solid var(--line);border-radius:10px;margin:10px 0}
.filter-bar label{font-size:13px;color:var(--muted);margin-right:-4px}
.filter-bar select,.filter-bar input{padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:var(--card);color:var(--text)}
.filter-bar input{min-width:220px;flex:1}
.filter-bar .spacer{margin-left:auto}
.legacy-meta{font-size:12.5px;color:var(--muted);margin:8px 2px}

/* 旧版数据查询分页 */
.pager{display:flex;align-items:center;gap:10px;justify-content:flex-end;margin-top:10px}
.pager .pg{padding:5px 14px;border:1px solid var(--line);background:var(--card);border-radius:7px;cursor:pointer;font-size:13px;color:var(--text)}
.pager .pg:disabled{opacity:.45;cursor:not-allowed}
.pager .pg-info{font-size:13px;color:var(--muted)}
