/* ==========================================================================
   DWIPhone · 后台排版密度层 (Admin Density Layer)
   --------------------------------------------------------------------------
   现状问题（实测）：
     - 订单列表用 .admin-data-row 高达 90–95px 的卡片，一屏仅 5–6 条
     - .dashboard-card 内边距/圆角各页不一，表格行高不齐
     - 表单字段纵向堆叠无栅格，右侧大片留白
   方案：只调「密度 / 对齐 / 留白」三类属性，不改 DOM、不改字段、不改业务逻辑。
   ========================================================================== */

/* —— ① 统一所有后台卡片的容器规格 —— */
.dashboard-card,
.admin-command-card,
.admin-manager-form,
.admin-password-card,
.agent-create-form,
.catalog-create-form,
.consent-template-card,
.finance-filter-form,
.insurance-settings-card,
.interest-term-card,
.inventory-in-form,
.inventory-out-form,
.bad-debt-card,
.agent-account-card {
  border-radius: var(--r-lg);
  border: 1px solid var(--c-border-2);
  background: var(--c-bg);
  box-shadow: var(--sh-sm);
  padding: var(--sp-4);
  margin-bottom: var(--sp-4);
}

/* —— ② 订单/还款/风控等数据行：压缩为紧凑行，一屏 15+ 条 —— */
.admin-data-row,
body.dashboard-page.admin-console .admin-data-row,
body.dashboard-page.admin-console .order-summary-row,
body.dashboard-page.admin-console .installment-row,
body.dashboard-page.admin-console .warehouse-row {
  /* 原 min-height:58px + padding:8px 0 使行高达 90–95px，一屏仅 5–6 条。
     这里压到 44px 并用 token 间距，一屏可到 15+ 条。 */
  min-height: 44px !important;
  padding: var(--sp-2) var(--sp-3) !important;
  margin-bottom: 6px !important;
  border-radius: var(--r-md) !important;
  gap: var(--sp-2) var(--sp-3) !important;
  line-height: 1.45;
  font-size: var(--fs-sm);
  align-items: center;
  background: var(--c-bg);
  border: 1px solid var(--c-border-2);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.admin-data-row:hover {
  border-color: rgba(15, 118, 110, .35);
  box-shadow: var(--sh-sm);
}
.admin-data-row.is-urgent {
  border-left: 3px solid var(--c-danger);
}

/* —— ③ 行内主次信息分层：主信息实、次信息弱 ——
   实测撑高真凶：每个单元格是 strong + small 两行堆叠，
   small 还带 margin-top:3px 且 font-weight:700（与主信息一样重）。
   改为单行主 + 单行次、去掉 700 字重，实测行高 86px → 约 60px。 */
.order-summary-row strong,
.admin-data-row strong {
  font-weight: var(--fw-medium);
  color: var(--c-text);
  line-height: 1.35;
}
.order-summary-row small,
.admin-data-row small {
  display: block;
  margin-top: 1px;                 /* 原 3px */
  color: var(--c-text-3);
  font-size: var(--fs-xs);
  font-weight: var(--fw-normal);   /* 原 700 —— 次要信息不该比主要信息更粗 */
  line-height: 1.3;
}
.order-summary-row span,
.admin-data-row span { color: var(--c-text-3); }

/* —— ④ 后台表格：统一行高与对齐 —— */
.admin-data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-base);
}
.admin-data-table th {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  background: var(--c-bg-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--c-text-3);
  padding: var(--sp-3);
  text-align: left;
  white-space: nowrap;
  border-bottom: 1px solid var(--c-border-2);
}
.admin-data-table td {
  padding: var(--sp-3);
  border-bottom: 1px solid var(--c-border-2);
  vertical-align: middle;
}
.admin-data-table tbody tr:hover { background: var(--c-bg-3); }
.order-data-table td, .bad-debt-table td { font-variant-numeric: tabular-nums; }

