/* 打印版式 + 各 tab 专属样式（多方审图 / 规格库含气泡图 / QC 分栏 / 系统审查 / 3D） */
#ai-drawing-workflow,#ai-3d-workflow{display:none !important}
.ai-start-actions{display:flex; flex-wrap:wrap; gap:var(--s-2)}
.ai-upload-dialog header p{margin:4px 0 0; color:var(--mut); font-size:var(--t-sm)}
.ai-task-row-shell.queue-flash .ai-task-row{animation:queue-flash 1.8s ease}
@keyframes queue-flash{
  0%,35%{background:#fff1ad; box-shadow:0 0 0 3px rgba(205,154,0,.25)}
  100%{background:var(--surface); box-shadow:none}
}
@media print {
  @page{size:A4; margin:14mm}
  body{background:#fff; display:block}
  /* #tab-speclib 不整块隐藏：规格库里的检验气泡图要能打印成首件检验单（见文末打印块） */
  aside.side,
  .topbar, #upload-card, #edit-card, #tab-dashboard, #tab-system, #ai-3d-workflow, .report-toolbar, .report-aux{display:none !important}
  main{max-width:none; padding:0; display:block}
  #report-card{box-shadow:none; border:0; border-radius:0; padding:0}
  .report-head{border-bottom-color:#000}
  .finding, .purpose-box, .rf-clean, .report-head, .summary{page-break-inside:avoid}
  .rf-group > h3{page-break-after:avoid}
  .report-foot{page-break-inside:avoid; margin-top:28px; border-top:1px solid #999}
}

/* 多方审图（多模型交叉对比）*/
.panel-review{border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2); padding:12px 14px; margin:var(--s-4) 0}
.panel-review h4{margin:0 0 10px; font-size:var(--t-xs); font-weight:700; letter-spacing:.4px; text-transform:uppercase; color:var(--mut); display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.model-chip{font-family:var(--mono); font-size:var(--t-xs); padding:2px 8px; border-radius:var(--r-pill); border:1px solid var(--line)}
.model-chip.on{background:var(--ok-bg); color:var(--ok-text); border-color:transparent}
.model-chip.off{background:var(--bad-bg); color:var(--bad-text); border-color:transparent}
.cmp{width:100%; border-collapse:collapse; font-size:var(--t-sm); overflow-x:auto; display:block}
.cmp th, .cmp td{border:1px solid var(--line); padding:5px 8px; text-align:left; vertical-align:top; white-space:nowrap}
.cmp th{background:var(--surface); font-weight:600; color:var(--mut); font-size:var(--t-xs)}
.cmp td.fld{font-weight:600; color:var(--txt-2)}
.cmp tr.disagree td{background:var(--bad-bg)}
.cmp tr.disagree td.fld::after{content:"⚠ 分歧"; margin-left:6px; font-size:var(--t-xs); color:var(--bad-text); font-weight:700}
.cmp .mono{font-family:var(--mono); font-size:var(--t-xs)}
.panel-note{margin-top:8px; font-size:var(--t-xs); color:var(--faint)}

/* 规格库：左零件清单 / 右零件档案（规格明细 + 图纸 + 检验气泡图） */
.spec-lib{display:grid; grid-template-columns:260px 1fr; gap:12px}
@media (max-width:640px){.spec-lib{grid-template-columns:1fr}}
.spec-parts{max-height:520px; overflow:auto; border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2)}
.spec-part{padding:8px 12px; cursor:pointer; border-bottom:1px solid var(--line); display:flex; justify-content:space-between; gap:8px; font-size:var(--t-sm)}
.spec-part:hover{background:var(--surface)}
.spec-part.active{background:var(--ok-bg); color:var(--ok-text)}
.spec-part .cnt{color:var(--faint); font-family:var(--mono); font-size:var(--t-xs)}
.spec-detail{border:1px solid var(--line); border-radius:var(--r-md); padding:12px 14px; min-height:120px}
.spec-part-title{margin:0 0 var(--s-3); font-size:var(--t-md); word-break:break-all}
.spec-sec{margin:var(--s-5) 0 var(--s-2); font-size:var(--t-sm); font-weight:700; color:var(--txt-2);
  border-left:3px solid var(--accent); padding-left:9px; display:flex; align-items:center; gap:8px}
.spec-sec:first-of-type{margin-top:0}
.spec-sec small{font-weight:500; color:var(--faint); font-family:var(--mono); font-size:var(--t-xs)}
table.tbl td.spec-none{color:var(--mut); text-align:center; padding:var(--s-4) 0}
/* 规格库上传区：其它 .drop 都是 .uploads 网格项（自动块化），此处独立摆放需显式块级，否则 label 保持 inline 会错位 */
#drop-spec{display:block; margin-bottom:var(--s-3)}
/* 规格库图纸预览：与 QC 分栏同款缩放/拖拽交互，但高度固定不吃满屏 */
.spec-viewer{margin:0 0 var(--s-3)}
.spec-viewer .qc-viewport{position:relative; height:360px; overflow:hidden; background:#fdfdfb;
  cursor:grab; touch-action:none}
.spec-viewer .qc-viewport.dragging{cursor:grabbing}
.spec-viewer .qc-viewport img{position:absolute; inset:0; width:100%; height:100%; max-height:none;
  object-fit:contain; transform-origin:0 0; will-change:transform; pointer-events:none}
.spec-viewer .pv-tag{text-decoration:none; color:var(--accent-text); font-weight:600}
.spec-viewer .pv-tag:hover{text-decoration:underline}

/* 规格库·零件档案增删改：详情顶部工具条 + 行内小按钮 + 行内编辑输入 */
.spec-part-toolbar{display:flex; align-items:center; gap:var(--s-3); flex-wrap:wrap; margin:0 0 var(--s-3)}
.spec-part-toolbar .spec-part-title{margin:0; flex:1 1 auto; min-width:0}
.spec-sec #spec-row-status, .spec-part-toolbar #spec-part-status{font-weight:500}
.mini-btn{appearance:none; cursor:pointer; font:inherit; font-size:var(--t-xs); font-weight:600;
  padding:3px 9px; border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--surface); color:var(--txt-2); white-space:nowrap;
  transition:background var(--dur), color var(--dur), border-color var(--dur)}
.mini-btn:hover{background:var(--surface-2); color:var(--accent-text); border-color:var(--accent-line)}
.mini-btn.danger{color:var(--bad-text)}
.mini-btn.danger:hover{background:var(--bad-bg); color:var(--bad); border-color:var(--bad)}
td.sr-ops{white-space:nowrap; display:flex; gap:6px}
table.tbl input.sr-in{width:88px; font-family:var(--mono); font-size:var(--t-sm); padding:4px 7px;
  border:1px solid var(--line); border-radius:var(--r-sm); background:var(--surface); color:var(--txt)}
table.tbl input.sr-in:focus{outline:2px solid var(--accent-line); border-color:var(--accent-2)}
button.run.ghost.danger{color:var(--bad-text); border-color:var(--bad-bg)}
button.run.ghost.danger:hover:not(:disabled){background:var(--bad-bg); color:var(--bad)}

/* 供应商评估·进货批次记录行：可点、悬停高亮 */
tr.sup-batch-row{cursor:pointer}
tr.sup-batch-row:hover td{background:var(--accent-bg)}
tr.sup-batch-row:focus{outline:2px solid var(--accent-line); outline-offset:-2px}

/* QC 规格行实测输入 + 供应商字典 */
table.tbl input.meas-in{width:92px; font-family:var(--mono); font-size:var(--t-sm); padding:4px 7px;
  border:1px solid var(--line); border-radius:var(--r-sm); background:var(--surface); color:var(--txt)}
table.tbl input.meas-in:focus{outline:2px solid var(--accent-line); border-color:var(--accent-2)}
.pill .sup-del{appearance:none; border:0; background:none; cursor:pointer; color:var(--bad-text);
  font-weight:700; font-size:var(--t-sm); padding:0 2px; line-height:1}
.pill .sup-del:hover{color:var(--bad)}
#sup-new{font-family:var(--font); font-size:var(--t-sm); padding:7px 9px; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--surface); color:var(--txt)}
#sup-new:focus{outline:2px solid var(--accent-line); border-color:var(--accent-2)}

/* 系统审查（Tab 5）：BOM 对账行态 + 零件等级网格 */
/* 自适应换行而非固定 5 列：原来固定列宽合计约 850px，而断点只到 760px，平板 768 恰好
   卡在断点之上 → 整页横向溢出 82px，下拉框被切、「新建系统草稿」按钮被挤出屏幕外。
   auto-fit 让它在任意宽度自然折行，不必再逐个断点去追。 */
.system-task-meta{display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr));
  gap:var(--s-3); margin-bottom:var(--s-3); align-items:end}
