:root{
  --blue:#2563eb; --blue-d:#1e40af; --bg:#f3f6fb; --card:#fff; --line:#e2e8f0;
  --ink:#0f172a; --dim:#64748b; --ok:#16a34a; --warn:#d97706; --danger:#dc2626;
}
*{box-sizing:border-box}
body{margin:0;font-family:"Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}
a{color:var(--blue);text-decoration:none}
/* 顶栏 */
.topbar{display:flex;align-items:center;gap:20px;padding:0 20px;height:52px;background:linear-gradient(90deg,#1e40af,#2563eb);color:#fff;position:sticky;top:0;z-index:9}
.brand{font-size:17px;font-weight:700;white-space:nowrap}
.brand a{color:#fff}.brand .sub{font-size:11px;opacity:.75;margin-left:8px;font-weight:400}
.topbar nav{display:flex;gap:4px;flex:1;overflow-x:auto}
.topbar nav a{color:#dbeafe;padding:6px 10px;border-radius:6px;font-size:13px}
/* 一级板块导航（业务/采购/财务/管理） */
.bdbar{background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:5px 20px;flex-wrap:wrap;position:sticky;top:52px;z-index:8}
.bd-chips{display:flex;gap:2px}
.bdg{padding:6px 13px;font-size:14px;color:var(--dim);border-radius:8px;font-weight:600}
.bdg.on{background:var(--blue);color:#fff}
.bd-items{display:flex;gap:2px;flex-wrap:wrap;align-items:center}
.bd-items a{padding:5px 11px;font-size:13px;color:var(--ink);border-radius:6px}
.bd-items a.on,.bd-items a:hover{background:#eff6ff;color:var(--blue-d)}
.bd-more{margin-left:6px;color:#94a3b8;font-size:12px}

.topbar nav a.on,.topbar nav a:hover{background:rgba(255,255,255,.16);color:#fff}
.topbar .gsep{color:#93c5fd}
.right{display:flex;align-items:center;gap:10px;white-space:nowrap}
.who{color:#dbeafe;font-size:12px}
.sc-form select{padding:5px 8px;border-radius:6px;border:0;font-size:13px;max-width:200px}
/* 组件 */
.btn{display:inline-block;padding:8px 16px;border:0;border-radius:8px;background:var(--blue);color:#fff;cursor:pointer;font-size:14px}
.btn:hover{background:var(--blue-d)}
.btn.small{padding:4px 10px;font-size:12px;border-radius:6px}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid #bfdbfe}
.btn.danger{background:#fff;color:var(--danger);border:1px solid #fecaca}
.page{max-width:1200px;margin:18px auto;padding:0 18px}
.page-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.page-head h2{margin:0;font-size:19px}
h3.sec{margin:22px 0 10px;font-size:15px;color:var(--blue-d)}
.dim{color:var(--dim)} .dim.small{font-size:12px}
/* 卡片 */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.card.plain{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:12px}
.card .k{color:var(--dim);font-size:12px}
.card .v{font-size:17px;font-weight:700;margin-top:6px}
.card .v.big{font-size:24px;color:var(--blue-d)}
.card .v.warn{color:var(--danger)}
a.card.link-card{display:block;text-decoration:none;color:inherit;transition:.15s}
a.card.link-card:hover{border-color:var(--blue);box-shadow:0 4px 12px rgba(30,64,175,.10)}

/* 表格 */
.tbl{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.tbl th,.tbl td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;font-size:13px}
.tbl th{background:#f8fafc;color:var(--dim);font-weight:600;white-space:nowrap}
.tbl tr:last-child td{border-bottom:0}
.tbl td.r,.tbl th.r{text-align:right;font-variant-numeric:tabular-nums}
.tbl td.l{text-align:left;font-weight:600}
.tbl tr.total td{background:#eff6ff;font-weight:700;border-top:2px solid #bfdbfe}
.tbl .strong{font-weight:700}
.matrix{min-width:100%}
/* 宽表滚动 + 客户列固定左侧 */
.tbl-scroll{overflow:auto;max-width:100%;border:1px solid var(--line);border-radius:10px}
.tbl-scroll .tbl{border:none;border-radius:0;min-width:max-content;border-collapse:separate;border-spacing:0}
.cname{position:sticky;left:0;min-width:230px;max-width:280px;background:#fff;z-index:2;box-shadow:1px 0 0 var(--line)}
th.cname{background:#f8fafc}
tr.total td.cname{background:#eff6ff}
.tbl-scroll th,.tbl-scroll td{border-right:1px solid var(--line)}

.empty{text-align:center;color:#94a3b8;padding:24px!important}
.empty-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:34px;text-align:center;margin-top:40px}
/* 标签 */
.tag{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px}
.scope-tag{background:#dbeafe;color:var(--blue-d);font-weight:700}
.group-tag{background:#ede9fe;color:#6d28d9;font-weight:700}
.tag.ok{background:#dcfce7;color:var(--ok)}
.tag.warn{background:#fef3c7;color:var(--warn)}
.tag.pur{background:#dbeafe;color:var(--blue-d)}
/* 表单 */
.inline-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.inline-form input,.inline-form select,input.mini{padding:7px 10px;border:1px solid #cbd5e1;border-radius:8px;font-size:13px}
.inline{display:inline-block;margin-left:6px}
.ck{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:var(--dim)}
/* 登录 */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#eff6ff,#e0e7ff)}
.login-card{width:340px;background:#fff;border-radius:16px;padding:34px 32px;box-shadow:0 12px 30px rgba(30,64,175,.15)}
.login-card h1{margin:0 0 4px;font-size:22px;color:var(--blue-d)}
.login-form{display:flex;flex-direction:column;gap:12px;margin-top:18px}
.login-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--dim)}
.login-form input{padding:9px 12px;border:1px solid #cbd5e1;border-radius:8px;font-size:14px}
.flashes{margin:10px auto;max-width:1200px;padding:0 18px}
.flash{background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);padding:9px 14px;border-radius:8px;margin-bottom:6px;font-size:13px}
.flash.error{background:#fef2f2;color:#b91c1c;border-left-color:#f87171}
.flash.ok{background:#f0fdf4;color:#15803d;border-left-color:#4ade80}

/* 右上角浮动消息 toast：fixed 悬浮，不占文档流、不动页面布局 */
#toastWrap{position:fixed;top:18px;right:18px;z-index:99999;display:flex;flex-direction:column;gap:10px;max-width:min(430px,calc(100vw - 40px))}
.toast{display:flex;align-items:flex-start;gap:10px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);color:var(--ink);border-radius:10px;box-shadow:0 10px 30px rgba(15,23,42,.16);padding:11px 14px;font-size:13px;line-height:1.55;animation:toastIn .22s ease-out}
.toast.ok{border-left-color:var(--ok)}
.toast.error{border-left-color:var(--danger)}
.toast.info{border-left-color:var(--blue)}
.toast .t-close{flex:none;cursor:pointer;color:#94a3b8;font-weight:700;font-size:16px;line-height:1;padding:0 2px;margin-top:1px}
.toast .t-close:hover{color:#475569}
.toast.out{opacity:0;transform:translateY(-6px);transition:opacity .2s,transform .2s}
@keyframes toastIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.foot{text-align:center;color:#94a3b8;font-size:11px;padding:22px 0 30px}
code{background:#f1f5f9;padding:2px 6px;border-radius:4px;font-size:12px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.chip{background:#eff6ff;border:1px solid #bfdbfe;color:var(--blue-d);padding:3px 10px;border-radius:20px;font-size:12px}
.v.okv{color:var(--ok)} .v.smallv{font-size:13px;word-break:break-all}
.acts{display:flex;gap:10px;margin:18px 0}
.inline-form input{min-width:110px}
.seg{display:flex;background:#e2e8f0;border-radius:8px;padding:2px}
.seg-btn{padding:5px 14px;border-radius:7px;color:var(--blue-d);font-size:13px}
.seg-btn.on{background:#fff;color:var(--blue);font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.seg-wrap{display:flex;align-items:center}
.seg-btn.plain{color:var(--blue);font-size:13px}
/* 上传：拖拽区/文件列表 */
.up-row{display:flex;align-items:center;gap:16px;margin-bottom:12px;flex-wrap:wrap}
.up-inline{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--ink)}
.up-inline select{padding:8px 10px;border:1px solid #cbd5e1;border-radius:8px;font-size:14px;min-width:220px}
.up-row .btn{margin-top:0}
.dropzone{border:2px dashed #94a3b8;border-radius:12px;padding:34px 20px;text-align:center;color:var(--dim);cursor:pointer;transition:.15s;background:#f8fafc}
.dropzone.on,.dropzone:hover{border-color:var(--blue);background:#eff6ff;color:var(--blue-d)}
.dz-icon{font-size:30px}
.dz-text{font-size:16px;margin:6px 0 4px}
.dz-text u{color:var(--blue)}
.dz-sub{font-size:12px}
.filelist{margin-top:10px;color:var(--blue-d);word-break:break-all}


/* 客户汇总核对（上传后） */
.rev-list{display:flex;flex-direction:column;gap:8px;margin:8px 0}
.rev-item{background:var(--card);border:1px solid var(--line);border-radius:10px}
.rev-item[open]{border-color:#bfdbfe}
.rev-head{display:flex;align-items:center;gap:14px;padding:10px 14px;cursor:pointer;flex-wrap:wrap}
.rev-head .cust{font-weight:700;font-size:15px}
.rev-head .op{margin-left:auto;display:flex;align-items:center;gap:6px;white-space:nowrap}
.rev-head select{padding:5px 8px;border:1px solid #cbd5e1;border-radius:7px}
.rev-body{padding:0 14px 12px}
.tbl.mini td,.tbl.mini th{padding:6px 8px;font-size:12px}
.v.warnv{color:var(--warn)}




/* 竖向双栏导航（板块栏+菜单栏，可收展；状态记忆在浏览器 localStorage） */
.layout{display:flex;align-items:flex-start;min-height:calc(100vh - 52px)}
.rails{position:sticky;top:52px;height:calc(100vh - 52px);display:flex;background:#fff;border-right:1px solid var(--line);z-index:7;overflow:hidden;flex:none}
.rail{display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;transition:width .18s ease}
.rail1{width:188px}
.rail2{width:200px;border-left:1px solid #eef2f7}
body.rail1c .rail1{width:56px}
body.rail2c .rail2{width:0;border-left:0}
.rail-head{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-bottom:1px solid var(--line);font-weight:700;font-size:13px;color:var(--ink);white-space:nowrap}
.head-btns{display:inline-flex;gap:4px}
.rail-btn{border:0;background:#eef2f7;border-radius:6px;cursor:pointer;padding:2px 7px;font-size:12px;color:var(--ink)}
.rail-btn:hover{background:#dbeafe}
.rail1 a{display:flex;align-items:center;gap:8px;padding:9px 12px;color:var(--ink);text-decoration:none;font-size:14px;margin:2px 6px;border-radius:8px;white-space:nowrap}
.rail1 a .dot{width:8px;height:8px;border-radius:50%;background:#cbd5e1;flex:none}
.rail1 a.on,.rail1 a:hover{background:var(--blue);color:#fff}
.rail1 a.on .dot,.rail1 a:hover .dot{background:#fff}
.rail2 a{padding:9px 12px;font-size:13px;color:var(--ink);text-decoration:none;border-left:3px solid transparent;margin:1px 6px;border-radius:6px;white-space:nowrap}
.rail2 a.on{background:#eff6ff;color:var(--blue-d);font-weight:600;border-left-color:var(--blue)}
body.rail1c .rail1 a span.t{display:none}
body.rail1c .rail1 a{justify-content:center;padding:11px 0;margin:2px 4px}
body.rail1c .rail1 .rail-head .t{display:none}
body.rail1c .rail1 .rail-head{justify-content:center;padding:6px 2px}
.content{flex:1;min-width:0}

/* 竖向导航布局下：内容区全宽自适应（不再限制 1200px 居中） */
.layout .page{max-width:none;width:100%;margin:16px 0 20px 0;padding:0 20px;box-sizing:border-box}
.layout .page-head{max-width:none}

/* 页面内左测竖向切换（单据台账：按客户/按业务员/明细） */
.doc-layout{display:flex;align-items:flex-start;gap:16px}
.doc-tabs{width:118px;flex:none;background:#fff;border:1px solid var(--line);border-radius:10px;padding:6px;position:sticky;top:118px}
.doc-tabs a{display:block;padding:10px 12px;border-radius:8px;color:var(--ink);font-size:13px;text-decoration:none;margin-bottom:2px;white-space:nowrap}
.doc-tabs a.on{background:var(--blue);color:#fff;font-weight:600}
.doc-main{flex:1;min-width:0}

/* 台账日期选择与快捷区间 */
.date-qk{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap}
.date-qk input[type=date]{padding:7px 8px;border:1px solid #cbd5e1;border-radius:8px;font-size:13px}
.presets{display:flex;gap:6px;align-items:center;margin:10px 0 8px;flex-wrap:wrap}
.btn.tiny{padding:3px 11px;font-size:12px;border-radius:6px}

/* 客户详情资料表单 */
.grid-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:900px}
.grid-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--dim)}
.grid-form label.span2{grid-column:1/-1}
.grid-form input,.grid-form textarea{padding:8px 10px;border:1px solid #cbd5e1;border-radius:8px;font-size:14px;color:var(--ink)}
.grid-form input:disabled,.grid-form textarea:disabled{background:#f1f5f9;color:#94a3b8}

/* 表头悬浮：页面滚动时表头吸附在顶部导航下方，不再随内容滚走 */
.tbl thead th{position:sticky;top:52px;z-index:5;background:#f8fafc}
.tbl thead th::after{content:"";position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid var(--line)}
/* 宽表容器（.tbl-scroll）内的表头跟随容器，不走页面吸附 */
.tbl-scroll .tbl thead th{position:sticky;top:0}


/* 全局表头悬浮（修正选择器）：页面滚动时表头固定在顶部导航下方 */
table.tbl th{position:sticky;top:52px;z-index:5;background:#f8fafc}
.tbl-scroll table.tbl th{top:0}
.tbl-scroll table.tbl th.cname{z-index:6}

/* ===== 表格新吸附方案：容器内滚动 + thead/tfoot 吸附 ===== */
table.tbl th{position:static}   /* 关闭旧的页面级吸附，避免错位遮挡 */
.tbl-wrap{max-height:calc(100vh - 235px);overflow-y:auto;border:1px solid var(--line);border-radius:10px;margin:4px 0}
/* 容器内表格：表头/合计 吸附固定（滚动容器为 .tbl-wrap 自身；表体 overflow/边框折叠复原避免破坏 sticky） */
.tbl-wrap table.tbl{overflow:visible;border-collapse:separate;border-spacing:0}
.tbl-wrap thead th{position:sticky;top:0;z-index:3;background:#f8fafc;box-shadow:0 1px 0 var(--line)}
.tbl-wrap tbody td,.tbl-wrap tbody th{position:relative}
.tbl-wrap tfoot td{position:sticky;bottom:0;z-index:3;background:#eff6ff;box-shadow:0 -1px 0 var(--line)}
.tbl-wrap table.tbl{border:none;border-radius:0;margin:0}
.tbl-wrap thead th{position:sticky !important;top:0 !important;z-index:6;background:#f8fafc;box-shadow:0 1px 0 var(--line)}
.tbl-wrap tbody tr:nth-child(odd){background:#fff}
.tbl-wrap tfoot td{position:sticky !important;bottom:0 !important;z-index:6;background:#eff6ff;box-shadow:0 -1px 0 #bfdbfe}


/* 长表吸附容器：separate 边框模式保证 sticky 生效 */
.tbl-wrap table.tbl{border-collapse:separate !important;border-spacing:0 !important}
.tbl-wrap thead th{background:#f8fafc;border-bottom:1px solid var(--line)}
.tbl-wrap tfoot td{background:#eff6ff;border-top:2px solid #bfdbfe}

/* ==========================================================================
   首页「工作台」块（财务模块独立实现）
   参照业务模块员工端工作台（app_v2 tokens.css .card/.money/.btn 视觉）一比一照抄，
   独立成块：不引用业务模块任何样式文件，后续财务口径修改只动本区块与 .home-* 样式
   ========================================================================== */
.home-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap;margin:2px 0 16px}
.home-title{margin:0;font-size:22px;font-weight:600;color:var(--ink);line-height:1.4}
/* 统计卡（白底圆角 + 细阴影；灰小标题 + 等宽大数字，口径同业务端 4 卡） */
.home-stats{display:flex;gap:16px;flex-wrap:wrap}
.home-stat{flex:1 1 180px;min-width:170px;background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.08);padding:14px 16px}
.home-k{font-size:13px;color:var(--dim);font-weight:500;margin-bottom:8px}
.home-num{font-family:Consolas,"SF Mono","Courier New",monospace;font-size:24px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.home-num.up{color:var(--ok)}
.home-num.down{color:var(--danger)}
/* 快捷入口按钮行（同业务端 .card + .btn/.btn-primary） */
.home-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.08);padding:12px 16px;margin-top:16px}
.home-btn{display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 16px;border-radius:6px;border:1px solid #e3e9f2;background:#fff;color:#374151;font-size:14px;cursor:pointer;white-space:nowrap;transition:all .15s}
.home-btn:hover{border-color:var(--blue);color:var(--blue)}
.home-btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.home-btn.primary:hover{background:var(--blue-d);border-color:var(--blue-d);color:#fff}

/* ============ 银行流水模块 ============ */
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff}
.rowform{display:inline-flex;gap:4px;align-items:center;flex-wrap:wrap}
.rowform select.mini{width:66px;padding:3px 4px}
.rowform input.mini[list]{width:150px}
.rowform input.mini{padding:3px 6px;border:1px solid #cbd5e1;border-radius:6px;font-size:12px}
.rowform .btn.tiny{padding:3px 8px;font-size:12px;line-height:1.4}
.pager{display:flex;align-items:center;gap:10px;margin:12px 0}
.pager .dim{font-size:13px}
table.tbl input.mini{padding:3px 6px;border:1px solid #cbd5e1;border-radius:6px;font-size:12px}
.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn.primary:hover{background:var(--blue-d);border-color:var(--blue-d);color:#fff}
.tbl tr.hint td{background:#f0f7ff}

/* 二级导航缩放（窄条模式，wb_rail2n 记忆）——窄/全按钮始终可见，可随时还原 */
body.rail2n .rail2{width:76px}
body.rail2n .rail2 a{font-size:11px;padding:8px 2px;text-align:center;overflow:hidden;white-space:nowrap}
body.rail2n .rail2 .rail-head{justify-content:center;padding:6px 2px}
body.rail2n .rail2 .rail-head .t{display:none}

/* ===== 任务四象限（2026-09-08）===== */
.quad-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:14px}
.quad-card{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:10px;padding:12px 14px;min-height:150px}
.quad-card:nth-child(1){border-left-color:var(--danger)}
.quad-card:nth-child(2){border-left-color:var(--ok)}
.quad-card:nth-child(3){border-left-color:var(--warn)}
.quad-card header{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--line);padding-bottom:8px}
.quad-card .q-name{font-weight:700}
.q-items{list-style:none;margin:8px 0 0;padding:0}
.q-items li{border:1px solid #eef2f7;border-radius:8px;padding:8px 10px;margin-bottom:8px;background:#fbfdff}
.q-t{display:flex;justify-content:space-between;gap:8px;align-items:baseline;flex-wrap:wrap}
.q-meta{display:flex;gap:12px;margin:3px 0 6px;flex-wrap:wrap}
.q-empty{color:#94a3b8;text-align:center;padding:10px;border:0 !important;background:none !important}
.due-late{color:var(--danger);font-weight:700}

/* ===== 全局字号 +1 / 导航加大加粗（2026-09-08 用户）===== */
body{font-size:15px}
.tbl th,.tbl td{font-size:14px}
.tag{font-size:12px}
.chip{font-size:13px}
.dim.small{font-size:13px}
.btn.small{font-size:13px}
.card .k{font-size:13px}
.card .v{font-size:18px}
.rail-head{font-size:14px}
.rail1 a{font-size:15px;font-weight:700}
.rail2 a{font-size:14px;font-weight:600}
.rail2 a.on{font-weight:700}
.home-k{font-size:14px}

/* ===== 商品模块（2026-09：跨公司库存查询/台账） ===== */
.stock-hero{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px 20px;box-shadow:0 1px 3px rgba(0,0,0,.06);margin:2px 0 14px}
.stock-hero form{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.stock-hero input[type=text]{flex:1;min-width:280px;padding:11px 16px;font-size:16px;border:1px solid #cbd5e1;border-radius:10px;outline:none;background:#fff;color:var(--ink)}
.stock-hero input[type=text]:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.stock-hero form .btn{height:44px;padding:0 26px;font-size:15px;border-radius:10px}
.stock-note{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;color:var(--dim);font-size:13px}
.qty-pos{color:var(--ok);font-weight:700}
.qty-zero{color:#cbd5e1}
.qty-neg{color:var(--danger);font-weight:700}
