/* ===== GB/T 45577 Go 版新增样式：测评列表 / AI 徽标 / 保存状态 / 思考气泡 ===== */

/* 顶栏元素（实色蓝顶栏，文字走浅色） */
.topbar .ai-badge { font-size: var(--fs-sm); padding: 4px 11px; border-radius: 999px; white-space: nowrap; font-weight: 600; }
.topbar .ai-badge.ok { background: rgba(255,255,255,.18); color: #fff; border: 1px solid rgba(255,255,255,.3); }
.topbar .ai-badge.off { background: rgba(255,255,255,.12); color: rgba(255,255,255,.82); border: 1px solid rgba(255,255,255,.24); }
.topbar .save-st { font-size: var(--fs-sm); color: rgba(255,255,255,.82); white-space: nowrap; }
.topbar .save-st.ok { color: #d6ffe6; }
.topbar .save-st.saving { color: #ffe9c2; }
.topbar .save-st.err { color: #ffd9d4; }

/* 测评列表首页 */
.home { max-width: 940px; margin: 0 auto; }
.home-hero { position: relative; overflow: hidden; background: #fff; border: 1px solid var(--line2);
  border-radius: 10px; padding: var(--sp-6); margin-bottom: var(--sp-4); box-shadow: var(--shadow); }
/* 顶部品牌色细条 */
.home-hero::before { content: ""; position: absolute; left: 0; top: 0; height: 3px; width: 100%;
  background: linear-gradient(90deg, var(--brand), #4d84e6); }
/* 右上角柔和光晕装饰（克制，不喧宾夺主） */
.home-hero::after { content: ""; position: absolute; right: -70px; top: -70px; width: 220px; height: 220px;
  border-radius: 50%; background: radial-gradient(circle, rgba(61,126,255,.10), rgba(61,126,255,0) 70%); pointer-events: none; }
.home-hero .hh-eyebrow { display: inline-block; font-size: var(--fs-xs); font-weight: 700; letter-spacing: .04em;
  color: var(--brand-d); background: var(--brand-soft); border: 1px solid #d3e0fa; padding: 3px 11px; border-radius: 16px; }
.home-hero h1 { font-size: var(--fs-2xl); margin: 12px 0 6px; color: var(--ink); font-weight: 800; letter-spacing: -.01em; }
.home-hero .hh-std { font-size: var(--fs-sm); color: var(--sub); }
.home-hero .hh-lead { font-size: var(--fs-base); line-height: 1.65; color: var(--sub); margin: 9px 0 18px; }
.home-hero .hh-actions { display: flex; gap: 10px; flex-wrap: wrap; position: relative; z-index: 1; }
.assess-list { display: flex; flex-direction: column; gap: var(--sp-2); }
.assess-row { display: flex; align-items: center; gap: 11px; border: 1px solid var(--line2); border-radius: 8px; padding: 11px 14px; background: #fff; transition: box-shadow .15s, border-color .15s; }
.assess-row:hover { box-shadow: 0 3px 11px rgba(15,23,42,.09); border-color: #b0bccd; }
.assess-row .ar-main { flex: 1; cursor: pointer; min-width: 0; }
.assess-row .ar-name { font-size: var(--fs-md); font-weight: 600; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.assess-row .ar-meta { font-size: var(--fs-xs); color: #8a94a6; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.assess-row .ar-btns { display: flex; gap: 7px; flex-shrink: 0; align-items: center; }
.assess-row .ar-avatar { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 9px; cursor: pointer;
  display: flex; align-items: center; justify-content: center; font-size: var(--fs-lg); font-weight: 700; color: #fff;
  background: linear-gradient(135deg, var(--brand), #4d84e6); }
.assess-row .ar-tag { display: inline-block; font-size: var(--fs-xs); font-weight: 600; color: #0f8a45;
  background: #e7f7ee; border: 1px solid #bfe6cf; border-radius: 999px; padding: 1px 8px; margin-right: 7px; }
/* 失败态标记（替代内联硬编码红色） */
.ar-tag.err { color: var(--bad); background: #fbe9e8; border-color: #f2c9c6; }
.empty.err { color: var(--bad); }
.sat-sum .sub-note { font-weight: 400; margin-left: var(--sp-2); color: var(--sub); font-size: var(--fs-sm); }
.icon-btn { height: var(--ctrl-h-sm); padding: 0 10px; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; cursor: pointer;
  border: 1px solid var(--line2); background: #fff; border-radius: 6px; font-size: var(--fs-base); color: var(--sub); transition: .12s; }
.icon-btn:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-soft); }
.icon-btn.danger:hover { border-color: #f4a9a4; color: var(--bad); background: #fdecec; }
.home-hist h3 { display: flex; align-items: center; gap: 9px; }
.hh-tag { font-size: var(--fs-xs); font-weight: 600; color: var(--sub); background: #eef1f6; border: 1px solid var(--line);
  border-radius: 999px; padding: 2px 9px; margin-left: auto; }
.hist-empty { text-align: center; padding: 34px 20px; }
.hist-empty .he-icon { font-size: 34px; }
.hist-empty .he-t { font-size: var(--fs-md); font-weight: 700; color: var(--ink); margin-top: 9px; }
.hist-empty .he-d { font-size: var(--fs-sm); color: var(--sub); margin: 5px 0 15px; }
.btn.sm.danger { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; }
.btn.sm.danger:hover { background: #fee2e2; }

/* 评估员"分析中"气泡 */
.bubble.assessor.thinking { opacity: .85; font-style: italic; }
.bubble.assessor.thinking::after { content: "▍"; animation: blink 1s steps(2) infinite; margin-left: 2px; }
@keyframes blink { 50% { opacity: 0; } }

@media (max-width: 640px) {
  .topbar .curname, .topbar .ai-badge, .topbar .save-st { display: none; }
  .home-hero { padding: 24px 20px; }
  .home-hero h1 { font-size: var(--fs-2xl); }
  .assess-row { flex-direction: column; align-items: stretch; }
  .assess-row .ar-btns { justify-content: flex-end; }
}

/* ===== 应用内弹窗（替代原生 alert / confirm / prompt） ===== */
.modal-mask { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center; justify-content: center;
  padding: 20px; background: rgba(15,23,42,.42); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px);
  opacity: 0; transition: opacity .18s; }
.modal-mask.show { opacity: 1; }
.modal { width: 100%; max-width: 420px; background: #fff; border-radius: 10px; padding: 20px 22px 18px;
  box-shadow: 0 20px 56px rgba(15,23,42,.30); opacity: 0; transform: translateY(10px) scale(.98);
  transition: opacity .18s, transform .18s; }
.modal.wide { max-width: 660px; }
/* 更正理解弹窗：整窗封顶到视口，中间内容滚动，输入框始终可见 */
.modal.corr { max-height: calc(100vh - 40px); display: flex; flex-direction: column; }
.modal.corr .corr-scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.modal.corr .corr-scroll .transcript { max-height: none; overflow: visible; }
.modal.corr .answer-box { flex: 0 0 auto; }
.modal-mask.show .modal { opacity: 1; transform: none; }
.modal .m-head { display: flex; align-items: center; gap: 11px; margin-bottom: 5px; }
.modal .m-icon { flex: 0 0 auto; width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center;
  justify-content: center; font-size: 16px; background: var(--brand-soft); color: var(--brand-d); }
.modal.danger .m-icon { background: #fef2f2; color: #dc2626; }
.modal .m-title { font-size: var(--fs-lg); font-weight: 700; color: var(--ink); }
.modal .m-desc { font-size: var(--fs-sm); color: var(--sub); line-height: 1.68; margin: 4px 0 2px; }
.modal .m-field { margin: 13px 0 2px; }
.modal .m-field label.f { margin-bottom: 5px; }
.modal .m-foot { display: flex; justify-content: flex-end; gap: 9px; margin-top: 18px; }
.modal .btn.mdanger { background: #dc2626; }
.modal .btn.mdanger:hover { background: #b91c1c; }
@media (max-width: 560px) {
  .modal { max-width: none; border-radius: 10px; padding: 16px 16px 14px; }
  .modal .m-foot { flex-direction: column-reverse; }
  .modal .m-foot .btn { width: 100%; }
}

/* ===== 表单页底栏：上一步 · 保存状态 · 保存 · 下一步（sticky 一条） ===== */
.savebar { position: sticky; bottom: 0; z-index: 20; display: flex; align-items: center; gap: 12px;
  background: rgba(255,255,255,.97); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  border: 1px solid var(--line2); border-radius: 8px; padding: 10px 14px; margin: 8px 0 2px; box-shadow: var(--shadow-md); }
.savebar .save-flag { font-size: 12.5px; color: var(--sub); margin-right: auto; }
.savebar .save-flag.dirty { color: var(--warn); font-weight: 650; }
.savebar .save-flag.ok { color: var(--ok); font-weight: 600; }
.savebar .save-flag.saving { color: var(--sub); }
.savebar .save-flag.err { color: var(--bad); font-weight: 650; }
.savebar #btnSaveNow { min-width: 128px; }
@media (max-width: 640px) {
  .savebar { flex-wrap: wrap; gap: 8px; }
  .savebar .save-flag { order: -1; width: 100%; margin: 0 0 2px; }
  .savebar .btn { flex: 1; }
}

/* 上传拖拽区 */
.upzone { display: flex; align-items: center; gap: 12px; border: 1.5px dashed #bcc4d2; border-radius: 8px;
  padding: 12px 14px; background: #f4f6fa; transition: border-color .15s, background .15s; }
.upzone.drag { border-color: var(--brand); background: var(--brand-soft); }
.upzone .upbtn { flex: 0 0 auto; }

/* 进度条流动动画（分析中） */
.prog-line .fill.anim { background-image: linear-gradient(90deg, var(--brand) 0%, #7aa5f5 50%, var(--brand) 100%);
  background-size: 200% 100%; animation: progflow 1.2s linear infinite; }
@keyframes progflow { 0% { background-position: 200% 0; } 100% { background-position: 0 0; } }

/* 逐项结果 */
.rr-group { margin-top: 14px; }
.rr-group .rr-gt { font-size: var(--fs-sm); font-weight: 700; color: var(--sub); margin-bottom: 7px; display: flex; align-items: center; gap: 8px; }
.rr { border: 1px solid var(--line); border-radius: 7px; padding: 11px 13px; margin-bottom: 7px; background: #fff; }
.rr .rr-hd { font-size: var(--fs-md); color: var(--ink); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rr .rr-reason { font-size: var(--fs-sm); color: var(--sub); line-height: 1.6; margin-top: 6px; }
.rr .rr-hits { font-size: var(--fs-xs); color: var(--brand-d); margin-top: 6px; }
.rr .risk-badge { padding: 3px 8px; font-size: var(--fs-xs); }

/* 已判定项一览（折叠 + 快速微调） */
.sat-box > summary, .mat-satisfied > summary { cursor: pointer; font-size: var(--fs-md); font-weight: 700; color: var(--ink);
  list-style: none; display: flex; align-items: center; gap: 6px; padding: 4px 0; }
.sat-box > summary::-webkit-details-marker, .mat-satisfied > summary::-webkit-details-marker { display: none; }
.sat-box > summary::before, .mat-satisfied > summary::before { content: "▸"; color: var(--faint); transition: transform .15s; }
.sat-box[open] > summary::before, .mat-satisfied[open] > summary::before { transform: rotate(90deg); }
.sat-box .tbl td select { height: 30px; }
.src-tag { display: inline-block; font-size: var(--fs-xs); padding: 2px 8px; border-radius: 10px; white-space: nowrap; }
.src-tag.mat { background: #eaf1fd; color: var(--brand-d); border: 1px solid #d3e0fa; }
.src-tag.act { background: #f0ecfb; color: #6b46c1; border: 1px solid #ddd2f4; }
.src-tag.man { background: #fbf3df; color: #a9760c; border: 1px solid #f0e2b8; }
.src-tag.talk { background: #eef0f3; color: var(--sub); border: 1px solid #e2e6ec; }
.src-tag.src-prep { background: #eaf1fd; color: var(--brand-d); border: 1px solid #d3e0fa; }
.src-tag.src-chat { background: #e8f6ee; color: #1a7a45; border: 1px solid #c9ead6; }

/* 文件材料页 */
.files-h1 { font-size: var(--fs-xl, 22px); margin: 0 0 4px; }
.files-sub { color: var(--sub); font-size: var(--fs-sm); margin: 0 0 16px; line-height: 1.6; }

/* 对话页：材料预审已满足项折叠列表 */
.mat-satisfied { margin: 0 0 12px; border: 1px solid var(--line); border-radius: 7px; padding: 8px 11px; background: #f8fafd; }
.mat-satisfied .ms-list { margin-top: 7px; display: flex; flex-direction: column; gap: 5px; }
.mat-satisfied .ms-row { font-size: var(--fs-sm); color: var(--ink); display: flex; align-items: center; gap: 8px; cursor: pointer;
  border-radius: 6px; padding: 5px 8px; transition: background .12s; }
.mat-satisfied .ms-row:hover { background: var(--brand-soft); }
.mat-satisfied .ms-row .risk-badge { padding: 2px 8px; font-size: var(--fs-xs); }
.mat-satisfied .ms-row .ms-go { margin-left: auto; font-size: var(--fs-xs); color: var(--brand-d); opacity: 0; transition: opacity .12s; white-space: nowrap; }
.mat-satisfied .ms-row:hover .ms-go { opacity: 1; }
.mat-satisfied .ms-note { font-size: var(--fs-xs); margin-top: 7px; }

/* 对话框内：材料库引用区已移除（客户困惑、价值低） */

/* 材料留档详情弹窗 */
.ld-meta { margin-bottom: 8px; }
.ld-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
.ld-sec { margin-top: 12px; }
.ld-sec .ld-h { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); margin-bottom: 6px; }
.ld-sec .ld-body { font-size: var(--fs-sm); color: var(--sub); line-height: 1.65; background: #f8fafd;
  border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; }
.ld-sec .ld-pre { white-space: pre-wrap; word-break: break-word; max-height: 32vh; overflow: auto; font-family: ui-monospace, Menlo, Consolas, monospace; font-size: var(--fs-xs); }


/* ④对话：未开始项的「开始评估」面板（点按钮才调用大模型） */
.start-panel { text-align: center; padding: 20px 16px; border: 1px dashed var(--line);
  border-radius: var(--r-lg, 12px); background: #f8fafd; margin-top: 6px; }
.start-panel .sp-goal { font-size: var(--fs-sm); color: var(--ink); line-height: 1.6; text-align: left; margin-bottom: 10px; }
.start-panel .sp-hint { font-size: var(--fs-xs); color: var(--sub); text-align: left; margin-bottom: 4px; }
.start-panel .sp-qs { margin: 0 0 14px; padding-left: 18px; text-align: left; color: var(--sub); font-size: var(--fs-sm); }
.start-panel .sp-qs li { margin: 3px 0; }
.start-panel .sp-note { font-size: var(--fs-xs); margin-top: 10px; }

/* ===== 可折叠卡片（⑥数据安全风险清单）：点标题行折叠/展开 ===== */
details.risk-card > summary.card-head { cursor: pointer; list-style: none; display: flex; align-items: center; gap: var(--sp-2);
  margin: 0 0 var(--sp-4); padding-bottom: var(--sp-3); border-bottom: 1px solid var(--line);
  font-size: var(--fs-md); font-weight: 700; color: var(--ink); }
details.risk-card > summary.card-head::-webkit-details-marker { display: none; }
details.risk-card > summary.card-head::before { content: "\25B8"; color: var(--faint); font-weight: 400; transition: transform .15s; }
details.risk-card[open] > summary.card-head::before { transform: rotate(90deg); }
details.risk-card:not([open]) > summary.card-head { margin-bottom: 0; padding-bottom: 0; border-bottom: none; }
details.risk-card > summary.card-head .badge { font-size: var(--fs-xs); font-weight: 600; color: var(--brand-d);
  background: var(--brand-soft); padding: 2px 8px; border-radius: 5px; }
details.risk-card > summary.card-head .h3-note { font-weight: 400; margin-left: auto; color: var(--sub); font-size: var(--fs-sm); }

/* ===== ⑥报告封面页（屏幕 + 打印） ===== */
.report .rcover-page { text-align: center; padding: 40px 0 32px; border-bottom: 1px dashed var(--line2); margin-bottom: 26px; }
.report .rc-title { font-size: 30px; font-weight: 800; letter-spacing: 6px; line-height: 1.5; color: var(--ink); margin: 30px 0 44px; }
.report .rc-meta { font-size: 15px; line-height: 2.6; color: var(--ink); }
.report .rc-foot { font-size: 12.5px; color: var(--sub); margin-top: 40px; line-height: 1.8; }
@media print {
  .report .rcover-page { page-break-after: always; border-bottom: none; min-height: 86vh;
    display: flex; flex-direction: column; justify-content: center; }
  .report .rc-title { font-size: 34px; margin: 0 0 60px; }
  .report .rc-foot { margin-top: 80px; }
}

/* ===== 测评导航页（overview）：六大步骤的进度 + 功能介绍 + 进入按钮 ===== */
.ov-wrap { max-width: 880px; margin: 0 auto; }
.ov-hero { position: relative; overflow: hidden; background: #fff; border: 1px solid var(--line2);
  border-radius: var(--r-lg); padding: 22px 24px 20px; margin-bottom: 18px; box-shadow: var(--shadow); }
.ov-hero::before { content: ""; position: absolute; left: 0; top: 0; height: 3px; width: 100%;
  background: linear-gradient(90deg, var(--brand), #7aa7ff); }
.ov-eyebrow { display: inline-block; font-size: var(--fs-xs); font-weight: 700; letter-spacing: .06em;
  color: var(--brand-d); background: var(--brand-soft); border-radius: 999px; padding: 3px 11px; }
.ov-hero h1 { font-size: var(--fs-2xl); margin: 12px 0 5px; color: var(--ink); font-weight: 800; letter-spacing: -.01em; }
.ov-sub { font-size: var(--fs-sm); color: var(--sub); line-height: 1.65; }
.ov-metrics { display: flex; gap: 26px; margin: 16px 0 12px; flex-wrap: wrap; }
.ovm { display: flex; flex-direction: column; }
.ovm b { font-size: 22px; font-weight: 800; color: var(--brand-d); line-height: 1; letter-spacing: -.02em; }
.ovm span { font-size: var(--fs-xs); color: var(--sub); margin-top: 5px; }
.ov-bar { height: 8px; background: #eef2f8; border-radius: 5px; overflow: hidden; }
.ov-bar i { display: block; height: 100%; background: var(--brand); border-radius: 5px; transition: width .3s; }
.ov-hero-act { margin-top: 16px; }

.ov-steps { display: flex; flex-direction: column; }
.ov-step { display: flex; gap: 16px; padding: 8px 0; text-decoration: none; color: inherit; }
.ovs-rail { position: relative; flex: 0 0 40px; display: flex; justify-content: center; }
.ovs-num { position: relative; z-index: 1; width: 40px; height: 40px; margin-top: 14px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 800;
  background: #e7eaf0; color: var(--sub); box-shadow: 0 0 0 4px #fff; }
.ov-step.s-doing .ovs-num { background: var(--brand); color: #fff; }
.ov-step.s-done .ovs-num { background: var(--ok); color: #fff; }
/* 连接线：串起相邻步骤的圆点，走过的段落变绿 */
.ov-step:not(:last-child) .ovs-rail::after { content: ""; position: absolute; left: 50%; transform: translateX(-50%);
  top: 54px; bottom: -8px; width: 2px; background: var(--line2); }
.ov-step.s-done:not(:last-child) .ovs-rail::after { background: #a6dcc0; }

.ovs-body { flex: 1; min-width: 0; border: 1px solid var(--line2); border-radius: var(--r-lg); background: #fff;
  padding: 14px 16px; transition: box-shadow .15s, border-color .15s; }
.ov-step:hover .ovs-body { box-shadow: var(--shadow-md); border-color: #b0bccd; }
.ovs-head { display: flex; align-items: center; gap: 10px; }
.ovs-title { font-size: var(--fs-md); font-weight: 700; color: var(--ink); }
.ovs-state { margin-left: auto; font-size: var(--fs-xs); font-weight: 700; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.ovs-state.s-done { background: #e6f5ec; color: var(--ok); }
.ovs-state.s-doing { background: var(--brand-soft); color: var(--brand-d); }
.ovs-state.s-todo { background: #eef1f5; color: var(--faint); }
.ovs-intro { font-size: var(--fs-sm); color: var(--sub); line-height: 1.6; margin: 7px 0 11px; }
.ovs-foot { display: flex; align-items: center; gap: 12px; }
.ovs-prog { font-size: var(--fs-sm); font-weight: 600; color: var(--brand-d); }
.ov-step.s-todo .ovs-prog { color: var(--faint); font-weight: 500; }
.ovs-btn { margin-left: auto; flex: 0 0 auto; height: var(--ctrl-h-sm); padding: 0 14px; font-size: var(--fs-base); pointer-events: none; }

@media (max-width: 640px) {
  .ov-metrics { gap: 18px; }
  .ov-step { gap: 10px; }
  .ovs-rail { flex-basis: 34px; }
  .ovs-num { width: 34px; height: 34px; font-size: 14px; }
  .ov-step:not(:last-child) .ovs-rail::after { top: 48px; }
}

/* ===== 提示词一览页（prompts）：按步骤分组展示各环节 system prompt 原文 ===== */
.pr-wrap { max-width: 960px; }
.btn.sm { height: 24px; padding: 0 9px; font-size: var(--fs-xs); }
.ov-sub { font-size: var(--fs-sm); color: var(--sub); line-height: 1.6; }

/* 目录 */
.pr-toc { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.pr-tocitem { display: inline-flex; align-items: center; gap: 6px; background: var(--brand-soft);
  border: 1px solid var(--line2); border-radius: var(--r-pill); padding: 4px 11px;
  font-size: var(--fs-xs); color: var(--brand-d); font-weight: 600; }
.pr-tocitem:hover { border-color: var(--brand); background: #fff; }
.pr-tocitem b { color: var(--faint); font-weight: 700; }

/* 分组标题 */
.pr-group { font-size: var(--fs-lg); color: var(--ink); font-weight: 800; letter-spacing: -.01em;
  margin: 26px 0 12px; padding-bottom: 8px; border-bottom: 2px solid var(--line2); }

/* 卡片 */
.pr-card { background: #fff; border: 1px solid var(--line2); border-radius: var(--r-lg);
  padding: 16px 18px; margin-bottom: 14px; box-shadow: var(--shadow); scroll-margin-top: 70px; }
.pr-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.pr-titles { display: flex; flex-direction: column; gap: 3px; }
.pr-step { font-size: var(--fs-xs); font-weight: 700; color: var(--faint); letter-spacing: .04em; }
.pr-title { font-size: var(--fs-md); font-weight: 700; color: var(--ink); margin: 0; }
.pr-file { flex: 0 0 auto; font-size: var(--fs-xs); color: var(--sub); background: var(--bg);
  border: 1px solid var(--line); border-radius: var(--r); padding: 3px 8px; white-space: nowrap; }
.pr-when { font-size: var(--fs-sm); color: var(--sub); margin: 8px 0 12px; line-height: 1.55; }
.pr-sublbl { display: flex; align-items: center; gap: 8px; font-size: var(--fs-xs); font-weight: 700;
  color: var(--faint); letter-spacing: .04em; text-transform: uppercase; margin: 12px 0 6px; }
.pr-pre { margin: 0; background: #f7f9fc; border: 1px solid var(--line); border-radius: var(--r);
  padding: 12px 14px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: var(--fs-sm); line-height: 1.7; color: #1f2937; white-space: pre-wrap; word-break: break-word;
  max-height: 420px; overflow-y: auto; }
.pr-user { font-size: var(--fs-sm); color: var(--sub); line-height: 1.6; background: var(--brand-soft);
  border: 1px solid var(--line); border-radius: var(--r); padding: 10px 12px; }

@media (max-width: 640px) {
  .pr-head { flex-direction: column; }
  .pr-pre { max-height: 300px; }
}

/* 调优状态角标 */
.pr-badge { display: inline-block; font-size: var(--fs-xs); font-weight: 700; padding: 1px 8px;
  border-radius: var(--r-pill); vertical-align: middle; margin-left: 6px; }
.pr-badge.def { background: #eef2f7; color: var(--faint); border: 1px solid var(--line2); }
.pr-badge.edited { background: #fff4e5; color: #b46a00; border: 1px solid #f0c78a; }

/* 单测评项特殊提示（只读列表） */
.pr-hint-empty { font-size: var(--fs-sm); color: var(--faint); line-height: 1.6; padding: 4px 0; }
.pr-hintrow { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--line2); }
.pr-hintrow:first-child { margin-top: 0; padding-top: 0; border-top: none; }
.pr-hintrow-h { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: var(--fs-sm); }

/* ===== 登录页 ===== */
.login-wrap { min-height: calc(100vh - var(--topbar-h)); display: flex; align-items: center; justify-content: center; padding: 24px; }
.login-card { width: 100%; max-width: 380px; background: #fff; border: 1px solid var(--line2);
  border-radius: var(--r-lg); padding: 28px 26px; box-shadow: var(--shadow-md); }
.login-h { font-size: var(--fs-xl); font-weight: 800; margin: 8px 0 20px; color: var(--ink); }
.login-field { margin-bottom: 14px; }
.login-field label { display: block; font-size: var(--fs-sm); color: var(--sub); margin-bottom: 5px; font-weight: 600; }
.login-field input { width: 100%; box-sizing: border-box; height: 40px; padding: 0 12px; font-size: var(--fs-md);
  border: 1px solid var(--line2); border-radius: var(--r); background: #fff; }
.login-field input:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-soft); }
.login-card .btn.lg { width: 100%; justify-content: center; margin-top: 6px; }
.login-err { display: block; color: #c0392b; font-size: var(--fs-sm); min-height: 18px; margin: 2px 0 8px; }

/* ===== 顶栏用户区 ===== */
.cur-user { color: #fff; font-size: var(--fs-sm); background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.28);
  padding: 4px 10px; border-radius: var(--r-pill); white-space: nowrap; }
.cur-user:empty { display: none; }

/* ===== 账号管理 ===== */
.ac-add { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ac-add input { height: 36px; padding: 0 11px; font-size: var(--fs-sm); border: 1px solid var(--line2);
  border-radius: var(--r); background: #fff; min-width: 160px; }
.ac-add input:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-soft); }
.ac-table { width: 100%; border-collapse: collapse; margin-top: 4px; font-size: var(--fs-sm); }
.ac-table th { text-align: left; color: var(--faint); font-weight: 700; font-size: var(--fs-xs);
  padding: 6px 10px; border-bottom: 1px solid var(--line2); }
.ac-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); color: var(--ink); }
.ac-table .ac-time { color: var(--sub); }
.ac-table .ac-op { text-align: right; }


/* ===== 布局重设计：密集型后台 · 风险样式体系（新增，供各页重排复用）===== */
/* 风险等级色块（带圆点） */
.lv{display:inline-flex;align-items:center;gap:5px;font-weight:700;font-size:var(--fs-xs);padding:2px 8px;border-radius:4px;white-space:nowrap}
.lv::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.lv.da{color:var(--lv-da);background:var(--lv-da-bg)} .lv.gao{color:var(--lv-gao);background:var(--lv-gao-bg)}
.lv.zhong{color:var(--lv-zhong);background:var(--lv-zhong-bg)} .lv.di{color:var(--lv-di);background:var(--lv-di-bg)}
.lv.qing{color:var(--lv-qing);background:var(--lv-qing-bg)} .lv.nolv{color:var(--na);background:var(--na-bg)}
/* 判定状态点 */
.rdot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 8px}
.rdot.ok{background:var(--ok)} .rdot.bad{background:var(--bad)} .rdot.na{background:var(--na)} .rdot.todo{background:#cfd6e0;border:1px solid #b9c1cf}
/* 状态标签 */
.rtag{font-size:var(--fs-xs);font-weight:700;padding:1px 7px;border-radius:10px;white-space:nowrap}
.rtag.ok{background:var(--ok-bg);color:var(--ok)} .rtag.bad{background:var(--bad-bg);color:var(--bad)}
.rtag.na{background:var(--na-bg);color:var(--na)} .rtag.todo{background:#eef1f5;color:#8a93a3}

/* 密集卡片头（用于重排后的卡） */
.card>.hd,.card .card-hd2{display:flex;align-items:center;gap:8px}

/* 材料预审：上传区左右分栏 */
.up-split{display:grid;grid-template-columns:1.4fr 1fr;gap:0;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:#fff}
.up-split .dz{border-right:1px dashed var(--line2);padding:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:8px;background:var(--field-bg2)}
.up-split .dz.drag{border-color:var(--brand);background:var(--brand-soft)}
.up-split .dz .big{font-weight:700;font-size:var(--fs-md)}
.up-split .dz .sm{font-size:var(--fs-xs);color:var(--faint)}
.up-split .uinfo{padding:12px 14px}
.up-split .uinfo .row{display:flex;justify-content:space-between;font-size:var(--fs-sm);padding:4px 0;border-bottom:1px solid var(--line);color:var(--sub)}
.up-split .uinfo .row:last-child{border:none}
.up-split .uinfo .row b{color:var(--ink)}
@media(max-width:700px){.up-split{grid-template-columns:1fr}.up-split .dz{border-right:none;border-bottom:1px dashed var(--line2)}}

/* 概览一行铺开：KPI + 分布条 */
.ov-strip{display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center}
.ov-kpis{display:flex;gap:20px}
.ov-kpis .k{text-align:center;white-space:nowrap}
.ov-kpis .k .v{font-size:20px;font-weight:800;line-height:1}
.ov-kpis .k .l{font-size:var(--fs-xs);color:var(--sub);margin-top:3px}
.ov-kpis .k.bad .v{color:var(--bad)} .ov-kpis .k.ok .v{color:var(--ok)} .ov-kpis .k.warn .v{color:var(--warn)}
@media(max-width:700px){.ov-strip{grid-template-columns:1fr}}

/* 风险分布条 */
.riskbar{display:flex;height:20px;border-radius:5px;overflow:hidden;border:1px solid var(--line)}
.riskbar i{display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--fs-xs);font-weight:700;min-width:0;overflow:hidden}
.risk-leg{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;font-size:var(--fs-xs);color:var(--sub)}
.risk-leg span{display:inline-flex;align-items:center;gap:5px}
.risk-leg i{width:9px;height:9px;border-radius:2px;display:inline-block}

/* ===== 风险识别总览：左环形图 / 右雷达图（ECharts）===== */
.ov2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ov2-r{border-left:1px solid var(--line);padding-left:12px}
.ov2-ct{font-size:var(--fs-sm);font-weight:700;color:var(--ink);display:flex;align-items:baseline;gap:8px;margin-bottom:2px}
.ov2-ct span{font-weight:400;font-size:var(--fs-xs);color:var(--faint)}
.echart{width:100%;height:250px}
@media(max-width:760px){.ov2{grid-template-columns:1fr}.ov2-r{border-left:none;border-top:1px solid var(--line);padding-left:0;padding-top:10px}}

/* 信息系统情况表：记录卡（每系统一张纵表 + 勾选），layout:"records" —— survey.js recordsForm */
.rec-list{display:flex;flex-direction:column;gap:var(--sp-3)}
.rec-card{border:1px solid var(--line2);border-radius:var(--r);background:#fbfcfe;padding:12px 14px}
.rec-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.rec-idx{font-weight:700;color:var(--brand-d);font-size:var(--fs-base);background:var(--brand-soft);border-radius:5px;padding:2px 10px}
.rec-del{color:var(--bad);cursor:pointer;font-size:var(--fs-sm);user-select:none;padding:2px 8px;border-radius:5px}
.rec-del:hover{background:#fdecec}
.rec-field{display:grid;grid-template-columns:150px 1fr;gap:12px;align-items:start;padding:7px 0;border-bottom:1px dashed var(--line)}
.rec-field:last-child{border-bottom:none}
.rec-label{font-size:var(--fs-sm);font-weight:600;color:var(--sub);padding-top:6px}
.rec-hint{display:block;font-weight:400;color:var(--faint);font-size:var(--fs-xs);margin-top:2px;line-height:1.5}
.rec-input{width:100%;height:32px;border:1px solid var(--line2);background:#fff;border-radius:5px;padding:0 9px;font-size:var(--fs-sm)}
textarea.rec-input{height:auto;min-height:52px;padding:7px 9px;line-height:1.6;resize:vertical}
.rec-multi{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding-top:3px}
.rec-optwrap{display:inline-flex;align-items:center;gap:7px}
.rec-opt{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);color:var(--ink);cursor:pointer;white-space:nowrap}
.rec-opt input{width:15px;height:15px;accent-color:var(--brand);cursor:pointer;margin:0}
.rec-fill{height:28px;border:1px solid var(--line2);background:#fff;border-radius:5px;padding:0 8px;font-size:var(--fs-xs);min-width:150px}
.rec-optfull{flex-basis:100%;display:flex;align-items:center;gap:8px}
.rec-optfull .rec-opt{white-space:nowrap;min-width:96px}
.rec-optfull .rec-fill{flex:1;min-width:0;height:30px;font-size:var(--fs-sm)}
.rec-extra{display:flex;align-items:center;gap:8px;flex-basis:100%;margin-top:2px}
.rec-extra .rec-input{flex:1;height:28px;font-size:var(--fs-xs)}
.rec-elabel{font-size:var(--fs-xs);color:var(--sub);white-space:nowrap;min-width:92px}
@media(max-width:760px){.rec-field{grid-template-columns:1fr;gap:4px}.rec-label{padding-top:0}}

/* 可折叠分块（建档/数据底数页）：点标题展开/收起，默认收起 —— common.js secOpen + click 句柄 */
.card.collapsible > h3{cursor:pointer;user-select:none}
.card.collapsible > h3 .sec-caret{margin-left:auto;flex:none;color:var(--faint);font-size:11px;transition:transform .18s}
.card.collapsed > h3 .sec-caret{transform:rotate(-90deg)}
.card.collapsed > h3{margin-bottom:0;padding-bottom:0;border-bottom:none}
.card.collapsed > :not(h3){display:none}
.card.collapsible.collapsed{padding-top:var(--sp-3);padding-bottom:var(--sp-3)}