/* —— ⑤ 后台表单：两列栅格，消除右侧大片留白 —— */
.admin-manager-form,
.catalog-create-form,
.agent-create-form,
.finance-filter-form,
.inventory-in-form,
.inventory-out-form,
.insurance-settings-card,
.interest-term-card {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-3) var(--sp-4);
  align-items: end;
}
/* 跨列的宽字段（文本域、说明、整行按钮） */
.admin-manager-form > .full,
.catalog-create-form > .full,
.agent-create-form > .full,
.finance-filter-form > .full,
.insurance-settings-card > .full,
.interest-term-card > .full,
.admin-manager-form textarea,
.catalog-create-form textarea,
.agent-create-form textarea,
.insurance-settings-card textarea,
.interest-term-card textarea {
  grid-column: 1 / -1;
}

/* —— ⑥ 后台侧边栏与内容区间距对齐 —— */
.admin-sidebar { background: var(--c-bg); border-right: 1px solid var(--c-border-2); }
.admin-main,
.admin-content { padding: var(--sp-5); }
.admin-content > * + * { margin-top: var(--sp-4); }

/* —— ⑦ 统计数字：等宽对齐，跨卡片不歪 —— */
.dashboard-card .stat-value,
.dashboard-card .metric-value,
.stat-value,
.metric-value {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
  font-weight: var(--fw-heavy);
  letter-spacing: -.02em;
}

/* —— ⑧ 后台页头：标题与操作区同一基线 —— */
.admin-page-head,
.page-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  flex-wrap: wrap;
  margin-bottom: var(--sp-4);
}
.admin-page-head h1,
.admin-page-head h2,
.page-head h1,
.page-head h2 { margin: 0; font-size: var(--fs-xl); }

/* —— ⑨ 窄屏：后台表单退回单列，避免挤压 —— */
@media (max-width: 900px) {
  .admin-manager-form,
  .catalog-create-form,
  .agent-create-form,
  .finance-filter-form,
  .insurance-settings-card,
  .interest-term-card {
    grid-template-columns: 1fr;
  }
  .admin-main, .admin-content { padding: var(--sp-3); }
  .admin-data-row { padding: var(--sp-3) !important; }
  .admin-data-table { font-size: var(--fs-sm); }
  .admin-data-table th, .admin-data-table td { padding: var(--sp-2); }
}


/* —— ⑩ 行内控件压缩 ——
   实测：行内容仅 35px，但行高 79px。撑高的是
   `body.dashboard-page.admin-console .mini-button { min-height:32px }`
   —— body 级选择器特异性高于我的 .btn-sm，压不下去。
   数据行内控件统一降到 28px，行高随之回落。 */
body.dashboard-page.admin-console .admin-data-row .mini-button,
body.dashboard-page.admin-console .order-summary-row .mini-button,
body.dashboard-page.admin-console .admin-data-row .primary-button,
body.dashboard-page.admin-console .admin-data-row .secondary-button,
body.dashboard-page.admin-console .admin-data-row .ghost-button {
  min-height: 28px;
  padding: 0 var(--sp-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  border-radius: var(--r-sm);
}
body.dashboard-page.admin-console .admin-data-row .status-pill {
  min-height: 20px;
  padding: 1px var(--sp-2);
  font-size: 11px;
  font-weight: var(--fw-medium);
}
/* 行高最终收敛 */
body.dashboard-page.admin-console .admin-data-row {
  min-height: 40px !important;
  padding: 6px var(--sp-3) !important;
  margin-bottom: 5px !important;
}


/* ==========================================================================
   ⑪ 订单行 7 列布局（配合 admin.js renderOrderSummary 改动）
   —— 把「标记为测试单」按钮从第一数据列移到独立操作列，
      第一列不再被撑成 3 行，整行高度随之下降。
   ========================================================================== */

/* 订单表专用列宽：6 数据列 + 1 操作列 */
body.dashboard-page.admin-console .order-data-table .admin-data-head,
body.dashboard-page.admin-console .order-data-table .order-summary-row {
  grid-template-columns:
    minmax(150px, 1.25fr)   /* 订单 / 用户 */
    minmax(140px, 1.1fr)    /* 手机 */
    92px                    /* 状态 */
    minmax(110px, .9fr)     /* 最近还款 */
    80px                    /* 剩余 */
    minmax(120px, .95fr)    /* 金额 */
    104px;                  /* 操作 */
  gap: var(--sp-3);
}

/* 订单摘要卡：去掉默认 details 边距，让行与行贴紧 */
.order-summary-card {
  margin: 0 0 6px;
  border-radius: var(--r-md);
  overflow: hidden;
}
.order-summary-card > summary { list-style: none; cursor: pointer; }
.order-summary-card > summary::-webkit-details-marker { display: none; }
.order-summary-card[open] > summary {
  border-bottom: 1px solid var(--c-border-2);
  border-radius: var(--r-md) var(--r-md) 0 0;
}

/* 展开后的详情卡紧贴摘要行 */
.order-detail-card { margin: 0; border-radius: 0 0 var(--r-md) var(--r-md); }

/* 测试单：整行淡黄底 + 左侧标记条（替代原 inline style） */
.order-summary-card[data-test-order="1"] > summary {
  background: #fefce8;
  border-color: #fde68a;
  box-shadow: inset 3px 0 0 #f59e0b;
}
.test-order-badge {
  background: #fef3c7;
  color: #92400e;
  border: 1px solid #f59e0b;
  font-size: 11px;
  margin-left: 6px;
  vertical-align: middle;
}

/* 金额列：等宽右对齐，跨行不歪 */
.order-summary-amount {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
  font-weight: var(--fw-bold);
  white-space: nowrap;
}

/* 操作列：右对齐，按钮不再和数据混排 */
.order-summary-actions,
.order-summary-actions-head {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--sp-1);
}
.order-summary-actions-head {
  text-transform: uppercase;
  letter-spacing: .04em;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
}
.order-summary-actions .mini-button {
  min-height: 26px;
  padding: 0 10px;
  font-size: 12px;
}

