/* ==========================================================================
   aucms 会员中心插件 — 前台视觉样式
   --------------------------------------------------------------------------
   设计目标：干净、留白充足、层级清楚（参考设计师目录站的排版节奏）。
   全部使用 .ms-* 命名空间，避免与主题 .card / .btn 体系互相污染；
   后台仍在用的 .member-* 类保留在文件末尾（会员表格/徽章/分页）。
   ========================================================================== */

.ms-page {
  --ms-ink: #0f172a;
  --ms-ink-2: #334155;
  --ms-muted: #6b7280;
  --ms-faint: #9aa3af;
  --ms-line: #e9edf2;
  --ms-line-2: #dfe5ec;
  --ms-surface: #ffffff;
  --ms-canvas: #f6f7f9;
  --ms-accent: #2f6feb;
  --ms-accent-dark: #1f52b8;
  --ms-accent-soft: #eef4ff;
  --ms-radius: 16px;
  --ms-radius-sm: 10px;
  --ms-shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 8px 24px rgba(16, 24, 40, .05);
  --ms-shadow-sm: 0 1px 2px rgba(16, 24, 40, .05);

  padding: 36px 0 64px;
  color: var(--ms-ink);
  background: var(--ms-canvas);
  font-size: 14px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

.ms-page * { box-sizing: border-box; }

/* --------------------------------------------------------------------------
   页头
   -------------------------------------------------------------------------- */
.ms-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 20px;
  flex-wrap: wrap;
  margin-bottom: 24px;
}
.ms-eyebrow {
  font-size: 12px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ms-faint);
  margin: 0 0 8px;
}
.ms-title {
  font-size: 30px;
  line-height: 1.25;
  font-weight: 650;
  letter-spacing: -.01em;
  margin: 0;
  color: var(--ms-ink);
}
.ms-subtitle {
  margin: 8px 0 0;
  color: var(--ms-muted);
  font-size: 14px;
}
.ms-head-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* --------------------------------------------------------------------------
   按钮
   -------------------------------------------------------------------------- */
