/* 羊兄团队 · 综合管理系统 样式表 —— 全本地，无任何外部依赖 */
:root{
  --navy:#7d2b22; --navy-d:#5a1f18; --navy-l:#a25744;
  --gold:#c9a227; --gold-l:#f4e0ab;
  --crimson:#772b25; --green:#2e7d5b; --amber:#c8890b; --red:#c0392b;
  --ink:#22262b; --ink2:#5a6470; --ink3:#8b96a3;
  --line:#e4e8ed; --line2:#eef1f5;
  --bg:#f4f6f9; --card:#ffffff; --soft:#f8fafc;
  --shadow:0 1px 3px rgba(20,40,70,.07),0 1px 2px rgba(20,40,70,.04);
  --shadow-lg:0 8px 28px rgba(20,40,70,.14);
  --r:10px;
  --sidebar:216px;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,sans-serif;
  background:var(--bg); color:var(--ink); font-size:14px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:14px;color:inherit}
button{cursor:pointer;border:none;background:none}
a{color:var(--navy);text-decoration:none}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c8d2dd;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#a9b7c6}
::-webkit-scrollbar-track{background:transparent}

/* ============================ 登录页 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:#12070a;padding:0;position:relative;overflow:hidden}

/* ---------- Step45b：全新登录屏（品牌居中 · 藏文 · 烫金 · 备案页脚） ---------- */
.lt-stage{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;
  /* Step45b：整体提亮一档——顶部暖光 + 酒红过渡，不再发黑显沉重 */
  background:radial-gradient(120% 95% at 50% 0%,#a34a37 0%,#7d2b22 42%,#471a15 100%);overflow:auto}
.lt-veil{position:absolute;inset:0;background:#12070a;pointer-events:none}
/* Step45b：max-width + 子项限宽，防止长口号把容器撑破导致 LOGO 不居中 */
.lt-inner{position:relative;z-index:2;width:100%;max-width:460px;display:flex;flex-direction:column;
  align-items:center;text-align:center;padding:18px 0 8px}
.lt-brand{width:100%;display:flex;flex-direction:column;align-items:center}
/* LOGO：金色描边圆环 + 柔光，绝对居中 */
.lt-logo-ring{width:104px;height:104px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.96);padding:12px;margin:0 auto 18px;flex-shrink:0;
  box-shadow:0 0 0 1px rgba(201,162,39,.55),0 0 0 9px rgba(201,162,39,.12),0 14px 40px rgba(0,0,0,.35)}
.lt-logo-ring img{width:100%;height:100%;object-fit:contain}
/* 集团名：烫金（金色渐变字 + 微光），高雅不刺眼 */
.lt-name{font-size:34px;line-height:1.25;font-weight:700;letter-spacing:6px;margin-left:3px;
  background:linear-gradient(180deg,#f9ecc0 0%,#e8c96a 42%,#c9a227 78%,#a8842a 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 8px rgba(0,0,0,.4))}
/* 藏文集团名：介于中文与英文之间，字号与英文一致 */
.lt-tib{margin-top:8px;font-size:13px;line-height:1.9;letter-spacing:1px;color:rgba(244,224,171,.85)}
.lt-en{margin-top:6px;font-size:11px;letter-spacing:4.5px;color:rgba(255,255,255,.6);margin-left:4.5px}
.lt-rule{display:flex;align-items:center;justify-content:center;gap:10px;margin:16px 0 0;width:100%}
.lt-rule i{height:1px;width:46px;background:linear-gradient(90deg,transparent,rgba(201,162,39,.85))}
.lt-rule i:last-child{background:linear-gradient(90deg,rgba(201,162,39,.85),transparent)}
/* 副标题：白色（Step45b 去掉烫金） */
.lt-rule span{font-size:13.5px;letter-spacing:3px;color:rgba(255,255,255,.92);font-weight:500}
/* 口号：中文一行、藏文一行；允许自然换行且不撑破容器（Step45b 修复跳行错乱） */
.lt-slogan{margin-top:14px;font-size:14px;line-height:1.9;letter-spacing:1.5px;color:rgba(255,255,255,.85);
  padding:0 10px;max-width:100%;overflow-wrap:anywhere;word-break:break-word}
.lt-slogan-tib{margin-top:6px;font-size:13px;line-height:2;letter-spacing:.5px;color:rgba(255,255,255,.68);
  padding:0 10px;max-width:100%;overflow-wrap:anywhere;word-break:break-word}
/* 登录卡片：毛玻璃 */
.lt-card{margin-top:26px;width:100%;background:rgba(255,255,255,.94);border:1px solid rgba(255,255,255,.6);
  border-radius:14px;padding:26px 26px 24px;box-shadow:0 18px 50px rgba(0,0,0,.35);backdrop-filter:blur(6px)}
.lt-card .btn-block{min-height:46px;font-size:15px;letter-spacing:4px;font-weight:600}
/* 页脚备案 */
.lt-foot{margin-top:20px;display:flex;flex-direction:column;align-items:center;gap:6px;
  font-size:12px;color:rgba(255,255,255,.62);line-height:1.7}
.lt-foot a{color:rgba(255,255,255,.72);display:inline-flex;align-items:center;gap:4px}
.lt-foot a:hover{color:var(--gold-l)}
.lt-cr{color:rgba(255,255,255,.5)}
/* Step46b 开发者署名：在备案信息下方，比备案再淡一档 */
.lt-dev{margin-top:2px;font-size:11.5px;color:rgba(255,255,255,.42);letter-spacing:.3px}
@media(max-width:520px){
  .lt-name{font-size:27px;letter-spacing:4px}
  .lt-logo-ring{width:84px;height:84px;padding:10px}
  .lt-card{padding:22px 18px}
  .lt-slogan{font-size:13px}
}.login-box{background:#fff;border-radius:14px;padding:38px 34px;width:100%;max-width:392px;box-shadow:var(--shadow-lg);position:relative;z-index:2}
.login-box h1{font-size:22px;color:var(--navy);font-weight:600;letter-spacing:.5px}
.login-box .sub{font-size:12.5px;color:var(--ink3);margin-top:6px;line-height:1.7}
.login-box .brand{display:flex;align-items:center;gap:11px;margin-bottom:20px}
.login-seal,.login-logo{width:46px;height:46px;border-radius:10px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:600;object-fit:contain;background:#fff;box-shadow:0 2px 8px rgba(26,58,92,.08);padding:3px}
.field{margin-bottom:14px}
.field label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:5px;font-weight:500}
.field input,.field select,.field textarea{
  width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:8px;font-size:16px;
  background:#fff;transition:border-color .15s,box-shadow .15s;outline:none}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:11px 18px;border-radius:8px;font-size:14px;font-weight:500;min-height:44px;transition:.15s;border:1px solid transparent}
.btn-primary{background:var(--navy);color:#fff}
.btn-primary:hover{background:var(--navy-d)}
.btn-gold{background:var(--gold);color:#3a2c00}
.btn-gold:hover{background:#b89322}
.btn-outline{background:#fff;color:var(--navy);border-color:var(--line)}
.btn-outline:hover{border-color:var(--navy);background:var(--soft)}
.btn-danger{background:#fff;color:var(--red);border-color:#f0c9c5}
.btn-danger:hover{background:#fdf2f1}
.btn-warning{background:#fff;color:#b56a08;border-color:#f0d9a5}
.btn-warning:hover{background:#fdf6e8}
.btn-success{background:var(--green);color:#fff}
.btn-success:hover{background:#256a4b}
.btn-sm{padding:6px 11px;min-height:32px;font-size:13px;border-radius:7px}
.btn-block{width:100%}
.login-hint{margin-top:16px;padding:11px 13px;background:var(--soft);border:1px solid var(--line);border-radius:8px;font-size:12px;color:var(--ink2);line-height:1.8}
.err{background:#fdf2f1;border:1px solid #f0c9c5;color:var(--crimson);padding:9px 12px;border-radius:7px;font-size:13px;margin-bottom:13px;display:none}

/* ============================ 布局 */
#app{display:none;min-height:100vh}
#app.ready{display:block}
.sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--sidebar);background:var(--navy-d);color:#e8d9d3;
  display:flex;flex-direction:column;z-index:60;transition:transform .25s}
.sb-brand{padding:17px 16px;border-bottom:1px solid rgba(255,255,255,.09);display:flex;align-items:center;gap:10px}
.sb-seal{width:38px;height:38px;border-radius:9px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;object-fit:contain;background:#fff;padding:3px;box-shadow:0 1px 5px rgba(0,0,0,.22);border:1px solid rgba(255,255,255,.18)}
.sb-brand .t{font-size:14.5px;color:#fff;font-weight:600;line-height:1.25}
.sb-brand .s{font-size:10.5px;color:#d8b3a6;letter-spacing:.6px}
.sb-nav{flex:1;overflow-y:auto;padding:9px 0}
.nav-group{padding:11px 16px 5px;font-size:10.5px;color:#c9a08c;letter-spacing:1.4px;font-weight:600}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 16px;font-size:13.5px;color:#e3cfc8;cursor:pointer;
  border-left:3px solid transparent;transition:.13s}
.nav-item:hover{background:rgba(255,255,255,.05);color:#fff}
.nav-item.active{background:rgba(201,162,39,.16);color:var(--gold-l);border-left-color:var(--gold);font-weight:500}
.nav-item .ic{width:17px;height:17px;flex-shrink:0;opacity:.9}
.nav-item .badge{margin-left:auto;background:rgba(255,255,255,.14);color:#f0e2dc;font-size:10.5px;
  padding:1px 6px;border-radius:9px;min-width:19px;text-align:center}
.nav-item.active .badge{background:rgba(201,162,39,.25);color:var(--gold-l)}
.sb-foot{padding:11px 16px;border-top:1px solid rgba(255,255,255,.09);font-size:11px;color:#7e9ab5}

.main{margin-left:var(--sidebar);min-height:100vh;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:50;background:#fff;border-bottom:1px solid var(--line);
  padding:0 20px;height:56px;display:flex;align-items:center;gap:12px}
.topbar h2{font-size:16px;font-weight:600;color:var(--navy);white-space:nowrap}
.tb-spacer{flex:1}
.tb-user{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink2);
  padding:5px 10px;border:1px solid var(--line);border-radius:20px;background:var(--soft)}
.avatar{width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;display:flex;
  align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.content{padding:18px 20px 40px;flex:1}

/* ============================ 通用组件 */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);margin-bottom:16px;min-width:0}
/* 关键：grid/flex 子项默认 min-width:auto，会被内部宽内容撑开导致移动端横向溢出 */
.grid2>*,.grid3>*,.grid4>*,.kpi-grid>*,.grid-2col>*{min-width:0}
.table-wrap{min-width:0}
.card-bd,.card-hd{min-width:0}
.card-hd{padding:13px 16px;border-bottom:1px solid var(--line2);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.card-hd h3{font-size:14.5px;color:var(--navy);font-weight:600}
.card-hd .sub{font-size:12px;color:var(--ink3)}
/* Step27 子区块标题（合同与应收全景里的「合同 / 应收」分段） */
.sub-hd{padding:14px 16px 6px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.sub-hd .sub-hd-title{font-size:13px;color:var(--ink2);font-weight:600;letter-spacing:.3px}
/* Step27 应收子表超期未收高亮（计划到账日 < 今天 且 未到「已收」状态） */
.tbl tr.row-overdue{background:rgba(239,68,68,.07)}
.tbl tr.row-overdue:hover{background:rgba(239,68,68,.13)}
.tbl tr.row-overdue td{box-shadow:inset 3px 0 0 var(--red,#e74c3c)}
.card-bd{padding:16px}
.card-bd.np{padding:0}
.spacer{flex:1}

.toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:12px 16px;border-bottom:1px solid var(--line2)}
.search{position:relative;flex:0 1 240px}
.search input{width:100%;padding:8px 12px 8px 32px;border:1px solid var(--line);border-radius:8px;font-size:16px;outline:none;min-height:38px}
.search input:focus{border-color:var(--navy)}
.search svg{position:absolute;left:9px;top:50%;transform:translateY(-50%);width:15px;height:15px;fill:var(--ink3)}
select.fsel,input.fin{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;min-height:38px;background:#fff;outline:none}
select.fsel:focus,input.fin:focus{border-color:var(--navy)}

.table-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{background:var(--soft);color:var(--ink2);font-weight:600;font-size:12.5px;text-align:left;
  padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0;z-index:2}
table.tbl td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:middle}
table.tbl tbody tr:hover{background:#fbfcfe}
table.tbl tbody tr:last-child td{border-bottom:none}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
td.money{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:500}
/* 数字表头必须右对齐：table.tbl th 的 text-align:left（更高优先级）会覆盖 th.num/th.money，
 * 导致「表头居左、数据居右」的错位。这里显式恢复右对齐。 */
table.tbl th.num,table.tbl th.money{text-align:right}
.row-act{display:flex;gap:5px;justify-content:flex-end}
/* ============================================================ 项目主档紧凑分组列表
 * 病灶：原 20 列横向 2595px。方案：table-layout:fixed + width:100% 强制撑满容器且不横向溢出；
 * 相关列合并（主体/交叉、合同/到账、固定成本、总成本/毛利），金额用「万」缩写，文本列允许换行。 */
table.tbl.tbl-proj{table-layout:fixed;width:100%;min-width:980px}.tbl-proj th,.tbl-proj td{white-space:normal;vertical-align:top;padding:9px 10px;line-height:1.5}
.tbl-proj td{padding-top:11px;padding-bottom:11px}
.tbl-proj th{white-space:normal}
/* 列宽分配（总额约 100%，具体由内容+换行消化） */
.pc-code{width:9%}
.pc-name{width:19%}
.pc-tag{width:10%}
.pc-subject{width:11%}
.pc-cust{width:13%}
.pc-money{width:11%}
.pc-people{width:12%}
.pc-act{width:8%;background:var(--soft)}
/* ============ v51：固定列宽表（合同管理 / 应收管理）============
 * 病灶：列多（10 列）+ 甲方单位名称很长（如「曲水净土产业投资开发有限公司」），
 *       自动列宽会把长单位名折成 3~4 行，行高被撑得很高、很难扫读。
 * 方案：schema 字段上的 w(px) → 由 app.js 生成 <colgroup>；table-layout:fixed 固定列宽；
 *       单元格单行 + 超长省略号；悬浮时由 title 显示全称（cellHtml 已给这两张表加上）。
 *       min-width 略大于常见笔记本宽度，窄屏由 .table-wrap 横向滚动。 */
table.tbl.tbl-cw{table-layout:fixed;width:100%;min-width:1300px}
table.tbl.tbl-cw th,table.tbl.tbl-cw td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
table.tbl.tbl-cw td.num{text-align:right}
table.tbl.tbl-cw td .ellip{max-width:none;overflow:visible;text-overflow:clip}
table.tbl.tbl-cw td .tag,table.tbl.tbl-cw td .co-chip{vertical-align:middle}
/* ============ v52：固定列宽 + 允许跳行（合同管理 / 应收管理）============
 * 用户要求：跟项目主档一致，文字多可以跳行，不强制单行省略号。
 * 保留 colgroup 固定列宽（列不再忽宽忽窄），但单元格 white-space:normal 可折行。
 * 数字/金额列仍保持 nowrap，避免金额被拆成两行。 */
table.tbl.tbl-cw2{table-layout:fixed;width:100%;min-width:1180px}
table.tbl.tbl-cw2 th,table.tbl.tbl-cw2 td{white-space:normal;overflow:visible;text-overflow:clip;
  vertical-align:top;line-height:1.5;word-break:break-word;overflow-wrap:anywhere}
table.tbl.tbl-cw2 th{vertical-align:middle}
table.tbl.tbl-cw2 td.num,table.tbl.tbl-cw2 td.money{white-space:nowrap}
table.tbl.tbl-cw2 td .tag,table.tbl.tbl-cw2 td .co-chip{vertical-align:middle}
/* v53：长文本（项目名称/甲方单位）必须显式放开 —— .ellip 是「行内元素」，
   它身上的 max-width / overflow:hidden 对行内元素一律无效（实测单元格 220px 却画出 337px，
   直接盖住右边的「项目所在地」「甲方单位」）。老表格靠 td 的 overflow:hidden 兜底，
   而 .tbl-cw2 为了允许换行把 td 改成了 overflow:visible → 两边都不裁 → 文字叠成一团。
   所以这里必须把内层 span 的 nowrap 改回 normal。 */
table.tbl.tbl-cw2 td .ellip{white-space:normal;max-width:none;overflow:visible;text-overflow:clip}
/* 名称：最多两行，超出省略 */
.tbl-proj .p-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  word-break:break-word;line-height:1.45;color:var(--ink)}
/* 复合单元格：多行小段 */
.ps-line{display:flex;align-items:center;gap:6px;margin:0 0 5px;white-space:nowrap;overflow:hidden;min-width:0}
.ps-line:last-child{margin-bottom:0}
.ps-line.ps-wrap{white-space:normal;word-break:break-word;line-height:1.45;overflow:visible}
.ps-neg{font-style:normal;font-size:10.5px;color:var(--ink3);flex-shrink:0;font-weight:600}
.ps-line .tag{line-height:1.3}
.ps-place{font-size:12px;color:var(--ink2)}
.ps-money{justify-content:flex-end;gap:5px;font-variant-numeric:tabular-nums}
.ps-money b{font-weight:700;font-size:12.5px;color:var(--ink)}
.ps-money b.m-in{color:var(--green)}
.ps-money b.m-out{color:var(--red)}
.ps-money b.muted{color:var(--ink3);font-weight:500}
.ps-money .ps-neg{min-width:26px}
/* 成员列表表（member-list / developer-list）：内嵌表单用小表，与主表视觉一致 */
table.data-table{width:100%;border-collapse:collapse;font-size:13px;border:1px solid var(--line);border-radius:8px;overflow:hidden}
table.data-table th{background:var(--soft);color:var(--ink2);font-weight:600;font-size:12.5px;text-align:left;
  padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
table.data-table td{padding:8px 10px;border-bottom:1px solid var(--line2);vertical-align:middle}
table.data-table tbody tr:hover{background:#fbfcfe}
table.data-table tbody tr:last-child td{border-bottom:none}
table.data-table select,table.data-table input[type="month"],table.data-table input[type="number"]{
  width:100%;min-width:96px;padding:7px 8px;border:1px solid var(--line);border-radius:8px;font-size:14px;
  background:#fff;outline:none;box-sizing:border-box}
table.data-table select:focus,table.data-table input:focus{border-color:var(--navy)}
table.data-table .ml-name{min-width:130px}
/* v63 行表格（row-table）：公司主体「业绩」等逐行录入的子表 */
table.data-table.rt-tbl input[type="text"],table.data-table.rt-tbl input[type="date"]{
  width:100%;min-width:96px;padding:7px 8px;border:1px solid var(--line);border-radius:8px;font-size:14px;
  background:#fff;outline:none;box-sizing:border-box}
table.data-table.rt-tbl td{padding:6px 8px}
.rt-empty{padding:10px 2px;font-size:13px;color:var(--ink3)}
/* v66：收款方收款信息（party-info）—— 按「收款方类型」换一套字段 */
.party-info-box{margin-top:2px}
.party-info-box .pi-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;
  background:var(--soft);border:1px solid var(--line);border-radius:9px;padding:12px 13px}
.party-info-box .pi-fg{display:flex;flex-direction:column}
.party-info-box .pi-fg label{font-size:12px;color:var(--ink2);margin-bottom:4px;font-weight:500}
.party-info-box .pi-fg label .req{color:var(--red);margin-left:2px}
.party-info-box .pi-fg input{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;
  font-size:14px;background:#fff;outline:none;box-sizing:border-box}
.party-info-box .pi-fg input:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.party-info-box .pi-empty{padding:11px 13px;font-size:12.5px;color:var(--ink3);
  background:var(--soft);border:1px dashed var(--line);border-radius:9px}
@media(max-width:760px){.party-info-box .pi-grid{grid-template-columns:1fr}}

/* v67：应收驾驶舱（应收管理页顶部）—— 先给三个最基本的数，再给四家主体各一份 */
.recv-board{margin:2px 0 14px}
.rb-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.rb-kpi{background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:14px 16px;
  border-left:3px solid var(--navy)}
.rb-kpi.ok{border-left-color:var(--green)}
.rb-kpi.warn{border-left-color:var(--red)}
.rb-kpi .l{font-size:12.5px;color:var(--ink2);font-weight:500}
.rb-kpi .v{font-size:26px;font-weight:500;color:var(--ink);margin:5px 0 3px;letter-spacing:-.4px}
.rb-kpi.ok .v{color:var(--green)}
.rb-kpi.warn .v{color:var(--red)}
.rb-kpi .d{font-size:12px;color:var(--ink3)}
.rb-bar{height:8px;background:var(--soft);border:1px solid var(--line);border-radius:6px;
  overflow:hidden;margin:10px 0 14px}
.rb-bar>i{display:block;height:100%;background:var(--green)}
/* v68：主体切换 tabs（点一下换一家看一套独立的数） */
.rb-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 14px}
.rb-tab{display:flex;flex-direction:column;gap:2px;align-items:flex-start;min-width:118px;
  padding:9px 13px;background:#fff;border:1px solid var(--line);border-radius:10px;cursor:pointer;
  font-family:inherit;text-align:left;transition:.15s}
.rb-tab:hover{border-color:var(--navy);background:var(--soft)}
.rb-tab.on{border-color:var(--navy);background:var(--navy);box-shadow:0 1px 4px rgba(26,58,92,.18)}
.rb-tab b{font-size:13.5px;font-weight:500;color:var(--ink)}
.rb-tab.on b{color:#fff}
.rb-tab span{font-size:11.5px;color:var(--ink3)}
.rb-tab span.w{color:var(--red);font-weight:500}
.rb-tab span.z{color:var(--green)}
.rb-tab.on span.w{color:#ffd7d7}
.rb-tab.on span.z{color:#c7edda}
/* v68：未回款构成分析（零回款 / 部分回款 / 多久没动静） */
.rb-split{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
.rb-split .sp{background:#fff;border:1px solid var(--line);border-radius:11px;padding:11px 13px;
  border-left:3px solid var(--navy)}
.rb-split .sp.forbid{border-left-color:var(--red)}
.rb-split .sp.part{border-left-color:var(--amber)}
.rb-split .sp.idle,.rb-split .sp.idle2{border-left-color:var(--ink3)}
.rb-split .sp .n{font-size:20px;font-weight:500;color:var(--ink);letter-spacing:-.3px}
.rb-split .sp .t{font-size:12.5px;color:var(--ink2);margin-top:2px}
.rb-split .sp .m{font-size:12px;color:var(--ink3);margin-top:3px}
.rb-split .sp.forbid .n{color:var(--red)}
.rb-split .sp.part .n{color:var(--amber)}
.rb-tbl tr.forbid td{background:#fff6f6}
.rb-tbl tr.warn td{background:#fffdf3}
.rb-pct{font-size:11.5px;color:var(--ink3);margin-left:6px}
.rb-note.ok-note{background:#eefaf3;border-color:#b6e3cc;color:var(--ink2)}
.rb-pend{border:1px solid var(--line);border-radius:11px;overflow:hidden;margin-bottom:10px}
.rb-pend .hd{padding:9px 12px;background:var(--soft);border-bottom:1px solid var(--line);
  font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px}
.rb-pend .hd .sub{font-weight:400;font-size:12px;color:var(--ink3);margin-left:auto}
/* ⚠️ 用独立类名，故意不带 .tbl —— 免得抢走老脚本 querySelector('table.tbl') 和通用表格样式 */
.rb-tbl{width:100%;border-collapse:collapse;margin:0;font-size:12.5px}
.rb-tbl th{background:var(--soft);color:var(--ink2);font-weight:500;text-align:left;
  padding:8px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.rb-tbl td{padding:8px 12px;border-bottom:1px solid var(--line2);vertical-align:middle}
.rb-tbl tbody tr:hover{background:#fbfcfe}
.rb-tbl tbody tr:last-child td{border-bottom:none}
.rb-tbl th.r,.rb-tbl td.r{text-align:right;font-variant-numeric:tabular-nums}
.rb-tbl td.r{text-align:right}
.rb-pend .more{padding:8px 12px;font-size:12px;color:var(--ink3);border-top:1px solid var(--line)}
/* v69：年份 × 公司 交叉总览表（行=主体、列=年份，格子=还差多少 + 回款率） */
/* ⚠️ 容器不用 .rb-pend（老脚本按 .rb-pend .hd 抓清单标题，共用会被抢走） */
.rb-mxbox{border:1px solid var(--line);border-radius:11px;overflow:hidden;margin-bottom:12px}
.rb-mxbox .hd{padding:9px 12px;background:var(--soft);border-bottom:1px solid var(--line);
  font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px}
.rb-mxbox .hd .sub{font-weight:400;font-size:12px;color:var(--ink3);margin-left:auto}
.rb-mx{width:100%;border-collapse:collapse;font-size:12.5px}
.rb-mx th,.rb-mx td{border:1px solid var(--line2);padding:7px 10px;text-align:right;
  vertical-align:middle;font-variant-numeric:tabular-nums}
.rb-mx thead th{background:var(--soft);color:var(--ink2);font-weight:500;white-space:nowrap}
.rb-mx thead th:first-child,.rb-mx tbody th,.rb-mx tfoot th{text-align:left}
.rb-mx tbody th{background:#fbfcfe;color:var(--ink);font-weight:500;white-space:nowrap}
.rb-mx tbody th:hover,.rb-mx thead th:hover{background:var(--soft);color:var(--navy)}
.rb-mx tbody th.on{background:var(--navy);color:#fff}
.rb-mx td.rowon{background:#f7f9fc}
.rb-mx td.colon{background:#eef4fa}
.rb-mx td.now{background:#dfeaf6;box-shadow:inset 0 0 0 1px var(--navy)}
.rb-mx thead th.now{background:var(--navy);color:#fff}
.rb-mx td b{font-weight:500;color:var(--red);font-size:13px}
.rb-mx td.zer b{color:var(--green)}
.rb-mx .sub2{display:block;font-size:11px;color:var(--ink3);font-weight:400}
.rb-mx tr.sum th,.rb-mx tr.sum td{background:#f6f8fa;font-weight:500}
.rb-mx tr.sum td b{color:var(--ink)}
.rb-mx tr.cash th,.rb-mx tr.cash td{background:#fbfcfe;color:var(--ink2)}
.rb-mx tr.cash td{color:var(--green);font-weight:500}
.rb-tabs.years{margin-bottom:8px}
.rb-tabs.years .rb-tab{min-width:96px;padding:7px 12px}
.rb-tabs.years .rb-tab b{font-size:12.5px}
@media(max-width:760px){.rb-mx{font-size:11.5px}.rb-mx th,.rb-mx td{padding:5px 6px}}
.rb-note{font-size:12px;color:var(--ink2);background:#fffbe9;border:1px solid #f0e2b6;
  border-radius:9px;padding:9px 12px;margin-bottom:8px;line-height:1.65}
.rb-note.muted{background:var(--soft);border-color:var(--line);color:var(--ink3)}
@media(max-width:1100px){.rb-kpis{grid-template-columns:repeat(2,1fr)}.rb-split{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.rb-kpis{grid-template-columns:1fr}.rb-split{grid-template-columns:1fr}.rb-tab{min-width:96px}}

.ml-seg-row td{background:#fbfcfd !important;border-top:1px dotted var(--line) !important}
.empty{padding:44px 20px;text-align:center;color:var(--ink3);font-size:13.5px}
.empty svg{width:44px;height:44px;fill:#d4dce5;margin-bottom:10px}

.tag{display:inline-block;padding:2px 8px;border-radius:5px;font-size:11.5px;font-weight:600;white-space:nowrap;line-height:1.6}
.t-red{background:#fdeceb;color:var(--red);border:1px solid #f3c9c5}
.t-amber{background:#fdf5e3;color:var(--amber);border:1px solid #eddcae}
.t-green{background:#eaf5f0;color:var(--green);border:1px solid #bfe0d1}
.t-navy{background:#eaf1f7;color:var(--navy);border:1px solid #c3d5e6}
.t-gray{background:#f0f2f5;color:#6b7480;border:1px solid #dfe4ea}
.t-gold{background:#fdf8e8;color:#8a6d1a;border:1px solid #eddfae}
/* v60：财务初审（审批链第一站）与「已退回修改」 */
.t-purple{background:#f2edfa;color:#5b3fa8;border:1px solid #ddd0f0}
.t-returned{background:#fdeee6;color:#b1541f;border:1px solid #f2cdb4}

.co-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:5px;font-size:11.5px;font-weight:600}
.co-1{background:#eaf1f7;color:#1a3a5c}
.co-2{background:#eaf5f0;color:#1f6b4f}
.co-3{background:#fdf0ec;color:#9c4526}
.co-4{background:#f2edfa;color:#5b3fa8}

.money-in{color:var(--green)}
.money-out{color:var(--red)}

/* ============================ 多选员工控件（multi-staff） */
.multi-staff-box{position:relative;width:100%}
.multi-staff-box .ms-chips{min-height:34px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fff;display:flex;flex-wrap:wrap;gap:4px;margin-bottom:4px}
.multi-staff-box .ms-chip{display:inline-flex;align-items:center;gap:3px;padding:3px 8px;background:#eaf1f7;color:var(--navy);border:1px solid #c3d5e6;border-radius:14px;font-size:12px;font-weight:600;line-height:1.4}
.multi-staff-box .ms-chip i{font-style:normal;color:#8aa0b5;font-weight:500;margin-left:1px}
.multi-staff-box .ms-chip b{margin-left:4px;cursor:pointer;color:#a0a8b0;font-weight:700;font-size:14px;line-height:1;padding:0 2px;border-radius:3px}
.multi-staff-box .ms-chip b:hover{color:var(--red);background:#fdeceb}
.multi-staff-box .ms-search{width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;background:#fff;outline:none;box-sizing:border-box}
.multi-staff-box .ms-search:focus{border-color:var(--navy)}
.multi-staff-box .ms-dropdown{position:absolute;left:0;right:0;top:100%;margin-top:2px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.08);max-height:220px;overflow-y:auto;z-index:50}
.multi-staff-box .ms-opt{padding:7px 10px;cursor:pointer;font-size:13px;color:var(--ink2);border-bottom:1px solid var(--line2)}
.multi-staff-box .ms-opt:last-child{border-bottom:none}
.multi-staff-box .ms-opt:hover{background:#f5f8fc;color:var(--navy)}
.multi-staff-box .ms-opt i{font-style:normal;color:#8aa0b5;margin-left:4px}
.multi-staff-box .ms-empty{padding:10px;font-size:12px;color:#8aa0b5;text-align:center}

/* ============================ 驾驶舱 */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:15px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--gold)}
.kpi.k-navy::before{background:var(--navy)} .kpi.k-red::before{background:var(--red)}
.kpi.k-green::before{background:var(--green)} .kpi.k-amber::before{background:var(--amber)}
.kpi .l{font-size:12px;color:var(--ink3);display:flex;align-items:center;gap:5px}
.kpi .v{font-size:23px;font-weight:700;color:var(--navy);margin:6px 0 3px;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.kpi .d{font-size:11.5px;color:var(--ink3);line-height:1.55}
.kpi .d b{color:var(--ink2);font-weight:600}

/* 足迹视图 - KPI 变种 */
.kpi.kpi-navy::before{background:var(--navy)} .kpi.kpi-navy .kpi-v{color:var(--navy)}
.kpi.kpi-gold::before{background:var(--gold)} .kpi.kpi-gold .kpi-v{color:var(--gold)}
.kpi.kpi-green::before{background:var(--green)} .kpi.kpi-green .kpi-v{color:var(--green)}
.kpi .kpi-v{font-size:23px;font-weight:700;margin:5px 0 4px;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.kpi .kpi-l{font-size:12px;color:var(--ink3);font-weight:500}
.kpi .kpi-s{font-size:11.5px;color:var(--ink3);line-height:1.55;margin-top:3px}

/* 资金预测等图表密集页：KPI 收紧一档，避免整屏文字压迫感 */
.kpi-grid.kpi-sm{gap:10px;margin-bottom:14px}
.kpi-grid.kpi-sm .kpi{padding:12px 14px}
.kpi-grid.kpi-sm .kpi .l{font-size:11.5px}
.kpi-grid.kpi-sm .kpi .v{font-size:18px;margin:4px 0 2px}
.kpi-grid.kpi-sm .kpi .d{font-size:11px}
/* 图表容器：限制最大宽度，防止 SVG 被过度拉伸放大 */
.fp-chart-wrap{max-width:1080px;margin:0 auto}
/* 资金预测图例：SVG 外 HTML 图例行，避免叠在柱顶数值上 */
.fp-legend{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center;justify-content:center;
  margin:0 0 2px;padding:0 0 8px;font-size:12px;color:var(--ink2)}
.fp-legend .lg-it{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.fp-legend .sw{display:inline-block;width:16px;height:10px;border-radius:2px;vertical-align:middle;flex-shrink:0}
.fp-legend .sw-bal{background:#7d2b22}
.fp-legend .sw-in{background:#2e7d5b}
.fp-legend .sw-out{background:#a8342a}
.fp-legend .sw-safe{background:none;border-top:2px dashed #c0392b;height:0}
/* 资金计划明细表：主要事项列允许换行、限宽，避免表头/数据行不对齐 */
table.tbl.tbl-cash th,table.tbl.tbl-cash td{vertical-align:middle}
table.tbl.tbl-cash .col-note{white-space:normal;word-break:break-word;max-width:280px;line-height:1.5}
table.tbl.tbl-cash .money{white-space:nowrap}
/* 贷款还款准备卡片：统一用 .big，便于整体调字号 */
.loan-prep .big{font-size:18px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.loan-prep .small.muted{font-size:11.5px}

/* 全局 loading 状态 */
.loading{display:flex;align-items:center;justify-content:center;gap:14px;min-height:280px;
  color:var(--ink3);background:var(--soft);border-radius:var(--r);border:1px dashed var(--line2);font-size:13.5px}
.spinner{width:28px;height:28px;border:3px solid var(--line2);border-top-color:var(--crimson);
  border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* 足迹视图 */
.grid-2col{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fp-card{overflow:hidden}
/* 地图区域：左右县区名列 + 中间缩小地图，四周留白有呼吸感 */
.fp-map{position:relative;padding:14px 10px 6px;min-width:0}
/* 三列：左右县区名列收窄，中间地图占最大比例；右侧加一点空隙避免贴边 */
.fp-map-layout{display:grid;grid-template-columns:minmax(92px,0.62fr) minmax(320px,3fr) minmax(92px,0.62fr);gap:8px;align-items:center;min-width:0}
.fp-map-col{max-height:640px;overflow:auto;padding:6px 4px;min-width:0}
.fp-map-col .fp-col-t{font-size:11px;color:var(--ink3);font-weight:600;margin:0 0 6px;padding:0 4px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fp-side-item{display:flex;align-items:center;gap:8px;padding:4px 7px;margin:1px 2px;border-radius:7px;font-size:12.5px;line-height:1.35;cursor:default;transition:background .15s,transform .15s;min-width:0}
.fp-side-item:hover{background:var(--soft)}
.fp-side-item.hl{background:#fdf5f3;box-shadow:0 0 0 1px var(--crimson) inset}
.fp-side-item .sq{width:11px;height:11px;border-radius:3px;flex-shrink:0;border:1px solid rgba(0,0,0,.08)}
.fp-side-item .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fp-side-item .ct{flex-shrink:0;font-size:11px;font-weight:700}
.fp-side-item.none .nm{color:var(--ink3)}
.fp-side-item.none .ct{color:var(--ink3);font-weight:500}
.fp-map-col .fp-side-item+.fp-side-item{margin-top:2px}
/* 中间地图缩小居中，四周留白 */
.fp-svgwrap{padding:6px 4px;min-width:0;position:relative;display:flex;justify-content:center}
.fp-svgwrap svg{max-height:600px;max-width:100%;display:block;width:100%;margin:0 auto;border-radius:12px}
.fp-svgwrap svg text{user-select:none;pointer-events:none}
.fp-svgwrap svg path{cursor:pointer;transition:opacity .15s,filter .15s,stroke-width .15s}
.fp-svgwrap svg path:hover{opacity:.86;filter:brightness(1.08)}
.fp-svgwrap svg path.fp-dim{opacity:.42;filter:saturate(.6)}
.fp-svgwrap svg path.fp-dim:hover{opacity:.7;filter:brightness(1.05) saturate(.8)}
/* 悬浮提示浮层 */
.fp-tip{position:absolute;z-index:30;pointer-events:none;background:rgba(255,255,255,.97);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(60,20,10,.16);padding:9px 12px;font-size:12px;color:var(--ink);min-width:150px;max-width:220px;line-height:1.5;opacity:0;transform:translateY(6px);transition:opacity .18s,transform .18s}
.fp-tip.show{opacity:1;transform:translateY(0)}
.fp-tip .t-t{font-weight:700;color:var(--navy);margin-bottom:4px}
.fp-tip .t-row{display:flex;justify-content:space-between;gap:10px}
.fp-tip .t-row b{font-weight:600}
.fp-tip .t-row .money-in{color:var(--green)}
.fp-tip .t-row .muted{color:var(--ink3)}

/* 切换条：地市选项 */
.fp-tabs{display:flex;gap:8px;flex-wrap:wrap;padding:6px 0 2px;margin-bottom:6px}
.fp-tab{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1px solid var(--line);background:#fff;border-radius:22px;cursor:pointer;font-size:13px;color:var(--ink);transition:all .18s;font-family:inherit;min-height:36px}
.fp-tab:hover{border-color:var(--crimson);color:var(--crimson);background:#fdf5f3}
.fp-tab.on{background:linear-gradient(135deg,var(--crimson),#8a3025);color:#fff;border-color:transparent;box-shadow:0 2px 8px rgba(168,52,42,.25)}
.fp-tab.on .fp-tab-n{background:rgba(255,255,255,.22);color:#fff}
.fp-tab-l{font-weight:600}
.fp-tab-n{display:inline-flex;min-width:22px;height:22px;align-items:center;justify-content:center;padding:0 7px;border-radius:11px;background:#f4ede5;color:#5e241c;font-size:12px;font-weight:700}
.fp-tab-n0{background:#ebe6df;color:#a39a90;font-weight:500}
.fp-tab.on .fp-tab-n0{background:rgba(255,255,255,.14);color:rgba(255,255,255,.65)}

/* 图例（横排一条，置于地图上方） */
.fp-legend{display:flex;align-items:center;justify-content:center;gap:6px;padding:4px 12px 12px;flex-wrap:wrap;min-width:0}
.fp-legend .fp-lg-sq{width:26px;height:14px;border-radius:3px;border:1px solid rgba(0,0,0,.06);display:inline-block;flex-shrink:0}
.fp-legend .fp-lg-arrow{color:var(--ink3);font-size:13px;margin:0 3px}
.fp-legend .fp-lg-end{margin-left:6px;color:var(--ink3);font-size:12px;font-weight:500;white-space:nowrap}
.fp-legend .fp-lg-end b{color:var(--ink);font-weight:700}
.fp-legend .fp-lg-t{font-size:11px;color:var(--ink2);white-space:nowrap}

/* 视图标题 */
.view-h{padding:2px 0 14px;min-width:0}
.view-h h2{font-size:19px;color:var(--navy);font-weight:700;letter-spacing:.3px}
.view-h .sub{font-size:12.5px;color:var(--ink3);margin-top:4px;line-height:1.6}

/* 全局年份切换器 */
.year-bar{display:flex;align-items:center;gap:6px;flex-shrink:0;position:relative}
.year-sel{appearance:none;-webkit-appearance:none;padding:7px 30px 7px 13px;border:1px solid var(--line);border-radius:22px;font-size:13px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z' fill='%235a6470'/%3E%3C/svg%3E") no-repeat right 10px center;font-family:inherit;color:var(--ink);cursor:pointer;min-height:36px;outline:none;font-weight:600}
.year-sel:focus{border-color:var(--navy)}
.year-sel.allyear{color:var(--ink3);font-weight:500}
.year-flag{font-size:11px;color:var(--ink3);white-space:nowrap}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.sec-title{font-size:14.5px;color:var(--navy);font-weight:600;margin:2px 0 11px;display:flex;align-items:center;gap:8px}
.sec-title .bar{width:3px;height:14px;background:var(--gold);border-radius:2px}

.warn-list{list-style:none;min-width:0}.warn-item{display:flex;align-items:flex-start;gap:9px;padding:10px 0;border-bottom:1px dashed var(--line2);font-size:13px;line-height:1.65;min-width:0}
.warn-item:last-child{border-bottom:none}
.dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:7px}
.dot.red{background:var(--red);box-shadow:0 0 0 3px rgba(192,57,43,.13)}
.dot.amber{background:var(--amber);box-shadow:0 0 0 3px rgba(200,137,11,.13)}
.dot.blue{background:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.12)}
.warn-item .wt{flex:1;min-width:0;overflow-wrap:anywhere;word-break:break-word}
.warn-item .wt b{color:var(--ink)}
.warn-item .wm{color:var(--red);font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums}

/* 进度条 */
.pbar{height:7px;background:var(--line2);border-radius:4px;overflow:hidden;min-width:70px}
.pbar i{display:block;height:100%;border-radius:4px;background:var(--navy);transition:width .3s}
.pbar i.over{background:var(--red)} .pbar i.warn{background:var(--amber)} .pbar i.ok{background:var(--green)}

/* ============================ 弹窗 */
.mask{position:fixed;inset:0;background:rgba(15,28,45,.5);z-index:200;display:none;align-items:flex-start;
  justify-content:center;padding:26px 16px;overflow-y:auto;backdrop-filter:blur(2px)}
.mask.show{display:flex}
.modal{background:#fff;border-radius:12px;width:100%;max-width:660px;box-shadow:var(--shadow-lg);margin:auto 0}
.modal-lg{max-width:920px}
.modal-xl{max-width:1080px}
@media(max-width:1080px){.modal-xl{max-width:100%}}
.modal-hd{padding:15px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;
  position:sticky;top:0;background:#fff;border-radius:12px 12px 0 0;z-index:3}
.modal-hd h3{font-size:15.5px;color:var(--navy);font-weight:600}
.modal-bd{padding:18px 20px;max-height:calc(100vh - 210px);overflow-y:auto}
.modal-ft{padding:13px 20px;border-top:1px solid var(--line);display:flex;gap:9px;justify-content:flex-end;
  position:sticky;bottom:0;background:#fff;border-radius:0 0 12px 12px}
.x-close{margin-left:auto;width:30px;height:30px;border-radius:7px;display:flex;align-items:center;
  justify-content:center;color:var(--ink3);font-size:19px;line-height:1}
.x-close:hover{background:var(--soft);color:var(--ink)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.fg{grid-column:span 1;margin-bottom:13px}
.fg.full{grid-column:span 2}
.fg label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:5px;font-weight:500}
.fg label .req{color:var(--red);margin-left:2px}
.fg input,.fg select,.fg textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:8px;
  font-size:16px;outline:none;background:#fff;min-height:40px}
.fg textarea{min-height:70px;resize:vertical;line-height:1.6}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.fg input[readonly],.fg select[disabled]{background:var(--soft);color:var(--ink2)}
.fg .hint{font-size:11.5px;color:var(--ink3);margin-top:4px;line-height:1.55}
.fg .calc{font-size:11.5px;color:var(--navy);margin-top:4px;background:var(--soft);padding:5px 8px;border-radius:6px}

/* ============================ 提示条 */
.toast{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:500;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast-item{background:var(--navy);color:#fff;padding:10px 18px;border-radius:8px;font-size:13.5px;
  box-shadow:var(--shadow-lg);animation:tin .22s ease}
.toast-item.ok{background:var(--green)} .toast-item.err{background:var(--red)} .toast-item.warn{background:var(--amber)}
@keyframes tin{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}

/* ============================ 移动端 */
.mb-brand{display:none}
.tabbar{display:none}
@media(max-width:860px){
  .sidebar{transform:translateX(-100%);width:262px}
  .sidebar.open{transform:none;box-shadow:var(--shadow-lg)}
  .main{margin-left:0}
  .content{padding:12px 12px calc(78px + env(safe-area-inset-bottom))}
  .topbar{padding:0 12px;height:52px;gap:8px}
  .topbar h2{font-size:14px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* 手机端隐藏顶栏页面标题：内容区已有大标题，避免重复占位挤压筛选器 */
  .topbar #view-title{display:none}
  .tb-user{padding:3px 9px;gap:6px;flex-shrink:0}
  #u-role{display:none}
  /* 手机端顶栏省空间：只留头像（姓氏），隐藏姓名文字；年份/退出按钮收窄，避免「退出」被切 */
  .tb-user>div:last-child{display:none}
  .tb-user{padding:2px 5px;gap:0}
  #co-bar{flex-shrink:0;min-width:0}
  #co-bar select{max-width:114px}
  #year-bar{flex-shrink:0}
  #year-bar .year-sel{max-width:74px;padding-left:6px;padding-right:20px;background-position:right 6px center}
  .topbar>.btn{flex-shrink:0;padding:6px 9px;font-size:12px}
  .mb-brand{display:flex;align-items:center;gap:8px}
  .mb-brand .ms{width:30px;height:30px;border-radius:7px;object-fit:contain;background:#fff;padding:2px}
  .grid2,.grid3{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .fg.full{grid-column:span 1}
  .kpi-grid{grid-template-columns:1fr 1fr;gap:9px}
  .kpi .v{font-size:19px}
  .card-bd{padding:12px}
  .modal{max-width:100%}
  .modal-bd{padding:14px;max-height:calc(100vh - 190px)}
  .search{flex:1 1 62%;min-width:130px}
  .toolbar{padding:10px 12px;gap:6px}
  /* 手机端：去掉弹性占位，筛选与「重置」按钮自动换行靠右，不再让「重置」独占一行 */
  .toolbar .spacer{display:none}
  .toolbar .fsel{flex:1 1 auto;min-width:0}
  .toolbar>button[data-act="reset-filter"]{margin-left:auto;flex-shrink:0}
  .tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);
    z-index:70;padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 10px rgba(20,40,70,.06)}
  .tabbar .tb{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px 7px;
    font-size:10.5px;color:var(--ink3);min-height:52px;justify-content:center}
  .tabbar .tb.active{color:var(--navy);font-weight:600}
  .tabbar .tb svg{width:20px;height:20px;fill:currentColor}
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  table.tbl{font-size:12.5px;min-width:640px}
  .grid-2col{grid-template-columns:1fr}
  table.tbl td,table.tbl th{padding:8px 9px}
  /* 窄屏：地图四周留白收窄，两侧标签列变窄但保留名称 */
  .fp-map-layout{grid-template-columns:minmax(76px,0.62fr) minmax(200px,2.6fr) minmax(76px,0.62fr);gap:4px}
  .fp-map{padding:10px 6px 4px}
  .fp-side-item{padding:4px 5px;font-size:11.5px}
  .fp-side-item .ct{font-size:10px}
  .fp-side-item .nm{white-space:nowrap}
  .fp-svgwrap svg{max-height:520px}
  .year-bar{gap:4px}
  .year-sel{padding:6px 26px 6px 10px;font-size:12px;min-height:32px;background-position:right 8px center}
  .year-flag{display:none}
}
@media(max-width:420px){
  .kpi-grid{grid-template-columns:1fr}
  .grid-2col{grid-template-columns:1fr}
  .fp-svgwrap svg{max-height:440px}
  .fp-tabs{gap:6px}
  .fp-tab{padding:7px 10px;font-size:12px;min-height:34px}
  .fp-tab-n{min-width:20px;height:20px;font-size:11px}
  /* 极窄屏：左右标签列仍保留，进一步紧凑 */
  .fp-map-layout{grid-template-columns:minmax(66px,0.6fr) minmax(170px,2.4fr) minmax(66px,0.6fr);gap:2px}
  .fp-side-item{padding:4px 4px;font-size:11px;gap:5px}
  .fp-side-item .sq{width:9px;height:9px}
  .fp-map-col .fp-col-t{font-size:10px}
  .fp-legend{gap:5px;padding:4px 8px 8px}
}
.hide{display:none!important}
.txt-r{text-align:right} .txt-c{text-align:center}
.muted{color:var(--ink3)}
.small{font-size:12px}
.nowrap{white-space:nowrap}
.ellip{max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 驾驶舱小卡片表格的项目名称：限宽换行，避免撑爆 630px 卡片 */
.dash-name{max-width:120px;overflow-wrap:anywhere;word-break:break-word;line-height:1.4}
.print-only{display:none}
@media print{
  .sidebar,.topbar,.tabbar,.toolbar,.row-act{display:none!important}
  .main{margin-left:0}
  .card{break-inside:avoid;box-shadow:none}
}
/* ===== 打印纸张适配（A4 竖/横 + 居中）===== */
.page{display:flex;justify-content:center;align-items:flex-start;padding:8mm}
.page.portrait .sheet{width:180mm;max-width:100%}
.page.landscape .sheet{width:273mm;max-width:100%}
.sheet{margin:0 auto}
@media print{.page{padding:0}.page .sheet{margin:0}}
/* ===== 打印按钮下拉菜单 ===== */
.print-menu{position:relative;display:inline-block}
.print-menu>button+span{position:absolute;top:calc(100% + 4px);right:0;display:none;z-index:20;background:#fff;
  border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);padding:5px 0;min-width:124px}
.print-menu:hover>button+span{display:block}
.print-menu>button+span a{display:block;padding:7px 14px;font-size:12.5px;color:var(--ink2);cursor:pointer;white-space:nowrap}
.print-menu>button+span a:hover{background:#f4f6fa;color:var(--navy)}

/* ============================================================ 项目所在地级联下拉 */
.place-cascader{display:flex;flex-direction:column;gap:8px;width:100%}
.place-cascader .pc-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.place-cascader .pc-l{font-size:12px;color:var(--ink2);min-width:36px;letter-spacing:.2px}
.place-cascader select,.place-cascader input[type="text"]{min-height:36px;font-size:14px}
.place-cascader .pc-in select,.place-cascader .pc-other input{flex:1;min-width:120px}
.place-cascader .pc-other .hint{width:100%;margin:2px 0 0 44px;font-size:11px;color:var(--ink3)}
@media(max-width:520px){
  .place-cascader .pc-row{flex-direction:column;align-items:stretch}
  .place-cascader .pc-l{min-width:0}
  .place-cascader .pc-other .hint{margin-left:0}
}

/* ============================================================ 员工申请 + 审批 */
.kpi-row{display:flex;flex-wrap:wrap;gap:10px;margin:8px 0 14px}
.kpi{flex:1;min-width:120px;background:var(--panel);border:1px solid var(--line2);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:2px}
.kpi-l{font-size:11.5px;color:var(--ink3);font-weight:500}
.kpi-v{font-size:18px;font-weight:700;color:var(--ink);letter-spacing:.5px}
.kpi-amber .kpi-v{color:#b56a08}
.kpi-green .kpi-v{color:#1d8b46}
.kpi-red .kpi-v{color:#c83232}
.kpi-navy .kpi-v{color:#20507e}
.kpi-gold .kpi-v{color:#a87a14}
.kpi-gray .kpi-v{color:#7e8a99}
/* 项目明细弹窗专用：网格布局 + 缩小字号 + 万的单位缩写，避免长金额撑爆/溢出卡片 */
.kpi-row.kpi-compact{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px}
.kpi-row.kpi-compact .kpi{min-width:0;padding:9px 11px}
.kpi-row.kpi-compact .kpi-l{font-size:11px;white-space:nowrap}
.kpi-row.kpi-compact .kpi-v{font-size:13.5px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ============================================================ 我的申请：财务/人事 双轨 Tab（Step29） */
.seg-tabs{display:inline-flex;gap:4px;background:var(--line2);border-radius:9px;padding:3px}
.seg-tab{border:none;background:transparent;color:var(--ink2);font-size:13px;font-weight:600;padding:6px 14px;border-radius:7px;cursor:pointer;transition:.15s}
.seg-tab:hover{color:var(--ink)}
.seg-tab.on{background:var(--panel);color:var(--navy);box-shadow:0 1px 3px rgba(0,0,0,.08)}

/* ============================================================ 新建申请：轨道选择弹窗（Step29） */
.track-picker{display:flex;flex-direction:column;gap:12px;padding:4px 0}
.track-card{display:flex;align-items:center;gap:14px;text-align:left;border:1px solid var(--line2);border-radius:12px;background:var(--panel);padding:16px 18px;cursor:pointer;transition:.15s;width:100%}
.track-card:hover{border-color:var(--navy);box-shadow:var(--shadow);transform:translateY(-1px)}
.track-ic{font-size:30px;line-height:1}
.track-t{font-size:15.5px;font-weight:700;color:var(--ink)}
.track-d{font-size:12.5px;color:var(--ink3);margin-top:3px}

.ap-bucket{margin:10px 0 16px;padding:12px 14px;border:1px solid var(--line2);border-radius:10px;background:var(--panel)}
.ap-bucket h4{margin:0 0 10px;font-size:14px;color:var(--ink);font-weight:600;display:flex;align-items:center;gap:8px}

/* 审批中心：财务/人事 分栏分隔线（Step29） */
.ap-divider{display:flex;align-items:center;gap:12px;margin:22px 0 4px}
.ap-divider::before,.ap-divider::after{content:"";flex:1;height:1px;background:var(--line2)}
.ap-divider span{font-size:13px;font-weight:700;color:var(--navy);white-space:nowrap}

.ap-step-row{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--ink3)}
.ap-step{width:18px;height:18px;border-radius:50%;background:var(--line2);color:var(--ink3);display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:600}
.ap-step.done{background:#1d8b46;color:#fff}
.ap-step.cur{background:#b56a08;color:#fff;box-shadow:0 0 0 2px #fef0d7}
.ap-step.failed{background:#c83232;color:#fff;padding:0 8px;border-radius:10px;width:auto}

.ap-timeline{padding:4px 0 0 4px}
.ap-tl-row{display:flex;gap:10px;padding:6px 0 6px 6px;position:relative}
.ap-tl-row:not(:last-child)::after{content:"";position:absolute;left:13px;top:22px;bottom:-4px;width:1px;background:var(--line2)}
.ap-tl-dot{width:10px;height:10px;border-radius:50%;background:#20507e;margin-top:6px;flex-shrink:0}
.ap-tl-body{flex:1;min-width:0}
.ap-tl-h{font-size:13px;color:var(--ink);display:flex;flex-wrap:wrap;gap:6px}
.ap-tl-rmk{margin-top:3px;font-size:12.5px;color:var(--ink2);background:#fbf7ee;padding:4px 8px;border-radius:6px;line-height:1.5}

.kv-wide{margin-top:10px}
.kv-wide>label{display:block;font-size:12px;color:var(--ink3);font-weight:500;margin-bottom:4px}
.kv-wide>div{font-size:13.5px;color:var(--ink);line-height:1.6}
.kv-v{font-size:13.5px;color:var(--ink)}

/* 图片附件 */
.img-list{display:flex;flex-direction:column;gap:8px}
.img-thumbs{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start}
.img-thumbs.readonly{gap:6px}
.img-thumb{position:relative;width:88px;height:88px;border-radius:8px;overflow:hidden;border:1px solid var(--line2);background:#fafaf7}
.img-thumb img{width:100%;height:100%;object-fit:cover;cursor:pointer}
.img-thumb button{position:absolute;top:2px;right:2px;width:22px;height:22px;border-radius:50%;border:none;background:rgba(0,0,0,.55);color:#fff;font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.img-thumb button:hover{background:rgba(200,50,50,.85)}
.img-cnt{display:inline-flex;align-items:center;font-size:12px;color:var(--ink3);padding:4px 8px;background:var(--panel2);border-radius:6px}
.img-add{display:flex;align-items:center;justify-content:center;padding:14px;border:1px dashed var(--line);border-radius:10px;color:var(--ink2);font-size:13px;cursor:pointer;transition:border-color .2s,color .2s}
.img-add:hover{border-color:var(--brand);color:var(--brand)}
.img-add input{display:none}
/* v59 凭证附件：PDF / Word / Excel 等非图片附件（与图片缩略图同排显示） */
.att-chip{position:relative;display:inline-flex;align-items:center;max-width:280px;border:1px solid var(--line2);border-radius:8px;background:#fafaf7;padding-right:26px}
.att-chip a{display:flex;align-items:center;gap:8px;padding:8px 10px;text-decoration:none;overflow:hidden}
.att-chip .att-ext{flex:none;display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:26px;padding:0 6px;border-radius:5px;background:var(--brand);color:#fff;font-size:11px;font-weight:600;letter-spacing:.5px}
.att-chip .att-name{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.att-chip .att-size{flex:none;font-size:11px;color:var(--ink3)}
.att-chip a:hover .att-name{text-decoration:underline}
.att-chip button{position:absolute;top:50%;right:4px;transform:translateY(-50%);width:20px;height:20px;border-radius:50%;border:none;background:rgba(0,0,0,.45);color:#fff;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.att-chip button:hover{background:rgba(200,50,50,.85)}

/* ============================ 费用清单明细编辑器（费用报销单 / 差旅费用报销单） */
.items-box{display:flex;flex-direction:column;gap:8px}
.items-tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:#fff}
.items-tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:900px}
.items-tbl th{background:var(--soft);color:var(--ink2);font-weight:500;font-size:12px;
  padding:8px 6px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
.items-tbl td{padding:4px 5px;border-bottom:1px solid var(--line2);vertical-align:middle}
.items-tbl tr:last-child td{border-bottom:none}
.items-tbl input,.items-tbl select{width:100%;padding:6px 7px;border:1px solid var(--line);
  border-radius:6px;font-size:13px;min-height:32px;background:#fff}
.items-tbl input:focus,.items-tbl select:focus{border-color:var(--navy);outline:none;
  box-shadow:0 0 0 2px rgba(125,43,34,.08)}
.items-tbl input.items-num{text-align:right;font-variant-numeric:tabular-nums}
.items-tbl select:disabled{background:#f2f4f7;color:#aab2bd;cursor:not-allowed}
/* 明细行未选「成本科目」：黄色软引导（可感知但不阻断保存），配色沿用全站 amber 警示色 */
.items-tbl select.subj-warn{border-color:#eddcae;background:#fdf5e3;color:var(--amber)}
.items-tbl select.subj-warn:focus{border-color:var(--amber);
  box-shadow:0 0 0 2px rgba(200,137,11,.12)}
.items-seq{display:block;text-align:center;color:var(--ink3);font-size:12.5px}
.items-calc{display:block;text-align:right;font-weight:500;color:var(--ink);padding-right:4px;
  font-variant-numeric:tabular-nums}
.btn-del-row{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);
  color:var(--ink3);font-size:15px;line-height:1;display:flex;align-items:center;
  justify-content:center;background:#fff;transition:.15s}
.btn-del-row:hover{border-color:var(--red);color:var(--red);background:#fdf2f1}
.items-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.items-hint{font-size:12px;color:var(--ink3)}

/* ============================ 审批进度条（总经理 → 董事长） */
.app-steps{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.app-step{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:99px;
  font-size:12px;background:var(--line2);color:var(--ink3);white-space:nowrap}
.app-step i{font-style:normal;font-size:11px;opacity:.85;margin-left:2px}
.app-step.active{background:var(--gold-l);color:#7a5c00;font-weight:500}
.app-step.done{background:#e3f2ea;color:var(--green)}
.app-step-arrow{color:var(--ink3);font-size:11px}

@media (max-width:768px){
  .items-tbl{min-width:820px}
  .items-tbl input,.items-tbl select{font-size:16px;min-height:38px}
}

/* ============================ Step18：科目管理 UI（一级折叠 + 二级缩进 + 上下滑动排序 + 启用停用） */
.subj-admin{padding:4px 0 24px}
.subj-toolbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;background:#fff;
  padding:14px 16px;border-radius:var(--r);border:1px solid var(--line);
  margin-bottom:14px;box-shadow:var(--shadow)}
.subj-summary{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.subj-tip{font-size:12.5px;color:var(--ink3);margin-left:4px;line-height:1.5}
.subj-btns{display:flex;gap:8px;margin-left:auto}

.subj-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r);margin-top:-1px;
  transition:.15s}
.subj-row:first-of-type{margin-top:8px}
.subj-row:hover{background:#fafbfc;border-color:#d6dce5}
.subj-cat{background:#f7f9fc;border-left:4px solid var(--navy);font-weight:600;color:var(--navy)}
.subj-cat .subj-name{color:var(--navy);font-size:15px}
.subj-leaf{padding-left:36px;background:#fff}
.subj-leaf .subj-name{color:var(--ink);font-weight:500}

.subj-left{display:flex;align-items:center;gap:12px;flex:1;min-width:0}
.subj-right{display:flex;align-items:center;gap:6px;flex-shrink:0}
.subj-tw{width:28px;height:28px;border-radius:7px;border:1px solid var(--line);
  background:#fff;color:var(--ink2);font-size:13px;display:flex;align-items:center;
  justify-content:center;transition:.12s;cursor:pointer;font-family:inherit}
.subj-tw:hover{border-color:var(--navy);color:var(--navy);background:#fff}
.subj-name{font-weight:600;font-size:14.5px}
.subj-indent{color:var(--ink3);font-family:Menlo,Consolas,monospace;font-size:13px}
.subj-meta{font-size:12px;color:var(--ink3);margin-left:8px;padding:2px 8px;background:var(--line2);border-radius:99px}

.subj-toggle{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink2);
  padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:pointer}
.subj-toggle input{accent-color:var(--green);cursor:pointer}

.subj-leaves{margin:0;padding:0;background:#fbfcfd;border:1px solid var(--line);
  border-top:none;border-radius:0 0 var(--r) var(--r);margin-top:-1px;overflow:hidden}
.subj-leaves .subj-row:first-of-type{border-radius:0}
.subj-empty{padding:14px 18px;color:var(--ink3);font-size:13px;text-align:center}

/* 停用灰显：data-disabled 标记 */
.subj-row[data-disabled]{opacity:.55;background:#f8f9fa}
.subj-row[data-disabled] .subj-name{text-decoration:line-through;color:var(--ink3)}

/* 科目真删除按钮：红色描边，仅 boss 可见（受 perms.subjects.delete 控制） */
.subj-del{color:var(--red,#c0392b);border-color:var(--red,#c0392b);background:#fff}
.subj-del:hover{background:var(--red,#c0392b);color:#fff;border-color:var(--red,#c0392b)}

/* 嵌入式 pill */
.pill{display:inline-flex;align-items:center;padding:3px 10px;border-radius:99px;
  font-size:12px;font-weight:500;line-height:1.4}
.pill.p-blue{background:#e8eef7;color:#1e4976}
.pill.p-green{background:#e0f0e7;color:var(--green)}
.pill.p-gray{background:#eef0f3;color:var(--ink3)}
.pill.p-red{background:#fdf1ef;color:var(--red)}
.pill.p-amber{background:#fcf3e3;color:#a86e08}
.pill.pill-inline{display:inline-block;margin-left:6px;vertical-align:middle;font-size:11px}

/* 响应式 */
@media (max-width:768px){
  .subj-row{flex-direction:column;align-items:flex-start;gap:10px}
  .subj-right{margin-left:0;flex-wrap:wrap}
  .subj-leaf{padding-left:18px}
  .subj-toolbar{flex-direction:column;align-items:flex-start}
  .subj-btns{margin-left:0}
}

/* ============================================================ 工资单明细（salary-items） */
.salary-items-tbl-wrap{overflow-x:auto;max-width:100%}
.salary-items-tbl-wrap .items-tbl{min-width:1200px}
.salary-items-tbl-wrap .items-tbl th{font-size:11px;padding:6px 4px}
.salary-items-tbl-wrap .items-tbl td{padding:4px 2px}
.salary-items-tbl-wrap .items-tbl input[type=number],
.salary-items-tbl-wrap .items-tbl input[type=text],
.salary-items-tbl-wrap .items-tbl select{font-size:12px;padding:3px 4px;min-width:0}
.salary-items-tbl-wrap .items-tbl .items-calc{display:block;text-align:right;font-weight:600;color:var(--ink1);padding:0 6px}
.bd-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 12px;padding:8px 0}
.bd-cell{display:flex;flex-direction:column;font-size:12px;color:var(--ink2)}
.bd-cell input{margin-top:3px;padding:4px 6px;border:1px solid var(--bd);border-radius:4px;font-size:13px;text-align:right}

/* ============================================================ 公司主体行内展开（Step42） */
.tbl-company .co-row:hover{background:#f8fafc}
.co-detail-cell{background:#f8fafc;padding:0!important;border-top:0}
.co-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px 18px;padding:16px 20px}
.co-detail-group{background:#fff;border:1px solid var(--line2);border-radius:8px;padding:12px 14px}
.co-detail-hd{font-size:13px;font-weight:600;color:var(--navy);margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--line2);display:flex;align-items:center;gap:4px}
.co-detail-fields{display:flex;flex-direction:column;gap:7px}
.co-field{display:flex;align-items:baseline;gap:10px;font-size:12.5px;line-height:1.55}
.co-field-label{color:var(--ink3);min-width:130px;flex-shrink:0;font-size:12px}
.co-field-value{color:var(--ink);flex:1;word-break:break-all}
.co-field-value.mono{font-family:'SF Mono','Menlo','Consolas',monospace;font-size:12.5px;letter-spacing:.2px}
.co-field-block{flex-direction:column;align-items:stretch;gap:4px}
.co-field-block .co-field-label{color:var(--ink3);font-size:12px;min-width:0}
.co-field-block .co-field-value{font-size:13px;line-height:1.6}
.btn-copy{padding:2px 9px;font-size:11px;border:1px solid var(--line2);border-radius:4px;background:#fff;color:var(--ink2);cursor:pointer;flex-shrink:0;transition:all .15s;display:inline-flex;align-items:center;gap:2px}
.btn-copy:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.btn-copy:active{transform:scale(0.96)}

/* 移动端：公司主体表格 → 卡片（≤768px）。用 table.tbl.tbl-company 提升优先级，覆盖 L475 的 table.tbl{min-width:640px} */
@media(max-width:768px){
  table.tbl.tbl-company{min-width:0;width:100%;border-collapse:separate}
  table.tbl.tbl-company thead{display:none}
  table.tbl.tbl-company tbody{display:block}
  table.tbl.tbl-company tr.co-row{
    display:block;background:#fff;border:1px solid var(--line);border-radius:10px;
    padding:11px 13px;margin-bottom:10px;box-shadow:var(--shadow)}
  table.tbl.tbl-company tr.co-row:hover{background:#fff}
  table.tbl.tbl-company tr.co-row td{
    display:flex;align-items:baseline;gap:10px;width:auto;padding:4px 0;
    border-bottom:none;text-align:left;vertical-align:baseline}
  table.tbl.tbl-company tr.co-row td::before{
    content:attr(data-label);flex:0 0 74px;font-size:12px;color:var(--ink3);font-weight:500}
  table.tbl.tbl-company tr.co-row td:first-child{
    display:block;padding:0 0 8px;margin-bottom:6px;border-bottom:1px solid var(--line2)}
  table.tbl.tbl-company tr.co-row td:first-child::before{display:none}
  table.tbl.tbl-company tr.co-row td:last-child{
    display:block;padding:8px 0 0;margin-top:4px;border-top:1px solid var(--line2)}
  table.tbl.tbl-company tr.co-row td:last-child::before{display:none}
  table.tbl.tbl-company tr.co-row td .row-act{justify-content:flex-start;flex-wrap:wrap;gap:6px}
  table.tbl.tbl-company tr.co-detail-row{display:block;border:none}
  table.tbl.tbl-company tr.co-detail-row td.co-detail-cell{display:block;width:auto;padding:0!important}
  table.tbl.tbl-company .co-detail-grid{grid-template-columns:1fr;gap:10px;padding:10px 2px}
  table.tbl.tbl-company .co-detail-group{padding:10px 12px}
  table.tbl.tbl-company .co-field{flex-wrap:wrap;gap:4px 8px}
  table.tbl.tbl-company .co-field-label{min-width:78px;font-size:11.5px}
}

/* 移动端：视图头部按钮不换行（如「编辑组织架构」），空间不足时整块折到下一行 */
@media(max-width:768px){
  .view-header{flex-wrap:wrap;gap:10px 12px}
  .view-header>div:last-child{flex-shrink:0;display:flex;gap:8px}
  .view-header .btn{white-space:nowrap}
}

/* ============================================================ 调薪三级审批（Step43） */
.raise-compare{display:flex;align-items:center;gap:16px;flex-wrap:wrap;background:#f8fafc;border:1px solid var(--line2);border-radius:8px;padding:10px 14px}
.rc-item{display:flex;flex-direction:column;gap:2px}
.rc-lab{font-size:11px;color:var(--ink3)}
.rc-val{font-size:15px;font-weight:600;color:var(--ink)}
.rc-val.up{color:#c0392b}
.rc-val.down{color:#1D9E75}
.rc-arrow{color:var(--ink3);font-size:15px}
.ev-field{margin-bottom:10px}
.ev-field label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:4px}
.ev-field label i{color:#e24b4a;font-style:normal;margin-left:2px}
.ev-field textarea,.ev-field input{width:100%;border:1px solid var(--line2);border-radius:6px;padding:7px 9px;font-size:13px;font-family:inherit;color:var(--ink);background:#fff;box-sizing:border-box}
.ev-field textarea:focus,.ev-field input:focus{outline:none;border-color:var(--navy)}
.ra-block{margin-top:8px;padding:8px 10px;background:#fff;border:1px solid var(--line2);border-radius:6px;font-size:12.5px;line-height:1.6}
.ra-block b{display:block;margin-bottom:3px;color:var(--navy);font-weight:600}

/* ============================ Step45 登录界面可视化编辑器（仅董事长） */
.lt-editor{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:16px;align-items:start}
.lt-left{display:flex;flex-direction:column;gap:14px;min-width:0}
.lt-f{margin-bottom:14px}
.lt-f:last-child{margin-bottom:0}
.lt-f label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:5px;font-weight:500}
.lt-f input[type=text],.lt-f textarea{
  width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:8px;font-size:14px;
  background:#fff;outline:none;box-sizing:border-box;font-family:inherit;color:var(--ink);resize:vertical}
.lt-f input[type=text]:focus,.lt-f textarea:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.lt-f input[type=range]{width:100%;accent-color:var(--navy)}
.lt-h{margin-top:5px;font-size:12px;color:var(--ink3);line-height:1.6}
.lt-imgrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lt-thumb{width:96px;height:64px;border:1px dashed var(--line);border-radius:8px;overflow:hidden;
  display:flex;align-items:center;justify-content:center;background:var(--soft);flex-shrink:0}
.lt-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.lt-thumb span{font-size:11px;color:var(--ink3);padding:0 4px;text-align:center;line-height:1.3}
.lt-actions{display:flex;gap:10px;flex-wrap:wrap;padding-top:2px}
.lt-right{position:sticky;top:12px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;box-shadow:var(--shadow)}
.lt-right-hd{padding:11px 14px;border-bottom:1px solid var(--line);font-size:13px;font-weight:600;color:var(--ink);
  background:var(--soft)}
.lt-preview{position:relative;height:560px;overflow:hidden;background:#12070a}
@media(max-width:1100px){
  .lt-editor{grid-template-columns:1fr}
  .lt-right{position:static}
  .lt-preview{height:480px}
}

/* ============================ Step46 个人信息页 .pf-* + 证件照控件 .photo-box */
.pf-wrap{max-width:1180px;margin:0 auto;padding:4px 2px 30px}
.pf-head{margin-bottom:16px}
.pf-title{font-size:19px;font-weight:600;color:var(--ink)}
.pf-sub{margin-top:4px;font-size:12.5px;color:var(--ink3);line-height:1.7}
.pf-grid{display:grid;grid-template-columns:280px 1fr;gap:16px;align-items:start}
.pf-left{display:flex;flex-direction:column;gap:12px;position:sticky;top:12px}
.pf-right{display:flex;flex-direction:column;gap:12px;min-width:0}
.pf-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden}
.pf-card-hd{padding:10px 14px;border-bottom:1px solid var(--line2);background:var(--soft);
  font-size:13px;font-weight:600;color:var(--ink)}
.pf-card-bd{padding:14px}
.pf-tip-card .pf-card-bd{padding-top:10px}
.pf-tip{font-size:12px;color:var(--ink2);line-height:1.8}
.pf-kv{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.pf-kv:last-child{border-bottom:none}
.pf-kv span{color:var(--ink3);flex-shrink:0}
.pf-kv b{font-weight:600;color:var(--ink);text-align:right;word-break:break-all}
.pf-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.pf-f{margin-bottom:13px;min-width:0}
.pf-f.full{grid-column:span 2}
.pf-f label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:5px;font-weight:500}
.pf-in{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:8px;font-size:14px;
  background:#fff;outline:none;box-sizing:border-box;font-family:inherit;color:var(--ink);min-height:38px}
textarea.pf-in{min-height:64px;resize:vertical;line-height:1.6}
.pf-in:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.pf-hint{margin-top:5px;font-size:11.5px;color:var(--ink3);line-height:1.6}
.pf-ro{min-height:38px;display:flex;align-items:center;padding:8px 11px;background:var(--soft);
  border:1px solid var(--line2);border-radius:8px;font-size:14px;color:var(--ink)}
.pf-photo{display:flex;flex-direction:column;align-items:center;gap:8px}
.pf-photo-prev{border:1px dashed var(--line);border-radius:8px;overflow:hidden;background:var(--soft);
  display:flex;align-items:center;justify-content:center}
.pf-photo-prev img{width:100%;height:100%;object-fit:cover;display:block}
.pf-photo-prev .ph{font-size:11.5px;color:var(--ink3);text-align:center;line-height:1.5}
.pf-photo-ops{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.pf-photo .pf-hint{text-align:center;max-width:180px}
.pf-idcards{display:flex;gap:18px;flex-wrap:wrap;justify-content:flex-start;
  margin-top:6px;padding-top:14px;border-top:1px dashed var(--line2)}
.pf-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:2px 0 0}
.pf-saved{font-size:12px;color:var(--green)}
/* 表单里的证件照控件（员工档案编辑弹窗） */
.photo-box{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.photo-prev{border:1px dashed var(--line);border-radius:8px;overflow:hidden;background:var(--soft);
  display:flex;align-items:center;justify-content:center}
.photo-prev img{width:100%;height:100%;object-fit:cover;display:block}
.photo-prev .ph{font-size:11.5px;color:var(--ink3);text-align:center;line-height:1.5}
.photo-ops{display:flex;gap:8px;flex-wrap:wrap}
/* 列表小头像 */
.cell-avatar{width:28px;height:36px;object-fit:cover;border-radius:3px;border:1px solid var(--line);display:block}
@media(max-width:1100px){
  .pf-grid{grid-template-columns:1fr}
  .pf-left{position:static}
  .pf-fields{grid-template-columns:1fr}
  .pf-f.full{grid-column:span 1}
}

/* ============================ Step47 界面设置（导航可视化编辑）.ns-* */
.ns-wrap{max-width:1180px;margin:0 auto;padding:4px 2px 30px}
.ns-list{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}
.ns-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:12px 14px}
.ns-foot-card{margin-bottom:12px}
.ns-grow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ns-tag{flex-shrink:0;font-size:11px;font-weight:600;color:var(--navy);background:rgba(125,43,34,.08);
  border:1px solid rgba(125,43,34,.18);border-radius:6px;padding:2px 8px}
.ns-gname{width:200px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:13.5px;outline:none;background:#fff}
.ns-gname:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.ns-orig{font-size:11.5px;color:var(--ink3)}
.ns-spacer{flex:1}
.ns-btn{width:26px;height:26px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink2);
  font-size:13px;line-height:1;cursor:pointer;flex-shrink:0}
.ns-btn:hover{border-color:var(--navy);color:var(--navy)}
.ns-row{display:flex;align-items:center;gap:8px;padding:5px 0 5px 8px;border-top:1px dashed var(--line2)}
.ns-grip{color:var(--ink3);font-size:11px;cursor:grab;flex-shrink:0}
.ns-ilabel{flex:0 0 220px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;outline:none;background:#fff}
.ns-ilabel:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(26,58,92,.09)}
.ns-hide-lb{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;color:var(--ink2);cursor:pointer;white-space:nowrap}
.ns-hide-lb input{accent-color:var(--red)}
@media(max-width:760px){
  .ns-ilabel{flex:1 1 auto}
  .ns-orig{display:none}
}

/* ============================================================ Step38 消息通知中心（顶栏铃铛） */
.tb-bell{position:relative;flex-shrink:0}
.tb-bell-btn{position:relative;width:36px;height:36px;border:1px solid var(--line);border-radius:50%;
  background:var(--soft);display:flex;align-items:center;justify-content:center;cursor:pointer;
  padding:0;transition:.13s}
.tb-bell-btn:hover{background:#eef2f8;border-color:var(--navy)}
.tb-bell-btn:active{transform:scale(.96)}
.bell-icon{font-size:17px;line-height:1;filter:saturate(.95)}
.bell-badge{position:absolute;top:-3px;right:-3px;min-width:17px;height:17px;padding:0 4px;
  background:var(--red,#c0392b);color:#fff;font-size:10.5px;font-weight:600;border-radius:9px;
  display:flex;align-items:center;justify-content:center;line-height:1;
  box-shadow:0 0 0 2px var(--card,#fff);box-sizing:border-box}
.bell-badge[hidden]{display:none!important}
/* 下拉面板 */
.bell-panel{position:absolute;top:calc(100% + 8px);right:-10px;width:360px;max-width:calc(100vw - 24px);
  background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 28px rgba(20,40,70,.18);
  z-index:80;overflow:hidden;animation:bellSlide .18s ease-out}
.bell-panel[hidden]{display:none!important}
@keyframes bellSlide{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.bell-head{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;
  border-bottom:1px solid var(--line2);background:var(--soft)}
.bell-title{font-size:13.5px;font-weight:600;color:var(--navy)}
.bell-head a{font-size:12px;color:var(--ink2);text-decoration:none;padding:3px 6px;border-radius:5px}
.bell-head a:hover{background:rgba(125,43,34,.08);color:var(--navy)}
.bell-list{max-height:420px;overflow-y:auto}
.bell-empty{padding:36px 16px;text-align:center;font-size:12.5px;color:var(--ink3)}
.bell-item{display:flex;align-items:flex-start;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line2);
  cursor:pointer;transition:.12s;text-align:left;background:transparent;border-left:0;border-right:0;border-top:0;width:100%}
.bell-item:last-child{border-bottom:0}
.bell-item:hover{background:#fbfcfe}
.bell-item.unread{background:#fff8e6}
.bell-item.unread:hover{background:#fff3d6}
.bell-dot{width:8px;height:8px;border-radius:50%;background:var(--ink3);margin-top:6px;flex-shrink:0;opacity:.4}
.bell-item.unread .bell-dot{background:var(--amber,#c8890b);opacity:1;box-shadow:0 0 0 3px rgba(200,137,11,.18)}
.bell-body{flex:1;min-width:0}
.bell-row1{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:3px}
.bell-type{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:9px;letter-spacing:.3px;flex-shrink:0}
.bell-time{font-size:11px;color:var(--ink3);flex-shrink:0;font-variant-numeric:tabular-nums}
/* 6 种通知类型配色 */
.bell-type.t-pending{background:rgba(200,137,11,.12);color:var(--amber,#c8890b)}
.bell-type.t-approved-step{background:rgba(46,125,91,.12);color:var(--green,#2e7d5b)}
.bell-type.t-approved-final{background:rgba(125,43,34,.12);color:var(--navy,#7d2b22)}
.bell-type.t-rejected{background:rgba(192,57,43,.12);color:var(--red,#c0392b)}
.bell-type.t-paid{background:rgba(26,58,92,.12);color:var(--navy,#1a3a5c)}
.bell-type.t-withdrawn{background:rgba(120,120,120,.12);color:#666}
.bell-title2{font-size:13px;font-weight:600;color:var(--ink);line-height:1.4;margin-bottom:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bell-desc{font-size:12px;color:var(--ink3);line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bell-foot{padding:9px 14px;border-top:1px solid var(--line2);text-align:center;background:var(--soft)}
.bell-foot a{font-size:12.5px;color:var(--navy);text-decoration:none;font-weight:500}
.bell-foot a:hover{text-decoration:underline}
.bell-foot a.disabled{color:var(--ink3);cursor:not-allowed;pointer-events:none}

/* 通知中心独立页（messages view） */
.msg-wrap{max-width:1180px;margin:0 auto;padding:4px 2px 30px}
.msg-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);padding:0 4px;margin-bottom:14px;flex-wrap:wrap}
.msg-tab{padding:9px 16px;font-size:13px;color:var(--ink2);cursor:pointer;border-bottom:2px solid transparent;
  margin-bottom:-1px;font-weight:500;background:transparent;border-left:0;border-right:0;border-top:0;transition:.12s}
.msg-tab:hover{color:var(--navy)}
.msg-tab.active{color:var(--navy);border-bottom-color:var(--navy);font-weight:600}
.msg-tab .ct{background:rgba(125,43,34,.12);color:var(--navy);font-size:11px;padding:1px 7px;border-radius:9px;
  margin-left:6px;font-weight:600}
.msg-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.msg-toolbar .spacer{flex:1}
.msg-list{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);
  overflow:hidden;display:flex;flex-direction:column}
.msg-row{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line2);
  cursor:pointer;transition:.12s}
.msg-row:last-child{border-bottom:0}
.msg-row:hover{background:#fbfcfe}
.msg-row.unread{background:#fff8e6}
.msg-row.unread:hover{background:#fff3d6}
.msg-dot{width:10px;height:10px;border-radius:50%;background:var(--ink3);margin-top:8px;flex-shrink:0;opacity:.35}
.msg-row.unread .msg-dot{background:var(--amber,#c8890b);opacity:1;box-shadow:0 0 0 3px rgba(200,137,11,.18)}
.msg-body{flex:1;min-width:0}
.msg-title2{font-size:14px;font-weight:600;color:var(--ink);margin-bottom:4px;line-height:1.4}
.msg-row.unread .msg-title2{color:var(--navy)}
.msg-desc{font-size:12.5px;color:var(--ink3);line-height:1.6;white-space:pre-wrap}
.msg-meta{margin-top:6px;font-size:11.5px;color:var(--ink3);display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.msg-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.msg-empty{padding:60px 20px;text-align:center}
.msg-empty .ic{font-size:42px;opacity:.4;margin-bottom:10px}
.msg-empty .tx{font-size:13.5px;color:var(--ink3)}

/* 移动端适配（顶栏铃铛 + 通知页） */
@media(max-width:860px){
  .tb-bell-btn{width:32px;height:32px}
  .bell-icon{font-size:16px}
  /* 平板 / 横屏：面板仍挂在铃铛下方，但收住最大宽度 —— 顶栏铃铛右侧还有
     「头像 + 退出」约 90px，若面板比这段距离还宽就会顶穿屏幕左缘 */
  .bell-panel{right:-8px;max-width:min(360px,calc(100vw - 120px))}
  .bell-list{max-height:min(62vh,420px)}
  .msg-tabs{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}
  .msg-tab{white-space:nowrap;padding:8px 12px;font-size:12.5px}
}
/* 窄屏（竖屏手机）：铃铛离屏幕右缘太近，改 fixed 钉在顶栏下方通栏展示，
   彻底避免「消息通知」标题被切出屏幕 */
@media(max-width:640px){
  .bell-panel{position:fixed;top:60px;left:12px;right:12px;width:auto;max-width:none;border-radius:14px}
  .bell-list{max-height:min(60vh,400px)}
}
@media(max-width:480px){
  .bell-panel{left:8px;right:8px;top:58px}
  .bell-head{padding:9px 12px}
  .bell-title{font-size:13px}
  .bell-list{max-height:min(56vh,340px)}
  .bell-item{padding:10px 12px}
  .msg-row{padding:11px 12px;gap:10px}
}

/* ============================ v54b 工资详细项编辑弹窗（收入/扣款/公司承担 三段色块）
   背景：这个弹窗原来只写了 .bd-grid/.bd-cell 的类名，app.css 里**根本没有对应样式**，
   所以标签和输入框全裸排，两个两个挤在一起、看不出哪格是哪格。这里补齐并分段上色。 */
.bd-wrap{display:flex;flex-direction:column;gap:12px}
.bd-hint{font-size:12px;line-height:1.7;color:var(--ink2);background:var(--soft);
  border:1px solid var(--line);border-radius:var(--r);padding:8px 10px}
.bd-hint b{color:var(--ink)}
.bd-hint2{border-style:dashed;text-align:center}
.bd-sec{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--card);border-left:4px solid var(--line)}
.bd-in{background:#f8fcf9;border-left-color:#5aa37c}
.bd-out{background:#fdf9f7;border-left-color:#d99277}
.bd-co{background:#f8fafe;border-left-color:#6d8fd0}
.bd-sec>h4{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:7px 12px;font-size:13px;font-weight:600}
.bd-sec>h4 em{font-style:normal;font-size:11.5px;font-weight:400;opacity:.85}
.bd-in>h4{background:#eaf5ee;color:#256b4a;border-bottom:1px solid #d6e9de}
.bd-out>h4{background:#fbeeea;color:#a04a2e;border-bottom:1px solid #f2dcd4}
.bd-co>h4{background:#ecf1fb;color:#2f4f8f;border-bottom:1px solid #dbe3f4}
.bd-rows{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.bd-row{display:flex;align-items:center;gap:10px;padding:7px 12px;min-width:0;
  border-top:1px solid var(--line2)}
.bd-rows>.bd-row:nth-child(-n+2){border-top:none}
.bd-k{flex:0 0 104px;font-size:12.5px;color:var(--ink2);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.bd-row input{flex:1 1 auto;min-width:0;text-align:right;padding:5px 8px;
  border:1px solid var(--line);border-radius:6px;background:#fff;font-variant-numeric:tabular-nums}
.bd-row input:focus{outline:none;border-color:var(--navy-l);box-shadow:0 0 0 3px rgba(162,87,68,.12)}
.bd-in input:focus{border-color:#5aa37c;box-shadow:0 0 0 3px rgba(46,125,91,.12)}
.bd-out input:focus{border-color:#d99277;box-shadow:0 0 0 3px rgba(192,57,43,.10)}
.bd-co input{background:#fbfcff}
.bd-sub{padding:7px 12px;font-size:12.5px;text-align:right;color:var(--ink2);
  border-top:1px solid var(--line);background:#fcfdfe;font-variant-numeric:tabular-nums}
.bd-in .bd-sub{background:#f4faf6;color:#2c6b4d}
.bd-out .bd-sub{background:#fdf6f3;color:#9c4a2f}
.bd-co .bd-sub{background:#f5f8fd;color:#31508c}
.bd-total{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:10px 14px;border-radius:var(--r);background:var(--navy);color:#fff;font-size:14px}
.bd-total b{font-size:17px;font-variant-numeric:tabular-nums}
@media (max-width:560px){
  .bd-rows{grid-template-columns:1fr}
  .bd-rows>.bd-row:nth-child(-n+2){border-top:1px solid var(--line2)}
  .bd-rows>.bd-row:nth-child(1){border-top:none}
  .bd-k{flex:0 0 88px}
}