.system-task-meta label{display:flex; flex-direction:column; gap:3px; color:var(--mut);
  font-size:var(--t-xs); font-weight:600}
.system-task-meta > *{min-width:0}
.system-task-meta input,.system-task-meta select,.system-findings-pane select{height:34px;
  border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface);
  width:100%; min-width:0; color:var(--txt); padding:0 8px; font:inherit; font-size:var(--t-sm)}
.system-review-workspace{min-width:0}
.system-task-head{display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s-3);
  padding-bottom:var(--s-3); border-bottom:1px solid var(--line)}
.system-task-head h2{margin:0; font-size:var(--t-lg)}
.system-task-head p{margin:2px 0 0; color:var(--mut); font-size:var(--t-xs)}
.system-stage-strip{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); border-bottom:1px solid var(--line)}
.system-stage{padding:10px; border-right:1px solid var(--line)}
.system-stage:last-child{border-right:0}
.system-stage b{display:block; font-size:var(--t-xs); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.system-stage span{display:block; margin-top:2px; color:var(--mut); font:500 var(--t-xs)/1.3 var(--mono)}
.system-stage.running{background:var(--warn-bg)}
.system-stage.succeeded{background:var(--ok-bg)}
.system-stage.failed{background:var(--bad-bg)}
.system-stage.skipped{background:var(--warn-bg)}
.system-review-grid{display:grid; grid-template-columns:230px minmax(430px,1fr) minmax(330px,.72fr);
  min-height:620px; border-bottom:1px solid var(--line)}
.system-file-tree{position:static; height:auto; background:var(--surface-2); border-right:1px solid var(--line);
  padding:var(--s-3); overflow:auto}
.system-file-tree h3,.system-findings-pane h3{margin:0; font-size:var(--t-sm)}
.system-file{margin-top:var(--s-2)}
.system-file > b{display:block; font:600 var(--t-xs)/1.4 var(--mono); word-break:break-all}
.system-pages{display:flex; flex-wrap:wrap; gap:4px; margin-top:5px}
.system-page-button{appearance:none; min-width:28px; height:26px; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--surface); color:var(--txt-2); cursor:pointer;
  font:600 var(--t-xs)/1 var(--mono)}
