:root { --bg:#f4f6f8; --card:#fff; --line:#d9dee3; --txt:#24313f; --pri:#2563eb; --danger:#dc2626; }
* { box-sizing:border-box; }
body { margin:0; font:14px/1.6 "Microsoft YaHei",system-ui,sans-serif; color:var(--txt); background:var(--bg); }
.nav { display:flex; align-items:center; gap:14px; background:#1e293b; color:#e2e8f0; padding:8px 18px; }
.nav a { color:#cbd5e1; text-decoration:none; padding:4px 8px; border-radius:4px; }
.nav a:hover { background:#334155; color:#fff; }
.nav .brand { font-weight:700; color:#fff; margin-right:8px; }
.nav .spacer { flex:1; }
.nav .who { color:#94a3b8; font-size:13px; }
.container { max-width:1100px; margin:20px auto; padding:0 16px; }
h2 { font-size:18px; margin:18px 0 10px; } h4 { margin:8px 0 4px; }
.hint { color:#64748b; font-size:12.5px; font-weight:normal; }
.flash { padding:8px 12px; margin:0 0 14px; border-radius:6px; background:#ecfdf5; border:1px solid #a7f3d0; color:#065f46; }
.flash.err { background:#fef2f2; border-color:#fecaca; color:#991b1b; }
.cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:12px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:14px; text-align:center; }
.card b { font-size:24px; display:block; } .card span { color:#64748b; font-size:12.5px; }
/* 概览可点击卡片（a.card 链接到对应页面，无权限的条目仍渲染为普通 div.card） */
a.card { text-decoration:none; color:inherit; transition:border-color .15s, box-shadow .15s; }
a.card:hover { border-color:var(--pri); box-shadow:0 2px 10px rgba(37,99,235,.15); }
.panel { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:12px 14px; margin-bottom:14px; }
summary { cursor:pointer; font-weight:600; margin-bottom:8px; }
.grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:10px; align-items:end; }
.grid label, .inline label { display:flex; flex-direction:column; gap:4px; font-size:13px; color:#475569; }
.cols2 { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:10px; }
input, select { border:1px solid var(--line); border-radius:5px; padding:6px 8px; font-size:13.5px; background:#fff; }
input:focus, select:focus { outline:2px solid #bfdbfe; border-color:var(--pri); }
button { background:var(--pri); color:#fff; border:0; border-radius:5px; padding:7px 14px; cursor:pointer; font-size:13.5px; white-space:nowrap; }
button:hover { filter:brightness(1.08); }
button.danger { background:var(--danger); }
.mini-btn { padding:2px 8px; font-size:12px; }
.mini { width:170px; font-size:12px; } .w80 { width:80px; } .w100 { width:100px; }
table { width:100%; border-collapse:collapse; background:var(--card); border:1px solid var(--line); border-radius:8px; overflow:hidden; margin-bottom:18px; }
th, td { border-bottom:1px solid var(--line); padding:7px 9px; text-align:left; vertical-align:middle; font-size:13.5px; }
th { background:#f1f5f9; font-size:12.5px; color:#475569; }
tr:last-child td { border-bottom:0; }
tr:hover td { background:#f8fafc; }
td input, td select { width:100%; min-width:70px; }
td.ops, form.inline { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
ul.people { list-style:none; padding:0; margin:4px 0; }
ul.people li { display:flex; align-items:center; gap:6px; padding:3px 0; }
.login-box { max-width:340px; margin:80px auto; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:26px; }
.login-box h2 { text-align:center; }
.login-box label { display:flex; flex-direction:column; gap:5px; margin-bottom:12px; }
.login-box button { width:100%; padding:9px; }
.login-alt { margin-top:14px; text-align:center; font-size:13.5px; border-top:1px dashed var(--line); padding-top:12px; }
code { background:#f1f5f9; padding:1px 5px; border-radius:4px; font-size:12.5px; }
.chk { flex-direction:row !important; align-items:center; gap:4px !important; }
.subpanel { border:1px solid var(--line); border-radius:8px; padding:12px 14px; margin:10px 0; background:#fbfcfe; }
.subpanel > form { margin:0; }
.subpanel .danger { margin-top:8px; }
.st { font-size:12px; padding:2px 8px; border-radius:10px; font-weight:normal; }
.st-new { background:#e0e7ff; color:#3730a3; }
.st-diagnosing { background:#fef3c7; color:#92400e; }
.st-diagnosed { background:#d1fae5; color:#065f46; }
.st-done { background:#e2e8f0; color:#334155; }
.st-running { background:#dbeafe; color:#1e40af; }
.st-queued { background:#fef3c7; color:#92400e; }
.st-finished { background:#d1fae5; color:#065f46; }
.st-failed { background:#fee2e2; color:#991b1b; }
.st-canceled { background:#e2e8f0; color:#334155; }

/* 黑盒 BUG-3：超长无空格标题不撑爆列表（单行截断，全文进详情页看） */
td.ellip { max-width:270px; }
td.ellip a { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
h2 { overflow-wrap:anywhere; }   /* 详情页 300 字符无空格标题同理 */

/* 黑盒 BUG-4：checkbox 被通用 td input width:100% 拉成 175px 压住标签 */
td input[type="checkbox"] { width:auto; }
textarea { border:1px solid var(--line); border-radius:5px; padding:6px 8px; font:inherit; width:100%; }
pre.runout { background:#f8fafc; border:1px solid var(--line); border-radius:6px; padding:10px; white-space:pre-wrap; word-break:break-all; max-height:520px; overflow:auto; }
pre.runerr { background:#fef2f2; border:1px solid #fecaca; border-radius:6px; padding:10px; white-space:pre-wrap; max-height:300px; overflow:auto; }
.atts { display:flex; gap:10px; flex-wrap:wrap; margin:6px 0; }
.atts img { width:130px; height:130px; object-fit:cover; border:1px solid var(--line); border-radius:6px; }

button.linklike { background:none; border:0; color:#cbd5e1; padding:4px 8px; cursor:pointer; }
button.linklike:hover { background:#334155; color:#fff; }
/* ---- UI 走查修复（P0-2/P1-1/1-2/1-4/1-6/P2-4/P3-1/3-6/3-7/3-10） ---- */
.nav a.active { background:#334155; color:#fff; }
p.inline, div.inline { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:8px 0; }
form.inline { gap:8px; }
button.ghost { background:#fff; color:var(--txt); border:1px solid var(--line); }
button.ghost:hover { border-color:var(--pri); color:var(--pri); filter:none; }
button:disabled { background:#94a3b8; cursor:not-allowed; }
td.ops { width:190px; }
.grid > button { grid-column:-2/-1; justify-self:end; }
th { position:sticky; top:0; z-index:5; }
.hint { font-size:13px; color:#5b6b7f; }
td, th { font-size:13.5px; }
.atts img { width:170px; height:170px; object-fit:contain; cursor:zoom-in; background:#f8fafc; }
a.btn { display:inline-block; padding:4px 12px; border:1px solid var(--line); border-radius:5px;
        background:#fff; color:var(--pri); text-decoration:none; font-size:13.5px; }
a.btn:hover { border-color:var(--pri); }

/* 诊断报告（markdown 渲染后） */
.report { background:#f8fafc; border:1px solid var(--line); border-radius:6px; padding:12px 16px;
          line-height:1.75; word-break:break-all; max-height:none; overflow:visible; }
.report h1, .report h2, .report h3 { margin:14px 0 6px; font-size:15px; border-bottom:1px solid var(--line); padding-bottom:4px; }
.report h1 { font-size:16px; }
.report p, .report li { margin:4px 0; font-size:13.5px; }
.report code { background:#eef2f7; padding:1px 5px; border-radius:4px; }
.report pre { background:#0f172a; color:#e2e8f0; padding:10px; border-radius:6px; overflow-x:auto; }
.report pre code { background:none; color:inherit; }
.report table { margin:8px 0; }
.report blockquote { border-left:3px solid var(--line); margin:6px 0; padding:2px 12px; color:#475569; }

/* 表格列宽保护：短列禁止逐字断行（中文短列会被长列挤成一字宽、逐字竖排，
   生产案例库的「已入库 / 山河之志 / 来源工单」即如此）；长文本列用 class="wrap" 放行。
   注意 max-width 对 table-cell 不生效，限制列宽必须用 width。 */
th, td { white-space:nowrap; }
td.wrap, th.wrap { white-space:normal; overflow-wrap:anywhere; }
.report th, .report td { white-space:normal; }  /* 诊断报告内 md 表格须正常折行，否则长单元格撑破卡片 */

/* 状态筛选 pill（工单列表） */
.pills { display:flex; gap:6px; flex-wrap:wrap; align-items:center; }
.pills a { padding:3px 12px; border:1px solid var(--line); border-radius:14px; text-decoration:none;
           color:#475569; font-size:12.5px; background:#fff; }
.pills a.on { background:var(--pri); border-color:var(--pri); color:#fff; }

/* 关键词 chip */
.chips span { display:inline-block; padding:1px 8px; margin:1px 2px; background:#eef2ff;
              color:#3730a3; border-radius:10px; font-size:12px; }

/* 审计动作分布 */
.actmap { display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:6px 14px; margin-top:6px; }

/* 案例详情悬浮面板（不撑破表格布局） */
td.casecell { position:relative; }
.case-pop { display:none; position:absolute; right:8px; top:100%; width:520px; z-index:20;
            background:#fff; border:1px solid var(--line); border-radius:8px; padding:12px 14px;
            box-shadow:0 8px 24px rgba(15,23,42,.15); text-align:left; white-space:pre-wrap; overflow-wrap:anywhere; }
details[open] .case-pop { display:block; }

/* 移动端最小可用：横向滚动代替压缩错乱 */
@media (max-width: 820px) {
  .nav { overflow-x:auto; white-space:nowrap; padding:8px 10px; gap:8px; }
  .nav .who, .nav .spacer { display:none; }
  .container { margin:10px auto; padding:0 10px; }
  .cards { grid-template-columns:repeat(2,1fr); }
  .cols2, .grid { grid-template-columns:1fr; }
  body { overflow-x:auto; }
  table { min-width:760px; }
  .atts img { width:96px; height:96px; }
}

/* 跳板机 ICGW 网关状态徽章（配 .st 基础类） */
.gw-ok { background:#d1fae5; color:#065f46; }
.gw-warn { background:#fef3c7; color:#92400e; }
.gw-bad { background:#fee2e2; color:#991b1b; }
.gw-none { background:#e2e8f0; color:#334155; }
/* 网关配置片段文本框（整份 conf：等宽 + 不折行 + 可滚动） */
textarea.conf { font:12.5px/1.5 Consolas,Menlo,monospace; white-space:pre; overflow:auto; }
