:root{
  /* 浅色模式（张总 2026-09-08 定）：界面亮色，联单纸面样式本就是白底不动 */
  --bg:#f5f7fa; --surface:#ffffff; --surface2:#eef2f6; --border:#d8dee6;
  --text:#1f2733; --text2:#5b6675; --text3:#8a94a3;
  --blue:#1668dc; --teal:#0e9f7e; --amber:#b8860b; --coral:#d97b57;
  --green:#1a9e55; --red:#e5484d; --purple:#8a5fd1;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:var(--bg);color:var(--text);font-family:-apple-system,"Microsoft YaHei","Segoe UI",sans-serif;font-size:14px;line-height:1.6;}
a{text-decoration:none;color:inherit;}
/* 顶栏 */
.topbar{background:linear-gradient(90deg,#ffffff,#f4f7fb);border-bottom:1px solid var(--border);padding:16px 28px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;}
.topbar h1{font-size:21px;font-weight:600;}
.topbar .sub{color:var(--text2);font-size:12px;margin-top:3px;}
.top-right{display:flex;align-items:center;gap:14px;}
.ver{background:rgba(61,217,179,.15);color:var(--teal);padding:4px 12px;border-radius:20px;font-size:12px;}
.user{color:var(--text2);font-size:13px;}
/* 布局 */
.layout{display:flex;align-items:flex-start;max-width:1500px;margin:0 auto;}
.sidebar{width:248px;flex-shrink:0;position:sticky;top:0;height:calc(100vh - 72px);overflow-y:auto;padding:18px 12px;border-right:1px solid var(--border);background:var(--surface);}
.nav-title{color:var(--text3);font-size:11px;text-transform:uppercase;letter-spacing:1px;margin:0 8px 10px;}
.nav-item,.nav-sub{display:block;padding:8px 12px;margin-bottom:3px;border-radius:8px;font-size:13px;color:var(--text2);cursor:pointer;transition:all .15s;}
.nav-item:hover,.nav-sub:hover{background:var(--surface2);color:var(--blue);}
.nav-item.active,.nav-sub.active{background:rgba(88,166,255,.12);color:var(--blue);font-weight:500;}
.nav-group{margin:6px 0;}
.nav-parent{padding:7px 12px;font-size:12px;font-weight:600;color:var(--text3);letter-spacing:.5px;cursor:default;}
.nav-sub{padding-left:26px;font-size:12.5px;}
.main{flex:1;padding:26px 34px;min-width:0;}
/* 卡片/区块 */
.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 22px;margin-bottom:16px;}
.card-title{font-size:14px;font-weight:500;color:var(--blue);margin-bottom:12px;display:flex;align-items:center;gap:8px;}
.card-title .sub{color:var(--text3);font-size:12px;font-weight:400;margin-left:auto;}
.page-head{margin-bottom:18px;}
.page-head h2{font-size:19px;font-weight:600;color:var(--blue);}
.page-head .desc{color:var(--text2);font-size:13px;margin-top:4px;}
/* 统计卡 */
.stat-row{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px;}
.toolbar-inline{display:inline-flex;gap:6px;margin-left:auto;align-items:center;}
.muted{color:var(--text3);font-style:normal;}
.stat{flex:1;min-width:130px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px;}
.stat .num{font-size:24px;font-weight:600;color:var(--teal);}
.stat .label{font-size:12px;color:var(--text2);margin-top:2px;}
/* 表格 */
table{width:100%;border-collapse:collapse;font-size:13px;}
th,td{padding:8px 11px;text-align:left;border:1px solid var(--border);vertical-align:middle;}
th{background:var(--surface2);color:var(--blue);font-weight:500;white-space:nowrap;}
tr:nth-child(even) td{background:rgba(0,0,0,.025);}
.tbl-wrap{overflow-x:auto;}
/* 按钮 */
.btn{display:inline-block;background:var(--blue);color:#fff;border:none;padding:7px 14px;border-radius:7px;cursor:pointer;font-size:13px;font-weight:500;transition:.15s;}
.btn:hover{filter:brightness(1.1);}
.btn-sec{background:var(--surface2);color:var(--text);border:1px solid var(--border);}
.btn-sec:hover{border-color:var(--blue);color:var(--blue);}
.btn-danger{background:rgba(229,72,77,.1);color:var(--red);border:1px solid rgba(229,72,77,.3);}
.btn-danger:hover{background:rgba(229,72,77,.2);}
.btn-sm{padding:4px 10px;font-size:12px;}
.btn-mini{padding:2px 9px;font-size:13px;line-height:1.5;border-radius:6px;}
.btn:disabled{opacity:.45;cursor:not-allowed;}
/* 开单页内联快速新增（材质/供应商“录不进去”的补救） */
.sel-add{display:flex;gap:8px;align-items:center;}
.sel-add select{flex:1;min-width:0;}
.add-on{background:var(--teal);color:#fff;font-weight:700;font-size:16px;line-height:1;padding:5px 11px;border-radius:7px;flex:0 0 auto;}
.add-on:hover{filter:brightness(1.12);}
.inline-add-box{grid-column:1/-1;margin:-2px 0 8px;}
.card-add{border:2px solid var(--teal);box-shadow:0 0 0 3px rgba(45,212,191,.12);}
.card-add .card-title{color:var(--teal);}
/* 2026-09-13 排产「今日该干」卡片（剩余≤2天 + 已超期）——红框提示，但不动纸质单 */
.card-soon{border-color:rgba(229,72,77,.5);box-shadow:0 0 0 3px rgba(229,72,77,.08);}
.card-soon .card-title{color:var(--red);}
.card-soon .card-title em{font-style:normal;font-weight:400;color:var(--text3);font-size:12px;}
/* 2026-09-13 报工页「⚡ 该先干 · 按工序排队」（工人端 · 屏幕专用，不进纸质单） */
.qgroup{margin-top:10px;padding:8px 10px;border-radius:8px;background:var(--surface2);border:1px solid var(--border);}
.qgroup-h{font-size:13px;font-weight:600;color:var(--text);margin-bottom:4px;}
.qgroup-h .muted{font-weight:400;font-size:11.5px;}
.qline{display:flex;align-items:center;gap:8px;padding:4px 0;border-top:1px dashed var(--border);flex-wrap:wrap;}
.qline:first-of-type{border-top:none;}
.qno{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;border-radius:50%;background:var(--red);color:#fff;font-size:11px;font-weight:700;flex:0 0 auto;}
.qwo{font-weight:600;letter-spacing:.3px;}
/* 机台分配表（排产页 · 屏幕专用；纸质联单不使用） */
.eq-sep{font-size:12.5px;font-weight:600;color:var(--text2);margin:14px 0 6px;padding-top:10px;border-top:1px dashed var(--border);}
.eq-sep:first-child{margin-top:0;padding-top:0;border-top:none;}
.eq-lane td{vertical-align:top;font-size:12.5px;}
.eq-lane td:first-child{white-space:nowrap;}
.eq-lane .qline{border-top:1px dashed var(--border);}
.eq-lane .qline:first-of-type{border-top:none;}
.eq-lane .badge{margin-left:4px;}
/* 2026-09-13 开单「机台指定」（屏幕端专用 · 纸质联单版式不受影响） */
.assign-block{display:flex;flex-direction:column;gap:6px;border:1px dashed var(--border);border-radius:8px;padding:10px 12px;background:rgba(45,212,191,.05);}
.assign-block>label{color:var(--teal);font-weight:600;}
.assign-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;}
.assign-grid select{width:100%;}
.assign-tip{font-size:11.5px;line-height:1.75;color:var(--text3);}
.new-row{animation:flashRow 1.8s ease;}
@keyframes flashRow{0%{background:rgba(45,212,191,.45);}100%{background:transparent;}}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;align-items:center;}
/* 2026-09-13 报工「暂停原因」下拉（需求池[2026-08-15]） */
.lb-inline{font-size:12px;color:var(--text2);}
.toolbar select{min-width:110px;}
/* 表单 */
.form{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:14px;}
.form-sec{grid-column:1/-1;font-size:12px;font-weight:500;color:var(--blue);border-bottom:1px solid var(--border);padding:8px 2px 4px;margin-top:8px;letter-spacing:.2px;}
.form-sec:first-child{margin-top:0;}
.form .field{display:flex;flex-direction:column;gap:4px;}
/* 参考值（张总 2026-09-06）：默认不显示，点到该字段才浮出，只作参考不替人做决定 */
.ref-hint{display:none;align-self:flex-start;font-size:11px;color:var(--text3);background:var(--surface2);border:1px solid var(--border);padding:2px 7px;border-radius:5px;line-height:1.5;}
.field:focus-within .ref-hint{display:block;}
.ref-hint em{font-style:normal;color:var(--teal);}
.hist-price-box{grid-column:1/-1;display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;background:rgba(240,192,96,.12);border:1px solid rgba(240,192,96,.35);border-radius:8px;padding:8px 12px;font-size:12px;color:var(--text2);}
.hist-price-box b{font-size:19px;font-weight:500;color:var(--amber);}
.hist-price-box .hp-tip{color:var(--text3);}
.hp-tip{color:var(--text3);font-size:11px;}
/* 老单无大类标记 ⇒ 引用时人工定一次（按钮直接放在横幅里，不弹窗打断） */
.hist-pick{margin-top:8px;padding-top:8px;border-top:1px dashed var(--border);display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:14px;font-weight:600;color:var(--text);}
.hist-pick .btn{padding:9px 20px;font-size:15px;font-weight:700;border-radius:8px;}
.field label{font-size:12px;color:var(--text2);}
.field input,.field select,.field textarea{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:7px 10px;border-radius:7px;font-size:13px;font-family:inherit;}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blue);}
/* 保存校验未过：该格红框高亮 3 秒（配合 jumpToField 滚动定位） */
.field.field-miss{animation:fieldMissPulse 1s ease-in-out 2;}
.field.field-miss input,.field.field-miss select,.field.field-miss textarea{border-color:var(--red);background:rgba(229,72,77,.07);box-shadow:0 0 0 3px rgba(229,72,77,.15);}
@keyframes fieldMissPulse{0%,100%{transform:translateX(0);}25%{transform:translateX(-4px);}75%{transform:translateX(4px);}}
/* 标签 / 状态徽章 */
.badge{display:inline-block;padding:2px 9px;border-radius:11px;font-size:12px;font-weight:500;}
.b-green{background:rgba(126,231,135,.15);color:var(--green);}
.b-blue{background:rgba(88,166,255,.15);color:var(--blue);}
.b-amber{background:rgba(240,192,96,.15);color:var(--amber);}
.b-red{background:rgba(248,113,113,.15);color:var(--red);}
.b-gray{background:rgba(139,148,158,.15);color:var(--text2);}
.b-purple{background:rgba(201,155,255,.15);color:var(--purple);}
/* 排产优先级三档图例（升单 / 加急 / 排产页顶部） */
.prio-legend{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px;}
.prio-chip{display:inline-flex;align-items:baseline;gap:8px;padding:6px 12px;border-radius:9px;background:var(--surface2);border:1px solid var(--border);font-size:12px;color:var(--text2);}
.prio-chip b{font-size:13px;color:var(--text);}
.prio-chip em{font-style:normal;font-weight:700;color:var(--text);}
.prio-chip i{font-style:normal;opacity:.75;}
.prio-chip.b-amber{border-color:rgba(240,192,96,.45);background:rgba(240,192,96,.10);}
.prio-chip.b-red{border-color:rgba(248,113,113,.45);background:rgba(248,113,113,.10);}
.tag{display:inline-block;background:var(--surface2);border:1px solid var(--border);border-radius:6px;padding:2px 8px;font-size:12px;color:var(--text2);margin:2px 4px 2px 0;}
/* 搜索 */
.search{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:7px 11px;border-radius:7px;font-size:13px;min-width:200px;}
/* 信息分层（扫码报工） */
.split{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.info-box{border-radius:10px;padding:14px 18px;border:1px solid var(--border);}
.info-back{background:rgba(108,118,129,.08);border-color:rgba(108,118,129,.4);}
.info-front{background:rgba(126,231,135,.07);border-color:rgba(126,231,135,.35);}
.info-box h4{margin:0 0 10px;font-size:14px;}
.info-back h4{color:var(--text3);}
.info-front h4{color:var(--green);}
.info-box ul{margin-left:18px;font-size:13px;}
.info-box li{margin-bottom:5px;}
/* 二维码 */
.qr-area{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap;}
.qr-canvas{background:#fff;border-radius:8px;padding:8px;}
.qr-meta{font-size:13px;color:var(--text2);}
.code-pill{display:inline-block;background:var(--surface2);border:1px solid var(--border);padding:4px 12px;border-radius:6px;font-family:monospace;color:var(--teal);font-size:14px;word-break:break-all;max-width:520px;}
/* 空态 / 提示 */
.empty{text-align:center;color:var(--text3);padding:30px;font-size:13px;}
.hint{background:rgba(240,192,96,.08);border:1px solid rgba(240,192,96,.3);border-radius:8px;padding:12px 16px;font-size:13px;color:var(--amber);margin-bottom:14px;}
.note{font-size:12px;color:var(--text3);line-height:1.7;margin-top:8px;}
.warn{background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.3);border-radius:8px;padding:12px 16px;font-size:13px;color:var(--red);margin-bottom:14px;}
/* 拼版纸宽超幅面上限提示（开单表单内） */
.warn-box{grid-column:1/-1;background:rgba(248,113,113,.10);border:1px solid rgba(248,113,113,.35);border-radius:7px;padding:8px 12px;font-size:12px;color:var(--red);margin:2px 0;}
/* 开单：拼版/卷装参数区块视觉分组 */
.f-sep{grid-column:1/-1;height:1px;background:var(--border);margin:6px 0;}
/* 工序流程 */
.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch;margin-bottom:14px;}
.flow .step{flex:1;min-width:120px;background:var(--surface);border:1px solid var(--border);border-radius:9px;padding:10px 12px;border-top:3px solid var(--teal);}
.flow .step .n{color:var(--teal);font-weight:600;font-size:12px;}
.flow .step .t{font-weight:500;margin:2px 0;}
.flow .step .d{font-size:12px;color:var(--text2);}
.flow .arrow{display:flex;align-items:center;color:var(--text3);}
/* toast */
#toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:var(--surface2);border:1px solid var(--border);color:var(--text);padding:10px 20px;border-radius:8px;font-size:13px;opacity:0;pointer-events:none;transition:opacity .25s;z-index:99;}
#toast.show{opacity:1;}
/* 进度条 */
.pbar{height:8px;background:var(--surface2);border-radius:6px;overflow:hidden;}
.pbar > i{display:block;height:100%;background:linear-gradient(90deg,var(--teal),var(--blue));}
@media(max-width:900px){.sidebar{display:none;}.split{grid-template-columns:1fr;}}

/* ============ V0.2 查单进度看板 ============ */
.wo-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 20px;margin-bottom:14px;}
.wo-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;}
.wo-card-head b{font-size:16px;color:var(--text);}
.wo-card-head .sub{color:var(--text3);font-size:12px;margin-left:6px;}
.wo-card-sub{font-size:13px;color:var(--text2);margin-bottom:6px;}
.wo-card-spec{font-size:13px;color:var(--amber);background:rgba(240,192,96,.07);border-left:3px solid var(--amber);padding:6px 10px;border-radius:4px;margin-bottom:10px;}
.wo-card-pay{font-size:12px;color:var(--text3);margin:8px 0;}
.p-timeline{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin:8px 0 4px;}
.p-step{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:7px;font-size:12.5px;background:var(--surface2);}
.p-dot{width:9px;height:9px;border-radius:50%;background:var(--text3);display:inline-block;}
.p-name{color:var(--text2);}
.p-info{font-size:11px;color:var(--text3);margin-left:2px;}
.p-line{flex:1;min-width:10px;height:2px;background:var(--border);}
.p-step.p-done{background:rgba(126,231,135,.1);}
.p-step.p-done .p-dot{background:var(--green);}
.p-step.p-done .p-name{color:var(--green);}
.p-step.p-doing{background:rgba(88,166,255,.12);}
.p-step.p-doing .p-dot{background:var(--blue);}
.p-step.p-doing .p-name{color:var(--blue);font-weight:500;}
.p-step.p-wait .p-dot{background:var(--text3);}
.wo-card-ops{display:flex;gap:10px;margin-top:10px;}
.qrcode-mini{margin-top:10px;}
.qrcode-mini svg{width:120px;height:120px;background:#fff;border-radius:6px;padding:6px;}

/* ============ V0.2 工单打印模板（无碳复写四联） ============ */
/* 工单纸张尺寸：针式无碳复写连续纸，单张 宽241mm × 高140mm（张总指定） */
:root{
  --sheet-w:241mm;
  --sheet-h:140mm;
}
.wo-copies{font-size:12px;color:var(--text2);background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:8px 14px;margin-bottom:14px;}
.wo-print{display:flex;justify-content:center;}
.wo-sheet{
  width:var(--sheet-w);min-height:var(--sheet-h);background:#fff;color:#14181f;
  border:1px solid #c9ced6;border-radius:4px;padding:9px 11px;box-shadow:0 6px 24px rgba(0,0,0,.18);
  font-size:10.5px;line-height:1.4;
}
.wo-head{display:flex;justify-content:space-between;align-items:flex-end;border-bottom:2px solid #222;padding-bottom:4px;margin-bottom:5px;}
.wo-co{font-size:15px;font-weight:700;letter-spacing:1px;}
.wo-no{font-size:12px;font-weight:600;}
/* 品类标识 + 工单号整行（张总 2026-09-07）：标识黑体大字打在行首，针式复写纸也压得出印子 */
.wo-brand{display:flex;align-items:baseline;gap:10px;border:1.5px solid #222;border-radius:3px;
  padding:2px 6px;margin-bottom:5px;}
.wo-brand-tag{font-size:20px;font-weight:900;letter-spacing:2px;color:#000;
  font-family:"SimHei","Heiti SC","Microsoft YaHei",sans-serif;line-height:1.15;white-space:nowrap;}
.wo-brand-no{font-size:13px;font-weight:800;letter-spacing:.5px;color:#000;white-space:nowrap;}
.wo-meta{margin-bottom:5px;}
.wo-meta td{border:1px solid #aab1bb;font-size:10px;padding:2px 5px;font-weight:700;}
.wo-req{margin-bottom:5px;}
/* 张总 2026-09-07：字要粗一点、明显一点（针式复写纸字迹本来就淡）
   ⚠ .wo-req th 禁止写固定 width——8 列布局下会把字段名列挤成一条缝，字溢出去压在内容上（叠字）。 */
.wo-req th,.wo-req td{border:1px solid #aab1bb;font-size:10px;padding:2px 5px;color:#000;font-weight:700;}
.wo-req th{background:#eef1f5;text-align:center;white-space:nowrap;}
.wo-req td{overflow-wrap:anywhere;word-break:break-word;}
.wo-meta td{border:1px solid #aab1bb;font-size:10px;padding:2px 5px;font-weight:700;}
.wo-sec-title{font-size:11px;font-weight:700;border-left:4px solid #222;padding-left:5px;margin:5px 0 2px;}
.wo-spec{background:#f6f8fa;border:1px dashed #c9ced6;border-radius:5px;padding:4px 6px;font-size:10.5px;min-height:24px;}
.pay-box{display:flex;flex-wrap:wrap;gap:10px;}
.pay-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.pay-g{font-weight:600;font-size:10.5px;}
.pay-item{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:#555;}
.pay-item .cb{width:12px;height:12px;border:1.5px solid #888;border-radius:3px;display:inline-block;}
/* 开单页：原生 checkbox 隐藏，只留自定义的这一个方框；勾中即填黑打✓（原先原生框没隐藏 ⇒ 每选项两个方框，且自定义框永远不勾） */
.pay-item input{display:none;}
.pay-item input:checked + .cb{background:#222;border-color:#222;position:relative;}
.pay-item input:checked + .cb::after{content:"✓";position:absolute;left:1px;top:-3px;color:#fff;font-size:10px;font-weight:700;}
.pay-item.on{color:#14181f;font-weight:600;}
.pay-item.on .cb{background:#222;border-color:#222;position:relative;}
.pay-item.on .cb::after{content:"✓";position:absolute;left:1px;top:-3px;color:#fff;font-size:10px;}
.wo-fee{margin-top:2px;}
.wo-fee th,.wo-fee td{border:1px solid #aab1bb;font-size:10px;padding:2px 5px;text-align:center;}
.wo-fee th{background:#eef1f5;width:56px;}
.wo-fee .wo-total{text-align:left;font-weight:900;font-size:16px;color:#000;letter-spacing:.5px;}
/* 总费用：加粗加重放大，一眼看得见（张总 2026-09-06） */
.wo-total-big{display:inline-block;font-size:15px;font-weight:900;color:#000;letter-spacing:.5px;
  border:1.5px solid #000;border-radius:3px;padding:1px 6px;margin-left:2px;line-height:1.25;
  -webkit-print-color-adjust:exact;print-color-adjust:exact;}
.proc-row{display:flex;flex-wrap:wrap;gap:10px;padding:2px 1px;}
.proc-chk{display:inline-flex;align-items:center;gap:5px;font-size:11px;}
.proc-chk .cb{width:13px;height:13px;border:1.5px solid #888;border-radius:3px;display:inline-block;}
/* 收款方式（2026-09-13 · 需求池[2026-09-02]）：纸质联单「合计之后」的横向勾选行，与工序勾选区同款视觉，不额外撑高 */
.pay-sec{margin-top:5px;border-top:1px dashed #c9ced6;padding-top:4px;}
.pay-sec .pay-box,.pay-sec .pay-item{font-size:11px;}
/* 报工：工序多选（一人包多道工序） */
.proc-pick-box{display:flex;flex-wrap:wrap;gap:8px 16px;padding:4px 0;}
.proc-pick{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;cursor:pointer;user-select:none;}
.proc-pick input{display:none;}
.proc-pick .cb{width:14px;height:14px;border:1.5px solid var(--text3);border-radius:3px;display:inline-block;position:relative;flex-shrink:0;}
.proc-pick input:checked + .cb{background:var(--blue);border-color:var(--blue);}
.proc-pick input:checked + .cb::after{content:"✓";position:absolute;left:2px;top:-3px;color:#fff;font-size:11px;font-weight:700;}
/* 报工记录：工单→工序 分组头 */
.grp-row td{background:rgba(88,166,255,.1);}
/* ---- 米数对账（2026-09-09 工资核算第 2~5 步） ---- */
/* 报工表单顶部「还剩多少米」提示条 */
.rep-hint{margin:8px 0 0;padding:8px 12px;border:1px solid var(--border);border-left:3px solid var(--amber);border-radius:4px;background:rgba(240,192,96,.08);font-size:12.5px;line-height:1.9;}
.rep-hint-t{font-size:13px;color:var(--text);}
.rep-hint-row{padding-left:2px;color:var(--text2);}
/* 分组头里的对账结论：对得上=绿 / 对不上=红粗 */
.m-ok{color:var(--green);}
.m-bad{color:var(--red);font-weight:700;}
.m-bad::before{content:"⚠ ";}
/* 报工记录表里的行内输入框：米数 / 上板数 */
.rep-in{width:84px;padding:3px 6px;font-size:12.5px;border:1px solid var(--border);border-radius:3px;background:var(--surface2);color:var(--text);}
.rep-in:focus{outline:none;border-color:var(--blue);background:var(--surface);}
.rep-in-s{width:56px;text-align:center;}
.wo-foot{display:flex;align-items:flex-end;gap:12px;margin-top:7px;border-top:1px dashed #c9ced6;padding-top:6px;}
.wo-qr svg{width:132px;height:132px;background:#fff;border:1px solid #c9ced6;border-radius:4px;padding:4px;}
.wo-foot-note{font-size:8.5px;color:#555;flex:1;}
/* 通用工艺要求（张总 2026-09-07）：5 条短句 + ★，比正文大一号、最粗字重，外框一围更跳眼 */
.wo-sheet-note{margin-top:5px;border:1.5px solid #000;border-radius:3px;padding:3px 6px;color:#000;
  display:flex;flex-wrap:wrap;align-items:baseline;gap:1px 12px;font-size:11.5px;font-weight:900;letter-spacing:.2px;}
.wo-sheet-note .rq{white-space:nowrap;}
.rec-sum{margin-top:8px;border-collapse:collapse;width:100%;}
.rec-sum td{border:1px solid #aab1bb;padding:5px 10px;font-size:11.5px;}
.rec-sum td:first-child{width:62%;}
.rec-sum .r{text-align:right;}
.rec-close td{background:#eef1f5;font-weight:700;}

/* 二维码容器（扫码报工） */
.qr-holder{display:inline-block;}
.qr-holder svg{width:260px;height:260px;background:#fff;border-radius:8px;padding:8px;}

/* 印刷名称历史联想 */
.suggest{margin-top:6px;max-height:220px;overflow:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface);}
.suggest:empty{display:none;}
.sg-item{padding:7px 12px;font-size:13px;cursor:pointer;display:flex;justify-content:space-between;gap:10px;color:var(--text);}
.sg-item:hover{background:var(--surface2);color:var(--blue);}
.sg-n{color:var(--text3);font-size:12px;white-space:nowrap;}
.sg-empty{padding:8px 12px;font-size:12px;color:var(--text3);}

/* 数据备份页工具类 */
.num{text-align:right;font-variant-numeric:tabular-nums;}
.btn-primary{background:var(--teal);color:#06231f;font-weight:600;}
.btn-primary:hover{filter:brightness(1.08);}
.sum td{font-weight:600;background:var(--surface2);}
.ok{background:rgba(72,187,120,.1);border:1px solid rgba(72,187,120,.35);border-radius:8px;padding:12px 16px;font-size:13px;color:var(--green);margin-top:12px;}

/* ============ 打印隔离（仅打印工单模板） ============ */
@media print{
  .topbar,.sidebar,#toast,.no-print{display:none!important;}
  body{background:#fff;color:#000;}
  .layout{display:block;max-width:none;margin:0;}
  .main{padding:0;}
  .wo-copies{display:none;}
  .wo-print{display:block;justify-content:flex-start;}
  .wo-sheet{width:100%;min-height:auto;box-shadow:none;border:none;padding:0 4px;}
  .wo-sheet *{color:#000!important;}
  /* 针式打印机打无碳复写纸只能单色：底色/斜纹打出来就是一片灰点糊块 ⇒ 打印时一律去掉，只留黑字+表格线 */
  .wo-req th{background:#fff!important;color:#000!important;}
  .wo-req td,.wo-meta td{background:#fff!important;}
  .wo-spec{background:#fff!important;border-style:solid;}
  @page{size:var(--sheet-w) var(--sheet-h);margin:8mm;}
}

/* ============ 开单页（填单子 + 实时预览） ============ */
.create-wrap{display:flex;gap:22px;align-items:flex-start;}
.create-form{flex:1.6;min-width:0;}
.create-preview{flex:1;min-width:0;background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:14px;max-height:calc(100vh - 60px);overflow:auto;}
.create-preview .pp-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;color:var(--text2);cursor:pointer;user-select:none;}
.create-preview .pp-toggle{margin-left:auto;font-size:12px;color:var(--blue);border:1px solid var(--border);border-radius:6px;padding:2px 9px;white-space:nowrap;}
.create-preview.collapsed .pp-head{margin-bottom:0;}
.create-preview.collapsed .pp-body{display:none;}
.create-preview .pp-head .live{width:8px;height:8px;border-radius:50%;background:var(--green);}
.create-preview .wo-print{justify-content:flex-start;}
.create-preview .wo-sheet{zoom:.82;color:#14181f;}
.create-preview .wo-sheet *{color:#14181f!important;}
/* 右侧浮动参考面板（张总 2026-09-06：被引用单据常驻右侧，人工对照着填）
   2026-09-06 二改：改成可拖动浮窗——挡住要填的字段时按住标题栏就能挪走，位置记在本机。
   脱离文档流后中栏让出的宽度自动归表单，表单不再被挤窄。 */
.create-ref{position:fixed;top:74px;right:14px;width:300px;z-index:60;background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:14px;max-height:calc(100vh - 96px);overflow:auto;box-shadow:0 8px 28px rgba(0,0,0,.32);}
.create-ref.dragging{opacity:.88;box-shadow:0 14px 40px rgba(0,0,0,.45);}
.create-ref .rp-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;color:var(--text2);cursor:grab;user-select:none;}
.create-ref.dragging .rp-head{cursor:grabbing;}
.create-ref .rp-grip{width:10px;height:14px;flex:none;background-image:radial-gradient(circle,var(--text3) 1px,transparent 1px);background-size:5px 5px;opacity:.85;}
.create-ref .rp-dot{width:8px;height:8px;border-radius:50%;background:var(--amber);flex:none;}
.create-ref .rp-reset{margin-left:auto;font-size:11px;color:var(--text3);background:transparent;border:1px solid var(--border);border-radius:5px;padding:1px 7px;cursor:pointer;flex:none;}
.create-ref .rp-reset:hover{color:var(--blue);border-color:var(--blue);}
.create-ref .rp-toggle{font-size:12px;color:var(--blue);border:1px solid var(--border);border-radius:6px;padding:2px 9px;white-space:nowrap;}
.create-ref.collapsed .rp-head{margin-bottom:0;}
.create-ref.collapsed .rp-body{display:none;}
.rp-price{background:rgba(240,192,96,.12);border:1px solid rgba(240,192,96,.35);border-radius:8px;padding:10px 12px;margin-bottom:12px;}
.rp-price-lb{font-size:12px;color:var(--text2);}
.rp-price-v{font-size:22px;font-weight:700;color:var(--amber);line-height:1.3;}
.rp-price-tip{font-size:11px;color:var(--text3);}
.rp-sec{font-size:12px;color:var(--text3);margin:12px 0 6px;padding-bottom:4px;border-bottom:1px solid var(--border);}
.rp-sec.ok{color:var(--green);}
.rp-row{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px dashed rgba(0,0,0,.07);font-size:13px;}
.rp-lb{color:var(--text2);width:74px;flex:none;}
.rp-v{color:var(--text);flex:1;min-width:0;word-break:break-all;}
.rp-row.ok .rp-v{color:var(--green);}
.rp-ok{font-size:11px;color:var(--green);border:1px solid rgba(126,231,135,.4);border-radius:5px;padding:1px 6px;flex:none;}
.rp-fill{font-size:11px;color:var(--blue);background:transparent;border:1px solid var(--border);border-radius:5px;padding:1px 8px;cursor:pointer;flex:none;}
.rp-fill:hover{border-color:var(--blue);}
/* 非标准写法（张总 2026-09-06 拍板）：老单/客户的写法不在标准下拉里 ⇒ 标黄提示人来判断，不自动归一、不自动填 */
.rp-row.warn{background:rgba(240,192,96,.10);border-radius:6px;padding-left:6px;padding-right:6px;}
.rp-row.warn .rp-v{color:var(--amber);}
.rp-bad{font-size:11px;color:var(--amber);background:transparent;border:1px solid rgba(240,192,96,.5);border-radius:5px;padding:1px 8px;cursor:help;flex:none;white-space:nowrap;}
.rp-empty{font-size:12px;color:var(--text3);padding:8px 0;}
.span2{grid-column:span 2;}
.span3{grid-column:span 3;}
.field textarea{resize:vertical;min-height:54px;}
/* 预览默认收起 ⇒ 只占头部一条，把宽度让给表单与参考面板（三栏并存） */
.create-preview.collapsed{flex:0 0 300px;max-height:none;}
@media(max-width:1100px){.create-wrap{flex-direction:column;}.create-preview,.create-preview.collapsed{position:static;width:100%;max-height:none;}.create-ref{left:14px;right:14px;width:auto;}.span3{grid-column:span 2;}}

/* ============ 历史工单库 ============ */
.kv{border-collapse:collapse;width:100%;font-size:13px;}
.kv th{background:var(--surface2);color:var(--blue);font-weight:500;text-align:left;padding:8px 11px;border:1px solid var(--border);width:96px;white-space:nowrap;}
.kv td{padding:8px 11px;border:1px solid var(--border);color:var(--text);}
.kv tr td:nth-child(4n){border-right:2px solid var(--border);}
.hist-sum{font-size:13px;color:var(--text2);margin:6px 0 10px;}
.hist-sum b{color:var(--teal);}
.pager{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;align-items:center;}
.pager .cur{font-size:12px;color:var(--text2);margin:0 4px;}
.hist-block{margin-top:18px;}
.hist-block-title{font-size:13px;font-weight:500;color:var(--amber);margin-bottom:8px;}
.r{text-align:right!important;}

/* 专色动态录入 */
.spot-box{display:flex;flex-direction:column;gap:6px;margin:2px 0 4px;}
/* 开单：分组小标题 / 多列拼版（报价软件口径补入项） */
.sec-line{grid-column:1/-1;font-size:12px;font-weight:600;color:var(--text2);border-left:3px solid var(--blue);padding-left:8px;margin:8px 0 2px;}
.cb-line{display:flex;align-items:center;min-height:32px;}
.cb-inline{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text);cursor:pointer;user-select:none;}
.cb-inline input{display:none;}
.cb-inline .cb{width:14px;height:14px;border:1.5px solid var(--text3);border-radius:3px;display:inline-block;position:relative;flex-shrink:0;}
.cb-inline input:checked + .cb{background:var(--blue);border-color:var(--blue);}
.cb-inline input:checked + .cb::after{content:"✓";position:absolute;left:2px;top:-3px;color:#fff;font-size:11px;font-weight:700;}
.mul-col-box{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:12px;align-items:center;background:var(--surface2);border:1px dashed var(--border);border-radius:7px;padding:9px 12px;margin:2px 0;}
.mc-row{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text2);}
.mc-row input{width:76px;background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:4px 7px;font-size:12px;}
.mc-hint{font-size:11px;color:var(--amber);}
.spot-row{display:flex;gap:8px;align-items:center;}
.spot-row .spot-idx{font-size:12px;color:var(--text3);min-width:46px;}
.spot-row input{flex:1;}

/* 曝光二维码 / 打印双码 */
.expose-qr{display:inline-block;text-align:center;margin:6px 0;}
.expose-qr .qr-cap{font-size:11px;color:var(--text3);margin-top:2px;}
.wo-foot{display:flex;gap:28px;flex-wrap:wrap;}
.qr-col{flex:1;min-width:200px;}

/* ============ 登录 / 用户 / 作废 / 完工 ============ */
.login-wrap{display:flex;justify-content:center;padding:60px 16px;}
.login-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:34px 38px;width:100%;max-width:380px;box-shadow:0 10px 40px rgba(0,0,0,.35);}
.login-logo{font-size:17px;font-weight:600;color:var(--blue);text-align:center;}
.login-sub{font-size:12px;color:var(--text2);text-align:center;margin-top:6px;margin-bottom:14px;}
.login-err{color:var(--red);font-size:12.5px;min-height:18px;margin:4px 0 2px;}
.login-tip{background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:12.5px;color:var(--text2);line-height:1.5;margin-top:10px;}
.login-tip b{color:var(--text1);}
.login-card .field{margin-bottom:12px;}
/* 登录页快捷账号（张总 2026-09-07：点名字直接登录，不用手打） */
.login-quick-row{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 12px;}
.login-quick{font-size:13px!important;padding:5px 12px!important;}
.dot-new{font-size:10.5px;color:var(--amber);font-weight:600;}
#top-user{color:var(--text2);font-size:13px;white-space:nowrap;}
.wo-void{opacity:.72;}
.void-banner{background:rgba(248,113,113,.14);border:1px solid rgba(248,113,113,.35);color:var(--red);padding:8px 14px;border-radius:8px;font-size:13px;margin-bottom:10px;}
.print-void{margin-bottom:14px;}
.amend-banner{background:rgba(88,166,255,.12);border:1px solid rgba(88,166,255,.32);color:var(--blue);padding:9px 14px;border-radius:8px;font-size:13px;margin-bottom:12px;}
.quote-banner{background:rgba(35,191,133,.12);border:1px solid rgba(35,191,133,.32);color:var(--green);padding:9px 14px;border-radius:8px;font-size:13px;margin-bottom:12px;}
.hist-banner{background:rgba(210,153,34,.12);border:1px solid rgba(210,153,34,.36);color:#b8860b;padding:9px 14px;border-radius:8px;font-size:13px;margin-bottom:12px;}
.finish-box{margin-top:10px;}
.finish-form{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:14px 16px;display:grid;gap:10px;}
.finish-form .field{display:flex;flex-direction:column;gap:4px;}
.finish-form .chk{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text2);}
.chk{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text2);}
.chk input{width:auto;}

/* ===== 联单选版器（张总 2026-09-06：在真实联单上点选，取代字段归属表）===== */
.sd-hint{color:var(--text2);font-size:13px;line-height:1.8;margin-bottom:12px;}
.sd-hint b{color:var(--text);}
.sd-stat{margin-left:auto;color:var(--text2);font-size:13px;}
.sd-stat b{color:var(--green);font-size:15px;}
.sd-stat b.warn{color:var(--amber);}
.sd-offbar{margin-top:10px;padding:8px 12px;border-radius:7px;background:rgba(240,192,96,.1);border:1px solid rgba(240,192,96,.3);color:var(--amber);font-size:12px;}
/* 纸张：241 × 140 mm 真实比例，白底黑字（跟真打出来一样） */
.sd-paper{width:100%;max-width:820px;aspect-ratio:241/140;background:#fff;color:#000;border:1px solid #666;
  padding:8px 10px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.35);}
.sd-paper [data-sd]{cursor:pointer;border-radius:2px;transition:.1s;}
.sd-paper [data-sd]:hover{outline:2px solid #185FA5;outline-offset:-2px;background:#E6F1FB;}
/* 灰显 = 已取消（不打印）。选版器专用，打印输出里不会出现这个 class */
.sd-paper .sd-off{background:#ececec !important;color:#9aa0a6 !important;text-decoration:line-through;
  border:1px dashed #b7b7b7;opacity:.9;}
.sd-ib{border-radius:2px;}
.sd-legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:12px;color:var(--text2);font-size:12px;align-items:center;}
.sd-legend .sw{display:inline-block;width:12px;height:12px;border-radius:2px;margin-right:5px;vertical-align:-1px;}
.sd-legend .sw.on{background:var(--surface2);border:1px solid var(--border);}
.sd-legend .sw.off{background:#ececec;border:1px dashed #b7b7b7;}
.sd-grp{margin-bottom:12px;}
.sd-grp-t{color:var(--text3);font-size:12px;margin-bottom:6px;}
.sd-list{display:flex;flex-wrap:wrap;gap:6px;}
.sd-chip{background:var(--surface2);color:var(--text3);border:1px solid var(--border);
  padding:4px 10px;border-radius:13px;font-size:12px;cursor:pointer;text-decoration:line-through;}
.sd-chip:hover{border-color:var(--blue);}
.sd-chip.on{background:rgba(126,231,135,.12);color:var(--green);border-color:rgba(126,231,135,.35);text-decoration:none;}

/* ==== 开单：顶部「这份单按哪一类开？」大按钮（张总 2026-09-08：一上来先选它）==== */
.cat-pick-row{margin-bottom:6px;}
.cat-pick-row .cat-pick-label{font-size:16px!important;font-weight:800!important;color:var(--blue)!important;}
.cat-pick{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:8px;}
.cat-btn{background:var(--surface2);color:var(--text);border:2px solid var(--border);border-radius:10px;
  padding:12px 24px;font-size:18px;font-weight:800;cursor:pointer;transition:.15s;font-family:inherit;}
.cat-btn:hover{border-color:var(--blue);color:var(--blue);}
.cat-btn.on{background:var(--blue);color:#fff;border-color:var(--blue);box-shadow:0 3px 10px rgba(22,104,220,.25);}
.cat-pick-tip{font-size:12px;color:var(--text2);}
/* 成品尺寸长/宽 + 成品数量：红字加粗加大（张总 2026-09-08） */
.emph-red{color:var(--red)!important;font-weight:800!important;font-size:18px!important;}
/* 报价管理：状态筛选 chips */
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0;}
.chip{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:16px;padding:5px 14px;font-size:13px;cursor:pointer;}
.chip.on{background:var(--teal);color:#fff;border-color:var(--teal);}
.inp{border:1px solid var(--border);border-radius:8px;padding:6px 10px;font-size:13px;background:var(--surface);color:var(--text);}
.ralign{text-align:right;}
.muted{color:var(--text3);}
/* 报价核对预览：按大类分区的只读字段表 */
.quote-view{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin-top:8px;}
.q-group{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;}
.q-gt{background:var(--surface2);padding:7px 12px;font-weight:600;font-size:13px;border-bottom:1px solid var(--border);}
.q-rows{padding:6px 12px;}
.q-row{display:flex;justify-content:space-between;gap:12px;padding:4px 0;border-bottom:1px dashed var(--border);font-size:13px;}
.q-row:last-child{border-bottom:none;}
.q-k{color:var(--text2);flex:0 0 auto;}
.q-v{color:var(--text);font-weight:500;text-align:right;word-break:break-all;}

/* 报工单·客户要求标准表（随单展示 · 2026-09-13） */
.qreq-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px;margin-top:8px;}
.qreq{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;}
.qreq-h{font-size:13px;margin-bottom:6px;}
.qreq-h .muted{margin-top:2px;font-size:12px;line-height:1.8;}
.qreq-t{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed;}
.qreq-t th{width:78px;text-align:left;vertical-align:top;font-weight:600;color:var(--text2);padding:3px 8px 3px 0;white-space:nowrap;}
.qreq-t td{color:var(--text);padding:3px 0;word-break:break-all;}
.qreq-t tr+tr th,.qreq-t tr+tr td{border-top:1px dashed var(--border);}