.system-page-button:hover,.system-page-button.active{border-color:var(--accent); color:var(--accent-text); background:var(--accent-bg)}
.system-page-view{min-width:0; padding:var(--s-3); background:#eef1ee}
.system-page-view > header{display:flex; justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-2);
  color:var(--txt-2); font-size:var(--t-xs)}
.system-page-frame{position:relative; min-height:560px; display:flex; align-items:flex-start;
  justify-content:center; overflow:auto; background:#fff; border:1px solid var(--line)}
.system-page-frame img{display:block; max-width:100%; height:auto}
.system-evidence-box{position:absolute; border:3px solid var(--bad); background:rgba(198,56,50,.08);
  pointer-events:none}
.system-findings-pane{position:static; height:auto; padding:var(--s-3); border-left:1px solid var(--line);
  overflow:auto; background:var(--surface)}
.system-findings-pane .band-head{align-items:flex-start}
.system-finding{appearance:none; width:100%; text-align:left; border:0; border-bottom:1px solid var(--line);
  padding:10px 0; background:transparent; color:var(--txt); cursor:pointer; font:inherit}
.system-finding:hover{background:var(--surface-2)}
.system-finding .head{display:flex; align-items:center; gap:6px}
.system-finding strong{display:block; margin:5px 0 2px; font-size:var(--t-sm)}
.system-finding p{margin:0; color:var(--txt-2); font-size:var(--t-xs)}
.system-finding small{display:block; margin-top:4px; color:var(--mut); font-size:var(--t-xs)}
.system-finding-actions{display:flex; gap:4px; margin-top:7px}
.system-finding-actions select{height:28px; flex:1}
@media (max-width:1250px){
  .system-review-grid{grid-template-columns:190px minmax(380px,1fr)}
  .system-findings-pane{grid-column:1/-1; border-left:0; border-top:1px solid var(--line)}
}
@media (max-width:760px){
  .system-task-meta,.system-review-grid{grid-template-columns:1fr}
  .system-stage-strip{grid-template-columns:1fr}
  .system-stage{border-right:0; border-bottom:1px solid var(--line)}
  .system-file-tree{border-right:0; border-bottom:1px solid var(--line)}
  .system-page-frame{min-height:360px}
}
tr.sys-missing td{background:var(--bad-bg); color:var(--bad-text)}
tr.sys-vmismatch td{background:var(--warn-bg); color:var(--warn-text)}
tr.sys-standard td{color:var(--faint)}
.sys-parts{display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:var(--s-3)}
.sys-part{border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2);
  padding:var(--s-3); display:flex; flex-direction:column; gap:6px}