/* 首列不再堆叠按钮，高度回落 */
.order-summary-user { line-height: 1.35; }
.order-summary-row .order-summary-user small { margin-top: 1px; }

/* 窄屏：隐藏次要列，保证首屏可读（不隐藏金额与操作） */
@media (max-width: 1100px) {
  body.dashboard-page.admin-console .order-data-table .admin-data-head,
  body.dashboard-page.admin-console .order-data-table .order-summary-row {
    grid-template-columns: minmax(130px, 1.3fr) minmax(110px, 1fr) 88px minmax(110px, .8fr) 104px;
  }
  /* 隐藏「剩余」列（信息与还款页重复） */
  body.dashboard-page.admin-console .order-data-table .admin-data-head > span:nth-child(5),
  body.dashboard-page.admin-console .order-data-table .order-summary-row > span:nth-child(5) {
    display: none;
  }
  .order-summary-amount { text-align: left; }
}
@media (max-width: 720px) {
  body.dashboard-page.admin-console .order-data-table .admin-data-head,
  body.dashboard-page.admin-console .order-data-table .order-summary-row {
    grid-template-columns: 1fr auto;
    gap: var(--sp-2);
  }
  /* 窄屏只留：订单/用户 + 金额 + 操作 */
  body.dashboard-page.admin-console .order-data-table .admin-data-head > span:nth-child(2),
  body.dashboard-page.admin-console .order-data-table .order-data-head > span:nth-child(3),
  body.dashboard-page.admin-console .order-data-table .order-data-head > span:nth-child(4),
  body.dashboard-page.admin-console .order-data-table .order-summary-row > span:nth-child(2),
  body.dashboard-page.admin-console .order-data-table .order-summary-row > span:nth-child(3),
  body.dashboard-page.admin-console .order-data-table .order-summary-row > span:nth-child(4) {
    display: none;
  }
}


/* ==========================================================================
   ⑫ 侧边栏：可滚动 + 待办角标
   ========================================================================== */

.admin-sidebar {
  position: sticky;
  top: 0;
  align-self: start;
  max-height: 100vh;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: var(--sp-4) var(--sp-3);
}
.admin-sidebar::-webkit-scrollbar { width: 6px; }
.admin-sidebar::-webkit-scrollbar-thumb {
  background: rgba(15, 31, 43, .16);
  border-radius: var(--r-full);
}
.admin-menu { display: flex; flex-direction: column; gap: var(--sp-4); }
.admin-menu-group { display: flex; flex-direction: column; gap: 2px; }
.admin-menu-group > span {
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--c-text-3);
  padding: 0 var(--sp-2) var(--sp-1);
}

