:root{
  --nav:#102744; --nav2:#1b3a63; --bg:#f4f6fa; --card:#fff; --line:#e5e9f1;
  --text:#1c2738; --muted:#7a879b; --brand:#2563a8; --brand2:#eaf2fc;
  --ok:#12805c; --warn:#b96a00; --danger:#c02f3b; --shadow:0 2px 12px rgba(20,40,70,.07);
}
*{box-sizing:border-box}
body{margin:0;font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:var(--text);background:var(--bg)}
.hidden{display:none!important}
button,input,select,textarea{font-family:inherit;font-size:14px}
h1,h2,h3{margin:0}
a{color:var(--brand);text-decoration:none}

/* 登录 */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:radial-gradient(1200px 600px at 20% 0%,#22446e 0%,#102744 55%,#0b1b31 100%)}
.login-card{width:100%;max-width:430px;background:#fff;border-radius:16px;padding:30px 30px 22px;box-shadow:0 20px 60px rgba(0,0,0,.28)}
.login-brand{display:flex;gap:14px;align-items:center;margin-bottom:16px}
.logo{width:48px;height:48px;border-radius:12px;background:linear-gradient(135deg,#2f7bc4,#153c6b);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;flex:none}
.logo.sm{width:30px;height:30px;border-radius:8px;font-size:15px}
.login-brand h1{font-size:20px;letter-spacing:.5px}
.login-brand p{margin:2px 0 0;color:var(--muted);font-size:12px}
.login-note{background:#fff7e8;color:#8a5a00;border:1px solid #f3dfb8;border-radius:8px;padding:8px 10px;font-size:12px;margin-bottom:18px}
.field{margin-bottom:14px}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.field-head{display:flex;justify-content:space-between;align-items:center}
.show-pass{font-size:12px!important;color:var(--muted);cursor:pointer;margin:0 0 5px 0!important;display:flex;align-items:center;gap:4px}
.show-pass input{width:auto!important;margin:0}
input,select,textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);outline:none}
input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(37,99,168,.1)}
.captcha-row{display:flex;gap:10px;align-items:flex-end}
.captcha-row>div{flex:1}
.captcha-row img{width:140px;height:44px;border:1px solid var(--line);border-radius:8px;cursor:pointer;object-fit:cover}
.btn{border:1px solid var(--line);background:#fff;color:var(--text);padding:8px 14px;border-radius:8px;cursor:pointer;transition:.15s;white-space:nowrap}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:#1c528d;color:#fff}
.btn.ghost{background:transparent}
.btn.sm{padding:4px 9px;font-size:12px;border-radius:6px}
.btn.danger{color:var(--danger);border-color:#f0c6ca}
.btn.block{width:100%;padding:11px;font-size:15px;letter-spacing:3px}
.quick{margin-top:18px;border-top:1px dashed var(--line);padding-top:14px}
.quick-title{font-size:12px;color:var(--muted);margin-bottom:8px}
.quick-list{display:flex;flex-wrap:wrap;gap:6px}
.quick-list button{border:1px solid var(--line);background:#f8fafd;border-radius:20px;padding:6px 12px;font-size:12px;cursor:pointer;color:var(--nav2)}
.quick-list button:first-child{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.quick-list button:hover{border-color:var(--brand);color:var(--brand)}
.quick-list button:first-child:hover{color:#fff;filter:brightness(1.08)}
.quick-pass{margin-top:10px;font-size:12px;color:var(--muted);line-height:1.6}
.quick-pass b{color:var(--nav2);font-size:13px;letter-spacing:.4px}
.quick-pass span{color:var(--brand)}
.login-foot{margin-top:16px;text-align:center;font-size:11px;color:#a4adbb}

/* 布局 */
.app{display:flex;min-height:100vh}
.side{width:216px;flex:none;background:var(--nav);color:#c7d5e8;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.side-brand{display:flex;align-items:center;gap:10px;padding:18px 16px 4px;color:#fff;font-size:16px}
.side-sub{padding:0 16px 14px;font-size:11px;color:#7f9cc0}
.side nav{flex:1;overflow:auto;padding:4px 10px}
.nav-group{font-size:11px;color:#6f8cb2;padding:12px 10px 4px;letter-spacing:1px}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:8px;cursor:pointer;font-size:13px;margin-bottom:2px}
.nav-item:hover{background:var(--nav2);color:#fff}
.nav-item.on{background:#2b5c95;color:#fff;font-weight:600}
.nav-item .ico{width:18px;text-align:center;font-size:14px}
.side-foot{padding:12px 16px;font-size:11px;color:#6f8cb2;border-top:1px solid #1e3b60;line-height:1.7}
.main{flex:1;min-width:0}
.top{height:62px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;
  justify-content:space-between;padding:0 22px;position:sticky;top:0;z-index:20}
.top-title h2{font-size:17px}
.top-title span{font-size:11px;color:var(--muted)}
.top-actions{display:flex;align-items:center;gap:12px}
.icon-btn{position:relative;border:0;background:transparent;font-size:18px;cursor:pointer;padding:4px}
.dot{position:absolute;right:2px;top:2px;width:7px;height:7px;background:#d33;border-radius:50%}
.who{text-align:right;line-height:1.3}
.who b{display:block;font-size:13px}
.who small{color:var(--muted);font-size:11px}
.content{padding:20px 22px 50px;max-width:1500px}
.loading{padding:40px;text-align:center;color:var(--muted)}

/* 卡片与表格 */
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:var(--shadow)}
.card h3{font-size:14px;margin-bottom:12px;display:flex;justify-content:space-between;align-items:center}
.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px 16px;box-shadow:var(--shadow)}
.kpi .lab{font-size:12px;color:var(--muted)}
.kpi .val{font-size:25px;font-weight:700;margin-top:6px;letter-spacing:-.5px}
.kpi .sub{font-size:11px;color:var(--muted);margin-top:4px}
.kpi.accent{border-left:3px solid var(--brand)}
.kpi.warn{border-left:3px solid #d99a2b}
.kpi.danger{border-left:3px solid #c02f3b}
.kpi.good{border-left:3px solid #12805c}
.kpi.clickable,.card.clickable{cursor:pointer;transition:box-shadow .15s,border-color .15s,transform .15s}
.kpi.clickable:hover,.card.clickable:hover{border-color:var(--brand);box-shadow:0 6px 20px rgba(31,91,181,.14);transform:translateY(-1px)}
.kpi-go{color:var(--brand);font-weight:600;margin-left:6px;white-space:nowrap}
.todo-strip{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 0}
.todo-strip .btn{background:#f4f7fc;border-color:#dbe4f2}
/* 2026-11-08：todo-strip 浅底会覆盖 .btn.primary 的深蓝底但留白字，导致文字看不见；按用户要求主按钮文字改黑色 */
.todo-strip .btn.primary{background:#f4f7fc;border-color:#dbe4f2;color:#111}
.todo-strip .btn.primary:hover{background:#e8f0fb;color:#111}
.focus-card{border-left:3px solid #d99a2b;background:linear-gradient(180deg,#fffdf7,#fff)}
.focus-card .remind-head b{color:#a05d00}
.remind-card .tbl-wrap{margin-top:10px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{background:#f7f9fc;color:#5b6b82;font-weight:600;text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:9px 10px;border-bottom:1px solid #f0f2f7;vertical-align:top}
tr:hover td{background:#fafcff}
.tbl-wrap{overflow:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
.tbl-wrap table{min-width:640px}
.right{text-align:right}.center{text-align:center}
.tag{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;line-height:1.7;white-space:nowrap}
.tag.blue{background:#e8f2ff;color:#1b5cab}.tag.green{background:#e5f6ee;color:#0d6b4d}
.tag.orange{background:#fff1dc;color:#9a5d00}.tag.red{background:#fde9eb;color:#ab2431}
.tag.gray{background:#eef1f5;color:#607087}
/* v104：账号管理按「总公司 / 电商部」两级呈现 —— 部门是小 chip，岗位才是角色值 */
.dept-chip{display:inline-block;padding:1px 7px;margin-right:4px;border-radius:5px;
  background:#eef1f5;color:#5b6b80;font-size:11px;line-height:1.7;white-space:nowrap}
.role-scope{margin-top:10px;padding:8px 11px;border-radius:8px;background:#f4f8ff;
  border:1px solid #dbe7f7;font-size:12px;line-height:1.65;color:#31506e}
.role-scope b{color:#1b4f8d}
option,optgroup{font-family:inherit}
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:9px;font-size:12px}
.bar-row .lab{width:62px;color:var(--muted);flex:none}
.bar-row .track{flex:1;background:#eef2f7;height:9px;border-radius:6px;overflow:hidden}
.bar-row .fill{height:100%;background:linear-gradient(90deg,#3d82ca,#1b4f8d);border-radius:6px}
.bar-row .num{width:88px;text-align:right;font-variant-numeric:tabular-nums}
.section-title{font-size:13px;font-weight:600;margin:22px 0 10px;color:#33445c}
.empty{padding:30px;text-align:center;color:var(--muted);font-size:13px}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.toolbar .spacer{flex:1}
.note{background:#eef5ff;border-left:3px solid var(--brand);padding:10px 12px;border-radius:6px;font-size:12px;color:#33527a;margin-bottom:14px}
.note.warn{background:#fff7e8;border-color:#d99a2b;color:#8a5a00}
.kv{display:grid;grid-template-columns:110px 1fr;gap:8px 12px;font-size:13px}
.kv .k{color:var(--muted)}

/* 弹窗 */
.modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:16px}
.modal-mask{position:absolute;inset:0;background:rgba(10,25,45,.5)}
.modal-box{position:relative;background:#fff;border-radius:14px;width:min(720px,100%);max-height:88vh;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.3)}
.modal-box.wide{width:min(1080px,100%)}
/* v52b 筛选栏极限压缩：单流换行布局，标签贴在控件左侧，字段与按钮挤进两排 */
.of-bar{padding:8px 10px;margin-bottom:12px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.of-bar .form-row{display:contents}
.of-bar .form-row>div{display:flex;align-items:center;gap:5px;min-width:0}
.of-bar label{font-size:11px;margin:0;white-space:nowrap}
.of-bar input,.of-bar select{padding:3px 7px;font-size:12px;border-radius:6px;width:auto;min-width:96px}
.of-bar input[id$="-kw"]{min-width:180px;flex:1}
.of-bar .ssel{min-width:110px}
.of-bar .toolbar{margin:0!important;gap:6px}
.of-bar .toolbar .spacer{display:none}
/* v54 修复：全局 input width:100% 把「全选」复选框拉满整行，框与文字被撑开 */
.pick-all{gap:4px}
.pick-all input{width:16px;height:16px;flex:none;margin:0;accent-color:var(--brand)}
.of-bar .small.muted{margin-right:2px}
.of-bar .note{flex-basis:100%;margin:0}
/* v52 可搜索下拉：外壳 + 过滤列表 */
.ssel{position:relative}
.ssel .ssel-q{padding:4px 8px;font-size:12px;border-radius:6px;width:100%}
.ssel-list{position:absolute;top:calc(100% + 2px);left:0;right:0;max-height:220px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 30px rgba(20,40,70,.18);
  z-index:80;padding:4px;font-size:12px}
.ssel-item{padding:5px 8px;border-radius:5px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ssel-item:hover{background:var(--brand2)}
.ssel-item.on{color:var(--brand);font-weight:600}
.ssel-none{padding:6px 8px;color:var(--muted)}
.pick-all{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.order-pick{width:16px;height:16px;cursor:pointer;accent-color:var(--brand)}
.order-pick:disabled{cursor:not-allowed;opacity:.4}
button:disabled{opacity:.5;cursor:not-allowed}
.merge-table{min-width:820px}
.merge-table tr.grp-start td{border-top:2px solid #cfd9e6}
.merge-table tr.merge-total td{background:#f2f6fc}
/* 客户待收对账单：10 列更宽，每单小计行 + 大写行 */
.merge-table.debt-table{min-width:1000px}
.merge-table tr.sub-sum td{background:#f7fafd;border-top:1px dashed #cfd9e6}
.merge-table tr.upper-row td{background:#fbfcfe;letter-spacing:1px}
.merge-head{border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:12px;background:#fff}
.mh-company{font-size:12px;color:var(--muted)}
.mh-title{font-size:18px;font-weight:700;text-align:center;letter-spacing:3px;margin:4px 0 14px;color:#243b58}
/* v52b：窄屏下单流自动换行，原三列栅格媒体查询已不需要 */
.modal-head{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.modal-head h3{font-size:16px}
.x{cursor:pointer;font-size:24px;color:var(--muted);line-height:1}
.modal-body{padding:18px 20px;overflow:auto;flex:1}
.modal-foot{padding:12px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}
.form-row{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.form-row.one{grid-template-columns:1fr}
.form-row label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}
/* 弹窗里的紧凑筛选条：标签贴着输入框，一行排开（v46 修复日志台账排版错乱） */
.filter-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0 10px}
.filter-bar label{font-size:13px;color:var(--text);white-space:nowrap;margin:0}
.filter-bar input,.filter-bar select{width:auto;min-width:130px}
.filter-bar .cnt{margin-left:auto;font-size:12px;color:var(--muted)}
.line{border:1px solid var(--line);border-radius:9px;padding:10px;margin-bottom:9px;background:#fbfcfe}
.line .lh{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;color:var(--muted)}
.line-grid{display:grid;grid-template-columns:2fr .55fr .95fr .95fr 1.4fr auto;gap:8px;align-items:end}
.line-grid label{font-size:11px;color:var(--muted);display:block;margin-bottom:3px}
/* 行总价：只读展示，= 数量 × 单价 */
.l-amt .l-amount{height:34px;line-height:32px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:#f7f9fc;font-weight:600;color:var(--brand);text-align:right;white-space:nowrap}
.hint-box{background:#f3f8ff;border:1px solid #d8e7fa;border-radius:8px;padding:10px;font-size:12px;margin-top:8px}
.hint-box .hh{font-weight:600;color:#1b5cab;margin-bottom:6px}
.pick{display:inline-block;border:1px solid #c9dcf5;background:#fff;color:#1b5cab;border-radius:6px;padding:3px 8px;margin:3px 5px 0 0;cursor:pointer;font-size:12px}
.pick:hover{background:#e8f2ff}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:#1d324e;color:#fff;
  padding:10px 18px;border-radius:9px;z-index:200;box-shadow:0 8px 30px rgba(0,0,0,.25);font-size:13px}
.toast.bad{background:#a82734}
.money{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}.small{font-size:12px}
.stack{display:flex;flex-direction:column;gap:10px}

/* ---- 客户管理：跟进提醒 / 自动标签 / 客户详情 / 地址带出 ---- */
.cust-link{color:var(--brand);font-weight:600;cursor:pointer;text-decoration:none;border-bottom:1px dashed var(--brand)}
.cust-link:hover{color:#1c528d}
.danger-text{color:var(--danger);font-weight:600}
.remind-card{margin-bottom:14px}
.remind-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.remind-head b{font-size:14px}
.remind-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.remind-bar .spacer{flex:1}
.remind-bar input[type=number]{width:118px;padding:6px 9px;border:1px solid var(--line);border-radius:7px;font-size:12px}
.addr-card{background:#f4f9ff;border:1px solid #d8e7fa;border-radius:9px;padding:10px 12px;margin:10px 0 0;font-size:12px;line-height:1.7}
.addr-label{font-weight:600;color:#1b5cab;margin-bottom:4px}
.addr-body{font-size:13px;color:#22364d;margin-bottom:4px}
.follow-form{background:#f7faff;border:1px solid var(--line);border-radius:9px;padding:12px;margin-bottom:12px}
.follow-form textarea{width:100%;margin-top:4px}
.follow-timeline{display:flex;flex-direction:column;gap:8px}
.follow-item{border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:7px;padding:9px 12px;font-size:13px;line-height:1.6}
.order-fold summary{cursor:pointer;color:var(--brand);font-size:12px;white-space:nowrap}
.order-fold .tbl-wrap{margin-top:8px;min-width:420px}
.order-fold .tbl-wrap table{min-width:420px}

@media(max-width:900px){
  .g4{grid-template-columns:repeat(2,1fr)}.g3,.g2{grid-template-columns:1fr}
  .app{display:block}
  .side{width:100%;height:auto;position:static;padding-bottom:6px}
  .side-brand{padding:12px 14px 0}.side-sub,.side-foot{display:none}
  .side nav{display:flex;overflow-x:auto;padding:6px 10px;gap:4px}
  .nav-group{display:none}
  .nav-item{flex:none;white-space:nowrap;margin:0;padding:7px 11px}
  .nav-item .ico{display:none}
  .top{height:54px;padding:0 14px}.content{padding:14px}
  .form-row{grid-template-columns:1fr}
  .line-grid{grid-template-columns:1fr 1fr;gap:6px}
  .line-grid>div:first-child,.line-grid .l-note-wrap{grid-column:1/-1}
  .who{display:none}
  .remind-bar .spacer{display:none}
  .remind-bar input[type=number]{width:100px}
}
@media(max-width:600px){
  .g4{grid-template-columns:1fr}
  .kpi .val{font-size:22px}
  .todo-strip .btn{flex:1 1 46%}
  .focus-card .tbl-wrap table{min-width:620px}
}

/* ---- 销售单：A4 屏幕预览 + 浏览器打印（HP M1136 黑白单面） ---- */
.sheet-wrap{position:fixed;inset:0;z-index:200;background:#eef1f6;display:flex;flex-direction:column}
.sheet-bar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 2px 8px rgba(0,0,0,.05);flex-wrap:wrap}
.sheet-bar .spacer{flex:1}
.sheet-sub{font-size:12px;color:var(--muted)}
.sheet-scroll{flex:1;overflow:auto;padding:20px;display:flex;justify-content:center;align-items:flex-start}
.sheet-paper{background:#fff;width:210mm;min-height:297mm;padding:16mm 14mm;box-shadow:0 8px 30px rgba(0,0,0,.14);color:#111;font-family:"Microsoft YaHei","SimSun",sans-serif}
.sh-company{text-align:center;font-size:13px;margin-bottom:2px}
.sh-title{text-align:center;font-size:22px;font-weight:700;letter-spacing:8px;margin-bottom:14px}
.sh-meta{display:grid;grid-template-columns:1fr 1fr;gap:5px 18px;font-size:12px;margin-bottom:12px}
.sh-meta div{display:flex;gap:6px}
.sh-meta b{min-width:62px;font-weight:600;white-space:nowrap}
.sh-table{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}
.sh-table th,.sh-table td{border:1px solid #333;padding:6px 5px;line-height:1.45;word-break:break-word}
.sh-table th{background:#f2f2f2;font-weight:600}
.sh-table td.num{text-align:right}
.sh-table td.c{text-align:center}
.sh-total{text-align:right;font-size:13px;font-weight:700;padding:9px 4px}
/* 2026-11-08：合计应收 / 大写金额 直接做进销售单表格（tfoot） */
.sh-table tfoot tr.sh-sum td{font-weight:700;background:#f7f7f7;border-top:1.5px solid #333}
.sh-table tfoot td.sum-upper{text-align:left;font-size:12px;letter-spacing:1px}
.sh-note{font-size:12px;min-height:32px;margin-top:6px}
.sh-sign{display:grid;grid-template-columns:1fr 1fr;gap:24px;font-size:12px;margin-top:26px}
.sh-sign>div{border-top:1px solid #333;padding-top:6px}
.sh-foot{margin-top:20px;text-align:right;font-size:11px;color:#555}
@media print{
  @page{size:A4;margin:12mm}
  html,body{background:#fff!important}
  body.sheet-open #login,body.sheet-open #app,body.sheet-open #modal,body.sheet-open #toast{display:none!important}
  body.sheet-open .sheet-wrap{position:static!important;inset:auto!important;background:#fff!important;display:block!important;z-index:auto!important}
  .no-print{display:none!important}
  .sheet-scroll{overflow:visible!important;padding:0!important;display:block!important}
  .sheet-paper{width:100%!important;min-height:0!important;box-shadow:none!important;padding:0!important;margin:0!important}
  .sh-table th{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .sh-table thead{display:table-header-group}
  .sh-table tr{page-break-inside:avoid}
}

/* ---- 开单：单价框聚焦即弹出历史成交价悬浮卡片 ---- */
.price-pop{position:fixed;z-index:300;width:330px;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);overflow-y:auto;overscroll-behavior:contain;box-sizing:border-box;background:#fff;border:1px solid #c9dcf5;border-radius:10px;box-shadow:0 12px 36px rgba(20,50,90,.22);padding:12px;font-size:12px;color:var(--text)}
.pp-head{font-weight:700;color:var(--brand);margin-bottom:2px}
.pp-sub{color:var(--muted);font-size:11px;margin-bottom:8px}
.pp-suggest{background:#f0f7ff;border-radius:6px;padding:6px 8px;margin-bottom:6px}
.pp-item{display:flex;justify-content:space-between;gap:8px;align-items:center;border:1px solid var(--line);border-radius:7px;padding:7px 9px;margin-top:6px;cursor:pointer;background:#f8fbff}
.pp-item:hover{border-color:var(--brand);background:#eaf2fc}
.pp-item b{font-size:14px;color:var(--brand);white-space:nowrap}
.pp-item small{color:var(--muted);display:block;font-size:11px;margin-top:2px}
.pp-empty{color:var(--muted);padding:8px 0}
.pp-foot{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line);color:var(--muted);font-size:11px;line-height:1.5}
@media (max-width:768px){.price-pop{width:calc(100vw - 16px)}}
@media print{#price-pop{display:none!important}}
/* 销售单明细：行备注列（长文本自动换行，行不拆页） */
.sh-table td.nt{font-size:11px;color:#333;white-space:pre-wrap}

/* 第 10 项拍板：合并明细表打印 —— 只打印弹窗内抬头与明细，隐藏其余界面与按钮 */
@media print{
  body.merge-print-open #login,body.merge-print-open #app,body.merge-print-open #sheet,
  body.merge-print-open #price-pop,body.merge-print-open #toast{display:none!important}
  body.merge-print-open #modal{position:static!important;display:block!important;background:#fff!important}
  body.merge-print-open .modal-mask,body.merge-print-open .modal-head,
  body.merge-print-open .modal-foot,body.merge-print-open .no-print{display:none!important}
  body.merge-print-open .modal-box{position:static!important;width:100%!important;max-width:none!important;
    max-height:none!important;box-shadow:none!important;border:0!important;margin:0!important;padding:0!important}
  body.merge-print-open .modal-body{overflow:visible!important;max-height:none!important;padding:0!important}
  body.merge-print-open .toolbar{display:none!important}
  body.merge-print-open .tbl-wrap{overflow:visible!important}
  body.merge-print-open .merge-table thead{display:table-header-group}
  body.merge-print-open .merge-table tr{page-break-inside:avoid}
}

/* ---- 2026-11-08 配送方式（快递 / 自取 / 送货上门 / 上门安装）：正常大小按钮 ---- */
.mode-seg{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 4px}
.seg-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:7px;
  padding:5px 12px;font-size:13px;line-height:1.4;cursor:pointer;background:#fff;color:#333}
.seg-btn:hover{border-color:#c9dcf5;background:#f6faff}
.seg-btn input{display:none}
.seg-btn.on{border-color:var(--brand);color:var(--brand);background:#f2f8ff;font-weight:600;
  box-shadow:0 0 0 1px var(--brand) inset}
/* 安装费列：只有选「上门安装」时才出现，位置在单价之后 */
.l-install{display:none}
.show-install .l-install{display:block}
/* 安装单列序：商品 数量 单价 安装费 备注 删除 */
.show-install .line-grid{grid-template-columns:1.4fr .5fr .8fr .8fr 1.3fr auto}
.l-other{margin-top:4px}
@media(max-width:900px){.show-install .line-grid{grid-template-columns:1fr 1fr}}

/* ---------------- 列表分页条（所有列表页统一） ---------------- */
.pager{display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  padding:10px 4px 2px;border-top:1px solid #eef2f8;margin-top:8px}
.pager .spacer{flex:1}
.pager .btn.sm{min-width:auto}
.pager select.pg-size{width:auto;margin:0;padding:4px 8px;font-size:12px;height:auto}
.pager .small{white-space:nowrap}
@media(max-width:720px){.pager{gap:4px}.pager .btn.sm{padding:3px 7px}}

/* ---------- 电商运营：紧凑工具栏 + 店铺登记进度条（2026-11-09 v39） ---------- */
.toolbar.slim{gap:6px;margin-bottom:8px}
.toolbar.slim input,.toolbar.slim select{padding:4px 8px;font-size:12px;border-radius:6px;width:auto}
.toolbar.slim .btn.sm{padding:3px 8px;font-size:12px}
.toolbar.slim .vbar{width:1px;height:18px;background:var(--line);margin:0 2px}
.note.slim-note{padding:6px 10px;font-size:12px;margin-bottom:10px}
.reg-strip{background:var(--card);border:1px solid var(--line);border-radius:10px;
  padding:8px 12px;margin-bottom:10px;box-shadow:var(--shadow)}
.reg-strip-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.reg-chips{display:flex;flex-wrap:wrap;gap:6px}
.reg-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;
  border:1px solid var(--line);background:#fff;color:var(--text);font-size:12px;cursor:pointer}
.reg-chip i{font-style:normal;font-size:11px;padding:0 6px;border-radius:999px;color:#fff}
.reg-chip.reg-done i{background:var(--ok)}
.reg-chip.reg-partial i{background:var(--warn)}
.reg-chip.reg-none i{background:var(--danger)}
.reg-chip:hover{border-color:var(--brand);box-shadow:0 0 0 2px rgba(37,99,168,.12)}
.warn-text{color:var(--warn)}
.good-text{color:var(--ok);font-weight:600}
/* 近三月趋势对比：月份数字下的简易条形（宽度由 --w 百分比控制） */
.trend-bar{display:inline-block;vertical-align:baseline;height:7px;width:var(--w,0%);min-width:2px;
  background:linear-gradient(90deg,var(--brand),#7fb1e8);opacity:.45;border-radius:3px;margin-right:4px}

/* ---------- 店铺每日运营日志 + 平台活动标签（2026-11-09 v40） ---------- */
/* 全局醒目提醒条：未写日志时顶在每一页最上方，红底闪动，无法忽略 */
.shoplog-alert{display:flex;align-items:center;gap:10px;padding:9px 16px;margin:0 20px 0;
  border-radius:0 0 10px 10px;background:linear-gradient(90deg,#c02f3b,#e0553f);
  color:#fff;font-size:13px;box-shadow:0 3px 14px rgba(192,47,59,.35);
  position:sticky;top:0;z-index:60;animation:sla-pulse 1.8s ease-in-out infinite}
.shoplog-alert.hidden{display:none}
.shoplog-alert b{font-size:14px}
.shoplog-alert .sla-icon{width:20px;height:20px;flex:0 0 20px;border-radius:50%;
  background:#fff;color:var(--danger);font-weight:800;display:flex;align-items:center;justify-content:center}
.shoplog-alert .sla-sub{opacity:.92;font-size:12px}
.shoplog-alert .btn.sm{background:#fff;color:var(--danger);border:0;font-weight:600}
@keyframes sla-pulse{0%,100%{box-shadow:0 3px 14px rgba(192,47,59,.35)}
  50%{box-shadow:0 3px 22px rgba(192,47,59,.7)}}

/* 今日日志状态条 */
.log-strip{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--ok);
  border-radius:10px;padding:8px 12px;margin-bottom:10px;box-shadow:var(--shadow)}
.log-strip.has-miss{border-left-color:var(--danger);background:#fff8f8}
.log-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;
  border:1px solid var(--line);background:#fff;color:var(--text);font-size:12px;cursor:pointer}
.log-chip i{font-style:normal;font-size:11px;padding:0 6px;border-radius:999px;color:#fff}
.log-chip.ok i{background:var(--ok)}
.log-chip.abn i{background:var(--warn)}
.log-chip.miss{border-color:#f0b8bd;background:#fff}
.log-chip.miss i{background:var(--danger)}
.log-chip.miss{animation:sla-pulse 2.2s ease-in-out infinite}
.log-chip:hover{border-color:var(--brand);box-shadow:0 0 0 2px rgba(37,99,168,.12)}

/* 店铺运营面板 */
.shop-meta{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 10px;
  background:var(--brand2);border-radius:8px;font-size:13px;margin-bottom:10px}
.panel-sec{display:flex;align-items:center;gap:10px;margin:14px 0 6px;padding-bottom:5px;
  border-bottom:1px solid var(--line);font-size:13px}
.act-tags{display:flex;flex-wrap:wrap;gap:6px}
.act-tag{padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:#fff;
  color:var(--muted);font-size:12px;cursor:pointer;line-height:1.6}
.act-tag:hover{border-color:var(--brand);color:var(--brand)}
.act-tag.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.act-tag u{text-decoration:none;opacity:.7;font-size:10px;margin-left:3px}
.log-miss{background:#fff5f5;border:1px solid #f0b8bd;border-left:4px solid var(--danger);
  border-radius:8px;padding:9px 12px;margin-bottom:10px;color:#8d2430;font-size:13px}

/* ---------- 工作台双看板（线下 / 电商老板看板，2026-11-09 v41） ---------- */
.dash-tabs{display:flex;gap:8px;margin:0 0 12px;padding:5px;background:#e9eef7;border-radius:12px;width:fit-content}
.dash-tab{display:flex;flex-direction:column;gap:1px;align-items:flex-start;
  padding:7px 16px;border:1px solid transparent;border-radius:9px;background:transparent;
  color:var(--muted);cursor:pointer;line-height:1.35;text-align:left}
.dash-tab b{font-size:14px;color:var(--text)}
.dash-tab span{font-size:11px;color:var(--muted)}
.dash-tab:hover{background:#fff}
.dash-tab.on{background:#fff;border-color:var(--line);box-shadow:var(--shadow)}
.dash-tab.on b{color:var(--brand)}
.dash-tab.on span{color:var(--brand)}
.board-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  flex-wrap:wrap;margin:2px 0 12px}
.board-head h3{margin:0 0 2px;font-size:17px}
.board-alert{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 14px;margin-bottom:12px;
  background:#fff5f5;border:1px solid #f0b8bd;border-left:4px solid var(--danger);border-radius:10px;
  color:#8d2430;font-size:13px}
.board-alert .sep{color:#d9a1a7}
.board-ok{padding:8px 14px;margin-bottom:12px;background:#f1faf5;border:1px solid #bce4d1;
  border-left:4px solid var(--ok);border-radius:10px;color:#0f6a4b;font-size:13px}
.up-text{color:var(--danger);font-weight:600}   /* 涨=红（国内习惯） */
.down-text{color:var(--ok);font-weight:600}
.bar-row .fill.gross{background:linear-gradient(90deg,#63a4e0,#8fc4ee)}
.bar-row.sub-bar .track{height:5px;margin-top:1px}
.bar-row.sub-bar .num{font-size:11px}
.kpi .val.danger-text{color:var(--danger)}

/* ---------- v43：商品模糊选择器 / 店铺运营面板重排 / 看板模块拖拽 ---------- */

/* 商品选择：输入即筛选，点一下选中；浮层挂 body 上，避免被表格滚动区裁切 */
.pcombo-list{position:fixed;z-index:300;max-height:252px;overflow:auto;background:#fff;
  border:1px solid var(--line);border-radius:9px;box-shadow:0 14px 34px rgba(10,30,60,.2);padding:4px}
.pc-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 9px;
  border-radius:6px;font-size:13px;cursor:pointer;line-height:1.4}
.pc-item:hover{background:var(--brand2);color:var(--brand)}
.pc-item .pc-cost{font-size:11px;color:var(--muted);white-space:nowrap}
.pc-item:hover .pc-cost{color:var(--brand)}
.pc-empty{padding:10px;font-size:12px;color:var(--muted);text-align:center}
.es-prod{width:100%}
.es-cost{font-variant-numeric:tabular-nums;white-space:nowrap}
.es-amt{text-align:right}
.es-row .es-qty{width:88px}

/* 登记进度片：未登记 / 部分登记 = 点一下直接去登记 */
.reg-chip.reg-none{border-color:#f0b8bd;background:#fff8f8}
.reg-chip.reg-partial{border-color:#f0d9ae;background:#fffdf6}
.reg-chip .go{font-size:11px;color:var(--brand);margin-left:2px}

/* 店铺运营面板：四栏信息 + 整行文本域（原来挤在 2 栏栅格里错位） */
.shop-meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 14px;
  padding:10px 12px;background:var(--brand2);border-radius:9px;margin-bottom:12px;font-size:13px}
.shop-meta .sm-item{display:flex;flex-direction:column;gap:3px;min-width:0}
.shop-meta .sm-item>i{font-style:normal;font-size:11px;color:var(--muted)}
.shop-meta .sm-item>span{overflow-wrap:anywhere;line-height:1.5}
@media(max-width:720px){.shop-meta{grid-template-columns:1fr 1fr}}
.panel-sec{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0 8px;
  padding-bottom:6px;border-bottom:1px solid var(--line);font-size:13px}
.panel-sec b{font-size:14px}
.sp-grid{display:grid;grid-template-columns:200px 200px 1fr;gap:12px;align-items:start}
@media(max-width:720px){.sp-grid{grid-template-columns:1fr 1fr}}
.sp-field{margin-bottom:10px}
.sp-field:last-child{margin-bottom:0}
.sp-field>label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}
.sp-field textarea{width:100%;resize:vertical;line-height:1.6}
.sp-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 2px}
.log-form-box{background:#f8fbff;border:1px solid var(--line);border-radius:10px;padding:12px}
.panel-sec .sp-right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* 看板模块拖拽 */
.board-grid{display:flex;flex-direction:column;gap:12px}
.board-blk{position:relative;padding:2px 0 0;border-radius:10px}
.board-blk>.section-title{margin-top:4px}
.board-blk .card{margin:0}
.blk-bar{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);
  opacity:.45;margin:0 0 2px;transition:opacity .15s}
.board-blk:hover .blk-bar{opacity:1}
.blk-grip{cursor:grab;font-size:13px;letter-spacing:-1px;padding:0 3px;border-radius:4px;user-select:none}
.blk-grip:active{cursor:grabbing}
.board-blk.dragging{opacity:.45}
.board-blk.over-top{box-shadow:0 -3px 0 -1px var(--brand)}
.board-blk.over-bottom{box-shadow:0 3px 0 -1px var(--brand)}
.board-hint{font-size:11px;color:var(--muted);margin:2px 0 12px;opacity:.7}
.board-hint a{color:var(--brand);text-decoration:none;border-bottom:1px dashed var(--brand)}

/* ---------- v44：看板钻取 / 紧凑表单 / 主体卡片 ---------- */

/* 可点的数字 / 名称：默认像普通文字，悬停给下划线与品牌色 */
.num-link{cursor:pointer;border-bottom:1px dashed transparent;transition:.12s}
.num-link:hover{color:var(--brand);border-bottom-color:var(--brand)}
.click-tag{cursor:pointer}
.click-tag:hover{background:var(--brand2);color:var(--brand)}

/* 钻取弹窗 */
.drill-row{cursor:pointer}
.drill-row:hover td{background:var(--brand2)}
.drill-total{margin-top:8px;padding:8px 10px;background:var(--brand2);border-radius:8px;font-size:13px}
.drill-foot{margin-top:8px;padding:8px 10px;background:#f7f9fc;border:1px solid var(--line);
  border-radius:8px;font-size:13px;line-height:1.7}

/* 趋势条整块可点（含毛利子条） */
.trend-item{cursor:pointer;border-radius:6px;padding:2px 4px;margin:0 -4px;transition:background .12s}
.trend-item:hover{background:var(--brand2)}
.bar-row.drill-ish{cursor:pointer;border-radius:6px;padding:2px 4px;margin:0 -4px}
.bar-row.drill-ish:hover{background:var(--brand2)}

/* 紧凑表单：label 紧贴输入框（两列排布），替代「label 占半格、框在另一半」的松排版 */
.kv-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 22px;margin:10px 0 4px}
@media(max-width:640px){.kv-grid{grid-template-columns:1fr}}
.kv{display:grid;grid-template-columns:84px minmax(0,1fr);align-items:center;gap:8px}
.kv>label{font-size:13px;color:var(--text);white-space:nowrap;margin:0;text-align:right}
.kv>label i{font-style:normal;color:var(--danger)}
.kv>input,.kv>select,.kv>textarea{width:100%;min-width:0}
.kv-full{grid-column:1/-1}
/* 合并登记弹窗的小节标题（① 销量 ② 费用 ③ 快递费） */
.reg-sec{display:flex;align-items:baseline;gap:10px;margin:12px 0 2px;padding:6px 10px;
  background:#f2f7fd;border-left:3px solid var(--brand);border-radius:6px;font-size:13px}
.sum-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;
  background:var(--brand2);color:var(--brand);font-size:13px}
.sum-pill b{font-variant-numeric:tabular-nums}

/* 经营主体卡片 */
.sub-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:10px 0 4px}
@media(max-width:760px){.sub-list{grid-template-columns:1fr}}
.sub-card{border:1px solid var(--line);border-radius:11px;padding:10px 12px;background:#fff}
.sub-card:hover{border-color:#c9d8ee;box-shadow:0 6px 18px rgba(10,30,60,.06)}
.sub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap}
.sub-head b{font-size:14px}
.sub-right{display:flex;gap:6px;flex-wrap:wrap}
.sub-meta{display:flex;flex-wrap:wrap;gap:4px 16px;margin:8px 0 6px;font-size:12px;color:var(--muted)}
.sub-meta b{color:var(--text)}
.sub-shops{display:flex;flex-wrap:wrap;gap:4px;padding-top:6px;border-top:1px dashed var(--line)}
.ops{white-space:nowrap}
.ops .btn{margin:1px 2px 1px 0}

/* 售后登记表单：分组标题 + 三列紧凑（2026-11-09） */
.form-row.three{grid-template-columns:repeat(3,1fr)}
.form-sec{font-size:12px;font-weight:600;color:var(--brand);margin:14px 0 8px;
  padding-left:8px;border-left:3px solid var(--brand);line-height:1.2}
.form-sec:first-child{margin-top:0}

/* 表单规整（2026-11-09）：子元素 .one 真正跨满整行；顶部识别快捷条 */
.form-row > div.one{grid-column:1 / -1}
.form-assist{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:#f3f8ff;border:1px dashed #cfe0f5;border-radius:9px;
  padding:10px 12px;margin-bottom:12px}
.form-assist.inline{margin:0;background:transparent;border:0;padding:0}
.form-assist .small{line-height:1.5}

/* 内嵌粘贴识别框（2026-11-09 第 31 轮）：文本框常驻在当前表单弹窗内，
   绝不新开 / 关闭弹窗；固定放在收货信息最上面，字段顺序 联系人 → 电话 → 收货地址 */
.paste-inline{border:1px dashed #cfe0f5;background:#f3f8ff;border-radius:9px;
  padding:10px 12px;margin:0 0 12px}
.paste-inline-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:7px}
.paste-inline-hd b{font-size:12px;color:var(--brand)}
.paste-inline-hd .small{line-height:1.5;flex:1;min-width:180px}
.paste-inline textarea{width:100%;box-sizing:border-box;resize:vertical;min-height:60px;
  border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;color:var(--text)}
.paste-inline-ft{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.paste-inline-ft .paste-result{margin-left:auto;line-height:1.4}

/* 图片预览 + 删除按钮（PC / H5 同口径）v75：删除按钮固定在图片正下方 */
.photo-box{display:flex;flex-direction:column;align-items:flex-start;gap:8px;margin:8px 0 4px}
.photo-thumb{max-width:220px;max-height:140px;border:1px solid var(--line);
  border-radius:9px;background:#fff;display:block;cursor:zoom-in}
.photo-del{height:30px;padding:0 12px;border-radius:8px;border:1px solid var(--danger-soft,#fdeced);
  background:var(--danger-soft,#fdeced);color:var(--danger,#c02f3b);font-size:12.5px;
  font-weight:600;cursor:pointer;flex:none;align-self:flex-start}
.photo-del:hover{filter:brightness(.96)}
.photo-note{font-size:11.5px;color:var(--muted);line-height:1.5}

/* 点图片看大图：独立浮层（不占用 #modal，不影响正在填写的表单弹窗） */
.photo-preview{position:fixed;inset:0;z-index:9999;background:rgba(12,18,28,.86);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:14px;padding:24px;cursor:zoom-out}
.photo-preview img{max-width:100%;max-height:86vh;object-fit:contain;
  border-radius:10px;background:#fff;box-shadow:0 20px 60px rgba(0,0,0,.45)}
.photo-preview-tip{font-size:13px;color:#dbe4f2}

/* v79：履约弹窗「本次回款」——金额框右端内嵌一个「全款」小按钮 */
.amt-wrap{position:relative;display:block}
.amt-wrap input{width:100%;padding-right:60px}
.amt-all{position:absolute;right:5px;top:50%;transform:translateY(-50%);
  height:24px;padding:0 9px;border-radius:6px;border:1px solid var(--brand,#2563a8);
  background:var(--brand-soft,#eaf2fc);color:var(--brand,#2563a8);
  font-size:12px;font-weight:600;line-height:22px;cursor:pointer}
.amt-all:hover{filter:brightness(.97)}

/* v79：登录页已正式上线，测试用的「一键角色登录」区块彻底不显示
   （DOM 仍保留，避免旧脚本取不到节点报错；内容也已清空） */
.login-wrap .quick{display:none!important}

/* v79.1 订单详情「复制地址」：贴着地址后面的小按钮，不撑高行 */
.kv .copy-addr{margin-left:8px;height:24px;padding:0 9px;font-size:12px;vertical-align:middle}

/* v80 售后照片墙（多张）：删除按钮固定在图片正下方，排成竖列 */
.pstrip{margin-top:8px}
.pgrid{display:flex;flex-wrap:wrap;gap:10px}
.pcell{display:flex;flex-direction:column;align-items:stretch;gap:5px;width:100px}
.pcell img{width:100px;height:100px;object-fit:cover;border-radius:9px;
  border:1px solid var(--line);background:#fff;display:block;cursor:zoom-in}
.pcell .pdel{width:100px;height:26px;padding:0;border-radius:7px;line-height:24px;
  border:1px solid #f3d3d6;background:#fdeced;color:var(--danger);
  font-size:12px;font-weight:600;cursor:pointer}
.pcell .pdel:hover{filter:brightness(.96)}
.padd{width:100px;height:100px;border:1px dashed #c9d4e4;border-radius:9px;
  background:#fafbfd;color:var(--muted);font-size:12.5px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.4}
.padd:hover{border-color:var(--brand);color:var(--brand);background:var(--brand2)}
.pnote{margin-top:7px;font-size:11.5px;color:var(--muted);line-height:1.5}

/* ===== v86 票据登记：开票明细行 ===== */
.ivline{display:grid;grid-template-columns:minmax(0,2.9fr) 76px 96px 104px 26px;
  gap:6px;align-items:center;padding:6px 8px;border:1px solid var(--line);border-radius:8px;
  margin-bottom:6px;background:#fbfcfe}
.ivline.iv-head{background:#f1f5fb;border-style:dashed;font-size:11.5px;color:var(--muted);padding:4px 8px}
.ivline .ivp{min-width:0;position:relative}
/* v118：品名列已删，商品列兼任名称；选「手写名称」时同一格里换成输入框 */
.ivline .iv-custom{display:none}
.ivline.iv-custom-on .ivp .ssel{display:none}
.ivline.iv-custom-on .iv-custom{display:block}
.ivline input{padding:4px 7px;font-size:12.5px;border-radius:6px;width:100%}
.ivline .iv-amt{text-align:right;font-size:12.5px;font-weight:600;color:#243b58;white-space:nowrap}
.ivline .iv-del{border:none;background:transparent;color:var(--muted);font-size:16px;line-height:1;
  cursor:pointer;border-radius:6px;padding:2px 0}
.ivline .iv-del:hover{color:var(--danger);background:#fdecec}
@media(max-width:900px){
  .ivline{grid-template-columns:minmax(0,2.1fr) 60px 76px 84px 24px}
}

/* ---- v87 备忘录：强提醒浮层（独立层，绝不复用 #modal / #sheet） ---- */
.alarm-mask{position:fixed;inset:0;background:rgba(12,24,40,.55);z-index:320;display:flex;
  align-items:center;justify-content:center;padding:20px}
.alarm-box{width:min(460px,100%);background:#fff;border-radius:14px;overflow:hidden;
  box-shadow:0 24px 70px rgba(0,0,0,.35);animation:alarm-in .18s ease-out}
@keyframes alarm-in{from{transform:translateY(-8px) scale(.98);opacity:.4}to{transform:none;opacity:1}}
.alarm-hd{background:linear-gradient(135deg,#b3261e,#d4573f);color:#fff;font-weight:700;
  padding:13px 18px;font-size:15px;display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.alarm-hd .small{color:#ffe6e0;font-weight:400}
.alarm-body{padding:16px 18px 6px}
.alarm-title{font-size:17px;font-weight:700;color:#12263f;margin-bottom:6px;line-height:1.4}
.alarm-text{margin-top:10px;background:#f6f8fb;border:1px solid #e3e9f2;border-radius:9px;
  padding:10px 12px;font-size:13px;color:#33465e;white-space:pre-wrap;max-height:180px;overflow:auto}
.alarm-foot{padding:14px 18px 18px;display:flex;gap:8px;flex-wrap:wrap}
.alarm-foot .btn{flex:0 0 auto}
.alarm-foot .btn:first-child{flex:1 1 auto}
body.alarm-on{overflow:hidden}

/* ---- v88 备忘录：类型选择卡片 + 记账行 ---- */
.memo-type-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
@media(max-width:760px){.memo-type-grid{grid-template-columns:1fr}}
.memo-type-card{border:1px solid #dbe3ee;border-radius:12px;padding:14px 14px 12px;
  cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s;background:#fbfcfe}
.memo-type-card:hover{border-color:#2f6fd0;box-shadow:0 6px 18px rgba(47,111,208,.14);transform:translateY(-1px)}
.mt-t{font-size:15px;font-weight:700;color:#12263f;margin-bottom:6px}
.mt-d{font-size:12.5px;color:#455a75;line-height:1.5}
.mt-m{margin-top:8px;font-size:11.5px;color:#2f6fd0;background:#eef4fd;border-radius:6px;
  padding:3px 7px;display:inline-block}
.mml{display:grid;grid-template-columns:minmax(0,1.6fr) 116px minmax(0,1.3fr);gap:8px;margin-bottom:6px}
.mml input{padding:5px 8px;font-size:13px;border-radius:7px;width:100%;box-sizing:border-box}
.mml .mm-bamt{text-align:right}
@media(max-width:760px){.mml{grid-template-columns:1fr 1fr}.mml .mm-bnote{grid-column:1/-1}}

/* ---- v88 票据登记：客户最近订单内嵌面板 + 公司信息展开 ---- */
.iv-orders{border:1px solid #dbe3ee;border-radius:10px;background:#f8fafd;padding:8px 10px;margin:2px 0 10px}
.iv-orders-hd{display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  font-size:12.5px;color:#33465e;margin-bottom:6px;flex-wrap:wrap}
.iv-order{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 8px;border-radius:8px}
.iv-order:nth-child(odd){background:#fff}
.iv-order-no{font-weight:700;color:#1d3a5f;font-size:13px}
.iv-order-ops{margin-left:auto;display:flex;gap:6px}
.iv-order-items{flex:1 1 100%;margin-top:6px}
.iv-order-items table.mini{border-collapse:collapse;width:100%;font-size:12px}
.iv-order-items table.mini th{background:#eef3fa;color:#5a6b80;font-weight:600;text-align:left;
  padding:4px 8px;border:1px solid #e0e8f2}
.iv-order-items table.mini td{padding:4px 8px;border:1px solid #e8eef6}
.co-info{margin:-6px 0 12px;background:#f6f9fd;border:1px solid #dbe6f3;border-left:3px solid #2f6fd0;
  border-radius:8px;padding:10px 12px;font-size:12.5px;line-height:1.75;color:#33465e}

/* v94：工作台 / 电商看板 —— 模块可删可加 */
.blk-x{margin-left:auto;border:0;background:transparent;color:#8b96a8;font-size:18px;line-height:1;cursor:pointer;padding:1px 7px;border-radius:5px}
.blk-x:hover{background:#fde9eb;color:#b42335}
.board-lib{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.lib-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 12px;border:1px solid var(--line,#e4e9f1);border-radius:8px;background:#fbfcff}
.lib-nm{display:flex;flex-direction:column;gap:2px;min-width:0}

/* ================= v97（2026-11-11）=================
   用户反馈：登记类表单的字段框太大、占空间，同一行能放下的不要跨行。
   做法：全局收紧输入框内边距与圆角、压缩行内间距（结构不动、字段不动），
   只在确实需要整行的地址 / 备注上保留 .form-row.one。 */
input,select,textarea{padding:6px 9px;border-radius:7px}
.modal-body input,.modal-body select,.modal-body textarea{font-size:13px}
.form-row{gap:8px}
.form-row label{font-size:11.5px;margin-bottom:3px}
.form-sec{margin:12px 0 6px}
/* 省 / 市 / 区三级选择：一行三格，紧跟地址框 */
.region-pick{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}
.region-pick select{width:100%;min-width:0;font-size:12.5px}
/* 工作台「待办与快捷入口」：六个按钮排一行（窄屏横向滚动，不折成两排） */
.todo-strip-one{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px}
.todo-strip-one .btn{flex:0 0 auto;white-space:nowrap}

/* ---- v97 修订：电商运营「模块选择栏」----
   老板要求：不要侧边栏子菜单，改成页面内一排选择栏；点哪个下面只显示哪个模块，不堆叠。
   默认第一个「店铺运营分析」。窄屏横向滚动，不折成两排。 */
.ecom-tabs{display:flex;flex-wrap:nowrap;gap:6px;margin:12px 0 12px;overflow-x:auto;padding-bottom:4px}
.ecom-tab{flex:0 0 auto;white-space:nowrap;border:1px solid var(--line,#e4e9f1);background:#fff;
  border-radius:7px;padding:6px 11px;font-size:12.5px;line-height:1.4;color:#44546a;cursor:pointer;
  font-family:inherit;transition:border-color .12s,background .12s,color .12s}
.ecom-tab:hover{border-color:#c9dcf5;background:#f6faff;color:#1d4f9c}
.ecom-tab.on{border-color:var(--brand,#2f6fd0);color:var(--brand,#2f6fd0);background:#f2f8ff;
  font-weight:600;box-shadow:0 0 0 1px var(--brand,#2f6fd0) inset}
.ecom-body{min-height:140px}

/* ---- v161：订单管理「发货状态」TAB（复用 ecom-tab 外观，数字徽标区分待发货）---- */
.of-ship-tabs{margin:12px 0 10px}
.of-ship-tabs .ecom-tab{padding:7px 13px;font-size:13px}
.ecom-tab .cnt{display:inline-block;min-width:19px;margin-left:6px;padding:0 5px;border-radius:9px;
  background:#eef3fa;color:#5a6b82;font-size:11.5px;font-weight:600;line-height:17px;text-align:center;
  vertical-align:1px}
.ecom-tab.on .cnt{background:#2f6fd0;color:#fff}
.ecom-tab .cnt.warn{background:#fff1e0;color:#b8641a}
.ecom-tab.on .cnt.warn{background:#e08a2e;color:#fff}

/* ---- v100：看板常驻区（KPI + 老板指定常驻模块，如线下「待办与快捷入口」、电商「今日运营日志」）
   常驻块直接显示在选择栏上方，不进 tab；多块之间留 14px 间距。 ---- */
.board-pin{display:flex;flex-direction:column;gap:14px;margin-bottom:14px}
.board-pin:empty{display:none}

/* ---- v123：客户搜索组合框（原生 select 隐藏，输入客户名称 / 手机号即可筛） ----
   结构由 app.js buildCustCombo() 生成：.cc-wrap > .cc-input + select.cc-native + .cc-pop
   原生 select 只隐藏不删除，id 不变，读值逻辑与 change 事件全部照旧。 */
.cc-wrap{position:relative;flex:1;min-width:0}
.cc-wrap>select.cc-native{display:none!important}
.cc-wrap>.cc-input{width:100%;min-height:36px;padding:7px 26px 7px 10px;border:1px solid var(--line);
  border-radius:8px;background:#fff;color:var(--text);font-size:13px;line-height:1.3}
.cc-wrap>.cc-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(37,99,168,.13)}
.cc-wrap>.cc-input::placeholder{color:#9aa6b8}
.cc-wrap::after{content:"▾";position:absolute;right:9px;top:50%;transform:translateY(-50%);
  color:var(--muted);font-size:11px;pointer-events:none}
.cc-pop{position:absolute;z-index:80;left:0;right:0;top:calc(100% + 4px);max-height:300px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:4px;
  box-shadow:0 12px 30px rgba(20,40,70,.16)}
.cc-item{padding:7px 9px;border-radius:8px;cursor:pointer;line-height:1.35}
.cc-item:hover{background:#f2f6ff}
.cc-item.on{background:var(--brand2)}
.cc-nm{font-size:13px;color:var(--text)}
.cc-sub{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cc-empty{padding:10px;text-align:center;color:var(--muted);font-size:12px}

/* ---- v136：视频活码页两栏布局（左：设置·上传·活码·清单·发布；右：统计·存储·样式） ----
   老板的操作是从上往下一条线：先设小类目 → 传视频 → 看清单 → 发布，
   所以 ④⑤ 跟着 ③ 放左栏，不再甩到右边一列；左侧给宽一点，清单表格才排得开。 */
.vq-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:14px;align-items:start}
@media (max-width:1200px){.vq-grid{grid-template-columns:1fr}}
/* v141：小类目多选标签（上传卡 + 清单行共用） */
.vq-tag{display:inline-flex;align-items:center;gap:3px;background:#eef4ff;color:#2b5cb8;
  border:1px solid #c9daf8;border-radius:999px;padding:1px 8px;font-size:12px;line-height:19px;
  max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vq-tag b{font-weight:600;opacity:.65}
.vq-tag:hover b{opacity:1}

/* v150：看板选择栏拖拽排序（按住页签左右拖，松手自动保存个人顺序） */
.ecom-tab[draggable="true"]{cursor:grab;user-select:none}
.ecom-tab.dragging{opacity:.45;cursor:grabbing}
.ecom-tab.over-left{box-shadow:inset 3px 0 0 var(--brand)}
.ecom-tab.over-right{box-shadow:inset -3px 0 0 var(--brand)}

/* v151：电商运营筛选区整合 —— 主行只留一组统一区间，次要条件收进折叠区 */
.em-lab{font-size:12px;color:var(--muted);white-space:nowrap}
.ecom-adv{margin:-2px 0 10px}
.ecom-adv>summary{cursor:pointer;color:var(--brand);font-size:12px;font-weight:600;
  padding:2px 0;user-select:none;list-style:none;display:inline-flex;align-items:center;gap:6px}
.ecom-adv>summary::-webkit-details-marker{display:none}
.ecom-adv>summary::before{content:'▸';font-size:11px}
.ecom-adv[open]>summary::before{content:'▾'}
.ecom-adv .hint{font-size:11.5px;color:var(--muted);font-weight:400}
.ecom-adv-body{background:var(--card);border:1px solid var(--line);border-radius:9px;
  padding:10px 12px;margin-top:6px;box-shadow:var(--shadow)}
.ecom-adv-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ecom-adv-row label{font-size:12px;color:var(--muted);min-width:66px;white-space:nowrap}
.ecom-adv-row input{padding:4px 8px;font-size:12px;border:1px solid var(--line);
  border-radius:6px;background:#fff;color:var(--text)}
.ecom-adv-row .hint{flex:1;min-width:180px;line-height:1.5}

/* v152：库存台账 TAB 栏 + 发货登记/签收明细表 */
.inv-pane{min-width:0}
.sh-row input,.sh-row select{width:100%;min-width:88px;padding:4px 6px;font-size:12px;
  border:1px solid var(--line);border-radius:6px}
.rq-qty{width:120px;padding:4px 6px;font-size:12px;
  border:1px solid var(--line);border-radius:6px}
/* 打印时把所有模块都展开（屏幕上一次只显示一个，纸上要完整） */
@media print{.inv-pane{display:block!important}}

/* v155：发货登记明细行 —— 容器不裁切搜索下拉、输入框高度对齐、固定下拉贴视口 */
.ship-items{overflow:visible;border:1px solid var(--line);border-radius:10px;background:#fff}
.ship-items table{width:100%;min-width:0}
.ship-items th,.ship-items td{vertical-align:middle}
.ship-items .sh-op{text-align:right;white-space:nowrap}
/* 固定定位的搜索下拉：位置由 JS 按输入框实时计算（left/top/width 内联） */
.ssel-list.ssel-fixed{position:fixed;right:auto;left:auto;top:auto;width:auto}

/* v158：换货明细卡片式双栏 —— 原来 8 列表格在弹窗里被挤成窄条，
   数量 / 单价输入框显示不全；改成一卡两栏，输入框给足宽度。 */
.as-ex-list{display:flex;flex-direction:column;gap:10px}
.as-ex-card{border:1px solid var(--line);border-radius:10px;background:#fff;padding:10px 12px}
.as-ex-hd{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.as-ex-no{font-size:12px;color:var(--muted);white-space:nowrap}
.as-ex-no b{color:var(--text)}
.as-ex-diffv{margin-left:auto;margin-right:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.as-ex-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.as-ex-col{min-width:0}
.as-ex-col-new{position:relative}
.as-ex-col-new::before{content:'';position:absolute;left:-8px;top:2px;bottom:2px;
  border-left:1px dashed var(--line)}
.as-ex-tag{font-size:11.5px;color:var(--muted);margin-bottom:4px}
.as-ex-two{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.as-ex-two label{display:block;margin:0;font-size:11.5px;color:var(--muted)}
.as-ex-two input{width:100%;margin-top:3px;padding:5px 7px;font-size:12.5px;
  border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--text)}
.as-ex-col .ssel{width:100%}
.as-ex-col .ssel .ssel-q{width:100%;padding:6px 8px;font-size:12.5px}
@media (max-width:760px){
  .as-ex-cols{grid-template-columns:1fr;gap:10px}
  .as-ex-col-new::before{display:none}
}
/* 押金已收确认（登记当场收款） */
.as-dep-paid{margin-top:10px;border:1px solid var(--line);border-radius:9px;
  background:var(--card);padding:9px 12px}
.as-dep-check{display:flex;align-items:center;gap:7px;font-size:12.5px;margin:0;cursor:pointer}
.as-dep-check input{width:auto;margin:0}
.as-dep-done{margin-top:10px;border-left:3px solid var(--ok);background:var(--card);
  border-radius:8px;padding:8px 12px;font-size:12.5px}
.as-dep-paid .form-row{margin-top:8px}
/* 执行退款弹窗：应退金额做成醒目条，财务不用翻单子找数 */
.as-refund-amt{margin-top:10px;border-left:3px solid var(--danger);background:var(--card);
  border-radius:8px;padding:9px 12px;font-size:12.5px;color:var(--muted);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.as-refund-amt b{font-size:17px;color:var(--danger)}
/* v159：退款单的押金提醒条 —— 已收押金 / 应退押金 / 押金退过，一律醒目但不抢金额条 */
.as-dep-hint{margin-top:10px;border-left:3px solid var(--warn);background:#fff8ec;
  border-radius:8px;padding:10px 12px;font-size:12.5px;line-height:1.65;color:var(--text);
  display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.as-dep-hint-txt{flex:1 1 260px;min-width:0}
.as-dep-hint b{color:var(--warn)}
.as-dep-hint .btn{margin-left:auto;flex:0 0 auto}
.as-dep-hint.is-muted{border-left-color:var(--muted);background:#f6f8fb;color:var(--muted)}
.as-dep-hint.is-muted b{color:var(--muted)}
/* v160：押金没收到就点「寄出发货」—— 用红色警示，比黄色提醒更该拦一下 */
.as-dep-hint.is-bad{border-left-color:var(--danger);background:#fdeeec}
.as-dep-hint.is-bad b{color:var(--danger)}