.sys-part .fn{font-family:var(--mono); font-size:var(--t-xs); color:var(--txt-2); word-break:break-all}
.sys-part .row{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.sys-part .cnt{margin-left:auto; color:var(--mut); font-size:var(--t-xs)}
.sys-grade{display:inline-flex; align-items:center; justify-content:center; min-width:26px; height:26px;
  padding:0 6px; border-radius:var(--r-sm); color:#fff; font-weight:800; background:var(--faint)}

/* QC 读检测表：识别后左图右表分栏（对照图纸填实测） */
@media (min-width:1100px){
  /* main 限宽 1000px：仅该卡在宽屏分栏时用对称负 margin 放宽（最宽 1360，且不超出内容区），不影响其它卡 */
  #qc-sheet-card.qc-split{margin-inline:min(0px, calc((100% - min(1360px, 100vw - 256px)) / 2))}
}
.qc-sheet-body.split{display:grid; grid-template-columns:minmax(0,45fr) minmax(0,55fr);
  gap:var(--s-4); align-items:start; margin-top:var(--s-4)}
.qc-sheet-body.split .qc-viewer{position:sticky; top:12px; height:calc(100vh - 80px);
  margin:0; display:flex; flex-direction:column}
.qc-sheet-body.split .qc-viewport{position:relative; flex:1; overflow:hidden; background:#fdfdfb;
  cursor:grab; touch-action:none}
.qc-sheet-body.split .qc-viewport.dragging{cursor:grabbing}
.qc-sheet-body.split .qc-viewport img{position:absolute; inset:0; width:100%; height:100%; max-height:none;
  object-fit:contain; transform-origin:0 0; will-change:transform; pointer-events:none}
.qc-zoom-tools{position:absolute; right:10px; bottom:10px; display:flex; gap:6px; z-index:2}
.qc-sheet-body:not(.split) .qc-zoom-tools{display:none}
.qc-zoom-tools button{appearance:none; cursor:pointer; min-width:30px; height:28px; padding:0 8px;
  border:1px solid var(--line); border-radius:var(--r-sm); background:var(--surface); color:var(--txt-2);
  font-family:inherit; font-size:var(--t-sm); font-weight:700; box-shadow:var(--sh-1);
  transition:background var(--dur), color var(--dur)}
.qc-zoom-tools button:hover{background:var(--surface-2); color:var(--accent-text)}
@media (max-width:1099.98px){
  .qc-sheet-body.split{grid-template-columns:1fr}
  .qc-sheet-body.split .qc-viewer{position:static; height:auto}
  .qc-sheet-body.split .qc-viewport{flex:none; height:420px}
}

/* 规格库·检验气泡图结果卡：左图右表复用 QC 分栏样式，宽屏同款放宽 */
@media (min-width:1100px){
  #spec-balloon-card{margin-inline:min(0px, calc((100% - min(1360px, 100vw - 256px)) / 2))}
}
.balloon-print-title{display:none}
@media print{
  /* 打印首件检验单：在规格库 tab 下 Ctrl+P / 点按钮均生效（其它 tab 已由 hidden 属性隐藏） */
  #spec-lib-card, #tab-speclib .qc-zoom-tools, #tab-speclib .actions{display:none !important}
  #spec-balloon-card{box-shadow:none; border:0; border-radius:0; padding:0}
  #tab-speclib .balloon-print-title{display:block; text-align:center; font-size:20px; letter-spacing:6px;
    margin:0 0 6mm; border-bottom:2px solid #000; padding-bottom:4mm}
  #tab-speclib .qc-sheet-body.split{display:block; margin-top:0}
  #tab-speclib .qc-viewer{position:static; height:auto; border:1px solid #999; page-break-inside:avoid}
  #tab-speclib .qc-viewport{position:static; overflow:visible; height:auto; flex:none}
  #tab-speclib .qc-viewport img{position:static; width:100%; height:auto; max-height:150mm;
    transform:none !important; object-fit:contain}
  #spec-balloon-table-box{margin-top:6mm}
}

/* 3D 审查工作台（Tab 6）：左列（3D + 零件信息）随右列滚动而固定；右列确定性 + AI 合为一栏 */
@media (min-width:1100px){
  #v3d-result-card{margin-inline:min(0px, calc((100% - min(1360px, 100vw - 256px)) / 2))}
}
button.run.sm{padding:5px 12px; font-size:var(--t-xs)}
.v3d-ws-head{display:flex; align-items:flex-start; justify-content:space-between;
  gap:var(--s-3); margin-bottom:var(--s-3)}
.v3d-ws-title h2{margin:0}
.v3d-ws-sub{display:block; margin-top:2px; color:var(--mut); font-size:var(--t-xs)}
.v3d-body{display:grid; grid-template-columns:minmax(0,58fr) minmax(0,42fr);
  gap:var(--s-4); align-items:start}
.v3d-left{position:sticky; top:12px; align-self:start; display:flex; flex-direction:column;
  gap:var(--s-2); max-height:calc(100vh - 24px)}
.v3d-stage{position:relative; margin:0; flex:1 1 auto; min-height:340px;
  border:1px solid var(--line); border-radius:var(--r-md); overflow:hidden;
  background:var(--surface-2); touch-action:none}
.v3d-stage canvas{display:block; width:100%; height:100%}
.v3d-hint{position:absolute; left:10px; bottom:10px; z-index:2; pointer-events:none;
  font-size:var(--t-xs); color:var(--mut); background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r-pill); padding:3px 10px; box-shadow:var(--sh-1)}
.v3d-stage-tools{display:flex; align-items:center; gap:var(--s-3); flex-wrap:wrap}
.v3d-findings{display:flex; flex-direction:column; gap:var(--s-2); min-width:0}
.v3d-find-head{display:flex; align-items:center; justify-content:space-between;
  gap:var(--s-3); flex-wrap:wrap}
.v3d-find-head .summary{margin-bottom:0}
.v3d-findings .report-disclaimer{margin:var(--s-2) 0 0; color:var(--mut);
  font-size:var(--t-xs); line-height:1.6}
