/* ============================================================================
 * 甬标 MES · 移动�?—�?设计系统（v3「质感版」）
 *
 * 设计要点�? *   · 品牌�?#2350c8 �?#3b74f0 渐变；深�?#16307a 作为按压/阴影�? *   · 层次：页面底 #eef3fb �?卡片 #fff �?浮层 #fff + 大阴影；hero 用深蓝渐�?+ 光斑
 *   · 圆角阶梯：卡�?18 / �?14 / 控件 12 / 胶囊 999
 *   · 数字统一 tabular-nums（金额不跳动），标题字重 700、字距收�? *   · 图标：页签用线�?SVG（清晰），业务格�?emoji（保留色彩）
 *   · 交互：按�?scale(.985)、页签高亮条、抽屉拖拽把手、骨架屏 shimmer、toast 玻璃�? * ========================================================================== */

:root {
  /* 品牌�?*/
  --brand: #2350c8;
  --brand-2: #3b74f0;
  --brand-deep: #16307a;
  --brand-soft: #e8efff;
  --brand-ink: #1b3c9c;

  /* 中性色 */
  --bg: #eef3fb;
  --bg-2: #f7faff;
  --card: #ffffff;
  --line: #e6ecf6;
  --line-2: #f1f5fb;
  --ink: #0f1a2b;
  --ink-2: #5a6a85;
  --ink-3: #94a2b8;

  /* 语义�?*/
  --ok: #0f9d6b;
  --ok-soft: #e6f8f0;
  --warn: #d98300;
  --warn-soft: #fff4e2;
  --err: #e0453a;
  --err-soft: #ffecea;
  --info: #2f6fed;
  --info-soft: #e9f0ff;
  --mute-soft: #f0f3f9;

  /* 圆角 / 阴影 / 间距 */
  --r-card: 18px;
  --r-row: 14px;
  --r-ctl: 12px;
  --sh-1: 0 1px 2px rgba(16, 36, 78, .05), 0 2px 8px rgba(16, 36, 78, .04);
  --sh-2: 0 2px 8px rgba(16, 36, 78, .06), 0 12px 28px rgba(16, 36, 78, .08);
  --sh-hero: 0 12px 30px rgba(22, 48, 122, .28);
  --pad: 16px;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html { -webkit-text-size-adjust: 100%; }
html, body { margin: 0; padding: 0; }
body {
  font: 15px/1.55 -apple-system, BlinkMacSystemFont, "SF Pro SC", "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
  color: var(--ink);
  background: var(--bg);
  padding-bottom: calc(80px + env(safe-area-inset-bottom));
  -webkit-font-smoothing: antialiased;
  overscroll-behavior-y: contain;
}
button, input, select, textarea { font: inherit; color: inherit; }
button { border: 0; background: none; cursor: pointer; }
.num, .amt, .mono, .kpi .v, .kpi3 .v { font-variant-numeric: tabular-nums; }
.mono { font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; letter-spacing: -.2px; }
.faint { color: var(--ink-3); }
.small { font-size: 12.5px; }
.warn { color: var(--warn); }
.err { color: var(--err); }
.ok { color: var(--ok); }
.b { font-weight: 700; }
.ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.grow { flex: 1; min-width: 0; }
.row { display: flex; align-items: center; gap: 10px; }
.row-between { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.hidden { display: none !important; }
[hidden] { display: none !important; }

/* ---------------------------------------------------------------- 顶部�?*/
.bar {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; gap: 10px;
  height: calc(56px + env(safe-area-inset-top));
  padding: env(safe-area-inset-top) var(--pad) 0;
  background: rgba(247, 250, 255, .82);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid rgba(230, 236, 246, .8);
  color: var(--ink);
  transition: box-shadow .2s;
}
.bar.scrolled { box-shadow: var(--sh-1); }
.bar-title {
  flex: 1; text-align: center; font-size: 17px; font-weight: 700; letter-spacing: -.2px;
}
.bar-btn {
  width: 34px; height: 34px; flex: none; border-radius: 11px;
  display: flex; align-items: center; justify-content: center;
  background: var(--bg-2); color: var(--brand-ink);
  box-shadow: inset 0 0 0 1px var(--line);
  font-size: 17px; line-height: 1;
  transition: transform .12s, background .12s;
}
.bar-btn:active { transform: scale(.94); background: var(--brand-soft); }

/* ---------------------------------------------------------------- 主体 */
#view { padding: 12px var(--pad) 22px; }

.card {
  background: var(--card); border-radius: var(--r-card);
  box-shadow: var(--sh-1); padding: 14px; margin-bottom: 12px;
}
.sec-title {
  display: flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 700; color: var(--ink);
  margin: 18px 2px 10px;
}
.sec-title::before {
  content: ''; width: 4px; height: 15px; border-radius: 3px;
  background: linear-gradient(180deg, var(--brand-2), var(--brand));
}
.sec-title .more { margin-left: auto; font-size: 12px; font-weight: 500; color: var(--brand); }

/* ---------------------------------------------------------------- Hero（首页） */
.hero {
  position: relative; overflow: hidden;
  border-radius: 22px; padding: 20px 18px 16px;
  background:
    radial-gradient(120px 120px at 108% -18%, rgba(255, 255, 255, .28), transparent 70%),
    radial-gradient(160px 160px at -12% 118%, rgba(255, 255, 255, .16), transparent 70%),
    linear-gradient(140deg, #2a5ada 0%, #2350c8 46%, #16307a 100%);
  color: #fff;
  box-shadow: var(--sh-hero);
  margin-bottom: 14px;
}
.hero::after {
  content: ''; position: absolute; right: -40px; top: -60px;
  width: 180px; height: 180px; border-radius: 50%;
  background: rgba(255, 255, 255, .08);
}
.hero-t { font-size: 20px; font-weight: 700; letter-spacing: -.3px; }
.hero-s { margin-top: 4px; font-size: 12px; opacity: .82; }
.hero-kpis {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 16px;
}
.hero-kpi {
  background: rgba(255, 255, 255, .13);
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 14px; padding: 9px 8px; text-align: center;
  backdrop-filter: blur(6px);
}
.hero-kpi .v { font-size: 19px; font-weight: 700; line-height: 1.15; letter-spacing: -.4px; }
.hero-kpi .k { font-size: 10.5px; opacity: .82; margin-top: 3px; }
.hero-kpi.alert { background: rgba(255, 214, 138, .22); border-color: rgba(255, 214, 138, .42); }
.hero-kpi.danger { background: rgba(255, 143, 132, .24); border-color: rgba(255, 143, 132, .45); }

/* ---------------------------------------------------------------- KPI 磁贴（保留兼容） */
.kpi-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.kpi {
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 12px 10px; text-align: center;
}
.kpi .v { font-size: 19px; font-weight: 700; color: var(--ink); letter-spacing: -.4px; }
.kpi .k { font-size: 11px; color: var(--ink-3); margin-top: 3px; }
.kpi.warn .v { color: var(--warn); }
.kpi.err .v { color: var(--err); }

/* ---------------------------------------------------------------- 快捷操作 */
.quick { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.quick-i {
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 12px 4px 10px; display: flex; flex-direction: column; align-items: center; gap: 6px;
  transition: transform .12s, box-shadow .12s;
}
.quick-i:active { transform: scale(.965); box-shadow: var(--sh-2); }
.quick-i .ico {
  width: 38px; height: 38px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(150deg, #eef4ff, #dfe9ff);
  font-size: 19px; line-height: 1;
}
.quick-i .nm { font-size: 11px; color: var(--ink-2); text-align: center; line-height: 1.3; }

/* ---------------------------------------------------------------- 待办 / 最�?*/
.todo {
  display: flex; align-items: center; gap: 12px;
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 12px 14px; margin-bottom: 8px;
  transition: transform .12s;
}
.todo:active { transform: scale(.99); }
.todo .ico {
  width: 34px; height: 34px; flex: none; border-radius: 11px;
  display: flex; align-items: center; justify-content: center;
  background: var(--brand-soft); font-size: 16px;
}
.todo b { font-size: 14px; font-weight: 600; letter-spacing: -.1px; }
.todo .badge {
  flex: none; min-width: 24px; height: 24px; padding: 0 8px;
  border-radius: 12px; background: var(--brand-soft); color: var(--brand-ink);
  font-size: 12px; font-weight: 700; line-height: 24px; text-align: center;
  font-variant-numeric: tabular-nums;
}
.todo .badge.red { background: var(--err-soft); color: var(--err); }
.todo .badge.orange { background: var(--warn-soft); color: var(--warn); }
.todo .badge.blue { background: var(--info-soft); color: var(--info); }

/* ---------------------------------------------------------------- 模块�?*/
.mod-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.mod {
  position: relative; min-width: 0;
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 13px 14px; text-align: left;
  display: flex; align-items: center; gap: 11px;
  transition: transform .12s, box-shadow .12s;
}
.mod:active { transform: scale(.975); box-shadow: var(--sh-2); }
.mod .ico {
  width: 38px; height: 38px; flex: none; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(150deg, #f1f6ff, #e2ebff);
  font-size: 19px; line-height: 1;
}
.mod .txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.mod .nm { display: block; font-size: 14px; font-weight: 600; letter-spacing: -.1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mod .sub { font-size: 11px; color: var(--ink-3); margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mod::after {
  content: ''; width: 6px; height: 6px; flex: none;
  border-right: 1.5px solid var(--ink-3); border-top: 1.5px solid var(--ink-3);
  transform: rotate(45deg); opacity: .7;
}

/* ---------------------------------------------------------------- 搜索 / 筛�?*/
.searchwrap { position: sticky; top: calc(56px + env(safe-area-inset-top)); z-index: 20; background: var(--bg); padding: 4px 0 8px; }
.searchbox {
  display: flex; align-items: center; gap: 8px;
  background: var(--card); border-radius: 14px; box-shadow: var(--sh-1);
  padding: 4px 6px 4px 12px; height: 46px;
}
.searchbox svg { flex: none; color: var(--ink-3); }
.searchbox input {
  flex: 1; min-width: 0; height: 38px; border: 0; background: transparent; font-size: 14px;
}
.searchbox input:focus { outline: none; }
.searchbox .btn-search {
  flex: none; height: 36px; padding: 0 14px; border-radius: 10px;
  background: linear-gradient(140deg, var(--brand-2), var(--brand));
  color: #fff; font-size: 13.5px; font-weight: 600;
  box-shadow: 0 3px 10px rgba(35, 80, 200, .28);
}
/* 2026-11-02 用户口径：所有「搜索」字样改成放大镜图标（方形按钮） */
.searchbox .btn-search.btn-search-icon {
  width: 38px; padding: 0; display: flex; align-items: center; justify-content: center;
}
.searchbox .btn-search.btn-search-icon svg { width: 18px; height: 18px; color: #fff; }
.searchbox .btn-search:active { transform: scale(.97); }

/* 审核中心筛选（2026-11-02：下拉类型 + 搜索） */
.ap-filter{display:flex;gap:8px;align-items:center;padding:4px 0 10px}
.ap-filter select,.ap-filter input{height:38px;border:1px solid var(--line);border-radius:10px;
  background:var(--card);font:inherit;font-size:13px;color:var(--ink);min-width:0}
.ap-filter select{flex:0 0 118px;padding:0 8px}
.ap-filter input{flex:1;padding:0 10px}

/* 筛选胶囊（替代下拉�?*/
.chips {
  display: flex; gap: 8px; overflow-x: auto; padding: 10px 0 4px;
  scrollbar-width: none;
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 26px), transparent 100%);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 26px), transparent 100%);
}
.chips::-webkit-scrollbar { display: none; }
.chip {
  flex: none; height: 32px; padding: 0 14px; border-radius: 999px;
  background: var(--card); color: var(--ink-2);
  box-shadow: inset 0 0 0 1px var(--line);
  font-size: 13px; white-space: nowrap;
  transition: background .15s, color .15s, box-shadow .15s;
}
.chip.on {
  background: linear-gradient(140deg, var(--brand-2), var(--brand));
  color: #fff; box-shadow: 0 4px 12px rgba(35, 80, 200, .26);
  font-weight: 600;
}

/* ---------------------------------------------------------------- 列表 */
.list-body { margin-top: 4px; }
.li {
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 13px 14px; margin-bottom: 9px;
  transition: transform .12s, box-shadow .12s;
}
.li:active { transform: scale(.985); box-shadow: var(--sh-2); }
.li .lt { font-size: 15px; font-weight: 700; letter-spacing: -.2px; }
.li .ls { font-size: 12.5px; color: var(--ink-2); margin-top: 3px; }
.li .amt { font-size: 16px; font-weight: 700; letter-spacing: -.3px; }
.li .sp { color: var(--brand); font-weight: 600; }

/* 状态胶�?*/
.pill {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 2px 9px; border-radius: 999px;
  font-size: 11.5px; line-height: 17px; font-weight: 600; white-space: nowrap;
  background: var(--mute-soft); color: var(--ink-2);
}
.pill::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: .75; }
.pill.green { background: var(--ok-soft); color: var(--ok); }
.pill.orange { background: var(--warn-soft); color: var(--warn); }
.pill.red { background: var(--err-soft); color: var(--err); }
.pill.blue { background: var(--info-soft); color: var(--info); }
.pill.gray { background: var(--mute-soft); color: var(--ink-3); }

/* ---------------------------------------------------------------- 骨架�?*/
.sk { padding: 4px 0; }
.sk-row {
  height: 76px; border-radius: var(--r-row); margin-bottom: 9px;
  background: linear-gradient(100deg, #fff 20%, #f4f7fd 40%, #fff 60%);
  background-size: 220% 100%;
  animation: sk 1.15s ease-in-out infinite;
  box-shadow: var(--sh-1);
}
@keyframes sk { from { background-position: 120% 0; } to { background-position: -60% 0; } }

/* ---------------------------------------------------------------- 空状�?*/
.empty {
  padding: 46px 18px; text-align: center; color: var(--ink-3); font-size: 13.5px; line-height: 1.75;
}
.empty .art {
  width: 92px; height: 92px; margin: 0 auto 14px; border-radius: 28px;
  background: linear-gradient(150deg, #eef4ff, #e2ebff);
  display: flex; align-items: center; justify-content: center;
  font-size: 38px; opacity: .95;
  box-shadow: inset 0 0 0 1px #e0e9fb;
}
.empty .big { font-size: 34px; display: block; margin-bottom: 6px; opacity: .55; }
.empty b { color: var(--ink-2); font-weight: 600; }

/* ---------------------------------------------------------------- 键�?/ 明细 */
.kv { background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1); padding: 2px 14px; }
.kv .r { display: flex; gap: 12px; padding: 11px 0; border-bottom: 1px solid var(--line-2); font-size: 13.5px; }
.kv .r:last-child { border-bottom: 0; }
.kv .k { width: 82px; flex: none; color: var(--ink-3); }
.kv .v { flex: 1; min-width: 0; word-break: break-all; }

.dh .code { font-size: 19px; font-weight: 700; letter-spacing: -.4px; }
.dh .cust { font-size: 14.5px; margin-top: 5px; }
.dh .meta { font-size: 12.5px; color: var(--ink-2); margin-top: 3px; }
.dh .sum { font-size: 12.5px; color: var(--ink-2); margin-top: 8px; }
.dh .sum b { color: var(--brand); font-size: 16px; letter-spacing: -.3px; }

.lns { margin-top: 10px; }
/* 明细行右下角角标（检验状态等，用户口径 2026-10-23） */
/* 列表上方内嵌区块（采购收货的「待收货明细」，用户口径 2026-10-23） */
.list-banner{margin-bottom:10px}
.list-banner .ln{background:var(--card);border:1px solid var(--line);border-radius:var(--r-row);padding:10px 12px;margin-bottom:8px}
.list-banner .ln .btn{flex:none}
.ln { position: relative; }
.ln-badge { position: absolute; right: 10px; bottom: 8px; }
/* 最后一行文字给角标让位，避免长文本压到角标上 */
.ln.has-badge .ls:last-of-type { padding-right: 78px; }
.ln-badge .pill { font-size: 11px; padding: 1px 8px; }
.ln {
  background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 12px 14px; margin-bottom: 9px;
}
.ln .nm { font-size: 14px; font-weight: 600; }
.ln .ls { font-size: 12px; color: var(--ink-2); margin-top: 3px; }
.ln .sp { color: var(--brand); font-weight: 600; }
/* 备货明细行右下角的「打印标签」小图标（状态仍在右上角，2026-11-02） */
.ship-foot { display: flex; justify-content: flex-end; margin-top: 8px; }
.ship-label {
  flex: none; width: 30px; height: 30px; padding: 0 !important;
  border: 1px solid var(--line); border-radius: 9px; background: var(--card);
  color: var(--ink-2); font-size: 15px; line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
}
.ship-label:active { transform: scale(.94); }
/* ★可点的商品明细行（点进去看商品详情 + 图纸�?*/
.ln-tap { cursor: pointer; }
.ln-tap:active { background: var(--bg-2); }
.ln-tap .nm { color: var(--brand-ink); }
/* 用户口径 2026-10-23：明细行名称后面不再显示箭头（订单 / BOM 等所有可点行统一去掉） */
/* 用户口径 2026-10-23：加了 .no-arrow 的可点行不显示「→」（BOM 用料清单等） */
.ln-tap.no-arrow .nm::after{content:none}

/* ---------------------------------------------------------------- 抽屉 */
.mask {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(10, 20, 40, .42);
  backdrop-filter: blur(2px);
  display: flex; align-items: flex-end;
  animation: fade .16s ease-out;
}
@keyframes fade { from { opacity: 0; } to { opacity: 1; } }
.sheet {
  width: 100%; max-height: 92vh; overflow: auto;
  background: linear-gradient(180deg, #f7faff, var(--bg) 120px);
  border-radius: 22px 22px 0 0;
  padding: 8px var(--pad) calc(18px + env(safe-area-inset-bottom));
  box-shadow: 0 -12px 40px rgba(10, 25, 60, .18);
  animation: up .24s cubic-bezier(.22, .8, .3, 1);
  -webkit-overflow-scrolling: touch;
}
@keyframes up { from { transform: translateY(40px); opacity: .7; } to { transform: none; opacity: 1; } }
.sheet::before {
  content: ''; display: block; width: 40px; height: 4px; border-radius: 4px;
  background: #d3dced; margin: 0 auto 10px;
}
.sheet h3 { margin: 0 0 14px; font-size: 17px; font-weight: 700; text-align: center; letter-spacing: -.2px; }
.confirm-mask { z-index: 80; align-items: center; justify-content: center; }
.sheet.confirm { max-width: 84%; border-radius: 20px; background: var(--card); padding: 20px 18px 16px; }
.sheet.confirm::before { display: none; }
.confirm-msg { font-size: 14px; color: var(--ink-2); line-height: 1.65; text-align: center; margin: 6px 0 4px; }

/* ---------------------------------------------------------------- 表单 */
.fld { display: block; margin-bottom: 12px; }
.fld > span { display: block; font-size: 12.5px; color: var(--ink-2); margin-bottom: 6px; font-weight: 500; }
.fld > span.req::after { content: ' *'; color: var(--err); }
.fld input, .fld select, .fld textarea {
  width: 100%; min-width: 0; padding: 12px 14px;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-ctl);
  font-size: 15px; box-shadow: var(--sh-1);
  transition: border-color .15s, box-shadow .15s;
}
.fld textarea { min-height: 70px; }
.fld input:focus, .fld select:focus, .fld textarea:focus {
  outline: none; border-color: var(--brand-2);
  box-shadow: 0 0 0 3px rgba(59, 116, 240, .14);
}
.fld2 { display: flex; gap: 12px; }
.fld2 > .fld { flex: 1; min-width: 0; }
.hint { font-size: 11.5px; color: var(--ink-3); margin-top: 6px; line-height: 1.6; }

/* ---------------------------------------------------------------- 按钮 */
.acts { display: flex; gap: 10px; margin-top: 16px; }
.btn {
  flex: 1; height: 48px; border-radius: 14px;
  background: var(--card); color: var(--ink);
  box-shadow: inset 0 0 0 1px var(--line), var(--sh-1);
  font-size: 15.5px; font-weight: 600; letter-spacing: -.1px;
  transition: transform .12s, box-shadow .12s;
}
.btn:active { transform: scale(.975); }
.btn-primary {
  background: linear-gradient(140deg, var(--brand-2), var(--brand));
  color: #fff; box-shadow: 0 8px 20px rgba(35, 80, 200, .3);
}
.btn-primary:active { box-shadow: 0 4px 12px rgba(35, 80, 200, .3); }
.btn-danger { color: var(--err); box-shadow: inset 0 0 0 1px #ffd4d0, var(--sh-1); }
.btn[disabled] { opacity: .5; }
.btn-xs { height: 34px; padding: 0 14px; border-radius: 11px; font-size: 13px; flex: none; }
.more-btn { width: 100%; height: 44px; border-radius: 14px; color: var(--brand-ink); box-shadow: inset 0 0 0 1px var(--line), var(--sh-1); background: var(--card); }
.more-done { text-align: center; color: var(--ink-3); font-size: 12px; padding: 12px 0; }

/* ---------------------------------------------------------------- 底部页签 */
.tabs {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
  display: flex; align-items: stretch;
  background: rgba(255, 255, 255, .96);
  backdrop-filter: saturate(180%) blur(16px);
  -webkit-backdrop-filter: saturate(180%) blur(16px);
  border-top: 1px solid rgba(230, 236, 246, .9);
  padding-bottom: env(safe-area-inset-bottom);
}
.tab {
  flex: 1; height: 62px; position: relative;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  color: var(--ink-3); font-size: 11px;
  transition: color .16s;
}
.tab svg { width: 22px; height: 22px; stroke-width: 1.7; }
.tab.on { color: var(--brand); font-weight: 600; }
.tab.on::after {
  content: ''; position: absolute; bottom: 6px; width: 18px; height: 3px; border-radius: 3px;
  background: linear-gradient(90deg, var(--brand-2), var(--brand));
}
.tab .tab-ico { font-size: 19px; line-height: 1; }
/* 待审核红点（底部「我的」页签 + 我的页「审核中心」图标） */
.tab-dot {
  position: absolute; top: 5px; right: calc(50% - 25px);
  min-width: 16px; height: 16px; padding: 0 4px; border-radius: 9px;
  background: #e5484d; color: #fff; font-size: 10.5px; line-height: 16px;
  text-align: center; font-style: normal; font-weight: 700;
  box-shadow: 0 0 0 2px #fff;
}

/* ---------------------------------------------------------------- 提示 / loading */
.toast-root {
  position: fixed; left: 0; right: 0; bottom: calc(92px + env(safe-area-inset-bottom)); z-index: 90;
  display: flex; flex-direction: column; align-items: center; gap: 8px; pointer-events: none;
}
.toast {
  max-width: 88%; padding: 11px 18px; border-radius: 16px;
  background: rgba(15, 26, 43, .92); color: #fff;
  font-size: 13.5px; line-height: 1.5;
  box-shadow: 0 10px 30px rgba(10, 20, 40, .3);
  backdrop-filter: blur(8px);
  animation: tin .18s cubic-bezier(.22, .8, .3, 1);
}
.toast.ok { background: rgba(15, 157, 107, .95); }
.toast.err { background: rgba(224, 69, 58, .95); }
@keyframes tin { from { transform: translateY(10px) scale(.98); opacity: 0; } to { transform: none; opacity: 1; } }

.loading {
  position: fixed; inset: 0; z-index: 95;
  background: rgba(238, 243, 251, .6);
  backdrop-filter: blur(3px);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
}
.spinner {
  width: 34px; height: 34px; border-radius: 50%;
  border: 3px solid rgba(59, 116, 240, .2); border-top-color: var(--brand);
  animation: spin .75s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.loading-text { font-size: 13px; color: var(--ink-2); }

/* ---------------------------------------------------------------- 登录�?*/
.login { padding: 24px 18px; }
.login .logo {
  width: 78px; height: 78px; margin: 18px auto 14px; border-radius: 24px;
  background: linear-gradient(140deg, var(--brand-2), var(--brand-deep));
  color: #fff; font-size: 27px; font-weight: 700; letter-spacing: -1px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 16px 34px rgba(35, 80, 200, .34);
}
.login h1 { text-align: center; font-size: 21px; margin: 0 0 5px; letter-spacing: -.3px; }
.login p { text-align: center; color: var(--ink-3); font-size: 12.5px; margin: 0 0 22px; }
.login .card { padding: 18px 16px; }
.login .login-remember { display:flex; align-items:center; gap:8px; color:var(--ink-2); font-size:12.5px; margin:2px 0 11px; user-select:none; }
.login .login-remember input { width:16px; height:16px; margin:0; accent-color:#2350c8; }
.login .tip { text-align: center; color: var(--ink-3); font-size: 11.5px; margin-top: 16px; }

/* ---------------------------------------------------------------- 我的 */
.me-head {
  position: relative; overflow: hidden;
  display: flex; align-items: center; gap: 14px;
  border-radius: 20px; padding: 18px 16px;
  background:
    radial-gradient(120px 120px at 110% -20%, rgba(255, 255, 255, .26), transparent 70%),
    linear-gradient(140deg, #2a5ada, #16307a);
  color: #fff; box-shadow: var(--sh-hero); margin-bottom: 14px;
}
.me-ava {
  width: 56px; height: 56px; flex: none; border-radius: 18px;
  background: rgba(255, 255, 255, .18);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .24);
  display: flex; align-items: center; justify-content: center;
  font-size: 21px; font-weight: 700;
}
.me-name { font-size: 18px; font-weight: 700; letter-spacing: -.3px; }
.me-sub { font-size: 12px; opacity: .85; margin-top: 3px; }
.me-actions { display: flex; gap: 10px; margin: 18px 0 6px; padding-top: 16px; border-top: 1px solid var(--line); }
.me-actions .btn {
  flex: 1; height: 42px; border-radius: 13px; background: var(--card);
  box-shadow: inset 0 0 0 1px var(--line), var(--sh-1); font-size: 13.5px;
}
.me-actions .btn-danger { color: var(--err); box-shadow: inset 0 0 0 1px rgba(224, 69, 58, .28), var(--sh-1); }

.kpi3 { display: flex; gap: 10px; margin-bottom: 12px; }
.kpi3 > div {
  flex: 1; background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1);
  padding: 12px 10px; text-align: center;
}
.kpi3 .v { font-size: 18px; font-weight: 700; color: var(--ink); letter-spacing: -.4px; }
.kpi3 .k { font-size: 11px; color: var(--ink-3); margin-top: 3px; }

/* ---------------------------------------------------------------- 图纸 */
.dwg { background: var(--card); border-radius: var(--r-row); box-shadow: var(--sh-1); padding: 8px; margin-top: 10px; }
.dwg img { width: 100%; height: auto; display: block; border-radius: 8px; }
.dwg .none { padding: 30px; text-align: center; color: var(--ink-3); font-size: 12.5px; }

.qty-in {
  width: 100px; flex: none; text-align: right; padding: 9px 12px;
  background: var(--card); border: 1px solid var(--line); border-radius: 11px;
  font-variant-numeric: tabular-nums;
}
.qty-in:focus { outline: none; border-color: var(--brand-2); box-shadow: 0 0 0 3px rgba(59, 116, 240, .14); }

/* ---------------------------------------------------------------- 全链路追�?*/
.trace-card { margin-bottom: 12px; }
.trace-box {
  display: flex; align-items: center; gap: 8px;
  background: var(--card); border: 1px solid var(--line); border-radius: 16px;
  padding: 7px 10px; box-shadow: var(--sh-1);
}
.trace-box svg { flex: none; color: var(--ink-3); }
.trace-box input {
  flex: 1; min-width: 0; border: 0; background: transparent;
  font-size: 14px; padding: 7px 2px;
}
.trace-box input:focus { outline: none; }
.trace-box button {
  flex: none; height: 34px; padding: 0 14px; border-radius: 10px;
  background: linear-gradient(140deg, var(--brand-2), var(--brand));
  color: #fff; font-size: 13px; font-weight: 600;
}
.trace-tip { font-size: 11px; color: var(--ink-3); margin: 6px 4px 0; line-height: 1.5; }
.trace-p { width: 100%; text-align: left; }
.trace-bar { height: 5px; border-radius: 3px; background: var(--brand-soft); overflow: hidden; margin: 7px 0 3px; }
.trace-bar i { display: block; height: 100%; background: linear-gradient(90deg, var(--brand-2), var(--brand)); border-radius: 3px; }
.timeline { padding-left: 2px; }
.tl { display: flex; gap: 10px; padding: 9px 0; border-bottom: 1px solid var(--line-2); }
.tl:last-child { border-bottom: 0; }
.tl-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--brand); margin-top: 7px; flex: none; box-shadow: 0 0 0 3px var(--brand-soft); }
.tl-t { font-size: 13.5px; font-weight: 600; line-height: 1.45; }

/* ---------------------------------------------------------------- 列表工具�?/ 关联单据 */
.list-tools { display: flex; gap: 8px; margin: 0 0 10px; flex-wrap: wrap; }
.list-tools .btn {
  height: 36px; padding: 0 14px; border-radius: 11px; font-size: 13px;
  background: var(--card); box-shadow: inset 0 0 0 1px var(--line), var(--sh-1);
}
.list-tools .btn-primary { background: linear-gradient(140deg, var(--brand-2), var(--brand)); color: #fff; box-shadow: var(--sh-1); }
.rels { display: flex; flex-direction: column; gap: 8px; }
.rel {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; text-align: left; background: var(--card);
  border-radius: 14px; box-shadow: var(--sh-1); padding: 10px 12px;
}
.rel:active { transform: scale(.99); }
.rel[disabled] { opacity: .78; }
.rel-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.rel-main b { font-size: 13.5px; }
.rel-sub { font-size: 12px; color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rel-right { display: flex; align-items: center; gap: 6px; flex: none; }

/* ---------------------------------------------------------------- 积分考核 */
.score-hero {
  position: relative; overflow: hidden; color: #fff;
  border-radius: 22px; padding: 18px 16px 16px;
  margin-bottom: 14px;
  background:
    radial-gradient(130px 130px at 108% -20%, rgba(255, 255, 255, .28), transparent 70%),
    radial-gradient(90px 90px at -10% 110%, rgba(80, 150, 255, .35), transparent 70%),
    linear-gradient(140deg, #2f63d8, #16307a);
  box-shadow: var(--sh-hero);
}
.score-hero-k { font-size: 13px; font-weight: 600; opacity: .95; letter-spacing: .2px; }
.score-hero-m { font-size: 11.5px; opacity: .75; margin-top: 3px; }
.score-month {
  flex: none; max-width: 118px; padding: 6px 8px; border-radius: 10px;
  background: rgba(255, 255, 255, .16); border: 1px solid rgba(255, 255, 255, .28);
  color: #fff; font-size: 11.5px;
}
.score-month option { color: #111; background: #fff; }
.score-main { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-top: 16px; }
.score-big { font-size: 44px; font-weight: 800; line-height: .95; letter-spacing: -1.5px; }
.score-rating { font-size: 11.5px; opacity: .82; margin-top: 8px; }
.score-ranks { font-size: 11.5px; opacity: .9; text-align: right; line-height: 1.65; }
.score-kpis { display: flex; gap: 8px; margin-top: 16px; }
.score-kpis > div {
  flex: 1; text-align: center; padding: 8px 4px; border-radius: 12px;
  background: rgba(255, 255, 255, .12); border: 1px solid rgba(255, 255, 255, .16);
}
.score-kpis b { display: block; font-size: 14px; font-weight: 700; letter-spacing: -.2px; }
.score-kpis span { display: block; font-size: 10px; opacity: .78; margin-top: 2px; }
.score-note {
  margin-top: 10px; padding: 6px 9px; border-radius: 9px;
  background: rgba(255, 255, 255, .12); font-size: 10.5px; line-height: 1.5; opacity: .9;
}
.kpi4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 12px; }
.kpi4 .kpi { padding: 10px 7px; }
.kpi4 .kpi .v { font-size: 16px; }
.kpi4 .kpi .k { font-size: 10px; }
.mod-badge {
  display: inline-block; min-width: 18px; height: 18px; line-height: 18px;
  padding: 0 5px; border-radius: 9px; background: var(--err); color: #fff;
  font-size: 10.5px; font-style: normal; text-align: center; vertical-align: 1px;
}
.score-top { padding: 4px 14px; }
.score-rank { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-bottom: 1px solid var(--line-2); font-size: 13.5px; }
.score-rank:last-child { border-bottom: 0; }
.rk {
  display: inline-flex; min-width: 22px; height: 22px; align-items: center; justify-content: center;
  border-radius: 7px; background: var(--brand-soft); color: var(--brand);
  font-size: 11px; font-weight: 700; margin-right: 6px;
}
.score-notice { display: block; width: 100%; text-align: left; border: 0; font: inherit; color: inherit; }

@media (max-width: 380px) {
  .tab { font-size: 10px; }
  .tab svg { width: 20px; height: 20px; }
  .score-big { font-size: 38px; }
  .score-kpis b { font-size: 12.5px; }
  .kpi4 { grid-template-columns: repeat(2, 1fr); }
}

/* ---------------------------------------------------------------- 深色模式 */
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0b1220;
    --bg-2: #111a2b;
    --card: #141d2e;
    --line: #22304a;
    --line-2: #1b2537;
    --ink: #eaf0fa;
    --ink-2: #9fb0ca;
    --ink-3: #6d7f9b;
    --brand-soft: #182b52;
    --brand-ink: #b9cdff;
    --ok-soft: #12301f;
    --warn-soft: #33240c;
    --err-soft: #351915;
    --info-soft: #17233f;
    --mute-soft: #1a2438;
    --sh-1: 0 1px 2px rgba(0, 0, 0, .3), 0 2px 8px rgba(0, 0, 0, .24);
    --sh-2: 0 4px 16px rgba(0, 0, 0, .38);
  }
  .bar { background: rgba(11, 18, 32, .82); }
  .tabs { background: rgba(17, 26, 43, .92); }
  .quick-i .ico, .mod .ico { background: linear-gradient(150deg, #1a2438, #16203a); }
  .sk-row { background: linear-gradient(100deg, #141d2e 20%, #1a2438 40%, #141d2e 60%); background-size: 220% 100%; }
  .sheet { background: linear-gradient(180deg, #111a2b, var(--bg) 140px); }
  .empty .art { background: linear-gradient(150deg, #16203a, #1a2438); box-shadow: inset 0 0 0 1px #22304a; }
}

/* ---------------------------------------------------------------- 螺丝包订单（附件�?APP 专用 · v3 卡片版）*/
.ap-tools{display:flex;align-items:center;gap:8px;margin:2px 0 12px}
.ap-filter-btn{flex:0 0 auto;background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff;border:0;
  border-radius:var(--r-ctl);padding:10px 16px;font:inherit;font-weight:600;box-shadow:0 6px 16px rgba(35,80,200,.22)}
.ap-filter-btn:active{transform:scale(.985)}
.ap-search-box{flex:1;display:flex;align-items:center;background:var(--card);border:1px solid var(--line);
  border-radius:999px;overflow:hidden;min-width:0;box-shadow:var(--sh-1)}
.ap-search-box input{flex:1;min-width:0;border:0;background:transparent;padding:10px 14px;font:inherit;outline:none}
.ap-search-btn{border:0;background:transparent;padding:10px 14px;font:inherit;font-weight:600;color:var(--brand)}
.ap-filter-row{padding:0 0 10px}
.ap-filter-row select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-ctl);
  background:var(--card);color:var(--ink)}

/* 列表：白卡片 + 状态胶�?+ 进度条（替代原来的绿条表格） */
.ap-list{display:flex;flex-direction:column;gap:10px}
.ap-card{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:var(--r-card);
  background:var(--card);padding:13px 14px;font:inherit;color:var(--ink);box-shadow:var(--sh-1)}
.ap-card:active{transform:scale(.99)}
.ap-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.ap-card-code{font-family:ui-monospace,Consolas,monospace;font-size:13px;font-weight:700;color:var(--brand-ink);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ap-card-name{margin:2px 0 9px;font-size:13.5px;line-height:1.45;color:var(--ink-2);word-break:break-all}
.ap-prog{height:6px;border-radius:999px;background:var(--mute-soft);overflow:hidden}
.ap-prog>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--brand),var(--brand-2))}
.ap-prog.is-done>i{background:linear-gradient(90deg,#0f9d6b,#34c08a)}
.ap-card-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:8px;
  font-size:12px;color:var(--ink-2)}
.ap-card-meta b{font-family:ui-monospace,Consolas,monospace;font-size:13px;color:var(--ink)}
.ap-total{margin:14px 0 0;padding:14px 16px;border-radius:var(--r-card);background:var(--card);
  border:1px solid var(--line);box-shadow:var(--sh-1);font-size:15px;color:var(--ink-2);display:flex;
  align-items:baseline;justify-content:space-between}
.ap-total b{font-size:20px;color:var(--brand-ink);font-family:ui-monospace,Consolas,monospace}

/* 详情：头�?+ 配件明细�?+ 页签 */
.ap-detail-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;margin:2px 0 12px;
  border:1px solid var(--line);border-radius:var(--r-card);background:var(--card);box-shadow:var(--sh-1)}
.ap-detail-head>div{flex:1;min-width:0}
.ap-detail-head .ap-lab{color:var(--ink-3);margin-right:5px;font-size:12.5px}
.ap-detail-head .ap-val{margin-top:4px;font-size:14px}
.ap-detail-head .ap-val b{font-weight:700}
.ap-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.ap-chip{padding:3px 9px;border-radius:999px;background:var(--mute-soft);color:var(--ink-2);font-size:11.5px}
.ap-chip em{font-style:normal;color:var(--ink);font-weight:700;font-family:ui-monospace,Consolas,monospace}
.ap-check-top{flex:0 0 auto;padding:7px 16px;border-radius:var(--r-ctl);border:1px solid var(--line);
  background:var(--bg-2);color:var(--ink);font-size:13px}

.ap-sec{margin:16px 2px 8px;font-size:13px;font-weight:700;color:var(--ink-2);letter-spacing:.3px}
.ap-mats{display:flex;flex-direction:column;gap:8px;margin-bottom:6px}
.ap-mat{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border:1px solid var(--line);
  border-radius:var(--r-row);background:var(--card)}
/* 可点的商品行（点进去看商品详情 + 图纸）：轻微反馈，告诉用户这行能点 */
.ap-mat-tap{cursor:pointer}
.ap-mat-tap:active{background:var(--bg-2);border-color:var(--brand)}
/* 用户口径 2026-10-23：去掉配件编码后面的小箭头（.c::after 的 →），可点语义靠 cursor/点击反馈表达 */
.ap-mat-k{flex:1;min-width:0}
.ap-mat-k .c{font-family:ui-monospace,Consolas,monospace;font-size:12.5px;font-weight:700;color:var(--brand-ink)}
.ap-mat-k .n{margin-top:2px;font-size:12.5px;color:var(--ink-2);line-height:1.4;word-break:break-all}
.ap-mat-r{flex:0 0 auto;text-align:right}
.ap-mat-r .q{font-family:ui-monospace,Consolas,monospace;font-size:16px;font-weight:700}
.ap-mat-r .g{margin-top:2px;font-size:11px;color:var(--ink-3)}

.ap-tabs{display:flex;gap:4px;margin:14px 0 12px;padding:4px;border-radius:var(--r-ctl);
  background:var(--mute-soft);border:1px solid var(--line-2)}
.ap-tabs button{flex:1;border:0;background:transparent;padding:9px 2px;font:inherit;font-size:13px;
  color:var(--ink-2);border-radius:9px;position:relative}
.ap-tabs button.active{background:var(--card);color:var(--brand-ink);font-weight:700;box-shadow:var(--sh-1)}
.ap-tabs button.active:after{display:none}

.ap-kv{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 2px;
  border-bottom:1px solid var(--line-2);font-size:13.5px;color:var(--ink-2)}
.ap-kv b{font-size:15px;color:var(--ink);font-family:ui-monospace,Consolas,monospace}
.ap-form{margin-top:12px;padding:14px;border:1px solid var(--line);border-radius:var(--r-card);background:var(--card);
  box-shadow:var(--sh-1)}
.ap-field{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line-2)}
.ap-field:last-of-type{border-bottom:0}
.ap-field>span{flex:0 0 76px;font-size:13.5px;color:var(--ink-2)}
.ap-field input{flex:1;min-width:0;border:1px solid var(--line);border-radius:var(--r-ctl);background:var(--bg-2);
  padding:9px 12px;font:inherit;font-size:14px;outline:none}
.ap-field input:focus{border-color:var(--brand);background:#fff}
.ap-field .btn{flex:0 0 auto;border:1px solid var(--line);background:var(--card);border-radius:var(--r-ctl);
  padding:8px 13px;font-size:13px;color:var(--ink)}
.ap-hint{margin-top:8px;font-size:11.5px;color:var(--ink-3);line-height:1.6}

.ap-main-btn{display:block;width:100%;margin:14px 0 6px;padding:14px;border-radius:var(--r-ctl);border:1px solid #9cc3f5;
  background:linear-gradient(135deg,var(--brand-soft),#dbe8ff);color:var(--brand-ink);font:inherit;font-size:15px;
  font-weight:700}
.ap-main-btn:active{transform:scale(.99)}
.ap-start-btn{background:var(--ok-soft);border-color:#9ad8ac;color:#0b7a4f}

/* �?026-10-22�?ap-rep*（报工记录卡片）�?.ap-flow（三个统计格子）随「报工记录」列表一起下�?*/

.ap-label-form label{display:flex;align-items:center;min-height:44px;border-bottom:1px solid var(--line-2);gap:10px;font-size:13.5px}
.ap-label-form label>span{flex:0 0 96px;color:var(--ink-2)}
.ap-label-form input{flex:1;min-width:0;border:0;background:transparent;padding:6px 0;font:inherit;font-size:14px;outline:none}
.ap-label-form select{flex:1;min-width:0;border:0;background:transparent;padding:6px 0;font:inherit;font-size:14px;outline:none;color:var(--ink)}
/* 标签打印：张数/零头提示条（用户口径 2026-10-23） */
.ap-label-calc{margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-row);background:var(--card);font-size:13.5px;line-height:1.6}
.ap-label-calc b{color:var(--brand-ink)}
.ap-label-tip{font-size:11.5px;color:var(--ink-3);line-height:1.6;margin-top:6px}
.ap-empty-cell{text-align:center!important;color:var(--ink-3);padding:14px!important}

/* ---------------------------------------------------------------- 员工操作�?v1 */
.emp-hero{margin:4px 0 14px;padding:18px 16px;border-radius:18px;color:#fff;
  background:linear-gradient(135deg,#2350c8 0%,#3b74f0 58%,#5b8ff7 100%);
  box-shadow:0 8px 22px rgba(35,80,200,.25)}
.emp-hello{font-size:17px;font-weight:500;line-height:1.3}
.emp-hello b{font-weight:700}
.emp-sub{margin-top:6px;font-size:12.5px;opacity:.9}
.emp-date{margin-top:10px;font-size:11px;opacity:.7}
.emp-section{margin:16px 2px 8px;font-size:13px;font-weight:700;color:var(--ink-2);letter-spacing:.3px}
/* 首页最新系统公示轮播（2026-11-02） */
.home-notice{display:none;width:100%;align-items:center;gap:8px;margin:8px 0 0;padding:9px 11px;
  border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.94);text-align:left;
  font:inherit;color:var(--ink);box-shadow:var(--sh-1)}
.home-notice .hn-tag{flex:none;font-size:11px;font-weight:700;color:#2350c8;background:#e8f0ff;border-radius:6px;padding:2px 6px}
.home-notice .hn-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px}
.home-notice .hn-more{flex:none;color:#94a3b8;font-size:16px}

.emp-quick{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.emp-quick-i{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:12px;
  background:var(--card);padding:13px 12px;font:inherit;color:var(--ink);text-align:left;box-shadow:var(--sh-1)}
.emp-quick-i .ic{font-size:22px;line-height:1}
.emp-quick-i:active{transform:scale(.985)}
.emp-kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.emp-kpi{border:1px solid var(--line);border-radius:12px;background:var(--card);padding:12px;text-align:left;
  font:inherit;color:var(--ink);box-shadow:var(--sh-1)}
.emp-kpi b{display:block;font-size:22px;line-height:1.2;font-family:ui-monospace,Consolas,monospace}
.emp-kpi span{display:block;margin-top:4px;font-size:11.5px;color:var(--ink-2)}
.emp-kpi.warn b{color:#d97706}.emp-kpi.ok b{color:#0f9d58}
.emp-loading,.emp-empty{padding:12px;font-size:12px;color:var(--ink-3);text-align:center}
/* �?026-10-22�?emp-todo（工作台 KPI 下面那条黄条）随提示条一起下线，用户口径「去掉�?*/
.emp-notice{display:flex;width:100%;align-items:center;gap:8px;border:0;border-bottom:1px solid var(--line-2);
  background:transparent;padding:11px 2px;font:inherit;color:var(--ink);text-align:left}
.emp-role-bar{display:flex;align-items:center;gap:8px;margin:6px 2px 4px;font-size:12px;color:var(--ink-2)}
.emp-role-dot{width:7px;height:7px;border-radius:50%;background:#22b14c;flex:0 0 auto}
.emp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
/* ★「更多功能（按权限）」：默认折叠的一块，展开里是按权限多出来的入�?*/
.emp-more{margin:16px 2px 8px}
.emp-more>summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--ink-2);letter-spacing:.3px;
  list-style:none;padding:4px 0}
.emp-more>summary::-webkit-details-marker{display:none}
.emp-more>summary::before{content:"▸ ";color:var(--brand);font-weight:700}
.emp-more[open]>summary::before{content:"▾ "}
.emp-more .emp-grid{margin-top:8px}
/* ★「最新通知」右侧的小圆角箭头（用户口径 2026-10-22：靠右做一个小小图标就行，
   别用整宽�?.btn —�?手机�?.btn �?display:block 通栏，会把标题挤掉） */
.emp-sec-more{margin-left:auto;flex:0 0 auto;width:24px;height:24px;border-radius:50%;
  border:1px solid var(--line);background:var(--bg-2);color:var(--brand);
  display:flex;align-items:center;justify-content:center;padding:0 0 1px;
  font-size:15px;line-height:1;cursor:pointer}
.emp-sec-more:active{background:var(--line)}
/* ★「＋ 增加检验项」新增的一行（手机端检验录入）：名称行 + 三列小格子，�?是右上角小圆点，
   不要�?.btn（手机上 .btn 是通栏�?*/
.qc-new{padding:10px 12px}
.qc-n-top{display:flex;align-items:center;gap:8px}
.qc-n-top .qc-n-name{flex:1;min-width:0}
.qc-n-del{flex:0 0 auto;width:26px;height:26px;border-radius:50%;padding:0;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  border:1px solid var(--line);background:var(--bg-2);color:var(--err);font-size:12px}
.qc-n-del:active{background:var(--err-soft);border-color:var(--err)}
.qc-n-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:9px}
.qc-n-f{display:block;min-width:0}
.qc-n-f>span{display:block;font-size:11px;color:var(--ink-3);margin-bottom:3px;line-height:1.2}
.qc-new .qc-n-f input,.qc-new .qc-n-f select,.qc-new .qc-n-name{
  width:100%;min-width:0;box-sizing:border-box;padding:9px 10px;
  border:1px solid var(--line);border-radius:11px;background:var(--bg-2);
  font-size:14px;color:var(--ink);outline:none;box-shadow:none}
.qc-new .qc-n-name{background:var(--card);font-weight:600}
.qc-new input:focus,.qc-new select:focus{border-color:var(--brand-2);background:var(--card);
  box-shadow:0 0 0 3px rgba(59,116,240,.12)}
.emp-tile{display:flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:12px;
  background:var(--card);padding:14px 10px;font:inherit;color:var(--ink);text-align:left;box-shadow:var(--sh-1)}
.emp-tile .ic{font-size:20px}.emp-tile .nm{flex:1;min-width:0;font-size:13px;line-height:1.25}
.emp-tile .arrow,.emp-menu-i .arrow{color:var(--ink-3);font-size:17px}
.emp-profile{display:flex;align-items:center;gap:13px;padding:16px 4px 14px;border-bottom:1px solid var(--line-2)}
/* ★2026-11-02 用户口径：个人信息 + 我的积分合并成一张卡；「我的」页去掉顶部标题栏 */
.emp-me-card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;box-shadow:var(--sh-1)}
.emp-me-card .emp-profile{padding:0 44px 12px 0;border-bottom:0}
/* 2026-11-02：修改密码 / 退出登录合并到个人信息右上角一个齿轮图标 */
.emp-account-btn{position:absolute;top:10px;right:10px;width:34px;height:34px;padding:0;border-radius:50%;
  border:1px solid var(--line);background:var(--bg-2);color:var(--ink-2);font-size:17px;line-height:1;
  display:inline-flex;align-items:center;justify-content:center}
.emp-account-btn:active{transform:scale(.94)}
.emp-me-card .emp-score-card{border:0;background:transparent;padding:0}
.emp-me-card .emp-score-sub{border-top-color:var(--line-2);color:var(--ink-2)}

.emp-ava{width:52px;height:52px;border-radius:50%;flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:20px;font-weight:700;background:linear-gradient(135deg,#2350c8,#5b8ff7)}
.emp-ava svg{width:30px;height:30px;display:block}
.emp-pname{font-size:18px;font-weight:700;line-height:1.3}
.emp-psub{font-size:12px;color:var(--ink-2);margin-top:3px}
.emp-score-card{border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,#f7faff,#eef4ff);
  padding:14px;color:#13264d}
.emp-score-top{display:flex;align-items:center;gap:14px}
.emp-score-big{font-size:40px;line-height:1;font-weight:700;color:#2350c8;font-family:ui-monospace,Consolas,monospace}
.emp-score-label{font-size:13px;font-weight:600}
.emp-score-sub{display:flex;gap:16px;margin-top:12px;padding-top:10px;border-top:1px solid #d9e3f8;font-size:12px;color:#4b5f85}
.emp-score-sub b{font-family:ui-monospace,Consolas,monospace}
.emp-menu{border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.emp-menu-i{display:flex;width:100%;align-items:center;gap:10px;border:0;border-bottom:1px solid var(--line-2);
  background:transparent;padding:13px 12px;font:inherit;color:var(--ink);text-align:left}
.emp-menu-i:last-child{border-bottom:0}
.emp-menu-i .ic{width:22px;text-align:center}
.emp-menu-i .nm{flex:1;min-width:0}
.emp-menu-i.danger{color:#dc2626}

/* 「我的」积分卡右侧：内部沟通消息入口（2026-11-02） */
.emp-msg-btn{position:relative;margin-left:auto;width:34px;height:34px;flex:0 0 34px;border-radius:50%;
  border:1px solid #d9e3f8;background:#fff;color:#2350c8;display:flex;align-items:center;justify-content:center;
  padding:0;box-shadow:0 1px 4px rgba(35,80,200,.10);align-self:center}
.emp-msg-btn .ic{font-size:18px;line-height:1}
.emp-msg-btn .emp-dot{top:-3px;right:-3px;min-width:15px;height:15px;line-height:15px;font-size:9.5px;padding:0 3px}
.emp-msg-btn:active{transform:scale(.94)}

/* 手机端内部沟通（消息） */
.emp-im-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin:2px 2px 10px}
.emp-im-title{font-size:16px;font-weight:700}
.emp-im-list{display:flex;flex-direction:column;gap:8px}
.emp-im-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:1px solid var(--line);
  border-radius:14px;background:var(--card);padding:11px 12px;color:var(--ink);font:inherit;box-shadow:var(--sh-1)}
.emp-im-item:active{transform:scale(.99)}
.emp-im-ava{width:42px;height:42px;flex:0 0 42px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#fff;font-weight:700;font-size:17px;background:linear-gradient(135deg,#2350c8,#6f9cf5)}
.emp-im-ava.sm{width:36px;height:36px;flex-basis:36px;font-size:15px}
.emp-im-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.emp-im-line{display:flex;align-items:center;gap:8px;min-width:0}
.emp-im-name{font-size:14px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.emp-im-time{font-size:10.5px;color:var(--ink-2);flex:0 0 auto}
.emp-im-last{font-size:12px;color:var(--ink-2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.emp-im-badge{flex:0 0 auto;min-width:17px;height:17px;border-radius:9px;background:#e5484d;color:#fff;
  font-size:10px;line-height:17px;text-align:center;padding:0 4px;font-style:normal}
.emp-im-pick{display:flex;flex-direction:column;gap:4px;max-height:58vh;overflow:auto}
.emp-im-pick-i{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line-2);
  background:transparent;padding:10px 2px;color:var(--ink);font:inherit}
.emp-im-pick-i:last-child{border-bottom:0}
.emp-im-chat-head{display:flex;align-items:center;gap:9px;margin:0 2px 10px}
.emp-im-msgs{display:flex;flex-direction:column;gap:10px;padding:4px 2px 8px}
.emp-im-msg{display:flex;flex-direction:column;align-items:flex-start;max-width:86%}
.emp-im-msg.me{align-self:flex-end;align-items:flex-end}
.emp-im-meta{font-size:10.5px;color:var(--ink-2);margin:0 4px 3px}
.emp-im-bubble{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:9px 11px;
  font-size:14px;line-height:1.55;color:var(--ink);word-break:break-word;box-shadow:var(--sh-1)}
.emp-im-msg.me .emp-im-bubble{background:#e8f0ff;border-color:#cfe0ff}
.emp-im-text{white-space:pre-wrap}
.emp-im-card{margin-top:4px;padding:7px 8px;border-radius:8px;background:#f3f6ff;color:#2350c8;font-size:12px}
.emp-im-file{display:inline-block;margin-top:5px;font-size:12px;color:#2350c8}
.emp-im-sys{align-self:center;text-align:center;font-size:11px;color:var(--ink-2);background:#f1f4fa;
  border-radius:10px;padding:4px 10px;max-width:90%}
.emp-im-compose{position:sticky;bottom:8px;display:flex;gap:8px;align-items:center;background:var(--bg);
  padding:8px 2px 2px;margin-top:4px}
.emp-im-compose input{flex:1;min-width:0;border:1px solid var(--line);border-radius:20px;background:var(--card);
  padding:10px 13px;font:inherit;font-size:14px;outline:none}
.emp-im-compose input:focus{border-color:#2350c8}
.emp-im-compose .btn{border-radius:20px;padding:9px 16px;flex:0 0 auto}

/* 手机端场内通讯录（2026-11-02） */
.emp-ct-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin:2px 2px 10px}
.emp-ct-title{font-size:16px;font-weight:700}
.emp-ct-toolbar{display:flex;gap:8px;align-items:center;margin:0 2px 9px}
.emp-ct-select{width:42%;min-width:0;border:1px solid var(--line);border-radius:10px;background:var(--card);
  padding:9px 8px;font:inherit;font-size:12.5px;color:var(--ink);outline:none}
.emp-ct-search{flex:1;min-width:0;border:1px solid var(--line);border-radius:10px;background:var(--card);
  padding:9px 11px;font:inherit;font-size:13px;outline:none}
.emp-ct-select:focus,.emp-ct-search:focus{border-color:#2350c8}
.emp-ct-list{display:flex;flex-direction:column;gap:7px}
.emp-ct-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;text-decoration:none;
  border:1px solid var(--line);border-radius:13px;background:var(--card);padding:10px 11px;color:var(--ink);
  font:inherit;box-shadow:var(--sh-1)}
.emp-ct-item:active{transform:scale(.99)}
.emp-ct-item.no-phone{opacity:.86}
.emp-ct-ava{width:38px;height:38px;flex:0 0 38px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#fff;font-weight:700;font-size:15px;background:linear-gradient(135deg,#3b6fd4,#7aa4f7)}
.emp-ct-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.emp-ct-name{font-size:14px;font-weight:600;display:flex;align-items:center;gap:7px;min-width:0}
.emp-ct-code{font-size:10.5px;color:var(--ink-2);font-family:ui-monospace,Consolas,monospace;font-weight:500}
.emp-ct-sub{font-size:11.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.emp-ct-phone{flex:0 0 auto;font-size:11.5px;color:#2350c8;font-family:ui-monospace,Consolas,monospace;
  max-width:38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
.emp-version{text-align:center;color:var(--ink-3);font-size:10.5px;padding:22px 0 8px}
@media (prefers-color-scheme: dark){
  .emp-score-card{background:linear-gradient(135deg,#16223a,#1a2b4a);border-color:#2a3b57;color:#dfe9fb}
  .emp-score-sub{border-top-color:#2a3b57;color:#9fb0ca}
}
/* ---------------------------------------------------------------- 列表筛选（收进一个小图标�?026-10-23�?*/
.btn-filter {
  flex: none; width: 34px; height: 34px; padding: 0; margin-left: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; border: 1px solid var(--line); background: var(--card);
  color: var(--ink-2); position: relative;
}
.btn-filter:active { transform: scale(.97); }
.btn-filter.on { border-color: var(--brand); color: var(--brand); background: var(--brand-soft); }
/* 有筛选生效时右上角一个蓝�?*/
.btn-filter.on::after {
  content: ''; position: absolute; top: 5px; right: 5px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--brand);
}
.filter-panel {
  margin-top: 8px; padding: 10px 12px;
  background: var(--card); border-radius: 14px; box-shadow: var(--sh-1);
}
.filter-panel { display: none; }
.filter-panel.open { display: block; }
.filter-panel .chips { margin-top: 2px; }
.filter-panel .chips + .chips { margin-top: 6px; }
/* 下拉型筛选（客户 / 状态）：同一行并排，左边小标�?+ 右边原生下拉 */
.chips-row { display: flex; align-items: center; gap: 10px; padding: 4px 0 2px; }
.chips-sel { flex: 1 1 0; min-width: 0; display: flex; align-items: center; gap: 6px; overflow: visible;
  padding: 0; -webkit-mask-image: none; mask-image: none; }
.chips-sel .chip-lbl { flex: none; font-size: 12.5px; color: var(--ink-3); }
.chips-sel .chip-sel {
  flex: 1; min-width: 0; height: 34px; padding: 0 8px; font: inherit; font-size: 13px;
  color: var(--ink); background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px;
}

.emp-kpi.err b{color:#dc2626}

/* 工作台顶部「全链路追溯」搜�?+ 追溯结果时间线（2026-10-23�?*/
.emp-trace{margin:2px 0 6px}
.emp-trace .searchbox{height:46px}
.emp-trace-result .tl{padding:8px 0;border-bottom:1px solid var(--line)}
.emp-trace-result .tl:last-child{border-bottom:0}
.emp-trace-result .ln .nm{font-weight:600}

/* ---------------------------------------------------------------- 工作台顶�?banner�?026-10-23�? * 与登录页同款深色蓝图风：网格 + 六角螺母/螺栓线稿 + 标语�? * 高度固定 246px�?*「我的工作」从 banner 下方开�?*（不再压在背景上）�?*/
body.on-home::before{
  content: ''; position: fixed; left: 0; right: 0; top: 0; height: 264px;
  background: #0a1524 var(--home-bg, url('/app/img/home-bg.svg')) center top / cover no-repeat;
  z-index: 0; pointer-events: none;
}
/* banner 底部柔和过渡，避免一条硬�?*/
body.on-home::after{
  content: ''; position: fixed; left: 0; right: 0; top: 224px; height: 40px;
  background: linear-gradient(to bottom, rgba(10,21,36,0), var(--bg));
  z-index: 0; pointer-events: none;
}
body.on-home .bar{ background: transparent; border-bottom: 0; box-shadow: none;
  backdrop-filter: none; -webkit-backdrop-filter: none; }
body.on-home .bar-title{ visibility: hidden; }
body.on-home .bar-btn{ background: rgba(255,255,255,.12); color: #dce8ff;
  box-shadow: inset 0 0 0 1px rgba(159,192,255,.28); }
body.on-home #view{ position: relative; z-index: 1; }
body.on-home .home-hero{
  margin: 0 calc(-1 * var(--pad)); padding: 6px var(--pad) 18px;
  /* �?banner 同高�?46px = 顶栏 56 + #view 上内边距 12 + 178）：
     这样「我的工作」正好落在背景图**下面**，不会被压住 */
  min-height: 196px; display: flex; flex-direction: column;
}
body.on-home .home-hero .emp-trace{ margin: auto 0 0; }
body.on-home .home-hero .hero-say{
  color: #ffffff; font-size: 19px; font-weight: 700; letter-spacing: .2px;
  text-shadow: 0 2px 10px rgba(0,0,0,.35); margin: 2px 0 4px;
}
body.on-home .home-hero .hero-sub{
  color: rgba(214,229,255,.72); font-size: 11.5px; margin: 0 0 14px; letter-spacing: .4px;
}
body.on-home .home-hero .searchbox{ box-shadow: 0 14px 30px rgba(0,0,0,.34); }

/* ---------------------------------------------------------------- 手机端登录页：深色蓝�?+ 标语�?026-10-23�?*/
/* ★登录页�?026-10-23）：灰色线条 + 紧固件背景，**全屏铺满**（连顶栏一起盖住） */
body.on-login .bar{ display: none; }
body.on-login #view{ padding: 0; }
.login{
  position: fixed; inset: 0; z-index: 60; overflow-y: auto;
  margin: 0; padding: calc(env(safe-area-inset-top, 0px) + 34px) var(--pad) 40px;
  background: #a84408 var(--login-bg, url('/app/img/login-warm-1.svg')) center top / cover no-repeat;
}
.login .logo{
  width: 78px; height: 78px; margin: 18px auto 14px; border-radius: 24px;
  background: linear-gradient(140deg, var(--brand-2), var(--brand-deep));
  color: #fff; font-size: 27px; font-weight: 700; letter-spacing: -1px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 16px 34px rgba(0,0,0,.5);
}
.login .slogan{
  color: #fff; font-size: 20px; font-weight: 700; line-height: 1.35; text-align: center;
  margin: 16px 0 8px; letter-spacing: .3px; text-shadow: 0 2px 12px rgba(0,0,0,.6);
}
.login .sub{ color: rgba(210,218,228,.72); font-size: 12px; text-align: center; margin: 0 0 20px; }
.login .card{ box-shadow: 0 18px 40px rgba(0,0,0,.45); }
.login .tip{ color: rgba(205,224,255,.6); }

/* ===== 手机端登录页：锁屏背�?+ 每套强调�?+ 窗口缩小�?1/3�?026-10-23�?===== */
.login.login-style-1{--login-accent:#2f6f9e}
.login.login-style-2{--login-accent:#2f8f6a}
.login.login-style-3{--login-accent:#b04a6a}
.login.login-style-4{--login-accent:#a08b2e}
.login.login-style-5{--login-accent:#4b5cb8}
.login.login-style-6{--login-accent:#c07a3a}
.login.login-style-7{--login-accent:#2f86a8}
.login.login-style-8{--login-accent:#8a4aa8}
.login.login-style-9{--login-accent:#2f9a58}
.login.login-style-10{--login-accent:#b8862e}

body.on-login .login{
  padding: calc(env(safe-area-inset-top, 0px) + 26px) 24px 30px;
}
body.on-login .login .logo{
  width: 64px; height: 64px; margin: 6px auto 10px; border-radius: 20px; font-size: 23px;
  background: linear-gradient(140deg, var(--login-accent, var(--brand-2)), var(--brand-deep));
}
body.on-login .login .slogan{ font-size: 17px; margin: 10px 0 4px; }
body.on-login .login .sub{ font-size: 11px; margin: 0 0 14px; }
body.on-login .login .card{ padding: 14px 14px 10px; border-radius: 16px; }
body.on-login .login .fld{ margin-bottom: 9px; }
body.on-login .login .fld > span{ font-size: 11.5px; margin-bottom: 5px; }
body.on-login .login .fld input{ height: 40px; font-size: 14px; }
body.on-login .login .btn-primary{
  height: 42px; font-size: 15px;
  background: var(--login-accent, var(--brand));
  box-shadow: 0 10px 22px rgba(0,0,0,.28);
}
body.on-login .login .tip{ font-size: 10.5px; margin-top: 12px; }

/* ===== 登录页：内容垂直居中 + 限宽�?026-10-23�?===== */
body.on-login .login{
  display: flex; flex-direction: column; justify-content: center; align-items: stretch;
  max-width: 460px; margin: 0 auto; left: 0; right: 0;
}
body.on-login .login .logo,
body.on-login .login .slogan{ margin-left: auto; margin-right: auto; }
body.on-login .login .slogan{ max-width: 92%; text-align: center; }
body.on-login .login .card{ width: 100%; }
body.on-login .login .sub{ display: none; }

/* ===== 登录页：标语与登录卡更松 + 登录按钮拉长居中�?026-10-23�?===== */
body.on-login .login .slogan{ margin-bottom: 26px; line-height: 1.45; }
body.on-login .login .card{ margin-top: 4px; }
body.on-login .login .btn-primary{
  width: 100%; height: 46px; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-size: 16px; letter-spacing: 4px; text-indent: 4px;
}

/* 工作台标语下方：出处行（与电脑端锁屏「—�?质量箴言 · 甬标MES+」一致） */
body.on-home .home-hero .hero-by{
  color: rgba(255,255,255,.82); font-size: 12px; letter-spacing: 1px;
  margin: 2px 0 0; text-shadow: 0 2px 10px rgba(0,0,0,.28);
}

/* 「我的工作」设置弹层（2026-10-23�?*/
.qk-list{ max-height: 52vh; overflow: auto; margin: 0 0 10px; }
.qk-i{ display: flex; align-items: center; gap: 10px; padding: 10px 6px;
  border-bottom: 1px solid var(--line); font-size: 14.5px; }
.qk-i:last-child{ border-bottom: 0; }
.qk-i input{ width: 18px; height: 18px; flex: none; }
.qk-i .ic{ width: 22px; text-align: center; flex: none; }
.qk-i .nm{ flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 「我的」页：单排图标按钮（2026-10-23�?*/
.emp-icons{ display: grid; grid-template-columns: repeat(auto-fit, minmax(64px, 1fr));
  gap: 6px; background: var(--card); border-radius: 16px; padding: 14px 8px; box-shadow: var(--sh-1); }
.emp-icons-2{ grid-template-columns: repeat(2, 1fr); }
/* 2026-11-02：我的页「薪酬与自助」和「审批」两个卡片并排一行 */
.emp-me-row{ display: grid; grid-template-columns: 1fr 1fr; gap: 10px; align-items: stretch; }
.emp-me-row-1{ grid-template-columns: 1fr; }
.emp-me-col{ min-width: 0; display: flex; flex-direction: column; }
.emp-me-row .emp-section{ margin-top: 14px; }
.emp-me-row .emp-icons{ flex: 1; padding: 12px 6px; grid-template-columns: repeat(auto-fit, minmax(52px, 1fr)); }
.emp-me-row .emp-icon-i{ font-size: 11.5px; }
.emp-me-row .emp-icon-i .ic{ font-size: 22px; }
.emp-icon-i{ display: flex; flex-direction: column; align-items: center; gap: 7px;
  position: relative; background: none; border: 0; padding: 6px 2px; color: var(--ink-2); font-size: 12px; line-height: 1.2; }
.emp-icon-i .ic{ font-size: 23px; line-height: 1; }
.emp-icon-i:active{ transform: scale(.96); }
.emp-icon-i.danger{ color: var(--err); }
/* 「审核中心」图标的待审红点 */
.emp-dot {
  position: absolute; top: 0; right: 10px;
  min-width: 16px; height: 16px; padding: 0 4px; border-radius: 9px;
  background: #e5484d; color: #fff; font-size: 10.5px; line-height: 16px;
  text-align: center; font-style: normal; font-weight: 700;
  box-shadow: 0 0 0 2px #fff;
}

/* ---------------------------------------------------------------- 新建订单：商品模糊查�?+ 多行明细�?026-10-23�?*/
.so-head { display: flex; align-items: center; gap: 8px; margin: 12px 0 6px; font-size: 13px; color: var(--ink-2); }
.so-head .so-add {
  margin-left: auto; width: 28px; height: 28px; padding: 0; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--brand); color: #fff; background: linear-gradient(140deg, var(--brand-2), var(--brand));
  font-size: 17px; line-height: 1; box-shadow: 0 3px 10px rgba(35, 80, 200, .28);
}
.so-head .so-add:active { transform: scale(.94); }
.so-line { padding: 10px; margin-bottom: 8px; border-radius: 12px; background: var(--bg-2); border: 1px solid var(--line); }
.so-line-top { display: flex; align-items: flex-start; gap: 8px; }
.so-pick { position: relative; flex: 1; min-width: 0; }
.so-pick .li-kw {
  width: 100%; height: 38px; padding: 0 12px; font: inherit; font-size: 14px; color: var(--ink);
  background: var(--card); border: 1px solid var(--line); border-radius: 10px;
}
.so-pick .li-kw:focus { outline: none; border-color: var(--brand-2); box-shadow: 0 0 0 3px rgba(59, 116, 240, .12); }
.so-pick .li-list {
  position: absolute; left: 0; right: 0; top: 42px; z-index: 30;
  max-height: 230px; overflow: auto; background: var(--card); border-radius: 12px;
  box-shadow: 0 10px 28px rgba(15, 30, 60, .18); border: 1px solid var(--line);
}
.so-pick .li-item {
  display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 10px 12px;
  font: inherit; font-size: 13px; color: var(--ink); background: transparent; border: 0;
  border-bottom: 1px solid var(--line);
}
.so-pick .li-item .li-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* ���ÿ�棺�Ҳ���֣�������Ʒ�� */
/* 可用库存：右侧灰字，不抢商品名 */
.so-pick .li-item .li-stock { flex: none; font-size: 12px; color: var(--ink-3); white-space: nowrap; }
.so-pick .li-item:last-child { border-bottom: 0; }
.so-pick .li-item:active { background: var(--brand-soft); }
.so-pick .li-none { padding: 12px; font-size: 12.5px; color: var(--ink-3); }
.so-line .li-del {
  flex: none; width: 28px; height: 28px; margin-top: 5px; padding: 0; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--line); background: var(--card); color: var(--err); font-size: 12px;
}
.so-line .fld2 { margin-top: 8px; }

/* ---------------------------------------------------------------- 列表底部汇总条（2026-10-23）
   固定在底部页签之上；由 makeList 的 cfg.summary 驱动（例如生产工单：计划 / 已完成）。 */
.list-sum {
  display: none;
  position: fixed; left: 0; right: 0; bottom: 62px; z-index: 35;
  padding: 9px var(--pad) calc(9px + env(safe-area-inset-bottom, 0px));
  background: rgba(255, 255, 255, .97);
  border-top: 1px solid rgba(230, 236, 246, .95);
  box-shadow: 0 -6px 18px rgba(15, 30, 60, .06);
  font-size: 12.5px; color: var(--ink-3);
  align-items: center; gap: 16px;
}
.list-sum.on { display: flex; }
.list-sum .ls-item { display: inline-flex; align-items: baseline; gap: 5px; }
.list-sum .ls-item i { font-style: normal; font-size: 12px; color: var(--ink-3); }
.list-sum .ls-item b { font-size: 15px; color: var(--brand); font-variant-numeric: tabular-nums; letter-spacing: -.2px; }
.list-sum .ls-cnt { margin-left: auto; font-size: 11.5px; color: var(--ink-3); }
/* 有汇总条时给列表底部留出空间，别被压住 */
#view .list-sum.on ~ * { padding-bottom: 0; }

/* 全链路追溯：选中的商品高亮（用户口径 2026-10-23：点商品只换下面的时间线，商品段保留） */
.emp-trace-result .ln.on { box-shadow: inset 0 0 0 2px var(--brand-2), var(--sh-1); background: var(--brand-soft); }
.emp-trace-result .ln.on .nm { color: var(--brand-ink); font-weight: 700; }

/* ---------------------------------------------------------------- 追溯时间线（2026-10-23 简化排版）
   左边固定时间列，右边三行：标题 / 单号·操作人 / 详情（最多两行）；阶段用彩色圆点。
   原先每行塞胶囊 + 单号 + 操作人 + 详情，手机上会乱换行。 */
.tl { display: flex; gap: 10px; padding: 11px 0; border-bottom: 1px solid var(--line); }
.tl:last-child { border-bottom: 0; }
.tl .tl-t { flex: none; width: 44px; text-align: right; line-height: 1.25; padding-top: 1px; }
.tl .tl-t b { display: block; font-size: 12px; font-weight: 600; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.tl .tl-t span { display: block; font-size: 11px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.tl .tl-b { flex: 1; min-width: 0; }
.tl .tl-h { display: flex; align-items: center; gap: 6px; min-width: 0; }
.tl .tl-h b { font-size: 13.5px; font-weight: 600; color: var(--ink); min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl .tl-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: #9aa7b8; }
.tl .tl-dot.blue { background: #3b74f0; }
.tl .tl-dot.purple { background: #8a4aa8; }
.tl .tl-dot.orange { background: #e0892e; }
.tl .tl-dot.green { background: #1f9d63; }
.tl .tl-dot.gray { background: #9aa7b8; }
.tl .tl-s { margin-top: 2px; font-size: 11.5px; color: var(--ink-3);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl .tl-d { margin-top: 3px; font-size: 12px; line-height: 1.45; color: var(--ink-2);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* ---------------------------------------------------------------- 追溯时间线（2026-10-23 二次压缩）
   一行只有 时间 + 圆点 + 标题；操作人在第二行（灰色小字）；详情仅在有数字信息时出现。
   相邻同时间的事件不再重复显示时间。 */
.tl { display: flex; gap: 8px; padding: 7px 0; border-bottom: 1px solid var(--line); }
.tl:last-child { border-bottom: 0; }
.tl .tl-t { flex: none; width: 38px; text-align: right; line-height: 1.2; padding-top: 1px; }
.tl .tl-t b { display: block; font-size: 11px; font-weight: 600; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.tl .tl-t span { display: block; font-size: 10.5px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.tl.tl-same .tl-b { padding-left: 0; }
.tl .tl-b { flex: 1; min-width: 0; }
.tl .tl-h { display: flex; align-items: center; gap: 6px; min-width: 0; }
.tl .tl-h b { font-size: 13px; font-weight: 600; color: var(--ink); min-width: 0; line-height: 1.35;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl .tl-dot { flex: none; width: 6px; height: 6px; border-radius: 50%; background: #9aa7b8; }
.tl .tl-dot.blue { background: #3b74f0; }
.tl .tl-dot.purple { background: #8a4aa8; }
.tl .tl-dot.orange { background: #e0892e; }
.tl .tl-dot.green { background: #1f9d63; }
.tl .tl-dot.gray { background: #9aa7b8; }
.tl .tl-s { font-size: 11px; color: var(--ink-3); line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl .tl-d { margin-top: 1px; font-size: 11.5px; line-height: 1.4; color: var(--ink-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 追溯商品卡：去掉名称后面的「→」（那是 .ln-tap .nm::after 的箭头，这里不需要），只保留可点语义 */
.emp-trace-result .ln .nm::after { content: none !important; padding-left: 0 !important; }
/* 检验判定：抽样数 / 不合格数量 并排一行（用户口径 2026-10-23） */
.qc-2col { display: flex; gap: 10px; }
.qc-2col > .fld { flex: 1 1 0; min-width: 0; }
@media (max-width: 340px) { .qc-2col { flex-wrap: wrap; } .qc-2col > .fld { flex: 1 1 100%; } }
/* 小圆角 ＋ 图标按钮（检验项右上角） */
.btn-ic {
  width: 30px; height: 30px; flex: none; padding: 0; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 17px; line-height: 1; font-weight: 600;
  color: #fff; background: var(--brand); border: 0;
  box-shadow: 0 2px 8px rgba(35, 80, 200, .28);
}
.btn-ic:active { transform: scale(.94); }