/* 菜单项：改为 flex 以容纳右侧角标 */
.admin-menu-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  width: 100%;
  text-align: left;
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-sm);
  border: 1px solid transparent;
  background: transparent;
  font-size: var(--fs-base);
  color: var(--c-text-2);
  cursor: pointer;
  transition: background-color .14s ease, color .14s ease;
}
.admin-menu-item:hover { background: var(--c-bg-2); color: var(--c-text); }
.admin-menu-item.is-active {
  background: rgba(15, 118, 110, .10);
  border-color: rgba(15, 118, 110, .28);
  color: var(--c-brand);
  font-weight: var(--fw-medium);
}

/* 待办角标 */
.admin-menu-badge {
  flex: none;
  min-width: 20px;
  height: 18px;
  padding: 0 5px;
  border-radius: var(--r-full);
  background: var(--c-brand);
  color: #fff;
  font-size: 11px;
  font-weight: var(--fw-bold);
  line-height: 18px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.admin-menu-item.has-badge { color: var(--c-text); font-weight: var(--fw-medium); }


/* ==========================================================================
   财务图形报表（2026-10-02）
   --------------------------------------------------------------------------
   设计原则：本金/首付用低饱和「回收色」，利息/违约金用高对比「收益色」。
   看的人眼睛会自动落在收益色上，避免把回款规模误当成利润。
   纯 CSS 柱状图，与既有 sales-bar-chart 同路数，不引第三方图表库
   （PWA 离线缓存 + CSP + 包体三重考虑）。
   ========================================================================== */
#adminFinanceCharts,
#adminFinance {
  --fin-c-down: #64748b;        /* 首付款 · 货款，非利润 · 深灰 */
  --fin-c-principal: #b6c8d6;   /* 本金回收 · 垫资，非利润 · 中浅灰（白底上清晰可见，且与首付分离）*/
  --fin-c-interest: #0f766e;    /* 利息收入 · 真正的收益 */
  --fin-c-penalty: #ea580c;     /* 违约金 */
  --fin-c-insurance: #9333ea;   /* 保险服务费 */
}

.fin-controls {
  display: grid;
  gap: var(--sp-3);
}
.fin-control-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-3);
}
.fin-control-row .finance-preset-group {
  flex-wrap: wrap;
}
.fin-date {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-sm);
  color: var(--c-text-2);
}
.fin-date input[type="date"] {
  border: 1px solid var(--c-border-2);
  border-radius: var(--r-sm);
  padding: 4px 8px;
  font-size: var(--fs-sm);
  color: var(--c-text);
  background: var(--c-bg);
}

.fin-kpi-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}
.fin-kpi {
  border: 1px solid var(--c-border-2);
  border-radius: var(--r-lg);
  background: var(--c-bg);
  box-shadow: var(--sh-xs);
  padding: var(--sp-3) var(--sp-4);
}
.fin-kpi span {
  display: block;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
  margin-bottom: 2px;
}
.fin-kpi b {
  display: block;
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.2px;
}
.fin-kpi small {
  display: block;
  margin-top: 2px;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
}
.fin-kpi.is-profit b { color: var(--fin-c-interest); }
.fin-kpi.is-warn b { color: #b45309; }

.fin-card { margin-bottom: var(--sp-4); }
.fin-card-head {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--sp-3);
}
.fin-card-head h3 {
  margin: 0 0 4px;
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text);
}
.fin-card-head p {
  margin: 0;
  max-width: 720px;
  font-size: var(--fs-sm);
  color: var(--c-text-2);
  line-height: 1.55;
}

.fin-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-4);
  margin: var(--sp-3) 0 var(--sp-2);
  font-size: var(--fs-xs);
  color: var(--c-text-2);
}
.fin-legend i {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 2px;
  margin-right: 5px;
  vertical-align: -1px;
}