.status.ai{color:var(--accent-text); font-size:var(--t-xs)}
@media (max-width:1099.98px){
  .v3d-body{grid-template-columns:1fr}
  .v3d-left{position:static; max-height:none}
  .v3d-stage{height:420px; flex:0 0 auto; min-height:0}
}
/* 零件信息卡（SolidWorks 式：读自 STEP —— 名称 / 外形尺寸 / 孔清单 / 实体 / 体积）*/
.v3d-part{flex:0 0 auto; border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface); padding:var(--s-3) var(--s-4)}
.v3d-part-head{font-size:var(--t-sm); font-weight:700; color:var(--txt-2)}
.v3d-part-head small{font-weight:500; color:var(--faint)}
.v3d-part-name{margin:2px 0 var(--s-2); font-weight:700; color:var(--txt); word-break:break-all}
.v3d-part-grid{display:grid; grid-template-columns:auto 1fr; gap:2px var(--s-3); margin:0}
.v3d-part-grid dt{color:var(--mut); font-size:var(--t-xs)}
.v3d-part-grid dd{margin:0; font-size:var(--t-xs); color:var(--txt); font-family:var(--mono)}
/* 染色图例（红=壁厚<2mm 等，后端 legend 驱动） */
.v3d-legend{display:flex; flex-wrap:wrap; gap:6px 14px}
.v3d-legend .lg{display:inline-flex; align-items:center; gap:6px; font-size:var(--t-xs); color:var(--txt-2)}
.v3d-legend .sw{width:12px; height:12px; border-radius:3px; border:1px solid var(--line)}
.v3d-legend .sw.red{background:var(--bad)}
.v3d-legend .sw.orange{background:var(--warn)}
/* 统一发现卡：来源标签（实测/AI）+ 置信度 + 赞踩条 */
.badge.src-det{background:var(--ok-bg); color:var(--ok-text)}
.badge.src-ai{background:var(--accent-bg); color:var(--accent-text)}
.finding .conf{margin-left:auto; font-size:var(--t-xs); font-weight:700; color:var(--accent-text);
  background:var(--accent-bg); border-radius:var(--r-pill); padding:2px 9px}
.finding .conf.det{color:var(--ok-text); background:var(--ok-bg)}
.ai-card{cursor:pointer; transition:box-shadow var(--dur), transform var(--dur)}
.ai-card:hover{box-shadow:var(--sh-2); transform:translateY(-1px)}
.ai-card:focus{outline:2px solid var(--accent-line)}
.badge.consensus{background:var(--ok); color:#fff}
.badge.single{background:var(--warn-bg); color:var(--warn-text)}
/* 赞/踩留痕条：确定性卡与 AI 卡共用 */
.fb{display:flex; align-items:center; gap:var(--s-2); margin-top:var(--s-3);
  padding-top:var(--s-2); border-top:1px dashed var(--line)}
.fb-q{font-size:var(--t-xs); color:var(--mut)}
.fb-btn{appearance:none; border:1px solid var(--line); background:var(--surface); cursor:pointer;
  border-radius:var(--r-pill); padding:2px 10px; font-size:var(--t-sm); line-height:1.4;
  transition:background var(--dur), border-color var(--dur), transform var(--dur)}
.fb-btn:hover{transform:translateY(-1px)}
.fb-btn:disabled{cursor:wait; opacity:.65; transform:none}
.fb-up.voted{background:var(--ok-bg); border-color:var(--ok); color:var(--ok-text)}
.fb-down.voted{background:var(--bad-bg); border-color:var(--bad); color:var(--bad-text)}
.fb-status{margin-left:auto; font-size:var(--t-xs); color:var(--ok-text)}
.fb-status.err{color:var(--bad-text)}
/* 锚定红框 overlay：随卡片 bbox × 画布尺寸绝对定位，转动相机即清除 */
.v3d-bbox{position:absolute; z-index:3; pointer-events:none; border:2px solid var(--bad);
  border-radius:4px; box-shadow:0 0 0 2px var(--bad-bg)}

/* ══════════ QC 来料批次检验（Tab 2 升级）══════════ */
.qc-incoming-card .band-head{align-items:center}
#qc-incoming-search{width:min(360px,100%); height:38px; border:1px solid var(--line);
  border-radius:var(--r-md); padding:0 12px; background:var(--surface)}
.qc-incoming-row{cursor:pointer}
.qc-incoming-row:hover td,.qc-incoming-row:focus td{background:var(--accent-bg)}
.qc-incoming-row:focus{outline:2px solid var(--accent); outline-offset:-2px}
.qc-entry-dialog{width:min(1180px,calc(100vw - 32px)); max-width:none}
.qc-entry-dialog form{max-height:min(900px,calc(100vh - 32px)); overflow:auto}
.qc-entry-dialog header p{margin:4px 0 0; color:var(--mut); font-size:var(--t-sm)}
.qc-report-finish{display:flex; justify-content:flex-end; padding-top:var(--s-4)}
.qc-entry-upload{display:grid; grid-template-columns:minmax(260px,1fr) auto; gap:var(--s-3);
  align-items:center; margin-top:var(--s-4)}
.qc-entry-upload .ai-progress,.qc-entry-upload .status{grid-column:1/-1}
.qc-new-fields{padding:var(--s-3); margin-top:var(--s-3); border:1px solid var(--line);
  border-radius:var(--r-md); background:var(--surface-2)}
.qc-new-fields h3{margin:0 0 var(--s-3)}
.qc-entry-result{margin-top:var(--s-4)}
.qc-entry-compare{display:grid; grid-template-columns:minmax(300px,1.15fr) minmax(260px,.85fr);
  gap:var(--s-4); margin-bottom:var(--s-4)}
.qc-entry-compare figure{margin:0; border:1px solid var(--line); border-radius:var(--r-md);
  overflow:hidden; background:var(--surface-2)}
.qc-entry-compare figcaption{padding:8px 12px; color:var(--mut); border-bottom:1px solid var(--line)}
.qc-document-pages{display:flex; gap:6px; flex-wrap:wrap; padding:8px 12px;
  border-bottom:1px solid var(--line); background:var(--surface)}
