:root{
  --bg:#f4f6f9;
  --panel:#ffffff;
  --panel-2:#fafbfd;
  --line:#e3e8ef;
  --line-2:#eef2f7;
  --text:#1f2937;
  --text-2:#5b6676;
  --text-3:#8a94a6;
  --brand:#1a5fd6;
  --brand-2:#e8f0fe;
  --up:#d32f2f;
  --down:#178a4c;
  --warn:#c77700;
  --warn-bg:#fff5e5;
  --ok:#178a4c;
  --ok-bg:#e8f7ee;
  --err:#d32f2f;
  --err-bg:#fdecec;
  --info-bg:#eaf1fd;
  --primary:#1a5fd6;
  --muted:#8a94a6;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 4px 14px rgba(16,24,40,.06);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--text);font-size:13px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
.app{display:flex;height:100vh;overflow:hidden}

/* ---------- Sidebar ---------- */
.sidebar{
  width:212px;flex:0 0 212px;background:#0f2544;color:#c9d6ea;
  display:flex;flex-direction:column;transition:all .18s;overflow:hidden;
}
.sidebar.collapsed{width:0;flex-basis:0}
.brand{display:flex;align-items:center;gap:10px;padding:16px 16px 14px;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-logo{width:34px;height:34px;border-radius:8px;background:linear-gradient(135deg,#2f7cf6,#1a5fd6);
  display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:700;color:#fff;flex:0 0 34px}
.brand-title{font-size:14px;font-weight:700;color:#fff;white-space:nowrap}
.brand-sub{font-size:10px;color:#7f93b3;letter-spacing:.5px}
.nav{flex:1;overflow-y:auto;padding:10px 8px}
.nav::-webkit-scrollbar{width:6px}
.nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:3px}
.nav-group{margin-bottom:6px}
.nav-group-title{display:flex;align-items:center;gap:8px;font-size:15px;color:#fff;padding:12px 10px 10px 12px;letter-spacing:.45px;font-weight:900;cursor:pointer;user-select:none;border-left:3px solid var(--mod-head-bg, var(--brand));border-radius:0 10px 10px 0;text-shadow:0 1px 2px rgba(0,0,0,.25)}
.nav-group-title:hover{background:linear-gradient(90deg, rgba(255,255,255,.08) 0%, rgba(255,255,255,.02) 55%, transparent 100%)}
.nav-caret{font-size:11px;color:#c4d6f0;width:11px;text-align:center;transition:transform .15s;flex:0 0 11px}
.nav-gname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-group.collapsed .nav-caret{transform:rotate(-90deg)}
.nav-item{display:flex;align-items:center;gap:7px;padding:7px 10px 7px 36px;border-radius:6px;cursor:pointer;
  font-size:11.5px;color:#8da6cc;white-space:nowrap;transition:.13s;margin-bottom:1px;position:relative;font-weight:500}
.nav-item::before{content:"";position:absolute;left:24px;top:50%;width:4px;height:4px;border-radius:50%;background:rgba(141,166,204,.55)}
.nav-item:hover{background:rgba(255,255,255,.08);color:#c8d8ef}
.nav-item.active{background:linear-gradient(90deg, var(--brand) 0%, var(--brand-2) 100%);color:#fff;font-weight:600;box-shadow:0 3px 10px rgba(37,99,235,.35)}
.nav-item.active::before{background:#fff}
.nav-ico{width:17px;text-align:center;font-size:14px;flex:0 0 17px}
.nav-badge{margin-left:auto;background:#e05353;color:#fff;font-size:10px;padding:1px 6px;border-radius:9px;font-weight:700}
.nav-badge-dev{margin-left:8px;background:#e8a33d;color:#fff;font-size:10px;padding:1px 6px;border-radius:9px;font-weight:700}
.nav-item.active .nav-badge-dev{background:rgba(255,255,255,.3)}
.nav-item.active .nav-badge{background:rgba(255,255,255,.28)}
.sidebar-foot{padding:10px 16px;border-top:1px solid rgba(255,255,255,.08)}
.ver{font-size:10px;color:#6b7f9e}

/* ---------- Main ---------- */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.topbar{height:52px;flex:0 0 52px;background:var(--panel);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 16px;gap:12px}
.topbar-left{display:flex;align-items:center;gap:12px;min-width:0}
.topbar-right{display:flex;align-items:center;gap:8px}
.page-title{font-size:21px;font-weight:800;white-space:nowrap;letter-spacing:.5px;
  background:linear-gradient(92deg,var(--brand),#2f7de0 60%,#39a0e6);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:var(--brand);padding-left:12px;position:relative;line-height:1.2}
.page-title::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:20px;border-radius:3px;
  background:linear-gradient(var(--brand),#39a0e6)}
.title-edit{font-size:14px;color:var(--text-3);border:1px solid var(--line);width:28px;height:28px;border-radius:8px;margin-left:2px}
.title-edit:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-2)}
.clock{font-size:12px;color:var(--text-3);margin-right:4px;font-variant-numeric:tabular-nums}
.icon-btn{background:none;border:none;font-size:16px;cursor:pointer;color:var(--text-2);
  width:30px;height:30px;border-radius:6px;display:flex;align-items:center;justify-content:center}
.icon-btn:hover{background:var(--line-2);color:var(--text)}
.content{flex:1;overflow-y:auto;padding:16px}
.content::-webkit-scrollbar{width:9px;height:9px}
.content::-webkit-scrollbar-thumb{background:#ccd4e0;border-radius:5px}
.content::-webkit-scrollbar-track{background:transparent}

/* ---------- Buttons ---------- */
.btn{border:1px solid var(--line);background:var(--panel);color:var(--text);padding:6px 13px;
  border-radius:7px;cursor:pointer;font-size:12.5px;font-family:inherit;transition:.13s;white-space:nowrap}
.btn:hover{border-color:#c3cede;background:var(--panel-2)}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.btn-primary:hover{background:#154fb5;border-color:#154fb5}
.btn-ghost{background:transparent}
.btn-accent{background:var(--brand-2);border-color:#bcd0f3;color:var(--brand);font-weight:600}
.btn-accent:hover{background:#dbe8fb;border-color:#9fbfe8}
.btn.danger{color:var(--err)}
.btn.danger:hover{background:var(--err-bg);border-color:#f3bcbc}
.btn-sm{padding:3px 9px;font-size:12px;border-radius:6px}
.btn-link{background:none;border:none;color:var(--brand);cursor:pointer;font-size:12.5px;padding:2px 5px;
  font-family:inherit;border-radius:4px}
.btn-link:hover{background:var(--brand-2)}
.btn-link.danger{color:var(--err)}
.btn-link.danger:hover{background:var(--err-bg)}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------- Card / Panel ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:14px}
.card-head{padding:11px 14px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;
  justify-content:space-between;gap:10px;flex-wrap:wrap}
.card-title{font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px}
.card-title small{font-weight:400;color:var(--text-3);font-size:11.5px}
.card-body{padding:14px}
.card-body.nopad{padding:0}

/* ---------- KPI ---------- */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:12px;margin-bottom:14px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi::after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand)}
.kpi.k-red::after{background:var(--up)}
.kpi.k-green::after{background:var(--ok)}
.kpi.k-orange::after{background:var(--warn)}
.kpi.k-purple::after{background:#7a5af5}
.kpi.k-teal::after{background:#12a594}
.kpi-label{font-size:11.5px;color:var(--text-3);margin-bottom:5px;display:flex;align-items:center;gap:5px}
.kpi-value{font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.kpi-value small{font-size:12px;font-weight:500;color:var(--text-3);margin-left:3px}
.kpi-sub{font-size:11px;color:var(--text-3);margin-top:4px}

/* ---------- Table ---------- */
.table-wrap{overflow-x:auto}
.table-wrap::-webkit-scrollbar{height:9px}
.table-wrap::-webkit-scrollbar-thumb{background:#ccd4e0;border-radius:5px}
table.tbl{width:100%;border-collapse:collapse;font-size:12.5px}
table.tbl th{background:var(--panel-2);color:var(--text-2);font-weight:600;text-align:left;
  padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:2}
table.tbl td{padding:8px 10px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.tbl tbody tr:hover{background:#f7f9fc}
table.tbl tbody tr.sel{background:var(--brand-2)}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
table.tbl td.ctr,table.tbl th.ctr{text-align:center}
/* 分组表的类别分隔线：只在类别分组起始列加竖直分隔线，组内列不额外画线 */
table.tbl th.fc-sep,table.tbl td.fc-sep{border-left:2px solid var(--line,#c9d2de)}
table.tbl tfoot td{padding:9px 10px;background:var(--panel-2);font-weight:700;border-top:2px solid var(--line)}
table.tbl tr.tb-sub td{padding:8px 10px;background:var(--panel-2);color:var(--text-3);font-weight:600;border-top:1px dashed var(--line)}
table.tbl tr.tb-tot td{padding:9px 10px;background:#eef3ff;font-weight:700;border-top:2px solid var(--accent,#2563EB)}
.tbl .mono{font-family:Consolas,"Courier New",monospace;font-size:12px}
.empty{padding:40px 20px;text-align:center;color:var(--text-3);font-size:13px}
.empty-ico{font-size:34px;opacity:.35;margin-bottom:8px}

/* ---------- 页面开发中 ---------- */
.dev-wrap{display:flex;align-items:center;justify-content:center;min-height:62vh}
.dev-card{text-align:center;padding:42px 50px;background:var(--panel);border:1px dashed var(--line);border-radius:16px;box-shadow:0 2px 12px rgba(20,40,80,.04)}
.dev-ico{font-size:56px;margin-bottom:10px}
.dev-title{font-size:18px;font-weight:700;color:var(--text-1);margin-bottom:10px}
.dev-sub{font-size:13px;color:var(--text-3);line-height:1.9}

/* ---------- 模块落地页 ---------- */
.nav-group-title{cursor:pointer;user-select:none}
.nav-group-title.active{color:var(--brand);font-weight:800}
.mod-head{display:flex;align-items:center;gap:14px;padding:18px 20px;
  background:var(--mod-head-bg, var(--panel));color:var(--mod-head-fg, var(--brand));
  border:1px solid rgba(0,0,0,.08);border-radius:12px;margin-bottom:16px;
  box-shadow:0 4px 16px rgba(20,40,80,.10);cursor:pointer;transition:.15s}
.mod-head:hover{box-shadow:0 6px 22px rgba(20,40,80,.18)}
.mod-head-main{flex:1;min-width:0}
.mod-head-ico{font-size:30px;width:52px;height:52px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.22);border-radius:12px}
.mod-head-name{font-size:27px;font-weight:var(--mod-head-weight, 900);color:var(--mod-head-fg, var(--brand));
  letter-spacing:.5px;display:flex;align-items:center;line-height:1.15}
.mod-caret{font-size:16px;margin-left:10px;color:var(--mod-head-fg, var(--brand));opacity:.85;transition:transform .15s}
.mod-head-desc{font-size:12.5px;color:var(--mod-head-fg, var(--text-3));opacity:.82;margin-top:3px;line-height:1.6}
.mod-tools{margin-top:2px}
.mod-acc.collapsed .mod-tools{display:none}
.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:14px}
.tool-card{display:flex;align-items:center;gap:13px;padding:15px 16px;background:var(--panel);
  border:1px solid var(--line);border-radius:11px;cursor:pointer;transition:.15s;box-shadow:0 1px 4px rgba(20,40,80,.03)}
.tool-card:hover{border-color:var(--brand);box-shadow:0 4px 14px rgba(26,95,214,.1);transform:translateY(-1px)}
.tool-card.is-dev{opacity:.82;background:repeating-linear-gradient(45deg,#fafbfc,#fafbfc 10px,#f4f6f9 10px,#f4f6f9 20px)}
.tool-ico{font-size:24px;width:44px;height:44px;flex:0 0 44px;display:flex;align-items:center;justify-content:center;
  background:var(--panel-2);border-radius:10px}
.tool-body{flex:1;min-width:0}
.tool-name{font-size:13.5px;font-weight:700;color:var(--text-1);display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.tool-desc{font-size:11.5px;color:var(--text-3);margin-top:3px;line-height:1.5}
.tool-go{font-size:18px;color:var(--text-3);flex:0 0 auto}
.tool-status{font-size:10px;font-weight:700;padding:1px 7px;border-radius:9px}
.tool-status.done{background:var(--ok-bg);color:var(--ok)}
.tool-status.dev{background:#fdf0da;color:#b9772a}

/* ---------- 利润速算输出 ---------- */
.pc-out{margin-top:16px}
.pc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.pc-kpi{background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.pc-kpi.hl{background:var(--info-bg);border-color:#cadcf9}
.pc-k{font-size:11.5px;color:var(--text-3);margin-bottom:5px}
.pc-v{font-size:18px;font-weight:800;color:var(--text-1)}
.pc-v.pos{color:var(--ok)} .pc-v.neg{color:var(--err)}
.pos{color:var(--ok)} .neg{color:var(--err)}

/* ---------- 销售合同 ---------- */
.contract{background:#fff;border:1px solid var(--line);border-radius:10px;padding:26px 30px;max-width:820px;margin-top:16px}
.c-title{text-align:center;font-size:20px;margin:0 0 14px;color:var(--text-1)}
.c-meta{display:flex;justify-content:space-between;font-size:13px;margin-bottom:14px;color:var(--text-2)}
.c-terms{font-size:13px;line-height:1.9;margin-top:16px;color:var(--text-1)}
.c-terms p{margin:4px 0}
.c-sign{margin-top:26px;font-size:13px;color:var(--text-1)}
.c-actions{margin-top:16px}

@media print{
  .sidebar,.topbar,.no-print{display:none!important}
  .print-only{display:inline!important}
  .app{display:block!important}
  .main{margin:0!important;display:block!important;overflow:visible!important}
  .content{padding:0!important;overflow:visible!important}
  .contract{box-shadow:none;border:none;max-width:none;margin:0}
}

/* ---------- 采购跟单跟踪 ---------- */
.po-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px;margin-top:14px}
.po-card{border:1px solid var(--line);border-radius:11px;padding:14px 16px;background:var(--panel)}
.po-head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px}
.po-sub{font-size:12px;color:var(--text-3);margin:6px 0 10px}
.po-row{display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-2);margin-bottom:6px}
.po-stages{display:flex;align-items:center;flex-wrap:wrap;gap:0;margin:10px 0 12px}
.stage{font-size:11px;padding:2px 9px;border-radius:10px;background:#eef1f5;color:#8b95a3;border:1px solid transparent}
.stage.on{background:var(--info-bg);color:#14418f;border-color:#cadcf9;font-weight:600}
.stage-sep{color:#c3cede;margin:0 2px;font-size:10px}
.po-edit{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.po-edit .fi{min-width:120px}
.pt-qbar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.pt-qbar .fi{min-width:150px}
.pt-rhead{font-size:13px;color:var(--text-2);margin:4px 0 10px}
.pt-rhead b{color:var(--text)}
.po-sdtitle{font-size:12px;color:var(--text-3);margin:12px 0 6px;font-weight:600}
.po-sdtbl th,.po-sdtbl td{padding:5px 8px}
.po-sdtbl .inline-input{width:100%}
.po-ro{font-size:13px;color:var(--text-2);line-height:1.9}
.po-ro-tip{display:inline-block;margin-top:6px;font-size:12px;color:#9a6b00;background:#fff6e0;border:1px solid #ffe2a8;padding:2px 9px;border-radius:10px}
.po-log{margin-top:12px;border-top:1px dashed var(--line);padding-top:8px}
.po-log-h{font-size:12px;color:var(--text-3);margin-bottom:4px}
.po-log-row{font-size:12px;color:var(--text-2);line-height:1.7}
.po-log-row .mono{color:var(--text-3)}

/* ---------- 订单执行看板 ---------- */
.eb-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:14px}
.eb-kpi{background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.eb-k{font-size:11.5px;color:var(--text-3);margin-bottom:5px}
.eb-v{font-size:19px;font-weight:800;color:var(--text-1)}
.eb-filter{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.eb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:13px}
.eb-card{border:1px solid var(--line);border-radius:11px;padding:13px 15px;background:var(--panel)}
.eb-head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13.5px}
.eb-amt{font-weight:800;color:var(--text-1)}
.eb-sub{font-size:12px;color:var(--text-3);margin:6px 0 10px}
.eb-bar{display:flex;align-items:center;gap:8px;margin:5px 0}
.eb-bar-name{width:32px;font-size:12px;color:var(--text-2);flex:0 0 32px}
.eb-logi{font-size:11.5px;color:var(--text-3);margin-top:9px;border-top:1px dashed var(--line);padding-top:8px}

/* ---------- 客户账期信用 ---------- */
.cc-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:14px;margin-top:4px}
.cc-card{border:1px solid var(--line);border-radius:11px;padding:14px 16px;background:var(--panel)}
.cc-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;margin-bottom:10px}
.cc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px 12px;margin-bottom:12px}
.cc-grid > div{display:flex;flex-direction:column;gap:2px}
.cc-k{font-size:11px;color:var(--text-3)}
.cc-v{font-size:15px;font-weight:700;color:var(--text-1)}
.cc-edit{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.cc-edit .fi{min-width:130px}

/* ---------- 供应商评级 ---------- */
.sr-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px;margin-top:4px}
.sr-card{border:1px solid var(--line);border-radius:11px;padding:14px 16px;background:var(--panel)}
.sr-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;margin-bottom:12px}
.sr-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px}

/* ---------- 合同管理 ---------- */
.ct-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:14px;margin-top:4px}
.ct-card{border:1px solid var(--line);border-radius:11px;padding:14px 16px;background:var(--panel)}
.ct-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;margin-bottom:6px}
.ct-sub{font-size:12px;color:var(--text-3);margin-bottom:10px}
.ct-sec{margin-bottom:10px}
.ct-sec > b{font-size:12px;color:var(--text-2)}
.ct-list{margin:5px 0;padding-left:18px;font-size:12.5px;color:var(--text-1);max-height:90px;overflow:auto}
.ct-list li{margin:2px 0}
.ct-list .muted{color:var(--text-3);list-style:none;margin-left:-18px}
.ct-add{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.ct-add .inline-input{flex:1;min-width:90px}
.ct-foot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:4px;border-top:1px dashed var(--line);padding-top:10px}

/* ---------- 提成试算器 ---------- */
.cc-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.cc-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.cc-col{min-width:0}
.cc-sec-title{font-weight:600;color:var(--text);margin-bottom:8px;padding-left:8px;border-left:3px solid var(--primary)}
.cc-field{display:flex;align-items:center;gap:10px;margin-bottom:9px}
.cc-field>label{width:96px;flex:none;color:var(--muted);font-size:13px}
.cc-field .inline-input{flex:1}
.cc-rule{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.cc-role{width:52px;flex:none;font-weight:600;font-size:13px}
.cc-rule .inline-input:first-of-type{width:110px;flex:none}
.cc-rule input.inline-input{width:84px;flex:none;margin-left:auto}
.cc-out{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:12px 14px}
.cc-row{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0;font-size:14px}
.cc-row small{font-weight:400}
.cc-row.cc-hl{font-weight:700;border-top:1px dashed var(--line);margin-top:4px;padding-top:9px}
.cc-out hr{border:none;border-top:1px dashed var(--line);margin:6px 0}
@media(max-width:720px){.cc-grid{grid-template-columns:1fr}}

/* ---------- 对账差异调整 ---------- */
.ra-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.ra-bar .inline-input{max-width:340px}
.ra-base{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:6px 0 16px}
.ra-kpi{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.ra-kpi span{display:block;color:var(--muted);font-size:12px;margin-bottom:4px}
.ra-kpi b{font-size:18px}
.ra-kpi.ra-hl{background:var(--brand-2);border-color:#c5dbf7}
.ra-kpi.ra-hl b{color:var(--brand)}
.ra-adj-h{font-weight:600;margin-bottom:8px}
.ra-add{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.ra-add .inline-input{flex:0 1 auto}
.ra-tbl{margin-top:4px}
.ra-total{margin-top:12px;padding:12px 14px;border-radius:8px;background:var(--panel-2);border:1px solid var(--line);font-size:15px}
.ra-total b{font-size:18px;margin-left:6px}
.ra-all{margin-top:22px;border-top:1px dashed var(--line);padding-top:14px}
.ra-all-h{font-weight:600;margin-bottom:8px}
.btn-sm{padding:2px 10px;font-size:12px;border-radius:6px}

/* ---------- 打印模板设置 ---------- */
.pt-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.pt-col{min-width:0}
.pt-col .sec-title{font-weight:600;color:var(--text);margin-bottom:8px;padding-left:8px;border-left:3px solid var(--primary)}
.ta{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13px;resize:vertical;box-sizing:border-box}
.ck{display:inline-flex;align-items:center;gap:6px;margin:5px 16px 5px 0;font-size:13px;color:var(--text-2);cursor:pointer}
.pt-col .inline-input{width:100%}
#pt_preview{background:var(--bg);border:1px dashed var(--line);border-radius:8px;padding:10px;overflow:auto}
@media(max-width:860px){.pt-grid{grid-template-columns:1fr}}

/* ---------- Tag ---------- */
.tag{display:inline-block;padding:1.5px 8px;border-radius:11px;font-size:11px;font-weight:600;white-space:nowrap;border:1px solid transparent}
.tag-gray{background:#f0f2f5;color:#69707d;border-color:#e2e6ec}
.tag-blue{background:var(--info-bg);color:#1a5fd6;border-color:#cadcf9}
.tag-green{background:var(--ok-bg);color:var(--ok);border-color:#bfe6cd}
.tag-orange{background:var(--warn-bg);color:var(--warn);border-color:#f6dfb4}
.tag-red{background:var(--err-bg);color:var(--err);border-color:#f6c6c6}
.tag-purple{background:#f2edff;color:#6b46e0;border-color:#ddd1fb}

/* ---------- Form ---------- */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:11px 14px}
.form-grid.c1{grid-template-columns:1fr}
.form-grid.c2{grid-template-columns:repeat(2,1fr)}
.form-grid.c3{grid-template-columns:repeat(3,1fr)}
.fi{display:flex;flex-direction:column;gap:4px}
.fi.span2{grid-column:span 2}
.fi.span3{grid-column:span 3}
.fi label{font-size:11.5px;color:var(--text-2);font-weight:600}
.fi label .req{color:var(--err);margin-left:2px}
.fi input,.fi select,.fi textarea{
  border:1px solid var(--line);border-radius:6px;padding:6px 9px;font-size:12.5px;
  font-family:inherit;background:#fff;color:var(--text);outline:none;transition:.13s;width:100%}
.fi input:focus,.fi select:focus,.fi textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(26,95,214,.1)}
.fi input:disabled,.fi input[readonly]{background:#f5f7fa;color:var(--text-2)}
.fi textarea{resize:vertical;min-height:56px}
.fi .hint{font-size:10.5px;color:var(--text-3)}
.inline-input{border:1px solid var(--line);border-radius:5px;padding:4px 7px;font-size:12.5px;
  font-family:inherit;width:100%;outline:none;background:#fff}
.inline-input:focus{border-color:var(--brand);box-shadow:0 0 0 2px rgba(26,95,214,.1)}

/* 隐藏 number 输入框的上下调节箭头（厚/宽/长等数字框） */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
input[type="number"]{-moz-appearance:textfield;appearance:textfield}

/* ---------- 可搜索下拉 combobox（模糊查找） ---------- */
.combo{position:relative;display:flex;flex:1 1 auto;min-width:120px}
.combo-input{
  width:100%;border:1px solid var(--line);border-radius:6px;padding:5px 26px 5px 9px;
  font-size:12.5px;font-family:inherit;background-color:#fff;color:var(--text);line-height:1.4;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6z' fill='%238a94a6'/></svg>");
  background-repeat:no-repeat;background-position:right 9px center;cursor:text;
}
.combo-input:focus{border-color:var(--brand);box-shadow:0 0 0 2px rgba(26,95,214,.12);outline:none}
.combo-list{
  /* 下拉打开时由 JS 挂到 document.body，用视口坐标固定定位：
     ① 脱离弹窗 .modal-body 的 overflow:auto 裁剪（避免大弹窗/表格内下拉被截断）；
     ② 不依赖弹窗 transform/filter 建立的包含块，定位稳定不偏移。 */
  position:fixed;top:0;left:0;z-index:1300;
  background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);
  max-height:264px;overflow:auto;padding:4px;
}
.combo-list[hidden]{display:none}
.combo-item{padding:6px 9px;border-radius:6px;cursor:pointer}
.combo-item:hover,.combo-item.on{background:var(--brand-2)}
.combo-new-item{padding:6px 9px;border-radius:6px;cursor:pointer;border-top:1px dashed var(--line);margin-top:3px;color:var(--brand);font-weight:600}
.combo-new-item:hover,.combo-new-item.on{background:var(--brand-2)}
.combo-text{font-size:12.5px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.combo-sub{font-size:11px;color:var(--text-3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.combo-empty{padding:10px;text-align:center;color:var(--text-3);font-size:12px}
.inline-input.num{text-align:right;font-variant-numeric:tabular-nums}

/* ---------- Filter bar ---------- */
.filter-bar{display:flex;gap:9px;align-items:flex-end;flex-wrap:wrap;padding:11px 14px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;box-shadow:var(--shadow)}
.filter-bar .fi{min-width:130px}
.filter-bar .grow{flex:1;min-width:170px}
.filter-bar .fi.kw-wide{flex:2 1 280px;min-width:240px}
.filter-bar .spacer{flex:1}

/* ---------- 分页栏 ---------- */
.pg-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:11px 14px;margin-top:12px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.pg-bar .pg-btn{min-width:84px;padding:6px 12px}
.pg-btn[disabled]{opacity:.45;cursor:not-allowed;background:var(--panel)}
.pg-info{font-size:13px;color:var(--text);white-space:nowrap}
.pg-info b{color:var(--brand)}
.pg-sep{flex:1}
.pg-size{height:32px;padding:0 8px;border:1px solid var(--line);border-radius:8px;background:var(--bg);
  color:var(--text);font-size:13px}
.pg-jump{width:64px;height:32px;padding:0 8px;border:1px solid var(--line);border-radius:8px;background:var(--bg);
  color:var(--text);font-size:13px}

/* ---------- Modal ---------- */
.modal-mask{position:fixed;inset:0;background:rgba(16,24,40,.42);display:none;align-items:center;
  justify-content:center;z-index:900;padding:20px;backdrop-filter:blur(1.5px)}
.modal-mask.show{display:flex}
.modal{background:var(--panel);border-radius:12px;box-shadow:0 20px 50px rgba(16,24,40,.24);
  width:760px;max-width:100%;max-height:92vh;display:flex;flex-direction:column;animation:pop .16s ease-out}
@keyframes pop{from{transform:translateY(10px) scale(.985);opacity:0}to{transform:none;opacity:1}}
.modal.wide{width:1120px}
.modal.xl{width:1320px;max-width:96vw}
.modal.narrow{width:470px}
.modal-head{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}
.modal-title{font-size:15px;font-weight:700}
.modal-body{padding:16px;overflow-y:auto;flex:1}
.modal-body::-webkit-scrollbar{width:8px}
.modal-body::-webkit-scrollbar-thumb{background:#ccd4e0;border-radius:4px}
.modal-foot{padding:11px 16px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:9px;background:var(--panel-2);border-radius:0 0 12px 12px}

/* ---------- Toast ---------- */
.toast-wrap{position:fixed;top:16px;right:16px;z-index:1000;display:flex;flex-direction:column;gap:8px}
.toast{background:#1f2937;color:#fff;padding:9px 15px;border-radius:8px;font-size:12.5px;
  box-shadow:0 8px 22px rgba(16,24,40,.25);animation:slideIn .2s;max-width:340px}
.toast.ok{background:#12734a}.toast.err{background:#c0392b}.toast.warn{background:#b8720a}
@keyframes slideIn{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}

/* ---------- Misc ---------- */
.sec-title{font-size:13px;font-weight:700;margin:16px 0 9px;padding-left:8px;border-left:3px solid var(--brand);line-height:1.3}
.sec-title:first-child{margin-top:0}
.import-mapped{background:rgba(191,230,205,.18)}
.row-actions{display:flex;gap:3px;white-space:nowrap}
.progress{height:5px;background:var(--line-2);border-radius:3px;overflow:hidden;min-width:56px}
.progress span{display:block;height:100%;background:var(--brand);border-radius:3px;transition:.25s}

/* ---------- 行内链接（如「跟踪」） ---------- */
.lk{color:var(--brand,#2563eb);cursor:pointer;text-decoration:none;font-weight:600;font-size:12px;margin-left:2px}
.lk:hover{text-decoration:underline}

/* ---------- 物流跟踪时间线 ---------- */
.form-grid.c4{grid-template-columns:repeat(4,1fr)}
.track-wrap{position:relative;padding:4px 0}
.track-list{list-style:none;margin:0;padding:0 0 0 18px;position:relative}
.track-list:before{content:'';position:absolute;left:6px;top:6px;bottom:10px;width:2px;background:#e2e8f0}
.track-item{position:relative;padding:4px 0 16px 8px}
.track-item:before{content:'';position:absolute;left:-16px;top:8px;width:11px;height:11px;border-radius:50%;
  background:#2563eb;border:2px solid #fff;box-shadow:0 0 0 2px #2563eb}
.track-item.last:before{background:#16a34a;box-shadow:0 0 0 2px #16a34a}
.track-item .tk-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.track-item .tk-kind{font-size:12px;font-weight:700;color:#2563eb;background:#eff6ff;border-radius:5px;padding:1px 7px}
.track-item .tk-addr{font-weight:600;font-size:13.5px;color:#0f172a}
.track-item .tk-date{font-size:12px;color:#64748b}
.track-item .tk-acts{margin-left:auto;display:flex;gap:6px}
.track-item .tk-note{font-size:12.5px;color:#475569;margin-top:3px;line-height:1.55;white-space:pre-wrap}
.track-empty{padding:18px;text-align:center;color:#94a3b8;font-size:13px;border:1px dashed #e2e8f0;border-radius:8px;margin-left:-18px}
.progress.done span{background:var(--ok)}
.progress.warn span{background:var(--warn)}
.pct{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:5px}
.flex{display:flex;align-items:center;gap:7px}
.muted{color:var(--text-3)}
.small{font-size:11.5px}
.b{font-weight:700}
.red{color:var(--up)}.green{color:var(--ok)}.orange{color:var(--warn)}.blue{color:var(--brand)}
.nowrap{white-space:nowrap}
.divider{height:1px;background:var(--line-2);margin:14px 0}
.tabs{display:flex;gap:3px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.tab{padding:8px 15px;cursor:pointer;font-size:13px;color:var(--text-2);border-bottom:2px solid transparent;
  margin-bottom:-1px;white-space:nowrap;font-weight:500}
.tab:hover{color:var(--text)}
.tab.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:700}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
@media(max-width:1100px){.grid2,.grid3{grid-template-columns:1fr}}
.info-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:9px 16px}
.info-item{display:flex;gap:7px;font-size:12.5px;align-items:baseline}
.info-item .k{color:var(--text-3);flex:0 0 auto;min-width:62px}
.info-item .v{font-weight:600;word-break:break-all}
.bar-chart{display:flex;flex-direction:column;gap:9px}
.bar-row{display:grid;grid-template-columns:96px 1fr 92px;gap:9px;align-items:center;font-size:12px}
.bar-track{height:17px;background:var(--line-2);border-radius:4px;overflow:hidden}
.bar-fill{height:100%;background:linear-gradient(90deg,#2f7cf6,#1a5fd6);border-radius:4px;transition:.3s}
.bar-fill.g{background:linear-gradient(90deg,#2eb872,#178a4c)}
.bar-fill.o{background:linear-gradient(90deg,#f0a92c,#c77700)}
.bar-val{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.alert{padding:9px 13px;border-radius:8px;font-size:12.5px;margin-bottom:12px;border:1px solid}
.alert-info{background:var(--info-bg);border-color:#cadcf9;color:#14418f}
.alert-warn{background:var(--warn-bg);border-color:#f6dfb4;color:#8a5400}
.alert-green{background:var(--ok-bg);border-color:#bfe6cd;color:#1e7a43}
.chk input[type=checkbox],.chk-all input[type=checkbox]{width:15px;height:15px;accent-color:var(--brand);cursor:pointer;flex:none}
.print-only{display:none}
/* 销售合同专用表格：避免通用 .tbl 的 sticky 表头造成重影/重复 */
.sc-tbl{table-layout:fixed}
.sc-tbl thead th{position:static!important;background:#f2f5f9;color:#1f2937;font-weight:600;border-bottom:2px solid #c9d2de}
.sc-tbl tbody tr{break-inside:avoid}
.doc{background:#fff;padding:26px 30px}
.doc h2{text-align:center;font-size:19px;margin-bottom:6px;letter-spacing:1px}
.doc .doc-sub{text-align:center;color:var(--text-3);font-size:12px;margin-bottom:16px}
.doc table{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:14px}
.doc table th,.doc table td{border:1px solid #c9d2de;padding:6px 9px}
.doc table th{background:#f2f5f9;font-weight:600;text-align:left}
.doc .sign{display:flex;justify-content:space-between;margin-top:30px;font-size:12.5px;color:var(--text-2)}
/* 付款申请单打印模板 */
.doc-head{text-align:center;margin-bottom:8px}
.doc-co{font-size:13px;color:var(--text-2);letter-spacing:2px}
.doc-title{font-size:23px;font-weight:700;letter-spacing:6px;margin:2px 0}
.doc-en{font-size:11px;color:var(--text-3);letter-spacing:3px}
.doc-meta{display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-2);border:1px solid #c9d2de;border-bottom:none;padding:7px 10px;background:#f7f9fc}
.pa-doc th,.pa-doc td{padding:7px 10px}
.pa-sec{font-weight:700;font-size:13px;margin:14px 0 6px}
.pa-sign-tbl th{width:18%}
.pa-sign{margin-top:26px}
.pa-sign-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 30px;font-size:13px;color:var(--text-2)}
.pa-sign-grid .sign-name{display:inline-block;min-width:90px;border-bottom:1px solid #1f2937;padding:0 4px 2px;font-weight:600;color:var(--text);margin-left:2px}
.pa-sign-date{margin-top:14px;font-size:13px;color:var(--text-2)}
.pa-paid-box{line-height:1.8}
.pa-foot{margin-top:24px;text-align:center;font-size:11.5px;color:var(--text-3);border-top:1px dashed #d4dbe4;padding-top:8px}
@media print{
  .sidebar,.topbar,.modal-foot,.no-print{display:none!important}
  .content{padding:0;overflow:visible}
  .modal-mask{position:static;background:none;padding:0;display:block}
  .modal{box-shadow:none;width:100%;max-height:none}
  body{background:#fff}
}

/* ---------- 当前操作员芯片 ---------- */
.op-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;background:#eef2f7;border:1px solid #dde4ec;color:#3a4658;line-height:1;white-space:nowrap}
.op-chip.ok{background:#e8f6ee;border-color:#bfe6cd;color:#1e7a43}
.op-chip.off{background:#fdecec;border-color:#f3c9c9;color:#b23b3b}
.op-chip .op-dot{width:7px;height:7px;border-radius:50%;background:#1e7a43}
.op-chip.off .op-dot{background:#b23b3b}
.op-chip .op-role{color:#8a93a3;font-weight:400}
.op-chip .op-caret{font-size:9px;color:#8a93a3;margin-left:1px}
.op-chip:hover{border-color:#b9c6d6;background:#e7edf5}
.op-switch{display:flex;flex-direction:column;gap:8px;max-height:60vh;overflow:auto}
.op-row{border:1px solid var(--line);border-radius:8px;padding:9px 12px;cursor:pointer;transition:background .15s,border-color .15s}
.op-row:hover{background:var(--brand-2);border-color:var(--brand)}
.op-row.cur{background:#e8f7ee;border-color:#bfe6cd}
.op-row-main{font-size:14px;margin-bottom:2px}
.op-tip{margin-top:4px;line-height:1.6}

/* ---------- 用户与权限 ---------- */
.up-cur{display:flex;align-items:center;gap:18px;background:#f6f9fc;border:1px solid var(--line);border-radius:10px;padding:12px 16px;margin-bottom:16px;flex-wrap:wrap}
.up-cur-label{font-size:12px;color:var(--text-2);margin-bottom:5px}
.up-cur-l{min-width:240px}
.up-cur-r{font-size:13px;color:var(--text-2)}
.up-sec{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:16px}
.up-sec-head{display:flex;justify-content:space-between;align-items:center;font-weight:600;margin-bottom:10px}
.up-tip{font-size:12px;color:var(--text-2);background:#fffaf0;border:1px dashed #f0d9a8;border-radius:8px;padding:10px 12px;line-height:1.7}
.bk-meta{font-size:13px;color:var(--text);background:#f6f8fb;border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:10px}
.bk-meta code,.up-sec code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;background:#eef1f6;padding:1px 5px;border-radius:4px;color:#334155}
.cur-flag{color:var(--primary);font-weight:600;font-size:12px}
.chk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px;margin:4px 0}
.chk{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text)}
.form .chk-grid{margin-bottom:6px}
.form{display:flex;flex-direction:column;gap:14px}
.form-field{display:flex;flex-direction:column;gap:6px}
.lb{font-size:13px;font-weight:600;color:var(--text-2)}
.ipt{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;background:#fff;color:var(--text);box-sizing:border-box;font-family:inherit}
.ipt::placeholder{color:#aab2c0}
.ipt:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px var(--brand-2)}
select.ipt{cursor:pointer}
textarea.ipt{resize:vertical;min-height:60px}
.chk-all{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--brand-2);border:1px solid #cfe0f7;border-radius:8px;font-size:13.5px;cursor:pointer;margin-bottom:10px}
.chk-all b{color:var(--brand)}
.center{text-align:center}
@media(max-width:720px){.up-cur{flex-direction:column;align-items:flex-start}}

/* ==================== 数据范围提示条 / 权限细化 ==================== */
.scope-banner{display:block;padding:9px 14px;margin:0 0 12px;border-radius:8px;font-size:13px;line-height:1.7;
  background:linear-gradient(90deg,#fff8e6,#fffdf7);border:1px solid #f0d8a0;color:#7a5a12}
.scope-banner b{color:#a06a00}
.scope-banner .red{color:var(--danger)}
.sub-title{font-size:13px;font-weight:600;color:var(--brand);padding:8px 0 2px;margin-top:4px;
  border-top:1px dashed var(--line)}
/* ---- 费用分摊到多销售订单 ---- */
.alloc-mode{display:flex;gap:16px;flex-wrap:wrap;margin:2px 0 8px;font-size:13px}
.alloc-mode label{display:inline-flex;align-items:center;gap:5px;cursor:pointer;color:var(--text)}
.alloc-wrap{border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-bottom:8px;background:#fbfcfe}
.alloc-head,.alloc-row{display:grid;grid-template-columns:minmax(200px,1.4fr) minmax(150px,1fr) minmax(140px,0.9fr) minmax(160px,1.1fr) 48px;
  gap:8px;align-items:center;padding:8px 10px}
.alloc-head{background:var(--panel-2);font-size:12px;font-weight:600;color:var(--muted);
  border-bottom:1px solid var(--line)}
.alloc-row{border-bottom:1px solid var(--line);font-size:13px}
.alloc-row:last-child{border-bottom:none}
.alloc-info{font-size:12px;color:var(--muted);line-height:1.5}
.alloc-info b{color:var(--text);font-weight:600}
.alloc-amt{display:flex;align-items:center;gap:6px;white-space:nowrap}
.alloc-amt label{font-size:11.5px;color:var(--muted)}
.alloc-amt input{width:100%;max-width:150px}
.alloc-del{white-space:nowrap;background:none;border:none;padding:0}
.alloc-summary{background:#f4f8ff;border-top:2px solid var(--line);font-weight:600}
.alloc-summary .alloc-info b{color:var(--brand)}
.alloc-summary #exAllocSum{font-weight:700;color:var(--text)}
.alloc-empty{padding:14px 10px;color:var(--muted);font-size:13px;text-align:center}
.perm-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 14px;margin-top:6px}
.perm-item{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1px solid var(--line);
  border-radius:8px;background:#fbfcfe;cursor:pointer;font-size:13px}
.perm-item:hover{border-color:var(--brand);background:var(--brand-2)}
.perm-item input{margin-top:2px}
.perm-item .pn{font-weight:600;color:var(--text)}
.perm-item .pd{display:block;font-size:11.5px;color:var(--muted);line-height:1.5;margin-top:2px}
.tool-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px 12px;margin-top:6px}
.tool-grid label{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text);cursor:pointer}
.scope-box{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:#fbfcfe;margin-top:6px}
.scope-box .sd{font-size:12px;color:var(--muted);line-height:1.6;margin-top:4px}
@media(max-width:900px){.perm-grid{grid-template-columns:1fr}.tool-grid{grid-template-columns:repeat(2,1fr)}}

/* ==================== 角色 / 用户权限弹窗补充 ==================== */
.form-row2{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
.form-field .fd{font-size:11.5px;color:var(--muted);line-height:1.6;margin-top:4px}
.form-field .req{color:var(--danger);margin-left:2px}
.tool-wrap{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;margin-top:6px}
.tool-mod{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fbfcfe}
.tool-mod.off{opacity:.42;background:#f4f5f7}
.tool-mod-h{font-size:12.5px;font-weight:600;color:var(--brand);display:flex;justify-content:space-between;
  align-items:center;margin-bottom:4px}
.tool-mod .tool-grid{grid-template-columns:1fr 1fr}
@media(max-width:900px){.form-row2{grid-template-columns:1fr}.tool-wrap{grid-template-columns:1fr}}

/* ---------- 审批流程 ---------- */
.ap-steps{display:flex;flex-direction:column;gap:10px;margin-bottom:10px}
.ap-step{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fbfcfe}
.ap-step-h{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:6px}
.ap-step-body{display:flex;gap:22px;flex-wrap:wrap}
.ap-col{display:flex;flex-direction:column;gap:3px}
.ap-col-t{font-size:11.5px;color:var(--text-3);margin-bottom:2px}
.ap-col .flex{font-weight:400;font-size:12.5px}
.ap-flow{display:flex;flex-direction:column;gap:2px;margin-bottom:6px}
.ap-node{display:flex;align-items:flex-start;gap:10px;padding:7px 2px;border-left:2px solid var(--line);margin-left:9px;padding-left:14px;position:relative}
.ap-node:last-child{border-left-color:transparent}
.ap-ico{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;
  background:var(--line-2);color:var(--text-3);position:absolute;left:-13px;top:6px;border:2px solid var(--panel)}
.ap-node.done .ap-ico{background:var(--ok);color:#fff;border-color:#fff}
.ap-node.rej .ap-ico{background:var(--err);color:#fff;border-color:#fff}
.ap-node.cur .ap-ico{background:var(--warn);color:#fff;border-color:#fff;box-shadow:0 0 0 3px var(--warn-bg)}
.ap-name{font-weight:600}
.ap-meta{font-size:11.5px;color:var(--text-3)}
.ap-act{display:flex;gap:8px;align-items:center;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}

/* ---------- 标题管理弹窗 ---------- */
.modal.titles{width:780px;max-width:94vw}
.tm-hint{font-size:12.5px;color:var(--text-3);line-height:1.7;background:var(--info-bg);
  border:1px solid var(--line);border-radius:8px;padding:9px 12px;margin-bottom:12px}
.tm-hint b{color:var(--brand)}
.tm-wrap{max-height:54vh;overflow-y:auto;padding-right:4px}
.tm-wrap::-webkit-scrollbar{width:8px}
.tm-wrap::-webkit-scrollbar-thumb{background:#ccd4e0;border-radius:4px}
.tm-mod{background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:10px}
.tm-row{display:flex;align-items:center;gap:9px}
.tm-row-mod{margin-bottom:2px}
.tm-ico{font-size:17px;width:26px;text-align:center;flex:none}
.tm-ico.sm{font-size:14px;width:22px;opacity:.85}
.tm-tag{flex:none;font-size:11px;font-weight:700;color:#fff;background:var(--text-3);border-radius:5px;padding:2px 7px;min-width:46px;text-align:center}
.tm-row-mod .tm-tag{background:var(--brand)}
.tm-tools{margin:8px 0 0 35px;display:flex;flex-direction:column;gap:7px}
.tm-input{flex:1;min-width:0;padding:7px 10px;border:1px solid var(--line);border-radius:7px;font-size:13px;
  background:var(--panel);color:var(--text);outline:none;transition:.12s}
.tm-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-bg)}
.tm-reset{flex:none;width:30px;height:30px;border:1px solid var(--line);border-radius:7px;background:var(--panel);
  color:var(--text-3);cursor:pointer;font-size:15px;transition:.12s}
.tm-reset:hover{color:var(--brand);border-color:var(--brand)}

/* ---------- 大模块标题外观设置弹窗 ---------- */
.ap-set{display:flex;flex-direction:column;gap:14px}
.ap-prev{display:flex;align-items:center;gap:13px;padding:16px 18px;border-radius:11px;box-shadow:0 4px 14px rgba(20,40,80,.12)}
.ap-prev-ico{font-size:26px;width:46px;height:46px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.22);border-radius:11px}
.ap-prev-name{font-size:25px;letter-spacing:.5px;line-height:1.15}
.ap-prev-desc{font-size:12px;opacity:.82;margin-top:3px}
.ap-sec{display:flex;flex-direction:column;gap:8px}
.ap-sec-t{font-size:12.5px;font-weight:700;color:var(--text-2)}
.ap-swatches{display:flex;flex-wrap:wrap;gap:9px}
.ap-sw{width:34px;height:34px;border-radius:8px;border:2px solid transparent;cursor:pointer;transition:.12s;box-shadow:0 1px 4px rgba(0,0,0,.12)}
.ap-sw:hover{transform:scale(1.08)}
.ap-sw.on{border-color:var(--text-1);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--brand)}
.ap-wbtn{padding:8px 14px;border:1px solid var(--line);border-radius:8px;background:var(--panel);cursor:pointer;
  font-size:13px;color:var(--text-1);transition:.12s}
.ap-wbtn:hover{border-color:var(--brand)}
.ap-wbtn.on{background:var(--brand);color:#fff;border-color:var(--brand)}
.ap-tip{font-size:12px;color:var(--text-3);line-height:1.7;background:var(--info-bg);border:1px solid var(--line);
  border-radius:8px;padding:8px 11px}

/* ---------- 首页审批待办醒目提醒 ---------- */
.ap-notice{display:flex;align-items:center;gap:14px;margin-bottom:16px;padding:14px 18px;border-radius:12px;
  background:linear-gradient(92deg,#fff4e5 0%,#ffe9e9 100%);border:1px solid #f3c0a8;
  box-shadow:0 4px 14px rgba(229,115,75,.14)}
.ap-notice-ico{font-size:26px;flex:0 0 26px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}
.ap-notice-body{flex:1;min-width:0}
.ap-notice-title{font-size:13px;font-weight:800;color:#c2410c;letter-spacing:.5px}
.ap-notice-text{font-size:13.5px;color:#7c3a06;margin-top:3px;line-height:1.6}
.ap-notice-text b{color:#b91c1c;font-size:15px;font-weight:800;padding:0 2px}
.ap-notice .btn-light{background:#fff;color:#b91c1c;border:1px solid #f0a98c;font-weight:700;white-space:nowrap}
.ap-notice .btn-light:hover{background:#b91c1c;color:#fff;border-color:#b91c1c}

/* ---------- 协作版：登录弹窗 / 只读提示 ---------- */
.readonly-banner{background:#eef2ff;color:#3730a3;border-bottom:1px solid #c7d2fe;font-size:13px;padding:8px 18px;line-height:1.5}
/* 上线安全提醒横幅（默认弱密码等） */
.top-banner{padding:9px 18px;font-size:13px;line-height:1.6;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.top-banner.pwd-warn{background:#fef2f2;color:#b91c1c;border-bottom:1px solid #fecaca}
.pwd-warn .pw-ico{font-size:15px}
.pwd-warn .pw-text{flex:1;min-width:240px}
.pwd-warn .pw-btn{background:#dc2626;color:#fff;border:none;border-radius:6px;padding:5px 12px;cursor:pointer;font-size:12.5px}
.pwd-warn .pw-btn:hover{background:#b91c1c}
.pwd-warn .pw-close{background:transparent;border:none;color:#b91c1c;cursor:pointer;font-size:16px;line-height:1;padding:0 4px}
.login-wrap{display:flex;justify-content:center;padding:8px 0 4px}
.login-card{width:100%;max-width:320px;background:#fff;border-radius:14px;padding:26px 24px 20px;box-shadow:0 8px 30px rgba(30,58,138,.12)}
.login-logo{font-size:19px;font-weight:900;color:#1e3a8a;text-align:center;letter-spacing:.5px}
.login-sub{font-size:13px;color:#64748b;text-align:center;margin:4px 0 18px}
.login-fi{margin-bottom:14px}
.login-fi label{display:block;font-size:12.5px;color:#475569;margin-bottom:5px;font-weight:600}
.login-fi .ipt{width:100%;padding:10px 12px;font-size:14px;border:1px solid #d8dee9;border-radius:9px;box-sizing:border-box}
.login-fi .ipt:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.15)}
.login-btn{width:100%;padding:11px;font-size:15px;font-weight:700;margin-top:4px}
.login-err{color:#dc2626;font-size:12.5px;min-height:16px;margin:2px 0 8px;text-align:center}
/* 实时同步状态徽标 */
.sync-st{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;white-space:nowrap}
.sync-st.on{background:#e7f7ed;color:#16a34a;border:1px solid #b7e4c7}
.sync-st.warn{background:#fff4e5;color:#d97706;border:1px solid #fcd9a4}
.sync-st.off{background:#f1f5f9;color:#64748b;border:1px solid #e2e8f0}
.login-tip{font-size:11.5px;color:#94a3b8;text-align:center;margin-top:12px;line-height:1.5}

/* ---------- 订单利润测算表（打印 / 导出 PDF） ---------- */
.pc-print{background:#fff;border:1px solid var(--line);border-radius:10px;padding:20px 26px;max-width:840px;margin-top:14px}
.pc-print .pc-title{text-align:center;margin:0 0 16px;font-size:20px;color:#1e293b}
.pc-print .pc-sign{margin-top:24px;color:#333;font-size:14px}
.pc-print .pc-actions{margin-top:14px}
.pc-print-tbl th{width:18%;background:#f7f9fc;color:#374151;font-weight:600}
.pc-print-tbl td{width:32%;vertical-align:middle}
.pc-print-tbl .pc-hl-label{background:#e8f0fe!important;color:#1a5fd6!important;font-weight:700}
.pc-print-tbl .pc-hl-num{font-weight:800;font-size:15px;color:#1f2937}
.pc-profit-row{background:#f4f8ff}
.pc-profit-row .pc-hl-label{background:#d6e4ff!important;color:#174bb4!important}
.pc-profit{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.pc-profit-formula{font-size:12px;color:#5b6676;font-weight:400;white-space:nowrap}
.pc-profit-value{font-size:22px;font-weight:800;line-height:1.2;white-space:nowrap}
/* 打印时仅输出利润测算表/销售合同本身，隐藏页面其余部分 */
@media print{
  body *{visibility:hidden !important}
  .pc-print, .pc-print *,
  .contract, .contract *{visibility:visible !important}
  .pc-print, .contract{position:absolute;left:0;top:0;width:100%;border:none;max-width:none;padding:0;margin:0;background:#fff}
  .pc-print-presale .pc-title{font-size:18px;margin-bottom:10px}
  .pc-print-presale.pc-print{padding:8px 12px}
  .pc-print-presale .pc-print-tbl th,.pc-print-presale .pc-print-tbl td{font-size:12.5px;padding:5px 8px}
  .pc-print-presale .pc-profit-value{font-size:18px;white-space:nowrap}
  .pc-print-presale .pc-sign{margin-top:16px;font-size:12.5px}
  @page { size: A4; margin: 10mm; }
}
