/* 后台（工作台）样式：登录页 + 数据看板 + FDE 业务页面。
   依赖 site.css 的变量与基础控件（.card / .btn / .field__input / .data-table / .timeline），
   这里只写后台壳与后台组件，不另起一套配色。
   图表是 DOM 画的，不引任何图表库。 */

/* 后台专用状态色：项目「落地」的紫色，两段收款状态复用 ok / wait。已登记 docs/frontend.md */
:root {
  --c-deploy: #5b4a8a;
  --c-deploy-soft: #efeaf7;
}

/* ------------------------------------------------------------------ 壳 */
.admin-top {
  position: sticky;
  top: 0;
  z-index: 20;
  height: var(--topbar-h);
  background: var(--c-ink);
  color: #fff;
}

.admin-top__inner {
  max-width: 1280px;
  height: 100%;
  margin: 0 auto;
  padding: 0 var(--s5);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s4);
}

.admin-top__brand { display: flex; align-items: center; gap: var(--s3); color: #fff; }
.admin-top__brand:hover { text-decoration: none; }

.admin-top__mark {
  width: 28px;
  height: 28px;
  border-radius: var(--r-sm);
  background: var(--c-accent);
  display: grid;
  place-items: center;
  font-weight: 700;
}

.admin-top__brand strong { font-size: var(--fs-base); font-weight: 600; }
.admin-top__user { display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap; }
.admin-top__name { font-size: var(--fs-sm); color: #cdd8e4; }

.admin-top__logout { color: #cdd8e4; border-color: rgba(255, 255, 255, 0.3); }
.admin-top__logout:hover { background: rgba(255, 255, 255, 0.1); color: #fff; }

/* 左导航 + 主区：两栏栅格，窄屏导航变顶部横排 */
.admin-shell {
  max-width: 1280px;
  margin: 0 auto;
  padding: var(--s5);
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  gap: var(--s6);
  align-items: start;
}

.side-nav {
  position: sticky;
  top: calc(var(--topbar-h) + var(--s4));
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.side-nav__group {
  margin: var(--s4) 0 var(--s1);
  padding-left: var(--s2);
  font-size: var(--fs-xs);
  color: var(--c-muted);
  letter-spacing: 0.08em;
}
.side-nav__group:first-child { margin-top: 0; }

.side-nav__item {
  display: block;
  padding: var(--s2) var(--s3);
  border-radius: var(--r-sm);
  color: var(--c-ink-2);
  font-size: var(--fs-base);
  line-height: 1.6;
}
.side-nav__item:hover { background: var(--c-accent-soft); color: var(--c-accent); text-decoration: none; }
.side-nav__item.is-active { background: var(--c-accent); color: #fff; }

.admin-main { display: flex; flex-direction: column; gap: var(--s5); min-width: 0; }

/* ------------------------------------------------------------------ 页头与统计块 */
.admin-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--s4);
}
.admin-head__actions { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; }
.admin-head__back { font-size: var(--fs-sm); margin-bottom: var(--s1); }
.admin-head__meta { font-size: var(--fs-sm); color: var(--c-muted); }

.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--s3); }

.stat-tile {
  background: var(--c-surface);
  border: 1px solid var(--c-line);
  border-radius: var(--r-md);
  padding: var(--s4);
}
.stat-tile__value { font-size: var(--fs-xl); font-weight: 700; color: var(--c-ink); line-height: 1.2; font-variant-numeric: tabular-nums; }
.stat-tile__label { margin-top: var(--s1); font-size: var(--fs-sm); color: var(--c-ink-2); }

/* ------------------------------------------------------------------ 胶囊与页签 */
.pill {
  display: inline-block;
  font-size: var(--fs-xs);
  line-height: 22px;
  padding: 0 var(--s2);
  border-radius: var(--r-pill);
  white-space: nowrap;
  background: var(--c-surface-2);
  color: var(--c-ink-2);
}
.pill--waiting { background: var(--c-surface-2); color: var(--c-ink-2); }
.pill--discussing { background: var(--c-accent-soft); color: var(--c-accent); }
.pill--developing { background: var(--c-wait-soft); color: var(--c-wait); }
.pill--deploying { background: var(--c-deploy-soft); color: var(--c-deploy); }
.pill--done { background: var(--c-ok-soft); color: var(--c-ok); }
.pill--paid { background: var(--c-ok-soft); color: var(--c-ok); }
.pill--unpaid { background: var(--c-wait-soft); color: var(--c-wait); }
.pill--active { background: var(--c-ok-soft); color: var(--c-ok); }
.pill--disabled { background: var(--c-surface-2); color: var(--c-ink-2); }
.pill--level, .pill--tag { background: var(--c-accent-soft); color: var(--c-accent); }
.pill--primary { background: var(--c-accent-soft); color: var(--c-accent); }
.pill--role { background: var(--c-accent); color: #fff; }

.chip {
  display: inline-flex;
  align-items: center;
  padding: var(--s1) var(--s3);
  border-radius: var(--r-pill);
  border: 1px solid var(--c-line);
  font-size: var(--fs-sm);
  color: var(--c-ink-2);
  background: var(--c-surface);
}
.chip:hover { text-decoration: none; border-color: var(--c-accent); color: var(--c-accent); }
.chip.is-active { background: var(--c-accent); border-color: var(--c-accent); color: #fff; }

.summary-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
}
.summary-bar__chips { display: flex; flex-wrap: wrap; gap: var(--s2); }
.summary-bar__money { font-size: var(--fs-sm); color: var(--c-ink-2); }

.num { font-variant-numeric: tabular-nums; }
.num--time { font-size: var(--fs-sm); color: var(--c-muted); }

/* ------------------------------------------------------------------ 过滤条与折叠表单 */
.filter-bar { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s3); }
.filter-bar .field { min-width: 160px; }
.filter-bar__actions { display: flex; gap: var(--s2); }

.fold > summary { list-style: none; cursor: pointer; }
.fold > summary::-webkit-details-marker { display: none; }
.fold { margin-bottom: var(--s2); }
.fold__body { margin-top: var(--s3); }

.inline-fold > summary { list-style: none; cursor: pointer; }
.inline-fold > summary::-webkit-details-marker { display: none; }
.inline-fold[open] { width: 100%; }

/* ------------------------------------------------------------------ 详情页的行卡与行内表单 */
.detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--s5); align-items: start; }