.qc-document-pages .mini-btn.active{border-color:var(--accent); color:var(--accent-text);
  background:var(--accent-bg); font-weight:700}
.qc-entry-compare img{display:block; width:100%; height:280px; object-fit:contain; background:#fff}
.qc-measurement-note{margin:0 0 var(--s-3); padding:10px 12px; border:1px solid var(--warn);
  border-radius:var(--r-md); color:var(--warn-text); background:var(--warn-bg); font-weight:650}
.qc-unified-table input,.qc-unified-table select{width:100%; min-width:90px; height:34px;
  border:1px solid var(--line); border-radius:var(--r-sm); padding:0 8px; background:var(--surface)}
.qc-tolerance-inputs{display:grid; grid-template-columns:repeat(3,minmax(72px,1fr)); gap:5px}
.qc-tolerance-inputs input{min-width:72px}
.qc-item-name{display:flex; align-items:center; gap:5px}
.qc-item-name input{min-width:0}
.qc-item-name .mini-btn{flex:0 0 auto}
.qc-unified-table tr.needs-judge input{border-color:var(--bad)}
.qc-unified-table th:nth-child(1){width:20%}
.qc-unified-table th:nth-child(2){width:15%}
.qc-unified-table th:nth-child(3){width:12%}
.qc-unified-table th:nth-child(4){width:20%}
.qc-unified-table .qc-deviation{font-family:var(--mono)}
@media (max-width:760px){
  .qc-incoming-table{min-width:720px}
  .qc-entry-upload,.qc-entry-compare{grid-template-columns:1fr}
  .qc-entry-dialog{width:100vw; height:100vh; max-height:none; border-radius:0}
  .qc-entry-dialog form{max-height:100vh}
  .qc-incoming-card .band-head{align-items:stretch; flex-direction:column}
  .qc-tolerance-inputs{grid-template-columns:1fr}
}
.qc-linkage{display:grid; grid-template-columns:minmax(180px,1fr) minmax(150px,.75fr)
  minmax(180px,1fr) auto auto; gap:var(--s-2); align-items:end; margin-bottom:var(--s-3);
  padding-block:var(--s-3); border-block:1px solid var(--line)}
.qc-linkage label{display:flex; flex-direction:column; gap:3px; color:var(--mut);
  font-size:var(--t-xs); font-weight:600}
.qc-linkage select,.qc-quick-product input,.qc-quick-product select{height:34px;
  border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface);
  color:var(--txt); padding:0 8px; font:inherit; font-size:var(--t-sm)}
.qc-quick-product{display:flex; gap:var(--s-2); align-items:center; flex-wrap:wrap;
  padding:var(--s-3); margin-bottom:var(--s-3); background:var(--surface-2);
  border:1px solid var(--line); border-radius:var(--r-md)}
.qc-quick-product input{flex:1 1 160px}
.qc-ai-confirm{display:inline-flex; align-items:center; gap:6px; color:var(--warn-text);
  font-size:var(--t-sm); font-weight:600}
.qc-ai-confirm input{accent-color:var(--accent)}
@media (max-width:1100px){.qc-linkage{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.qc-linkage{grid-template-columns:1fr}}
.qc-linkage > *{min-width:0}
.qc-linkage select,.qc-linkage .cmd{width:100%; min-width:0}
/* 批次表头：交期准时勾选 */
.qc-chk{display:inline-flex; align-items:center; gap:6px; font-family:var(--font);
  font-size:var(--t-sm); color:var(--txt-2); padding-top:2px; cursor:pointer}
.qc-chk input{width:15px; height:15px; accent-color:var(--accent)}

/* 样品切换标签 */
.qc-samples{display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:var(--s-4) 0 var(--s-3)}
.s-tab-wrap{display:inline-flex; align-items:stretch; border:1px solid var(--line);
  border-radius:var(--r-pill); overflow:hidden; background:var(--surface-2)}
.s-tab-wrap.active{border-color:var(--accent-2); background:var(--accent-bg)}
.s-tab{appearance:none; border:0; background:none; cursor:pointer; font:inherit;
  font-size:var(--t-sm); font-weight:600; color:var(--txt-2); padding:6px 14px}
.s-tab-wrap.active .s-tab{color:var(--accent-text)}
.s-del{appearance:none; border:0; border-left:1px solid var(--line); background:none; cursor:pointer;
  color:var(--faint); font-size:var(--t-sm); padding:0 9px; line-height:1}
.s-del:hover{color:var(--bad); background:var(--bad-bg)}
.s-add{appearance:none; border:1px dashed var(--accent-line); border-radius:var(--r-pill);
  background:none; cursor:pointer; font:inherit; font-size:var(--t-sm); font-weight:600;
  color:var(--accent-text); padding:6px 14px}
.s-add:hover{background:var(--accent-bg)}

/* 实测录入表：可编辑单元格 + 判定三态 + 删行 + 类型标签 */
table.qc-sample-tbl td{vertical-align:middle}
table.tbl input.cell-in{width:100%; min-width:64px; font-family:var(--mono); font-size:var(--t-sm);
  padding:5px 7px; border:1px solid var(--line); border-radius:var(--r-sm); background:var(--surface); color:var(--txt)}
table.tbl input.cell-in.num-in{max-width:98px}
table.tbl input.cell-in:focus{outline:2px solid var(--accent-line); border-color:var(--accent-2)}
select.v-sel{font-family:var(--font); font-size:var(--t-sm); padding:5px 6px; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--surface); color:var(--txt); cursor:pointer}
select.v-sel:focus{outline:2px solid var(--accent-line); border-color:var(--accent-2)}
button.row-del{appearance:none; border:1px solid var(--line); border-radius:var(--r-sm); cursor:pointer;
  background:var(--surface); color:var(--faint); width:28px; height:28px; line-height:1; font-size:var(--t-sm)}
