/* v0.2 外壳样式：左侧图标轨道 / 顶部模块分页 / 摘要带 / 合并页子页
   设计目标：同事每天只看得到「六件事」，其余的收进模块里，不再是一屏十几个入口。 */
:root {
  --rail: 76px;
  --top: 76px;
  --ink: #0b1220;
  --mut: #64748b;
  --mut2: #94a3b8;
  --line: #e9eef5;
  --bg: #f5f7fa;
  --brand: #10b981;
  --brand0: #0d9488;
  --radius: 16px;
}

body { background: var(--bg); }
#app { display: grid; grid-template-columns: 76px 1fr; gap: 10px; height: calc(100vh - 44px); padding: 8px 10px 10px; box-sizing: border-box; overflow: hidden; }

/* ── 左侧轨道 ── */
.rail {
  background: #0e1626; border-radius: 18px; box-shadow: 0 12px 28px rgba(11,18,32,.18);
  display: flex; flex-direction: column; align-items: center;
  padding: 14px 0 10px; gap: 6px; position: relative; z-index: 20;
}
.rl {
  width: 56px; height: 58px; border: 0; background: transparent; color: #c3cfe2;
  border-radius: 14px; cursor: pointer; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 4px; position: relative;
  transition: background .16s ease, color .16s ease, transform .16s ease;
  font-family: inherit;
}
.rl .ico { font-size: 19px; line-height: 1; display: flex; }
.rl .ico svg { stroke-width: 1.8; }
.rl .lb { font-size: 10.5px; letter-spacing: .4px; font-weight: 700; opacity: .95; }
.rl:hover { background: rgba(255,255,255,.10); color: #ffffff; }
.rl.on { background: linear-gradient(165deg, #10b981, #0d9488); color: #fff; box-shadow: 0 6px 16px -6px rgba(16,185,129,.55); }
.rl.on .lb { color: #fff; opacity: 1; }
.rl.on .ico svg { filter: drop-shadow(0 0 5px rgba(94,234,212,.55)); }
.rl.on::before {
  content: ''; position: absolute; left: -14px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 26px; border-radius: 3px; background: var(--brand);
  box-shadow: 0 0 8px rgba(16,185,129,.65);
}
.rl .bdg {
  position: absolute; top: 6px; right: 7px; min-width: 16px; height: 16px; padding: 0 4px;
  background: #f59e0b; color: #3b2600; font-size: 10px; font-weight: 700; border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
}

/* ── 工作区 ── */
.workspace { display: flex; flex-direction: column; min-width: 0; height: 100%; border-radius: 16px; overflow: hidden; }

.topbar {
  height: var(--top); flex: none; display: flex; align-items: center; gap: 20px;
  margin: 0 26px; padding: 0 20px; background: #fff; border: 1px solid var(--line); border-radius: 16px;
}
.tb-left { display: flex; align-items: baseline; gap: 9px; min-width: 260px; }
.crumb { display: none; }
.crumb:not(:empty)::after { content: '/'; margin-left: 9px; color: #d5dde8; }
.topbar h1 { font-size: 20px; font-weight: 800; letter-spacing: -.4px; margin: 0; color: var(--ink); }
.psub { display: none; }

.tb-mid { flex: 1; display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; justify-content: center; }
.tb-mid::-webkit-scrollbar { display: none; }
/* 页签只在顶栏内生效（.tb 与叠卡内容区撞名，不带前缀会把 todo 行也染色） */
.topbar .tb {
  border: 0; background: transparent; color: #4b5b73; font-family: inherit; font-size: 13px;
  padding: 8px 13px; border-radius: 10px; cursor: pointer; white-space: nowrap; transition: all .14s;
}
.topbar .tb:hover { background: #f1f5f9; color: var(--ink); }
.topbar .tb.on { background: var(--ink); color: #fff; font-weight: 700; font-size: 14px; padding: 8px 16px; }
.topbar .tb-cur { font-size: 13px; color: var(--mut); }

.tb-right { display: flex; align-items: center; gap: 14px; flex: none; }
.pact { display: flex; gap: 8px; align-items: center; }
.htxt { font-size: 11.5px; color: var(--mut2); white-space: nowrap; }

/* 头像与系统菜单 */
.who { position: relative; }
.who .av {
  width: 34px; height: 34px; border-radius: 50%; background: var(--ink); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700;
  cursor: pointer; user-select: none;
}
.who-pop {
  position: absolute; right: 0; top: 44px; width: 196px; background: #fff;
  border: 1px solid var(--line); border-radius: 14px; box-shadow: 0 18px 40px rgba(15,23,42,.14);
  padding: 8px; z-index: 50;
}
.who-head { padding: 8px 10px 10px; border-bottom: 1px solid var(--line); margin-bottom: 6px; display: flex; flex-direction: column; gap: 2px; }
.who-head b { font-size: 13px; }
.who-head span { font-size: 11px; color: var(--mut2); }
.who-pop .mi {
  display: block; width: 100%; text-align: left; border: 0; background: transparent;
  padding: 8px 10px; border-radius: 8px; font-family: inherit; font-size: 12.5px;
  color: #334155; cursor: pointer;
}
.who-pop .mi:hover { background: #f1f5f9; }
.who-pop .mi.danger { color: #dc2626; margin-top: 4px; border-top: 1px solid var(--line); border-radius: 0 0 8px 8px; padding-top: 10px; }

/* ── 内容区 ── */
.view { flex: 1; overflow-y: auto; padding: 22px 26px 48px; }
.view > * + * { margin-top: var(--gap); }

/* 卡片骨架：边框更浅 + 一层薄阴影替代「线条」，头部去掉分隔线，留白给足呼吸感 */
.view .card, .card {
  background: #fff; border: 1px solid #eef2f8; border-radius: var(--radius);
  box-shadow: 0 1px 3px rgba(15, 23, 42, .04), 0 6px 18px -12px rgba(15, 23, 42, .08);
}
.view .card-h, .card-h { padding: 16px 20px 10px; font-size: 13px; border-bottom: 0; }
.view .card-b, .card-b { padding: 6px 20px 20px; }
.view .tbl th { font-size: 11.5px; padding: 11px 9px; }
.view .tbl td { padding: 12px 9px; font-size: 12.5px; border-bottom-color: #f3f6fa; }

/* 摘要带：把 kpis 做成一条连体卡片，视觉上不再是五张碎卡 */
.view .kpis {
  display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0;
  background: #fff; border: 1px solid #eef2f8; border-radius: var(--radius);
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(15, 23, 42, .04), 0 6px 18px -12px rgba(15, 23, 42, .08);
}
.view .kpis .kpi {
  border: 0; border-radius: 0; border-right: 1px solid #f3f6fa;
  padding: 18px 20px; background: #fff;
}
.view .kpis .kpi:last-child { border-right: 0; }
.view .kpis .kpi .l { font-size: 11.5px; color: var(--mut); }
.view .kpis .kpi .v { font-size: 27px; font-weight: 800; letter-spacing: -.8px; margin-top: 6px; }
.view .kpis .kpi .v small { font-size: 11.5px; margin-left: 3px; color: var(--mut2); font-weight: 600; }
.view .kpis .kpi .d { font-size: 11px; color: var(--mut2); margin-top: 5px; }

/* 两列布局 */
.view .grid2 { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 16px; align-items: stretch; }
.view .grid2 > .card { height: 100%; }
@media (max-width: 1320px) { .view .grid2 { grid-template-columns: 1fr; } }

/* 骨架屏 */
.skeleton { display: flex; flex-direction: column; gap: 12px; }
.skeleton i {
  display: block; height: 74px; border-radius: var(--radius);
  background: linear-gradient(90deg, #eef2f7 25%, #f7fafc 37%, #eef2f7 63%);
  background-size: 400% 100%; animation: sk 1.3s ease infinite;
}
.skeleton i:nth-child(2) { height: 260px; }
@keyframes sk { 0% { background-position: 100% 50% } 100% { background-position: 0 50% } }

/* 合并页子标签 */
.subtabs { display: flex; gap: 6px; margin-bottom: var(--gap); flex-wrap: wrap; }
.subtabs .st {
  border: 1px solid var(--line); background: #fff; color: #475569; font-family: inherit;
  font-size: 12.5px; padding: 7px 14px; border-radius: 999px; cursor: pointer; display: inline-flex; gap: 6px; align-items: center;
}
.subtabs .st:hover { border-color: #cbd5e1; color: var(--ink); }
.subtabs .st.on { background: var(--ink); border-color: var(--ink); color: #fff; font-weight: 600; }
.subtabs .st i { font-style: normal; font-size: 10.5px; background: rgba(148,163,184,.22); padding: 1px 6px; border-radius: 999px; }
.subtabs .st.on i { background: rgba(255,255,255,.22); }
.subview > * + * { margin-top: 16px; }

/* 让旧页面的 hero 与新外壳对齐（注意：.hero 布局/配色只在 ui.css 定义，这里禁止再写 .hero） */
.hero { border-radius: var(--radius); }

/* 窄屏兜底 */
@media (max-width: 1080px) {
  .tb-left { min-width: 0; }
  .psub { display: none; }
  .view { padding: 16px; }
  .topbar { margin: 0 16px; }
}

/* 总览：左右两栏 + 模块状态行 */
.row{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:16px;margin-top:16px;align-items:start}
.mstate{display:flex;align-items:center;gap:9px;padding:11px 2px;border-bottom:1px dashed #eef2f7;font-size:12.5px;cursor:pointer}
.mstate:last-child{border-bottom:0}
.mstate b{width:44px;color:#334155}
.mstate .a{color:#0f172a}
.mstate .b{margin-left:auto;color:#94a3b8;font-size:11.5px}
.mstate i{font-style:normal;color:#cbd5e1}
.mstate .dot{width:7px;height:7px;border-radius:50%;background:#10b981;flex:none}

/* 总览右上角：今日上架（独立样式，避免和 ui.css 的 .hero 冲突） */
.hero2{background:linear-gradient(135deg,#0d9488,#10b981);border-radius:16px;padding:18px 20px;color:#fff;margin-bottom:16px}
.hero2 .t{font-size:12px;opacity:.92}
.hero2 .n{font-size:44px;font-weight:800;letter-spacing:-2px;line-height:1.05;margin:4px 0 12px;display:flex;align-items:baseline;gap:6px}
.hero2 .n span{font-size:12px;font-weight:600;opacity:.9;letter-spacing:0}
.hero2 .n em{font-size:12.5px;font-style:normal;font-weight:600;opacity:.88;margin-left:auto}
.hero2 .b{height:7px;border-radius:6px;background:rgba(255,255,255,.28);overflow:hidden}
.hero2 .b i{display:block;height:100%;background:#fff;border-radius:6px}
.hero2 .f{display:flex;justify-content:space-between;font-size:11px;opacity:.92;margin-top:9px}
.hero2 .bt{display:flex;gap:8px;margin-top:14px}
.hero2 .bt button{background:#fff;color:#0b1220;border:0;border-radius:10px;padding:9px 14px;font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;white-space:nowrap}
.hero2 .bt button.g{background:rgba(255,255,255,.18);color:#fff}

/* ===== 甘特图 ===== */
.gantt{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
.gantt-head{display:flex;align-items:center;height:28px;background:#f8fafc;border-bottom:1px solid var(--line)}
.gantt-head .gn{width:210px;flex:none;padding-left:12px;font-size:11px;color:#94a3b8}
.gantt-head .gt{flex:1;position:relative;height:100%}
.gantt-head .gt span{position:absolute;top:7px;transform:translateX(-50%);font-size:10.5px;color:#94a3b8;white-space:nowrap}
.gt-group{padding:7px 12px;font-size:11.5px;color:#64748b;background:#fcfdff;border-top:1px solid #f1f5f9;font-weight:600}
.grow{display:flex;align-items:center;height:30px;border-top:1px solid #f8fafc}
.grow:hover{background:#fbfdff}
.grow .gn{width:210px;flex:none;padding:0 12px;font-size:11.5px;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.grow .gt{flex:1;position:relative;height:100%;background-image:repeating-linear-gradient(90deg,#f1f5f9 0 1px,transparent 1px 100%);background-size:calc(100%/12) 100%}
.grow .gt::after{content:'';position:absolute;left:11.6667%;top:0;bottom:0;width:2px;background:#ef4444;opacity:.75}
.gbar{position:absolute;top:8px;height:13px;border-radius:7px;background:linear-gradient(90deg,#0d9488,#10b981);min-width:6px}
.gbar.tail{background:#99f6e4}
.gantt-legend{display:flex;gap:16px;padding:10px 12px;border-top:1px solid var(--line);font-size:11px;color:#64748b}
.gantt-legend .lg{display:inline-block;width:14px;height:8px;border-radius:4px;margin-right:6px;vertical-align:middle}
.gantt-legend .lg.solid{background:linear-gradient(90deg,#0d9488,#10b981)}
.gantt-legend .lg.tail{background:#99f6e4}
.gantt-legend .lg.line{background:#ef4444;width:2px;height:12px}

/* ===== 表单 ===== */
.form-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px 14px;align-items:end}
.form-row label{display:flex;flex-direction:column;gap:6px;font-size:11.5px;color:#64748b;min-width:0}
.form-row .inp,.form-row input,.form-row select{width:100%;height:34px;border:1px solid var(--line);border-radius:10px;padding:0 11px;font-family:inherit;font-size:12.5px;color:#0f172a;background:#fff;outline:none;box-sizing:border-box}
.form-row .inp:focus,.form-row input:focus,.form-row select:focus{border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.12)}
.form-row .btn{justify-self:start;align-self:end}

/* ===== 表格 ===== */
.tbl-wrap{overflow:auto;border-radius:10px}
.tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.tbl th{font-weight:400;font-size:11.5px;color:#94a3b8;text-align:left;padding:10px 10px;border-bottom:1px solid var(--line);white-space:nowrap;background:#fff}
.tbl td{padding:11px 10px;border-bottom:1px solid #f4f7fb;vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl tbody tr:hover td{background:#fbfdff}
.tbl .num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
.tbl .empty{padding:26px 0;text-align:center;color:#94a3b8;font-size:12px}
.tbl tfoot td{padding:11px 10px;border-top:1px solid var(--line);font-weight:700;background:#fbfdff}

/* ===== 空态 / 提示 ===== */
.empty-box{border:1px dashed var(--line);border-radius:12px;padding:26px 16px;text-align:center;color:#94a3b8;font-size:12px}
.empty-box b{display:block;color:#475569;font-size:13px;margin-bottom:6px}
.view > * + *{margin-top:16px}
.view .card + .card{margin-top:16px}
/* 网格内的相邻卡不吃堆叠间距：grid 自带 gap，这条 margin 会把右卡整体压低 16px 造成左右错位 */
.view .grid2 > .card + .card{margin-top:0}

.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:12px 14px}
.form-grid label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:#475569;font-weight:500;line-height:1.35}
.form-grid .inp,.form-grid input{height:34px;border:1px solid var(--line);border-radius:10px;padding:0 11px;font-family:inherit;font-size:12.5px;color:#0f172a;background:#fff;outline:none;width:100%}
.form-grid .inp:focus,.form-grid input:focus{border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.12)}

/* ===== 自绘标题栏（无边框窗口） =====
   fixed 悬浮在窗口顶部：登录页与主界面都压在最上层，不再被登录卡挤走 */
.titlebar{
  display:none;position:fixed;top:0;left:0;right:0;height:44px;z-index:90;
  align-items:center;background:transparent;user-select:none;
}
body.sa-desktop{padding-top:44px}
body.sa-desktop .titlebar{display:flex}
.titlebar .tb-brand{display:flex;align-items:center;gap:8px;padding-left:14px;font-size:12.5px;color:#334155;-webkit-app-region:drag}
.titlebar .tb-logo{width:20px;height:20px;border-radius:6px;background:linear-gradient(135deg,#0d9488,#10b981);color:#fff;font-style:normal;font-size:11px;display:flex;align-items:center;justify-content:center;font-weight:700}
.titlebar .tb-brand b{font-weight:700}
.titlebar .tb-drag{flex:1;height:100%;-webkit-app-region:drag}
.titlebar .tb-win{display:flex;align-items:center;gap:3px;padding-right:10px;-webkit-app-region:no-drag}
.titlebar .wb{
  width:38px;height:30px;border:0;background:transparent;color:#8b98ad;border-radius:9px;
  cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;
  transition:background .14s ease,color .14s ease;
}
.titlebar .wb:hover{background:#e8edf4;color:#1e293b}
.titlebar .wb.close:hover{background:#ef4444;color:#fff}

/* 表单字段：标签在上，控件在下，避免挤在一起 */
.fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.fld > span{font-size:11.5px;color:#64748b}
.fld .inp,.fld select{width:100%;box-sizing:border-box;height:34px;border:1px solid #e2e8f2;border-radius:9px;padding:0 10px;font-family:inherit;font-size:12.5px;background:#fff;color:#0f172a}
.fld .inp:focus,.fld select:focus{outline:none;border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.12)}
.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}

/* 右下角常驻 Agent 按钮（之前只有 class 没有样式，会露成浏览器原生按钮） */
.fab{
  position:fixed; right:22px; bottom:22px; z-index:60;
  width:52px; height:52px; border-radius:50%; border:0; cursor:pointer;
  background:linear-gradient(135deg,#0d9488,#10b981); color:#fff;
  font-family:inherit; font-size:15px; font-weight:800;
  box-shadow:0 10px 24px rgba(13,148,136,.38);
  display:flex; align-items:center; justify-content:center;
  transition:transform .16s ease, box-shadow .16s ease;
}
.fab:hover{ transform:translateY(-2px); box-shadow:0 14px 30px rgba(13,148,136,.45); }

/* ---------- 右下角 Agent 抽屉（新结构：section.agent > header + .agent-log + .agent-in） ---------- */
.agent{
  position:fixed; right:22px; bottom:84px; z-index:61;
  width:392px; max-height:min(620px, 76vh);
  background:#0b1220; border-radius:16px; overflow:hidden;
  display:flex; flex-direction:column;
  box-shadow:0 26px 60px rgba(2,6,23,.42);
  border:1px solid #1b2740;
}
.agent.hidden{ display:none }
.agent > header{
  display:flex; align-items:center; gap:8px; padding:11px 13px;
  border-bottom:1px solid #1c2839; color:#e8eef7; font-size:12.5px; font-weight:800;
}
.agent > header .mode{
  margin-left:auto; font-size:10px; color:#5eead4; font-weight:600;
  border:1px solid rgba(94,234,212,.3); border-radius:20px; padding:2px 8px;
}
.agent > header .x{
  border:0; background:transparent; color:#8b98ad; font-size:16px; line-height:1; cursor:pointer;
}
.agent > header .x:hover{ color:#fff }
.agent-log{ flex:1; overflow:auto; padding:12px; display:flex; flex-direction:column; gap:9px }
.agent-log .msg{ font-size:12px; line-height:1.55; border-radius:11px; padding:9px 11px; max-width:92% }
.agent-log .msg.me{ align-self:flex-end; background:#10b981; color:#04231c; font-weight:600 }
.agent-log .msg.bot{ align-self:flex-start; background:#131c2b; color:#dbe6f5 }
.agent-log .msg .tr{ margin-top:7px; font-size:10px; color:#7c8aa3; border-top:1px dashed #26344a; padding-top:6px }
.agent-log .confirm{ display:flex; align-items:center; gap:8px; margin-top:8px; font-size:10.5px; color:#8b98ad }
.agent-in{ display:flex; gap:7px; padding:10px; border-top:1px solid #1c2839 }
.agent-in input{
  flex:1; height:34px; border-radius:9px; border:1px solid #26344a; background:#131c2b;
  color:#e8eef7; padding:0 10px; font-size:12px; outline:none; font-family:inherit;
}
.agent-in input:focus{ border-color:#0f766e }
.agent-in .btn{ height:34px; padding:0 14px; border-radius:9px; border:0; cursor:pointer; font-family:inherit; font-size:12px; font-weight:700 }

/* 右下角通知卡（SA.notify 用；容器不存在时自动建） */
#saToasts{ position:fixed; right:22px; bottom:84px; z-index:70; display:flex; flex-direction:column; gap:9px; pointer-events:none }
#saToasts .tst{
  pointer-events:auto; width:300px; background:#0b1220; color:#e8eef7; border-radius:13px;
  padding:11px 13px; box-shadow:0 18px 40px rgba(2,6,23,.4); border:1px solid #1b2740;
  font-size:12px; line-height:1.5;
}
#saToasts .tst b{ display:block; font-size:12.5px; margin-bottom:3px }
#saToasts .tst.ok{ border-left:3px solid #10b981 }
#saToasts .tst.bad{ border-left:3px solid #ef4444 }
#saToasts .tst .sp{ float:right; color:#8b98ad; cursor:pointer; margin-left:10px }
/* ★ 2026-10-24：core.js 的 notify() 一直用的是 .sa-toast 类，但样式只写了 .tst（没人用）——
   通知卡实际是无样式裸文本。地址漂移告警要靠这张卡醒目，把 .sa-toast 按同一设计补齐。 */
#saToasts .sa-toast{
  pointer-events:auto; width:320px; background:#0b1220; color:#e8eef7; border-radius:13px;
  padding:11px 13px; box-shadow:0 18px 40px rgba(2,6,23,.4); border:1px solid #1b2740;
  font-size:12px; line-height:1.55; cursor:pointer;
}
#saToasts .sa-toast .t{ display:block; font-size:12.5px; font-weight:700; margin-bottom:4px }
#saToasts .sa-toast .b{ color:#c3cfe2; word-break:break-word }
#saToasts .sa-toast.ok{ border-left:3px solid #10b981 }
#saToasts .sa-toast.bad{ border-left:3px solid #ef4444; background:#1f1218 }
#saToasts .sa-toast.out{ opacity:0; transform:translateX(12px); transition:.28s }

.tbl-wrap{overflow-x:auto;max-width:100%}
.tbl-wrap .tbl{min-width:1180px}

/* ── 采购上家订单 / 售后共用组件 ── */
.flowbar{
  display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #eef2f8;
  border-radius:var(--radius);padding:13px 18px;
  box-shadow:0 1px 3px rgba(15,23,42,.04);
}
.flowbar .fs{font-size:12.5px;font-weight:700;color:#94a3b8;background:#f4f7fa;border-radius:999px;padding:6px 14px}
.flowbar .fs.on{color:#0f766e;background:#ecfdf5}
.flowbar > i{color:#cbd5e1;font-style:normal}
.flowbar .fnote{margin-left:auto;font-size:11.5px;color:#94a3b8}
.stat7{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:12px}
.stat7 .s7{
  background:#fff;border:1px solid #eef2f8;border-radius:14px;padding:14px 16px;
  box-shadow:0 1px 3px rgba(15,23,42,.04);
}
.stat7 .s7 .l{font-size:11.5px;color:#64748b}
.stat7 .s7 .v{font-size:24px;font-weight:800;letter-spacing:-.6px;margin-top:5px;color:#0b1220;line-height:1.15}
.stat7 .s7 .v.ok{color:#0f766e}
.stat7 .s7 .v.bad{color:#dc2626}
.stat7 .s7 .d{font-size:10.5px;color:#94a3b8;margin-top:4px}
.runlog{
  background:#0b1220;color:#c7d2e0;border-radius:12px;padding:13px 15px;
  font:11.5px/1.9 Consolas,'Microsoft YaHei',monospace;max-height:300px;overflow:auto;
}
.runlog div{white-space:pre-wrap;word-break:break-all}
.afhead{display:flex;align-items:center;gap:14px}
.afhead b{font-size:15px;display:block}
.afhead .mut{font-size:11.5px}
.afbtns{margin-left:auto;display:flex;gap:8px}
.switch{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:#334155;font-weight:600;cursor:pointer}
.switch input{width:16px;height:16px;accent-color:#10b981;cursor:pointer}

/* ── 采集员网格 ── */
.workers{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.worker{
  background:#fff;border:1.5px solid #eef2f8;border-radius:14px;padding:14px 15px;cursor:pointer;
  transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease;
  box-shadow:0 1px 3px rgba(15,23,42,.04);
}
.worker:hover{border-color:#c9d6e6;transform:translateY(-1px)}
.worker.on{border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.12),0 6px 16px -8px rgba(13,148,136,.25)}
.worker .wh{display:flex;align-items:center;gap:7px}
.worker .wname{font-size:13px;font-weight:800;letter-spacing:-.2px}
.worker .wsrc{font-size:10.5px;color:#94a3b8;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.worker .wbtns{display:flex;gap:6px;margin-top:11px}

/* ── 设置中心卡片 ── */
.setgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.setcard{
  display:flex;align-items:center;gap:13px;text-align:left;font-family:inherit;cursor:pointer;
  background:#fff;border:1px solid #eef2f8;border-radius:var(--radius);padding:17px 18px;
  box-shadow:0 1px 3px rgba(15,23,42,.04);
  transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease;
}
.setcard:hover{border-color:#bfe8dd;box-shadow:0 8px 22px -12px rgba(13,148,136,.3);transform:translateY(-1px)}
.setcard .si-ico{
  width:40px;height:40px;flex:none;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#ecfdf5,#d9f7ee);color:#0f766e;font-size:17px;font-style:normal;
}
.setcard .si-tb{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.setcard .si-tb b{font-size:13.5px;letter-spacing:-.2px}
.setcard .si-tb span{font-size:11.5px;color:#94a3b8;line-height:1.5}
.setcard .si-arrow{font-style:normal;color:#cbd5e1;font-size:20px;font-weight:700}


/* ===== 底层柔光：只给内容区留一点氛围，侧栏/顶栏保持实色干净 ===== */
body{position:relative}
body::before,body::after{
  content:'';position:fixed;z-index:0;border-radius:50%;filter:blur(80px);pointer-events:none;
}
body::before{width:620px;height:620px;left:-140px;top:-160px;background:radial-gradient(circle,rgba(16,185,129,.18),rgba(16,185,129,0) 70%)}
body::after{width:680px;height:680px;right:-180px;bottom:-200px;background:radial-gradient(circle,rgba(51,85,232,.12),rgba(51,85,232,0) 70%)}
#app{position:relative;z-index:1}

/* 登录页记住账号密码 */
.login-card label.remember{flex-direction:row;align-items:center;gap:8px;font-size:12px;color:#64748b;font-weight:400}
.login-card label.remember input{width:15px;height:15px;accent-color:#10b981;cursor:pointer}

/* ===== 输入框自适应：列更宽 + 占位文本超长省略，不再截成半截 ===== */
.form-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.form-row{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.form-row input,.form-row select,.form-grid input,.form-grid .inp{text-overflow:ellipsis}
.form-row input::placeholder,.form-grid input::placeholder,.inp::placeholder{color:#b7c3d4;overflow:hidden;text-overflow:ellipsis}

/* ===== 等高对齐：grid2 内卡片纵向 flex，内容区吃满剩余高度 ===== */
.grid2>.card.eq{display:flex;flex-direction:column}
.grid2>.card.eq .card-b{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.grid2>.card.eq .tbl-max{flex:1;min-height:0;max-height:560px;overflow:auto;border-radius:10px}
.runlog.fill{flex:1;max-height:none;min-height:0;overflow:auto}

/* ===== 成本结构：小卡网格，有呼吸感不再挤成一坨 ===== */
.costs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:12px;height:100%;align-content:stretch}
.costs-grid .cost-cell{
  background:#f8fafc;border:1px solid #eef2f8;border-radius:12px;padding:13px 14px;
  display:flex;flex-direction:column;gap:8px;
}
.costs-grid .cost-cell .cl{font-size:11.5px;color:#64748b}
.costs-grid .cost-cell .cv{font-size:17px;font-weight:800;letter-spacing:-.4px;color:#0b1220;font-variant-numeric:tabular-nums}
.costs-grid .cost-cell .pb{margin-top:auto}
.costs-grid .cost-cell .pb i{background:linear-gradient(90deg,#0d9488,#10b981)}

/* ===== 设置中心分类标题 ===== */
.set-sec{margin-top:6px}
.set-sec>h3{
  margin:18px 0 10px;font-size:12px;font-weight:800;letter-spacing:1px;color:#64748b;
  display:flex;align-items:center;gap:8px;
}
.set-sec>h3::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,#e2e8f2,transparent)}
.set-sec .card+.card{margin-top:12px}

/* 设置中心：布尔开关项与输入框同高对齐（文字在左、勾选框在右） */
.form-grid label.switch{
  flex-direction:row-reverse;align-items:center;justify-content:space-between;gap:10px;
  height:34px;padding:0 11px;margin-top:20px;
  border:1px solid var(--line);border-radius:10px;
  background:#fbfcfe;cursor:pointer;
}
.form-grid label.switch span{font-size:12.5px;color:#0f172a;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.form-grid label.switch input{width:16px;height:16px;flex:none;border:0;padding:0;box-shadow:none;accent-color:#10b981;cursor:pointer}

/* 状态筛选 chips（运费险等页） */
.chiprow{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.chip.f{border:1px solid var(--line);background:#fff;color:#4b5b73;border-radius:999px;padding:5px 14px;font-size:12px;cursor:pointer;font-family:inherit}
.chip.f:hover{border-color:#10b981;color:#0f172a}
.chip.f.on{background:#0b1220;border-color:#0b1220;color:#fff;font-weight:600}

/* 登记上架表单：每列宽度贴合内容，选择框不截断店名 */
.up-form{grid-template-columns:150px minmax(150px,1fr) minmax(230px,1.2fr) minmax(210px,1fr) 110px minmax(140px,1fr) auto}
@media (max-width:1320px){.up-form{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}}

/* 作业结果词条条 + 卡内小节标题 */
.resultbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;background:#f8fafc;border:1px solid var(--line);border-radius:12px;padding:10px 14px}
.card-subline{display:flex;align-items:baseline;gap:10px;padding:14px 0 8px;border-top:1px solid var(--line)}
.card-subline b{font-size:12.5px;color:#0f172a}
.card-subline .mut{font-size:11.5px}

/* 盈利前5店：窄窗口不挤爆，两列数值自适应收窄 */
.profit5 td,.profit5 th{padding:10px 8px}
.profit5 .shopcell{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 三卡布局 */
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:stretch}
@media (max-width:1320px){.grid3{grid-template-columns:1fr}}

/* 采集员卡片入场动画（增减时的弹性浮现） */
@keyframes wpop{from{opacity:0;transform:scale(.9) translateY(6px)}to{opacity:1;transform:none}}
.worker{animation:wpop .28s cubic-bezier(.2,.8,.3,1.1)}

.wbtns .btn{white-space:nowrap}

/* ═════════ 10-22 整改批次 ═════════ */
/* 顶栏子页签绝对居中：不随左右按钮宽度变动 */
.topbar{position:relative}
.tb-mid{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);flex:none;max-width:52%}
.tb-left,.tb-right{position:relative;z-index:2}

/* 头像与系统菜单移到左侧导航底部 */
.rls{display:flex;flex-direction:column;gap:6px;align-items:center;width:100%}
.rail-who{margin-top:auto}
.rail-who .who-pop{right:auto;left:calc(100% + 12px);top:auto;bottom:0}

/* 导航小圆点提示：红点白字，替代黄底黑字 */
.rl .bdg{background:#ef4444;color:#fff;border:2px solid #0e1626;min-width:18px;height:18px;font-size:10px;top:4px;right:5px;box-shadow:0 2px 6px rgba(239,68,68,.4)}

/* 全局滚动条：细轨圆角，替代系统默认 */
*{scrollbar-width:thin;scrollbar-color:#cfdae6 transparent}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#d5dde8;border-radius:99px;border:2px solid rgba(255,255,255,.9);background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:#aebccd;border:2px solid rgba(255,255,255,.9);background-clip:padding-box}
::-webkit-scrollbar-corner{background:transparent}
.runlog::-webkit-scrollbar-thumb{background:#33415a;border:2px solid rgba(11,18,32,.9)}

/* 驾驶舱列表行：字号行距放大，给足呼吸感 */
.view .li{font-size:13px;gap:11px;padding:14px 0;line-height:1.85}
.view .li .dot{margin-top:8px}
.view .li .mut{font-size:12.5px;margin-left:2px}

/* 总览「今天要动手」：叠卡形态，上一条压住下一条，一摞卡片省掉大面积占位 */
.row .hero2{margin-bottom:0}
.todos{gap:0;padding-top:2px}
.todo{
  background:#fff;border:1px solid #edf1f7;border-radius:14px;
  box-shadow:0 1px 2px rgba(15,23,42,.04),0 -1px 0 #fff;
  margin-top:-8px;overflow:visible;position:relative;
  transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;
}
.todo:first-child{margin-top:0}
.todo:hover{transform:translateY(-3px);z-index:6;border-color:#dbe4f0;box-shadow:0 10px 24px rgba(15,23,42,.1)}
.todo:before{display:none}
.todo .no{width:34px;font-size:12.5px;color:#cbd5e1;font-weight:800;padding-left:4px}
.todo .tb{padding:10px 10px 10px 0}
.todo .m{display:inline;font-size:10.5px;color:#fff;background:#0b1220;border-radius:6px;padding:2px 8px;margin:0 8px 0 0;font-weight:600;vertical-align:2px}
.todo h3{font-size:13.5px;display:inline}
.todo p{display:block;font-size:11.5px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.todo .meta{display:inline-flex;gap:12px;margin:0 0 0 12px;vertical-align:1px}
.todo .meta span{display:inline;font-size:11px;color:#94a3b8}
.todo .meta b{font-size:11.5px;font-weight:700;color:#475569}
.todo .ta{display:flex;align-items:center;padding:0 6px 0 12px}
.todo .ta .btn{padding:6px 12px;font-size:12px;white-space:nowrap}
.todo.warn{border-color:#fde2e2;background:linear-gradient(180deg,#fffafa,#fff)}

/* 新增执照 / 新增店铺表单：等宽舒展，按钮跟在最后一行不单独掉行 */
.add-form{display:flex !important;flex-wrap:wrap;gap:14px 16px;align-items:flex-end}
.add-form label{flex:1 1 195px;min-width:0;display:flex !important;flex-direction:column !important;gap:6px !important}
.add-form label input,.add-form label select{width:100% !important;height:34px;flex:none !important}
.add-form .btn{flex:none;height:34px;justify-self:start}

/* ── 设置中心分类导航：两行卡片式，一眼知道每类管什么 ── */
#ssCats{gap:8px;margin-bottom:var(--gap)}
#ssCats .st{
  display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;
  padding:9px 18px 10px;border-radius:12px;line-height:1.25;text-align:left;
}
#ssCats .st b{font-size:13px;font-weight:700;color:inherit}
#ssCats .st em{font-style:normal;font-size:10.5px;color:#94a3b8;letter-spacing:.2px}
#ssCats .st.on em{color:rgba(255,255,255,.62)}
#ssCats .st:hover{border-color:#b9c6d8}

/* ── 售后「定时自动跑」卡内按钮组 ── */
.afbtns{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ── 总览两栏等高：左「今天要动手」撑满右栏高度，条目多了内部滚动 ── */
.row{align-items:stretch}
.row>div{display:flex;flex-direction:column;min-height:0}
.row>div>.card.fit{flex:1;min-height:0;display:flex;flex-direction:column;margin-bottom:0}
.row>div>.card.fit>.card-b{flex:1;min-height:0;overflow-y:auto;padding-right:12px}
.row>div>.card.fit+.card{margin-top:14px}

/* ── 设置中心：只读键值列表（窄卡里比表格好读，长值省略不撑破） ── */
.kvlist{display:flex;flex-direction:column}
.kvrow{display:flex;align-items:center;gap:16px;padding:9px 0;border-bottom:1px solid #f4f7fb;font-size:12.5px}
.kvrow:last-child{border-bottom:0}
.kvrow .k{flex:none;width:112px;color:#94a3b8;font-size:11.5px}
.kvrow .v{flex:1;min-width:0;color:#0f172a;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kvrow .v.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;font-weight:500}

/* ── 表单网格里的开关：文字在左、勾选框贴右（样式见上方 .form-grid label.switch） ── */

/* 顶栏右组（页面按钮 + 服务状态）始终贴右，不受绝对居中的页签影响 */
.topbar .tb-right{margin-left:auto;justify-content:flex-end}

/* 表格里的长商品名：省略号截断，不把后面几列挤出去 */
.tbl .clip{display:block;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl .clip.wide{max-width:300px}
.tbl .clip.tight{max-width:118px}

/* ── 亏损预警：左右等分 + 定宽表格（不把价格列挤出卡外） ── */
.view .grid2.even{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.view .grid2.even>.card{min-width:0}
.tbl.fixed{table-layout:fixed;width:100%}
/* 覆盖 .tbl-wrap .tbl{min-width:1180px}：窄卡里的定宽表按卡片宽度铺满，不再横向溢出 */
.tbl-wrap .tbl.fixed{min-width:0}
.tbl.fixed th,.tbl.fixed td{overflow:hidden;text-overflow:ellipsis}
.tbl.fixed .clip{max-width:100%}
.tbl.fixed .mono{display:block;overflow:hidden;text-overflow:ellipsis}
@media (max-width:1320px){.view .grid2.even{grid-template-columns:1fr}}

/* ═════════ 10-22 第三批整改（全局底座） ═════════ */

/* ── 13. 顶栏与内容区左右对齐：内容区滚动条会吃掉宽度，用实测变量补回来 ── */
.view{scrollbar-gutter:stable}
.topbar{margin-right:calc(26px + var(--sbw, 0px))}
@media (max-width:1320px){ .topbar{margin-right:calc(16px + var(--sbw, 0px))} }

/* ── 12. 所有勾选框统一圆形 + 白色对勾（含登录页记住密码） ── */
input[type=checkbox]{
  -webkit-appearance:none; appearance:none; flex:none;
  width:18px; height:18px; border-radius:50%;
  border:1.5px solid #cbd5e1; background:#fff; cursor:pointer;
  position:relative; transition:background .15s,border-color .15s,transform .12s;
  vertical-align:-3px; margin:0;
  /* 关键：登录卡等处 input 有 padding:0 11px，content-box 会把 18px 圆撑成胶囊 */
  box-sizing:border-box; padding:0;
}
input[type=checkbox]:hover{border-color:#94a3b8}
input[type=checkbox]:checked{background:var(--brand);border-color:var(--brand)}
input[type=checkbox]:checked::after{
  content:''; position:absolute; left:5px; top:2px; width:5px; height:9px;
  border:2px solid #fff; border-top:0; border-left:0; transform:rotate(42deg);
}
input[type=checkbox]:active{transform:scale(.92)}
input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed}
/* 表单网格里的开关：文字左、圆勾右，同行同高 */
.form-grid label.switch input{width:18px;height:18px}

/* ── 5. 主按钮统一主题青竹色（原来是黑） ── */
.btn.pri{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:700}
.btn.pri:hover{background:var(--brand0);border-color:var(--brand0);color:#fff}
.chip.f.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.hero-btns .btn{background:#fff;border-color:#fff;color:#0b7a63}

/* ── 7. 侧栏数字气泡：白描边 + 数字居中 ── */
.rail .rl .bdg{
  top:3px; right:4px; min-width:17px; height:17px; padding:0 4px;
  background:#ef4444; color:#fff; border:2px solid #fff;
  border-radius:999px; font-size:10px; font-weight:700; line-height:1;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 2px 6px rgba(239,68,68,.35);
}

/* ── 8. 侧栏头像：居中坐底 + 白圈，别在黑底上糊成一坨 ── */
.rail .rail-who{width:100%;display:flex;justify-content:center;align-items:center;padding:10px 0 2px}
.rail .rail-who .av{
  width:38px;height:38px;border-radius:50%;
  background:linear-gradient(160deg,#12c08a,#0d9488);
  border:2px solid rgba(255,255,255,.92);
  box-shadow:0 6px 16px -6px rgba(16,185,129,.65);
  font-size:14px;font-weight:800;letter-spacing:.5px;color:#fff;
  display:flex;align-items:center;justify-content:center;
  background-size:cover;background-position:center;
}
.rail .rail-who .av:hover{transform:translateY(-1px)}
.rail .rail-who .av img{width:100%;height:100%;border-radius:50%;object-fit:cover}

/* ── 11. 卡片间距统一：任何两卡之间都是 16px，不许贴在一起 ── */
.view > * + *{margin-top:16px}
.view .card + .card{margin-top:16px}
.set-sec > .card + .card{margin-top:16px}
.view .grid2 > .card + .card{margin-top:0}

/* ── 2. 叠卡：悬停只做轻微抬升，阴影收窄不横向溢出，避免与容器边缘割裂 ── */
.todo{box-shadow:0 0 0 1px #eef2f8, 0 2px 5px -2px rgba(15,23,42,.06)}
.todo:hover{
  transform:translateY(-2px);
  box-shadow:0 0 0 1px #dbe4f0, 0 6px 14px -6px rgba(15,23,42,.16);
}
.todos{padding:0}

/* ── 1. 顶栏问候语 + 大号日期（替代页面里的 hello 行） ── */
.topbar .tb-left{gap:14px;min-width:0}
.topbar .tb-left h1{font-size:19px;font-weight:800;letter-spacing:-.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar .tb-left h1 b{color:var(--brand);font-weight:800}
.topbar #pgSub{display:flex;align-items:center}
.tb-date{
  font-size:15.5px;font-weight:700;color:#334155;letter-spacing:.3px;
  font-variant-numeric:tabular-nums;white-space:nowrap;
  padding-left:14px;border-left:1px solid #e2e8f0;
}

/* ── 3. 店铺台账：搜索框定宽 + 表格单元格两行小字，不换行不错位 ── */
.store-q{width:300px;flex:none}
.tbl td .sub{display:block;font-size:11px;color:#94a3b8;margin-top:2px;font-weight:500}
.tbl td .pill{display:inline-block;padding:2px 9px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:11.5px;font-weight:700}
.tbl td .pill.ok{background:#dcfce7;color:#0f766e}
.tbl .nowrap{white-space:nowrap}
.card-h:has(.run-prog){ display:flex; align-items:center; gap:10px }
.card-h:has(.run-prog) .card-r{ margin-left:auto; float:none }
.card-r{display:flex;align-items:center;gap:8px}

/* ── 4. 运费险同步进度条：与按钮同宽，实时百分比 ── */
.syncbar{
  position:relative; height:32px; border-radius:9px; overflow:hidden;
  background:#eef6f2; border:1px solid #cfe9df; display:flex; align-items:center; justify-content:center;
}
.syncbar i{
  position:absolute; left:0; top:0; bottom:0; width:0;
  background:linear-gradient(90deg,#34d399,#10b981); transition:width .45s ease; border-radius:9px;
}
.syncbar em{position:relative; font-style:normal; font-size:12px; font-weight:800; color:#0b6b52; letter-spacing:.3px; font-variant-numeric:tabular-nums}

/* ── 5. 执照下拉：已满红底白字、可开绿底白字，圆角胶囊 ── */
.pick{position:relative;display:block}
.pick-btn{
  width:100%;height:34px;border:1px solid var(--line);border-radius:10px;background:#fff;
  display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 11px;
  font-family:inherit;font-size:12.5px;color:#0f172a;cursor:pointer;
}
.pick-btn i{font-style:normal;color:#94a3b8;font-size:10px}
.pick-btn.picked{border-color:#bfe6d8;background:#f7fdfa;font-weight:600}
.pick-pop{
  position:absolute;left:0;right:0;top:38px;z-index:40;background:#fff;
  border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 40px rgba(15,23,42,.16);
  padding:6px;max-height:290px;overflow:auto;
}
.pick-i{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;
  border:0;background:transparent;border-radius:9px;padding:8px 10px;cursor:pointer;
  font-family:inherit;font-size:12.5px;color:#0f172a;text-align:left;
}
.pick-i:hover{background:#f6f9fc}
.pick-i .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pick-i .cnt{
  font-style:normal;font-size:11px;font-weight:800;padding:3px 9px;border-radius:999px;
  background:#dcfce7;color:#0f766e;flex:none;
}
.pick-i .cnt.no{background:#ef4444;color:#fff}
.pick-i.full{opacity:.72}
.pick-empty{padding:10px;font-size:12px;color:#94a3b8;text-align:center}

/* ── 6. 报表·成本拆解：大数字磁贴，不再用表格（也就不会横向滑动） ── */
/* ★ 全屏下 hero 磁贴会比同行矮 12px（实测 110 vs 122）：grid item 是 flex 容器时高度没被拉满。
   显式 stretch + height:100% + border-box，保证 5 张等高。 */
.cost-tiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;align-items:stretch}
@media (max-width:1320px){.cost-tiles{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}}
.cost-tiles .ct{
  background:#f8fbfd;border:1px solid #edf2f8;border-radius:14px;min-width:0;
  padding:13px 14px 14px;display:flex;flex-direction:column;gap:4px;min-width:0;
  height:100%;box-sizing:border-box;
}
.cost-tiles .ct .k{font-size:11.5px;color:#7c8ba1;font-weight:600}
.cost-tiles .ct .v{font-size:21px;font-weight:800;letter-spacing:-.7px;color:#0f172a;font-variant-numeric:tabular-nums;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cost-tiles .ct .s{font-size:10.5px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ★ 2026-10-23：hero 磁贴原来是深蓝黑夜色，和这套绿色主题（--brand #10b981 / --brand0 #0d9488）不搭，
   改成主题绿渐变，保持同一套色彩语言。 */
.cost-tiles .ct.hero{
  background:linear-gradient(150deg,var(--brand0),var(--brand));
  border-color:#0b8f74;
  box-shadow:0 8px 20px -14px rgba(13,148,136,.9);
}
.cost-tiles .ct.hero .k{color:#d7fbf1}
.cost-tiles .ct.hero .v{color:#fff;font-size:24px}
.cost-tiles .ct.hero .s{color:#c8f2e7}


/* ── 9. 售后「自动跑一轮」：左右各半，左边手动、右边定时 ── */
.af-split{display:grid;grid-template-columns:1fr 1fr;gap:0}
.af-split .af-side{display:flex;flex-direction:column;gap:10px;min-width:0;padding:2px 0}
.af-split .af-side.right{padding-left:24px;border-left:1px solid #eef2f8;margin-left:24px}
.btn.xl{height:46px;font-size:14px;border-radius:12px;letter-spacing:.2px;box-shadow:0 8px 18px -10px rgba(16,185,129,.85)}
.af-mini{display:flex;gap:8px;flex-wrap:wrap}
.af-sw{font-size:12.5px;gap:10px}
.af-times{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}
.af-times label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:#64748b}
.af-times label .inp{width:104px}
@media (max-width:1180px){.af-split{grid-template-columns:1fr}.af-split .af-side.right{padding-left:0;border-left:0;margin-left:0;padding-top:14px;border-top:1px solid #eef2f8}}

/* ═════════ 10. 采集控制：采集员卡片（对齐原软件形态）+ 运行条 ═════════ */
.wkh{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}
.wkh > div:first-child{display:flex;align-items:baseline;gap:10px;min-width:0}
.wkh b{font-size:14px;font-weight:800;color:#0f172a}
.wkh .mut{font-size:11.5px;color:#94a3b8}
.wkacts{display:flex;align-items:center;gap:8px;flex:none}

.wk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px}
.wk{
  border:1px solid #e8eef6;border-radius:14px;background:#fff;overflow:hidden;
  transition:border-color .15s,box-shadow .15s,transform .15s;
}
.wk:hover{box-shadow:0 10px 24px -14px rgba(15,23,42,.28)}
.wk.on{border-color:#9fd9c6;box-shadow:0 0 0 2px rgba(16,185,129,.12)}
/* ★ 2026-10-24 晚：正在采集的采集员——徽标呼吸 + 屏幕线条滚动（动画即进度，不需要日志窗） */
.wk.busy{border-color:#6ee7b7;box-shadow:0 0 0 2px rgba(16,185,129,.22)}
.wk.busy .wk-badge{color:#0f766e;background:#d3f8ea;animation:wkPulse 1.2s ease-in-out infinite}
.wk.busy .wk-screen .ln{background:linear-gradient(90deg,#eef2f8 25%,#a7ecd4 50%,#eef2f8 75%);background-size:200% 100%;animation:wkShimmer 1.4s linear infinite}
.wk.busy .wk-screen .ln.w2{animation-delay:.22s}
.wk.busy .wk-screen .ln.w3{animation-delay:.44s}
.wk.busy .wk-bar i:nth-child(2){background:#fcd34d}
@keyframes wkPulse{0%,100%{opacity:1}50%{opacity:.5}}
@keyframes wkShimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
@media (prefers-reduced-motion: reduce){.wk.busy .wk-badge,.wk.busy .wk-screen .ln{animation:none}}

/* 缩略图：纯 CSS 画的浏览器窗口，不用图片素材 */
.wk-thumb{position:relative;height:118px;background:linear-gradient(160deg,#eef3f9,#e2eaf3);padding:12px 12px 0}
.wk-thumb .wk-badge{
  position:absolute;left:10px;top:10px;z-index:2;
  font-size:10.5px;font-weight:700;color:#64748b;background:rgba(255,255,255,.92);
  border-radius:999px;padding:2px 8px;box-shadow:0 1px 3px rgba(15,23,42,.08);
}
.wk-thumb .wk-badge.on{color:#0f766e;background:#d7f5ea}
.wk-thumb .wk-badge.ok{color:#0f766e;background:#ccf6e3}
.wk-thumb .wk-badge.bad{color:#b91c1c;background:#fee2e2}
.wk-thumb .wk-badge.warn{color:#92400e;background:#fef3c7}
.wk-thumb .wk-x{
  position:absolute;right:8px;top:8px;z-index:2;width:20px;height:20px;border:0;border-radius:50%;
  background:rgba(255,255,255,.9);color:#94a3b8;font-size:13px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
}
.wk-thumb .wk-x:hover{background:#fee2e2;color:#dc2626}
.wk-mock{
  height:100%;background:#fff;border:1px solid #dbe4ef;border-bottom:0;border-radius:10px 10px 0 0;
  overflow:hidden;box-shadow:0 -1px 0 #fff inset;
}
.wk-bar{height:18px;background:#f4f7fb;border-bottom:1px solid #eef2f8;display:flex;align-items:center;gap:4px;padding:0 8px}
.wk-bar i{width:5px;height:5px;border-radius:50%;background:#cbd5e1}
.wk-bar i:first-child{background:#fda4af}
.wk-screen{padding:9px;display:flex;flex-direction:column;gap:6px}
.wk-screen .ln{height:6px;border-radius:4px;background:#eef2f8;display:block}
.wk-screen .ln.w1{width:62%}
.wk-screen .ln.w2{width:80%}
.wk-screen .ln.w3{width:44%}
.wk-screen .blk{height:30px;border-radius:7px;background:linear-gradient(120deg,#eef6f3,#e6f0fb);margin-top:2px}

.wk-body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:10px}
.wk-check{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:#0f172a;cursor:pointer}
.wk-btns{display:flex;gap:8px}
.wk-btns .btn{flex:1;justify-content:center}

/* 运行条 */
.runbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.runbar .run-start{min-width:112px;height:36px;border-radius:10px;font-size:13px}
.runbar .btn.danger{color:#dc2626;border-color:#fecaca;background:#fff5f5}
.runbar .btn.danger:hover{background:#fee2e2;border-color:#fca5a5}
.run-tip{font-size:11.5px;color:#94a3b8;flex:1;min-width:180px}
.run-prog{display:flex;align-items:center;gap:10px;flex:none;margin-left:auto}
.run-prog .track{position:relative;display:block;width:200px;height:10px;border-radius:999px;background:#eef2f8;overflow:hidden}
.run-prog i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#34d399,#10b981);transition:width .5s ease;border-radius:999px}
.run-prog em{font-style:normal;font-size:11.5px;font-weight:800;color:#0f766e;font-variant-numeric:tabular-nums;min-width:34px;text-align:right}

/* ── 11. 卡片间距：grid2 后面紧跟的卡片也要留 16px，不许贴在一起 ── */
/* ★ 2026-10-24 晚：三卡不等宽行（采集控制页：失败/产物/中转仓），中转仓卡内容少给窄列 */
.grid3c{display:grid;grid-template-columns:1.15fr 1.5fr .92fr;gap:16px}
.view .grid3c > .card + .card{ margin-top: 0 !important }
.view .grid3c .card-h{ white-space:nowrap } .view .grid3c .card-h .card-sub{ overflow:hidden; text-overflow:ellipsis }
.grid3c > .card{margin-top:0}
.grid3c + .card, .card + .grid3c{margin-top:16px}
@media (max-width:1180px){.grid3c{grid-template-columns:1fr 1fr}}
@media (max-width:780px){.grid3c{grid-template-columns:1fr}}
.set-sec > .grid2 + .card,
.view > .grid2 + .card{margin-top:16px}
.set-sec > .card,
.view > .card{margin-top:0}
.set-sec > .card + .card,
.view > .card + .card{margin-top:16px}

/* 执照选择按钮：文字不换行，占满列宽 */
.pick-btn span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cost-tiles .ct.hero .s{white-space:normal;line-height:1.45;overflow:visible}

/* ── 8. 头像预设选择（Q 版风格，圆形预览） ── */
.av-picks{display:flex;gap:14px;flex-wrap:wrap}
.av-pick{
  display:flex;flex-direction:column;align-items:center;gap:7px;padding:8px 10px 9px;
  border:1px solid transparent;border-radius:16px;background:transparent;cursor:pointer;font-family:inherit;
  transition:background .15s,border-color .15s,transform .15s;
}
.av-pick img{width:56px;height:56px;border-radius:50%;background:#f6f5f2;display:block}
.av-pick span{font-size:11.5px;color:#64748b;font-weight:600}
.av-pick:hover{background:#f7fafc;transform:translateY(-2px)}
.av-pick.on{border-color:#9fd9c6;background:#f4fcf8}
.av-pick.on span{color:#0f766e}
.rail .rail-who .av img{width:100%;height:100%;border-radius:50%;object-fit:cover}

/* ═════════ 10-22 第四批（3 处收尾） ═════════ */

/* ── 1. 侧栏头像：清掉旧胶囊白底（.who 的 #f6f8fb 圆角条）+ 头像白边 ── */
.rail .who{
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  gap: 0 !important;
}
.rail .rail-who .av{
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  width: 40px; height: 40px;
}
.rail .rail-who .av img{
  width: 100%; height: 100%; border-radius: 50%;
  object-fit: contain;      /* 透明底图整图显示，不裁人脸 */
  display: block;
}

/* ── 2. 滚动内容与顶栏圆角：顶栏压上层 + 内容顶部渐隐，消除硬切口 ── */
.workspace{ position: relative; }
.topbar{ position: relative; z-index: 12; }
.view{
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 14px);
  mask-image: linear-gradient(to bottom, transparent 0, #000 14px);
}

/* ── 3. 焦点环：干掉系统橙色 outline，只留青竹色细环（键盘操作才出现） ── */
button:focus, a:focus, .rl:focus, .tb:focus, .chip:focus, [tabindex]:focus{ outline: none; }
button:focus-visible, a:focus-visible, .rl:focus-visible, .tb:focus-visible, .chip:focus-visible{
  outline: 2px solid rgba(16,185,129,.85);
  outline-offset: 2px;
}
.rail .rl:focus-visible{ outline-offset: -2px; }

/* ═════════ 10-22 第五批（9 条） ═════════ */

/* ── 4. 全站统一卡片间距：一个变量管到底 ── */
:root{ --gap: 16px }
.view > * + *{ margin-top: var(--gap) !important }
.view .card + .card,
.set-sec > .card + .card,
.set-sec > .grid2 + .card,
.view > .grid2 + .card{ margin-top: var(--gap) !important }
.view .grid2,
.view .grid2b,
.view .costs-grid,
.view .stat7{ gap: var(--gap) !important }
.view .grid2 > .card + .card{ margin-top: 0 !important }

/* ── 9. 总览右栏：hero 与「模块状态」之间必须留间距，不许贴死 ── */
.row .hero2{ margin-bottom: var(--gap) !important }
.row > div > .card.fit + .card{ margin-top: var(--gap) !important }

/* ── 1. 登录页「记住账号密码」：18px 圆勾 + 垂直居中 + 留白 ── */
.login-card label.remember{
  display:flex; align-items:center; gap:10px;
  font-size:12px; color:#64748b; font-weight:400; line-height:1.4; padding:2px 0;
}
.login-card label.remember input{
  width:18px; height:18px; flex:none; margin:0;
}
.login-card label.remember span{ padding-top:1px }

/* ── 3. 执照下拉：改成流内展开（不再被卡片圆角裁掉） ── */
.pick-pop{
  position: static !important;
  margin-top: 8px;
  max-height: 260px;
  box-shadow: 0 10px 24px -16px rgba(15,23,42,.3);
}
.pick-btn i{ transition: transform .15s }
.pick.open .pick-btn i{ transform: rotate(180deg) }

/* ── 8. 表格里的操作按钮统一主题色描边（原来是灰白） ── */
.tbl .btn.sm.ghost,
.tbl .btn.sm{
  color: #0f766e;
  border-color: #cde9df;
  background: #f6fdfa;
  font-weight: 600;
}
.tbl .btn.sm:hover{ background:#e8f8f2; border-color:#9fd9c6 }
.tbl .btn.sm.danger{ color:#dc2626; border-color:#fecaca; background:#fff6f6 }
.tbl .btn.sm.danger:hover{ background:#fee2e2 }

/* ── 2. 叠卡与外部卡片同宽：拆掉卡内容区左右内边距，叠卡铺满整卡 ── */
.row > div > .card.fit > .card-b{ padding: 0 0 6px !important; overflow-y: auto }
.row > div > .card.fit .todos{ padding: 0 !important; gap: 0 }
.row > div > .card.fit .todo{
  margin: 0 0 -9px !important;
  border-radius: 14px;
}
.row > div > .card.fit .todo:first-child{ margin-top: 10px !important }
.row > div > .card.fit .todo:last-child{ margin-bottom: 10px !important }

/* ── 5. 设置中心：按模块分组，填写框在前、勾选在后，序号清晰 ── */
.form-groups{display:flex;flex-direction:column;gap:18px}
.form-groups .form-sec{padding-top:2px}
.form-groups .form-sec + .form-sec{border-top:1px dashed #eef2f8;padding-top:16px}
.form-groups h4{
  margin:0 0 10px;font-size:12px;font-weight:800;color:#0f172a;
  display:flex;align-items:center;gap:8px;
}
.form-groups h4::before{content:'';width:3px;height:12px;border-radius:2px;background:var(--brand)}
.form-groups .sw-grid{margin-top:10px}
.form-groups .sw-grid label.switch{margin-top:0}

/* ── 7. 运费险：行内操作按钮组 + 同步账号列表 ── */
.rowbtns{display:flex;gap:6px;white-space:nowrap}
.acc-list{display:flex;flex-direction:column;gap:2px}
.acc-row{
  display:flex;align-items:center;gap:12px;padding:9px 0;
  border-bottom:1px solid #f4f7fb;font-size:12.5px;
}
.acc-row:last-child{border-bottom:0}
.acc-row b{width:52px;flex:none;color:#0f172a;font-weight:700}
.acc-row .mono{flex:1;min-width:0;color:#475569;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acc-row .btn{flex:none}

/* 叠卡：背景铺满外卡宽，内容与卡头对齐（不再左突） */
.row > div > .card.fit .todo{ padding: 0 18px }

/* 分组标题：给足行高与下间距，别压住第一个输入框的标签 */
.form-groups h4{
  margin: 0 0 12px !important;
  line-height: 1.6;
  min-height: 20px;
  font-size: 12.5px;
}
.form-groups .form-sec{ display: block; }

/* 执照下拉：撑开到可用宽度，胶囊不挤不裁 */
.pick{min-width:220px;width:100%}
.pick-btn{width:100%}
.pick-btn span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pick-pop{width:100%;min-width:220px}
.pick-i .cnt{white-space:nowrap;flex:none}
.pick-i .nm{min-width:0}

/* 勾选框在表单网格里被 input{width:100%} 拉成横条，强制回 18px */
.form-grid input[type=checkbox],
.form-grid label.switch input[type=checkbox]{
  width: 18px !important; height: 18px !important;
  min-width: 18px; flex: none; padding: 0;
}
.form-groups .sw-grid label.switch{ justify-content: space-between }

/* 叠卡悬停：整行浅底（.todo 已与外卡同宽，浅底自然铺满，不会再出现半截灰） */
.row > div > .card.fit .todo:hover{ background:#f7fafc }

/* ── 叠卡改间隔排列：不再相互叠压，左右留边、卡片间 10px ── */
.row > div > .card.fit .todo{
  margin: 0 12px 10px !important;
  border-radius: 12px;
}
.row > div > .card.fit .todo:first-child{ margin-top: 12px !important }
.row > div > .card.fit .todo:last-child{ margin-bottom: 12px !important }
.row > div > .card.fit .todo:hover{ transform: none }

/* ═════════ 排版 A：单行式（序号 标签 标题 说明 ··· 胶囊 按钮） ═════════ */
.row > div > .card.fit .todo{
  align-items:center; flex-wrap:nowrap; gap:10px; padding:0 16px;
}
.row > div > .card.fit .todo .no{ width:22px; flex:none; padding:0; font-size:12px; font-weight:800; color:#cbd5e1 }
.row > div > .card.fit .todo .m{ flex:none; margin:0; padding:3px 8px }
.row > div > .card.fit .todo h3{ flex:none; display:inline; font-size:13px; white-space:nowrap }
.row > div > .card.fit .todo .desc{
  flex:1 1 auto; min-width:24px; display:block; margin:0;
  font-size:11.5px; color:#94a3b8; line-height:1.5;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.row > div > .card.fit .todo .meta{ display:flex; gap:6px; flex:none; margin:0; align-items:center }
/* ★ 2026-10-24 晚：待办词条改白底细边胶囊（主人嫌原来的土黄底难看）——
   标签灰、数值墨；警示行数值干净的红，不再用琥珀黄底 */
.row > div > .card.fit .todo .meta > div{
  display:flex; align-items:center; gap:4px; white-space:nowrap;
  background:#fff; box-shadow:0 0 0 1px #e8eef6; border-radius:999px; padding:3px 10px;
  font-size:10.5px; font-weight:600; color:#94a3b8;
}
.row > div > .card.fit .todo .meta b{ font-size:10.5px; font-weight:800; color:#0f172a; font-variant-numeric:tabular-nums }
.row > div > .card.fit .todo.warn .meta > div{ background:#fff; box-shadow:0 0 0 1px #fbd5d5 }
.row > div > .card.fit .todo.warn .meta b{ color:#dc2626 }
.row > div > .card.fit .todo .ta{ flex:none; padding:0; margin-left:2px }

/* ── 卡片高度恢复到之前的档位（约 64px/行），内容垂直居中，字号回升 ── */
.row > div > .card.fit .todo{ min-height: 64px; padding-top: 0; padding-bottom: 0 }
.row > div > .card.fit .todo h3{ font-size: 14px }
.row > div > .card.fit .todo .desc{ font-size: 12px; color: #64748b }
.row > div > .card.fit .todo .meta > div{ font-size: 11px; padding: 4px 10px }
.row > div > .card.fit .todo .meta b{ font-size: 11px }
.row > div > .card.fit .todo .m{ font-size: 11px; padding: 3px 9px }
.row > div > .card.fit .todo .ta .btn{ height: 32px; padding: 0 14px; font-size: 12.5px }

/* ── 执照下拉：回浮层定位，专用卡允许溢出（不再撑高卡片影响旁边） ── */
.pick-pop{
  position: absolute !important;
  left: 0; right: 0; top: 38px;
  max-height: 280px;
  box-shadow: 0 18px 40px rgba(15,23,42,.18);
}
.view .card.allow-pop{ overflow: visible }

/* ── 12. 头像呼吸水波纹：正常运行中 ── */
.rail .rail-who .av{ position: relative }
.rail .rail-who .av::before{
  content:''; position:absolute; inset:-5px; border-radius:50%;
  border:2px solid rgba(16,185,129,.55);
  animation: avPulse 2.6s ease-out infinite;
  pointer-events: none;
}
.rail .rail-who .av::after{
  content:''; position:absolute; inset:-5px; border-radius:50%;
  border:2px solid rgba(16,185,129,.35);
  animation: avPulse 2.6s ease-out .9s infinite;
  pointer-events: none;
}
@keyframes avPulse{
  0%{ transform:scale(.92); opacity:.85 }
  70%{ transform:scale(1.38); opacity:0 }
  100%{ transform:scale(1.38); opacity:0 }
}

/* ── 11. 账号卡不换行：小列宽一行铺开，地址占两格 ── */
.acc-grid{ grid-template-columns: repeat(auto-fit, minmax(158px, 1fr)) !important }
.acc-grid .span2{ grid-column: span 2 }

/* ── 盈利前 5 店：紧凑行列表（排名 店名 利润 单均），不再只有店名 ── */
.p5list{display:flex;flex-direction:column}
.p5row{
  display:flex;align-items:center;gap:10px;padding:11px 2px;
  border-bottom:1px solid #f4f7fb;font-size:12.5px;
}
.p5row:last-child{border-bottom:0}
.p5row .rk{
  width:20px;height:20px;flex:none;border-radius:6px;background:#f1f5f9;color:#64748b;
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;
}
.p5row.top1 .rk{background:var(--brand);color:#fff}
.p5row .nm{flex:1;min-width:0;font-weight:600;color:#0f172a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p5row .pf{flex:none;font-weight:800;color:#0f766e;font-variant-numeric:tabular-nums}
.p5row .ps{flex:none;color:#94a3b8;font-size:11.5px;font-variant-numeric:tabular-nums}

/* ── 采集运行条：整行垂直居中，内容不再贴顶 ── */
.view .card.runbar-card > .card-b{ padding: 14px 20px !important; display: flex; align-items: center }
.view .card.runbar-card .runbar{ width: 100% }

/* ── 售后自动跑一轮：两列各带小标题，主按钮不占满宽，重心对称 ── */
.af-split .af-lab{
  font-size:11.5px;font-weight:800;color:#94a3b8;letter-spacing:.5px;
  display:flex;align-items:center;gap:8px;
}
.af-btns-row{display:flex;gap:10px;align-items:stretch}
.af-btns-row .btn.xl{width:auto;min-width:158px;height:auto;min-height:56px}
.af-mini-col{display:flex;flex-direction:column;gap:6px;justify-content:center}
.af-mini-col .btn{height:29px;font-size:11.5px;padding:0 12px;justify-content:center}
.af-sch{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap}
.af-sch label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:#64748b}
.af-sch label .inp{width:96px}
.af-sch .btn{height:34px}
.af-sch label.switch{flex-direction:row;height:34px;align-items:center;gap:8px;margin-bottom:0;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcfe}
.af-sch label.switch span{font-size:12.5px;font-weight:600;color:#0f172a}

/* ── 设置-售后：挂载区内部间距统一 16px ── */
#afRefundBox > * + *{ margin-top: var(--gap) }
#afRefundBox .card + .card{ margin-top: var(--gap) }

/* ── 中转仓绑定行 ── */
.af-znd{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.af-znd label{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#64748b}

/* ★ 2026-10-23 绑定失败原因列（订单 → 闪电退货上家 → 商品清单 → 绑定失败） */
.view .why{ color:#b4472e; font-size:13px; line-height:1.5; font-weight:600 }
.view .whysub{ color:#8a8f98; font-size:12px; line-height:1.5; margin-top:2px }
/* ★ 2026-10-24 晚：grid3c 三卡顶对齐 —— 全局 .view .card + .card 的 16px 间距打进了 grid 内部（第 2、3 张卡被压下 16px） */


/* ★ 2026-10-24 晚：运行行按钮禁止文字竖排（宽度不够时保持自然宽度） */
.runbar .btn{white-space:nowrap}

/* 新增类卡片默认折叠 */
.view details.fold{ border:0 }
.view details.fold > summary{ cursor:pointer; font-weight:600; color:#0d9488; font-size:13px; padding:2px 0 10px; list-style:none }
.view details.fold > summary::-webkit-details-marker{ display:none }
.view details.fold[open] > summary{ margin-bottom:6px }

/* ★ 2026-10-26 主人反馈「登记上架下拉框截断太严重」：原来 up-form 是 7 列固定网格，
   窗口一窄（Windows 缩放 125% 时 CSS 宽度只有 ~1150）每格只剩 110px，
   店铺名「西柚穿搭合集」被截成「西柚…」。这里改成按可用宽度自动换行、每格至少 230px。 */
.view .up-form{ grid-template-columns:repeat(auto-fill,minmax(230px,1fr)) !important; }
/* ★ ui.css:109 有 `.form-row label{width:80px}`（老版"标签在左"的设计），把这里的控件压成 80px，
   所以下拉文字被截断。这里显式覆盖掉宽度。 */
.view .up-form label{ min-width:0; width:auto !important }
.view .up-form select,
.view .up-form input{ width:100%; min-width:0; text-overflow:ellipsis }
.view .up-form select{ padding-right:26px }
.view .up-form button{ justify-self:start }