.row-card { border: 1px solid var(--c-line); border-radius: var(--r-md); padding: var(--s4); margin-bottom: var(--s3); background: var(--c-surface); }
.row-card__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s2); }
.row-card__head .section-title { margin-bottom: 0; }
.row-card__title { font-weight: 600; color: var(--c-ink); }
.row-card__meta { font-size: var(--fs-sm); color: var(--c-ink-2); margin-top: var(--s1); overflow-wrap: anywhere; }
.row-card__actions { display: flex; gap: var(--s2); flex-wrap: wrap; align-items: center; }

.inline-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s3); margin-top: var(--s4); }
.inline-form .field { min-width: 150px; }
.inline-form__title { width: 100%; font-size: var(--fs-sm); color: var(--c-ink); font-weight: 600; }
.status-form { border-top: 1px solid var(--c-line); padding-top: var(--s4); }

.member-list { list-style: none; margin: 0 0 var(--s3); padding: 0; }
.member-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s2);
  padding: var(--s2) 0;
  border-bottom: 1px solid var(--c-line);
}
.member-row:last-child { border-bottom: none; }
.member-row__name { color: var(--c-ink); }
.member-row__meta { font-size: var(--fs-sm); color: var(--c-muted); }

.pay-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--s5); align-items: start; }

.form--stack { margin-bottom: var(--s4); }

/* 复选框：文字和小方块是同一个点击区 */
.check { display: inline-flex; align-items: center; gap: var(--s2); font-size: var(--fs-base); color: var(--c-ink); }
.check input { width: 16px; height: 16px; accent-color: var(--c-accent); }

.field__hint { font-size: var(--fs-xs); color: var(--c-muted); }
.field__input--file { padding-top: var(--s1); }