.ms-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 40px;
  padding: 0 18px;
  border-radius: 10px;
  border: 1px solid var(--ms-line-2);
  background: var(--ms-surface);
  color: var(--ms-ink-2);
  font-size: 14px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease, color .18s ease, transform .18s ease;
}
.ms-btn:hover { border-color: var(--ms-ink-2); color: var(--ms-ink); text-decoration: none; }
.ms-btn:active { transform: translateY(1px); }
.ms-btn-primary {
  background: var(--ms-ink);
  border-color: var(--ms-ink);
  color: #fff;
}
.ms-btn-primary:hover { background: #1e293b; border-color: #1e293b; color: #fff; }
.ms-btn-accent {
  background: var(--ms-accent);
  border-color: var(--ms-accent);
  color: #fff;
}
.ms-btn-accent:hover { background: var(--ms-accent-dark); border-color: var(--ms-accent-dark); color: #fff; }
.ms-btn-ghost { background: transparent; border-color: transparent; color: var(--ms-muted); }
.ms-btn-ghost:hover { background: #eef1f5; color: var(--ms-ink); border-color: transparent; }
.ms-btn-sm { height: 32px; padding: 0 12px; font-size: 13px; border-radius: 8px; }
.ms-btn-block { width: 100%; }
.ms-btn[disabled], .ms-btn.is-disabled { opacity: .5; pointer-events: none; }

/* --------------------------------------------------------------------------
   布局：侧边栏 + 主区
   -------------------------------------------------------------------------- */
.ms-layout {
  display: grid;
  grid-template-columns: 252px minmax(0, 1fr);
  gap: 24px;
  align-items: start;
}
.ms-aside { position: sticky; top: 88px; }

.ms-profile-card {
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: var(--ms-radius);
  padding: 26px 22px 18px;
  text-align: center;
  box-shadow: var(--ms-shadow-sm);
}
.ms-profile-card .ms-avatar { margin: 0 auto 14px; }
.ms-profile-name {
  font-size: 17px;
  font-weight: 600;
  margin: 0;
  color: var(--ms-ink);
}
.ms-profile-meta {
  margin: 6px 0 0;
  font-size: 13px;
  color: var(--ms-muted);
}
.ms-points {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--ms-line);
}
.ms-points-num {
  font-size: 26px;
  font-weight: 650;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.ms-points-label { font-size: 12px; color: var(--ms-muted); }

.ms-nav {
  list-style: none;
  margin: 12px 0 0;
  padding: 0;
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: var(--ms-radius);
  overflow: hidden;
  box-shadow: var(--ms-shadow-sm);
}
.ms-nav li + li { border-top: 1px solid #f1f4f7; }
.ms-nav a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 11px 16px;
  font-size: 14px;
  color: var(--ms-ink-2);
  text-decoration: none;
  transition: background .16s, color .16s;
}
.ms-nav a:hover { background: #f8fafc; color: var(--ms-ink); }
.ms-nav a.is-active {
  background: var(--ms-accent-soft);
  color: var(--ms-accent-dark);
  font-weight: 500;
  box-shadow: inset 2px 0 0 var(--ms-accent);
}
.ms-nav-badge {
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: 999px;
  background: #ef4444;
  color: #fff;
  font-size: 11px;
  line-height: 20px;
  text-align: center;
  font-weight: 500;
}

/* --------------------------------------------------------------------------
   头像（会员等级体系已移除，不再有等级色块）
   -------------------------------------------------------------------------- */
.ms-avatar {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  font-weight: 600;
  color: #fff;
  background: #64748b;
  overflow: hidden;
  flex: 0 0 auto;
  box-shadow: 0 0 0 3px #fff, 0 0 0 4px var(--ms-line);
}
.ms-avatar img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
.ms-avatar-lg { width: 88px; height: 88px; font-size: 32px; }
.ms-avatar-sm { width: 40px; height: 40px; font-size: 15px; }

.ms-level {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 22px;
  padding: 0 9px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 500;
  color: #fff;
  background: #64748b;
  vertical-align: middle;
}
.ms-level.is-soft {
  background: var(--ms-accent-soft);
  color: var(--ms-accent-dark);
}

/* --------------------------------------------------------------------------
   统计块
   -------------------------------------------------------------------------- */
.ms-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(132px, 1fr));
  gap: 12px;
}
.ms-stat {
  padding: 16px 18px;
  border: 1px solid var(--ms-line);
  border-radius: 12px;
  background: #fff;
}
.ms-stat-num {
  font-size: 24px;
  font-weight: 650;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.ms-stat-label { font-size: 12.5px; color: var(--ms-muted); }

/* --------------------------------------------------------------------------
   表单
   -------------------------------------------------------------------------- */
.ms-form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px 20px;
}
.ms-form-grid.is-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ms-field { min-width: 0; }
.ms-field.is-full { grid-column: 1 / -1; }
.ms-label {
  display: block;
  font-size: 13px;
  font-weight: 500;
  color: var(--ms-ink-2);
  margin-bottom: 7px;
}
.ms-label .ms-req { color: #dc2626; margin-left: 2px; }
.ms-input,
.ms-select,
.ms-textarea {
  width: 100%;
  border: 1px solid var(--ms-line-2);
  border-radius: 10px;
  background: #fff;
  padding: 10px 12px;
  font: inherit;
  font-size: 14px;
  color: var(--ms-ink);
  transition: border-color .16s, box-shadow .16s;
}
.ms-input, .ms-select { height: 42px; }
.ms-textarea { min-height: 96px; resize: vertical; line-height: 1.65; }
.ms-input:focus,
.ms-select:focus,
.ms-textarea:focus {
  outline: none;
  border-color: var(--ms-accent);
  box-shadow: 0 0 0 3px rgba(47, 111, 235, .12);
}
.ms-input::placeholder, .ms-textarea::placeholder { color: #b6bec9; }
.ms-hint { font-size: 12.5px; color: var(--ms-muted); margin-top: 6px; }

/* 多选：横向排列的小卡片，而不是被通用 label{display:block} 拆成一列 */
.ms-checks {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.ms-check {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 13px;
  border: 1px solid var(--ms-line-2);
  border-radius: 999px;
  font-size: 13px;
  color: var(--ms-ink-2);
  background: #fff;
  cursor: pointer;
  user-select: none;
  transition: all .16s ease;
}
.ms-check:hover { border-color: #b9c4d4; }
.ms-check input { width: 14px; height: 14px; margin: 0; accent-color: var(--ms-accent); }
.ms-check:has(input:checked) {
  border-color: var(--ms-accent);
  background: var(--ms-accent-soft);
  color: var(--ms-accent-dark);
}
.ms-check-label { display: block; font-size: 13px; font-weight: 500; color: var(--ms-ink-2); margin-bottom: 9px; }

.ms-savebar {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 20px;
}

/* --------------------------------------------------------------------------
   搜索栏 + 筛选 chips
   -------------------------------------------------------------------------- */
.ms-searchbar {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: 14px;
  padding: 12px;
  box-shadow: var(--ms-shadow-sm);
  margin-bottom: 16px;
}
.ms-search-input {
  flex: 1 1 240px;
  min-width: 0;
  height: 42px;
  border: 0;
  border-radius: 9px;
  background: #f4f6f8;
  padding: 0 14px;
  font: inherit;
  font-size: 14px;
  color: var(--ms-ink);
}
.ms-search-input:focus { outline: none; box-shadow: 0 0 0 2px rgba(47, 111, 235, .18); background: #fff; }
.ms-search-order {
  height: 42px;
  border: 1px solid var(--ms-line-2);
  border-radius: 9px;
  background: #fff;
  padding: 0 10px;
  font: inherit;
  font-size: 13.5px;
  color: var(--ms-ink-2);
}

.ms-filters {
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: 14px;
  padding: 6px 20px;
  box-shadow: var(--ms-shadow-sm);
  margin-bottom: 24px;
}
.ms-chip-row {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px solid #f2f5f8;
}
.ms-chip-row:last-child { border-bottom: 0; }
.ms-chip-label {
  flex: 0 0 64px;
  padding-top: 5px;
  font-size: 12.5px;
  color: var(--ms-faint);
  letter-spacing: .02em;
}
.ms-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 4px;
  flex: 1;
}
.ms-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 9px;
  border-radius: 7px;
  font-size: 13px;
  color: var(--ms-ink-2);
  text-decoration: none;
  line-height: 1.6;
  transition: background .14s, color .14s;
}
.ms-chip:hover { background: #f1f4f8; color: var(--ms-ink); text-decoration: none; }
.ms-chip.is-active {
  background: var(--ms-ink);
  color: #fff;
  font-weight: 500;
}
.ms-chip i {
  font-style: normal;
  font-size: 11px;
  color: var(--ms-faint);
  font-variant-numeric: tabular-nums;
}
.ms-chip.is-active i { color: rgba(255, 255, 255, .6); }
.ms-chip.is-clear { color: var(--ms-accent); }

/* --------------------------------------------------------------------------
   会员卡片
   -------------------------------------------------------------------------- */
.ms-member-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(244px, 1fr));
  gap: 16px;
}
.ms-member {
  display: flex;
  flex-direction: column;
  gap: 12px;
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: 14px;
  padding: 20px;
  text-decoration: none;
  color: inherit;
  box-shadow: var(--ms-shadow-sm);
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
.ms-member:hover {
  transform: translateY(-2px);
  border-color: var(--ms-line-2);
  box-shadow: 0 10px 28px rgba(16, 24, 40, .08);
  text-decoration: none;
  color: inherit;
}
.ms-member-head { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ms-member-id { min-width: 0; }
.ms-name {
  font-size: 15.5px;
  font-weight: 600;
  color: var(--ms-ink);
  margin: 0;
  display: flex;
  align-items: center;
  gap: 7px;
  flex-wrap: wrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ms-meta { font-size: 12.5px; color: var(--ms-muted); margin: 3px 0 0; }
.ms-bio {
  font-size: 13px;
  color: var(--ms-muted);
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 21px;
}
.ms-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.ms-tag {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 6px;
  background: #f4f6f8;
  color: #55606e;
  font-size: 11.5px;
  line-height: 1.7;
}
.ms-member-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px solid #f2f5f8;
  font-size: 12.5px;
  color: var(--ms-muted);
}
.ms-member-foot b { color: var(--ms-ink); font-weight: 600; font-variant-numeric: tabular-nums; }

/* --------------------------------------------------------------------------
   个人主页
   -------------------------------------------------------------------------- */
.ms-hero {
  position: relative;
  background: var(--ms-surface);
  border: 1px solid var(--ms-line);
  border-radius: 20px;
  overflow: hidden;
  box-shadow: var(--ms-shadow-sm);
  margin-bottom: 20px;
}
.ms-hero-cover {
  height: 132px;
  background:
    radial-gradient(120% 160% at 8% 0%, #e8f0ff 0%, rgba(232,240,255,0) 58%),
    radial-gradient(90% 140% at 100% 0%, #f0f7f4 0%, rgba(240,247,244,0) 55%),
    linear-gradient(180deg, #fbfcfe 0%, #f5f7fa 100%);
  border-bottom: 1px solid #f0f3f7;
}
.ms-hero-body {
  display: flex;
  align-items: flex-start;
  gap: 22px;
  padding: 0 32px 28px;
  margin-top: -40px;
  flex-wrap: wrap;
}
.ms-hero .ms-avatar-lg { box-shadow: 0 0 0 5px #fff, 0 6px 18px rgba(16, 24, 40, .12); }
.ms-hero-main { flex: 1; min-width: 240px; padding-top: 48px; }
.ms-hero-name {
  font-size: 26px;
  font-weight: 650;
  letter-spacing: -.01em;
  margin: 0 0 6px;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.ms-hero-meta { font-size: 13.5px; color: var(--ms-muted); margin: 0 0 12px; }
.ms-hero-bio { font-size: 14px; color: var(--ms-ink-2); margin: 0 0 16px; max-width: 720px; }
.ms-hero-stats {
  display: flex;
  gap: 26px;
  flex-wrap: wrap;
  padding-top: 4px;
}
.ms-hero-stat b {
  display: block;
  font-size: 20px;
  font-weight: 650;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.ms-hero-stat span { font-size: 12px; color: var(--ms-muted); }
.ms-hero-actions { margin-left: auto; padding-top: 52px; display: flex; gap: 10px; }

.ms-split {
  display: grid;
  grid-template-columns: minmax(0, 340px) minmax(0, 1fr);
  gap: 20px;
  align-items: start;
}
.ms-dl { margin: 0; display: grid; gap: 14px; }
.ms-dl-row { display: flex; gap: 14px; font-size: 13.5px; }
.ms-dl-row dt { flex: 0 0 76px; color: var(--ms-muted); }
.ms-dl-row dd { margin: 0; color: var(--ms-ink-2); word-break: break-all; min-width: 0; }

.ms-feed { list-style: none; margin: 0; padding: 0; }
.ms-feed li {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 0;
  border-bottom: 1px solid #f2f5f8;
}
.ms-feed li:first-child { padding-top: 0; }
.ms-feed li:last-child { border-bottom: 0; padding-bottom: 0; }
.ms-feed a { color: var(--ms-ink); font-weight: 500; text-decoration: none; }
.ms-feed a:hover { color: var(--ms-accent); }
.ms-feed-meta { font-size: 12.5px; color: var(--ms-muted); margin-top: 3px; }

/* --------------------------------------------------------------------------
   会员中心
   -------------------------------------------------------------------------- */
.ms-welcome {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--ms-line);
  border-radius: 20px;
  padding: 28px 30px;
  background:
    radial-gradient(120% 180% at 0% 0%, #eef4ff 0%, rgba(238, 244, 255, 0) 60%),
    radial-gradient(100% 160% at 100% 0%, #f3f8f4 0%, rgba(243, 248, 244, 0) 58%),
    #fff;
  box-shadow: var(--ms-shadow-sm);
  margin-bottom: 18px;
}
.ms-welcome-title {
  font-size: 24px;
  font-weight: 650;
  letter-spacing: -.01em;
  margin: 0;
}
.ms-welcome-sub { margin: 6px 0 0; color: var(--ms-muted); font-size: 13.5px; }
.ms-welcome-stats {
  display: flex;
  gap: 32px;
  flex-wrap: wrap;
  margin-top: 22px;
  padding-top: 20px;
  border-top: 1px solid #eef2f6;
}
.ms-welcome-stat b {
  display: block;
  font-size: 22px;
  font-weight: 650;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.ms-welcome-stat span { font-size: 12.5px; color: var(--ms-muted); }

.ms-quick {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 12px;
}
.ms-quick a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 16px 18px;
  border: 1px solid var(--ms-line);
  border-radius: 12px;
  background: #fff;
  color: var(--ms-ink);
  font-size: 14px;
  font-weight: 500;
  text-decoration: none;
  transition: all .18s ease;
}
.ms-quick a:hover {
  border-color: var(--ms-accent);
  color: var(--ms-accent-dark);
  box-shadow: 0 6px 18px rgba(47, 111, 235, .1);
  text-decoration: none;
}
.ms-quick a::after { content: "→"; color: var(--ms-faint); font-weight: 400; }
.ms-quick a:hover::after { color: var(--ms-accent); }

.ms-progress { height: 6px; background: #eef1f5; border-radius: 999px; overflow: hidden; }
.ms-progress-bar {
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, #3b82f6, #60a5fa);
  transition: width .4s ease;
}

.ms-activity { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid #f2f5f8; }
.ms-activity:last-child { border-bottom: 0; }
.ms-activity-main { min-width: 0; flex: 1; }
.ms-activity-title { font-size: 13.5px; color: var(--ms-ink-2); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms-activity-time { font-size: 12px; color: var(--ms-faint); margin-top: 2px; }
.ms-amount { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ms-amount.is-plus { color: #16a34a; }
.ms-amount.is-minus { color: #dc2626; }

/* --------------------------------------------------------------------------
   状态徽章
   -------------------------------------------------------------------------- */
.ms-st {
  display: inline-block;
  padding: 2px 9px;
  border-radius: 999px;
  font-size: 12px;
  line-height: 1.7;
  background: #f1f5f9;
  color: #475569;
  white-space: nowrap;
}
.ms-st-0 { background: #fff7ed; color: #b45309; }
.ms-st-1 { background: #eff6ff; color: #1d4ed8; }
.ms-st-2 { background: #ecfdf5; color: #047857; }
.ms-st-3 { background: #f3f4f6; color: #6b7280; }
.ms-st-4 { background: #fef2f2; color: #b91c1c; }

/* --------------------------------------------------------------------------
   预约
   -------------------------------------------------------------------------- */
.ms-appt-list { display: grid; gap: 12px; }
.ms-appt {
  display: flex;
  gap: 18px;
  align-items: flex-start;
  padding: 18px 20px;
  border: 1px solid var(--ms-line);
  border-radius: 14px;
  background: #fff;
  transition: border-color .18s, box-shadow .18s;
}
.ms-appt:hover { border-color: var(--ms-line-2); box-shadow: 0 6px 18px rgba(16, 24, 40, .05); }
.ms-appt-date {
  flex: 0 0 68px;
  text-align: center;
  padding: 8px 0;
  border-radius: 10px;
  background: #f6f8fb;
  border: 1px solid #eef2f7;
}
.ms-appt-day { display: block; font-size: 24px; font-weight: 650; line-height: 1.1; font-variant-numeric: tabular-nums; }
.ms-appt-month { display: block; font-size: 12px; color: var(--ms-muted); margin-top: 2px; }
.ms-appt-main { flex: 1; min-width: 0; }
.ms-appt-service { font-size: 15px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ms-appt-meta { font-size: 13px; color: var(--ms-muted); margin: 4px 0 0; }
.ms-appt-note {
  margin: 10px 0 0;
  padding: 8px 12px;
  border-radius: 8px;
  background: #f8fafc;
  font-size: 12.5px;
  color: #55606e;
}
.ms-appt-side { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; flex: 0 0 auto; }

.ms-notice {
  border: 1px solid #dbe7fb;
  background: #f5f9ff;
  border-radius: 14px;
  padding: 18px 20px;
  font-size: 13px;
  color: #33507a;
  line-height: 1.8;
}
.ms-notice-title { font-weight: 600; margin: 0 0 6px; color: #1e3a5f; }
.ms-notice p { margin: 0; }

/* --------------------------------------------------------------------------
   空态 / 分页
   -------------------------------------------------------------------------- */
.ms-empty {
  text-align: center;
  padding: 56px 20px;
  color: var(--ms-muted);
  font-size: 14px;
}
.ms-empty-title { font-size: 15px; font-weight: 600; color: var(--ms-ink-2); margin-bottom: 6px; }
.ms-empty a { color: var(--ms-accent); }

.ms-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 26px;
}
.ms-pager a,
.ms-pager span {
  min-width: 36px;
  height: 36px;
  padding: 0 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ms-line-2);
  border-radius: 9px;
  font-size: 13.5px;
  color: var(--ms-ink-2);
  text-decoration: none;
  background: #fff;
}
.ms-pager a:hover { border-color: var(--ms-ink); color: var(--ms-ink); text-decoration: none; }
.ms-pager .is-current { background: var(--ms-ink); border-color: var(--ms-ink); color: #fff; }
.ms-pager .is-disabled { opacity: .45; }

/* --------------------------------------------------------------------------
   列表 / 消息 等行式条目
   -------------------------------------------------------------------------- */
.ms-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 16px 0;
  border-bottom: 1px solid #f2f5f8;
}
.ms-row:first-child { padding-top: 0; }
.ms-row:last-child { border-bottom: 0; padding-bottom: 0; }
.ms-row-title { font-size: 14.5px; font-weight: 500; margin: 0; color: var(--ms-ink); }
.ms-row-title a { color: inherit; text-decoration: none; }
.ms-row-title a:hover { color: var(--ms-accent); }
.ms-row-meta { font-size: 12.5px; color: var(--ms-muted); margin: 3px 0 0; }

.ms-people {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 12px;
}
.ms-person {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--ms-line);
  border-radius: 12px;
  background: #fff;
  text-decoration: none;
  color: inherit;
  transition: border-color .16s, box-shadow .16s;
  min-width: 0;
}
.ms-person:hover { border-color: var(--ms-line-2); box-shadow: 0 4px 14px rgba(16, 24, 40, .05); text-decoration: none; color: inherit; }
.ms-person-info { min-width: 0; display: flex; flex-direction: column; }
.ms-person-name { font-size: 14px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms-person-meta { font-size: 12px; color: var(--ms-muted); }

.ms-tabs { display: flex; gap: 4px; margin-bottom: 18px; border-bottom: 1px solid var(--ms-line); }
.ms-tabs a {
  padding: 10px 16px;
  font-size: 14px;
  color: var(--ms-muted);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
}
.ms-tabs a:hover { color: var(--ms-ink); text-decoration: none; }
.ms-tabs a.is-active { color: var(--ms-ink); font-weight: 600; border-bottom-color: var(--ms-ink); }

.ms-msg {
  display: flex;
  gap: 12px;
  padding: 16px 0;
  border-bottom: 1px solid #f2f5f8;
  cursor: pointer;
}
.ms-msg:first-child { padding-top: 0; }
.ms-msg:last-child { border-bottom: 0; padding-bottom: 0; }
.ms-msg-dot { width: 7px; height: 7px; border-radius: 50%; background: #ef4444; margin-top: 8px; flex: 0 0 auto; }
.ms-msg.is-read .ms-msg-dot { background: #dfe5ec; }
.ms-msg-title { font-size: 14px; font-weight: 500; margin: 0; color: var(--ms-ink); }
.ms-msg-body { font-size: 13px; color: var(--ms-muted); margin: 4px 0 0; }
.ms-msg-time { margin-left: auto; font-size: 12px; color: var(--ms-faint); flex: 0 0 auto; }

.ms-level-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(248px, 1fr));
  gap: 16px;
}
.ms-level-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px;
  border: 1px solid var(--ms-line);
  border-radius: 14px;
  background: #fff;
  box-shadow: var(--ms-shadow-sm);
}
.ms-level-card.is-current { border-color: var(--ms-accent); box-shadow: 0 0 0 3px rgba(47, 111, 235, .1); }
.ms-level-card.is-locked { opacity: .62; }
.ms-level-card .ms-level-name { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.ms-level-card .ms-level-desc { font-size: 13px; color: var(--ms-muted); min-height: 40px; }

/* --------------------------------------------------------------------------
   响应式
   -------------------------------------------------------------------------- */
@media (max-width: 960px) {
  .ms-layout { grid-template-columns: 1fr; }
  .ms-aside { position: static; }
  .ms-nav { display: flex; overflow-x: auto; border-radius: 12px; }
  .ms-nav li { border-top: 0 !important; flex: 0 0 auto; }
  .ms-nav a { white-space: nowrap; padding: 12px 14px; }
  .ms-nav a.is-active { box-shadow: inset 0 -2px 0 var(--ms-accent); }
  .ms-split { grid-template-columns: 1fr; }
  .ms-hero-actions { margin-left: 0; padding-top: 0; width: 100%; }
}
@media (max-width: 720px) {
  .ms-page { padding: 24px 0 48px; }
  .ms-title { font-size: 24px; }
  .ms-form-grid, .ms-form-grid.is-3 { grid-template-columns: 1fr; }
  .ms-hero-body { padding: 0 20px 22px; }
  .ms-card-head, .ms-card-body { padding-left: 18px; padding-right: 18px; }
  .ms-chip-label { flex-basis: 100%; padding-top: 0; margin-bottom: 4px; }
  .ms-chip-row { flex-direction: column; gap: 4px; }
  .ms-appt { flex-wrap: wrap; }
  .ms-appt-side { flex-direction: row; align-items: center; width: 100%; justify-content: space-between; }
}

/* ==========================================================================
   后台沿用的表格/徽章（8 个后台模板依赖这些类名）
   ========================================================================== */
.member-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}
.member-table th,
.member-table td {
  padding: 11px 12px;
  border-bottom: 1px solid var(--nv-border, #edf0f4);
  text-align: left;
  vertical-align: top;
}
.member-table th {
  font-weight: 500;
  font-size: 12.5px;
  color: #6b7280;
  background: #fafbfc;
  white-space: nowrap;
}
.member-table tbody tr:hover { background: #fbfcfe; }
.member-table td.nv-num { text-align: right; font-variant-numeric: tabular-nums; }
.member-actions { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }

.member-level {
  display: inline-flex;
  align-items: center;
  font-size: 12px;
  padding: 1px 8px;
  border-radius: 999px;
  color: #fff;
  line-height: 1.7;
}

.member-pager {
  display: flex;
  gap: 6px;
  justify-content: center;
  margin-top: 24px;
  flex-wrap: wrap;
}
.member-pager a,
.member-pager span {
  padding: 6px 12px;
  border: 1px solid var(--nv-border, #e5e7eb);
  border-radius: 8px;
  font-size: 13.5px;
  text-decoration: none;
  color: inherit;
  min-width: 36px;
  text-align: center;
}
.member-pager a:hover { border-color: #2f6feb; color: #2f6feb; }
.member-pager .is-current { background: #0f172a; border-color: #0f172a; color: #fff; }
.member-pager .is-disabled { opacity: .45; }

.member-status { font-size: 12px; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.member-status-0 { background: #fef3c7; color: #92400e; }
.member-status-1 { background: #dcfce7; color: #166534; }
.member-status-2 { background: #fee2e2; color: #991b1b; }
.member-status-3 { background: #f3f4f6; color: #4b5563; }

.member-badge { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; line-height: 18px; }
.member-badge.is-ok   { background: #dcfce7; color: #15803d; }
.member-badge.is-warn { background: #fef3c7; color: #b45309; }
.member-badge.is-off  { background: #f3f4f6; color: #6b7280; }

.member-batch-bar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 10px 14px; margin: 12px 0;
  background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 8px;
  font-size: 13px;
}
.member-check { display: inline-flex; align-items: center; gap: 6px; }
.member-batch-sep { color: #6b7280; }

/* 后台预约页 */
.ma-stat-row { display: flex; gap: 28px; flex-wrap: wrap; margin-bottom: 18px; }
.ma-stat { display: flex; flex-direction: column; gap: 2px; }
.ma-stat-num { font-size: 24px; font-weight: 600; line-height: 1.2; font-variant-numeric: tabular-nums; }
.ma-stat-num.ma-warn { color: #b45309; }
.ma-stat-label { font-size: 12.5px; color: #6b7280; }
/* 宽型统计卡：占满整行（放标签云等横向内容），避免被挤在窄列里换行错位 */
.ma-stat-wide { flex: 1 1 100%; }
/* 统计卡内的标签组容器：之前模板在用但 CSS 从未定义 → nv-tag 会掉换行 */
.ma-stat-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.ma-filter {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding-top: 16px; border-top: 1px dashed #e5e7eb;
}
.ma-filter .nv-input { width: auto; min-width: 140px; }
.ma-table .ma-when b { display: block; font-weight: 600; font-variant-numeric: tabular-nums; }
.ma-table .ma-when span { font-size: 12.5px; color: #6b7280; }
.ma-who { font-weight: 500; }
.ma-sub { font-size: 12.5px; color: #6b7280; }
.ma-note { max-width: 240px; font-size: 13px; color: #4b5563; }
.ma-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ma-actions .ma-note-input { width: 130px; }
.ma-st { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 12px; line-height: 1.7; }
.ma-st-0 { background: #fff7ed; color: #b45309; }
.ma-st-1 { background: #eff6ff; color: #1d4ed8; }
.ma-st-2 { background: #ecfdf5; color: #047857; }
.ma-st-3 { background: #f3f4f6; color: #6b7280; }
.ma-st-4 { background: #fef2f2; color: #b91c1c; }

/* 会员详情页关注/粉丝列表 */
.ms-relation-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ms-relation-list li { font-size: 13.5px; color: var(--nv-text-2); }

/* ==================================================================
 * 后台会员页：筛选项与表单字段
 *
 * 【为什么这段必须存在】
 * 会员列表、字段配置、积分明细这些后台页用的 .member-field /
 * .member-filters 系列类名，之前在 CSS 里根本没定义 ——
 * 页面能跑，但筛选区是一排裸 input，看起来像"页面坏了"。
 * 类名和样式必须同时存在，否则就是"界面在、样式不在"。
 * ================================================================== */

.member-filters {
  padding: 14px 16px;
  border: 1px solid var(--ms-border, #e5e7eb);
  border-radius: var(--ms-radius-sm, 8px);
  background: var(--ms-bg-alt, #f9fafb);
  margin-bottom: 14px;
}

.member-filter-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px 16px;
}

.member-filter-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 8px;
  margin-top: 12px;
}

.member-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.member-field > label {
  font-size: 12px;
  color: var(--ms-muted, #6b7280);
}

.member-field input,
.member-field select,
.member-field textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 7px 10px;
  border: 1px solid var(--ms-border, #d1d5db);
  border-radius: var(--ms-radius-sm, 8px);
  background: var(--ms-bg, #fff);
  color: var(--ms-text, #111827);
  font-size: 13px;
}

.member-field input:focus,
.member-field select:focus,
.member-field textarea:focus {
  outline: none;
  border-color: var(--ms-accent, #2f6feb);
}

.member-check-item {
  width: 15px;
  height: 15px;
  cursor: pointer;
}

/* 后台表格里偶发用到的链接按钮与状态标签（核心 admin.css 未覆盖的两种） */
.nv-btn-link {
  border: 0;
  background: none;
  padding: 0;
  color: var(--ms-accent, #2f6feb);
  font-size: 13px;
  cursor: pointer;
}

.nv-btn-link:hover {
  text-decoration: underline;
}

.nv-tag-ok {
  background: #dcfce7;
  color: #15803d;
}
