/* 各页面：导入 / 确认机型 / 审查复核 / 历史 / 规则库 / 设置 */

/* ═══════════════ ① 导入合同 ═══════════════ */
.dropzone{
  border:1.5px dashed #C3D1DD; border-radius:var(--r-xl); background:var(--surface-sunk);
  padding:34px 24px; display:flex; flex-direction:column; align-items:center; gap:9px;
  text-align:center; transition:border-color .15s, background .15s; cursor:pointer;
}
.dropzone:hover,.dropzone.over{border-color:var(--accent); background:var(--accent-soft)}
.dropzone svg{width:30px;height:30px;opacity:.5;color:var(--accent)}
.dropzone b{font-size:13px;font-weight:600}
.dropzone span{font-size:11.5px;color:var(--muted);max-width:420px;line-height:1.6}
.dropzone .formats{display:flex;gap:5px;margin-top:2px}
.dropzone .formats i{
  font-style:normal;font-family:var(--mono);font-size:10px;
  padding:1px 6px;border-radius:3px;background:#fff;border:1px solid var(--border);color:var(--muted);
}

/* 解析步骤条 */
.steps{display:flex; flex-direction:column; gap:0}
.step{
  display:flex; align-items:center; gap:11px; padding:11px 13px;
  border-bottom:1px solid var(--border-soft); font-size:12.5px;
}
.step:last-child{border-bottom:none}
.step .mark{
  width:20px;height:20px;flex:0 0 20px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;
  background:var(--neutral-soft); color:var(--faint);
}
.step.done .mark{background:var(--ok-soft); color:var(--ok)}
.step.active .mark{background:var(--accent-soft); color:var(--accent)}
.step.fail .mark{background:var(--danger-soft); color:var(--danger)}
.step .txt{flex:1; min-width:0}
.step .txt b{font-weight:600; display:block; line-height:1.35}
.step .txt span{font-size:11.5px; color:var(--muted); line-height:1.5; display:block}
.step.pending .txt{color:var(--faint)}
.step .side{font-size:11px;color:var(--faint);flex:0 0 auto}