/* —— 堆叠柱状图 —— */
.fin-plot {
  display: flex;
  align-items: flex-end;
  gap: 6px;
}
.fin-yaxis {
  flex: none;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  text-align: right;
  font-size: 9.5px;
  color: var(--c-text-3);
  font-variant-numeric: tabular-nums;
  padding-bottom: 1px;
}
.fin-plot .fin-chart { flex: 1; min-width: 0; }
.fin-axis--offset { padding-left: 62px; }
.fin-scale {
  font-size: var(--fs-xs);
  color: var(--c-text-3);
  text-align: right;
  margin-bottom: 3px;
}
.fin-chart {
  display: flex;
  align-items: flex-end;
  gap: 2px;
  border-bottom: 1px solid var(--c-border-2);
  padding-bottom: 1px;
  /* 25% 一档的横向网格线，让柱高可读（原来只能靠目测） */
  background-image: repeating-linear-gradient(
    to top,
    transparent 0,
    transparent calc(25% - 1px),
    rgba(15, 31, 43, .08) calc(25% - 1px),
    rgba(15, 31, 43, .08) 25%
  );
}
.fin-col {
  flex: 1;
  min-width: 3px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  height: 100%;
  position: relative;
  cursor: default;
  outline: none;
}
.fin-col > i {
  display: block;
  width: 100%;
}
.fin-col:hover,
.fin-col:focus { filter: brightness(1.12); }
.fin-tip {
  display: none;
  position: absolute;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  z-index: var(--z-toast, 60);
  min-width: 190px;
  padding: 8px 10px;
  border-radius: var(--r-md);
  border: 1px solid var(--c-border-2);
  background: var(--c-bg);
  box-shadow: var(--sh-md);
  font-size: var(--fs-xs);
  line-height: 1.75;
  white-space: nowrap;
  color: var(--c-text-2);
}
.fin-col:hover .fin-tip,
.fin-col:focus .fin-tip { display: block; }
.fin-tip b {
  display: block;
  color: var(--c-text);
  margin-bottom: 2px;
}
.fin-tip span { display: block; }
.fin-tip u {
  display: inline-block;
  min-width: 68px;
  text-decoration: none;
  color: var(--c-text-3);
}
.fin-tip-total {
  margin-top: 3px;
  padding-top: 3px;
  border-top: 1px solid var(--c-border-2);
  color: var(--c-text) !important;
  font-weight: var(--fw-medium);
}
.fin-axis {
  display: flex;
  gap: 2px;
  margin-top: 5px;
  font-size: 9.5px;
  color: var(--c-text-3);
}
.fin-axis span {
  flex: 1;
  min-width: 3px;
  text-align: center;
  overflow: hidden;
  white-space: nowrap;
}

/* —— 占比条 —— */
.fin-stack {
  display: grid;
  gap: 6px;
  margin-top: var(--sp-3);
}
.fin-stack > label {
  font-size: var(--fs-xs);
  color: var(--c-text-2);
}
.fin-sharebar-wrap { display: grid; gap: 4px; }
.fin-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3);
  padding-left: 2px;
}
.fin-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-xs);
  color: var(--c-text-2);
  font-variant-numeric: tabular-nums;
}
.fin-chip i {
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 2px;
}
.fin-chip em { font-style: normal; color: var(--c-text-3); }
.fin-sharebar-row {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
}
.fin-sharebar-track {
  flex: 1;
  min-width: 0;
}
.fin-sharebar {
  display: flex;
  height: 26px;
  border-radius: var(--r-sm);
  overflow: hidden;
  border: 1px solid var(--c-border-2);
}
.fin-sharebar-total {
  flex: none;
  min-width: 128px;
  text-align: right;
  font-size: var(--fs-xs);
  color: var(--c-text-2);
  font-variant-numeric: tabular-nums;
}
.fin-sharebar > i {
  display: flex;
  align-items: center;
  justify-content: center;
  font-style: normal;
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  overflow: hidden;
  white-space: nowrap;
}
.fin-sharebar > i.is-empty {
  flex: 1;
  background: var(--c-bg-2);
  color: var(--c-text-3);
}

/* —— 收款类型构成 —— */
.fin-kind-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(216px, 1fr));
  gap: var(--sp-3);
  margin-top: var(--sp-3);
}
.fin-kind {
  border: 1px solid var(--c-border-2);
  border-radius: var(--r-md);
  padding: var(--sp-3);
  background: var(--c-bg-2);
}
.fin-kind span {
  display: block;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
}
.fin-kind b {
  display: block;
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
}
.fin-kind small {
  display: block;
  font-size: var(--fs-xs);
  color: var(--c-text-2);
  margin-top: 2px;
}
.fin-kind em {
  display: block;
  font-style: normal;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
  margin-top: 4px;
}
.fin-link {
  all: unset;
  cursor: pointer;
  display: inline-block;
  margin-top: 6px;
  font-size: var(--fs-xs);
  color: var(--c-link, var(--c-brand));
}
.fin-link:hover { text-decoration: underline; }