button.row-del:hover{color:var(--bad); border-color:var(--bad); background:var(--bad-bg)}
.kind-tag{display:inline-block; font-size:var(--t-xs); font-weight:700; padding:2px 8px; border-radius:var(--r-pill)}
.kind-dim{background:var(--accent-bg); color:var(--accent-text)}
.kind-count{background:var(--ok-bg); color:var(--ok-text)}
.kind-subjective{background:var(--warn-bg); color:var(--warn-text)}

/* 批次报告卡 */
.qc-rep-head{border-bottom:2px solid var(--txt); padding-bottom:var(--s-3); margin-bottom:var(--s-4)}
.report-title-sm{margin:0 0 var(--s-3); font-size:var(--t-xl); letter-spacing:4px; font-weight:700}
.qc-badge{display:inline-flex; align-items:center; gap:9px; padding:8px 18px; border-radius:var(--r-pill);
  font-size:var(--t-md); font-weight:800; color:#fff}
.qc-badge .qb-dot{width:10px; height:10px; border-radius:50%; background:rgba(255,255,255,.9)}
.qc-badge.ok{background:var(--ok)} .qc-badge.bad{background:var(--bad)} .qc-badge.warn{background:var(--warn)}
.qc-rep-meta{display:flex; flex-wrap:wrap; gap:6px 16px; margin-top:var(--s-3); font-size:var(--t-sm); color:var(--txt-2)}
.qc-rep-meta span{font-family:var(--mono)}
.qc-committed{margin:var(--s-3) 0; padding:8px 14px; border-radius:var(--r-md);
  background:var(--ok-bg); color:var(--ok-text); font-weight:700; font-size:var(--t-sm)}
.qc-metrics{display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:var(--s-2); margin:var(--s-4) 0}
@media (max-width:720px){.qc-metrics{grid-template-columns:repeat(3,1fr)}}
@media (max-width:420px){.qc-metrics{grid-template-columns:repeat(2,1fr)}}
.qc-metric{border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2);
  padding:10px 12px; display:flex; flex-direction:column; gap:4px}
.qc-metric .mk{font-size:var(--t-xs); color:var(--mut)}
.qc-metric .mv{font-family:var(--mono); font-size:var(--t-lg); font-weight:700; color:var(--txt)}
.qc-pending{margin:var(--s-3) 0; padding:9px 14px; border-radius:var(--r-md);
  background:var(--warn-bg); color:var(--warn-text); font-weight:600; font-size:var(--t-sm)}
.qc-over{margin:var(--s-4) 0}
.qc-over h4, .qc-samples-detail h4{margin:0 0 var(--s-2); font-size:var(--t-sm); font-weight:700;
  color:var(--txt-2); border-left:3px solid var(--bad); padding-left:9px}
.qc-samples-detail h4{border-left-color:var(--accent)}
.qc-over-tbl tbody td{color:var(--bad-text); font-weight:600}
.qc-sample{border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface-2);
  margin-bottom:var(--s-2); padding:2px var(--s-3)}
.qc-sample > summary{cursor:pointer; font-weight:600; font-size:var(--t-sm); padding:8px 0;
  display:flex; align-items:center; gap:10px}
.qc-sv{font-size:var(--t-xs); font-weight:700; padding:2px 9px; border-radius:var(--r-pill); color:#fff}
.qc-sv.ok{background:var(--ok)} .qc-sv.bad{background:var(--bad)} .qc-sv.warn{background:var(--warn)}
.man-flag{margin-left:6px; font-size:var(--t-xs); color:var(--warn-text); font-weight:700}

@media print{
  /* 打印本次批次报告：QC tab 下点打印，只出报告卡；折叠样品明细一并展开 */
  #qc-sheet-card, #tab-qc .qc-zoom-tools{display:none !important}
  #qc-report-card{box-shadow:none; border:0; border-radius:0; padding:0}
  #qc-report-card .qc-sample .tbl-wrap{display:block !important}
  .qc-metrics, .qc-over, .qc-sample, .qc-rep-head{page-break-inside:avoid}
}

/* ══════════ AI 审查：我的审查任务列表 + 任务详情弹窗（Phase 2）══════════ */
.ai-tasklist-card{margin-bottom:var(--s-4)}
.ai-tasklist-head{display:flex; align-items:center; justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-3)}
.ai-tasklist-head h3{margin:0; font-size:var(--t-md)}
.ai-tasklist-head small{font-weight:500; color:var(--faint); font-size:var(--t-xs)}
.ai-task-list{display:flex; flex-direction:column; gap:var(--s-2); max-height:320px; overflow:auto}
.ai-task-list .empty{color:var(--mut); font-size:var(--t-sm); padding:var(--s-4); text-align:center;
  border:1px dashed var(--line); border-radius:var(--r-md)}
