:root{
  --bg:#f4f6fa; --card:#ffffff; --line:#e6e9f0; --ink:#1c2330; --muted:#7a869a;
  --brand:#1b4fd8; --brand-2:#0f3aa8; --brand-soft:#eef3ff;
  --green:#18a05a; --green-soft:#e6f7ee;
  --red:#e23b3b; --red-soft:#fdecec;
  --amber:#e08a00; --amber-soft:#fff4e0;
  --purple:#7a3cf0; --purple-soft:#f1eaff;
  --shadow:0 1px 3px rgba(20,30,60,.06),0 8px 24px rgba(20,30,60,.06);
  --radius:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.5;
}
#app{min-height:100%;display:flex;flex-direction:column}

/* ---------- 顶栏 ---------- */
.topbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 20px;background:linear-gradient(120deg,#10307a,#1b4fd8);color:#fff;
  position:sticky;top:0;z-index:30;
}
.brand{display:flex;align-items:center;gap:12px}
.logo{
  width:42px;height:42px;border-radius:12px;background:#fff;color:var(--brand-2);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;
  box-shadow:0 4px 12px rgba(0,0,0,.2);
}
.brand-text h1{font-size:16px;font-weight:700;letter-spacing:.3px}
.brand-text .sub{font-size:11px;opacity:.82}
.period-tag{
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);
  padding:6px 12px;border-radius:999px;font-size:12px;white-space:nowrap;
}

/* ---------- 导航 ---------- */
.nav{
  display:flex;gap:6px;padding:10px 20px;background:var(--card);
  border-bottom:1px solid var(--line);position:sticky;top:70px;z-index:20;
}
.nav-item{
  flex:1;border:1px solid var(--line);background:#fff;color:var(--muted);
  padding:10px 14px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;
  transition:.15s;
}
.nav-item:hover{border-color:var(--brand);color:var(--brand)}
.nav-item.active{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 6px 16px rgba(27,79,216,.28)}

/* ---------- 内容 ---------- */
.content{padding:20px;flex:1;width:100%;max-width:1240px;margin:0 auto;min-width:0}
/* 宽表格（如库存明细）在 .table-wrap 内部横向滚动，而非撑破整条 flex 链 */
.table-wrap{min-width:0;position:relative}
/* 表格可横滑提示（.has-hscroll 由 markScrollableTables 按实际溢出标记）：
   末列不再"无声消失"，表格右上角显示滑动提示徽标（滚动容器内绝对定位，不随内容移动） */
.table-wrap.has-hscroll::after{
  content:"⟷ 左右滑动";
  position:absolute;top:0;right:10px;z-index:5;
  background:rgba(27,79,216,.9);color:#fff;
  font-size:11px;font-weight:600;line-height:1;
  padding:5px 9px;border-radius:999px;
  box-shadow:0 3px 10px rgba(27,79,216,.35);
  pointer-events:none;
}
.dash-main .grid-kpi{min-width:0}
.section-title{font-size:16px;font-weight:700;margin:22px 0 12px;display:flex;align-items:center;gap:8px}
.section-title .bar{width:4px;height:16px;border-radius:2px;background:var(--brand)}
.section-title .muted{font-size:12px;color:var(--muted);font-weight:400}
.scope-badge{font-size:12px;font-weight:500;color:var(--brand);background:var(--brand-soft);padding:2px 10px;border-radius:10px;line-height:1.5;white-space:nowrap}

