:root{
  --bg:#eef1f5;
  --bg2:#ffffff;
  --ink:#1f2430;
  --muted:#7b8493;
  --rule:#e9ecf1;
  --rule2:#d6dbe3;
  --accent:#3f6fcf;
  --accent-soft:#edf3fe;
  --zebra:#fafbfd;
  --g1:#5A82C1;
  --g2:#ED7D31;
  --g3:#70AD47;
  --g4:#7030A0;
  --g5:#2E75B6;
  --g6:#C00000;
  --rownum-bg:#f3f5f8;
  --top-letters:26px;
  --top-groups:56px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:"Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;display:flex;flex-direction:column;overflow:hidden;-webkit-font-smoothing:antialiased}

/* ===== 顶部工具栏 ===== */
.topbar{flex:none;display:flex;align-items:center;gap:10px;height:54px;padding:0 18px;background:var(--bg2);border-bottom:1px solid var(--rule);box-shadow:0 1px 3px rgba(20,30,50,.05);position:relative;z-index:10}
.logo{flex:none;width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#5b8ae8,#3f6fcf);color:#fff;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(63,111,207,.32)}
.title{font-size:16px;font-weight:700}
.src-link{font-size:12px;color:var(--muted);text-decoration:none;border-bottom:1px dashed var(--rule2)}
.src-link:hover{color:var(--accent)}
.topbar .spacer{flex:1}
.btn{border:1px solid var(--rule2);background:var(--bg2);color:var(--ink);font-size:13px;padding:6px 14px;border-radius:6px;cursor:pointer}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{filter:brightness(1.08);color:#fff}
.btn[disabled]{opacity:.45;cursor:default;pointer-events:none}

/* ===== 搜索 ===== */
.search{flex:none;display:flex;align-items:center;gap:6px;height:32px;padding:0 9px;border:1px solid var(--rule2);border-radius:7px;background:#fff;transition:border-color .15s,box-shadow .15s}
.search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.13)}
.search svg{width:14px;height:14px;flex:none;fill:#9aa3b2}
.search input{border:0;outline:0;background:transparent;font-size:13px;width:170px;color:var(--ink);font-family:inherit}
.search input::placeholder{color:#aab2bf}
.search input::-webkit-search-cancel-button{display:none}
.search .clr{display:none;flex:none;width:18px;height:18px;line-height:17px;text-align:center;border-radius:50%;background:#e7ebf2;color:#68707d;font-size:12px;cursor:pointer;user-select:none}
.search .clr:hover{background:#dbe1ea;color:var(--ink)}
.search .clr.on{display:block}

/* ===== 当前账号 ===== */
.userbox{flex:none;display:flex;align-items:center;height:32px;padding:0 0 0 10px;border:1px solid var(--rule2);border-radius:7px;background:#fff}
.userbox .who{font-size:13px;font-weight:600;color:var(--ink);white-space:nowrap}
.userbox .who em{font-style:normal;font-weight:400;font-size:12px;color:var(--muted);margin-left:4px}
.userbox .out{margin-left:8px;border:0;border-left:1px solid var(--rule);background:transparent;color:var(--muted);font-family:inherit;font-size:12px;line-height:20px;padding:0 9px;height:26px;cursor:pointer}
.userbox .out:hover{color:var(--accent)}
.role-tip{font-size:12px;color:var(--muted);white-space:nowrap}

/* ===== 登录 ===== */
.login{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#edf2fa,#e6ecf6 55%,#dde5f2)}
.login.hide{display:none}
.login-card{width:352px;max-width:calc(100vw - 32px);padding:30px 28px 24px;background:#fff;border:1px solid #e5eaf2;border-radius:14px;box-shadow:0 18px 46px rgba(24,40,70,.16)}
.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.login-brand strong{font-size:17px;font-weight:700}
.login-sub{font-size:12px;color:var(--muted);margin-bottom:22px;line-height:1.6}
.field{margin-bottom:14px}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}
.field input{width:100%;height:38px;padding:0 11px;border:1px solid var(--rule2);border-radius:8px;background:#fff;color:var(--ink);font-size:14px;font-family:inherit;outline:0;transition:border-color .15s,box-shadow .15s}
.field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.13)}
.login-btn{width:100%;height:38px;margin-top:4px;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:#fff;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer}
.login-btn:hover{filter:brightness(1.08)}
.login-err{min-height:18px;margin-top:10px;font-size:12px;color:#c0392b}
.login-hint{margin-top:12px;padding-top:12px;border-top:1px dashed var(--rule);font-size:11px;color:#939cab;line-height:1.7}

/* ===== 网格区 ===== */
.grid-wrap{flex:1;overflow:auto;position:relative}
table.grid{border-collapse:separate;border-spacing:0;background:var(--bg2);table-layout:fixed}
.grid th,.grid td{border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);font-weight:400;text-align:left}
.grid tr.letters th{position:sticky;top:0;z-index:5;height:var(--top-letters);background:var(--rownum-bg);color:var(--muted);font-size:12px;font-weight:500;text-align:center;padding:0}
.grid th.corner{position:sticky;left:0;top:0;z-index:7}
.grid th.rownum{position:sticky;left:0;z-index:3;background:var(--rownum-bg);color:var(--muted);font-size:12px;text-align:center;padding:0;min-width:48px}
.grid tr.groups th{position:sticky;top:var(--top-letters);z-index:5;height:30px;background:var(--c);color:#fff;font-size:13px;font-weight:600;text-align:center;text-shadow:0 1px 1px rgba(0,0,0,.15)}
.grid tr.groups th.rownum{top:var(--top-letters);z-index:6;background:var(--rownum-bg);color:var(--muted);text-shadow:none;font-weight:500}
.grid tr.subhead th{position:sticky;top:var(--top-groups);z-index:5;height:34px;background:var(--bg2);color:var(--ink);font-size:12px;font-weight:600;text-align:center;padding:0 4px;border-bottom:3px solid var(--c);white-space:nowrap;overflow:hidden}
.grid tr.subhead th.rownum{top:var(--top-groups);z-index:6;background:var(--rownum-bg);border-bottom:3px solid var(--rule2)}
.grid tr.plain-head th{position:sticky;top:var(--top-letters);z-index:5;height:34px;background:var(--bg2);color:var(--ink);font-size:13px;font-weight:700;text-align:center;padding:0 6px;white-space:nowrap;overflow:hidden;border-bottom:3px solid var(--rule2)}
.grid tr.plain-head th.rownum{z-index:6;background:var(--rownum-bg);font-weight:500;color:var(--muted)}
.grid tbody td{height:29px;padding:0 8px;font-size:13px;white-space:nowrap;overflow:hidden;background:var(--bg2);transition:background .12s}
.grid tbody tr:nth-child(even) td{background:var(--zebra)}
.grid tbody td[contenteditable]:focus{outline:2px solid var(--accent);outline-offset:-2px;background:#eaf1ff}
.grid tbody tr:hover td{background:var(--accent-soft)}
.grid tbody tr:hover td:focus{background:#e6efff}
.grid tbody td.dup{background:#ffecec;box-shadow:inset 0 0 0 1px #e6a0a0;color:#b03030}
.grid tbody td.keycol{position:sticky;left:48px;z-index:2;background:var(--bg2);font-weight:600;color:#2b4a7d;box-shadow:1px 0 0 var(--rule)}
.grid tbody tr:nth-child(even) td.keycol{background:var(--zebra)}
.grid tbody tr:hover td.keycol{background:var(--accent-soft)}
.grid tbody td.na{
  background:repeating-linear-gradient(135deg,#fafbfd 0 7px,#eef1f6 7px 14px)!important;
  color:#c4cad7;cursor:not-allowed;text-align:center;font-size:13px;
}
.grid tbody td.na:hover{color:#9aa3b5}
/* 下拉填写单元格 */
.grid tbody td.dd{padding:0}
.grid tbody td.dd select{width:100%;height:27px;border:0;background:transparent;color:inherit;font-family:inherit;font-size:13px;padding:0 6px;outline:0;cursor:pointer;appearance:auto}
.grid tbody td.dd select:focus{background:#eaf1ff;box-shadow:inset 0 0 0 2px var(--accent)}
/* 日期选择器单元格 */
.grid tbody td.dt{padding:0}
.grid tbody td.dt input{width:100%;height:27px;border:0;background:transparent;color:inherit;font-family:inherit;font-size:13px;padding:0 5px;outline:0;color-scheme:light;cursor:pointer}
.grid tbody td.dt input:focus{background:#eaf1ff;box-shadow:inset 0 0 0 2px var(--accent)}
/* 表头编号列左固定 */
.grid tr.subhead th:nth-child(2),.grid tr.plain-head th:nth-child(2){position:sticky;left:48px;z-index:6;box-shadow:1px 0 0 var(--rule)}
.grid tbody tr:hover th.rownum{background:#e6eefb;color:var(--accent);font-weight:600}
/* 重复编号优先显示红色（覆盖斑马纹/悬停/固定列底色） */
.grid tbody td.dup,.grid tbody tr:nth-child(even) td.dup,.grid tbody tr:hover td.dup,.grid tbody td.keycol.dup{background:#ffecec;color:#b03030}

/* ===== 顶部工作表标签栏 ===== */
.sheetbar{flex:none;display:flex;align-items:center;height:44px;padding:0 12px;background:var(--bg2);border-bottom:1px solid var(--rule);overflow-x:auto}
.tab{flex:none;padding:8px 16px;margin-right:4px;font-size:13px;color:var(--muted);cursor:pointer;border-radius:6px 6px 0 0;border-bottom:2px solid transparent;user-select:none;transition:all .15s;white-space:nowrap}
.tab:hover{color:var(--ink);background:#f0f3f8}
.tab.active{color:var(--accent);font-weight:700;background:var(--accent-soft);border-bottom:2px solid var(--accent)}
.status{margin-left:auto;padding-left:16px;font-size:12px;color:var(--muted);white-space:nowrap}

/* ===== 子版块（客服统计板块内部） ===== */
.subbar{flex:none;display:none;align-items:center;gap:6px;height:40px;padding:0 14px;background:#fbfcfe;border-bottom:1px solid var(--rule)}
.subbar.on{display:flex}
.sub{flex:none;padding:5px 14px;font-size:12px;color:var(--muted);background:#fff;border:1px solid var(--rule2);border-radius:6px;cursor:pointer;user-select:none;transition:all .15s;white-space:nowrap}
.sub:hover{color:var(--ink);border-color:#c3cbda}
.sub.active{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);font-weight:600}
.subbar .cnt{margin-left:6px;font-size:11px;color:#9aa3b2}

/* ===== 外派统计栏 ===== */
.statbar{flex:none;display:flex;align-items:center;gap:14px;height:36px;padding:0 14px;background:#f8fafd;border-bottom:1px solid var(--rule);font-size:12px;color:var(--muted);white-space:nowrap;overflow-x:auto}
.statbar b{color:var(--ink);font-weight:600;margin-left:2px}
.statbar .tag{padding:1px 9px;border-radius:20px;background:#eaf1fe;color:var(--accent);font-weight:600;font-size:11px}
.statbar .hint{color:#9aa3b2}

@media (max-width:1100px){
  .search input{width:120px}
  .src-link{display:none}
  .role-tip{display:none}
}
@media (max-width:900px){
  .status{display:none}
  .search input{width:96px}
}
@media (max-width:768px){
  .topbar{padding:0 10px;gap:6px}
  .btn{padding:5px 10px}
  .search{display:none}
}

/* ===== 筛选栏 ===== */
.filterbar{flex:none;display:flex;align-items:center;gap:8px;height:40px;padding:0 14px;background:#fbfcfe;border-bottom:1px solid var(--rule);font-size:12px;color:var(--muted);white-space:nowrap;overflow-x:auto}
.filterbar select,.filterbar input{height:26px;border:1px solid var(--rule2);border-radius:6px;background:#fff;font-family:inherit;font-size:12px;color:var(--ink);padding:0 6px;outline:0}
.filterbar select:focus,.filterbar input:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(63,111,207,.13)}
.filterbar .sep{color:#b3bac6}
.filterbar .fl{color:#7b8493}
.btn.mini{padding:3px 10px;font-size:12px}
.btn.danger{border-color:#e0b4b4;color:#b03030}
.btn.danger:hover{background:#fff2f2;border-color:#c0392b;color:#c0392b}
/* ===== 保存状态 ===== */
.save-state{flex:none;display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);white-space:nowrap}
.save-state i{width:7px;height:7px;border-radius:50%;background:#c2c7d0}
.save-state.ok i{background:#2e9e5b}
.save-state.saving i{background:#e6a23c}
.save-state.err i,.save-state.off i{background:#c0392b}
/* ===== KPI 汇总 ===== */
.statbar{gap:8px}
.statbar .kpi{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border:1px solid var(--rule2);border-radius:14px;background:#fff}
.statbar .kpi em{font-style:normal;color:var(--muted)}
.statbar .kpi b{color:var(--ink);font-weight:600;margin-left:0}
.statbar .kpi.warn b{color:#c0392b}
/* ===== 选中 / 排序 / 列宽 ===== */
.grid tbody tr.sel td{background:#e8f0fe}
.grid tbody tr.sel td.keycol{background:#e8f0fe}
.grid tbody th.rownum{cursor:pointer;user-select:none}
.grid tbody tr.sel th.rownum{background:#dbe7fb;color:var(--accent);font-weight:700}
.grid thead th[data-k]{cursor:pointer}
.grid thead th[data-k]:hover{background:#f2f6ff}
.sortind{margin-left:3px;font-size:10px;color:var(--accent)}
.grid tbody td.invalid{box-shadow:inset 0 0 0 1px #d05a5a;background:#fff1f1}
.rsz{position:absolute;right:-3px;top:0;width:7px;height:100%;cursor:col-resize;z-index:9}
.rsz:hover{background:rgba(63,111,207,.28)}
/* ===== 列设置弹层 ===== */
.modal{position:fixed;inset:0;z-index:30;display:none;align-items:center;justify-content:center;background:rgba(20,30,50,.36)}
.modal.on{display:flex}
.modal-card{width:560px;max-width:calc(100vw - 36px);max-height:80vh;display:flex;flex-direction:column;background:#fff;border-radius:12px;box-shadow:0 22px 60px rgba(16,28,50,.28);overflow:hidden}
.modal-head{flex:none;display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--rule);font-size:14px}
.modal-head .x{border:0;background:transparent;font-size:18px;line-height:1;color:var(--muted);cursor:pointer;padding:2px 6px}
.modal-head .x:hover{color:var(--ink)}
.modal-body{flex:1;overflow:auto;padding:10px 18px;display:grid;grid-template-columns:1fr 1fr;gap:4px 16px}
.modal-body label{display:flex;align-items:center;gap:7px;padding:3px 0;font-size:13px;cursor:pointer}
.modal-body label.dis{color:#aab2bf;cursor:not-allowed}
.modal-body input[type=checkbox]{accent-color:var(--accent)}

/* ===== 数据提醒：金额不一致（黄）/ 结款超期（红）/ 缺编号（黄） ===== */
.grid tbody td.amt-bad{background:#fdf3dd!important;color:#8a5a00;box-shadow:inset 0 0 0 1px #e5cd9a}
.grid tbody td.ovd{background:#fae5e1!important;color:#a8361d;font-weight:700;box-shadow:inset 0 0 0 1px #dfae9f}
.grid tbody td.noid{background:#fdf3dd!important;color:#8a5a00;font-weight:700;box-shadow:inset 0 0 0 1px #e5cd9a}
.grid tbody tr.sel td.amt-bad,.grid tbody tr.sel td.noid{background:#e8ecdb!important}
.grid tbody tr.sel td.ovd{background:#eed2c8!important}
/* ===== 付款状态徽章（收款模块 sk 专用） ===== */
.grid .pay-badge{padding:4px 6px;text-align:center;background:transparent!important;box-shadow:none!important;border:none!important;min-width:100px;white-space:nowrap}
.grid .pstat{display:inline-block;padding:5px 12px;border-radius:14px;font-size:11px;font-weight:600;letter-spacing:.5px;border:1px solid;line-height:1}
.grid tbody tr.sel .pstat{filter:brightness(1.1)}
/* 重复编号更醒目 */
.grid tbody td.dup{font-weight:700}
/* 月度汇总合计行 */
.grid tbody tr.sumrow td{background:#f4efe0!important;font-weight:700;border-top:2px solid var(--rule2)}

/* ===== 账号管理弹窗 ===== */
#userModal .modal-card{max-width:640px}
#userModal .modal-body{display:block;padding:14px 22px}
.urow{display:grid;grid-template-columns:1fr 100px 1fr auto auto;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--rule)}
.urow:last-child{border-bottom:none}
.urow.uh{font-size:12px;color:var(--muted);font-weight:600;padding:0 0 6px}
.urow input,.urow select{height:30px;border:1px solid var(--rule2);border-radius:6px;padding:0 8px;font-size:13px;font-family:inherit;background:#fff;color:var(--ink);width:100%}
.urow input:focus,.urow select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px rgba(120,133,107,.15)}
.modal-foot{flex:none;display:flex;align-items:center;gap:8px;padding:12px 18px;border-top:1px solid var(--rule);background:#fbfcfe}
.modal-foot .spacer{flex:1}
/* ===== 部分退款弹窗 ===== */
#refundModal .modal-card{max-width:420px}
#refundModal .modal-body.rbody{display:block;padding:16px 20px 18px}
.rrow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0;font-size:13px;color:#4a5568}
.rrow strong{font-family:'IBM Plex Mono',monospace;font-size:15px;color:#243043}
.rrow label{font-size:13px;color:#4a5568}
.rrow input{width:150px;height:36px;border:1px solid #d5dce6;border-radius:8px;padding:0 10px;font-size:15px;font-family:'IBM Plex Mono',monospace;text-align:right;color:#243043;background:#fff}
.rrow input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.14)}
.rrow strong.net{font-size:17px;color:#15803d}
.rrow strong.net.neg{color:#b91c1c}
.rhint{margin-top:6px;font-size:12px;color:#8a94a6;line-height:1.5}
.rhint.bad{color:#b91c1c}
/* ===== 新增记录弹窗 ===== */
#addModal .modal-card{max-width:620px}
#addModal .modal-body.addbody{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;padding:16px 20px 18px}
#addModal .af{display:flex;flex-direction:column;gap:5px}
#addModal .af label{font-size:12px;color:#6b7280;padding:0}
#addModal .af.req label::after{content:' *';color:#dc2626}
#addModal .af input,#addModal .af select{height:34px;width:100%;border:1px solid #d5dce6;border-radius:8px;padding:0 10px;font-size:13px;font-family:inherit;color:var(--ink);background:#fff}
#addModal .af input:focus,#addModal .af select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.14)}
/* 新增行高亮（3 秒后自动消失） */
.grid tbody tr.newrow{outline:2px solid var(--accent);outline-offset:-2px}
.grid tbody tr.newrow td{background:#eef4ff!important}
.rec-card.newrow,.promo-card.newrow,.wage-card.newrow{box-shadow:0 0 0 2px var(--accent),0 8px 22px -10px rgba(63,111,207,.55)}
/* 空编号占位提示 */
td.need-id:empty::before{content:'请填写编号';color:#b6bfcc;font-size:12px}
@media (max-width:640px){#addModal .modal-body.addbody{grid-template-columns:1fr}}
/* 进度单元格里的退款金额小标签 */
td.dd .refund-tag{display:inline-block;margin-left:4px;padding:0 5px;border-radius:4px;background:#fee2e2;color:#b91c1c;font-size:11px;font-family:'IBM Plex Mono',monospace;vertical-align:middle}
/* ===== Toast ===== */
.toast{position:fixed;left:50%;bottom:34px;z-index:45;transform:translate(-50%,10px);padding:9px 18px;border-radius:8px;background:#243043;color:#fff;font-size:13px;box-shadow:0 8px 24px rgba(16,28,50,.24);opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;white-space:nowrap}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast.err{background:#b03030}

/* ================= 美化增强 ================= */
body{background:linear-gradient(180deg,#f3f6fb 0%,#eaeef5 100%)}
::selection{background:rgba(63,111,207,.22)}
.topbar{box-shadow:0 1px 2px rgba(20,30,50,.04),0 10px 26px -20px rgba(31,58,120,.35)}
.btn{transition:all .16s ease}
.btn:hover{box-shadow:0 4px 12px -5px rgba(63,111,207,.4);transform:translateY(-1px)}
.btn:active{transform:translateY(0);box-shadow:none}
.btn.primary{background:linear-gradient(135deg,#5b8ae8,#3f6fcf);border-color:transparent;box-shadow:0 5px 14px -5px rgba(63,111,207,.55)}
.btn.primary:hover{filter:brightness(1.06)}
.btn.danger:hover{box-shadow:0 4px 12px -5px rgba(192,57,43,.4)}
.tab{border-radius:8px 8px 0 0;margin-right:2px}
.tab.dash-tab{color:#6d5ae0;font-weight:600}
.tab.dash-tab:hover{background:#f2eefd;color:#5b45d6}
.tab.dash-tab.active{color:#fff;background:linear-gradient(135deg,#7c6cf0,#5478e8);border-bottom-color:transparent;box-shadow:0 4px 10px -4px rgba(110,90,230,.5)}
.statbar{background:linear-gradient(180deg,#fbfcfe,#f6f8fc);gap:10px;height:40px}
.statbar .kpi{border:0;border-radius:10px;padding:4px 13px;box-shadow:0 1px 4px rgba(20,30,50,.08)}
.statbar .kpi::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:3px}
.statbar .kpi:nth-child(2)::before{background:#e6a23c}
.statbar .kpi:nth-child(3)::before{background:#2e9e5b}
.statbar .kpi:nth-child(4)::before{background:#7c6cf0}
.statbar .kpi:nth-child(5)::before{background:#c0392b}
.grid tbody td{font-variant-numeric:tabular-nums}
.grid tr.groups th{background:linear-gradient(180deg,color-mix(in srgb,var(--c) 92%,#fff),color-mix(in srgb,var(--c) 90%,#000));letter-spacing:1px}
.grid-wrap::-webkit-scrollbar{width:10px;height:10px}
.grid-wrap::-webkit-scrollbar-thumb{background:#c9d2e0;border:2px solid transparent;border-radius:6px;background-clip:content-box}
.grid-wrap::-webkit-scrollbar-thumb:hover{background:#a9b6cc;border:2px solid transparent;background-clip:content-box}
.grid-wrap::-webkit-scrollbar-track,.grid-wrap::-webkit-scrollbar-corner{background:transparent}
.login{background:radial-gradient(900px 480px at 20% 0%,#e8f0fd 0%,transparent 60%),radial-gradient(800px 500px at 95% 100%,#dde8f8 0%,transparent 60%),linear-gradient(155deg,#eef3fb 0%,#dde5f2 100%)}
.login-card{border:0;border-radius:16px;box-shadow:0 26px 60px -14px rgba(24,40,70,.28)}
.login-btn{background:linear-gradient(135deg,#5b8ae8,#3f6fcf);border-color:transparent;box-shadow:0 7px 18px -7px rgba(63,111,207,.6);transition:all .18s}
.login-btn:hover{transform:translateY(-1px);box-shadow:0 11px 22px -7px rgba(63,111,207,.6)}
.modal-card{border-radius:14px}
.toast{border-radius:10px}

/* ================= 系统级美化 v2 ================= */
.title{font-size:17px;letter-spacing:1px;background:linear-gradient(135deg,#2b4a7d,#3f6fcf);-webkit-background-clip:text;background-clip:text;color:transparent}
.btn svg{width:13px;height:13px;margin-right:5px;vertical-align:-2px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.btn{padding:6px 13px;border-radius:7px}
.userbox{border-radius:8px;box-shadow:0 1px 3px rgba(20,30,50,.06)}
.search{border-radius:8px}
.grid tbody td.m{text-align:right;padding-right:12px}
.grid tr.letters th{border-bottom:1px solid var(--rule2);letter-spacing:.5px}
.sheetbar::-webkit-scrollbar{height:8px}
.sheetbar::-webkit-scrollbar-thumb{background:#d3dae6;border-radius:4px}
/* 登录页：品牌头图 + 表单分区 */
.login-card{width:380px;padding:0;overflow:hidden}
.login-hero{display:flex;flex-direction:column;align-items:center;gap:7px;padding:30px 28px 22px;background:linear-gradient(150deg,#3f6fcf 0%,#5b8ae8 60%,#7c9df0 100%);color:#fff}
.login-hero .logo{width:48px;height:48px;border-radius:12px;font-size:21px;background:rgba(255,255,255,.18);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35)}
.login-hero strong{font-size:19px;letter-spacing:4px}
.login-hero span{font-size:10px;letter-spacing:3px;opacity:.75}
.login-card .login-sub{margin:20px 26px 18px;text-align:center}
.login-card .field{margin:0 26px 14px}
.login-card .login-btn{width:calc(100% - 52px);margin:4px 26px 0}
.login-card .login-err{margin:10px 26px 0;text-align:center}
.login-card .login-hint{margin:12px 26px 0;padding:12px 0 20px;border-top:1px dashed var(--rule);text-align:center}

/* ================= 数据大屏（仅总管） ================= */
.dash-wrap{display:none;flex:1;overflow:auto;padding:14px 18px 26px;color:#dbe6ff;
  background:radial-gradient(1100px 480px at 50% -8%,#153a80 0%,#0c1f49 46%,#081433 100%)}
.dash-wrap.on{display:block}
.dash-head{position:relative;display:flex;align-items:center;justify-content:center;height:46px;margin-bottom:14px}
.dash-title{display:flex;align-items:center;gap:14px;font-size:22px;font-weight:700;letter-spacing:5px;color:#eaf1ff;text-shadow:0 0 20px rgba(79,140,255,.5)}
.dt-deco{width:64px;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,#4f8cff)}
.dt-deco.r{background:linear-gradient(90deg,#4f8cff,transparent)}
.dash-side{position:absolute;right:2px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:10px;font-size:12px;color:#8fa5d6;font-variant-numeric:tabular-nums}
.dbtn{border:1px solid rgba(96,144,255,.4);background:rgba(30,58,120,.35);color:#bcd0ff;font-family:inherit;font-size:12px;padding:4px 13px;border-radius:6px;cursor:pointer;transition:all .15s}
.dbtn:hover{background:rgba(60,100,190,.45);color:#fff}
.dash-kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:14px}
.dkpi{padding:12px 14px 11px;border-radius:10px;border:1px solid rgba(96,144,255,.22);
  background:linear-gradient(160deg,rgba(40,72,142,.42),rgba(15,30,70,.5));
  box-shadow:inset 0 0 22px rgba(64,110,220,.10),0 5px 16px -9px rgba(0,0,0,.55)}
.dk-t{font-size:12px;color:#8fa5d6;letter-spacing:1px}
.dk-v{margin-top:5px;font-size:24px;font-weight:700;color:#fff;font-family:"Bahnschrift","DIN Alternate","Consolas",monospace;letter-spacing:.5px;text-shadow:0 0 14px rgba(79,140,255,.35);white-space:nowrap}
.dk-v.m{font-size:20px}
.dk-s{margin-top:3px;font-size:11px;color:#7288b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dkpi.warn .dk-v{color:#ff8a8a;text-shadow:0 0 14px rgba(255,90,90,.4)}
/* 账户余额 - 最大最醒目 */
.dkpi.big{grid-column:span 2;padding:18px 20px 14px;
  background:linear-gradient(160deg,rgba(46,95,200,.52),rgba(12,28,70,.6));
  border-color:rgba(79,140,255,.4);
  box-shadow:inset 0 0 26px rgba(64,110,220,.18),0 5px 22px -8px rgba(0,0,0,.6)}
.dkpi.big .dk-t{font-size:13px;color:#a6bff0}
.dkpi.big .dk-v.big{font-size:40px;color:#9ec8ff;text-shadow:0 0 22px rgba(79,140,255,.55);letter-spacing:1px}
.dkpi.big.warn{background:linear-gradient(160deg,rgba(200,60,60,.42),rgba(70,10,10,.55));border-color:rgba(255,100,100,.4)}
.dkpi.big.warn .dk-v.big{color:#ff9a9a;text-shadow:0 0 22px rgba(255,90,90,.5)}
/* 支出项 - 橙色系 */
.dkpi.neg{background:linear-gradient(160deg,rgba(180,110,20,.32),rgba(60,35,5,.45));border-color:rgba(230,160,60,.28)}
.dkpi.neg .dk-v{color:#ffd39a;text-shadow:0 0 12px rgba(230,140,30,.35)}
.dkpi.neg .dk-t{color:#c8a26e}
.dash-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.dcard{border-radius:10px;padding:10px 12px 8px;border:1px solid rgba(96,144,255,.18);
  background:linear-gradient(160deg,rgba(30,56,116,.35),rgba(12,25,58,.5));
  box-shadow:inset 0 0 22px rgba(64,110,220,.08)}
.dcard.span2{grid-column:span 2}
.dcard.span3{grid-column:span 3}
.dcard h3{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:13px;font-weight:600;color:#c9d8f8;letter-spacing:1px}
.dcard h3::before{content:'';width:4px;height:14px;border-radius:2px;background:linear-gradient(180deg,#4f8cff,#22d3ee)}
.chart{width:100%;height:248px}
.chart.h200{height:206px}
.chart-empty{display:flex;align-items:center;justify-content:center;height:100%;color:#5f739f;font-size:12px}
@media (max-width:1250px){
  .dash-kpis{grid-template-columns:repeat(3,1fr)}
  .dash-grid{grid-template-columns:1fr 1fr}
  .dcard.span2,.dcard.span3{grid-column:span 2}
}

/* ================= 精修 v3：登录页 + 表格 ================= */
/* --- 登录页：漂浮光斑背景 + 卡片入场 --- */
.login{overflow:hidden}
.login::before,.login::after{content:'';position:absolute;border-radius:50%;filter:blur(90px);opacity:.5;pointer-events:none}
.login::before{width:520px;height:520px;left:-120px;top:-140px;background:#bcd2ff;animation:floatA 14s ease-in-out infinite}
.login::after{width:460px;height:460px;right:-100px;bottom:-120px;background:#c9c2ff;animation:floatB 17s ease-in-out infinite}
@keyframes floatA{0%,100%{transform:translate(0,0)}50%{transform:translate(46px,34px)}}
@keyframes floatB{0%,100%{transform:translate(0,0)}50%{transform:translate(-36px,-44px)}}
.login-card{position:relative;z-index:1;animation:cardIn .45s cubic-bezier(.2,.8,.3,1) both}
@keyframes cardIn{from{opacity:0;transform:translateY(20px) scale(.98)}to{opacity:1;transform:none}}
.login-hero{position:relative;overflow:hidden}
.login-hero::after{content:'';position:absolute;inset:0;background:repeating-linear-gradient(115deg,transparent 0 14px,rgba(255,255,255,.05) 14px 15px);pointer-events:none}
.login-card .field input{height:40px;border-radius:9px;transition:border-color .15s,box-shadow .15s,transform .15s}
.login-card .field input:focus{transform:translateY(-1px);box-shadow:0 0 0 3px rgba(63,111,207,.15),0 6px 14px -8px rgba(63,111,207,.4)}
.login-card .login-btn{position:relative;overflow:hidden;height:40px;border-radius:9px;letter-spacing:6px}
.login-card .login-btn::after{content:'';position:absolute;top:0;left:-70%;width:45%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.45),transparent);transform:skewX(-20deg)}
.login-card .login-btn:hover::after{animation:shine .8s ease}
@keyframes shine{from{left:-70%}to{left:130%}}

/* --- 表格：边框更柔和、冻结列投影、表头层次 --- */
.grid th,.grid td{border-right:1px solid #eef1f6;border-bottom:1px solid #eef1f6}
table.grid{box-shadow:0 0 0 1px var(--rule2)}
.grid tr.letters th{background:#f5f7fa;color:#8b93a3}
.grid th.rownum{background:#f5f7fa;color:#8b93a3;font-weight:500}
.grid tr.subhead th{background:linear-gradient(180deg,#ffffff,#f7f9fc)}
.grid tr.plain-head th{background:linear-gradient(180deg,#ffffff,#f7f9fc)}
.grid tbody td.keycol{box-shadow:2px 0 5px -2px rgba(20,30,50,.10)}
.grid tr.subhead th:nth-child(2),.grid tr.plain-head th:nth-child(2){box-shadow:2px 0 5px -2px rgba(20,30,50,.10)}
.grid tbody tr:hover td{background:#eef4ff}
.grid tbody tr:hover td.keycol{background:#eef4ff}
.grid tbody tr.sel td,.grid tbody tr.sel td.keycol{background:#e2edff}
.grid tbody tr.sel:hover td{background:#dae8ff}
.grid tbody td[contenteditable]:focus{outline:0;background:#fff;box-shadow:inset 0 0 0 2px #5b8ae8,0 0 0 3px rgba(91,138,232,.18)}
.grid tbody tr:hover td:focus{background:#fff}

/* ================= 精修 v4：深色顶栏 + 现代表格 ================= */
/* --- 深色顶栏（系统感） --- */
.topbar{background:linear-gradient(90deg,#0b1633,#122046 60%,#16265a);border-bottom:1px solid #1d2c55;box-shadow:0 2px 10px rgba(6,12,30,.35)}
.title{background:linear-gradient(135deg,#dbe8ff,#8fb4ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.src-link{color:#8fa8e0;border-bottom-color:#2a3a63}
.src-link:hover{color:#cfe1ff}
.topbar .btn{background:rgba(255,255,255,.06);border-color:#2a3a63;color:#cdd9f3}
.topbar .btn:hover{border-color:#5b8ae8;color:#fff;background:rgba(91,138,232,.16)}
.topbar .btn.primary{background:linear-gradient(135deg,#5b8ae8,#3f6fcf);border-color:transparent;color:#fff}
.topbar .btn.danger{background:rgba(224,49,49,.16);border-color:#6e2b2b;color:#ff9d9d}
.save-state{color:#8fa8e0}
.save-state.ok{color:#5eead4}
.save-state.err{color:#ff9d9d}
.save-state.save{color:#93b4f5}
.search{background:rgba(255,255,255,.06);border-color:#2a3a63}
.search:focus-within{border-color:#5b8ae8;box-shadow:0 0 0 3px rgba(91,138,232,.22)}
.search input{color:#e6eeff}
.search input::placeholder{color:#6c7ea8}
.search svg{fill:#6c7ea8}
.search .clr{background:#22315c;color:#8fa8e0}
.search .clr:hover{background:#2c3f74;color:#fff}
.userbox{background:rgba(255,255,255,.06);border-color:#2a3a63;box-shadow:none}
.userbox .who{color:#e6eeff}
.userbox .who em{color:#8fa8e0}
.userbox .out{color:#8fa8e0;border-left-color:#22315c}
.userbox .out:hover{color:#fff}

/* --- 工作表标签：胶囊式 --- */
.sheetbar{background:#f4f6fa}
.tab{padding:7px 15px;border-radius:8px;border-bottom:0}
.tab:hover{background:#e9edf5}
.tab.active{background:var(--accent);color:#fff;font-weight:600;box-shadow:0 3px 8px -3px rgba(63,111,207,.55)}
.tab.dash-tab{background:rgba(112,48,160,.1)}
.tab.dash-tab.active{background:linear-gradient(135deg,#8a4fd0,#7030a0);box-shadow:0 3px 8px -3px rgba(112,48,160,.55)}

/* --- 表格本体：更高更通透 --- */
.grid tbody td{height:34px;padding:0 10px;font-size:13.5px}
.grid tr.subhead th{height:38px;font-size:12.5px;color:#4a5468;letter-spacing:.3px}
.grid tr.plain-head th{height:38px}
.grid tbody tr:nth-child(even) td{background:#f8fafc}
.grid tbody tr:nth-child(even) td.keycol{background:#f8fafc}
.grid tbody td.m{font-weight:500;color:#12376b}
.grid tbody td.keycol{font-family:Consolas,Menlo,monospace;font-size:12.5px;letter-spacing:.3px}
.grid tr.letters th:first-child{border-top-left-radius:10px}
.grid tr.letters th:last-child{border-top-right-radius:10px}

/* --- 下拉单元格：胶囊控件 --- */
.grid tbody td.dd select{appearance:none;-webkit-appearance:none;width:calc(100% - 10px);height:25px;margin:0 5px;padding:0 22px 0 9px;border:1px solid var(--rule2);border-radius:7px;background:#f8fafc url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%237b8493' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 8px center;font-size:12.5px;transition:border-color .15s,background-color .15s}
.grid tbody td.dd select:hover{border-color:#b9c6dd;background-color:#fff}
.grid tbody td.dd select:focus{box-shadow:inset 0 0 0 1px var(--accent),0 0 0 3px rgba(63,111,207,.14);background-color:#fff}

/* --- 日期单元格 --- */
.grid tbody td.dt input{width:calc(100% - 10px);height:25px;margin:0 5px;padding:0 8px;border:1px solid transparent;border-radius:7px;font-size:12.5px}
.grid tbody td.dt input:hover{border-color:var(--rule2);background:#f8fafc}
.grid tbody td.dt input:focus{background:#fff;box-shadow:inset 0 0 0 1px var(--accent),0 0 0 3px rgba(63,111,207,.14)}

/* --- 无效/重复值更醒目 --- */
.grid tbody td.invalid{background:#fff3f3!important}
.grid tbody td.dup{background:#ffe7e7!important}

/* --- 选中文字颜色 --- */
::selection{background:rgba(63,111,207,.22)}

/* ================= 精修 v5：无边框通透表格 ================= */
/* 表格卡片化：灰底上浮白卡 */
.grid-wrap{background:var(--bg)}
table.grid{margin:14px;box-shadow:0 1px 3px rgba(20,30,50,.07),0 10px 28px -14px rgba(20,30,50,.18)}
.grid tr.letters th:first-child{border-top-left-radius:12px}
.grid tr.letters th:last-child{border-top-right-radius:12px}
.grid tbody tr:last-child th.rownum{border-bottom-left-radius:12px}
.grid tbody tr:last-child td:last-child{border-bottom-right-radius:12px}
/* 去掉竖线，只留横向分隔线（Notion 风） */
.grid th,.grid td{border-right:0}
.grid tbody td{border-bottom:1px solid #eef1f6}
/* 字母行更轻（吸顶时用灰底防透出下面的行） */
.grid tr.letters th{background:var(--bg);color:#aab2bf;font-size:10.5px;height:22px;letter-spacing:1px}
.grid th.corner{background:var(--bg)}
/* 分组大标题：马卡龙浅底 + 彩色文字 */
.grid tr.groups th{background:color-mix(in srgb,var(--c) 12%,#fff);color:var(--c);text-shadow:none;font-weight:700;letter-spacing:3px;height:32px;border-bottom:1px solid color-mix(in srgb,var(--c) 28%,#fff)}
/* 列名行：白底 + 主题色下划线 */
.grid tr.subhead th{background:#fff;border-bottom:2px solid color-mix(in srgb,var(--c) 55%,#fff)}
.grid tr.plain-head th{background:#fff;border-bottom:2px solid var(--rule2)}
.grid tr.subhead th.rownum,.grid tr.plain-head th.rownum{background:#f5f7fa;border-bottom:2px solid var(--rule2)}
/* 冻结列之间保留细分隔 */
.grid th.rownum{box-shadow:1px 0 0 0 #eef1f6}
.grid tbody td.keycol{box-shadow:2px 0 0 0 #eef1f6}
.grid tr.subhead th:nth-child(2),.grid tr.plain-head th:nth-child(2){box-shadow:2px 0 0 0 #eef1f6}
/* 进度状态彩色圆点 */
.grid tbody td.pgdone{color:#15803d;font-weight:600}
.grid tbody td.pgdone::before{content:'●';font-size:8px;margin-right:6px;color:#22c55e;vertical-align:1px}
.grid tbody td.pging{color:#b7791f;font-weight:600}
.grid tbody td.pging::before{content:'●';font-size:8px;margin-right:6px;color:#d29a26;vertical-align:1px}
.grid tbody td.pgrefund{color:#b91c1c;font-weight:600}
.grid tbody td.pgrefund::before{content:'●';font-size:8px;margin-right:6px;color:#ef4444;vertical-align:1px}
.grid tbody td.pgpartial{color:#b45309;font-weight:600}
.grid tbody td.pgpartial::before{content:'●';font-size:8px;margin-right:6px;color:#f59e0b;vertical-align:1px}

/* ================= 精修 v6：纸墨朱砂 · 新中式账房风 ================= */
:root{
  --bg:#f1ede2; --bg2:#fffdf6; --ink:#231e14; --muted:#8d8570;
  --rule:#e8e1cf; --rule2:#d5ccb3;
  --accent:#b6432c; --accent-soft:#f5e9e2;
  --zebra:#faf7ec; --rownum-bg:#efe9da;
}
/* 宣纸底纹 */
body{background-color:var(--bg);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E")}
::selection{background:rgba(182,67,44,.22)}
/* 字体：标题宋体，数字等宽 */
.title,.login-hero strong,.dash-title{font-family:"Noto Serif SC","Songti SC",serif;font-weight:900}
.statbar .kpi b,.grid tbody td.m,.grid tbody td.keycol{font-family:"IBM Plex Mono",Consolas,Menlo,monospace}
/* 印章 Logo */
.logo{background:linear-gradient(135deg,#c8502f,#a83a20);border-radius:7px;font-family:"Noto Serif SC",serif;font-weight:900;box-shadow:inset 0 0 0 2px rgba(255,240,220,.3),0 2px 8px rgba(168,58,32,.45)}
/* 深墨胡桃顶栏 */
.topbar{background:linear-gradient(90deg,#221a10,#2c2214 55%,#33271a);border-bottom:1px solid #453a28;box-shadow:0 2px 10px rgba(30,20,8,.4)}
.title{background:linear-gradient(135deg,#f6e7cc,#d3a877);-webkit-background-clip:text;background-clip:text;color:transparent}
.src-link{color:#a08c6a;border-bottom-color:#453a28}
.src-link:hover{color:#e8d3ae}
.topbar .btn{background:rgba(245,230,200,.05);border-color:#4d4128;color:#e0d2b2}
.topbar .btn:hover{border-color:#c9805f;color:#fff;background:rgba(182,67,44,.25)}
.topbar .btn.primary{background:linear-gradient(135deg,#c8502f,#a83a20);border-color:transparent;color:#fff}
.topbar .btn.danger{background:rgba(182,67,44,.18);border-color:#6e3a26;color:#f0b4a3}
.save-state{color:#a08c6a}
.save-state.ok{color:#7fc8a4}
.save-state.err{color:#f0a394}
.save-state.save{color:#d8b98c}
.search{background:rgba(245,230,200,.05);border-color:#4d4128}
.search:focus-within{border-color:#c9805f;box-shadow:0 0 0 3px rgba(182,67,44,.25)}
.search input{color:#f0e6cf}
.search input::placeholder{color:#7d6f52}
.search svg{fill:#7d6f52}
.search .clr{background:#3a3020;color:#a08c6a}
.search .clr:hover{background:#4d4128;color:#fff}
.userbox{background:rgba(245,230,200,.05);border-color:#4d4128}
.userbox .who{color:#f0e6cf}
.userbox .who em{color:#a08c6a}
.userbox .out{color:#a08c6a;border-left-color:#3a3020}
.userbox .out:hover{color:#fff}
/* 标签页：朱砂下划线 */
.sheetbar{background:transparent;border-bottom-color:var(--rule2)}
.tab{color:var(--muted);border-radius:6px 6px 0 0}
.tab:hover{background:rgba(182,67,44,.06);color:var(--ink)}
.tab.active{background:transparent;color:var(--ink);font-weight:700;box-shadow:inset 0 -3px 0 var(--accent)}
.tab.dash-tab{background:transparent}
.tab.dash-tab.active{background:transparent;box-shadow:inset 0 -3px 0 #7a5b9e;color:#5b4783}
/* 筛选/统计/子版块条 */
.filterbar,.subbar{background:transparent;border-bottom-color:var(--rule)}
.filterbar select,.filterbar input{background:var(--bg2);border-color:var(--rule2)}
.statbar{background:transparent;border-bottom-color:var(--rule)}
.statbar .kpi{background:var(--bg2);border:1px solid var(--rule2);box-shadow:0 1px 2px rgba(70,52,20,.05)}
.statbar .kpi.warn b{color:var(--accent)}
.sub.active{background:var(--ink);color:#f5ead6;border-color:var(--ink)}
/* 表格：暖白纸卡 */
table.grid{border:1px solid var(--rule2);box-shadow:0 1px 2px rgba(70,52,20,.06),0 14px 34px -18px rgba(70,52,20,.28)}
.grid tbody td{border-bottom:1px solid #eee8d8}
.grid tbody tr:nth-child(even) td,.grid tbody tr:nth-child(even) td.keycol{background:var(--zebra)}
.grid tr.letters th,.grid th.corner{background:var(--bg);color:#b5ac93}
.grid tr.subhead th,.grid tr.plain-head th{background:var(--bg2);color:#6b6350}
.grid tr.subhead th.rownum,.grid tr.plain-head th.rownum{background:var(--rownum-bg)}
.grid th.rownum{background:var(--rownum-bg);color:#a89e85;box-shadow:1px 0 0 0 #eee8d8}
.grid tbody td.keycol{background:var(--bg2);color:#7a6a45;box-shadow:2px 0 0 0 #eee8d8}
.grid tbody tr:hover td{background:var(--accent-soft)}
.grid tbody tr:hover td.keycol{background:var(--accent-soft)}
.grid tbody tr:hover th.rownum{background:#e9dfc8;color:var(--accent)}
.grid tbody td[contenteditable]:focus{box-shadow:inset 0 0 0 2px var(--accent),0 0 0 3px rgba(182,67,44,.15)}
.grid tbody td.dd select{background-color:#fbf8ef;border-color:var(--rule2)}
.grid tbody td.dd select:hover{border-color:#c3b794;background-color:#fff}
.grid tbody td.dt input:hover{border-color:var(--rule2);background:#fbf8ef}
.grid tbody tr.sel td{background:#f3e3d3!important}
.grid tbody td.pgdone{color:#1e6b4a}
.grid tbody td.pgdone::before{color:#4a9e77}
.grid tbody td.pging{color:#a5731c}
.grid tbody td.pging::before{content:'●';font-size:8px;margin-right:6px;color:#d29a26;vertical-align:1px}
/* 登录页：宣纸 + 墨块 + 朱砂 */
.login{background:#ede8d8;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.06'/%3E%3C/svg%3E")}
.login-card{background:var(--bg2);border:1px solid #ddd4bd;box-shadow:0 30px 70px -30px rgba(70,52,20,.4)}
.login-card::before{content:'';display:block;height:3px;margin:-30px -28px 0;background:linear-gradient(90deg,#b6432c,#d8845a,#b6432c)}
.login-hero{background:linear-gradient(160deg,#2a2113,#1a1410 70%)}
.login-hero strong{color:#f5ead6}
.login-hero span{color:#a08c6a;letter-spacing:3px}
.login-sub{color:#8d8570}
.field label{color:#6b6350}
.field input{background:var(--bg2);border-color:var(--rule2)}
.field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(182,67,44,.14)}
.login-btn{background:linear-gradient(135deg,#c8502f,#a83a20);border-color:#a83a20;font-family:"Noto Serif SC",serif;font-weight:700;letter-spacing:6px}
.login-hint{color:#a89e85;border-top-color:var(--rule)}
/* 数据大屏：暖墨底 */
.dash-wrap{background:#16130f}
.dash-title{background:linear-gradient(135deg,#f4e6c8,#d8906a);-webkit-background-clip:text;background-clip:text;color:transparent}
.dkpi{background:#211c16;border:1px solid #363025}
.dk-v{font-family:"IBM Plex Mono",monospace}

/* ================= 精修 v7：表格内容可视化 ================= */
/* 编号列：左侧金线（账房记号） */
.grid tbody td.keycol{box-shadow:inset 3px 0 0 #d8b98c,2px 0 0 0 #eee8d8}
/* 已完成订单：序号格绿色标记 */
.grid tbody tr.rowdone th.rownum{box-shadow:inset 3px 0 0 #4a9e77,1px 0 0 0 #eee8d8;color:#1e6b4a;font-weight:600}
.grid tbody tr.rowrefund{background:#fde8e8!important}
.grid tbody tr.rowrefund th.rownum{box-shadow:inset 3px 0 0 #b91c1c;color:#b91c1c;font-weight:600;background:#fecaca}
.grid tbody tr.rowpartial{background:#fef6e7!important}
.grid tbody tr.rowpartial th.rownum{box-shadow:inset 3px 0 0 #b45309;color:#b45309;font-weight:600;background:#fde68a}
/* 下拉按值着色（徽章化） */
.grid tbody td.dd.vc-teal select{background-color:#e4f0ec;border-color:#b7d4c8;color:#17705d;font-weight:600}
.grid tbody td.dd.vc-gold select{background-color:#f7efdb;border-color:#e0cb9c;color:#8a6414;font-weight:600}
.grid tbody td.dd.vc-green select{background-color:#e6f2e8;border-color:#bcd9c1;color:#1e6b4a;font-weight:600}
.grid tbody td.dd.vc-blue select{background-color:#e7edf8;border-color:#bfcee6;color:#2f5387;font-weight:600}
.grid tbody td.dd.vc-purple select{background-color:#f0e9f7;border-color:#d2c1e4;color:#6b4a8f;font-weight:600}
.grid tbody td.dd.vc-red select{background-color:#f8e8e3;border-color:#e2bcb2;color:#a83a20;font-weight:600}
/* 十字交叉高亮：悬停点亮同列 */
.grid tbody td.colhov{background-color:#f4eee0}
.grid tbody tr:hover td.colhov{background-color:#f0e6d2}


/* ===== 消耗截图：单元格缩略图 + 大图预览 ===== */
td.imgcell{padding:2px 4px!important;text-align:center;white-space:nowrap}
.cellimg{max-width:64px;max-height:34px;border-radius:4px;vertical-align:middle;cursor:zoom-in;border:1px solid #e5e7eb;object-fit:cover}
.cellimg:hover{box-shadow:0 2px 10px rgba(30,60,120,.25)}
.upbtn{display:inline-block;margin-left:6px;font-size:11px;color:#4f8cff;cursor:pointer;border:1px dashed #9dbcf5;border-radius:4px;padding:1px 7px;vertical-align:middle;background:#f5f9ff}
.upbtn:hover{background:#e8f0ff}
.imgview{position:fixed;inset:0;background:rgba(8,12,24,.72);z-index:1000;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px)}
.imgview .iv-box{max-width:86vw;background:#fff;border-radius:12px;padding:14px;box-shadow:0 18px 60px rgba(0,0,0,.45);text-align:center}
.imgview img{max-width:80vw;max-height:72vh;border-radius:6px;display:block;margin:0 auto}
.imgview .iv-acts{margin-top:12px;display:flex;gap:10px;justify-content:center}
.iv-btn{padding:6px 18px;border:1px solid #d5dbe7;border-radius:6px;background:#f6f8fc;cursor:pointer;font-size:13px;color:#333}
.iv-btn:hover{background:#eaf0fb}
.iv-btn.danger{color:#d33;border-color:#f0c9c9;background:#fdf2f2}
.iv-btn.danger:hover{background:#fbe6e6}

/* ================= H5 / 手机端适配 ================= */
/* 双视图架构：桌面显示表格，移动显示卡片 */
.only-mobile{display:none}
@media (max-width:768px){
  /* 视图切换 */
  .only-desktop{display:none!important}
  .only-mobile{display:block!important}
  /* 基础：允许页面滚动，禁用横向溢出 */
  body{overflow-y:auto;overflow-x:hidden;height:auto;min-height:100vh;-webkit-tap-highlight-color:transparent}
  html{height:auto}
  .grid-wrap{overflow-x:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .grid-wrap::-webkit-scrollbar{display:none}

  /* 顶栏：紧凑 + 可横滑按钮 */
  .topbar{flex-wrap:nowrap;height:48px;padding:0 8px;gap:6px}
  .topbar .title{font-size:14px;flex:none;max-width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .topbar .btn{flex:none;height:32px;padding:0 10px;font-size:12px;white-space:nowrap}
  .topbar .btn svg{width:13px;height:13px}
  .save-state{display:none}
  .userbox{flex:none;height:32px;padding:0 10px}
  .userbox .who{font-size:12px}
  .userbox .out{display:none}
  /* 搜索 */
  .search{display:flex;flex:1 1 auto;min-width:0;height:32px}
  .search input{flex:1;width:auto;height:32px;font-size:14px;min-width:0}

  /* 板块标签：紧凑 pill 样式 */
  .sheetbar{height:40px;padding:0 8px;gap:4px;overflow-x:auto;scrollbar-width:none}
  .sheetbar::-webkit-scrollbar{display:none}
  #tabs{display:flex;gap:4px}
  #tabs .tab{flex:none;padding:0 12px;height:32px;font-size:13px;border-radius:6px;background:#fff;border:1px solid var(--rule2);margin:0}
  #tabs .tab.active{background:var(--accent);color:#fff;font-weight:600;border-color:var(--accent)}
  .status{display:none}

  /* 子版块 */
  .subbar{height:36px;padding:0 8px;gap:4px}
  .subbar .sub{flex:none;height:28px;padding:0 12px;font-size:12px;border-radius:5px}

  /* 统计条 */
  .statbar{height:auto;min-height:32px;flex-wrap:wrap;padding:4px 8px;gap:6px;white-space:normal}
  .statbar .kpi{font-size:11px;padding:1px 8px}

  /* 表格：紧凑但点击区域大 */
  .grid th,.grid td{padding:4px 6px;font-size:11px}
  .grid tbody td{height:auto;min-height:26px}
  .grid th.rownum,.grid td.rownum{min-width:32px}
  .grid tr.plain-head th,.grid tr.subhead th{font-size:11px;height:28px}
  .grid tr.groups th{height:26px;font-size:11px}
  .grid input,.grid select{font-size:13px}
  .grid tbody td[contenteditable]{min-height:32px;padding:4px 6px}
  /* 日期/下拉输入框在手机上加大点击区 */
  .grid tbody td.dt input,.grid tbody td.dd select{height:32px;font-size:14px}
  .cellimg{max-width:52px;max-height:30px}

  /* 筛选条紧凑 */
  .filterbar{height:auto;min-height:36px;flex-wrap:wrap;padding:4px 8px;gap:4px}
  .filterbar select,.filterbar input{height:30px;font-size:13px;max-width:110px}

  /* 登录页 */
  .login-card{padding:28px 22px 22px;border-radius:14px;margin:0 16px;box-shadow:0 10px 32px rgba(24,40,70,.14)}
  .login-brand{gap:10px}
  .login-brand strong{font-size:16px}
  .login-btn{height:44px;font-size:15px;font-weight:600}
  .field input{height:44px;font-size:15px;border-radius:10px}
  .field label{font-size:12px;margin-bottom:5px}
  .login-hint{font-size:11px}

  /* 列设置弹窗全屏化 */
  .modal-card{width:100%;max-width:100vw;height:100%;max-height:100vh;border-radius:0}
  .modal-body{grid-template-columns:1fr}
  /* 图片查看器按钮加大 */
  .iv-btn{height:40px;font-size:14px;padding:0 18px}

  /* ===== 投流板块：卡片式填写 ===== */
  .promo-cards{display:flex;flex-direction:column;gap:12px;padding:12px 10px 80px}
  .promo-empty{text-align:center;color:var(--muted);padding:60px 20px;font-size:14px}
  .promo-card{background:#fff;border-radius:14px;border:1px solid #eef0f4;box-shadow:0 2px 8px rgba(0,0,0,.06);padding:16px 14px}
  .promo-head{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:#6b7280;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid #f0f1f4}
  .promo-head::before{content:"";display:inline-block;width:28px;height:3px;border-radius:2px;background:linear-gradient(90deg,var(--accent),#89a8f0)}
  .promo-card.promo-new{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.12),0 2px 8px rgba(0,0,0,.06)}
  .promo-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
  .pf-label{font-size:12px;color:#6b7280;font-weight:500;letter-spacing:.02em}
  .pf-input{width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid #d1d5db;border-radius:10px;font-size:16px;background:#fff;color:#111827;outline:none;-webkit-appearance:none;appearance:none;transition:border-color .15s,box-shadow .15s;min-height:44px}
  .pf-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.12)}
  .pf-input:disabled{background:#f3f4f6;color:#9ca3af;cursor:not-allowed}
  .pf-input[type="number"]{-moz-appearance:textfield}
  .pf-input[type="number"]::-webkit-inner-spin-button,.pf-input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  .pf-textarea{resize:vertical;min-height:72px}
  /* 图片字段 */
  .pf-img{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .pf-img-preview{max-width:96px;max-height:72px;border-radius:8px;border:1px solid #e5e7eb;cursor:pointer;object-fit:cover;background:#f9fafb}
  .pf-img-act{display:inline-flex;align-items:center;gap:4px;padding:8px 14px;border:1px solid var(--accent);color:var(--accent);border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;background:#fff;white-space:nowrap;min-height:36px;min-width:44px}
  .pf-img-add{background:var(--accent-soft)}
  .pf-img-del{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;color:#ef4444;border:1px solid #fecaca;border-radius:50%;cursor:pointer;font-size:14px;background:#fff;flex:none}

  /* ===== 员工工资板块也用卡片式 ===== */
  .wage-cards{display:flex;flex-direction:column;gap:12px;padding:12px 10px 80px}
  .wage-empty{text-align:center;color:var(--muted);padding:60px 20px;font-size:14px}
  .wage-card{background:#fff;border-radius:14px;border:1px solid #eef0f4;box-shadow:0 2px 8px rgba(0,0,0,.06);padding:16px 14px}
  .wage-head{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:#6b7280;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid #f0f1f4}
  .wage-head::before{content:"";display:inline-block;width:28px;height:3px;border-radius:2px;background:linear-gradient(90deg,var(--accent),#89a8f0)}
  .wage-card.promo-new{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.12)}
  .wage-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
  .wf-label{font-size:12px;color:#6b7280;font-weight:500}
  .wf-input{width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid #d1d5db;border-radius:10px;font-size:16px;background:#fff;color:#111827;outline:none;-webkit-appearance:none;appearance:none;transition:border-color .15s,box-shadow .15s;min-height:44px}
  .wf-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.12)}
  .wf-input:disabled{background:#f3f4f6;color:#9ca3af;cursor:not-allowed}
  .wf-textarea{resize:vertical;min-height:56px}

  /* 数据大屏：全部单列堆叠 */
  .dash-wrap{padding:10px}
  .dash-kpis{grid-template-columns:repeat(2,1fr)!important;gap:8px}
  .dash-grid{grid-template-columns:1fr!important;gap:10px}
  .dcard.span2{grid-column:auto}
  .dcard .chart{height:220px!important}
  .dash-title{font-size:16px}
  .dash-side{font-size:11px}

  /* ===== 主表板块：移动端卡片预览 ===== */
  .rec-cards{display:flex;flex-direction:column;gap:10px;padding:10px 8px 80px}
  .rec-card{background:#fff;border-radius:12px;border:1px solid #eef0f4;box-shadow:0 1px 5px rgba(0,0,0,.04);padding:14px 14px;transition:all .15s}
  .rec-card:active{transform:scale(.995);box-shadow:0 1px 3px rgba(0,0,0,.08)}
  .rec-card.sel{border-color:var(--accent);box-shadow:0 0 0 3px rgba(63,111,207,.12)}
  .rec-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
  .rec-id{font-family:Consolas,Menlo,monospace;font-size:14px;font-weight:700;color:var(--accent);letter-spacing:.5px}
  .rec-client{font-size:13px;color:#4b5563;font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .rec-project{font-size:15px;font-weight:600;color:#1f2937;margin-bottom:10px;line-height:1.3}
  .rec-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
  .rec-amt{font-size:16px;font-weight:700;color:#12376b;font-family:Consolas,Menlo,monospace}
  .rec-badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;letter-spacing:.02em}
  .rec-badge.ok{background:#e6f4ec;color:#15803d}
  .rec-badge.part{background:#fef3c7;color:#92400e}
  .rec-badge.pending{background:#f3f4f6;color:#6b7280}
  .rec-foot{display:flex;gap:6px;flex-wrap:wrap}
  .rec-chip{font-size:11px;padding:2px 9px;border-radius:10px;background:#f3f4f6;color:#6b7280;border:1px solid #e5e7eb}
  .rec-chip.pgdone{background:#e6f4ec;color:#15803d;border-color:#bbdec9}
  .rec-chip.pging{background:#fef3c7;color:#92400e;border-color:#fde68a}
}
/* 超小屏再收紧 */
@media (max-width:380px){
  .dash-kpis{grid-template-columns:1fr 1fr!important}
  #tabs .tab{padding:0 10px;font-size:12px}
  .promo-cards,.wage-cards{padding:8px 6px 80px}
  .promo-card,.wage-card{padding:14px 12px;border-radius:12px}
}

/* ===== 全格线：每个字段都有完整边线，逐列查看更清楚 ===== */
.grid th,.grid td{border-right:1px solid var(--rule2)}
.grid tbody td{border-bottom:1px solid #ece5d2}
.grid tr.letters th,.grid th.corner{border-right:1px solid var(--rule)}
.grid tr.groups th{border-right:1px solid color-mix(in srgb,var(--c) 25%,#fff)}
.grid tr.subhead th,.grid tr.plain-head th{border-right:1px solid var(--rule2)}
/* 冻结列在细线上再加深，滚动时边界清楚 */
.grid th.rownum{box-shadow:1px 0 0 0 var(--rule2)}
.grid tbody td.keycol{box-shadow:2px 0 0 0 var(--rule2)}
.grid tr.subhead th:nth-child(2),.grid tr.plain-head th:nth-child(2){box-shadow:2px 0 0 0 var(--rule2)}

/* ===== 收款模块：按付款状态整行着色（黑字） ===== */
.grid tbody tr.pay-done td{background:#fde047;color:#111}
.grid tbody tr.pay-none td{background:#4ade80;color:#111}
.grid tbody tr.pay-midwait td{background:#f87171;color:#111}
/* 置灰不适用格随整行底色统一，仅保留淡色文字 */
.grid tbody tr.pay-done td.na{background:#fde047!important;color:#a1820a}
.grid tbody tr.pay-none td.na{background:#4ade80!important;color:#166534}
.grid tbody tr.pay-midwait td.na{background:#f87171!important;color:#991b1b}
/* 着色行内的下拉/日期输入保持透明，文字用深色 */
.grid tbody tr.pay-done td select,.grid tbody tr.pay-done td input,
.grid tbody tr.pay-none td select,.grid tbody tr.pay-none td input,
.grid tbody tr.pay-midwait td select,.grid tbody tr.pay-midwait td input{color:#111}

/* ===== 进度板块：已完成黄 / 进行中·未开始红（黑字） ===== */
.grid tbody tr.jd-done td{background:#fde047;color:#111}
.grid tbody tr.jd-doing td{background:#f87171;color:#111}
.grid tbody tr.jd-done td.na{background:#fde047!important;color:#a1820a}
.grid tbody tr.jd-doing td.na{background:#f87171!important;color:#991b1b}
.grid tbody tr.jd-done td select,.grid tbody tr.jd-done td input,
.grid tbody tr.jd-doing td select,.grid tbody tr.jd-doing td input{color:#111}

/* ===== 结款资料：已结清黄 / 未结清红（黑字） ===== */
.grid tbody tr.st-done td{background:#fde047;color:#111}
.grid tbody tr.st-doing td{background:#f87171;color:#111}
.grid tbody tr.st-done td.na{background:#fde047!important;color:#a1820a}
.grid tbody tr.st-doing td.na{background:#f87171!important;color:#991b1b}
.grid tbody tr.st-done td select,.grid tbody tr.st-done td input,
.grid tbody tr.st-doing td select,.grid tbody tr.st-doing td input{color:#111}

/* ===== 移动端顶栏：按钮可横向滑动，不溢出、不遮挡 ===== */
@media (max-width:768px){
  .topbar{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .topbar::-webkit-scrollbar{display:none}
  .topbar>*{flex:none}
}

/* ===== 数据大屏 KPI 卡片：悬浮微交互 ===== */
.dkpi{transition:transform .18s,box-shadow .18s}
.dkpi:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.35)}
