/* R91 索易门店 · 模块样式（由 console.css 作用域化而来）
   仅作用于 .soe-scope 容器内，不含站点壳层样式，可安全并入轻记账任意栏目。 */
/* 变量别名：把控制台旧变量指向主站主题变量（原 :root 已剔除，避免覆盖深色模式） */
.soe-scope{
  --brand-d:var(--brand-dark);
  --line:var(--border);
  --muted:var(--text2);
  --ok:var(--ok-fg);
  --warn:var(--warn-fg);
  --err:var(--danger-fg);
  color:var(--text1);
}
.soe-scope a{color:var(--brand);text-decoration:none}
.soe-scope button{font-family:inherit}
.soe-scope .btn{background:var(--brand);color:#fff;border:none;border-radius:9px;padding:9px 16px;font-size:13.5px;font-weight:600;cursor:pointer;transition:.15s}
.soe-scope .btn:hover{background:var(--brand-d)}
.soe-scope .btn:disabled{opacity:.5;cursor:not-allowed}
.soe-scope .btn.ghost{background:#fff;color:var(--brand);border:1px solid var(--brand)}
.soe-scope .btn.ghost:hover{background:#fff5f3}
.soe-scope .btn.sm{padding:5px 10px;font-size:12.5px;border-radius:7px}
.soe-scope .btn.gray{background:#eef0f3;color:#4a5159}
.soe-scope .btn.gray:hover{background:#e3e6ea}
.soe-scope .card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 20px;margin-bottom:18px}
.soe-scope .card h3{margin:0 0 14px;font-size:14.5px;display:flex;align-items:center;gap:8px}
.soe-scope .card h3 .tag{font-size:12px;font-weight:500;color:var(--muted);background:#f0f2f5;padding:2px 8px;border-radius:6px}
.soe-scope .grid{display:grid;gap:16px}
.soe-scope .grid>*,.soe-scope .stat-strip>*,.soe-scope .compare-grid>*{min-width:0}
.soe-scope .cols2{grid-template-columns:1fr 1fr}
.soe-scope .cols3{grid-template-columns:repeat(3,1fr)}
.soe-scope .cols4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1000px) {
  .soe-scope .cols2,.soe-scope .cols3,.soe-scope .cols4{grid-template-columns:1fr}
}
.soe-scope .stat{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px}
.soe-scope .stat .n{font-size:26px;font-weight:700;color:var(--brand)}
.soe-scope .stat .l{color:var(--muted);font-size:12.5px;margin-top:4px}
.soe-scope .field{margin-bottom:13px}
.soe-scope .field label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:5px}
.soe-scope .field input,.soe-scope .field select,.soe-scope .field textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:13.5px;outline:none;background:#fff;color:var(--text)}
.soe-scope .field input:focus,.soe-scope .field select:focus,.soe-scope .field textarea:focus{border-color:var(--brand)}
.soe-scope .row{display:flex;gap:12px}
.soe-scope .row>*{flex:1;min-width:0}
.soe-scope .hint{font-size:12px;color:var(--muted);margin-top:5px;line-height:1.6}
.soe-scope table{width:100%;border-collapse:collapse;font-size:13px}
.soe-scope th,.soe-scope td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.soe-scope th{color:var(--muted);font-weight:600;background:#fafbfc;font-size:12.5px}
.soe-scope tbody tr:hover{background:#fafbfc}
.soe-scope .table-wrap{overflow-x:auto}
.soe-scope .empty{color:var(--muted);text-align:center;padding:26px}
.soe-scope .badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:600}
.soe-scope .badge.ok{background:#eafaf0;color:var(--ok)}
.soe-scope .badge.err{background:#fff1f0;color:var(--err)}
.soe-scope .badge.warn{background:#fdf6ec;color:var(--warn)}
.soe-scope .badge.in{background:#eef4ff;color:#2f6fed}
.soe-scope .badge.out{background:#f0f2f5;color:#8a9099}
.soe-scope .toast{position:fixed;top:18px;left:50%;transform:translateX(-50%);background:#1f2733;color:#fff;padding:11px 20px;border-radius:10px;font-size:13.5px;z-index:100;opacity:0;transition:.25s;pointer-events:none}
.soe-scope .toast.show{opacity:1;top:24px}
.soe-scope .toast.err{background:var(--err)}
.soe-scope .toast.ok{background:var(--ok)}
.soe-scope .modal-mask{position:fixed;inset:0;background:rgba(20,25,33,.5);display:none;align-items:center;justify-content:center;z-index:50}
.soe-scope .modal-mask.show{display:flex}
.soe-scope .modal{background:#fff;border-radius:16px;padding:24px;width:440px;max-width:92vw;max-height:88vh;overflow-y:auto}
.soe-scope .modal h3{margin:0 0 16px;font-size:16px}
.soe-scope .spin{display:inline-block;width:14px;height:14px;border:2px solid #ccc;border-top-color:var(--brand);border-radius:50%;animation:sp .7s linear infinite;vertical-align:middle}
@keyframes sp{to{transform:rotate(360deg)}}
.soe-scope .muted{color:var(--muted)}
.soe-scope .right-align{text-align:right}
.soe-scope .nowrap{white-space:nowrap}
.soe-scope .code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;background:#f6f7f9;padding:2px 6px;border-radius:5px;word-break:break-all}
.soe-scope .compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.soe-scope .cmp-panel{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff;display:flex;flex-direction:column}
.soe-scope .cmp-head{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;background:#f7f9fc;border-bottom:1px solid var(--line)}
.soe-scope .cmp-head b{font-size:14px}
.soe-scope .cmp-hint{font-size:12px;color:#888;margin-top:2px}
.soe-scope .cmp-iframe{width:100%;height:78vh;border:0;background:#fff}
.soe-scope .cmp-empty{padding:48px 16px;text-align:center;color:#999;line-height:1.8}
@media(max-width:880px) {
  .soe-scope .compare-grid{grid-template-columns:1fr}
}
.soe-scope .modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:60;padding:16px}
.soe-scope .modal-mask .card{max-width:520px;width:100%;margin:0;box-shadow:0 10px 40px rgba(0,0,0,.25)}
.soe-scope .stat-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:12px;margin-bottom:18px}
.soe-scope .chip{background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px 15px;box-shadow:0 1px 3px rgba(31,39,51,.04);transition:.15s;position:relative;overflow:hidden}
.soe-scope .chip::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand);opacity:.55;border-radius:3px 0 0 3px}
.soe-scope .chip:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(31,39,51,.09)}
.soe-scope .chip .n{font-size:22px;font-weight:800;line-height:1.2}
.soe-scope .chip .n.ok{color:var(--ok)}
.soe-scope .chip .n.warn{color:var(--warn)}
.soe-scope .chip .n.err{color:var(--err)}
.soe-scope .chip .n.in{color:#2f6fed}
.soe-scope .chip .l{font-size:12px;color:var(--muted);margin-top:3px}
.soe-scope .toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.soe-scope .toolbar input,.soe-scope .toolbar select{padding:8px 11px;border:1px solid var(--line);border-radius:9px;font-size:13px;outline:none;background:#fff;color:var(--text)}
.soe-scope .toolbar input:focus,.soe-scope .toolbar select:focus{border-color:var(--brand)}
.soe-scope .txt-err{color:var(--err)}
.soe-scope .card h3{letter-spacing:.2px}
.soe-scope tbody tr{transition:background .12s}
.soe-scope .btn.sm.ghost{background:#fff;color:var(--brand);border:1px solid var(--brand)}
.soe-scope .btn.sm.ghost:hover{background:#fff5f3}
.soe-scope .badge{letter-spacing:.3px}
.soe-scope .stock-bar{width:92px;height:5px;border-radius:3px;background:#eef1f5;overflow:hidden;margin-top:4px}
.soe-scope .stock-bar > i{display:block;height:100%;border-radius:3px}
.soe-scope .txt-ok{color:var(--ok)}
.soe-scope .txt-warn{color:var(--warn)}
.soe-scope .chip:hover::before{opacity:1}
.soe-scope .chip .n{letter-spacing:-.3px}
.soe-scope .chip .n.ok::before,.soe-scope .chip .n.warn::before,.soe-scope .chip .n.err::before{display:none}
.soe-scope td.num,.soe-scope th.num{text-align:right;font-variant-numeric:tabular-nums}
.soe-scope .report-ov{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:999;display:flex;align-items:center;justify-content:center;padding:16px}
.soe-scope .report-ov .box{background:#fff;border-radius:16px;width:min(760px,96vw);max-height:90vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px rgba(15,23,42,.25)}
.soe-scope .report-ov .hd{padding:16px 18px;border-bottom:1px solid #eee;display:flex;align-items:center;gap:10px}
.soe-scope .report-ov .bd{flex:1;overflow:auto;padding:14px 18px}
.soe-scope .sync-warn{background:#fff8f0;border:1px solid #ffe0b2;border-radius:10px;padding:9px 12px;margin:8px 0;font-size:13px;color:#8a5300}
.soe-scope .nav-ov{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:999;display:flex;align-items:center;justify-content:center;padding:16px;animation:ovIn .15s ease}
.soe-scope .nav-ov .box{background:#fff;border-radius:16px;width:min(440px,96vw);max-height:90vh;overflow:auto;box-shadow:0 20px 60px rgba(15,23,42,.25);padding:22px}
.soe-scope .nav-ov .box h3{margin:0 0 10px;font-size:16px;display:flex;align-items:center;gap:8px;line-height:1.4}
.soe-scope .nav-ov .box .msg{font-size:13.5px;line-height:1.7;color:#3a4250;white-space:pre-line;margin:0 0 18px}
.soe-scope .nav-ov .box .acts{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}
.soe-scope .nav-ov .box .acts .btn{flex:1 1 auto;min-width:96px}
.soe-scope .nav-ov .box .acts .btn.gray{flex:0 1 auto}
@keyframes ovIn{from{opacity:0}to{opacity:1}}
.soe-scope .top-badge:hover{background:var(--brand-d)}
.soe-scope .top-badge .dot{width:6px;height:6px;border-radius:50%;background:#fff;opacity:.9;animation:livePulse 1.6s infinite}
@keyframes livePulse{0%,100%{opacity:.35}50%{opacity:1}}
.soe-scope .live-pill{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--ok);background:#eafaf0;border:1px solid #c6efd6;border-radius:20px;padding:2px 9px;vertical-align:middle}
.soe-scope .live-pill .dot{width:6px;height:6px;border-radius:50%;background:var(--ok);animation:livePulse 1.6s infinite}
.soe-scope button{touch-action: manipulation;}
.soe-scope .mob-toggle:hover{background:#f3f4f6;}
.soe-scope .side-mask.show{display:block; opacity:1;}
@media (max-width:480px) {
  .soe-scope .card{padding:13px 12px; margin-bottom:11px; border-radius:11px;}
  .soe-scope .card h3{font-size:13.5px; margin-bottom:9px;}
  .soe-scope .card h3 .tag{font-size:12px; padding:2px 7px;}
  .soe-scope .card{overflow:hidden;}
  .soe-scope .table-wrap{overflow-x:auto; -webkit-overflow-scrolling:touch; border-radius:9px; max-width:100%;}
  .soe-scope table{font-size:12px; min-width:560px;}
  .soe-scope th,.soe-scope td{padding:7px 6px; white-space:nowrap;}
  .soe-scope th{font-size:12px;}
  .soe-scope th.hide-mob,.soe-scope td.hide-mob{display:none;}
  .soe-scope .btn{padding:10px 14px; min-height:42px; font-size:13.5px;}
  .soe-scope .btn.sm{padding:7px 11px; min-height:34px; font-size:12.5px;}
  .soe-scope .field{margin-bottom:11px;}
  .soe-scope .field input,.soe-scope .field select,.soe-scope .field textarea{padding:11px 12px; font-size:14px; min-height:44px; border-radius:10px;}
  .soe-scope .row{flex-direction:column; gap:0;}
  .soe-scope .cols2,.soe-scope .cols3,.soe-scope .cols4{grid-template-columns:1fr;}
  .soe-scope .stat-strip{grid-template-columns:repeat(2,1fr); gap:8px; margin-bottom:14px;}
  .soe-scope .chip{padding:11px 12px;}
  .soe-scope .chip .n{font-size:18px;}
  .soe-scope .chip .l{font-size:12px;}
  .soe-scope .stat{padding:13px 14px;}
  .soe-scope .stat .n{font-size:22px;}
  .soe-scope .toolbar{gap:7px; margin-bottom:10px;}
  .soe-scope .toolbar input,.soe-scope .toolbar select{font-size:14px; padding:10px 12px; min-height:42px;}
  .soe-scope .toolbar > .tb-break{flex-basis:100% !important; height:0 !important; margin:0 !important; padding:0 !important;}
  .soe-scope .toolbar > input{flex:1 1 100%; width:auto !important; min-width:0;}
  .soe-scope .toolbar > select{flex:1 1 auto; min-width:0;}
  .soe-scope .modal-mask{padding:0; align-items:flex-end;}
  .soe-scope .modal{width:100vw; max-width:100vw; height:auto; max-height:92vh; border-radius:18px 18px 0 0; padding:16px 14px;}
  .soe-scope .report-ov{padding:0; align-items:flex-end;}
  .soe-scope .report-ov .box{width:100vw; max-width:100vw; max-height:96vh; border-radius:18px 18px 0 0;}
  .soe-scope .toast{font-size:13px; padding:10px 16px; max-width:80vw;}
  .soe-scope .code{font-size:12px;}
  .soe-scope .empty{padding:20px 8px;}
}
@media (min-width:481px) and (max-width:767px) {
  .soe-scope .card{padding:14px;}
  .soe-scope .table-wrap{overflow-x:auto; -webkit-overflow-scrolling:touch;}
  .soe-scope table{font-size:12.5px;}
  .soe-scope th,.soe-scope td{padding:8px 7px;}
  .soe-scope th.hide-mob,.soe-scope td.hide-mob{display:none;}
  .soe-scope .btn{min-height:40px;}
  .soe-scope .field input,.soe-scope .field select,.soe-scope .field textarea{font-size:14px; min-height:42px;}
  .soe-scope .stat-strip{grid-template-columns:repeat(3,1fr);}
  .soe-scope .cols2,.soe-scope .cols3,.soe-scope .cols4{grid-template-columns:1fr;}
  .soe-scope .modal-mask{padding:12px;}
  .soe-scope .modal{width:96vw; max-width:460px;}
  .soe-scope .toolbar > .tb-break{flex-basis:100% !important; height:0 !important; margin:0 !important; padding:0 !important;}
  .soe-scope .toolbar > input{flex:1 1 100%; width:auto !important; min-width:0;}
}
@media (min-width:768px) and (max-width:1199px) {
  .soe-scope .cols2{grid-template-columns:1fr;}
  .soe-scope .cols4{grid-template-columns:repeat(2,1fr);}
  .soe-scope .cols3{grid-template-columns:repeat(3,1fr);}
  .soe-scope .stat-strip{grid-template-columns:repeat(4,1fr);}
  .soe-scope .modal{width:500px;}
  .soe-scope .table-wrap{overflow-x:auto;}
}
@media (min-width:1200px) {
  .soe-scope .cols2{grid-template-columns:1.6fr 1fr;}
  .soe-scope .cols4{grid-template-columns:repeat(4,1fr);}
  .soe-scope .stat-strip{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));}
  .soe-scope .card{padding:20px 22px;}
  .soe-scope .modal{width:540px;}
}
.soe-scope .top-bell:hover{background:#f2f3f5}
.soe-scope .al-sec{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.soe-scope .al-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.soe-scope .ana-trend svg text{font-family:inherit}
.soe-scope .ana-hours-row{display:flex;align-items:flex-end;gap:3px;height:175px;padding:6px 2px 0}
.soe-scope .ana-hcol{flex:1 1 0;min-width:0;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%}
.soe-scope .ana-hcol .bar{width:72%;max-width:24px;background:linear-gradient(180deg,var(--brand),#f2705f);border-radius:3px 3px 0 0;opacity:.85;transition:height .3s}
.soe-scope .ana-hcol .t{font-size:12px;color:var(--muted);margin-top:4px}
.soe-scope .ana-hcol .t.minor{visibility:hidden}
.soe-scope .ana-hcol:hover .t.minor{visibility:visible}
.soe-scope .ana-hcol .v{font-size:12px;color:var(--text);margin-bottom:2px;min-height:13px}
.soe-scope .ana-top{width:100%;border-collapse:collapse}
.soe-scope .ana-top td{padding:7px 8px;border-bottom:1px dashed var(--line);vertical-align:middle}
.soe-scope .ana-top tr:last-child td{border-bottom:none}
.soe-scope .ana-top .rk{width:26px;color:var(--muted);font-weight:700;font-size:13px}
.soe-scope .ana-top .nm{font-size:13px;margin-bottom:3px}
.soe-scope .ana-top .bar-wrap{height:8px;background:#f2f3f5;border-radius:4px;overflow:hidden}
.soe-scope .ana-top .bar-wrap .bar{height:100%;background:linear-gradient(90deg,var(--brand),#f2705f);border-radius:4px}
.soe-scope .ana-top .num{text-align:right;white-space:nowrap;font-weight:600;font-size:13px}
.soe-scope .ana-chips{display:flex;gap:10px;flex-wrap:wrap}
.soe-scope .ana-chip{flex:1 1 110px;min-width:0;background:#f8f9fb;border:1px solid var(--line);border-radius:10px;padding:10px 12px;text-align:center}
.soe-scope .ana-chip .n{font-size:22px;font-weight:700}
.soe-scope .ana-chip .l{font-size:12px;color:var(--muted);margin-top:2px}
.soe-scope .ana-kv .kv{display:flex;justify-content:space-between;gap:10px;padding:8px 2px;border-bottom:1px dashed var(--line);font-size:13.5px}
.soe-scope .ana-kv .kv:last-child{border-bottom:none}
.soe-scope .ana-kv .kv b.c-err{color:var(--err)}
.soe-scope .ana-kv .kv b.c-warn{color:var(--warn)}
@media(max-width:767px) {
  .soe-scope .ana-hours-row{height:130px}
  .soe-scope .ana-hcol .t{font-size:12px}
  .soe-scope .ana-chip .n{font-size:18px}
}
.soe-scope .cfg-unified{display:flex;flex-direction:column;gap:5px;background:var(--brand-soft);border:1px solid rgba(228,57,42,.22);border-radius:12px;padding:13px 15px;margin-bottom:15px;font-size:13px;color:var(--brand)}
.soe-scope .cfg-unified b{font-size:13.5px}
.soe-scope .cfg-unified i{font-style:normal;font-weight:700}
.soe-scope .cfg-unified .sub{font-size:12px;color:#b06000;background:transparent}

/* ===========================================================
   R91 深色模式适配：控制台原为独立浅色应用，并入主站后需跟随主题变量
   =========================================================== */
html[data-theme="dark"] .soe-scope .card,
html[data-theme="dark"] .soe-scope .stat,
html[data-theme="dark"] .soe-scope .chip,
html[data-theme="dark"] .soe-scope .modal,
html[data-theme="dark"] .soe-scope .nav-ov .box,
html[data-theme="dark"] .soe-scope .report-ov .box,
html[data-theme="dark"] .soe-scope .cmp-panel,
html[data-theme="dark"] .soe-scope .cmp-panel .cmp-iframe{background:var(--surface);color:var(--text1)}
html[data-theme="dark"] .soe-scope .card h3 .tag,
html[data-theme="dark"] .soe-scope .code{background:var(--fill);color:var(--text2)}
html[data-theme="dark"] .soe-scope th,
html[data-theme="dark"] .soe-scope tbody tr:hover,
html[data-theme="dark"] .soe-scope .chip{background:var(--fill)}
html[data-theme="dark"] .soe-scope .field input,
html[data-theme="dark"] .soe-scope .field select,
html[data-theme="dark"] .soe-scope .field textarea,
html[data-theme="dark"] .soe-scope .toolbar input,
html[data-theme="dark"] .soe-scope .toolbar select{background:var(--fill);color:var(--text1);border-color:var(--border)}
html[data-theme="dark"] .soe-scope .btn.ghost,
html[data-theme="dark"] .soe-scope .btn.sm.ghost{background:transparent}
html[data-theme="dark"] .soe-scope .btn.ghost:hover,
html[data-theme="dark"] .soe-scope .btn.sm.ghost:hover{background:var(--fill-2)}
html[data-theme="dark"] .soe-scope .btn.gray{background:var(--fill-2);color:var(--text2)}
html[data-theme="dark"] .soe-scope .btn.gray:hover{background:var(--fill)}
html[data-theme="dark"] .soe-scope .ana-chip,
html[data-theme="dark"] .soe-scope .cmp-head{background:var(--fill);border-color:var(--border)}
html[data-theme="dark"] .soe-scope .ana-top .bar-wrap,
html[data-theme="dark"] .soe-scope .stock-bar{background:var(--track)}
html[data-theme="dark"] .soe-scope .badge.ok{background:var(--ok-bg);color:var(--ok-fg)}
html[data-theme="dark"] .soe-scope .badge.err{background:var(--danger-bg);color:var(--danger-fg)}
html[data-theme="dark"] .soe-scope .badge.warn{background:var(--warn-bg);color:var(--warn-fg)}
html[data-theme="dark"] .soe-scope .badge.in{background:var(--info-bg);color:var(--info-fg)}
html[data-theme="dark"] .soe-scope .badge.out{background:var(--fill-2);color:var(--text2)}
html[data-theme="dark"] .soe-scope .sync-warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-fg)}
html[data-theme="dark"] .soe-scope .report-ov .hd{border-bottom-color:var(--border)}
html[data-theme="dark"] .soe-scope .nav-ov .box .msg{color:var(--text2)}
html[data-theme="dark"] .soe-scope .cfg-unified{background:var(--brand-soft);border-color:rgba(228,57,42,.35)}
html[data-theme="dark"] .soe-scope .ana-hcol .v{color:var(--text1)}

/* ==========================================================================
   R125 菜单批量操作（勾选若干商品 → 一键移到分类 / 上架下架 / 删除）
   --------------------------------------------------------------------------
   1) 浮动条 id 为 soe-mb-bar，与主站支出明细的 #batch-bar 分开命名：
      DOM id 必须全页唯一，两处共用 id 会让「批量条」互相覆盖（R113 血训同类问题）。
   2) 浮动条挂在 .soe-scope 容器内（js/soe.js 的 soeRoot()），故样式一律带
      .soe-scope 前缀 —— 这是本模块的作用域约定（作用域 CSS 铁律）。
   3) z-index 取 90：低于模块弹窗 .nav-ov（999）与 toast（100），
      保证「批量删除」的二次确认弹窗盖在浮动条之上而不是被压住。
   ========================================================================== */
.soe-scope #soe-mb-bar{position:fixed;left:50%;transform:translateX(-50%);bottom:20px;z-index:90;
  background:#262b33;color:#fff;border-radius:14px;padding:10px 14px;display:flex;gap:8px;align-items:center;
  box-shadow:0 10px 30px rgba(0,0,0,.32);max-width:calc(100vw - 24px);flex-wrap:wrap}
.soe-scope #soe-mb-bar.hidden{display:none}
.soe-scope #soe-mb-bar .bb-count{font-size:13px;color:#c8cdd4;white-space:nowrap}
.soe-scope #soe-mb-bar .bb-count b{color:#fff;font-size:15px;margin:0 2px}
.soe-scope #soe-mb-bar button{border:none;border-radius:10px;padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;font-family:inherit}
.soe-scope #soe-mb-bar .bb-move{background:rgba(255,255,255,.14);color:#fff}
.soe-scope #soe-mb-bar .bb-move:hover{background:rgba(255,255,255,.24)}
.soe-scope #soe-mb-bar .bb-del{background:rgba(255,255,255,.14);color:#ffd7d3}
.soe-scope #soe-mb-bar .bb-del:hover{background:rgba(228,57,42,.85);color:#fff}
.soe-scope #soe-mb-bar .bb-cancel{background:transparent;color:#aab1bb}
.soe-scope #soe-mb-bar .bb-cancel:hover{color:#fff}
.soe-scope #soe-mb-bar select#mb_cat{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.28);
  border-radius:10px;padding:8px 10px;font-size:13px;font-family:inherit;max-width:190px;cursor:pointer}
.soe-scope #soe-mb-bar select#mb_cat option{background:#262b33;color:#fff}
/* 勾选列：宽度固定且不参与列宽挤压；表格已有横向滚动容器，窄屏不会因此撑破布局 */
.soe-scope .th-chk,.soe-scope .td-chk{width:38px;min-width:38px;text-align:center;padding:8px 4px}
.soe-scope .th-chk input,.soe-scope .td-chk input{width:16px;height:16px;accent-color:var(--brand);cursor:pointer;vertical-align:middle;margin:0}
/* 已勾选行：淡品牌色底，便于在长列表里回看「我选了哪几行」 */
.soe-scope tbody tr.is-sel{background:var(--brand-soft,rgba(228,57,42,.07))}
.soe-scope tbody tr.is-sel:hover{background:var(--brand-soft,rgba(228,57,42,.11))}
/* 窄屏：让开主站底部导航（与主站 #batch-bar 的处理保持一致） */
@media (max-width:768px){
  .soe-scope #soe-mb-bar{bottom:78px;padding:9px 12px;gap:6px;left:12px;right:12px;transform:none;max-width:none;justify-content:center}
  .soe-scope #soe-mb-bar button{padding:8px 12px;font-size:12.5px}
  .soe-scope #soe-mb-bar select#mb_cat{max-width:150px}
}
@media (max-width:400px){
  .soe-scope #soe-mb-bar .bb-count{width:100%;text-align:center}
}

/* --------------------------------------------------------------------------
   R125 窄屏修复：卡片标题栏的说明标签（.tag）在手机上会被裁掉
   实证（元素级裁切检测，改前）：414px 溢出 1 处 / 360px 1 处 / 344px 2 处，
   被裁元素都是 .card h3 里的 <span class="tag">。
   成因：h3 是 flex 且默认 nowrap，标签自身也是 nowrap 且不收缩 —— 一行放不下时
   既不换行也不缩字，直接顶出视口右侧（body 的 overflow-x:hidden 会把它吃掉，
   所以文档级 scrollWidth 看不出来，只有元素级检测能发现）。
   修法：允许 h3 换行 + 标签允许折行并限制最大宽度。
   注：344px 下那条「扫码点单菜单 · 名称/价格/单位/图片 全部跟随索易」是本轮之前
   就存在的裁切（R124 的多端巡检只覆盖了盈亏报表页），此处一并修好。
   -------------------------------------------------------------------------- */
.soe-scope .card h3{flex-wrap:wrap}
.soe-scope .card h3 .tag{min-width:0;max-width:100%;white-space:normal;word-break:break-word}
