/* ==========================================================
   平台总后台 · 蓝色仪表盘皮肤（v2，2026-10-23 起全页面生效）
   作用域：body.app-pc.theme-v2 —— platform.html 的 body 初始即挂载，
   activate() 每次路由切换保持（原试点期仅 overview / merchants 挂载，已全量）。
   原则：不改动任何业务 JS 与 HTML 结构，只覆盖观感。
   设计语言：明亮蓝主色 + 柔光背景 + 无边界白卡 + 等宽数据 + 低饱和层级。
   ========================================================== */

/* ---------- 柔光背景（替代原平灰） ---------- */
.app-pc.theme-v2 {
  background:
    radial-gradient(1200px 620px at 10% -10%, rgba(86, 140, 255, .15), transparent 60%),
    radial-gradient(900px 520px at 102% -4%, rgba(255, 176, 96, .10), transparent 55%),
    radial-gradient(820px 640px at 104% 102%, rgba(70, 150, 255, .12), transparent 60%),
    #f4f7fd;
  background-attachment: fixed;
}

/* ---------- 侧栏：白透 + 毛玻璃 ---------- */
.app-pc.theme-v2 .sidebar {
  background: rgba(255, 255, 255, .78);
  backdrop-filter: saturate(1.4) blur(14px);
  -webkit-backdrop-filter: saturate(1.4) blur(14px);
  border-right: 1px solid rgba(226, 234, 250, .9);
}
.app-pc.theme-v2 .logo-mark {
  background: linear-gradient(135deg, #3d7bff, #2f5fe8) !important;
  box-shadow: 0 4px 12px rgba(47, 107, 245, .4);
}
.app-pc.theme-v2 .nav-group { color: #9aa6bf; }
.app-pc.theme-v2 .nav-item { color: #5d6b88; }
.app-pc.theme-v2 .nav-item:hover { background: #f3f6fd; color: #2f4a7a; }
.app-pc.theme-v2 .nav-item.active {
  background: linear-gradient(90deg, #eaf1ff, #e1ecff);
  color: #1f4fd6; font-weight: 650;
}
.app-pc.theme-v2 .nav-item.active::before {
  background: linear-gradient(180deg, #3d7bff, #2f5fe8);
}

/* ---------- 顶栏 ---------- */
.app-pc.theme-v2 .topbar {
  background: rgba(255, 255, 255, .82);
  backdrop-filter: saturate(1.4) blur(12px);
  -webkit-backdrop-filter: saturate(1.4) blur(12px);
  border-bottom: 1px solid rgba(226, 234, 250, .9);
  height: 60px;
}
.app-pc.theme-v2 .topbar h2 { font-size: 15.5px; font-weight: 700; color: #152238; letter-spacing: -.01em; }
.app-pc.theme-v2 .topbar h2 .sub { color: #9aa6bf; font-weight: 400; }
.app-pc.theme-v2 .user-chip { background: #f3f6fd; border: 1px solid rgba(226, 234, 250, .9); }
.app-pc.theme-v2 .user-chip .avatar {
  background: linear-gradient(135deg, #3d7bff, #2f5fe8) !important;
  box-shadow: 0 2px 6px rgba(47, 107, 245, .35);
}

/* ---------- 内容区 ---------- */
/* 外距收窄、卡内留白放大（2026-10-23）：白卡左右各向外延伸 10px，
   文字距卡片边缘从 22px 提到 30px —— 观感是「白底更舒展、文字整体右移且不贴边」。 */
.app-pc.theme-v2 .content { padding: 24px 18px 52px; }

/* ---------- 卡片：无边界白卡 + 极轻蓝投影 ---------- */
.app-pc.theme-v2 .card {
  border: 1px solid #e8edf6;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 8px 24px rgba(38, 74, 155, .06);
}
/* 裸卡片（内容直接放在 .card 里、没有 .card-head/.card-body 包裹）此前 padding:0，
   标题与表单第一行紧贴卡片左上边缘，圆角处看起来像被裁掉一块。
   这里补出统一内边距：文字距左边缘 30px、距顶 22px，与有 card-head 的卡片观感一致。 */
.app-pc.theme-v2 .card:not(:has(> .card-head)):not(:has(> .card-body)) {
  padding: 22px 30px;
}
.app-pc.theme-v2 .card-head { padding: 20px 30px 15px; }
.app-pc.theme-v2 .card-head h3 {
  font-size: 15.5px; color: #152238; font-weight: 700; line-height: 24px;
  position: relative; padding-left: 13px;
}
.app-pc.theme-v2 .card-head h3::before {
  content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 3px; height: 15px; border-radius: 2px;
  background: linear-gradient(180deg, #3d7bff, #2f5fe8);
}
.app-pc.theme-v2 .card-head .desc { color: #9aa6bf; }
.app-pc.theme-v2 .card-body { padding: 22px 30px; }
/* 旧版卡片标题（.card-title）：此前没有任何样式，标题与说明同为 14px 深色挤成一句，
   视觉上像文字被截断。这里补出「标题 / 说明」的层级、间距与换行。 */
.app-pc.theme-v2 .card-title {
  display: flex; align-items: center; flex-wrap: wrap; gap: 4px 10px;
  font-size: 14px; font-weight: 650; line-height: 22px; color: #152238;
  margin-bottom: 12px;
}
.app-pc.theme-v2 .card-title .tap,
.app-pc.theme-v2 .card-title .more {
  font-size: 12px; font-weight: 400; line-height: 20px; color: #93a0b8;
}

/* ---------- 统计卡：模块卡 + 彩色顶标 + 等宽数据 ---------- */
/* 按路由确定列数，避免末行孤卡：大盘 11 项排 4 列（4+4+3，卡片更宽）；商户 5 项单行铺满 */
.app-pc.theme-v2[data-view="overview"] .stat-grid { grid-template-columns: repeat(4, 1fr); }
.app-pc.theme-v2[data-view="merchants"] .stat-grid { grid-template-columns: repeat(5, 1fr); }
.app-pc.theme-v2 .stat {
  border: 1px solid #e8edf6;
  border-radius: 14px;
  background: #fff;
  box-shadow: 0 6px 18px rgba(38, 74, 155, .05);
  padding: 16px 18px 14px;
  overflow: hidden;
}
.app-pc.theme-v2 .stat::before { background: #cbd8f5; opacity: 1; }
.app-pc.theme-v2 .stat.b-blue::before   { background: linear-gradient(90deg, #3d7bff, #2f6fe8); }
.app-pc.theme-v2 .stat.b-green::before  { background: linear-gradient(90deg, #1fb87c, #16a06b); }
.app-pc.theme-v2 .stat.b-purple::before { background: linear-gradient(90deg, #6f8cff, #5a76f6); }
.app-pc.theme-v2 .stat.b-orange::before { background: linear-gradient(90deg, #f0a64a, #e79b38); }
.app-pc.theme-v2 .stat.b-red::before    { background: linear-gradient(90deg, #f5837a, #ef6a6a); }
.app-pc.theme-v2 .stat.b-cyan::before   { background: linear-gradient(90deg, #36c0e6, #2bb6e0); }
.app-pc.theme-v2 .stat.b-gray::before   { background: linear-gradient(90deg, #b6bfcf, #aab3c5); }
.app-pc.theme-v2 .stat .label { color: #5d6b88; font-weight: 550; }
.app-pc.theme-v2 .stat .value {
  font-size: 25px; color: #152238; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; margin-top: 7px;
}
.app-pc.theme-v2 .stat .foot { color: #9aa6bf; margin-top: 5px; }

/* ---------- 表格（商户列表） ---------- */
.app-pc.theme-v2 table.tbl { font-size: 13px; }
.app-pc.theme-v2 table.tbl th {
  background: #f5f8ff; color: #5d6b88; font-weight: 650;
  border-bottom: 1px solid #e8edf6; padding: 12px 16px;
}
.app-pc.theme-v2 table.tbl td { padding: 14px 16px; border-bottom: 1px solid #f1f4fa; }
.app-pc.theme-v2 table.tbl tbody tr:hover { background: #f3f8ff; }
.app-pc.theme-v2 table.tbl td:first-child { color: #152238; }
.app-pc.theme-v2 table.tbl .btn-primary { background: #eaf1ff; border-color: #c9dcfd; color: #1f4fd6; }
/* 操作列（多为「预览 / 下载 / 绑定」并排小按钮）：默认 inline 空白会把按钮挤成两行、
   行高翻倍，视觉上像被切。这里禁止换行并统一按钮间距，列宽由表格自适应让出。 */
.app-pc.theme-v2 table.tbl td:last-child:has(.btn) { white-space: nowrap; }
.app-pc.theme-v2 table.tbl td:last-child .btn + .btn { margin-left: 6px; }

/* ---------- 输入控件聚焦环 ---------- */
.app-pc.theme-v2 .input, .app-pc.theme-v2 .select, .app-pc.theme-v2 .textarea {
  border-color: #dfe6f2; border-radius: 9px;
}
.app-pc.theme-v2 .input:hover, .app-pc.theme-v2 .select:hover, .app-pc.theme-v2 .textarea:hover { border-color: #c6d3ec; }
.app-pc.theme-v2 .input:focus, .app-pc.theme-v2 .select:focus, .app-pc.theme-v2 .textarea:focus {
  border-color: #2f6bf5; box-shadow: 0 0 0 3px rgba(47, 107, 245, .12); outline: none;
}
/* ---------- 输入控件：文字垂直居中、不被切边（2026-10-23） ----------
   尺寸/行高统一在 app.css 的 `.app-pc .input/.select` 里定义（桌面端所有后台共用 42px），
   这里只把同排按钮拉到同一高度，避免筛选行 1px 错位。 */
.app-pc.theme-v2 .filterbar:has(> .input) > .btn,
.app-pc.theme-v2 .filterbar:has(> .select) > .btn,
.app-pc.theme-v2 .filterbar:has(> .field) > .btn { height: 42px; }

/* ---------- 表单标签：行高补足，字形上下不被裁（2026-10-23） ----------
   `.field label` 原为 12.5px + line-height:normal（≈15px），中文字形实际行盒
   接近 17px，字重 600 时上下会顶出被切；这里给到 20px 行盒，并与输入框留 7px。 */
.app-pc.theme-v2 .field > label,
.app-pc.theme-v2 .field label {
  display: block; line-height: 20px; margin-bottom: 7px; font-size: 12.5px;
}

/* ---------- 进度条（各营销模块使用情况） ---------- */
.app-pc.theme-v2 .bar { background: #eef2fb; border-radius: 999px; height: 8px; overflow: hidden; }
.app-pc.theme-v2 .bar i { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, #3d7bff, #2f6fe8); }
.app-pc.theme-v2 .bar.green i { background: linear-gradient(90deg, #1fb87c, #16a06b); }

/* ---------- 主按钮：蓝色渐变 + 蓝投影 ---------- */
/* 说明：主按钮的渐变/描边/投影统一在文件后部「按钮体量升级」段声明（单一口径），
   因为 .btn 的淡蓝底权重与 .btn-primary 相同、且写在后面，必须在其后覆盖才能生效。 */
.app-pc.theme-v2 .btn-primary:active { transform: translateY(0); }

/* ---------- 大盘图表：交易额趋势 + 商户类型分布 ---------- */
.app-pc.theme-v2 .ov-charts {
  display: grid;
  grid-template-columns: minmax(0, 1.62fr) minmax(0, 1fr);
  gap: 16px;
  margin-bottom: 16px;
}
@media (max-width: 1180px) {
  .app-pc.theme-v2 .ov-charts { grid-template-columns: 1fr; }
}
.app-pc.theme-v2 .ov-card { display: flex; flex-direction: column; margin: 0; }
.app-pc.theme-v2 .ov-card .card-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 12px; padding-bottom: 8px;
}
.app-pc.theme-v2 .ov-legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: #5d6b88; white-space: nowrap; }
.app-pc.theme-v2 .ov-legend span { display: inline-flex; align-items: center; }
.app-pc.theme-v2 .ov-lg-bar {
  width: 14px; height: 3px; border-radius: 2px; display: inline-block;
  margin-right: 6px; vertical-align: middle;
}
.app-pc.theme-v2 .ov-lg-bar.blue { background: linear-gradient(90deg, #3d7bff, #2f5fe8); }
.app-pc.theme-v2 .ov-lg-bar.orange { background: repeating-linear-gradient(90deg, #f0a64a 0 4px, transparent 4px 8px); }
.app-pc.theme-v2 .ov-head-total {
  font-size: 12px; color: #6b7891; background: #f3f6fd; border: 1px solid #e8edf6;
  border-radius: 999px; padding: 3px 10px; white-space: nowrap;
}

/* 趋势图 */
.app-pc.theme-v2 .ov-trend-wrap { position: relative; padding: 4px 18px 8px; flex: 1; display: flex; align-items: center; }
.app-pc.theme-v2 .ov-trend-svg { width: 100%; height: auto; display: block; }
.app-pc.theme-v2 .ov-grid { stroke: #eef2fa; stroke-width: 1; }
.app-pc.theme-v2 .ov-axis { font-size: 11px; fill: #9aa6bf; font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-line-amount { fill: none; stroke: #2f6bf5; stroke-width: 2.4; stroke-linecap: round; }
.app-pc.theme-v2 .ov-line-count {
  fill: none; stroke: #f0a64a; stroke-width: 1.8;
  stroke-dasharray: 5 5; stroke-linecap: round; opacity: .92;
}
.app-pc.theme-v2 .ov-dot { fill: #fff; stroke: #2f6bf5; stroke-width: 2; }
.app-pc.theme-v2 .ov-guide { stroke: #c9d8f5; stroke-width: 1; stroke-dasharray: 3 4; }
.app-pc.theme-v2 .ov-guide-dot { fill: #2f6bf5; stroke: #fff; stroke-width: 2.5; }
.app-pc.theme-v2 .ov-tip {
  position: absolute; transform: translate(-50%, -100%);
  min-width: 136px; padding: 9px 11px; border-radius: 10px;
  background: rgba(21, 34, 56, .93); color: #fff;
  font-size: 11.5px; line-height: 1.65; white-space: nowrap;
  box-shadow: 0 10px 22px rgba(21, 34, 56, .22);
  pointer-events: none; z-index: 3;
}
.app-pc.theme-v2 .ov-tip b { display: block; margin-bottom: 2px; font-size: 11.5px; font-weight: 600; opacity: .82; letter-spacing: .02em; }
.app-pc.theme-v2 .ov-tip div { font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-tip-k { display: inline-block; width: 7px; height: 7px; border-radius: 2px; margin-right: 6px; }
.app-pc.theme-v2 .ov-tip-k.blue { background: #6fa2ff; }
.app-pc.theme-v2 .ov-tip-k.orange { background: #f0a64a; }
.app-pc.theme-v2 .ov-chart-foot {
  margin-top: auto; padding: 10px 22px 14px;
  font-size: 11.5px; color: #9aa6bf; border-top: 1px dashed #eef2fa;
  font-variant-numeric: tabular-nums;
}

/* 环形图 + 图例 */
.app-pc.theme-v2 .ov-donut { display: flex; align-items: center; gap: 16px; }
.app-pc.theme-v2 .ov-donut-svg { flex: 0 0 158px; width: 158px; }
.app-pc.theme-v2 .ov-donut-svg svg { width: 100%; height: auto; display: block; }
.app-pc.theme-v2 .ov-donut-num { font-size: 24px; font-weight: 700; fill: #152238; font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-donut-cap { font-size: 10.5px; fill: #9aa6bf; }
.app-pc.theme-v2 .ov-donut-legend { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.app-pc.theme-v2 .ov-dl-row { display: flex; align-items: center; gap: 8px; font-size: 12.5px; }
.app-pc.theme-v2 .ov-dl-row i { width: 8px; height: 8px; border-radius: 3px; flex: 0 0 8px; }
.app-pc.theme-v2 .ov-dl-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #152238; font-weight: 500; }
.app-pc.theme-v2 .ov-dl-val { color: #5d6b88; font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-dl-pct { width: 36px; text-align: right; color: #1f4fd6; font-weight: 600; font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-empty { padding: 44px 0; text-align: center; color: #9aa6bf; font-size: 12.5px; }
.app-pc.theme-v2 .ov-donut-body { flex: 1; display: flex; align-items: center; }
.app-pc.theme-v2 .ov-donut { width: 100%; }
.app-pc.theme-v2 .ov-donut-svg { flex: 0 0 176px; width: 176px; }

/* ---------- 大盘「最近订单 / 待办事项」 ---------- */
.app-pc.theme-v2 .ov-feeds {
  display: grid;
  grid-template-columns: minmax(0, 1.62fr) minmax(0, 1fr);
  gap: 16px;
  margin-bottom: 16px;
}
@media (max-width: 1180px) {
  .app-pc.theme-v2 .ov-feeds { grid-template-columns: 1fr; }
}
.app-pc.theme-v2 .ov-feeds .card { margin: 0; }
.app-pc.theme-v2 .ov-feeds .card-head { align-items: center; padding-bottom: 6px; }
.app-pc.theme-v2 .ov-more {
  font-size: 12px; color: #1f4fd6; text-decoration: none; white-space: nowrap;
  padding: 3px 8px; border-radius: 7px; transition: background .15s;
}
.app-pc.theme-v2 .ov-more:hover { background: #eef3ff; }

/* 订单表：网格行，金额/时间等宽右对齐便于纵向比大小 */
.app-pc.theme-v2 .ov-tbl { padding: 0 8px 8px; }
.app-pc.theme-v2 .ov-tr {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(0, 1.15fr) 84px 76px 80px;
  align-items: center; gap: 10px;
  padding: 10px 12px; border-radius: 9px;
  font-size: 12.5px; color: #33415c;
  transition: background .13s;
}
.app-pc.theme-v2 .ov-tr + .ov-tr { box-shadow: inset 0 1px 0 #f1f5fb; }
.app-pc.theme-v2 .ov-tr:not(.ov-th):hover { background: #f7faff; }
.app-pc.theme-v2 .ov-th {
  font-size: 11.5px; color: #93a0b8; letter-spacing: .02em; font-weight: 500;
  padding-top: 2px; padding-bottom: 7px; box-shadow: none !important; border-radius: 0;
}
.app-pc.theme-v2 .ov-th span:nth-child(3),
.app-pc.theme-v2 .ov-th span:nth-child(5) { text-align: right; }
.app-pc.theme-v2 .ov-no {
  font-variant-numeric: tabular-nums; letter-spacing: -.01em;
  color: #152238; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.app-pc.theme-v2 .ov-mch { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-pc.theme-v2 .ov-amt {
  text-align: right; font-variant-numeric: tabular-nums;
  color: #152238; font-weight: 650;
}
.app-pc.theme-v2 .ov-time {
  text-align: right; font-variant-numeric: tabular-nums;
  color: #93a0b8; font-size: 12px;
}
.app-pc.theme-v2 .ov-st {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 11.5px; font-style: normal; font-weight: 550;
  padding: 2px 8px 2px 7px; border-radius: 999px; white-space: nowrap;
}
.app-pc.theme-v2 .ov-st::before {
  content: ''; width: 5px; height: 5px; border-radius: 50%;
  background: currentColor; opacity: .9;
}
.app-pc.theme-v2 .ov-st.green { color: #0f9a63; background: #e8f8f0; }
.app-pc.theme-v2 .ov-st.blue { color: #2f6bf5; background: #eaf1ff; }
.app-pc.theme-v2 .ov-st.orange { color: #d98a2b; background: #fff4e4; }
.app-pc.theme-v2 .ov-st.red { color: #e0584f; background: #fdecea; }
.app-pc.theme-v2 .ov-st.gray { color: #7d8aa3; background: #f0f3f9; }

/* 待办列表 */
.app-pc.theme-v2 .ov-todo-list { padding: 2px 10px 10px; display: flex; flex-direction: column; gap: 2px; }
.app-pc.theme-v2 .ov-todo-row {
  display: flex; align-items: center; gap: 11px;
  padding: 9px 10px; border-radius: 10px;
  text-decoration: none; color: inherit;
  transition: background .15s, transform .1s;
}
.app-pc.theme-v2 .ov-todo-row:hover { background: #f7faff; }
.app-pc.theme-v2 .ov-todo-row:active { transform: scale(.995); }
.app-pc.theme-v2 .ov-todo-ic {
  width: 30px; height: 30px; border-radius: 9px; flex: 0 0 30px;
  display: inline-flex; align-items: center; justify-content: center;
}
.app-pc.theme-v2 .ov-todo-ic svg {
  width: 15px; height: 15px; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round;
}
.app-pc.theme-v2 .ov-todo-ic.orange { background: #fff4e6; color: #e0902f; }
.app-pc.theme-v2 .ov-todo-ic.blue { background: #eaf1ff; color: #2f6bf5; }
.app-pc.theme-v2 .ov-todo-ic.green { background: #e9f9f1; color: #12a06a; }
.app-pc.theme-v2 .ov-todo-ic.gray { background: #f1f4f9; color: #8794ac; }
.app-pc.theme-v2 .ov-todo-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.app-pc.theme-v2 .ov-todo-txt b { font-size: 12.5px; font-weight: 600; color: #152238; }
.app-pc.theme-v2 .ov-todo-txt small {
  font-size: 11px; color: #9aa6bf;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.app-pc.theme-v2 .ov-todo-n {
  font-size: 17px; font-weight: 700; color: #152238;
  font-variant-numeric: tabular-nums; padding-left: 4px;
}
.app-pc.theme-v2 .ov-todo-row.zero .ov-todo-n { color: #c2cbdb; font-weight: 600; }
.app-pc.theme-v2 .ov-todo-row.zero .ov-todo-ic { opacity: .5; }

/* ---------- 大盘「商户开通转化」漏斗 ---------- */
.app-pc.theme-v2 .ov-funnel { margin-bottom: 16px; }
.app-pc.theme-v2 .ov-flow {
  display: grid; grid-template-columns: minmax(0, 1fr) 252px; gap: 20px;
  align-items: center; padding: 16px 20px 18px;
}
.app-pc.theme-v2 .ov-steps { display: flex; align-items: flex-start; justify-content: space-between; position: relative; }
.app-pc.theme-v2 .ov-steps::before {
  content: ""; position: absolute; left: 30px; right: 30px; top: 21px; height: 2px;
  background: linear-gradient(90deg, #2f6bf5 0%, #5b8bf8 calc(var(--done, 1) * 100%), #e6ecfa calc(var(--done, 1) * 100%), #e6ecfa 100%);
  border-radius: 2px;
}
.app-pc.theme-v2 .ov-step { position: relative; z-index: 1; text-align: center; flex: 1; min-width: 0; }
.app-pc.theme-v2 .ov-dot {
  width: 42px; height: 42px; border-radius: 13px; margin: 0 auto 9px;
  display: flex; align-items: center; justify-content: center;
  background: #fff; border: 1px solid #e8edf6; box-shadow: 0 3px 10px rgba(38, 74, 155, .07);
}
.app-pc.theme-v2 .ov-dot svg {
  width: 18px; height: 18px; fill: none; stroke: #9aa6bf;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round;
}
.app-pc.theme-v2 .ov-step.done .ov-dot {
  background: linear-gradient(140deg, #3d7bff, #2f5fe8);
  border-color: transparent; box-shadow: 0 6px 16px rgba(47, 107, 245, .26);
}
.app-pc.theme-v2 .ov-step.done .ov-dot svg { stroke: #fff; }
.app-pc.theme-v2 .ov-nm { font-size: 12.5px; color: #5d6b88; font-weight: 550; }
.app-pc.theme-v2 .ov-ct { font-size: 11.5px; color: #9aa6bf; margin-top: 2px; font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .ov-step.done .ov-nm { color: #152238; font-weight: 600; }
.app-pc.theme-v2 .ov-gauge { display: flex; align-items: center; gap: 14px; border-left: 1px dashed #e6ecfa; padding-left: 20px; }
.app-pc.theme-v2 .ov-gauge-txt .t { font-size: 12px; color: #9aa6bf; }
.app-pc.theme-v2 .ov-gauge-txt .v { font-size: 15px; font-weight: 700; color: #152238; margin-top: 2px; }
.app-pc.theme-v2 .ov-gauge-txt .cmp { font-size: 11.5px; font-weight: 600; margin-top: 3px; }
.app-pc.theme-v2 .ov-gauge-txt .cmp.up { color: #0f9a63; }
.app-pc.theme-v2 .ov-gauge-txt .cmp.down { color: #e0584f; }
.app-pc.theme-v2 .ov-f-rate { color: #1f4fd6; }
@media (max-width: 1180px) {
  .app-pc.theme-v2 .ov-flow { grid-template-columns: 1fr; }
  .app-pc.theme-v2 .ov-gauge { border-left: none; padding-left: 0; }
}

/* ==========================================================
   全量落地补充（2026-10-23）：theme-v2 已作用于所有页面，
   以下把散落在 app.css / pc-skin.css 里的紫色、靛蓝残留统一到蓝色系。
   ========================================================== */

/* 文本选择色（原靛蓝） */
.app-pc.theme-v2 ::selection { background: rgba(47, 107, 245, .18); }

/* 页签激活态（原硬编码紫 #7c3aed → 蓝） */
.app-pc.theme-v2 .tab-item.on { color: #1f4fd6; border-bottom-color: #2f6bf5; }
.app-pc.theme-v2 .tab-item:hover { color: #2f6bf5; }

/* 紫色标签 → 蓝（tag-purple 用于平台后台几处状态标注） */
.app-pc.theme-v2 .tag-purple { background: #eef2ff; color: #3b5bdb; border-color: #d8e2fd; }

/* 论坛列表「展示分类」chip（原紫 #7B5CE6 → 蓝） */
.app-pc.theme-v2 .chip-cat { background: #eaf1ff; color: #1f4fd6; }

/* 套餐选择格（年费设置弹窗，原紫描边/紫字 → 蓝） */
.app-pc.theme-v2 .plan-cell.on { border-color: #2f6bf5; background: #f5f8ff; box-shadow: 0 0 0 3px rgba(47, 107, 245, .08); }
.app-pc.theme-v2 .plan-cell .pc-price { color: #1f4fd6; }

/* 授权页收入进度条（原紫→粉渐变 → 蓝渐变） */
.app-pc.theme-v2 .lic-bar > i { background: linear-gradient(90deg, #3d7bff, #2f5fe8); }

/* 图标磁贴紫色变体 → 蓝 */
.app-pc.theme-v2 .icon-tile.purple { background: #eaf1ff; color: #2f6bf5; }

/* ---------- 论坛「新建文章/视频」弹窗：靛紫 → 蓝 ---------- */
.app-pc.theme-v2 .fp-sec { border-color: #e8edf6; }
.app-pc.theme-v2 .fp-sec-no {
  background: linear-gradient(135deg, #3d7bff, #2f5fe8);
  box-shadow: 0 2px 6px rgba(47, 107, 245, .35);
}
.app-pc.theme-v2 .fp-tip { background: #f2f7ff; border-left-color: #b4ccf7; }
.app-pc.theme-v2 .rte-toolbar { background: #f5f8ff; border-color: #e3eaf6; }
.app-pc.theme-v2 .rte-btn { border-color: #e3eaf6; }
.app-pc.theme-v2 .rte-btn:hover { background: #eaf1ff; border-color: #b9cff8; color: #1f4fd6; }
.app-pc.theme-v2 .rte-btn.on { background: linear-gradient(135deg, #5b91ff, #4479f2); border-color: transparent; }
.app-pc.theme-v2 .rte-sep { background: #e3eaf6; }
.app-pc.theme-v2 .rte-body:focus { border-color: #8fb4f8; box-shadow: 0 0 0 3px rgba(47, 107, 245, .1); }

/* ---------- 风控管理页：数字列对齐 + 占比条 + 规则双列卡片 ---------- */
.app-pc.theme-v2 .risk-tbl th.ta-r,
.app-pc.theme-v2 .risk-tbl td.ta-r { text-align: right; }
.app-pc.theme-v2 .risk-tbl td.num { font-variant-numeric: tabular-nums; }
.app-pc.theme-v2 .risk-bar { display: flex; align-items: center; gap: 10px; min-width: 150px; }
.app-pc.theme-v2 .risk-bar .bar { flex: 1; height: 7px; }
.app-pc.theme-v2 .risk-pct {
  width: 34px; text-align: right; flex: 0 0 34px;
  font-size: 11.5px; color: #5d6b88; font-variant-numeric: tabular-nums;
}
.app-pc.theme-v2 .risk-rules {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px;
}
@media (max-width: 900px) {
  .app-pc.theme-v2 .risk-rules { grid-template-columns: 1fr; }
}
.app-pc.theme-v2 .risk-rule {
  display: flex; align-items: flex-start; gap: 11px;
  padding: 13px 15px; border-radius: 12px;
  background: #f8fafe; border: 1px solid #edf1f9;
  transition: border-color .15s, background .15s;
}
.app-pc.theme-v2 .risk-rule:hover { border-color: #d5e3fb; background: #f5f8ff; }
.app-pc.theme-v2 .risk-ic {
  width: 22px; height: 22px; border-radius: 7px; flex: 0 0 22px; margin-top: 1px;
  display: inline-flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, #e9f9f1, #d7f4e4); color: #0f9a63;
}
.app-pc.theme-v2 .risk-ic svg {
  width: 12px; height: 12px; fill: none; stroke: currentColor;
  stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round;
}
.app-pc.theme-v2 .risk-txt { min-width: 0; }
.app-pc.theme-v2 .risk-txt b {
  display: block; font-size: 13px; font-weight: 650;
  color: #152238; margin-bottom: 3px; letter-spacing: -.01em;
}
.app-pc.theme-v2 .risk-txt span { display: block; font-size: 12px; color: #7d8aa3; line-height: 1.7; }

/* ---------- 结算页「阶梯倒扣口径」：字段与按钮同列对齐 ---------- */
/* 四档费率字段与三个保存按钮共用同一 4 列模板：按钮落在 S / T / C 字段正下方，
   首列占位对齐只读的 R 列；窄屏字段 2 列、按钮 3 列各自换排 */
.app-pc.theme-v2 .rate-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.app-pc.theme-v2 .rate-actions { margin-top: 14px; gap: 12px; }
.app-pc.theme-v2 .rate-actions .btn { width: 100%; }
@media (max-width: 1100px) {
  .app-pc.theme-v2 .rate-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .app-pc.theme-v2 .rate-actions { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .app-pc.theme-v2 .rate-spacer { display: none; }
}

/* ---------- 按钮体量升级：更疏朗、更挺拔（2026-10-23） ---------- */
/* 默认按钮：淡蓝底 + 淡蓝描边（2026-10-23 二次调整，原来是近白灰底），
   悬停底色加深、文字转主蓝；主按钮保留蓝色渐变，需在 .btn 之后重新声明，
   否则同权重下会被 .btn 的淡蓝底覆盖；表格内软色按钮同步放大；
   页签 / 胶囊 Tab 增加呼吸感。富文本工具栏 rte-btn 保持紧凑，不放大。 */
.app-pc.theme-v2 .btn {
  padding: 10px 18px; border-radius: 9px;
  font-weight: 600; letter-spacing: .01em;
  background: #e7effd; border-color: #c3d7f6; color: #2a3a56;
}
.app-pc.theme-v2 .btn:hover { background: #d8e6fc; border-color: #a3c2f2; color: #1f4fd6; }
.app-pc.theme-v2 .btn:active { transform: translateY(1px); }
.app-pc.theme-v2 .btn-sm { padding: 7px 14px; font-size: 12.5px; border-radius: 8px; }
.app-pc.theme-v2 .btn-lg { padding: 13px 26px; font-size: 15px; border-radius: 11px; }
/* 实心按钮：重新盖回各自的品牌底色（.btn 的淡蓝底权重更高，必须显式覆盖） */
/* 2026-10-23 二次调整：主色渐变整体调浅一档（#3d7bff→#2f5fe8 偏深偏艳），
   改为 #5b91ff→#4479f2，投影同步转淡，白字仍保持清晰。 */
.app-pc.theme-v2 .btn-primary {
  padding: 10px 20px;
  background: linear-gradient(180deg, #5b91ff, #4479f2);
  border-color: #4479f2; color: #fff;
  box-shadow: 0 6px 16px rgba(68, 121, 242, .26), inset 0 1px 0 rgba(255, 255, 255, .32);
}
.app-pc.theme-v2 .btn-primary:hover {
  background: linear-gradient(180deg, #6ea0ff, #5186f8); border-color: #5186f8; color: #fff;
  box-shadow: 0 9px 22px rgba(68, 121, 242, .34), inset 0 1px 0 rgba(255, 255, 255, .32);
  transform: translateY(-1px);
}
.app-pc.theme-v2 .btn-green { background: var(--green); border-color: var(--green); color: #fff; box-shadow: 0 4px 12px rgba(7, 193, 96, .26); }
.app-pc.theme-v2 .btn-green:hover { background: var(--green); border-color: var(--green); color: #fff; filter: brightness(.95); }
.app-pc.theme-v2 .btn-danger { background: var(--red); border-color: var(--red); color: #fff; }
.app-pc.theme-v2 .btn-danger:hover { background: var(--red); border-color: var(--red); color: #fff; filter: brightness(.95); }
.app-pc.theme-v2 .btn-ghost { background: transparent; border-color: transparent; box-shadow: none; }
/* 表格内软色按钮：略放大，保证点击面积 */
.app-pc.theme-v2 table.tbl .btn { padding: 6px 13px; border-radius: 8px; font-weight: 600; }
/* 页签与胶囊 Tab */
.app-pc.theme-v2 .tab-item { padding: 10px 16px; }
.app-pc.theme-v2 .fx-tabs button { padding: 9px 24px; font-size: 13.5px; }

/* ---------- 筛选行：按钮与输入框文字行对齐（2026-10-23） ---------- */
/* 根因：.field 自带 margin-bottom:14px，而筛选行用 align-items:flex-end 对齐的是
   外边距盒 —— 字段的下外距把按钮一起推低了 14px，导致文字行错位。
   这里清掉字段下外距（行内已有 gap 负责间距），并把筛选按钮拉到与 .input/.select
   同高（42px，见上方「输入控件」一节），字行自然齐平。
   仅对「含字段的筛选行」生效，纯按钮的页签条（如收款码页顶部 Tab）不受影响。 */
.app-pc.theme-v2 .filterbar > .field { margin-bottom: 0; }
.app-pc.theme-v2 .filterbar:has(> .field) > .btn {
  height: 42px; padding-top: 0; padding-bottom: 0;
  align-self: flex-end;
}
.app-pc.theme-v2 .filterbar:has(> .field) > .btn-sm { padding-left: 18px; padding-right: 18px; font-size: 13px; }
