/*!
 * web/assets/css/index/08-orders-ship.css
 * 订单列表 / 详情 / 发货 / 卡片化样式
 *
 * 本文件由 tools/split_spa.py 从单文件 SPA 机械拆出，请勿手工改动切分边界。
 * 加载顺序由入口 HTML 统一控制（经典 script 共享全局词法环境）。
 */

/* 订单详情底部操作栏固定底部 */
.page .ord-bar:last-of-type{margin-bottom:0}
.ord-detail-bottom{position:fixed;bottom:0;left:0;right:0;background:var(--cb);border-top:1px solid var(--bd);padding:8px 12px calc(8px + env(safe-area-inset-bottom));z-index:60;box-shadow:0 -2px 8px rgba(0,0,0,.06);max-height:50vh;overflow-y:auto}
@media(min-width:768px){.ord-detail-bottom{left:var(--sbw,220px)}}
/* #657 同 .pick-bar：<768 时这条 z60 的贴底栏压在 z99 的手机底栏下面，动作看得到点不到。 */
@media(max-width:767px){.ord-detail-bottom{bottom:var(--mt-h,64px);padding-bottom:8px}}
.ord-detail-page{padding-bottom:calc(220px + env(safe-area-inset-bottom))!important}
.ship-row{display:flex;flex-direction:column;gap:6px;padding:10px 0;border-bottom:1px solid var(--bd)}
.ship-row__name{font-size:14px;font-weight:600;color:var(--tc)}
.ship-row__meta{color:var(--ts);font-weight:400;font-size:12px}
.ship-row__ctrl{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ship-row__max{font-size:12px;color:var(--ts)}
.shiprec{background:var(--cd);border-radius:10px;padding:10px 12px;margin:0 0 10px;box-shadow:var(--sh)}
.shiprec__hd{display:flex;align-items:center;gap:8px;padding-bottom:6px;border-bottom:1px dashed var(--br);margin-bottom:4px}
.shiprec__no{font-size:13px;color:var(--pci)}
.shiprec__time{flex:1;font-size:11px;color:var(--ts);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shiprec__qty{font-size:14px;color:var(--tc)}
.shiprec__row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--br)}
.shiprec__row:last-child{border-bottom:none}
.shiprec__img{width:38px;height:38px;border-radius:6px;object-fit:cover;flex:none;background:var(--cb);cursor:pointer}
.shiprec__img--ph{display:flex;align-items:center;justify-content:center;color:var(--ts);cursor:default}
.shiprec__body{flex:1;min-width:0}
.shiprec__name{font-size:13px;font-weight:600;color:var(--tc);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shiprec__sno{font-size:11px;color:var(--ts);font-weight:400;margin-left:4px}
.shiprec__spec{font-size:11px;color:var(--ts);margin-top:1px}
.shiprec__q{font-size:13px;color:var(--pci);flex:none}
.pick-card{background:var(--cd);border-radius:10px;margin:8px 12px;overflow:hidden;box-shadow:var(--sh)}
.pick-card__hd{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer}
.pick-card__img{width:50px;height:50px;border-radius:8px;object-fit:cover;flex:none;background:var(--cb)}
.pick-card__img--ph{display:flex;align-items:center;justify-content:center;color:var(--ts)}
.pick-card__info{flex:1;min-width:0}
.pick-card__name{font-weight:600;font-size:14px;color:var(--tc);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pick-card__no{font-size:11px;color:var(--ts);margin-left:6px;font-weight:400}
.pick-card__sub{font-size:12px;color:var(--ts);margin-top:2px}
.pick-table{width:100%;border-collapse:collapse;font-size:12px}
.pick-table th{background:var(--cb);color:var(--ts);font-weight:500;padding:6px 8px;text-align:left;border-top:1px solid var(--br);border-bottom:1px solid var(--br);white-space:nowrap}
.pick-table td{padding:6px 8px;border-bottom:1px solid var(--br)}
.pick-row--done td{opacity:.55}
.pick-td--c{text-align:center}
.pick-td__stock{color:var(--ts);font-size:11px}
.pick-td__img{width:28px;height:28px;border-radius:5px;object-fit:cover;background:var(--bd);vertical-align:middle;display:inline-block}
.pick-td__img--ph{display:inline-flex;align-items:center;justify-content:center;color:var(--ts);font-size:13px;width:28px;height:28px;border-radius:5px;background:var(--cb)}
.pick-bar{position:fixed;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;padding-bottom:calc(10px + env(safe-area-inset-bottom));background:var(--cb);border-top:1px solid var(--br);z-index:10;box-sizing:border-box}
@media(min-width:768px){.pick-bar{left:var(--sbw,220px)}body.sb-collapsed .pick-bar{left:64px}}
/* #657：手机档让开 .mobile-tab（实测 61，预留走 --mt-h=64）。原来这条 z10 的贴底栏正好被 z99 的底栏盖住，
   390/360 实测按钮中心 elementFromPoint 取到的是 tab —— 手机上「预览发货单」「确定发货」都点不到。 */
@media(max-width:767px){.pick-bar{bottom:var(--mt-h,64px);padding-bottom:10px}}
.pick-pv__row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px dashed var(--br);font-size:13px}
.pick-pv__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tc)}
.pick-pv__spec{color:var(--ts);font-size:12px}
.pick-pv__qty{color:var(--pci)}
.srec-card{background:var(--cd);border-radius:10px;margin:8px 12px;padding:0;box-shadow:var(--sh);overflow:hidden}.dlv-tabs{display:flex;gap:8px;overflow-x:auto;padding:8px 12px;background:var(--cb);border-bottom:1px solid var(--br);flex:none;-webkit-overflow-scrolling:touch}
.dlv-tab{flex:none;padding:6px 14px;border-radius:16px;font-size:13px;background:var(--bg);color:var(--ts);cursor:pointer;display:flex;align-items:center;gap:4px}
.dlv-tab.active{background:var(--pc);color:#fff;font-weight:600}
.dlv-tab__n{font-size:11px;opacity:.75}
/* #174 上限触顶提示（接口 truncated=true 时才有这一行） */
.dlv-cap-tip{margin:6px 12px 0;padding:8px 10px;border:1px dashed var(--pc);border-radius:8px;font-size:12px;line-height:1.5;color:var(--pci);background:var(--cb)}
/* 2026-09-06：路线tab已全部指派时锁定样式（灰色，不能重新分配，只能撤销） */
.dlv-tab--locked{background:#ECEFF1;color:#90A4AE;cursor:not-allowed}
.dlv-tab--locked.active{background:#B0BEC5;color:#fff}
.dlv-tab__lock{font-size:10px;color:#FF9800;margin-left:2px}
.dlv-card{background:var(--cd);border-radius:10px;margin:8px 12px;padding:10px 12px;box-shadow:var(--sh)}
/* 2026-09-06：配送卡片选中样式（单选多选） */
.dlv-card--selected{border:2px solid var(--pc);box-shadow:0 0 0 1px var(--pc)}
.dlv-card--block{border:1px solid #B0BEC5;background:#ECEFF1}
.dlv-card--addr{border-left:3px solid #C62828}
.dlv-card__top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.dlv-card__top b{font-size:15px;color:var(--tc)}
.dlv-card__row{font-size:12px;color:var(--ts);margin-top:5px;line-height:1.5;word-break:break-all}
/* 2026-09-05：配送管理发货详情（只读弹窗）行样式 */
/* 2026-09-05：配送卡片商品缩略图（项目约束：商品展示必须带商品图） */
.dlv-imgs{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 2px}
.dlv-imgs__it{width:42px;height:42px;object-fit:cover;border-radius:8px;background:var(--bg);border:0.5px solid var(--bd)}
.dlv-imgs__more{width:42px;height:42px;border-radius:8px;background:var(--bg);border:0.5px solid var(--bd);display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--ts)}
/* 2026-09-26（#151）：配送卡片货物行。缩略图只能覆盖「商品有图」的情况——
   本地 1345 条配送单缩略图全空（商品无主图/规格图），卡片上就一点货物信息都没有了，
   所以件数这一行必须恒显示（有图时图照样在下方并排），点开再按需列明细行。 */
.dlv-goods{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px;font-size:12px}
.dlv-goods__sum{color:var(--ts)}
.dlv-goods__tog{color:var(--tc);cursor:pointer;flex:none}
.dlv-goods__list{margin-top:6px;border:1px solid var(--bd);border-radius:8px;background:var(--bg);padding:2px 8px}
.dlv-goods__hint{font-size:12px;color:var(--ts);text-align:center;padding:8px 0}
.dlv-goods__it{display:flex;align-items:center;gap:6px;font-size:12px;padding:5px 0;border-bottom:1px dashed var(--bd)}
.dlv-goods__it:last-child{border-bottom:0}
.dlv-goods__img{width:26px;height:26px;border-radius:6px;object-fit:cover;flex:none;background:var(--cb)}
.dlv-goods__name{flex:none;max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dlv-goods__sno{flex:none;color:var(--ts);font-size:11px}
.dlv-goods__spec{flex:1;min-width:0;color:var(--ts);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dlv-goods__qty{margin-left:auto;flex:none;font-weight:600}
.dlv-goods__more{font-size:11px;color:var(--ts);padding:5px 0 3px}
/* 2026-09-05：发货详情明细带商品图 */
.dlv-item{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--bd)}
.dlv-item__img{width:38px;height:38px;object-fit:cover;border-radius:6px;background:var(--bg);flex:none}
.dlv-item__img--ph{width:38px;height:38px;flex:none;background:var(--bg);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--ts)}
.dlv-item__main{flex:1;min-width:0;font-size:13px}
.dlv-item__qty{font-weight:700;flex:none}.dlv-drow{display:flex;gap:10px;font-size:13px;padding:4px 0;line-height:1.5}
.dlv-drow>span:first-child{flex:none;width:76px;color:var(--ts)}
.dlv-card__acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
/* #306（2026-10-03 图 cc100ce）：配送单弹层底部那排状态按钮原来是一行 `flex:1` 硬塞进 400px 弹层。
   el-button 默认不换行，而「配送异常（客户反馈未收到货）」一个就占掉大半行 ——
   结果是三个按钮被挤得比自己的文字还窄，业主读到的是「照片+已送」「客户反馈未」这种被切掉的词，
   并且被挤出去的那部分压在最后一行商品上（截图里红框的位置）。
   改成两列栅格 + 允许文字换行：宽度由栅格分配，按钮不再互相挤；窄屏也保持两列
   （这里没有"可以横滑看更多"的余地，切词=丢信息）。 */
.dlv-acts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:14px}
.dlv-acts .el-button{width:100%;margin:0;min-width:0;height:auto;min-height:38px;padding:7px 10px;
  white-space:normal;line-height:1.25;text-align:center}
.dlv-acts__tip{grid-column:1/-1;font-size:12px;color:var(--ts);line-height:1.5}
@media(max-width:767px){.dlv-acts .el-button{min-height:44px}}
/* 发货详情商品列表展开收起动画 */
.dlv-items-wrap{max-height:180px;overflow-y:auto;transition:max-height .35s ease}
.dlv-items-wrap--expanded{max-height:60vh}
.dlv-item-row:last-child{border-bottom:none}
/* #281/#283：发货详情弹层里的配送轨迹时间轴（与独立页 .sd-track 同一视觉语言，
   但 SPA 拿不到 standalone 层的样式表，所以这里按同一套令牌各写一份）。 */
.dlv-tl{list-style:none;margin:0;padding:0 0 0 6px}
.dlv-tl__it{position:relative;padding:0 0 12px 16px}
.dlv-tl__it::before{content:"";position:absolute;left:-1px;top:13px;bottom:-1px;width:2px;background:var(--br)}
.dlv-tl__it--last{padding-bottom:0}
.dlv-tl__it--last::before{display:none}
.dlv-tl__dot{position:absolute;left:-6px;top:5px;width:10px;height:10px;border-radius:50%;
  background:var(--cb);border:2px solid var(--ts);box-sizing:border-box}
.dlv-tl__it--last .dlv-tl__dot{border-color:var(--pc);background:var(--pc)}
.dlv-tl__c{min-width:0}
.dlv-tl__a{font-size:13px;font-weight:600;line-height:1.4}
.dlv-tl__t{font-size:12px;color:var(--ts);font-variant-numeric:tabular-nums;margin-top:1px}
.dlv-tl__o{font-size:12px;color:var(--ts);margin-top:2px;overflow-wrap:anywhere}
.dlv-tl__ph{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dlv-tl__phi{width:100%;aspect-ratio:1;object-fit:cover;border-radius:8px;border:1px solid var(--br);background:var(--cb);cursor:zoom-in}
@keyframes dlvFadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.dlv-alert{color:#C62828;font-weight:600;font-size:12px}
.dlv-block-note{color:#607D8B;font-size:12px;margin-bottom:8px;background:#ECEFF1;border-radius:6px;padding:8px}
.dlv-tag{font-size:11px;padding:2px 10px;border-radius:10px;flex:none}
.dlv-tag--pending{color:#F57C00;background:rgba(255,152,0,.14)}
.dlv-tag--assigned{color:#1565C0;background:rgba(25,118,210,.14)}
.dlv-tag--out_for_delivery{color:#0277BD;background:rgba(2,119,189,.14)}
.dlv-tag--delivered{color:#2E7D32;background:rgba(46,125,50,.14)}
.dlv-tag--failed{color:#C62828;background:rgba(198,40,40,.14)}
.dlv-tag--abnormal{color:#AD1457;background:rgba(173,20,87,.14)}
.dlv-tag--blocked{color:#546E7A;background:rgba(96,125,139,.16)}
.dlv-dialog--gray .el-dialog{filter:grayscale(.25)}
.srec-r1{display:flex;align-items:center;gap:8px;padding:10px 12px 4px;cursor:pointer}
.srec-r1__cust{display:flex;align-items:center;gap:4px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px;color:var(--tc)}
.srec-r1__date{margin-left:auto;font-size:12px;color:var(--ts);flex:none}
.srec-r1__qty{font-size:13px;font-weight:600;color:var(--pci);flex:none}
.srec-r2{padding:0 12px 10px;font-size:12px;color:var(--ts);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.srec-detail{border-top:1px dashed var(--br);padding:8px 12px 10px}
.srec-ship{margin-bottom:8px}
.srec-ship:last-child{margin-bottom:0}
.srec-ship__hd{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ts);margin-bottom:4px}
.srec-ship__hd b{color:var(--tc)}
/* 2026-09-05：发货记录配送状态标签 */
.srec-dlv{flex:none;font-size:11px;line-height:1;padding:3px 6px;border-radius:4px;white-space:nowrap}
.srec-dlv.dlv-pending{color:#8a6d3b;background:#fcf3dc}
.srec-dlv.dlv-done{color:#1e7e34;background:#e6f7ea}
.srec-dlv.dlv-blocked{color:#b3261e;background:#fdecea}
.srec-dlv.dlv-fail{color:#b3261e;background:#fdecea}
/* #448（2026-11-01）暗档补齐：上面这几族的底色是写死的淡彩/浅灰（#ECEFF1、#fcf3dc、#e6f7ea、#fdecea），
   浅档读着没问题，暗档等于在深色页上贴浅色实心片 —— 文字对比度那条判据看不见底，所以以前一直绿着。
   这里按同一语义换成深底亮字（对比度均 ≥4.5），浅档的值不动；
   .dlv-tab--locked.active 是「灰底白字」的锁定态，白字压深灰仍在 AA 之上，不动。 */
.dark .dlv-tab--locked{background:#2A2A2E;color:#9A9AA0}
.dark .dlv-card--block{border-color:#3E3E44;background:#26262A}
.dark .dlv-block-note{color:#9A9AA0;background:#26262A}
.dark .srec-dlv.dlv-pending{color:#FFC46B;background:#3A2E10}
.dark .srec-dlv.dlv-done{color:#5FD99A;background:#103024}
.dark .srec-dlv.dlv-blocked,.dark .srec-dlv.dlv-fail{color:#FF8A80;background:#3A1414}
.srec-ship__t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.srec-ship__q{color:var(--pci);flex:none}
.srec-ship__hd{flex-wrap:wrap}
.srec-ship__acts{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
.srec-ship__row{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid var(--br);font-size:13px}
.srec-ship__row:last-child{border-bottom:none}
.srec-ship__img{width:38px;height:38px;border-radius:6px;object-fit:cover;flex:none;background:var(--cb);cursor:pointer}
.srec-ship__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--tc);font-weight:500}
.srec-ship__sno{font-size:11px;color:var(--ts);font-weight:400;margin-left:4px}
.srec-ship__spec{color:var(--ts);font-size:12px;flex:none}
.srec-ship__x{color:var(--pci);flex:none}
/* 8.29 统一三处卡片化样式（放进全局保证生效，组件模板内 <style> 块渲染不稳定） */
.ord-topmeta{margin:12px 12px 6px;background:var(--cd);border-radius:10px;padding:12px 14px;box-shadow:var(--sh);line-height:1.3}
.ord-topmeta__cust{font-weight:700;color:var(--tc);font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-topmeta__no{color:var(--ts);font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* #550 订单详情顶部汇总（新设计：每行一项卡片堆叠） */
.ord-sumv2{margin:8px 12px 0;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ord-sumv2__row{background:var(--cd);border-radius:12px;padding:12px 10px;text-align:center;box-shadow:var(--sh);transition:transform .15s ease;min-width:0;display:flex;flex-direction:column;justify-content:center}
.ord-sumv2__row:active{transform:scale(.99)}
.ord-sumv2__row--cust{grid-column:1/-1;text-align:left;padding:14px 18px}
.ord-sumv2__name{font-weight:700;color:var(--tc);font-size:18px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-sumv2__v{font-size:18px;font-weight:700;color:var(--tc);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ord-sumv2__v--amt{color:var(--pci);font-size:17px}
.ord-sumv2__v--due{color:var(--dc);font-size:17px}
.ord-sumv2__u{font-size:12px;font-weight:500;color:var(--ts);margin-left:2px}
.ord-sumv2__lbl{font-size:11px;color:var(--ts);margin-top:4px;line-height:1.3}
.ord-edit__row{display:flex;align-items:center;gap:8px;padding:10px 12px;margin:8px 12px;background:var(--cd);border-radius:10px;box-shadow:var(--sh)}
.ord-edit__row--del{opacity:.5}
/* #584：行缺规格的显式提示 —— 描边+小字，不用实心色块抢焦点；文字用墨色不用危险色当墨水 */
.ord-edit__nospec{font-size:12px;color:var(--dc);border:1px solid var(--dc);border-radius:10px;padding:1px 8px;line-height:18px}
.ship-sumbar{display:flex;gap:8px;padding:8px 12px;background:var(--cb);border-bottom:1px solid var(--br);overflow-x:auto}
.ship-sumbar__cell{flex:1;min-width:84px;background:var(--cd);border-radius:10px;padding:10px 8px;box-shadow:var(--sh);text-align:center}
.ship-sumbar__cell--wide{flex:1.6;min-width:150px}
/* #400：采购页这一条要放五个数（总货款/已付/欠款/余款/多付）。.ship-sumbar 原本是
   overflow-x:auto —— 窄屏靠横向滚动，等于把"余款"这个业主点名要看的数藏到屏幕外。
   这一档改成整行换行，五个数一屏都在，不引入新的固定宽度。 */
.ship-sumbar--five{flex-wrap:wrap;overflow-x:visible}
.ship-sumbar--five .ship-sumbar__cell{flex:1 1 30%;min-width:0}
/* #405：可点的余款格。min-height 44px 是触摸下限（门禁 check_mobile_layout 量的是实际盒高，
   只加 cursor:pointer 不够 —— #331 那条判据钉的就是"挂了点击却没可点形状"）。 */
.ship-sumbar__cell--tap{cursor:pointer;min-height:44px;-webkit-tap-highlight-color:transparent}
.ship-sumbar__cell--tap:active{background:var(--gpl,#f2f3f5)}
.crd-h{font-size:15px;font-weight:600;color:var(--tc);margin-bottom:6px}
.crd-sum{font-size:12px;color:var(--ts);margin-bottom:8px}
.crd-e{font-size:13px;color:var(--ts);text-align:center;padding:16px 0}
.crd-row{border:1px solid var(--bd,#eee);border-radius:10px;padding:10px 12px;margin-bottom:8px;cursor:pointer;min-height:44px}
.crd-row:active{background:var(--gpl,#f2f3f5)}
.crd-no{font-size:13px;color:var(--tc);font-weight:600;margin-bottom:4px}
.crd-line{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--ts)}
.crd-m{font-size:12px;color:var(--ts);padding:4px 0;border-bottom:1px dashed var(--bd,#eee)}
.ship-sumbar__v{font-size:17px;font-weight:700;color:var(--tc);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ship-sumbar__v--amt{color:var(--dc)}
.ship-sumbar__v--sm{font-size:12px;font-weight:600}
.ship-sumbar__u{font-size:11px;font-weight:400;color:var(--ts);margin-left:2px}
/* 订单详情元数据 50/50 两列卡片 */
.ord-meta2col{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;background:var(--cd);border-radius:var(--rl);padding:10px 14px;box-shadow:var(--sh);margin:8px 12px 0}
.ord-meta2col__col{display:flex;flex-direction:column;gap:0}
.ord-meta2col__row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--br);font-size:13px;min-width:0}
.ord-meta2col__row:last-child{border-bottom:none}
.ord-meta2col__row .lbl{color:var(--ts);flex-shrink:0;margin-right:8px}
.ord-meta2col__row .val{color:var(--tc);font-weight:500;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}
.ord-meta2col__row--remark{cursor:pointer;grid-column:1 / -1;background:var(--cb);border-radius:8px;margin-top:4px;padding-left:10px;padding-right:10px}
.ord-meta2col__row--remark .val{display:flex;align-items:flex-start;justify-content:flex-end;gap:6px;min-width:0}
/* 2026-09-20：备注默认 2 行截断（原来是 max-width:90px 单行省略，长备注等于看不见），展开后全量显示 */
.ord-meta2col__row--remark .remark-text{flex:1;min-width:0;text-align:right;white-space:pre-wrap;word-break:break-word;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.ord-meta2col__row--remark .remark-text--open{-webkit-line-clamp:unset;line-clamp:unset;display:block;overflow:visible}
.ord-meta2col__row--remark .remark-toggle{font-size:11px;color:var(--pci);flex:none;padding-top:1px}
.ord-meta2col__row--remark .copy-hint{font-size:11px;color:var(--pci);flex-shrink:0;padding-top:1px}
.ship-sumbar__l{font-size:11px;color:var(--ts);margin-top:3px}
/* 需求2：余款记录流水行 + 余额卡可点击 */
.cust-stat--link{cursor:pointer}
.cust-stat--link:active{opacity:.7}
.bal-log-row{background:var(--cd);border-radius:10px;padding:10px 12px;margin-bottom:8px;box-shadow:var(--sh)}
/* 8.md 客户维护看板 */
.dash-card{background:var(--cb);border-radius:10px;padding:14px;text-align:center}
.dash-num{font-size:24px;font-weight:700;line-height:1.2}
.dash-lab{font-size:12px;color:var(--ts);margin-top:4px}
.dash-sub{font-size:11px;color:var(--ts);margin-top:2px}
.health-pie{width:80px;height:80px;border-radius:50%;flex-shrink:0}
.health-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
/* 2026-09-17：配货锁顶部横幅（谁在配货，其他人只读） */
.fulfill-banner{display:flex;align-items:center;gap:8px;margin:10px 12px;padding:10px 12px;border-radius:10px;background:rgba(255,149,0,.12);border:1px solid rgba(255,149,0,.35);color:#b26a00}
.fulfill-banner__ico{font-size:18px;flex:none}
.fulfill-banner__txt{font-size:13px;font-weight:600;line-height:1.4;flex:1;min-width:0;overflow-wrap:anywhere}
/* #599：两把锁两条横幅 —— 浏览锁走信息墨色（--pci，暗黑有定义，不把主色当墨水那条已由 #364 清过），
   自己的配货锁走中性底。全部走 --tc/--ts/--pci/--bd 这一套令牌，不写死颜色。 */
.fulfill-banner--view{background:var(--bg);border-color:var(--bd);color:var(--pci)}
.fulfill-banner--mine{background:var(--bg);border-color:var(--bd);color:var(--tc)}
.fulfill-banner .el-button{min-height:44px}

/* ========== 2026-09-20（送审反馈）合并发货弹窗 ==========
   分组：已付款未发货（展开）/ 未付款未发货（默认收起）；整单勾选 + 逐行勾选。
   颜色一律走主站令牌，禁止裸色值（AGENTS.md §10 / 铁律）。 */
.ms-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 10px;background:var(--bg);border-radius:10px;margin-bottom:10px;font-size:12px}
.ms-bar__sum{color:var(--ts)}
/* #183：这条说的是"你看到的不是全部"，必须比正文更抢眼；但 --wc(#FF9500) 在浅底只有 1.9:1，
   12px 灰底上几乎读不出来 —— 用 #182 的告警墨色 --wci（浅 6.9:1 / 深 4.5:1）。 */
.ms-bar__warn{color:var(--wci);font-weight:600}
/* #201：合并发货弹层的排队位置与排序口径。名次是「为什么是这几单先发」的依据，
   必须和订单号同一行看得见；排序口径以前哪都没写。 */
.ms-order__queue{font-size:11px;line-height:1.4;color:var(--sci);border:1px solid var(--bd);border-radius:6px;padding:1px 6px;white-space:nowrap;flex:none}
.ms-bar__sort{color:var(--sci);font-size:12px}

.ms-group{border:1px solid var(--bd);border-radius:10px;margin-bottom:10px;overflow:hidden}
.ms-group__hd{display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--cd);cursor:pointer;border-bottom:1px solid var(--bd);font-size:13px;font-weight:600;color:var(--tc)}
.ms-group__label{flex:none}
.ms-group__n{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:18px;padding:0 6px;border-radius:9px;background:var(--bg);color:var(--ts);font-size:11px;font-weight:600}
.ms-group__all{margin-left:auto}
.ms-order{padding:10px 12px;border-bottom:1px dashed var(--bd)}
.ms-order:last-child{border-bottom:none}
.ms-order--cur{background:var(--cb)}
.ms-order__hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--ts)}
.ms-order__no{font-size:13px;font-weight:600;color:var(--tc)}
.ms-order__cur{font-size:11px;color:var(--pci);font-weight:600}
.ms-order__time{margin-left:auto}
.ms-order__amt{font-weight:600;color:var(--tc)}
.ms-order__due{color:var(--wc)}
.ms-order__link{color:var(--pci);cursor:pointer;flex:none}
.ms-order__imgs{display:flex;gap:6px;margin:6px 0 2px;flex-wrap:wrap}
.ms-order__imgs img{width:40px;height:40px;object-fit:cover;border-radius:6px;background:var(--bg)}
/* #309（2026-10-03）：合并发货弹层里的「本批商品·跨客户待发排名」。
   名次由服务端在整个命中集合上算，这里只负责一眼能读出：第几名 / 前面几单 / 哪个客户 / 命中几行几件。
   当前单用主色左边条 + 浅底标出来（默认定位到它），其余订单默认收起，点行尾箭头展开明细。 */
.msr{margin-top:12px;border-top:1px solid var(--bd);padding-top:8px}
.msr__hd{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--tc);flex-wrap:wrap}
.msr__title{font-weight:600}
.msr__n{color:var(--ts);font-variant-numeric:tabular-nums}
.msr__keys{color:var(--ts);font-size:12px}
.msr__hd .el-button{margin-left:auto}
.msr__body{margin-top:6px}
.msr__hint{font-size:11px;color:var(--ts);line-height:1.5;margin-bottom:4px}
.msr__warn{font-size:11px;color:var(--wci,#9F5D00);line-height:1.5;margin-bottom:4px}
.msr-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--ts);
  padding:6px 8px;border-radius:var(--rs,6px);background:var(--cb,#F2F2F7);margin-bottom:4px}
.msr-row--cur{background:rgba(0,105,220,.10);box-shadow:inset 3px 0 0 var(--pci,#0069DC)}
.msr-row__rank{min-width:26px;font-weight:700;color:var(--tc);font-variant-numeric:tabular-nums}
.msr-row__ahead{white-space:nowrap}
.msr-row__cust{color:var(--tc);font-weight:600}
.msr-row__no{font-variant-numeric:tabular-nums}
.msr-row__time{font-variant-numeric:tabular-nums}
.msr-row__qty{margin-left:auto;white-space:nowrap}
.msr-row__cur{color:var(--pci,#0069DC);font-weight:600;white-space:nowrap}
.msr-row__x{display:inline-flex;align-items:center;min-width:34px;min-height:34px;justify-content:center;cursor:pointer}
.msr-row__items{flex:1 1 100%;padding:2px 0 2px 34px}
.msr-line{display:flex;gap:8px;padding:3px 0;border-bottom:1px dashed var(--bd);font-size:12px;color:var(--tc)}
.msr-line:last-child{border-bottom:none}
.msr-line__name{flex:1;min-width:0}
.msr-line__spec{color:var(--ts)}
.msr-line__qty{min-width:52px;text-align:right;font-variant-numeric:tabular-nums}
/* #389（2026-10-07）：「今日已发货」折叠条 —— 现在只有一个组件（components/today-shipped.js）
   渲染它，样式也只有这一份。取代原先的 .sp-today（配货页）与 .mst（合并弹层）两份同族拷贝。
   颜色一律走主站令牌（§10）；折叠条与行本身可点 → 44px 命中区（§76/§42.3）。 */
.tsh{margin-top:12px;border-top:1px solid var(--bd);padding-top:8px}
.tsh__hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;cursor:pointer;min-height:44px;
  padding:0 12px;margin:0 -12px;font-size:13px;color:var(--tc)}
.tsh__label{font-weight:600}
/* 客户名不许用省略号藏（§354「手机上宁可换行也不许藏」）：360×780 实测这格被截 8px ——
   卡住的根因是那种下划线连起来的长标识符（P546_1015021515_客…）本身没有断行点，
   所以除了撤掉 nowrap+ellipsis，还要 overflow-wrap:anywhere 才真能折下来。
   外框 .tsh__hd 本来就是 flex-wrap:wrap，多出一行不会挤掉右边的件数与「刷新」。 */
.tsh__cust{color:var(--ts);min-width:0;white-space:normal;overflow-wrap:anywhere}
.tsh__n{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:17px;
  padding:0 5px;border-radius:9px;background:var(--cb);color:var(--ts);font-size:11px;font-weight:600}
.tsh__qty{color:var(--ts);font-size:12px;font-variant-numeric:tabular-nums}
.tsh__act{margin-left:auto;color:var(--pci);font-size:12px;flex:none;padding:6px;min-height:24px}
.tsh__body{max-height:240px;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:8px}
.tsh__tip,.tsh__none{padding:10px 4px;font-size:12px;color:var(--ts);text-align:center}
/* 0 单的口径写在折叠条上：不点开也看得见 —— 「0」与「没这个功能」在用户侧是同一件事（#389） */
.tsh__zero{color:var(--ts);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tsh__err{padding:8px 4px;font-size:12px;color:var(--dc);display:flex;align-items:center;gap:6px}
.tsh__row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;
  border-top:1px dashed var(--bd);font-size:12px;color:var(--ts)}
.tsh__row:active{background:var(--cb)}
/* 本单自己的发货行标主色 —— 一眼分清「这行是不是我正在配的单」 */
.tsh__row--own{background:rgba(0,105,220,.06);box-shadow:inset 3px 0 0 var(--pci,#0069DC)}
.tsh__row--own .tsh__no{color:var(--pci)}
.tsh__rc{flex:1 1 100%;min-width:0;color:var(--ts);font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tsh__no{color:var(--tc);font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tsh__time{flex:none;font-variant-numeric:tabular-nums}
.tsh__qty2{flex:none;min-width:56px;text-align:right;color:var(--tc);font-variant-numeric:tabular-nums}
.tsh__amt{flex:none;min-width:78px;text-align:right;font-variant-numeric:tabular-nums}
.tsh__cur{flex:none;color:var(--pci,#0069DC);font-weight:600;white-space:nowrap}
/* 「明细」入口不带 min-width：窄屏靠压缩前面的单号（__no 已有 ellipsis）而不是溢出 */
.tsh__more{flex:none;display:inline-flex;align-items:center;gap:1px;color:var(--pci);font-size:12px;padding-left:2px}
@media(max-width:767px){.msr-row__qty{margin-left:0;flex:1 1 100%}.msr-row__x{min-width:44px;min-height:44px}}
.ms-item{display:flex;align-items:center;gap:8px;padding:4px 0 4px 22px;font-size:12px;color:var(--ts)}
.ms-item__name{color:var(--tc)}
.ms-item__style{color:var(--ts);font-weight:400}
.ms-item__spec{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* #188：合并发货弹窗每行数量改成可手改（部分发货）。el-input-number 在 flex 行里
   不给宽度会被挤没，所以宽度写死；上限直接标在旁边，不用悬停才知道最多发多少。 */
.ms-item__num{flex:none;display:inline-flex;align-items:center;gap:6px}
/* #308（2026-10-03）：宽度是给三段式（− 数字 +）重算的 —— 两侧按钮轨道各 30px（stepper.css），
   原来 118/98px 是按"右侧小箭头"那种窄控件定的，换成三段式后数字区只剩 38~58px，
   四位数量（如 2050）会被 overflow 切掉；这里给数字区留 ≥58px（132/118）。 */
.ms-item__num .el-input-number{width:132px}
.ms-item__max{font-style:normal;color:var(--ts);flex:none;min-width:46px;text-align:right}
@media (max-width:640px){.ms-item__num .el-input-number{width:118px}.ms-item__max{min-width:0}}
.ms-item__amt{flex:none;min-width:72px;text-align:right;color:var(--tc)}

/* 2026-09-29（#215）：配送管理「未同步记录」入口 + 只读台账。
   入口是一条琥珀色细条（不是红——它不是错误，是"有几条没算进来"的中性提示），
   台账是一张紧凑表格。窄屏下弹窗改按视口宽，表格左右可滑，避免溢出（AGENTS §42 移动端优先）。 */
/* #218：预建待确认（未付款配货单）—— 橙色系与"地址已改"的红色区分开，暗色同特异度单独补（§34/§38） */
.dlv-tag--prebuild{color:#B25E00;background:rgba(255,152,0,.16);border:1px solid rgba(255,152,0,.42)}
.dlv-prebuild-tip{color:#B25E00;font-weight:600}
html[data-theme='dark'] .dlv-tag--prebuild{color:#FFC46B;background:rgba(255,152,0,.14)}
html[data-theme='dark'] .dlv-prebuild-tip{color:#FFC46B}
.dlv-unsync{display:flex;align-items:center;gap:8px;margin:0 12px 8px;padding:8px 10px;min-height:44px;border:1px solid var(--br);border-left:3px solid var(--wa);background:var(--cd);border-radius:8px;font-size:13px;cursor:pointer;transition:background .15s ease,transform .1s ease}
.dlv-unsync:hover{background:var(--ch)}
.dlv-unsync:active{transform:scale(.995)}
.dlv-unsync__t{flex:1;min-width:0;color:var(--tc);line-height:1.4;pointer-events:none}
/* 整行才是那个 44px 的可点区：图标和文字不许各自变成窄触点（§76；门禁按外壳去重，数的是有几类点不准） */
.dlv-unsync>.el-icon,.dlv-unsync__go{pointer-events:none}
.dlv-unsync__go{flex:none;color:var(--ac);font-weight:600}
.dlv-unsync__tip{font-size:12px;color:var(--ts);line-height:1.7;margin-bottom:10px}
.dlv-unsync__load{text-align:center;padding:24px;color:var(--ts);font-size:13px}
.dlv-unsync__sum{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--ts);margin-bottom:8px}
.dlv-unsync__sum b{color:var(--tc);font-weight:700}
.dlv-unsync__tb{border:1px solid var(--br);border-radius:8px;overflow:auto;max-height:52vh}
.dlv-unsync__tb table{width:100%;min-width:660px;border-collapse:collapse;font-size:13px}
.dlv-unsync__tb th{position:sticky;top:0;background:var(--cb);color:var(--ts);font-weight:600;text-align:left;padding:8px;border-bottom:1px solid var(--br);white-space:nowrap}
.dlv-unsync__tb td{padding:8px;border-bottom:1px solid var(--bd);color:var(--tc);vertical-align:middle}
.dlv-unsync__tb tr:last-child td{border-bottom:0}
.dlv-unsync__empty{text-align:center;color:var(--ts);padding:18px}
.dlv-unsync__pg{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:10px;font-size:13px;color:var(--ts)}
@media (max-width:640px){
  .dlv-unsync{margin:0 8px 8px;padding:10px}
  .dlv-unsync-dlg{width:94vw!important}
  .dlv-unsync__tb{max-height:46vh}
}