/* 危险操作：只用于删除 */
.btn--danger { background: var(--c-danger); color: #fff; }
.btn--danger:hover { background: #8c2b24; color: #fff; }

/* ------------------------------------------------------------------ 详情页子 tab（?tab=） */
.subtabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2);
  border-bottom: 1px solid var(--c-line);
  padding-bottom: var(--s3);
}
.subtabs__item {
  padding: var(--s1) var(--s3);
  border-radius: var(--r-pill);
  border: 1px solid var(--c-line);
  font-size: var(--fs-sm);
  color: var(--c-ink-2);
  background: var(--c-surface);
}
.subtabs__item:hover { text-decoration: none; border-color: var(--c-accent); color: var(--c-accent); }
.subtabs__item.is-active { background: var(--c-accent); border-color: var(--c-accent); color: #fff; }

/* 卡片头：标题在左、操作按钮在右（保存 / 删除走 form 属性指向对应表单） */
.card-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  margin-bottom: var(--s3);
}
.card-head .section-title { margin-bottom: 0; }
.card-head__actions { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; }

.role-group { margin-bottom: var(--s4); }
.role-group:last-child { margin-bottom: 0; }
.role-group__title { font-size: var(--fs-sm); font-weight: 600; color: var(--c-ink); margin-bottom: var(--s2); }

/* 密码输入 + 随机密码按钮同一行 */
.password-row { display: flex; align-items: center; gap: var(--s2); }
.password-row .field__input { flex: 1 1 auto; min-width: 0; }
.password-row .btn { flex: none; white-space: nowrap; }

/* ------------------------------------------------------------------ 弹窗（原生 <dialog>）
   新建表单一律收进弹窗：内容按一屏内设计，不设内部滚动（docs/frontend.md 禁忌 3） */
.modal {
  width: min(560px, calc(100vw - var(--s5) * 2));
  border: 1px solid var(--c-line);
  border-radius: var(--r-lg);
  background: var(--c-surface);
  color: var(--c-ink);
  padding: var(--s5);
}
.modal::backdrop { background: rgba(20, 32, 46, 0.45); }
.modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s3);
  margin-bottom: var(--s3);
}
.modal__title { font-size: var(--fs-md); margin: 0; }
.modal__close {
  border: none;
  background: none;
  padding: var(--s1);
  font-size: 1.25rem;
  line-height: 1;
  color: var(--c-muted);
  cursor: pointer;
}
.modal__close:hover { color: var(--c-ink); }

/* ------------------------------------------------------------------ 状态步进条 */
.stepper { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--s2); }
.stepper__step {
  display: flex;
  align-items: center;
  gap: var(--s2);
  padding: var(--s2) var(--s3);
  border-radius: var(--r-pill);
  border: 1px solid var(--c-line);
  color: var(--c-ink-2);
  font-size: var(--fs-sm);
  background: var(--c-surface);
}
.stepper__dot { width: 10px; height: 10px; border-radius: 50%; background: var(--c-line); flex: none; }
.stepper__step.is-done .stepper__dot { background: var(--c-ok); }
.stepper__step.is-done { color: var(--c-ink); }
.stepper__step.is-current { border-color: var(--c-accent); background: var(--c-accent-soft); color: var(--c-accent); font-weight: 600; }
.stepper__step.is-current .stepper__dot { background: var(--c-accent); }

/* ------------------------------------------------------------------ 工商信息大表单 */
.company-form__group { border: none; margin: 0 0 var(--s5); padding: 0; }
.company-form__group:last-of-type { margin-bottom: var(--s4); }
.company-form__legend { font-size: var(--fs-md); color: var(--c-ink); font-weight: 600; padding: 0; margin-bottom: var(--s3); }
.company-form__actions { border-top: 1px solid var(--c-line); padding-top: var(--s4); }

/* ------------------------------------------------------------------ 后台时间线的补充 */
.timeline--admin { margin-top: var(--s3); }
.timeline__dot--note { background: var(--c-wait); }

/* ------------------------------------------------------------------ 数据看板（admin.js 渲染） */
.admin-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: var(--s5); }

