/* 暗标卫士 - 前端样式（V3 视觉升级） */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  /* 品牌色板（对齐参考站设计语言） */
  --primary: #2b6bff; --primary-dark: #1a4fd6; --primary-light: #eef3ff;
  --grad-brand: linear-gradient(135deg, #4b8bff 0%, #2b6bff 48%, #6a4dff 100%);
  --ink: #16204a; --text: #1b2440; --muted: #6b7691; --line: #e6eaf5;
  --bg: #f3f5fb; --card: #ffffff;
  --danger: #e5484d; --danger-bg: #fdecec; --ok: #17915a; --ok-bg: #e7f7ef;
  --warn: #c2740a; --warn-bg: #fdf4e6; --info: #0b7285; --info-bg: #e6f5f8;
  --radius: 14px; --radius-lg: 18px; --radius-xl: 24px;
  --shadow-sm: 0 1px 2px rgba(20,35,90,.04), 0 6px 16px -12px rgba(20,35,90,.16);
  --shadow-md: 0 1px 2px rgba(20,35,90,.05), 0 14px 32px -22px rgba(20,35,90,.22);
  --shadow-lg: 0 24px 70px -26px rgba(24,44,110,.30), 0 2px 6px rgba(24,44,110,.06);
}
html, body { height: 100%; }
/* 平滑滚动只交给 app.js 的自动滚动模块驱动（V4.6.6）：
   显式声明 auto，避免浏览器/插件级 scroll-behavior:smooth 与逐帧动画叠加而抖动 */