/* —— 提前结清专题 —— */
.fin-settle-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));
  gap: var(--sp-3);
  margin: var(--sp-3) 0;
}
.fin-settle-grid > div {
  border: 1px solid var(--c-border-2);
  border-radius: var(--r-md);
  padding: 10px var(--sp-3);
  background: var(--c-bg-2);
}
.fin-settle-grid span {
  display: block;
  font-size: var(--fs-xs);
  color: var(--c-text-3);
}
.fin-settle-grid b {
  display: block;
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
}
.is-profit { color: var(--fin-c-interest) !important; }
.is-warn { color: #b45309 !important; }

/* —— 表格 —— */
.fin-table-wrap {
  overflow-x: auto;
  margin-top: var(--sp-3);
}
.fin-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
}
.fin-table th,
.fin-table td {
  padding: 6px 8px;
  text-align: right;
  border-bottom: 1px solid var(--c-border-2);
  white-space: nowrap;
}
.fin-table th {
  font-weight: var(--fw-medium);
  color: var(--c-text-3);
  font-size: var(--fs-xs);
}
.fin-table th:first-child,
.fin-table td:first-child,
.fin-table th:nth-child(2),
.fin-table td:nth-child(2) { text-align: left; }
.fin-table tbody tr:hover { background: var(--c-bg-2); }
.fin-table tr.is-total td {
  font-weight: var(--fw-bold);
  color: var(--c-text);
  border-top: 2px solid var(--c-border);
}
.fin-table .is-mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: var(--fs-xs);
}

/* —— 说明与告警 —— */
.fin-note {
  margin-top: var(--sp-3);
  padding: 10px var(--sp-3);
  border-left: 2px solid var(--c-brand);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  background: var(--c-bg-2);
  font-size: var(--fs-sm);
  color: var(--c-text-2);
  line-height: 1.7;
}
.fin-alert {
  margin-bottom: var(--sp-4);
  padding: 10px var(--sp-3);
  border-left: 2px solid var(--c-danger);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  background: #fef2f2;
  color: #991b1b;
  font-size: var(--fs-sm);
  line-height: 1.6;
}

/* —— 财务数据页的拆分行 —— */
.metric-card.is-profit strong { color: var(--fin-c-interest, #0f766e); }
.fin-row-amount {
  display: grid;
  justify-items: end;
  gap: 2px;
}
.fin-row-split {
  font-size: var(--fs-xs);
  color: var(--c-text-3);
}
.fin-row-split b { color: var(--fin-c-interest, #0f766e); }

.fin-legend-note {
  font-style: normal;
  margin-left: 4px;
  color: var(--c-text-3);
  font-size: 10px;
}
.fin-card-actions { display: flex; gap: 6px; align-items: center; }
.fin-toggle {
  all: unset;
  cursor: pointer;
  padding: 5px 11px;
  border: 1px solid var(--c-border-2);
  border-radius: var(--r-full);
  font-size: var(--fs-xs);
  color: var(--c-text-2);
  background: var(--c-bg-2);
  white-space: nowrap;
}
.fin-toggle:hover { border-color: var(--c-brand); color: var(--c-text); }
.fin-toggle.is-on {
  background: var(--c-brand);
  border-color: var(--c-brand);
  color: #fff;
}
/* 收益段体量小时给一根可见的描边，否则在堆叠图里直接消失 */
.fin-col > i.is-thin { box-shadow: inset 0 0 0 1px rgba(15, 31, 43, .22); }
.fin-hint {
  font-style: normal;
  margin-left: 4px;
  color: var(--c-text-3);
  font-size: 10px;
}

@media (max-width: 900px) {
  .fin-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fin-sharebar-total { min-width: 92px; }
  .fin-kpi b { font-size: var(--fs-lg); }
  .fin-chart { gap: 1px; }
}