.facts--admin { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }

.bar-chart { display: flex; align-items: flex-end; gap: 3px; height: 160px; padding-top: var(--s3); }

.bar-chart__col {
  flex: 1 1 0;
  min-width: 4px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  height: 100%;
}

.bar-chart__bar { width: 100%; background: var(--c-accent); border-radius: var(--r-sm) var(--r-sm) 0 0; min-height: 2px; }
.bar-chart__bar--empty { background: var(--c-surface-2); }
.bar-chart__label { font-size: 10px; color: var(--c-muted); margin-top: var(--s1); white-space: nowrap; }

.rank { list-style: none; margin: 0; padding: 0; }
.rank__row { padding: var(--s2) 0; border-bottom: 1px solid var(--c-line); }
.rank__row:last-child { border-bottom: none; }
.rank__head { display: flex; justify-content: space-between; gap: var(--s3); align-items: baseline; }
.rank__name { color: var(--c-ink); min-width: 0; overflow-wrap: anywhere; }
.rank__value { color: var(--c-muted); font-size: var(--fs-sm); white-space: nowrap; }
.rank__meter { height: 6px; border-radius: var(--r-pill); background: var(--c-surface-2); margin-top: var(--s1); }
.rank__meter span { display: block; height: 100%; border-radius: var(--r-pill); background: var(--c-accent); }

.lead-card { border: 1px solid var(--c-line); border-radius: var(--r-md); padding: var(--s4); margin-bottom: var(--s3); }
.lead-card__head { display: flex; flex-wrap: wrap; gap: var(--s3); align-items: baseline; justify-content: space-between; }
.lead-card__name { color: var(--c-ink); font-weight: 600; }
.lead-card__time { color: var(--c-muted); font-size: var(--fs-sm); }
.lead-card__meta { color: var(--c-muted); font-size: var(--fs-sm); margin-top: var(--s1); }
.lead-card__msg { margin-top: var(--s2); color: var(--c-ink-2); white-space: pre-wrap; overflow-wrap: anywhere; }

.todo-group { margin-bottom: var(--s5); }
.todo-group__title { font-size: var(--fs-md); margin-bottom: var(--s3); }
.todo-item { border-left: 3px solid var(--c-wait); background: var(--c-wait-soft); border-radius: 0 var(--r-md) var(--r-md) 0; padding: var(--s3) var(--s4); margin-bottom: var(--s2); }
.todo-item__where { font-size: var(--fs-xs); color: var(--c-wait); margin-bottom: var(--s1); }
.todo-item__text { color: var(--c-ink-2); }

.empty { color: var(--c-muted); background: var(--c-surface-2); border-radius: var(--r-md); padding: var(--s4); }

/* ------------------------------------------------------------------ 响应式 */
@media (max-width: 1024px) {
  .admin-shell { grid-template-columns: minmax(0, 1fr); padding: var(--s4); gap: var(--s4); }
  .side-nav {
    position: static;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--s1);
    background: var(--c-surface);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    padding: var(--s2);
  }
  .side-nav__group { margin: 0 var(--s2); }
  .side-nav__item { padding: var(--s1) var(--s3); }
}

@media (max-width: 720px) {
  .admin-top__inner { padding: 0 var(--s4); }
  .admin-top__name { display: none; }
  /* 弹窗贴边全宽，上下留白；内容仍按一屏内设计 */
  .modal {
    width: 100vw;
    max-width: 100vw;
    margin: var(--s4) 0;
    border-radius: 0;
    padding: var(--s4);
  }
  /* 表单单列、行内表单纵排，控件不再互相挤 */
  .form { grid-template-columns: 1fr; }
  .inline-form { flex-direction: column; align-items: stretch; }
  .inline-form .field { min-width: 0; }
  .inline-form .btn { width: 100%; }
  .detail-grid, .pay-grid { grid-template-columns: 1fr; }
  .filter-bar .field { min-width: 0; flex: 1 1 100%; }
  .filter-bar__actions { width: 100%; }
  .filter-bar__actions .btn { flex: 1; }
}
