/* ============================================================
   毛织管理系统 · 皓白（Pure）
   参照 Apple 产品页：大留白、超细线、柔阴影、渐变进度、大号数字
   ============================================================ */

/* ---------------- 页面转场：像微信一样左右滑 ----------------
   所有层（含 fixed 的底栏、悬浮条）一起做 GPU 位移。
   给 fixed 元素自己加 transform 是安全的，只做视觉位移、不改定位基准。
   注意：位移的元素内部不能再有常驻的 fixed 子元素，否则会错位
   （所以 AI 页的输入条已经从 main 里挪到 body 下了）。 */
html {
  background: #fbfbfd;
}

/* ===== 装箱出货与长期单据（沿用皓白 Pure） ===== */
.pure-card,.shipment-summary{background:#fff;border:1px solid #e7e7eb;border-radius:18px;margin:14px 0;padding:18px}
.ship-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:12px 0 18px}
.ship-kicker{font-size:13px;color:#6e6e73}.ship-hero h1{font-size:30px;letter-spacing:-1px;margin:4px 0 0}.ship-hero h1 small{display:block;font-size:13px;font-weight:500;color:#86868b;letter-spacing:0;margin-top:4px}
.ship-progress{text-align:right}.ship-progress span,.ship-progress small{display:block;color:#86868b;font-size:12px}.ship-progress b{font-size:26px;letter-spacing:-1px;font-variant-numeric:tabular-nums}
.card-title-row{display:flex;align-items:center;justify-content:space-between;gap:14px}.card-title-row h2,.shipment-summary h2{font-size:18px;margin:0 0 4px}.card-title-row p,.shipment-summary p{font-size:13px;color:#86868b;margin:0}
.photo-pick{flex:0 0 auto}.photo-pick input{position:absolute;opacity:0;width:1px;height:1px}.photo-pick span,.ship-add{display:inline-flex;align-items:center;justify-content:center;height:44px;padding:0 16px;border-radius:12px;background:#1d1d1f;color:#fff;font-weight:650;font-size:14px;text-decoration:none}
.upload-list{display:grid;gap:8px;margin-top:15px}.upload-empty{padding:18px;border:1px dashed #d2d2d7;border-radius:12px;text-align:center;color:#86868b;font-size:14px}.upload-row{display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px;border-radius:12px;background:#f5f5f7}.upload-thumb{width:44px;height:44px;border-radius:9px;background:#fff;display:grid;place-items:center;font-size:11px;color:#0071e3}.upload-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.upload-state{font-size:12px;color:#86868b}.upload-row.ok .upload-state{color:#16803a}.upload-row.fail .upload-state{color:#b42318}
.ocr-note{display:flex;gap:9px;align-items:flex-start;margin-top:14px;padding:12px;border-radius:12px;background:#f2f7ff;color:#425466;font-size:12px;line-height:1.55}.ai-dot{flex:0 0 auto;display:grid;place-items:center;width:28px;height:28px;border-radius:9px;background:#0071e3;color:#fff;font-size:10px;font-weight:800}
.ship-date{font-size:12px;color:#6e6e73;text-align:right}.ship-date input{display:block;margin-top:5px;height:40px;border:1px solid #d2d2d7;border-radius:10px;padding:0 10px;font-size:15px;background:#fff}
.ship-matrix{margin-top:16px}.ship-matrix .mx input.ship-qty{width:64px;min-width:54px;height:40px;padding:0 5px;text-align:center;border:1px solid #d8d8dd;border-radius:9px;font-size:16px;background:#fff}.ship-matrix .mx td{padding:7px 5px}
.final-switch{display:flex;align-items:center;gap:12px;cursor:pointer}.final-switch>input{position:absolute;opacity:0}.switch-ui{position:relative;flex:0 0 auto;width:48px;height:29px;border-radius:20px;background:#d2d2d7;transition:.2s}.switch-ui:after{content:"";position:absolute;width:25px;height:25px;left:2px;top:2px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:.2s}.final-switch input:checked+.switch-ui{background:#34c759}.final-switch input:checked+.switch-ui:after{transform:translateX(19px)}.final-switch b{display:block;font-size:15px}.final-switch small{display:block;color:#86868b;margin-top:3px;line-height:1.4}
.variance-box{margin-top:15px}.variance-box label,.ship-note{font-size:13px;color:#6e6e73}.variance-box select,.ship-note textarea{display:block;width:100%;margin-top:7px;border:1px solid #d2d2d7;border-radius:12px;background:#fff;font-size:16px;padding:11px}.ship-note{display:block;margin-top:14px}.ship-note textarea{resize:vertical;min-height:66px}
.ship-submit-bar{position:sticky;z-index:20;bottom:calc(76px + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:space-between;gap:14px;margin:18px -4px 4px;padding:12px 14px;border:1px solid #dedee3;border-radius:16px;background:rgba(255,255,255,.94);backdrop-filter:blur(18px);box-shadow:0 8px 28px #00000012}.ship-submit-bar span{display:block;font-size:12px;color:#86868b}.ship-submit-bar b{font-size:20px;font-variant-numeric:tabular-nums}.primary-btn{height:46px;border:0;border-radius:12px;background:#1d1d1f;color:#fff;padding:0 18px;font-size:15px;font-weight:700}.primary-btn:disabled{opacity:.55}
.shipped-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;padding:13px 14px;border-radius:13px;background:#eef9f1;border:1px solid #cdebd5}.shipped-banner b{display:block;color:#147333}.shipped-banner span{display:block;font-size:12px;color:#4e6b57;margin-top:2px}.reopen-form button{height:36px;border:1px solid #acd7b7;background:#fff;border-radius:10px;color:#147333;padding:0 12px}
.shipment-summary-hd{display:flex;align-items:center;justify-content:space-between;gap:12px}.shipment-none{margin-top:14px;padding:16px;border-radius:12px;background:#f7f7f9;color:#86868b;text-align:center;font-size:13px}.shipment-list{display:grid;gap:10px;margin-top:14px}.shipment-item{padding:13px;border-radius:13px;background:#f7f7f9}.shipment-main{display:flex;align-items:center;gap:9px}.shipment-main span{color:#6e6e73;font-size:13px}.shipment-main b{margin-left:auto;font-variant-numeric:tabular-nums}.shipment-main em{font-style:normal;font-size:11px;padding:3px 7px;border-radius:999px;background:#daf2df;color:#147333}.shipment-files{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}.shipment-files a{font-size:12px;text-decoration:none;color:#0071e3;background:#fff;border:1px solid #d9e8f8;border-radius:8px;padding:6px 9px}.shipment-item>p{margin:9px 0 0;font-size:12px;color:#9a6700}
@media(max-width:560px){.pure-card,.shipment-summary{padding:15px}.ship-hero{align-items:flex-start}.card-title-row{align-items:flex-start;flex-direction:column}.photo-pick,.photo-pick span{width:100%}.ship-date{text-align:left;width:100%}.ship-date input{width:100%}.ship-matrix{margin-left:-15px;margin-right:-15px}.ship-submit-bar{bottom:calc(72px + env(safe-area-inset-bottom))}.shipment-summary-hd{align-items:flex-start}.ship-add{height:40px;padding:0 13px}}

html.nav-leave-f,
html.nav-enter-f,
html.nav-enter-b {
  overflow-x: hidden;
}

/* 出场：只做轻微左移，不淡出（淡出会让"白屏"提前到来，更显得卡）。
   100ms 内就跳走，用户看到的是"被推走"而不是"内容消失后干等"。 */
html.nav-leave-f .topbar,
html.nav-leave-f .wrap,
html.nav-leave-f .tabbar,
html.nav-leave-f .fab,
html.nav-leave-f .ask-bar,
html.nav-leave-f .en-bar {
  transform: translate3d(-12%, 0, 0);
  transition: transform 0.1s ease-out;
}

/* 转场期间关掉毛玻璃：backdrop-filter 跟着位移要反复重算，既卡顿又会花屏 */
html.nav-leave-f .topbar,
html.nav-leave-f .tabbar,
html.nav-leave-f .ask-bar,
html.nav-enter-f .topbar,
html.nav-enter-f .tabbar,
html.nav-enter-f .ask-bar,
html.nav-enter-b .topbar,
html.nav-enter-b .tabbar,
html.nav-enter-b .ask-bar {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  background: #fbfbfd;
}



/* 入场：一渲染就自动播，不依赖 JS 等时机 */
html.nav-enter-f .topbar,
html.nav-enter-f .wrap,
html.nav-enter-f .tabbar,
html.nav-enter-f .fab,
html.nav-enter-f .ask-bar,
html.nav-enter-f .en-bar {
  animation: navInFromRight 0.28s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}
html.nav-enter-b .topbar,
html.nav-enter-b .wrap,
html.nav-enter-b .tabbar,
html.nav-enter-b .fab,
html.nav-enter-b .ask-bar,
html.nav-enter-b .en-bar {
  animation: navInFromLeft 0.28s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}

@keyframes navInFromRight {
  from {
    transform: translate3d(85%, 0, 0);
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}
@keyframes navInFromLeft {
  from {
    transform: translate3d(-12%, 0, 0);
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}

@media (prefers-reduced-motion: reduce) {
  html.nav-leave-f .topbar,
  html.nav-leave-f .wrap,
  html.nav-leave-f .tabbar,
  html.nav-leave-f .fab,
  html.nav-leave-f .ask-bar,
  html.nav-leave-f .en-bar {
    transition-duration: 0.01s;
  }
  html.nav-enter-f .topbar,
  html.nav-enter-f .wrap,
  html.nav-enter-f .tabbar,
  html.nav-enter-f .fab,
  html.nav-enter-f .ask-bar,
  html.nav-enter-f .en-bar,
  html.nav-enter-b .topbar,
  html.nav-enter-b .wrap,
  html.nav-enter-b .tabbar,
  html.nav-enter-b .fab,
  html.nav-enter-b .ask-bar,
  html.nav-enter-b .en-bar {
    animation-duration: 0.01s;
  }
}

:root {
  --bg: #fbfbfd;
  --bg-2: #f5f5f7;
  --card: #ffffff;
  --text: #1d1d1f;
  --text-2: #424245;
  --dim: #86868b;
  --dim-2: #aeaeb2;
  --line: #efeff2;
  --line-2: #e6e6ea;

  --brand: #0071e3;
  --brand-soft: #eaf3ff;
  --hl: #bf4800;
  --hl-soft: #fff6ee;
  --ok: #1b7f4b;
  --ok-soft: #eefaf3;

  --r-lg: 18px;
  --r-md: 14px;
  --r-sm: 10px;

  --sh: 0 1px 2px rgba(0, 0, 0, 0.04), 0 8px 28px -8px rgba(0, 0, 0, 0.08);
  --sh-sm: 0 1px 2px rgba(0, 0, 0, 0.04);

  --glass: rgba(251, 251, 253, 0.82);
  --blur: saturate(180%) blur(20px);

  --f1: #0071e3;
  --f2: #7c5cfa;
  --f3: #e8890c;
  --f4: #1b9d63;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--brand); text-decoration: none; }
h2 { margin: 0; }
.dim { color: var(--dim); }
.dim-2 { color: var(--dim-2); }
.lr-q.dim { font-weight: 400; font-size: 11.5px; }
.strong { font-weight: 500; }
.hl-text { color: var(--hl); }
.nowrap { white-space: nowrap; }
.mono { font-variant-numeric: tabular-nums; }
.mt10 { margin-top: 10px; }

/* ---------------- 顶栏（毛玻璃） ---------------- */
.topbar {
  position: sticky;
  top: 0;
  z-index: 20;
  height: 52px;
  background: var(--glass);
  backdrop-filter: var(--blur);
  -webkit-backdrop-filter: var(--blur);
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 18px;
}
.topbar-title { display: flex; align-items: center; gap: 9px; }
.logo-img { width: 27px; height: 27px; object-fit: contain; flex: none; }
.logo {
  width: 25px;
  height: 25px;
  flex: none;
  border-radius: 7px;
  background: var(--text);
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
}
.logo.lg { width: 40px; height: 40px; border-radius: 11px; font-size: 19px; }
.pt-name { font-size: 15.5px; font-weight: 600; letter-spacing: -0.3px; }
.topbar-right { display: flex; align-items: center; gap: 12px; min-width: 0; }
.who {
  font-size: 12px;
  color: var(--dim);
  max-width: 46vw;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: right;
}
.link-quiet { font-size: 13px; color: var(--dim); }

/* ---------------- 容器 ---------------- */
.wrap {
  max-width: 860px;
  margin: 0 auto;
  padding: 16px 15px 120px;
}
.form-wrap { padding-bottom: 176px; }

.sec-title {
  display: flex;
  align-items: baseline;
  gap: 9px;
  margin: 24px 2px 12px;
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.2px;
}
.sec-sub {
  font-size: 11px;
  font-weight: 400;
  color: var(--dim);
  letter-spacing: 0.1px;
}

.foot-note {
  font-size: 11.5px;
  color: var(--dim);
  margin: 20px 3px 0;
  line-height: 1.7;
  letter-spacing: 0.1px;
}

/* ---------------- 快捷入口 ---------------- */
.quick { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.qbtn {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 3px;
  min-height: 66px;
  padding: 13px 15px;
  background: var(--card);
  border-radius: var(--r-md);
  border: 1px solid var(--line);
  color: var(--text);
  transition: background 0.15s;
}
.qbtn:active { background: #f9f9fb; }
.qbtn.wide { grid-column: span 2; }
.qbtn-t { font-size: 15px; font-weight: 600; letter-spacing: -0.2px; }
.qbtn-s { font-size: 11px; color: var(--dim); }

.qmini { display: grid; grid-template-columns: repeat(4, 1fr); gap: 9px; padding: 14px 0 0; }
.qmini a {
  background: var(--card);
  border-radius: var(--r-md);
  box-shadow: var(--sh-sm);
  padding: 13px 3px 11px;
  text-align: center;
  font-size: 11.5px;
  color: var(--text);
  display: block;
}
.qmini .qi {
  width: 33px;
  height: 33px;
  margin: 0 auto 7px;
  border-radius: 10px;
  background: var(--brand-soft);
  display: flex;
  align-items: center;
  justify-content: center;
}
.qmini svg {
  width: 18px;
  height: 18px;
  stroke: var(--brand);
  fill: none;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.more-link {
  display: block;
  text-align: center;
  font-size: 12.5px;
  color: var(--brand);
  padding: 14px 0 2px;
  font-weight: 500;
}

/* ---------------- 首页进度卡 ---------------- */
.ov-card,
.prog-card {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  padding: 18px 18px 15px;
  margin-bottom: 13px;
}
.ov-card.inner { margin-bottom: 6px; }

.pc-head { display: flex; align-items: baseline; gap: 8px; }
.pc-no {
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.5px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.pc-name { font-size: 12px; color: var(--dim); }
.pc-cust { margin-left: auto; font-size: 11px; color: var(--dim-2); letter-spacing: 0.2px; }

.pc-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  color: var(--dim);
  margin: 6px 0 18px;
}
.pc-meta b { color: var(--text); font-weight: 500; }
.pc-meta em { font-style: normal; color: var(--hl); }

/* 交期倒计时 */
.due {
  margin-left: auto;
  font-size: 11.5px;
  color: var(--dim);
  background: var(--bg-2);
  border-radius: 6px;
  padding: 2px 7px;
  white-space: nowrap;
}
.due.warn { color: #bf4800; background: #fdf1e7; }
.due.over { color: #d70015; background: #fdecec; font-weight: 500; }

/* ---------------- 首页 · 今日 ---------------- */
.today {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 14px 16px 12px;
  margin-top: 14px;
}
.today-hd { display: flex; align-items: center; gap: 8px; }
.today-t { font-size: 13px; font-weight: 600; letter-spacing: -0.2px; }
.today-d { font-size: 11.5px; color: var(--dim); letter-spacing: 0.1px; }
.today-more {
  margin-left: auto;
  font-size: 11.5px;
  color: var(--dim);
  transition: color 0.15s;
}
.today-more:active { color: var(--text); }

.today-grid {
  display: grid;
  grid-template-columns: repeat(4, max-content);
  justify-content: space-between;
  margin-top: 15px;
}
.today-i { display: flex; flex-direction: column; align-items: center; gap: 3px; min-width: 0; }
.today-i b {
  font-size: 19px;
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.7px;
  font-variant-numeric: tabular-nums;
}
.today-i span { font-size: 11px; color: var(--dim); letter-spacing: 0.1px; }

.today-back {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 13px;
  padding-top: 11px;
  border-top: 1px solid var(--line);
  font-size: 11px;
  color: var(--dim);
  white-space: nowrap;
}
.tb-lb { color: var(--dim-2); letter-spacing: 0.2px; }
.tb-i b {
  color: var(--text-2);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  margin-left: 2px;
}

/* ---------------- 首页 · 款号进度卡 ---------------- */
.sc[hidden] { display: none; }
.sc {
  display: block;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 13px 15px 12px;
  margin-bottom: 9px;
  color: inherit;
  text-decoration: none;
  transition: background 0.15s;
}
.sc:active { background: #f9f9fb; }

.sc-hd { display: flex; align-items: baseline; gap: 7px; }
.sc-no {
  flex: none;
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.3px;
  font-variant-numeric: tabular-nums;
}
.sc-nm {
  flex: 1;
  min-width: 0;
  font-size: 12.5px;
  color: var(--text-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sc-pct {
  flex: none;
  font-size: 20px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.8px;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.sc-pct small {
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0;
  color: var(--dim);
  margin-left: 1px;
}

/* 订单件数：跟在款名后面，弱一档 */
.sc-qty {
  flex: none;
  font-size: 11px;
  color: var(--dim);
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.1px;
  margin-right: 3px;
}

.sc-mt {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-top: 7px;
  font-size: 11px;
  color: var(--dim);
  white-space: nowrap;
}
.sc-cu { color: var(--text-2); }
.sc-dot { color: var(--dim-2); }
.sc-st { overflow: hidden; text-overflow: ellipsis; }
.sc-st .ok { font-style: normal; color: var(--ok); }
.sc-mt .due { margin-left: auto; }

/* 四道工序圆环：百分比写在圈里，圈下是工序名 */
.sc-rings {
  display: flex;
  margin-top: 14px;
}
.sc-ring {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  min-width: 0;
}
.sc-ring-w {
  position: relative;
  width: 46px;
  height: 46px;
}
.sc-ring-w svg { display: block; }
.sc-arc {
  stroke: var(--text);
  transition: stroke-dasharray 0.45s cubic-bezier(0.4, 0, 0.2, 1);
}
.sc-ring-v {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: -0.3px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.sc-ring-v small { font-size: 8.5px; font-weight: 500; letter-spacing: 0; margin-left: 0.5px; color: var(--dim); }
.sc-ring-lb { font-size: 11px; color: var(--dim); }

/* 卡住的那道工序：环和数字变琥珀色，全卡只有这一个焦点 */
.sc-ring.bn .sc-arc { stroke: var(--hl); }
.sc-ring.bn .sc-ring-v,
.sc-ring.bn .sc-ring-v small,
.sc-ring.bn .sc-ring-lb { color: var(--hl); }

/* 已完工：整卡转绿 */
.sc.done .sc-arc { stroke: var(--ok); }
.sc.done .sc-ring-v,
.sc.done .sc-ring-v small,
.sc.done .sc-pct,
.sc.done .sc-pct small { color: var(--ok); }

/* 顶部筛选（分段控件） */
.seg {  display: flex;
  gap: 2px;
  background: var(--bg-2);
  border-radius: 11px;
  padding: 3px;
  margin: 14px 0 16px;
}
.seg-i {
  flex: 1;
  text-align: center;
  padding: 7px 4px;
  border-radius: 9px;
  font-size: 13px;
  color: var(--dim);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
}
.seg-i span {
  font-size: 11px;
  margin-left: 4px;
  color: var(--dim);
  font-variant-numeric: tabular-nums;
}
.seg-i.on {
  background: #fff;
  color: var(--text);
  font-weight: 500;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}
.seg-i.on span { color: var(--text); }

/* ---------------- 首页圆形进度卡（style 详情页用） ---------------- */
.rg-card {
  display: block;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 13px 15px 11px;
  margin-bottom: 9px;
  text-decoration: none;
  color: inherit;
}
.rg-card:active { background: #fafafa; }

.rg-top { display: flex; align-items: baseline; gap: 7px; min-width: 0; }
.rg-no {
  font-size: 15.5px;
  font-weight: 600;
  letter-spacing: -0.3px;
  color: var(--text);
  flex: none;
}
.rg-nm {
  font-size: 12.5px;
  color: var(--text-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.rg-cu {
  margin-left: auto;
  flex: none;
  font-size: 11px;
  color: var(--dim);
  max-width: 46%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.rg-rings { display: flex; align-items: flex-start; margin-top: 15px; }
.rg-i {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  min-width: 0;
}
.rg-lb { font-size: 11px; color: var(--dim); }
.rg-svg { width: 46px; height: 46px; display: block; }
.rg-arc { transition: stroke-dasharray 0.4s ease; }
.rg-arc.rk { stroke: #0053a6; }
.rg-arc.rs { stroke: #0071e3; }
.rg-arc.ri { stroke: #4a9cff; }
.rg-arc.rp { stroke: #8ec1ff; }

.rg-pct {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.3px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.rg-pct small { font-size: 10px; font-weight: 500; letter-spacing: 0; }

.rg-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  padding-top: 9px;
  border-top: 1px solid var(--line);
  font-size: 11.5px;
  color: var(--dim);
  min-width: 0;
}
.rg-foot > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rg-foot .due { flex: none; }

.rg-right { margin-left: auto; display: flex; align-items: center; gap: 8px; flex: none; }
.rg-right .due { margin-left: 0; }
.rg-more { color: var(--brand); font-weight: 500; white-space: nowrap; }

/* 明细页四道工序 */
.pg-list { margin-bottom: 12px; }
.pg-row { display: flex; align-items: center; gap: 10px; padding: 6px 0; }
.pg-lb { width: 34px; flex: none; font-size: 11.5px; color: var(--text-2); }
.pg-track { flex: 1; height: 6px; background: var(--bg-2); border-radius: 3px; overflow: hidden; }
.pg-fill { display: block; height: 100%; border-radius: 3px; transition: width 0.4s ease; }
.f1 { background: var(--f1); }
.f2 { background: var(--f2); }
.f3 { background: var(--f3); }
.f4 { background: var(--f4); }
.pg-pct {
  width: 38px;
  flex: none;
  text-align: right;
  font-size: 11.5px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.pg-qty {
  width: 62px;
  flex: none;
  text-align: right;
  font-size: 11px;
  color: var(--dim);
  font-variant-numeric: tabular-nums;
}

.pc-foot {
  display: flex;
  gap: 18px;
  font-size: 11.5px;
  color: var(--dim);
  border-top: 1px solid var(--line);
  padding-top: 12px;
  margin-top: 4px;
}
.pc-foot b { color: var(--text); font-weight: 500; font-variant-numeric: tabular-nums; }

.sum-line { font-size: 11.5px; color: var(--dim); padding: 4px 3px 0; text-align: right; }
.sum-line b { color: var(--text); }

/* ---------------- 通用列表 ---------------- */
.list {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  overflow: hidden;
}
.list.tight { margin-bottom: 11px; }
.list-row {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 16px;
  border-bottom: 1px solid var(--line);
  font-size: 13.5px;
}
.list-row:last-child { border-bottom: none; }
.lr-date { color: var(--dim); font-size: 11px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.lr-act { color: var(--text-2); font-size: 12px; white-space: nowrap; }
.lr-act.strong { font-weight: 600; color: var(--text); font-size: 14.5px; }
.lr-main { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lr-main b { font-weight: 600; color: var(--text); }
.lr-q { font-weight: 600; white-space: nowrap; font-variant-numeric: tabular-nums; font-size: 13px; }

.empty {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-sm);
  padding: 34px 18px;
  text-align: center;
  color: var(--dim);
  font-size: 13px;
  line-height: 1.7;
}
.empty.sm { padding: 20px; font-size: 12.5px; border-radius: var(--r-md); }

/* ---------------- 款号列表 ---------------- */
.style-row {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 15px 16px;
  border-bottom: 1px solid var(--line);
  color: var(--text);
}
.style-row:last-child { border-bottom: none; }
.style-row:active { background: var(--bg-2); }
.sr-l { flex: 1; min-width: 0; }
.sr-l b {
  display: block;
  font-size: 16px;
  font-weight: 600;
  letter-spacing: -0.4px;
  font-variant-numeric: tabular-nums;
}
.sr-l span {
  display: block;
  font-size: 11.5px;
  color: var(--dim);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sr-r {
  display: flex;
  align-items: baseline;
  gap: 5px;
  flex: none;
}
.sr-num {
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.3px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.sr-lb { font-size: 10.5px; color: var(--dim-2); }
.sr-r.zero .sr-num { color: var(--dim-2); font-weight: 500; }

.styles-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* ---------------- 表格（明细 / 矩阵） ---------------- */
.mx-wrap {
  overflow-x: auto;
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
}
.mx { width: 100%; border-collapse: collapse; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.mx th,
.mx td {
  padding: 11px 12px;
  text-align: center;
  border-bottom: 1px solid var(--line);
  white-space: nowrap;
}
.mx th {
  font-size: 9.5px;
  color: var(--dim-2);
  font-weight: 500;
  letter-spacing: 0.7px;
  padding-bottom: 10px;
}
.mx .mx-c { text-align: left; font-weight: 500; }
.mx .mx-t { font-weight: 600; }
.mx-sum td { border-top: 1px solid var(--text); border-bottom: none; font-weight: 600; }
.mx tbody tr:last-child td { border-bottom: 1px solid var(--line); }
.cdot.inline {
  position: static;
  transform: none;
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-right: 7px;
  vertical-align: 0;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.14);
}

/* ---------------- 表单（通用录入） ---------------- */
.form { display: flex; flex-direction: column; gap: 15px; margin-top: 16px; }
.field { display: block; }
.fl { display: block; font-size: 10.5px; color: var(--dim); margin-bottom: 7px; letter-spacing: 0.3px; }
.fl em { font-style: normal; color: var(--hl); margin-left: 2px; }

input, select, textarea {
  width: 100%;
  padding: 12px 13px;
  font-size: 16px;   /* 不能小于 16：手机上点输入框会被浏览器把整页放大 */
  font-family: inherit;
  color: var(--text);
  background: var(--bg-2);
  border: 1.5px solid transparent;
  border-radius: var(--r-sm);
  min-height: 46px;
  transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
}
textarea { min-height: 64px; resize: vertical; }
input::placeholder, textarea::placeholder { color: var(--dim-2); }
input:focus, select:focus, textarea:focus {
  outline: none;
  background: #fff;
  border-color: var(--brand);
  box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.1);
}

.qty-pair { display: flex; gap: 10px; }
/* 缝盘工作台：一行人 = 人员 + 打/件，可以加多行 */
.sew-rows-hd{display:flex;gap:8px;margin:6px 0 8px;padding:0 2px;color:#9aa3a0;font-size:11.5px;font-weight:700}
/* 人员框只留 3 个字的宽度，省下来的地方给「打 / 件」两个数字框（老板 2026-10-30 要求） */
.sew-rows-hd span:first-child{flex:0 0 74px}
.sew-rows-hd span:nth-child(2){flex:1 1 auto;padding-left:4px}
.sew-row{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.sew-row>select{flex:0 0 74px;width:74px;min-width:0;height:44px;padding:0 2px 0 8px;border:1px solid var(--card-line,#4a4a52);
  border-radius:11px;background:#fff;font:inherit;font-size:13.5px;color:#1d1d1f;text-overflow:ellipsis}
.sew-row .qty-pair{flex:1 1 auto;gap:6px}
.sew-row .qty-pair .qp-box{max-width:190px}
/* 打数比件数再宽一点：打要填两位数的多 */
.sew-row .qty-pair .qp-box:first-child{flex:1.25}
.sew-del{flex:none;width:28px;height:28px;border:0;border-radius:8px;background:#f2f3f5;color:#8a9295;
  font-size:15px;line-height:1;-webkit-tap-highlight-color:transparent}
.sew-del:active{background:#e6e8eb}
/* 缝盘工作台：打+件 下面显示合计，保存前心里有个数 */
.qty-total{margin:-2px 0 16px;padding:0 2px;color:#8a9295;font-size:12px;text-align:right;font-variant-numeric:tabular-nums}
/* 返工入口：正常时候是灰色小字，切进返工就整条变橙，提醒「这不是正常产量」 */
.sew-rework{margin-top:16px;text-align:center}
.sew-rework button{border:0;background:none;color:#8a9295;font-size:13px;font-weight:700;
  text-decoration:underline;text-underline-offset:3px;-webkit-tap-highlight-color:transparent}
.sew-rework span{display:block;margin-top:7px;padding:7px 10px;border-radius:10px;
  background:#fdf3e6;color:#b4620b;font-size:12px;font-weight:700}
.sew-rework span[hidden]{display:none}
.form.is-rework .btn-save{background:#b4620b}
.form.is-rework .sew-rework button{color:#b4620b}
/* 工作台入口：两张卡片，常规生产 / 返工 */
/* 工作台入口：三个模块统一版式，只靠图标颜色区分（蓝=常规 / 橙=返工 / 红=历史） */
.wb-pick{display:grid;gap:12px;margin-top:6px}
.wb-card{display:flex;align-items:center;gap:14px;padding:16px 15px;border:1px solid #e3e5ea;
  border-radius:18px;background:#fff;text-decoration:none;color:inherit;transition:transform .12s}
.wb-card:active{transform:scale(.985)}
.wb-ico{flex:none;display:grid;place-items:center;width:46px;height:46px;border-radius:14px;
  background:#0071e3;color:#fff;box-shadow:0 4px 12px rgba(0,113,227,.22)}
.wb-ico svg{width:23px;height:23px;display:block}
.wb-txt{flex:1 1 auto;min-width:0}
.wb-txt b{display:block;font-size:15.5px;font-weight:800;color:#1d1d1f;letter-spacing:-.2px}
.wb-txt small{display:block;margin-top:4px;color:#8a9295;font-size:11.5px;line-height:1.55}
.wb-go{flex:none;color:#c8ccd0;font-size:19px;font-style:normal;line-height:1;padding-right:2px}
.wb-card.kb-rework .wb-ico{background:#e8890c;box-shadow:0 4px 12px rgba(232,137,12,.24)}
.wb-card.kb-history .wb-ico{background:#c1362f;box-shadow:0 4px 12px rgba(193,54,47,.22)}
.wb-card.kb-report  .wb-ico{background:#0f8577;box-shadow:0 4px 12px rgba(15,133,119,.22)}
/* 其它用途的图标色：工价=橙、人员=绿、工资=紫、请假=红、其它=灰 */
.wb-card.kb-money  .wb-ico{background:#e8890c;box-shadow:0 4px 12px rgba(232,137,12,.24)}
.wb-card.kb-people .wb-ico{background:#2a7d4f;box-shadow:0 4px 12px rgba(42,125,79,.22)}
.wb-card.kb-wage   .wb-ico{background:#7c5cfa;box-shadow:0 4px 12px rgba(124,92,250,.24)}
.wb-card.kb-leave  .wb-ico{background:#c1362f;box-shadow:0 4px 12px rgba(193,54,47,.22)}
.wb-card.kb-gray   .wb-ico{background:#6b7278;box-shadow:0 4px 12px rgba(107,114,120,.2)}
.wb-card.kb-factory .wb-ico{background:#0f8f8f;box-shadow:0 4px 12px rgba(15,143,143,.24)}
/* 外机间毛料调拨：上面日期/厂名/款号/颜色大字，下面毛料卡片小字 */
.tf-form .tf-big .fl{font-size:13.5px;font-weight:800;color:#1d1d1f}
.tf-form .tf-big select,.tf-form .tf-big input{font-size:16px;font-weight:700;min-height:50px}
.tf-cards{display:grid;gap:12px;margin-top:6px}
.tf-card{border:1px solid #e6e8ec;border-radius:16px;background:#fff;padding:12px 12px 6px}
.tf-card-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.tf-card-hd b{font-size:12px;font-weight:800;color:#0071e3;letter-spacing:.3px}
.tf-del{width:30px;height:30px;border:0;border-radius:9px;background:#fdeceb;color:#c1362f;
  font-size:16px;line-height:1;font-family:inherit}
.tf-del:active{transform:scale(.95)}
.tf-line{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.tf-l{flex:none;width:78px;font-size:12px;font-weight:700;color:#8a9295}
.tf-line select,.tf-line input{flex:1 1 0;width:auto;min-width:0;height:40px;border:1px solid #e0e3e8;
  border-radius:10px;background:#fff;padding:0 9px;font-family:inherit;font-size:13px;font-weight:600;color:#1d1d1f}
.tf-line select:focus,.tf-line input:focus{outline:none;border-color:#0071e3;box-shadow:0 0 0 3px rgba(0,113,227,.12)}
.tf-line .sp-wrap{flex:1 1 0;min-width:0}
/* 单位跟在框后面，不另起一行 */
.tf-unit{position:relative;flex:1 1 0;display:block;min-width:0}
.tf-unit input{width:100%;padding-right:36px}
.tf-unit i{position:absolute;right:12px;top:50%;transform:translateY(-50%);
  font-style:normal;font-size:13px;color:#8a9295;pointer-events:none}
/* 人员档案 */
.emp-form .field{margin-bottom:10px}
.emp-list .lr-main{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.emp-ph{display:block;color:#9aa1a6;font-size:11px;font-weight:500;margin-top:2px}
.emp-off{margin:10px 2px 0;color:#9aa1a6;font-size:11.5px}
.emp-off-box{margin-top:10px}
.emp-off-box summary{font-size:12.5px;font-weight:700;color:#0071e3;padding:6px 2px;cursor:pointer}
.dim-row{opacity:.62}
/* 返工页顶部提示条 */
.rework-banner{margin:0 0 14px;padding:12px 14px;border-radius:14px;background:#fdf3e6;border:1px solid #f3dcbe}
.rework-banner b{display:block;color:#b4620b;font-size:14px;font-weight:800}
.rework-banner span{display:block;margin-top:4px;color:#96703f;font-size:11.5px;line-height:1.6}
.qp-box { position: relative; flex: 1; }
.qp-box input {
  font-size: 21px;
  font-weight: 600;
  text-align: center;
  padding-right: 38px;
  min-height: 54px;
  letter-spacing: -0.5px;
}
.qp-u {
  position: absolute;
  right: 13px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 13px;
  color: var(--dim);
  pointer-events: none;
}

.hint { display: block; font-size: 11px; color: var(--dim-2); margin-top: 6px; line-height: 1.6; }
.hint.warn { color: var(--hl); }

.back { display: inline-block; font-size: 13px; color: var(--brand); margin-bottom: 12px; }
.form-hint { font-size: 12px; color: var(--dim); margin: 0 0 16px; line-height: 1.6; }

.alert {
  background: #fff5f5;
  color: #c4342b;
  padding: 12px 14px;
  border-radius: var(--r-md);
  font-size: 13px;
  margin-bottom: 15px;
  line-height: 1.6;
}
.toast-ok {
  background: var(--ok-soft);
  color: var(--ok);
  padding: 11px 14px;
  border-radius: var(--r-md);
  font-size: 13px;
  margin-bottom: 14px;
  font-weight: 500;
}
.bal-box {
  background: var(--brand-soft);
  color: var(--brand);
  padding: 11px 14px;
  border-radius: var(--r-md);
  font-size: 12px;
  margin-bottom: 15px;
  line-height: 1.6;
}
.bal-box b { font-weight: 600; }

/* ---------------- 按钮 ---------------- */
button { font-family: inherit; cursor: pointer; }

.btn-save {
  position: fixed;
  left: 15px;
  right: 15px;
  bottom: 16px;
  max-width: 830px;
  margin: 0 auto;
  height: 52px;
  font-size: 15.5px;
  font-weight: 500;
  letter-spacing: 0.2px;
  color: #fff;
  background: var(--text);
  border: none;
  border-radius: var(--r-md);
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.35);
}
.btn-save:active { background: #000; }

/* 表单里的保存键就地显示（贴在「备注」下面），不要悬浮到整页底部 */
.btn-save.btn-inline{position:static;left:auto;right:auto;bottom:auto;width:100%;max-width:none;
  margin:16px 0 0;display:block;box-shadow:none}

.btn-mini {
  padding: 5px 11px;
  font-size: 11.5px;
  background: var(--bg-2);
  border: none;
  border-radius: 8px;
  color: var(--text-2);
}
.btn-mini:hover { background: var(--brand-soft); color: var(--brand); }

.btn-x {
  padding: 5px 11px;
  font-size: 11.5px;
  color: var(--hl);
  background: var(--hl-soft);
  border: none;
  border-radius: 8px;
}

.btn-primary {
  display: inline-block;
  background: var(--text);
  color: #fff;
  border: none;
  border-radius: var(--r-sm);
  font-size: 13px;
  padding: 9px 16px;
  font-weight: 500;
}

.btn-line {
  flex: 0 0 auto;
  margin-left: auto;
  min-height: 44px;
  padding: 0 18px;
  font-size: 13.5px;
  color: var(--text);
  background: var(--bg-2);
  border: none;
  border-radius: var(--r-sm);
  font-weight: 500;
}

.btn-quiet {
  padding: 9px 16px;
  font-size: 13px;
  background: var(--bg-2);
  border: none;
  border-radius: var(--r-sm);
  color: var(--text-2);
}

.btn, .btn-ghost {
  border-radius: var(--r-sm);
  font-size: 13.5px;
  border: 1px solid var(--line-2);
  padding: 9px 16px;
  background: #fff;
  color: var(--text-2);
}
.btn-ghost { border: none; background: transparent; color: var(--dim); }

/* ---------------- 筛选 chips ---------------- */
.chips { display: flex; gap: 7px; overflow-x: auto; padding-bottom: 9px; }
.chips.subtle { padding-top: 2px; }
.chip {
  flex: none;
  padding: 7px 14px;
  font-size: 12.5px;
  border-radius: 999px;
  background: var(--card);
  color: var(--text-2);
  box-shadow: var(--sh-sm);
  border: 1px solid var(--line);
}
.chip.sm { padding: 5px 12px; font-size: 11.5px; }
.chip.on { background: var(--text); border-color: var(--text); color: #fff; }

/* ---------------- 我的 ---------------- */
.account {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  padding: 18px;
}
.acc-name { font-size: 16px; font-weight: 600; letter-spacing: -0.3px; }
.acc-sub { font-size: 12px; color: var(--dim); margin-top: 3px; }

.inline-form {
  display: flex;
  flex-wrap: wrap;
  gap: 9px;
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-sm);
  padding: 14px;
}
.inline-form input,
.inline-form select {
  flex: 1 1 130px;
  min-width: 0;
  min-height: 44px;
  font-size: 14px;
  padding: 9px 12px;
}
.inline-form .w-full { flex: 1 1 100%; }

/* ---------------- 底部导航（毛玻璃） ---------------- */
.tabbar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 30;
  display: flex;
  background: var(--glass);
  backdrop-filter: var(--blur);
  -webkit-backdrop-filter: var(--blur);
  border-top: 1px solid var(--line);
  padding-bottom: env(safe-area-inset-bottom);
  transition: transform 0.18s ease;
}

/* 键盘弹起：导航栏和「记一笔」一起收下去，输入框直接贴键盘 */
body.kb-open .tabbar {
  transform: translateY(110%);
}
body.kb-open .fab,
body.kb-open .fab-mask {
  opacity: 0;
  pointer-events: none;
}
body.kb-open .ask-bar {
  bottom: 0;
  transition: bottom 0.18s ease;
}

/* 底栏中间隆起一块，把圆形按钮“托”住，两侧用圆角平滑过渡 */

.tab {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  padding: 8px 0 7px;
  font-size: 9.5px;
  color: var(--dim-2);
  letter-spacing: 0.3px;
}
.tab.on { color: var(--brand); font-weight: 600; }
.tab svg {
  width: 21px;
  height: 21px;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* ---------------- 款号详情 ---------------- */
.style-head {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  padding: 18px;
  margin-bottom: 13px;
}
.sh-row { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.sh-no { font-size: 22px; font-weight: 600; letter-spacing: -0.7px; font-variant-numeric: tabular-nums; }
.sh-batch {
  font-size: 10.5px;
  color: var(--dim);
  background: var(--bg-2);
  padding: 4px 9px;
  border-radius: 7px;
}
.sh-edit { margin-left: auto; font-size: 12.5px; color: var(--brand); font-weight: 500; }
.sh-meta { font-size: 11.5px; color: var(--dim); margin-top: 5px; line-height: 1.6; }
.sh-meta2 {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-top: 7px;
  font-size: 11.5px;
  color: var(--dim);
}
.sh-meta2 b { color: var(--text); font-weight: 500; font-variant-numeric: tabular-nums; }
.sh-meta2 .due { margin-left: 0; }
.em { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }

.size-row {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 11px 16px;
  border-bottom: 1px solid var(--line);
}
.size-row:last-child { border-bottom: none; }
.sz-name { width: 50px; font-weight: 600; font-size: 14px; }
.sz-grams { width: 76px; font-size: 11px; color: var(--dim); }
.size-row input {
  width: 86px;
  min-height: 38px;
  padding: 6px 10px;
  font-size: 14px;
  background: var(--bg-2);
}
.bom-size { width: 48px; font-weight: 600; font-size: 12.5px; color: var(--text-2); }

/* 毛料估算 */
.est {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  padding: 18px;
  margin-top: 13px;
}
.est-line {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: var(--dim);
  padding: 3px 0;
}
.est-line b { color: var(--text); font-weight: 500; font-variant-numeric: tabular-nums; }
.est-big {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
  font-size: 13px;
  color: var(--dim);
}
.est-big b {
  font-size: 24px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.8px;
  font-variant-numeric: tabular-nums;
}
.est-sub { font-size: 11.5px; color: var(--dim); margin-top: 6px; line-height: 1.6; }
.est-none { font-size: 12px; color: var(--hl); }

/* ---------------- 代工看板 ---------------- */
.ct-wrap { display: flex; flex-direction: column; gap: 10px; }
.ct-item {
  background: var(--card);
  border-radius: var(--r-md);
  box-shadow: var(--sh-sm);
  padding: 15px 16px;
}
.ct-top { display: flex; align-items: center; gap: 8px; margin-bottom: 11px; flex-wrap: wrap; }
.ct-cust { font-weight: 600; font-size: 14.5px; letter-spacing: -0.2px; }
.ct-proc {
  font-size: 10px;
  background: var(--brand-soft);
  color: var(--brand);
  padding: 3px 9px;
  border-radius: 999px;
  font-weight: 500;
}
.ct-ref { font-size: 10.5px; color: var(--dim-2); }
.ct-bot { display: flex; gap: 16px; font-size: 11.5px; color: var(--dim); flex-wrap: wrap; }
.ct-bot b { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }
.ct-pending { margin-left: auto; }
.ct-pending b { color: var(--hl); font-size: 13px; }

/* ---------------- 今日条 ---------------- */
.today-line {
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
  background: var(--card);
  border-radius: var(--r-md);
  box-shadow: var(--sh-sm);
  padding: 14px 16px;
  font-size: 12px;
  color: var(--dim);
}
.today-line b { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }

/* ============================================================
   生产单录入
   ============================================================ */
.ord-wrap { max-width: 980px; }

.ord-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.ord-h1 { margin: 0; font-size: 24px; font-weight: 600; letter-spacing: -0.8px; }
.ord-batch {
  flex: none;
  font-size: 11px;
  color: var(--dim);
  background: var(--bg-2);
  padding: 6px 11px;
  border-radius: 8px;
}
.ord-batch b { font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }
.ord-sub { font-size: 12px; color: var(--dim); margin: 8px 0 22px; line-height: 1.6; }

.ord-sec {
  background: var(--card);
  border-radius: var(--r-lg);
  box-shadow: var(--sh);
  padding: 22px;
  margin-bottom: 14px;
}
.ord-sec-head {
  display: flex;
  align-items: baseline;
  gap: 10px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.2px;
  margin-bottom: 20px;
}
.ord-idx {
  font-size: 9.5px;
  font-weight: 500;
  color: var(--dim-2);
  letter-spacing: 1.4px;
  font-variant-numeric: tabular-nums;
}
.ord-tip { margin-left: auto; font-size: 10.5px; color: var(--dim-2); font-weight: 400; letter-spacing: 0.3px; }

/* 生产单：一行一个字段 —— 左边标题，右边方框 */
.ord-grid { display: grid; grid-template-columns: 1fr; gap: 11px; }
.of { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; min-width: 0; }
.of.span2 { grid-column: auto; }
.of > span {
  flex: 0 0 96px;
  font-size: 13px;
  letter-spacing: 0;
  color: #5c6166;
  font-weight: 500;
  line-height: 1.35;
}
.of > span em { font-style: normal; color: var(--hl); margin-left: 2px; }
.of > input,
.of > select,
.of > textarea {
  flex: 1 1 auto;
  width: auto;
  min-width: 0;
  background: var(--bg-2);
  border: 1.5px solid transparent;
  border-radius: var(--r-sm);
  padding: 11px 13px;
  font-size: 15px;
  font-family: inherit;
  color: var(--text);
  min-height: 45px;
}
.of > textarea { min-height: 64px; resize: vertical; }
.of > input::placeholder, .of > textarea::placeholder { color: var(--dim-2); }
.of > input:focus, .of > textarea:focus {
  outline: none;
  background: #fff;
  border-color: var(--brand);
  box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.09);
}
.of-hint {
  flex: 0 0 100%;
  padding-left: 106px;
  font-size: 11px;
  color: var(--dim-2);
  font-style: normal;
  letter-spacing: 0;
  line-height: 1.4;
}

.of-chips { flex: 1 1 auto; display: flex; gap: 9px; min-width: 0; }
.chipx {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 45px;
  border-radius: var(--r-sm);
  background: var(--bg-2);
  font-size: 13.5px;
  color: var(--text-2);
  cursor: pointer;
  border: 1.5px solid transparent;
}
.chipx input { width: auto; min-height: 0; accent-color: var(--brand); }
.chipx:has(input:checked) {
  background: var(--brand-soft);
  border-color: #b9dbff;
  color: var(--brand);
  font-weight: 500;
}

.ord-scroll { overflow-x: auto; margin: 0 -6px; padding: 0 6px 3px; }
.omx { width: 100%; border-collapse: collapse; min-width: 620px; }
.omx th {
  font-size: 9.5px;
  font-weight: 500;
  color: var(--dim-2);
  text-align: right;
  padding: 0 8px 10px;
  letter-spacing: 0.7px;
  white-space: nowrap;
}
.omx th.c-color { text-align: left; width: 172px; }
.omx th.c-sum { color: var(--text); }
.omx th.c-del { width: 34px; }

.omx td { padding: 2px; border-top: 1px solid var(--line); vertical-align: middle; }
.omx tbody tr:first-child td { border-top: none; }
.omx input {
  width: 100%;
  background: transparent;
  border: none;
  border-radius: 8px;
  padding: 10px 8px;
  font-size: 15px;
  font-family: inherit;
  color: var(--text);
  text-align: right;
  font-variant-numeric: tabular-nums;
  min-height: 40px;
}
.omx input::placeholder { color: var(--dim-2); }
.omx input:focus { outline: none; background: var(--brand-soft); }
.omx td.c-color { position: relative; padding-left: 27px; }
.omx td.c-color input { text-align: left; }
.cdot {
  position: absolute;
  left: 8px;
  top: 50%;
  transform: translateY(-50%);
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: #d7dae0;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.13);
  pointer-events: none;
}
.omx td.c-sum {
  text-align: right;
  font-size: 15px;
  font-weight: 600;
  padding-right: 10px;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.3px;
}
.omx td.c-del { width: 34px; text-align: center; }
.delrow {
  width: 26px;
  height: 26px;
  border: none;
  border-radius: 8px;
  background: transparent;
  color: var(--dim-2);
  font-size: 17px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
}
.delrow:hover { background: var(--hl-soft); color: var(--hl); }

.omx tfoot td {
  border-top: 1px solid var(--text);
  padding: 13px 8px;
  text-align: right;
  font-size: 15px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.3px;
}
.omx tfoot td.c-color {
  text-align: left;
  font-size: 10.5px;
  font-weight: 500;
  color: var(--dim);
  letter-spacing: 0.5px;
  padding-left: 8px;
}
.omx tfoot td.c-sum { padding-right: 10px; }

.addrow {
  width: 100%;
  margin-top: 13px;
  padding: 12px;
  border: none;
  border-radius: var(--r-sm);
  background: var(--bg-2);
  color: var(--brand);
  font-size: 13.5px;
  font-family: inherit;
  font-weight: 500;
  cursor: pointer;
}
.addrow:hover { background: var(--brand-soft); }

.ord-actions { display: flex; gap: 12px; margin: 24px 0 14px; }
.ord-save {
  flex: 1;
  height: 52px;
  border: none;
  border-radius: var(--r-md);
  background: var(--text);
  color: #fff;
  font-size: 15px;
  font-weight: 500;
  font-family: inherit;
  letter-spacing: 0.2px;
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.35);
}
.ord-save:active { background: #000; }
.ord-cancel {
  width: 92px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-md);
  background: var(--bg-2);
  color: var(--text-2);
  font-size: 14px;
}

/* ---------------- 登录 ---------------- */
.login-body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: var(--bg);
}
.login-card {
  width: 100%;
  max-width: 380px;
  background: var(--card);
  border-radius: 22px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 20px 50px -20px rgba(0, 0, 0, 0.16);
  padding: 32px 28px;
}
.login-brand { display: flex; align-items: center; gap: 13px; margin-bottom: 26px; }
.login-brand h1 { font-size: 19px; margin: 0; letter-spacing: -0.4px; }
.login-brand .sub { margin: 3px 0 0; font-size: 12px; color: var(--dim); }
.login-card form { display: flex; flex-direction: column; gap: 16px; }
.login-card button {
  height: 50px;
  font-size: 15.5px;
  font-weight: 500;
  letter-spacing: 0.2px;
  color: #fff;
  background: var(--text);
  border: none;
  border-radius: var(--r-md);
  margin-top: 6px;
}
.login-card button:active { background: #000; }

/* ---------------- 响应式 ---------------- */
@media (max-width: 400px) {
  .today-grid { grid-template-columns: repeat(4, 1fr); gap: 8px; }
  .today-i b { font-size: 17px; }
  .today-item:nth-child(3) { border-left: none; }
}

@media (max-width: 640px) {
  .ord-grid { grid-template-columns: 1fr; gap: 10px; }
  .of.span2 { grid-column: auto; }
  .of > span { flex: 0 0 92px; font-size: 12.5px; }
  .of-hint { padding-left: 102px; }
  .ord-sec { padding: 18px 15px; border-radius: var(--r-md); }
  .ord-h1 { font-size: 20px; }
  .omx { min-width: 560px; }
  .omx th.c-color { width: 142px; }
  .wrap { padding: 14px 13px 96px; }
}

@media (min-width: 760px) {
  .quick { grid-template-columns: repeat(3, 1fr); }
  .ti-n { font-size: 21px; }
  .rg-svg { width: 56px; height: 56px; }
  .rg-lb { font-size: 12px; }
  .rg-pct { font-size: 15px; }
  .td-n { font-size: 20px; }
  .td-l { font-size: 11.5px; }
}

/* ---------------- 底部圆形「记一笔」 ---------------- */
.fab {
  position: fixed;
  left: 50%;
  bottom: calc(30px + env(safe-area-inset-bottom));
  transform: translateX(-50%);
  z-index: 40;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  border: none;
  background: #1d1d1f;
  color: #ffffff;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0;
  cursor: pointer;
  text-decoration: none;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.16);
  transition: transform 0.18s ease;
}
.fab:active { transform: translateX(-50%) scale(0.94); }
.fab-plus { font-size: 17px; line-height: 1; font-weight: 400; margin-bottom: 1px; }
.fab-t { font-size: 10px; line-height: 1.2; letter-spacing: 0.2px; }

.fab-mask,
.fab-panel { display: none; }
body.fab-open .fab-mask {
  display: block;
  position: fixed;
  inset: 0;
  z-index: 50;
  background: rgba(0, 0, 0, 0.32);
  animation: fabFade 0.18s ease;
}
body.fab-open .fab-panel {
  display: block;
  position: fixed;
  left: 50%;
  top: 50%;
  z-index: 51;
  width: calc(100% - 44px);
  max-width: 340px;
  max-height: 76vh;
  overflow-y: auto;
  padding: 16px;
  background: var(--card);
  border-radius: 18px;
  box-shadow: 0 22px 60px -14px rgba(0, 0, 0, 0.45);
  transform: translate(-50%, -50%);
  animation: fabPop 0.18s cubic-bezier(0.2, 0.8, 0.3, 1);
}
@keyframes fabFade { from { opacity: 0 } to { opacity: 1 } }
@keyframes fabPop {
  from { transform: translate(-50%, -50%) scale(0.94); opacity: 0; }
  to { transform: translate(-50%, -50%) scale(1); opacity: 1; }
}

.fab-handle { display: none; }
.fab-grp { margin-bottom: 14px; }
.fab-grp-t {
  display: block;
  font-size: 11.5px;
  color: var(--dim);
  margin-bottom: 8px;
}
.fab-items { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.fab-item {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 52px;
  border-radius: 12px;
  background: var(--bg-2);
  color: var(--text);
  font-size: 13px;
  text-decoration: none;
  text-align: center;
  padding: 0 4px;
}
.fab-item:active { background: #e8e8ec; }
.fab-cancel {
  width: 100%;
  height: 48px;
  border-radius: 12px;
  border: none;
  background: transparent;
  color: var(--dim);
  font-size: 14px;
  font-family: inherit;
  margin-top: 2px;
}
body.fab-open { overflow: hidden; }

@media (min-width: 760px) {
  .fab-sheet-panel, .fab-panel { max-width: 520px; margin: 0 auto; }
}

/* ---------------- 登录 / 启动页（毛织管家） ---------------- */
.lg-body {
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  background: #fbfbfd;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 28px 22px calc(28px + env(safe-area-inset-bottom));
  font-family: -apple-system, BlinkMacSystemFont, "HarmonyOS Sans SC", "PingFang SC",
    "Microsoft YaHei", "Noto Sans SC", sans-serif;
  color: #1d1d1f;
  -webkit-font-smoothing: antialiased;
}
.lg-wrap { width: 100%; max-width: 380px; }

.lg-brand { text-align: center; margin-bottom: 30px; }
.lg-logo {
  width: 76px;
  height: 76px;
  border-radius: 20px;
  display: block;
  margin: 0 auto 16px;
  box-shadow: 0 8px 22px -8px rgba(0, 0, 0, 0.35);
}
.lg-brand h1 {
  margin: 0;
  font-size: 25px;
  font-weight: 600;
  letter-spacing: -0.6px;
}
.lg-brand p {
  margin: 4px 0 0;
  font-size: 13.5px;
  color: #86868b;
  letter-spacing: 0.4px;
}

.lg-alert {
  background: #fdecec;
  color: #c1362f;
  font-size: 12.5px;
  border-radius: 12px;
  padding: 10px 14px;
  margin-bottom: 14px;
  text-align: center;
}

.lg-form { display: flex; flex-direction: column; gap: 12px; }
.lg-field { display: block; }
.lg-field > span {
  display: block;
  font-size: 11.5px;
  color: #86868b;
  margin: 0 0 6px 4px;
}
.lg-field > span em {
  font-style: normal;
  color: #aeaeb2;
  margin-left: 6px;
  font-size: 11px;
}
.lg-field input {
  width: 100%;
  height: 50px;
  border: 1px solid transparent;
  background: #f2f2f4;
  border-radius: 13px;
  padding: 0 15px;
  font-size: 16px;
  color: #1d1d1f;
  font-family: inherit;
  outline: none;
  transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
}
.lg-field input::placeholder { color: #b0b0b6; }
.lg-field input:focus {
  background: #fff;
  border-color: #0071e3;
  box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.12);
}
.lg-field.sm input { height: 44px; font-size: 14px; }

.lg-btn {
  height: 52px;
  margin-top: 8px;
  border: none;
  border-radius: 13px;
  background: #1d1d1f;
  color: #fff;
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 1px;
  font-family: inherit;
  cursor: pointer;
  transition: opacity 0.15s, transform 0.12s;
}
.lg-btn:active { transform: scale(0.985); opacity: 0.9; }

.lg-foot {
  margin: 22px 0 0;
  text-align: center;
  font-size: 11.5px;
  color: #aeaeb2;
  line-height: 1.7;
}

/* ============================================================
   统一收口：所有页面沿用首页那套卡片 / 按钮 / 筛选语言
   ============================================================ */
.list,
.account,
.inline-form,
.empty,
.qbtn,
.bal-box,
.est,
.ct-wrap {
  box-shadow: none;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--card);
}
.list { overflow: hidden; }
.account { padding: 16px 17px; }
.inline-form { padding: 12px; }
.empty { padding: 26px 18px; }

/* 筛选：从圆角胶囊改为与首页一致的小方块 */
.chips-wrap { position: relative; }
.chips-wrap::after {
  content: "";
  position: absolute;
  top: 0;
  right: -1px;
  bottom: 9px;
  width: 26px;
  background: linear-gradient(90deg, rgba(251, 251, 253, 0), var(--bg));
  pointer-events: none;
}
.chips {
  gap: 6px;
  padding-right: 15px;
  scrollbar-width: none;
}
.chips::-webkit-scrollbar { display: none; }
.chips.subtle { padding-bottom: 4px; }
.chips.subtle .chip {
  background: transparent;
  color: var(--dim);
  padding: 5px 9px;
}
.chips.subtle .chip.on {
  background: var(--bg-2);
  border-color: transparent;
  color: var(--text);
  font-weight: 600;
}
.chip {
  border-radius: 9px;
  background: var(--bg-2);
  border-color: transparent;
  color: var(--text-2);
  box-shadow: none;
  font-weight: 400;
  font-size: 12px;
  padding: 6px 11px;
}
.chip.on {
  background: var(--text);
  border-color: var(--text);
  color: #fff;
  font-weight: 500;
}

/* 按钮：统一黑底主按钮 + 灰色次按钮 */
.btn-primary {
  border-radius: 12px;
  height: 40px;
  line-height: 40px;
  padding: 0 16px;
  font-size: 13.5px;
}
.btn-line { border-radius: 12px; background: var(--bg-2); color: var(--text); }
.btn-quiet { border-radius: 11px; }

/* 章节标题与首页一致 */
.sec-title { margin: 22px 2px 10px; }

/* 表单标签、提示统一字号 */
.fl { font-size: 11.5px; color: var(--dim); }
.hint { font-size: 11px; }

/* ============================================================
   岗位录入页（织机）：一屏多行、逐行选款/码/色/数量，一次提交
   ============================================================ */
.entry { padding-bottom: 176px; }

.en-top {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 10px 12px;
  margin-bottom: 10px;
}
.en-date { display: flex; align-items: center; gap: 7px; flex: 1; min-width: 0; }
.en-date span { font-size: 11.5px; color: var(--dim); flex: none; }
.en-date input {
  flex: 1;
  min-width: 0;
  height: 38px;
  font-size: 13.5px;
  padding: 0 8px;
  border: 1px solid var(--line-2);
  border-radius: 9px;
  background: #fff;
  color: var(--text);
}

.en-shift { display: flex; gap: 4px; background: var(--bg-2); padding: 3px; border-radius: 10px; flex: none; }
.en-shift label { position: relative; }
.en-shift input { position: absolute; opacity: 0; pointer-events: none; }
.en-shift span {
  display: block;
  padding: 6px 12px;
  font-size: 12.5px;
  color: var(--dim);
  border-radius: 8px;
  transition: background 0.15s, color 0.15s;
}
.en-shift input:checked + span { background: #fff; color: var(--text); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.06); }

/* 一款一色一张卡：卡头选款号+颜色，卡里排码数 */
.ec {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 12px 12px 10px;
  margin-bottom: 10px;
}
.ec-hd {
  display: grid;
  grid-template-columns: 1.35fr 1fr 22px;
  gap: 7px;
  align-items: center;
  margin-bottom: 10px;
}
.ec-hd select,
.ec-row select {
  width: 100%;
  min-width: 0;
  height: 40px;
  font-size: 13px;
  font-family: inherit;
  color: var(--text);
  background-color: #fff;
  border: 1px solid var(--line-2);
  border-radius: 9px;
  padding: 0 18px 0 8px;
  text-overflow: ellipsis;
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='6' viewBox='0 0 9 6'%3E%3Cpath d='M1 1l3.5 3.5L8 1' stroke='%23aeaeb2' stroke-width='1.4' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 5px center;
}
.ec-head {
  display: grid;
  grid-template-columns: 1.35fr 1fr 1fr;
  gap: 7px;
  padding: 0 2px 5px;
  font-size: 10.5px;
  color: var(--dim-2);
}
.ec-head span:nth-child(n + 2) { text-align: center; }
.ec-row {
  display: grid;
  grid-template-columns: 1.35fr 1fr 1fr;
  gap: 7px;
  align-items: center;
  margin-bottom: 6px;
}
.ec-row input.num {
  width: 100%;
  min-width: 0;
  height: 40px;
  text-align: center;
  font-size: 14px;
  font-family: inherit;
  font-variant-numeric: tabular-nums;
  border: 1px solid var(--line-2);
  border-radius: 9px;
  background: #fff;
  padding: 0 2px;
  color: var(--text);
}
.ec-row input.num::placeholder { color: var(--dim-2); }
.ec-hd select:focus,
.ec-row select:focus,
.ec-row input.num:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 3px var(--brand-soft);
}
.ec-del {
  width: 22px;
  height: 40px;
  border: none;
  background: transparent;
  color: var(--dim-2);
  font-size: 17px;
  line-height: 1;
  padding: 0;
}
.ec-del:active { color: var(--hl); }
.ec-add {
  width: 100%;
  height: 34px;
  border: 1px dashed var(--line-2);
  border-radius: 9px;
  background: transparent;
  color: var(--brand);
  font-size: 12.5px;
  font-family: inherit;
}
.en-add-card {
  width: 100%;
  height: 46px;
  margin-bottom: 6px;
  border: 1px dashed var(--line-2);
  border-radius: 12px;
  background: transparent;
  color: var(--text-2);
  font-size: 13.5px;
  font-family: inherit;
}
.en-add-card:active { background: var(--bg-2); }

.en-bar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(58px + env(safe-area-inset-bottom));
  z-index: 25;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 9px 15px 11px;
  background: var(--glass);
  backdrop-filter: var(--blur);
  -webkit-backdrop-filter: var(--blur);
  border-top: 1px solid var(--line);
}
.en-sum { font-size: 11.5px; color: var(--dim); text-align: center; }
.en-submit {
  flex: none;
  width: 220px;
  height: 46px;
  padding: 0;
  border: none;
  border-radius: 12px;
  background: var(--text);
  color: #fff;
  font-size: 15px;
  font-weight: 600;
  font-family: inherit;
}
.en-submit:active { background: #000; }

.toast-err {
  background: #fdecec;
  color: #d70015;
  font-size: 12.5px;
  padding: 10px 13px;
  border-radius: 12px;
  margin-bottom: 10px;
}

/* 请假 / 缺毛 这类单表单页 */
.simple-form {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 15px;
  display: flex;
  flex-direction: column;
  gap: 15px;
  margin-bottom: 6px;
}
.sf-row { display: flex; gap: 10px; }
.sf-row .field { flex: 1; min-width: 0; }
.sf-hint {
  margin: 4px 2px 10px;
  padding: 9px 11px;
  border-radius: 10px;
  background: var(--hl-soft, #fff6ee);
  color: var(--hl, #bf4800);
  font-size: 12.5px;
  line-height: 1.5;
}
.sf-hint[hidden] { display: none; }

/* 通用确认弹窗（提交前核对 / 修改警告） */
.mdl {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 90;
  background: rgba(0, 0, 0, 0.32);
  align-items: center;
  justify-content: center;
  padding: 28px;
}
.mdl.on { display: flex; animation: mdlFade 0.16s ease; }
.mdl-box {
  width: 100%;
  max-width: 320px;
  background: #fff;
  border-radius: 16px;
  padding: 22px 20px 16px;
  text-align: center;
  box-shadow: 0 18px 50px -12px rgba(0, 0, 0, 0.35);
  animation: mdlPop 0.18s cubic-bezier(0.2, 0.8, 0.3, 1);
}
.mdl-t {
  font-size: 14px;
  line-height: 1.65;
  color: var(--text);
  margin: 0 0 18px;
  letter-spacing: 0.1px;
}
.mdl-btns { display: flex; gap: 10px; }
.mdl-btn {
  flex: 1;
  height: 42px;
  border: none;
  border-radius: 11px;
  background: var(--bg-2);
  color: var(--text-2);
  font-size: 14px;
  font-family: inherit;
  font-weight: 500;
}
.mdl-btn.primary { background: var(--text); color: #fff; font-weight: 600; }
.mdl-btn:active { opacity: 0.85; }
@keyframes mdlFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes mdlPop { from { transform: scale(0.94); opacity: 0; } to { transform: none; opacity: 1; } }

/* 列表行里的「修改」小按钮 */
.lr-edit {
  flex: none;
  height: 28px;
  padding: 0 11px;
  border: 1px solid var(--line-2);
  border-radius: 8px;
  background: #fff;
  color: var(--text-2);
  font-size: 12px;
  font-family: inherit;
}
.lr-edit:active { background: var(--bg-2); }

/* 修改模式提示条 */
.edit-tip {
  font-size: 12px;
  color: #bf4800;
  background: #fdf1e7;
  padding: 9px 12px;
  border-radius: 10px;
  margin-bottom: 10px;
}

/* 修改记录 */
.log {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 13px 15px 11px;
  margin-bottom: 9px;
}
.log-hd { display: flex; align-items: baseline; gap: 8px; }
.log-act { font-size: 14px; font-weight: 600; letter-spacing: -0.2px; }
.log-t { margin-left: auto; font-size: 11px; color: var(--dim); font-variant-numeric: tabular-nums; }
.log-who { margin-top: 4px; font-size: 11.5px; color: var(--text-2); }
.log-ref { color: var(--dim-2); margin-left: 3px; }
.log-chg {
  margin-top: 10px;
  padding-top: 9px;
  border-top: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.log-row { display: flex; align-items: baseline; gap: 7px; font-size: 12px; }
.log-fl { flex: none; width: 58px; color: var(--dim); white-space: nowrap; }
.log-from { color: var(--dim-2); text-decoration: line-through; }
.log-ar { color: var(--dim-2); }
.log-to { color: var(--text); font-weight: 600; }

/* 我的页里的入口行 */
.link-row { justify-content: space-between; color: var(--text); }
.link-row .dim { font-size: 11.5px; }

/* 录入页里的提交条：跟着内容走，不悬浮遮挡 */
.en-bar.inline {
  position: static;
  background: transparent;
  border-top: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  padding: 4px 0 10px;
}

/* ---------- 自定义选择器：替掉系统原生下拉弹窗 ---------- */
.ec-pick {
  display: flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  min-width: 0;
  height: 40px;
  padding: 0 8px;
  background: #fff;
  border: 1px solid var(--line-2);
  border-radius: 9px;
  font-family: inherit;
  font-size: 13px;
  color: var(--text);
  text-align: left;
}
.ec-pick > span {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ec-pick::after {
  content: "";
  flex: none;
  width: 9px;
  height: 6px;
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='6' viewBox='0 0 9 6'%3E%3Cpath d='M1 1l3.5 3.5L8 1' stroke='%23aeaeb2' stroke-width='1.4' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
}
.ec-pick[data-empty="1"] > span { color: var(--dim-2); }
.ec-pick:active { background: #f9f9fb; }

/* 选择面板（屏幕正中弹出） */
.pk-bg {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.32);
  animation: mdlFade 0.16s ease;
}
.pk {
  position: fixed;
  inset: 0;
  z-index: 70;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 26px;
}
.pk.on { display: flex; }
.pk-sheet {
  position: relative;
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: 320px;
  max-height: 72vh;
  background: #fff;
  border-radius: 16px;
  padding: 4px 0 8px;
  box-shadow: 0 22px 60px -14px rgba(0, 0, 0, 0.45);
  animation: mdlPop 0.18s cubic-bezier(0.2, 0.8, 0.3, 1);
}
.pk-title {
  padding: 14px 18px 10px;
  font-size: 12.5px;
  color: var(--dim);
  text-align: center;
  letter-spacing: 0.2px;
}
.pk-list { overflow-y: auto; -webkit-overflow-scrolling: touch; }
.pk-i {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 15px 18px;
  border: none;
  background: #fff;
  font-family: inherit;
  font-size: 15px;
  color: var(--text);
  text-align: left;
}
.pk-i + .pk-i { border-top: 1px solid var(--line); }
.pk-i:active { background: #f9f9fb; }
.pk-i.on { font-weight: 600; }
.pk-i.on::after { content: "✓"; font-size: 15px; color: var(--text); }
.pk-cancel {
  margin: 8px 12px 4px;
  height: 48px;
  border: none;
  border-radius: 12px;
  background: var(--bg-2);
  color: var(--text);
  font-size: 15px;
  font-family: inherit;
}
@keyframes pkUp {
  from { transform: translateY(100%); }
  to { transform: none; }
}

/* 卡片里的「这款织完了」 */
.ec-done {
  width: 100%;
  height: 32px;
  margin-top: 6px;
  border: none;
  background: transparent;
  color: var(--dim);
  font-size: 12px;
  font-family: inherit;
  text-align: right;
  padding: 0 2px;
}
.ec-done:active { color: var(--hl); }

/* 选择面板底部的「显示已完成的款」 */
.pk-toggle {
  justify-content: center;
  color: var(--dim);
  font-size: 13px;
  border-top: 1px solid var(--line);
}

/* 款号详情页的织机完成标记 */
.knit-flag {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 12px;
  padding: 9px 12px;
  border-radius: 10px;
  background: #eef6ec;
  font-size: 12px;
  color: #2f7d32;
}
.knit-flag.plain { background: var(--bg-2); color: var(--text-2); }
.knit-flag > span { flex: 1; }
.knit-btn {
  flex: none;
  height: 30px;
  padding: 0 12px;
  border: 1px solid var(--line-2);
  border-radius: 8px;
  background: #fff;
  color: var(--text-2);
  font-size: 12px;
  font-family: inherit;
}
.knit-btn.on { background: var(--text); border-color: var(--text); color: #fff; }

/* ---------------- 账号管理 ---------------- */
.acc-row { border-bottom: 1px solid var(--line); }
.acc-row:last-child { border-bottom: none; }
.acc-row > summary {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 13px 16px;
  font-size: 13.5px;
  cursor: pointer;
  list-style: none;
}
.acc-row > summary::-webkit-details-marker { display: none; }
.acc-row[open] > summary { background: var(--bg-2); }
.acc-name-sm { font-weight: 600; color: var(--text); }
.acc-user {
  font-size: 11.5px;
  color: var(--dim);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.acc-off {
  margin-left: auto;
  font-size: 11px;
  color: var(--hl);
  background: var(--hl-soft);
  border-radius: 6px;
  padding: 2px 7px;
}
.role-chip {
  font-size: 10.5px;
  border-radius: 6px;
  padding: 2px 7px;
  background: var(--bg-2);
  color: var(--text-2);
  white-space: nowrap;
}
.role-chip.r-admin { background: #1d1d1f; color: #fff; }
.role-chip.r-clerk { background: #eaf3ff; color: #0064c8; }
.role-chip.r-knit { background: #eef7f2; color: #1b7f4b; }
.role-chip.r-sew { background: #f3efff; color: #5b3fd6; }
.role-chip.r-iron { background: #fff4ea; color: #b25000; }
.role-chip.r-pack { background: #f0f0f3; color: #55555c; }

.acc-edit { padding: 10px 16px 14px; display: flex; flex-direction: column; gap: 8px; }
.acc-line { display: flex; gap: 8px; align-items: center; }
.acc-line input,
.acc-line select { flex: 1 1 90px; min-width: 0; min-height: 40px; font-size: 13.5px; padding: 8px 11px; }
.acc-line .btn-line.sm {
  flex: none;
  min-height: 40px;
  padding: 0 12px;
  font-size: 12.5px;
  white-space: nowrap;
}
.btn-line.sm.warn { background: #fdecec; color: #c1362f; }

/* ============================================================
   卡片描边：深色细线，边界明确
   ============================================================ */
:root {
  --card-line: #4a4a52;      /* 卡片外框：深灰 */
  --card-line-in: #dcdce4;   /* 卡片内部分隔：浅灰 */
  --card-edge: none;
}

.today,
.sc,
.rg-card,
.td-card,
.list,
.empty,
.account,
.inline-form,
.qbtn,
.bal-box,
.est,
.mx-wrap,
.ord-sec,
.ct-item,
.ec,
.qmini a {
  border: 1px solid var(--card-line);
  box-shadow: var(--card-edge);
}

/* 卡片内部的分隔行保持浅色，不然整页都是黑线 */
.list-row,
.acc-row { border-bottom-color: var(--card-line-in); }
.acc-row > summary { border-bottom: none; }
.td-grid.sub { border-top-color: var(--card-line-in); }

/* 输入框用浅灰边框，只比纸面深一点 */
.inline-form input,
.inline-form select,
.acc-line input,
.acc-line select,
.ec-row input.num,
.ec-row select {
  border: 1px solid #d5d5de;
}

/* ============================================================
   弹层背后模糊：确认框 / 选择面板 / 记一笔面板
   ============================================================ */
/* 以后新加的任何弹层遮罩，直接加 class="u-veil" 就有同样的模糊 */
.u-veil,
.mdl,
.pk-bg,
body.fab-open .fab-mask {
  background: rgba(18, 18, 22, 0.14);
  -webkit-backdrop-filter: blur(7px) saturate(112%);
  backdrop-filter: blur(7px) saturate(112%);
}

/* 不支持毛玻璃的老浏览器：退回深一点的遮罩，保证看得清弹层 */
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .u-veil,
  .mdl,
  .pk-bg,
  body.fab-open .fab-mask { background: rgba(0, 0, 0, 0.38); }
}

/* ---------------- 断网提示条 ---------------- */
.net-bar {
  position: fixed;
  left: 0;
  right: 0;
  top: 0;
  z-index: 60;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: calc(8px + env(safe-area-inset-top)) 14px 8px;
  background: #2b2b30;
  color: #fff;
  font-size: 12px;
  transform: translateY(-120%);
  transition: transform 0.22s cubic-bezier(0.2, 0.8, 0.3, 1);
}
body.net-off .net-bar { transform: translateY(0); }
.net-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #ff9f45;
  flex: none;
}
.net-txt { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.net-btn {
  flex: none;
  border: none;
  background: rgba(255, 255, 255, 0.16);
  color: #fff;
  font-size: 12px;
  font-family: inherit;
  padding: 5px 12px;
  border-radius: 8px;
}
.net-btn:active { background: rgba(255, 255, 255, 0.28); }

/* 断网时页面轻微下沉，别被提示条压住 */
body.net-off .topbar { transform: translateY(38px); transition: transform 0.22s; }

/* ---------------- 错误页 ---------------- */
.er-body {
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  background: #fbfbfd;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px 24px calc(32px + env(safe-area-inset-bottom));
  font-family: -apple-system, BlinkMacSystemFont, "HarmonyOS Sans SC", "PingFang SC",
    "Microsoft YaHei", "Noto Sans SC", sans-serif;
  color: #1d1d1f;
  -webkit-font-smoothing: antialiased;
}
.er-box { width: 100%; max-width: 340px; text-align: center; }
.er-ico {
  width: 76px; height: 76px; border-radius: 20px; display: block; margin: 0 auto 18px;
  box-shadow: 0 10px 26px -12px rgba(0, 0, 0, 0.35);
}
.er-code {
  font-size: 44px;
  font-weight: 600;
  letter-spacing: -2px;
  color: #e4e4ea;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}
.er-box h1 { margin: 12px 0 0; font-size: 19px; font-weight: 600; letter-spacing: -0.3px; }
.er-box p { margin: 9px 0 0; font-size: 12.5px; color: #86868b; line-height: 1.75; }
.er-btns { display: flex; flex-direction: column; gap: 9px; margin-top: 22px; }
.er-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 48px;
  border-radius: 12px;
  border: 1px solid #4a4a52;
  background: #1d1d1f;
  color: #fff;
  font-size: 14.5px;
  font-weight: 500;
  text-decoration: none;
  font-family: inherit;
}
.er-btn.ghost { background: #fff; color: #1d1d1f; }
.er-btn:active { opacity: 0.86; }
.er-foot { margin-top: 20px; font-size: 11px; color: #aeaeb2; line-height: 1.8; }
.er-dim { color: #c7c7cd; word-break: break-all; }

/* ---------------- 日期选择器（统一组件） ---------------- */
.en-date { display: flex; flex-direction: column; gap: 6px; }
.en-date > span { font-size: 11px; color: var(--dim); }
.date-btn {
  display: flex;
  align-items: center;
  gap: 6px;
  height: 44px;
  padding: 0 12px;
  border: 1px solid var(--card-line, #cfcfda);
  border-radius: 11px;
  background: #fff;
  color: var(--text);
  font-size: 14px;
  font-family: inherit;
  font-variant-numeric: tabular-nums;
}
.date-btn svg {
  width: 14px; height: 14px; flex: none;
  fill: none; stroke: var(--dim-2); stroke-width: 2;
  stroke-linecap: round; stroke-linejoin: round;
}
.date-btn:active { background: var(--bg-2); }

.dp { display: none; }
body.dp-open .dp { display: block; }
.dp-veil { position: fixed; inset: 0; z-index: 80; }
.dp-sheet {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 81;
  background: var(--card);
  border-radius: 22px 22px 0 0;
  padding: 8px 16px calc(14px + env(safe-area-inset-bottom));
  box-shadow: 0 -8px 34px -12px rgba(0, 0, 0, 0.28);
  animation: dpUp 0.24s cubic-bezier(0.22, 0.8, 0.2, 1);
  max-width: 520px;
  margin: 0 auto;
}
@keyframes dpUp { from { transform: translateY(100%) } to { transform: translateY(0) } }
.dp-grip {
  width: 36px; height: 4px; border-radius: 2px; background: #dcdce1;
  margin: 4px auto 10px;
}
.dp-top { display: flex; align-items: center; margin-bottom: 10px; }
.dp-title { font-size: 14px; font-weight: 600; letter-spacing: -0.2px; }
.dp-x {
  margin-left: auto;
  width: 30px; height: 30px; border: none; border-radius: 50%;
  background: var(--bg-2); color: var(--dim);
  font-size: 17px; line-height: 1; font-family: inherit;
}
.dp-quick { display: flex; gap: 8px; margin-bottom: 12px; }
.dp-q {
  flex: 1;
  height: 38px;
  border: 1px solid var(--card-line, #cfcfda);
  border-radius: 10px;
  background: #fff;
  color: var(--text-2);
  font-size: 13px;
  font-family: inherit;
}
.dp-q:active { background: var(--bg-2); }
.dp-head { display: flex; align-items: center; gap: 6px; margin: 4px 0 8px; }
.dp-ym { flex: 1; text-align: center; font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.dp-nav {
  width: 38px; height: 38px;
  border: 1px solid var(--line-2); border-radius: 10px;
  background: #fff; color: var(--text-2);
  font-size: 17px; line-height: 1; font-family: inherit;
}
.dp-nav:disabled { opacity: 0.35; }
.dp-week { display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 4px; }
.dp-week span { text-align: center; font-size: 11px; color: var(--dim-2); }
.dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px 0; }
.dp-d {
  height: 44px;
  border: none;
  border-radius: 10px;
  background: transparent;
  color: var(--text);
  font-size: 15.5px;
  font-family: inherit;
  font-variant-numeric: tabular-nums;
}
.dp-d.empty { pointer-events: none; }
.dp-d:active { background: var(--bg-2); }
.dp-d.today { box-shadow: inset 0 0 0 1.5px var(--brand); color: var(--brand); font-weight: 600; }
.dp-d.on { background: var(--text); color: #fff; font-weight: 600; box-shadow: none; }
.dp-d.off { color: #d0d0d6; }
.dp-today {
  width: 100%;
  height: 44px;
  margin-top: 10px;
  border: none;
  border-radius: 12px;
  background: var(--bg-2);
  color: var(--text-2);
  font-size: 13.5px;
  font-family: inherit;
}
body.dp-open { overflow: hidden; }

/* ---------------- 织机页顶部：日期与班次对齐 ---------------- */
.en-top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  gap: 10px;
}
.en-date { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.en-date > span {
  font-size: 11px;
  color: var(--dim);
  letter-spacing: 0.2px;
}
.date-btn {
  width: 100%;
  height: 44px;
  justify-content: space-between;
  font-size: 15px;
  padding: 0 12px 0 14px;
  border-radius: 11px;
}
.date-btn #dateTxt { font-weight: 500; letter-spacing: -0.1px; }

.en-shift {
  height: 44px;
  padding: 3px;
  align-items: center;
  border-radius: 11px;
}
.en-shift label { height: 100%; }
.en-shift span {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 14px;
  font-size: 13px;
  border-radius: 8px;
}

/* 日历：格子内文字严格居中，选中块与相邻日期对齐 */
.dp-d {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  line-height: 1;
  vertical-align: middle;
}
.dp-d.on { font-weight: 600; }

/* ---------------- 日历格子重写：所有格子几何完全一致，选中只换颜色 ---------------- */
.dp-grid { align-items: stretch; }
.dp-d {
  display: grid;
  place-items: center;
  height: 46px;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  box-shadow: none;
  font-size: 15.5px;
  line-height: 1;
}
.dp-d > .dp-dv {
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  transition: background 0.12s, color 0.12s;
}
.dp-d.today > .dp-dv { box-shadow: inset 0 0 0 1.5px var(--brand); color: var(--brand); font-weight: 600; }
.dp-d.on > .dp-dv { background: var(--text); color: #fff; font-weight: 600; box-shadow: none; }
.dp-d.off > .dp-dv { color: #d0d0d6; }
.dp-d:active > .dp-dv { background: var(--bg-2); }
.dp-d.on:active > .dp-dv { background: var(--text); }

/* 顶部一行：日期与班次作为一组居中，左右留白对称 */
.en-top {
  display: flex;
  justify-content: center;
  align-items: flex-end;
  gap: 10px;
}
.en-date {
  flex: 0 1 178px;
  min-width: 0;
}
.date-btn { font-size: 14.5px; padding: 0 10px 0 13px; }
.en-shift { flex: none; }

/* 选中的班次加一圈描边，比只靠底色更明确 */
.en-shift input:checked + span {
  box-shadow: inset 0 0 0 1px var(--card-line, #4a4a52);
}

/* 织机录入卡：整体不再拉满，数量框收窄 */
.ec { max-width: 430px; }
.ec-hd { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 22px; }
.ec-head,
.ec-row {
  grid-template-columns: minmax(0, 1fr) 86px 86px;
  gap: 7px;
}
.ec-row input.num { height: 42px; font-size: 15px; }
.ec-head span:nth-child(n + 2) { text-align: center; }

@media (max-width: 360px) {
  .ec-head,
  .ec-row { grid-template-columns: minmax(0, 1fr) 74px 74px; }
}

/* 卡片保持原宽，里面的格子整体往中间收一点 */
.ec { max-width: none; }
.ec-head,
.ec-row {
  margin-left: 14px;
  margin-right: 14px;
}
.ec-head,
.ec-row {
  grid-template-columns: minmax(0, 1fr) 84px 84px;
}

/* 卡内所有元素左右对齐；码 / 打 / 件 三列等宽 */
.ec-hd,
.ec-head,
.ec-row,
.ec-add,
.ec-done {
  margin-left: 14px;
  margin-right: 14px;
}
.ec-head,
.ec-row {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
  gap: 8px;
}
.ec-add,
.ec-done { width: auto; }
.ec-done { justify-content: flex-end; }

/* 删除款按钮移到卡片外面（右上角上方），只有一款时隐藏 */
.ec { position: relative; margin-bottom: 26px; }
.ec-hd { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.ec-del {
  position: absolute;
  top: -22px;
  right: 0;
  width: 26px;
  height: 26px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 50%;
  background: #fff;
  color: var(--dim);
  font-size: 14px;
  line-height: 1;
  font-family: inherit;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.ec-del:active { background: var(--bg-2); color: var(--text); }

/* 卡片底部：「+ 再加一行」放大居中，「这款织完了」做成右下角按钮 */
.ec-add {
  display: block;
  width: calc(100% - 28px);
  height: 46px;
  margin: 8px 14px 0;
  border: 1px dashed #c9c9d2;
  border-radius: 11px;
  background: #fff;
  color: var(--brand);
  font-size: 14.5px;
  font-weight: 500;
  letter-spacing: 0.2px;
  text-align: center;
}
.ec-add:active { background: var(--bg-2); }

.ec-done {
  display: block;
  width: auto;
  height: 38px;
  margin: 10px 14px 2px auto;
  padding: 0 14px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 10px;
  background: #fff;
  color: var(--text);
  font-size: 13px;
  font-weight: 500;
  text-align: center;
}
.ec-done:active { background: var(--bg-2); }

/* ---------------- 提交结果反馈卡 ---------------- */
.fb-mask { position: fixed; inset: 0; z-index: 95; }
.fb-card {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 96;
  width: calc(100% - 60px);
  max-width: 300px;
  background: #fff;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 18px;
  padding: 26px 22px 18px;
  text-align: center;
  box-shadow: 0 18px 50px -14px rgba(0, 0, 0, 0.34);
  animation: fbIn 0.2s cubic-bezier(0.2, 0.8, 0.3, 1);
}
@keyframes fbIn {
  from { opacity: 0; transform: translate(-50%, -46%) scale(0.96); }
  to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.fb-ico {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  margin: 0 auto 14px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.fb-ico svg {
  width: 30px; height: 30px;
  fill: none; stroke: #fff; stroke-width: 2.4;
  stroke-linecap: round; stroke-linejoin: round;
}
.fb-card[data-kind="ok"] .fb-ico { background: #1b7f4b; }
.fb-card[data-kind="err"] .fb-ico { background: #c1362f; }
.fb-t { font-size: 17px; font-weight: 600; letter-spacing: -0.3px; }
.fb-s { margin-top: 8px; font-size: 12.5px; color: var(--dim); line-height: 1.7; }
.fb-btn {
  width: 100%;
  height: 46px;
  margin-top: 18px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 12px;
  background: #fff;
  color: var(--text);
  font-size: 14.5px;
  font-weight: 500;
  font-family: inherit;
}
.fb-btn:active { background: var(--bg-2); }
.fb-card[data-kind="ok"] .fb-btn { background: #1d1d1f; color: #fff; border-color: #1d1d1f; }
body.fb-open { overflow: hidden; }

/* 顶部「记到哪天哪个班」的确认行 */
.en-when {
  font-size: 11.5px;
  color: var(--dim);
  letter-spacing: 0.2px;
  margin-top: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.en-when.warn { color: var(--hl); font-weight: 500; }

/* 日历底部「确定」 */
.dp-ok {
  width: 100%;
  height: 46px;
  margin-top: 12px;
  border: none;
  border-radius: 12px;
  background: #1d1d1f;
  color: #fff;
  font-size: 15px;
  font-weight: 500;
  font-family: inherit;
  letter-spacing: 0.5px;
}
.dp-ok:active { opacity: 0.88; }

/* 数字框去掉上下箭头，只用键盘输 */
input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* 打 + 件：中间一个加号，四列布局 */
.ec-head,
.ec-row {
  grid-template-columns: minmax(0, 1fr) 78px 14px 78px;
  gap: 6px;
}
.ec-plus {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--dim-2);
  font-size: 14px;
  line-height: 1;
  user-select: none;
}
.ec-head .sp { display: block; }
.ec-head span:nth-child(n + 2) { text-align: center; }
.ec-head span:nth-child(3) { visibility: hidden; }

@media (max-width: 360px) {
  .ec-head,
  .ec-row { grid-template-columns: minmax(0, 1fr) 66px 12px 66px; }
}

/* 日历「今天」：去掉圆圈，改成白底黑边的方框；点选后黑底白字 */
.dp-d:focus,
.dp-d:focus-visible { outline: none; }
.dp-d > .dp-dv { border-radius: 10px; }
.dp-d.today > .dp-dv {
  background: #fff;
  border: 1px solid #1d1d1f;
  box-shadow: none;
  color: var(--text);
  font-weight: 600;
}
.dp-d.on > .dp-dv {
  background: #1d1d1f;
  border: 1px solid #1d1d1f;
  color: #fff;
}

/* 日历：只保留一层框——今天=黑框方框；选中=整格黑底 */
.dp-d {
  box-sizing: border-box;
  border: 1px solid transparent;
  border-radius: 10px;
}
.dp-d > .dp-dv {
  width: auto;
  height: auto;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.dp-d.today {
  background: #fff;
  border: 1px solid #1d1d1f;
  box-shadow: none;
  color: var(--text);
}
.dp-d.today > .dp-dv {
  border: 0;
  background: transparent;
  box-shadow: none;
  color: var(--text);
  font-weight: 600;
}
.dp-d.on {
  background: #1d1d1f;
  border-color: #1d1d1f;
}
.dp-d.on > .dp-dv {
  background: transparent;
  border: 0;
  color: #fff;
  font-weight: 600;
}
.dp-d.off { color: #d0d0d6; }
.dp-d.off > .dp-dv { color: #d0d0d6; }

/* 今天的记录：按班次分卡 */
.day-card {
  background: var(--card);
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 14px;
  overflow: hidden;
  margin-bottom: 10px;
}
.day-hd {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--bg-2);
  border-bottom: 1px solid var(--card-line-in, #dcdce4);
}
.day-lb { font-size: 12.5px; font-weight: 600; color: var(--text); letter-spacing: 0.2px; }
.day-sum { margin-left: auto; font-size: 12px; color: var(--dim); font-variant-numeric: tabular-nums; }
.day-row {
  display: grid;
  grid-template-columns: 84px minmax(0, 1fr) 44px auto 14px;
  align-items: center;
  gap: 8px;
  padding: 11px 14px;
  border-bottom: 1px solid var(--card-line-in, #dcdce4);
  font-size: 13.5px;
}
.day-row:last-child { border-bottom: none; }
.day-no { font-weight: 600; font-variant-numeric: tabular-nums; letter-spacing: -0.2px; }
.day-color { color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.day-size { color: var(--dim); text-align: center; font-size: 12.5px; }
.day-q { text-align: right; font-weight: 600; font-variant-numeric: tabular-nums; }

/* 某道工序做完：环变绿、中心打勾、下面写「xx已完成」 */
.sc-ring.ok .sc-arc { stroke: var(--ok); }
.sc-ring.ok .sc-ring-lb { color: var(--ok); }
.sc-ring-ck {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
.sc-ring-ck svg {
  width: 22px;
  height: 22px;
  fill: none;
  stroke: var(--ok);
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* 圆环按进度分色：红 <25 · 橙 25-50 · 蓝 50-75 · 紫 75-100 · 绿 ≥100 */
.sc-ring.p1 .sc-arc { stroke: #c1362f; }
.sc-ring.p2 .sc-arc { stroke: #e8890c; }
.sc-ring.p3 .sc-arc { stroke: #0071e3; }
.sc-ring.p4 .sc-arc { stroke: #7c5cfa; }
.sc-ring.ok .sc-arc { stroke: #1b7f4b; }

/* 卡住的那道工序不再改颜色（颜色已经表示进度），只把标签加粗 */
.sc-ring.bn .sc-ring-lb { color: var(--text); font-weight: 600; }
.sc-ring.bn .sc-ring-v,
.sc-ring.bn .sc-ring-v small { color: var(--text); }

/* 色序调整：50–75% 用紫、75–100% 用蓝 */
.sc-ring.p3 .sc-arc { stroke: #7c5cfa; }
.sc-ring.p4 .sc-arc { stroke: #0071e3; }

/* 日期文字与班次文字统一字号字重 */
.date-btn { font-size: 14px; }
.date-btn #dateTxt { font-weight: 500; letter-spacing: 0; }
.en-shift span {
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0;
}
.en-shift input:checked + span { font-weight: 500; }

/* 顶栏文字加大加粗（日期与班次保持同一规格） */
.en-date > span { font-size: 12.5px; font-weight: 500; color: var(--text-2); }
.en-date { flex: 0 1 196px; }
.date-btn { font-size: 16px; }
.date-btn #dateTxt { font-weight: 600; letter-spacing: -0.2px; }
.en-shift span { font-size: 16px; font-weight: 600; letter-spacing: -0.2px; }
.en-shift input:checked + span { font-weight: 600; }

/* 什么都没填时，不占位的合计行 */
.en-sum.is-empty { display: none; }

/* 「+ 再加一款」用黑色描边，和卡片边框同一套 */
.en-add-card {
  border: 1px solid var(--card-line, #4a4a52);
  background: #fff;
  color: var(--text);
  font-size: 14.5px;
  font-weight: 500;
  height: 48px;
}

/* 卡片区域独立滚动：卡再多也不把整页撑长 */
#cards {
  max-height: 58vh;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: 2px 2px 0;
  margin: 0 -2px;
  scrollbar-width: thin;
}
/* 滚动区上下边缘留一点提示：内容可继续 */
#cards::-webkit-scrollbar { width: 4px; }
#cards::-webkit-scrollbar-thumb { background: #dcdce4; border-radius: 4px; }
#cards::-webkit-scrollbar-track { background: transparent; }

@media (max-height: 700px) {
  #cards { max-height: 50vh; }
}

/* 织机卡：压扁行高与间距，表头字放大加粗 */
.ec { padding: 10px 12px 8px; }
.ec-hd { margin-bottom: 8px; }
.ec-hd .ec-pick { height: 38px; font-size: 13.5px; }
.ec-head {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-2);
  padding: 0 2px 4px;
  letter-spacing: 0.2px;
}
.ec-row { margin-bottom: 4px; gap: 6px; }
.ec-row .ec-pick { height: 36px; font-size: 13px; }
.ec-row input.num { height: 36px; font-size: 15px; }
.ec-plus { font-size: 13px; }
.ec-add { height: 42px; margin-top: 6px; }
.ec-done { height: 34px; margin-top: 8px; }

/* 「这款织完了」按钮：文案变长，留足内边距 */
.ec-done {
  height: auto;
  min-height: 34px;
  padding: 7px 12px;
  font-size: 12.5px;
  white-space: nowrap;
}

/* 今日记录：数量列固定宽度，码数才能上下对齐 */
.day-row { grid-template-columns: 76px minmax(0, 1fr) 46px 92px 14px; }
.day-size { text-align: center; }
.day-q { text-align: right; }
a.day-row{color:inherit;text-decoration:none}
.day-go{flex:none;color:#c8ccd0;font-style:normal;font-size:17px;line-height:1;margin-left:2px}
.sec-link{font-size:12.5px;color:#0071e3;text-decoration:none;font-weight:600;white-space:nowrap}

/* 请假页：选择人按钮、日期按钮、类型三选一 */
.lv-pick { height: 46px; font-size: 14.5px; }
.lv-date { height: 46px; font-size: 14.5px; width: 100%; }
/* 假类型：三个平分整行。flex:1 必须写在容器上 ——
   只给子项 flex:1、容器自己宽度是 auto，三个按钮就会缩成文字那么宽挤成一坨 */
.lv-kinds { display: flex; gap: 8px; flex: 1 1 0; min-width: 0; }
/* 类型这一行标题单独占一行，三个按钮铺满下面整行，别缩在右半边 */
.simple-form .field.stack,
.form .field.stack { row-gap: 7px; }
.simple-form .field.stack > .fl,
.form .field.stack > .fl { flex: 0 0 100%; }
.simple-form .field.stack > .lv-kinds,
.form .field.stack > .lv-kinds { flex: 1 1 100%; }
.lv-kind { flex: 1 1 0; min-width: 0; }
.lv-kind input { position: absolute; opacity: 0; pointer-events: none; }
.lv-kind span {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 46px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 11px;
  background: #fff;
  color: var(--text-2);
  font-size: 14px;
  font-weight: 500;
  white-space: nowrap;
}
.lv-kind input:checked + span { background: #1d1d1f; border-color: #1d1d1f; color: #fff; }

/* 选择面板里的副标题 */
.pk-sub { font-size: 12px; color: var(--dim); }

/* 确认框统一：更大圆角、主按钮黑底 */
.mdl-box { border-radius: 18px; padding: 24px 20px 16px; }
.mdl-t { font-size: 14.5px; line-height: 1.6; margin-bottom: 20px; }
.mdl-btn { height: 46px; border-radius: 12px; font-size: 15px; }

/* 弹层打开时锁住页面：避免 iOS/微信里 fixed 元素错位 */
body.scroll-lock {
  position: fixed;
  left: 0;
  right: 0;
  width: 100%;
  overflow: hidden;
}

/* 录入页的提交按钮改成跟随内容的整行按钮（不再悬浮，微信/iOS 里也一定看得到） */
.en-bar.inline { padding: 6px 0 16px; }
.en-bar.inline .en-submit {
  width: 100%;
  height: 48px;
  border-radius: 12px;
  font-size: 16px;
  letter-spacing: 1px;
}

/* ---------------- 问一句（AI 只读问答） ---------------- */
.ask { padding-bottom: 150px; }
.ask-hint { margin: 0 0 10px; font-size: 12.5px; color: var(--dim); }
.ask-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.ask-chip {
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 999px;
  background: #fff;
  color: var(--text-2);
  font-size: 12.5px;
  font-family: inherit;
  padding: 8px 13px;
}
.ask-chip:active { background: var(--bg-2); }

.ask-log { display: flex; flex-direction: column; gap: 10px; }
/* 往上翻更早的记录 */
.ask-more-wrap{display:flex;justify-content:center;padding:0 0 12px}
.ask-more-wrap[hidden]{display:none}
.ask-more{padding:7px 16px;border:1px solid #e0e2e7;border-radius:999px;background:#fff;
  color:#5b636b;font-size:12px;font-weight:700;-webkit-tap-highlight-color:transparent}
.ask-more:active{background:#f4f5f7}
.ask-more:disabled{opacity:.55}
/* 「今天 / 2026年10月28日」的分隔 */
.ask-day{display:flex;justify-content:center;padding:7px 0 1px;color:#a0a6ab;
  font-size:11px;font-weight:600;letter-spacing:.3px}
.ask-item {
  max-width: 86%;
  padding: 11px 13px;
  border-radius: 14px;
  font-size: 13.5px;
  line-height: 1.65;
  white-space: pre-wrap;
  word-break: break-word;
}
.ask-item.me {
  align-self: flex-end;
  background: #1d1d1f;
  color: #fff;
  border-bottom-right-radius: 5px;
}
.ask-item.bot {
  align-self: flex-start;
  background: #fff;
  border: 1px solid var(--card-line, #4a4a52);
  border-bottom-left-radius: 5px;
}
.ask-item.pending { color: var(--dim); }

.ask-bar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(58px + env(safe-area-inset-bottom));
  display: flex;
  gap: 0;
  padding: 10px 15px;
  background: rgba(251, 251, 253, 0.94);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-top: 1px solid var(--card-line-in, #dcdce4);
  z-index: 30;
  transition: bottom 0.18s ease;
}
.ask-bar input {
  flex: 1;
  min-width: 0;
  height: 44px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 11px;
  background: #fff;
  padding: 0 13px;
  font-size: 15px;
  font-family: inherit;
}
.ask-send {
  flex: none;
  width: 72px;
  height: 44px;
  border: none;
  border-radius: 11px;
  background: #1d1d1f;
  color: #fff;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.5px;
  font-family: inherit;
}
.ask-send:disabled { opacity: 0.6; }
.ask-foot { margin: 14px 2px 0; font-size: 11.5px; color: var(--dim-2); }

/* 输入条右侧的三个按钮：话筒 / ＋ / 发送
   空着的时候是「话筒 ＋」，一打字就只剩「发送」，输入框顺势伸过去 */
.ask-mic,
.ask-plus,
.ask-send {
  flex: none;
  margin-left: 8px;
  overflow: hidden;
  white-space: nowrap;
  transition: width 0.17s ease, margin-left 0.17s ease, opacity 0.13s ease,
    border-width 0.17s ease, padding 0.17s ease;
}
.ask-mic {
  width: 44px;
  height: 44px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 11px;
  background: #fff;
  color: var(--ink, #1d1d1f);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  font-family: inherit;
}
.ask-mic svg { width: 19px; height: 19px; stroke: currentColor; }
.ask-mic.on { background: #1d1d1f; border-color: #1d1d1f; color: #fff; }
.ask-plus {
  width: 44px;
  height: 44px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 11px;
  background: #fff;
  color: var(--ink, #1d1d1f);
  font-size: 21px;
  font-weight: 400;
  line-height: 1;
  font-family: inherit;
  padding: 0 0 2px;
}
.ask-plus:active { background: var(--bg-2, #f2f2f5); }

/* 语音模式：输入框换成「按住 说话」 */
.ask-hold {
  flex: 1;
  min-width: 0;
  height: 44px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 11px;
  background: #fff;
  color: var(--ink, #1d1d1f);
  font-size: 15px;
  font-weight: 500;
  font-family: inherit;
  letter-spacing: 0.5px;
  -webkit-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}
.ask-hold.rec {
  background: #1d1d1f;
  border-color: #1d1d1f;
  color: #fff;
}
.ask-mic .ico-kb { display: none; }
.ask-mic.kb .ico-mic { display: none; }
.ask-mic.kb .ico-kb { display: block; }

/* 有内容：收起话筒和 ＋ */
.ask-bar.typing .ask-mic,
.ask-bar.typing .ask-plus {
  width: 0;
  margin-left: 0;
  opacity: 0;
  border-width: 0;
  padding: 0;
  pointer-events: none;
}
/* 没内容：收起发送 */
.ask-bar:not(.typing) .ask-send {
  width: 0;
  margin-left: 0;
  opacity: 0;
  padding: 0;
  pointer-events: none;
}

/* 待确认录入卡片 */
.ask-cf {
  margin: 10px 0 4px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 14px;
  background: #fff;
  overflow: hidden;
}
.ask-cf-hd {
  padding: 11px 13px 9px;
  font-size: 13px;
  font-weight: 600;
  border-bottom: 1px solid var(--card-line-in, #dcdce4);
}
.ask-cf-list { padding: 4px 13px 8px; }
.ask-cf-row {
  padding: 6px 0;
  font-size: 13px;
  line-height: 1.45;
  border-bottom: 1px solid rgba(0, 0, 0, 0.04);
  word-break: break-all;
}
.ask-cf-row:last-child { border-bottom: none; }
.ask-cf-row.more { color: var(--dim-2, #9a9aa2); font-size: 12px; }
.ask-cf-btns {
  display: flex;
  gap: 8px;
  padding: 10px 13px 12px;
  border-top: 1px solid var(--card-line-in, #dcdce4);
}
.ask-cf-btns button {
  flex: 1;
  height: 40px;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 500;
  font-family: inherit;
}
.ask-cf-no {
  border: 1px solid var(--card-line, #4a4a52);
  background: #fff;
  color: var(--ink, #1d1d1f);
}
.ask-cf-ok {
  border: none;
  background: #1d1d1f;
  color: #fff;
}
.ask-cf-ok:disabled { opacity: 0.6; }

/* 首页「问一句」入口 */
.ask-entry {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  padding: 11px 13px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--card-line, #4a4a52);
  text-decoration: none;
  color: inherit;
}
.ask-entry-t { font-size: 13.5px; font-weight: 600; letter-spacing: -0.2px; }
.ask-entry-s {
  flex: 1;
  min-width: 0;
  font-size: 11.5px;
  color: var(--dim);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ask-entry-a { font-size: 15px; color: var(--dim-2); }
.ask-entry:active { background: var(--bg-2); }

/* 首页顶部「问一句」：做成搜索框的样子 */
.ask-bar-entry {
  display: flex;
  align-items: center;
  gap: 9px;
  height: 44px;
  padding: 0 12px;
  margin-bottom: 12px;
  background: #fff;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 12px;
  text-decoration: none;
  color: inherit;
}
.ask-bar-entry:active { background: var(--bg-2); }
.ask-bar-ico svg,
.ask-bar-mic svg {
  width: 17px;
  height: 17px;
  fill: none;
  stroke: var(--dim);
  stroke-width: 1.9;
  stroke-linecap: round;
  stroke-linejoin: round;
  display: block;
}
.ask-bar-mic { margin-left: auto; flex: none; }
.ask-bar-ph {
  font-size: 13.5px;
  color: var(--dim-2);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 首页问答入口：文字左、放大镜右 */
.ask-bar-entry { padding-left: 14px; }
.ask-bar-ph { flex: 1; min-width: 0; }
.ask-bar-ico { margin-left: 8px; flex: none; }

/* 首页问答入口左侧的 AI 标识 */
.ask-bar-ai {
  flex: none;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.8px;
  color: var(--text);
  padding-right: 8px;
  margin-right: 2px;
  border-right: 1px solid var(--card-line-in, #dcdce4);
  line-height: 1;
}

/* AI 生成的报表下载按钮 */
.ask-file {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 14px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 12px;
  background: #fff;
  color: var(--text);
  font-size: 13.5px;
  font-weight: 500;
  text-decoration: none;
}
.ask-file:active { background: var(--bg-2); }

/* 聊天气泡可选中（长按整条选中） */
.ask-item {
  -webkit-user-select: text;
  user-select: text;
  -webkit-touch-callout: default;
}

/* 下载卡片 */
.ask-file {
  align-self: stretch;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
  border: 1px solid var(--card-line, #4a4a52);
  border-radius: 14px;
  background: #fff;
  text-decoration: none;
  color: inherit;
}
.ask-file-ico {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  background: #1d1d1f;
  color: #fff;
  font-size: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.ask-file-txt { font-size: 13.5px; font-weight: 500; line-height: 1.4; }
.ask-file-txt em {
  display: block;
  font-style: normal;
  font-size: 11.5px;
  font-weight: 400;
  color: var(--dim);
  margin-top: 2px;
}

/* 上传后按原样显示：图片就是图，表格/PDF 是文件卡
   注意选择器必须带 .ask-item 两个类 —— 否则压不过 .ask-item.me 的黑底 */
.ask-item.ask-shot{align-self:flex-end;position:relative;max-width:64%;padding:0;background:none;
  border:1px solid #e3e5ea;border-radius:14px;overflow:hidden;line-height:0;
  box-shadow:0 2px 8px rgba(20,20,26,.06);cursor:zoom-in}
.ask-item.ask-shot img{display:block;width:100%;height:auto;border-radius:13px}
.ask-shot-badge{position:absolute;top:6px;right:6px;padding:1px 7px;border-radius:9px;
  background:rgba(0,0,0,.52);color:#fff;font-size:10.5px;line-height:1.65;font-weight:700}
/* 一次传多张图：九宫格，别一张张堆成大图
   宽度必须写死（width 不能只写 max-width）—— 格子里的图是绝对定位、不贡献宽度，
   只给 max-width 会让 grid 的 1fr 算成 0，整个容器缩成一条线 */
.ask-shots{align-self:flex-end;display:grid;gap:4px;width:64%;border-radius:14px;overflow:hidden;
  border:1px solid #e3e5ea;box-shadow:0 2px 8px rgba(20,20,26,.06)}
.ask-shots.c2{grid-template-columns:repeat(2,minmax(0,1fr))}
.ask-shots.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
.ask-shot-cell{position:relative;overflow:hidden;background:#f2f3f5;cursor:zoom-in}
.ask-shot-cell::before{content:'';display:block;padding-top:100%}
.ask-shot-cell img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.ask-photo-mask{position:fixed;inset:0;z-index:80;display:none;align-items:center;justify-content:center;
  padding:16px;background:rgba(12,12,14,.93);cursor:zoom-out}
.ask-photo-mask.on{display:flex}
.ask-photo-mask img{max-width:100%;max-height:100%;border-radius:10px}
.ask-item.ask-up-file{align-self:flex-end;display:flex;align-items:center;gap:10px;max-width:82%;padding:10px 12px;
  background:#fff;border:1px solid #e3e5ea;border-radius:14px;border-bottom-right-radius:6px;white-space:normal}
.ask-up-ext{flex:none;width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:#f1f3f6;color:#5b636b;font-size:9.5px;font-weight:800;letter-spacing:.3px}
.ask-up-ext.sheet{background:#e8f6ee;color:#1f8a4c}
.ask-up-ext.pdf{background:#fdecea;color:#c1362f}
.ask-up-ext.word{background:#e9f0fb;color:#2b5cab}
.ask-up-ext.text{background:#f2f0fb;color:#5c4bb8}
.ask-up-body{min-width:0;display:block;text-align:left}
.ask-up-body b{display:block;max-width:180px;font-size:13px;font-weight:800;color:#1d1d1f;line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ask-up-body em{display:block;margin-top:2px;font-style:normal;font-size:11px;color:#8a9295;font-variant-numeric:tabular-nums}

/* 下载卡片（带进度条） */
.ask-dl{align-self:stretch;display:flex;align-items:center;gap:11px;width:100%;padding:13px 14px;
  border:1px solid #e3e5ea;border-radius:14px;background:#fff;text-align:left;font:inherit;color:#1d1d1f;
  -webkit-tap-highlight-color:transparent;transition:border-color .18s,background .18s}
.ask-dl:active{transform:scale(.985)}
.ask-dl-ico{flex:none;width:36px;height:36px;border-radius:11px;background:#eef4fd;color:#0071e3;
  font-size:17px;font-weight:800;display:flex;align-items:center;justify-content:center}
.ask-dl-body{flex:1 1 0;min-width:0;display:block}
.ask-dl-name{display:block;font-size:13.5px;font-weight:800;line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ask-dl-sub{display:block;margin-top:3px;font-size:11.5px;color:#8a9295;line-height:1.4}
.ask-dl-bar{display:none;height:4px;margin-top:8px;border-radius:3px;background:#eceef2;overflow:hidden}
.ask-dl.doing .ask-dl-bar,.ask-dl.done .ask-dl-bar{display:block}
.ask-dl-bar i{display:block;height:100%;width:0;border-radius:3px;background:#0071e3;transition:width .16s linear}
.ask-dl.doing{border-color:#c9dcf6;background:#fafcff}
.ask-dl.done{border-color:#c6e6d6;background:#f7fcf9}
.ask-dl.done .ask-dl-bar i{background:#2f9e6b}
.ask-dl.done .ask-dl-ico{background:#e6f6ee;color:#2f9e6b}
.ask-dl.done .ask-dl-sub{color:#2f9e6b;font-weight:700}
.ask-dl.fail{border-color:#f0cfcc;background:#fff9f8}
.ask-dl.fail .ask-dl-sub{color:#c1362f;font-weight:700}

/* AI 助手：微信式附件面板 + 对话内数据卡片 */.ask-attach{position:fixed;z-index:36;left:0;right:0;bottom:calc(68px + env(safe-area-inset-bottom));
  display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:18px max(18px,calc((100vw - 620px)/2));
  background:rgba(251,251,253,.97);border-top:1px solid #dedee3;backdrop-filter:blur(18px)}
.ask-attach[hidden]{display:none}.ask-attach label{display:flex;flex-direction:column;align-items:center;justify-content:center;
  min-height:112px;border:1px solid #e1e1e5;border-radius:18px;background:#fff;color:#1d1d1f}
.ask-attach-ico{display:grid;place-items:center;width:48px;height:48px;margin-bottom:8px;border-radius:15px;background:#f2f2f5;font-size:23px}
.ask-attach label b{font-size:15px}.ask-attach label small{margin-top:4px;color:#86868b;font-size:11px}.ask-plus.on{background:#1d1d1f;color:#fff;transform:rotate(45deg)}
.ask-table-card .ask-row-more{display:none}.ask-table-card.expanded .ask-row-more{display:table-row}
.ask-table-tools{display:flex;justify-content:flex-end;gap:8px;padding:10px 12px;border-top:1px solid #ededf0}
.ask-table-tools button{min-height:34px;padding:0 12px;border:0;border-radius:10px;background:#f2f2f5;color:#343538;font-weight:700}
.flow-table select[name="batch_style_id"]{min-width:170px}.flow-table input[name="batch_color"]{min-width:112px}.flow-table input[name="batch_size"]{min-width:76px}.flow-table select[name="batch_knit_factory_id"]{min-width:145px}
.ask-table-card{align-self:stretch;max-width:100%;overflow:hidden;border:1px solid #dedee3;border-radius:17px;background:#fff;color:#1d1d1f}
.ask-table-hd{padding:13px 14px;border-bottom:1px solid #ececf0;font-size:14px;font-weight:800}
.ask-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.ask-table-card table{min-width:100%;border-collapse:collapse;font-size:12.5px;font-variant-numeric:tabular-nums}
.ask-table-card th,.ask-table-card td{padding:11px 13px;border-right:1px solid #eeeeF1;border-bottom:1px solid #eeeeF1;white-space:nowrap;text-align:right}
.ask-table-card th:first-child,.ask-table-card td:first-child{text-align:left}.ask-table-card th{position:sticky;top:0;background:#f7f7f9;color:#5b5c61;font-weight:750}
.ask-table-card tbody tr:last-child td{border-bottom:0}.ask-table-card td:last-child,.ask-table-card th:last-child{border-right:0}.ask-table-card tbody tr.total{background:#fff8df;font-weight:750}
.ask-table-card>p{margin:0;padding:9px 13px;color:#86868b;font-size:11px}
.ask-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:#e8e8ec;border-bottom:1px solid #e8e8ec}.ask-metrics>div{min-width:0;padding:12px 8px;background:#f7f7f9;text-align:center}.ask-metrics b,.ask-metrics span{display:block}.ask-metrics b{font-size:18px;white-space:nowrap}.ask-metrics span{margin-top:3px;color:#77787d;font-size:10.5px}

/* 皓白主题收口：去掉历史绿色主色，首页分档圆环不受影响 */
.doc-pick,.kr-card-complete,.kr-alert-actions button.yes,.confirm-card button.primary,.profile-avatar{background:#1d1d1f;border-color:#1d1d1f}
.doc-pick.secondary,.photo-pick.secondary{background:#f2f2f5;color:#1d1d1f;border-color:#dedee3}
.wb-head>a,.wb-section-head a,.wb-actions em,.batch-review-head span{color:#1d1d1f}
.wb-stage-title i,.pm-ico{background:#f2f2f5;color:#1d1d1f}.wb-stage.open .wb-stage-title b{color:#1d1d1f}
.kr-progress i{background:#1d1d1f}.kd-hero{background:linear-gradient(135deg,#17181a,#343538)}
.batch-table th{background:#f5f5f7;color:#5c5d61}.batch-review{border-color:#dedee3;background:#fff}
/* 单据拍照识别：所有入口保持同一套操作 */
.doc-scan{margin:14px 0 18px;padding:16px;border:1px solid #dfe5ed;border-radius:16px;background:linear-gradient(135deg,#f8fbff,#fff)}
.doc-scan-title{font-size:16px;font-weight:800;color:#20252b;margin-bottom:5px}
.doc-scan p{margin:0 0 12px;color:#69717c;font-size:13px;line-height:1.55}
.doc-pick{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 18px;border-radius:12px;background:#1d1d1f;color:#fff;font-weight:750;cursor:pointer}
.doc-pick input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.doc-source-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.doc-pick.secondary,.photo-pick.secondary{background:#f2f2f5;color:#1d1d1f;border:1px solid #cfe1dc}
.doc-source-actions .photo-pick{position:relative}
.doc-source-actions .photo-pick input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.doc-scan-status{margin-top:10px;color:#59636f;font-size:13px;line-height:1.5}
.batch-review{margin:8px 0 18px;padding:14px;border:1px solid #dedee3;border-radius:15px;background:#fbfefd}
.batch-review[hidden]{display:none}
.batch-review-head{display:flex;justify-content:space-between;gap:10px;align-items:center}
.batch-review-head b{font-size:16px}.batch-review-head span{font-size:13px;color:#1d1d1f;font-weight:750}
.batch-review p{margin:6px 0 10px;color:#68716f;font-size:12px}
.batch-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.batch-table{border-collapse:separate;border-spacing:0;min-width:780px;width:100%}
.batch-table th{padding:8px;background:#f5f5f7;color:#55615e;font-size:12px;text-align:left;white-space:nowrap}
.batch-table td{padding:5px;border-bottom:1px solid #eeeeF1}
.batch-table input{min-width:105px;width:100%;height:40px;padding:0 9px;border:1px solid #dedee3;border-radius:8px;background:#fff}
.batch-table input[name="batch_material_name"]{min-width:150px}
/* 明细表里的下拉（颜色等）：宽度要够，否则字被挤成符号 */
.batch-table .sp-wrap{min-width:118px;width:100%}
.batch-table select{width:100%;min-width:118px;height:40px;padding:0 8px;border:1px solid #dedee3;
  border-radius:8px;background:#fff;font-family:inherit;font-size:13px;font-weight:600;color:#1d1d1f;
  text-overflow:ellipsis;-webkit-appearance:none;appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,#9aa1a6 50%),linear-gradient(135deg,#9aa1a6 50%,transparent 50%);
  background-position:calc(100% - 14px) 18px,calc(100% - 9px) 18px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.batch-table select[name="batch_color"]{min-width:160px}
.batch-table .sp-cover{pointer-events:auto}
.batch-del{width:36px;height:36px;border:0;border-radius:9px;background:#fff0ef;color:#b34a43;font-size:20px}
/* 毛料明细改卡片：一种毛料一张小卡，三个小行，不再左右滑（收发三个页面 + 调拨页共用） */
.wool-cards{gap:10px;margin:0}
.wool-cards>.wool-row{padding:11px 11px 12px;border:1px solid #e6e8ec;border-radius:14px;background:#fff;box-shadow:0 1px 2px rgba(20,22,26,.03)}
.wool-row .wr-line{display:flex;gap:8px;align-items:flex-end}
.wool-row .wr-line+.wr-pair,.wool-row .wr-pair+.wr-pair,.wool-row .wr-line+.wr-line{margin-top:8px}
.wool-row .wr-line>.wr-f,.wool-row .wr-line>.sp-wrap{flex:1 1 0;min-width:0}
.wool-row .wr-pair{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.wool-row .wr-pair>*{min-width:0}
.wool-row input{width:100%;min-width:0;height:42px;padding:0 10px;border:1px solid #e0e3e8;border-radius:11px;
  background:#fff;font-family:inherit;font-size:13.5px;font-weight:600;color:#1d1d1f}
.wool-row input::placeholder{color:#a9afb4;font-weight:500}
.wool-row input:focus{border-color:#1d1d1f;outline:0}
.wool-row select{width:100%;min-width:0;height:42px;padding:0 26px 0 10px;border:1px solid #e0e3e8;border-radius:11px;
  background:#fff;font-family:inherit;font-size:13.5px;font-weight:600;color:#1d1d1f;
  text-overflow:ellipsis;-webkit-appearance:none;appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,#9aa1a6 50%),linear-gradient(135deg,#9aa1a6 50%,transparent 50%);
  background-position:calc(100% - 15px) 19px,calc(100% - 10px) 19px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.wool-row .sp-wrap{width:100%;min-width:0}
.wool-row .sp-cover{pointer-events:auto;border-radius:11px}
.wool-row .wr-f{display:block;min-width:0}
.wool-row .wr-f>span:first-child{display:block;margin:0 0 4px;color:#8a9295;font-size:11px;font-weight:600;line-height:1}
.wool-row .wr-kg{position:relative;display:block}
.wool-row .wr-kg input{padding-right:30px}
.wool-row .wr-kg i{position:absolute;right:11px;top:50%;transform:translateY(-50%);color:#9aa0a5;font-size:11.5px;font-style:normal}
.wool-row .batch-del{flex:0 0 auto;width:36px;height:42px;border-radius:11px;font-size:18px;line-height:1}
/* 必填红星 / 选填灰标 */
.req-star,.fl em,.alloc-hd em,.wr-f em,.tf-l em{font-style:normal;color:#e0392b;font-weight:800;margin-left:2px}
.wr-f em.wr-opt,.tf-l em.wr-opt,.fl em.wr-opt,.alloc-hd em.wr-opt{color:#a8aeb3;font-weight:600;font-size:10.5px;margin-left:4px}
/* 调拨页：左边标题要够宽，带红星也不换行 */
.tf-form .field>.fl{flex:0 0 auto;white-space:nowrap;padding-right:9px}
/* 调拨页「尺码 / 对应产量」两格：标题在上、框占满，不然挤成一条缝 */
.tf-form .sf-row .field{display:block}
.tf-form .sf-row .field>.fl{display:block;margin:0 0 6px;padding-right:0}
.tf-form .sf-row .field>select,.tf-form .sf-row .field>.tf-unit{width:100%}
/* 收发流水：类别下拉 + 时间 + 明细 + 单条详情 */
.flows-page{padding-bottom:105px}
.flt-bar{display:flex;align-items:center;gap:10px;margin:2px 0 10px}
.flt-l{flex:0 0 auto;font-size:13px;color:#8a9295;font-weight:600}
.flt-bar .sp-wrap{flex:1 1 0;min-width:0}
.flt-sel{width:100%;height:44px;padding:0 30px 0 12px;border:1px solid #e0e3e8;border-radius:12px;background:#fff;
  font-family:inherit;font-size:14px;font-weight:700;color:#1d1d1f;
  -webkit-appearance:none;appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,#9aa1a6 50%),linear-gradient(135deg,#9aa1a6 50%,transparent 50%);
  background-position:calc(100% - 17px) 20px,calc(100% - 12px) 20px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.flt-list{margin-top:6px;border:1px solid #e6e8ec;border-radius:16px;background:#fff;overflow:hidden}
.fl-row{display:block;padding:12px 14px;border-bottom:1px solid #f1f2f4;color:#1d1d1f;text-decoration:none}
.fl-row:last-child{border-bottom:0}
.fl-row:active{background:#fafafb}
.fl-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.fl-code{font-size:14.5px;font-weight:700;letter-spacing:-.2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-q{flex:none;font-size:13.5px;font-weight:800;font-variant-numeric:tabular-nums}
.fl-sub{display:flex;align-items:center;gap:8px;margin-top:6px;min-width:0}
.fl-tag{flex:none;padding:2px 7px;border-radius:7px;background:#f2f2f5;color:#5b6166;font-size:10.5px;font-weight:800}
.fl-meta{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#8a9295;font-size:11.5px}
.fl-date{flex:none;color:#b0b5ba;font-size:11px;font-variant-numeric:tabular-nums}
/* 单条流水详情：第一眼先看清「这条是干嘛的」 */
.fd-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin:12px 0 14px;
  padding:16px;border:1px solid #e6e8ec;border-radius:18px;background:#fff;box-shadow:0 4px 16px rgba(20,22,26,.04)}
.fd-head-top{display:flex;align-items:center;gap:12px;min-width:0}
.fd-ico{flex:0 0 auto;display:grid;place-items:center;width:48px;height:48px;border-radius:14px;color:#fff}
.fd-ico svg{width:24px;height:24px}
.fd-ico.blue{background:#0071e3}
.fd-ico.purple{background:#7c5cfa}
.fd-ico.orange{background:#e8890c}
.fd-ico.green{background:#12855f}
.fd-head-txt{min-width:0}
.fd-head-txt h1{margin:0;font-size:22px;line-height:1.2;letter-spacing:-.5px}
.fd-head-txt p{margin:6px 0 0;color:#8a9295;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fd-head-num{flex:0 0 auto;text-align:right}
.fd-head-num b{font-size:28px;line-height:1;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.fd-head-num i{font-style:normal;margin-left:4px;font-size:13px;color:#8a9295}
.fd-head-num span{display:block;margin-top:6px;font-size:10.5px;color:#a8aeb3}
.fd-card{padding:2px 15px;border:1px solid #e6e8ec;border-radius:16px;background:#fff}
.fd-row{display:flex;justify-content:space-between;align-items:baseline;gap:14px;padding:13px 0;
  border-bottom:1px solid #f1f2f4;font-size:14px}
.fd-row:last-child{border-bottom:0}
.fd-row>span{flex:0 0 auto;color:#8a9295;font-size:13px}
.fd-row>b{text-align:right;font-weight:700;word-break:break-all}
.fd-note{margin-top:12px;padding:13px 15px;border:1px solid #e6e8ec;border-radius:16px;background:#fff}
.fd-note>span{font-size:12px;color:#8a9295}
.fd-note p{margin:6px 0 0;font-size:14px;line-height:1.6;word-break:break-all}
/* 一次录了几种毛料：每种一张小卡 */
.fd-items{display:grid;gap:10px;margin-top:12px}
.fd-item{padding:0 15px 2px;border:1px solid #e6e8ec;border-radius:16px;background:#fff}
.fd-item-hd{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 0 11px;
  border-bottom:1px solid #f1f2f4}
.fd-item-hd b{font-size:14px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fd-item-hd span{flex:none;font-size:10.5px;color:#a8aeb3}
.fd-item .fd-row:last-child{border-bottom:0}
/* 外机信息：工厂列表 + 一家厂的合作记录 */
.fx-list{display:grid;gap:9px;margin-bottom:18px}
.fx-fac{display:flex;align-items:center;gap:12px;padding:13px 14px;border:1px solid #e6e8ec;border-radius:16px;
  background:#fff;color:#1d1d1f;text-decoration:none}
.fx-fac:active{background:#fafafb}
.fx-fac-ico{flex:0 0 auto;display:grid;place-items:center;width:40px;height:40px;border-radius:12px;color:#fff}
.fx-fac-ico svg{width:20px;height:20px}
.fx-fac-ico.knit{background:#7c5cfa}
.fx-fac-ico.sew{background:#e8890c}
.fx-fac-txt{flex:1 1 0;min-width:0}
.fx-fac-txt b{display:block;font-size:15px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-fac-txt small{display:block;margin-top:3px;color:#8a9295;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-off{margin-left:6px;padding:1px 6px;border-radius:6px;background:#f2f2f5;color:#9aa0a5;
  font-size:10px;font-style:normal;font-weight:700}
.fx-go{flex:none;color:#c8ccd0;font-style:normal;font-size:18px}
.fx-detail{padding-bottom:105px}
.fx-hero{margin:12px 0 16px;padding:16px;border:1px solid #e6e8ec;border-radius:18px;background:#fff;
  box-shadow:0 4px 16px rgba(20,22,26,.04)}
.fx-hero-top{display:flex;align-items:center;gap:12px}
.fx-hero-txt{min-width:0}
.fx-hero-txt h1{margin:0;font-size:21px;letter-spacing:-.4px}
.fx-hero-txt p{margin:5px 0 0;color:#8a9295;font-size:12.5px}
.fx-sums{display:flex;flex-wrap:wrap;gap:7px;margin-top:14px}
.fx-sums>div{flex:1 1 30%;min-width:86px;padding:10px 5px;border-radius:12px;background:#f7f7f9;text-align:center}
.fx-sums span{display:block;color:#8a9295;font-size:10.5px;white-space:nowrap}
.fx-sums b{display:block;margin-top:4px;font-size:14.5px;font-weight:800;font-variant-numeric:tabular-nums;
  white-space:nowrap;letter-spacing:-.2px}
.fx-sums i{font-style:normal;margin-left:2px;font-size:10px;color:#8a9295;font-weight:600}
.fx-events{display:grid;gap:10px;padding-bottom:16px}
.fx-ev{display:block;padding:12px 14px;border:1px solid #e6e8ec;border-radius:16px;background:#fff;
  color:#1d1d1f;text-decoration:none}
.fx-ev:active{background:#fafafb}
.fx-ev-top{display:flex;align-items:center;gap:8px}
.fx-date{flex:none;color:#b0b5ba;font-size:11px;font-variant-numeric:tabular-nums}
.fx-tag{flex:none;padding:2px 7px;border-radius:7px;font-size:10.5px;font-weight:800}
.fx-tag.t-out{background:#eaf3ff;color:#0a63c9}
.fx-tag.t-knit{background:#f1ecff;color:#6042d6}
.fx-tag.t-return{background:#fff3e6;color:#b4620b}
.fx-tag.t-sew-out{background:#fff0e8;color:#c25a12}
.fx-tag.t-sew-in{background:#e9f7ef;color:#12855f}
.fx-qty{margin-left:auto;font-size:13.5px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.fx-code{margin-top:7px;font-size:14px;font-weight:700}
.fx-code span{margin-left:6px;color:#9aa0a5;font-size:11.5px;font-weight:500}
.fx-line{margin-top:5px;color:#5f676d;font-size:12px;line-height:1.55}
.fx-line.dim{color:#9aa0a5;font-size:11.5px}
.fx-attr{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:12px;flex-wrap:wrap}
.fx-attr .fx-k{color:#9aa0a5;font-size:11px}
.fx-attr b{font-weight:800;margin-right:8px}
.fx-sizes{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.fx-size{display:inline-block;padding:2px 8px;border-radius:8px;background:#f2f2f5;color:#5f676d;font-size:11px}
.fx-size b{font-weight:800;color:#1d1d1f}
.fx-mats{margin-top:7px;display:grid;gap:4px}
.fx-mat{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;color:#6b7378}
.fx-mat em{font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-mat b{flex:none;font-weight:800;color:#1d1d1f}
/* 全站下载提示：进度条 + 下载完成 */
.dl-mask{position:fixed;z-index:130;inset:0;display:grid;place-items:center;padding:22px;
  background:rgba(18,18,22,.14);-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}
.dl-mask[hidden]{display:none}
.dl-card{width:min(300px,100%);padding:20px;border-radius:18px;background:#fff;text-align:center;
  box-shadow:0 18px 44px rgba(20,22,26,.18);animation:mzPageIn 160ms ease-out both}
.dl-title{font-size:15px;font-weight:800}
.dl-bar{margin-top:14px;height:8px;border-radius:5px;background:#eef0f3;overflow:hidden}
.dl-bar i{display:block;height:100%;width:0;border-radius:5px;background:#0071e3;transition:width .25s ease}
.dl-pct{margin-top:9px;font-size:12px;color:#8a9295;font-variant-numeric:tabular-nums}
/* 外机每月记录 */
.fm-page{padding-bottom:105px}
.fm-list{display:grid;gap:10px;margin-bottom:16px}
.fm-card{display:block;padding:13px 14px;border:1px solid #e6e8ec;border-radius:16px;background:#fff;
  color:#1d1d1f;text-decoration:none}
.fm-card:active{background:#fafafb}
.fm-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.fm-top b{font-size:15px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fm-go{flex:none;color:#c8ccd0;font-style:normal;font-size:18px}
.fm-nums{display:flex;gap:7px;margin-top:11px}
.fm-nums>div{flex:1 1 0;min-width:0;padding:9px 6px;border-radius:11px;background:#f7f7f9;text-align:center}
.fm-nums span{display:block;color:#8a9295;font-size:10.5px;white-space:nowrap}
.fm-nums b{display:block;margin-top:4px;font-size:14px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.fm-nums i{font-style:normal;margin-left:2px;font-size:10px;color:#8a9295;font-weight:600}
.fm-foot{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:9px;color:#8a9295;font-size:11.5px}
.fm-foot .warn{color:#c1362f;font-weight:700}
.fm-export{margin:18px 0 8px}
.fm-export .btn-save{width:100%}
/* 收发工作台 */
.workbench{padding-bottom:105px}
.wb-head{display:flex;justify-content:space-between;align-items:flex-end;margin:8px 0 16px}
.wb-head span{font-size:12px;color:#75807d}.wb-head h1{margin:2px 0 0;font-size:26px;letter-spacing:-.5px}.wb-head>a{font-size:13px;color:#1d1d1f;font-weight:700}
.wb-today{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:18px}
.wb-today>div{padding:12px 10px;border:1px solid #e5e9e8;border-radius:14px;background:#fff;min-width:0}
.wb-today span{display:block;color:#707a77;font-size:11px;white-space:nowrap}.wb-today b{display:inline-block;margin-top:5px;font-size:19px}.wb-today small{margin-left:3px;color:#89908e;font-size:10px}
.wb-stage{position:relative;margin:0 0 13px;padding:15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;box-shadow:0 5px 18px rgba(34,53,48,.035)}
.wb-stage-title{display:flex;gap:11px;align-items:center;margin-bottom:12px}.wb-stage-title i{display:grid;place-items:center;width:29px;height:29px;border-radius:10px;background:#f2f2f5;color:#1d1d1f;font-style:normal;font-weight:800}.wb-stage-title b{display:block;font-size:16px}.wb-stage-title span{display:block;margin-top:2px;color:#7a8380;font-size:12px}
.wb-actions{display:grid;gap:8px}.wb-actions.two{grid-template-columns:1fr 1fr}.wb-actions a{position:relative;display:block;padding:12px 33px 12px 12px;border-radius:12px;background:#f7f7f9;color:#202623;min-height:72px}.wb-actions b{display:block;font-size:14px}.wb-actions span{display:block;margin-top:4px;color:#75807c;font-size:11px;line-height:1.4}.wb-actions em{position:absolute;right:10px;top:12px;color:#1d1d1f;font-size:11px;font-style:normal;font-weight:750}
.wb-stage.last{border-color:#dedee3}.wb-recent{margin-top:22px}.wb-section-head{display:flex;align-items:center;justify-content:space-between}.wb-section-head h2{font-size:18px}.wb-section-head a{font-size:12px;color:#1d1d1f}
@media(max-width:380px){.wb-actions.two{grid-template-columns:1fr}.wb-today{gap:5px}.wb-today>div{padding:10px 7px}.wb-today b{font-size:17px}}
/* 清晰的个人中心 */
.profile-page{padding-bottom:105px}.profile-card{display:flex;align-items:center;gap:14px;margin:12px 0 20px;padding:18px;border:1px solid #e2e7e5;border-radius:18px;background:#fff}.profile-avatar{display:grid;place-items:center;width:52px;height:52px;border-radius:17px;background:#1d1d1f;color:#fff;font-size:22px;font-weight:800}.profile-card h1{margin:0;font-size:21px}.profile-card p{margin:5px 0 0;color:#737c79;font-size:13px}.profile-menu{overflow:hidden;border:1px solid #e3e8e6;border-radius:17px;background:#fff}.profile-menu a{display:flex;align-items:center;gap:12px;min-height:67px;padding:10px 14px;color:#202623;border-bottom:1px solid #eef1f0}.profile-menu a:last-child{border-bottom:0}.pm-ico{display:grid;place-items:center;width:36px;height:36px;border-radius:11px;background:#f2f2f5;color:#1d1d1f;font-size:13px;font-weight:800}.profile-menu div{flex:1}.profile-menu b,.profile-menu small{display:block}.profile-menu b{font-size:15px}.profile-menu small{margin-top:3px;color:#7a8380;font-size:11px}.profile-menu em{color:#9aa19f;font-size:22px;font-style:normal}.profile-info{margin:18px 0;padding:3px 15px;border:1px solid #e5e9e8;border-radius:16px;background:#fff}.profile-info div{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px solid #eef1f0;font-size:13px}.profile-info div:last-child{border:0}.profile-info span{color:#76807d}.profile-info b{font-weight:700}.profile-logout{width:100%;height:48px;border:1px solid #eadfdd;border-radius:14px;background:#fff;color:#a64d45;font-weight:750}
/* 织机主管报表 */
.tab{position:relative}.tab-badge{position:absolute;top:3px;left:calc(50% + 8px);min-width:18px;height:18px;padding:0 5px;border:2px solid #fff;border-radius:10px;background:#e6463e;color:#fff;font:700 10px/14px system-ui;text-align:center}
.knit-reports{padding-bottom:130px;overflow:hidden}.kr-head{display:flex;justify-content:space-between;align-items:end;margin:8px 0 14px}.kr-head span{font-size:12px;color:#78817f}.kr-head h1{margin:2px 0 0;font-size:26px}.kr-tabs{display:grid;grid-template-columns:1fr 1fr;padding:4px;border-radius:14px;background:#f2f2f5}.kr-tabs a{display:flex;justify-content:center;gap:6px;padding:10px;border-radius:11px;color:#68716f;font-size:14px;font-weight:700}.kr-tabs a.on{background:#fff;color:#1d1d1f;box-shadow:0 2px 8px rgba(20,45,38,.08)}.kr-tabs b{font-size:12px}
.kr-alerts{margin:14px 0;padding:13px;border:1px solid #f2c7c3;border-radius:15px;background:#fff8f7}.kr-alert-title{display:flex;gap:8px;align-items:center;color:#a43d36}.kr-alert-title>span{display:grid;place-items:center;width:21px;height:21px;border-radius:50%;background:#e74d43;color:#fff;font-weight:900}.kr-alert-row{margin-top:11px;padding-top:11px;border-top:1px solid #f3dfdd}.kr-alert-row>div:first-child b,.kr-alert-row>div:first-child span{display:block}.kr-alert-row>div:first-child span{margin-top:3px;color:#7d625f;font-size:12px}.kr-alert-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:9px}.kr-alert-actions form{margin:0}.kr-alert-actions button{min-width:72px;height:34px;border:1px solid #e2d4d2;border-radius:9px;background:#fff;color:#655}.kr-alert-actions button.yes{border-color:#1d1d1f;background:#1d1d1f;color:#fff}
.kr-list{display:grid;gap:12px;margin-top:15px}.kr-card{position:relative;display:block;transition:transform .22s ease}.kr-card>a{display:block;padding:15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;color:#222;box-shadow:0 5px 18px rgba(30,52,45,.035)}.kr-card-top{display:flex;align-items:center;gap:8px}.kr-card-top>b{font-size:19px}.kr-card-top span{padding:3px 7px;border-radius:7px;background:#f2f2f5;color:#66706d;font-size:11px}.kr-card h2{margin:9px 0 2px;font-size:15px}.kr-card p{margin:0 0 12px;color:#7a827f;font-size:12px}.kr-progress{height:7px;overflow:hidden;border-radius:5px;background:#eeeeF1}.kr-progress i{display:block;height:100%;border-radius:5px;background:#1d1d1f}.kr-numbers{display:flex;justify-content:space-between;margin-top:8px;color:#69726f;font-size:12px}.kr-numbers b{color:#202623}.kr-select{position:absolute;right:-48px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:31px;height:31px}.kr-select input{position:absolute;opacity:0}.kr-select i{width:25px;height:25px;border:2px solid #c7cfcc;border-radius:50%;background:#fff}.kr-select input:checked+i{border:7px solid #1d1d1f}.marking .kr-card{transform:translateX(-43px)}.marking .kr-card>a{pointer-events:none}.marking .kr-select{right:-38px}
.kr-card-complete{position:absolute;z-index:2;right:11px;top:11px;height:38px;padding:0 13px;border:0;border-radius:20px;background:#202321;color:#fff;font-size:11px;font-weight:800;box-shadow:0 3px 10px rgba(0,0,0,.14)}.kr-card.can-close .kr-card-top{padding-right:132px}
.kr-mark-start{position:fixed;z-index:18;right:18px;bottom:88px;height:45px;padding:0 18px;border:0;border-radius:23px;background:#1d1d1f;color:#fff;font-weight:800;box-shadow:0 8px 24px rgba(23,107,91,.28)}.kr-mark-bar{position:fixed;z-index:20;left:0;right:0;bottom:69px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px max(14px,calc((100vw - 620px)/2));background:#fff;border-top:1px solid #e1e6e4;box-shadow:0 -5px 18px rgba(30,45,40,.08)}.kr-mark-bar[hidden]{display:none}.kr-mark-bar button{height:40px;padding:0 13px;border:0;border-radius:11px;background:#f2f2f5;color:#535d5a}.kr-mark-bar .save{background:#1d1d1f;color:#fff;font-weight:750}.kr-mark-bar b{font-size:13px}
.confirm-mask{position:fixed;z-index:100;inset:0;display:grid;place-items:center;padding:22px;background:rgba(15,24,21,.45)}.confirm-mask[hidden]{display:none}.confirm-card{width:min(340px,100%);padding:22px;border-radius:18px;background:#fff;text-align:center}.confirm-card h3{margin:0;font-size:18px}.confirm-card p{margin:9px 0 20px;color:#69726f;font-size:13px;white-space:pre-line}.confirm-card>div{display:grid;grid-template-columns:1fr 1fr;gap:9px}.confirm-card button{height:43px;border:0;border-radius:11px;background:#f2f2f5}.confirm-card button.primary{background:#1d1d1f;color:#fff;font-weight:750}
.knit-detail{padding-bottom:105px}.kd-hero{display:flex;justify-content:space-between;gap:12px;margin:12px 0 15px;padding:17px;border-radius:18px;background:linear-gradient(135deg,#1d1d1f,#343538);color:#fff}.kd-hero span{font-size:11px;opacity:.78}.kd-hero h1{margin:4px 0;font-size:25px}.kd-hero h1 small{display:block;margin-top:4px;font-size:11px;font-weight:500;opacity:.8}.kd-hero p{margin:0;font-size:12px;opacity:.82}.kd-hero> b{text-align:right;font-size:20px}.kd-hero> b small{display:block;font-size:10px;font-weight:500;opacity:.75}.kd-card{margin:0 0 13px;padding:15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff}.kd-card h2{margin:0;font-size:17px}.kd-card>p{margin:4px 0 12px;color:#76807d;font-size:11px}.kd-scroll{overflow-x:auto}.kd-card table{min-width:100%;border-collapse:collapse;font-size:12px}.kd-card th,.kd-card td{padding:9px 10px;border-bottom:1px solid #edf0ef;text-align:right;white-space:nowrap}.kd-card th:first-child,.kd-card td:first-child{text-align:left;position:sticky;left:0;background:#fff}.kd-card th{background:#f5f5f7;color:#64706c}.wool-cards{display:grid;gap:10px}.wool-cards article{padding:13px;border-radius:13px;background:#f7f7f9}.wool-cards h3{margin:0 0 9px;font-size:14px}.wool-cards article>div{display:flex;justify-content:space-between;gap:12px;padding:5px 0;font-size:12px}.wool-cards span{color:#737d79}.wool-cards b{text-align:right}.wool-cards .short b{color:#d1433c}
.wool-summary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:11px}.wool-summary>div{padding:11px;border-radius:12px;background:#f2f2f5}.wool-summary span,.wool-summary b{display:block}.wool-summary span{color:#66726e;font-size:11px}.wool-summary b{margin-top:4px;font-size:16px}.wool-summary .short{background:#fff0ee}.wool-summary .short b{color:#d1433c}
/* ============================================================
   统一移动端动效系统
   ============================================================ */
:root{--mz-fast:120ms;--mz-normal:180ms;--mz-sheet:220ms;--mz-ease:cubic-bezier(.2,.75,.25,1);--mz-ease-out:cubic-bezier(.16,1,.3,1)}
body>.wrap{animation:mzPageIn var(--mz-normal) var(--mz-ease-out) both}
@keyframes mzPageIn{from{opacity:.01;transform:translateY(5px)}to{opacity:1;transform:none}}
button,.qbtn,.profile-menu a,.wb-actions a,.kr-card>a{-webkit-tap-highlight-color:transparent}
button:active,.qbtn:active,.profile-menu a:active,.wb-actions a:active,.kr-card>a:active{transform:scale(.985);opacity:.9;transition:transform var(--mz-fast) ease,opacity var(--mz-fast) ease}

/* 中央确认框：淡入 + 轻微上移，不再突然缩放 */
.mdl{display:flex;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--mz-normal) ease,visibility 0s linear var(--mz-normal)}
.mdl.on{display:flex;opacity:1;visibility:visible;pointer-events:auto;animation:none;transition-delay:0s}
.mdl-box{opacity:0;transform:translateY(8px) scale(.99);animation:none;transition:opacity var(--mz-normal) var(--mz-ease),transform var(--mz-normal) var(--mz-ease-out)}
.mdl.on .mdl-box{opacity:1;transform:none}

/* 选项统一从底部出来，和日期选择器使用同一节奏 */
.pk{display:flex;align-items:flex-end;justify-content:center;padding:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--mz-normal) ease,visibility 0s linear var(--mz-sheet)}
.pk.on{display:flex;opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
.pk-bg{animation:none;opacity:1}
.pk-sheet{width:min(520px,100%);max-width:520px;max-height:78vh;border-radius:22px 22px 0 0;padding:7px 0 calc(9px + env(safe-area-inset-bottom));animation:none;transform:translateY(100%);transition:transform var(--mz-sheet) var(--mz-ease-out)}
.pk.on .pk-sheet{transform:translateY(0)}

.dp{display:block;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--mz-normal) ease,visibility 0s linear var(--mz-sheet)}
body.dp-open .dp{display:block;opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
.dp-sheet{animation:none;transform:translateY(100%);transition:transform var(--mz-sheet) var(--mz-ease-out)}
body.dp-open .dp-sheet{transform:translateY(0)}

/* 页面里的确认框也遵循中央确认框规则 */
.confirm-mask{display:grid;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--mz-normal) ease,visibility 0s linear var(--mz-normal)}
.confirm-mask.on{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
.confirm-card{opacity:0;transform:translateY(8px) scale(.99);transition:opacity var(--mz-normal) var(--mz-ease),transform var(--mz-normal) var(--mz-ease-out)}
.confirm-mask.on .confirm-card{opacity:1;transform:none}

/* 分类切换只改变选中状态，不做整页横向推拉 */
.kr-tabs a{transition:background var(--mz-fast) ease,color var(--mz-fast) ease,box-shadow var(--mz-fast) ease}
.kr-card-complete{transition:transform var(--mz-fast) ease,background var(--mz-fast) ease,opacity var(--mz-fast) ease}

@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}body>.wrap{transform:none!important}}

/* 主管端统一：黑色主色、大字、清晰触控 */
:root{--brand:#202124;--brand-soft:#f1f1f2;--ok:#202124;--ok-soft:#f2f2f2}
.tabbar.five .tab{min-width:0;padding-left:3px;padding-right:3px}.tabbar.five .tab span{font-size:11px;font-weight:700}
.tabbar .tab.on,.wb-head>a,.wb-section-head a{color:#17181a}.tabbar .tab.on svg{stroke:#17181a}
.sc{padding:18px;border-color:#dedfe1;border-radius:18px}.sc-no{font-size:21px;font-weight:850}.sc-nm{font-size:15px;font-weight:700}.sc-qty,.sc-pct{font-size:14px;font-weight:750}.sc-pct{font-size:18px}.sc-cu,.sc-st,.due{font-size:13px}.sc-rings{margin-top:16px;gap:8px}.sc-ring-w{width:60px;height:60px}.sc-ring-w>svg{width:60px;height:60px}.sc-ring-v{font-size:15px;font-weight:850}.sc-ring-v small{font-size:10px}.sc-ring-lb{margin-top:5px;font-size:13px;font-weight:750}
.kr-tabs a.on{color:#17181a}.kr-progress i,.kr-alert-actions button.yes,.confirm-card button.primary,.kr-mark-start,.kr-mark-bar .save{background:#202124;border-color:#202124}.kr-card-complete{background:#202124}.kd-hero{background:linear-gradient(135deg,#17181a,#343538)}
.doc-pick{background:#202124}.doc-pick.secondary,.photo-pick.secondary{background:#f1f1f2;color:#202124;border-color:#dadbdd}.batch-review-head span,.wb-actions em{color:#202124}.wb-stage-title i,.pm-ico{background:#f0f0f1;color:#202124}.profile-avatar{background:#202124}.kr-progress{background:#ececee}
.entry-hub{padding-bottom:110px}.eh-head{margin:10px 0 18px}.eh-head span{font-size:13px;color:#76777b}.eh-head h1{margin:4px 0;font-size:28px}.eh-head p{margin:7px 0 0;color:#6c6d70;font-size:14px}.eh-actions{display:grid;gap:12px}.eh-actions>a{display:flex;align-items:center;gap:14px;min-height:100px;padding:18px;border:1px solid #dedfe1;border-radius:18px;background:#fff;color:#202124}.eh-actions>a>i{display:grid;place-items:center;width:48px;height:48px;border-radius:15px;background:#f0f0f1;font-style:normal;font-weight:850}.eh-actions>a>div{flex:1}.eh-actions b{display:block;font-size:18px}.eh-actions span{display:block;margin-top:5px;color:#747579;font-size:13px}.eh-actions>a>em{font-size:25px;font-style:normal;color:#9a9b9e}
.wbs-head,.wbs-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.wbs-head span{color:#a64b44;font-size:12px}.wbs-row{padding-top:9px;margin-top:9px;border-top:1px solid #f4dedb}.wbs-row b,.wbs-row span{display:block}.wbs-row span{margin-top:3px;color:#846965;font-size:11px}.wbs-row em{color:#a23f38;font-style:normal;font-weight:800}
.wb-shortage{margin:0 0 15px;padding:14px;border:1px solid #f0c8c4;border-radius:15px;background:#fff8f7}.wb-shortage h2{margin:0 0 8px;font-size:16px}.wb-shortage a{display:flex;justify-content:space-between;padding:8px 0;color:#7b3934;font-size:13px;border-top:1px solid #f4dedb}.wb-actions.three{grid-template-columns:1fr}
.dept-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin:0 0 13px}.dept-summary>div{padding:14px;border:1px solid #e1e2e4;border-radius:14px;background:#fff}.dept-summary>div:last-child{grid-column:1/-1}.dept-summary span,.dept-summary b{display:block}.dept-summary span{font-size:12px;color:#747579}.dept-summary b{margin-top:5px;font-size:21px}
.wage-rank{padding-bottom:105px}.rank-list{margin-top:14px;overflow:hidden;border:1px solid #e0e1e3;border-radius:17px;background:#fff}.rank-row{display:flex;align-items:center;gap:13px;min-height:68px;padding:10px 15px;border-bottom:1px solid #eee}.rank-row:last-child{border-bottom:0}.rank-row>i{display:grid;place-items:center;width:31px;height:31px;border-radius:50%;background:#eeeeef;color:#555;font-style:normal;font-weight:850}.rank-row>div{flex:1}.rank-row b,.rank-row span{display:block}.rank-row b{font-size:16px}.rank-row span{margin-top:3px;color:#85868a;font-size:11px}.rank-row strong{font-size:17px}.rank-row.top-1>i{background:#fff0ee;color:#d6362f}.rank-row.top-2>i{background:#f4effc;color:#7a48b4}.rank-row.top-3>i{background:#edf4ff;color:#2e6dcc}
/* 返工件数单独标出来，别跟正常产量混着看 */
.rank-row span em.rw{font-style:normal;color:#b4620b;font-weight:700}

/* ---------- 织机明细：一个颜色一张卡，7 行高，中间班次可滑 ---------- */
.kd-sec{display:flex;justify-content:space-between;align-items:baseline;margin:18px 2px 10px;font-size:15px}
.kd-sec>span{font-size:12px;color:#77817d;font-weight:500}
.kc{margin:0 0 13px;border:1px solid #e2e7e5;border-radius:16px;background:#fff;overflow:hidden}
.kc-hd{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:11px 13px;background:#f7f7f9;border-bottom:1px solid #e8ecea}
.kc-hd>b{font-size:14.5px}
.kc-hd>span{font-size:11.5px;color:#6b7672}
.kc-hd>span b{font-size:12.5px;color:#1c2522}
.kc-row{display:grid;grid-template-columns:78px repeat(var(--n,1),minmax(0,1fr));align-items:center;min-height:36px}
.kc-row>span{padding:7px 4px;text-align:center;font-size:12.5px;font-variant-numeric:tabular-nums}
.kc-row>.kc-lb{text-align:left;padding-left:13px;color:#6b7672;font-size:11.5px}
.kc-th{border-bottom:1px solid #f0f3f2}
.kc-th>span{color:#6b7672;font-size:11.5px;font-weight:700;background:#fafcfb}
.kc-plan>span{color:#33514a;font-weight:700}
.kc-body{max-height:108px;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.kc-total{border-top:1px solid #e8ecea;background:#fafcfb}
.kc-total b{font-size:13.5px}
.kc-owe{border-top:1px dashed #e8ecea}
.kc-owe .short{color:#c1362f;font-weight:800}
.kc-owe .done{color:#1b9d63;font-weight:700}
.kc-row .dim{color:#c2c8c5}

/* hidden 属性必须压过 display:grid，否则「正在做/已完成」两个面板会同时露出来 */
.report-panel[hidden],
.kr-list[hidden] { display: none !important; }
.kd-hero{flex-wrap:wrap}
/* 毛料明细：红框（hero）底部通栏大按钮 */
.kd-wool-btn{flex:0 0 100%;display:block;margin-top:13px;padding:12px;border-radius:12px;
  background:rgba(255,255,255,.22);color:#fff;font-size:14.5px;font-weight:800;letter-spacing:.3px;
  text-align:center;text-decoration:none;border:1px solid rgba(255,255,255,.28)}
.kd-wool-btn:active{background:rgba(255,255,255,.34)}
.kd-wool-btn.back{font-size:13px;font-weight:600;padding:9px}
.today-i.tap{color:inherit;text-decoration:none;border-radius:12px}
.today-i.tap:active{background:rgba(0,113,227,.07)}
.sf-note{margin:0 0 12px;padding:10px 12px;border-radius:11px;background:var(--bg-2,#f5f5f7);color:#5c6166;font-size:12.5px;line-height:1.55}

/* 工作台：四个标题卡，点开才有细项 */
.wb-stage-title{cursor:pointer;position:relative;padding-right:26px}
.wb-stage-title .wb-caret{position:absolute;right:2px;top:50%;transform:translateY(-50%) rotate(0deg);
  font-style:normal;font-size:19px;color:#b3b9b6;transition:transform .18s ease}
.wb-stage.open .wb-caret{transform:translateY(-50%) rotate(90deg)}
.wb-stage.open .wb-stage-title b{color:#1d1d1f}
.wb-actions[hidden]{display:none}

/* 收发录入表单：改成「左边标题、右边方框」的行式布局 */
.form .field,
.simple-form .field{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.form .field>.fl,
.simple-form .field>.fl{flex:0 0 88px;font-size:13.5px;color:#5c6166;line-height:1.3;margin:0}
.form .field>input:not([type="hidden"]):not([type="radio"]):not([type="checkbox"]),
.form .field>select,
.simple-form .field>input:not([type="hidden"]),
.simple-form .field>select{flex:1 1 auto;min-width:0}
.form .field>textarea{flex:1 1 100%}
.form .field>.hint,
.simple-form .field>.hint,
.form .field>p{flex:0 0 100%;margin:0 0 6px;padding-left:98px}
.form .field>.qp,
.form .field>.sf-row{flex:1 1 auto;min-width:0}

/* 毛料这类四项的组：一律两列，窄屏也不塌成单列 */
.wb-actions.two{grid-template-columns:1fr 1fr}
@media(max-width:380px){.wb-actions.two{grid-template-columns:1fr 1fr}}
.wb-actions.two a{min-height:78px}
.wb-actions span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* 统一下拉：用透明层接管原生 select，点开的是底部面板 */
.sp-wrap{position:relative;display:block;flex:1 1 auto;min-width:0}
.sp-wrap>select{width:100%;display:block}
.sp-cover{position:absolute;inset:0;z-index:3;cursor:pointer;border-radius:10px}
.pk-item{display:block;width:100%;padding:14px 16px;border:0;border-bottom:1px solid #f0f1f3;
  background:transparent;text-align:left;font-size:15px;font-family:inherit;color:#1d1d1f}
.pk-item:active{background:#f5f5f7}
.pk-item.on{color:#0071e3;font-weight:600}

/* ===== 所有选择面板：改成屏幕中间弹出，不再从底部滑入 ===== */
.pk{align-items:center;justify-content:center;padding:22px}
.pk-sheet{width:min(400px,100%);max-width:400px;max-height:76vh;border-radius:18px;
  padding:6px 0 10px;transform:translateY(12px) scale(.97);opacity:0;
  transition:transform .2s cubic-bezier(.2,.75,.25,1),opacity .18s ease}
.pk.on .pk-sheet{transform:none;opacity:1}
.pk-sheet::before{content:"";display:block;height:0}

.dp{align-items:center;justify-content:center;padding:22px}
.dp-sheet{width:min(380px,100%);max-height:82vh;border-radius:18px;
  transform:translateY(12px) scale(.97);opacity:0;
  transition:transform .2s cubic-bezier(.2,.75,.25,1),opacity .18s ease}
body.dp-open .dp-sheet{transform:none;opacity:1}
.batch-add{margin:10px 0 0;width:100%;height:44px;border:1px dashed #c9cdd2;border-radius:11px;
  background:#fff;color:#0071e3;font-size:14px;font-weight:600;font-family:inherit}
.batch-add:active{background:#f5f9ff}
/* 收毛日期 / 款号 并排一行两列（标题在上） */
.sf-row.wool-top{gap:10px;align-items:flex-start}
.sf-row.wool-top>.field{display:flex;flex-direction:column;align-items:stretch;flex:1 1 0;min-width:0}
.sf-row.wool-top>.field>.fl{flex:none;margin:0 0 6px;font-size:13.5px}
.sf-row.wool-top>.field>input,
.sf-row.wool-top>.field>select,
.sf-row.wool-top>.field>.sp-wrap{width:100%}
.sf-row.wool-top>.field>.hint{margin:4px 0 0}
.batch-kg{position:relative;display:block}
.batch-kg>input{width:100%;padding-right:26px}
.batch-kg>i{position:absolute;right:8px;top:50%;transform:translateY(-50%);
  font-style:normal;font-size:11px;color:#9aa0a6;pointer-events:none}


/* AI 附件面板：要贴在输入条上方，不能压住输入框（输入条高 64 + 底部 58） */
.ask-attach{bottom:calc(122px + env(safe-area-inset-bottom))}

/* 收发多行明细：列宽收一收，手机上尽量把「打 / 件」露出来，不用一进去就左右划 */
.flow-table{min-width:0;width:100%}
.flow-table th,.flow-table td{padding:5px 4px}
.flow-table input{min-width:0}
.flow-table select[name="batch_style_id"]{min-width:108px}
.flow-table input[name="batch_color"]{min-width:60px}
.flow-table input[name="batch_size"]{min-width:44px}
.flow-table select[name="batch_knit_factory_id"]{min-width:86px}
.flow-table input[type="number"]{width:40px;min-width:38px;padding:0 3px;text-align:center}
.flow-table .batch-del{width:28px;height:34px}

/* .field 改成 flex 之后，hidden 属性会被 display:flex 盖掉，这里补回来
   （缝盘完成页那个「发织片的外机」应急框靠它才能默认藏住） */
.form .field[hidden],
.simple-form .field[hidden],
.of[hidden],
.flow-batch[hidden]{display:none !important}

/* 录入表单：所有字段统一「左标题 + 右方框」
   原来全局 input{width:100%} 会把输入框撑满整行、被挤到标题下面，这里改回自适应 */
.form .field>input:not([type="hidden"]):not([type="radio"]):not([type="checkbox"]),
.form .field>select,
.form .field>.sp-wrap,
.form .field>.qty-pair,
.form .field>.pcs-one{flex:1 1 0;width:auto;min-width:0}
.form .field>.qty-pair{display:flex;gap:10px}
/* 对应产量：只填件数，一个框 */
.pcs-one{position:relative;display:block}
.pcs-one>input{width:100%;padding-right:34px}
.pcs-one>i{position:absolute;right:12px;top:50%;transform:translateY(-50%);
  font-style:normal;font-size:12px;color:#9aa0a6;pointer-events:none}
/* 备注也和其它字段一样：左标题 + 右方框 */
.form .field>textarea{flex:1 1 0;width:auto;min-width:0;min-height:72px}

/* 外发毛料：尺码 + 数量，一行一个尺码，可继续加行 */
.alloc-block{display:block}
.alloc-hd{display:grid;grid-template-columns:1fr 1fr 30px;gap:10px;align-items:center;
  font-size:10.5px;color:#9aa0a6;letter-spacing:.4px;padding:0 2px 6px}
.alloc-hd>span:nth-child(2){padding-left:2px}
.alloc-row{display:grid;grid-template-columns:1fr 1fr 30px;gap:10px;align-items:center;margin:0 0 8px}
.alloc-row>select,.alloc-row>input{width:100%;min-width:0}
.alloc-row>.batch-del{width:30px;height:38px;font-size:18px}
.alloc-block>.batch-add{margin-top:2px}

/* 生产单：识别后的核对提醒条 */
.ord-checkhint{margin:12px 0 0;padding:12px 14px;border-radius:12px;background:#fff7e6;color:#8a5a00;font-size:13px;line-height:1.65}
.ord-checkhint b{color:#7a4b00}
.ord-save.locked{opacity:.45}

/* ============================================================
   生产单列表 + 款详情（2026-10-29 重构）
   ============================================================ */
/* —— 列表页 —— */
.sd-new{height:38px;padding:0 14px;display:inline-flex;align-items:center;border-radius:11px;background:#1d1d1f;color:#fff;font-size:13px;font-weight:750;text-decoration:none}
.sd-item{display:block;color:inherit;text-decoration:none}
.sd-item-in{padding:15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;box-shadow:0 5px 18px rgba(30,52,45,.035)}
.sd-item:active .sd-item-in{background:#fafafb}
.sd-done{padding:3px 7px;border-radius:7px;background:#eaf5ee;color:#2f7a4d;font-size:11px;font-weight:700}

/* —— 详情页：款信息卡 —— */
.sd-wrap{padding-bottom:30px}
.sd-hero{margin:4px 0 18px;padding:17px;border:1px solid #e2e7e5;border-radius:18px;background:#fff;box-shadow:0 6px 22px rgba(30,52,45,.04)}
.sd-hero-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.sd-hero-no h1{margin:0;font-size:26px;font-weight:850;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.sd-batch{display:inline-block;margin-top:6px;padding:3px 8px;border-radius:7px;background:#f2f2f5;color:#66706d;font-size:11px;font-weight:700}
.sd-edit{align-self:center;padding:8px 12px;border-radius:10px;background:#f2f2f5;color:#1d1d1f;font-size:12.5px;font-weight:700;text-decoration:none;white-space:nowrap}
.sd-name{margin:9px 0 14px;color:#4a5250;font-size:14px}
.sd-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:12px 0;border-top:1px solid #eef1f0;border-bottom:1px solid #eef1f0}
.sd-meta>div{text-align:center}
.sd-meta span{display:block;color:#8b9391;font-size:11px}
.sd-meta b{display:inline-block;margin-top:4px;font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.sd-meta i{margin-left:2px;color:#8b9391;font-size:10.5px;font-style:normal}
.sd-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.sd-tags>span{padding:4px 9px;border-radius:8px;background:#f5f5f7;color:#5d6764;font-size:11.5px}
.sd-tags .sd-flag{background:#eef4ff;color:#2b5cab}
.sd-tags .sd-flag.warn{background:#fff5e8;color:#a4620b}
.sd-tags .sd-flag.over{background:#fdeceb;color:#b23a32}
.sd-shipped{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:13px;padding:12px;border-radius:13px;background:#f4f8f5}
.sd-shipped b,.sd-shipped span{display:block}
.sd-shipped b{font-size:13.5px}
.sd-shipped span{margin-top:3px;color:#7b857f;font-size:11.5px}
.sd-shipped .reopen-form button{height:33px;padding:0 11px;border:1px solid #cdd8d1;border-radius:9px;background:#fff;color:#414946;font-size:12px}
.sd-hero-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;padding-top:13px;border-top:1px solid #eef1f0}
.sd-progress-note{color:#8b9391;font-size:11.5px;line-height:1.5}
.sd-del{flex:none;height:36px;padding:0 14px;border:1px solid #f0cfcb;border-radius:11px;background:#fff;color:#c03a30;font-size:12.5px;font-weight:750}
.sd-del-tip{flex:none;color:#a9b0ad;font-size:11px}

/* —— 四个部门进度卡 —— */
.sd-stages{display:grid;gap:11px;margin-top:4px}
.sd-stage{padding:14px 15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;box-shadow:0 5px 18px rgba(30,52,45,.035);cursor:pointer;transition:transform .16s ease,box-shadow .16s ease}
.sd-stage:active{transform:scale(.994)}
.sd-stage-hd{display:flex;align-items:center;justify-content:space-between}
.sd-stage-hd b{font-size:15px;font-weight:800}
.sd-stage-arrow{color:#c4c9c7;font-size:17px}
.sd-stage-num{margin:7px 0 9px;display:flex;align-items:baseline;gap:5px}
.sd-stage-num b{font-size:23px;font-weight:850;font-variant-numeric:tabular-nums;letter-spacing:-.4px}
.sd-stage-num b.over{color:#c1362f}
.sd-stage-num span{color:#7d8683;font-size:12px}
.sd-stage-lb{margin-top:8px;color:#78827e;font-size:11.5px}
.sd-ship{margin-top:12px;padding-top:11px;border-top:1px dashed #e6eae8}
.sd-ship-hd{display:flex;align-items:center;justify-content:space-between;gap:8px}
.sd-ship-hd span{color:#66706d;font-size:12px}
.sd-ship-hd b{color:#1d1d1f;font-size:13px}
.sd-ship-add{flex:none;height:30px;padding:0 11px;display:inline-flex;align-items:center;border-radius:9px;background:#1d1d1f;color:#fff;font-size:11.5px;font-weight:750;text-decoration:none}
.sd-ship-list{margin-top:9px;display:grid;gap:7px}
.sd-ship-row{display:flex;align-items:center;gap:10px;color:#7b8580;font-size:11.5px}
.sd-ship-row b{color:#2b322f;font-size:12px}
.sd-ship-files{margin-left:auto;display:flex;gap:6px}
.sd-ship-files a{padding:3px 7px;border-radius:7px;background:#f2f2f5;color:#3f4a46;font-size:11px;text-decoration:none}
.sd-ship-more{margin-top:2px;color:#9aa3a0;font-size:11px}
.sd-ship-none{margin-top:8px;color:#9aa3a0;font-size:11.5px}

/* —— 异常情况 —— */
.sd-alerts{display:grid;gap:9px}
.sd-alert{display:flex;gap:11px;padding:13px;border:1px solid #e6eae8;border-radius:15px;background:#fff}
.sd-alert.warn{border-color:#f2cdc8;background:#fff8f7}
.sd-alert.ok{border-color:#d5e8dd;background:#f6fbf8}
.sd-dot{flex:none;display:grid;place-items:center;width:22px;height:22px;border-radius:50%;font-size:12px;font-weight:900;color:#fff}
.sd-dot.warn{background:#e14a40}
.sd-dot.ok{background:#2f9e63}
.sd-alert b{display:block;font-size:13.5px;color:#1d1d1f}
.sd-alert.warn b{color:#a83a31}
.sd-alert.ok b{color:#2c7a50}
.sd-alert p{margin:3px 0 0;color:#79837f;font-size:11.5px;line-height:1.55}

/* —— 部门进度详情页 —— */
.sd-stage-page .ss-hero{margin:6px 0 14px;padding:15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff}
.ss-hero-l{display:flex;align-items:baseline;gap:6px;margin-bottom:11px}
.ss-hero-l span{color:#7b8580;font-size:12px}
.ss-hero-l b{font-size:28px;font-weight:850;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.ss-hero-l i{color:#9aa3a0;font-size:12px;font-style:normal}
.ss-hero-hint{margin:10px 0 0;color:#9aa3a0;font-size:11.5px}
.sd-card{padding:4px 14px;border:1px solid #e2e7e5;border-radius:17px;background:#fff}
.ss-table{margin:8px 0}
.ss-table th,.ss-table td{padding:9px 6px}
.ss-over{color:#c1362f}

/* —— 四个部门进度压成一张卡（四行），省地方，提醒不用滑就能看到 —— */
.sd-steps{padding:2px 15px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;box-shadow:0 5px 18px rgba(30,52,45,.035)}
.sd-step{padding:10px 0;border-bottom:1px solid #f1f3f2;cursor:pointer}
.sd-step:last-child{border-bottom:0}
.sd-step-top{display:flex;align-items:baseline;gap:8px;margin-bottom:7px}
.sd-step-name{flex:none;width:36px;font-size:14px;font-weight:800;color:#1d1d1f}
.sd-step-num{flex:1;display:flex;align-items:baseline;gap:5px;justify-content:flex-end;min-width:0}
.sd-step-num b{font-size:19px;font-weight:850;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.sd-step-num b.over{color:#c1362f}
.sd-step-num i{color:#8f9794;font-size:11.5px;font-style:normal;font-variant-numeric:tabular-nums}
.sd-step-num em{margin-left:3px;color:#a2aaa7;font-size:11px;font-style:normal;white-space:nowrap}
.sd-step-num em.ok{color:#2f9e6b}
.sd-step-arrow{flex:none;color:#c9cecc;font-size:15px;line-height:1}
.sd-step .kr-progress{height:5px}
.sd-step-ship{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px dashed #eef1f0}
.sd-step-ship span{color:#7b8580;font-size:11.5px}
.sd-step-ship b{color:#2b322f;font-variant-numeric:tabular-nums}

/* 款信息卡收紧一点，整体上移 */
.sd-hero{padding:15px;margin:0 0 12px}
.sd-name{margin:6px 0 11px}
.sd-meta{padding:10px 0}
.sd-meta b{font-size:15.5px}
.sd-tags{margin-top:9px}
.sd-hero-foot{margin-top:11px;padding-top:10px}
.sec-title{margin-top:16px}
.ss-ship{margin-top:2px;padding:12px 15px}
.ss-ship-hd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ss-ship-hd>span{color:#7b8580;font-size:11.5px;line-height:1.5}
.ss-ship .sd-ship-list{margin-top:11px}
.sd-ship-final{padding:2px 7px;border-radius:6px;background:#eef4ff;color:#2b5cab;font-size:10.5px}
/* 必填项没填的输入框：红框提醒 */
.field input.miss,.of input.miss,.ord-grid input.miss{outline:2px solid #e0564c;outline-offset:1px;border-radius:9px;background:#fff8f7}
/* 提醒分轻重：warn=红（要马上管） ok=绿（已处理） tip=灰（资料类小提醒） */
.sd-alert.tip{border-color:#e6eae8;background:#fbfbfc}
.sd-dot.tip{background:#a8b0ad}
.sd-alert.tip b{color:#5d6764}
/* 一次性提示条：3 秒后自己消失，地址栏里的 ?ok= 也清掉 */
.toast-ok.hide{opacity:0;transform:translateY(-4px);transition:opacity .3s ease,transform .3s ease}
/* 前道没记全的软提醒：橙色，只是提示，不影响已经存下来的数据 */
.toast-warn{background:#fdf3e6;color:#b4620b;border:1px solid #f3dcbe;padding:11px 14px;
  border-radius:var(--r-md);font-size:12.5px;line-height:1.65;margin-bottom:14px;font-weight:600}
.toast-warn.hide{opacity:0;transform:translateY(-4px);transition:opacity .3s ease,transform .3s ease}
/* 日期弹层：可选日期的「暂不选（留空）」 */
.dp-clear{display:block;width:100%;height:38px;margin-top:10px;border:0;background:transparent;color:#0071e3;font-size:14px;font-weight:650;font-family:inherit}
.dp-clear[hidden]{display:none}
.dp-clear+.dp-ok{margin-top:4px}
.dp-clear:active{opacity:.6}

/* ============================================================
   横向滚动容器：浅灰滑动条 + 「左右滑动」提示
   ============================================================ */
.mx-wrap,.chips,.ord-scroll,.ask-table-scroll,.batch-scroll,.kd-scroll,.sd-tablescroll{
  scrollbar-width:thin;scrollbar-color:#d5d8d7 #f2f3f3;-webkit-overflow-scrolling:touch
}
.mx-wrap::-webkit-scrollbar,.chips::-webkit-scrollbar,.ord-scroll::-webkit-scrollbar,
.ask-table-scroll::-webkit-scrollbar,.batch-scroll::-webkit-scrollbar,.kd-scroll::-webkit-scrollbar,
.sd-tablescroll::-webkit-scrollbar{height:5px;background:#f2f3f3;border-radius:3px}
.mx-wrap::-webkit-scrollbar-thumb,.chips::-webkit-scrollbar-thumb,.ord-scroll::-webkit-scrollbar-thumb,
.ask-table-scroll::-webkit-scrollbar-thumb,.batch-scroll::-webkit-scrollbar-thumb,
.kd-scroll::-webkit-scrollbar-thumb,.sd-tablescroll::-webkit-scrollbar-thumb{background:#d5d8d7;border-radius:3px}
.mx-wrap::-webkit-scrollbar-track,.chips::-webkit-scrollbar-track,.ord-scroll::-webkit-scrollbar-track,
.ask-table-scroll::-webkit-scrollbar-track,.batch-scroll::-webkit-scrollbar-track,
.kd-scroll::-webkit-scrollbar-track,.sd-tablescroll::-webkit-scrollbar-track{background:#f2f3f3;border-radius:3px}

/* 需要横滑时补一句提示，滑到最右边自动消失 */
.hscroll-tip{margin:6px 0 0;text-align:center;color:#b0b5b3;font-size:10.5px;letter-spacing:.6px;line-height:1.4}
.hscroll-tip[hidden]{display:none}
.chips.hscroll-on{padding-bottom:11px}

/* 日期弹层底部按钮：暂不选 1 份（浅灰）+ 确定 2 份（黑），并排 */
.dp-acts{display:flex;gap:10px;margin-top:12px}
.dp-acts .dp-clear{flex:1 1 0;display:block;height:46px;margin:0;border:0;border-radius:12px;background:#f0f1f2;color:#7b8481;font-size:15px;font-weight:600;font-family:inherit}
.dp-acts .dp-clear[hidden]{display:none}
.dp-acts .dp-ok{flex:2 1 0;width:auto;margin-top:0}
.dp-acts .dp-clear:active{background:#e7e9ea}
.dp-acts .dp-clear{font-size:14.5px;white-space:nowrap;padding:0 6px}

/* 装箱单核对表：压窄一点，常规 4 个尺码在手机上一屏放得下，别把整页撑出横向滚动 */
.ship-matrix{margin-left:0 !important;margin-right:0 !important}
.ship-matrix .mx{font-size:12px}
.ship-matrix .mx th,.ship-matrix .mx td{padding:6px 3px}
.ship-matrix .mx .mx-c{width:76px;max-width:76px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ship-matrix .mx input.ship-qty{width:52px;min-width:44px;height:38px;padding:0 2px;font-size:15px}
.ship-matrix .mx .mx-t{width:40px}
.mx-wrap{max-width:100%}

/* 「这是最后一批」那个隐藏勾选框：全局 input{width:100%} 会把它撑成整屏宽，
   于是整页多出 33px 可以左右拖 —— 这里钉死成 1px */
.final-switch>input{position:absolute;opacity:0;width:1px;height:1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%)}
/* 兜底：就算以后哪个元素又超宽，也别让整页能左右拖（clip 不会像 hidden 那样破坏 sticky） */
body{overflow-x:clip}

/* 出货页：底部保存条一行放得下，且页面留出空间不让它压住最后一张卡 */
.ship-submit-bar .ship-total{display:flex;align-items:baseline;gap:7px;min-width:0}
.ship-submit-bar .ship-total span{display:inline;white-space:nowrap;font-size:12px;color:#86868b}
.ship-submit-bar .ship-total b{white-space:nowrap;font-size:20px;font-variant-numeric:tabular-nums}
.ship-submit-bar .ship-total b span{font-size:20px;color:#1d1d1f}
.shipment-page{padding-bottom:150px}
/* 装箱单对照表：颜色列放宽，尺码格子缩小，4 个尺码一屏放得下 */
.ship-matrix .mx .mx-c{width:104px;max-width:104px}
.ship-matrix .mx input.ship-qty{width:47px;min-width:40px}
.ship-matrix .mx th,.ship-matrix .mx td{padding:6px 2px}

/* ============================================================
   装箱单对照表（赢煊「成品装箱单」的排法）
   行 = 一段箱号；列 = 颜色分组下的各码；右侧 = 箱数、件数
   ============================================================ */
.ship-matrix .pk-table{font-size:12px;border-collapse:collapse;min-width:max-content}
.pk-table th,.pk-table td{border:1px solid #e7eae9;padding:0;text-align:center}
.pk-table thead th{background:#f5f6f6;color:#4a5450;font-weight:650;padding:6px 4px;white-space:nowrap}
.pk-color{font-size:11.5px;border-bottom:1px solid #dde2e0}
.pk-size{font-size:11px;color:#79837e;font-weight:600}
.pk-table tbody td{padding:3px}
.pk-cell input{width:38px;height:36px;text-align:center;border:1px solid #dcdfde;border-radius:8px;font-size:14px;padding:0;background:#fff}
.pk-box{position:sticky;left:0;z-index:2;background:#fff;min-width:92px;padding:4px 3px !important}
.pk-table thead .pk-box,.pk-table tfoot .pk-box{background:#f5f6f6;font-weight:700;font-size:12px}
.pk-box input{width:34px;height:32px;text-align:center;border:1px solid #dcdfde;border-radius:7px;font-size:13px;padding:0;background:#fff}
.pk-dash{margin:0 2px;color:#b3b8b6;font-size:12px}
.pk-num{padding:4px 3px !important;min-width:46px;font-variant-numeric:tabular-nums;font-weight:600}
.pk-num input{width:40px;height:32px;text-align:center;border:1px solid #dcdfde;border-radius:7px;font-size:13px;background:#fff}
.pk-rowtotal{position:relative;color:#1d1d1f}
.pk-del{position:absolute;right:-2px;top:-10px;width:18px;height:18px;padding:0;border:0;border-radius:50%;background:#eceded;color:#7b8481;font-size:12px;line-height:18px}
.pk-table tfoot td{background:#f7f8f8;font-weight:750;padding:6px 3px}
.pk-table tfoot .pk-cell{font-size:12.5px}
.addrow+.ship-matrix{margin-top:10px}

/* 生产单列表卡片：一条进度条分四段（织机/缝盘/烫衣/包装），右下角只写已完成多少件 */
.sd4-bar{display:flex;gap:2px;margin-top:11px;height:7px;border-radius:5px;overflow:hidden;background:#eeeef1}
.sd4-seg{flex:1;height:100%;background:#eeeef1;overflow:hidden}
.sd4-seg>i{display:block;height:100%;border-radius:3px}
.sd4-seg>i.s1,.sd4-legend i.s1{background:#0071e3}
.sd4-seg>i.s2,.sd4-legend i.s2{background:#7c5cfa}
.sd4-seg>i.s3,.sd4-legend i.s3{background:#e8890c}
.sd4-seg>i.s4,.sd4-legend i.s4{background:#2f9e63}
.sd4-legend{display:flex;gap:12px;margin-top:7px}
.sd4-legend span{display:inline-flex;align-items:center;gap:4px;color:#9aa3a0;font-size:10.5px}
.sd4-legend i{width:6px;height:6px;border-radius:2px}
.sd4-foot{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:8px}
.sd4-foot b{font-size:13px;font-weight:800;color:#1d1d1f;font-variant-numeric:tabular-nums}
.sd4-note{color:#9aa3a0;font-size:11px}
/* 四段各自淡色底：全是 0 的时候也能看出这是四段（织机/缝盘/烫衣/包装） */
.sd4-seg.s1{background:#eaf2fd}
.sd4-seg.s2{background:#f0edfe}
.sd4-seg.s3{background:#fdf1e3}
.sd4-seg.s4{background:#e9f6ee}

/* 一条进度条里叠四层：织机在最里面（最长），包装在最上面（最短），
   正常情况 织机≥缝盘≥烫衣≥包装，看起来就是一层层往里收 */
.multi-bar{position:relative;height:8px;margin-top:11px;border-radius:5px;background:#eeeef1;overflow:hidden}
.multi-bar .mb{position:absolute;left:0;top:0;height:100%;border-radius:5px}
.multi-bar .mb.s1{background:#0071e3}
.multi-bar .mb.s2{background:#7c5cfa}
.multi-bar .mb.s3{background:#e8890c}
.multi-bar .mb.s4{background:#2f9e63}

/* 工作台：织机已开工却没收到毛料的红色提醒 */
.wb-nowool{margin:0 0 13px;padding:14px;border:1px solid #f2cdc8;border-radius:16px;background:#fff8f7}
/* 缝盘收回比发出多：这是账对不上，比缺毛更要紧，用同一套红色提醒但标题更实 */
.wb-sewover{margin:0 0 13px;padding:14px;border:1px solid #efc4be;border-radius:16px;background:#fdf3f1}
.wbn-head b{display:block;color:#a83a31;font-size:14px}
.wbn-head span{display:block;margin-top:3px;color:#9a6e69;font-size:11.5px}
.wbn-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:11px;padding:11px 12px;border-radius:12px;background:#fff;text-decoration:none;color:inherit}
.wbn-row b{font-size:14px}
.wbn-row span{display:block;margin-top:3px;color:#8a9390;font-size:11.5px}
.wbn-row em{flex:none;color:#c03a30;font-size:12.5px;font-style:normal;font-weight:700}
.wbn-row:active{background:#fff4f2}

/* ============================================================
   AI 助手表格（2026-10-29 改版）：指标条压扁、数字右对齐、颜色矩阵
   ============================================================ */
.ask-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:0;background:#fff;border-bottom:1px solid #ececf0}
.ask-metrics>div{padding:11px 8px 10px;background:#fff;text-align:center;border-right:1px solid #f0f0f3}
.ask-metrics>div:nth-child(3n){border-right:0}
.ask-metrics>div:nth-child(n+4){border-top:1px solid #f0f0f3}
.ask-metrics b{font-size:17px;font-weight:800;letter-spacing:-.3px;color:#1d1d1f}
.ask-metrics span{margin-top:2px;color:#8d9296;font-size:10.5px}
.ask-metrics .zero b{color:#c3c8c6;font-weight:600}
.ask-metrics .zero span{color:#b9bebc}

.ask-table-card table{border-collapse:separate;border-spacing:0}
.ask-table-card th,.ask-table-card td{padding:10px 12px;border-right:0;border-bottom:1px solid #f1f2f4;font-variant-numeric:tabular-nums}
.ask-table-card th{background:#fafafb;color:#7b8380;font-weight:700;font-size:11.5px;letter-spacing:.2px}
.ask-table-card td.num,.ask-table-card th.num{text-align:right}
.ask-table-card tbody tr:nth-child(even) td{background:#fcfcfd}
.ask-table-card tbody tr.total td{background:#f4f8f5;font-weight:800;color:#1d1d1f;border-top:1px solid #dde6e0}
.ask-table-card td.zero{color:#c8ccca}
.ask-table-card td:first-child,.ask-table-card th:first-child{position:sticky;left:0;background:#fff;z-index:1}
.ask-table-card th:first-child{background:#fafafb}
.ask-table-card tbody tr:nth-child(even) td:first-child{background:#fcfcfd}
.ask-table-card tbody tr.total td:first-child{background:#f4f8f5}

/* 颜色 × 码 矩阵 */
.ask-pivot{min-width:100%}
.ask-pivot .pk0{position:sticky;left:0;background:#fff;z-index:1;text-align:left;white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis}
.ask-pivot thead .pk0,.ask-pivot tfoot .pk0{background:#fafafb}
.ask-pivot tbody tr:nth-child(even) .pk0{background:#fcfcfd}
.ask-pivot .num{text-align:right}
.ask-pivot .sum{font-weight:800;color:#1d1d1f;background:#fafbfa}
.ask-pivot thead .sum{background:#f4f8f5;color:#2c7a50}
.ask-pivot tr.total td{background:#f4f8f5;font-weight:800;border-top:1px solid #dde6e0}
.ask-pivot tr.total .sum{background:#e9f3ec}
.ask-dot{display:inline-block;width:9px;height:9px;margin-right:7px;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);vertical-align:baseline}
.ask-pivot .pk0{max-width:112px}
.ask-pivot th,.ask-pivot td{padding:9px 8px}

/* 款详情：款信息卡底部按钮（登记出货在左，删除在右） */
.sd-foot-btns{display:flex;align-items:center;gap:8px;flex:none}
.sd-ship-btn{display:inline-flex;align-items:center;height:36px;padding:0 15px;border-radius:11px;background:#1d1d1f;color:#fff;font-size:12.5px;font-weight:750;text-decoration:none}
.sd-ship-btn:active{opacity:.9}

/* 异常条数 + 超过两条时卡片内上下滚动 */
.sd-acount{display:inline-block;min-width:19px;height:19px;margin-left:7px;padding:0 5px;border-radius:10px;background:#e14a40;color:#fff;font-size:11.5px;font-weight:800;line-height:19px;text-align:center;vertical-align:2px}
.sd-alerts.scroll{max-height:244px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding-right:3px;scrollbar-width:thin;scrollbar-color:#d5d8d7 #f2f3f3}
.sd-alerts.scroll::-webkit-scrollbar{width:5px}
.sd-alerts.scroll::-webkit-scrollbar-thumb{background:#d5d8d7;border-radius:3px}
.sd-alerts.scroll::-webkit-scrollbar-track{background:#f2f3f3;border-radius:3px}
/* 款信息卡底部：说明一行、按钮下一行右对齐，按钮不被文字挤 */
.sd-hero-foot{flex-wrap:wrap;row-gap:9px}
.sd-progress-note{flex:1 1 100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sd-foot-btns{flex:0 0 100%;justify-content:flex-end}

/* 款信息卡再压一截：款号批号同行、去掉说明行，让一屏装下整个款 */
.sd-hero{padding:13px 14px;margin:0 0 10px;border-radius:16px}
.sd-hero-no{display:flex;align-items:center;gap:8px;min-width:0}
.sd-hero-no h1{font-size:23px}
.sd-batch{margin-top:0;padding:2px 7px;font-size:10.5px}
.sd-edit{padding:7px 11px;font-size:12px}
.sd-name{margin:4px 0 9px;font-size:13px}
.sd-meta{padding:8px 0;gap:6px}
.sd-meta span{font-size:10.5px}
.sd-meta b{font-size:15px;margin-top:2px}
.sd-tags{margin-top:7px;gap:5px}
.sd-tags>span{padding:3px 7px;font-size:11px}
.sd-hero-foot{margin-top:9px;padding-top:0;border-top:0;row-gap:0}
.sd-ship-btn,.sd-del{height:34px}
.sec-title{margin-top:13px}

/* 异常条目、部门行也各收一点 */
.sd-alerts.scroll{max-height:230px}
.sd-alert{padding:10px 12px;gap:9px}
.sd-alert b{font-size:13px}
.sd-alert p{margin-top:2px;font-size:11px}
.sd-dot{width:20px;height:20px;font-size:11px}
.sd-step{padding:8px 0}
.sd-step-top{margin-bottom:5px}
.sd-step-num b{font-size:18px}

/* 织机报表：颜色卡右上角「查看详情」 */
.kc-hd-r{display:inline-flex;align-items:center;gap:8px}
.kc-more{flex:none;padding:4px 9px;border-radius:8px;background:#f2f2f5;color:#1d1d1f;font-size:11px;font-weight:750;text-decoration:none}
.kc-more:active{opacity:.85}

/* 颜色逐日明细页 */
.kcd-page{padding-bottom:112px}
.kcd-hero{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin:6px 0 14px;padding:16px;border:1px solid #e2e7e5;border-radius:17px;background:#fff;color:#1d1d1f}
.kcd-hero-l>span{display:block;color:#8a9295;font-size:11px;font-weight:600}
.kcd-hero h1{display:flex;align-items:center;margin:6px 0 3px;font-size:23px;letter-spacing:-.3px}
.kcd-hero h1 .cdot.inline{width:13px;height:13px;margin-right:9px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.16)}
.kcd-hero p{margin:0;color:#9aa3a0;font-size:11.5px}
.kcd-sum{text-align:right;flex:none}
.kcd-sum b{display:block;font-size:23px;font-weight:850;color:#1d1d1f;font-variant-numeric:tabular-nums}
.kcd-sum small{display:block;margin-top:3px;color:#8a9295;font-size:10.5px}
.kcd-tip{display:flex;flex-direction:column;gap:3px;margin-bottom:11px;padding:11px 13px;border:1px solid #f2cdc8;border-radius:13px;background:#fff8f7}
.kcd-tip b{color:#a83a31;font-size:12.5px}
.kcd-tip span{color:#9a6e69;font-size:11px}
.kcd-wrap{border-radius:16px;overflow:hidden}
.kcd-table{font-size:12.5px}
.kcd-table th,.kcd-table td{padding:9px 6px;border-bottom:1px solid #f0f2f1;text-align:right;white-space:nowrap}
.kcd-table th{background:#fafafb;color:#7b8380;font-size:11px;font-weight:700}
.kcd-date{position:sticky;left:0;z-index:1;background:#fff;text-align:left;min-width:134px;white-space:nowrap;font-variant-numeric:tabular-nums}
.kcd-table thead .kcd-date,.kcd-table tfoot .kcd-date{background:#fafafb}
.kcd-shift{margin-left:5px;color:#9aa3a0;font-size:10.5px}
.kcd-day{display:inline-block;min-width:52px}
.kcd-num{font-variant-numeric:tabular-nums}
.kcd-table tbody tr:nth-child(even) td{background:#fcfcfd}
.kcd-table tbody tr:nth-child(even) .kcd-date{background:#fcfcfd}
.kcd-table tr.kcd-bad td{background:#fff5f3;color:#a83a31}
.kcd-table tr.kcd-bad .kcd-date{background:#fff5f3}
.kcd-flag{display:inline-block;box-sizing:border-box;width:44px;margin-right:6px;padding:1px 0;border-radius:6px;background:#e14a40;color:#fff;font-size:9.5px;font-style:normal;font-weight:800;line-height:15px;text-align:center;vertical-align:1px}
.kcd-flag.soft{background:#eef0f3;color:#8a8a8f;font-weight:700}
.kcd-flag.none{background:transparent}
.kcd-table tbody tr.kcd-more{display:none}
.kcd-table.show-more tbody tr.kcd-more{display:table-row}
.kcd-more-btn{width:100%;height:40px;margin-top:10px;border:1px solid #e2e7e5;border-radius:12px;background:#fff;color:#3f4a46;font-size:12.5px;font-weight:700}
/* 表头下面那行「本厂排产」：一直显示，弱一点的底色，跟数据行分开 */
.kcd-table tr.kcd-plan td{background:#f1f5f3;color:#4a524e;font-weight:700;border-bottom:1px solid #e2e8e5}
.kcd-table tr.kcd-plan .kcd-date{background:#f1f5f3}
/* 合计下面那行「还欠」：欠着的是红色负数，做够了打勾 */
.kcd-table tr.kcd-owe-row td{border-top:1px dashed #e2e8e5}
.kcd-table .kcd-neg{color:#c1362f;font-weight:800;font-variant-numeric:tabular-nums}
.kcd-table .kcd-ok{color:#2f9e6b;font-weight:700}

/* ---- 部门进度页：顶部款号批号 + 缝盘工序分段 ---- */
.ss-top{display:flex;align-items:flex-start;gap:12px;margin:8px 0 12px}
.ss-top-l{flex:1 1 0;min-width:0}
.ss-top-l>span{color:#8a8f93;font-size:11.5px}
.ss-top-l h1{margin:3px 0 0;font-size:25px;font-weight:850;letter-spacing:-.5px;line-height:1.15}
.ss-top-l p{margin:5px 0 0;color:#737d79;font-size:12.5px}
.ss-top-l p b{color:#1d1d1f;font-weight:750}
.ss-procs{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:9px;margin:0 0 14px}
.ss-proc{padding:12px 13px;border:1px solid #e5e9e8;border-radius:14px;background:#fff;text-align:center}
.ss-proc span{display:block;color:#8a9295;font-size:11.5px;font-weight:700}
.ss-proc b{display:inline-block;margin-top:4px;font-size:20px;font-weight:850;font-variant-numeric:tabular-nums;color:#c3c8cb}
.ss-proc i{margin-left:2px;color:#a8b0b3;font-size:10.5px;font-style:normal}
.ss-proc.on b{color:#1d1d1f}
.ss-tag{margin-right:5px;padding:1px 6px;border-radius:6px;background:#eef2f1;color:#5b6663;font-size:10px;font-style:normal;font-weight:800;vertical-align:1px}

/* ---- 款信息卡：标签和「登记出货」并成一行，少占一行高度 ---- */
.sd-tags-row{display:flex;align-items:center;gap:10px;margin-top:7px}
.sd-tags-row .sd-tags{margin-top:0;flex:1 1 auto;min-width:0}
.sd-tags-row .sd-ship-btn{flex:none}

/* 逐日明细表格：除日期列外一律居中，表头和数据对齐 */
.kcd-table th,.kcd-table td{text-align:center}
.kcd-table .kcd-date{text-align:left}
/* 居中后列变宽，「累计」被挤出屏幕，收紧内边距和日期列 */
.kcd-table th,.kcd-table td{padding:9px 4px}
.kcd-table .kcd-date{min-width:126px;padding-left:8px}
.kcd-table .kcd-flag{width:42px;margin-right:5px}
.kcd-table .kcd-day{min-width:50px}

/* 表格左右留白对称：文字不再贴边 */
.kcd-table{width:100%}
.kcd-table .kcd-date{padding-left:6px;padding-right:6px}
.kcd-table th:last-child,.kcd-table td:last-child{padding-right:10px}
.kcd-table th:first-child,.kcd-table td:first-child{padding-left:10px}
/* 一行标签都没有时（kcd-flat）：日期列不留标签槽，整列居中，左右空隙一致 */
.kcd-table.kcd-flat .kcd-date{min-width:0;text-align:center}
.kcd-table.kcd-flat .kcd-day{min-width:0}

/* 「本厂已完成」不再用黑底（太像主按钮，容易误点），改浅描边 */
.kr-card-complete{background:#fff;color:#4d5754;border:1px solid #dbe1de;box-shadow:none;font-weight:700}
.kr-card-complete:active{background:#f1f3f2}
/* 差距大时的红色确认按钮 */
.confirm-card button.danger{background:#c1362f;border-color:#c1362f;color:#fff}
.confirm-card button.danger:active{background:#a92c26}

/* 织片卡：外发收回的量单独一行，卡头也标一下 */
.kc-out{margin-left:6px;padding:1px 6px;border-radius:6px;background:#eef4ff;color:#2b5cab;font-size:10px;font-style:normal;font-weight:800;vertical-align:1px}
.kc-out-row .kc-lb,.kc-out-row span{color:#2b5cab}
/* 外发行前面的小蓝点，一眼看出这行是外发的 */
.kc-out-row .kc-lb::before{content:'';display:inline-block;width:5px;height:5px;margin-right:4px;border-radius:50%;background:#2b5cab;vertical-align:1px}

/* 缝盘进度：本厂 / 外发拆开看 */
.ss-split{margin:-4px 0 12px;padding:9px 13px;border-radius:12px;background:#f5f7f9;color:#6b7573;font-size:12px;text-align:center}
.ss-split b{color:#1d1d1f;font-weight:800}
.ss-outsrc{margin:0 0 14px;padding:13px 14px;border:1px solid #e2e7e5;border-radius:15px;background:#fff}
.ss-outsrc h3{display:flex;justify-content:space-between;align-items:baseline;margin:0 0 10px;font-size:13.5px}
.ss-outsrc h3 span{color:#9aa3a0;font-size:11px;font-weight:600}
.ss-outsrc-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid #f0f2f1;font-size:12px}
.ss-outsrc-row:first-of-type{border-top:0;padding-top:0}
.ss-os-fac{flex:1 1 auto;min-width:0;font-weight:750;color:#1d1d1f;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ss-outsrc-row i{color:#8a9295;font-style:normal;font-variant-numeric:tabular-nums}
.ss-outsrc-row b{color:#1d1d1f;font-variant-numeric:tabular-nums}
.ss-outsrc-row em{padding:1px 6px;border-radius:6px;background:#fdeceb;color:#c1362f;font-style:normal;font-size:10.5px;font-weight:800;font-variant-numeric:tabular-nums}
.ss-outsrc-row em.ok{background:#eef7f2;color:#2c7a58}

/* 逐日明细：外发收回单独一行说明 */
.kcd-out-line{display:block;margin:6px 0 0;color:#2b5cab;font-size:11.5px;line-height:1.55}
.kcd-out-line span{display:inline}
.kcd-out-line b{font-weight:800}
.kcd-out-dot{display:inline-block;width:5px;height:5px;margin-right:5px;border-radius:50%;background:#2b5cab;vertical-align:2px}

/* 计划列旁边标一下「已扣外发」 */
.ss-moved{display:inline-block;margin-left:4px;padding:0 4px;border-radius:5px;background:#fff4ec;color:#b4620b;font-size:9.5px;font-weight:800;vertical-align:1px}

/* 外发那一列用橙色，一眼跟本厂分开 */
.ss-moved-td{color:#b4620b;font-weight:700}

/* 缝盘进度：本厂工序标题要显眼 */
.ss-procs-title{display:flex;align-items:baseline;gap:8px;margin:2px 0 9px;font-size:15px;font-weight:800;color:#1d1d1f}
.ss-procs-title span{font-size:11px;font-weight:600;color:#9aa3a0}
/* 日均产能一行 */
.ss-perday{display:flex;align-items:baseline;gap:10px;margin:-6px 0 14px;padding:0 4px;
  font-size:11.5px;color:#8a9295;flex-wrap:wrap}
.ss-perday>b,.ss-perday i{font-style:normal}
.ss-perday i{color:#5b636b}
.ss-perday i b{color:#1d1d1f;font-weight:800;font-variant-numeric:tabular-nums}
.ss-perday em{font-style:normal;color:#a8b0ad;font-size:11px}
/* 工序之间倒挂 / 产能跟不上的提醒 */
.ss-flowwarn{margin:-4px 0 14px;padding:12px 13px;border:1px solid #f0c9c4;border-radius:14px;background:#fdf5f3}
.ss-fw-row+.ss-fw-row{margin-top:10px;padding-top:10px;border-top:1px solid #f4ddd9}
.ss-fw-row b{display:block;color:#b0362c;font-size:13px;font-weight:800}
.ss-fw-row span{display:block;margin-top:3px;color:#8e6a66;font-size:11.5px;line-height:1.6}
/* 外发缝盘卡标题放大，一进来就知道这是块标题 */
.ss-outsrc h3{font-size:17px;font-weight:850;letter-spacing:-.2px;margin-bottom:12px}
.ss-outsrc h3 span{font-size:11px}
/* 还差那一列统一红色 */
.ss-table .ss-left{color:#c1362f;font-weight:750}
.ss-table .ss-left.ss-over{color:#2c7a58}

/* 逐日明细下面：外机收货按码一览 */
.kcd-outs-title{margin-top:18px}
.kcd-outs{padding:4px 0;border:1px solid #e2e7e5;border-radius:16px;background:#fff;overflow:hidden}
.kcd-out-table{width:100%;border-collapse:collapse;font-size:12.5px}
.kcd-out-table th,.kcd-out-table td{padding:10px 8px;text-align:center;border-bottom:1px solid #f2f4f3;font-variant-numeric:tabular-nums}
.kcd-out-table th{background:#fafafb;color:#7b8380;font-size:11px;font-weight:700}
.kcd-out-table tbody tr:last-child td{border-bottom:0}
.kcd-out-table .kcd-os-size{text-align:left;padding-left:14px;font-weight:750;color:#1d1d1f}
.kcd-out-table .kcd-os-size:first-letter{letter-spacing:0}
.kcd-out-table .kcd-owe{color:#c1362f;font-weight:800}
.kcd-out-table .kcd-os-sum td{background:#fbfbfc;font-weight:800;border-top:1px solid #e8ecea}
.kcd-out-table .kcd-os-sum .kcd-os-size{color:#1d1d1f}
/* 外机收货：第一列表头也跟着左对齐 */
.kcd-out-table th:first-child{text-align:left;padding-left:14px}

/* ===== 部门进度页统一：所有卡片一律黑描边，不许有的有有的没有 ===== */
.sd-stage-page .ss-hero,
.sd-stage-page .ss-proc,
.sd-stage-page .ss-outsrc,
.sd-stage-page .sd-card,
.sd-stage-page .ss-split{border:1px solid #c6cecb}

/* hero 重做：大数字 + 百分比 + 粗进度条 + 上下两端数据 */
.sd-stage-page .ss-hero{margin:10px 0 12px;padding:16px 16px 14px;border-radius:18px;background:#fff}
.ss-hero-top{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.ss-hero-l{display:flex;align-items:baseline;gap:6px}
.ss-hero-l span{color:#8a9295;font-size:12.5px;font-weight:600}
.ss-hero-l b{font-size:34px;font-weight:850;letter-spacing:-1px;line-height:1;font-variant-numeric:tabular-nums;color:#1d1d1f}
.ss-hero-l i{color:#9aa3a0;font-size:12px;font-style:normal}
.ss-hero-r{text-align:right;flex:none}
.ss-hero-r b{display:block;font-size:22px;font-weight:850;line-height:1;color:#1d1d1f;font-variant-numeric:tabular-nums}
.ss-hero-r b small{font-size:12px;font-weight:700;margin-left:1px}
.ss-hero-r span{display:block;margin-top:3px;color:#9aa3a0;font-size:10.5px}
.ss-hero-bar{display:block;height:10px;margin:13px 0 10px;border-radius:6px;background:#eef1f0;overflow:hidden}
.ss-hero-bar i{display:block;height:100%;border-radius:6px;background:#1d1d1f;transition:width .4s ease}
.ss-hero-foot{display:flex;justify-content:space-between;gap:10px;color:#7b8380;font-size:11.5px}
.ss-hero-foot b{color:#1d1d1f;font-weight:800;font-variant-numeric:tabular-nums}
.ss-hero-foot span:last-child b{color:#c1362f}

/* 最近记录三类标签 */
.ss-tag.out{background:#fff4ec;color:#b4620b}
.ss-tag.back{background:#eef4ff;color:#2b5cab}
.ss-tag.self{background:#1d1d1f;color:#fff}

/* 织片卡：总排产 / 本厂要做 两行区分开 */
.kc-todo .kc-lb{color:#8a9295;font-weight:600}
.kc-todo span{color:#8a9295}
.kc-plan span{font-weight:800;color:#1d1d1f}

/* 织片卡：「总排产」这一行要显眼——字号放大、加粗 */
.kc-plan .kc-lb{font-size:13.5px;font-weight:850;color:#1d1d1f}
.kc-plan span{font-size:15.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}
/* 外机排产（发出）用虚线蓝，外机收回用实点蓝，区分开 */
.kc-out-sent .kc-lb::before{background:#8fa9d8}
.kc-out-sent span{color:#5a7bb5}

/* ===== 织片卡重新配色：重点是「本厂已生产」(黑大字) 和「外机收回」(蓝大字) ===== */
/* 总排产 / 总生产：同一档大字做基准 */
.kc-plan .kc-lb,.kc-all .kc-lb{font-size:13.5px;font-weight:850;color:#1d1d1f}
.kc-plan span,.kc-all span{font-size:15.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}
.kc-all{border-top:1px dashed #dfe4e2}
.kc-all .kc-lb{color:#1d1d1f}

/* 本厂排产：扣减后的次要信息，灰小字 */
.kc-todo .kc-lb,.kc-todo span{color:#9aa3a0}
.kc-todo span{font-weight:600}

/* 本厂已生产：黑大字，重点 */
.kc-total{border-top:1px dashed #dfe4e2}
.kc-total .kc-lb{color:#1d1d1f;font-weight:800;font-size:12.5px}
.kc-total span b{font-size:15.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}

/* 外机排产：橙小字（发出去在外面的，只是参考） */
.kc-out-sent .kc-lb{color:#9a6412;font-weight:700}
.kc-out-sent .kc-lb::before{background:#e08c2e}
.kc-out-sent span{color:#b4620b;font-weight:700;font-size:12.5px}

/* 外机收回：蓝大字，重点 —— 跟上面那行橙字一眼分开 */
.kc-out-row .kc-lb{color:#1d1d1f;font-weight:800}
.kc-out-row .kc-lb::before{background:#2b5cab}
.kc-out-row span{color:#2b5cab;font-weight:850;font-size:15.5px;letter-spacing:-.2px}
.kc-out-row span.dim{font-weight:600;font-size:12.5px}
/* 左边标题列加宽，「本厂已生产」这种 5 个字不许换行 */
.kc-row{grid-template-columns:92px repeat(var(--n,1),minmax(0,1fr))}
.kc-row>.kc-lb{white-space:nowrap}

/* ===== 外机收货：每家外机一张小表，码横着排 ===== */
.kcd-os-block{margin:0 0 12px;border:1px solid #c6cecb;border-radius:16px;background:#fff;overflow:hidden}
.kcd-os-block.is-total{background:#fbfbfc}
.kcd-os-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;border-bottom:1px solid #eef1f0}
.kcd-os-hd b{font-size:14.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}
.kcd-os-badge{padding:2px 8px;border-radius:8px;font-size:10.5px;font-weight:800}
.kcd-os-badge.owe{background:#fdeceb;color:#c1362f}
.kcd-os-badge.done{background:#eef7f2;color:#2c7a58}
.kcd-out-table{width:100%;border-collapse:collapse;font-size:12.5px}
.kcd-out-table th,.kcd-out-table td{padding:9px 6px;text-align:center;border-bottom:1px solid #f2f4f3;font-variant-numeric:tabular-nums}
.kcd-out-table th{background:#fafafb;color:#7b8380;font-size:11px;font-weight:700}
.kcd-out-table tbody tr:last-child td{border-bottom:0}
.kcd-out-table .kcd-os-lb{width:64px;text-align:left;padding-left:14px;color:#5b6663;font-weight:700}
.kcd-out-table thead .kcd-os-lb{background:#fafafb}
.kcd-out-table .kcd-os-all{color:#1d1d1f;font-weight:800;background:#fdfdfe}
.kcd-out-table thead .kcd-os-all{background:#fafafb}
.kcd-out-table .kcd-owe{color:#c1362f;font-weight:850}

/* ===== 织片卡统一层级字号：同层级大小完全一致，只靠颜色区分 ===== */
/* 一档 · 总数：总排产 / 总生产 */
.kc-plan .kc-lb,.kc-all .kc-lb{font-size:13.5px;font-weight:850;color:#1d1d1f}
.kc-plan span,.kc-all span{font-size:15.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}

/* 二档 · 实产：本厂已生产 / 外机收回（同层级，同字号） */
.kc-total .kc-lb,.kc-out-row .kc-lb{font-size:13.5px;font-weight:800;color:#1d1d1f}
.kc-total span b,.kc-total span,.kc-out-row span{font-size:15.5px;font-weight:850;letter-spacing:-.2px}
.kc-total span,.kc-total span b{color:#1d1d1f}
.kc-out-row span{color:#2b5cab}

/* 三档 · 细分排产：本厂排产 / 外机排产（同层级，同字号） */
.kc-todo .kc-lb,.kc-out-sent .kc-lb{font-size:11.5px;font-weight:700}
.kc-todo span,.kc-out-sent span{font-size:12.5px;font-weight:700}
.kc-todo .kc-lb,.kc-todo span{color:#9aa3a0}
.kc-out-sent .kc-lb{color:#9a6412}
.kc-out-sent span{color:#b4620b}
.kc-out-sent span.dim{font-size:12.5px;font-weight:600}

/* 外机收货：直转缝盘那行的说明文字 */
.kcd-out-table .kcd-os-span{text-align:left;padding-left:14px;font-size:11px;font-weight:600}
/* 「直转缝盘」四个字要放得下 */
.kcd-out-table .kcd-os-lb{width:78px}

/* ===== 织片卡头部：已织 / 排产 的数字放大，一眼看到做到哪了 ===== */
.kc-hd{padding:12px 13px;align-items:center}
.kc-hd>b{font-size:16px;font-weight:850;letter-spacing:-.2px}
.kc-hd>span{font-size:12px;color:#8a9295}
.kc-hd>span b{font-size:19px;font-weight:850;color:#1d1d1f;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
/* 「/ 排产 10,000 件」比已织小一档，但比原来大 */
.kc-hd-r{display:inline-flex;align-items:center;gap:9px;font-size:12px}
.kc-hd-r .kc-more{flex:none;padding:6px 11px;border-radius:9px;background:#fff;border:1px solid #d6dcd9;color:#1d1d1f;font-size:11.5px;font-weight:750}
.kc-more:active{background:#f2f4f3}
/* 卡头的「排产数」也放大，别只有已织大一号 */
.kc-hd .kc-pn{font-size:15.5px;font-weight:800;color:#3f4a46;letter-spacing:-.2px}

/* 卡头改成两行：上排颜色 + 查看详情，下排已织/排产的大数字，避免挤成竖排 */
.kc-hd{display:block;padding:11px 13px}
.kc-hd-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.kc-hd-top>b{font-size:16px;font-weight:850;letter-spacing:-.2px;white-space:nowrap}
.kc-hd-num{display:flex;align-items:baseline;gap:4px;margin-top:5px;font-size:12px;color:#8a9295;font-variant-numeric:tabular-nums}
.kc-hd-num b{font-size:19px;font-weight:850;color:#1d1d1f;letter-spacing:-.4px}
.kc-hd-num i{font-style:normal;font-size:12px;color:#8a9295}
.kc-hd-num .kc-pn{font-size:15.5px;font-weight:800;color:#3f4a46;letter-spacing:-.2px}

/* ===== 织片卡：按老板给的规则重排字号与颜色 =====
   同字号+同色：总排产 / 总生产（一档）
   同字号+异色：本厂已生产 vs 外机收回（二档）／本厂排产 vs 外机排产（三档）
   同色+异字号：本厂排产(三) vs 本厂已生产(二)／外机排产(三) vs 外机收回(二)
   → 本厂系一律黑，外机系一律蓝，用字号分档 */
/* 一档 · 总数（16.5） */
.kc-plan .kc-lb,.kc-all .kc-lb{font-size:13.5px;font-weight:850;color:#1d1d1f}
.kc-plan span,.kc-all span{font-size:16.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.3px}
/* 二档 · 实产（14.5）：本厂黑、外机蓝 */
.kc-total .kc-lb,.kc-out-row .kc-lb{font-size:13px;font-weight:800;color:#1d1d1f}
.kc-total span,.kc-total span b{font-size:14.5px;font-weight:850;color:#1d1d1f;letter-spacing:-.2px}
.kc-out-row span{font-size:14.5px;font-weight:850;color:#2b5cab;letter-spacing:-.2px}
.kc-out-row span.dim{font-weight:600}
/* 三档 · 细分排产（12.5）：本厂黑、外机蓝 */
.kc-todo .kc-lb,.kc-out-sent .kc-lb{font-size:11.5px;font-weight:700}
.kc-todo .kc-lb,.kc-todo span{color:#1d1d1f}
.kc-todo span{font-size:12.5px;font-weight:700}
.kc-out-sent .kc-lb,.kc-out-sent span{color:#2b5cab}
.kc-out-sent span{font-size:12.5px;font-weight:700}
.kc-out-sent span.dim{font-weight:600}
/* 外机排产的小圆点也跟收回统一成蓝色 */
.kc-out-sent .kc-lb::before{background:#2b5cab}

/* ===== 三色体系定稿：黑=总数 / 橙=本厂 / 蓝=外机 ===== */
/* 本厂系（本厂排产 12.5 + 本厂已生产 14.5）：都改橙色，字号不同 */
.kc-todo .kc-lb,.kc-todo span{color:#b4620b}
.kc-total .kc-lb,.kc-total span,.kc-total span b{color:#b4620b}
/* 外机系：标签也改成蓝色（原来标签是黑的），前面的小圆点去掉 */
.kc-out-row .kc-lb,.kc-out-sent .kc-lb{color:#2b5cab}
.kc-out-row .kc-lb::before,.kc-out-sent .kc-lb::before{display:none}

/* 还欠：欠的写 -220 红，超产的写 +20 绿 */
.kc-owe .over{color:#1b9d63;font-weight:800}
.kc-owe .short{color:#c1362f;font-weight:850}

/* 织片卡：超织提醒条 */
.kc-warn{display:flex;gap:8px;margin:0 13px 12px;padding:10px 12px;border-radius:11px;background:#fdeceb;color:#a83a31}
.kc-warn i{flex:none;width:16px;height:16px;margin-top:1px;border-radius:50%;background:#c1362f;color:#fff;font-size:10.5px;font-style:normal;font-weight:850;text-align:center;line-height:16px}
.kc-warn span{font-size:11.5px;line-height:1.55}

/* ===== AI 助手：表头加深、单行数据改成竖排 ===== */
.ask-table-card th,.ask-table-card th:first-child{background:#e6edf8;color:#2f4560;font-weight:800;font-size:11.5px;letter-spacing:.2px;border-bottom:1px solid #d5e0ef}
/* 字段-值 竖排（只有一两行数据时用） */
.ask-kv{padding:2px 0}
.ask-kv-hd{padding:9px 14px;background:#e6edf8;color:#2f4560;font-size:12.5px;font-weight:800;border-top:1px solid #d5e0ef}
.ask-kv-hd:first-child{border-top:0}
.ask-kv-row{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:10px 14px;border-bottom:1px solid #f1f3f5;font-size:12.5px}
.ask-kv-row:last-child{border-bottom:0}
.ask-kv-k{color:#8a9295;flex:none}
.ask-kv-v{font-weight:800;color:#1d1d1f;text-align:right;font-variant-numeric:tabular-nums}
.ask-kv-v.zero{color:#b9bfc4;font-weight:600}
.ask-kv-v.due{color:#b4620b}

/* ===== 我的录入记录（各车间主管工作台里的「修改历史记录」）===== */
.wh-list{display:flex;flex-direction:column;gap:9px}
.wh-row{display:flex;align-items:center;gap:12px;padding:13px 14px;border:1px solid #e3e5ea;
  border-radius:14px;background:#fff;text-decoration:none;color:inherit}
.wh-row:active{background:#f7f8fa}
.wh-main{flex:1 1 auto;min-width:0}
.wh-main b{display:block;font-size:14.5px;font-weight:800;color:#1d1d1f}
.wh-main span{display:block;margin-top:3px;color:#8a9295;font-size:11.5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wh-qty{flex:none;font-size:16px;font-weight:800;color:#1d1d1f;font-variant-numeric:tabular-nums}
/* 工价表：一款一行，右边每道工序一个格子 */
.rt-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}
.rt-h1{margin:0;font-size:19px;font-weight:800;color:#1d1d1f;letter-spacing:-.3px}
.rt-unit{margin:5px 0 0;font-size:11.5px;color:#8a9295;line-height:1.5}
.rt-add{flex:none;height:32px;padding:0 12px;border:1px solid #0071e3;border-radius:10px;
  background:#fff;color:#0071e3;font-size:12.5px;font-weight:700;font-family:inherit}
.rt-add:active{transform:scale(.97);background:#eef4fd}
.rt-table{border:1px solid #e6e8ec;border-radius:14px;overflow:hidden;background:#fff}
.rt-colhead{display:grid;gap:6px;padding:9px 12px;background:#f7f8fa;border-bottom:1px solid #e6e8ec;
  font-size:11px;font-weight:700;color:#8a9295}
.rt-colhead span:not(:first-child){text-align:center}
.rt-table.cols-3 .rt-colhead,.rt-table.cols-3 .rt-row{grid-template-columns:1.25fr 1fr 1fr 1fr}
.rt-table.cols-1 .rt-colhead,.rt-table.cols-1 .rt-row{grid-template-columns:1.6fr 1fr}
.rt-row{display:grid;gap:6px;align-items:center;padding:9px 12px;border-bottom:1px solid #f0f1f3}
.rt-row:last-child{border-bottom:0}
.rt-row.rt-new{background:#f8fbff}
.rt-style{min-width:0}
.rt-style b{display:block;font-size:13px;font-weight:800;color:#1d1d1f;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.rt-style i{display:block;font-size:10.5px;color:#9aa1a6;font-style:normal;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.rt-in{width:100%;height:38px;border:1px solid #e0e3e8;border-radius:10px;text-align:center;
  font-size:15px;font-weight:700;color:#1d1d1f;font-variant-numeric:tabular-nums;
  font-family:inherit;background:#fff;padding:0 4px;-webkit-appearance:none}
.rt-in:focus{outline:none;border-color:#0071e3;box-shadow:0 0 0 3px rgba(0,113,227,.12)}
.rt-sel{width:100%;height:38px;border:1px solid #e0e3e8;border-radius:10px;font-size:12.5px;
  font-weight:700;color:#1d1d1f;background:#fff;padding:0 6px;font-family:inherit}
.rt-readonly{margin:0 0 12px;padding:9px 12px;border-radius:10px;background:#f7f8fa;
  color:#8a9295;font-size:12px;line-height:1.5}
.rt-save{margin-top:18px}
.rt-tip{margin:10px 0 0;font-size:11px;color:#9aa1a6;text-align:center}
/* 回收站 */
.tr-row{align-items:center}
.tr-done{opacity:.5}
.tr-btn{height:34px;padding:0 16px;border:0;border-radius:10px;background:#0071e3;color:#fff;
  font-size:13px;font-weight:700;font-family:inherit}
.tr-btn:active{transform:scale(.97)}
.tr-ok{color:#2a7d4f;font-style:normal;font-weight:700;font-size:12px}
/* 人员小蓝标：一人一条记录，一眼看是谁 */
.wh-emp{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:6px;
  background:#eef4fd;color:#0071e3;font-size:10.5px;font-style:normal;font-weight:800;
  vertical-align:middle;letter-spacing:.2px}
/* 返工记录的小红标：跟常规生产记录一眼区分开 */
.wh-rw{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;
  background:#fdeceb;color:#c1362f;font-size:10px;font-style:normal;font-weight:800;
  vertical-align:middle;letter-spacing:.3px}
.wh-qty small{margin-left:2px;font-size:11px;font-weight:600;color:#8a9295}
.wh-date{flex:none;text-align:right;color:#8a9295;font-size:11px;line-height:1.5}
.wh-date em{display:block;margin-top:3px;color:#0071e3;font-style:normal;font-weight:700;font-size:11.5px}
/* 编辑页：只读展示当前值 */
.wh-fixed{flex:1 1 auto;min-width:0;padding:11px 12px;border-radius:11px;background:#f5f6f8;
  color:#5c6166;font-size:14px}
.wh-actions{margin-top:18px;display:flex;flex-direction:column;gap:10px}
.wh-del{padding:13px;border:1px solid #f0c9c4;border-radius:12px;background:#fff;color:#c1362f;
  font-size:14px;font-weight:700;-webkit-tap-highlight-color:transparent}
.wh-del:active{background:#fdf3f2}
.confirm-card .primary.danger-btn{background:#c1362f}

/* 请假冲抵：请了 3 天只休 1 天 —— 原记录留着，把没休的抵掉 */
.lv-offset{flex:1 1 100%;display:flex;align-items:center;gap:10px}
.lv-offset input{flex:1 1 auto;min-width:0}
.lv-offset-tip{flex:none;color:#8a9295;font-size:12px;font-variant-numeric:tabular-nums}
.lr-main em.lv-off{font-style:normal;color:#b4620b;font-weight:700}
.lr-main b.lv-real{color:#1d1d1f;font-weight:800}
/* 请假列表整行可点，省掉右边那个「修改」按钮的位置 */
.lv-row{text-decoration:none;color:inherit}
.lv-row:active{background:#f7f8fa}
.lv-go{flex:none;padding-left:4px;color:#c8ccd0;font-size:17px;line-height:1}
/* 外机类型：两个大按钮，一眼看清选的是哪个 */
.field-block{display:block}
.kind-pick{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:2px}
.kind-btn{display:block;padding:11px 8px;border:1px solid #e0e3e8;border-radius:13px;background:#fff;
  text-align:center;font-family:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
.kind-btn b{display:block;font-size:14.5px;font-weight:800;color:#1d1d1f}
.kind-btn small{display:block;margin-top:3px;font-size:10.5px;color:#9aa0a5}
.kind-btn.on{border-color:#1d1d1f;background:#1d1d1f}
.kind-btn.on b{color:#fff}
.kind-btn.on small{color:rgba(255,255,255,.7)}
.kind-btn:active{transform:scale(.985)}
/* 流水详情底部：删除这条记录 */
.fd-del{display:block;width:100%;margin:18px 0 8px;height:48px;border:1px solid #f0d4d1;border-radius:14px;
  background:#fff;color:#c1362f;font-size:15px;font-weight:800;font-family:inherit;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.fd-del:active{background:#fdf3f2;transform:scale(.99)}
/* 工价表：上面填新款，下面看已保存的（平时只读） */
.rt-new{padding:14px;border:1px solid #e6e8ec;border-radius:16px;background:#fff;margin-bottom:6px}
.rt-rates{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.rt-mini{display:block;text-align:center}
.rt-mini>span{display:block;font-size:11px;color:#8a9295;margin-bottom:5px}
.rt-mini>input{width:100%;height:44px;text-align:center;border:1px solid #e0e3e8;border-radius:11px;
  background:#fff;font:inherit;font-size:16px;font-weight:800;color:#1d1d1f;font-variant-numeric:tabular-nums}
.rt-mini>input[readonly]{background:#f7f7f9;color:#5c6166;border-color:transparent;font-weight:700}
.rt-saved{padding:12px 14px;border:1px solid #e6e8ec;border-radius:16px;background:#fff;margin-bottom:9px}
.rt-saved-hd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.rt-saved-no{font-size:14.5px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rt-saved-no i,.rt-saved-no{color:#1d1d1f}
.rt-edit{flex:none;padding:5px 12px;border:1px solid #e0e3e8;border-radius:9px;background:#fff;
  color:#0071e3;font-size:12.5px;font-weight:700;font-family:inherit}
.rt-saved-ft{margin-top:10px;display:grid;gap:8px}
.rt-cancel{border:1px solid #e0e3e8;border-radius:12px;background:#fff;height:44px;color:#5c6166;
  font-family:inherit;font-size:14px;font-weight:700}
/* hidden 会被 display:grid 覆盖，必须显式关掉（踩过两次了） */
.rt-saved-ft[hidden]{display:none}
/* 人员列表：整行可点 */
a.list-row{color:inherit;text-decoration:none}
.list-row:active{background:#fafafb}
.lr-go{flex:none;color:#c8ccd0;font-style:normal;font-size:17px;line-height:1}
/* 人员搜索：一个输入框，打名字就筛 */
.emp-search-wrap{position:relative;display:flex;align-items:center;margin:2px 0 10px}
.emp-search-wrap svg{position:absolute;left:12px;width:17px;height:17px;fill:none;stroke:#9aa0a5;stroke-width:2;
  stroke-linecap:round;pointer-events:none}
.emp-search{width:100%;height:46px;padding:0 38px 0 36px;border:1px solid #e0e3e8;border-radius:13px;
  background:#fff;font-family:inherit;font-size:15px;color:#1d1d1f;-webkit-appearance:none;appearance:none}
.emp-search::-webkit-search-cancel-button{display:none}
.emp-clear{position:absolute;right:8px;width:30px;height:30px;border:0;border-radius:50%;background:#f2f3f5;
  color:#8a9295;font-size:16px;line-height:1;-webkit-tap-highlight-color:transparent}
.emp-search-none{margin:-4px 0 8px;color:#9aa0a5;font-size:13px}
/* hidden 会被 display:flex 覆盖，列表行过滤必须显式关掉 */
.emp-list .list-row[hidden]{display:none}

/* ---- 织机「一键日报」入口卡 + 生成页 ---- */
.kd-entry{display:flex;align-items:center;gap:14px;margin:4px 0 16px;padding:16px 16px;border-radius:18px;
  background:#fff;border:1px solid #EDEEF0;text-decoration:none;box-shadow:0 1px 2px rgba(20,20,24,.03)}
.kd-entry-ico{width:46px;height:46px;border-radius:13px;background:#E8F1FD;color:#0071E3;display:flex;
  align-items:center;justify-content:center;flex:none}
.kd-entry-ico svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.kd-entry-tx{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px}
.kd-entry-tx b{font-size:16px;color:#1D1D1F;font-weight:600}
.kd-entry-tx i{font-size:12.5px;color:#8A8F93;font-style:normal}
.kd-entry-go{color:#C2C6CB;font-size:20px;flex:none}

.kd-page{padding-bottom:96px}
.kd-head h1{font-size:17px;font-weight:600;margin:6px 0 0;color:#1D1D1F}
.kd-head span{font-size:12px;color:#9A9AA0}
.kd-filter{display:flex;align-items:flex-end;gap:12px;margin:16px 0 14px}
.kd-f{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:6px}
.kd-f span{font-size:12px;color:#8A8F93}
.kd-f input{height:46px;border:1px solid #E3E6E9;border-radius:12px;padding:0 12px;font-size:16px;background:#fff;color:#1D1D1F}
.kd-chips{display:flex;gap:8px;flex:none}
.kd-chip{height:46px;padding:0 18px;border-radius:12px;border:1px solid #E3E6E9;background:#fff;color:#4A4F53;font-size:14px;font-weight:500}
.kd-chip.on{background:#1D1D1F;border-color:#1D1D1F;color:#fff}
.kd-preview{position:relative;border-radius:18px;overflow:hidden;background:#fff;border:1px solid #EDEEF0;min-height:220px}
.kd-preview canvas{display:block;width:100%;height:auto}
.kd-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.86);color:#6E6E73;font-size:14px;padding:0 24px;text-align:center}
.kd-loading[hidden]{display:none}
.kd-tip{font-size:12px;color:#9A9AA0;line-height:1.7;margin:14px 2px 0}
.kd-bar{position:fixed;left:0;right:0;bottom:calc(72px + env(safe-area-inset-bottom));z-index:30;
  padding:10px 16px;background:rgba(251,251,253,.94);border-top:1px solid #EFEFF2;backdrop-filter:blur(10px)}
.kd-dl{width:100%;height:50px;border:0;border-radius:14px;background:#1D1D1F;color:#fff;font-size:16px;font-weight:600}
.kd-dl:active{transform:scale(.985)}

/* ---- 产量排名（缝盘 / 烫衣） ---- */
.or-page{padding-bottom:28px}
.or-head{margin:6px 0 18px}
.or-head span{font-size:12px;color:#9A9AA0}
.or-head h1{font-size:23px;font-weight:600;margin:5px 0 6px;color:#1D1D1F;letter-spacing:-.3px}
.or-head p{font-size:12.5px;color:#8A8F93;margin:0}
.or-tabs{display:flex;gap:8px;overflow-x:auto;margin:0 0 16px;padding-bottom:2px;-webkit-overflow-scrolling:touch}
.or-tab{flex:none;height:38px;line-height:38px;padding:0 16px;border-radius:12px;background:#fff;
  border:1px solid #E7EAED;color:#4A4F53;font-size:13.5px;font-weight:500;text-decoration:none}
.or-tab.on{background:#1D1D1F;border-color:#1D1D1F;color:#fff}
.or-sum{display:flex;gap:10px;margin-bottom:18px}
.or-sum>div{flex:1 1 0;min-width:0;background:#fff;border:1px solid #EDEEF0;border-radius:16px;padding:14px 16px}
.or-sum span{display:block;font-size:11.5px;color:#8A8F93;margin-bottom:6px}
.or-sum b{font-size:26px;font-weight:600;color:#1D1D1F;font-variant-numeric:tabular-nums}
.or-sum i{font-size:12px;color:#8A8F93;font-style:normal;margin-left:4px}
.or-card{background:#fff;border:1px solid #EDEEF0;border-radius:16px;padding:14px 14px 6px;margin-bottom:12px}
.or-hd{display:flex;align-items:baseline;gap:8px;padding-bottom:10px;border-bottom:1px solid #F2F4F6}
.or-hd b{font-size:16px;font-weight:600;color:#1D1D1F}
.or-hd span{font-size:12px;color:#9A9AA0}
.or-hd em{margin-left:auto;font-size:12px;color:#6E6E73;font-style:normal}
.or-hd em b{font-size:14px;color:#1D1D1F;font-weight:600}
.or-cols{display:flex;justify-content:flex-end;gap:0;padding:8px 0 2px;font-size:11px;color:#B4B2A9}
.or-cols span{width:70px;text-align:right}
.or-row{display:flex;align-items:center;height:42px;border-bottom:1px solid #F6F7F9}
.or-row:last-child{border-bottom:0}
.or-row i{width:22px;font-size:12px;color:#B4B2A9;font-style:normal;font-variant-numeric:tabular-nums}
.or-row.top i{color:#0071E3;font-weight:600}
.or-row .nm{flex:1 1 auto;min-width:0;font-size:15px;color:#1D1D1F;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.or-row b{width:70px;text-align:right;font-size:15.5px;font-weight:600;color:#1D1D1F;font-variant-numeric:tabular-nums}
.or-row s{width:70px;text-align:right;font-size:13px;color:#8A8F93;text-decoration:none;font-variant-numeric:tabular-nums}

/* ---- 单条记录详情 ---- */
.rd-page{padding-bottom:34px}
.rd-hero{background:#fff;border:1px solid #EDEEF0;border-radius:18px;padding:18px 18px 16px;
  box-shadow:0 1px 2px rgba(20,20,24,.03)}
.rd-k{font-size:13px;color:#8A8F93}
.rd-num{display:flex;align-items:baseline;margin-top:6px}
.rd-num b{font-size:38px;font-weight:600;letter-spacing:-1px;line-height:1;font-variant-numeric:tabular-nums}
.rd-num i{font-size:15px;font-style:normal;color:#6E6E73;margin-left:6px}
.rd-num em{font-size:14px;font-style:normal;color:#9A9AA0;margin-left:14px}
.rd-style{margin-top:10px;font-size:14px;color:#3F4A46;font-weight:500}
.rd-style span{color:#9A9AA0;font-weight:400}

.rd-kv{margin-top:12px;padding:2px 16px;background:#fff;border:1px solid #EDEEF0;border-radius:16px;
  box-shadow:0 1px 2px rgba(20,20,24,.03)}
.rd-row{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:start;column-gap:14px;
  padding:14px 0;border-bottom:1px solid #F2F4F6;min-width:0}
.rd-row:last-child{border-bottom:0}
.rd-row>span{font-size:13.5px;color:#8A8F93}
.rd-row>b{font-size:14.5px;font-weight:400;color:#1D1D1F;text-align:right;
  overflow-wrap:anywhere;word-break:break-word;font-variant-numeric:tabular-nums;min-width:0}
.rd-row>b.s{font-weight:600;font-size:15.5px}

.rd-list .list-row{text-decoration:none;color:inherit}
.rd-list .list-row.on{background:#F2F7FE}
.rd-here{flex:none;margin-left:8px;font-size:11px;color:#0071E3;background:#E8F1FD;
  border-radius:7px;padding:2px 7px}
.rd-tip{font-size:12px;color:#9A9AA0;line-height:1.7;margin:12px 2px 0}

/* 最近记录：可点 */
a.list-row.rd-link{text-decoration:none;color:inherit}
a.list-row.rd-link:active{background:#F5F7F9}
.lr-go{flex:none;margin-left:2px;color:#C2C6CB;font-size:16px;line-height:1}

/* 缺毛登记：最近报缺点一条进去改；左边红色「删除该条登记」、右边绿色「已经处理好了」并排 */
.sh-acts{display:flex;gap:10px;margin:10px 0 4px}
.sh-acts form{flex:1;min-width:0}
.sh-del-btn,.sh-done-btn{display:block;width:100%;height:48px;border-radius:12px;font-size:14.5px;font-weight:600;transition:transform .12s;white-space:nowrap}
.sh-del-btn{border:1px solid #f0c6c2;background:#fff;color:#c1362f}
.sh-done-btn{border:0;background:#2FA84F;color:#fff}
.sh-done-btn.back{background:#fff;border:1px solid #d9dcde;color:#8a8f94;font-weight:500}
.sh-del-btn:active,.sh-done-btn:active{transform:scale(.985)}
.sh-badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;background:#eef2f0;color:#5a6169;font-size:11px;font-style:normal;font-weight:600;vertical-align:1px}

/* 记录页：从工作台点进来的那一条加个淡蓝框，一眼找到 */
.fl-row.is-focus{background:#F2F7FE;box-shadow:inset 0 0 0 1.5px #cfe2fb}

/* 记录页：业务日期 ≠ 录入日期时（补录前几天的单据）在日期后面标一下 */
.fl-late{margin-left:5px;color:#e8890c;font-style:normal;font-size:10.5px;font-weight:600}
.sh-done-btn.auto{background:#E9F7EE;color:#2FA84F;border:1px solid #bfe6cb}
.sh-badge.auto{background:#E9F7EE;color:#2FA84F}

/* 毛料单：改条数 / 重量（详情页的「修改」按钮 + 编辑页卡片） */
.fd-edit{display:block;width:100%;margin:18px 0 10px;height:48px;line-height:46px;text-align:center;
  border:1px solid #cfe2fb;border-radius:14px;background:#F2F7FE;color:#0B63C4;font-size:15px;font-weight:800;
  text-decoration:none;-webkit-tap-highlight-color:transparent}
.fd-edit:active{background:#E6F0FD;transform:scale(.99)}
.fd-edit+.fd-del{margin-top:0}
.fe-card{margin-bottom:12px;padding:13px 15px 15px;border:1px solid #e6e8ec;border-radius:16px;background:#fff}
.fe-title{font-size:14px;font-weight:700;color:#1D1D1F;margin-bottom:10px;word-break:break-all}
.fe-card .sf-row{margin-bottom:0}

/* 毛料明细：一个颜色一张卡，每种料「要多少 / 收多少 / 够不够」 */
.kw-card{padding-bottom:14px}
.kw-head,.kw-row{display:grid;grid-template-columns:minmax(0,1fr) 68px 68px 66px;gap:6px;align-items:center}
.kw-head{padding:0 0 7px;font-size:11.5px;color:#8a9295}
.kw-head span:not(:first-child){text-align:right}
.kw-color{border:1px solid #e9ebee;border-radius:14px;padding:11px 12px 9px;margin-bottom:9px;background:#fff}
.kw-color.lack{border-color:#f3c9c6;background:#fffdfd}
.kw-color-hd{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.kw-color-hd b{font-size:14.5px;font-weight:700;color:#1D1D1F}
.kw-color-hd span{font-size:12px;color:#8a9295}
.kw-row{font-size:13px;line-height:2.05}
.kw-mat{color:#3a3f44;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kw-num{text-align:right;color:#5a6169;font-variant-numeric:tabular-nums}
.kw-verdict{text-align:right;font-weight:700}
.kw-verdict.ok{color:#2FA84F}
.kw-verdict.lack{color:#C1362F}
.kw-sum{margin-top:4px;padding:11px 13px;border-radius:14px;font-size:13px;line-height:1.6}
.kw-sum b{display:block;font-weight:700;margin-bottom:2px}
.kw-sum.ok{background:#E9F7EE;color:#1F7A3E}
.kw-sum.lack{background:#FCEBEB;color:#A32D2D}
.kw-sum span{color:inherit;opacity:.9}
.kw-verdict.over{color:#e8890c}
.kw-color.over{border-color:#f7d9b0;background:#fffdf8}
.kw-sum.over{background:#FDF3E4;color:#8A5A0B;margin-top:8px}
.kw-alt{margin-top:6px;padding-top:6px;border-top:1px dashed #eceef0;font-size:11.5px;color:#8a9295;line-height:1.5}

/* 总进度查看：按部门切换，一个款一张卡，颜色拆行 */
.pg-tabs{display:flex;gap:7px;margin:4px 0 12px}
.pg-tab{flex:1;text-align:center;padding:9px 0;border-radius:11px;background:#F2F3F5;color:#5A6169;font-size:14px;font-weight:600;text-decoration:none}
.pg-tab.on{background:#1D1D1F;color:#fff}
.pg-card{background:#fff;border:1px solid #e9ebee;border-radius:16px;padding:12px 13px 14px;margin-bottom:12px}
.pg-legend{display:flex;gap:14px;font-size:12px;color:#8a9295;margin-bottom:10px}
.pg-legend i{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:4px;vertical-align:0}
.pg-legend i.own{background:#0071E3}
.pg-legend i.ext{background:#E8890C}
.pg-style{padding:10px 0 8px;border-bottom:1px solid #F2F4F6}
.pg-style:last-of-type{border-bottom:0}
.pg-style-hd{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}
.pg-no{font-size:17px;font-weight:700;color:#1D1D1F;text-decoration:none}
.pg-batch{font-size:11.5px;color:#9A9AA0}
.pg-sum{margin-left:auto;font-size:13px;color:#8a9295}
.pg-sum b{font-weight:700}
.pg-sum b.ok{color:#2FA84F}
.pg-sum b.lack{color:#C1362F}
.pg-sum i{font-style:normal;margin:0 4px;color:#C9C9CE}
.pg-row{display:grid;grid-template-columns:52px minmax(0,1fr) 42px minmax(0,1fr) 42px;gap:7px;align-items:center;padding:4px 0;font-size:12.5px}
.pg-row:has(.pg-c2){grid-template-columns:52px minmax(0,1fr) 42px 1.2fr}
.pg-c{color:#5A6169;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pg-c2{color:#B4B2A9;font-size:11.5px}
.pg-bar{display:block;height:7px;border-radius:4px;background:#F1F2F4;overflow:hidden}
.pg-bar i{display:block;height:7px;border-radius:4px}
.pg-bar i.own{background:#0071E3}
.pg-bar i.ext{background:#E8890C}
.pg-v{text-align:right;color:#3a3f44;font-weight:600;font-variant-numeric:tabular-nums}
.pg-nums{display:flex;gap:12px;font-size:11px;color:#9A9AA0;margin-top:3px;font-variant-numeric:tabular-nums}
.pg-nums .ex{color:#B98A3C}
.pg-total{display:grid;grid-template-columns:52px minmax(0,1fr) 42px minmax(0,1fr) 42px;gap:7px;align-items:center;
  margin-top:10px;padding-top:10px;border-top:1px solid #E3E5E9;font-size:13px;font-weight:700}

/* 工作台顶上的「总进度查看」入口卡 */
.pg-entry{display:block;margin:2px 0 12px;padding:13px 15px 14px;background:#fff;border:1px solid #e9ebee;
  border-radius:16px;text-decoration:none;color:inherit}
.pg-entry:active{background:#fafbfc}
.pg-entry-hd{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
.pg-entry-hd b{font-size:15.5px;font-weight:700;color:#1D1D1F}
.pg-entry-hd em{font-style:normal;font-size:12px;color:#8a9295}
.pg-entry-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.pg-entry-item{background:#F7F8FA;border-radius:11px;padding:9px 4px 8px;text-align:center}
.pg-entry-item b{display:block;font-size:11.5px;color:#8a9295;font-weight:500;margin-bottom:3px}
.pg-entry-item i{font-style:normal;font-size:16px;font-weight:700;color:#1D1D1F;font-variant-numeric:tabular-nums}
.pg-entry-item i.ok{color:#2FA84F}
.pg-entry-item i.lack{color:#C1362F}

/* 外机详情：删除工厂（只有从没交易过的厂才出现） */
.fx-del{display:block;width:100%;margin:18px 0 8px;height:48px;border:1px solid #f0d4d1;border-radius:14px;
  background:#fff;color:#c1362f;font-size:15px;font-weight:800;font-family:inherit;cursor:pointer}
.fx-del:active{background:#fdf3f2;transform:scale(.99)}

/* 工作台顶部：标题去掉后只留「全部记录」，不占高度 */
.wb-head-lite{justify-content:flex-end;margin-bottom:10px}

/* ---------------- 外发情况（/outsourcing） ----------------
   一个厂一张卡，卡里每个「款号·颜色」一行：发出 / 收回 / 差多少。
   配色跟全站一致：缺口 #C1362F，收齐 #2FA84F。 */
.os-page{padding-bottom:100px}
.os-title{font-size:30px;font-weight:800;letter-spacing:-.5px;margin:14px 0 4px;color:#1D1D1F}
.os-sub{color:#8A8A8F;font-size:15px;margin:0 0 16px}

.os-tabs{display:flex;gap:8px;margin-bottom:14px}
.os-tab{position:relative;flex:1;text-align:center;padding:12px 0;border-radius:13px;
  background:#F2F3F6;color:#5A5A60;font-size:16px;font-weight:700;text-decoration:none;
  -webkit-tap-highlight-color:transparent;transition:background .15s,color .15s}
.os-tab.on{background:#1D1D1F;color:#fff}
.os-dot{position:absolute;top:-6px;right:4px;min-width:18px;height:18px;line-height:18px;
  border-radius:9px;background:#C1362F;color:#fff;font-size:11px;font-style:normal;
  font-weight:700;padding:0 5px;box-shadow:0 0 0 2px #FBFBFD}

.os-sum{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;background:#fff;
  border-radius:16px;padding:16px 8px;margin-bottom:12px;box-shadow:0 1px 2px rgba(0,0,0,.05)}
.os-sum-item{display:flex;flex-direction:column;align-items:center;gap:6px}
.os-sum-item span{font-size:13px;color:#8A8A8F;font-weight:600}
.os-sum-item b{font-size:22px;font-weight:800;color:#1D1D1F;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.os-sum-item b small{font-size:12px;font-weight:600;color:#9A9AA0;margin-left:2px}
.os-sum-item b.ok{color:#2FA84F}
.os-sum-item b.warn{color:#C1362F}

.os-filter{display:flex;gap:8px;margin-bottom:14px}
.os-chip{padding:8px 16px;border-radius:20px;background:#F2F3F6;color:#5A5A60;
  font-size:14px;font-weight:700;text-decoration:none}
.os-chip.on{background:#E7F0FD;color:#0071E3}

.os-empty{background:#fff;border-radius:16px;padding:36px 20px;text-align:center;
  color:#8A8A8F;font-size:15px}

.os-card{background:#fff;border-radius:18px;margin-bottom:12px;overflow:hidden;
  box-shadow:0 1px 2px rgba(0,0,0,.05)}
.os-fac{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:15px 16px 12px;border-bottom:1px solid #F0F2F4}
.os-fac-name{font-size:17px;font-weight:800;color:#1D1D1F;text-decoration:none}
.os-fac-left{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.os-fac-left small{font-size:11px;margin-left:2px}
.os-fac-left.warn{color:#C1362F}
.os-fac-left.ok{color:#2FA84F}

.os-rows{padding:4px 0 6px}
.os-row{padding:12px 16px 13px;border-bottom:1px solid #F7F8FA}
.os-row:last-child{border-bottom:0}
.os-row-top{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.os-code{font-size:15px;font-weight:700;color:#1D1D1F;min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.os-code em{font-style:normal;font-weight:600;color:#6E6E73}
.os-left{font-size:14px;font-weight:800;white-space:nowrap;font-variant-numeric:tabular-nums}
.os-left.warn{color:#C1362F}
.os-left.ok{color:#2FA84F}

.os-bar{height:6px;border-radius:3px;background:#EEF0F2;margin:9px 0 8px;overflow:hidden}
.os-bar i{display:block;height:100%;border-radius:3px;background:#0071E3;
  transition:width .3s}

.os-row-bot{display:flex;align-items:center;gap:14px;font-size:13px;color:#8A8A8F;
  font-variant-numeric:tabular-nums}
.os-row-bot b{font-weight:700;color:#4A4A50}
.os-row-bot .dim b{color:#9A9AA0}
.os-pct{margin-left:auto;font-weight:700;color:#6E6E73}

/* 外机信息页顶部的入口卡 */
.os-entry{display:flex;align-items:center;gap:14px;background:#fff;border-radius:18px;
  padding:16px;margin:14px 0 4px;text-decoration:none;box-shadow:0 1px 2px rgba(0,0,0,.05)}
.os-entry:active{transform:scale(.995)}
.os-entry-ico{width:46px;height:46px;border-radius:14px;background:#E7F0FD;color:#0071E3;
  display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.os-entry-ico svg{width:24px;height:24px}
.os-entry-txt{display:flex;flex-direction:column;gap:3px;min-width:0}
.os-entry-txt b{font-size:16px;font-weight:800;color:#1D1D1F}
.os-entry-txt small{font-size:13px;color:#8A8A8F}
.os-entry-go{margin-left:auto;font-style:normal;color:#C9C9CE;font-size:20px}

/* 外发情况：毛料页那句解释（毛料不会整包退回来，别让人误以为全都欠着） */
.os-note{margin:-8px 0 14px;padding:10px 14px;border-radius:12px;background:#F7F8FA;
  color:#6E6E73;font-size:13px;line-height:1.55}

/* 外发情况 · 行内三级字号：批号最大、款号小一号、颜色再小一点并带色点 */
.os-card{border:1.5px solid #1D1D1F}
.os-code{display:flex;align-items:baseline;gap:8px;min-width:0;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.os-batch{font-size:16px;font-weight:800;color:#1D1D1F;letter-spacing:-.2px}
.os-style{font-style:normal;font-size:13px;font-weight:600;color:#8A8A8F}
.os-color{display:inline-flex;align-items:center;gap:5px;font-size:13px;font-weight:600;
  color:#6E6E73;white-space:nowrap}
.os-cdot{width:11px;height:11px;border-radius:50%;flex:0 0 auto;
  box-shadow:0 0 0 1px rgba(29,29,31,.28) inset, 0 0 0 1px rgba(29,29,31,.10)}

/* 工作台第一张卡：总进度（跟其它卡同款，图标用品牌蓝） */
.wb-card.kb-progress .wb-ico{background:#0071e3;box-shadow:0 4px 12px rgba(0,113,227,.24)}

/* 工作台卡片右上角的红角标（收发的「外发情况」显示还有几款没收回） */
.wb-card{position:relative}
.wb-count{position:absolute;top:9px;right:12px;background:#C1362F;color:#fff;
  font-size:11px;font-weight:700;line-height:1;padding:4px 7px;border-radius:9px;
  letter-spacing:0;white-space:nowrap}

/* 角标只有数字时也保持圆形，别挤成小方块 */
.wb-count{min-width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;
  padding:0 5px;border-radius:9px;font-size:11px}