html { scroll-behavior: auto; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", Roboto, sans-serif;
  background: var(--bg); color: var(--text); font-size: 15px; line-height: 1.62;
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
}
button { font-family: inherit; cursor: pointer; border: none; border-radius: 10px; font-size: 15px; }
input, select, textarea {
  font-family: inherit; font-size: 15px; padding: 11px 13px; border: 1px solid #e2e7f3;
  border-radius: 10px; background: #fff; color: var(--text); width: 100%; outline: none; transition: border-color .16s, box-shadow .16s;
}
input:focus, select:focus, textarea:focus { border-color: #8fb2ff; box-shadow: 0 0 0 4px rgba(43,107,255,.12); }
a { color: var(--primary); text-decoration: none; }

/* ================= 登录页（左右分栏 + 渐变光晕） ================= */
#login-view {
  position: relative; min-height: 100vh; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 48px 24px; overflow: hidden;
  background:
    radial-gradient(rgba(43,107,255,.05) 1px, transparent 1px) 0 0/22px 22px,
    radial-gradient(1100px 620px at 6% 8%, #dde8ff 0%, rgba(221,232,255,0) 62%),
    radial-gradient(900px 640px at 94% 88%, #e6ddff 0%, rgba(230,221,255,0) 64%),
    radial-gradient(720px 520px at 72% 2%, #d8efff 0%, rgba(216,239,255,0) 60%),
    linear-gradient(152deg, #eef4ff 0%, #f8f9ff 46%, #f2f0ff 100%);
}
.login-bg { position: absolute; inset: 0; pointer-events: none; }
.login-bg .orb { position: absolute; border-radius: 50%; filter: blur(46px); opacity: .5; }
.login-bg .orb-1 { width: 380px; height: 380px; left: -90px; top: -80px; background: #a9c6ff; animation: float1 16s ease-in-out infinite; }
.login-bg .orb-2 { width: 320px; height: 320px; right: -70px; bottom: -70px; background: #c3b3ff; animation: float2 19s ease-in-out infinite; }
.login-bg .orb-3 { width: 240px; height: 240px; right: 26%; top: 8%; background: #a9e6ff; opacity: .38; animation: float1 22s ease-in-out infinite reverse; }
@keyframes float1 { 0%,100% { transform: translate3d(0,0,0); } 50% { transform: translate3d(18px,26px,0); } }
@keyframes float2 { 0%,100% { transform: translate3d(0,0,0); } 50% { transform: translate3d(-22px,-18px,0); } }
@media (prefers-reduced-motion: reduce) { .login-bg .orb, .hero-art { animation: none; } }

.login-shell { position: relative; z-index: 1; width: 100%; max-width: 1160px;
  display: grid; grid-template-columns: minmax(0, 1fr) 460px; gap: 56px; align-items: center; }

/* —— 左侧品牌营销区 —— */
.login-hero { min-width: 0; }
.hero-brand { display: flex; align-items: center; gap: 13px; margin-bottom: 34px; }
.logo-mark { flex: none; width: 46px; height: 46px; border-radius: 14px; display: grid; place-items: center;
  background: var(--grad-brand); box-shadow: 0 12px 26px -10px rgba(43,107,255,.65); }
.logo-mark svg { display: block; }
.hero-brand-name { font-size: 21px; font-weight: 800; color: var(--ink); letter-spacing: .5px; line-height: 1.2; }
.hero-brand-sub { display: block; font-size: 10px; letter-spacing: 2.6px; color: #9aa4c0; font-weight: 700; }
.hero-title { font-size: 46px; line-height: 1.24; font-weight: 800; color: var(--ink); letter-spacing: .5px; }
.hero-title .slogan { display: block; background: var(--grad-brand); -webkit-background-clip: text;
  background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.hero-desc { margin-top: 20px; font-size: 16px; color: #59638a; max-width: 480px; line-height: 1.78; }
.hero-feats { list-style: none; margin-top: 34px; display: flex; flex-direction: column; gap: 16px; }
.hero-feats li { display: flex; gap: 14px; align-items: flex-start; }
.hero-feats li i { flex: none; width: 32px; height: 32px; border-radius: 10px; display: grid; place-items: center;
  background: #fff; color: var(--primary); font-style: normal; font-weight: 800; font-size: 13px;
  border: 1px solid #e6edff; box-shadow: 0 6px 14px -8px rgba(43,107,255,.6); }
.hero-feats b { display: block; font-size: 15px; color: var(--ink); font-weight: 700; }
.hero-feats span { font-size: 13px; color: #7c86a3; }

/* —— 装饰性主视觉（宽屏显示） —— */
.hero-art { display: none; }
@media (min-width: 1150px) {
  .login-hero { position: relative; }
  .hero-desc { max-width: 448px; }
  .hero-art { display: block; position: absolute; right: 0; top: 238px; width: 162px;
    filter: drop-shadow(0 26px 44px rgba(43,107,255,.20)); animation: heroFloat 8s ease-in-out infinite; }
  .hero-art svg { display: block; width: 100%; height: auto; }
}
@keyframes heroFloat { 0%,100% { transform: translateY(0) rotate(-1.4deg); } 50% { transform: translateY(-13px) rotate(1.4deg); } }

/* —— 右侧登录卡片（毛玻璃） —— */
.login-card {
  background: rgba(255,255,255,.74);
  -webkit-backdrop-filter: blur(24px) saturate(160%);
  backdrop-filter: blur(24px) saturate(160%);
  border: 1px solid rgba(255,255,255,.92);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg);
  padding: 38px 36px 32px; width: 100%; max-width: 460px;
}
.lc-head h2 { font-size: 24px; font-weight: 800; color: var(--ink); letter-spacing: .3px; }
.lc-head .t2 { font-size: 13px; color: var(--muted); margin-top: 5px; }

.brand { display: flex; align-items: center; gap: 11px; margin-bottom: 8px; }
.brand svg { flex: none; }
.brand .t1 { font-size: 18px; font-weight: 800; color: var(--ink); }
.brand .t2 { font-size: 12px; color: var(--muted); }
.slogan-sm { font-size: 12px; color: var(--muted); border-left: 1px solid var(--line);
  padding-left: 11px; margin-left: 2px; white-space: nowrap; }

.tabs { display: flex; gap: 4px; background: #f1f4fb; border-radius: 12px; padding: 4px; margin: 24px 0 20px; }
.tabs button { flex: 1; padding: 10px 0; font-size: 14px; background: transparent; color: var(--muted);
  border-radius: 9px; transition: .18s; cursor: pointer; }
.tabs button.active { background: #fff; color: var(--primary); font-weight: 700;
  box-shadow: 0 2px 8px -2px rgba(28,48,120,.24); }

.field { margin-bottom: 14px; }
.field label { display: block; font-size: 12.5px; color: var(--muted); margin-bottom: 7px; font-weight: 600; }
/* 带前置图标的输入框 */
.ipt { position: relative; }
.ipt > svg { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: #9aa4c0; pointer-events: none; }
.ipt > input { padding-left: 40px; }
.code-row { display: flex; gap: 8px; }
.code-row .ipt, .code-row input { flex: 1; }
.code-row button { white-space: nowrap; padding: 0 16px; background: var(--primary-light); color: var(--primary);
  font-size: 14px; font-weight: 600; min-height: 46px; }
.code-row button:disabled { opacity: .55; cursor: not-allowed; }
/* 主按钮外观（渐变 + 白字）。
   ⚠️ 这里**不要写 width:100%**：该 class 也被工具栏和弹窗按钮条复用
   （安全监控的时间段切换、充值引导弹窗），写成 100% 会把单个按钮拉成整行大横条。
   整行宽度只属于登录卡片，见下一条。 */
.btn-primary { background: var(--grad-brand); color: #fff; padding: 13px 22px; font-size: 16px;
  font-weight: 700; min-height: 50px; border-radius: 12px; letter-spacing: 2px;
  box-shadow: 0 1px 2px rgba(20,50,140,.22), 0 12px 24px -12px rgba(43,107,255,.85); transition: .18s; }
/* 登录卡片里的主按钮独占整行（客户端登录 / 管理端登录都走这条） */
.login-card .btn-primary { width: 100%; padding-left: 0; padding-right: 0; }
.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 3px 6px rgba(20,50,140,.2), 0 16px 30px -12px rgba(43,107,255,.9); }
.dev-code-tip { margin-top: 14px; background: var(--info-bg); color: var(--info); border: 1px dashed #9fd4de;
  border-radius: 10px; padding: 10px 12px; font-size: 13px; }
.demo-tip { margin-top: 18px; font-size: 12px; color: var(--muted); background: rgba(247,249,253,.9);
  border: 1px solid #eef1f8; border-radius: 10px; padding: 11px 13px; line-height: 1.7; }
.err-tip { color: var(--danger); font-size: 13px; margin-top: 10px; min-height: 18px; }
.lc-foot { margin-top: 18px; text-align: center; font-size: 11.5px; color: #a2abc4; }

@media (max-width: 980px) {
  .login-shell { grid-template-columns: 1fr; gap: 30px; max-width: 460px; }
  .login-hero { display: none; }
  .login-card { padding: 30px 24px 26px; }
}

/* ================= 主框架 ================= */
#app-view { display: none; min-height: 100vh; flex-direction: column; }
body.app-shell {
  background:
    radial-gradient(900px 420px at 50% -170px, #e6eeff 0%, rgba(230,238,255,0) 72%),
    linear-gradient(180deg, #f6f8fe 0%, #f2f4fa 100%);
  background-attachment: fixed;
}
header.appbar { background: rgba(255,255,255,.86); -webkit-backdrop-filter: blur(16px) saturate(180%);
  backdrop-filter: blur(16px) saturate(180%); border-bottom: 1px solid rgba(226,232,245,.95);
  position: sticky; top: 0; z-index: 50; }
.appbar-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; height: 64px; display: flex; align-items: center; gap: 14px; }
.appbar .logo-mark { width: 34px; height: 34px; border-radius: 11px; box-shadow: 0 8px 18px -8px rgba(43,107,255,.7); }
.appbar .brand .t1 { font-size: 18px; }
.spacer { flex: 1; }
.user-chip { font-size: 13px; color: var(--muted); display: flex; align-items: center; gap: 8px; }
.role-tag { background: var(--primary-light); color: var(--primary); border-radius: 7px; padding: 2px 9px;
  font-size: 12px; font-weight: 700; }
.btn-ghost { background: transparent; color: var(--muted); padding: 8px 12px; font-size: 14px; border-radius: 9px; transition: .16s; }
.btn-ghost:hover { background: #eef2fb; color: var(--text); }
nav.side-nav { width: var(--nav-w, 224px); flex-shrink: 0; padding: 20px 14px; display: flex; flex-direction: column;
  gap: 3px; position: sticky; top: 64px; height: calc(100vh - 64px); overflow-y: auto; }
nav.side-nav button { padding: 11px 14px; font-size: 14px; color: var(--muted); background: transparent;
  border-radius: 11px; white-space: nowrap; transition: all .16s ease; border: none; text-align: left;
  display: flex; align-items: center; gap: 11px; width: 100%; position: relative; }
nav.side-nav button svg { flex: none; opacity: .85; transition: opacity .16s; }
nav.side-nav button:hover { background: #eef2fb; color: var(--text); }
nav.side-nav button:hover svg { opacity: 1; }
nav.side-nav button.active { color: #fff; font-weight: 600; background: var(--grad-brand);
  box-shadow: 0 10px 22px -10px rgba(43,107,255,.9); }
nav.side-nav button.active svg { opacity: 1; }
.nav-badge { position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: #e5484d;
  color: #fff; font-size: 11px; font-weight: 700; line-height: 18px; text-align: center; }
nav.side-nav button.active .nav-badge { background: #fff; color: var(--primary, #2b6bff); }
/* ---------- 导航分组（V4.3.0）：管理端 16 项收敛为 3 个可折叠组 ---------- */
nav.side-nav button.nav-group-head { font-size: 12.5px; font-weight: 700; color: var(--ink);
  letter-spacing: .4px; padding-top: 12px; padding-bottom: 12px; }
nav.side-nav .nav-caret { display: inline-block; font-size: 10px; color: var(--muted);
  margin-right: -5px; transition: transform .16s ease; }
nav.side-nav button.nav-group-head.collapsed .nav-caret { transform: rotate(-90deg); }
nav.side-nav button.nav-group-head:hover { color: var(--ink); }
nav.side-nav button.nav-group-head.active-group { color: var(--primary); background: var(--primary-light); }
nav.side-nav .nav-group { display: flex; flex-direction: column; gap: 2px;
  margin: 0 0 2px 12px; padding-left: 8px; border-left: 2px solid var(--line); }
nav.side-nav .nav-group.collapsed { display: none; }
nav.side-nav .nav-group button { font-size: 13.5px; padding: 9px 12px; }
.pager { display: flex; align-items: center; gap: 10px; margin-top: 12px; justify-content: flex-end; }
.pager .pager-info { font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums; }
.shell { max-width: 1140px; margin: 0 auto; width: 100%; display: flex; align-items: flex-start; }
main { padding: 26px 24px 70px; flex: 1; min-width: 0; }

/* ---------- 卡片与通用 ---------- */
.card { background: var(--card); border: 1px solid rgba(229,234,246,.95); border-radius: var(--radius-lg);
  padding: 24px; margin-bottom: 18px; box-shadow: var(--shadow-sm); }
.card h3 { font-size: 16.5px; margin-bottom: 18px; display: flex; align-items: center; gap: 10px;
  color: var(--ink); font-weight: 700; letter-spacing: .2px; padding-bottom: 14px;
  border-bottom: 1px solid #f0f3fa; }
.card h3 svg { color: var(--primary); }
.card h3 .spacer { flex: 1; border-bottom: none; padding-bottom: 0; }
.muted { color: var(--muted); font-size: 13px; }
.row { display: flex; gap: 12px; flex-wrap: wrap; }
.row > * { flex: 1; min-width: 160px; }
.btn { background: var(--grad-brand); color: #fff; padding: 10px 18px; font-weight: 600; min-height: 44px;
  box-shadow: 0 1px 2px rgba(20,50,140,.2), 0 10px 20px -12px rgba(43,107,255,.85); transition: all .16s ease;
  letter-spacing: .2px; }
.btn:hover { transform: translateY(-1px); box-shadow: 0 2px 4px rgba(20,50,140,.2), 0 14px 26px -12px rgba(43,107,255,.9); }
.btn:active { transform: translateY(0); }
.btn[disabled] { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }
/* ⚠️ .btn-outline / .btn-danger 全站有 60+ 处是**单独使用**（不写 .btn），
   例如 class="btn-outline btn-sm"。所以这里必须自带 padding / 圆角 / 字重，
   否则会退化成浏览器默认按钮——没有内边距、没有圆角、字重偏细，看起来像一段蓝色文字。
   .btn-sm 定义在下方，同特异性下会覆盖尺寸，组合使用时仍按小号显示。 */
.btn-outline, .btn-danger { padding: 10px 18px; font-weight: 600; min-height: 44px;
  border-radius: 12px; letter-spacing: .2px; transition: all .16s ease; }
.btn-outline { background: #fff; color: var(--primary); border: 1px solid #cfdcff; box-shadow: none; }
.btn-outline:hover { background: var(--primary-light); border-color: var(--primary); transform: none;
  box-shadow: 0 6px 14px -10px rgba(43,107,255,.7); }
.btn-sm { padding: 6px 13px; font-size: 13px; min-height: 34px; border-radius: 8px; font-weight: 600;
  letter-spacing: .2px; }
.btn-danger { background: #fff; color: var(--danger); border: 1px solid #f3c3c5; box-shadow: none; }
.btn-danger:hover { background: var(--danger-bg); transform: none; box-shadow: none; }

/* ---------- 分段切换条（工具栏用，如安全监控的时间段） ----------
   未选中 = 白底描边 + 灰蓝字；选中 = 渐变白字。
   靠**颜色**区分选中态，而不是靠宽度——原实现选中态直接套 .btn-primary，
   在 width:100% 下会把选中项撑成整行大横条，看起来像布局坏了。 */
.seg-bar { display: flex; flex-wrap: wrap; gap: 8px; }
.seg-bar .seg-btn { padding: 6px 14px; font-size: 13px; font-weight: 600; min-height: 34px;
  min-width: 64px; text-align: center;
  border-radius: 8px; background: #fff; color: var(--muted); border: 1px solid #dfe5f2;
  box-shadow: none; white-space: nowrap; transition: all .16s ease; }
.seg-bar .seg-btn:hover { color: var(--primary); border-color: #c3d4ff; background: var(--primary-light); }
.seg-bar .seg-btn.on { background: var(--grad-brand); color: #fff; border-color: transparent;
  box-shadow: 0 1px 2px rgba(20,50,140,.2), 0 10px 20px -12px rgba(43,107,255,.85); }
/* 不可用态（V4.9.38）：支付渠道未配置完成时置灰，禁止 hover 高亮造成「可点」错觉 */
.seg-bar .seg-btn:disabled,
.seg-bar .seg-btn.seg-btn-disabled { opacity: .6; cursor: not-allowed; background: #f7f8fa;
  color: #a6adbb; border-color: #e6e9f0; box-shadow: none; }
.seg-bar .seg-btn:disabled:hover,
.seg-bar .seg-btn.seg-btn-disabled:hover { color: #a6adbb; border-color: #e6e9f0;
  background: #f7f8fa; }
/* 按钮内的状态标（模拟 / 暂不可用） */
.seg-tag { font-style: normal; font-size: 10.5px; line-height: 1.5; margin-left: 4px;
  padding: 0 4px; border-radius: 4px; background: #eef4ff; color: var(--primary); font-weight: 600; }
.seg-tag-off { background: #eef0f4; color: #98a1b0; }

/* ---------- 上传区 ---------- */
.upload-zone { border: 2px dashed #cdd9f5; border-radius: var(--radius-lg); padding: 38px 20px; text-align: center;
  color: var(--muted); transition: all .2s; cursor: pointer;
  background: linear-gradient(180deg, #fbfcff 0%, #f7faff 100%); }
.upload-zone:hover, .upload-zone.drag { border-color: var(--primary); color: var(--primary);
  background: linear-gradient(180deg, #f4f8ff 0%, #eef4ff 100%); box-shadow: inset 0 0 0 4px rgba(43,107,255,.06); }
.upload-zone svg { width: 40px; height: 40px; margin-bottom: 10px; color: #93a6d6; transition: .2s; }
.upload-zone:hover svg { color: var(--primary); transform: translateY(-2px); }
.upload-zone .big { font-size: 16px; color: var(--ink); font-weight: 700; }
.file-pill { display: none; margin-top: 14px; background: var(--primary-light); border-radius: 10px; padding: 12px 14px;
  font-size: 14px; color: var(--primary-dark); align-items: center; gap: 10px; }
.file-pill.show { display: flex; }
.detect-bar { display: flex; gap: 12px; align-items: flex-end; margin-top: 16px; flex-wrap: wrap; }
.detect-bar .field { margin: 0; flex: 1; min-width: 200px; }


/* 「开始检测」置于上传区下方 */
.detect-actions { margin-top: 18px; display: flex; flex-direction: column; gap: 9px; }
.btn-lg { width: 100%; padding: 15px 0; font-size: 17px; font-weight: 700; min-height: 54px; border-radius: 13px; letter-spacing: 2px; }
.btn-lg[disabled] { background: #c3cde4; cursor: not-allowed; }
.detect-hint { font-size: 12.5px; color: var(--muted); text-align: center; }

/* ---------- 结果 ---------- */
.result-banner { border-radius: var(--radius-lg); padding: 20px 22px; margin-bottom: 18px; display: flex;
  align-items: center; gap: 14px; border: 1px solid transparent; }
.result-banner.fail { background: linear-gradient(135deg, #fdecec 0%, #fff5f5 100%); color: var(--danger); border-color: #f6d5d6; }
.result-banner.warn { background: linear-gradient(135deg, #fdf4e6 0%, #fffaf1 100%); color: var(--warn); border-color: #f0dcb8; }
.result-banner.pass { background: linear-gradient(135deg, #e7f7ef 0%, #f4fdf8 100%); color: var(--ok); border-color: #c4e9d6; }
.result-banner .concl { font-size: 17.5px; font-weight: 800; letter-spacing: .2px; }
.result-banner .sub { font-size: 13px; opacity: .85; }
/* 免责声明（检测结果出来后显示） */
.disclaimer { margin: -6px 0 16px; font-size: 12.5px; color: var(--warn); background: var(--warn-bg);
  border: 1px dashed #e8c48a; border-radius: 10px; padding: 9px 13px; line-height: 1.55; }
/* 页面底部广告语 */
.page-slogan { text-align: center; color: #9aa4c0; font-size: 13px; letter-spacing: .6px; padding: 30px 0 12px; }
.dim-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 13px; margin-bottom: 18px; }
.dim-card { border: 1px solid rgba(229,234,246,.95); border-radius: var(--radius); padding: 16px 14px; text-align: center;
  background: #fff; box-shadow: var(--shadow-sm); transition: .18s; }
.dim-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.dim-card .name { font-size: 14px; font-weight: 700; color: var(--ink); }
.dim-card .st { font-size: 13px; margin: 5px 0 3px; font-weight: 800; }
.dim-card.fail .st { color: var(--danger); }
.dim-card.warn .st { color: var(--warn); }
.dim-card.pass .st { color: var(--ok); }
.dim-card .cnt { font-size: 12px; color: var(--muted); }
.dim-card.off { opacity: .45; }
.issue { border: 1px solid rgba(229,234,246,.95); border-left: 4px solid var(--line); border-radius: 8px;
  padding: 6px 10px; margin-bottom: 5px; background: #fff; }
.issue.violation { border-left-color: var(--danger); background: #fffafa; }
.issue.warning { border-left-color: var(--warn); background: #fffdf7; }
.issue.info { border-left-color: var(--info); }
.issue .top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 2px; line-height: 1.3; }
.sev { font-size: 11px; font-weight: 700; border-radius: 5px; padding: 1px 6px; }
.sev.violation { background: var(--danger-bg); color: var(--danger); }
.sev.warning { background: var(--warn-bg); color: var(--warn); }
.sev.info { background: var(--info-bg); color: var(--info); }
.issue .item { font-size: 12.5px; color: var(--muted); font-weight: 600; }
.issue .loc { font-size: 11.5px; color: #c05621; background: #fdf0e6; border: 1px solid #f6d5bd;
  border-radius: 5px; padding: 0 7px; font-weight: 600; line-height: 18px; }
.issue .loc::before { content: "📍 "; }
/* 右上角「此规则有误」小按钮 */
.issue .rf-btn { margin-left: auto; padding: 1px 8px; font-size: 11.5px; border-radius: 6px; }
.issue .rf-btn svg { width: 11px; height: 11px; }
.issue .detail { font-size: 12.5px; line-height: 1.45; margin: 1px 0; color: var(--text); }
.issue .exp-act { font-size: 12px; color: var(--muted); background: #f5f7fc; border-radius: 5px;
  padding: 1px 7px; margin: 2px 0; line-height: 1.4; display: inline-block; }
.issue .sugg { font-size: 12px; color: var(--ok); margin-top: 1px; line-height: 1.4; }
.issue .snip { font-size: 11.5px; color: var(--muted); font-style: italic; line-height: 1.35; margin-top: 1px; }
/* 精确定位：约第X页（有分页锚点时显示） */
.issue .pg { font-size: 11.5px; color: #1a5fb4; background: #e8f1fb; border: 1px solid #c7dcf4;
  border-radius: 6px; padding: 1px 8px; font-weight: 600; }
.issue .pg::before { content: "📄 "; }
/* 规则命中溯源：回显触发该检测项的招标要求原文句 */
.issue .rule-src { font-size: 11.5px; color: #6b4fb8; background: #f3eefb; border: 1px solid #e0d4f7;
  border-radius: 6px; padding: 4px 8px; margin-top: 4px; line-height: 1.45; }
.issue .rule-src svg { width: 12px; height: 12px; vertical-align: -2px; margin-right: 3px; }

/* ---------- 「忽略此项」与「连续同类型合并」 ---------- */
/* 「忽略此项」按钮：紧随「此规则有误」右侧（rf-btn 的 margin-left:auto 已把它推到行尾） */
.issue .ig-btn { padding: 1px 8px; font-size: 11.5px; border-radius: 6px; }
/* 忽略态：整行浅灰底 + 左侧色条转灰；仅「信息内容」降透明，
   两个操作按钮（此规则有误 / 恢复此项）保持满不透明 → 点击永远可用、不误判为禁用 */
.issue.ignored { background: #f5f6f9; border-left-color: #c9cfdd; }
.issue.ignored > .top > :not(.ig-btn):not(.rf-btn),
.issue.ignored > .detail,
.issue.ignored > .exp-act,
.issue.ignored > .snip,
.issue.ignored > .rule-src,
.issue.ignored > .sugg,
.issue.ignored > .dup-detail { opacity: .45; }
/* 合并行「共 N 处」徽标 */
.issue .dup { font-size: 11.5px; font-weight: 700; color: #1a5fb4; background: #e8f1fb;
  border: 1px solid #c7dcf4; border-radius: 999px; padding: 0 8px; line-height: 18px; }
/* 合并行展开明细（原生 details，无 JS 依赖） */
.issue .dup-detail { margin-top: 5px; border-top: 1px dashed #e2e8f5; padding-top: 5px; }
.issue .dup-detail summary { font-size: 11.5px; color: var(--primary-dark); cursor: pointer; }
/* 合并行摘要文案随展开态切换（废标项默认展开，无需点击） */
.issue .dup-detail .when-open { display: none; }
.issue .dup-detail[open] .when-open { display: inline; }
.issue .dup-detail[open] .when-closed { display: none; }
.issue .dup-row { display: flex; gap: 8px; flex-wrap: wrap; padding: 2px 0 2px 14px;
  font-size: 11.5px; color: var(--muted); }
.issue .dup-snip { font-style: italic; }
.issue .dup-exp { color: #8a92b2; }
/* 修复预览摘要里的「已忽略 N 处」提示 */
.fix-prev-sum .ign { color: #6b7280; background: #f1f3f9; border: 1px solid #dde2ee; }
.dim-group-title { font-size: 14px; font-weight: 800; margin: 12px 0 6px; display: flex; align-items: center;
  gap: 8px; color: var(--ink); }
.dim-group-title svg { color: var(--primary); }

/* ---------- 表格 ---------- */
table.tbl { width: 100%; border-collapse: collapse; font-size: 14px; }
.tbl th { text-align: left; font-size: 12.5px; color: var(--muted); font-weight: 700; padding: 11px 10px;
  border-bottom: 1px solid var(--line); white-space: nowrap; letter-spacing: .3px; background: #f7f9fd; }
.tbl th:first-child { border-radius: 8px 0 0 0; }
.tbl th:last-child { border-radius: 0 8px 0 0; }
.tbl td { padding: 10px 10px; border-bottom: 1px solid #f1f3f9; vertical-align: middle; }
.tbl tr:hover td { background: #fafbff; }
.tbl .mono { font-variant-numeric: tabular-nums; }
.tbl tbody tr { transition: background .14s; }
.tag { display: inline-block; font-size: 12px; border-radius: 6px; padding: 2px 9px; font-weight: 700; }
.tag.fail { background: var(--danger-bg); color: var(--danger); }
.tag.warn { background: var(--warn-bg); color: var(--warn); }
.tag.pass { background: var(--ok-bg); color: var(--ok); }
.tag.off { background: #eef0f5; color: var(--muted); }
.table-wrap { overflow-x: auto; border-radius: 10px; }

/* ---------- 弹窗 ---------- */
/* 滚动条收进弹窗内部：原先滚动容器是铺满视口的 .modal-mask，长表单（编辑官方预设规则等）
   的滚动条贴在整个浏览器窗口最右侧，看起来像弹窗外面的一条「进度条」。
   改为弹窗自身限高滚动，滚动条落在白色卡片内缘，蒙层不再滚动。 */
.modal-mask { position: fixed; inset: 0; background: rgba(16,24,46,.42);
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); z-index: 100; display: none;
  align-items: flex-start; justify-content: center; padding: 48px 16px; overflow: hidden; }
.modal-mask.show { display: flex; animation: maskIn .18s ease-out; }
@keyframes maskIn { from { opacity: 0; } to { opacity: 1; } }
/* 弹窗打开期间锁背景滚动（--sbw 由 core.js lockBodyScroll() 写入，等于滚动条宽度） */
html.modal-open { overflow: hidden; }
html.modal-open body { padding-right: var(--sbw, 0px); }
.modal { background: #fff; border-radius: var(--radius-xl); width: 100%; max-width: 760px; padding: 26px;
  box-shadow: 0 30px 90px -20px rgba(16,28,70,.45); border: 1px solid rgba(255,255,255,.8);
  animation: modalIn .22s cubic-bezier(.2,.9,.3,1.1);
  max-height: calc(100vh - 96px); max-height: calc(100dvh - 96px);
  overflow-y: auto; overscroll-behavior: contain; }
@keyframes modalIn { from { opacity: 0; transform: translateY(10px) scale(.985); } to { opacity: 1; transform: none; } }
.modal h3 { font-size: 17.5px; margin-bottom: 18px; color: var(--ink); font-weight: 800; }
.modal .close-x { float: right; background: none; color: var(--muted); font-size: 20px; padding: 2px 9px; border-radius: 8px; transition: .16s; }
.modal .close-x:hover { background: #eef2fb; color: var(--text); }
.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 18px; }
.modal-actions .btn { min-width: 110px; }
.ro-val { font-size: 14px; color: var(--text); padding: 10px 13px; background: #f7f9fd; border-radius: 10px;
  border: 1px solid var(--line); }
/* 用户管理 - 备注列 */
.remark-cell { display: flex; align-items: center; gap: 6px; max-width: 320px; }
.remark-txt { max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.remark-txt.empty { color: var(--muted); }
/* 备注列单元格：整格可点击编辑（放在表格最左侧，便于辨识用户） */
.u-remark-cell { cursor: pointer; }
.u-remark-cell:hover { background: #f4f7ff; }
.u-remark-cell:hover .remark-txt { text-decoration: underline dashed; }
.u-remark-cell .remark-txt { display: inline-block; vertical-align: bottom; max-width: 200px; }
.dim-form-sec { border: 1px solid var(--line); border-radius: 12px; padding: 15px; margin-bottom: 12px; background: #fcfdff; }
.dim-form-sec .sec-head { display: flex; align-items: center; gap: 10px; margin-bottom: 11px; font-weight: 700; color: var(--ink); }
.dim-form-sec .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; }
.check-line { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.check-line input { width: auto; }
.switch-note { font-size: 12px; color: var(--muted); }

/* ---------- 一键修复结果面板 ---------- */
.fix-summary { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 18px; }
.fs-item { border: 1px solid var(--line); border-radius: 12px; padding: 14px; text-align: center; background: #fbfcfe; }
.fs-item .fs-n { font-size: 26px; font-weight: 800; color: var(--text); line-height: 1.1; }
.fs-item .fs-t { font-size: 12.5px; color: var(--muted); margin-top: 4px; }
.fs-item.ok .fs-n { color: var(--ok); }
.fs-item.warn.active { border-color: var(--danger); background: #fffafa; }
.fs-item.warn.active .fs-n { color: var(--danger); }
.fs-item.man.active { border-color: var(--warn); background: #fffdf7; }
.fs-item.man.active .fs-n { color: var(--warn); }
.fix-allok { background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; border-radius: 12px;
  padding: 14px 16px; font-weight: 700; display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.fix-group { display: flex; align-items: center; gap: 10px; font-size: 14.5px; font-weight: 800;
  margin: 18px 0 10px; }
.fix-group.danger { color: var(--danger); }
.fix-group.warn { color: var(--warn); }
.fix-group .fix-count { font-size: 12px; font-weight: 700; background: #f1f3f9; color: var(--muted);
  border-radius: 20px; padding: 2px 10px; }
.fix-list { display: flex; flex-direction: column; gap: 9px; max-height: 320px; overflow-y: auto; padding-right: 2px; }
.fix-issue .fix-badge { font-size: 11px; font-weight: 700; border-radius: 6px; padding: 2px 8px; white-space: nowrap; }
.fix-badge.man { background: var(--warn-bg); color: var(--warn); }
.fix-badge.fail { background: var(--danger-bg); color: var(--danger); }
.fix-guide { margin-top: 20px; background: #f7f9fd; border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; font-size: 13.5px; color: var(--text); }
.fix-guide b { display: flex; align-items: center; gap: 7px; color: var(--ink); }
.fix-guide ol { margin: 8px 0 0 2px; padding-left: 20px; line-height: 1.8; }
.fix-guide li { margin: 2px 0; }
/* 管理端：合伙人管理（列表 / 共创素材审核 / 赠送记录） */
.pa-tools { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.pa-tools select { max-width: 150px; }
.pa-tools input { max-width: 260px; }
/* 合伙人管理操作列：按钮横排不换行 */
.tbl .col-actions { white-space: nowrap; }
.tbl .col-actions .btn { margin-left: 6px; }
.tbl .col-actions .btn:first-child { margin-left: 0; }

/* 一键修复后的「先核对再使用」提醒弹窗 */
.fix-notice { background: #fff7ed; border: 1px solid #fed7aa; border-radius: 12px; padding: 12px 16px;
  font-size: 13.5px; color: #9a3412; line-height: 1.7; margin-bottom: 16px; }
.fix-notice b { display: flex; align-items: center; gap: 7px; color: #c2410c; font-size: 14.5px; margin-bottom: 3px; }
.fix-notice-sub { font-size: 13.5px; color: var(--muted); margin: 0 0 14px; }

/* ---------- 一键修复前的废标风险警告框 ---------- */
.fix-warning { background: #fff7ed; border: 1px solid #fed7aa; border-radius: 12px; padding: 14px 16px;
  font-size: 13.5px; color: #9a3412; line-height: 1.75; margin-bottom: 4px; }
.fix-warning p { margin: 0 0 8px; }
.fix-warning p:last-child { margin-bottom: 0; }
.fix-warning b { color: #c2410c; }
.fix-warning ol { margin: 6px 0 8px; padding-left: 20px; line-height: 1.8; }
.fix-warning li { margin: 2px 0; }
.fix-warn-strong { color: #b91c1c !important; font-weight: 600; }

/* ---------- 一键修复「预览」清单（改哪 / 从什么改成什么） ---------- */
.fix-preview-loading { font-size: 12.5px; color: var(--muted); padding: 10px 2px; }
.fix-prev-sum { display: flex; gap: 10px; margin: 10px 0 12px; flex-wrap: wrap; }
.fix-prev-sum span { font-size: 12.5px; font-weight: 700; border-radius: 8px; padding: 5px 12px; }
.fix-prev-sum .ok { color: #166534; background: #e9f7ef; border: 1px solid #bfe6cf; }
.fix-prev-sum .man { color: #b45309; background: #fef3e2; border: 1px solid #f5d8a8; }
.fix-prev-group { font-size: 13px; font-weight: 800; margin: 10px 0 6px; }
.fix-prev-group.ok { color: #166534; }
.fix-prev-group.man { color: #b45309; }
#fix-preview-box .fix-list { max-height: 260px; }

/* ---------- 登录页：自动注册提示 / 条款同意 ---------- */
.auto-reg-tip { margin-top: 12px; font-size: 12px; color: var(--muted); text-align: center; }
.agree-row { display: flex; align-items: flex-start; gap: 8px; margin-top: 16px; font-size: 12.5px;
  color: #5c668a; line-height: 1.65; cursor: pointer; user-select: none; text-align: left; }
.agree-row input { width: 15px; height: 15px; flex: none; margin-top: 2px; accent-color: var(--primary); }
.agree-row a { color: var(--primary); font-weight: 600; }
.agree-row a:hover { text-decoration: underline; }
/* 支付弹窗内的协议勾选：贴合二维码/倒计时下方，与底部操作按钮留出呼吸感 */
.pay-agree-row { margin: 12px 0 2px; font-size: 12px; justify-content: center; }
/* ================= 底部法定公示信息（登录页/主应用，简约） ================= */
.login-legal { position: relative; z-index: 1; width: 100%; margin-top: 24px; text-align: center;
  font-size: 12px; color: #9aa4c0; line-height: 1.9; padding: 0 16px 6px; }
.login-legal .ll-line { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; }
.login-legal .ll-line i { margin: 0 7px; font-style: normal; color: #ccd3e4; }
.login-legal a { color: #7c86a3; }
.login-legal a:hover { color: var(--primary); text-decoration: underline; }
.login-legal .ll-note { color: #aab3c9; }
.app-legal { padding: 18px 22px 22px; text-align: center; font-size: 12px; color: #9aa4c0; }
.app-legal i { margin: 0 7px; font-style: normal; color: #ccd3e4; }
.app-legal a { color: #7c86a3; }
.app-legal a:hover { color: var(--primary); text-decoration: underline; }

/* ---------- 条款弹窗 ---------- */
.modal-title { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.modal-sub { font-size: 12.5px; font-weight: 600; color: var(--muted); }
.fb-reward-tip { font-size: 13px; line-height: 1.6; color: #8a5b00; background: #fff8ec; border: 1px solid #f5e3bd; border-radius: 8px; padding: 8px 12px; margin-bottom: 12px; }
.fb-reward-tip b { color: var(--primary); }
.legal-body { max-height: 60vh; overflow-y: auto; padding-right: 10px; font-size: 13.5px;
  line-height: 1.85; color: #4a5478; }
.legal-body h4 { font-size: 14px; color: var(--ink); font-weight: 800; margin: 18px 0 8px; }
.legal-body h4:first-child { margin-top: 0; }
.legal-body p { margin: 0 0 10px; }
.legal-body ul { margin: 0 0 10px; padding-left: 20px; }
.legal-body li { margin-bottom: 6px; }
.legal-body b { color: var(--ink); }

/* ---------- 账号设置（顶栏用户名可点击） ---------- */
#user-chip { padding: 6px 10px; border-radius: 10px; cursor: pointer; transition: background .16s; }
#user-chip:hover { background: #eef2fb; }
#user-chip:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.chip-caret { flex: none; color: #9aa4c0; }
.account-info { background: #f7f9fd; border: 1px solid var(--line); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 16px; }
.acc-row { display: flex; justify-content: space-between; align-items: center; font-size: 13.5px; padding: 5px 0; }
.acc-row span { color: var(--muted); }
.acc-row b { color: var(--ink); font-weight: 700; }
.acc-row b.acc-ok { color: var(--ok); }
.acc-row b.acc-warn { color: var(--warn); }

/* ---------- 加载与提示 ---------- */
.spinner { width: 22px; height: 22px; border: 3px solid var(--primary-light); border-top-color: var(--primary);
  border-radius: 50%; animation: spin .8s linear infinite; display: inline-block; vertical-align: middle; }
@keyframes spin { to { transform: rotate(360deg); } }
.loading-box { text-align: center; padding: 46px 0; color: var(--muted); }
.toast { position: fixed; top: 78px; left: 50%; transform: translateX(-50%) translateY(-6px); z-index: 200;
  background: rgba(22,32,74,.94); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  color: #fff; border-radius: 12px; padding: 11px 20px; font-size: 14px;
  box-shadow: 0 18px 40px -16px rgba(10,20,50,.6); display: none; max-width: 90vw; }
.toast.show { display: block; animation: toastIn .22s cubic-bezier(.2,.9,.3,1.1); }
@keyframes toastIn { from { opacity: 0; transform: translateX(-50%) translateY(-14px); } to { opacity: 1; transform: translateX(-50%) translateY(-6px); } }
.empty { text-align: center; color: var(--muted); padding: 36px 0; }

/* ---------- 多文件列表 ---------- */
.file-list { display: none; margin-top: 14px; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
.file-list.show { display: block; }
.fl-head { display: flex; align-items: center; gap: 8px; padding: 11px 15px; background: #f7f9fe;
  font-size: 13px; color: var(--muted); border-bottom: 1px solid var(--line); }
.file-row { display: flex; align-items: center; gap: 10px; padding: 10px 15px; border-bottom: 1px solid #f1f3f9; font-size: 14px; }
.file-row:last-child { border-bottom: none; }
.file-row .fn { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 58%; }
.file-row .fs { font-size: 12px; color: var(--muted); white-space: nowrap; }
.file-row svg { color: #93a6d6; flex: none; }

/* ---------- 批量检测进度 ---------- */
.prog-bar { height: 6px; background: #eceff7; border-radius: 4px; overflow: hidden; margin-top: 12px; }
.prog-in { height: 100%; background: var(--grad-brand); transition: width .25s; }

/* ---------- 批量结果 ---------- */
.banner-stat { display: flex; align-items: center; gap: 10px; font-size: 12px; white-space: nowrap; }
.big-n { font-size: 21px; font-weight: 800; margin-right: 2px; }
.big-n.red { color: var(--danger); }
.big-n.orange { color: var(--warn); margin-left: 10px; }
.big-n.gray { color: var(--muted); margin-left: 10px; }
.batch-item { border-bottom: 1px solid var(--line); }
.batch-item:last-child { border-bottom: none; }
.batch-item.bad { background: #fffafa; }
.bi-head { display: flex; align-items: center; gap: 10px; padding: 13px 18px; cursor: pointer; font-size: 14px; flex-wrap: wrap; transition: .15s; }
.bi-head:hover { background: #fafbff; }
.bi-head .arrow { color: var(--muted); font-size: 12px; width: 12px; }
.bi-body { padding: 4px 18px 16px; background: #fbfcfe; border-top: 1px solid #f1f3f9; }
.bi-body .dim-grid { margin-top: 12px; }
.batch-item.fail > .bi-head { border-left: 4px solid var(--danger); }
.batch-item.warn > .bi-head { border-left: 4px solid var(--warn); }
.batch-item.pass > .bi-head { border-left: 4px solid var(--ok); }

/* ---------- 等级标签 ---------- */
.lv { font-size: 11px; font-weight: 700; border-radius: 6px; padding: 2px 8px; background: #eef0f5; color: var(--muted); }
.lv-fatal { background: var(--danger-bg); color: var(--danger); }
.lv-normal { background: var(--warn-bg); color: var(--warn); }
.lv-info { background: var(--info-bg); color: var(--info); }
.lv-off { background: #eef0f5; color: var(--muted); }

/* ---------- 地区规则明细（用户端） ---------- */
.rule-card { border: 1px solid #e3eaff; border-radius: var(--radius); padding: 15px 17px; margin-bottom: 14px;
  background: linear-gradient(180deg, #fafcff 0%, #f6faff 100%); }
.rule-head { display: flex; align-items: center; gap: 8px; font-size: 15px; margin-bottom: 10px; color: var(--ink); }
.rule-head svg { color: var(--primary); }
.rule-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.rule-group { background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 11px 13px; }
.rule-group .rg-name { font-weight: 700; font-size: 14px; margin-bottom: 6px; color: var(--primary-dark); }
.rule-group ul { list-style: none; }
.rule-group li { font-size: 12.5px; color: var(--muted); padding: 2px 0; display: flex; gap: 6px; align-items: center; }
.rule-group li b { color: var(--text); font-weight: 600; }
.rule-empty { color: var(--muted); font-size: 13px; padding: 6px 0; }
/* 精简提示条：平时只显示一行摘要，完整规则点击后弹窗查看 */
.rule-card.compact { padding: 13px 17px; }
.rule-card.compact .rule-head { margin-bottom: 9px; }
.rule-card.compact .contact-tip { margin-top: 0; }
.contact-tip { margin-top: 12px; font-size: 12.5px; color: var(--muted); background: var(--warn-bg);
  border: 1px dashed #e8c48a; border-radius: 10px; padding: 9px 13px; }
.rule-sec { margin-bottom: 14px; }
.rs-title { font-weight: 800; margin: 10px 0 7px; font-size: 14px; color: var(--ink); }
.tbl.mini th, .tbl.mini td { padding: 7px 9px; font-size: 13px; }

/* ---------- 官方转用户规则库：差异明细 ---------- */
.rs-title.rs-added { color: var(--ok); }
.rs-title.rs-deleted { color: var(--danger); }
.rs-title.rs-modified { color: var(--warn); }
.copy-meta { display: flex; flex-wrap: wrap; gap: 8px 22px; padding: 10px 13px; margin-bottom: 12px;
  border: 1px solid var(--line); border-radius: 10px; background: #fafbfd; }
.copy-meta > div { display: flex; flex-direction: column; gap: 2px; }
.copy-meta .muted { font-size: 11.5px; }
.copy-meta b { font-size: 13.5px; color: var(--ink); }
.del-val { color: var(--danger); text-decoration: line-through; }
.add-val { color: var(--ok); font-weight: 600; }

/* ---------- 规则表单 / 解析 ---------- */
.dim-form-sec .field.frow label { margin-bottom: 4px; }
.dim-form-sec .ctl { display: flex; gap: 8px; align-items: center; }
.dim-form-sec .ctl > input, .dim-form-sec .ctl > select, .dim-form-sec .ctl > textarea { flex: 1; min-width: 0; }
.lvsel { flex: none !important; width: 96px; font-size: 13px; padding: 8px 6px; }
/* 检测项功能说明：仅复杂项带「?」图标，悬停/聚焦时以小字气泡展示 */
.qf-hint { display: inline-flex; align-items: center; justify-content: center;
  width: 14px; height: 14px; margin-left: 5px; border-radius: 50%;
  background: #c3cde2; color: #fff; font-size: 10.5px; font-weight: 700; font-style: normal;
  line-height: 1; cursor: help; vertical-align: 1px; user-select: none;
  transition: background .15s, transform .15s; }
.qf-hint:hover, .qf-hint:focus { background: var(--primary); transform: scale(1.15); outline: none; }
.qhelp-tip { position: fixed; z-index: 2000; max-width: 300px; padding: 10px 12px;
  border-radius: 10px; background: #1e2740; color: #eaf0fa; font-size: 12px; line-height: 1.72;
  font-weight: 400; text-align: left; box-shadow: 0 12px 34px -8px rgba(14,22,50,.48);
  pointer-events: none; opacity: 0; visibility: hidden; transition: opacity .14s ease; }
.qhelp-tip.on { opacity: 1; visibility: visible; }
.hl-changed { background: #fff8e1 !important; border-radius: 8px; box-shadow: inset 0 0 0 2px #f0c85a; }
/* ---------- 检测项搜索（规则表单，含官方/我的/另存为三种模式） ---------- */
.rf-find { display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
  margin: 0 0 10px; padding: 9px 12px; border: 1px solid #d5e4ff; border-radius: 10px;
  background: linear-gradient(180deg, #fbfcff 0%, #f5f9ff 100%); }
.rf-find input#rf-find { flex: 1; min-width: 200px; }
.rf-find-stat { font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.rf-find-stat b { color: var(--primary); }
.dim-form-sec .frow.rf-hit { background: #fff8e1; border-radius: 8px; box-shadow: inset 0 0 0 2px #f0c85a; }
.dim-form-sec .frow.rf-rel { background: #f2f7ff; border-radius: 8px; box-shadow: inset 0 0 0 1px #cfe0ff; }
.dim-form-sec .frow.rf-hit > label::after,
.dim-form-sec .frow.rf-rel > label::after { display: inline-block; margin-left: 5px; padding: 0 5px;
  border-radius: 5px; font-size: 10.5px; font-weight: 600; line-height: 16px; vertical-align: 1px; }
.dim-form-sec .frow.rf-hit > label::after { content: "命中"; background: #f0c85a; color: #6b4a00; }
.dim-form-sec .frow.rf-rel > label::after { content: "关联"; background: #dbe8ff; color: #2b6bff; }
tr.hl-row td { background: #fff8e1; }
tr.hl-row:hover td { background: #fff3d6; }
.diff-tip { font-size: 13px; background: var(--warn-bg); color: #8a5a00; border-radius: 10px; padding: 9px 13px; margin-bottom: 12px; }
.parse-sum { margin-top: 14px; font-size: 14px; background: #f5f8ff; border-radius: 10px; padding: 11px 13px; }
.pf-meta { margin-top: 14px; font-size: 13px; color: var(--primary-dark); background: var(--primary-light);
  border: 1px solid #d5e4ff; border-radius: 10px; padding: 9px 13px; line-height: 1.6; }
/* ---------- 上传招标文件封装 ---------- */
.pf-drop { margin-top: 8px; }
.pf-drop-inner { border: 2px dashed #cdd9f5; border-radius: var(--radius-lg); padding: 34px 20px;
  text-align: center; color: var(--muted); cursor: pointer; transition: all .2s;
  background: linear-gradient(180deg, #fbfcff 0%, #f7faff 100%); }
.pf-drop-inner:hover { border-color: var(--primary); color: var(--primary);
  background: linear-gradient(180deg, #f4f8ff 0%, #eef4ff 100%); box-shadow: inset 0 0 0 4px rgba(43,107,255,.06); }
.pf-drop-inner svg { width: 40px; height: 40px; margin-bottom: 10px; color: #93a6d6; transition: .2s; }
.pf-drop-inner:hover svg { color: var(--primary); transform: translateY(-2px); }
.pf-drop-title { font-size: 16px; color: var(--ink); font-weight: 700; }
.pf-drop-sub { font-size: 12.5px; margin-top: 5px; }
/* 备用入口：整行提示，右侧箭头，与主操作按钮分层 */
.pf-alt { margin-top: 14px; text-align: center; font-size: 12.5px; color: var(--muted); }
.pf-alt a { color: var(--primary); cursor: pointer; font-weight: 600; margin-left: 4px; }
.pf-alt a:hover { text-decoration: underline; }
/* 取消按钮：不再与文字挤在一行，改为右对齐的次级操作 */
.pf-actions { margin-top: 12px; justify-content: flex-end; }
.parse-sec { margin-top: 12px; }
.ps-title { font-weight: 700; font-size: 14px; margin-bottom: 6px; }
.warn-t { color: var(--warn); }
.ok-t { color: var(--ok, #12a150); }
ul.unmatched { list-style: none; }
ul.unmatched li { font-size: 13px; color: var(--muted); background: #f7f8fc; border-radius: 8px;
  padding: 7px 11px; margin-bottom: 6px; }

/* ---------- 一键解析：原文（左）↔ 检测项（右）并排核对 ---------- */
/* 用两列 grid，原文与检测项同一行顶对齐；两单元格等高，行与行严格对齐 */
.rv-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr);
  border: 1px solid var(--line); border-radius: 12px; overflow: hidden; margin-top: 12px;
  background: var(--card, #fff); }
.rv-h { display: flex; align-items: center; gap: 7px; font-size: 12.5px; font-weight: 700;
  color: var(--muted); background: #f5f8ff; padding: 9px 12px; border-bottom: 1px solid var(--line); }
.rv-h svg { color: var(--primary); flex: none; }
.rv-h:nth-child(1) { border-right: 1px solid var(--line); }
.rv-h:nth-child(2) { border-right: none; }
/* 原文格：浅底，纵向居中于行高，右边界固定 */
.rv-l { padding: 10px 12px; font-size: 13px; line-height: 1.65; border-bottom: 1px solid var(--line);
  border-right: 1px solid var(--line); display: flex; gap: 8px; align-items: flex-start;
  color: var(--ink); word-break: break-word; background: #f8faff; }
.rv-l-txt { flex: 1; min-width: 0; }
.rv-l.warn { background: #fffdf5; }
/* 检测项格：白底，卡片纵向排列并铺满行高 */
.rv-r { padding: 9px 11px; border-bottom: 1px solid var(--line); display: flex;
  flex-direction: column; gap: 7px; justify-content: flex-start; }
.rv-r.warn { background: #fffefb; }
.rv-no { flex: none; width: 20px; height: 20px; border-radius: 6px; background: #e8f0ff;
  color: #2b6bff; font-size: 11px; font-weight: 700; display: flex; align-items: center;
  justify-content: center; margin-top: 1px; }
.rv-badge { flex: none; font-size: 11px; font-weight: 700; border-radius: 999px;
  padding: 1px 9px; white-space: nowrap; margin-top: 1px; }
.rv-badge.ok { background: #e7f7ee; color: #12a150; }
.rv-badge.warn { background: var(--warn-bg, #fff4e3); color: var(--warn, #b7791f); }
.rv-badge.mute { background: #eef1f7; color: #9aa4c0; }
.rv-skip { font-size: 12.5px; color: #b8bfd0; }
.hit-chip { border: 1px solid #dbe4ff; background: #f8faff; border-radius: 9px; padding: 6px 8px; }
.hit-chip.manual { border-color: #f0c85a; background: #fffaf0; }
/* 窄屏：两列挤不下时转为上下堆叠，避免列宽过窄导致控件不可用 */
@media (max-width: 820px) {
  .rv-grid { grid-template-columns: 1fr; }
  .rv-h:nth-child(1) { border-right: none; }
  .rv-l { border-right: none; background: #f8faff; }
  .rv-l.warn { background: #fffdf5; }
  .rv-h:nth-child(2) { display: none; }
}

/* ---------- 推荐检测项（暗标隐性风险，可勾选） ---------- */
.rec-box { margin-top: 14px; border: 1px dashed #c8d6f5; border-radius: 12px; background: #fbfcff;
  padding: 12px 14px; }
.rec-head { font-size: 14px; color: var(--ink); display: flex; align-items: center; gap: 8px;
  flex-wrap: wrap; margin-bottom: 10px; }
.rec-head b { color: #2b6bff; }
.rec-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.rec-item { display: flex; align-items: flex-start; gap: 9px; padding: 8px 10px;
  border: 1px solid var(--line); border-radius: 9px; background: #fff; cursor: pointer;
  transition: border-color .15s, background .15s; }
.rec-item:hover { border-color: #2b6bff; }
.rec-chk { flex: none; margin-top: 3px; width: 16px; height: 16px; cursor: pointer; }
.rec-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.rec-name { font-size: 13px; font-weight: 700; color: var(--ink); }
.rec-reason { font-size: 12px; color: var(--muted); line-height: 1.5; }
.rec-tag { flex: none; font-size: 11px; padding: 2px 8px; border-radius: 999px; white-space: nowrap;
  background: #eef3ff; color: #2b6bff; }
.rec-tag.on { background: #e7f7ee; color: #12a150; }
@media (max-width: 768px) { .rec-list { grid-template-columns: 1fr; } }

.hc-top { display: flex; align-items: center; gap: 6px; font-size: 12.5px; }
.hc-group { flex: none; background: #e8f0ff; color: #2b6bff; border-radius: 5px; padding: 1px 6px;
  font-size: 11.5px; font-weight: 700; }
.hc-label { font-weight: 700; color: var(--ink); flex: 1; min-width: 0; }
.hc-lv { flex: none; width: 74px; font-size: 12px; padding: 3px 4px; border-radius: 6px;
  border: 1px solid var(--line); background: #fff; }
.hc-x { flex: none; width: 20px; height: 20px; line-height: 1; border: none; cursor: pointer;
  border-radius: 5px; background: transparent; color: #b8bfd0; font-size: 15px; }
.hc-x:hover { background: #ffecec; color: #e5484d; }
.hc-val { margin-top: 5px; }
.hc-in { width: 100%; font-size: 13px; padding: 5px 8px; border-radius: 7px;
  border: 1px solid var(--line); background: #fff; box-sizing: border-box; }
.hc-chk { font-size: 13px; display: flex; align-items: center; gap: 6px; color: var(--ink);
  white-space: nowrap; }
.hc-chk .hc-in { width: auto !important; flex: none; height: 16px; margin: 0; }
.pv-groups { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.pv-groups span { font-size: 12px; background: #eef3ff; color: #2b6bff; border-radius: 6px;
  padding: 2px 9px; }
.ur-box { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 2px 0; }
.ur-tip { font-size: 12px; color: var(--warn); background: var(--warn-bg); border-radius: 6px;
  padding: 2px 8px; }
.ur-sel { font-size: 12.5px; padding: 4px 6px; border-radius: 7px; border: 1px solid var(--line);
  background: #fff; max-width: 190px; }
.btn-sm { font-size: 12.5px; padding: 4px 10px; }
.frow.lv-off { opacity: .5; }

/* ---------- 移动端 ---------- */
@media (max-width: 768px) {
  main { padding: 16px 13px 84px; }
  .appbar-inner { padding: 0 13px; height: 58px; }
  .user-chip .phone-txt { display: none; }
  .slogan-sm { display: none; }
  nav.side-nav { width: 64px; padding: 14px 8px; }
  nav.side-nav button { justify-content: center; padding: 11px 0; font-size: 0; gap: 0; }
  nav.side-nav button svg { width: 20px; height: 20px; }
  /* 窄屏侧栏只显图标：分组强制展开、隐藏折叠箭头，避免组内子项被折叠后看不见 */
  nav.side-nav .nav-group { display: flex !important; margin-left: 0; padding-left: 0; border-left: none; }
  nav.side-nav .nav-caret { display: none; }
  nav.side-nav button.nav-group-head { padding-top: 4px; padding-bottom: 4px; }
  .dim-grid { grid-template-columns: repeat(2, 1fr); }
  .dim-form-sec .grid2 { grid-template-columns: 1fr; }
  .card { padding: 15px; border-radius: var(--radius); }
  .modal-mask { padding: 16px 8px; }
  .modal { max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); }
  body { padding-bottom: env(safe-area-inset-bottom); }
  .tbl th, .tbl td { padding: 9px 7px; font-size: 13px; }
  .hero-title { font-size: 34px; }
}

/* ---------- 规则体系补充：我的规则 / 审核 / 解析原文 ---------- */
.raw-text { background: #f7f9fe; border: 1px solid #e6ecfa; border-radius: 10px; padding: 12px 14px;
  font-size: 13px; line-height: 1.85; color: var(--text); white-space: pre-wrap; word-break: break-word;
  max-height: 280px; overflow: auto; }
.rule-card .rule-empty { font-size: 13.5px; line-height: 1.9; }
.detect-bar .field > label { display: block; }
.rule-card.compact .rule-head .tag { font-size: 11.5px; padding: 2px 8px; }
.tag.fail, .tag.warn, .tag.pass, .tag.off { border-radius: 999px; }
@media (max-width: 720px) {
  .detect-bar .field { min-width: 100%; max-width: none !important; }
}

/* ---------- 待检文件列表：累加 / 已检测标记 ---------- */
.file-row .tag { flex: none; font-size: 11.5px; padding: 2px 8px; }
.file-row.done .fn { color: var(--muted); }
.file-row.done svg { color: #7fc9a2; }
.fl-head .muted { margin-left: 4px; }

/* ================= 检测次数 / 签到 / 邀请机制 ================= */
/* 顶栏充值胶囊：左段余额(点击看明细+刷新) + 右段品牌蓝「立即充值」 */
.credit-chip {
  display: flex; align-items: center; gap: 8px;
  padding: 0 0 0 6px; border-radius: 999px; cursor: default;
  background: #fff; border: 1px solid #d7e4ff;
  box-shadow: 0 1px 4px rgba(43, 107, 255, .10);
  font-size: 13px; font-weight: 600; transition: .15s;
}
.cc-left { display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 2px 6px 8px; color: var(--text); cursor: pointer; border-radius: 999px; }
.cc-left:hover { color: var(--primary); }
.cc-left b { font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--primary); }
.cc-refresh { color: var(--muted); cursor: pointer; padding: 2px; transition: transform .3s, color .15s; }
.cc-refresh:hover { color: var(--primary); transform: rotate(180deg); }
.cc-recharge {
  border: none; cursor: pointer; border-radius: 999px; padding: 7px 15px;
  background: var(--grad-brand); color: #fff;
  font-size: 13px; font-weight: 700; letter-spacing: .5px; transition: .15s;
}
.cc-recharge:hover { filter: brightness(1.06); box-shadow: 0 2px 8px rgba(43, 107, 255, .4); }

.checkin-hero {
  background: linear-gradient(135deg, #eef4ff, #e9f8ef);
  border-radius: 14px; padding: 20px; margin-bottom: 14px;
}
.ch-balance { font-size: 18px; margin-bottom: 6px; }
.ch-balance b { font-size: 30px; color: var(--primary); font-variant-numeric: tabular-nums; }
.ch-rule { font-size: 13px; color: var(--muted); }
.ch-status { font-size: 14px; margin: 14px 0; padding: 12px 14px; background: #f7f9fe; border-radius: 10px; }

.invite-hero {
  background: linear-gradient(135deg, #eef4ff, #f3eeff);
  border-radius: 14px; padding: 16px 18px; font-size: 14px; line-height: 1.7; margin-bottom: 14px;
}
.invite-hero b { color: var(--primary); }
.invite-stats { display: flex; gap: 12px; margin-bottom: 16px; }
.is-item { flex: 1; text-align: center; background: #f7f9fe; border-radius: 12px; padding: 14px 8px; }
.is-item b { display: block; font-size: 24px; color: var(--ink); font-variant-numeric: tabular-nums; }
.is-item span { font-size: 12px; color: var(--muted); }

.invite-code-box, .invite-link-box, .invite-qr-box {
  margin-bottom: 16px; padding: 14px; border: 1px dashed #dbe3f4; border-radius: 12px;
}
.invite-code-box label, .invite-link-box label, .invite-qr-box label,
.invite-list > label { display: block; font-size: 12.5px; color: var(--muted); margin-bottom: 8px; }
.invite-code {
  display: inline-block; font-size: 26px; font-weight: 800; letter-spacing: 6px;
  color: var(--primary); font-family: ui-monospace, Menlo, Consolas, monospace; margin-right: 12px;
}
.invite-link {
  font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 12.5px; word-break: break-all;
  background: #f7f9fe; padding: 8px 10px; border-radius: 8px; margin-bottom: 8px; color: var(--text);
}
.invite-qr { margin-bottom: 6px; }
.invite-qr img { border-radius: 8px; border: 1px solid #e6ecfa; }
.invite-list .tbl { margin-top: 4px; }

.credit-summary {
  display: flex; align-items: baseline; gap: 16px; font-size: 14px; margin-bottom: 12px;
}
.credit-summary b { font-size: 22px; color: var(--primary); }
.tbl td.ok { color: var(--ok, #1a9d5e); font-weight: 700; }
.tbl td.danger { color: var(--danger, #e5484d); font-weight: 700; }

.sub-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.sub-tabs button {
  padding: 7px 14px; border-radius: 999px; border: 1px solid #e2e8f5; background: #fff;
  font-size: 13px; color: var(--muted); cursor: pointer; transition: .15s;
}
.sub-tabs button.active { background: var(--primary); color: #fff; border-color: var(--primary); }

.growth-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; }
.gc-item { background: #f7f9fe; border-radius: 12px; padding: 16px; }
.gc-item b { display: block; font-size: 26px; color: var(--ink); font-variant-numeric: tabular-nums; }
.gc-item span { font-size: 13px; color: var(--text); display: block; margin: 2px 0; }
.gc-item small { font-size: 12px; color: var(--muted); }

.gc-form { display: flex; flex-wrap: wrap; gap: 14px; }
.gc-form .field { min-width: 200px; }
.gc-form .modal-actions { width: 100%; }
.ro-val { padding: 10px 12px; background: #f7f9fe; border-radius: 8px; font-size: 14px; }

/* ================= 签到页 · 邀请注册机制规则说明 ================= */
.reward-rule-list { display: flex; flex-direction: column; gap: 10px; }
.rr-item {
  display: flex; align-items: flex-start; gap: 14px; padding: 12px 14px;
  border: 1px solid #e6ecfa; border-radius: 10px; background: #fafbfe;
}
.rr-item.highlight { border-color: #bcd2ff; background: #f2f6ff; }
.rr-name { flex: none; min-width: 130px; font-weight: 700; color: var(--ink); font-size: 14px; }
.rr-item.highlight .rr-name { color: var(--primary); }
.rr-desc { font-size: 13.5px; line-height: 1.7; color: var(--text); }
.rr-desc b { color: var(--primary); }
.rr-note { display: block; color: #e5484d; font-size: 12.5px; margin-top: 4px; }
.rr-foot { margin-top: 16px; padding: 14px 16px; background: #fff8ec; border: 1px solid #f5e3bd; border-radius: 10px; }
.rr-foot-title { font-weight: 700; color: #b87600; margin-bottom: 8px; font-size: 14px; }
.rr-foot-list { margin: 0; padding-left: 18px; }
.rr-foot-list li { font-size: 13px; line-height: 1.8; color: #6b5a2e; margin-bottom: 4px; }
.rr-foot-list li b { color: #8a5b00; }
.rr-tip { margin-top: 12px; font-size: 12.5px; color: var(--muted); }

.invite-warn {
  margin: 0 0 14px; padding: 12px 14px; font-size: 13.5px; line-height: 1.7;
  background: #fff4f4; border: 1px solid #f6c9c9; border-radius: 10px; color: #b33;
}
.invite-warn b { color: #d11; }
@media (max-width: 720px) {
  .rr-item { flex-direction: column; gap: 4px; }
  .rr-name { min-width: auto; }
}

/* ================= 智能检测端 · 添加地区规则引导区 ================= */
.add-region-guide { margin-top: 14px; }
.arg-box {
  padding: 12px 16px;
  background: linear-gradient(135deg, #eef4ff, #f3eeff);
  border: 1px solid #d6e2ff; border-radius: 14px;
}
/* 标题单独成行，与正文拉开层次，避免与按钮争宽 */
.arg-head { display: flex; align-items: center; gap: 9px; margin-bottom: 8px; }
.arg-ico { flex: none; width: 30px; height: 30px; border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
  background: var(--grad-brand); color: #fff; box-shadow: 0 6px 14px -8px rgba(43,107,255,.9); }
.arg-ico svg { color: #fff; }
.arg-title { font-weight: 700; font-size: 15.5px; color: var(--ink); line-height: 1.4; }
/* 正文与按钮左右分栏，但在同一行内顶部对齐 */
.arg-main { display: flex; align-items: flex-start; gap: 20px; }
.arg-left { flex: 1; min-width: 0; }
.arg-desc { font-size: 13px; line-height: 1.6; color: var(--text); margin-bottom: 6px; }
.arg-reward { font-size: 12.5px; line-height: 1.55; color: #8a5b00; background: #fff8ec; border: 1px solid #f5e3bd; border-radius: 8px; padding: 6px 10px; }
.arg-reward b { color: var(--primary); }
/* 处理步骤：有序列表，步骤序号用品牌色圆点强调 */
.arg-steps { list-style: none; margin: 0 0 8px; padding: 0; counter-reset: astep; }
.arg-steps li { position: relative; padding-left: 26px; font-size: 13px; line-height: 1.6;
  color: var(--text); margin-bottom: 5px; counter-increment: astep; }
.arg-steps li:last-child { margin-bottom: 0; }
.arg-steps li::before { content: counter(astep); position: absolute; left: 0; top: 3px;
  width: 18px; height: 18px; border-radius: 50%; background: var(--primary); color: #fff;
  font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.rule-dispute-note { font-size: 12.5px; line-height: 1.7; color: var(--muted); background: #f7f9fe; border: 1px solid var(--line); border-radius: 8px; padding: 9px 12px; margin-top: 12px; }
.rule-dispute-note b { color: var(--primary); }
.rule-verify-tip { font-size: 13px; line-height: 1.7; color: var(--primary-dark); background: var(--primary-light);
  border: 1px solid #cfe0ff; border-radius: 8px; padding: 9px 12px; margin-bottom: 10px; font-weight: 600; }
/* 规则核验弹框：内部滚动容器 */
#rule-detail-body { max-height: 62vh; overflow-y: auto; padding-right: 4px; overscroll-behavior: contain; }
/* 检测项两列横向排列：每行两项；卡片式纵向布局（检测项标签在上、要求值在下） */
.rule-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; margin-top: 4px; }
.rule-item { display: flex; flex-direction: column; gap: 4px; background: #f8faff; border: 1px solid #eef2fb;
  border-radius: 10px; padding: 9px 12px; min-width: 0; transition: border-color .15s, box-shadow .15s; }
.rule-item:hover { border-color: #d6e2ff; box-shadow: 0 3px 10px -6px rgba(43,107,255,.25); }
.ri-label { font-size: 12px; color: var(--muted); line-height: 1.4; }
.ri-value { min-width: 0; font-size: 13.5px; font-weight: 600; color: var(--ink);
  word-break: break-word; line-height: 1.55; }
@media (max-width: 560px) { .rule-grid { grid-template-columns: 1fr; } }
/* ---------- 按钮内「图标 + 文字」对齐（V4.9.34）----------
   历史问题：`.btn` / `.btn-outline` 是 button 默认的 inline-block，内部 SVG 是 inline 元素，
   按 `vertical-align: baseline` 排列 → 图标底边贴文字基线，视觉上"往下掉"；
   又因为 ICONS 各图标尺寸不一（edit/magic 14、upload/shield 16、file 18），并排时更显参差。
   统一改为 inline-flex 垂直居中，图标尺寸按字号缩放（1em），一次修好全站 60+ 处按钮。
   ⚠️ 含图标的按钮都必须走这套；`.btn-outline` / `.btn-danger` 常单独使用（不写 .btn），故一并列出。 */
.btn, .btn-outline, .btn-danger, .btn-primary, .btn-ghost {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
/* 图标：跟随字号（btn-sm 13px / .btn 默认 / btn-lg 17px 自适应），
   display:block 消除 inline 元素的基线间隙，flex:none 防止被压扁 */
.btn > svg, .btn-outline > svg, .btn-danger > svg, .btn-primary > svg, .btn-ghost > svg {
  flex: 0 0 auto;
  display: block;
  width: 1em;
  height: 1em;
}
/* 「推荐」角标：贴附按钮右上角，不占布局（仅检测页引导区使用） */
.btn-rec { position: relative; }
.btn-rec .rec-badge {
  position: absolute; top: -9px; right: -7px; z-index: 2;
  padding: 0 7px; border-radius: 999px; white-space: nowrap;
  font-size: 11px; line-height: 17px; font-weight: 700; letter-spacing: .3px;
  color: #fff; background: linear-gradient(135deg, #ff8a3d, #ff4d4f);
  box-shadow: 0 4px 10px -4px rgba(255, 77, 79, .85);
  pointer-events: none;
}
/* 「推荐」行内标签：标题按钮内使用（我的规则页） */
.rec-tag {
  display: inline-block; margin-left: 6px; padding: 1px 7px;
  border-radius: 999px; font-size: 11px; line-height: 16px; font-weight: 700;
  letter-spacing: .3px; color: #fff; vertical-align: 1px;
  background: linear-gradient(135deg, #ff8a3d, #ff4d4f);
}
/* 窄屏：我的规则标题按钮组独占一行，避免标题被挤成竖排 */
@media (max-width: 560px) {
  .myrules-card h3 { flex-wrap: wrap; row-gap: 10px; }
  .myrules-card h3 .spacer { flex: 1 0 100%; height: 0; }
}
@media (max-width: 720px) {
  .arg-main { flex-direction: column; align-items: stretch; gap: 12px; }
  .arg-right { width: 100%; }
}

/* ================= 视觉协调优化层（V3.1） ================= */
/* 统一过渡与聚焦态，提升整体质感 */

/* 顶栏：品牌区与用户区的精致化 */
.appbar-inner { gap: 16px; }
.brand { gap: 11px; }
.brand .t1 { font-size: 17.5px; font-weight: 800; letter-spacing: .3px; }
.user-chip { padding: 7px 12px; border-radius: 999px; transition: all .16s; }
.user-chip:hover { background: #f2f5fc; }
.role-tag { border-radius: 999px; padding: 2px 10px; font-size: 11.5px; letter-spacing: .3px; }
.btn-ghost { border-radius: 999px; padding: 8px 15px; }

/* 卡片标题下的说明文字间距协调 */
.card h3 + .muted, .card h3 + .row { margin-top: -6px; }

/* 上传区更柔和的悬停 */
.upload-zone { border-radius: var(--radius-lg); }
.upload-zone .big { letter-spacing: .3px; }

/* 标签统一胶囊圆角与字重 */
.tag { border-radius: 999px; padding: 3px 11px; letter-spacing: .2px; }

/* 结果横幅与免责声明的层次 */
.result-banner { box-shadow: var(--shadow-sm); }

/* 弹窗标题下加分隔线，与卡片一致 */
.modal h3 { padding-bottom: 14px; border-bottom: 1px solid #f0f3fa; }

/* 维度卡片统一 */
.dim-card { border-radius: var(--radius); }

/* 输入控件聚焦更柔和 */
input:focus, select:focus, textarea:focus { box-shadow: 0 0 0 4px rgba(43,107,255,.10); }

/* 二级 tab（sub-tabs）活跃态渐变，与主按钮一致 */
.sub-tabs button.active { background: var(--grad-brand); border-color: transparent;
  box-shadow: 0 8px 18px -10px rgba(43,107,255,.85); }

/* 分页/筛选字段标签更紧凑 */
.detect-bar .field label, .row .field label { margin-bottom: 6px; font-weight: 600; }

/* 空状态与加载态居中留白更舒展 */
.empty, .loading-box { padding: 44px 0; }

/* 管理端表格操作按钮间距协调 */
.tbl .btn + .btn { margin-left: 4px; }
.tbl .btn-sm { min-height: 32px; }
/* 表格内按钮/关键列不换行，避免「编辑」「停用」竖排 */
.tbl td .btn, .tbl td .btn-ghost, .tbl td .tag { white-space: nowrap; }
.tbl td b { white-space: nowrap; }

/* 侧边栏与内容区分隔（用户端/管理端统一） */
.shell { gap: 4px; }

/* 提升滚动条观感（Webkit） */
nav.side-nav::-webkit-scrollbar { width: 6px; }
nav.side-nav::-webkit-scrollbar-thumb { background: #dbe2f0; border-radius: 6px; }
nav.side-nav::-webkit-scrollbar-thumb:hover { background: #c6d0e6; }

/* 规则卡片、邀请/签到 hero 区块统一圆角节奏 */
.rule-card, .checkin-hero, .invite-hero, .arg-box { border-radius: var(--radius); }

/* 用户管理：备注列收窄，给时间/操作列让出空间 */
.remark-cell { max-width: 150px; }
.remark-txt { max-width: 92px; }

/* 官方预设规则表：分组状态改为紧凑圆点指示 */
.grp-cell { text-align: center; }
.grp-dot { display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%; font-size: 13px; font-weight: 800;
  cursor: default; }
.grp-dot.on { background: var(--ok-bg); color: var(--ok); }
.grp-dot.off { background: #f0f2f8; color: #b6bfd4; }

/* 官方预设规则表：紧凑布局，杜绝横向滚动条 */
.regions-tbl .col-name { max-width: 200px; white-space: normal; word-break: break-word; line-height: 1.35; }
/* 8 个检测分组收敛为一列：2 行 × 4 个圆点，横向占用更小 */
.regions-tbl .grp-dots { display: flex; flex-wrap: wrap; gap: 4px; max-width: 100px; }
.regions-tbl .grp-dot { width: 20px; height: 20px; font-size: 12px; }
/* 操作列常驻右侧（即使出现滚动也无需横向拖动即可点到编辑/删除） */
.regions-tbl .col-actions { position: sticky; right: 0; z-index: 1;
  background: var(--card); box-shadow: -10px 0 12px -10px rgba(16, 28, 70, .16); }
.regions-tbl tr:hover .col-actions { background: #fafbff; }
.regions-tbl th:last-child { position: sticky; right: 0; z-index: 2; }

/* 规则名称重名：输入框高亮提示重新命名 */
.input-error { border-color: var(--danger) !important; box-shadow: 0 0 0 3px var(--danger-bg) !important; }

/* ============ 管理员端新增（运营看板/搜索筛选/公告/日志/备份） ============ */
.filter-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 14px; }
.filter-bar input, .filter-bar select { padding: 8px 10px; border: 1px solid #dfe6f5; border-radius: 9px;
  font-size: 13px; background: #fff; color: var(--text); }
.filter-bar input:focus, .filter-bar select:focus { border-color: var(--primary); outline: none; }
.filter-bar .spacer { flex: 1; }

.link { color: var(--primary); cursor: pointer; text-decoration: none; font-weight: 600; }
.link:hover { text-decoration: underline; }

.batch-list { max-height: 320px; overflow-y: auto; border: 1px solid #e6ecf8; border-radius: 10px;
  padding: 8px; margin-bottom: 14px; }
.batch-row { display: flex; align-items: center; gap: 8px; padding: 7px 8px; border-radius: 8px;
  font-size: 13.5px; cursor: pointer; }
.batch-row:hover { background: #f4f7ff; }
.batch-row input { width: 16px; height: 16px; }

/* 看板 */
.trend-bars { display: flex; align-items: flex-end; gap: 14px; padding: 10px 4px 0; height: 190px; }
.tb-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 6px; height: 100%; justify-content: flex-end; }
.tb-bar { width: 100%; max-width: 42px; background: var(--grad-brand); border-radius: 6px 6px 2px 2px;
  min-height: 4px; transition: height .3s; }
.tb-count { font-size: 12px; color: var(--ink); font-weight: 700; }
.tb-date { font-size: 11px; color: var(--muted); }

.top-list { display: flex; flex-direction: column; gap: 10px; }
.top-row { display: flex; align-items: center; gap: 12px; }
.top-rank { width: 24px; height: 24px; border-radius: 6px; background: var(--primary-light);
  color: var(--primary); font-weight: 800; font-size: 13px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.top-name { width: 160px; font-size: 13.5px; color: var(--text); flex-shrink: 0; }
.top-bar { flex: 1; height: 10px; background: #eef2fb; border-radius: 5px; overflow: hidden; }
.top-bar > div { height: 100%; background: var(--grad-brand); border-radius: 5px; }
.top-count { width: 56px; text-align: right; font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; flex-shrink: 0; }

/* 公告横幅 */
.notice-bar { position: fixed; top: 64px; left: 0; right: 0; z-index: 60;
  background: linear-gradient(90deg, #fff7e6, #fffbef); border-bottom: 1px solid #ffe3b3; }
.nb-inner { max-width: 1140px; margin: 0 auto; padding: 9px 24px; display: flex; align-items: center; gap: 10px; font-size: 13.5px; }
.nb-icon { font-size: 16px; }
.nb-title { font-weight: 700; color: #b7791f; }
.nb-content { color: #8a6d3b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
.nb-close { background: #fff; border: 1px solid #f0d9a8; color: #b7791f; padding: 4px 12px; border-radius: 7px; font-size: 12.5px; cursor: pointer; flex-shrink: 0; }
.nb-close:hover { background: #fff3d6; }

/* 弹窗内标题 */
#modal-box h4 { font-size: 14px; color: var(--ink); font-weight: 700; margin: 18px 0 8px; }
#modal-box h4:first-of-type { margin-top: 14px; }

/* 表格操作列：均匀对齐 */
.row-actions { display: flex; align-items: center; gap: 6px; white-space: nowrap; flex-wrap: wrap; }
.row-actions .btn { min-height: 32px; }
.row-actions .btn + .btn { margin-left: 0; }

/* ============ 价格锚点（需求《价格锚点展示功能》，纯展示、无支付入口） ============ */
.price-anchor { border: 1px solid #e8edf8; border-radius: var(--radius); background: #fff;
  padding: 14px 16px; box-shadow: var(--shadow-sm); }
.price-anchor .pa-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.price-anchor .pa-item { display: flex; flex-direction: column; gap: 2px; }
.price-anchor .pa-label { font-size: 11.5px; color: var(--muted); letter-spacing: .3px; }
.price-anchor .pa-val { font-size: 17px; font-weight: 800; color: var(--danger); font-variant-numeric: tabular-nums; }
.price-anchor .pa-val.strike { text-decoration: line-through; text-decoration-color: #e5484d; color: #c46a6d; }
.price-anchor .pa-arrow { color: #b6bfd4; font-size: 16px; font-weight: 700; padding-top: 12px; }
.price-anchor .pa-tag { display: inline-block; background: var(--ok-bg); color: var(--ok);
  font-size: 15px; font-weight: 800; padding: 2px 12px; border-radius: 999px; margin-top: 2px; }
.price-anchor .pa-perm { margin-top: 11px; padding-top: 11px; border-top: 1px dashed #e8edf8;
  font-size: 12.5px; color: var(--ink); }
.price-anchor.compact { padding: 11px 14px; }
.price-anchor.compact .pa-val { font-size: 15px; }
.price-anchor.compact .pa-tag { font-size: 13px; }

/* 登录页 hero 区价格锚点容器 */
.price-anchor-wrap { margin-top: 26px; max-width: 480px; }

/* 注册成功 / 领取成功弹窗内价值提示 */
.welcome-box { border: 1px solid #e8edf8; border-radius: var(--radius); background: #f8faff;
  padding: 14px 16px; margin-bottom: 14px; }
.welcome-box .welcome-main { font-size: 15.5px; color: var(--text); font-weight: 600; }
.welcome-box .welcome-main b { color: var(--primary); font-size: 19px; font-variant-numeric: tabular-nums; }
.welcome-box .welcome-val { color: var(--danger); font-weight: 700; }
.welcome-box .welcome-note { margin-top: 5px; font-size: 12.5px; color: var(--muted); }

/* 注册成功弹窗内的补充信息区 */
.profile-box { margin-top: 14px; padding: 14px 16px; border: 1px dashed #d6e0f5; border-radius: var(--radius);
  background: #fbfcff; }
.profile-box .pf-title { font-size: 13px; font-weight: 700; color: var(--ink); margin-bottom: 10px; }

/* 检测报告页：价格对比信息 + 品牌口号 */
.report-price { margin-top: 4px; padding: 16px 18px; border-radius: var(--radius);
  background: linear-gradient(135deg, #f4f8ff 0%, #f6f3ff 100%);
  border: 1px solid #e3ebfb; text-align: center; }
.report-price .rp-line { font-size: 14px; color: var(--text); }
.report-price .rp-line b { color: var(--danger); font-size: 16px; font-variant-numeric: tabular-nums; }
.report-price .rp-slogan { margin-top: 5px; font-size: 13px; color: var(--muted); letter-spacing: .4px; }

@media (max-width: 980px) {
  .price-anchor-wrap { max-width: 100%; }
}

/* ================= 顶部用户信息 / 意见反馈入口 ================= */
.user-label { font-weight: 700; color: var(--ink); max-width: 180px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.feedback-entry { font-size: 13px; color: var(--primary); cursor: pointer; padding: 7px 12px;
  border-radius: 999px; background: var(--primary-light); transition: all .16s; white-space: nowrap; }
.feedback-entry:hover { background: #dbe6ff; color: var(--primary-dark); }
@media (max-width: 980px) {
  .feedback-entry { display: none; }
  .user-label { max-width: 120px; }
}

/* ================= 反馈管理 / 反馈弹窗 ================= */
.fb-filter { display: flex; gap: 10px; align-items: center; margin-top: 4px; }
.fb-filter select { min-width: 140px; }

/* 规则复核工作台（P3）：顶部统计卡 */
.rr-stats { display: flex; flex-wrap: wrap; gap: 10px; margin: 6px 0 12px; }
.rr-stat { display: flex; flex-direction: column; align-items: center; min-width: 96px;
  padding: 8px 14px; background: #f7f9fd; border: 1px solid var(--line); border-radius: 10px; }
.rr-stat b { font-size: 20px; line-height: 1.2; color: var(--ink); }
.rr-stat span { font-size: 12px; color: var(--muted); margin-top: 2px; }
.rr-stat.rr-hi b { color: var(--primary); }
.rr-stat.rr-warn b { color: var(--danger); }
.fb-content-cell { max-width: 320px; white-space: normal; word-break: break-word; line-height: 1.5; }
.fb-origin { background: #f7f9fd; border: 1px solid var(--line); border-radius: 10px;
  padding: 12px 14px; font-size: 13.5px; color: var(--text); line-height: 1.7; white-space: pre-wrap;
  word-break: break-word; max-height: 180px; overflow-y: auto; }

/* 反馈附件：用户端选择列表 + 管理端展示 */
.fb-file-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.fb-file-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px;
  background: #f2f6ff; border: 1px solid #dbe6ff; color: var(--primary-dark);
  border-radius: 999px; padding: 4px 6px 4px 11px; max-width: 100%; }
.fb-file-chip small { color: var(--muted); font-size: 11.5px; }
.fb-file-chip b { cursor: pointer; font-size: 14px; line-height: 1; color: #8fa4cc; font-weight: 700;
  border-radius: 50%; padding: 0 4px; }
.fb-file-chip b:hover { color: var(--danger); background: #fdecec; }
.fb-atts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.fb-att-img { display: inline-block; width: 64px; height: 64px; border-radius: 8px; overflow: hidden;
  border: 1px solid var(--line); background: #fff; }
.fb-att-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fb-att-img:hover { border-color: var(--primary); }
.fb-att-doc { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px;
  color: var(--primary); background: #f2f6ff; border: 1px solid #dbe6ff; border-radius: 8px;
  padding: 5px 10px; max-width: 220px; text-decoration: none; }
.fb-att-doc span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fb-att-doc:hover { background: #e6eeff; }
.fb-att-doc svg { flex: none; }

/* ================= 合伙人中心 ================= */
.partner-quota { display: flex; gap: 16px; margin: 4px 0 16px; }
.pq-main, .pq-side { flex: 1; border-radius: 12px; padding: 16px 18px;
  background: var(--grad-brand); color: #fff; }
.pq-main span, .pq-side span { display: block; font-size: 13px; opacity: .9; }
.pq-main b { display: block; font-size: 34px; line-height: 1.2; margin: 2px 0; }
.pq-main small { font-size: 12px; opacity: .85; }
.pq-side { background: var(--ink); }
.pq-side b { display: block; font-size: 26px; line-height: 1.2; margin: 2px 0; }
.partner-gift-form { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 8px 0 4px; }
.partner-gift-form input, .partner-gift-form select, .partner-gift-form textarea {
  padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; font-size: 13.5px;
  font-family: inherit; background: #fff; color: var(--ink); }
.partner-gift-form input:focus, .partner-gift-form select:focus,
.partner-gift-form textarea:focus { outline: none; border-color: var(--primary); }
.partner-gift-form textarea { width: 100%; resize: vertical; }
.sec-title { margin: 22px 0 10px; padding-bottom: 8px; font-size: 15px; color: var(--ink);
  border-bottom: 1px solid var(--line); }
.task-row { display: flex; align-items: center; gap: 10px; padding: 8px 0;
  border-bottom: 1px dashed var(--line); }
.task-row:last-child { border-bottom: none; }
.task-name { flex: 1; font-size: 13.5px; color: var(--ink); }
.task-name b { color: var(--primary); font-size: 15px; }
.task-row .bar { flex: none; width: 140px; height: 7px; border-radius: 4px; background: #eef1f7;
  overflow: hidden; }
.task-row .bar i { display: block; height: 100%; background: linear-gradient(90deg, #4b8bff, #6a4dff);
  border-radius: 4px; transition: width .3s; }
.partner-warn { margin-top: 18px; padding: 12px 14px; font-size: 13px; color: #b45309;
  background: #fffbeb; border: 1px solid #fde68a; border-radius: 10px; line-height: 1.6; }

/* ================= 小晓AI标书（介绍页 / 代理商落地页） ================= */
.xx-wrap { display: flex; flex-direction: column; gap: 20px; max-width: 1000px; margin: 0 auto; }

/* 通用区块卡片 */
.xx-sec { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: 30px 32px; box-shadow: var(--shadow-sm); }
.xx-sec-head { margin-bottom: 22px; }
.xx-sec-head h3 { font-size: 22px; font-weight: 800; color: var(--ink); letter-spacing: .2px;
  position: relative; padding-left: 16px; line-height: 1.35; }
.xx-sec-head h3::before { content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 5px; height: 22px; border-radius: 3px; background: var(--grad-brand); }
.xx-sec-head p { margin-top: 8px; padding-left: 16px; font-size: 13.5px; color: var(--muted); }
.xx-sec h4 { font-size: 15.5px; color: var(--ink); margin: 16px 0 10px; font-weight: 700; }

/* ===== 首屏 Hero ===== */
.xx-hero { position: relative; overflow: hidden; padding: 48px 44px; border-radius: var(--radius-xl);
  background:
    radial-gradient(900px 420px at 88% -12%, rgba(106,77,255,.20) 0%, rgba(106,77,255,0) 60%),
    radial-gradient(760px 360px at -4% 118%, rgba(43,107,255,.16) 0%, rgba(43,107,255,0) 58%),
    linear-gradient(150deg, #ffffff 0%, #f5f8ff 55%, #f6f2ff 100%);
  border: 1px solid #e7ecff; box-shadow: var(--shadow-md); }
.xx-hero-glow { position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(420px 260px at 82% 18%, rgba(106,77,255,.10), transparent 70%); }
.xx-hero-brand { display: flex; align-items: center; gap: 14px; margin-bottom: 22px; }
.xx-hero-logo { flex: none; width: 68px; height: 68px; border-radius: 18px; display: grid; place-items: center;
  padding: 6px; box-sizing: border-box;
  background: linear-gradient(135deg, #eaf1ff 0%, #f3ecff 100%);
  border: 1px solid #dfe8ff; box-shadow: 0 10px 24px -12px rgba(43,107,255,.45); }
.xx-hero-logo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.xx-hero-brand-name { font-size: 21px; font-weight: 800; color: var(--ink); letter-spacing: .4px; line-height: 1.2; }
.xx-hero-brand-sub { display: block; font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: 2px; margin-top: 4px; }
.xx-title { font-size: 40px; line-height: 1.28; font-weight: 800; color: var(--ink);
  letter-spacing: .2px; max-width: 680px; }
.xx-title-hl { display: block; background: var(--grad-brand); -webkit-background-clip: text;
  background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.xx-sub { margin: 18px 0 26px; font-size: 16px; color: #59638a; line-height: 1.8; max-width: 640px; }
.xx-cta { display: flex; flex-wrap: wrap; gap: 14px; }
.xx-cta .btn-lg, .xx-cta .btn-outline.btn-lg { width: auto; padding: 14px 30px; letter-spacing: .5px; }
.xx-cta-main { background: var(--grad-brand); color: #fff; font-weight: 700; font-size: 16px;
  padding: 14px 30px; border-radius: 12px; box-shadow: 0 12px 28px -10px rgba(43,107,255,.55);
  transition: transform .16s, box-shadow .16s; }
.xx-cta-main:hover { transform: translateY(-2px); box-shadow: 0 18px 34px -12px rgba(43,107,255,.65); }
.xx-cta-main:active { transform: translateY(0); }
.xx-cta-sub { font-weight: 600; font-size: 16px; padding: 14px 26px; border-radius: 12px; }
.xx-trust { display: flex; flex-wrap: wrap; gap: 10px 22px; margin-top: 26px; }
.xx-trust span { font-size: 13px; color: var(--muted); display: inline-flex; align-items: center; gap: 7px; }
.xx-trust span::before { content: ""; width: 16px; height: 16px; border-radius: 50%;
  background: var(--ok-bg); color: var(--ok); font-weight: 800; font-size: 11px;
  display: inline-flex; align-items: center; justify-content: center; }
.xx-trust span:nth-child(1)::before { content: "✓"; }
.xx-trust span:nth-child(2)::before { content: "✓"; }
.xx-trust span:nth-child(3)::before { content: "✓"; }
.xx-trust-note { margin-top: 14px; font-size: 13.5px; font-weight: 600; color: var(--primary-dark); }
.xx-invite-banner { margin-top: 18px; display: inline-flex; align-items: center; gap: 10px;
  font-size: 13.5px; color: #8a5b00; background: #fff8ec; border: 1px dashed #e0b95c;
  border-radius: 12px; padding: 12px 16px; line-height: 1.5; }
.xx-invite-tag { flex: none; font-weight: 700; font-size: 12px; color: #fff; background: #e8a23d;
  border-radius: 6px; padding: 2px 9px; }
.xx-invite-banner em { font-style: normal; font-weight: 800; letter-spacing: 1px; color: var(--primary);
  background: #eef3ff; border: 1px solid #c9d8ff; border-radius: 6px; padding: 1px 9px; margin: 0 2px; }

/* ===== 价格 ===== */
.xx-price-sec { background: linear-gradient(135deg, #f4f7ff, #fbf7ff); border-color: #dbe6ff; }
.xx-price { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.xx-price-item { position: relative; background: #fff; border: 1px solid var(--line);
  border-radius: 16px; padding: 24px; text-align: center; transition: box-shadow .18s, transform .18s; }
.xx-price-item:hover { box-shadow: var(--shadow-md); transform: translateY(-3px); }
.xx-price-hot { border-color: #bcd0ff; box-shadow: 0 0 0 3px rgba(43,107,255,.08); }
.xx-price-label { display: block; font-size: 14.5px; font-weight: 700; color: var(--ink); }
.xx-price-val { display: block; font-size: 34px; font-weight: 800; color: var(--primary);
  margin: 10px 0 4px; line-height: 1.1; }
.xx-price-unit { font-size: 15px; font-weight: 600; color: var(--muted); margin-left: 3px; }
.xx-price-item small { font-size: 12.5px; color: var(--muted); display: block; margin-top: 6px; }
.xx-price-badge { position: absolute; top: -11px; right: 18px; font-style: normal; font-size: 11px;
  font-weight: 700; color: #fff; background: linear-gradient(135deg, #ff8a4d, #ff5c7a);
  border-radius: 999px; padding: 3px 11px; box-shadow: 0 4px 12px -4px rgba(255,92,122,.6); }

/* ===== 痛点 ===== */
.xx-pains { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; }
.xx-pain { display: flex; gap: 12px; background: #f8faff; border: 1px solid var(--line);
  border-radius: 14px; padding: 18px; transition: border-color .18s, background .18s, transform .18s; }
.xx-pain:hover { border-color: #cddbff; background: #fff; transform: translateY(-2px); }
.xx-pain-ico { flex: none; width: 34px; height: 34px; border-radius: 10px; margin-top: 1px;
  background: #eef3ff; border: 1px solid #dbe6ff; position: relative; }
.xx-pain-ico::before, .xx-pain-ico::after { content: ""; position: absolute; left: 50%; top: 50%;
  transform: translate(-50%, -50%); background: var(--primary); border-radius: 2px; }
.xx-pain-ico::before { width: 15px; height: 15px; opacity: .22; }
.xx-pain-ico::after { width: 8px; height: 2px; }
.xx-pain b { display: block; font-size: 15px; color: var(--ink); margin-bottom: 6px; }
.xx-pain span { font-size: 13px; color: var(--muted); line-height: 1.65; }
.xx-lead { font-size: 14px; color: var(--text); line-height: 1.7; margin: 14px 0; }
.xx-lead-center { text-align: center; color: var(--muted); margin-top: 20px; }

/* ===== 功能 Tab ===== */
.xx-tabs { display: inline-flex; flex-wrap: wrap; gap: 4px; margin-bottom: 22px; padding: 4px;
  background: #eef2fb; border-radius: 12px; }
.xx-tab { padding: 9px 20px; border-radius: 9px; background: transparent; color: var(--muted);
  font-size: 13.5px; font-weight: 600; transition: all .18s; }
.xx-tab:hover { color: var(--primary); }
.xx-tab.active { background: #fff; color: var(--primary); box-shadow: 0 2px 8px -2px rgba(43,107,255,.28); }
.xx-tabpane { display: none; }
.xx-tabpane.active { display: block; animation: xxFade .28s ease; }
@keyframes xxFade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.xx-feat { padding: 14px 16px; background: #f8faff; border-left: 3px solid #bcd0ff;
  border-radius: 0 10px 10px 0; margin: 8px 0; transition: border-color .18s, background .18s; }
.xx-feat:hover { border-left-color: var(--primary); background: #f2f6ff; }
.xx-feat b { display: block; font-size: 14.5px; color: var(--ink); }
.xx-feat span { font-size: 13px; color: var(--muted); line-height: 1.6; }
.xx-adv { margin-top: 20px; padding-top: 18px; border-top: 1px dashed var(--line); }
/* 两排均匀排布：20 列网格，上排 5 项各跨 4 列，下排 4 项各跨 5 列，两排均满宽 */
.xx-adv-grid { display: grid; grid-template-columns: repeat(20, 1fr); gap: 10px; }
.xx-adv-item { font-size: 13px; background: #f2f6ff; color: var(--primary-dark);
  border: 1px solid #dbe6ff; border-radius: 10px; padding: 10px 6px; font-weight: 600;
  text-align: center; transition: all .16s; }
.xx-adv-item:nth-child(-n+5) { grid-column: span 4; }
.xx-adv-item:nth-child(n+6) { grid-column: span 5; }
.xx-adv-item:hover { background: var(--grad-brand); color: #fff; border-color: transparent; }

/* 商务标助手引导卡 */
.xx-official-card { display: flex; align-items: center; justify-content: space-between; gap: 20px;
  flex-wrap: wrap; margin-top: 8px; padding: 22px 24px; background: linear-gradient(135deg, #f4f7ff, #f6f2ff);
  border: 1px solid #dbe4ff; border-radius: 14px; }
.xx-official-info { flex: 1; min-width: 240px; }
.xx-official-info b { display: block; font-size: 15.5px; color: var(--ink); margin-bottom: 6px; }
.xx-official-info span { font-size: 13px; color: var(--muted); line-height: 1.65; }
.xx-official-card .xx-cta-main { white-space: nowrap; }

/* ===== 闭环段 ===== */
.xx-loop { display: flex; align-items: stretch; gap: 16px; flex-wrap: wrap; margin: 6px 0 20px; }
.xx-role { flex: 1; min-width: 210px; border-radius: 16px; padding: 22px 24px; color: #fff;
  position: relative; overflow: hidden; }
.xx-role-a { background: var(--grad-brand); box-shadow: 0 14px 30px -14px rgba(43,107,255,.6); }
.xx-role-b { background: linear-gradient(135deg, #1c2a5e, #16204a); box-shadow: 0 14px 30px -14px rgba(22,32,74,.6); }
.xx-role b { display: block; font-size: 17px; margin-bottom: 6px; letter-spacing: .3px; }
.xx-role span { font-size: 13px; opacity: .92; line-height: 1.65; }
.xx-role-plus { flex: none; align-self: center; font-size: 26px; color: var(--muted);
  font-weight: 800; padding: 0 4px; }
.xx-steps { display: flex; flex-direction: column; gap: 10px; margin-top: 6px; }
.xx-step { display: flex; align-items: flex-start; gap: 14px; }
.xx-step i { flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--grad-brand);
  color: #fff; font-style: normal; font-weight: 800; font-size: 14px;
  display: flex; align-items: center; justify-content: center; box-shadow: 0 6px 14px -6px rgba(43,107,255,.6); }
.xx-step span { font-size: 14px; color: var(--text); line-height: 1.7; padding-top: 3px; }
.xx-note { margin-top: 16px; padding: 13px 16px; background: #fff8e6; border: 1px solid #f6e2a6;
  color: #8a6116; border-radius: 12px; font-size: 13px; line-height: 1.6; }

/* ===== 适用人群 ===== */
.xx-fit { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.xx-fit-card { border-radius: 16px; padding: 20px 22px; }
.xx-fit-good { background: #f1f9f5; border: 1px solid #cdeedd; }
.xx-fit-bad { background: #faf7f2; border: 1px solid #ece3d3; }
.xx-fit-card h4 { margin: 0 0 12px; }
.xx-fit-good h4 { color: var(--ok); }
.xx-fit-bad h4 { color: #9a8a6a; }
.xx-fit ul { list-style: none; }
.xx-fit li { font-size: 13.5px; color: var(--text); line-height: 1.6; padding: 8px 0 8px 20px;
  position: relative; border-bottom: 1px dashed rgba(0,0,0,.06); }
.xx-fit li:last-child { border-bottom: none; }
.xx-fit li::before { content: "✓"; position: absolute; left: 0; color: var(--ok); font-weight: 800; }
.xx-fit-bad li::before { content: "✕"; color: #c9b99a; }

/* ===== 转化段 ===== */
.xx-conv { text-align: center; background: linear-gradient(135deg, #eef3ff, #f4f0ff);
  border-color: #dbe4ff; position: relative; overflow: hidden; }
.xx-conv-tag { display: inline-block; margin-bottom: 14px; font-size: 12px; font-weight: 700;
  letter-spacing: 2px; color: #fff; background: var(--grad-brand); border-radius: 999px;
  padding: 5px 16px; box-shadow: 0 6px 16px -6px rgba(43,107,255,.5); }
.xx-conv-title { font-size: 24px; font-weight: 800; color: var(--ink); margin-bottom: 10px; }
.xx-conv .xx-lead { max-width: 560px; margin: 0 auto 22px; }
.xx-conv .xx-cta { justify-content: center; }

/* ===== 底部（柔和浅色收尾，与整页统一） ===== */
.xx-footer { text-align: center; background: linear-gradient(135deg, #eef3ff 0%, #f4f0ff 100%);
  border-color: #dbe4ff; box-shadow: var(--shadow-sm); }
.xx-sec h4.xx-footer-title { font-size: 24px; font-weight: 800; color: var(--ink); line-height: 1.4; margin: 0 0 22px; }
.xx-footer-title span { display: block; font-size: 15px; font-weight: 500; color: var(--muted); margin-top: 8px; }
.xx-footer .xx-cta { justify-content: center; }
.xx-legal { margin-top: 26px; padding-top: 18px; border-top: 1px solid var(--line);
  font-size: 12px; color: var(--muted); line-height: 1.9; }
.xx-legal b { color: var(--ink); }

/* ===== FAQ 折叠 ===== */
.xx-faq { display: flex; flex-direction: column; gap: 10px; }
.xx-acc { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #fff;
  transition: box-shadow .18s; }
.xx-acc:hover { box-shadow: var(--shadow-sm); }
.xx-acc-head { width: 100%; text-align: left; background: #f8faff; padding: 15px 18px;
  font-size: 14.5px; font-weight: 600; color: var(--ink); display: flex; justify-content: space-between;
  align-items: center; gap: 12px; transition: background .18s; }
.xx-acc-head:hover { background: #f2f6ff; }
.xx-acc-head::after { content: "+"; flex: none; width: 22px; height: 22px; border-radius: 50%;
  font-size: 16px; color: var(--primary); background: #eef3ff; display: flex; align-items: center;
  justify-content: center; transition: transform .2s, background .2s; line-height: 1; }
.xx-acc.open .xx-acc-head::after { transform: rotate(45deg); background: var(--grad-brand); color: #fff; }
.xx-acc-body { display: none; padding: 16px 18px; border-top: 1px solid var(--line); }
.xx-acc.open .xx-acc-body { display: block; animation: xxFade .22s ease; }
.xx-acc-body p { font-size: 13.5px; color: var(--text); line-height: 1.75; }

/* ===== 响应式 ===== */
@media (max-width: 860px) {
  .xx-title { font-size: 32px; }
  .xx-hero { padding: 36px 28px; }
  .xx-sec { padding: 24px 20px; }
  .xx-fit, .xx-price { grid-template-columns: 1fr; }
  .xx-adv-grid { grid-template-columns: repeat(3, 1fr); }
  .xx-adv-item:nth-child(-n+5), .xx-adv-item:nth-child(n+6) { grid-column: auto; }
}
@media (max-width: 640px) {
  .xx-wrap { gap: 14px; }
  .xx-hero { padding: 30px 20px; border-radius: var(--radius-lg); }
  .xx-title { font-size: 26px; }
  .xx-sub { font-size: 14.5px; }
  .xx-hero-logo { width: 56px; height: 56px; border-radius: 15px; padding: 5px; }
  .xx-hero-brand-name { font-size: 18px; }
  .xx-cta { flex-direction: column; }
  .xx-cta .btn-lg, .xx-cta .btn-outline.btn-lg { width: 100%; }
  .xx-sec { padding: 20px 16px; border-radius: var(--radius); }
  .xx-sec-head h3 { font-size: 19px; }
  .xx-tabs { display: flex; width: 100%; overflow-x: auto; flex-wrap: nowrap; }
  .xx-tab { flex: none; white-space: nowrap; }
  .xx-role-plus { display: none; }
  .xx-role { min-width: 100%; }
  .xx-price-val { font-size: 28px; }
  .xx-invite-banner { display: flex; align-items: flex-start; flex-direction: column; gap: 6px; }
  .xx-adv-grid { grid-template-columns: repeat(3, 1fr); }
  .xx-official-card { flex-direction: column; align-items: stretch; text-align: center; }
  .xx-official-card .xx-cta-main { width: 100%; }
}

/* ===== 代理商中心 / 代理商管理 ===== */
.agent-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; margin-bottom: 16px; }
.agent-card { background: var(--card, #fff); border: 1px solid var(--line, #e6e9f2); border-radius: var(--radius, 12px);
  padding: 14px 16px; }
.agent-card .agc-val { font-size: 22px; font-weight: 700; color: var(--text, #1a2033); line-height: 1.2; }
.agent-card .agc-label { font-size: 12.5px; color: var(--muted, #8a91a6); margin-top: 4px; }
.agent-card.accent .agc-val { color: var(--primary, #2b6bff); }
.agent-card.ok .agc-val { color: #34c07a; }
.agent-card.warn .agc-val { color: #f5a623; }

.agent-rate-bar { background: linear-gradient(135deg, #eef3ff, #f6f0ff); border-radius: var(--radius, 12px);
  padding: 14px 16px; margin-bottom: 16px; display: flex; flex-direction: column; gap: 6px; }
.agent-rate-bar b { font-size: 16px; color: var(--text, #1a2033); }
.agent-rate-bar .muted { font-size: 13px; }

.agent-withdraw { border: 1px solid var(--line, #e6e9f2); border-radius: var(--radius, 12px); padding: 14px 16px; margin-bottom: 8px; }
.agent-config-bar { background: var(--card, #fff); border: 1px solid var(--line, #e6e9f2); border-radius: var(--radius, 12px); padding: 14px 16px; }
/* 参数区是一整排「文字 + 数字框」，放在 flex-wrap 容器里。
   必须 flex:0 0 auto + nowrap，否则窗口一窄每个 label 就被同比例压缩，
   "最低提现(元)"这种长文案先折行、把 input 顶到下一行，整排看起来像错位的表格。 */
.agent-config-bar label { font-size: 13px; color: var(--text, #1a2033); display: inline-flex;
  align-items: center; gap: 6px; flex: 0 0 auto; white-space: nowrap; }
.agent-config-bar input[type="number"], .agent-config-bar input[type="text"] { padding: 6px 8px; border: 1px solid var(--line, #e6e9f2); border-radius: 8px; }
/* 配置区的操作按钮跟随输入框高度（34px），不要用默认 44px 把整排顶高 */
.agent-config-bar .btn, .agent-config-bar .btn-outline { min-height: 34px; padding: 6px 16px; font-size: 13px; border-radius: 8px; }
.agent-config-bar .btn-sm { padding: 6px 13px; }
.ag-chk { cursor: pointer; }
.ag-chk input { margin: 0; }

/* ===== 邀请页「成为代理商」模块 ===== */
.agent-upgrade-box { margin: 16px 0; padding: 16px 18px; border: 1px solid var(--line, #e6e9f2);
  border-radius: var(--radius, 12px); background: linear-gradient(135deg, #f5f8ff, #f3f0ff); }
.agent-upgrade-box.is-agent { background: linear-gradient(135deg, #eafaf1, #eefaf4); }
.au-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.au-head b { font-size: 16px; color: var(--text, #1a2033); }
.au-badge { background: var(--grad-brand, linear-gradient(135deg, #2b6bff, #6a4dff)); color: #fff;
  font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: 999px; }
.au-progress { margin-bottom: 10px; }
.au-bar { height: 8px; border-radius: 999px; background: #e3e8f5; overflow: hidden; }
.au-bar span { display: block; height: 100%; border-radius: 999px;
  background: var(--grad-brand, linear-gradient(135deg, #2b6bff, #6a4dff)); transition: width .4s ease; }
.au-progress-txt { font-size: 13px; color: var(--muted, #8a91a6); margin-top: 6px; }
.au-progress-txt b { color: var(--primary, #2b6bff); }
.au-desc { font-size: 13.5px; color: var(--text, #1a2033); line-height: 1.7; margin-bottom: 10px; }
.au-benefits { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.au-benefits span { font-size: 12.5px; color: #1f8a53; background: #e9f8ef; border-radius: 8px; padding: 5px 10px; }
.au-rule { background: var(--card, #fff); border: 1px solid var(--line, #e6e9f2); border-radius: 10px;
  padding: 12px 14px; font-size: 12.5px; color: var(--muted, #8a91a6); line-height: 1.9; }
.au-rule b { color: var(--text, #1a2033); }
.au-rule > b:first-child { display: block; margin-bottom: 4px; font-size: 13px; }
.au-rule > div b { font-weight: 700; }
.au-congrats { border-color: #34c07a !important; background: #e9f8ef !important; }




/* ===== 检测次数不足引导弹窗（每次点击检测扣 1 次；用完引导签到/邀请） ===== */
.shortage-box { margin: 14px 0; padding: 14px 16px; border-radius: 12px;
  background: linear-gradient(135deg, #fdf4e6, #fff7ec); border: 1px solid #f3ddba; }
.shortage-box .sb-balance { font-size: 14px; color: var(--text); }
.shortage-box .sb-balance b { font-size: 20px; color: var(--warn); font-variant-numeric: tabular-nums; }
.shortage-box .sb-note { margin-top: 6px; font-size: 12.5px; color: var(--muted); line-height: 1.75; }
.shortage-ways { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 14px 0 4px; }
.shortage-ways .sw-item { border: 1px solid var(--line); border-radius: 12px; padding: 14px;
  background: var(--card); display: flex; flex-direction: column; gap: 8px; }
.shortage-ways .sw-head { font-size: 14.5px; font-weight: 800; color: var(--ink); }
.shortage-ways .sw-desc { font-size: 12.5px; color: var(--muted); line-height: 1.8; flex: 1; }
.shortage-ways .sw-desc b { color: var(--primary); }
.shortage-ways .sw-item .btn { width: 100%; }
@media (max-width: 640px) { .shortage-ways { grid-template-columns: 1fr; } }

/* ===== 管理员导航角标：忽略提示与状态 ===== */
.ignore-tip { margin: 12px 0; padding: 12px 14px; border-radius: 12px;
  background: var(--primary-light); border: 1px solid #d6e2ff;
  font-size: 13px; color: var(--text); line-height: 1.95; }
.ignore-tip b { color: var(--primary); }
.tag.ignore-tag { background: #eef1f7; color: #7b8399; border: 1px solid #e0e5f0; }
tr.row-ignored td { background: #fafbfe; color: #98a0b6; }
tr.row-ignored td b { color: #98a0b6; }
/* 复选框不受全局 input 宽度影响（与 .check-line input 规则一致） */
input[type="checkbox"] { width: auto; padding: 0; height: 16px; vertical-align: middle; }
/* 用户规则审核：规则名称列限宽，避免「忽略」等操作按钮被挤出可视区 */
#view-review .rv-name { max-width: 200px; white-space: normal; word-break: break-word; }

/* ================= 规则进化：异议 ================= */
/* 异议类型单选行 */
.radio-row { display: flex; align-items: center; gap: 8px; padding: 7px 10px;
  border: 1px solid var(--border, #e5e8ef); border-radius: 8px; margin-bottom: 6px;
  cursor: pointer; font-size: 13.5px; }
.radio-row input { width: auto; margin: 0; }
.radio-row:hover { border-color: var(--primary, #3b6ff5); }

/* ============ 右侧常驻活动模块：误报或漏检征集 ============ */
.fb-campaign {
  position: fixed; right: 14px; top: 96px; z-index: 60;
  width: 208px; background: #ffffff;
  border: 1px solid #e6edff; border-radius: 14px;
  box-shadow: 0 10px 30px rgba(43, 107, 255, .12);
  overflow: hidden; font-size: 13px; color: #2b3250;
}
.fbc-head {
  padding: 16px 16px 14px; color: #ffffff;
  background: linear-gradient(135deg, #2b6bff, #6a4dff);
}
.fbc-head h4 {
  margin: 0; font-size: 15px; font-weight: 700;
  letter-spacing: 1px; line-height: 1.4;
}
.fbc-body { padding: 14px 16px 16px; }
.fbc-slogan {
  margin: 0 0 12px; font-size: 12.5px; line-height: 1.7;
  color: #4a5378;
}
.fbc-reward {
  margin-bottom: 12px; padding: 9px 11px; border-radius: 8px;
  background: #fff7e8; border: 1px solid #f5b73d;
  color: #8a5a00; font-size: 12.5px; line-height: 1.5;
}
.fbc-reward b {
  display: inline-block; margin-right: 6px; padding: 1px 7px;
  border-radius: 4px; background: #f5a623; color: #ffffff; font-size: 12px;
  font-weight: 600; letter-spacing: 1px;
}
.fbc-reward em { font-style: normal; font-weight: 800; color: #e0690a; font-size: 15px; }
.fbc-qr { text-align: center; margin-bottom: 10px; }
.fbc-qr img {
  display: block; width: 140px; height: 140px; margin: 0 auto 8px;
  border: 1px solid #e6edff; border-radius: 10px;
}
.fbc-qr span { font-size: 12px; color: #6b7394; }
.fbc-tip {
  margin: 0; padding-top: 10px; border-top: 1px solid #eef1f8;
  font-size: 12px; line-height: 1.7; color: #8a92b2;
}
/* 窄屏/小屏时隐藏，避免遮挡主内容 */
@media (max-width: 1400px) { .fb-campaign { display: none; } }

/* ================= 智能检测页 · 排版优化（V4.6.2） =================
   目标：把「规则配置 / 选填名称 / 上传检测」三段拉开层级——统一纵向节奏 +
   段间分隔线 + 一致的盒子语言 + 强化上传焦点区。仅调整布局与视觉，文案数据不变。 */

/* 0) 卡片内边距收紧（作用域：仅检测页，不影响其它 .card） */
.detect-card { padding: 16px; }
.detect-card > h3 { margin-bottom: 10px; padding-bottom: 8px; }

/* 1) 分区节奏：段间 20px + 可见分隔线，段内 10~16px（V4.6.3 由 26px 收窄） */
.detect-card > .det-sec + .det-sec {
  margin-top: 12px; padding-top: 12px; border-top: 1px solid #e4ebf8;
}

/* 2) 步骤标签：左侧品牌竖条 + 加重字重，让「第 1/2/3 步」一眼可扫 */
.detect-card .det-step-head {
  display: inline-flex; align-items: center; position: relative; padding-left: 11px;
  font-size: 14px; font-weight: 700; color: var(--ink); letter-spacing: .2px;
  margin-bottom: 8px;
}
.detect-card .det-step-head::before {
  content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 3px; height: 15px; border-radius: 2px; background: var(--primary);
}
.detect-card .detect-bar .field > label {
  display: inline-flex; align-items: center; position: relative;
  font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: .2px;
  margin-bottom: 8px;
}
.detect-card .detect-bar { margin-top: 0; }
.detect-card .det-field-sm { max-width: 220px; }

/* 3) 统一辅助盒子语言：规则卡 / 引导区 采用同一圆角与边框节奏 */
.detect-card .rule-card,
.detect-card .arg-box { border-radius: 14px; }
.detect-card #region-rule-box { margin-top: 8px; }
.detect-card .rule-card { margin-bottom: 0; }
.detect-card .add-region-guide { margin-top: 8px; }
/* 引导区降噪：去紫渐变，与规则卡统一为浅蓝渐变 + 虚线边，退回「辅助」层级 */
.detect-card .arg-box {
  background: linear-gradient(180deg, #fafcff 0%, #f4f8ff 100%);
  border: 1px dashed #cfdbf5;
}

/* 「当前检测规则」摘要条（2026-10-21）：只在上传区上方加一行提示，不改整体布局。
   正常态浅蓝、警示态浅黄；≤980px 按钮换行贴左，不做任何遮挡。 */
.rule-ack-bar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-bottom: 10px; padding: 9px 13px; border-radius: 12px;
  background: var(--primary-light); border: 1px solid #dbe6ff;
  font-size: 13px; color: #3d4a66;
}
.rule-ack-bar .rab-ico { display: inline-flex; flex: none; color: var(--primary); }
.rule-ack-bar .rab-text { display: inline-flex; align-items: center; gap: 7px; flex-wrap: wrap; min-width: 0; }
.rule-ack-bar .rab-label { color: var(--muted); }
.rule-ack-bar .rab-text b { color: var(--ink); font-weight: 600; }
.rule-ack-bar .rab-meta { color: var(--muted); font-size: 12.5px; }
.rule-ack-bar .rab-btn { margin-left: auto; flex: none; }
.rule-ack-bar.bad { background: var(--warn-bg); border-color: #f1dcb6; color: #7d5514; }
.rule-ack-bar.bad .rab-ico { color: var(--warn); }
.rule-ack-bar.bad .rab-text b { color: #7d5514; }
@media (max-width: 980px) { .rule-ack-bar .rab-btn { margin-left: 0; } }
/* 摘 要条定位到规则卡时闪一下，指引视线（prefers-reduced-motion 下关闭） */
@keyframes ruleFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(43,107,255,0); }
  35% { box-shadow: 0 0 0 4px rgba(43,107,255,.22); }
}
.rule-card.rule-flash { animation: ruleFlash 1.4s ease-in-out 1; }
@media (prefers-reduced-motion: reduce) { .rule-card.rule-flash { animation: none; } }

/* 切到无规则省份时的"软提醒"：蓝色实线 + 淡光环（不闪烁，避免打扰） */
.arg-box.arg-hl { border-style: solid; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(43,107,255,.14); }

/* 用户主动选「未找到可用规则」：红色加粗 + 闪烁虚线框（强提醒） */
.detect-card .arg-box.arg-alert {
  border: 2px dashed var(--danger);
  animation: argAlertPulse 1.15s ease-in-out infinite;
}
@keyframes argAlertPulse {
  0%, 100% { border-color: rgba(229,72,77,.30); box-shadow: 0 0 0 0 rgba(229,72,77,0); }
  50% { border-color: rgba(229,72,77,1); box-shadow: 0 0 0 6px rgba(229,72,77,.12); }
}
.detect-card .arg-box.arg-alert .arg-title { color: var(--danger); font-weight: 700; }
.detect-card .arg-box.arg-alert .arg-ico { color: var(--danger); background: #fdecec; }
@media (prefers-reduced-motion: reduce) {
  .detect-card .arg-box.arg-alert { animation: none; border-color: var(--danger); }
}

/* 「找不到需要的规则？」常驻入口条：原生 option 不能上背景色，这里做视觉兜底 */
.rule-none-entry {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 8px; padding: 7px 12px; border-radius: 10px;
  background: #fff9ec; border: 1px dashed #f0cb7a; color: #8a5b12; font-size: 12.5px;
}
.rule-none-entry .rne-ico { display: inline-flex; flex: none; color: #c2740a; }
.rule-none-entry .rne-text { min-width: 0; }
.rule-none-entry .rne-text b { color: #7a4d0a; font-weight: 600; }
.rule-none-entry .rne-btn { margin-left: auto; flex: none; }
@media (max-width: 980px) { .rule-none-entry .rne-btn { margin-left: 0; } }
@keyframes argBtnFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(43,107,255,0); }
  40% { box-shadow: 0 0 0 5px rgba(43,107,255,.25); }
}
.btn-rec.arg-flash { animation: argBtnFlash 1.6s ease-in-out 1; }
@media (prefers-reduced-motion: reduce) { .btn-rec.arg-flash { animation: none; } }

/* 4) 上传区作为视觉焦点：更大留白 + 更清晰的说明层级 */
.detect-card .upload-zone { padding: 26px 20px; border-radius: 16px; }
.detect-card .upload-zone svg { width: 34px; height: 34px; margin-bottom: 8px; }
.detect-card .upload-zone .big { font-size: 15.5px; letter-spacing: .2px; }
.detect-card .uz-sub { font-size: 12.5px; color: var(--muted); margin-top: 4px; }
.detect-card .uz-note {
  display: inline-block; margin-top: 8px; font-size: 12px; color: var(--muted);
  background: #f5f8ff; border: 1px solid #e5ecfb; border-radius: 999px; padding: 2px 12px;
}
.detect-card .uz-note b { color: var(--primary-dark); }

/* 5) 文件列表与主按钮 */
.detect-card .file-list { margin-top: 10px; }
.detect-card .detect-actions { margin-top: 12px; gap: 8px; }

/* 5.5) 检测页底部标语上间距收紧（作用域限定，避免影响其它页） */
#view-detect .page-slogan { padding-top: 22px; }

/* 6.5) 三步向导（2026-10-21）
   一次只显示一步：第 1 步确认交易中心后才解锁第 2/3 步，上传区在第 3 步内。
   顺序约束靠**结构**保证（未解锁的步骤不在视口中），而不是靠一句提示文字。 */
.wiz-step[hidden] { display: none !important; }

.wiz-nav { display: flex; gap: 8px; margin: 2px 0 12px; padding: 0; list-style: none; }
.wiz-nav li {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 7px;
  padding: 9px 11px; border-radius: 11px; cursor: pointer; user-select: none;
  background: #f6f8fd; border: 1px solid #e8edf8; color: var(--muted);
  font-size: 13px; font-weight: 600; transition: background .16s, border-color .16s, color .16s;
}
.wiz-nav li i {
  flex: none; width: 21px; height: 21px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: #e4eaf6; color: #8a94ad; font-style: normal; font-size: 12px; font-weight: 700;
}
.wiz-nav li i svg { width: 12px; height: 12px; }
.wiz-nav li span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wiz-nav li:hover { border-color: #cfdcf8; color: var(--ink); }
.wiz-nav li.cur { background: var(--primary-light); border-color: #bfd3ff; color: var(--primary-dark); }
.wiz-nav li.cur i { background: var(--grad-brand); color: #fff; }
.wiz-nav li.done { background: #f1fbf5; border-color: #cdebd9; color: #17915a; }
.wiz-nav li.done i { background: #22b06b; color: #fff; }
.wiz-nav li.locked { opacity: .62; }
.wiz-nav li.locked:hover { border-color: #e8edf8; color: var(--muted); }

/* 第 1 步：为什么必须先确认 + 将要使用的规则预览 */
.wiz-lead {
  font-size: 12.5px; line-height: 1.75; color: #5a6683; margin-bottom: 12px;
  background: #f7faff; border: 1px solid #e6eefb; border-radius: 10px; padding: 9px 12px;
}
.wiz-lead b { color: var(--primary-dark); }
.wiz-preview {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 10px; padding: 9px 12px; border-radius: 10px;
  background: #f8fbff; border: 1px dashed #cfdcf5; font-size: 13px;
}
.wiz-preview .wp-label { font-size: 12px; color: var(--muted); }
.wiz-preview b { color: var(--ink); }
.wiz-preview .wp-meta { font-size: 12px; color: var(--muted); }
.wiz-preview.wc-bad { background: #fff7f7; border-color: #f3c3c5; color: var(--danger); }

/* 第 3 步顶部：当前交易中心摘要（自动确认时，这是唯一能看出用的哪套规则的地方） */
.wiz-current-inner {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 10px 13px; border-radius: 11px; margin-bottom: 12px; font-size: 13px;
  background: linear-gradient(180deg, #f4f8ff 0%, #eef4ff 100%);
  border: 1px solid #dbe6f8;
}
.wiz-current-inner .wc-label { font-size: 12px; color: var(--muted); }
.wiz-current-inner .wc-name { color: var(--ink); }
.wiz-current-inner .wc-meta { font-size: 12px; color: var(--muted); }
.wiz-current-inner.wc-bad { background: #fff7f7; border-color: #f3c3c5; color: var(--danger); }

.wiz-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.wiz-actions .detect-hint { text-align: left; }

/* 被门禁拦下时第 1 步闪一下，明确指出"该点这里" */
@keyframes wizFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(43,107,255,0); }
  25%, 75% { box-shadow: 0 0 0 4px rgba(43,107,255,.18); }
}
.wiz-step.wiz-flash { animation: wizFlash 1.6s ease; border-radius: 14px; }

@media (max-width: 768px) {
  .wiz-nav { gap: 6px; }
  .wiz-nav li { flex-direction: column; gap: 4px; padding: 8px 4px; text-align: center; font-size: 11.5px; }
  .wiz-nav li span { white-space: normal; overflow: visible; }
  .wiz-actions .btn, .wiz-actions .btn-outline { flex: 1 1 auto; }
  .wiz-actions .detect-hint { flex: 1 1 100%; text-align: center; }
}

/* 6) 窄屏：收紧纵向节奏，胶囊提示换行显示 */
@media (max-width: 768px) {
  .detect-card { padding: 16px; }
  .detect-card > .det-sec + .det-sec { margin-top: 14px; padding-top: 14px; }
  .detect-card .upload-zone { padding: 32px 16px; }
  .detect-card .uz-note { display: block; border-radius: 10px; }
}

/* ================= 敏感信息检测（含错别字） ================= */
/* 入口常驻提示条：引导用户知晓错别字检测已内置 */
.sens-tip {
  margin: 0 0 14px; padding: 10px 14px; font-size: 13px; line-height: 1.7;
  color: #3a4a6b; background: linear-gradient(180deg, #f4f8ff 0%, #eef4ff 100%);
  border: 1px solid #dbe6f8; border-radius: 12px;
}
.sens-tip b { color: var(--primary-dark); }

/* 公告基准信息回显卡片（可增删改） */
.spf-card {
  margin-top: 10px; padding: 14px 16px; border: 1px solid #e4ebf8; border-radius: 14px;
  background: #fafcff;
}
.spf-card .spf-head {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 14px; font-weight: 700; color: var(--ink); margin-bottom: 12px;
}
.spf-card .spf-head svg { color: var(--ok); }
.spf-card .spf-field { margin-bottom: 10px; }
.spf-card .spf-field label {
  display: block; font-size: 12.5px; font-weight: 600; color: var(--muted); margin-bottom: 4px;
}
.spf-card .spf-field input {
  width: 100%; padding: 8px 12px; font-size: 14px; border: 1px solid #dbe3f2;
  border-radius: 8px; color: var(--ink); background: #fff;
}
.spf-card .spf-field input:focus { border-color: var(--primary); outline: none; }
.spf-card .spf-hint { display: block; font-size: 11.5px; color: #9aa7c4; margin-top: 3px; }
.spf-card .spf-actions { margin-top: 12px; }


/* ================= 操作指南（内嵌手册 + 小图标下载） ================= */
/* switchView 切到 guide 时给 body 加 .in-guide：收紧内边距 / 压缩底部法务条，
   把纵向空间尽量留给文档正文（iframe 高度由 app.js 的 fitGuideFrame() 精确计算） */
body.in-guide main { padding: 10px 12px 4px; }
body.in-guide .app-legal { padding: 6px 22px 8px; }
/* 侧栏菜单常比正文长，guide 页让它内部滚动，不把整页撑高（max-height 由 fitGuideFrame 计算） */
body.in-guide nav.side-nav { overflow-y: auto; overscroll-behavior: contain; }

.guide-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 2px 8px; }
.guide-title { margin: 0; font-size: 15.5px; font-weight: 700; color: var(--ink); letter-spacing: .02em; }

/* 下载按钮压缩为 30×30 小图标，悬停出文字提示 */
.guide-dl { position: relative; flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 9px; color: var(--primary-dark);
  background: var(--primary-light); border: 1px solid rgba(43,107,255,.16); text-decoration: none;
  transition: background .16s, color .16s, transform .16s, box-shadow .16s; }
.guide-dl:hover { background: var(--primary); color: #fff; transform: translateY(-1px);
  box-shadow: 0 6px 14px -8px rgba(43,107,255,.9); }
.guide-dl-tip { position: absolute; top: calc(100% + 7px); right: 0; white-space: nowrap;
  padding: 4px 9px; border-radius: 7px; background: #1f2a44; color: #fff;
  font-size: 11.5px; line-height: 1.5; opacity: 0; transform: translateY(-4px);
  pointer-events: none; transition: opacity .16s, transform .16s; z-index: 6; }
.guide-dl:hover .guide-dl-tip, .guide-dl:focus-visible .guide-dl-tip { opacity: 1; transform: translateY(0); }

/* iframe 高度由 JS 精确计算（视口高度 - 顶部占位 - 底部法务条），页面底部不留空白、不出滚动条 */
.guide-frame { display: block; width: 100%; height: 600px; min-height: 320px;
  border: 1px solid var(--line); border-radius: 10px; background: #fff; }

@media (max-width: 760px) {
  body.in-guide main { padding: 8px 8px 2px; }
  .guide-frame { border-radius: 8px; }
}

/* ================= 充值中心弹窗（次卡 / 月卡 / 年卡） ================= */
/* 弹窗加宽 + 头部通栏：openRecharge 时给 #modal-box 加 .rc-open */
/* overflow-y:auto 覆盖 .modal 的默认滚动能力，保证加宽后的充值弹窗也能在弹窗内部滚动（原 hidden 会裁掉超长内容） */
#modal-box.rc-open { max-width: 920px; padding: 0; overflow-x: hidden; overflow-y: auto; }
.rc-head {
  position: relative; color: #fff; padding: 22px 60px 18px 26px;
  background: var(--grad-brand);
}
.rc-title { font-size: 21px; font-weight: 800; letter-spacing: 1px; }
.rc-sub { font-size: 12.5px; opacity: .92; margin-top: 4px; }
.rc-close {
  position: absolute; top: 14px; right: 16px; width: 30px; height: 30px;
  background: rgba(255, 255, 255, .18); border: none; color: #fff;
  font-size: 19px; line-height: 1; border-radius: 999px; cursor: pointer; transition: .15s;
}
.rc-close:hover { background: rgba(255, 255, 255, .34); }
.rc-body { padding: 18px 22px 10px; }
.rc-sub-status {
  display: inline-block; font-size: 12.5px; color: var(--primary-dark);
  background: var(--primary-light); border: 1px solid #d7e4ff;
  border-radius: 999px; padding: 4px 13px; margin-bottom: 14px;
}
.rc-sub-status b { color: var(--primary); }
.rc-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 11px; }
@media (max-width: 900px) { .rc-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); } }
.rc-card {
  position: relative; display: flex; flex-direction: column;
  border: 1.5px solid var(--line); border-radius: 14px; padding: 15px 12px 12px;
  text-align: center; cursor: pointer; background: #fff; transition: .15s;
}
.rc-card:hover { border-color: #a9c6ff; box-shadow: 0 4px 14px rgba(43, 107, 255, .12); }
.rc-card.active { border-color: var(--primary); background: #f5f8ff; box-shadow: inset 0 0 0 1px var(--primary); }
.rc-badges {
  position: absolute; top: -9px; left: 0; right: 0;
  display: flex; justify-content: center; align-items: center; gap: 5px;
  pointer-events: none;
}
.rc-badge {
  font-style: normal; font-size: 10.5px; font-weight: 700; color: #fff;
  background: var(--grad-brand);
  border-radius: 999px; padding: 2px 10px; white-space: nowrap;
}
.rc-badge.rc-limited { background: linear-gradient(135deg, #ff8b78, #ea4335); }
.rc-name { font-size: 13.5px; font-weight: 700; color: var(--ink); }
.rc-times { font-size: 24px; font-weight: 800; color: var(--primary); margin: 8px 0 2px; }
.rc-times small { font-size: 12px; font-weight: 600; color: var(--muted); margin-left: 2px; }
.rc-feats { list-style: none; margin: 8px 0 10px; padding: 8px 2px 0;
  border-top: 1px dashed #dce6fb; text-align: left; flex: 1; }
.rc-feats li { font-size: 11.5px; color: var(--text); line-height: 1.55; padding: 1.5px 0; }
.rc-feats li::before { content: "✓"; color: var(--primary); font-weight: 800; margin-right: 5px; }
.rc-price { margin-top: auto; border-radius: 9px; padding: 7px 4px;
  font-size: 11.5px; color: var(--muted); background: #f7f8fc; transition: .15s; }
.rc-price b { font-size: 19px; font-weight: 800; color: var(--ink); }
.rc-card.active .rc-price { background: var(--grad-brand); color: rgba(255,255,255,.88); }
.rc-card.active .rc-price b { color: #fff; }
.rc-note { font-size: 11.5px; color: var(--muted); margin-top: 12px; }
.rc-bank-note {
  font-size: 12px; color: var(--primary-dark); margin-top: 8px;
  background: var(--primary-light); border: 1px solid #d7e4ff;
  border-radius: 10px; padding: 7px 12px;
}
.rc-bank-note b { color: var(--primary); letter-spacing: .3px; }
/* 支付方式选择（微信 / 支付宝，仅在两个渠道都真实可用时渲染） */
.rc-channel {
  display: flex; align-items: center; gap: 10px;
  margin-top: 10px; padding: 8px 12px;
  border-radius: 10px; background: #f6f8fc; border: 1px solid var(--line);
}
.rc-channel-label { flex: 0 0 auto; font-size: 12.5px; color: var(--muted); white-space: nowrap; }
/* 支付方式状态说明（V4.9.38）：模拟支付 / 未配置完成时的灰字提示 */
.rc-channel-hint { margin-top: 6px; padding: 0 2px; font-size: 12px; line-height: 1.6;
  color: var(--muted); }
.rc-coupons { margin-top: 12px; padding: 10px 12px; border-radius: 12px; background: #fff8ec; border: 1px dashed #f0c46a; }
.rc-coupons-head { font-size: 12.5px; color: var(--muted); margin-bottom: 8px; }
.rc-coupon { display: flex; align-items: center; gap: 6px; width: 100%; text-align: left; cursor: pointer; padding: 8px 10px; margin-bottom: 6px; border-radius: 10px; border: 1px solid #f0d9a8; background: #fff; color: var(--text); font-size: 13px; transition: .15s; }
.rc-coupon:last-child { margin-bottom: 0; }
.rc-coupon b { color: #d88a1a; font-size: 15px; }
.rc-coupon small { color: var(--muted); font-size: 11.5px; flex: 1; }
.rc-coupon em { font-style: normal; font-size: 11px; color: #fff; background: #e6a23c; border-radius: 999px; padding: 2px 8px; }
.rc-coupon.on { border-color: #e6a23c; box-shadow: 0 0 0 1px #e6a23c; }
.rc-foot {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 22px 18px; border-top: 1px solid var(--line); background: #fbfcff;
}
.rc-total { flex: 1; font-size: 13px; color: var(--text); }
.rc-total b { color: var(--primary); }
.rc-amt { font-size: 22px; font-weight: 800; color: var(--primary); margin-left: 8px; }
.rc-pay-btn {
  border: none; cursor: pointer; border-radius: 999px; padding: 11px 38px;
  font-size: 15px; font-weight: 800; letter-spacing: 2px; color: #fff;
  background: var(--grad-brand); transition: .15s;
}
.rc-pay-btn:hover { filter: brightness(1.06); box-shadow: 0 4px 14px rgba(43, 107, 255, .4); }
/* 会员按次续充区 */
.rc-renew {
  margin: 12px 0 14px; padding: 12px 14px; border-radius: 12px;
  background: var(--primary-light); border: 1px dashed #b9cdff;
}
.rc-renew-head { font-size: 13px; margin-bottom: 10px; }
.rc-renew-head b { color: var(--primary); font-size: 15px; }
.rc-renew-head .muted { margin-left: 8px; font-size: 12px; }
.rc-renew-row { display: flex; gap: 10px; flex-wrap: wrap; }
.rc-renew-btn {
  flex: 1 1 0; min-width: 120px; cursor: pointer; padding: 9px 12px; border-radius: 10px;
  border: 1px solid #c9d8ff; background: #fff; color: var(--text);
  font-size: 13px; font-weight: 600; transition: .15s;
}
.rc-renew-btn:hover { border-color: var(--primary); box-shadow: 0 3px 10px rgba(43, 107, 255, .14); }
.rc-renew-btn b { color: var(--primary); margin-left: 6px; }
/* 次数明细页的充值入口横幅 */
.rc-entry { display: flex; align-items: center; justify-content: space-between; gap: 14px; cursor: pointer; }
.rc-entry:hover { border-color: #a9c6ff; }
.rc-entry-btn {
  flex: none; border: none; cursor: pointer; border-radius: 999px; padding: 10px 22px;
  font-size: 13.5px; font-weight: 700; color: #fff; letter-spacing: 1px;
  background: var(--grad-brand); transition: .15s;
}
.rc-entry-btn:hover { filter: brightness(1.06); box-shadow: 0 3px 10px rgba(43, 107, 255, .35); }
/* 支付弹窗（第二步：模拟支付 / 扫码） */
.pay-order-info {
  background: #f7f9ff; border: 1px solid var(--line); border-radius: 10px;
  padding: 14px 16px; margin: 12px 0; font-size: 13.5px; color: var(--text);
}
.pay-order-info div + div { margin-top: 6px; }
.pay-qr-note { font-size: 12.5px; color: var(--muted); margin: 12px 0; }

/* 扫码支付：二维码图 + 提示 + 倒计时 */
.pay-qr { text-align: center; margin: 8px 0 4px; }
/* 支付宝收银台 iframe（前置模式 qr_pay_mode=4，内部只显示二维码） */
.ali-pay-frame {
  display: block; margin: 0 auto; border: 0; background: #fff;
  width: 260px; height: 300px; border-radius: 12px;
}
.pay-qr img {
  width: 220px; height: 220px; padding: 10px; background: #fff;
  border: 1px solid var(--line); border-radius: 12px;
  box-shadow: 0 6px 18px rgba(43, 107, 255, .10);
}
.pay-tip { font-size: 12.5px; color: var(--muted); text-align: center; margin: 10px 0 4px; line-height: 1.6; }
.pay-count { font-size: 12.5px; color: var(--primary); text-align: center; font-variant-numeric: tabular-nums; }
/* 收款/开票主体提示（合规最小披露，仅支付与开票环节出现） */
.pay-payee { font-size: 12px; color: var(--muted); text-align: center; margin: 8px 0 2px; line-height: 1.6; }

/* ================= 个人中心：退出登录 ================= */
.acc-logout { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--line); }
.acc-logout .btn { width: 100%; padding: 10px 0; font-size: 14px; }
/* 个人中心：充值记录 / 开票记录入口 */
.acc-links { display: flex; gap: 10px; margin-top: 14px; }
.acc-links .btn { flex: 1; min-width: 0; }

/* ================= 充值中心 tab 与开票 ================= */
.rc-tabs { display: flex; gap: 4px; padding: 12px 22px 0; background: #fff; border-bottom: 1px solid var(--line); }
.rc-tab {
  border: none; background: transparent; cursor: pointer; font-size: 14px; font-weight: 600;
  color: var(--muted); padding: 8px 18px; border-radius: 8px 8px 0 0;
  border-bottom: 2px solid transparent; transition: .15s;
}
.rc-tab:hover { color: var(--primary); }
.rc-tab.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 700; }
.rc-inv-top { display: flex; justify-content: flex-end; margin-bottom: 12px; }
.rc-inv-top .btn { min-width: 110px; }

/* ================= 管理端：订单与营收 ================= */
.rev-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 14px; }
.rev-card {
  background: #fff; border: 1px solid var(--line); border-radius: 14px;
  padding: 16px 18px; box-shadow: 0 2px 10px rgba(20, 40, 80, .04);
}
.rev-label { font-size: 12.5px; color: var(--muted); }
.rev-num {
  font-size: 24px; font-weight: 800; color: var(--text); margin: 6px 0 4px;
  letter-spacing: -.5px; font-variant-numeric: tabular-nums;
}
.rev-sub { font-size: 12px; color: var(--muted); }
.rev-chart { display: flex; align-items: flex-end; gap: 10px; height: 158px; padding: 6px 2px 0; }
.rev-bar { flex: 1; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; }
.rev-bar-amt { font-size: 11px; color: var(--primary); margin-bottom: 4px; min-height: 14px; }
.rev-bar-fill { width: 70%; max-width: 54px; border-radius: 6px 6px 0 0; background: var(--grad-brand); }
.rev-bar-day { font-size: 11.5px; color: var(--muted); margin-top: 6px; }
.ord-filter { display: flex; gap: 10px; align-items: center; margin-bottom: 12px; flex-wrap: wrap; }
.ord-filter select, .ord-filter input {
  padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px;
  font-size: 13px; background: #fff; color: var(--text);
}
.ord-filter input { flex: 1; min-width: 200px; max-width: 320px; }
@media (max-width: 900px) {
  .rev-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ================= 管理端：套餐与定价 ================= */
.pk-in {
  padding: 7px 9px; border: 1px solid var(--line); border-radius: 8px;
  font-size: 13px; width: 100%; background: #fff; color: var(--text);
}
.pk-in.pk-num { text-align: right; font-variant-numeric: tabular-nums; }
.pk-foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 14px; margin-top: 14px; flex-wrap: wrap;
}
.pk-actions { display: flex; gap: 10px; }

/* ================= 管理端：账号管理（员工 / 角色权限 / 审计日志） ================= */
.staff-grid { display: grid; grid-template-columns: 268px 1fr; gap: 16px; align-items: start; }
.staff-role-list { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #fff; }
.staff-role-head { padding: 11px 14px; font-size: 13px; font-weight: 700; color: var(--muted);
  background: #f7f9fd; border-bottom: 1px solid var(--line); }
.staff-role-item { padding: 10px 14px; cursor: pointer; border-bottom: 1px solid #f1f4fa; transition: .15s; }
.staff-role-item:hover { background: #f7f9fd; }
.staff-role-item.active { background: var(--primary-light); box-shadow: inset 3px 0 0 var(--primary); }
.sri-name { font-size: 13.5px; font-weight: 700; color: var(--text); }
.sri-sub { font-size: 12px; color: var(--muted); margin-top: 3px; }
.staff-role-body { min-width: 0; }
.staff-role-title { display: flex; align-items: flex-start; justify-content: space-between;
  gap: 12px; margin-bottom: 10px; }
.staff-role-title b { font-size: 15px; }
.perm-tbl th { text-align: center; }
.perm-tbl th:first-child { text-align: left; }
.perm-tbl td { vertical-align: middle; }
.perm-group td { background: #f7f9fd; font-weight: 700; font-size: 12.5px; color: var(--muted);
  letter-spacing: .3px; }
.perm-mod { font-size: 13.5px; font-weight: 600; color: var(--text); }
.perm-desc { font-size: 12px; font-weight: 400; color: var(--muted); margin-top: 2px; }
.perm-ck { text-align: center; }
.perm-ck input { width: 16px; height: 16px; cursor: pointer; accent-color: var(--primary); }
.perm-ck input:disabled { cursor: not-allowed; opacity: .55; }
@media (max-width: 980px) { .staff-grid { grid-template-columns: 1fr; } }

/* 账号管理：员工表格与操作列 */
.staff-tbl { min-width: 1040px; }
.staff-tbl td { white-space: nowrap; }
.staff-ops { white-space: nowrap; }
.staff-ops .btn-sm { padding: 5px 10px; font-size: 12.5px; min-height: 30px; }

/* 账号管理：员工表格、双行单元格与危险操作区 */
.staff-tbl { min-width: 760px; table-layout: auto; }
.staff-tbl th, .staff-tbl td { padding: 10px 8px; }
.staff-tbl td { white-space: nowrap; vertical-align: middle; }
.staff-name { font-size: 13.5px; font-weight: 600; color: var(--text); }
.staff-sub { font-size: 11.5px; color: var(--muted); margin-top: 2px; }
.staff-ops { white-space: nowrap; }
.staff-ops .btn-sm { padding: 5px 10px; font-size: 12.5px; min-height: 30px; }
.staff-danger { display: flex; gap: 8px; margin: 4px 0 12px; padding-top: 10px;
  border-top: 1px dashed #eaeffa; }

.staff-log-tbl { min-width: 800px; }
.staff-nowrap { white-space: nowrap; }

/* ---------- 规则核对弹窗：来源留档（上传的招标文件包 / 粘贴的原文） ---------- */
.src-file { display: flex; align-items: center; gap: 12px; margin-top: 12px; padding: 11px 14px;
  background: #f5f9ff; border: 1px solid #dbe7fb; border-radius: 10px; }
.src-file .sf-ico { width: 34px; height: 34px; border-radius: 9px; background: var(--primary-light);
  display: flex; align-items: center; justify-content: center; color: var(--primary); flex: 0 0 auto; }
.src-file .sf-ico svg { width: 18px; height: 18px; }
.src-file .sf-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.src-file .sf-main b { font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.src-file .sf-main .muted { font-size: 12px; }


/* ================= 管理端应用壳：会话校验失败兜底（P2 新增） =================
   仅 admin/index.html 使用；客户端页面不会出现该节点。
   目的：网络/服务异常时给出可见提示与重试入口，而不是白屏。 */
.boot-error{
  position:fixed; inset:0; z-index:90; display:none;
  align-items:center; justify-content:center;
  background:rgba(245,248,255,.92);
}
.boot-error-box{
  max-width:360px; padding:26px 24px; text-align:center;
  background:#fff; border:1px solid #e6ecf8; border-radius:14px;
  box-shadow:0 16px 40px rgba(43,107,255,.10);
}
.boot-error-box h3{ margin:0 0 8px; font-size:16px; color:#1f2a44; }
.boot-error-box p{ margin:0 0 16px; font-size:13px; line-height:1.7; color:#7b849b; }
.boot-error-box .btn{ margin:0 4px; }

/* ================= 弹窗三段式（head 常驻 / scroll 可滚 / foot 常驻） =================
   原先 .modal 是「整卡 scrolling」：长表单（编辑官方预设规则等）滚到下面时，
   标题和「保存」按钮都会滚出视野。改成弹性三段后，头部与底部固定，只有中间内容区滚动。
   结构由 core.js::normalizeModal() 在 openModal 时自动生成（79 处调用点零改动）。
   注意：所有规则用 .modal .xxx 双类选择器，确保覆盖文件上方 363/973 行的旧 h3 规则。 */
.modal { display: flex; flex-direction: column; position: relative; padding: 0; overflow: hidden; }

.modal .modal-head { flex: 0 0 auto; padding: 22px 34px 16px 26px; background: #fff;
  border-bottom: 1px solid #eef1f8; border-radius: var(--radius-xl) var(--radius-xl) 0 0; }
.modal .modal-head h3 { margin: 0; padding: 0 34px 0 0; border-bottom: 0; }
.modal .modal-head .modal-title { margin: 0; padding-right: 34px; }
.modal .modal-head .modal-sub { margin-top: 7px; line-height: 1.6; }
.modal .modal-head .close-x,
.modal > .close-x { float: none; position: absolute; top: 16px; right: 16px;
  line-height: 1; z-index: 2; }

.modal .modal-scroll { flex: 1 1 auto; min-height: 0; padding: 18px 26px;
  overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }
.modal .modal-scroll::-webkit-scrollbar { width: 8px; }
.modal .modal-scroll::-webkit-scrollbar-track { background: transparent; }
.modal .modal-scroll::-webkit-scrollbar-thumb { background: #dbe2f0; border-radius: 8px; }
.modal .modal-scroll::-webkit-scrollbar-thumb:hover { background: #c6d0e6; }

/* 常驻 footer：flex item 不参与收缩，靠 position/z-index 保证永远压在滚动内容之上（不被遮挡）。
   上投影替代单纯描边，长内容滚动到底时能看出"这里到底了"，而不是内容被硬切。 */
.modal .modal-foot { flex: 0 0 auto; position: relative; z-index: 2;
  padding: 14px 34px 18px 26px; background: #fff;
  border-top: 1px solid #eef1f8; border-radius: 0 0 var(--radius-xl) var(--radius-xl);
  box-shadow: 0 -6px 16px -14px rgba(16,28,70,.28); }
.modal .modal-foot .modal-actions { margin-top: 0; flex-wrap: wrap; row-gap: 8px; }
/* 兜底：footer 里若是历史写法的 .row 包按钮，抵消 .row>*{flex:1} 的等宽拉伸 */
.modal .modal-foot .row > * { flex: 0 0 auto; }
.modal .modal-foot .row { justify-content: flex-end; margin-top: 0; }

/* 窄屏：收紧三段内边距，保持与桌面一致的层级观感 */
@media (max-width: 640px) {
  .modal .modal-head { padding: 18px 16px 12px; }
  .modal .modal-scroll { padding: 14px 16px; }
  .modal .modal-foot { padding: 12px 16px 14px; }
  .modal .modal-head .close-x,
  .modal > .close-x { top: 12px; right: 10px; }
  .modal .modal-foot .modal-actions .btn { min-width: 92px; }
}

/* 充值中心（.rc-open）自带 rc-head / rc-body / rc-foot 三段，不参与 normalizeModal 重排，
   这里显式恢复 block + 整卡滚动，避免被上面的 .modal{display:flex} 改动波及。 */
#modal-box.rc-open { display: block; }

/* ==========================================================================
   多端自适应布局层（2026-10-21）
   --------------------------------------------------------------------------
   两端策略不同，别混着改：

   【客户端】不做断点重排，只做整体等比缩放（见第 4 节 + client/js/scale.js）
     - 布局、字号、间距、导航位置、元素显隐：一个字都不动，与改动前完全一致
     - ≥1024px 视口：比例恒为 1，等价于没有这层样式
     - < 1024px：整块 UI 等比缩小（把窗口"拉远看"），永不横向溢出
     - 登录页不参与缩放（它本来就有小屏单列规则，再缩会变迷你卡片）

   【管理端】断点式自适应，5 档：
     XS  < 640      手机竖屏
     SM  640 ~ 767  手机横屏 / 大屏手机
     MD  768 ~ 1023 平板（图标 + 小字窄侧栏 74px，表格 nowrap + 横滑）
     LG  1024 ~ 1439 平板横屏 / 小笔记本（侧栏 196px）
     XL  ≥ 1440     桌面（侧栏 224px，容器 1680px）

   容器宽度（原两端都是 1140px，管理端 1920 屏上内容区只剩 868px，明显偏窄）：
     客户端 1140px  保持原样
     管理端 1680px  实测 1920 屏下内容区 1452px（原 868px，+67%）
   两端用 body.admin-scope 区分——该 class 由 admin/index.html 静态写在 body 上，
   并在 framework.js::mountAppShell 里 toggle 一次（幂等），首帧即可正确分端，不会跳变。
   ========================================================================== */

/* ---------- 1. 容器宽度 ----------
   客户端：保持 1140px 原样，本次**不动任何客户端样式**（小屏靠整体缩放，见第 4 节）。
   管理端：1680px —— 原两端同为 1140px，管理端 1920 屏下内容区只剩 868px，表格挤成竖排字。 */
.appbar-inner, .shell { max-width: 1140px; }
body.admin-scope .appbar-inner,
body.admin-scope .shell { max-width: 1680px; }

/* LG：小笔记本 / 平板横屏，管理端侧栏收窄给内容让位（客户端侧栏保持 224px） */
@media (min-width: 1024px) and (max-width: 1279px) {
  body.admin-scope nav.side-nav { width: 196px; }
}

/* ---------- 2. MD：管理端平板 / 手机一律用「图标 + 小字」窄侧栏 ----------
   原实现只保留图标（font-size:0），25 个视图全靠认图标不现实；
   这里改成图标在上、文字换行在下，宽度 74px 仍只占一行内容的空间。
   ⚠️ 仅管理端：客户端不改布局，小屏整体等比缩放。 */
@media (max-width: 1023px) {
  body.admin-scope nav.side-nav { width: 74px; padding: 14px 6px; }
  body.admin-scope nav.side-nav button { flex-direction: column; justify-content: center; gap: 4px;
    padding: 8px 2px; font-size: 9.5px; line-height: 1.15; white-space: normal;
    word-break: break-word; text-align: center; }
  body.admin-scope nav.side-nav button svg { width: 18px; height: 18px; opacity: .9; }
  body.admin-scope nav.side-nav .nav-group { display: flex !important; margin-left: 0; padding-left: 0; border-left: none; }
  body.admin-scope nav.side-nav .nav-caret { display: none; }
  body.admin-scope nav.side-nav button.nav-group-head { padding-top: 6px; padding-bottom: 2px; font-size: 9.5px; }
  /* 窄侧栏里角标缩成右上小圆点，避免压住图标 */
  body.admin-scope nav.side-nav .nav-badge { right: 2px; top: 2px; transform: none; font-size: 9.5px;
    min-width: 15px; height: 15px; line-height: 15px; padding: 0 3px; }
}

/* ---------- 3. 管理端手机端：保留图标条（25 个视图不适合底部横栏），只收紧留白 ---------- */
@media (max-width: 767px) {
  body.admin-scope main { padding: 14px 12px 40px; }
  body.admin-scope .appbar-inner { padding: 0 12px; }
}

/* ---------- 4. 客户端：不改布局，整体等比缩放 ----------
   设计口径（2026-10-21 调整）：客户端界面本身是成品，任何断点下的"重排"都会让老用户
   觉得界面变了。因此客户端一律**不重排、不换位、不隐藏元素**，只在视口不够宽时把
   整块 UI 等比缩小，等效于"把窗口拉远看"。
   比例由 web/client/js/scale.js 逐帧算好后写进 --client-zoom：
       比例 = min(1, 视口宽 / 1024)        （1024 是完整桌面布局能排开的最小宽度）
   只作用于 #app-view（登录后的主界面）。登录页不缩：它本来就有小屏规则
   （base.css 第 137 行起：单列 + 隐藏左栏 hero），硬缩反而会变成一张迷你卡片。
   弹窗 / toast / 公告条挂在 body 下、不在 #app-view 内，所以不受缩放影响，
   手机上弹窗仍是原生字号，不会缩到看不清。 */
body:not(.admin-scope) #app-view { zoom: var(--client-zoom, 1); }

/* zoom 会把容器里的 vh 也乘一遍比例，1:1 时需要按比例反向补偿，
   否则缩到 0.5 时侧栏只剩半屏高、比页面矮一截。
   zoom=1（桌面档）时 /1 等于原值，不产生任何影响。 */
body:not(.admin-scope) #app-view { min-height: calc(100vh / var(--client-zoom, 1)); }
body:not(.admin-scope) nav.side-nav { height: calc((100vh - 64px) / var(--client-zoom, 1)); }

/* ---------- 5. 窄屏内容自适配（仅管理端）：表格横滑、卡片收敛、栅格单列 ---------- */
@media (max-width: 767px) {
  /* 表格：外层滚动，单元格不换行，避免把「正常 / 编辑」挤成竖排字 */
  body.admin-scope .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  body.admin-scope .tbl th, body.admin-scope .tbl td { white-space: nowrap; }
  body.admin-scope .tbl td .remark-cell,
  body.admin-scope .tbl td.u-remark-cell { white-space: normal; }

  /* 卡片内边距、圆角收紧 */
  body.admin-scope .card { padding: 14px 13px; border-radius: 12px; }
  body.admin-scope .card h3 { font-size: 16px; }

  /* 两列栅格一律单列 */
  body.admin-scope .dim-form-sec .grid2,
  body.admin-scope .fix-summary,
  body.admin-scope .rule-grid,
  body.admin-scope .rec-list,
  body.admin-scope .xx-price,
  body.admin-scope .xx-fit { grid-template-columns: 1fr; }

  /* 弹窗按钮条允许折行并占满，避免三个按钮挤成一行。
     这条**两端通用**：弹窗不参与客户端缩放，手机上不折行会直接溢出。 */
  .modal .modal-foot .modal-actions { justify-content: stretch; }
  .modal .modal-foot .modal-actions .btn { flex: 1 1 auto; min-width: 0; }
}

/* ---------- 6. 触屏设备（仅管理端）：去掉 hover 残留，加大点击热区 ----------
   客户端不改任何尺寸；弹窗不参与缩放，热区本就够大。 */
@media (hover: none) and (pointer: coarse) {
  body.admin-scope nav.side-nav button:hover { background: transparent; }
  body.admin-scope nav.side-nav button.active:hover { background: var(--grad-brand); }
  body.admin-scope .btn,
  body.admin-scope .btn-outline,
  body.admin-scope .btn-ghost,
  body.admin-scope .btn-danger { min-height: 40px; }
  body.admin-scope .btn-sm,
  body.admin-scope .btn-outline.btn-sm,
  body.admin-scope .btn-danger.btn-sm { min-height: 32px; }
}

/* ---------- 7. 管理端平板档补丁（768~1023）：表格不能把「正常 / 编辑」挤成竖排字 ----------
   >1023 时表格允许换行以铺满宽屏；≤1023 一律 nowrap，列多时由外层 .table-wrap 横向滚动。
   不设 min-width：列少的表格照旧铺满，「正常/编辑」这类短词只要不换行就不会被拆成两行。 */
@media (min-width: 768px) and (max-width: 1023px) {
  body.admin-scope .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  body.admin-scope .tbl th, body.admin-scope .tbl td { white-space: nowrap; }
  body.admin-scope .tbl td .remark-cell,
  body.admin-scope .tbl td.u-remark-cell { white-space: normal; }
}

/* ---------- 8. 管理端手机档：指标卡两列 + 表格 nowrap ---------- */
@media (max-width: 767px) {
  body.admin-scope .agent-cards { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
  body.admin-scope .agent-card .agc-val { font-size: 19px; }
  /* 仪表盘 / 增长页的 .gc-item 卡同理：原来 minmax(160px) 在 390 屏只能排一列 */
  body.admin-scope .growth-cards { grid-template-columns: repeat(auto-fit, minmax(116px, 1fr)); gap: 10px; }
  body.admin-scope .gc-item { padding: 12px 13px; }
  body.admin-scope .gc-item b { font-size: 19px; }
  body.admin-scope .gc-item span,
  body.admin-scope .gc-item small { font-size: 11.5px; margin: 1px 0; }
  body.admin-scope .tbl th, body.admin-scope .tbl td { white-space: nowrap; }
}

/* ---------- 9. 客户端缩放的边界情况 ----------
   ① 缩放后 #app-view 的宽度仍是"未缩放的视口宽 / 比例"，横向不会出现滚动条，
      所以缩放时显式关掉 body 横向滚动，防止 zoom 取整误差带来 1~2px 抖动。
      ⚠️ 这条只在**真的缩放时**才挂（html.client-zoomed 由 scale.js 在比例 <1 时添加），
         桌面档不碰任何 overflow，保证与改动前 1:1。
   ② 保留 -webkit-text-size-adjust:100%，避免 iOS 横竖屏切换时二次放大字体。
   ③ 不支持 zoom 的内核（极老的 Safari）拿不到缩放，此时退回最简单的一条：
      允许整页横向滚动，宁可滑动也不要内容被压烂。 */
body:not(.admin-scope) { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
html.client-zoomed body:not(.admin-scope) { overflow-x: hidden; }

@supports not (zoom: 1) {
  body:not(.admin-scope) { overflow-x: auto; }
  body:not(.admin-scope) .appbar-inner,
  body:not(.admin-scope) .shell { min-width: 1024px; }
}

/* ---------- 10. 检测页两步式（V4.9.34）----------
   结构：步骤条 + #det-step1（选规则）/ #det-step2（上传检测），两步 DOM 常驻、只切 display。
   本节选择器全部挂在 .detect-card / .det-step-* / .rule-inline / .arg-actions 之下，
   管理端没有这些节点，因此对管理端零影响。 */

/* 10.1 顶部步骤条 */
.det-step-bar { display: flex; align-items: center; margin: 0 0 8px; padding: 9px 16px;
  background: #f7faff; border: 1px solid var(--line); border-radius: var(--radius); }
.dsb-item { display: flex; align-items: center; gap: 8px; flex: none; font-size: 13.5px; color: var(--muted); }
.dsb-item .dsb-n { flex: none; width: 24px; height: 24px; border-radius: 50%; display: flex;
  align-items: center; justify-content: center; font-size: 12.5px; font-weight: 700;
  background: #e6edfb; color: #7c8db5; }
.dsb-item .dsb-t { white-space: nowrap; }
.dsb-item.on { color: var(--primary-dark); font-weight: 700; }
.dsb-item.on .dsb-n { background: var(--primary); color: #fff; }
.dsb-item.done .dsb-n { background: #e8f7ee; color: #1f9d55; }
.dsb-item.done .dsb-t { color: var(--muted); font-weight: 400; }
.dsb-line { flex: 1; min-width: 24px; height: 2px; background: var(--line); margin: 0 14px; }

/* 10.2 步骤面板：切换时轻微淡入（尊重 reduced-motion） */
.det-step-pane { animation: detStepIn .18s ease-out 1; }
@keyframes detStepIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .det-step-pane { animation: none; } }

/* 10.2b 第 1 步顶部收紧：压缩步骤条下方、卡片标题、入口区与规则明细之间的多余间距，
   让「规则入口」整体上移（选中规则后会平铺 40+ 项检测明细，入口原先被挤到很下面）。 */
#det-step1 .detect-card { padding-top: 13px; }
#det-step1 .detect-card > h3 { margin-bottom: 8px; padding-bottom: 6px; }
#det-step1 #add-region-guide { margin-top: 12px; }
#det-step1 #region-rule-box { margin-top: 12px; }

/* 10.3 第 1 步「下一步」：sticky 吸底常驻
   · 选中规则后下方会平铺 40+ 项检测明细，按钮若跟随文档流要滚到底才看得到；
   · sticky 元素**仍占据文档流位置**，滚到文档末尾时自然归位到卡片底部，
     因此它只会"盖住"滚动过程中经过的内容，不会遮住任何最终可见的表单内容；
   · 负 margin 抵消 .detect-card 的 16px padding，形成贴边的卡片式底部操作栏。 */
.det-step-next {
  position: sticky;
  bottom: 0;
  z-index: 20;
  /* 明确的左右结构：文案在左、按钮在右 */
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  margin: 16px -16px -16px;
  padding: 10px 16px;
  background: rgba(255, 255, 255, .97);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  border-top: 1px solid var(--line);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  box-shadow: 0 -8px 18px -14px rgba(23, 43, 99, .3);
}
/* 左侧「当前规则」提示：🔴 min-width:0 是关键 —— flex 项默认 min-width:auto，
   长规则名会把盒子撑得比可用空间还宽、直接溢到按钮上方（"下一步"被压字就是这个原因）。
   这里允许收缩 + 单行省略，完整名称由 title 悬浮查看。 */
.det-step-next .dsn-hint {
  flex: 1 1 auto;
  min-width: 0;
  text-align: left;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* 右侧主按钮：按内容宽度、不换行；字号/字距/内边距针对吸底条收紧
   （原先借用 .btn-lg，它的 letter-spacing:2px + padding:15px 0 让文字很散且贴边） */
.det-step-next .det-next-btn {
  flex: 0 0 auto;
  width: auto;
  min-height: 42px;
  padding: 0 20px;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: .5px;
  border-radius: 11px;
  white-space: nowrap;
  box-shadow: 0 6px 16px -8px rgba(43, 107, 255, .7);
}
/* 箭头图标：比文字略大、hover 时右移，暗示"进入下一步" */
.det-step-next .det-next-btn .dnb-arrow {
  width: 16px; height: 16px;
  transition: transform .18s ease;
}
.det-step-next .det-next-btn:hover:not([disabled]) {
  box-shadow: 0 10px 22px -10px rgba(43, 107, 255, .85);
}
.det-step-next .det-next-btn:hover:not([disabled]) .dnb-arrow { transform: translateX(3px); }
@media (prefers-reduced-motion: reduce) {
  .det-step-next .det-next-btn .dnb-arrow { transition: none; }
  .det-step-next .det-next-btn:hover:not([disabled]) .dnb-arrow { transform: none; }
}

/* 10.4 已选规则：页面内平铺明细（替代原「核验完整规则」弹窗） */
.rule-inline { margin-top: 2px; }
.ri-sec { margin-top: 12px; }
.ri-sec:first-child { margin-top: 4px; }
.ri-sec-t { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; padding-left: 9px;
  border-left: 3px solid var(--primary); font-size: 13px; font-weight: 700;
  line-height: 1.2; color: var(--primary-dark); }
.ri-sec-n { padding: 1px 8px; border-radius: 20px; background: #eef3ff;
  font-size: 11.5px; font-weight: 400; color: var(--muted); }
.rule-inline .rule-grid { grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 8px 10px; margin-top: 0; }
.rule-inline .rule-item { gap: 2px; padding: 7px 10px; }
.rule-inline .ri-label { font-size: 11.5px; }
.rule-inline .ri-value { font-size: 12.5px; }

/* 10.5 第 1 步四入口并列（编辑规则 / 粘贴要求解析 / 上传招标文件 / 我的规则） */
.arg-sub { margin-bottom: 10px; font-size: 12.5px; line-height: 1.5; color: var(--muted); }
/* 入口区上移到首屏后，标题与说明合并成一行，省掉一整行高度 */
.arg-head .arg-sub { flex: 1; min-width: 0; margin: 0; }
.arg-actions { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 10px; }
/* 🔴 按钮禁 width:100%（.btn-primary 曾因全局 100% 把工具栏撑满），这里显式锁住不拉伸 */
.arg-actions .btn { flex: 0 0 auto; }
.arg-actions .btn .rec-badge { margin-left: 6px; }
/* 首屏顶部位置降低视觉重量：浅底 + 细虚线，不再用横向渐变抢注意力 */
#det-step1 #add-region-guide .arg-box { padding: 10px 13px; background: #fbfcff; border: 1px dashed #d8e2f5; }
#det-step1 #add-region-guide .arg-box .arg-reward { margin-top: 2px; }

/* ---------- 11. 规则表单精简（V4.9.34）----------
   161 个检测项全平铺 → 8 组折叠 + 默认只看启用项 + 分级标题按需展开 + 数值即时校验。
   组头可点击折叠；组头右侧显示「已启用 N 项」「已改 N 项」，让用户一眼判断该组要不要管。 */

/* 11.1 分组折叠 */
.dim-form-sec > .sec-head { cursor: pointer; user-select: none; }
.dim-form-sec > .sec-head:hover { color: var(--primary-dark); }
.sec-arrow { display: inline-flex; width: 14px; justify-content: center; margin-left: -4px;
  font-size: 11px; color: var(--muted); transform: rotate(90deg); transition: transform .15s ease; }
.dim-form-sec.collapsed > .sec-head { margin-bottom: 0; }
.dim-form-sec.collapsed > .sec-head .sec-arrow { transform: rotate(0deg); }
.dim-form-sec.collapsed > .grid2 { display: none; }
@media (prefers-reduced-motion: reduce) { .sec-arrow { transition: none; } }

/* 11.2 组头摘要标签 */
.sec-count { padding: 1px 8px; border-radius: 20px; background: #eef3ff;
  font-size: 11.5px; font-weight: 400; color: var(--muted); }
.sec-chg { padding: 1px 8px; border-radius: 20px; background: #fff4e0;
  font-size: 11.5px; font-weight: 400; color: #8a5b00; }

/* 11.3 数值即时校验：超范围时红框 + 行内提示（.input-error 已有全局定义） */
.dim-form-sec .ctl { flex-wrap: wrap; }
.num-tip { flex: 0 0 100%; margin-top: 2px; font-size: 11.5px; line-height: 1.4; color: var(--danger); }

/* 10.6 移动端：步骤条收紧，四入口两列排布，规则明细单列 */
@media (max-width: 767px) {
  .det-step-bar { padding: 10px 12px; }
  .dsb-item .dsb-t { font-size: 12.5px; }
  .dsb-line { margin: 0 8px; min-width: 12px; }
  .arg-actions { gap: 8px; }
  .arg-actions .btn { flex: 1 1 calc(50% - 4px); justify-content: center; }
  .rule-inline .rule-grid { grid-template-columns: 1fr; }
  /* 窄屏：文案在上、按钮整行在下（更容易点按） */
  .det-step-next { flex-wrap: wrap; padding: 10px 12px; gap: 8px; }
  .det-step-next .dsn-hint { flex: 1 1 100%; text-align: center; }
  .det-step-next .det-next-btn { flex: 1 1 100%; }
}
