/* ===== 云评估地图系统 · 科技感深色主题 ===== */
:root{
  --bg:#070c16; --bg2:#0b1322; --panel:#0e1728; --panel2:#121e33;
  --line:rgba(90,140,200,.18); --line2:rgba(90,140,200,.35);
  --txt:#dbe7f5; --txt2:#8ea6c4; --txt3:#5d7594;
  --cyan:#25d0e8; --blue:#3b82f6; --red:#ff4d4f; --gold:#ffc53d;
  --green:#22c55e; --purple:#a78bfa;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  background:var(--bg); color:var(--txt); overflow:hidden;
  font:14px/1.6 "PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-thumb{background:rgba(37,208,232,.25);border-radius:3px}
::-webkit-scrollbar-track{background:transparent}

/* ===== 顶栏 ===== */
.topbar{
  height:60px;display:flex;align-items:center;justify-content:space-between;
  padding:0 18px;background:linear-gradient(180deg,#0d1728,#0a1120);
  border-bottom:1px solid var(--line);
  box-shadow:0 2px 20px rgba(0,0,0,.5);position:relative;z-index:20;
}
.brand{display:flex;align-items:center;gap:12px}
.logo{
  width:36px;height:36px;border-radius:9px;display:grid;place-items:center;
  font-size:18px;font-weight:700;color:#04121c;
  background:linear-gradient(135deg,var(--cyan),#5eead4);
  box-shadow:0 0 16px rgba(37,208,232,.45);
}
.brand-txt h1{font-size:17px;font-weight:600;letter-spacing:1px}
.brand-txt span{font-size:11px;color:var(--txt3);letter-spacing:.5px}
.topbar-right{display:flex;align-items:center;gap:10px}
.chip{
  font-size:11px;color:var(--txt3);padding:5px 11px;border-radius:20px;
  background:rgba(59,130,246,.08);border:1px solid var(--line);
}
.chip b{color:var(--cyan);font-weight:600}
/* SSO 身份条：已登录绿点描边，未登录/过期转暗红 */
.chip.sso{background:rgba(34,197,94,.10);border-color:rgba(34,197,94,.35)}
.chip.sso.on b{color:var(--green)}
.chip.sso.on .pulse{background:var(--green)}
.chip.sso.bad{background:rgba(248,113,113,.10);border-color:rgba(248,113,113,.35)}
.chip.sso.bad b{color:#fca5a5}
.chip.sso.bad .pulse{background:#f87171;animation:none}
.chip.sso .role{
  margin-left:6px;padding:1px 6px;border-radius:9px;font-size:10px;
  background:rgba(37,208,232,.16);color:#a9e9f5;border:1px solid rgba(37,208,232,.3);
}
.chip.sso.bad .role{background:rgba(248,113,113,.14);color:#fca5a5;border-color:rgba(248,113,113,.3)}
.pulse{
  display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--green);margin-right:5px;
  box-shadow:0 0 0 0 rgba(34,197,94,.6);animation:pulse 2s infinite;
}
@keyframes pulse{70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}

/* ===== 布局 ===== */
.layout{
  height:calc(100vh - 60px);display:flex;
  background:radial-gradient(1200px 600px at 30% 20%,#0d1a2e 0%,var(--bg) 70%);
}
.map-wrap{flex:0 0 75%;position:relative;overflow:hidden}
.panel{
  flex:0 0 25%;min-width:320px;display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--panel),#0a1120);
  border-left:1px solid var(--line2);
  box-shadow:-8px 0 30px rgba(0,0,0,.45);
}
#map{position:absolute;inset:0;background:#060a12}

/* ===== 地图浮层 ===== */
.map-toolbar{
  position:absolute;left:14px;top:14px;z-index:10;display:flex;gap:8px;flex-wrap:wrap;
}
/* ===== 地图内搜索定位 + 实时定位（2026-10-17 新增）=====
   悬浮在地图右上角，与左下角的作业面板互不遮挡。
   沿用科技感深色主题：半透明深底 + 青色高亮 + backdrop-filter 毛玻璃。 */
/* 左下角三件套自上而下：搜索框 → 配准徽章 → 坐标 HUD，
   全部 left:14px 左对齐成一条。
   搜索框用 bottom 定位（不是 top），这样消息提示展开时是**向上生长**，
   不会把下面的徽章和 HUD 盖住。 */
.map-search{
  /* ★ 搜索框固定在左下角（用户明确要求）。两个小圆点（徽章/HUD）才移到右上。 */
  position:absolute;left:14px;bottom:14px;z-index:12;width:326px;
  background:rgba(11,19,34,.90);border:1px solid var(--line2);border-radius:10px;
  padding:9px;backdrop-filter:blur(10px);
  box-shadow:0 6px 26px rgba(0,0,0,.45);
}
.map-search .ms-row{display:flex;gap:6px;align-items:center}
.map-search .ms-quick{margin-top:7px;flex-wrap:wrap;gap:5px}
.map-search .ms-label{font-size:11px;color:var(--txt3);margin-right:1px}
.map-search input[type=text]{
  flex:1;min-width:0;background:rgba(7,12,22,.85);border:1px solid var(--line);
  color:var(--txt);border-radius:7px;padding:7px 10px;font-size:12.5px;outline:none;
  font-family:inherit;
}
.map-search input[type=text]:focus{border-color:var(--cyan);box-shadow:0 0 0 2px rgba(37,208,232,.14)}
.map-search input[type=text]::placeholder{color:var(--txt3)}
.ms-btn{
  background:rgba(18,30,51,.9);border:1px solid var(--line2);color:var(--txt);
  padding:7px 11px;border-radius:7px;font-size:12.5px;cursor:pointer;
  white-space:nowrap;font-family:inherit;transition:.18s;
}
.ms-btn:hover{border-color:var(--cyan);color:#fff}
.ms-btn.primary{background:rgba(37,208,232,.20);border-color:rgba(37,208,232,.55);color:#d7f7ff}
.ms-btn.primary:hover{background:rgba(37,208,232,.32)}
.ms-btn:disabled{opacity:.5;cursor:not-allowed}
.ms-btn.locating{border-color:var(--gold);color:var(--gold);animation:msPulse 1.1s ease-in-out infinite}
@keyframes msPulse{0%,100%{opacity:1}50%{opacity:.5}}
.ms-chip{
  background:rgba(18,30,51,.75);border:1px solid var(--line);color:var(--txt2);
  padding:4px 9px;border-radius:20px;font-size:11.5px;cursor:pointer;
  font-family:inherit;transition:.18s;
}
.ms-chip:hover{border-color:var(--cyan);color:var(--txt)}
.ms-msg{
  margin-top:7px;font-size:11.5px;line-height:1.55;color:var(--txt2);
  padding:7px 9px;border-radius:7px;background:rgba(7,12,22,.7);
  border-left:2px solid var(--line2);word-break:break-all;
}
.ms-msg.ok{border-left-color:var(--green);color:#bfe9cf}
.ms-msg.warn{border-left-color:var(--gold);color:#f0dca8}
.ms-msg.err{border-left-color:var(--red);color:#f5c2c3}
.ms-msg b{color:#fff}

.tool-btn{
  background:rgba(14,23,40,.86);border:1px solid var(--line2);color:var(--txt);
  padding:8px 13px;border-radius:8px;font-size:12.5px;cursor:pointer;
  backdrop-filter:blur(8px);transition:.2s;display:flex;align-items:center;gap:6px;
}
.tool-btn:hover{border-color:var(--cyan);color:#fff;box-shadow:0 0 14px rgba(37,208,232,.25)}
.tool-btn.primary{
  background:linear-gradient(135deg,rgba(37,208,232,.22),rgba(59,130,246,.22));
  border-color:rgba(37,208,232,.6);color:#eaffff;font-weight:600;
}
.tool-btn.primary:hover{box-shadow:0 0 22px rgba(37,208,232,.5)}
.tool-btn.on{background:rgba(37,208,232,.28);border-color:var(--cyan);color:#fff}
.tool-btn .ico{font-size:13px}
/* 工具栏分组竖分隔线：纯展示，不可拦截收下层按钮点击 */
.tb-sep{
  width:1px;flex:none;align-self:center;height:22px;margin:0 4px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(37,208,232,.5),transparent);
}

.layer-pick{
  display:flex;align-items:center;gap:7px;
  background:rgba(14,23,40,.9);border:1px solid rgba(37,208,232,.5);
  border-radius:8px;padding:5px 10px;backdrop-filter:blur(8px);
  box-shadow:0 0 14px rgba(37,208,232,.18);
}
.layer-pick label{font-size:11px;color:var(--txt3);white-space:nowrap}
.layer-pick select{
  background:rgba(0,0,0,.35);border:1px solid var(--line2);border-radius:5px;
  color:#eaffff;font-size:12.5px;padding:4px 6px;outline:none;cursor:pointer;
}
.layer-pick select:focus{border-color:var(--cyan)}
/* ===== 宗地绘制提示条 ===== */
/* hidden 属性需优先于 display:flex（否则隐藏后仍拦截地图工具条点击） */
.draw-hint[hidden]{display:none}
.be-panel[hidden]{display:none}
.be-row[hidden]{display:none}
.draw-hint{
  position:absolute;left:50%;top:52px;transform:translateX(-50%);z-index:12;
  background:rgba(14,23,40,.94);border:1px solid rgba(255,197,61,.55);
  border-radius:9px;padding:8px 13px;backdrop-filter:blur(8px);
  box-shadow:0 6px 26px rgba(0,0,0,.5);font-size:11.5px;color:var(--txt2);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;max-width:78%;
}
.draw-hint b{color:var(--gold);font-weight:600}
.draw-hint span{line-height:1.7}
.draw-hint span b{color:#eaffff}
.draw-acts{display:flex;gap:6px}
.draw-btn{
  padding:4px 10px;border-radius:6px;cursor:pointer;font-size:11.5px;
  background:rgba(255,197,61,.16);border:1px solid rgba(255,197,61,.5);
  color:var(--gold);transition:.2s;
}
.draw-btn:hover{background:rgba(255,197,61,.28)}
.draw-btn.ghost{background:transparent;border-color:var(--line2);color:var(--txt2)}
.draw-btn.ghost:hover{border-color:var(--cyan);color:var(--cyan)}

/* ===== 宗地图纸附件 ===== */
.pm-list{margin-bottom:8px}
.pm-item{
  display:flex;align-items:flex-start;gap:9px;padding:8px;margin-bottom:7px;
  background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:8px;
}
.pm-thumb{
  width:56px;height:56px;object-fit:cover;border-radius:6px;flex-shrink:0;
  border:1px solid var(--line2);background:#0a1220;cursor:pointer;
}
.pm-thumb.pdf{
  display:grid;place-items:center;font-size:11px;font-weight:700;color:var(--gold);
}
.pm-meta{flex:1;min-width:0}
.pm-name{font-size:11.5px;color:#fff;font-weight:600;word-break:break-all;line-height:1.5}
.pm-sub{font-size:10.5px;color:var(--txt3);margin-top:2px;line-height:1.6}
.pm-del{
  width:20px;height:20px;line-height:1;border-radius:5px;cursor:pointer;flex-shrink:0;
  background:transparent;border:1px solid var(--line2);color:var(--txt3);font-size:13px;
}
.pm-del:hover{border-color:var(--red);color:var(--red)}
.pm-data{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line)}
.pm-data .sec-title{margin:4px 0 6px}
.pm-data .kv-list li{font-size:11px;padding:2px 0}
.pm-extra{font-size:10.5px;color:var(--txt2);line-height:1.8;margin-top:5px}
.pm-note{font-size:10px;color:var(--txt3);line-height:1.7;margin-top:6px}
.pm-note b{color:var(--gold)}

/* ===== 宗地属性表单 ===== */
.pform{margin-top:4px}
.pf-row{margin-bottom:8px}
.pf-row label{display:block;font-size:11px;color:var(--txt3);margin-bottom:4px}
.pf-row input,.pf-row select{
  width:100%;background:rgba(0,0,0,.32);border:1px solid var(--line2);border-radius:6px;
  color:#eaffff;font-size:12.5px;padding:6px 8px;outline:none;
}
.pf-row input:focus,.pf-row select:focus{border-color:var(--cyan)}
.pf-grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pf-grid2 .pf-row{margin-bottom:8px}
/* 容积率防呆提示：预填＝级别设定容积率时提示，避免误当宗地实际容积率 */
.pf-fartip{font-size:10.5px;line-height:1.6;margin-top:5px;color:var(--txt3)}
.pf-fartip.warn{color:var(--gold)}
.pf-fartip.ok{color:var(--teal,#5eead4)}
.pf-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.pf-acts .btn-mini,.pf-acts .btn-ghost{flex:1 1 96px;min-width:96px;text-align:center;white-space:nowrap}
.pf-auto{margin-top:4px}
.pf-auto .calc-step{
  display:flex;justify-content:space-between;gap:10px;font-size:11.5px;
  line-height:1.9;border-bottom:1px dashed var(--line);padding:3px 0;
}
.pf-auto .calc-step span{color:var(--txt3);flex-shrink:0}
.pf-auto .calc-step b{color:#fff;font-weight:600;text-align:right;font-variant-numeric:tabular-nums}
.pf-auto .calc-step.gold b{color:var(--gold)}
.pf-auto .calc-formula{
  font-size:11px;color:var(--cyan);background:rgba(37,208,232,.07);
  border:1px solid rgba(37,208,232,.22);border-radius:6px;padding:7px 9px;margin-top:7px;
  line-height:1.8;word-break:break-all;
}
.pf-auto .calc-total{
  margin-top:8px;background:rgba(255,197,61,.08);border:1px solid rgba(255,197,61,.3);
  border-radius:8px;padding:9px 11px;
}
.pf-auto .calc-total .t-row{display:flex;justify-content:space-between;font-size:12px;line-height:2}
.pf-auto .calc-total .t-row span{color:var(--txt3)}
.pf-auto .calc-total .t-row b{color:var(--gold);font-variant-numeric:tabular-nums}
.pf-auto .calc-warn{
  margin-top:7px;font-size:10.5px;color:var(--gold);line-height:1.8;
}
.pf-auto .calc-note{font-size:10px;color:var(--txt3);line-height:1.8;margin-top:6px}

.map-badge{
  position:absolute;right:14px;top:14px;z-index:5;pointer-events:none;font-size:11px;color:var(--txt2);
  background:rgba(14,23,40,.86);border:1px solid var(--line);
  padding:6px 12px;border-radius:6px;backdrop-filter:blur(8px);
}
/* ★ 2026-10-17：坐标 HUD 折叠为小圆点（26×26px），与配准徽章同款。
   展开时向上向右弹，避免越出画布底部/被搜索框压住。 */
.map-hud{
  /* ★ 2026-10-17 与配准徽章同一行，紧贴其右侧（徽章宽26 + 间距12） */
  position:absolute;left:52px;bottom:106px;z-index:11;
  width:26px;height:26px;border-radius:50%;
  background:rgba(10,16,30,.88);border:1px solid var(--line);
  backdrop-filter:blur(8px);
  display:flex;align-items:center;justify-content:center;
  cursor:help;outline:none;
  transition:border-color .18s,box-shadow .18s,background .18s;
}
.map-hud:hover,.map-hud:focus-visible,.map-hud.open{
  border-color:rgba(37,208,232,.6);box-shadow:0 0 12px rgba(37,208,232,.22);
  background:rgba(14,23,40,.94);
}
.map-hud .hd-ico{font-size:14px;line-height:1;color:#9fb4d8}
/* 展开的读数面板：向上弹 */
.map-hud .hd-pop{
  display:none;position:absolute;left:32px;bottom:0;min-width:212px;
  padding:7px 11px;border-radius:8px;
  background:rgba(10,16,30,.96);border:1px solid var(--line2);
  backdrop-filter:blur(10px);box-shadow:0 6px 20px rgba(0,0,0,.45);
}
.map-hud:hover .hd-pop,.map-hud:focus-visible .hd-pop,.map-hud.open .hd-pop{display:block}
.hud-row{display:flex;justify-content:space-between;gap:14px;line-height:1.9}
.hud-row span{color:#8ea6c4}
.hud-row span{color:var(--txt3)}
.hud-row b{color:var(--cyan);font-weight:500;font-variant-numeric:tabular-nums}

/* 配准精度公示（地图左下角，级别边界来源标注） */
/* ★ 2026-10-17：配准徽章收成小图标（默认只显示 📐 + 误差值），
   悬停或聚焦/点击时向右展开完整说明。内容未删，只是不长期占视野。 */
/* ★ 2026-10-17 再收：默认**完全折叠**为一个小圆点图标（只 26×26px），
   误差数值与说明都在悬停/点击时才出现。原意是「数据精度要交代，但不该长期占视野」。
   位置：HUD 高约 83px(bottom:14) → 徽章 bottom:120 恰好在其上方。 */
/* 搜索框占住左下角（bottom:48，326px 宽），徽章让位到它**右侧**并排，
   两个圆点在底边左端连成一线，互不遮挡。 */
.reg-badge{
  /* ★ 2026-10-17 移到「搜索框正上方」：搜索框贴左下底(高84)，故小点底边取 106px */
  position:absolute;left:14px;bottom:106px;z-index:11;
  width:26px;height:26px;border-radius:50%;
  background:rgba(10,16,30,.88);border:1px solid var(--line);
  backdrop-filter:blur(8px);
  display:flex;align-items:center;justify-content:center;
  cursor:help;outline:none;
  transition:border-color .18s,box-shadow .18s,background .18s;
}
.reg-badge:hover,.reg-badge:focus-visible,.reg-badge.open{
  border-color:rgba(37,208,232,.6);box-shadow:0 0 12px rgba(37,208,232,.22);
  background:rgba(14,23,40,.94);
}
.reg-badge .rb-ico{font-size:13px;line-height:1}
/* 折叠状态下数值藏起来（仍保留在 DOM，展开时显示，脚本写入的值不丢） */
.reg-badge .rb-val{
  display:none;position:absolute;left:30px;white-space:nowrap;
  color:var(--cyan);font-weight:600;font-variant-numeric:tabular-nums;font-size:11px;
  background:rgba(10,16,30,.9);padding:4px 8px;border-radius:6px;
  border:1px solid var(--line);
}
/* 悬停/聚焦/点击时才显示数值 */
.reg-badge:hover .rb-val,.reg-badge:focus-visible .rb-val,.reg-badge.open .rb-val{display:block}
/* 说明气泡：默认隐藏。向上弹（bottom:32px），避免越出画布底部 */
.reg-badge .rb-pop{
  /* 小点已移到搜索框上方 → 气泡向下展开（下方是搜索框，故略偏左避让） */
  display:none;position:absolute;left:0;top:32px;width:290px;
  padding:9px 11px;border-radius:8px;
  background:rgba(10,16,30,.96);border:1px solid var(--line2);
  color:#9fb4d8;font-size:11px;line-height:1.65;
  backdrop-filter:blur(10px);box-shadow:0 6px 20px rgba(0,0,0,.45);
}
.reg-badge:hover .rb-pop,.reg-badge:focus-visible .rb-pop,.reg-badge.open .rb-pop{display:block}
.reg-badge .rb-pop b{color:var(--cyan);font-weight:600;font-variant-numeric:tabular-nums}

.map-tip{
  position:absolute;z-index:30;pointer-events:none;opacity:0;transition:opacity .12s;
  background:linear-gradient(180deg,rgba(18,30,51,.97),rgba(10,17,32,.97));
  border:1px solid rgba(37,208,232,.45);border-radius:9px;padding:11px 14px;
  font-size:12px;min-width:200px;box-shadow:0 8px 30px rgba(0,0,0,.6);
}
.map-tip.show{opacity:1}
.map-tip h4{font-size:13px;margin-bottom:7px;display:flex;align-items:center;gap:7px}
.map-tip .kv{display:flex;justify-content:space-between;gap:16px;line-height:1.85}
.map-tip .kv span{color:var(--txt3)}
.map-tip .kv b{color:#fff;font-weight:500}
.swatch{width:10px;height:10px;border-radius:2px;display:inline-block}

.scan-line{
  position:absolute;left:0;right:0;height:1px;top:0;z-index:5;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(37,208,232,.55),transparent);
  animation:scan 7s linear infinite;
}
@keyframes scan{0%{top:0;opacity:0}10%{opacity:1}90%{opacity:1}100%{top:100%;opacity:0}}
.corner{position:absolute;width:22px;height:22px;border:2px solid rgba(37,208,232,.5);z-index:6;pointer-events:none}
.corner.tl{left:8px;top:8px;border-right:0;border-bottom:0}
.corner.tr{right:8px;top:8px;border-left:0;border-bottom:0}
.corner.bl{left:8px;bottom:8px;border-right:0;border-top:0}
.corner.br{right:8px;bottom:8px;border-left:0;border-top:0}

/* ===== 面板 ===== */
.panel-head{padding:14px 16px;border-bottom:1px solid var(--line);background:rgba(59,130,246,.05);
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.panel-head .ph-left{min-width:0}
.panel-head .ph-desk{flex:0 0 auto;padding:7px 12px;font-size:12px}
.ph-title{font-size:14.5px;font-weight:600;letter-spacing:.5px}
.ph-sub{font-size:11.5px;color:var(--txt3);margin-top:3px}
.panel-body{flex:1;overflow-y:auto;padding:12px}
.card{
  background:linear-gradient(180deg,var(--panel2),rgba(14,23,40,.7));
  border:1px solid var(--line);border-radius:11px;padding:13px;margin-bottom:12px;
  position:relative;overflow:hidden;
}
.card::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:2px;
  background:linear-gradient(180deg,var(--cyan),transparent);
}
.card h3{
  font-size:13px;font-weight:600;margin-bottom:10px;
  display:flex;align-items:center;gap:7px;letter-spacing:.5px;
}
.dot{width:7px;height:7px;border-radius:50%;display:inline-block}
.dot.red{background:var(--red);box-shadow:0 0 8px var(--red)}
.dot.blue{background:#3b82f6;box-shadow:0 0 8px #3b82f6}
.dot.cyan{background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.dot.purple{background:var(--purple);box-shadow:0 0 8px var(--purple)}
.dot.green{background:var(--green);box-shadow:0 0 8px var(--green)}
.dot.gold{background:var(--gold);box-shadow:0 0 8px var(--gold)}
.tag{
  margin-left:auto;font-style:normal;font-size:10.5px;color:var(--txt3);
  border:1px solid var(--line);padding:2px 8px;border-radius:20px;font-weight:400;
}
.tag.on{color:var(--cyan);border-color:rgba(37,208,232,.5);background:rgba(37,208,232,.1)}
.hint{font-size:11.5px;color:var(--txt3);margin-bottom:9px;line-height:1.7}
.hint b{color:var(--cyan)}
.mini{font-size:11.5px;color:var(--txt2);line-height:1.8}

/* ===== 地名 ⇄ 坐标（天地图地理编码）2026-10-13 z53 ===== */
.geo-bar{display:flex;gap:6px;margin-bottom:8px}
.geo-bar input{
  flex:1;min-width:0;padding:6px 9px;font-size:12px;color:var(--txt);
  background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:7px;outline:none;
}
.geo-bar input:focus{border-color:var(--cyan)}
.geo-bar .btn-mini{flex:0 0 auto;white-space:nowrap}
.geo-res{
  font-size:11.5px;line-height:1.75;margin-bottom:9px;padding:9px 10px;border-radius:8px;
  border:1px solid var(--line);background:rgba(255,255,255,.02);
}
.geo-res .g-ttl{font-size:12px;color:#fff;font-weight:600;margin-bottom:4px}
.geo-res .g-row{color:var(--txt2);margin-bottom:2px}
.geo-res .g-row b{color:var(--txt);font-weight:600}
.geo-res .g-warn{
  margin-top:6px;padding:6px 8px;border-radius:6px;color:#ffb4b4;
  background:rgba(255,77,79,.1);border:1px solid rgba(255,77,79,.35);
}
.geo-res .g-ok{
  margin-top:6px;padding:6px 8px;border-radius:6px;color:#a7f3d0;
  background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);
}
.geo-res .g-acts{display:flex;gap:6px;margin-top:8px}
.geo-res .g-acts button{flex:1;white-space:nowrap;font-size:11.5px}
.geo-res .g-addr{
  margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);color:var(--txt3);font-size:11px;
}
.empty{
  font-size:12px;color:var(--txt3);text-align:center;padding:16px 10px;
  border:1px dashed var(--line);border-radius:8px;background:rgba(255,255,255,.015);
}

/* 图例 */
.legend{list-style:none;margin-bottom:9px}
.legend li{
  display:flex;align-items:center;gap:8px;font-size:12px;padding:6px 8px;
  border-radius:6px;cursor:pointer;transition:.15s;
}
.legend li:hover{background:rgba(37,208,232,.08)}
.legend li.active{background:rgba(37,208,232,.14);border:1px solid rgba(37,208,232,.3)}
.legend i{width:14px;height:14px;border-radius:3px;opacity:.85}
.legend b{margin-left:auto;color:var(--gold);font-weight:600;font-variant-numeric:tabular-nums}
.legend .lv-far{font-size:10px;color:var(--txt3);margin-left:6px}
.legend .lv-nomap{font-size:9.5px;color:var(--txt3);border:1px solid var(--line);border-radius:20px;padding:0 5px;margin-left:5px}
.legend li.no-map{opacity:.72}
.chip.src b{color:var(--green)}

/* 评分 */
.score-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:10px}
.score{
  background:rgba(59,130,246,.07);border:1px solid var(--line);
  border-radius:8px;padding:7px 4px;text-align:center;
}
.score .n{font-size:15px;font-weight:700;color:var(--cyan);font-variant-numeric:tabular-nums}
.score .l{font-size:10px;color:var(--txt3);margin-top:1px}
.score.good .n{color:var(--green)} .score.mid .n{color:var(--gold)} .score.bad .n{color:var(--red)}

/* 结果 */
.result{font-size:12px;line-height:1.85}
.result p{margin-bottom:7px;color:var(--txt2)}
.result p:last-child{margin-bottom:0}
.kv-list{list-style:none}
.kv-list li{
  display:flex;justify-content:space-between;gap:10px;padding:5px 0;
  border-bottom:1px dashed rgba(90,140,200,.12);font-size:11.5px;
}
.kv-list li:last-child{border-bottom:0}
.kv-list span{color:var(--txt3);flex-shrink:0}
.kv-list b{color:#fff;font-weight:500;text-align:right}
.bar{height:5px;border-radius:3px;background:rgba(255,255,255,.07);overflow:hidden;margin-top:4px}
.bar i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--cyan),#5eead4);transition:width .6s}
.sec-title{
  font-size:12px;color:#fff;font-weight:600;margin:11px 0 6px;
  padding-left:8px;border-left:2px solid var(--cyan);
}
.sec-title:first-child{margin-top:0}
.conf{
  float:right;font-size:10px;color:var(--cyan);font-weight:400;
  border:1px solid rgba(37,208,232,.35);border-radius:20px;padding:0 7px;
}
.thumb{
  width:100%;border-radius:8px;border:1px solid var(--line);margin-bottom:9px;display:block;
}
.warn{color:var(--gold)}
.report-text{
  font-size:12.5px;line-height:2;color:#e6f0fa;text-align:justify;
  background:rgba(37,208,232,.05);border:1px solid rgba(37,208,232,.2);
  border-radius:8px;padding:12px;text-indent:2em;
}
.report-h4{
  font-size:13px;font-weight:700;color:var(--cyan);letter-spacing:1px;
  margin:12px 0 6px;padding-left:9px;border-left:3px solid var(--cyan);
}
.report-h4:first-child{margin-top:0}
.report-meta{
  display:flex;justify-content:space-between;font-size:10.5px;color:var(--txt3);
  margin-top:8px;padding-top:7px;border-top:1px dashed var(--line);
}
.report-disclaimer{
  font-size:11px;line-height:1.85;color:var(--gold);margin-top:8px;
  background:rgba(255,197,61,.07);border:1px solid rgba(255,197,61,.25);
  border-radius:7px;padding:8px 10px;
}
.btn-copy{
  width:100%;margin-top:10px;padding:9px;border-radius:8px;cursor:pointer;
  font-size:12.5px;font-weight:600;color:var(--cyan);
  background:rgba(37,208,232,.1);border:1px solid rgba(37,208,232,.45);transition:.2s;
}
.btn-copy:hover{background:rgba(37,208,232,.22);box-shadow:0 0 14px rgba(37,208,232,.28)}
.btn-copy.ok{color:var(--green);border-color:rgba(34,197,94,.5);background:rgba(34,197,94,.12)}
/* 复制 / 导出 DOCX 并排 */
.copy-row{display:flex;gap:8px}
.copy-row .btn-copy{margin-top:10px;flex:1}
.btn-copy.alt{
  color:var(--gold);background:rgba(255,193,61,.1);border:1px solid rgba(255,193,61,.45);
}
.btn-copy.alt:hover{background:rgba(255,193,61,.2);box-shadow:0 0 14px rgba(255,193,61,.25)}

/* ---- 完整报告向导 ---- */
.wz-tip{font-size:11.5px;color:var(--txt2);line-height:1.7;margin:2px 0 10px}
.wz-meta{border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-bottom:10px;background:rgba(255,255,255,.02)}
.wz-meta>summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--gold);padding:2px 0}
.wz-meta .pf-grid2{margin-top:8px}
.wz-list{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow:auto;margin-bottom:10px}
.wz-item{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;
  padding:7px 9px;font-size:12px;background:rgba(255,255,255,.02)}
.wz-item.done{border-color:rgba(34,197,94,.4);background:rgba(34,197,94,.07)}
.wz-item.todo{border-color:rgba(255,193,61,.35)}
.wz-no{flex:0 0 56px;color:var(--cyan);font-weight:600;font-size:11px}
.wz-title{flex:1;color:var(--txt);line-height:1.4}
.wz-title em{display:block;font-style:normal;font-size:10.5px;color:var(--txt2);margin-top:1px}
.wz-state{flex:0 0 auto;font-size:10.5px;color:var(--txt2)}
.wz-item.done .wz-state{color:var(--green)}
.wz-btn{flex:0 0 auto;padding:4px 8px;font-size:11px;border-radius:6px;cursor:pointer;
  background:rgba(37,208,232,.12);border:1px solid rgba(37,208,232,.4);color:var(--cyan)}
.wz-btn:hover{background:rgba(37,208,232,.25)}
.wz-btn.warn{background:rgba(255,193,61,.12);border-color:rgba(255,193,61,.4);color:var(--gold)}
.wz-btn.del{background:rgba(255,77,79,.1);border-color:rgba(255,77,79,.35);color:#ff7875}
.wz-acts{display:flex;gap:8px;flex-wrap:wrap}
.wz-acts .btn-primary,.wz-acts .btn-copy{flex:1}
.wz-acts .btn-ghost{flex:0 0 auto;width:auto;padding:9px 12px}
.wz-part{font-size:12.5px;font-weight:700;color:var(--gold);margin:12px 0 4px;
  border-left:3px solid var(--gold);padding-left:8px}
/* ★ 评估方法选择 */
.wz-methods{display:flex;flex-direction:column;gap:6px;margin:8px 0 4px}
.wz-mrow{display:flex;align-items:center;gap:8px;padding:6px 9px;font-size:12px;cursor:pointer;
  border:1px solid var(--line);border-radius:7px;background:rgba(255,255,255,.02)}
.wz-mrow.on{border-color:rgba(34,197,94,.45);background:rgba(34,197,94,.08)}
.wz-mrow input{flex:0 0 auto;cursor:pointer;accent-color:#22c55e}
.wz-mname{flex:1;color:var(--txt)}
.wz-mcls{flex:0 0 auto;font-size:10.5px;color:var(--txt2);border:1px solid var(--line);
  border-radius:4px;padding:1px 6px}
/* 本次未采用的章节条目 */
.wz-item.off{opacity:.6;border-style:dashed}
.wz-item.off .wz-state{color:var(--txt2)}
.wz-item.off .wz-title em{color:var(--gold)}
.report-part{font-size:14px;font-weight:700;color:var(--gold);margin:14px 0 6px;
  border-left:3px solid var(--gold);padding-left:8px}

/* 按钮 */
.btn{
  width:100%;padding:9px;border-radius:8px;cursor:pointer;font-size:12.5px;
  background:rgba(167,139,250,.12);border:1px solid rgba(167,139,250,.45);
  color:#e9e3ff;transition:.2s;margin-bottom:9px;
}
.btn:hover{background:rgba(167,139,250,.24);box-shadow:0 0 14px rgba(167,139,250,.25)}
.btn-ghost{
  padding:6px 12px;border-radius:7px;cursor:pointer;font-size:11.5px;
  background:transparent;border:1px solid var(--line2);color:var(--txt2);transition:.2s;
}
.btn-ghost:hover{border-color:var(--cyan);color:var(--cyan)}
.btn-ghost[hidden]{display:none}
/* ★ 2026-10-26：顶栏「📄 出报告」——报告区在面板第六屏，这个入口要一眼看见，用金色区分 */
.btn-ghost.gold{border-color:rgba(255,197,61,.5);color:var(--gold);font-weight:600}
.btn-ghost.gold:hover{border-color:var(--gold);color:#fff;background:rgba(255,197,61,.14)}
/* 跳到报告区后闪一下边框：证明「到了」，不用再上下找 */
.card-flash{animation:cardFlash 1.7s ease-out}
@keyframes cardFlash{
  0%,100%{box-shadow:0 0 0 0 rgba(255,197,61,0)}
  16%,62%{box-shadow:0 0 0 2px var(--gold),0 0 24px rgba(255,197,61,.42)}
}
/* 导出按钮未生成报告时置灰（常显，看得见但点不动） */
.btn-copy:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}
.btn-mini{
  padding:8px 16px;border-radius:8px;cursor:pointer;font-size:12.5px;border:0;
  background:linear-gradient(135deg,var(--cyan),#0ea5e9);color:#04121c;font-weight:600;
}
/* ★ 底部两个生成按钮并排一行（2026-10-13 用户指示）——只作用于 panel-foot，不影响向导内按钮 */
.panel-foot{padding:12px;border-top:1px solid var(--line);background:rgba(10,17,32,.6);
  display:flex;align-items:stretch;gap:8px}
.panel-foot .btn-primary{flex:1 1 0;width:auto;min-width:0;padding:14px 8px;font-size:14px;
  letter-spacing:.5px;white-space:nowrap}
.btn-primary{
  width:100%;padding:14px;border-radius:10px;border:0;cursor:pointer;
  font-size:15px;font-weight:700;letter-spacing:1px;color:#04121c;
  background:linear-gradient(135deg,#5eead4,var(--cyan) 45%,#3b82f6);
  box-shadow:0 6px 22px rgba(37,208,232,.35);transition:.2s;
}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 10px 30px rgba(37,208,232,.55)}
.btn-primary:active{transform:translateY(1px)}
.btn-primary:disabled{opacity:.55;cursor:not-allowed;transform:none}
/* 规程版报告按钮：金琥珀渐变，与主报告（青蓝渐变）区分；并排后不再单独占行 */
.btn-primary.alt{margin-top:0;background:linear-gradient(135deg,#ffe08a,var(--gold) 45%,#ff9f43);box-shadow:0 6px 22px rgba(255,197,61,.30)}
.btn-primary.alt:hover{box-shadow:0 10px 30px rgba(255,197,61,.5)}
/* 规程版报告内的数据表格 */
.report-table{width:100%;border-collapse:collapse;font-size:10.5px;margin:7px 0;line-height:1.7}
.report-table th,.report-table td{border:1px solid var(--line);padding:4px 7px;text-align:center;vertical-align:top}
.report-table th{color:var(--cyan);font-weight:600;background:rgba(37,208,232,.06);white-space:nowrap}
.report-table .rt-k{color:var(--txt2);text-align:left;white-space:nowrap}
.report-table td b{color:var(--gold)}
.foot-note{font-size:10.5px;color:var(--txt3);text-align:center;margin-top:8px}

/* 弹窗 */
.modal-mask{
  position:fixed;inset:0;background:rgba(3,7,14,.75);z-index:100;
  display:none;place-items:center;backdrop-filter:blur(4px);
}
.modal-mask.show{display:grid}
.modal{
  width:440px;background:linear-gradient(180deg,#131f36,#0b1322);
  border:1px solid var(--line2);border-radius:14px;padding:22px;
  box-shadow:0 20px 60px rgba(0,0,0,.7);
}
.modal h2{font-size:16px;margin-bottom:10px}
.modal-tip{
  font-size:11.5px;color:var(--txt3);line-height:1.8;margin-bottom:14px;
  background:rgba(59,130,246,.07);border-left:2px solid var(--blue);padding:8px 11px;border-radius:0 6px 6px 0;
}
.modal-tip b{color:var(--gold)}
.modal label{display:block;font-size:11.5px;color:var(--txt2);margin:11px 0 5px}
.modal input{
  width:100%;padding:9px 11px;border-radius:7px;font-size:12px;
  background:rgba(0,0,0,.3);border:1px solid var(--line2);color:var(--txt);outline:none;
}
.modal input:focus{border-color:var(--cyan)}
.modal select{
  width:100%;padding:9px 11px;border-radius:7px;font-size:12px;
  background:rgba(0,0,0,.3);border:1px solid var(--line2);color:var(--txt);outline:none;
}
.modal select:focus{border-color:var(--cyan)}
.modal-foot{display:flex;justify-content:flex-end;gap:9px;margin-top:20px}

/* toast */
.toast{
  position:fixed;left:50%;top:76px;transform:translateX(-50%) translateY(-14px);
  background:rgba(14,23,40,.96);border:1px solid rgba(37,208,232,.5);
  color:#eaffff;padding:10px 20px;border-radius:8px;font-size:12.5px;z-index:200;
  opacity:0;pointer-events:none;transition:.25s;box-shadow:0 8px 26px rgba(0,0,0,.5);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* 地图标记（canvas 引擎用 DOM 标记） */
.gc-marker{
  position:absolute;transform:translate(-50%,-100%);pointer-events:none;z-index:8;
}
.gc-marker .pin{
  width:14px;height:14px;border-radius:50%;background:var(--cyan);
  border:2px solid #fff;box-shadow:0 0 14px var(--cyan);
}
.gc-marker .stem{width:2px;height:22px;background:linear-gradient(180deg,var(--cyan),transparent);margin:0 auto}
.gc-marker .lbl{
  position:absolute;left:50%;transform:translateX(-50%);top:-26px;white-space:nowrap;
  font-size:11px;background:rgba(10,17,32,.9);border:1px solid rgba(37,208,232,.5);
  padding:2px 8px;border-radius:20px;color:#eaffff;
}

/* ===== 地块调整工具（人工纠偏面板） ===== */
.be-panel{
  position:absolute;left:14px;top:64px;width:296px;z-index:60;
  background:linear-gradient(180deg,rgba(11,20,38,.97),rgba(8,15,30,.97));
  border:1px solid rgba(37,208,232,.45);border-radius:12px;
  box-shadow:0 12px 34px rgba(0,0,0,.55);padding:12px 12px 10px;
  font-size:12px;color:#cfe3f5;
}
.be-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.be-head b{font-size:13px;color:#eaffff;letter-spacing:.4px}
.be-x{background:none;border:none;color:#8ea6c4;cursor:pointer;font-size:14px;line-height:1}
.be-x:hover{color:#fff}
.be-tip{font-size:11px;line-height:1.7;color:#8ea6c4;background:rgba(37,208,232,.07);
  border:1px dashed rgba(37,208,232,.28);border-radius:8px;padding:6px 8px;margin-bottom:8px}
.be-sel{max-height:118px;overflow:auto;margin-bottom:8px;font-size:11px}
.be-sel i{color:#8ea6c4;font-style:normal}
.be-item{padding:3px 6px;margin-top:3px;background:rgba(255,255,255,.06);border-radius:5px;color:#dff}
.be-row{display:flex;align-items:center;gap:6px;margin-bottom:7px;flex-wrap:wrap}
/* 面板分组小标题（①…⑥），带色块前缀与渐隐横线 */
.be-grp{
  display:flex;align-items:center;gap:6px;white-space:nowrap;
  margin:10px 0 6px;color:#7fb9dd;font-size:10.5px;letter-spacing:.6px;
}
.be-grp:first-of-type{margin-top:2px}
.be-grp::before{content:'';flex:none;width:3px;height:11px;border-radius:2px;background:var(--cyan)}
.be-grp::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,rgba(37,208,232,.38),transparent)}
.be-lab{color:#8ea6c4;font-size:11px;min-width:52px}
.be-unit{color:#7d94ad;font-size:10px}
.be-lv{display:flex;gap:4px;flex-wrap:wrap}
.be-lvbtn,.be-btn{
  background:rgba(37,208,232,.10);border:1px solid rgba(37,208,232,.32);color:#cfe3f5;
  border-radius:7px;padding:5px 9px;font-size:11px;cursor:pointer;transition:.15s;flex:1;white-space:nowrap;
}
.be-lvbtn{flex:none;min-width:48px}
.be-btn:hover,.be-lvbtn:hover{background:rgba(37,208,232,.26);border-color:var(--cyan);color:#fff}
.be-btn.primary{background:rgba(37,208,232,.22);border-color:var(--cyan);color:#eaffff;font-weight:600}
.be-btn.ok{background:rgba(34,197,94,.22);border-color:#22c55e;color:#d9ffe7}
.be-btn.danger{background:rgba(239,68,68,.18);border-color:#ef4444;color:#ffdede}
.be-btn.danger:hover{background:rgba(239,68,68,.34);border-color:#f87171;color:#fff}
.be-panel input[type=number]{
  width:66px;background:rgba(255,255,255,.06);border:1px solid rgba(37,208,232,.3);
  border-radius:6px;color:#eaffff;padding:4px 6px;font-size:11px;outline:none;
}
.be-log{margin-top:8px;max-height:96px;overflow:auto;font-size:10.5px;line-height:1.65;
  color:#8ea6c4;border-top:1px solid rgba(37,208,232,.18);padding-top:6px}

/* ===== 上传基准地价图 → 矢量化（仅超管可见） ===== */
.be-vec[hidden]{display:none}
.be-vec{margin-top:8px;border-top:1px solid rgba(37,208,232,.18);padding-top:8px}
.be-step{font-size:11px;color:#8ea6c4;line-height:1.6;margin:6px 0 5px;font-weight:600}
.be-cv{display:block;width:100%;max-height:190px;object-fit:contain;
  background:#0a1220;border:1px solid rgba(37,208,232,.28);border-radius:8px;cursor:crosshair}
.be-swatch{display:inline-flex;align-items:center;gap:4px;margin:2px 4px 2px 0;padding:2px 6px;
  border-radius:5px;background:rgba(255,255,255,.06);font-size:10.5px;color:#dff}
.be-swatch i{width:12px;height:12px;border-radius:3px;display:inline-block;border:1px solid rgba(255,255,255,.3)}
.be-swatch b{font-weight:600;color:#eaffff}
.be-pcell{display:flex;align-items:center;gap:4px;margin-bottom:4px;font-size:10.5px;color:#8ea6c4}
.be-pcell span{width:34px;flex:none}
.be-pcell input{width:52px;background:rgba(255,255,255,.06);border:1px solid rgba(37,208,232,.3);
  border-radius:5px;color:#eaffff;padding:3px 5px;font-size:10.5px;outline:none}
.be-gcp{display:flex;justify-content:space-between;padding:3px 6px;margin-top:3px;
  background:rgba(255,255,255,.06);border-radius:5px;font-size:10.5px;color:#dff}

/* ===== ③ 图块微调（方向键盘 + 快捷步长档），与 skills/land-price-map-pipeline 的 be-panel.css 同源 ===== */
.be-mvpad{display:flex;flex-direction:column;align-items:center;gap:4px;margin:2px 0 8px}
.be-mvpad-mid{display:flex;gap:4px}
.be-dir{flex:none;min-width:44px;padding:5px 0;font-size:14px;line-height:1.1;font-weight:700}
.be-dir:active{transform:translateY(1px)}
.be-mvqrow{gap:4px}
.be-mvq{flex:1;min-width:38px;padding:4px 0;text-align:center;font-size:10.5px}

/* ===== 规程修正因素面板（∑Ki 区域因素 + Kt/Ks/Ka/Ke/Kx/Kb/Kf 个别因素） ===== */
.pf-adv{margin:8px 0 2px;border:1px solid rgba(255,255,255,.10);border-radius:8px;
  background:rgba(255,255,255,.03);overflow:hidden}
.pf-adv>summary{padding:7px 10px;font-size:11.5px;color:var(--txt2);cursor:pointer;
  list-style:none;user-select:none}
.pf-adv>summary::-webkit-details-marker{display:none}
.pf-adv>summary::before{content:'▸ ';color:var(--gold)}
.pf-adv[open]>summary::before{content:'▾ '}
.pf-adv>summary:hover{color:var(--txt);background:rgba(255,255,255,.04)}
.pf-adv-body{padding:4px 10px 10px;border-top:1px solid rgba(255,255,255,.08)}
.pf-sec{margin:10px 0 6px;font-size:11px;color:var(--txt2);display:flex;
  justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}
.pf-ki{font-size:10.5px;color:var(--gold);font-weight:600}
/* 参数分组小标题（剩余法等多种方法共用） */
.pf-sub{margin:10px 0 4px;font-size:10.5px;font-weight:700;color:var(--gold);
  border-bottom:1px dashed rgba(255,255,255,.12);padding-bottom:2px}
.pf-sub:first-child{margin-top:2px}
/* 测算明细折叠（收益法 / 剩余法共用） */
.ic-detail{margin:6px 0}
.ic-detail>summary{font-size:10.5px;color:var(--txt2);cursor:pointer;list-style:none;
  padding:4px 0;user-select:none}
.ic-detail>summary::-webkit-details-marker{display:none}
.ic-detail>summary::before{content:'▸ ';color:var(--gold)}
.ic-detail[open]>summary::before{content:'▾ '}
.ic-detail table{font-size:10px;margin-top:4px}
.pf-note{margin-top:8px;font-size:10px;line-height:1.6;color:var(--txt3)}
/* ★ 基准地价图层取点条（z63） */
.pf-pick-row{margin-top:8px}
.pf-pick-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pf-pick-src{font-size:10px;color:var(--txt3)}
.pf-pick-src.ok{color:#5eead4}
.pf-pick-src.warn{color:var(--gold)}
.pf-region{max-height:260px;overflow-y:auto;border:1px solid rgba(255,255,255,.07);
  border-radius:6px;padding:6px 8px}
.pf-rgroup{margin:6px 0 3px;font-size:10.5px;font-weight:700;color:var(--gold);
  border-bottom:1px dashed rgba(255,255,255,.12);padding-bottom:2px}
.pf-rgroup:first-child{margin-top:0}
.pf-rrow{display:flex;align-items:center;gap:6px;padding:2px 0}
.pf-rf{flex:1;min-width:0;font-size:10.5px;color:var(--txt2);line-height:1.4}
/* ★ 审核台数据包导入清单（#pf-import） */
.im-list{max-height:230px;overflow-y:auto;border:1px solid rgba(255,255,255,.07);
  border-radius:6px;padding:5px}
.im-item{display:flex;align-items:flex-start;gap:7px;padding:6px 7px;margin-bottom:4px;
  border:1px solid transparent;border-radius:6px;background:rgba(255,255,255,.03);cursor:pointer}
.im-item:last-child{margin-bottom:0}
.im-item.static{cursor:default}
.im-item:hover{background:rgba(255,255,255,.06)}
.im-item.on{border-color:rgba(255,197,61,.55);background:rgba(255,197,61,.09)}
.im-item input[type=radio]{margin-top:3px;flex-shrink:0;accent-color:var(--gold)}
.im-item-bd{min-width:0;flex:1}
.im-t{font-size:11.5px;font-weight:600;color:#fff;line-height:1.5}
.im-t .im-s{font-weight:400;color:var(--txt2)}
.im-m{font-size:10px;color:var(--txt3);line-height:1.7}
.im-m b{color:var(--cyan);font-variant-numeric:tabular-nums}
#im-text{
  width:100%;margin-top:3px;background:rgba(0,0,0,.25);color:var(--txt);
  border:1px solid rgba(255,255,255,.12);border-radius:5px;padding:6px 8px;
  font:11px/1.6 ui-monospace,Menlo,Consolas,monospace;resize:vertical}
#im-text:focus{outline:none;border-color:rgba(37,208,232,.55)}
.pf-rf em{display:block;font-style:normal;font-size:9.5px;color:var(--txt3)}
.pf-rrow select{flex:none;width:74px;padding:3px 4px;font-size:10.5px}
.pf-rc{flex:none;width:58px;text-align:right;font-size:10.5px;color:var(--txt3);
  font-variant-numeric:tabular-nums}
.pf-rc.up{color:#ff7875}
.pf-rc.down{color:#5eead4}

/* 报告五级小标题（报告内 4.1 / 8.1 之类） */
.report-h5{margin:10px 0 4px;font-size:11.5px;font-weight:600;color:var(--txt2);
  border-left:3px solid var(--gold);padding-left:6px}

/* ================= 报告编辑台（全屏） ================= */
.desk{position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;
  background:linear-gradient(180deg,#0b1322,#070c16)}
.desk[hidden]{display:none}
.desk-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding:12px 18px;border-bottom:1px solid var(--line);background:rgba(10,17,32,.85)}
.desk-title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}
.desk-acts{display:flex;gap:8px;flex-wrap:wrap}
.desk-body{flex:1;overflow:auto;padding:26px 18px}
.desk-doc{max-width:960px;margin:0 auto;background:#0e1728;border:1px solid var(--line2);
  border-radius:12px;padding:34px 44px;min-height:62vh;outline:none;color:#dbe7ff;
  font-size:14px;line-height:1.9;box-shadow:0 12px 40px rgba(0,0,0,.45)}
.desk-doc:focus{border-color:var(--cyan)}
.desk-foot{padding:9px 18px;border-top:1px solid var(--line);color:#8ea3c8;font-size:12px;
  background:rgba(10,17,32,.85)}

/* ==========================================================================
 * ★ 公文排版（2026-10-13 用户明令：29 节分节向导按「对标案例」的排版输出）
 *
 *   对标样本：技术报告_模板.docx
 *   （凤凰县沱江镇土桥垅新凤源3栋8-102室，深国咨湘评[2026]土（技）字第0905号）
 *   实测参数（解析 word/document.xml + styles.xml，逐段落实测）：
 *     封面主标题       22pt  宋体        粗体  居中  行距 2.0
 *     封面元信息行     16pt  楷体_GB2312 粗体  左对齐 行距 2.0~2.5
 *     封面关键词行     16pt  楷体_GB2312 常规  左对齐 行距 2.33
 *     部分标题         16pt  仿宋        粗体  居中  行距 2.0   （样式2「第一部分 总述」）
 *     一级节标题       14pt  仿宋        粗体  左对齐 行距 1.92 无缩进（样式3「一、估价项目名称」）
 *     二级小标题       14pt  仿宋_GB2312 粗体  左对齐 行距 1.92 首行缩进 2 字符（㈠ / 1、条目）
 *     正文             14pt  仿宋_GB2312 常规  行距 1.92  首行缩进 2 字符（w:firstLineChars=200）
 *     表题             14pt  仿宋_GB2312 粗体  居中  行距 1.92
 *     表格             10.5pt（五号）仿宋_GB2312 居中 行距 1.0~1.25（docDefaults 未设 sz，Word 默认五号）
 *     注释小字         9pt~10.5pt 仿宋_GB2312，行距 1.92
 *
 *   ★ 作用域：只在 .doc-page 内生效（29 节向导预览 #wz-preview、全屏编辑台 #desk-doc）。
 *     深色面板里的其他报告卡片 / 测算面板不受影响；类名沿用 report-* 不动，
 *     故 docx-export.js 的结构解析与导出链路不受影响。
 * ========================================================================== */
.doc-page{
  background:#fff;color:#000;
  font-family:'仿宋_GB2312','仿宋',FangSong,STFangsong,'宋体',SimSun,serif;
  font-size:14pt;line-height:1.92;
  text-align:justify;
}
/* 纸面：预览区与编辑台都按 A4 观感排版 */
.result.doc-page{
  border-radius:8px;padding:26px 30px;margin-top:6px;
  box-shadow:0 6px 22px rgba(0,0,0,.35);
}
.desk-doc.doc-page{
  background:#fff;color:#000;border:1px solid #d8d8d8;border-radius:4px;
  padding:42px 52px;box-shadow:0 10px 34px rgba(0,0,0,.28);
}
.desk-doc.doc-page:focus{border-color:#8aa0b8}

/* —— 正文：14pt 仿宋_GB2312，行距 1.92，首行缩进 2 字符，两端对齐 —— */
.doc-page .report-text{
  font-size:14pt;line-height:1.92;color:#000;text-align:justify;
  text-indent:2em;margin:0 0 2px;padding:0;
  background:none;border:0;border-radius:0;
}
.doc-page .report-text b,.doc-page .report-text strong{font-weight:700}

/* —— 一级节标题：14pt 仿宋 粗体，无缩进 —— */
.doc-page .report-h4{
  font-family:'仿宋','仿宋_GB2312',FangSong,STFangsong,serif;
  font-size:14pt;font-weight:700;color:#000;letter-spacing:0;
  line-height:1.92;margin:6px 0 2px;padding:0;border:0;text-indent:0;
}
.doc-page .report-h4:first-child{margin-top:0}

/* —— 二级小标题：14pt 仿宋_GB2312 粗体，首行缩进 2 字符 —— */
.doc-page .report-h5{
  font-family:'仿宋_GB2312','仿宋',FangSong,STFangsong,serif;
  font-size:14pt;font-weight:700;color:#000;
  line-height:1.92;margin:2px 0;padding:0;text-indent:2em;
}

/* —— 部分标题：16pt 仿宋 粗体 居中，行距 2.0 —— */
.doc-page .report-part{
  font-family:'仿宋','仿宋_GB2312',FangSong,STFangsong,serif;
  font-size:16pt;font-weight:700;color:#000;text-align:center;
  line-height:2;margin:22px 0 10px;padding:0;border:0;
}
.doc-page .report-part:first-child{margin-top:0}

/* —— 表格：10.5pt（五号）仿宋_GB2312，居中，行距 1.15 —— */
.doc-page .report-table{
  width:100%;border-collapse:collapse;font-size:10.5pt;line-height:1.15;
  margin:8px 0;color:#000;
}
.doc-page .report-table th,.doc-page .report-table td{
  border:1px solid #000;padding:3px 6px;text-align:center;vertical-align:middle;
  font-family:'仿宋_GB2312','仿宋',FangSong,STFangsong,serif;font-size:10.5pt;
}
.doc-page .report-table th{font-weight:700;background:#f2f2f2;white-space:normal}
.doc-page .report-table .rt-k{text-align:left;white-space:normal}
.doc-page .report-table td b{color:#000}

/* —— 注释 / 免责小字：10.5pt 仿宋_GB2312（对标 9pt~10.5pt 一档） —— */
.doc-page .report-disclaimer{
  font-family:'仿宋_GB2312','仿宋',FangSong,STFangsong,serif;
  font-size:10.5pt;line-height:1.6;color:#444;margin:6px 0;padding:0;
  background:none;border:0;border-radius:0;text-indent:2em;
}
/* —— 生成引擎标注（系统元信息，非报告正文）：小字灰，不入正文层级 —— */
.doc-page .report-meta{
  display:block;font-size:9pt;line-height:1.5;color:#888;
  margin:4px 0 10px;padding:0;border:0;text-align:right;text-indent:0;
}
/* —— 表题（表1 ×××）：14pt 仿宋_GB2312 粗体 居中 —— */
.doc-page .doc-cap{
  font-family:'仿宋_GB2312','仿宋',FangSong,STFangsong,serif;
  font-size:14pt;font-weight:700;color:#000;text-align:center;
  line-height:1.92;margin:10px 0 4px;text-indent:0;
}

/* —— 封面（对标模板第 1~12 段） —— */
.doc-page .doc-cover{
  text-align:center;margin:0 0 26px;
}
.doc-page .doc-cover-title{
  font-family:'宋体',SimSun,serif;font-size:22pt;font-weight:700;color:#000;
  text-align:center;line-height:2;margin:0 0 26px;text-indent:0;
}
.doc-page .doc-cover-line{
  font-family:'楷体_GB2312','楷体',KaiTi,STKaiti,serif;
  font-size:16pt;font-weight:700;color:#000;text-align:left;
  line-height:2.2;margin:0;text-indent:0;
}
.doc-page .doc-cover-key{
  font-family:'楷体_GB2312','楷体',KaiTi,STKaiti,serif;
  font-size:16pt;font-weight:400;color:#000;text-align:left;
  line-height:2.2;margin:0;text-indent:0;
}
.doc-page .doc-cover-sign{
  font-family:'楷体_GB2312','楷体',KaiTi,STKaiti,serif;
  font-size:16pt;font-weight:400;color:#000;text-align:right;
  line-height:2.2;margin:14px 0 0;text-indent:0;
}

/* ---------- 待核数据提示条（★ 2026-10-13 新增） ----------
 * 用户明令：需要核实的数据要停下来提出，不得擅自决定。
 * 导出前若引擎发现必须由证载/委托方确认的数据，在报告卡片顶部显示此条。 */
.pending-bar{background:#fff7e6;border:1px solid #f0b429;border-left:5px solid #e8890c;
  border-radius:6px;padding:12px 14px;margin:0 0 14px;font-size:13px;line-height:1.7;color:#5c3a00}
.pending-bar>b{display:block;font-size:14px;color:#a35b00;margin-bottom:6px}
.pending-bar ul{margin:6px 0 0;padding-left:20px}
.pending-bar li{margin-bottom:9px}
.pending-bar li b{color:#8a4b00}
.pending-bar .pb-need{color:#0a6b3d;font-weight:600}

/* ============================================================
 *  「进化」案例闭环流水线面板
 * ============================================================ */
.ev-mask{position:fixed;inset:0;background:rgba(12,18,30,.55);z-index:1200;display:flex;align-items:center;justify-content:center;padding:24px}
.ev-mask[hidden]{display:none}
.ev-panel{background:#fff;width:min(1080px,96vw);max-height:92vh;overflow:auto;border-radius:12px;box-shadow:0 18px 60px rgba(0,0,0,.32);padding:18px 20px 14px;color:#1f2933}
.ev-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;border-bottom:2px solid #e3e8ef;padding-bottom:10px;margin-bottom:12px}
.ev-title b{font-size:16.5px;color:#14304f}
.ev-sub{display:block;font-size:12px;color:#6b7a8d;margin-top:3px}
.ev-head-btns{display:flex;gap:8px;align-items:center}
.ev-btn{background:#1f6fd0;color:#fff;border:0;border-radius:6px;padding:7px 13px;font-size:12.5px;cursor:pointer;font-family:inherit}
.ev-btn:hover{background:#17589f}
.ev-x{background:transparent;border:0;font-size:19px;color:#7b8794;cursor:pointer;padding:2px 8px}
.ev-x:hover{color:#c0392b}
.ev-steps{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:10px}
.ev-step{background:#f4f7fb;border:1px solid #dfe6ef;border-left:3px solid #1f6fd0;border-radius:5px;padding:7px 8px;font-size:11.5px;color:#243b53;line-height:1.35}
.ev-step i{display:inline-block;font-style:normal;font-weight:700;color:#1f6fd0;margin-right:3px}
.ev-step em{display:block;font-style:normal;font-size:10.5px;color:#7b8794;margin-top:3px}
.ev-warn{background:#fff8e6;border:1px solid #f0d9a0;border-radius:6px;padding:8px 11px;font-size:11.5px;color:#6b5310;line-height:1.6;margin-bottom:12px}
.ev-warn code{background:#fff;padding:1px 4px;border-radius:3px;font-size:11px}
.ev-sec{font-size:13px;font-weight:700;color:#14304f;border-left:3px solid #1f6fd0;padding-left:8px;margin:14px 0 8px;display:flex;align-items:center;gap:10px}
.ev-hint{font-size:11px;font-weight:400;color:#7b8794}
.ev-clear{margin-left:auto;background:transparent;border:1px solid #ccd5df;color:#5a6875;border-radius:5px;padding:3px 9px;font-size:11px;cursor:pointer;font-family:inherit}
.ev-clear:hover{background:#f2f5f8}
.ev-table-wrap{border:1px solid #e3e8ef;border-radius:6px;overflow:auto;max-height:230px}
.ev-table{width:100%;border-collapse:collapse;font-size:11.5px}
.ev-table th{background:#f4f7fb;color:#334e68;font-weight:600;padding:7px 8px;text-align:left;border-bottom:1px solid #e3e8ef;position:sticky;top:0;white-space:nowrap}
.ev-table td{padding:6px 8px;border-bottom:1px solid #f0f3f7;white-space:nowrap}
.ev-table tr{cursor:pointer}
.ev-table tr:hover{background:#f8fafc}
.ev-table tr.sel{background:#e8f1fc}
.mono{font-family:Consolas,Monaco,monospace;color:#1f6fd0}
.ell{max-width:280px;overflow:hidden;text-overflow:ellipsis}
.dim{color:#9aa5b1}
.ev-empty{text-align:center;color:#9aa5b1;padding:16px;cursor:default}
.ev-b{display:inline-block;padding:1px 7px;border-radius:9px;font-size:10.5px}
.ev-b.done{background:#e3f5e9;color:#1c7a43}
.ev-b.doing{background:#fff2d9;color:#9a6400}
.ev-b.todo{background:#eef1f5;color:#7b8794}
.ev-ops{display:grid;grid-template-columns:1fr 1.4fr 1.6fr;gap:9px}
.ev-op{display:flex;flex-direction:column;gap:4px}
.ev-op label{font-size:11px;color:#5a6875;font-weight:600}
.ev-op label small{font-weight:400;color:#9aa5b1;margin-left:4px}
.ev-op input,.ev-op select,.ev-stage-row input,.ev-stage-row select{border:1px solid #ccd5df;border-radius:5px;padding:6px 8px;font-size:12px;font-family:inherit;background:#fff;color:#1f2933}
.ev-op input:focus,.ev-op select:focus,.ev-stage-row input:focus,.ev-stage-row select:focus{outline:none;border-color:#1f6fd0}
.ev-row2{display:flex;gap:6px}
.ev-row2 input{flex:1;min-width:0}
.ev-btns{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.ev-btns .ev-btn{background:#4a5b6e}
.ev-btns .ev-btn:hover{background:#38475a}
.ev-stage-row{display:flex;gap:7px;align-items:center;margin-top:8px;padding:9px 11px;background:#f7f9fc;border:1px solid #e3e8ef;border-radius:6px}
.ev-stage-row label{font-size:11.5px;color:#5a6875;font-weight:600}
.ev-stage-row input{flex:1;min-width:0}
.ev-out{background:#1b2733;color:#c8d6e5;border-radius:6px;padding:11px;font-size:11.5px;line-height:1.55;max-height:240px;overflow:auto;white-space:pre-wrap;word-break:break-all;margin:0;font-family:Consolas,Monaco,monospace}
.ev-out.err{background:#3a1f22;color:#f2b8b5}
.ev-foot{font-size:10.5px;color:#9aa5b1;margin-top:9px;text-align:center}
.ev-foot code{background:#f2f5f8;padding:1px 4px;border-radius:3px}
@media(max-width:900px){
  .ev-steps{grid-template-columns:repeat(3,1fr)}
  .ev-ops{grid-template-columns:1fr}
}

/* 「进化」面板 · AI 深度审核补充 */
.ev-btns .ev-btn.ai{background:#7c4dbd}
.ev-btns .ev-btn.ai:hover{background:#5f3a95}
.ev-btn.ghost{background:transparent;border:1px solid #ccd5df;color:#4a5b6e}
.ev-btn.ghost:hover{background:#eef2f6}
.ev-rpt{width:100%;min-height:110px;max-height:260px;border:1px solid #ccd5df;border-radius:6px;padding:9px 11px;font-size:12px;font-family:inherit;background:#fff;color:#1f2933;resize:vertical;line-height:1.6}
.ev-rpt:focus{outline:none;border-color:#7c4dbd}
.ev-row3{display:flex;align-items:center;gap:10px;margin-top:7px}

/* ===== 进化面板 · 页签与模板库 ===== */
.ev-tabs {
  display: flex; gap: 6px;
  border-bottom: 1px solid #dde4ec;
  margin: 10px 0 4px;
}
.ev-tab {
  border: 1px solid transparent; border-bottom: none;
  background: transparent; color: #6b7a8d;
  font-size: 12.5px; padding: 6px 14px; cursor: pointer;
  border-radius: 5px 5px 0 0;
}
.ev-tab:hover { background: #f0f4f9; color: #33465c; }
.ev-tab.on {
  background: #fff; color: #1f6fb2; font-weight: 600;
  border-color: #dde4ec; margin-bottom: -1px;
}
.ev-pane.hide { display: none; }
.ev-warn {
  background: #fff8e6; border: 1px solid #f0d9a0;
  border-radius: 5px; padding: 8px 11px;
  font-size: 12px; line-height: 1.7; color: #7a5a12;
  margin: 10px 0;
}
.ev-tpltree { font-size: 12px; line-height: 1.8; }
.ev-tplcat {
  font-weight: 600; color: #2c3e50; margin: 9px 0 4px;
  border-left: 3px solid #4a90d9; padding-left: 7px;
}
.ev-tplitem {
  display: flex; align-items: center; gap: 7px;
  padding: 4px 8px; margin: 2px 0 2px 12px;
  border-radius: 4px; cursor: pointer;
}
.ev-tplitem:hover { background: #eef4fa; }
.ev-tplitem.on { background: #e3eefb; color: #14538a; font-weight: 600; }
.ev-tpltag {
  font-size: 10.5px; padding: 1px 6px; border-radius: 8px;
  border: 1px solid #ccd5df; color: #6b7a8d; white-space: nowrap;
}
.ev-tpltag.ok { background: #e6f6ec; border-color: #9fd8b4; color: #1e7a45; }
.ev-tpltag.wait { background: #fff6e5; border-color: #f0cf9a; color: #8a5a12; }
.ev-tpltag.bone { background: #f1f3f6; border-color: #d8dee6; color: #78899b; }
.ev-tplpick {
  margin: 8px 0 4px; padding: 9px 11px;
  background: #f7fafd; border: 1px solid #dbe4ee;
  border-radius: 5px; font-size: 12px; line-height: 1.8;
}
.ev-tplcand {
  display: inline-block; margin: 3px 5px 3px 0;
  padding: 4px 10px; border: 1px solid #b9cbe0;
  border-radius: 4px; background: #fff; cursor: pointer;
  font-size: 12px;
}
.ev-tplcand:hover { background: #e3eefb; border-color: #4a90d9; }
.ev-tplcand b { color: #14538a; }
.ev-tpldetail {
  font-size: 12px; line-height: 1.75; max-height: 420px;
  overflow: auto; padding: 10px 12px;
  background: #fbfcfe; border: 1px solid #e2e8f0; border-radius: 5px;
  white-space: pre-wrap; word-break: break-word;
}
.ev-tpldetail h4 {
  margin: 11px 0 5px; font-size: 12.5px; color: #2c3e50;
  border-left: 3px solid #4a90d9; padding-left: 7px;
}
.ev-tpldetail h5 { margin: 8px 0 3px; font-size: 12px; color: #40566d; }
.ev-tpldetail ul { margin: 3px 0 3px 18px; padding: 0; }
.ev-tpldetail li { margin: 2px 0; }
.ev-tpldetail table { border-collapse: collapse; width: 100%; margin: 6px 0; }
.ev-tpldetail td, .ev-tpldetail th {
  border: 1px solid #dde4ec; padding: 4px 7px; font-size: 11.5px;
}
.ev-tpldetail th { background: #f2f6fa; }

/* ============================================================
 * 评估流水线（AI 做一步 · 人工确认一步）  assets/js/pipeline-ui.js
 * 深蓝 + 金色：与门户口径一致。
 * ============================================================ */
#card-pipeline { --pl-navy: #12345b; --pl-gold: #b8892f; --pl-line: #dde4ec; }
#card-pipeline .pl-tip { font-size: 12px; line-height: 1.75; color: #5a6b7f; margin: 4px 0 10px; }
#card-pipeline .pl-tip b { color: #a3382c; }

.pl-setup { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 12px; }
.pl-setup label { display: flex; flex-direction: column; gap: 3px; font-size: 11.5px; color: #5a6b7f; }
.pl-setup select, .pl-setup input {
  height: 30px; padding: 0 8px; border: 1px solid var(--pl-line); border-radius: 4px;
  font-size: 12.5px; color: #1f2a37; background: #fff; min-width: 168px;
}
.pl-empty { padding: 16px; text-align: center; color: #8a97a6; font-size: 12.5px; background: #f7f9fc; border-radius: 6px; }

.pl-top { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 8px; flex-wrap: wrap; }
.pl-job { font-size: 12px; color: #5a6b7f; }
.pl-job b { color: var(--pl-navy); font-family: ui-monospace, Consolas, monospace; }
.pl-prog { position: relative; flex: 1; min-width: 160px; height: 8px; background: #eef2f7; border-radius: 5px; }
.pl-prog i { position: absolute; left: 0; top: 0; bottom: 0; background: linear-gradient(90deg, #12345b, #b8892f); border-radius: 5px; transition: width .3s; }
.pl-prog span { position: absolute; right: 0; top: -18px; font-size: 11px; color: #5a6b7f; }

.pl-steps { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 14px; }
.pl-step {
  display: flex; align-items: center; gap: 6px; padding: 5px 9px; border: 1px solid var(--pl-line);
  border-radius: 5px; background: #fff; font-size: 12px; color: #47566a;
}
.pl-step.cur { border-color: var(--pl-gold); box-shadow: 0 0 0 2px rgba(184,137,47,.14); background: #fffdf7; }
.pl-id { font-family: ui-monospace, Consolas, monospace; font-size: 11px; color: #8a97a6; }
.pl-step.cur .pl-id { color: var(--pl-gold); font-weight: 700; }
.pl-nm { white-space: nowrap; }
.pl-must {
  font-style: normal; font-size: 10px; padding: 0 4px; margin-left: 4px; border-radius: 3px;
  background: #fdecea; color: #a3382c; border: 1px solid #f5c6c0;
}
.pl-opt { font-style: normal; font-size: 10px; margin-left: 6px; color: #7a8899; }
.pl-b-idle, .pl-b-wait, .pl-b-ok, .pl-b-back, .pl-b-skip { font-size: 10.5px; padding: 1px 5px; border-radius: 3px; white-space: nowrap; }
.pl-b-idle { background: #eef2f7; color: #7a8899; }
.pl-b-wait { background: #fff4e0; color: #9a6a10; }
.pl-b-ok { background: #e8f5ec; color: #1f7a43; }
.pl-b-back { background: #fdecea; color: #a3382c; }
.pl-b-skip { background: #eceef5; color: #5a5f8a; }

.pl-cur { border: 1px solid var(--pl-line); border-radius: 7px; padding: 12px; background: #fbfcfe; }
.pl-curhd { font-size: 13.5px; color: #1f2a37; margin-bottom: 8px; }
.pl-curhd b { color: var(--pl-navy); }
.pl-todo { font-size: 12.5px; line-height: 1.7; margin-bottom: 10px; }
.pl-todo span { display: inline-block; font-size: 10.5px; color: #fff; background: var(--pl-navy); padding: 1px 6px; border-radius: 3px; margin-right: 6px; }
.pl-todo p { display: inline; color: #47566a; }

.pl-two { display: grid; grid-template-columns: 1fr 1.25fr; gap: 10px; }
@media (max-width: 760px) { .pl-two { grid-template-columns: 1fr; } }
.pl-col { border: 1px solid var(--pl-line); border-radius: 6px; padding: 9px 11px; background: #fff; }
.pl-col h5 { margin: 0 0 6px; font-size: 11.5px; color: #5a6b7f; font-weight: 600; }
.pl-col p { margin: 0; font-size: 12.5px; line-height: 1.7; color: #33414f; }
.pl-col ol { margin: 0; padding-left: 18px; font-size: 12.5px; line-height: 1.75; color: #33414f; }
.pl-col ol li { margin-bottom: 3px; }
.pl-col.ai { border-left: 3px solid #2b6ca3; }
.pl-col.hm { border-left: 3px solid var(--pl-gold); }
.pl-base { margin-top: 8px; font-size: 11px; color: #7a8899; line-height: 1.6; }

.pl-out { margin-top: 12px; border-top: 1px dashed var(--pl-line); padding-top: 10px; }
.pl-sum { font-size: 12.5px; color: #1f2a37; font-weight: 600; margin-bottom: 8px; }
.pl-sum em { font-style: normal; font-weight: 400; font-size: 10.5px; color: #8a97a6; margin-left: 8px; }
.pl-block { background: #fdecea; border: 1px solid #f5c6c0; color: #a3382c; font-size: 12px; padding: 6px 9px; border-radius: 5px; margin-bottom: 8px; }

.pl-checks { display: flex; flex-direction: column; gap: 3px; margin-bottom: 10px; }
.pl-ck { display: flex; gap: 6px; align-items: baseline; font-size: 12px; padding: 3px 0; }
.pl-ck b { width: 13px; flex: none; text-align: center; }
.pl-ck span { flex: none; min-width: 150px; color: #33414f; }
.pl-ck em { font-style: normal; color: #7a8899; line-height: 1.55; }
.ck-ok b { color: #1f7a43; }
.ck-miss b { color: #a3382c; }
.ck-warn b { color: #b8892f; }

.pl-tb { width: 100%; border-collapse: collapse; margin-bottom: 10px; font-size: 11.5px; }
.pl-tb th { background: #f2f6fa; color: #5a6b7f; font-weight: 600; text-align: left; padding: 4px 7px; border: 1px solid var(--pl-line); }
.pl-tb td { padding: 4px 7px; border: 1px solid var(--pl-line); color: #33414f; vertical-align: top; line-height: 1.55; }
.pl-tb td.v { color: var(--pl-navy); font-weight: 600; font-family: ui-monospace, Consolas, monospace; }
.pl-tb td.f { font-family: ui-monospace, Consolas, monospace; color: #2b6ca3; }

/* ── 决策层（步间调度）：只出建议，不改数据、不替人确认 ── */
.pl-dec { border: 1px solid #d8e0ea; background: #f8fafc; border-radius: 6px; padding: 9px 11px; margin: 10px 0 4px; }
.pl-dec h6 { margin: 0 0 6px; font-size: 12.5px; color: #1f2a37; display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.pl-dec .lv { font-size: 10.5px; padding: 1px 8px; border-radius: 9px; border: 1px solid; white-space: nowrap; }
.pl-dec .lv.ok { color: #1b6b4a; background: #e7f5ee; border-color: #b9e0cd; }
.pl-dec .lv.warn { color: #a8791d; background: #fdf3e0; border-color: #f0d9ac; }
.pl-dec .lv.gray { color: #5b6674; background: #eef1f5; border-color: #d8dee7; }
.pl-dec .lv.stop { color: #a3382c; background: #fdecea; border-color: #f5c6c0; }
.pl-dec .why { font-size: 12px; color: #41505f; line-height: 1.7; }
.pl-dec .lb { font-size: 11px; color: #8a97a6; margin: 9px 0 3px; }
.pl-dec ul { margin: 0 0 0 16px; padding: 0; font-size: 12px; color: #41505f; line-height: 1.7; }
.pl-dec ul i { font-style: normal; color: #a3382c; }
.pl-dec .opt { border: 1px solid #e2e8f0; border-radius: 5px; padding: 7px 9px; margin-top: 5px; background: #fff; }
.pl-dec .opt.top { border-color: #d8b45c; background: #fdfaf0; }
.pl-dec .tg { display: inline-block; font-size: 10.5px; padding: 0 6px; border-radius: 8px; margin-right: 6px; border: 1px solid #d8dee7; color: #5b6674; }
.pl-dec .tg.fix { color: #1b6b4a; border-color: #b9e0cd; background: #e7f5ee; }
.pl-dec .tg.swap { color: #1c3f78; border-color: #b8c8e0; background: #eef3fa; }
.pl-dec .tg.hold { color: #8a6d1f; border-color: #e6d8a8; background: #fdf7e6; }
.pl-dec .sm { font-size: 11.5px; color: #62707f; line-height: 1.6; margin-top: 3px; }
.pl-dec .bn { margin-top: 8px; font-size: 10.5px; color: #a8b2bf; line-height: 1.55; }

.pl-acts { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 12px; }
.pl-in { height: 30px; padding: 0 9px; border: 1px solid var(--pl-line); border-radius: 4px; font-size: 12.5px; min-width: 190px; flex: 1; max-width: 320px; }
.pl-done { font-size: 12px; color: #1f7a43; }
.pl-signed { margin-top: 8px; font-size: 11.5px; color: #1f7a43; }
.pl-returned { margin-top: 8px; font-size: 11.5px; color: #a3382c; }

.pl-gate { margin-top: 12px; padding: 8px 11px; border-radius: 6px; font-size: 12.5px; }
.pl-gate.ok { background: #e8f5ec; color: #1f7a43; border: 1px solid #bfe3cb; }
.pl-gate.no { background: #fdf3e6; color: #8a6216; border: 1px solid #f0d9ae; }

/* ── 写回进化台案例（2026-10-26）──
   配色跟面板一致（深底 + 虚线边框）：这块曾在深色面板里用了浅底，整屏最亮的一块
   反而抢走当前步的注意力，改成同色系后与「基准地价输入口」视觉权重一致。 */
.pl-evo { margin-top: 12px; padding: 10px 11px; border: 1px dashed var(--line2); border-radius: 7px; background: rgba(59,130,246,.05); }
.pl-evo h5 { margin: 0 0 6px; font-size: 13px; color: var(--txt); }
.pl-evo p { margin: 0 0 8px; font-size: 12px; line-height: 1.7; color: var(--txt2); }
.pl-evo code { background: rgba(255,255,255,.07); padding: 1px 4px; border-radius: 3px; font-size: 11.5px; color: var(--txt); }
.pl-evose { display: flex; gap: 6px; flex-wrap: wrap; align-items: flex-end; }
.pl-evose label { flex: 1 1 100%; font-size: 12px; color: var(--txt2); display: flex; flex-direction: column; gap: 4px; }
.pl-evose input { width: 100%; padding: 6px 8px; border: 1px solid var(--line2); border-radius: 5px; font-size: 12.5px; background: var(--bg2); color: var(--txt); }
.pl-evo-note { font-size: 12px; color: var(--txt3); margin: 6px 0; }
.pl-evo-note.ok { color: var(--green); }
.pl-evo-note.warn { color: var(--gold); }
.pl-evo-out { margin-top: 8px; font-size: 12px; color: var(--txt); }
.pl-evo-out ul { margin: 4px 0 0; padding-left: 16px; }
.pl-evo-out li { margin: 2px 0; color: var(--txt2); }
.pl-evo-out li.ok { color: var(--green); }
.pl-evo-out li.no { color: var(--red); }

.pl-toast {
  position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%);
  background: #12345b; color: #fff; font-size: 13px; padding: 9px 18px; border-radius: 6px;
  z-index: 9999; box-shadow: 0 6px 20px rgba(18,52,91,.32);
}

/* ── 流水线：适配右侧 25% 窄面板（2026-10-20 实测截图后调整）
 * 面板宽度约 330px，横排两栏与四列表格都会被压变形，故一律纵向排布。 */
#card-pipeline .pl-two { grid-template-columns: 1fr; }
#card-pipeline .pl-ck { flex-wrap: wrap; }
#card-pipeline .pl-ck span { min-width: 0; flex: 1 1 100%; }
#card-pipeline .pl-ck em { flex: 1 1 100%; padding-left: 19px; }
#card-pipeline .pl-in { min-width: 120px; max-width: none; }
#card-pipeline .pl-acts .btn-primary, #card-pipeline .pl-acts .btn-ghost { flex: 1 1 auto; }
#card-pipeline .pl-step { font-size: 11.5px; padding: 4px 7px; }
#card-pipeline .pl-nm { white-space: normal; }

.pl-pv { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
.pl-pvitem {
  border: 1px solid var(--pl-line); border-radius: 5px; padding: 6px 8px; background: #fff;
}
.pl-pvitem .k { font-size: 11px; color: #5a6b7f; margin-bottom: 2px; }
.pl-pvitem .v {
  font-size: 13px; color: var(--pl-navy); font-weight: 700;
  font-family: ui-monospace, Consolas, monospace; word-break: break-all; line-height: 1.4;
}
.pl-pvitem .f {
  font-size: 11px; color: #2b6ca3; font-family: ui-monospace, Consolas, monospace;
  background: #f4f8fc; border-radius: 3px; padding: 2px 5px; margin: 3px 0; word-break: break-all;
}
.pl-pvitem .s { font-size: 10.5px; color: #8a97a6; line-height: 1.5; margin-top: 3px; }
.pl-curdone { background: #f4fbf6; border-color: #bfe3cb; }
.pl-curdone .pl-curhd { color: #1f7a43; }

/* ── 基准地价成果输入口（2026-10-21）
 * 用户要求「人工可以确认选择什么表格的，默认是AI选择」。
 * 面板只有约 330px 宽：两个下拉各占一行，关键数（表号/P0/Kt/Kn）纵向两列，
 * 表号最长，必须允许换行，否则会把 330px 撑出横向滚动条。 */
.pl-bench {
  border: 1px solid var(--pl-line); border-radius: 6px; background: #fbfcfe;
  padding: 8px 9px; margin: 10px 0;
}
.pl-bench .pl-bhd {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 7px;
}
.pl-bench .pl-bhd b { font-size: 12.5px; color: var(--pl-navy); }
.pl-bench .pl-src {
  font-size: 10.5px; padding: 1px 6px; border-radius: 9px; white-space: nowrap;
  border: 1px solid transparent;
}
.pl-bench .pl-src.ai { background: #eaf3fc; color: #2b6ca3; border-color: #c6ddf2; }
.pl-bench .pl-src.edit { background: #fdf5e6; color: #a8791d; border-color: #f0dfba; }
.pl-bench .pl-src.wait { background: #f1f3f6; color: #6b7a8c; border-color: #dfe4ea; }
.pl-bench .pl-src.none { background: #fdeeee; color: #b5474b; border-color: #f3cccc; }
.pl-bench .pl-bf { display: block; margin-bottom: 6px; }
.pl-bench .pl-bf > span {
  display: block; font-size: 10.5px; color: #5a6b7f; margin-bottom: 2px;
}
.pl-bench .pl-bf select {
  width: 100%; box-sizing: border-box; font-size: 12px; padding: 4px 5px;
  border: 1px solid var(--pl-line); border-radius: 4px; background: #fff; color: #1f2a37;
}
.pl-bench .pl-bsum {
  display: grid; grid-template-columns: 1fr 1fr; gap: 5px; margin: 7px 0 6px;
}
.pl-bench .pl-bsum > div {
  background: #fff; border: 1px solid var(--pl-line); border-radius: 4px; padding: 4px 6px;
  min-width: 0;
}
.pl-bench .pl-bsum i {
  display: block; font-style: normal; font-size: 10px; color: #8a97a6; margin-bottom: 1px;
}
.pl-bench .pl-bsum b {
  display: block; font-size: 11.5px; color: var(--pl-navy); font-weight: 700;
  font-family: ui-monospace, Consolas, monospace; line-height: 1.4; word-break: break-all;
}
.pl-bench .pl-bhint {
  font-size: 10.5px; color: #6b7a8c; line-height: 1.6;
  background: #f4f7fa; border-radius: 4px; padding: 5px 7px; margin-bottom: 6px;
}
.pl-bench .pl-bhint.bad { background: #fdf1f1; color: #a03a3d; }
.pl-bench .pl-bmiss { font-size: 10.5px; color: #a03a3d; line-height: 1.6; }
.pl-bench .pl-bacts { display: flex; gap: 6px; flex-wrap: wrap; }
.pl-bench .pl-bacts .btn-primary, .pl-bench .pl-bacts .btn-ghost { flex: 1 1 auto; font-size: 11.5px; }

/* ══════════════ 调试台（debug-ui.js）· 深色主题适配 ══════════════
   与房产评估共用同一份 debug-ui.js，但本应用是深底（--bg #070c16），
   浅色那套表格会糊成一片，所以这里按本应用变量重画一遍。
   类名与 JS 完全一致，改界面只改 debug-ui.js，不必两边各写一套结构。 */
.dbg-alert{
  background:rgba(255,77,79,.1);border:1px solid rgba(255,77,79,.35);
  color:#ff8f90;border-radius:8px;padding:10px 14px;margin-bottom:12px;font-size:12.5px;
}
.dbg-bar{
  display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:12px;color:var(--txt2);
  padding-bottom:10px;border-bottom:1px dashed var(--line);
}
.dbg-bar .btn-ghost{margin-left:6px}
.dbg-card{margin-bottom:16px}
.dbg-stat{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--txt2);
  background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:10px;
}
.dbg-stat b{font-size:14px;margin-left:3px;color:var(--txt)}
.dbg-stat .ok b{color:var(--green)} .dbg-stat .warn b{color:var(--gold)}
.dbg-stat .off b{color:var(--txt3)} .dbg-stat .bad b{color:var(--red)}
.dbg-warn{
  background:rgba(255,197,61,.08);border:1px solid rgba(255,197,61,.3);border-radius:8px;
  padding:10px 12px;margin-bottom:10px;font-size:12px;color:var(--txt2);
}
.dbg-warn b{color:var(--gold)}
.dbg-note{font-size:11.5px;color:var(--txt3);margin-top:8px;line-height:1.7}
.dbg-tb{width:100%;border-collapse:collapse;font-size:12px}
.dbg-tb th{
  text-align:left;font-weight:600;color:var(--cyan);background:var(--panel2);
  padding:7px 10px;border-bottom:1px solid var(--line2);white-space:nowrap;vertical-align:top;
}
.dbg-tb td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top;color:var(--txt2)}
.dbg-tb tr:last-child td{border-bottom:0}
.dbg-tb th:first-child{width:130px}
.dbg-rules th:first-child{width:auto}
.dbg-rules td.mono{white-space:nowrap;font-weight:600;color:var(--cyan)}
.dbg-why{max-width:520px;color:var(--txt3);line-height:1.6}
.dbg-row-bad td{background:rgba(255,77,79,.07)}
.dbg-tag{
  display:inline-block;padding:1px 8px;border-radius:20px;font-size:11px;line-height:1.7;
  background:rgba(90,140,200,.14);color:var(--txt2);white-space:nowrap;
}
.dbg-tag.ok{background:rgba(34,197,94,.14);color:var(--green)}
.dbg-tag.warn{background:rgba(255,197,61,.14);color:var(--gold)}
.dbg-tag.bad{background:rgba(255,77,79,.14);color:#ff8f90}
.dbg-tag.off{background:rgba(90,140,200,.1);color:var(--txt3)}
.dbg-chip{
  border:1px solid var(--line2);background:transparent;color:var(--txt2);border-radius:20px;
  padding:2px 12px;font-size:11.5px;cursor:pointer;margin-left:6px;
}
.dbg-chip.on{background:var(--cyan);border-color:var(--cyan);color:#04121a;font-weight:600}
.dbg-stepbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.dbg-stepbar select,.dbg-stepbar input{
  background:var(--panel2);border:1px solid var(--line2);border-radius:8px;padding:7px 10px;
  font-size:12px;font-family:inherit;color:var(--txt);
}
.dbg-stepout{border:1px solid var(--line);border-radius:8px;padding:12px 14px;background:var(--panel)}
.dbg-stepline{display:flex;align-items:center;gap:10px;font-size:12.5px;flex-wrap:wrap;color:var(--txt)}
.dbg-stepsum{margin-top:8px;font-size:12.5px;color:var(--txt)}
.dbg-pre{
  background:#050a13;border:1px solid var(--line);color:#9fc3e8;border-radius:8px;padding:12px;
  font-size:11px;line-height:1.55;max-height:300px;overflow:auto;margin:8px 0 0;
}
.mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace;font-size:11px}
.c-ok{color:var(--green)} .c-bad{color:var(--red)}
details summary{cursor:pointer;font-size:11.5px;color:var(--cyan);margin-top:10px}
#card-debug .dbg-card{border:0;padding:0;background:transparent;margin-bottom:16px}
#card-debug .dbg-card h3{font-size:13px}

/* ── 调试台全屏浮层（debug-mount.js）──
   右侧栏太窄放不下 5 列规则表，改覆盖层；Esc 或「关闭」退出。 */
.dbg-layer{
  position:fixed;inset:0;z-index:9000;display:none;flex-direction:column;
  background:rgba(5,10,19,.97);backdrop-filter:blur(3px);
}
.dbg-layer.on{display:flex}
.dbg-layer-hd{
  display:flex;align-items:center;gap:14px;padding:12px 22px;flex:0 0 auto;
  border-bottom:1px solid var(--line2);background:var(--panel);
}
.dbg-layer-hd b{font-size:15px;color:var(--cyan)}
.dbg-layer-hd span{font-size:12px;color:var(--txt3)}
.dbg-layer-hd #dbgClose{margin-left:auto}
.dbg-layer-bd{flex:1 1 auto;overflow:auto;padding:18px 22px 40px}
.dbg-layer-bd .dbg-tb{max-width:1180px}
.dbg-layer-bd .dbg-card{max-width:1180px}
/* 调试台里复用了房产侧的 .btn.ghost 类名，深色下需要按本应用重画 */
.dbg-layer .btn, .dbg-layer .btn.ghost{
  border:1px solid var(--line2);background:var(--panel2);color:var(--txt);
  border-radius:6px;padding:5px 12px;font-size:12px;cursor:pointer;font-family:inherit;
}
.dbg-layer .btn.gold{background:var(--cyan);border-color:var(--cyan);color:#04121a;font-weight:600}
.dbg-layer .btn:hover{filter:brightness(1.15)}
/* dbg-bar 里两个按钮竖着排了（父级 span 占满宽度），改成横排 */
.dbg-bar > span:last-child{display:flex;gap:8px;align-items:center}