/* 文件信息行 */
.fileline{
  display:flex; align-items:center; gap:10px; padding:10px 13px;
  background:var(--surface-sunk); border:1px solid var(--border-soft); border-radius:var(--r-md);
  font-size:12.5px; flex-wrap:wrap;
}
.fileline .nm{font-weight:600; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.fileline .meta{font-size:11.5px; color:var(--faint); font-family:var(--mono)}
.fileline .right{margin-left:auto; display:flex; gap:6px}

/* 警告列表 */
.warnlist{display:flex; flex-direction:column; gap:6px}
.warnlist .w{
  display:flex; gap:8px; align-items:flex-start; padding:8px 11px;
  background:var(--warn-soft); border:1px solid var(--warn-line); border-radius:var(--r-sm);
  font-size:11.5px; color:#7A5210; line-height:1.55;
}
.warnlist .w i{
  font-style:normal;flex:0 0 14px;text-align:center;font-weight:700;color:var(--warn);
}

/* ═══════════════ ② 确认机型 ═══════════════ */
.gate-note{
  display:flex; gap:10px; align-items:flex-start;
  padding:10px 13px; background:var(--accent-soft); border:1px solid var(--accent-line);
  border-radius:var(--r-md); font-size:12px; color:#1B4C6E; line-height:1.6;
}
.gate-note b{font-weight:600}
.gate-note i{font-style:normal;flex:0 0 16px;font-weight:700;color:var(--accent);text-align:center}

.devtable input,.devtable select{height:28px; width:100%; font-size:12px}
.devtable td{padding:5px 8px; vertical-align:top}
.devtable td.col-name{min-width:150px}
.devtable td.col-model{min-width:110px}
.devtable td.col-variant{min-width:118px}
.devtable td.col-scope{min-width:170px}
.devtable td.col-special{min-width:150px}
.devrows tr{background:#fff}
.devrows tr.invalid td{background:#FEFAF4}
.devrows tr.invalid input,.devrows tr.invalid select{border-color:var(--warn-line); background:#FFFDF8}
.dev-reason{font-size:11px;color:var(--faint);padding:0 8px 6px;line-height:1.5}
.dev-reason b{color:var(--muted);font-weight:600}
.dev-zebra td{border-bottom:1px solid var(--border-soft)}

/* ═══════════════ ③ 审查复核（三栏） ═══════════════ */
.review-shell{flex:1; min-height:0; display:flex; gap:10px; padding:0 22px 12px}
.col-findings{flex:0 0 296px; min-width:0; display:flex; flex-direction:column; gap:10px}
.col-doc{flex:1; min-width:0; display:flex; flex-direction:column}
.col-detail{flex:0 0 392px; min-width:0; display:flex; flex-direction:column}

/* 统计 */
.stats{display:flex; gap:7px; padding:9px 10px; border-bottom:1px solid var(--border-soft); background:var(--surface-sunk)}
.stat{
  flex:1; min-width:0; background:#fff; border:1px solid var(--border); border-radius:var(--r-sm);
  padding:5px 7px; cursor:pointer; text-align:left; font:inherit;
  transition:box-shadow .12s, border-color .12s;
}
.stat:hover{border-color:var(--border-strong)}
.stat .k{font-size:10px; color:var(--muted); letter-spacing:.01em; display:flex; align-items:center; gap:4px; white-space:nowrap}
.stat .k i{width:5px;height:5px;border-radius:50%;background:var(--c,var(--neutral));flex:0 0 5px}
.stat .v{font-size:16px; font-weight:600; line-height:1.3; color:var(--c,var(--ink)); font-variant-numeric:tabular-nums}
.stat.on{border-color:var(--c,var(--accent)); box-shadow:0 0 0 2px color-mix(in srgb,var(--c,var(--accent)) 22%,transparent)}
.stat.disabled{opacity:.45;cursor:default}

/* 设备树 */
.devtree{padding:6px 4px; border-bottom:1px solid var(--border-soft); flex:0 0 auto}
.devtree .node{
  display:flex; align-items:center; gap:6px; padding:5px 8px; border-radius:4px;
  font-size:12px; cursor:pointer; color:var(--muted); border:none; background:none;
  width:100%; text-align:left; font-family:inherit;
}
.devtree .node:hover{background:var(--surface-sunk); color:var(--ink)}
.devtree .node.on{background:var(--accent-soft); color:var(--accent); font-weight:600}
.devtree .node .nm{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.devtree .node .cnt{font-size:10.5px; font-variant-numeric:tabular-nums; color:var(--faint)}
.devtree .node.on .cnt{color:var(--accent)}

/* 判定列表 */
.flist{flex:1; min-height:0; overflow:auto; padding:6px}
.fcard{
  display:block; width:100%; text-align:left; font:inherit;
  border:1px solid var(--border); border-left:3px solid var(--c,var(--neutral));
  border-radius:var(--r-sm); background:#fff; padding:8px 9px; margin-bottom:5px;
  cursor:pointer; transition:background .1s, box-shadow .1s;
}
.fcard:hover{background:#FAFCFD; border-color:var(--border-strong); border-left-color:var(--c,var(--neutral))}
.fcard.on{background:var(--accent-soft); border-color:var(--accent-line); border-left-color:var(--c,var(--neutral)); box-shadow:0 1px 3px rgba(16,32,48,.08)}
.fcard .top{display:flex; align-items:center; gap:5px; margin-bottom:3px; min-width:0}
.fcard .id{font-family:var(--mono); font-size:10.5px; color:var(--faint); flex:0 0 auto}
.fcard .comp{font-size:11.5px; font-weight:600; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0}
.fcard .q{
  font-size:11.5px; color:var(--muted); line-height:1.5;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
  margin:3px 0 4px;
}
.fcard .bot{display:flex; align-items:center; gap:4px; flex-wrap:wrap}

/* 文档预览 */
.docwrap{flex:1; min-height:0; overflow:auto; background:#E5E9EC; padding:16px}
.docsheet{
  background:#fff; box-shadow:0 1px 4px rgba(16,32,48,.12); border-radius:2px;
  padding:30px 40px; margin:0 auto 14px; max-width:820px;
  font-family:var(--doc-font); font-size:14px; line-height:1.95; color:#1A1A1A;
}
.docsheet > small{
  display:block; font-family:var(--font); font-size:10px; letter-spacing:.08em;
  color:var(--faint); text-transform:uppercase; margin-bottom:10px;
  padding-bottom:6px; border-bottom:1px solid var(--border-soft);
}
.docsheet table{border-collapse:collapse; width:100%; table-layout:fixed; margin:10px 0; font-size:12.5px}
.docsheet td{border:1px solid #B6BEC6; padding:5px 7px; vertical-align:top; overflow-wrap:anywhere; white-space:normal; height:auto; max-width:none; line-height:1.7}
.docsheet .doc-p{white-space:pre-wrap; overflow-wrap:anywhere; margin:5px 0; min-height:1.2em}
.docsheet .doc-bold{font-weight:600}
.docsheet .align-center{text-align:center}
.docsheet .align-right{text-align:right}
.docsheet .doc-notice{
  font-family:var(--font); font-size:11px; color:var(--muted);
  background:var(--surface-sunk); border-left:2px solid var(--border-strong);
  padding:5px 9px; margin:7px 0; line-height:1.6;
}
.mark{cursor:pointer;border-radius:1px;transition:box-shadow .1s}
.mark:hover{box-shadow:0 0 0 1.5px var(--accent)}
.mark.on{box-shadow:0 0 0 2px var(--accent); background:#D6E9F7!important}
.mark.m-标配{background:var(--mark-standard)}
.mark.m-非标{background:var(--mark-nonstd)}
.mark.m-模糊{background:var(--mark-vague)}
.mark.m-不满足{background:var(--mark-fail)}
.mark.m-可偏离{background:var(--mark-deviate)}
.mark.m-none{border-bottom:1.5px dotted #6F93AC; background:none}
.mark.m-note{border-bottom:2px dashed var(--ok); background:none}

/* 判定详情 */
.detail{flex:1; min-height:0; overflow:auto; padding:13px 15px 18px}
.detail .dhead{display:flex; align-items:center; gap:6px; flex-wrap:wrap; margin-bottom:9px}
.detail .dhead h2{font-size:14px; font-weight:600; letter-spacing:-.01em}
.detail .dhead .id{font-family:var(--mono); font-size:11px; color:var(--faint)}
.detail h4{
  font-size:10.5px; color:var(--faint); font-weight:600; letter-spacing:.07em;
  margin:15px 0 5px; text-transform:uppercase;
}
.detail h4:first-child{margin-top:0}
.detail .body-text{font-size:12.5px; line-height:1.7; color:#2E3B47; overflow-wrap:anywhere}

.quote-box{
  background:var(--surface-sunk); border:1px solid var(--border-soft); border-left:2px solid var(--border-strong);
  border-radius:var(--r-sm); padding:8px 10px; font-size:12.5px; line-height:1.7;
  color:#2E3B47; overflow-wrap:anywhere; white-space:pre-wrap;
}
.quote-box mark{background:var(--mark-nonstd); padding:1px 0; border-radius:1px}

/* 依据卡片 */
.ev{
  border:1px solid var(--border); border-radius:var(--r-sm); padding:8px 10px;
  margin-bottom:6px; background:#fff;
}
.ev.approved{border-left:2px solid var(--ok)}
.ev.reference{border-left:2px solid var(--warn); background:#FFFDF8}
.ev .ev-top{display:flex; align-items:center; gap:5px; margin-bottom:4px; flex-wrap:wrap}
.ev .ev-top .rid{font-family:var(--mono); font-size:11px; font-weight:600; color:var(--ink)}
.ev .ev-body{font-size:12px; line-height:1.6; color:#3A4753; overflow-wrap:anywhere}
.ev .ev-src{font-size:10.5px; color:var(--faint); margin-top:4px; font-family:var(--mono); overflow-wrap:anywhere}

/* 溯源 */
.provenance{
  display:flex; flex-wrap:wrap; gap:5px; padding:8px 10px;
  background:var(--surface-sunk); border-radius:var(--r-sm); border:1px solid var(--border-soft);
}
.provenance .pi{display:flex; align-items:center; gap:4px; font-size:11px; color:var(--muted)}
.provenance .pi b{color:var(--ink); font-weight:600}
.ai-original{
  font-size:11.5px; color:var(--muted); padding:6px 9px; margin-top:6px;
  background:var(--warn-soft); border:1px solid var(--warn-line); border-radius:var(--r-sm);
  line-height:1.55;
}
.ai-original b{color:var(--warn)}

/* 复核表单 */
.review-form{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:8px}
.review-form label.field{grid-column:auto}
.review-form label.field.wide{grid-column:1/-1}
.review-form select,.review-form input{width:100%}
.review-form textarea{width:100%; min-height:64px}
.form-actions{display:flex; gap:7px; align-items:center; margin-top:2px}
.form-actions .hint{font-size:10.5px;color:var(--faint);margin-left:auto;white-space:nowrap}
.form-actions .hint kbd{margin:0 1px}

/* ═══════════════ ④ 历史任务 ═══════════════ */
.hist-table td.wrap{max-width:340px}

/* ═══════════════ ⑤ 规则库 ═══════════════ */
.alert-card{
  border:1px solid var(--warn-line); background:#FFFCF6; border-radius:var(--r-md);
  padding:12px 14px; margin-bottom:9px;
}
.alert-card h3{font-size:12.5px;font-weight:600;margin-bottom:5px;color:#7A5210}
.alert-card .reason{font-size:12px;color:var(--muted);line-height:1.6;margin-bottom:9px}
.alert-card .examples{font-size:11.5px;color:var(--faint);margin-bottom:9px}
.rule-opt{
  border:1px solid var(--border); background:#fff; border-radius:var(--r-sm);
  padding:10px 11px; min-width:0;
}
.rule-opt .tag{
  display:inline-flex; align-items:center; justify-content:center;
  width:18px;height:18px;border-radius:4px;background:var(--neutral-soft);
  font-size:10.5px;font-weight:700;color:var(--muted);margin-bottom:6px;
}
.rule-opt .main{font-size:12.5px;font-weight:600;line-height:1.5;margin-bottom:5px;color:var(--ink);overflow-wrap:anywhere}
.rule-opt .meta{font-size:11px;color:var(--muted);line-height:1.6;margin-bottom:4px}
.rule-opt .meta b{color:var(--ink);font-weight:500}
.rule-opt .boundary{font-size:11px;color:var(--faint);line-height:1.55;margin-top:4px}
.rule-opt .acts{display:flex; gap:6px; margin-top:8px}
.rule-opt.picked{border-color:var(--accent); background:var(--accent-soft)}
.alert-extra{margin-top:9px; padding-top:9px; border-top:1px solid var(--border-soft)}
.alert-extra textarea{width:100%; min-height:52px; margin-bottom:7px}
.alert-extra summary{cursor:pointer; font-size:11.5px; color:var(--accent); margin-bottom:7px}
.rule-detail pre{
  white-space:pre-wrap; overflow-wrap:anywhere; font:11.5px/1.65 var(--mono);
  background:var(--surface-sunk); padding:9px; border-radius:var(--r-sm);
  border:1px solid var(--border-soft); margin-top:6px;
}
.rule-detail summary{cursor:pointer;font-size:12px;line-height:1.6}

/* ═══════════════ ⑥ 设置 ═══════════════ */
#settingBody{overflow-y:auto}
#settingBody>*{flex-shrink:0}
.settings-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:10px}
input[type=checkbox].review-switch{appearance:none;width:40px;height:22px;flex:0 0 40px;border:0;border-radius:12px;background:var(--faint);position:relative;transition:background .15s}
input[type=checkbox].review-switch:before{content:'';position:absolute;width:16px;height:16px;left:3px;top:3px;border-radius:50%;background:white;transition:transform .15s}
input[type=checkbox].review-switch:checked{background:var(--accent)}
input[type=checkbox].review-switch:checked:before{transform:translateX(18px)}
input[type=checkbox].review-switch:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
input[type=checkbox].review-switch:disabled{opacity:.5;cursor:wait}
.kv{display:grid; grid-template-columns:auto 1fr; gap:5px 14px; font-size:12px; align-items:baseline}
.kv dt{color:var(--muted)}
.kv dd{margin:0; font-weight:600; font-variant-numeric:tabular-nums; text-align:right}
.kv dd.mono{font-family:var(--mono); font-weight:500; font-size:11.5px}
.bar-row{display:flex; flex-direction:column; gap:5px; font-size:11.5px}
.bar-row .br{display:flex; align-items:center; gap:8px}
.bar-row .br .nm{flex:0 0 120px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.bar-row .br .track{flex:1; height:6px; background:var(--neutral-soft); border-radius:3px; overflow:hidden}
.bar-row .br .track i{display:block;height:100%;background:var(--accent);border-radius:3px}
.bar-row .br .val{flex:0 0 56px; text-align:right; font-variant-numeric:tabular-nums; color:var(--muted); font-family:var(--mono); font-size:10.5px}

/* ═══════════════ 小屏兜底 ═══════════════ */
@media (max-width:1280px){
  .col-findings{flex-basis:262px}
  .col-detail{flex-basis:340px}
}
@media (max-width:1080px){
  :root{--sidebar-w:190px}
  .review-shell{flex-wrap:wrap; overflow:auto}
  .col-findings{flex:0 0 100%; max-height:38vh}
  .col-detail{flex:0 0 100%; max-height:52vh}
  .col-doc{flex:0 0 100%; min-height:40vh}
}
@media (max-width:760px){
  .pagehead{padding:12px 14px 10px; flex-wrap:wrap}
  .pagehead .acts{margin-left:0; width:100%}
  .content{padding:0 14px 10px}
  .review-shell{padding:0 14px 10px}
  .docsheet{padding:18px 20px}
  .stats{flex-wrap:wrap}
}