/* ---------- 卡片网格 ---------- */
.grid{display:grid;gap:14px}
.grid-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
.grid-2{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.grid-kpi{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card .pad{padding:16px}

/* v46 数据范围横幅：登录后各页面顶部显示"当前可见数据归属"，让用户确认范围 */
.scope-banner{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 14px;border-radius:var(--radius);margin-bottom:14px;font-size:13px;
  border:1px solid;box-shadow:var(--shadow)}
.scope-banner .scope-ico{font-size:18px;line-height:1}
.scope-banner.all{background:var(--brand-soft);border-color:#cfe0ff;color:#14337a}
.scope-banner.mystore{background:var(--green-soft);border-color:#bfe6d0;color:#0f6b3f}
.scope-banner.sales{background:var(--amber-soft);border-color:#ffdca3;color:#8a5400}
.scope-banner.sales-none{background:var(--red-soft);border-color:#f6c6c6;color:#8a2323}
.scope-banner .scope-hint{margin-top:4px}
.scope-banner details.scope-detail{margin-left:auto}
.scope-banner .scope-detail summary{cursor:pointer;font-size:12px;font-weight:600;
  list-style:none;display:inline-block;padding:3px 10px;border-radius:999px;
  background:rgba(255,255,255,.55);border:1px solid currentColor;user-select:none}
.scope-banner .scope-detail summary::-webkit-details-marker{display:none}
.scope-banner .scope-detail[open] summary::after{content:" ▴"}
.scope-banner .scope-detail:not([open]) summary::after{content:" ▾"}
.scope-banner .scope-storelist{margin-top:8px;max-width:520px;line-height:1.9;
  background:rgba(255,255,255,.6);border-radius:10px;padding:8px 12px;font-size:12.5px}

/* KPI */
.kpi{padding:16px}
.kpi .k-label{font-size:12px;color:var(--muted)}
.kpi .k-value{font-size:24px;font-weight:800;margin-top:6px}
.kpi .k-sub{font-size:11px;color:var(--muted);margin-top:4px}
.kpi.accent-blue .k-value{color:var(--brand)}
.kpi.accent-green .k-value{color:var(--green)}
.kpi.accent-amber .k-value{color:var(--amber)}
.kpi.accent-purple .k-value{color:var(--purple)}
.kpi.accent-red .k-value{color:var(--red)}
.kpi.accent-cyan .k-value{color:#0a9bb5}
.kpi-clickable{cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}
.kpi-clickable:hover{transform:translateY(-2px);border-color:var(--brand);box-shadow:0 6px 16px rgba(27,79,216,.12)}
.kpi-clickable.kpi-on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft),0 6px 16px rgba(27,79,216,.18)}
.kpi-clickable.kpi-on .k-label::after{content:" · 已选";font-weight:600;color:var(--brand)}
.minus{color:var(--red)}

/* 通用行/标签 */
.row{display:flex;align-items:center;gap:8px}
.row.between{justify-content:space-between}
.muted{color:var(--muted)}
.small{font-size:12px}
.tag{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600}
.tag.green{background:var(--green-soft);color:var(--green)}
.tag.red{background:var(--red-soft);color:var(--red)}
.tag.amber{background:var(--amber-soft);color:var(--amber)}
.tag.blue{background:var(--brand-soft);color:var(--brand)}
.tag.gray{background:rgba(120,130,150,.12);color:var(--muted)}
.tag.gray{background:#eef1f6;color:var(--muted)}
.tag.purple{background:var(--purple-soft);color:var(--purple)}

/* 进度条 */
.progress{height:8px;background:#eef1f6;border-radius:999px;overflow:hidden;flex:1}
.progress > i{display:block;height:100%;border-radius:999px;background:var(--brand)}
.progress > i.good{background:var(--green)}
.progress > i.warn{background:var(--amber)}
.progress > i.bad{background:var(--red)}
.rate{font-weight:700;font-size:13px;min-width:52px;text-align:right}
.rate.good{color:var(--green)} .rate.warn{color:var(--amber)} .rate.bad{color:var(--red)}
/* v99.6 车型预定管理（财务/管理员）：筛选栏 + 列宽/对齐 + 核心信息突出 + 明细弹窗 */
.pre-filter-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 12px}
.pre-filter-bar .pf-group{display:flex;align-items:center;gap:6px}
.pre-filter-bar .pf-label{font-size:12px;color:var(--muted);font-weight:600;white-space:nowrap}
.pre-filter-bar .pf-select{width:120px;padding:6px 10px;font-size:12.5px}
.pre-filter-bar .pf-kw{width:220px;padding:6px 10px;font-size:12.5px}
.pre-filter-bar .pf-count{font-size:12px;color:var(--muted);margin-left:auto}
.pre-order-tbl{font-size:12.5px;table-layout:fixed;width:100%;min-width:1052px}
.pre-order-tbl th,.pre-order-tbl td{padding:10px 8px}
/* v124：列宽固定——1240 内容宽下 9 列完整显示（此前自然宽 972 随窗口缩放被裁右侧） */
.pre-order-tbl col.c-no{width:158px}
.pre-order-tbl col.c-store{width:150px}
.pre-order-tbl col.c-amt{width:104px}
.pre-order-tbl col.c-reb{width:64px}
.pre-order-tbl col.c-pay{width:64px}
.pre-order-tbl col.c-prog{width:126px}
.pre-order-tbl col.c-audit{width:96px}
.pre-order-tbl col.c-status{width:92px}
.pre-order-tbl col.c-time{width:140px}
.pre-order-tbl col.c-op{width:58px}
.pre-order-tbl .po-no{font-weight:600;font-family:ui-monospace,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pre-order-tbl .po-store{font-weight:500;white-space:normal;word-break:break-all;line-height:1.4}
.pre-order-tbl .po-amount{font-weight:700;color:var(--brand);white-space:nowrap}
.pre-order-tbl .po-amount .po-currency{font-size:10px;font-weight:500;color:var(--muted);margin-left:2px}
.pre-order-tbl .po-prog{white-space:normal;overflow:hidden}
.pre-order-tbl .po-prog-txt{font-size:11px;color:var(--muted);margin-right:6px;white-space:nowrap}
.po-detail .pd-kv-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.po-detail .pd-kv{background:#f7f9fd;border:1px solid var(--line);border-radius:8px;padding:8px 12px;min-width:120px;flex:1}
.po-detail .pd-kv .k{display:block;font-size:11px;color:var(--muted);margin-bottom:3px}
.po-detail .pd-kv b{font-size:14px}
.po-detail .po-detail-amount b{color:var(--brand);font-size:16px}
.po-detail .po-detail-amount .po-currency{font-size:10px;color:var(--muted);margin-left:4px;font-weight:500}
.po-detail .po-detail-prog{min-width:180px}
.po-detail .po-detail-prog .progress{max-width:140px;margin-top:6px}
/* v99.7 满足后自动生成的关联订货单徽标 */
.pre-order-tbl .po-genorder{margin-top:4px}
.pre-order-tbl .po-genorder .po-gen-badge{font-size:11px;padding:1px 8px}
/* v125 预单财务审核徽标（主表「审核」列 / 明细行） */
.pre-order-tbl .po-audit{white-space:nowrap}
.po-audit-tag{display:inline-block;font-size:11px;padding:1px 8px;border-radius:10px;line-height:1.6;cursor:default}
.po-audit-pending{background:#fff7e6;color:#ad6800;border:1px solid #ffd591}
.po-audit-partial{background:#e6f4ff;color:#0958d9;border:1px solid #91caff}
.po-audit-approved{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f}
.po-audit-rejected{background:#fff1f0;color:#cf1322;border:1px solid #ffa39e}
/* v125 明细行审核操作区（财务/管理员在明细弹窗内逐行通过/驳回） */
.po-audit-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.po-audit-actions .btn{min-width:52px;padding:3px 10px;font-size:12px}
.po-rej-reason{font-size:11px;color:#cf1322;margin-top:3px;max-width:170px;word-break:break-all;line-height:1.4}
.po-detail .pd-audit-note{background:#fffbe6;border:1px solid #ffe58f;border-radius:8px;padding:8px 12px;margin:10px 0 6px;font-size:12.5px;color:#874d00}
/* 表格 */
/* v91.1：.table-wrap 溢出时隐藏原生横滚条（细/灰/难拖），改用 .tbl-hs 自定义可拖滑条（见下方样式） */
.table-wrap{overflow-x:auto;border-radius:var(--radius);scrollbar-width:none}
.table-wrap::-webkit-scrollbar{display:none;height:0}
/* v91.1 自定义横滑条：thumb 宽度=可视/总宽（min 26px 可拖），位置映射 scrollLeft，拖拽/点击/键盘可达，实时百分比反馈 */
.tbl-hs{position:sticky;bottom:8px;height:16px;margin-top:3px;z-index:30;cursor:pointer;touch-action:none}
/* v91.3：滑条吸附视口底部（长表不再把滑条推出可视区）
   根因：.tbl-hs 是 .table-wrap 的 afterend 兄弟节点，上传上架单等长表（34 行）
   把表格撑高 ~2100px，滑条被推到页面底部（y≈2855，视口 900px），用户看不到也点不到，
   误以为「滑条不响应」。sticky 使其吸附在视口下边缘，始终可拖；半透明背景避免遮挡表格行时内容穿透。 */
.tbl-hs::before{content:"";position:absolute;left:0;right:0;top:-6px;bottom:-6px;background:rgba(255,255,255,.94);border-radius:8px;pointer-events:none}
.tbl-hs-track{position:relative;height:8px;margin:4px 8px 0;border-radius:999px;background:#eef1f6;transition:background .15s}
.tbl-hs:hover .tbl-hs-track{background:#e3e8f2}
.tbl-hs-thumb{position:absolute;top:0;left:0;height:8px;min-width:26px;border-radius:999px;background:#c7d0e4;cursor:grab;transition:background .15s,box-shadow .15s;outline:none}
.tbl-hs-thumb:hover{background:#94a3c4}
.tbl-hs-thumb:focus-visible{box-shadow:0 0 0 3px rgba(27,79,216,.28);background:#94a3c4}
.tbl-hs-thumb:active,.tbl-hs-thumb.dragging{cursor:grabbing;background:var(--brand);box-shadow:0 2px 8px rgba(27,79,216,.4)}
.tbl-hs-val{position:absolute;top:-17px;left:50%;transform:translateX(-50%);background:var(--brand);color:#fff;font-size:10px;line-height:1;padding:2px 6px;border-radius:4px;opacity:0;transition:opacity .15s;pointer-events:none;white-space:nowrap}
.tbl-hs-thumb:hover .tbl-hs-val,.tbl-hs-thumb.dragging .tbl-hs-val{opacity:1}
table.tbl{width:100%;border-collapse:collapse;background:var(--card);font-size:13px}
.tbl th,.tbl td{padding:11px 12px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl th{background:#f7f9fd;color:var(--muted);font-weight:600;font-size:12px;position:sticky;top:0}
.tbl tr:last-child td{border-bottom:none}
.tbl tr:hover td{background:#fafbff}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums}
.tbl th.num{text-align:right}
/* 按型号分组：型号首行顶部留白，型号之间清晰分隔不混排 */
.tbl tr.mgroup-first td{border-top:2px solid var(--line);padding-top:12px}
.tbl .mgroup-label{background:#f7f9fd;font-weight:700;color:var(--ink)}
.tbl .mgroup-label .m-sub{font-weight:400;color:var(--muted);font-size:11px;margin-left:6px}
.tbl .mgroup-total td{background:#fbfcff;font-weight:700}
/* 车型明细表：表头与内容列居中（型号列左对齐更醒目，数量列数字右对齐） */
/* 紧凑表（列多易裁切的表，如人员管理）：缩 padding/字号；.wrap 列允许换行收窄 */
.tbl-compact th,.tbl-compact td{padding:8px 9px;font-size:12.5px}
.tbl-compact td.wrap{white-space:normal;min-width:120px;max-width:200px;line-height:1.45}
.tbl-c th,.tbl-c td{text-align:center}
.tbl-c tr.mgroup-first td[rowspan]{text-align:center;vertical-align:middle}
.tbl-c tr.mgroup-first td[colspan]{text-align:left}
.tbl-c .mgroup-label .m-sub{margin-left:0}
.tbl-c td.num,.tbl-c th.num{text-align:right}
.tbl-c .mgroup-total td{text-align:center}
/* v82 销售员提货任务量矩阵：行=销售员 列=1-12月+年度合计 */
.spdel-matrix th{text-align:center;white-space:nowrap}
.spdel-matrix td.num{min-width:58px}
.spdel-matrix .spdel-cell{width:54px;padding:4px 5px;text-align:center}
.spdel-matrix .spdel-annual{font-weight:700}
.spdel-matrix tr:hover td{background:#f6f8ff}
.tbl-c .mgroup-total td.num{text-align:right}
/* 多列宽表（如扫描入库流转记录 11 列）：允许文本列自动换行+压缩内边距，
   让整表在可用宽度内完整展示，避免靠横向滚动才能看到最右列（"操作"被截断）；
   数字列(.num)与标签/进度条等仍保持不换行 */
.tbl-fit th,.tbl-fit td{white-space:normal;overflow-wrap:anywhere;word-break:break-word;padding:9px 8px}
.tbl-fit th.num,.tbl-fit td.num{white-space:nowrap}
.tbl-fit .tag,.tbl-fit .progress,.tbl-fit .btn,.tbl-fit .rate{white-space:nowrap}
/* 历史订单窄栏表（右栏 30% 宽）：单号列折两行防撑爆、状态列徽章单行不截断，
   行距 1.5 字号 12px 内边距统一，视觉层次清晰 */
.hist-tbl{font-size:12px}
.hist-tbl th,.hist-tbl td{padding:8px 8px;line-height:1.5;vertical-align:middle}
/* 单号列：窄容器(门店右栏30%)下列宽不足时按 break-all 折行，宽容器则单行完整显示 */
.hist-tbl .hist-no{white-space:normal;word-break:break-all;overflow-wrap:anywhere}
/* 状态列：徽章强制单行，杜绝被挤成两行/截断 */
.hist-tbl .hist-st{white-space:nowrap}
.hist-tbl .hist-st .tag{white-space:nowrap}
/* 库存卡片门店名称标题：整体右移，固定缩进更稳定；max-width 预留右侧汇总标签空间防重叠 */
.inv-stname{padding-left:248px;max-width:calc(100% - 210px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:1100px){
  .inv-stname{padding-left:120px;max-width:calc(100% - 210px)}
}
@media (max-width:820px){
  .inv-stname{padding-left:0;max-width:100%}
}

/* 门店卡 */
.store-card{padding:16px;position:relative;transition:.15s}
.store-card:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(20,30,60,.12)}
.store-card .s-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
/* 字号流式：clamp(min, 比例, max) —— 小屏逼近 min、大屏逼近 max；层级 name>bal>rate>body>aux 恒定。
   默认按视口 vw（降级），下方 @supports 容器查询支持时改按卡宽 cqw（桌面多卡小卡保持紧凑、平板单列宽卡放大，更精准） */
.store-card .s-name{font-size:clamp(13px, 3.4vw, 16px);font-weight:700}
.store-card .s-code{font-size:clamp(10px, 2.7vw, 11.5px);color:var(--muted)}
.store-card .s-bal{display:flex;gap:16px;margin:12px 0}
.store-card .s-bal .b .l{font-size:clamp(10px, 2.7vw, 11.5px);color:var(--muted)}
.store-card .s-bal .b .v{font-size:clamp(15px, 4.6vw, 19px);font-weight:800}
.store-card .s-foot{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding-top:10px;margin-top:6px;gap:8px;flex-wrap:wrap}
/* 门店卡自适应：宽屏一行放得下就一行，窄屏(手机/窄卡)自动把"进度条+百分比"折到下一行，
   标签可折行、进度条有最小宽度，避免挤压、溢出或布局错乱。不依赖固定断点，按内容宽度自适应。 */
.store-card{min-width:0}
.store-card .s-head{gap:6px}
.store-card .s-head > div:first-child{min-width:0}
.store-card .s-name{overflow-wrap:anywhere;word-break:break-word}
.store-card .s-bal{flex-wrap:wrap;row-gap:6px}
.store-card .s-bal .b{flex:1 1 120px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.store-card .s-bal .b .v{overflow:hidden;text-overflow:ellipsis}
/* 指标行：标签在左(flex 可收缩/折行)，进度条+百分比在右；当一行放不下的整组换到下一行 */
.store-card .m-row{flex-wrap:wrap;row-gap:5px}
.store-card .m-row .m-label{flex:1 1 auto;min-width:110px;overflow-wrap:anywhere;word-break:break-word}
.store-card .m-row .m-val{flex:0 0 auto;min-width:150px;justify-content:flex-end}
.store-card .m-row .m-val .progress{flex:1 1 90px;min-width:70px;max-width:200px}
.store-card .m-row .m-val .rate{min-width:48px}
/* 正文(指标标签/店面库存等)与百分比：流式字号，层级 body(12-13) > aux(11) 恒定 */
.store-card .small{font-size:clamp(11px, 3vw, 13px)}
.store-card .m-row .m-val .rate{font-size:clamp(12px, 3.6vw, 15px)}
/* 容器查询：支持时字号改按"卡片宽度"缩放 —— 桌面多列(小卡)保持紧凑、平板/单列(宽卡)放大，
   比单纯视口缩放更贴合卡片实际大小；不支持的浏览器自动回落到上面的 vw 版本 */
.store-card{container-type:inline-size;container-name:storecard}
@container storecard (min-width:340px){
  .store-card .s-name{font-size:clamp(14px, 4.6cqw, 16px)}
  .store-card .s-code{font-size:clamp(11px, 3.1cqw, 11.5px)}
  .store-card .s-bal .b .l{font-size:clamp(11px, 3.1cqw, 11.5px)}
  .store-card .s-bal .b .v{font-size:clamp(16px, 6.4cqw, 19px)}
  .store-card .small{font-size:clamp(12px, 4.2cqw, 13px)}
  .store-card .m-row .m-val .rate{font-size:clamp(13px, 4.8cqw, 15px)}
}
/* 极窄屏：内边距略收，给内容多留宽度 */
@media (max-width:420px){
  .store-card{padding:14px}
}
/* 运营数据"门店运营健康度"：去掉卡片容器，按视口宽度平铺（无背景/圆角/阴影/内边距）。
   仅运营模块用 flat；财务模块仍走 .card .store-card，不受影响。 */
.grid-flat{display:grid;grid-template-columns:1fr}
/* 运营数据·多门店角色（管理员/销售）卡片网格：自适应列数、卡片等宽等高、风格统一 */
.op-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px;align-items:stretch}
.op-grid .op-card{display:flex;flex-direction:column;height:100%;min-width:0}
.op-grid .op-card .s-foot{margin-top:auto}
@media (max-width:900px){.op-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}}
@media (max-width:560px){.op-grid{grid-template-columns:1fr;gap:10px}}
.grid-flat > .store-card{
  background:none;border:none;border-radius:0;box-shadow:none;
  padding:0;margin:0;min-width:0;
}
/* 多门店平铺时，块之间用分隔线区分（第一块不加上边距/线） */
.grid-flat > .store-card + .store-card{
  border-top:1px solid var(--line);margin-top:18px;padding-top:16px;
}
/* 平铺块按视口宽铺满，行距略松便于阅读 */
.grid-flat > .store-card .m-row{padding:8px 0}
/* 平铺块无卡片容器，去掉 hover 浮起+阴影 */
.grid-flat > .store-card:hover{transform:none;box-shadow:none}

/* ---------- 商城：分类导航 + 货架式商品陈列（无卡片容器，密集网格） ---------- */
/* v_accsub_wrap_all（2026-10-22 用户要求）：分类条**桌面+手机一律换行全量显示，取消横滑**。
   历史：.mall-catnav 原为单行横滑（overflow-x:auto+滚动条隐藏），窄容器下尾部按钮被裁且用户
   看不到能滑（门店 #mallSubNav 曾因此加 flex-wrap:wrap 的局部修复）；现统一改 flex-wrap:wrap，
   一级 6 按钮/二级 13 按钮在任意宽度下都完整可见，.mall-cat 的 flex-shrink:0 保证按钮不被压扁。 */
.mall-catnav{
  display:flex;flex-wrap:wrap;gap:8px;padding:2px 2px 10px;
}
.mall-cat{
  flex-shrink:0;border:1px solid var(--line);background:#fff;color:var(--muted);
  padding:6px 16px;border-radius:999px;font-size:13px;font-weight:600;cursor:pointer;transition:.15s;
}
.mall-cat:hover{border-color:var(--brand);color:var(--brand)}
.mall-cat.on{background:var(--brand);border-color:var(--brand);color:#fff}
.mall-shelf{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(148px,1fr))}
.shelf-item{
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px;
  display:flex;flex-direction:column;min-width:0;transition:.15s;
}
.shelf-item:hover{border-color:var(--brand);box-shadow:0 6px 16px rgba(27,79,216,.10)}
.shelf-img{
  position:relative;border-radius:7px;overflow:hidden;background:#eef2f9;
  aspect-ratio:16/14;display:flex;align-items:center;justify-content:center;
}
.shelf-img img{width:100%;height:100%;object-fit:cover;display:block}
.shelf-cat-tag{
  position:absolute;left:0;top:0;background:rgba(16,48,122,.82);color:#fff;
  font-size:10px;font-weight:600;padding:2px 7px;border-radius:0 0 7px 0;
}
.shelf-name{
  font-size:13px;font-weight:600;margin:7px 1px 2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.shelf-color{
  font-size:11px;font-weight:600;color:var(--brand);background:var(--brand-soft);
  padding:1px 6px;border-radius:999px;margin-left:4px;white-space:nowrap;
}
.shelf-attr{
  font-size:11px;color:var(--muted);line-height:1.35;min-height:29px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  margin:0 1px;
}
.shelf-price-row{display:flex;align-items:baseline;gap:5px;margin:5px 1px 1px;flex-wrap:wrap}
.price-supply{font-size:15px;font-weight:700;color:var(--red)}
.price-off{font-size:11px;color:var(--muted);text-decoration:line-through}
.shelf-promo{
  font-size:10px;font-weight:700;color:var(--red);background:var(--red-soft);
  padding:1px 5px;border-radius:4px;white-space:nowrap;
}
.shelf-stock{font-size:11px;margin:0 1px 6px}
.shelf-foot{
  margin-top:auto;border-top:1px dashed var(--line);padding-top:7px;
  display:flex;align-items:center;justify-content:center;
}

/* 下单界面：左 70% / 右 30%，平铺（无卡片容器/阴影/边框），右列桌面 sticky */
.order-grid{display:flex;gap:16px;align-items:flex-start}
.order-left{flex:0 0 70%;max-width:70%;min-width:0}
.order-right{flex:1 1 0;min-width:0;position:sticky;top:86px}
@media (max-width:820px){
  .order-grid{flex-direction:column;gap:14px}
  .order-left{flex:none;width:100%;max-width:100%}
  .order-right{position:static;width:100%;flex:none}
  /* v_accsub_wrap_all：移动端分类条同样换行全量显示（用户要求取消横滑），无需额外覆盖 */
}

/* v120 移动端「商品采购」购物车：悬浮 🛒 角标按钮 + 底部抽屉（仅 ≤820px 显示，桌面 display:none）
   根因：≤820px .order-grid 纵向堆叠，「本次订单」被挤到整页最底部 → 悬浮入口 + 抽屉就近查看/下单。 */
.mall-cart-fab{display:none}   /* 桌面隐藏；移动端媒体查询覆盖为 flex（见下） */
/* 抽屉/遮罩隐藏态须 display:none 且 !important——否则 UA 的 [hidden]{display:none} 会被媒体查询
   .m-cart{display:flex} 的作者规则覆盖，「隐藏」的抽屉仍占位拦截点击（v120 实测坑）。 */
.m-cart[hidden],.m-cart-mask[hidden]{display:none !important}
@media (max-width:820px){
  /* 悬浮购物车按钮：一级导航(高约54px+safe-area)上方右侧，毛玻璃圆钮 + 件数角标 */
  .mall-cart-fab{
    display:flex;align-items:center;justify-content:center;
    position:fixed;right:16px;bottom:calc(66px + env(safe-area-inset-bottom));z-index:46;
    width:56px;height:56px;border-radius:18px;cursor:pointer;
    background:rgba(255,255,255,.82);
    -webkit-backdrop-filter:blur(12px) saturate(160%);backdrop-filter:blur(12px) saturate(160%);
    border:1px solid var(--line);box-shadow:0 8px 24px rgba(20,30,60,.18);
    font-size:24px;line-height:1;user-select:none;
    transition:transform .15s ease, box-shadow .15s ease;
  }
  .mall-cart-fab:active{transform:scale(.94)}
  .mall-cart-fab .mc-ico{pointer-events:none}
  .mall-cart-fab .mc-badge{
    position:absolute;top:-6px;right:-6px;min-width:22px;height:22px;padding:0 6px;
    border-radius:999px;background:var(--red,#e23b3b);color:#fff;font-size:12px;font-weight:800;
    display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(226,59,59,.4);
    transition:transform .15s ease;
  }
  .mall-cart-fab.has-items .mc-badge{transform:scale(1.12)}
  /* 遮罩 */
  .m-cart-mask{position:fixed;inset:0;background:rgba(16,24,44,.42);z-index:75;animation:fade .18s ease}
  /* 底部抽屉 */
  .m-cart{
    position:fixed;left:0;right:0;bottom:0;z-index:76;background:var(--card,#fff);
    border-radius:20px 20px 0 0;box-shadow:0 -12px 40px rgba(20,30,60,.22);
    max-height:78vh;display:flex;flex-direction:column;
    padding-bottom:env(safe-area-inset-bottom);
    animation:slideUp .24s cubic-bezier(.22,.8,.32,1);
  }
  .m-cart-head{
    display:flex;align-items:center;justify-content:space-between;
    padding:14px 16px 10px;font-size:15px;font-weight:700;color:var(--ink,#1a2233);
    border-bottom:1px solid var(--line);
  }
  .m-cart-head #mcClose{
    width:34px;height:34px;border-radius:10px;cursor:pointer;border:1px solid var(--line);
    background:#fff;color:var(--muted);font-size:16px;display:flex;align-items:center;justify-content:center;
  }
  .m-cart-head #mcClose:active{background:#f2f5fc;color:var(--ink)}
  .m-cart-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 16px;max-height:52vh}
  .m-cart-body .cart{padding:8px 0}
  .m-cart-body .cart-row{padding:11px 0}
  .m-cart-body .cart-total{padding:12px 0 4px}
  .m-cart-body .mall-cart-fab{display:none}   /* 防御：抽屉内不出现悬浮钮 */
  .m-cart-foot{
    border-top:1px solid var(--line);padding:12px 16px;
    background:rgba(255,255,255,.94);
    -webkit-backdrop-filter:blur(12px) saturate(160%);backdrop-filter:blur(12px) saturate(160%);
  }
  .m-cart-footline{display:flex;align-items:center;justify-content:space-between;font-size:15px;font-weight:700;margin-bottom:8px}
  .m-cart-footline b{color:var(--brand,#1b4fd8);font-size:20px;font-weight:800}
  .m-cart-foot #mcSubmitBtn{width:100%}
  .m-cart-foot #mcSubmitBtn:disabled{opacity:.5}
}

/* 收货信息：自动调取门店资料（只读行） */
.recv-auto{border:1px solid var(--line);border-radius:10px;padding:2px 12px;background:#fff}
.recv-row{
  display:flex;gap:12px;padding:8px 0;font-size:13px;align-items:baseline;
  border-bottom:1px solid var(--line);
}
.recv-row:last-child{border-bottom:none}
.recv-row .lbl{width:64px;flex-shrink:0;color:var(--muted);font-size:12px}

/* ---------- 商品列表式展示（网页列表，横向行） ---------- */
.mall-list{display:flex;flex-direction:column;gap:8px}
.mall-list-item{
  display:flex;align-items:center;gap:12px;background:#fff;
  border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-width:0;transition:.15s;
}
.mall-list-item:hover{border-color:var(--brand);box-shadow:0 4px 12px rgba(27,79,216,.08)}
.ll-img{
  flex-shrink:0;width:64px;height:64px;border-radius:8px;overflow:hidden;background:#eef2f9;
  display:flex;align-items:center;justify-content:center;
}
.ll-img img{width:100%;height:100%;object-fit:cover;display:block}
.ll-main{flex:1;min-width:0}
.ll-name{font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ll-cat{font-size:11px;font-weight:500;color:var(--muted);background:var(--bg);border:1px solid var(--line);padding:1px 7px;border-radius:999px}
.ll-attr{
  margin-top:3px;font-size:12px;line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* 颜色/配置选择：同一商品多颜色时行内胶囊切换，选中态明显，切换同步刷新价格/库存 */
.ll-variants{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.variant-chip{
  border:1px solid var(--line);background:#fff;color:var(--muted);
  padding:3px 11px;border-radius:999px;font-size:12px;font-weight:600;cursor:pointer;transition:.15s;
}
.variant-chip:hover{border-color:var(--brand);color:var(--brand)}
.variant-chip.on{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 3px 8px rgba(27,79,216,.25)}
.variant-chip.soldout{opacity:.5;text-decoration:line-through;cursor:not-allowed}
.variant-chip.soldout:hover{border-color:var(--line);color:var(--muted)}
.v-spec{font-size:11px;opacity:.75;margin-left:2px}
/* v62 商城管理：商品货架（一个商品一页）+ SKU 列表（颜色×规格 各自价/库存） */
.shelf-sku-list{display:flex;flex-wrap:wrap;gap:8px}
.shelf-sku-list .variant-chip{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;background:var(--bg2)}
.shelf-sku-list .variant-chip .v-tag{font-weight:600}
.shelf-sku-list .variant-chip .v-price{font-size:13px;color:var(--brand);font-weight:600}
.shelf-sku-list .variant-chip .v-stk{font-size:11px;color:var(--muted)}
.shelf-sku-list .variant-chip.soldout .v-stk{color:var(--red)}
/* SKU 编辑行（管理员/财务） */
.sku-row{display:grid;grid-template-columns:1fr 1.3fr 0.9fr 0.9fr 0.7fr 34px;gap:8px;align-items:center;margin-bottom:8px}
.sku-row .sku-del{justify-self:center}
@media (max-width:640px){.sku-row{grid-template-columns:1fr 1fr;}.sku-head{display:none}}
.ll-price{flex-shrink:0;text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.ll-price .price-supply{font-size:15px}
.ll-price .price-off,.ll-price .shelf-promo{display:inline-block}
.ll-stock{font-size:11px}
.ll-action{flex-shrink:0;display:flex;align-items:center;justify-content:flex-end;min-width:96px}
@media (max-width:640px){
  .mall-list-item{flex-wrap:wrap}
  .ll-main{flex-basis:100%;order:-1}
  .ll-price{align-items:flex-start;text-align:left}
  .ll-action{min-width:auto;margin-left:auto}
}
/* 货架项「点商品进详情」入口 */
.ll-img{cursor:pointer;position:relative}
.ll-img .ll-view{
  position:absolute;left:0;right:0;bottom:0;padding:2px 0;text-align:center;
  font-size:11px;font-weight:600;color:#fff;background:rgba(20,30,60,.62);
}
.ll-img:hover .ll-view{background:var(--brand)}
.ll-name .ll-link{color:var(--ink);cursor:pointer;text-decoration:none}
.ll-name .ll-link:hover{color:var(--brand)}
/* v99.3：货架行尾「纯浏览」提示（下单/预定统一在商品详情页发起） */
.ll-browse-hint{font-size:12px;color:var(--muted);white-space:nowrap;padding-right:2px}
/* v99.4：货架整行可点进详情（文字/图片/空白区均可跳转） */
.mall-list-item{cursor:pointer}
/* v99.3：主界面下单引导（替代原「提交订单」按钮） */
.mall-order-hint{
  margin:4px 0 10px;padding:9px 12px;font-size:13px;color:#1f2d3d;background:#eef3ff;
  border:1px dashed var(--brand);border-radius:8px;text-align:center;
}

/* ---------- v88 商品详情页（门店订货·点商品进入） ---------- */
.pd-wrap{min-width:0}
.pd-back{margin-bottom:10px}
.pd-card{
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow:hidden;
}
.pd-body{display:flex;gap:24px;padding:20px}
.pd-left{flex:0 0 40%;min-width:0;display:flex;flex-direction:column;align-items:center}
.pd-mainimg{
  width:100%;max-width:320px;aspect-ratio:1/1;border-radius:12px;overflow:hidden;
  background:#eef2f9;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;
}
.pd-mainimg img{width:100%;height:100%;object-fit:cover;display:block}
.pd-thumbs{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;justify-content:center}
.pd-thumb{
  width:52px;height:52px;border-radius:8px;overflow:hidden;border:2px solid transparent;
  cursor:pointer;background:#eef2f9;display:flex;align-items:center;justify-content:center;transition:.15s;
}
.pd-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.pd-thumb.on{border-color:var(--red);box-shadow:0 2px 8px rgba(226,59,59,.25)}
.pd-name{margin-top:14px;font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
.pd-price{margin-top:10px;text-align:center;line-height:1.9}
.pd-buy{font-size:22px;font-weight:800;color:var(--red)}
.pd-buy em{font-size:12px;font-weight:500;color:var(--muted);font-style:normal;margin-left:4px}
.pd-price .pd-m{font-size:12px;color:var(--muted);margin:0 8px}
/* 左下：规格参数表 */
.pd-specs{
  margin-top:14px;width:100%;max-width:340px;display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;
  border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:#fafbfe;
}
.pd-spec{min-width:0}
.pd-spec .v{font-size:12px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pd-spec .l{font-size:11px;color:var(--muted);margin-top:1px}
.pd-desc{
  margin-top:12px;width:100%;max-width:340px;font-size:12px;color:var(--muted);
  line-height:1.7;background:#fafbfe;border:1px dashed var(--line);border-radius:10px;padding:10px 12px;
}
/* 右：详情字段 */
.pd-right{flex:1;min-width:0;display:flex;flex-direction:column;gap:14px}
.pd-field{min-width:0}
.pd-field>label{display:block;font-size:13px;font-weight:700;color:var(--ink);margin-bottom:6px}
/* v88.1 库存分档状态行（不再显示具体数量） */
.pd-stockline{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pd-stock-tag{padding:6px 18px;font-size:14px;font-weight:700}
/* 颜色外观（每个 SKU 一行：颜色/规格 + stepper；库存按车型统一分档） */
.pd-colors{display:flex;flex-direction:column;gap:8px}
.pd-color{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  border:1px solid var(--line);border-radius:9px;padding:8px 12px;cursor:pointer;transition:.15s;
}
.pd-color:hover{border-color:var(--brand)}
.pd-color.on{border-color:var(--brand);background:var(--brand-soft)}
.pd-color .c-name{font-size:14px;font-weight:700}
.pd-color .c-spec{font-size:12px;font-weight:500;color:var(--muted)}
.pd-color .c-step{margin-left:auto}
/* 配件包 */
.pd-accs{display:flex;flex-direction:column;gap:8px}
.pd-acc{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  border:1px solid var(--line);border-radius:9px;padding:8px 12px;
}
.pd-acc-dot{color:var(--muted);font-size:14px}
.pd-acc-info{flex:1;min-width:120px}
.pd-acc-info .n{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.pd-acc-info .m{font-size:11px;color:var(--red);margin-top:1px}
.pd-acc-price{font-size:13px;color:var(--red);font-weight:600;white-space:nowrap}
/* v88.1 配件包组合数量标记（如 ×30） */
.pd-acc-qty{font-size:11px;color:var(--brand);font-weight:700;margin-left:5px}
/* v88.1 配件包库存分档 tag（不显示具体数量） */
.pd-acc-tier{margin:0}
.pd-acc-step{margin-left:auto}
.pd-muted{color:var(--muted);font-size:13px}
.pd-muted.small{font-size:12px}
/* v99.3：详情页「配比车型规则」展示区 */
.pd-bundles{display:flex;flex-direction:column;gap:8px}
.pd-bundle-rule{
  border:1px solid var(--line);border-radius:9px;padding:10px 12px;background:#fafbfe;
}
.pd-bundle-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.pd-bundle-item{
  display:flex;align-items:center;gap:6px;font-size:13px;padding:3px 0;
  border-top:1px dashed var(--line);
}
.pd-bundle-item:first-of-type{border-top:none}
.pd-bundle-min{margin-left:auto;font-size:12px;color:var(--brand);font-weight:600;white-space:nowrap}
/* 底部：合计 + 购物车 + 加入购物车 + 下单 */
.pd-footer{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  border-top:1px solid var(--line);padding:12px 20px;background:#fafbfe;
}
.pd-foot-left{font-size:14px}
.pd-foot-left b{font-size:18px;color:var(--red);margin-left:6px}
.pd-foot-right{display:flex;align-items:center;gap:12px}
.pd-cart{
  position:relative;width:42px;height:42px;border-radius:50%;border:1px solid var(--line);
  background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:20px;
}
.pd-cart-badge{
  position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;padding:0 5px;border-radius:999px;
  background:var(--red);color:#fff;font-size:11px;font-weight:700;
  display:flex;align-items:center;justify-content:center;border:2px solid #fff;
}
@media (max-width:820px){
  .pd-body{flex-direction:column;gap:16px}
  .pd-left{flex:none;width:100%}
  .pd-mainimg{max-width:260px}
  .pd-specs{max-width:none}
}

/* 按钮 */
.btn{
  border:1px solid var(--line);background:#fff;color:var(--ink);padding:8px 14px;border-radius:9px;
  font-size:13px;font-weight:600;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px;
}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brand-2);color:#fff}
.btn.danger{color:var(--red);border-color:#f3c4c4}
.btn.danger:hover{background:var(--red);color:#fff;border-color:var(--red)}
.btn.small{padding:5px 10px;font-size:12px}
.btn.ghost{background:transparent}
/* v99 车型预定：库存不足车型门店提交预定入口（警示琥珀色） */
.btn.pre-btn{background:#fff7e6;border-color:#f0c674;color:#a56a00}
.btn.pre-btn:hover{background:#a56a00;color:#fff;border-color:#a56a00}
/* v121：购物车「提交订单 / 结算」按钮内容水平居中。按钮本身已 width:100% 占满，但 .btn 是
   inline-flex 且默认 justify-content:normal → 🛒+文案 靠左、右侧大片留白，视觉「不居中」。
   主界面 #cartSubmitBtn(.cart-submit) 与移动端抽屉 #mcSubmitBtn 同步修（手机端 + 网页端通用）。 */
.cart-submit,#mcSubmitBtn{justify-content:center}

/* 工具栏 */
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.toolbar .spacer{flex:1}
.input,.select,.textarea{
  border:1px solid var(--line);border-radius:9px;padding:8px 12px;font-size:13px;background:#fff;color:var(--ink);
  font-family:inherit;min-width:0;
}
.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(27,79,216,.12)}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.field label{font-size:12px;color:var(--muted);font-weight:600}

/* 弹层 */
#modalRoot{position:fixed;inset:0;z-index:100;pointer-events:none}
.modal-backdrop{position:absolute;inset:0;background:rgba(15,22,40,.45);backdrop-filter:blur(2px);pointer-events:auto;display:flex;align-items:flex-end;justify-content:center}
.modal{
  background:#fff;width:100%;max-width:560px;max-height:90vh;border-radius:18px 18px 0 0;
  display:flex;flex-direction:column;pointer-events:auto;overflow:hidden;animation:slideUp .22s ease;
}
@keyframes slideUp{from{transform:translateY(40px);opacity:.4}to{transform:translateY(0);opacity:1}}
/* 修复：m-body 缺 flex:1 + min-height:0，flex 子项默认 min-height:auto 不收缩，
   内容一长就把 m-foot（操作按钮）顶出视口底边被裁。现在头/脚固定、body 区内部滚动。 */
.modal .m-head{padding:16px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;flex-shrink:0}
.modal .m-head h3{font-size:15px}
.modal .m-body{padding:18px;overflow-y:auto;flex:1 1 auto;min-height:0}
.modal .m-foot{padding:14px 18px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end;flex-shrink:0}
.icon-btn{border:none;background:#f0f2f7;width:30px;height:30px;border-radius:8px;cursor:pointer;font-size:15px;color:var(--muted)}
.icon-btn:hover{background:#e6e9f0;color:var(--ink)}

/* toast */
/* toast 定位右下：避免遮挡顶栏标题/用户区（登录欢迎语不再盖住品牌区） */
#toastRoot{position:fixed;top:auto;bottom:24px;right:20px;left:auto;transform:none;z-index:200;display:flex;flex-direction:column;gap:8px;align-items:flex-end}
@media (max-width:820px){
  /* 移动端避开底部一级导航 */
  #toastRoot{bottom:calc(104px + env(safe-area-inset-bottom));right:12px}
}
.toast{
  background:#1c2330;color:#fff;padding:10px 18px;border-radius:999px;font-size:13px;font-weight:600;
  box-shadow:0 10px 30px rgba(0,0,0,.25);animation:fade .2s ease;max-width:86vw;text-align:center;
}
.toast.ok{background:var(--green)} .toast.err{background:var(--red)} .toast.warn{background:var(--amber,#e8a33d)}   /* v126：右滑退出提示 */
@keyframes fade{from{opacity:0;transform:translateY(-8px)}to{opacity:1}}

/* 下单购物车 */
.cart{padding:16px}
.cart-row{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px dashed var(--line)}
.cart-row:last-child{border-bottom:none}
.cart-row .c-name{flex:1;min-width:0}
.cart-row .c-name .n{font-weight:600;font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cart-row .c-name .m{font-size:11px;color:var(--muted)}
/* v123：购物车缺货可预定项——整行淡灰底 + 「无货·预定」标签，与「现货」项区分 */
.cart-row.cart-short{background:rgba(120,130,150,.07);margin:0 -12px;padding:12px;border-radius:10px;border-bottom:none}
.cart-row.cart-short .c-name .m{color:var(--muted);text-decoration:line-through;text-decoration-color:rgba(120,130,150,.5)}
.cart-pre-tag{font-size:11px;line-height:18px}
.stepper{display:flex;align-items:center;gap:0;border:1px solid var(--line);border-radius:9px;overflow:hidden}
.stepper button{width:30px;height:32px;border:none;background:#f7f9fd;font-size:16px;cursor:pointer;color:var(--brand);font-weight:700}
.stepper button:hover{background:var(--brand-soft)}
.stepper .val{width:38px;text-align:center;font-weight:700;font-size:14px}
.stepper.mini button{width:24px;height:26px;font-size:14px}
.stepper.mini .val{width:30px;font-size:12px}
.cart-total{display:flex;justify-content:space-between;align-items:center;padding:14px 0;font-size:15px;font-weight:700}
.cart-total .amt{color:var(--brand);font-size:20px;font-weight:800}
/* v65.2 连带规则内联展示（订单列表内，无需点提交即可看到完整连带商品） */
.cart-bundle-wrap{margin:0 0 6px;padding:10px 12px;background:var(--amber-soft);border:1px dashed var(--amber);border-radius:10px}
.cart-bundle-title{font-size:12px;font-weight:700;color:var(--amber);margin-bottom:6px}
.cart-bundle-item{display:flex;gap:8px;align-items:flex-start;padding:7px 0;border-bottom:1px dashed var(--line)}
.cart-bundle-item:last-child{border-bottom:none;padding-bottom:0}
.cart-bundle .cb-tag,.cart-bundle-item .cb-tag{flex:0 0 auto;background:var(--amber);color:#fff;font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px;white-space:nowrap;margin-top:1px}
.cart-bundle-item .cb-item{flex:1;min-width:0}
.cart-bundle-item .cb-n{font-size:13px;font-weight:600}
.cart-bundle-item .cb-m{font-size:11px;color:var(--muted);margin-top:2px}
.cart-bundle.err{display:flex;gap:8px;align-items:flex-start;margin:0 0 6px;padding:8px 12px;background:#fdecec;border:1px solid var(--red);border-radius:10px;font-size:12px;color:var(--red);line-height:1.5}
.cart-bundle.err .cb-tag{background:var(--red)}
/* v70 配比车型选择面板（unique/choice/combo 交互选配） */
.sel-panel{border-style:solid}
.sel-panel.ok{background:#e9f7ef;border-color:var(--green)}
.sel-panel.ok .cart-bundle-title{color:var(--green)}
.sel-panel.need{background:#fff8ec;border-color:var(--amber)}
.sel-rule{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
.sel-rule:first-of-type{border-top:none;padding-top:0}
.sel-rule-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.sel-mt{font-size:11px;font-weight:600;color:var(--brand)}
.sel-cand{margin:4px 0 8px 8px}
.sel-cand-name{font-size:13px;font-weight:600;margin-bottom:5px}
.sel-variants{display:flex;flex-wrap:wrap;gap:6px}
.sel-qty-row{display:flex;align-items:center;gap:8px;margin-top:6px}

/* 明细项 */
.detail-item{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px dashed var(--line);font-size:13px}
.detail-item:last-child{border-bottom:none}

/* 余额明细列表 */
.bal-list{max-height:360px;overflow-y:auto}
.bal-item{display:flex;justify-content:space-between;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);font-size:13px}
.bal-item:last-child{border-bottom:none}
.bal-item .b-reason{flex:1;min-width:0}
.bal-item .b-amt{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.bal-item .b-amt.plus{color:var(--green)}
.bal-item .b-amt.minus{color:var(--red)}

/* 空状态 */
.empty{text-align:center;padding:40px 10px;color:var(--muted);font-size:13px}
.empty .ico{font-size:34px;margin-bottom:8px;opacity:.5}

/* ============ 代理商后台：左侧垂直导航布局 ============ */
.dash-layout{display:flex;gap:16px;align-items:flex-start}
.dash-nav{
  width:212px;flex-shrink:0;background:var(--card);border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow);padding:8px;
  position:sticky;top:90px;max-height:calc(100vh - 110px);overflow-y:auto;
}
.dash-nav-item{
  display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:9px;
  font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:.15s;
  border:1px solid transparent;user-select:none;
}
.dash-nav-item .ico{font-size:15px;width:20px;text-align:center;flex-shrink:0}
.dash-nav-item:hover{background:#f2f5fc;color:var(--ink)}
.dash-nav-item.active{background:var(--brand);color:#fff;box-shadow:0 4px 12px rgba(27,79,216,.25)}
.dash-nav-item .caret{margin-left:auto;font-size:10px;transition:.2s}
/* v83：只读模块导航徽标（如月度活动看板对门店/销售） */
.dash-nav-item .nav-readonly{margin-left:auto;font-size:10px;font-weight:600;padding:1px 6px;border-radius:9px;background:rgba(120,130,150,.15);color:var(--muted);letter-spacing:.3px;flex-shrink:0}
.dash-nav-item.active .nav-readonly{background:rgba(255,255,255,.25);color:#fff}
/* v83：月度活动看板明细表 状态列配色（v84 平铺后补实色） */
.ab-status{font-weight:600;white-space:nowrap}
.ab-st-onsale{color:var(--green)}
.ab-st-new{color:var(--amber)}
.ab-st-disc{color:var(--red)}
/* v84：月度活动看板详情平铺（取消弹窗）：信息条 + 全明细表（sticky 表头/首列，页面内滚动） */
.ab-detail{margin-top:16px}
.ab-detail-head{padding:14px 16px 12px;border-bottom:1px solid var(--line)}
.ab-detail-title{font-size:14.5px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.ab-slogan{font-size:12px;color:var(--muted);font-weight:400}
.ab-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:9px}
.ab-status-dist{display:inline-flex;align-items:center;flex-wrap:wrap;gap:6px}
.ab-file{margin-top:9px}
.ab-tbl-wrap{max-height:64vh;overflow:auto}
.ab-tbl{table-layout:fixed}
.ab-tbl th,.ab-tbl td{white-space:normal;word-break:break-word}
.ab-tbl th:first-child,.ab-tbl td:first-child{width:96px;min-width:96px;max-width:96px}
.ab-tbl th{position:sticky;top:0;z-index:3;background:#eef2f9}
.ab-tbl th:first-child{left:0;z-index:4}
.ab-tbl td:first-child{position:sticky;left:0;background:#fff;z-index:1;box-shadow:1px 0 0 var(--line)}
.ab-tbl tr:hover td{background:#f4f7ff}
.ab-tbl tr:hover td:first-child{background:#eef3ff}
/* v85：看板删除按钮 + 操作日志 */
.ab-op-cell{white-space:nowrap;text-align:center}
.ab-del-btn{background:rgba(214,69,69,.08);color:var(--red);border:1px solid rgba(214,69,69,.35);
  border-radius:6px;padding:2px 10px;font-size:12px;cursor:pointer;transition:.15s}
.ab-del-btn:hover{background:var(--red);color:#fff;border-color:var(--red)}
.ab-del-btn:disabled{opacity:.6;cursor:default;background:rgba(214,69,69,.08);color:var(--red)}
/* v85.1：「型号」列固定最左 + 红字表头 + 长文本红字平铺 */
.ab-tbl th.ab-model{color:var(--red);font-weight:700}
.ab-tbl td.ab-model{font-weight:600}
.ab-long-ref{color:var(--red);font-size:11px;white-space:nowrap;cursor:default}
.ab-notes{margin-top:12px;padding:12px 14px;background:var(--red-soft,#fdecec);
  border:1px solid rgba(226,59,59,.25);border-radius:8px}
.ab-notes-title{font-size:12.5px;font-weight:700;color:var(--red);margin-bottom:8px}
.ab-note-item{font-size:13px;color:var(--red);line-height:1.7;margin-top:6px;word-break:break-word}
.ab-note-item b{color:var(--red);margin-right:4px}
.dash-nav-group.expanded .group-head .caret{transform:rotate(180deg)}
.dash-nav-children{display:none;padding:2px 0 4px 14px;margin-left:12px;border-left:2px solid var(--line)}
.dash-nav-group.expanded .dash-nav-children{display:block}
.dash-nav-item.sub{padding:8px 12px;font-size:12.5px;font-weight:500;color:var(--muted)}
.dash-nav-item.sub:hover{background:#f2f5fc;color:var(--ink)}
.dash-nav-item.sub.active{background:var(--brand);color:#fff;box-shadow:0 4px 10px rgba(27,79,216,.25)}
/* v108.4 三级嵌套（桌面侧栏）：一级「直营店管理」→ 二级（叶子 / 子分类）→ 三级（子分类的子项）
   嵌套的 .sub-group 复用 .dash-nav-group 的展开规则（.expanded .dash-nav-children 显隐），仅补三级叶子的缩进与样式 */
.dash-nav-group.sub-group>.group-head .caret{margin-left:auto;font-size:10px}
.dash-nav-item.sub.sub-sub{padding:7px 10px 7px 14px;font-size:12px;color:var(--muted)}
.dash-nav-item.sub.sub-sub:hover{background:#f2f5fc;color:var(--ink)}
.dash-nav-item.sub.sub-sub.active{background:var(--brand);color:#fff;box-shadow:0 4px 8px rgba(27,79,216,.22)}
.dash-main{flex:1;min-width:0}
/* 移动端悬浮导航控件（桌面一律隐藏，仅在 @media(max-width:820px) 内按需显示）：
   .nav-trigger=栏外 ☰ 开关；.dash-nav-title / .nav-x=栏内标题与 ✕ 收起按钮 */
.nav-trigger{display:none}
.dash-nav-title{display:none}
.nav-x{display:none}

/* ============ 移动端适配 ============ */
@media (max-width:820px){
  .topbar{padding:12px 14px}
  /* 品牌区单行不折行：标题过长时省略号截断，保证 LOGO/标题/用户区同一行协调 */
  .brand{min-width:0;flex:1;gap:8px}
  /* v77：LOGO 固定正方形，禁止被 flex 挤压成椭圆（此前 30.5×42 变形、"九号" 被裁切） */
  .logo{flex:0 0 auto;width:38px;height:38px;border-radius:10px;font-size:14px}
  .brand-text{min-width:0}
  /* v77：标题字号 14→15px + 行高/字距微调，小屏可读性与对齐更优 */
  .brand-text h1{font-size:15px;line-height:1.25;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .brand-text .sub{display:none}
  .period-tag{display:none}
  /* 用户区：胶囊整体防挤压；内部用户名截断，退出按钮不折行 */
  .topbar-right{flex:none}
  .user-box{min-width:0;max-width:44vw}
  .user-box .btn.ghost{flex:none;white-space:nowrap}
  /* v78：铃铛小屏略缩小，角标不越界 */
  .notif-bell{width:32px;height:32px;border-radius:10px;font-size:15px}
  .notif-badge{min-width:17px;height:17px;font-size:10px;line-height:17px;top:-5px;right:-5px}
  .content{padding:14px}
  .content{padding-bottom:96px}
  /* 区块标题：窄屏下右侧描述换到标题下一行，标题本身保持完整单行（不再折半） */
  .section-title{flex-wrap:wrap;row-gap:2px}
  .section-title .muted{flex-basis:100%}
  /* v78：待办横幅小屏——节点标签允许换行，标题/按钮保持可用 */
  .notif-head{padding:9px 12px}
  .notif-title{font-size:13px}
  .notif-list{max-height:280px}
  .ntf-item{padding:9px 12px;gap:8px}
  .ntf-title{font-size:13px}
  .ntf-node{padding:1px 7px;font-size:11px}
  .ntf-btn{padding:4px 9px;font-size:11.5px}
  .grid-cards{grid-template-columns:1fr}
  .grid-2{grid-template-columns:1fr}
  .grid-kpi{grid-template-columns:repeat(2,1fr)}
  .mall-shelf{grid-template-columns:repeat(2,1fr)}
  .kpi .k-value{font-size:20px}
  .modal-backdrop{align-items:flex-end}
  .toolbar{align-items:stretch}
  .toolbar .btn,.toolbar .select,.toolbar .input{flex:1}
  /* 一级导航：底部固定 4 项，触摸区≥44px、等宽、带图标 */
  .nav{
    position:fixed;top:auto;bottom:0;left:0;right:0;z-index:35;
    border-top:1px solid var(--line);border-bottom:none;
    gap:4px;padding:6px 8px calc(6px + env(safe-area-inset-bottom));
  }
  .nav-item{
    flex:1 1 0;min-width:0;min-height:48px;
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
    padding:4px 2px;font-size:11.5px;line-height:1.2;
  }
  .nav-item::before{content:"";display:block;font-size:19px;line-height:1}
  .nav-item[data-view="dashboard"]::before{content:"📊"}
  .nav-item[data-view="order"]::before{content:"🛒"}
  .nav-item[data-view="salesperson"]::before{content:"🧑‍💼"}
  .nav-item[data-view="store"]::before{content:"🏪"}
  /* 代理商后台：左侧透明悬浮导航（覆盖式，默认收起不占横向空间）
     —— 主内容用满剩余宽度（不再为导航预留 150px）；
     —— 点击 ☰ 开关从左侧滑入覆盖主内容，点 ✕/遮罩/选中模块/切视图后收起。
     （body.m-nav 仅在代理商后台视图移动端挂载） */
  .nav-trigger{
    display:flex;align-items:center;justify-content:center;
    position:fixed;top:10px;left:10px;z-index:55;
    width:46px;height:46px;border-radius:13px;cursor:pointer;
    background:rgba(255,255,255,.72);
    -webkit-backdrop-filter:blur(12px) saturate(160%);backdrop-filter:blur(12px) saturate(160%);
    border:1px solid var(--line);box-shadow:var(--shadow);
    color:var(--brand);font-size:22px;line-height:1;user-select:none;
  }
  .nav-trigger:active{background:rgba(234,240,252,.92)}
  /* 给左上 ☰ 开关让位：顶栏品牌区右移，避免遮挡 logo/标题 */
  body.m-nav .topbar{padding-left:64px}
  .dash-layout{flex-direction:column;gap:10px;align-items:stretch}
  .dash-main{width:100%;align-self:stretch;min-width:0}
  .dash-nav{
    position:fixed;top:0;left:0;bottom:0;z-index:65;
    width:min(268px,76vw);flex:none;
    display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;
    transform:translateX(-102%);
    transition:transform .24s cubic-bezier(.22,.8,.32,1);
    background:rgba(255,255,255,.84);
    -webkit-backdrop-filter:blur(18px) saturate(170%);backdrop-filter:blur(18px) saturate(170%);
    border-right:1px solid rgba(230,233,240,.6);
    box-shadow:6px 0 32px rgba(20,30,60,.18);
    padding:14px 12px calc(88px + env(safe-area-inset-bottom));
  }
  body.nav-open .dash-nav{transform:translateX(0)}
  .dash-nav::-webkit-scrollbar{display:none}
  .dash-nav-title{
    display:flex;align-items:center;justify-content:space-between;gap:8px;
    height:40px;margin:2px 4px 12px;font-size:15px;font-weight:700;color:var(--ink);flex:none;
  }
  .nav-x{
    display:flex;align-items:center;justify-content:center;
    width:34px;height:34px;border-radius:10px;cursor:pointer;
    border:1px solid var(--line);background:#fff;color:var(--muted);font-size:16px;
  }
  .nav-x:active{background:#f2f5fc;color:var(--ink)}
  .dash-nav-item{
    flex-shrink:0;min-height:46px;display:flex;align-items:center;gap:10px;
    padding:11px 13px;margin-bottom:2px;font-size:13.5px;font-weight:600;text-align:left;
    border:1px solid transparent;background:transparent;color:var(--muted);
    border-radius:11px;user-select:none;
  }
  .dash-nav-item .ico{font-size:17px;width:22px;text-align:center;flex-shrink:0}
  .dash-nav-item:hover{background:rgba(234,240,252,.9);color:var(--ink)}
  .dash-nav-item:active{background:rgba(224,233,250,.95)}
  .dash-nav-item.active{
    background:var(--brand);color:#fff;border-color:transparent;
    box-shadow:0 6px 16px rgba(27,79,216,.32);
  }
  .dash-nav-group{flex-shrink:0;position:static}
  .dash-nav-item .caret{margin-left:auto;font-size:11px;opacity:.7;flex-shrink:0}
  .dash-nav-group.expanded .group-head .caret{transform:rotate(180deg)}
  /* 子级：左缩进 + 左侧层级引导线，父子关系清晰 */
  .dash-nav-children{
    display:none;flex-direction:column;gap:2px;
    padding:2px 0 4px 8px;margin:0 0 4px 16px;
    border-left:2px solid rgba(230,233,240,.9);
  }
  .dash-nav-group.expanded .dash-nav-children{display:flex}
  .dash-nav-item.sub{
    min-height:44px;font-size:13px;font-weight:500;text-align:left;
    padding:10px 12px;margin-bottom:2px;border-radius:10px;
  }
  /* v108.4 三级嵌套（移动端悬浮导航）：嵌套 .sub-group 复用上方 .dash-nav-children 的 flex+展开规则，仅补三级叶子尺寸 */
  .dash-nav-group.sub-group>.group-head{min-height:42px}
  .dash-nav-item.sub.sub-sub{
    min-height:42px;font-size:12.5px;padding:9px 11px 9px 16px;border-radius:9px;
  }
  /* 展开时的半透明遮罩：点击收起，提示"导航为临时覆盖层" */
  .m-nav-mask{
    position:fixed;inset:0;z-index:62;background:rgba(16,24,44,.28);
    animation:fade .18s ease;
  }
}
/* 移动端后台模块抽屉菜单（二级/三级），独立于媒体查询以便复用 */
.m-menu-mask{
  position:fixed;inset:0;background:rgba(16,24,44,.42);z-index:70;
  animation:fade .18s ease;
}
.m-menu{
  position:fixed;left:0;right:0;bottom:0;z-index:71;background:var(--card);
  border-radius:20px 20px 0 0;box-shadow:0 -12px 40px rgba(20,30,60,.22);
  padding:0 0 env(safe-area-inset-bottom);max-height:78vh;display:flex;flex-direction:column;
  animation:slideUp .22s cubic-bezier(.22,.8,.32,1);
}
@keyframes slideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes fade{from{opacity:0}to{opacity:1}}
.m-menu-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 16px 10px;font-size:15px;font-weight:700;color:var(--ink);
  border-bottom:1px solid var(--line);
}
.m-menu-list{overflow-y:auto;max-height:calc(78vh - 56px);padding:8px 10px 16px;-webkit-overflow-scrolling:touch}
.m-menu-item{
  display:flex;align-items:center;gap:12px;min-height:52px;padding:10px 14px;
  border-radius:12px;font-size:15px;font-weight:600;color:var(--ink);cursor:pointer;
  margin-bottom:4px;user-select:none;
}
.m-menu-item .ico{font-size:20px;width:26px;text-align:center;flex-shrink:0}
.m-menu-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.m-menu-item .caret{font-size:12px;color:var(--muted);flex-shrink:0}
.m-menu-item:active{background:#f2f5fc}
.m-menu-item.active{background:var(--brand-soft);color:var(--brand)}
.m-menu-children{display:none;padding-left:10px;margin:2px 0 6px 36px}
.m-menu-children.open{display:block}
.m-menu-sub{
  display:flex;align-items:center;min-height:48px;padding:10px 14px;
  border-radius:10px;font-size:14.5px;color:var(--muted);cursor:pointer;margin-bottom:3px;user-select:none;
}
.m-menu-sub:active{background:#f2f5fc}
.m-menu-sub.active{background:var(--brand);color:#fff;font-weight:600}
/* v108.4 三级嵌套（移动端底部抽屉）：一级 → 二级(叶子 m-menu-sub / 子分类 m-menu-item.sub) → 三级 m-menu-sub.sub2 */
.m-menu-item.sub.group-head{min-height:48px;font-size:14px;font-weight:600;padding:10px 14px 10px 26px}
.m-menu-item.sub.group-head .lbl{font-size:14px}
.m-menu-group.sub{margin-left:14px}
.m-menu-group.sub>.m-menu-children{margin-left:20px;padding-left:8px}
.m-menu-sub.sub2{min-height:46px;font-size:13.5px;padding:10px 14px 10px 24px}
@media (max-width:480px){
  .store-card .s-bal{gap:12px}
  .kpi .k-value{font-size:18px}
}

/* ============ 登录 / 账号权限 ============ */
.topbar-right{display:flex;align-items:center;gap:10px}
.user-box{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);padding:4px 6px 4px 12px;border-radius:999px}
.user-name{font-size:12.5px;font-weight:600;white-space:nowrap}
.user-box .tag{background:rgba(255,255,255,.2);color:#fff}
.user-box .tag.red{background:rgba(226,59,59,.85)}
.user-box .tag.green{background:rgba(24,160,90,.85)}
.user-box .tag.amber{background:rgba(224,138,0,.85)}
.user-box .tag.purple{background:rgba(122,60,240,.85)}
.user-box .tag.blue{background:rgba(255,255,255,.85);color:var(--brand-2)}
.user-box .btn.ghost{background:transparent;border:1px solid rgba(255,255,255,.4);color:#fff;padding:3px 10px;font-size:11.5px;border-radius:999px}
.user-box .btn.ghost:hover{background:rgba(255,255,255,.2);color:#fff}

/* ---------- v78 审批待办：顶栏铃铛 + 主界面横幅 ---------- */
.notif-bell{
  position:relative;flex:none;width:36px;height:36px;border:none;cursor:pointer;
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);
  border-radius:11px;font-size:17px;line-height:1;display:flex;align-items:center;justify-content:center;
  transition:.15s;
}
.notif-bell:hover{background:rgba(255,255,255,.26)}
.notif-bell.has{background:rgba(255,255,255,.92);border-color:transparent}
.notif-bell.has:hover{background:#fff}
.notif-badge{
  position:absolute;top:-6px;right:-6px;min-width:19px;height:19px;padding:0 5px;
  background:var(--red);color:#fff;font-size:11px;font-weight:800;line-height:19px;
  border-radius:999px;text-align:center;box-shadow:0 2px 6px rgba(226,59,59,.5);
  border:1.5px solid #fff;
}
body.authed-out .notif-bell{display:none}

.notif-banner{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:14px;overflow:hidden;
}
.notif-banner.has-unread{border-color:#ffd9a8}
.notif-head{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 14px;background:linear-gradient(120deg,#fff7ec,#fffdf9);
  border-bottom:1px solid var(--line);
}
.notif-banner.has-unread .notif-head{background:linear-gradient(120deg,#fff3df,#fffdf9)}
.notif-title{font-size:14px;font-weight:700;color:#7a4a00}
.notif-title b{color:#c26200}
.notif-head .muted.small{margin-right:auto}
.notif-actions{display:flex;align-items:center;gap:6px}
.notif-actions .btn.ghost{border:1px solid #e4c79a;color:#9a6a1e;background:#fff}
.notif-actions .btn.ghost:hover{background:#fff6e8}
.notif-list{display:flex;flex-direction:column;max-height:320px;overflow-y:auto}
.notif-banner.collapsed .notif-list{display:none}
.ntf-item{
  display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid #f0f2f7;
  cursor:pointer;transition:background .12s;
}
.ntf-item:last-child{border-bottom:none}
.ntf-item:hover{background:#f7f9fd}
.ntf-item.unread{background:#fffdf8}
.ntf-item.read{opacity:.62}
.ntf-item.read .ntf-title{color:var(--muted);text-decoration:line-through;text-decoration-color:#cfd6e2}
.ntf-dot{flex:none;width:8px;height:8px;border-radius:50%;background:#cfd6e2}
.ntf-dot.on{background:var(--amber);box-shadow:0 0 0 3px rgba(224,138,0,.18)}
.ntf-main{flex:1;min-width:0}
.ntf-title{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ntf-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:3px;font-size:11.5px;color:var(--muted)}
.ntf-mod{
  background:var(--brand-soft);color:var(--brand-2);border:1px solid #d6e2ff;
  padding:0 7px;border-radius:999px;font-size:11px;font-weight:600;
}
.ntf-node{
  flex:none;background:#fff4e0;color:#a05e00;border:1px solid #ffdca3;
  padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;
}
.ntf-btn{flex:none;white-space:nowrap}
.ntf-track{flex:none;font-size:11.5px;color:var(--muted);white-space:nowrap}
.ntf-more{padding:8px 14px;border-top:1px solid #f0f2f7}
/* 深链高亮行：滚动定位后闪一下淡黄底 */
tr.ntf-hl, .ntf-hl{animation:ntfHl 2.4s ease}
@keyframes ntfHl{0%,55%{background:#fff3c4}100%{background:transparent}}

/* v99.8 审批深链跳转后的状态提示条：跳转到的审批详情页顶部，提示单据相对通知节点的最新状态
   （已通过/已驳回/已流转下一环节等），避免用户对着过期的「待审批」认知操作。 */
.v998-hint{
  background:#eef4ff;border:1px solid #cfe0ff;color:#1d4ed8;
  border-radius:10px;padding:8px 12px;font-size:12.5px;font-weight:600;line-height:1.5;
}

/* ---------- v79 门店罚单明细：分类汇总分组 + 可点击明细行 + 扣减来源筛选 chips ---------- */
/* 明细行可点击（弹罚单详情）：悬停高亮 + 指针 */
tr.pen-store-row{cursor:pointer;transition:background .12s}
tr.pen-store-row:hover{background:rgba(220,53,69,.06)}
/* 扣减来源筛选 chips（全部/含返利扣减/含货款扣减） */
.pen-chip{
  border:1px solid var(--line);background:var(--card);color:var(--muted);
  border-radius:999px;padding:5px 13px;font-size:12.5px;font-weight:600;cursor:pointer;
  transition:all .14s;white-space:nowrap;
}
.pen-chip:hover{border-color:var(--brand);color:var(--brand)}
.pen-chip.on{background:var(--brand,#1a56db);border-color:var(--brand,#1a56db);color:#fff}

/* 登录卡片 */
.login-wrap{min-height:calc(100vh - 130px);display:flex;align-items:center;justify-content:center;padding:20px 14px}
.login-card{width:100%;max-width:420px;background:var(--card);border-radius:18px;box-shadow:var(--shadow);padding:30px 28px 26px;border:1px solid var(--line)}
.login-logo{width:54px;height:54px;border-radius:16px;background:linear-gradient(135deg,#10307a,#1b4fd8);color:#fff;font-weight:800;font-size:17px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;box-shadow:0 8px 20px rgba(27,79,216,.32)}
.login-card h2{text-align:center;font-size:19px;font-weight:700;letter-spacing:.5px}
.login-sub{text-align:center;color:var(--muted);font-size:12.5px;margin:6px 0 20px}
.login-btn{width:100%;padding:12px;font-size:15px;font-weight:700;letter-spacing:4px;margin-top:4px;border-radius:12px;justify-content:center;text-align:center}
.login-btn:disabled{opacity:.6;cursor:not-allowed}
.login-err{background:var(--red-soft);color:var(--red);border:1px solid #f3c4c4;border-radius:10px;padding:9px 12px;font-size:13px;font-weight:600;margin:0 0 14px;animation:fade .18s ease}
/* 未登录时隐藏主导航，避免误点 */
body.authed-out .nav{display:none}
@media (max-width:820px){
  .login-wrap{min-height:calc(100vh - 110px)}
  .login-card{padding:24px 18px 20px}
  .user-name{font-size:11.5px;max-width:110px;overflow:hidden;text-overflow:ellipsis}
  .user-box{padding:3px 5px 3px 10px}
  .user-box .tag{display:none}
}
@media (max-width:480px){
  .user-name{max-width:84px}
  .login-card{padding:22px 16px 18px}
}

/* 激活返利上传失败提示行：仅上传出错时显示（display:flex），含错误信息 + 可点移除按钮 */
.ar-err-row{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin-top:10px; padding:8px 12px;
  border:1px solid rgba(220,53,69,.35); border-radius:8px;
  background:rgba(220,53,69,.06);
}
.ar-err-msg{flex:1; min-width:200px; font-size:12.5px; color:#dc3545; line-height:1.5}
.ar-err-remove{
  color:#dc3545; border:1px solid rgba(220,53,69,.5); background:#fff;
  font-weight:600; cursor:pointer; white-space:nowrap;
}
.ar-err-remove:hover{background:#dc3545; color:#fff}

/* 门店激活返利明细：月份分组头行（区别于组内明细行） */
.ar-grp td{background:#f0f5ff;font-weight:700;color:var(--brand,#1a56db);padding:8px 12px}
.ar-grp td .muted{color:var(--muted);font-weight:400}

/* 行级明细：可点击行 + 选中态（实时联动反馈） */
tr.ar-row-click{cursor:pointer;transition:background .12s}
tr.ar-row-click:hover{background:rgba(26,86,219,.06)}
tr.ar-row-sel{background:rgba(26,86,219,.10)!important;box-shadow:inset 3px 0 0 var(--brand,#1a56db)}
tr.ar-row-sel:hover{background:rgba(26,86,219,.12)!important}

/* 门店电商返利明细：可点击行 + 选中态（实时联动反馈，同激活返利行级） */
tr.ecom-row-click{cursor:pointer;transition:background .12s}
tr.ecom-row-click:hover{background:rgba(26,86,219,.06)}
tr.ecom-row-sel{background:rgba(26,86,219,.10)!important;box-shadow:inset 3px 0 0 var(--brand,#1a56db)}
tr.ecom-row-sel:hover{background:rgba(26,86,219,.12)!important}
tr.wo-row-click{cursor:pointer;transition:background .12s}
tr.wo-row-click:hover{background:rgba(26,86,219,.06)}
tr.wo-row-sel{background:rgba(26,86,219,.10)!important;box-shadow:inset 3px 0 0 var(--brand,#1a56db)}
tr.wo-row-sel:hover{background:rgba(26,86,219,.12)!important}

/* 行级明细面板（门店端内联 + 管理端弹窗共用） */
.ar-rowpanel{margin-top:10px;border:1px solid var(--border,#e5e9f2);border-radius:10px;overflow:hidden;background:#fff}
.ar-rowpanel-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;background:linear-gradient(90deg,rgba(26,86,219,.08),rgba(26,86,219,.02));font-weight:700;font-size:13px}
.ar-rowpanel-head .muted{font-weight:400}
.ar-rowpanel-wrap{max-height:52vh;overflow:auto}
.ar-rowtbl th,.ar-rowtbl td{white-space:nowrap;padding:6px 10px}
.ar-rowtbl thead th{position:sticky;top:0;z-index:1;background:var(--bg-soft,#f7f9fc);font-weight:600}

/* 重置密码交付弹窗：新密码大号展示框（点击可全选，配合复制按钮） */
.newpwd-box{
  font-size:22px; font-weight:700; letter-spacing:2px; font-family:Consolas,Menlo,monospace;
  color:#1a56db; background:rgba(26,86,219,.07); border:1px dashed rgba(26,86,219,.4);
  border-radius:8px; padding:14px 16px; text-align:center; user-select:all; cursor:text;
  word-break:break-all;
}

/* ============ v50 运营结果提报 ============ */
/* R1 前置校验状态条：未制订任务量 → 红（阻断）；已制订 → 绿（可提报） */
.op-validate-bar{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;margin:12px 0;font-size:13.5px;line-height:1.6;border:1px solid}
.op-validate-bar.ok{background:rgba(26,122,60,.08);border-color:rgba(26,122,60,.35);color:#14602f}
.op-validate-bar.block{background:rgba(229,72,77,.08);border-color:rgba(229,72,77,.4);color:#a11f24}
.op-validate-bar .op-validate-ico{font-size:18px;line-height:1.2;flex:none}
.op-validate-bar b{font-weight:700}
.op-validate-bar .muted{font-size:12px}
/* 11 项指标行：目标（只读回显）/ 实际（可编辑）/ 单位 */
.op-metric-row{display:grid;grid-template-columns:1.5fr .55fr 1.15fr 34px;gap:10px;align-items:center;padding:7px 0}
.op-metric-row:last-child{border-bottom:none}
.op-metric-row .op-m-label{font-size:13px}
.op-metric-row .op-m-target{font-size:13px;color:var(--ink);text-align:center;font-weight:600;background:var(--bg-soft,#f7f9fc);border-radius:6px;padding:4px 6px}
.op-metric-row .op-m-act{width:100%}
.op-metric-row .op-m-unit{font-size:11.5px;color:var(--muted);min-width:26px;text-align:right}
.op-metric-row.na{opacity:.62}
.op-metric-row.na .op-m-act{color:var(--muted)}
/* 凭证缩略图（照片/截图）+ 链接标签 */
.evidence-thumb{display:inline-flex;flex-direction:column;align-items:center;gap:4px;max-width:96px}
.evidence-thumb img{width:84px;height:84px;object-fit:cover;border-radius:8px;border:1px solid var(--border);cursor:zoom-in;transition:transform .15s}
.evidence-thumb img:hover{transform:scale(1.04)}
.evidence-thumb .ev-name{font-size:11px;color:var(--muted);max-width:84px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.evidence-link{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--brand);text-decoration:none;padding:4px 8px;border:1px solid var(--line);border-radius:8px;max-width:220px}
.evidence-link:hover{background:var(--bg-soft,#f7f9fc)}
.evidence-link .ev-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}
/* 提报明细对比表（实际 vs 目标） */
.op-cmp-tbl th,.op-cmp-tbl td{white-space:nowrap;padding:6px 10px;font-size:12.5px}
.op-cmp-tbl td.act{font-weight:600}
.op-cmp-tbl .miss{color:var(--red,#e5484d)}

/* ============ v51 运营结果提报：平铺布局 + 凭证下放短视频/直播 ============ */
/* 平铺容器：去掉卡片外壳，指标按序平铺排列 */
.op-flat{display:block}
.op-flat-head{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;align-items:end;padding:10px 0 2px;border-bottom:1px solid var(--line)}
.op-flat-head .field label{font-size:12.5px;color:var(--muted)}
.op-flat-note{font-size:12px;color:var(--muted);margin:10px 0 4px;line-height:1.6}
.op-flat-note b{color:var(--ink);font-weight:600}
.op-flat-note-sep{margin:0 6px;opacity:.5}
.op-flat-metrics{margin-top:4px}
.op-flat-item{padding:10px 0;border-bottom:1px dashed var(--line)}
.op-flat-item:last-child{border-bottom:none}
/* 行内凭证块（仅短视频/直播）：缩进 + 浅色底，与指标行视觉分层 */
.op-ev-block{margin:10px 0 2px 14px;padding:10px 12px;background:var(--bg-soft,#f7f9fc);border:1px dashed var(--line);border-radius:8px}
.op-ev-hint{font-size:12px;color:var(--muted);margin-bottom:8px}
.op-ev-row{display:grid;grid-template-columns:200px 1fr;gap:14px;align-items:start}
.op-ev-file{display:block;font-size:12.5px;color:var(--ink);cursor:pointer;position:relative}
.op-ev-file input[type=file]{display:block;margin-top:6px;font-size:12px}
.op-ev-file span{margin-left:8px;color:var(--brand);font-size:12px}
.op-ev-links{min-width:0}
/* 底部：备注 + 提交 */
.op-flat-foot{display:flex;gap:14px;align-items:end;margin-top:14px;flex-wrap:wrap}
.op-flat-foot .field{max-width:420px}
@media (max-width:560px){
  .op-flat-head{grid-template-columns:1fr}
  .op-ev-row{grid-template-columns:1fr}
  .op-metric-row{grid-template-columns:1.3fr .6fr 1fr 28px;gap:7px}
  .op-metric-row .op-m-label{font-size:12px}
}
/* v52 提货量自动取值：只读展示 + 自动徽标 */
.op-m-auto{display:inline-block;background:var(--bg-soft,#f3f5f9);border:1px solid var(--line);border-radius:8px;
  padding:7px 12px;font-size:14px;font-weight:600;color:var(--ink);min-height:13.5px;width:100%;box-sizing:border-box}
.op-auto-tag{font-size:10.5px;color:var(--brand);background:rgba(37,99,235,.10);border:1px solid rgba(37,99,235,.25);
  border-radius:5px;padding:1px 5px;margin-left:6px;vertical-align:1px;cursor:help}

/* v56 巡店签到（平铺式布局）：统计条 + 表单两栏 + 8 照片槽位(1合影+7场景) + 移动端悬浮门店条 */
.ck-stats-flat{display:flex;gap:18px;align-items:baseline;margin-bottom:12px;flex-wrap:wrap}
.ck-stat{display:flex;align-items:baseline;gap:8px;color:var(--muted);font-size:13px}
.ck-stat b{font-size:22px;font-weight:600;color:var(--ink);line-height:1}
.ck-stat.pass b{color:var(--green)}
.ck-stat .lg{font-size:26px;font-weight:600;line-height:1}
.tiny{font-size:11px}
/* 平铺两栏：无卡片框，仅用左侧竖条 section-title 分区，间距统一 16px */
.ck-form-grid{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start}
.ck-col{display:flex;flex-direction:column;gap:12px;min-width:0}
.ck-col .section-title{margin-bottom:2px}
.ck-field{display:flex;flex-direction:column;gap:6px}
.ck-label{font-size:12.5px;color:var(--muted);font-weight:600}
.ck-store-sel{width:100%;min-width:0}
.ck-locval{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ck-slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px}
.ck-slot{position:relative;border:1.5px dashed var(--line);border-radius:10px;padding:12px 8px;
  text-align:center;background:var(--bg);min-height:150px;display:flex;flex-direction:column;
  align-items:center;gap:6px;justify-content:center}
.ck-slot.have{border-style:solid;border-color:#bfe6d0;background:#fff;padding:6px}
.ck-slot.have img{width:100%;height:120px;object-fit:cover;border-radius:7px}
.ck-slot-ico{font-size:26px;opacity:.7}
.ck-slot-tag{position:absolute;top:6px;right:6px;font-size:10.5px;padding:1px 6px;border-radius:999px;
  background:var(--green-soft);color:var(--green);font-weight:600}
.ck-rebtn{position:absolute;bottom:6px;right:6px;font-size:11px;padding:2px 8px;border:1px solid var(--line);
  background:#fff;border-radius:6px;cursor:pointer}
.ck-rebtn:hover{border-color:var(--brand);color:var(--brand)}
.ck-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding-top:12px;border-top:1px solid var(--line)}
.ck-thumb{width:44px;height:34px;object-fit:cover;border-radius:5px;border:1px solid var(--line)}
.ck-thumb.ph{display:inline-flex;align-items:center;justify-content:center;background:var(--bg);
  color:var(--muted);font-size:11px}
.ck-preview{max-width:340px;max-height:300px;border-radius:8px;border:1px solid var(--line)}
/* 移动端悬浮门店条：吸顶，始终显示当前门店 + 快捷拍照，避免长表单里选择滚出视野 */
#ckStoreFloat{display:none}
.ck-storebar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:8px;
  background:var(--bg);border:1px solid var(--line);border-radius:10px;
  padding:8px 10px;margin-bottom:10px;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.ck-storebar.empty{border-color:var(--red);background:#fff4f4}
.ck-storebar-ico{font-size:16px}
.ck-storebar-name{font-weight:600;font-size:13.5px;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ck-storebar-meta{font-size:11.5px;color:var(--muted);white-space:nowrap}
.ck-storebar .btn.sm{white-space:nowrap}
@media (max-width:820px){
  .ck-form-grid{grid-template-columns:1fr;gap:14px}
  .ck-col .inp{width:100%}
  .ck-slots{grid-template-columns:repeat(2,1fr)}
  .ck-slot{min-height:130px}
  .ck-preview{max-width:100%}
  #ckStoreFloat{display:block}
  .ck-storebar{top:6px}
}
/* v57 巡店签到详情：定位信息块（管理员审核重点） */
.ck-locbox{border:1px solid var(--line);border-radius:10px;background:var(--bg-soft,#f7f9fc);
  padding:10px 12px;margin-bottom:12px}
.ck-loc-row{display:flex;align-items:center;gap:10px;padding:4px 0;font-size:13.5px}
.ck-loc-row + .ck-loc-row{border-top:1px dashed var(--line)}
.ck-loc-k{width:64px;flex:none;color:var(--muted);font-size:12.5px}
/* 可点击放大的照片 */
.ck-zoomable{cursor:zoom-in}
.ck-zoomable:hover{outline:2px solid var(--brand);outline-offset:1px}
/* v57 照片放大 lightbox（全局层，z-index 高于弹窗 100 / toast 200） */
.ck-lightbox{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center}
.ck-lb-backdrop{position:absolute;inset:0;background:rgba(8,12,24,.82);cursor:zoom-out}
.ck-lb-stage{position:relative;max-width:92vw;max-height:86vh;display:flex;
  flex-direction:column;align-items:center;gap:10px}
.ck-lb-img{max-width:92vw;max-height:78vh;object-fit:contain;border-radius:8px;
  box-shadow:0 10px 40px rgba(0,0,0,.5);background:#fff}
.ck-lb-cap{color:#fff;font-size:13px;background:rgba(0,0,0,.5);padding:3px 12px;border-radius:999px}
.ck-lb-x{position:absolute;top:16px;right:18px;z-index:2;width:38px;height:38px;border:none;
  border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:18px;cursor:pointer}
.ck-lb-x:hover{background:rgba(255,255,255,.28)}
.ck-lb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:46px;height:64px;
  border:none;border-radius:10px;background:rgba(255,255,255,.14);color:#fff;font-size:30px;
  line-height:1;cursor:pointer}
.ck-lb-nav:hover{background:rgba(255,255,255,.28)}
.ck-lb-nav.prev{left:14px}

/* v61 竞品走访（巡店签到类目下新模块）：统计条 + 定位/竞品情报两栏 + 门头照片槽
   复用 .ck-* 平铺语言（section-title 左竖条 + ck-field + ck-slots），仅统计条用 .cv- 前缀 */
.cv-stats-flat{display:flex;gap:18px;align-items:baseline;margin-bottom:12px;flex-wrap:wrap}
.cv-stat{display:flex;align-items:baseline;gap:8px;color:var(--muted);font-size:13px}
.cv-stat b{font-size:22px;font-weight:600;color:var(--ink);line-height:1}
.cv-stat.pass b{color:var(--green)}
.cv-stat.reject b{color:var(--red)}

/* v61.1 竞品走访：多列自适应网格布局（替代原 300px 两栏，加宽过窄字段）+ 高德地址展示 + 门头行 */
.cv-form{display:flex;flex-direction:column;gap:12px}
.cv-form .section-title{margin-top:6px}
.cv-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px}
.cv-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.cv-field .inp{width:100%}
.cv-label{font-size:12.5px;color:var(--muted);font-weight:600}
/* 定位区：定位状态 + 高德解析地址并排（宽屏），窄屏堆叠 */
.cv-locbar{display:grid;grid-template-columns:300px 1fr;gap:12px 16px;align-items:start}
.cv-geo-wrap{min-width:0}
.cv-geocode{border:1px solid var(--line);border-radius:10px;background:var(--bg-soft,#f7f9fc);padding:10px 12px}
.cv-geocode.empty{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border-style:dashed}
.cv-geo-addr{font-size:14px;color:var(--ink);font-weight:600;line-height:1.5;word-break:break-all}
.cv-geo-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
/* 门头照片行：槽位 + 提交按钮 同行（宽屏） */
.cv-door-row{display:flex;gap:16px;align-items:flex-end;flex-wrap:wrap}
.cv-door-row .ck-slots{flex:0 1 auto}
.cv-submit-wrap{display:flex;align-items:center;gap:12px;margin-left:auto;flex:1 1 260px;justify-content:flex-end}
.cv-submit-wrap .btn{padding:9px 18px}
@media (max-width:1080px){
  .cv-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:820px){
  .cv-grid{grid-template-columns:1fr}
  .cv-locbar{grid-template-columns:1fr}
  .cv-door-row{flex-direction:column;align-items:stretch}
  .cv-door-row .ck-slots{max-width:100%}
  .cv-submit-wrap{flex-direction:column;align-items:stretch}
  .cv-submit-wrap .btn{width:100%}
}

/* v61.1 系统设置（管理员）：高德 Key 配置卡片 */
.cv-settings-card{border:1px solid var(--line);border-radius:12px;padding:16px 18px;background:var(--card,#fff);max-width:720px}
.cv-set-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.cv-set-title{font-size:15px;font-weight:700;color:var(--ink)}
.cv-set-desc{font-size:13px;color:var(--muted);line-height:1.7;margin-bottom:14px}
.cv-set-desc b{color:var(--ink);font-weight:600}

/* v60 任务量管理（平铺列表式）：统计条 + 月度表单平铺 + 年度表单独立模块 + 状态标签
   沿用 v56 平铺语言：无卡片框，section-title 左竖条分区，每指标一行 */
.tp-stats-flat{display:flex;gap:26px;align-items:baseline;flex-wrap:wrap;margin:2px 0 4px}
.tp-stat{display:flex;align-items:baseline;gap:8px;color:var(--muted);font-size:13px}
.tp-stat b{font-size:24px;font-weight:700;color:var(--ink);line-height:1}
.tp-stat.pass b{color:var(--green)}
.tp-stat.reject b{color:var(--red)}
.tp-flat{display:block}
.tp-flat-head{display:grid;grid-template-columns:1.4fr 1fr;gap:14px;align-items:end;
  padding:10px 0 2px;border-bottom:1px solid var(--line)}
.tp-flat-head .field label{font-size:12.5px;color:var(--muted)}
.tp-flat-note{font-size:12px;color:var(--muted);margin:10px 0 4px;line-height:1.6}
.tp-flat-note b{color:var(--ink);font-weight:600}
.tp-flat-note-sep{margin:0 6px;opacity:.5}
.tp-metrics{margin-top:4px}
.tp-metric-row{display:grid;grid-template-columns:1.5fr 1.2fr 40px;gap:12px;align-items:center;
  padding:8px 0;border-bottom:1px dashed var(--line)}
.tp-metric-row:last-child{border-bottom:none}
.tp-m-label{font-size:13px;color:var(--ink)}
.tp-m-act{font-size:13px;color:var(--ink);font-weight:600}
.tp-metric-row .input{max-width:260px}
.tp-metric-row .input:disabled{background:var(--bg-soft,#f3f4f6);color:var(--muted)}
.tp-m-unit{font-size:11.5px;color:var(--muted);text-align:right}
.tp-req{font-size:10.5px;color:var(--red);background:var(--red-soft,#fdecec);
  border:1px solid rgba(226,59,59,.3);border-radius:5px;padding:1px 5px;margin-left:6px;
  vertical-align:1px;white-space:nowrap}
.tp-flat-foot{display:flex;gap:10px;align-items:center;margin-top:14px;flex-wrap:wrap}
@media (max-width:820px){
  .tp-flat-head{grid-template-columns:1fr;gap:10px}
  .tp-metric-row{grid-template-columns:1.2fr 1fr 30px;gap:8px}
  .tp-m-label{font-size:12px}
  .tp-metric-row .input{max-width:none}
  .tp-stats-flat{gap:16px}
}
.ck-lb-nav.next{right:14px}

/* ---------- v66.1.2 配货清单打印模板 · 爱普生针式打印机规格 ----------
   规格说明（针式打印机打印适配）：
   · 纸张：A4 纵向 210×297mm（兼容 241×297 针式连续纸，左侧撕边/定位孔位留空）
   · 页边距：@page margin:0 零边距输出 —— Chrome/Edge 页边距为零时
     自动不打印地址/URL/日期/页码页眉页脚（即去掉截图里的杂质内容）；
     模板自身用 .print-sheet 内边距 12mm/10mm 控制版面，顶部 12mm 留拖纸余量
   · 版面：纯黑白（针式无色带灰度，灰底/灰字会印成重影发虚 → 全改纯黑线条+黑字）；
     宋体；pt 字号；表头加粗（针式加粗=字符重击一次，更黑更清晰）；
     0.4mm 纯黑实线表格（物理线宽≈1.5px@96dpi，不随像素网格舍入断线；细于 0.3mm 针式易断线）；
     行不跨页、跨页自动重复表头 */
#printArea{display:none}
.print-sheet{box-sizing:border-box;width:100%;margin:0 auto;padding:12mm 10mm 8mm;color:#000;
  font-family:SimSun,"宋体",serif;font-size:11pt;line-height:1.55}
.print-sheet h2{font-size:16pt;font-weight:bold;text-align:center;margin:0 0 2mm;letter-spacing:4pt}
.print-title{ text-align:center;font-size:9pt;margin-bottom:3mm}
.print-meta{display:flex;flex-wrap:wrap;gap:1mm 8mm;margin:0 0 1.5mm;font-size:10.5pt}
.print-meta b{font-weight:bold}
.print-table{width:100%;border-collapse:collapse;margin-top:3mm;font-size:10.5pt}
.print-table th,.print-table td{border:0.4mm solid #000;padding:1.6mm 2mm;text-align:center;
  vertical-align:middle;color:#000;background:#fff}
.print-table th{font-weight:bold}
.print-table td.l{text-align:left}
.print-table td.c{text-align:center}
.print-table tfoot td{font-weight:bold}
.print-table thead{display:table-header-group}   /* 跨页时重复表头 */
.print-table tbody tr{page-break-inside:avoid}    /* 单行不跨页 */
.print-box{font-size:12pt;line-height:1;display:inline-block}
.print-sign{display:flex;justify-content:space-between;margin-top:9mm;font-size:10.5pt}
.print-foot{margin-top:4mm;font-size:8.5pt;color:#000;text-align:right}
/* ============ v94 库管实收定位 · 二级页面平铺 ============ */
/* 卡片网格：桌面多列自适应，手机单列（.grid-2 在 ≤820px 已是 1fr） */
.vr2-cards{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}
.vr2-card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:14px 16px;min-width:0;
}
.vr2-card-head{display:flex;flex-direction:column;gap:2px;min-width:0}
.vr2-card-head b{font-size:14px;line-height:1.35;word-break:break-all}
.vr2-card-foot{
  margin-top:12px;padding-top:10px;border-top:1px dashed var(--line);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.vr2-card-foot .vr2-remark{flex:1;min-width:150px}
/* 底部粘性「确认实收」操作栏（仅移动端显示；悬于一级导航上方） */
.vr2-stickybar{display:none}
.vr2-sub-desktop{display:inline-flex}
@media (max-width:820px){
  .vr2-cards{grid-template-columns:1fr;gap:10px}
  .vr2-card{padding:12px 14px}
  .vr2-card-head b{font-size:13.5px}
  .vr2-sub-desktop{display:none}
  .vr2-stickybar{
    display:flex;align-items:center;justify-content:space-between;gap:10px;
    position:fixed;left:0;right:0;bottom:0;z-index:50;
    padding:10px 14px calc(10px + env(safe-area-inset-bottom));
    background:rgba(255,255,255,.94);
    -webkit-backdrop-filter:blur(12px) saturate(160%);backdrop-filter:blur(12px) saturate(160%);
    border-top:1px solid var(--line);box-shadow:0 -6px 18px rgba(20,30,60,.10);
  }
  .vr2-stickybar .btn{flex:0 1 auto;max-width:70vw;white-space:nowrap;font-size:13px}
  /* 给粘性操作栏让位：内容底部留白（避开一级导航 + 操作栏两层） */
  body.vr2-receive .content{padding-bottom:150px}
}

/* ============ v95 配货/发货单 · 移动端卡片化 ============ */
/* 双轨渲染：卡片网格（.os-mgrid）默认显示；≤820px 时隐藏原表格（.table-wrap 互斥），
   桌面反之——表格保留横滑能力，卡片在小屏信息层级更清晰 */
.os-mgrid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.os-card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:14px 16px;min-width:0;display:flex;flex-direction:column;gap:9px;
}
.os-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}
.os-no{font-size:15px;font-weight:800;letter-spacing:.2px;word-break:break-all;min-width:0}
.os-meta{display:flex;align-items:center;flex-wrap:wrap;row-gap:2px;font-size:13px;color:var(--muted)}
.os-meta .b b{color:var(--ink);font-size:14px}
.os-meta .sep{margin:0 8px;color:var(--line)}
.os-store{display:flex;align-items:center;gap:6px;font-size:13px;flex-wrap:wrap;min-width:0}
.os-store .os-time{margin-left:auto;font-size:11.5px;color:var(--muted);white-space:nowrap}
.os-tags{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.os-actions{display:flex;flex-direction:column;gap:8px;margin-top:2px}
.os-actions .btn{min-height:44px;font-size:14px;justify-content:center}
.os-wait{font-size:12.5px;color:var(--muted);padding:10px 0;text-align:center}
/* 卡片内「左右滑动」徽标（若表格保留在 DOM 中被隐藏，无溢出则徽标不会出现，无需处理） */
@media (max-width:820px){
  /* 移动端：显示卡片、隐藏表格 */
  .os-mgrid{grid-template-columns:1fr;gap:10px}
  .os-mgrid + .table-wrap{display:none}
  .os-card{padding:13px 14px}
  .os-no{font-size:14.5px}
  .os-actions .btn{min-height:46px}
}
@media (min-width:821px){
  /* 桌面：保留表格，隐藏卡片（避免双份信息） */
  .os-mgrid{display:none}
}

/* v98：商品管理页·分类导航复用门店同款 .mall-catnav / .mall-cat（style.css:279），无新增样式 */

@media print{
  html,body{width:210mm;height:auto;margin:0;padding:0;background:#fff}
  @page{size:210mm 297mm;margin:0}   /* A4 纵向·零边距（抑制浏览器页眉页脚） */
  body *{visibility:hidden}
  #printArea,#printArea *{visibility:visible}
  #printArea{display:block;position:absolute;left:0;top:0;width:210mm;background:#fff}
}

/* v101 全局数据导出栏（管理员/财务）：模块内容上方的「📤 导出数据」按钮条 */
.export-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 14px;margin-bottom:12px;background:var(--bg-soft,#f7f9fc);border:1px solid var(--line);border-radius:10px}
.export-bar .btn{white-space:nowrap}

/* v102 代理商利润报表重构：取消卡片式 KPI，改为摘要条 + 分层利润表 + 可排序费用表 */
.pf-toolbar{gap:10px;flex-wrap:wrap}
.section-title.inline{margin:0;font-size:15px}
.pf-select{max-width:170px}
/* 指标摘要条：一行四指标（净利润高亮），窄屏两两换行 */
.pf-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:4px}
.pf-metric{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.pf-metric .pf-l{font-size:12.5px;color:var(--muted);letter-spacing:.2px}
.pf-metric .pf-v{font-size:24px;font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums}
.pf-metric .pf-s{font-size:12px;color:var(--muted)}
.pf-metric--net{border-width:1.5px}
/* 利润构成表：金额右对齐等宽，小计/总计行强调 */
.pf-table .pf-num{font-variant-numeric:tabular-nums;text-align:right;font-weight:600}
.pf-table tr.pf-subtotal td{background:var(--green-soft)}
.pf-table tr.pf-total td{background:var(--brand-soft,#eef3ff);border-top:2px solid var(--brand);font-weight:800}
.pf-table .pf-strong{font-weight:700}
/* 响应式：窄屏摘要条两两换行、工具栏纵向堆叠 */
@media(max-width:900px){
  .pf-summary{grid-template-columns:repeat(2,1fr)}
  .pf-metric .pf-v{font-size:20px}
  .pf-toolbar{flex-direction:column;align-items:stretch}
  .pf-toolbar .spacer{display:none}
  .pf-select{max-width:none}
}
@media(max-width:480px){
  .pf-metric .pf-v{font-size:18px}
  .pf-metric{padding:12px}
}

/* =========================================================
   v103 直营店专属功能（上下班打卡 / 费用支出申请 / 旧车置换 / 人员管理）
   ========================================================= */
.v103-tbl td{vertical-align:top}
.v103-tbl .mono{font-family:var(--mono,monospace);font-size:12.5px;white-space:nowrap}
.v103-tbl .v103-num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.v103-tbl .v103-clip{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v103-kv{display:grid;gap:8px}
.v103-kv>div{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.v103-kv .muted{min-width:86px;flex-shrink:0}
/* 打卡弹层摄像头 */
.v103-cam-wrap{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.v103-cam-video{width:100%;max-width:420px;max-height:260px;border-radius:12px;background:#0b1220;object-fit:cover}
/* 旧车置换：3 照片槽 + 视频 */
.v103-ve-form{display:flex;flex-direction:column}
.v103-ve-photo{position:relative;width:120px;height:90px;border-radius:10px;border:1.5px dashed var(--line);cursor:pointer;overflow:hidden;background:var(--brand-soft)}
.v103-ve-ph-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;font-size:12px;color:var(--muted);padding:6px}
.v103-ve-ph-done{position:absolute;top:4px;right:6px;color:var(--green);font-weight:800}
.v103-ve-photo:hover{border-color:var(--brand)}
.v103-ve-video{flex:1;min-width:220px}
/* 响应式 */
@media(max-width:900px){
  .v103-ve-photo{width:100px;height:76px}
  .v103-kv .muted{min-width:70px}
}
@media(max-width:480px){
  .v103-ve-photo{width:46%;height:80px}
  .v103-ve-photo:nth-child(3){width:46%}
  .v103-tbl .v103-clip{max-width:110px}
}

/* =========================================================
   v105 直营店 5 模块（打卡/费用/旧车/人员/门店利润）移动端专属适配
   —— 不复用桌面样式：触控目标加大、表单字段全宽单列、上下班卡纵排、
      多列表格横向滚动（容器 overflow-x，不撑破页面），字号/间距优化。
   ========================================================= */
/* 表格横向滚动容器：限宽到内容区，内部 min-width 表格可左右滑，页面本身不横滚 */
.v103-tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
/* 触控目标：手机按钮/输入框最小可点高度，避免点错 */
@media (max-width:820px){
  .v103-tbl-scroll{border-radius:10px}
  .v103-tbl th{padding:11px 12px}
  .v103-tbl td{padding:13px 12px;font-size:13px}
  .v103-tbl .muted.small{font-size:11.5px}
  #dashMain .btn.small{padding:9px 12px;font-size:13px;line-height:1.2}
  #dashMain .inp{min-height:44px;font-size:15px}
  #dashMain .inp:not([type=month]):not([type=date]):not([type=number]){width:100% !important;min-width:0 !important;flex:1 1 100% !important}
  #dashMain textarea.inp{width:100% !important;min-width:0 !important;flex:1 1 100% !important}
  #dashMain .row{row-gap:12px}
  /* 打卡上下班双卡：纵排单列（桌面为左右并排） */
  .clk-punch-card{flex:1 1 100% !important;min-width:0 !important;margin-bottom:0}
  /* 旧车置换 3 照片槽：纵排占满宽 */
  .v103-ve-photo{width:100% !important;height:96px !important;flex:0 0 auto}
  .v103-ve-photo:nth-child(3){width:100% !important}
  .v103-ve-video{min-width:0 !important;flex:1 1 100%}
  /* 打卡弹层定位行：定位按钮全宽、文字按钮加大（.v103-cam-wrap 默认 flex-start，需 stretch 撑满） */
  .v103-cam-wrap{align-items:stretch}
  .v103-cam-wrap .row{row-gap:10px;width:100%}
  .v103-cam-wrap #clkLocBtn{width:100%;min-height:46px;font-size:14.5px}
  .v103-cam-wrap textarea{width:100% !important;min-width:0 !important;min-height:64px}
}
@media (max-width:480px){
  #dashMain .btn.small{padding:10px 13px}
  #dashMain .inp{font-size:16px} /* 16px 防 iOS 聚焦自动放大 */
  .v103-cam-video{max-height:220px}
}

/* =========================================================
   v107 门店费用支出：新建费用申请 + 人员薪资申请 平铺流式表单
   （取消卡片式，section-title 分区；每栏标题+控件上下对齐、间距统一）
   ========================================================= */
.sea-flat{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px 14px;
  align-items:start;padding:2px 0 4px;margin-bottom:14px}
.sea-flat .ck-field{margin:0}
.sea-flat .ck-field .inp{width:100%;min-width:0}
.sea-flat .ck-field input[type=file]{min-height:38px;font-size:12.5px;color:var(--muted)}
.sea-flat .ck-field input[type=file]::file-selector-button{border:1px solid var(--line);border-radius:7px;
  background:var(--card,#fff);color:var(--ink);padding:6px 12px;font-size:12.5px;cursor:pointer;margin-right:8px}
.sea-flat-wide{grid-column:1/-1}
.sea-bear-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.sea-bear-row .inp{width:280px;max-width:100%;flex:0 1 auto}
.sea-bear-row .muted.small{min-height:20px}
.sea-flat-actions{grid-column:1/-1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-top:2px}
.sea-total{display:flex;align-items:center;gap:6px;min-height:38px;padding:6px 12px;border:1px solid var(--line);
  border-radius:8px;background:var(--bg,#f7f8fa);font-size:13px}
.sea-total b{font-size:17px;color:var(--brand,#2563eb)}
@media (max-width:820px){
  .sea-flat{grid-template-columns:1fr;gap:14px}
}

/* v108：销售单（store_profit）平铺布局 + 可搜索商品选择 + 销售记录平铺列表 */
.ss-flat{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px 14px;
  align-items:start;padding:2px 0 4px;margin-top:12px}
.ss-flat .ck-field{margin:0}
.ss-flat .ck-field .inp,.ss-flat .ck-field .sp-search{width:100%;min-width:0}
.ss-flat-wide{grid-column:1/-1}
.ss-gift-block{grid-column:1/-1;border-top:1px dashed var(--line,#e5e7eb);padding-top:10px;margin-top:2px}
.ss-gift-block .section-title{font-size:14px}
.ss-submit-row{grid-column:1/-1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-top:2px}
/* 可搜索下拉（通用：配件商品/整车订单行/礼品/旧车） */
.sp-search{position:relative;width:100%}
.sp-search .inp{width:100%;padding-right:26px;cursor:pointer}
.sp-search .sp-search-caret{position:absolute;right:10px;top:50%;transform:translateY(-50%);
  color:var(--muted);pointer-events:none;font-size:10px}
.sp-search-menu{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:60;
  background:var(--card,#fff);border:1px solid var(--line,#e5e7eb);border-radius:9px;
  box-shadow:0 8px 24px rgba(0,0,0,.14);max-height:260px;overflow:auto;display:none}
.sp-search-menu.on{display:block}
.sp-search-menu .sp-sm-item{padding:8px 12px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--line,#eef0f3)}
.sp-search-menu .sp-sm-item:last-child{border-bottom:none}
.sp-search-menu .sp-sm-item:hover,.sp-search-menu .sp-sm-item.on{background:var(--bg,#f2f4f8)}
.sp-search-menu .sp-sm-item.sel{background:var(--brand-soft,#e8efff);color:var(--brand,#2563eb);font-weight:600}
.sp-search-menu .sp-sm-empty{padding:12px;color:var(--muted);font-size:12.5px;text-align:center}
.sp-search-menu .sp-sm-item .muted{display:block;font-size:11px;margin-top:2px}
/* 销售记录平铺列表：每行带字段小标题 */
.ssr-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}
.ssr-row{background:var(--card,#fff);border:1px solid var(--line,#e5e7eb);border-radius:12px;padding:14px 16px}
.ssr-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding-bottom:10px;margin-bottom:10px;border-bottom:1px dashed var(--line,#e5e7eb)}
.ssr-head .ssr-no{font-weight:700;font-size:14px}
.ssr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px 14px}
.ssr-cell .ck-label{display:block;margin-bottom:3px}
.ssr-cell .ssr-val{font-size:14px;color:var(--ink)}
.ssr-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px;padding-top:10px;
  border-top:1px dashed var(--line,#e5e7eb)}
@media (max-width:820px){
  .ss-flat{grid-template-columns:1fr;gap:14px}
  .ssr-grid{grid-template-columns:repeat(2,1fr)}
}

/* v108.7 卡片流水明细加载占位 spinner */
.fin-ledger-spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);
  border-top-color:var(--brand);border-radius:50%;animation:fin-ledger-spin .7s linear infinite}
@keyframes fin-ledger-spin{to{transform:rotate(360deg)}}

/* v112 手机端入库审批流转：卡片列表 + 横向进度节点（stepper），层级分明 */
.inflow-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}
.inflow-empty{padding:20px 8px;text-align:center;background:var(--card,#fff);border:1px dashed var(--line,#e6e9f0);border-radius:12px}
.inflow-card{background:var(--card,#fff);border:1px solid var(--line,#e6e9f0);border-radius:14px;padding:14px;min-width:0;box-shadow:0 1px 2px rgba(20,30,60,.04)}
.inflow-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.inflow-card-no{font-weight:800;font-size:14.5px;color:var(--ink,#1c2330);display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
/* 横向进度节点：4 节点，已完成=绿勾、当前=品牌色高亮、未达=灰 */
.ist{display:flex;align-items:flex-start;gap:4px;margin:6px 0 4px;overflow:hidden}
.ist-node{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;min-width:0}
.ist-dot{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:800;background:var(--bg,#f4f6fa);color:var(--muted,#7a869a);border:2px solid var(--line,#e6e9f0)}
.ist-node span:last-child{font-size:10.5px;color:var(--muted,#7a869a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:62px;text-align:center}
.ist-node.done .ist-dot{background:var(--green-soft,#e6f7ee);border-color:var(--green,#18a05a);color:var(--green,#18a05a)}
.ist-node.done span:last-child{color:var(--ink,#1c2330)}
.ist-node.cur .ist-dot{background:var(--brand,#1b4fd8);border-color:var(--brand,#1b4fd8);color:#fff;box-shadow:0 0 0 3px rgba(27,79,216,.18)}
.ist-node.cur span:last-child{color:var(--brand,#1b4fd8);font-weight:700}
.ist-line{flex:1;height:2px;background:var(--line,#e6e9f0);margin-top:13px;min-width:6px}
.inflow-card-meta{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:10px;font-size:12.5px;color:var(--muted,#7a869a)}
.inflow-card-ops{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line,#e6e9f0)}
.inflow-card-ops .btn{flex:none}
