/* 订单扫码模块（sec-logistics）样式：全部消费工作台主题令牌（theme.js），随主题切换自动变色，不写死颜色 */
.lgc-root{display:flex;flex-direction:column;height:calc(100vh - 110px);min-height:420px;background:var(--paper,#fff);border-radius:var(--r,12px);overflow:hidden;border:1px solid var(--line,#e6e8eb)}
#sec-logistics .lgc-root{width:100%}
/* 右侧便签：每日发货统计 */
#sec-logistics .lgc-note{position:absolute;top:16px;right:12px;width:300px;background:var(--paper,#fff);border:1px solid var(--line,#e6e8eb);border-radius:12px;box-shadow:0 6px 24px rgba(0,0,0,.08);z-index:40;padding:12px 14px}
.lgc-note-h{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.lgc-note-h b{font-size:14px;color:var(--ink,#1f2329)}
.lgc-note-h button{margin-left:auto;padding:5px 12px;border:1px solid var(--terra,#c5764c);background:var(--terra,#c5764c);color:#fff;border-radius:7px;font-size:12px;cursor:pointer}
.lgc-note-h button:hover{opacity:.9}
/* ===== 每日发货小票（订单页头，锁在统计卡左侧） =====
   目标：**看起来就是小票机打出来的那张纸** —— 白纸、等宽字、黑字、虚线分段、左右对账。
   默认隐藏，点头部 🧾 唤出，点 ×/面板外收起；位置固定不拖动。
   出纸动画：容器 overflow:hidden，高度由 JS 从 0 过渡到内容高（见 logistics.js 的 _feedOut）。 */
.lgc-receipt-wrap{position:relative;display:flex;align-items:center}
/* ===== 小票机（每日发货）：一台画出来的机器 =====
   三层结构（「打印机吐小票」的通用做法）：
     ① 机身 .lgc-printer-body  —— z-index 73
     ② 纸   .lgc-receipt       —— z-index 71（在下面）
     ③ 缝口 .lgc-printer-mouth —— z-index 74（挡在最前）
   纸的上沿被缝口盖住，所以看着就是从缝里出来的；机器宽 = 纸宽（302px）。
   页头窄的时候整块会自动换行（.lgc-main-head 已开 flex-wrap）。
   拟物细节：注塑磨砂纹 / 上盖接缝 / 金属铭牌 / 散热格栅 / 前挡板两颗螺丝 / 机身小屏。 */
.lgc-printer{position:relative;z-index:73;width:302px;cursor:pointer;user-select:none;flex:0 0 auto}
.lgc-printer:active .lgc-printer-body{transform:translateY(1px)}
.lgc-printer:focus-visible{outline:2px solid var(--terra,#c5764c);outline-offset:3px;border-radius:10px}
/* 机身：塑料壳（斜细纹模拟注塑磨砂）+ 顶部高光 + 底部薄影 */
.lgc-printer-body{position:relative;height:34px;border-radius:9px 9px 4px 4px;
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,.55) 0 1px, rgba(255,255,255,0) 1px 3px),
    linear-gradient(180deg,#fcfdfe 0%,#e9edf0 48%,#d5dbdf 100%);
  border:1px solid #c8d0d6;border-top-color:#dde3e7;
  box-shadow:0 2px 5px rgba(0,0,0,.12), inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0,0,0,.05);
  display:flex;align-items:center;gap:7px;padding:0 9px;transition:transform .08s}
/* 上盖接缝：一道明暗线，机器才像拼起来的壳 */
.lgc-printer-body::after{content:'';position:absolute;left:6px;right:6px;bottom:4px;height:0;
  border-top:1px solid rgba(0,0,0,.07);border-bottom:1px solid rgba(255,255,255,.75)}
/* 状态灯：待机灰，出纸亮绿（JS 加 .busy） */
.lgc-printer-led{width:7px;height:7px;border-radius:50%;flex:0 0 auto;
  background:radial-gradient(circle at 35% 30%,#fff,#b6bfc5 70%);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);transition:background .2s, box-shadow .2s}
.lgc-printer.busy .lgc-printer-led{background:radial-gradient(circle at 35% 30%,#eaffef,#20c256 70%);
  box-shadow:0 0 8px rgba(62,207,106,.95), inset 0 0 0 1px rgba(0,0,0,.1)}
/* 金属铭牌：贴上去的一小块标签 */
.lgc-printer-plate{font-size:10px;letter-spacing:.14em;color:#5d666d;white-space:nowrap;
  padding:2px 7px;border-radius:4px;border:1px solid #c6ced4;
  background:linear-gradient(180deg,#fff,#eef2f4);box-shadow:inset 0 1px 0 #fff, 0 1px 1px rgba(0,0,0,.05)}
/* 机身小屏：LED 数码窗，等宽字 —— 不用拉开纸就能看今天多少单 / 多少包 */
.lgc-printer-count{font-family:ui-monospace,Consolas,monospace;font-size:10.5px;color:#2f6b3a;white-space:nowrap;
  padding:2px 7px;border-radius:4px;background:#eef7f0;border:1px solid #cddfd2;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.06)}
.lgc-printer-count b{font-weight:700}
/* 散热格栅 */
.lgc-printer-vents{margin-left:auto;display:flex;gap:3px}
.lgc-printer-vents i{display:block;width:3px;height:13px;border-radius:2px;background:#c3cad0;
  box-shadow:inset 0 1px 1px rgba(0,0,0,.18), 1px 0 0 rgba(255,255,255,.7)}
/* 出纸声开关（小圆钮；关掉时变灰） */
.lgc-printer-snd{width:20px;height:20px;padding:0;flex:0 0 auto;cursor:pointer;font-size:11px;line-height:1;
  border:1px solid #c6ced4;border-radius:6px;background:linear-gradient(180deg,#fff,#eef2f4);color:#5d666d}
.lgc-printer-snd:hover{border-color:#9aa6ae;color:#2b3238}
.lgc-printer-snd.off{color:#aeb6bc}
/* 出纸缝：挡在纸前面（z-index 比 .lgc-receipt 高），中间那道深槽才是"出纸口"；
   两侧各一颗螺丝 —— 让这块前挡板看着是拧在机身上的 */
.lgc-printer-mouth{position:relative;z-index:74;height:16px;margin-top:-3px;padding:0 14px;
  display:flex;align-items:center;border:1px solid #c8d0d6;border-top:none;border-radius:0 0 6px 6px;
  background:linear-gradient(180deg,#c4ccd1 0%,#dfe5e8 40%,#eef2f4 100%)}
.lgc-printer-mouth i{display:block;width:100%;height:7px;border-radius:4px;background:#2b3034;
  box-shadow:inset 0 3px 4px rgba(0,0,0,.8), 0 1px 0 rgba(255,255,255,.8)}
.lgc-printer-screw{position:absolute;top:5px;width:4px;height:4px;border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#fff,#aab3b9 75%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.18)}
/* 走纸微抖（②）：出纸期间纸和机身都在轻轻震，像步进电机一格一格走纸 */
@keyframes rcShake{0%{transform:translateX(0)}25%{transform:translateX(.7px)}50%{transform:translateX(0)}75%{transform:translateX(-.7px)}100%{transform:translateX(0)}}
.lgc-printer.busy .lgc-printer-body{animation:rcShake .16s linear infinite}
.lgc-receipt.feeding{animation:rcShake .18s linear infinite}
@media (prefers-reduced-motion: reduce){
  .lgc-printer.busy .lgc-printer-body,.lgc-receipt.feeding{animation:none}
}
.lgc-receipt{position:absolute;top:calc(100% - 12px);left:0;width:302px;z-index:71;text-align:left;
  /* 小票是「纸」——就地把主题变量重置成白纸 + 黑字，不跟主题走：
     否则在敦煌 / 年画 / 潮汕这类暖色主题下整张发黄，看着就不像小票。
     自定义属性会继承给后代，所以内部所有 var(--paper)/var(--ink)/var(--line) 一并生效。 */
  --paper:#fff; --surface:#fff; --ink:#111; --ink-2:#444; --line:#d8d8d8;
  background:#fff;border:1px solid #e3e3e3;border-radius:0 0 10px 10px;   /* 上沿是「从机器里出来的边」，不圆角 */
  /* 机身投在纸面顶部的暗影（inset）+ 整张纸的投影 */
  box-shadow:0 10px 30px rgba(0,0,0,.16), inset 0 10px 10px -10px rgba(0,0,0,.22);
  /* 顶部多留一点：缝口会盖住纸上沿 12px，别把标题压进去 */
  padding:19px 14px 16px;
  /* 等宽字 + 等宽数字：小票机就是等宽打出来的，右列数字才天然对齐 */
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
  font-size:12px;color:#111;font-variant-numeric:tabular-nums;
  /* 出纸靠 JS 过渡高度（0 → 内容高），这里负责裁切 */
  overflow:hidden}
/* 纸的前缘：底边压一道很淡的阴影，像纸刚从滚轴里出来（随高度一起下移） */
.lgc-receipt::before{content:'';position:absolute;left:0;right:0;bottom:0;height:12px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(0,0,0,.055))}
/* 底部锯齿撕口：贴住底边、随高度下移 —— 出纸时看到的就是纸边在往外走 */
.lgc-receipt::after{content:'';position:absolute;left:0;right:0;bottom:0;height:6px;pointer-events:none;
  background:
    linear-gradient(-45deg, transparent 50%, #fff 50%) 0 0/12px 6px repeat-x,
    linear-gradient( 45deg, transparent 50%, #fff 50%) 0 0/12px 6px repeat-x}
/* 打印头一行行打的感觉：出纸同时各段依次浮现。
   用 both 而不是先写 opacity:0 —— 万一动画不生效，内容仍是正常可见的。 */
.lgc-receipt.open>*{animation:rcPrintLine .32s ease both}
.lgc-receipt.open>*:nth-child(1){animation-delay:.05s}
.lgc-receipt.open>*:nth-child(2){animation-delay:.16s}
.lgc-receipt.open>*:nth-child(3){animation-delay:.30s}
.lgc-receipt.open>*:nth-child(4){animation-delay:.52s}
.lgc-receipt.open>*:nth-child(5){animation-delay:.70s}
@keyframes rcPrintLine{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}

/* ---- 收据头：标题那一行 ---- */
.lgc-receipt .lgc-note-h{margin-bottom:6px;padding-bottom:6px;border-bottom:1px dashed #c9c9c9;flex-wrap:wrap;gap:6px}
/* 标题居中（小票都是居中大字头），两侧留给 📒→ / × 两颗小按钮 */
.lgc-receipt .lgc-note-h b{flex:1;text-align:center;font-size:13.5px;letter-spacing:.06em;color:#111}
/* 头部两颗按钮（📒→ / ×）在小票上属于「非纸」的部分：做成中性小图标，别抢纸的注意力 */
.lgc-receipt .lgc-note-h .lgc-note-link,
.lgc-receipt .lgc-note-h .lgc-receipt-x{
  padding:2px 7px;border:1px solid #d8d8d8;background:#fff;color:#555;border-radius:6px;
  font-size:12px;line-height:1.4;text-decoration:none;cursor:pointer;width:auto;height:auto}
.lgc-receipt .lgc-note-h .lgc-note-link{margin-left:0}
.lgc-receipt .lgc-note-h .lgc-receipt-x{margin-left:2px}
.lgc-receipt .lgc-note-h .lgc-note-link:hover,
.lgc-receipt .lgc-note-h .lgc-receipt-x:hover{border-color:#999;color:#111}

/* ---- 汇总：左右对账的收据行（原来是三张彩色卡片）---- */
.lgc-receipt .lgc-note-sum{background:transparent;border:none;padding:0;margin:0 0 4px}
.lgc-receipt .lgc-sum-h{text-align:center;font-size:11.5px;color:#444;margin-bottom:5px;letter-spacing:.04em}
.lgc-receipt .lgc-sum-row{display:flex;align-items:baseline;padding:2px 0;font-size:12.5px;color:#111}
.lgc-receipt .lgc-sum-row b{margin-left:auto;font-weight:700;color:#111}
.lgc-receipt .lgc-sum-row.total{border-top:1px dashed #c9c9c9;margin-top:4px;padding-top:5px;font-weight:700}
.lgc-receipt .lgc-pick-pkg{background:transparent;color:#111;font-style:normal;font-weight:700;padding:0}

/* ---- 明细表 / 库存：都按小票的虚线行来 ---- */
.lgc-receipt .lgc-stock-sec{border-top:1px dashed #c9c9c9;margin-top:8px;padding-top:8px}
.lgc-receipt .lgc-stock-h{font-size:12px;color:#111}
.lgc-receipt .lgc-stock-tip,.lgc-receipt .lgc-stock-badge{font-size:11px}
.lgc-receipt .lgc-note-scroll{max-height:300px}
.lgc-receipt .lgc-note-scroll table{font-size:11.5px}
.lgc-receipt .lgc-note-scroll th,.lgc-receipt .lgc-note-scroll td{padding:3px 2px;border-bottom:1px dashed #dcdcdc;color:#111}
.lgc-receipt .lgc-note-scroll th{background:transparent;color:#555;font-weight:600;font-size:11px}
.lgc-receipt .lgc-stock-row{padding:3px 0;border-bottom:1px dashed #dcdcdc;font-size:11.5px;color:#111}
.lgc-receipt .lgc-stock-row.alert{background:transparent;color:#b3261e}
.lgc-receipt .lgc-note-empty,.lgc-receipt .lgc-stock-empty{color:#777;padding:8px 0}

/* ---- 纸外的操作条：小票是纸，这些按钮不是纸 —— 用虚线隔开、做成中性小控件 ---- */
.lgc-receipt .lgc-note-tool{flex-wrap:wrap;gap:5px;margin:8px 0 0;padding-top:8px;border-top:1px dashed #c9c9c9}
.lgc-receipt .lgc-note-tool select,
.lgc-receipt .lgc-note-tool button{width:auto;min-width:0;height:26px;padding:0 8px;border:1px solid #d8d8d8;
  background:#fff;color:#444;border-radius:6px;font-size:11.5px;font-family:inherit;cursor:pointer}
.lgc-receipt .lgc-note-tool button:hover{border-color:#999;color:#111}
.lgc-receipt .lgc-note-copy{padding-top:8px;margin-top:8px;border-top:1px dashed #c9c9c9;display:flex;gap:6px}
.lgc-receipt .lgc-note-copy button{height:28px;border:1px dashed #c9c9c9;background:#fff;color:#444;border-radius:6px;font-size:11.5px;font-family:inherit}
.lgc-receipt .lgc-note-copy button:hover{background:#fafafa;color:#111;opacity:1}
/* ---- 小票正文：今日汇总（票据行，左名右值）----
   明细 / 日期段 / 发货方筛选都在独立板块「发货汇总」，小票只报今天。 */
.lgc-tkt-h{text-align:center;font-weight:700;font-size:13px;letter-spacing:.08em;margin:2px 0 1px}
.lgc-tkt-d{text-align:center;font-size:11px;color:#555;margin-bottom:6px}
.lgc-tkt-row{display:flex;align-items:baseline;padding:2px 0;font-size:12.5px}
.lgc-tkt-row span{flex:0 0 auto}
.lgc-tkt-row b{margin-left:auto;font-weight:700}
.lgc-tkt-row.tot{border-top:1px dashed #c9c9c9;margin-top:4px;padding-top:5px;font-weight:700}
/* 纸外操作条里的跳页链接（📦 发货汇总 →）：样式对齐同排按钮 */
.lgc-receipt .lgc-tool-link{display:inline-block;height:26px;line-height:24px;padding:0 8px;border:1px solid #d8d8d8;
  background:#fff;color:#444;border-radius:6px;font-size:11.5px;text-decoration:none;white-space:nowrap}
.lgc-receipt .lgc-tool-link:hover{border-color:#999;color:#111}

/* 系统开了「减少动态效果」就老实显示，不做动画 */
@media (prefers-reduced-motion: reduce){
  .lgc-receipt{transition:none !important}
  .lgc-receipt.open>*{animation:none}
}
/* 收起按钮的样式已并入上面的小票块（.lgc-receipt .lgc-note-h .lgc-receipt-x） */
.lgc-note-tool{display:flex;gap:6px;align-items:center;margin-bottom:10px}
.lgc-note-tool select{width:96px;min-width:0;height:30px;border:1px solid var(--line,#e6e8eb);border-radius:7px;padding:0 6px;font-size:12px;background:var(--paper,#fff);color:var(--ink,#1f2329)}
.lgc-note-tool button{height:30px;padding:0 9px;border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);color:var(--ink,#1f2329);border-radius:7px;font-size:12px;cursor:pointer;white-space:nowrap}
.lgc-note-tool button:hover{border-color:var(--terra,#c5764c);color:var(--terra,#c5764c)}
.lgc-note-sum{background:#faf8f6;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:8px 10px;margin-bottom:10px}
.lgc-sum-h{font-size:11px;color:var(--ink-2,#8a9099);font-weight:600;margin-bottom:6px}
.lgc-sum-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#3c4043;padding:3px 0}
.lgc-sum-row b{font-weight:600}
/* 汇总卡底部的三个关键数：总发货 / 退款 / 实际（并排，和上面的仓库行分开） */
.lgc-sum-3{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line,#e6e8eb)}
.lgc-sum-3 span{flex:1 1 0;text-align:center;font-size:11.5px;color:#5b6470}
.lgc-sum-3 b{display:block;font-size:17px;color:#1f2329;font-weight:700;line-height:1.35}
.lgc-sum-3 span.r b{color:var(--terra,#c5764c)}
/* ===== 发货汇总的每日表：做成 Excel 那种格子表 =====
   原来的问题是「一行十几个数字全靠留白分列」，很容易看串行。现在靠五件事区分：
     ① 每个格子都有线（Excel 的框线）
     ② 表头灰底加粗，并且纵向滚动时钉在顶部（内部滚动，页面不会跑）
     ③ 隔行浅底（zebra）+ 鼠标悬停整行高亮 —— 扫一行不怕串列
     ④ 顶部一行分组表头：左边「单数」区、右边「BOM 拆分（件数）」区
     ⑤ 「单数」和「件数」之间一道粗线；同一天的第二行不重复写日期，用一条粗线分组 */
.lgc-pick-scroll{overflow:auto;max-height:calc(100vh - 300px)}   /* 表头能钉住的前提：容器自己滚 */
.lgc-pick-t{min-width:1250px;border-collapse:collapse;font-variant-numeric:tabular-nums}
.lgc-pick-t th,.lgc-pick-t td{border:1px solid #e0e5ea;padding:6px 9px}
/* 表头：两行都钉住（第一行 26px 高，所以第二行从 26px 开始钉） */
.lgc-pick-t thead th{background:#f2f5f8;color:#3c4653;font-weight:700}
.lgc-pick-t thead tr.grp-row th{position:sticky;top:0;z-index:3;height:26px;
  background:#e9eef4;font-size:11.5px;letter-spacing:.06em;color:#5b6470}
.lgc-pick-t thead tr:not(.grp-row) th{position:sticky;top:26px;z-index:2}
.lgc-pick-t thead th.grp.bom{background:#efe9e1;color:#8a6f5e}
.lgc-pick-t thead th.bom{background:#eef1f4}
/* 第三组：截流回收（当天退回来的件数）—— 暖色调，和"发货"一眼分得开 */
.lgc-pick-t thead th.grp.rec{background:#f7ece5;color:#a8674b}
.lgc-pick-t thead th.rec{background:#f8f2ee}
/* 单数区 ↔ 发货（件）↔ 回收区 的分界（粗一点） */
.lgc-pick-t th.bom-first,.lgc-pick-t td.bom-first{border-left:2px solid #cfd7de}
.lgc-pick-t th.rec-first,.lgc-pick-t td.rec-first{border-left:2px solid #d9c4b8}
.lgc-pick-t th.rec,.lgc-pick-t td.rec{white-space:nowrap;text-align:center}
/* zebra + 悬停整行 */
.lgc-pick-t tbody tr{background:#fff}
.lgc-pick-t tbody tr:nth-child(even){background:#fafbfc}
.lgc-pick-t tbody tr:hover{background:#fff7f0}
/* 同一天的第二行不写日期，靠这条粗线把两天分开 */
.lgc-pick-t tbody tr.day-start td{border-top:2px solid #d5dce2}
/* BOM 列：居中、数字不换行；为 0 显示浅点；「22-1」浅色、= 后面的结果加粗 */
.lgc-pick-t th.bom,.lgc-pick-t td.bom{white-space:nowrap;text-align:center}
.lgc-pick-t td.z{color:#c8ccd1}
.lgc-pick-t td .f{color:#a08b7a}
.lgc-pick-t td b{font-weight:700}
/* 包裹数标注：合单发货（一包多单）时，在订单数旁边补一个「N 包」，
   让仓库数的包裹数能直接对上；包裹数=订单数时不显示，避免噪音 */
.lgc-pick-pkg{font-style:normal;font-size:11px;font-weight:600;color:#7c4dbf;
  background:#f3edfb;border-radius:4px;padding:1px 4px;margin-left:2px}

/* ===== 退货批次分析（发货汇总页里那条「哪批货」）=====
   单独一套表格样式：.lgc-pick-t 有 min-width:1250px（每日明细列多），这里只有 5~6 列，
   套用会被强行撑宽、还得横向滚。 */
.lgc-rb-t{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;font-size:12.5px}
.lgc-rb-t th,.lgc-rb-t td{border:1px solid #e0e5ea;padding:5px 9px;white-space:nowrap}
.lgc-rb-t thead th{background:#f2f5f8;color:#3c4653;font-weight:700;text-align:left}
.lgc-rb-t th.num,.lgc-rb-t td.num{text-align:right}
.lgc-rb-t tbody tr:nth-child(even){background:#fafbfc}
.lgc-rb-t tbody tr:hover{background:#fff7f0}
.lgc-rb-t td.z{color:#c8ccd1}
/* 退款率：明显偏高的批次要一眼挑出来（按整体退款率的 1.5 / 2 倍分档） */
.lgc-rb-rate{font-weight:700}
.lgc-rb-rate.lgc-rb-warm{color:#b06a43;background:#fdf3ec}
.lgc-rb-rate.lgc-rb-hot{color:#c0392b;background:#fdecea}
.lgc-rb-sub{margin:12px 0 5px;font-size:12.5px;font-weight:600;color:#5b6675}
.lgc-rb-mute{color:#8c959e}
/* 「未发货 / 无批次」汇总行：沉底、灰显，明确不计入任何发货批次的退货率 */
.lgc-rb-unshipped{background:#f4f6f8;color:#8c959e;font-style:italic}
.lgc-rb-unshipped:hover{background:#eef1f4}
.lgc-rb-bk{font-size:11px;font-weight:400;margin-left:2px}
.lgc-rb-warm{color:#b06a43}
.lgc-rb-flex{display:flex;gap:20px;flex-wrap:wrap;margin-top:2px}
.lgc-rb-flex>div{flex:1 1 330px;min-width:0;overflow:auto}
.lgc-sum-row.total{border-top:1px dashed var(--line,#e6e8eb);margin-top:4px;padding-top:6px;color:var(--ink,#1f2329);font-weight:600}
.lgc-sum-row.past{color:var(--ink-2,#8a9099);border-top:1px dashed var(--line,#e6e8eb);margin-top:4px;padding-top:6px}
.lgc-note-scroll{max-height:420px;overflow:auto}
.lgc-note-scroll table{width:100%;border-collapse:collapse;font-size:12px}
.lgc-note-scroll th,.lgc-note-scroll td{padding:6px 8px;border-bottom:1px solid var(--line,#e6e8eb);text-align:left}
.lgc-note-scroll th{color:var(--ink-2,#8a9099);font-weight:600;position:sticky;top:0;background:var(--paper,#fff)}
.lgc-note-scroll .num{text-align:right}
.lgc-note-empty{color:#9aa0a6;font-size:12px;text-align:center;padding:18px 0}
.lgc-stock-sec{margin-top:12px;padding-top:10px;border-top:1px solid var(--line,#e6e8eb)}
.lgc-stock-h{font-size:12px;font-weight:600;color:var(--ink,#1f2329);display:flex;align-items:center;gap:8px}
.lgc-stock-tip{font-weight:400;color:#9aa0a6;font-size:11px}
.lgc-stock-badge{min-width:18px;height:18px;line-height:18px;padding:0 5px;border-radius:9px;font-size:11px;font-weight:700;text-align:center;display:inline-block}
.lgc-stock-badge.warn{background:#d93025;color:#fff;animation:lgcPulse 1.2s infinite}
.lgc-stock-badge.ok{background:#e6f4ea;color:#188038}
.lgc-stock-badge.none{background:#eef0f2;color:#9aa0a6}
@keyframes lgcPulse{0%{box-shadow:0 0 0 0 rgba(217,48,37,.45)}70%{box-shadow:0 0 0 6px rgba(217,48,37,0)}100%{box-shadow:0 0 0 0 rgba(217,48,37,0)}}
.lgc-stock-arrow{margin-left:auto;color:#8a9099;font-size:12px;transition:transform .15s}
.lgc-stock-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#3c4043;padding:5px 6px;border-bottom:1px dashed #f0f1f3}
.lgc-stock-row:last-child{border-bottom:none}
.lgc-stock-row b{font-weight:600}
.lgc-stock-row.alert{color:#d93025;background:#fdf0ef;border-radius:6px}
.lgc-stock-empty{color:#9aa0a6;font-size:12px;text-align:center;padding:10px 0}
.lgc-set-opt{display:flex;gap:8px;align-items:flex-start;font-size:12px;color:#3c4043;padding:8px 10px;border:1px solid var(--line,#e6e8eb);border-radius:8px;margin-bottom:8px;cursor:pointer}
.lgc-set-opt input{margin-top:2px}
.lgc-set-opt span{line-height:1.5}
.lgc-set-opt:has(input:checked){border-color:var(--terra,#c5764c);background:#fdf6f1}
.lgc-note-copy{padding-top:10px;border-top:1px solid var(--line,#e6e8eb);margin-top:10px;display:flex;gap:8px}
.lgc-note-copy button{flex:1 1 0;min-width:0;height:32px;border:1px solid var(--terra,#c5764c);background:var(--terra,#c5764c);color:#fff;border-radius:7px;font-size:12px;cursor:pointer}
.lgc-note-copy button:hover{opacity:.9}

/* ===== 发货汇总（sec-ship）页体外框：工具条 / 页头 / 内区 =====
   ⚠️ 这套 .inv-* 是页面外框样式，进销存页与发货汇总页共用。删进销存时曾把它一起删掉，
   导致发货汇总页排版错乱（工具条不再成排、挤成一团），这里恢复。 */
.inv-root{display:flex;flex-direction:column;height:calc(100vh - 110px);min-height:420px;background:var(--paper,#fff);border-radius:var(--r,12px);overflow:hidden;border:1px solid var(--line,#e6e8eb)}
.inv-head{padding:12px 18px;border-bottom:1px solid var(--line,#e6e8eb);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.inv-head h1{font-size:16px;font-weight:700;color:var(--ink,#1f2329)}
.inv-sub{font-size:12px;color:var(--ink-2,#8a9099)}
.inv-tip{font-size:12px;color:var(--ink-2,#8a9099)}
.inv-date{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2,#8a9099)}
.inv-date input{height:30px;border:1px solid var(--line,#e6e8eb);border-radius:7px;padding:0 8px;font-size:12px;background:var(--paper,#fff);color:var(--ink,#1f2329)}
.inv-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
.inv-tools button{height:30px;padding:0 12px;border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);color:var(--ink,#1f2329);border-radius:7px;font-size:12px;cursor:pointer;white-space:nowrap;font-family:inherit}
.inv-tools button:hover{border-color:var(--terra,#c5764c);color:var(--terra,#c5764c)}
.inv-tools button.primary{background:var(--terra,#c5764c);border-color:var(--terra,#c5764c);color:#fff}
.inv-tools button.primary:hover{background:var(--terra-deep,#b06842);color:#fff}
/* 页头里的下拉 / 日期输入（发货汇总页：发货方筛选 + 日期段） */
.inv-tools select,.inv-tools input[type=date]{height:30px;border:1px solid var(--line,#e6e8eb);border-radius:7px;
  padding:0 8px;font-size:12px;background:var(--paper,#fff);color:var(--ink,#1f2329);font-family:inherit}
.inv-tools select{min-width:132px}
/* 2026-10-26 起这一页是**左右两栏**：左 = 进/销/存，右 = CMD 调试台（见 index.html 的 .inv-console）。
   ⚠️ .inv-body 原来的 max-width:1180px 必须去掉：右栏是加进来了，但左栏自己还卡在 1180px，
      宽屏下中间那条空白会从"右边留白"变成"两栏之间留白"，看着像右栏跑歪了。 */
.inv-main{flex:1;min-height:0;display:flex;gap:12px;padding:14px 18px;box-sizing:border-box}
.inv-body{flex:1 1 auto;min-width:0;min-height:0;overflow:auto;padding:0;box-sizing:border-box}

/* ===== 进销存右侧 CMD 调试台（2026-10-26）=====
   配色沿用智能客服日志区那套深色终端（.aics-term）。
   必须用等宽字体：输出是「订单号 + 件数」这种要对齐的文本，比例字体会串行，
   而这一栏存在的唯一理由就是让人逐单核对拆得对不对。 */
.inv-console{flex:0 0 400px;width:400px;min-width:300px;min-height:0;display:flex;flex-direction:column;
  background:#1c2128;border:1px solid #2d333b;border-radius:10px;overflow:hidden;
  font-family:Consolas,"Courier New",Menlo,monospace}
.inv-console-h{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:8px 10px;
  background:#22272e;border-bottom:1px solid #2d333b;font-size:12px;color:#adbac7}
.inv-console-dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:#3fb950;
  box-shadow:0 0 6px rgba(63,185,80,.9)}
.inv-console-title{flex:0 0 auto;font-weight:600;color:#d0d7de}
/* 调试台左上角的日期：**一个小标签**（📅 今天），点它才弹日历。
   裸的 input[type=date] 塞进这条深色工具条里又宽又白，用户原话是「整行都过去的」。
   做法：label 负责长相，input 透明盖在上面（尺寸 = 标签）负责接点击，
   这样点哪儿都是点 input，Chrome 再靠 showPicker() 把日历直接弹出来。 */
.inv-console-date{position:relative;flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;
  height:22px;padding:0 8px;border:1px solid #3d444d;background:#2d333b;color:#adbac7;
  border-radius:6px;font-size:11px;cursor:pointer;white-space:nowrap;line-height:1;
  transition:border-color .12s,color .12s}
.inv-console-date:hover{border-color:#539bf5;color:#79c0ff}
.inv-console-date-ico{font-size:11px;line-height:1}
.inv-console-date-txt{font-variant-numeric:tabular-nums}
/* 透明覆盖层：不能 display:none / visibility:hidden —— 那样 showPicker() 会被浏览器拒绝。
   用 opacity:0 + inset:0，元素仍在布局里、也在视口内。 */
.inv-console-date-inp{position:absolute;inset:0;width:100%;height:100%;opacity:0;
  border:0;padding:0;margin:0;cursor:pointer;color-scheme:dark}
.inv-console-date-inp:focus{outline:none}
.inv-console-tip{flex:1 1 auto;min-width:0;font-size:11px;color:#768390;text-align:right;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inv-console-h button{flex:0 0 auto;height:22px;padding:0 8px;border:1px solid #3d444d;background:#2d333b;
  color:#adbac7;border-radius:6px;font-size:11px;cursor:pointer;font-family:inherit;line-height:1}
.inv-console-h button:hover{border-color:#539bf5;color:#79c0ff}
.inv-console-body{flex:1 1 auto;min-height:0;overflow:auto;padding:8px 10px;font-size:12px;
  line-height:1.6;color:#adbac7;white-space:pre-wrap;word-break:break-word}
.inv-console-in{flex:0 0 auto;display:flex;align-items:center;gap:6px;padding:7px 10px;
  border-top:1px solid #2d333b;background:#22272e}
.inv-console-ps{flex:0 0 auto;color:#7ee787;font-size:12px;font-weight:600}
.inv-console-in input{flex:1 1 auto;min-width:0;border:0;outline:0;background:transparent;
  color:#d0d7de;font-size:12px;font-family:inherit;caret-color:#7ee787;padding:0}
.inv-console-in input::placeholder{color:#545d68}
/* 输出配色：一屏几十行，只用几种颜色标重点，别把整屏都染上色 */
.inv-console-body .c-cmd{color:#7ee787}   /* 刚敲的那条命令 */
.inv-console-body .c-err{color:#ff7b72}
.inv-console-body .c-warn{color:#e3b341}
.inv-console-body .c-dim{color:#768390}
.inv-console-body .c-hi{color:#79c0ff}
.inv-console-body .c-ok{color:#3fb950}
.inv-console-body .c-ord{color:#d0d7de;font-weight:600}
/* 汇报块（2026-10-26 用户给的样式）：分隔线 / 合计标题 / 分类明细。
   等号串用暗色，不然一屏全是亮线，眼睛先被线带走。 */
.inv-console-body .c-sep{color:#4d5560;letter-spacing:-1px}
.inv-console-body .c-sumt{color:#d0d7de;font-weight:600}
.inv-console-body .c-suml{color:#adbac7}
/* 折叠成一条竖边（不能整块隐藏 —— 隐藏了就没地方点回来） */
.inv-console.fold{flex:0 0 34px;width:34px;min-width:34px}
.inv-console.fold .inv-console-body,
.inv-console.fold .inv-console-in,
.inv-console.fold .inv-console-tip,
.inv-console.fold .inv-console-date,
.inv-console.fold #invConClear{display:none}
.inv-console.fold .inv-console-h{flex-direction:column;align-items:center;gap:6px;height:100%;padding:8px 4px}
.inv-console.fold .inv-console-title{writing-mode:vertical-rl;letter-spacing:3px}
@media (max-width:1280px){
  .inv-main{flex-direction:column;padding:12px}
  .inv-console{flex:0 0 260px;width:auto;min-width:0}
  .inv-console.fold{flex:0 0 34px;width:auto;min-width:0}
  .inv-console.fold .inv-console-h{flex-direction:row;height:auto;padding:8px 10px}
  .inv-console.fold .inv-console-title{writing-mode:horizontal-tb;letter-spacing:0}
}

/* ===== 订单扫码页右下角：刚扫的单拆出了什么（2026-10-26）=====
   用户原话：「在订单扫码的时候，能直接在右下角显示拆出多少吗：始终半透明，
   显示五行，第六行就消第一行」。所以这里固定 5 行上限，新的进、最旧的出。
   ⚠️ pointer-events:none 是硬要求 —— 它浮在表格右下角，能点的话会挡住扫码操作
      和行点击，而它只是个「余光能看到」的角标，不是要交互的控件。 */
.split-chip{position:fixed;right:14px;bottom:14px;z-index:880;
  display:none;flex-direction:column;gap:4px;
  width:min(360px,calc(100vw - 28px));
  pointer-events:none;opacity:.72;
  font-family:Consolas,"Courier New",Menlo,monospace}
.split-chip .sc-row{display:flex;align-items:center;gap:8px;
  padding:5px 9px;border-radius:7px;
  background:rgba(28,33,40,.88);border:1px solid rgba(255,255,255,.10);
  border-left:3px solid #3fb950;color:#d0d7de;font-size:11.5px;line-height:1.35;
  box-shadow:0 2px 10px rgba(0,0,0,.22);
  animation:scIn .18s ease-out both}
/* 黄 = 这单拆得可疑（没拆出耳机 / 带赠品没扣壳），红 = 这单被仅退款截流 */
.split-chip .sc-row.sc-warn{border-left-color:#e3b341}
.split-chip .sc-row.sc-ref{border-left-color:#ff7b72}
.split-chip .sc-no{flex:0 0 auto;color:#79c0ff;font-weight:600}
.split-chip .sc-bom{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@keyframes scIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media (max-width:760px){ .split-chip{width:calc(100vw - 20px);right:10px;bottom:10px} }
.inv-body .lgc-stock-sec{margin:0;padding:12px 14px;border:1px solid var(--line,#e6e8eb);border-radius:10px;background:var(--paper,#fff)}

/* 发货汇总「顶部一行」：工具条在左、汇总卡在右；表格在下面整宽 */
.lgc-ship-top{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;margin-bottom:12px}
.lgc-ship-tools{margin-left:0;flex:1 1 420px;min-width:0}
.lgc-ship-top .lgc-note-sum{flex:0 0 300px;margin-bottom:0}
@media (max-width:820px){ .lgc-ship-top .lgc-note-sum{flex:1 1 100%} }

/* ===== 进销存（2026-10-25 从「发货汇总」改造）=====
   三块新东西：库存表（期初/入库/出库/结存）、入库登记条、流水表。
   样式沿用这一页已有的 .inv-* 外框与 .lgc-note-scroll 滚动区，只补表与表单的细节。 */
.inv-bar input{height:32px;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:0 10px;
  background:var(--paper,#fff);color:var(--ink,#1f2329);font-size:13px;font-family:inherit;flex:0 0 auto}
.inv-bar input[type=number]{text-align:right}
/* 结存表同样是**格子线**（2026-10-26 用户：「表格连个框线都没有」）：
   横竖都画，隔行浅底，横向扫一行时不会串行。 */
.inv-stock-t{width:100%;border-collapse:collapse;font-size:12.5px;
  border:1px solid var(--line,#e6e8eb)}
.inv-stock-t th{text-align:left;font-weight:600;color:var(--ink-2,#8a9099);padding:7px 8px;
  border:1px solid var(--line,#e6e8eb);background:#f6f7f8;white-space:nowrap}
.inv-stock-t td{padding:7px 8px;border:1px solid var(--line,#e6e8eb);vertical-align:middle}
.inv-stock-t tbody tr:nth-child(even) td{background:#fcfcfd}
.inv-stock-t .num{text-align:right;font-variant-numeric:tabular-nums}
.inv-stock-t .inv-unit{margin-left:5px;font-size:11px;color:#9aa0a6}
.inv-stock-t .inv-stock b{font-size:14px}
.inv-stock-t .inv-plus{color:#3f7a52}
.inv-stock-t .inv-minus{color:#a2622f}
.inv-stock-t .inv-z{color:#c6ccd2}
/* 可点的格子（期初 / 安全库存）：虚下划线表示「这一格能改」，不点也没关系 */
.inv-stock-t .inv-edit{cursor:pointer;border-bottom:1px dashed #cdd8cd}
.inv-stock-t .inv-edit:hover{background:#f6faf4;color:#2f5d3a}
/* 缺货行：淡红底 + 结存数字变红（只用颜色，不闪 —— 这一页已经有黄框在闪，再多一处会看不清） */
.inv-stock-t tr.inv-alarm>td{background:#fff6f4}
.inv-stock-t tr.inv-alarm .inv-stock b{color:#c0392b}
/* 期初下面的基准日小字（2026-10-25）：不摆出来，人根本不知道这个「期初」从哪天起算，
   也就看不出「为什么结存是负的」—— 那个负数不是算错，是起点没定义。 */
.inv-op-day{display:inline-block;margin-top:2px;font-size:10.5px;color:#9aa0a6;font-weight:400}
.inv-op-day.inv-warn{color:#c0392b}
/* ⚠️ 2026-10-26 用户原话：「表格连个框线都没有，万一哪个眼睛看不到的，他不是看不到线吗」
   —— 原来只画了横向底线（border-bottom），行一多就靠"感觉"对齐，横向还完全没线。
   这里以后统一是**格子线**（横竖都有），跟惠州那张 Excel 台账一个观感。 */
.inv-mv-t{width:100%;border-collapse:collapse;font-size:12px;border:1px solid var(--line,#e6e8eb)}
.inv-mv-t th{text-align:left;font-weight:600;color:var(--ink-2,#8a9099);padding:6px 8px;
  border:1px solid var(--line,#e6e8eb);white-space:nowrap;position:sticky;top:0;background:var(--paper,#fff);
  /* border-collapse 下 sticky 表头滚动时底边会丢，补一道阴影当线 */
  box-shadow:0 1px 0 var(--line,#e6e8eb)}
.inv-mv-t td{padding:6px 8px;border:1px solid var(--line,#e6e8eb);vertical-align:top}
.inv-mv-t tbody tr:nth-child(even) td{background:#fcfcfd}
.inv-mv-t .num{text-align:right;font-variant-numeric:tabular-nums}
/* 入库汇总（2026-10-26 用户定的版式）：行 = 物料、列 = 日期、最后一列合计。
   日期列可能有几十个（一个月 30 列），所以第一列和表头都钉住 —— 横向滚到右边时
   还得看得见「这是哪种料」；否则一排数字不知道该对到哪一行。
   钉住的格子用 box-shadow 补线：border-collapse 下 sticky 元素的边框会被压在下面。 */
.inv-sum-t{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap;
  border:1px solid var(--line,#e6e8eb)}
.inv-sum-t th,.inv-sum-t td{padding:6px 9px;border:1px solid var(--line,#e6e8eb)}
.inv-sum-t thead th{position:sticky;top:0;z-index:2;background:#f6f7f8;
  text-align:right;font-weight:600;color:var(--ink-2,#8a9099);
  box-shadow:0 1px 0 var(--line,#e6e8eb)}
.inv-sum-t thead th:first-child{text-align:left;left:0;z-index:3;
  box-shadow:1px 0 0 var(--line,#e6e8eb),0 1px 0 var(--line,#e6e8eb)}
.inv-sum-t tbody th{position:sticky;left:0;z-index:1;background:var(--paper,#fff);text-align:left;
  font-weight:500;color:var(--ink,#1f2329);box-shadow:1px 0 0 var(--line,#e6e8eb)}
.inv-sum-t tbody tr:nth-child(even) td{background:#fcfcfd}
.inv-sum-t .num{text-align:right;font-variant-numeric:tabular-nums}
.inv-sum-t .z{color:#c6ccd2}
/* 合计那一列单独加深，一眼能找到「这项一共进了多少」 */
.inv-sum-t .inv-sum-total{font-weight:700;background:#f9fafb}
.inv-sum-t tfoot th,.inv-sum-t tfoot td{background:#f4f6f7;font-weight:700;
  border-top:2px solid var(--line,#e6e8eb)}
.inv-sum-t tfoot th{position:sticky;left:0;z-index:1;text-align:left;
  box-shadow:1px 0 0 var(--line,#e6e8eb)}
.inv-sum-t tr.inv-off th,.inv-sum-t tr.inv-off td{color:#9aa0a6}
/* 表头里的区间合计（2026-10-26）：出库明细的顺丰 / 中通总数写在列名后面，
   字更实一点、不抢列名，但一眼能看到这个区间各多少。 */
.lgc-th-sum{font-weight:700;color:var(--ink,#1f2329);margin-left:2px}
.inv-dir{display:inline-block;padding:1px 7px;border-radius:9px;font-size:11px;font-weight:600}
.inv-dir.in{background:#eaf5ec;color:#3f7a52}
.inv-dir.adj{background:#fdf3e3;color:#9a6a1f}
.inv-neg{color:#c0392b}
.inv-x{height:22px;padding:0 8px;border:1px solid #e3cdc6;background:#fff;color:#9a3320;
  border-radius:6px;font-size:11px;cursor:pointer;font-family:inherit;white-space:nowrap}
.inv-x:hover{background:#fdf1ee;border-color:#c9a79e}
.inv-bad{color:#c0392b !important}
/* 分段标签（进库 / 出库 / 结存）：直接用「系统设置」那套 .seg 组件（style.css），
   这里只补它与面板之间的间距，不重定义外观 —— 两页的 tab 长得不一样会显得是两个人做的。
   ⚠️ 面板之间的间距用「相邻兄弟」而不是给每个 pane 加 margin：pane 是 display 切换的，
      给每个都加 margin 会在隐藏块前后留下多余空档。 */
.inv-seg{margin-bottom:12px}
.inv-pane+.inv-pane{margin-top:12px}

.lgc-topbar{padding:10px 18px;background:var(--paper,#fff);border-bottom:1px solid var(--line,#e6e8eb);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.lgc-topbar h1{font-size:16px;font-weight:700;color:var(--ink,#1f2329)}
.lgc-topbar .lgc-btn{padding:6px 14px;border:1px solid var(--terra,#c5764c);background:var(--terra,#c5764c);color:#fff;border-radius:7px;font-size:13px;cursor:pointer;white-space:nowrap;font-family:inherit}
.lgc-topbar .lgc-btn:hover{border-color:var(--terra-deep,#b06842);background:var(--terra-deep,#b06842)}
.lgc-topbar .lgc-btn.warn{background:transparent;color:var(--red,#c0392b);border-color:var(--red,#c0392b)}
.lgc-topbar .lgc-btn.warn:hover{background:var(--red,#c0392b);color:#fff}
.lgc-topbar .lgc-btn.ok{background:transparent;color:var(--green,#4f7d56);border-color:var(--green,#4f7d56)}
.lgc-topbar .lgc-btn.ok:hover{background:var(--green,#4f7d56);color:#fff}
.lgc-topbar .lgc-btn:disabled{opacity:.5;cursor:not-allowed}
.lgc-topbar .lgc-hint{font-size:12px;color:var(--ink-2,#8a9099);margin-left:4px}
.lgc-topbar .lgc-hint.ok{color:var(--green,#4f7d56)}
.lgc-topbar .lgc-hint.err{color:var(--red,#c0392b)}
.lgc-topbar .lgc-hint.wait{color:var(--terra,#c5764c)}
/* 顶栏内边距与行距跟随主题密度。注意：只动「容器」，不动操作区 ——
   输入框高度、按钮高度、表格行高一律不碰，那几处是扫码岗的肌肉记忆。 */
.lgc-topbar{gap:0;row-gap:calc(var(--gap,11px) * .7);column-gap:10px;padding:calc(var(--gap,12px) * .75) calc(var(--gap,18px) * 1.1)}
.lgc-tl-row{display:flex;align-items:center;gap:calc(var(--gap,10px) * .8);width:100%;flex-wrap:wrap}
.lgc-scanbar{flex:1;min-width:300px;display:flex;align-items:center;gap:8px}
.lgc-input{height:34px;padding:0 12px;border:1px solid var(--line,#e6e8eb);border-radius:8px;font-size:14px;font-family:inherit;outline:none;background:var(--paper,#fff);color:var(--ink,#1f2329);transition:border-color .15s, box-shadow .15s}
.lgc-scanbar .lgc-input{flex:1;min-width:200px}
.lgc-input:focus{border-color:var(--terra,#c5764c);box-shadow:0 0 0 2px rgba(197,118,76,.14)}
.lgc-field{display:inline-flex;align-items:center;gap:6px;height:34px;font-size:13px;color:var(--ink-2,#8a9099)}
.lgc-field select,.lgc-field input[type="date"]{height:30px;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:0 8px;background:var(--paper,#fff);color:var(--ink,#1f2329);font-size:13px;font-family:inherit}
.lgc-toolbtn{white-space:nowrap}
/* 扫码栏筛选 chip：点开跨日期拉某类售后单（取代原「登记记录」面板入口） */
.lgc-chipgrp{display:inline-flex;gap:6px;margin-left:8px}
.lgc-chip{padding:4px 12px;border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);color:#5b6675;border-radius:999px;font-size:12.5px;font-weight:600;font-family:inherit;cursor:pointer;white-space:nowrap}
.lgc-chip:hover{border-color:#1e93dd;color:#1e93dd}
.lgc-topbar .lgc-btn{margin:0}
.lgc-body{flex:1;display:flex;min-height:0}
.lgc-sidebar{width:260px;flex:0 0 260px;background:var(--paper,#fff);border-right:1px solid var(--line,#e6e8eb);display:flex;flex-direction:column;min-height:0}
.lgc-sb-head{padding:14px 16px 8px}
.lgc-sb-head h2{font-size:15px;font-weight:700;color:var(--ink,#1f2329)}
.lgc-sb-head p{font-size:12px;color:var(--ink-2,#8a9099);margin-top:3px}
.lgc-datepick{padding:0 16px 10px;border-bottom:1px solid var(--line,#e6e8eb)}
.lgc-datepick input{width:100%;padding:7px 10px;border:1px solid var(--line,#e6e8eb);border-radius:7px;font-size:13px;background:var(--bg,#f5f6f8);color:var(--ink,#1f2329)}
.lgc-datepick input:focus{outline:none;border-color:var(--terra,#c5764c)}
.lgc-date-list{flex:1;overflow-y:auto;padding:6px}
.lgc-date-item{padding:10px 12px;border-radius:8px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;margin-bottom:3px;border:1px solid transparent;transition:.12s;color:var(--ink,#1f2329)}
.lgc-date-item:hover{background:var(--line-soft,#eee);background:color-mix(in srgb, var(--terra,#c5764c) 10%, transparent)}
.lgc-date-item.active{background:var(--terra,#c5764c);color:#fff;border-color:var(--terra,#c5764c)}
.lgc-date-item .lgc-d-left{font-size:14px;font-weight:600}
.lgc-date-item .lgc-d-left small{display:block;font-weight:400;font-size:11px;opacity:.75;margin-top:1px}
.lgc-date-item .lgc-d-right{font-size:12px;text-align:right}
.lgc-date-item .lgc-d-right b{font-size:15px}
.lgc-date-item.active .lgc-d-right{color:#fff}
/* 扫码框后面那组「姓名 + 地址」联合搜索。
   ⚠️ 宽度必须显式给死（flex:0 0 auto + width）：`.lgc-input` 是给扫码框用的，
   那个框要尽量占满，直接继承下来这里两个小框会被撑成一整行，把工具按钮挤下去。 */
.lgc-findbar{display:inline-flex;align-items:center;gap:6px}
.lgc-findbar .lgc-input{flex:0 0 auto;width:134px}
.lgc-findbar .lgc-input.lgc-find-region{width:172px}
.lgc-month-head{display:flex;align-items:center;gap:6px;padding:9px 12px;margin:6px 0 2px;border-radius:8px;cursor:pointer;font-weight:600;color:var(--ink,#1f2329);user-select:none}
.lgc-month-head:hover{background:color-mix(in srgb,var(--terra,#c5764c) 10%,transparent)}
.lgc-month-head .lgc-m-caret{display:inline-block;width:12px;text-align:center;color:var(--ink-2,#8a9099)}
.lgc-month-head .lgc-m-name{font-size:13px}
.lgc-month-head .lgc-m-sum{margin-left:auto;font-size:11px;font-weight:400;color:var(--ink-2,#8a9099)}
.lgc-month-head.open .lgc-m-name{color:var(--terra,#c5764c)}
.lgc-month-head.jan{color:#1f6fd6;background:color-mix(in srgb,#1f6fd6 9%,transparent)}
.lgc-month-head.jan:hover{background:color-mix(in srgb,#1f6fd6 16%,transparent)}
.lgc-month-head.jan .lgc-m-caret,.lgc-month-head.jan .lgc-m-sum{color:#1f6fd6}
.lgc-month-head.jan.open .lgc-m-name{color:#1f6fd6}
.lgc-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
.lgc-main-head{padding:calc(var(--gap,12px) * .75) calc(var(--gap,18px) * 1.1);border-bottom:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}
.lgc-main-head h3{font-size:16px;color:var(--ink,#1f2329)}
.lgc-main-head .lgc-sub{font-size:12px;color:var(--ink-2,#8a9099);margin-top:2px}
/* align-items:center：三个统计卡按自身内容高度显示，不被右侧「按钮堆」（今日已清/清已关闭/退款登记）
   拉伸成等高的空盒子 —— 默认 stretch 会把卡片撑到按钮堆那么高，看着就是三个空一大截的框。 */
.lgc-stats{display:flex;gap:10px;align-items:center}
.lgc-stat{background:var(--line-soft,#eee);background:color-mix(in srgb, var(--terra,#c5764c) 10%, transparent);border-radius:8px;padding:5px 12px;text-align:center;min-width:74px}
.lgc-stat .n{font-size:17px;font-weight:700;color:var(--terra,#c5764c);line-height:1.25}
.lgc-stat .l{font-size:11px;color:var(--ink-2,#8a9099)}
/* 「已关闭N单，不计总订单数」说明行：跟在三个统计卡后面，只作口径说明 */
.lgc-note-closed{font-size:11px;color:var(--ink-2,#8a9099);line-height:1.35;max-width:112px;text-align:left}
/* 退款风控总览卡 */
.lgc-overview{padding:10px 18px;border-bottom:1px solid var(--line,#e6e8eb);background:var(--paper,#fff)}
.lgc-ov-title{font-size:13px;font-weight:700;color:var(--ink,#1f2329);margin-bottom:8px;display:flex;align-items:center;gap:8px}
.lgc-ov-time{font-size:11px;font-weight:400;color:var(--ink-2,#8a9099)}
.lgc-ov-cards{display:flex;flex-wrap:wrap;gap:10px}
.lgc-ov-kpis{display:flex;flex-wrap:wrap;gap:10px}
.lgc-ov-sub{font-weight:400;font-size:11px;color:var(--ink-3,#9aa0a6)}
.lgc-ov-main{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}

/* 大数据分析：紧凑方形小块 —— 上「类别名」、中「单数」、下「金额(带¥)」，居中排布。
   flex 自动换行，块小、字号小，不占大块面积。 */
.lgc-ov6{display:flex;flex-wrap:wrap;gap:8px}
/* 大数据分析这块改成两栏：左边是上面那些小方块，右边挂「距上一单」实时卡。
   align-items:stretch 让实时卡跟方块组等高（看着是同一行里的东西，不是飘着的）。
   flex-wrap 保证窄屏时实时卡整块换到下一行，而不是把方块挤成一条。 */
.lgc-ov-flex{display:flex;align-items:stretch;gap:12px;flex-wrap:wrap}
.lgc-ov-flex .lgc-ov6{flex:1 1 auto;min-width:0}
/* 「距上一单」：直播时最该盯的一个数 —— 数字要够大、一眼可读。
   tabular-nums 是必须的：不加的话每秒跳动时字形宽度会变，整块会左右抖。 */
.lgc-live{flex:0 0 auto;min-width:190px;padding:8px 16px;border-radius:10px;
  border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);
  /* 横排两列：左列是两行文字（问句 + 上一单时间），右列是一块显示屏。
     `align-items:stretch` 是关键 —— 屏要跟左列**等高**，才叫「盖住这两行」；
     用 center/baseline 的话屏只有自己那点高度，看着就是吊在标签右边的一小块。 */
  display:flex;align-items:stretch;gap:12px}
/* 左列：问句在上、上一单时间在下，垂直居中（跟右列那块屏对齐着看才舒服）。 */
/* max-width 是给**出错时**留的：那行的错误文本可能有几十个字符，
   不限宽它会把左列撑得很长、把屏挤到天边去。限宽后它自己换行，屏仍在原位。 */
.lgc-live-txt{display:flex;flex-direction:column;justify-content:center;gap:2px;min-width:0;max-width:210px}
.lgc-live-k{font-size:20px;font-weight:600;color:var(--ink,#1f2329);white-space:nowrap}
/* 时间做成**数码管 / 电子表**的样子（用户要的「LED」那种组件）。
   刻意**不引入外部字体**：项目是自托管 + 要能离线（sw 预缓存），为这几个数字塞一个 LED
   字体文件不划算；而且同一个位置还要显示中文（出错时的「取不到」），专用字体反而不好使。
   所以用 **等宽字体 + 字距 + 深底 + 发光** 做出「这块地方是个通电的显示屏」的观感 ——
   等宽是必须的：数字每秒跳动，宽度一变整块就抖（tabular-nums 再兜一道）。 */
.lgc-live-n{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;
  font-size:20px;font-weight:700;letter-spacing:2px;line-height:1.35;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum";
  color:#6ef0a8;background:#0e150f;padding:6px 14px;border-radius:6px;
  text-shadow:0 0 6px rgba(110,240,168,.55);
  box-shadow:inset 0 0 10px rgba(110,240,168,.12);
  /* 屏比字高（它要跟左列两行等高），所以数字必须**垂直居中** —— 否则会贴在顶上。
     inline-flex + center：让上下 padding 撑出来的高度真正落在字的两边。
     竖直方向再加一道内阴影，像老式显示屏边缘那圈暗角。 */
  display:inline-flex;align-items:center;justify-content:center;
  background-image:radial-gradient(120% 100% at 50% 0%,rgba(110,240,168,.07),transparent 70%);
  white-space:nowrap}
/* 出错时摘掉「通电」样式（.err）：那里面要显示「取不到」这种中文，
   荧光绿 + 发光只会让它更像一台正在故障的设备。浅底深字，正常读。 */
.lgc-live.err .lgc-live-n{color:var(--ink-2,#8a9099);background:var(--line-soft,#eee);
  text-shadow:none;box-shadow:none;letter-spacing:0}
/* 「上一单的具体时间」：**缩小**放在显示屏下面（用户的要求）。它是备注，不是主角。
   break-all 是给错误原因留的：可能是 `KeyError(0)` 这种没有空格的长串，不换行会撑爆卡片。 */
.lgc-live-at{font-size:12px;font-weight:400;line-height:1.4;color:var(--ink-3,#9aa0a6);
  font-variant-numeric:tabular-nums;word-break:break-all}
.lgc-live-at:empty{display:none}   /* 没内容时别占一行的高度 */
/* 久了要显眼 —— 阈值在 logistics.js 的 LGC_LIVE_WARN / LGC_LIVE_BAD */
.lgc-live.warn{background:color-mix(in srgb,#d98800 10%,transparent);border-color:color-mix(in srgb,#d98800 30%,transparent)}
.lgc-live.bad{background:color-mix(in srgb,var(--red,#d6453d) 10%,transparent);border-color:color-mix(in srgb,var(--red,#d6453d) 32%,transparent)}
/* 超阈值：**整块 + 显示屏一起变色**。只红一个数字隔着屏幕容易看漏；
   而显示屏的发光色本来就是最抓眼的部分，让它先变色，人一眼就知道「出状况了」。 */
.lgc-live.warn .lgc-live-k{color:#d98800}
.lgc-live.warn .lgc-live-n{color:#ffc458;text-shadow:0 0 7px rgba(255,196,88,.65)}
.lgc-live.bad .lgc-live-k{color:var(--red,#d6453d)}
.lgc-live.bad .lgc-live-n{color:#ff6b5e;text-shadow:0 0 7px rgba(255,107,94,.7)}
/* 长时间没单：显示屏轻微呼吸（不闪、不跳），余光里也能注意到 */
@keyframes lgcLivePulse{0%,100%{opacity:1}50%{opacity:.55}}
.lgc-live.bad .lgc-live-n{animation:lgcLivePulse 2.4s ease-in-out infinite}
/* ================= 特殊提醒标签（2026-10-01） =================
   位置：紧挨着电子管屏（#lgcLive）—— 这两件事本来就是**同一个视线落点**：
   「多久没出单」盯的是「有没有新单」，「要提醒的单」盯的是「有没有该处理的」，
   摆在一起，扫一眼就把两件事都看完了，不必满屏找。
   两种状态的**视觉重量刻意差得远**，因为紧迫度本来就差得远：
     · 有提醒：红底白字 + 呼吸动画 —— 隔着屏幕也该被扫到，这是它存在的全部意义；
     · 不提醒：灰底灰字、压得很轻 —— 它只是一句「现在没事」的陈述，不该抢注意力。
   点主体 = 跳到下面那些单；点「忽略提醒」= 一次性清掉全部（见 /orders/remind/clear）。 */
.lgc-remind{flex:0 0 auto;display:flex;align-items:stretch;border-radius:10px;
  border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);overflow:hidden}
.lgc-remind-main{display:flex;flex-direction:column;justify-content:center;gap:2px;
  padding:8px 14px;text-decoration:none;color:var(--ink-2,#8a9099);min-width:104px}
.lgc-remind-txt{font-size:20px;font-weight:600;color:var(--ink-2,#8a9099);white-space:nowrap}
.lgc-remind-ico{font-size:12px;line-height:1}
.lgc-remind-ok{border:0;border-left:1px solid rgba(255,255,255,.4);cursor:pointer;
  font-size:12px;font-weight:600;padding:0 12px;background:transparent;color:#fff;white-space:nowrap}
.lgc-remind-ok:hover{background:rgba(0,0,0,.14)}
/* 有提醒：红底白字 + 呼吸（名单里那几行也跟着变红，见 .lgc-row-remind） */
.lgc-remind.on{border-color:var(--red,#d6453d);
  background:linear-gradient(180deg,#d6453d,#bf3a33);
  animation:lgcRemindPulse 2.2s ease-in-out infinite}
.lgc-remind.on .lgc-remind-main{color:#fff;cursor:pointer}
.lgc-remind.on .lgc-remind-txt{color:#fff}
/* 「跑马边」：一条虚线沿着边框一直跑（就是 Photoshop 选区那个「蚂蚁线」）。
   为什么要它：这枚标签**只在真有事时才亮** —— 让它一闪一跑，隔着屏幕也躲不开视线，
   它本来就是整页最该被看见的一件东西。
   ⚠️ 只加在**顶部这一枚**，不往每一行上加：订单列表一屏几百行，满屏蚂蚁谁都不显眼，
   反倒把「这里有事」这个信号淹掉了；行上保持那枚静态红标就够。
   实现：CSS 动不了 border 的虚线偏移，所以用四条 repeating-linear-gradient 拼出「虚线边」，
   再让 background-position 一直平移 —— 看上去就是蚂蚁在爬。
   线取白色：标签底是深红，白线对比最强。 */
.lgc-remind.on{position:relative}
.lgc-remind.on::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background-image:
    repeating-linear-gradient(90deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(90deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(0deg,#fff 0 6px,transparent 6px 12px),
    repeating-linear-gradient(0deg,#fff 0 6px,transparent 6px 12px);
  background-size:100% 2px,100% 2px,2px 100%,2px 100%;
  background-position:0 0,0 100%,0 0,100% 0;
  background-repeat:no-repeat;
  animation:lgcAnts .7s linear infinite;
}
/* ⚠️ 位移必须**正好一个虚线周期**（6px 线 + 6px 空 = 12px），否则每跑完一圈会「跳」一下 ——
   那一跳比不跑还难看。 */
@keyframes lgcAnts{
  from{background-position:0 0,0 100%,0 0,100% 0}
  to{background-position:12px 0,-12px 100%,0 -12px,100% 12px}
}
@keyframes lgcRemindPulse{
  0%,100%{box-shadow:0 0 0 1px rgba(214,69,61,.25),0 2px 10px rgba(214,69,61,.28)}
  50%{box-shadow:0 0 0 4px rgba(214,69,61,.16),0 2px 14px rgba(214,69,61,.42)}}
/* 名单里的高亮行：跳下去之后要一眼看出是哪几单（红左边框 + 淡红底） */
.lgc-row-remind>td{background:color-mix(in srgb,var(--red,#d6453d) 7%,transparent)!important}
.lgc-row-remind>td:first-child{box-shadow:inset 3px 0 0 var(--red,#d6453d)}
/* 点标签跳过去之后闪两下：**只滚动是不够的** —— 列表几百行，滚到眼前人是找不到落点的。
   闪在 td 上（不是 tr）：单元格才有背景。 */
.lgc-remind-flash>td{animation:lgcRemindFlash .48s ease-in-out 4}
@keyframes lgcRemindFlash{
  0%,100%{background:color-mix(in srgb,var(--red,#d6453d) 7%,transparent)}
  50%{background:color-mix(in srgb,var(--red,#d6453d) 26%,transparent)}}
/* 订单号下方那枚「标提醒」入口。
   ⚠️ 第一版是面 opacity:.3 的小旗 —— 用户直接反馈「标记提醒的功能没有吧」。
   **能干活但看不见的入口等于不存在**，所以照隔壁「＋广州备注」的样子重做：
   没标时是一句浅色虚线小字（像个「可以点的建议」），标上了变红底实心（像个「已生效的标记」）。
   两个方向的观感必须能一眼分开 —— 否则又回到「不知道标没标上」。
   独立一行（display:block + width:fit-content）：订单号那列本来就窄，塞同一行会把订单号挤断。 */
.lgc-remind-flag{display:block;width:fit-content;margin:2px 0 0;padding:0 6px;border-radius:4px;font-size:11px;
  color:var(--ink-3,#8b9582);border:1px dashed var(--line,#e6e8eb);
  text-decoration:none;cursor:pointer;white-space:nowrap}
.lgc-remind-flag:hover{color:var(--red,#d6453d);border-color:var(--red,#d6453d);border-style:solid}
.lgc-remind-flag.on{color:#fff;background:var(--red,#d6453d);border:1px solid var(--red,#d6453d);font-weight:600}
.lgc-remind-flag.on:hover{background:#bf3a33;border-color:#bf3a33}
/* 提醒的**原因**：直接显示在行上，**不藏在 title 里** ——
   这功能存在的理由就是「换个人看到也知道为什么」，藏起来等于白写。
   淡红底 + 左侧竖线：一眼看出它是「附在这一单上的一句说明」，而不是又一个按钮。 */
.lgc-remind-txt{display:block;width:fit-content;max-width:100%;margin-top:2px;
  font-size:11px;line-height:1.5;color:#b5392f;background:#fdf0ef;
  border-left:2px solid #e6a09a;border-radius:0 4px 4px 0;padding:1px 5px;word-break:break-all}

.lgc-ovm{background:var(--paper,#fff);border:1px solid var(--line,#e6e8eb);border-radius:8px;
  padding:7px 10px;min-width:98px;text-align:center}
.lgc-ovm .k{font-size:11px;color:var(--ink-2,#8a9099);white-space:nowrap}
.lgc-ovm .n{font-size:15px;font-weight:700;color:var(--ink,#1f2329);line-height:1.3;margin-top:1px;white-space:nowrap}
.lgc-ovm .n small{font-size:10px;font-weight:400;color:var(--ink-3,#9aa0a6);margin-left:2px}
.lgc-ovm .a{font-size:11.5px;font-weight:700;color:var(--terra,#c5764c);white-space:nowrap;line-height:1.3}
.lgc-ovm .a .cur{font-size:10px;font-weight:700;margin-right:1px;opacity:.85}
.lgc-ovm.total{background:color-mix(in srgb,var(--terra,#c5764c) 8%,transparent);border-color:color-mix(in srgb,var(--terra,#c5764c) 26%,transparent)}
.lgc-ovm.ok .a{color:var(--green,#2e8b57)}
.lgc-ovm.done .a{color:#2f7fe0}
.lgc-ovm.danger .a{color:var(--red,#d6453d)}
.lgc-ovm.warn .a{color:#d98800}
.lgc-ovm.wool{background:color-mix(in srgb,#b5392f 9%,transparent);border-color:color-mix(in srgb,#b5392f 28%,transparent)}
.lgc-ovm.wool .a{color:#b5392f}
.lgc-ovm.muted .a{color:var(--ink-3,#9aa0a6)}
.lgc-ovm.info .a{color:#0f9d8f}
.lgc-ovm.purple .a{color:#8e44ad}
/* 已关闭：整体压暗（名字、单数、金额都用灰），不跟其他卡片一样跳 */
.lgc-ovm.off{background:color-mix(in srgb,var(--ink-3,#9aa0a6) 9%,transparent)}
.lgc-ovm.off .n,.lgc-ovm.off .a,.lgc-ovm.off .k{color:var(--ink-3,#9aa0a6)}

.lgc-ov-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px;grid-auto-rows:1fr}
.lgc-ov-panel{background:#fff;border:1px solid var(--line,#e6e8eb);border-radius:10px;padding:9px 10px;min-width:0;height:100%;box-sizing:border-box;overflow:hidden}
.lgc-ov-sec-t{font-size:12px;font-weight:700;color:var(--ink,#1f2329);margin-bottom:8px}
.lgc-ov-status,.lgc-ov-prov{display:flex;flex-direction:column;gap:6px}
.lgc-bar-row{display:flex;align-items:center;gap:6px;font-size:11px}
.lgc-bar-row .lb{flex:1;height:10px;background:var(--line-soft,#eee);border-radius:5px;overflow:hidden}
.lgc-bar-row .lb>i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#d9a283,#c5764c);min-width:0}
.lgc-bar-row .lb>i.bad{background:linear-gradient(90deg,#eeaa9a,#d6453d)}
.lgc-bar-row .lb>i.ok{background:linear-gradient(90deg,#9ed0b0,#2e8b57)}
.lgc-bar-row .lk{width:72px;flex-shrink:0;color:var(--ink-2,#8a9099);text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lgc-bar-row .lv{flex-shrink:0;min-width:40px;color:var(--ink,#1f2329);font-weight:700;text-align:left;white-space:nowrap}
@media (max-width:1400px){.lgc-ov-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:900px){.lgc-ov-grid{grid-template-columns:1fr}}
/* —— 售后处理（sec-aftersale）的两列"系统列"（2026-10-12）——
   勾选框与「删」不属于用户给的那 17 列，所以窄、也不换行。
   它们**不进** AS_COLS（列清单只描述用户的表），但每个 colspan 都要把 AS_SYS 算进去。 */
.as-sys{width:44px;text-align:center;padding-left:6px;padding-right:6px}
.as-sys input[type="checkbox"]{width:auto;margin:0;cursor:pointer}
.as-del{height:24px;padding:0 9px;border:1px solid var(--line,#e6e8eb);border-radius:6px;
  background:var(--paper,#fff);color:#b23c3c;font-size:12px;font-family:inherit;cursor:pointer}
.as-del:hover{border-color:#e0b4b4;background:#fdf3f2}
/* 空单元格的占位：低调的「—」顶着，免得列看着像没了 / 边框像断（2026-10-13）。
   退货 / 仅退款没有「发走」这一程，发走快递 / 发走单号特别标「退货免填」。 */
.as-na{color:var(--ink-3,#aab0b8);font-style:italic;opacity:.5}
.as-na-free{font-style:normal;opacity:.72;color:#9aa0a6}
/* 已退完款（扫到退回件、记了退款日期）的行：浅绿底 + 左侧绿条，和"待处理"拉开网格区分 */
tr.as-done{background:color-mix(in srgb, var(--green,#2e8b57) 9%, var(--paper,#fff))}
tr.as-done > td:first-child{box-shadow:inset 3px 0 0 0 var(--green,#2e8b57)}
.as-rd{color:var(--green,#2e8b57);font-size:11px;font-weight:600;white-space:nowrap}
.lgc-hint.ok{color:var(--green,#2e8b57);font-weight:600}
.lgc-hint.err{color:#b23c3c;font-weight:600}
#asDelBtn:disabled{opacity:.45;cursor:default}
.lgc-stat.danger .n{color:var(--red,#d6453d)}
.lgc-stat.warn .n{color:#d98800}
.lgc-stat.ok .n{color:var(--green,#2e8b57)}
.lgc-stat.muted .n{color:var(--ink-3,#9aa0a6)}
/* 按钮矮一档（34 → 30）：三个竖排时整个页头矮 12px，统计卡跟着不显空 */
.lgc-clearbtn{height:30px;padding:0 13px;border:1px solid var(--terra,#c5764c);background:var(--terra,#c5764c);color:#fff;border-radius:8px;cursor:pointer;font-size:12.5px;white-space:nowrap}
.lgc-clearbtn:hover{opacity:.9}
.lgc-table-wrap{flex:1;overflow-y:auto;overflow-x:auto;padding:12px 18px;min-height:0}
/* —— 窄屏适配（21 寸屏 1366/1600、或浏览器缩放到 125% 时最明显）——
   订单表 13 列，横向每省下 1px，每列就多 1px：把日期栏和表格四周内边距各收一档，
   宽度全让给列，尽量一屏看全、少折行、不出现横向滚动条。 */
@media (max-width:1500px){
  .lgc-sidebar{width:200px;flex:0 0 200px}
  .lgc-table-wrap{padding:10px 10px}
  .lgc-sb-head{padding:12px 12px 6px}
  .lgc-datepick{padding:0 12px 8px}
}
.lgc-tbl{width:auto;max-width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;font-size:13px;background:var(--paper,#fff);border:1px solid var(--line,#e6e8eb);border-radius:10px;overflow:hidden}
.lgc-tbl thead th{position:sticky;top:0;background:var(--surface,#f7f9f4);color:var(--ink-2,#8a9099);font-weight:600;text-align:left;padding:9px 12px;border-bottom:1px solid var(--line,#e6e8eb);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:1}
/* 单元格允许换行、完整显示（行高约 2 行，2K 下基本 1-2 行）；不再省略号截断 */
.lgc-tbl tbody td{padding:8px 12px;border-bottom:1px solid var(--line-soft,#eee);vertical-align:middle;color:var(--ink,#1f2329);white-space:normal;line-height:1.5;overflow:visible}
/* 多值列（序号提示/运单号/扫描章）拉丁长串（单号等）允许断行 */
.lgc-tbl tbody td.lgc-td-wrap{word-break:break-word}
/* 表宽=各列实际宽度之和（width:auto）+ max-width:100%：列各自独立 px，拖哪一列只动那一列、不连坐；屏更宽时右侧自然留白、不硬撑；屏更窄时各列等比缩到屏宽、自适应不溢出（绝不横向滚动） */
/* 列宽拖拽手柄：常驻表头右缝，Excel 式随手拖 */
.lgc-resz{position:absolute;top:0;right:0;width:8px;height:100%;cursor:col-resize;z-index:3}
.lgc-resz::after{content:"";position:absolute;top:0;right:3px;width:2px;height:100%;background:transparent;transition:background .12s}
.lgc-tbl th:hover .lgc-resz::after{background:var(--terra,#c5764c);opacity:.45}
.lgc-resz:hover::after{background:var(--terra,#c5764c);opacity:1}
/* 拖拽中：全局双箭头 + 禁选中，竖线加粗，跟手爽感 */
body.lgc-resizing{cursor:col-resize !important;user-select:none !important}
body.lgc-resizing *{cursor:col-resize !important}
body.lgc-resizing .lgc-resz::after{background:var(--terra,#c5764c);opacity:1;right:2px;width:3px}
.lgc-tbl tbody tr:hover{background:var(--line-soft,#eee)}
.lgc-tbl tbody tr:last-child td{border-bottom:none}

/* ---- 已扫描行的来源网格 ----
   印章是「盯到那一格才知道」，网格是行级别的底色，余光扫过就能定位哪几行扫过了。
   按来源分色，与印章同一套配色：惠州红 / 广州亮蓝 / 未知赭石。
   （广州原用墨绿，与惠州红在浅色底上太接近；换蓝后色相差约 75°，一眼可分。
     蓝的透明度比红略高一点，因为蓝在暖白底上不如红跳。）
   网线画在 td 上而不是 tr：
     ① tr:hover 用的是 background 简写，画在 tr 上鼠标一划过就被冲掉；
     ② td 的绘制层级在 tr 之上，能叠在「退款行」的红底上而不被盖住。
   刻意不加 td:first-child 的左侧色条 —— 那条位置已经被「重复单」占用（page.css）。 */
.lgc-tbl tbody tr.lgc-grid-hz>td{
  background-image:
    linear-gradient(rgba(192,57,43,.14) 1px, transparent 1px),
    linear-gradient(90deg, rgba(192,57,43,.14) 1px, transparent 1px);
  background-size:7px 7px;
}
.lgc-tbl tbody tr.lgc-grid-gz>td{
  background-image:
    linear-gradient(rgba(30,147,221,.17) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30,147,221,.17) 1px, transparent 1px);
  background-size:7px 7px;
}
.lgc-tbl tbody tr.lgc-grid-xx>td{
  background-image:
    linear-gradient(rgba(138,109,59,.14) 1px, transparent 1px),
    linear-gradient(90deg, rgba(138,109,59,.14) 1px, transparent 1px);
  background-size:7px 7px;
}
/* 已关闭单的网格：不用来源彩色，改「灰色斜纹」——
   方向与红/蓝/赭石的横竖方格完全不同（45° 交叉斜线），一眼能区分；
   灰调更暗沉，不抢正常已扫描行的注意力。 */
.lgc-tbl tbody tr.lgc-grid-closed>td{
  background-image:
    repeating-linear-gradient(45deg, rgba(116,124,136,.30) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(-45deg, rgba(116,124,136,.30) 0 1px, transparent 1px 7px);
}

/* 「已查单」印章的外观与已扫描章共用同一套样式（page.css 的 .lgc-stamp 系列），
   这里只加颜色变体 .lgc-stamp-asked，不重复定义。 */
.lgc-ono{font-family:"SF Mono",Consolas,monospace;font-size:12px;color:var(--ink-2,#8a9099);word-break:break-all;overflow-wrap:anywhere}
/* 「平台 / 店铺」列：平台做成小色块（不同平台一眼分开），店名跟在后面用常规文字。
   平台色刻意用低饱和的固定色，不跟主题走 —— 它和印章一样是「功能色」，
   靠色相区分平台，跟着主题变就分不出来了。 */
.lgc-pf{display:inline-block;padding:1px 6px;border-radius:4px;font-size:11px;font-weight:600;
  background:#eef1f5;color:#4a5a6a;border:1px solid #dde3ea;white-space:nowrap;vertical-align:middle}
.lgc-pf[data-pf="抖音"]{background:#fdecef;color:#c0392b;border-color:#f5cdd3}
.lgc-pf[data-pf="拼多多"]{background:#fdeee8;color:#c4471f;border-color:#f6d2c3}
.lgc-pf[data-pf="淘宝"]{background:#fdf0e6;color:#c46a1f;border-color:#f6dcc3}
.lgc-pf[data-pf="天猫"]{background:#fdeee6;color:#c43f1f;border-color:#f6d5c3}
.lgc-pf[data-pf="快手"]{background:#fdeee2;color:#c45c1f;border-color:#f6dac3}
.lgc-pf[data-pf="小红书"]{background:#fdeaea;color:#c0392b;border-color:#f5cccc}
.lgc-pf[data-pf="视频号"]{background:#eaf5ee;color:#1f7a4a;border-color:#c9e6d5}
.lgc-pf[data-pf="京东"]{background:#fdecec;color:#c0392b;border-color:#f5cdcd}
/* 店名单独占一行（在平台色块下方），并允许在列宽内自然换行 ——
   避免「抖音 三叶草手机数码优品店」被 7% 窄列一刀切没、整列只露出平台色块。
   display:block + word-break 让长店名折行完整显示，不再依赖 overflow:hidden 裁切。 */
.lgc-sp{display:block;margin-left:0;margin-top:3px;font-size:12.5px;line-height:1.35;color:var(--ink-2,#8a9099);
  word-break:break-all}
/* 达人昵称回退显示（店名为 '-' 的自卖/达人单）：用品牌紫区分，避免和真实店名混淆 */
.lgc-sp-talent{color:#7c4dbf;font-weight:600}
.lgc-src-none{color:var(--ink-3,#b3b8bf)}
/* 换过快递单号：新号正常显示，旧号在下面用小标签标出（琥珀色，和红色的"惠州已扫描"、
   蓝色的"广州已扫描"、紫色的"已查单"都区分得开），一眼看出这单换过单。 */
.lgc-tno{display:block;word-break:break-all}
/* 手填运单号：平台没给号、我们自己录的。沿用「旧号」那条琥珀色系但不删线，给人「这是后来补的、不是平台原号」的直觉；
   后面紧跟一枚「手填」小标进一步说明来源。只有平台无号那一格才会渲染（见 logistics.js paint）。 */
.lgc-tno-manual{color:#9c6b08}
.lgc-tno-manual-tag{
  display:inline-block;margin-top:2px;margin-left:5px;padding:0 5px;border-radius:4px;
  background:rgba(200,140,20,.16);color:#9c6b08;font-size:10px;font-weight:600;
  vertical-align:middle;cursor:help;
}
/* 「填/改单号」入口：与「＋备注」同格、同款浅色占位（只有平台无号那一格出现）；
   已手填过的变「改单号」琥珀实底（和「备注·有」一个调性），提醒这单已有手填号。 */
.lgc-tno-edit{
  display:inline-block;margin-top:3px;margin-left:6px;padding:0 6px;border-radius:4px;font-size:11px;
  color:#9aa3ad;border:1px dashed #c4ccd4;background:transparent;cursor:pointer;text-decoration:none;
}
.lgc-tno-edit:hover{color:#b06a43;border-color:#b06a43}
.lgc-tno-edit.lgc-onote-has{color:#8a5a1f;background:#fdf3e3;border:1px solid #e8c98a;font-weight:600}
.lgc-tno-old{
  display:inline-block;margin-top:2px;padding:1px 6px;border-radius:4px;
  background:rgba(200,140,20,.13);color:#9c6b08;font-size:11px;
  text-decoration:line-through;text-decoration-color:rgba(156,107,8,.55);
  word-break:break-all;cursor:help;
}
.lgc-tno-more{display:inline-block;margin-top:3px;color:var(--accent,#2f6fb0);cursor:pointer;font-size:12px;text-decoration:none}
.lgc-tno-more:hover{text-decoration:underline}
/* 「＋备注」：跟单号同格。没备注时是浅色占位（尽量不抢视线 —— 大部分单本来就没备注），
   有备注时变成琥珀色实底小标签 —— 一眼扫过去就知道哪几单有自己人写的叮嘱。
   两个状态用「同一个链接换样式」而不是两个控件：位置固定、不会点错。
   ⚠️ 类名带 o（order）前缀：`.lgc-note` 早被右侧那块「每日发货统计」便签占用了
   （见本文件第 5 行 `#sec-logistics .lgc-note{position:absolute;width:300px;...}`）——
   一开始借用了那个名字，结果表格里每个「＋备注」都变成一个绝对定位的 300px 白板、把整页盖住。
   这个模块里加新类名之前，先 grep 一下 `lgc-` 前缀是否已存在。 */
.lgc-onote{display:inline-block;margin-top:3px;margin-left:6px;padding:0 6px;border-radius:4px;font-size:11px;
  color:var(--ink-3,#8b9582);border:1px dashed var(--line,#e6e8eb);text-decoration:none;cursor:pointer;white-space:nowrap}
.lgc-onote:hover{color:#b06a43;border-color:#b06a43}
.lgc-onote-has{color:#8a5a1f;background:#fdf3e3;border:1px solid #e8c98a;font-weight:600}
.lgc-onote-has:hover{color:#8a5a1f;border-color:#c99a3f}
/* 「云端备注」：跟单号同格、紧挨「＋备注 / 备注·有」。只有这单真的带平台云端备注才渲染。
   蓝底白字，和手工备注的琥珀色明显区分（一眼能分清「谁写的」）。只读、点开看平台原文。 */
.lgc-cnote{display:inline-block;margin-top:3px;margin-left:6px;padding:0 6px;border-radius:4px;font-size:11px;
  color:#fff;background:#2f6fed;border:1px solid #2f6fed;text-decoration:none;cursor:pointer;white-space:nowrap;font-weight:600}
.lgc-cnote:hover{background:#235ad1;border-color:#235ad1}
/* 「原单备注已作废」：划横线 + 压灰（2026-10-08 用户要求）。
   售后件（换货/补寄/维修/退货）的原单备注不能和「售后登记」的备注一起被参考 ——
   惠州照两边发就会发错货。划掉（不是藏掉）：原文还看得见，能对着核。 */
.lgc-voided{text-decoration:line-through;text-decoration-thickness:1.5px;color:#9aa3ad}
.lgc-voided *{text-decoration:line-through}
/* 列表里那个入口本身也划掉（链接有 text-decoration:none，得单独压过去） */
.lgc-cnote.lgc-voided{text-decoration:line-through;text-decoration-thickness:1.5px;
  color:#c3c9d1;background:#f2f4f7;border-color:#dfe3e8;font-weight:600}
/* 作废 / 撤销作废按钮（只有广州看得见）：红字但是**次要按钮** ——
   它是个"破坏性但可撤销"的动作，做得太显眼会被人顺手点。 */
#_voidOrigBtn,#_noteEditVoid{color:#b23c3c}
.lgc-void-tip{background:#fdf3f2;border:1px solid #f2cdc7;border-radius:6px;
  padding:8px 11px;color:#8a2f1c;font-size:12.5px;line-height:1.6;margin-bottom:12px}
.lgc-void-tag{display:inline-block;margin-left:6px;padding:0 5px;border-radius:3px;
  font-size:11px;font-weight:600;color:#b23c3c;background:#fdf3f2;border:1px solid #f2cdc7}
/* 合单发货：同一快递单号下有多个订单（一包多单）。
   紫色实底、比「旧单号」的虚标签更实，因为它不是提示而是发货依据 —— 这包要装几单。 */
.lgc-merge-tag{
  display:inline-block;margin-top:2px;padding:1px 6px;border-radius:4px;
  background:#7c4dbf;color:#fff;font-size:11px;font-weight:600;
  cursor:help;white-space:nowrap;
}
.lgc-amt{color:var(--red,#c0392b);font-weight:700}
.lgc-addr{color:var(--ink-2,#8a9099);font-size:12px;max-width:240px;display:block;word-break:break-word;overflow-wrap:anywhere}
.lgc-badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap}
.lgc-b-normal{background:var(--line-soft,#eee);background:color-mix(in srgb, var(--green,#4f7d56) 15%, transparent);color:var(--green,#4f7d56)}
.lgc-b-refund_before_ship{background:var(--line-soft,#eee);background:color-mix(in srgb, var(--gold,#b0913f) 18%, transparent);color:var(--gold,#b0913f)}
.lgc-b-refund_after_ship{background:var(--line-soft,#eee);background:color-mix(in srgb, var(--red,#c0392b) 14%, transparent);color:var(--red,#c0392b)}
.lgc-b-return_refund{background:var(--line-soft,#eee);color:var(--ink-3,#8b9582)}
.lgc-b-null{background:var(--line-soft,#eee);color:var(--ink-3,#8b9582)}
.lgc-b-special{background:color-mix(in srgb, #9b59b6 18%, transparent);color:#8e44ad}
/* 中秋赠品标签：付款时间落在区间内的订单，在「销售规格」列后挂一枚红底白字方形小标。
   纯展示、不动数据；跟随规格文本换行堆叠。红底白字固定（用户指定），不随主题变。 */
.mid-gift-tag{
  display:inline-block;
  margin:3px 0 0;
  padding:1px 6px;
  border-radius:3px;            /* 方形为主，略收角 */
  background:#e4393c;           /* 中秋红 */
  color:#fff;
  font-size:11px;
  font-weight:700;
  line-height:1.5;
  letter-spacing:.5px;
  white-space:nowrap;
  vertical-align:middle;
}
/* 活动标签（数据驱动，来自「杂项→活动标签」配置）：基础样式 + 配色变体。
   替代原先写死的 .mid-gift-tag；旧类保留以兼容历史 HTML。 */
.act-tag{
  display:inline-block;
  margin:3px 0 0 6px;
  padding:1px 7px;
  border-radius:3px 11px;
  color:#fff;
  font-size:11px;
  font-weight:700;
  line-height:1.5;
  letter-spacing:.5px;
  white-space:nowrap;
  vertical-align:middle;
}
.act-tag-red{background:#e4393c}
.act-tag-green{background:#1f9d55}
.act-tag-blue{background:#2f6fed}
.act-tag-amber{background:#d98a00}


/* 合单组框：同运单号（≥2 单）的订单被前端聚到一起后，画一个圆角外框把它们框成一组，
   直接服务打包防漏装（一眼看出这包里有几个单）。所有 tbody 单元格先铺 2px 透明左右边，
   组框只改颜色不改宽度，避免合单行与非合单行文字横向错位。 */
/* 合单组：同运单号(≥2单)的订单被聚到一起，用一条极淡的左侧色脊把它们「连」成一组，
   取代之前显眼的圆角外框。色脊用 inset box-shadow，不占布局、与单列行不错位。
   原有的「合单 N 单」小标（非合单不显示）已能看出一包里有几个单。 */
.lgc-tbl tbody tr.lgc-grp>td{
  background:color-mix(in srgb, var(--parcel,#5b8def) 4%, transparent);
}
.lgc-tbl tbody tr.lgc-grp>td:first-child{
  box-shadow: inset 3px 0 0 var(--parcel,#5b8def);
}
/* 「已扫·已退」风险行：今天打包扫码、之后变退款 —— 整行红色脉冲霓虹灯 + 左侧红条，明确「勿发」。
   盖过原本的扫描来源网格（绿/蓝），让打包岗一眼认出这单不能发。
   tr 上的 box-shadow 在现代浏览器（订单工作台用的 Chromium）可正常渲染；左侧红条再补一道，
   即便个别环境下 tr 阴影被吃也能看清边界。 */
.lgc-tbl tbody tr.lgc-row-risk{
  animation: lgcNeon 1.15s ease-in-out infinite;
}
.lgc-tbl tbody tr.lgc-row-risk>td:first-child{
  box-shadow: inset 3px 0 0 #c0392b;
}
@keyframes lgcNeon{
  0%,100%{ box-shadow: 0 0 0 0 rgba(192,57,43,0); }
  50%{ box-shadow: 0 0 0 2px rgba(192,57,43,.85), 0 0 16px 3px rgba(192,57,43,.55); }
}
.lgc-risk-badge{
  display:inline-block;margin-right:6px;padding:2px 9px;border-radius:20px;
  background:#c0392b;color:#fff;font-size:11px;font-weight:700;white-space:nowrap;
  box-shadow:0 0 8px rgba(192,57,43,.6);
  animation: lgcNeonBadge 1.15s ease-in-out infinite;
}
@keyframes lgcNeonBadge{
  0%,100%{ box-shadow:0 0 6px rgba(192,57,43,.4); }
  50%{ box-shadow:0 0 13px 2px rgba(192,57,43,.85); }
}
/* 标异常工具条：今日已清下方，手动标记特殊退款（最高权限） */
.lgc-abnor-bar{display:flex;align-items:center;gap:10px;padding:8px 18px;border-bottom:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);flex-wrap:wrap}
/* 标签颜色从紫色改成红：紫是「标异常」那套的色（2026-10-04 那两个按钮已撤），
   而这条里现在只剩"撤回误扫"，用红色才对得上它右边的 warn 按钮。 */
.lgc-abnor-label{font-size:13px;font-weight:700;color:#c0392b;white-space:nowrap}
.lgc-abnor-in{width:280px;flex:0 0 280px;height:32px}
/* ⚠️ 这个"紫色实心"的底色现在只有 .warn 覆盖后的样式在用（标异常那两个按钮 2026-10-04 已撤）——
   留着是因为 warn 只改了 bg/color/border，尺寸与圆角还是从这里来的。ghost 同理。 */
.lgc-abnorbtn{height:32px;padding:0 14px;border:1px solid #9b59b6;background:#9b59b6;color:#fff;border-radius:8px;cursor:pointer;font-size:13px;white-space:nowrap;font-family:inherit}
.lgc-abnorbtn:hover{opacity:.9}
.lgc-abnorbtn.ghost{background:transparent;color:#8e44ad;border-color:#9b59b6}
.lgc-abnorbtn.ghost:hover{background:color-mix(in srgb,#9b59b6 12%,transparent)}
/* 「误扫码撤回」与它们同排，但它是**不可逆**的动作（撤掉已经盖上的章，要重扫才会回来），
   所以刻意不用紫色、也不做成 ghost —— 三个按钮长得一样的话，扫完手一快就点错，
   而这两个动作的后果完全不同：标异常可以再取消，撤回不行。 */
.lgc-abnorbtn.warn{background:#fff;color:#c0392b;border-color:#e0a9a2}
.lgc-abnorbtn.warn:hover{background:#c0392b;color:#fff;opacity:1}
/* ===================== 重复单（2026-10-19） =====================
   两件事用同一套样式：
   ① 列表上的「只看重复单」筛选条 —— **独立一条**，不受「误扫」栏那个
      （主账号 + 工具开关）的显示条件影响：重复单正是仓管每天要清的，子账号也得能筛；
   ② 扫码弹窗里的重复块 —— 「本批第几件 / 第几个重复 / 本批重复明细」。
   为什么「第几件」的字号要这么大：扫码的人手上还拿着货，只会瞟一眼；
   小字他看不见，而那个数字正是让他回头去那一摞里找货的线索。 */
.lgc-filter-bar{display:flex;align-items:center;gap:10px;padding:7px 18px;border-bottom:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);flex-wrap:wrap}
.lgc-chip.on{background:#c0392b;border-color:#c0392b;color:#fff}
.lgc-chip.on:hover{background:#a93226;border-color:#a93226;color:#fff}
.lgc-chip.on b{color:#fff}
.lgc-chip-aware{font-size:12px;color:#c0392b}
.lgc-dupbox{border:2px solid #c0392b;border-radius:10px;background:#fdf3f2;padding:12px 14px 10px;margin-bottom:14px}
.lgc-dup-stamp{color:#c0392b}
.lgc-dup-pos{font-size:17px;color:#3d2b1f;line-height:1.5;text-align:center;font-weight:600}
.lgc-dup-pos b{font-size:26px;color:#c0392b;margin:0 2px}
.lgc-dup-pos-na{font-size:13px;color:#8a6d3b;font-weight:400}
.lgc-dup-sub{font-size:12px;color:#8a9099;font-weight:400;margin-left:8px}
.lgc-dup-rank{text-align:center;font-size:13px;color:#8a2f1c;margin-top:4px}
.lgc-dup-rank b{color:#c0392b}
.lgc-dup-list-t{font-size:11px;color:#8a9099;margin:10px 0 4px;font-weight:600}
.lgc-dup-list{border:1px solid #f0d6d1;border-radius:7px;background:#fff;overflow:hidden}
.lgc-dup-row{display:flex;gap:8px;align-items:baseline;padding:4px 9px;font-size:12px;border-bottom:1px dashed #f5e3df}
.lgc-dup-row:last-child{border-bottom:none}
.lgc-dup-row .p{flex:0 0 64px;color:#c0392b;font-weight:700}
.lgc-dup-row .t{flex:0 0 66px;color:#8a9099;font-family:ui-monospace,Consolas,monospace}
.lgc-dup-row .o{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Consolas,monospace;color:#333}
.lgc-dup-row .tag{flex:0 0 auto;font-size:11px;color:#8a9099}
.lgc-dup-row.me{background:#fdecea}
.lgc-dup-row.me .tag{color:#fff;background:#c0392b;border-radius:4px;padding:0 5px}
.lgc-dup-foot{font-size:11px;color:#8a9099;margin-top:8px;text-align:right}
.lgc-dup-all{color:#1e93dd;text-decoration:none}
.lgc-dup-all:hover{text-decoration:underline}
/* 本批明细面板：和列表那套表格共用 .lgc-src-table，只补重复行的高亮 */
.lgc-sb-head{padding:10px 18px;font-size:13px;color:#40474f;border-bottom:1px solid var(--line,#e6e8eb);line-height:1.7}
.lgc-sb-foot{display:flex;align-items:center;gap:10px;padding:9px 18px;border-top:1px solid var(--line,#e6e8eb)}
.lgc-sb-only{font-size:13px;color:#40474f;display:inline-flex;align-items:center;gap:5px;cursor:pointer}
.lgc-sb-row.lgc-sb-dup td{background:#fdecea;color:#8a2f1c}
.lgc-sb-row.lgc-sb-dup td:first-child{box-shadow:inset 4px 0 0 0 #c0392b}
/* ===================== 赠品后发（一单多包，2026-10-19） =====================
   用琥珀色，和「重复单」的红色、「售后件」的玫红拉开：
   它不是错误，只是同一订单的第二包；但**待发/已发**必须一眼能分。
   列表那枚标跟「疑似重复」一样独占一行 —— 订单号列太窄，挤同行会把单号压断。 */
.lgc-gift-tag{display:block;margin:0 0 4px;padding:3px 9px;border-radius:5px;font-size:12px;
  font-weight:800;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lgc-gift-tag.pend{background:#b0913f;color:#fff}
.lgc-gift-tag.sent{background:#e8e3d3;color:#6f7c5b;font-weight:600}
.lgc-gift-stamp{color:#a8842c}
.lgc-gift-line{text-align:center;font-size:15px;color:#3d2b1f;margin-top:2px}
.lgc-gift-what{text-align:center;font-size:18px;color:#8a6d1a;margin:10px 0 8px;line-height:1.5}
.lgc-gift-what b{color:#8a5a00;font-weight:800}
.lgc-gift-never{border:1px dashed #d8c48a;border-radius:7px;background:#fffaf0;color:#6b5a2e;
  font-size:12.5px;line-height:1.7;padding:8px 10px;text-align:center}
.lgc-gift-sent{margin-top:9px;border-radius:7px;background:#fdecea;color:#a02a1a;
  font-size:12.5px;font-weight:700;padding:8px 10px;text-align:center}
.lgc-gift-foot{margin-top:9px;font-size:11px;color:#8a9099;text-align:center;
  font-family:ui-monospace,Consolas,monospace}
.lgc-gift-tip{font-size:12.5px;line-height:1.9;color:#5a6068;background:#faf7ee;
  border:1px solid #eee2c4;border-radius:7px;padding:8px 11px}
.lgc-gift-text{width:100%;height:96px;margin-top:10px;box-sizing:border-box;resize:vertical;
  border:1px solid #d9dde3;border-radius:7px;padding:8px 10px;font-size:12.5px;
  font-family:ui-monospace,Consolas,monospace;line-height:1.7}
.lgc-gift-text:focus{outline:none;border-color:#1e93dd;box-shadow:0 0 0 2px rgba(30,147,221,.12)}
.lgc-gift-sub{display:flex;align-items:center;gap:8px;padding:10px 12px 6px;border-top:1px solid #eee}
.lgc-gift-row.pend td{background:#fffdf6}
.lgc-gift-row.sent td{color:#8a9099}
.lgc-gift-st{font-weight:800}
.lgc-gift-st.pend{color:#b0913f}
.lgc-gift-st.sent{color:#4f7d56}
.lgc-gift-del{color:#c0392b;text-decoration:none;font-size:12px}
.lgc-gift-del:hover{text-decoration:underline}
.lgc-mono{font-family:ui-monospace,Consolas,monospace}
.lgc-log-tip.ok{color:var(--green,#4f7d56);font-weight:700}
.lgc-log-tip.bad{color:var(--red,#c0392b)}
/* 弹窗里的扫码行（2026-10-04 从首页搬进来的）：这一行是"扫到就撤"的主路 */
.lgc-undo-lb{font-size:13px;font-weight:700;color:#c0392b;white-space:nowrap}
.lgc-undo-in{width:300px;flex:0 0 300px;height:32px}
/* 账号归属那一行：默认隐藏，扫码/开窗后有内容才出现 */
.lgc-undo-src{padding:8px 18px;font-size:13px;line-height:1.7;border-bottom:1px solid var(--line,#e6e8eb);background:var(--surface,#f7f9f4)}
.lgc-undo-src .src-tag{display:inline-block;padding:1px 8px;border-radius:6px;font-size:12px;font-weight:700}
.lgc-undo-src .gz{background:#e8f1fb;color:#2f6fb0}
.lgc-undo-src .hz{background:#fdf0e6;color:#b06842}
.lgc-undo-src .ot{background:#eef0f2;color:#5c6672}
/* 撤回人：留痕信息，比来源字号同级但更实（它要能被人一眼找到） */
.lgc-undo-src .by{color:var(--ink,#1f2329);font-weight:700}
/* 「被撤回」标记：贴在「扫描状态」格的「未扫描」徽章后面。
   光一个「未扫描」看不出是"本来就没扫"还是"被谁撤了"—— 而后者正是撤回这个动作最该交代的事。
   样式刻意低调（它是注脚，不是警报），但鼠标划过给全文（谁 + 何时 + 现状）。 */
.lgc-undo-mark{display:inline-block;margin-left:3px;padding:1px 6px;border-radius:5px;font-size:11px;
  background:#fdecea;color:#a03a2c;border:1px solid #f5c6c0;cursor:help;white-space:nowrap}
.lgc-undo-src .warn{color:#c0392b;font-weight:700}
.lgc-undo-src .ok{color:#4f7d56;font-weight:700}
/* 撤到别边（按账号判断）时的整行提醒：底色也变，避免只靠一行小字 */
.lgc-undo-src.warn{background:#fef0f0;border-bottom-color:#fde2e2}
.lgc-undo-src.ok{background:#f2f8f2}
.lgc-undo-btn{height:28px;padding:0 10px;border:1px solid #c0392b;background:#fff;color:#c0392b;border-radius:6px;cursor:pointer;font-size:12px;font-family:inherit;white-space:nowrap;transition:background .15s,color .15s}
.lgc-undo-btn:hover{background:#c0392b;color:#fff}
.lgc-undo-btn:disabled{opacity:.5;cursor:default}
.lgc-undo-btn.done{background:#e8f5e9;color:#2e7d32;border-color:#a5d6a7}
#lgcSrcBtn,.lgc-abnor-bar,#lgcUndoBtn{display:none} /* 隐藏工具：默认收起来，由「设置→口令管理」的开关(仅主账号)全局开启 */
/* 售后登记条：点工具条按钮展开，用于连续扫我们自己寄出的运单号。
   和「标异常」不同 —— 这是日常业务入口，不做隐藏开关，默认就用。 */
.lgc-rs-bar{margin-top:2px;padding-top:9px;border-top:1px dashed var(--line,#e6e8eb)}
.lgc-rs-title{font-size:13px;font-weight:700;color:var(--terra-deep,#b06842);white-space:nowrap}
.lgc-rs-in{width:280px;flex:0 0 280px;height:32px}
/* 类型单选：退货 / 换货 / 补货 */
.lgc-rs-kinds{display:inline-flex;align-items:center;gap:12px;font-size:13px;white-space:nowrap}
.lgc-rs-kinds label{display:inline-flex;align-items:center;gap:4px;cursor:pointer;user-select:none}
.lgc-rs-kinds input{margin:0;cursor:pointer;accent-color:var(--terra-deep,#b06842)}
.lgc-rs-sep{font-size:12.5px;color:var(--ink-2,#8a9099);white-space:nowrap}
.lgc-rs-ino{width:200px;flex:0 0 200px;height:32px}
.lgc-rs-count{font-size:12px;color:var(--ink-2,#8a9099)}
/* 关联到的订单摘要：摊在登记条下面一行，让人确认「关联的是不是这一单」 */
.lgc-rs-linked{font-size:12.5px;color:var(--ink-2,#8a9099);padding:2px 18px 0;line-height:1.6}
.lgc-rs-ok{color:var(--green,#4f7d56);font-weight:700;margin-right:8px}
.lgc-rs-bad{color:var(--red,#c0392b)}
/* 订单列表「扫描状态」列上的售后登记章。
   借「猪肉章」的质感（双线边框 + 倾斜 + 斜向斑驳底纹），但这是同一格里的第二个章，
   所以收窄了三处，避免和「已扫描章」打架、也避免多个类型并存时彼此叠住：
     ① 角度 -4°（扫描章是 -7°）—— 两个斜章挨着，角度相同会看成连成一片；
     ② 尺寸收一档（padding 与字号都更小）—— 它说的事没有「已扫描」那么重；
     ③ 右侧留 9px 间距 —— 这是「不叠在一起」的关键，靠间距而不是靠定位。
   颜色按类型分（退货赭石 / 换货蓝 / 补货绿），和扫描章的来源色一样属于功能色，
   不跟主题走 —— 靠色相区分类型，跟主题变就分不出来了。 */
.lgc-rs-stamp{
  display:inline-block;
  padding:1px 7px 2px;
  border:2px double currentColor;
  border-radius:3px;
  font-weight:800;
  font-size:11px;
  letter-spacing:.3px;
  line-height:1.2;
  white-space:nowrap;
  transform:rotate(-4deg);
  opacity:.92;
  /* 两侧都留间距，而不是只留右侧：
     左边挨着的可能是「已扫描章」—— 那枚章自己没留右边距，
     而它倾斜 -7°、边界会往外溢出一点，左边不给够就会视觉上压上去。
     这是「不叠在一起」的关键，靠间距解决而不是靠定位。 */
  margin:0 10px 0 6px;
  /* 油墨斑驳：与扫描章同一手法，只是更淡 */
  background:repeating-linear-gradient(135deg,
    rgba(255,255,255,0) 0 3px, rgba(255,255,255,.10) 3px 6px);
  text-shadow:0 0 1px rgba(0,0,0,.12);
}
/* 登记日期：跟在章里的类型文字后面，读作「退货 09-20」。
   字号比章再小一档、同色淡一点（承的是同一枚章的油墨），只显示 MM-DD —— 不带年，
   因为退货不会隔年才回来。它不换行（white-space:nowrap 承自父级），章也就不会变高。 */
.lgc-rs-stamp small{font-size:9px;font-weight:600;letter-spacing:0;margin-left:3px;opacity:.85}
.lgc-rs-st-return{color:#8a6d3b}      /* 退货：赭石 */
.lgc-rs-st-exchange{color:#1e93dd}    /* 换货：蓝（与「广州已扫描」同色系，但形状不同不会混） */
.lgc-rs-st-repair{color:#0e8a8a}      /* 维修：青 —— 与换货的蓝、补货的绿都分得开 */
.lgc-rs-st-resend{color:#2e8b57}      /* 补货：绿 */
.lgc-rs-st-aftersale{color:#7b3fa0}   /* 早期合并版留下的旧值 */
/* 订单列表「扫描状态」列里的「填寄出件」快捷按钮：换货/维修已登记寄回、待补寄出时显示 */
.lgc-outship-btn{margin:4px 0 0 2px;padding:3px 10px;border:1px solid #1e93dd;background:#eaf6fe;color:#1e93dd;border-radius:999px;font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;white-space:nowrap}
.lgc-outship-btn:hover{background:#1e93dd;color:#fff}
/* 退款登记弹窗里的两个视角切换 */
.lgc-rt-tabs{display:flex;gap:8px;padding:10px 18px 0}
.lgc-rt-tabs button{padding:5px 14px;border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);color:var(--ink-2,#8a9099);border-radius:999px;font-size:13px;font-family:inherit;cursor:pointer}
.lgc-rt-tabs button.on{background:var(--terra-deep,#b06842);border-color:var(--terra-deep,#b06842);color:#fff}
/* 退款登记人：跟在退款状态徽章后面，一眼看出是谁把这一单标成已退款的 */
.lgc-by{display:inline-block;margin-left:5px;font-size:11px;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,#9b59b6 14%,transparent);color:#8e44ad;white-space:nowrap;vertical-align:middle}
/* 真实退货日期：跟在「发货后退款」徽章后，明确退款发生在哪天（来自平台售后单申请时间/登记当天），
   不再把到仓扫描日当退货日。蓝色一档，和「登记人」紫标区分。 */
.lgc-refund-date{display:inline-block;margin-left:5px;font-size:11px;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,#2980b9 14%,transparent);color:#2471a3;white-space:nowrap;vertical-align:middle;font-family:monospace}
/* 已退货小标：跟在「正常订单」徽章后面。订单状态是平台口径、退货发生在那之后，徽章上不会反映，
   这枚标把它补出来（只改显示，不动 order_status）。用红一档，和绿色的「正常订单」明显拉开。 */
.lgc-ret{display:inline-block;margin-left:5px;font-size:11px;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--red,#c0392b) 12%,transparent);color:var(--red,#c0392b);white-space:nowrap;vertical-align:middle}
/* 登记记录弹窗：类型徽章 + 辅助文字 */
.lgc-rk{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:999px;white-space:nowrap}
.lgc-rk-return{background:color-mix(in srgb,var(--red,#c0392b) 14%,transparent);color:var(--red,#c0392b)}
.lgc-rk-exchange{background:color-mix(in srgb,#9b59b6 16%,transparent);color:#8e44ad}
/* 维修：青。和换货的紫、补货的绿都拉得开；换货维修虽然数据同构、但业务是两件事，
   颜色上也要能一眼分开，不然看记录列表还得读文字。 */
.lgc-rk-repair{background:color-mix(in srgb,#0e8a8a 16%,transparent);color:#0e8a8a}
.lgc-rk-resend{background:color-mix(in srgb,var(--green,#4f7d56) 16%,transparent);color:var(--green,#4f7d56)}
.lgc-rk-aftersale{background:var(--line-soft,#eee);color:var(--ink-2,#8a9099)}
.lgc-rs-empty{text-align:center;color:var(--ink-2,#8a9099);padding:18px}
.lgc-rs-sub{font-size:11.5px;color:var(--ink-2,#8a9099)}
.lgc-rs-tno{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px}
.lgc-rs-none{color:var(--ink-3,#8b9582);font-size:12.5px}
.lgc-rs-gone{color:var(--red,#c0392b);font-size:11.5px}
/* 售后单的「特殊标记」= 先换后返（2026-10-23 用户要求：「能打特殊标记并发光吗，
   有些用户需要打特殊标记，因为货还没寄过来就先换出去的」）。
   为什么是**脉动**而不是一个更亮的颜色：这一列里本来就挤着紫(换货)/青(维修)/绿(补寄)
   三枚彩色类型章，再加一枚深色章等于换个颜色继续淹没。动起来的东西，视线自己会过去。
   为什么动画写在 td 上、不写在 tr 上：table-row 上的 box-shadow/animation 在部分浏览器
   根本不渲染（Safari 老版本、部分 Chromium 下的 border-collapse 表格），
   写在 td 上是一定生效的，而且只改 background —— 不引起重排，几十行也不掉帧。 */
.lgc-rs-marked>td{animation:lgcRsGlow 2.2s ease-in-out infinite}
.lgc-rs-marked>td:first-child{box-shadow:inset 3px 0 0 #f59e0b}
@keyframes lgcRsGlow{
  0%,100%{background-color:#fff8e6}
  50%{background-color:#ffe4a8}
}
.lgc-rs-flag{display:inline-block;margin-left:4px;padding:1px 7px;border-radius:999px;
  background:#f59e0b;color:#fff;font-size:11px;line-height:16px;white-space:nowrap;
  animation:lgcFlagGlow 1.8s ease-in-out infinite}
@keyframes lgcFlagGlow{
  0%,100%{box-shadow:0 0 4px rgba(245,158,11,.5)}
  50%{box-shadow:0 0 12px rgba(245,158,11,1)}
}
/* 尊重系统设置：开了「减少动态效果」就只留静态底色（还在发光，但不再闪） */
@media (prefers-reduced-motion:reduce){
  .lgc-rs-marked>td{animation:none;background-color:#fff3d6}
  .lgc-rs-flag{animation:none;box-shadow:0 0 8px rgba(245,158,11,.9)}
}
/* 批量登记弹窗的粘贴框 */
.lgc-rs-bt{width:100%;height:170px;box-sizing:border-box;padding:10px 12px;border:1px solid var(--line,#e6e8eb);border-radius:8px;font:12.5px/1.6 ui-monospace,Menlo,Consolas,monospace;color:var(--ink,#1f2329);background:var(--paper,#fff);outline:none;resize:vertical}
.lgc-rs-bt:focus{border-color:var(--terra,#c5764c);box-shadow:0 0 0 2px rgba(197,118,76,.14)}
/* 登记条里成对的输入框（换货要扫两个号） */
.lgc-rs-fld{display:inline-flex;align-items:center;gap:6px}
.lgc-rs-in2{width:200px;flex:0 0 200px;height:32px}
.lgc-sc-yes{background:color-mix(in srgb, var(--green,#4f7d56) 18%, transparent);color:var(--green,#4f7d56)}
.lgc-sc-no{background:var(--line-soft,#eee);color:var(--ink-3,#8b9582)}
.lgc-push-date{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2,#8a9099);margin-left:6px}
.lgc-push-date input{height:34px;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:0 8px;background:var(--paper,#fff);color:var(--ink,#1f2329)}
.lgc-empty{padding:50px;text-align:center;color:var(--ink-2,#8a9099)}
.lgc-err{padding:30px;text-align:center;color:var(--red,#c0392b);font-size:14px}
/* 大图预览遮罩：原图干净展示，可右键另存；右下角带下载按钮 */
.lgc-ret-zoom{position:fixed;inset:0;background:rgba(0,0,0,.74);z-index:1300;display:none;align-items:center;justify-content:center;padding:20px;cursor:zoom-out}
.lgc-ret-zoom-body{max-width:92vw;max-height:88vh;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px}
.lgc-ret-zoomview{position:relative;display:inline-block;max-width:92vw;max-height:88vh}
.lgc-ret-zoomview img{max-width:92vw;max-height:88vh;border-radius:8px;background:#fff;object-fit:contain;cursor:default;display:block}
.lgc-ret-dl{position:absolute;right:10px;bottom:10px;border:1px solid rgba(255,255,255,.7);background:rgba(0,0,0,.55);color:#fff;border-radius:8px;padding:5px 12px;font-size:13px;cursor:pointer;z-index:1302}
.lgc-ret-dl:hover{background:rgba(0,0,0,.75)}
.lgc-ret-zoom-close{position:absolute;top:14px;right:18px;color:#fff;font-size:26px;line-height:1;cursor:pointer;background:rgba(0,0,0,.45);border:none;border-radius:8px;width:40px;height:40px;z-index:1301}
.lgc-ret-zoom-close:hover{background:rgba(0,0,0,.65)}
/* 突破 .content(max-width:1080px 居中) 限制，让内容撑满主区全宽；#sec-logistics / #sec-xianyu 始终在 DOM，故对所有模块生效（用户接受全宽），左右各留 15px */
.content:has(#sec-logistics),.content:has(#sec-xianyu){max-width:none;margin:0;padding:24px 15px 60px}
#sec-logistics{width:100%;position:relative}
/* 闲鱼贩子模块：直接复用订单扫码的 .lgc-* 样式，保证视觉一致 */
#sec-xianyu{width:100%}
/* 闲鱼新增登记弹窗 */
.xy-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1200;display:none;align-items:center;justify-content:center;padding:20px}
.xy-mask.show{display:flex}
.xy-modal{background:var(--paper,#fff);color:var(--ink,#1f2329);border-radius:12px;width:min(560px,94vw);max-height:88vh;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,.25)}
.xy-h{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line,#e6e8eb);font-size:15px}
.xy-h b{font-size:16px}
.xy-close{margin-left:auto;border:1px solid var(--line,#e6e8eb);background:var(--surface,#f7f9f4);color:var(--ink-2,#8a9099);border-radius:8px;width:30px;height:30px;font-size:18px;line-height:1;cursor:pointer}
.xy-form{overflow-y:auto;padding:14px 18px;display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.xy-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-2,#8a9099)}
.xy-form input,.xy-form textarea{border:1px solid var(--line,#e6e8eb);border-radius:7px;padding:7px 10px;font-size:13px;background:var(--bg,#f5f6f8);color:var(--ink,#1f2329);font-family:inherit}
.xy-form input:focus,.xy-form textarea:focus{outline:none;border-color:var(--terra,#c5764c)}
.xy-form .full{grid-column:1/-1}
.xy-preview{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.xy-preview img{width:64px;height:64px;object-fit:cover;border-radius:6px;border:1px solid var(--line,#e6e8eb)}
.xy-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 18px;border-top:1px solid var(--line,#e6e8eb)}
.xy-cancel{border:1px solid var(--line,#e6e8eb);background:var(--surface,#f7f9f4);color:var(--ink-2,#8a9099);border-radius:8px;padding:6px 14px;font-size:13px;cursor:pointer;font-family:inherit}
.xy-thumb{width:56px;height:56px;object-fit:cover;border-radius:6px;border:1px solid var(--line,#e6e8eb);cursor:pointer}
.xy-cell-imgs{display:flex;flex-wrap:wrap;gap:4px}
/* 闲鱼表格：固定列宽（标准宽度），不随内容自适应；超宽横向滚动 */
#sec-xianyu .lgc-table-wrap{overflow-x:auto;overflow-y:auto}
#sec-xianyu .lgc-tbl{table-layout:fixed;width:2168px}
#sec-xianyu .lgc-tbl thead th,#sec-xianyu .lgc-tbl tbody td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:normal}
.xy-more-msg{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.xy-more{color:#2f6fed;cursor:pointer;font-size:12px;margin-left:4px;text-decoration:none;flex-shrink:0}
.xy-more:hover{text-decoration:underline}
.xy-detail-body{max-height:60vh;overflow:auto;padding:16px 18px;font-size:14px;line-height:1.8;white-space:pre-wrap;word-break:break-word;color:var(--ink,#1f2329)}
.xy-del{cursor:pointer;color:var(--red,#c0392b);font-size:12px;white-space:nowrap}
.xy-edit{color:#2f6fed;cursor:pointer;font-size:12px;white-space:nowrap;margin-right:10px}
.xy-edit:hover{text-decoration:underline}
.xy-amt{color:var(--red,#c0392b);font-weight:700}
.xy-pitem{position:relative;width:64px;height:64px;flex:0 0 auto}
.xy-pitem img{width:64px;height:64px;object-fit:cover;border-radius:6px;border:1px solid var(--line,#e6e8eb);display:block}
.xy-pdel{position:absolute;top:-7px;right:-7px;width:18px;height:18px;line-height:18px;text-align:center;background:#c0392b;color:#fff;border-radius:50%;cursor:pointer;font-size:13px;font-style:normal;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.xy-pdel:hover{background:#a93226}
/* 操作日志弹窗 */
.lgc-log-mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1250;display:none;align-items:center;justify-content:center;padding:20px}
.lgc-log-mask.show{display:flex}
.lgc-log-modal{background:var(--paper,#fff);color:var(--ink,#1f2329);border-radius:12px;width:min(760px,94vw);max-height:82vh;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,.25)}
.lgc-log-h{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line,#e6e8eb);font-size:15px}
.lgc-log-h b{font-size:16px}
.lgc-log-btn{padding:7px 16px;font-size:13px;border:1px solid var(--line,#e6e8eb);border-radius:7px;background:var(--paper,#fff);color:var(--ink,#1f2329);cursor:pointer}
.lgc-log-btn:hover{border-color:var(--accent,#2f6fb0);color:var(--accent,#2f6fb0)}
.lgc-log-ok{background:var(--accent,#2f6fb0);border-color:var(--accent,#2f6fb0);color:#fff}
.lgc-log-ok:hover{filter:brightness(.94)}
.lgc-log-tip{font-size:12px;color:var(--ink-2,#8a9099)}
.lgc-log-close{margin-left:auto;border:1px solid var(--line,#e6e8eb);background:var(--surface,#f7f9f4);color:var(--ink-2,#8a9099);border-radius:8px;width:30px;height:30px;font-size:18px;line-height:1;cursor:pointer}
.lgc-log-body{overflow-y:auto;flex:1;min-height:120px}
.lgc-log-item{display:flex;align-items:flex-start;gap:12px;padding:10px 18px;border-bottom:1px solid var(--line,#e6e8eb);font-size:13px;line-height:1.5}
.lgc-log-item:last-child{border-bottom:none}
.lgc-log-time{flex:0 0 150px;color:var(--ink-2,#8a9099);font-size:12px}
.lgc-log-cat{flex:0 0 96px;text-align:center}
.lgc-log-cat span{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;white-space:nowrap}
.lgc-log-cat.app_scan span{background:color-mix(in srgb, var(--green,#4f7d56) 18%, transparent);color:var(--green,#4f7d56)}
.lgc-log-cat.return_upload span{background:color-mix(in srgb, var(--gold,#b0913f) 20%, transparent);color:var(--gold,#8a6d1a)}
.lgc-log-cat.scan_web span{background:color-mix(in srgb, var(--terra,#c5764c) 18%, transparent);color:var(--terra-deep,#b06842)}
.lgc-log-cat.import span{background:color-mix(in srgb, var(--red,#c0392b) 12%, transparent);color:var(--red,#c0392b)}
.lgc-log-mid{flex:1;min-width:0}
.lgc-log-op{color:var(--ink,#1f2329);font-weight:600}
.lgc-log-detail{color:var(--ink-2,#8a9099);margin-top:2px;word-break:break-all}
.lgc-log-empty{padding:40px;text-align:center;color:var(--ink-2,#8a9099);font-size:13px}
/* 扫码视觉提醒：无音箱时网页上的新扫码提示条 */
.lgc-scan-alert{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:1350;background:#c0392b;color:#fff;padding:10px 22px;border-radius:10px;font-size:14px;font-weight:700;box-shadow:0 8px 26px rgba(0,0,0,.35);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;display:flex;align-items:center;gap:8px}
.lgc-scan-alert:hover{transform:translateX(-50%)}
.lgc-scan-alert.show{opacity:1;transform:translateX(-50%) translateY(6px)}
.lgc-scan-alert.rep{background:#6b7280}
/* 扫描来源调整面板 */
.lgc-src-bar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line,#e6e8eb);flex-wrap:wrap}
.lgc-src-bar select{height:32px;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:0 8px;background:var(--paper,#fff);color:var(--ink,#1f2329);font-size:13px;flex:0 0 auto}
/* 「扫描来源调整」那一行里的搜索框（2026-10-06 用户要求：支持搜索运单号）。
   与同一行的 select 同高同圆角，免得这一行看着参差。
   ⚠️ flex:0 0 auto + min-width 都不能省：这一行开着 flex-wrap，
   不给 min-width 时搜索框会被相邻按钮压到几乎看不见（上面那条注释记的就是这件事）。 */
.lgc-src-bar input[type="search"]{height:32px;border:1px solid var(--line,#e6e8eb);border-radius:8px;padding:0 10px;background:var(--paper,#fff);color:var(--ink,#1f2329);font-size:13px;font-family:inherit;flex:0 0 auto;min-width:230px}
/* 按钮 / 下拉一律「不收缩、字不换行」：
   flex 行默认允许子项收缩，一旦这一行东西多了（比如售后订单那行：搜索框 + 类型 + 查询 + 手工补单），
   按钮被压得比里面的字还窄 —— 字不换行，就直接从边框里挤出去，看着像几个字悬在框外。
   宁可换行也不要压缩：行放不下就换到下一行（flex-wrap:wrap 已开），这样任何屏宽下边框都是完整的。 */
.lgc-src-bar button{height:32px;border:1px solid var(--line,#e6e8eb);background:var(--paper,#fff);color:var(--ink,#1f2329);border-radius:8px;padding:0 14px;font-size:13px;cursor:pointer;flex:0 0 auto;white-space:nowrap}
.lgc-src-bar button.ok{background:var(--green,#4f7d56);color:#fff;border-color:transparent}
.lgc-src-bar .cnt{font-size:12px;color:var(--ink-2,#8a9099);margin-left:auto}
.lgc-src-table{width:100%;border-collapse:collapse;font-size:13px}
.lgc-src-table th{position:sticky;top:0;background:var(--surface,#f7f9f4);text-align:left;padding:8px 12px;border-bottom:1px solid var(--line,#e6e8eb);color:var(--ink-2,#8a9099);font-weight:600;font-size:12px}
.lgc-src-table td{padding:7px 12px;border-bottom:1px solid var(--line,#e6e8eb);word-break:break-all}
.lgc-src-table tr:hover{background:color-mix(in srgb, var(--green,#4f7d56) 6%, transparent)}
.lgc-src-src{font-weight:700}
.lgc-src-src.huizhou{color:var(--terra,#c5764c)}
.lgc-src-src.guangzhou{color:#1e93dd}   /* 广州统一用亮蓝，与惠州的红/陶色拉开 */
.lgc-src-foot{padding:10px 18px;border-top:1px solid var(--line,#e6e8eb);color:var(--ink-2,#8a9099);font-size:12px}