.ai-empty-state{display:grid; justify-items:center; gap:var(--s-2); background:var(--surface-2)}
.ai-empty-mark{display:grid; place-items:center; width:42px; height:42px; border-radius:var(--r-pill);
  color:var(--accent-text); background:var(--accent-bg); font:700 var(--t-lg)/1 var(--mono)}
.ai-empty-state b{color:var(--txt); font-size:var(--t-sm)}
.ai-empty-state span{max-width:38ch}
.ai-task-row{display:flex; align-items:center; justify-content:space-between; gap:var(--s-3);
  width:100%; text-align:left; cursor:pointer; appearance:none;
  border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface);
  padding:var(--s-3) var(--s-4); transition:background var(--dur), border-color var(--dur), transform var(--dur)}
.ai-task-row:hover{background:var(--surface-2); border-color:var(--accent-line); transform:translateY(-1px)}
.ai-task-row:focus-visible{outline:2px solid var(--accent-line)}
.ai-task-row.locked{cursor:default}
.ai-task-row.locked:hover{transform:none; border-color:var(--line)}
.compact-button[aria-disabled="true"]{cursor:default}
.ai-task-main{display:flex; flex-direction:column; gap:2px; min-width:0}
.ai-task-main b{color:var(--txt); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:46ch}
.ai-task-main small{color:var(--mut); font-size:var(--t-xs)}
.tier.muted{background:var(--surface-3); color:var(--mut)}
.system-task-list-card{margin-top:var(--s-4)}
.system-task-progress{display:block;flex:0 0 112px;height:7px;border-radius:var(--r-pill);
  background:var(--surface-3);overflow:hidden}
.system-task-progress>span{display:block;height:100%;border-radius:inherit;background:var(--accent)}
@media(max-width:640px){.system-task-progress{flex-basis:72px}}

/* 任务中心行：主按钮 + 完成/取消小按钮并列 */
.task-row{display:flex; align-items:center; gap:var(--s-2)}
.task-row .task-open{flex:1 1 auto; min-width:0}
.task-row-ops{display:flex; gap:6px; flex:0 0 auto}

/* 任务详情弹窗 */
.task-detail-dialog{border:0; border-radius:var(--r-lg); padding:0; width:min(680px, 94vw);
  max-height:86vh; box-shadow:var(--sh-2); background:var(--surface); color:var(--txt)}
.task-detail-dialog::backdrop{background:rgba(15,23,42,.45)}
.task-detail-dialog > header{display:flex; align-items:center; justify-content:space-between;
  padding:var(--s-4) var(--s-5); border-bottom:1px solid var(--line)}
.task-detail-dialog > header h2{margin:0; font-size:var(--t-md)}
.task-detail-dialog > header p{margin:3px 0 0;color:var(--mut);font-size:var(--t-xs)}
.task-detail-body{padding:var(--s-4) var(--s-5); overflow:auto; max-height:64vh}
.task-detail-meta{display:flex; align-items:center; justify-content:space-between; gap:var(--s-3);
  margin-bottom:var(--s-3); padding-bottom:var(--s-3); border-bottom:1px dashed var(--line)}
.task-detail-meta b{color:var(--txt)} .task-detail-meta small{margin-left:8px; color:var(--faint); font-size:var(--t-xs)}
.task-detail-findings{display:flex; flex-direction:column; gap:var(--s-2)}
.task-detail-body .empty{color:var(--mut); text-align:center; padding:var(--s-5) 0}
.task-detail-foot{display:flex; justify-content:flex-end; gap:var(--s-2);
  padding:var(--s-3) var(--s-5); border-top:1px solid var(--line)}
.task-detail-foot:empty{display:none}
.dashboard-qc-dialog{width:min(920px,94vw)}
.dashboard-qc-evidence{margin:0 0 var(--s-5);padding:var(--s-3);border:1px solid var(--line);
  border-radius:var(--r-md);background:var(--surface-2)}
.dashboard-qc-evidence figcaption{display:flex;justify-content:space-between;gap:var(--s-3);
  align-items:center;margin-bottom:var(--s-3)}
.dashboard-qc-evidence img{display:block;width:100%;height:auto;max-height:420px;
  object-fit:contain;background:#fff;border-radius:var(--r-sm)}
.compact-action{display:block;margin-top:4px;color:var(--accent-text);white-space:nowrap}

/* QC 待人工判定行标红（P3）：主观项默认"自动"→待判，逼操作人给结论 */
.qc-sample-tbl tr.needs-judge > td{background:var(--bad-bg)}
.qc-sample-tbl tr.needs-judge .v-sel{border-color:var(--bad); color:var(--bad-text); font-weight:600}

/* 规格库草稿·AI 读规格入口（首件规格授权，复用 /qc/read-auto）*/
.catalog-spec-ai-row{display:flex; align-items:center; gap:var(--s-2); flex-wrap:wrap}
.catalog-spec-ai-row input[type=file]{font-size:var(--t-xs); max-width:210px}
