/* ===== V12 Design System Overrides ===== */
/* Activated by <html data-v12> — refined spacing, typography, and nav */
:root {
  --v12-font-display: Georgia, 'Times New Roman', 'Noto Serif SC', serif;
  --v12-shadow-card: 0 6px 22px rgba(80,65,40,0.10), 0 2px 6px rgba(80,65,40,0.05);
  --v12-shadow-soft: 0 3px 14px rgba(80,65,40,0.08);
  --v12-cool-balance: #4A7C9D;
}

/* ── V12 Nav Bar: City pill + cleaner wordmark layout ── */
.v12-nav .logo-section {
  padding: 8px 12px 6px;
  height: 56px;
}
.v12-nav .logo {
  gap: 8px;
}
.v12-nav .logo-mark {
  width: 42px;
  height: 42px;
}
.v12-nav .logo-title {
  font-size: 17px;
  letter-spacing: -0.3px;
  background: none;
  -webkit-text-fill-color: var(--accent-deep);
  color: var(--accent-deep);
  filter: none;
  animation: none;
  display: flex;
  align-items: center;
  gap: 6px;
}
.v12-nav .logo-title .highlight {
  font-family: var(--v12-font-display);
  font-size: 1.5em;
  vertical-align: -3px;
}
.v12-nav .logo-city {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-family: var(--v12-font-display);
  font-size: 11px;
  font-weight: 400;
  font-style: italic;
  color: var(--accent);
  background: var(--accent-dim);
  padding: 2px 8px 2px 10px;
  border-radius: var(--radius-full);
  cursor: pointer;
  transition: background 0.2s;
  line-height: 1.4;
  -webkit-text-fill-color: var(--accent);
}
.v12-nav .logo-city:hover {
  background: var(--accent-soft);
}
.v12-nav .logo-city .city-chevron {
  width: 8px;
  height: 8px;
  margin-left: 1px;
}
.v12-nav .logo-sub {
  font-size: 7px;
  letter-spacing: 1.2px;
  color: var(--text-tertiary);
  min-height: 16px;
}
.v12-nav .logo-actions {
  gap: 4px;
}
.v12-nav .logo-btn {
  width: 32px;
  height: 32px;
  background: rgba(255,253,247,0.6);
}
.v12-nav .logo-btn svg {
  width: 14px;
  height: 14px;
}

/* ── V12 Hero ── */
.v12-nav .hero {
  margin: 4px 12px 2px;
}

/* ── V12 Pricing & Type Scale ── */
.v12-price-hero {
  font-family: var(--v12-font-display);
  font-size: 28px;
  font-weight: 800;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
  color: var(--accent);
}
.v12-section-title {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--text-primary);
}
.v12-body {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  line-height: 1.45;
}
.v12-assist {
  font-size: 12px;
  font-weight: 400;
  color: var(--text-tertiary);
}
.v12-tag {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--text-muted);
  text-transform: uppercase;
}

/* ── V12 Section Spacing ── */
.v12-section {
  padding: 0 12px;
}
.v12-section + .v12-section {
  margin-top: 16px;
}

/* ── V12 F3: Profile VIP badge on avatar ── */
.v12-nav .profile-vip-badge {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--accent);
  color: #fff;
  margin-left: -14px;
  margin-top: 24px;
  border: 2px solid var(--bg);
  box-shadow: 0 1px 4px rgba(0,0,0,0.12);
  flex-shrink: 0;
}

/* ── V12 Detail Page — Compact Contact + CTA + VIP Hint ── */
/* H5: merge "联系组织者" INTO the organizer card (right side of name row) */
.v12-nav .detail-org {
  position: relative;
  margin-bottom: 4px;
  padding-right: 80px;  /* space for contact button on the right */
}
.v12-nav .detail-contact-btn {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: auto;
  margin: 0;
  padding: 6px 10px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
  background: var(--accent-dim);
  color: var(--accent);
  border: 1px solid var(--border-accent);
  display: inline-flex;
  gap: 4px;
}
.v12-nav .detail-contact-btn .lucide {
  width: 12px;
  height: 12px;
}
.v12-nav .detail-contact-btn.joined {
  background: var(--accent-soft);
}
/* H6: VIP upgrade hint — 紧贴退出登录下方 + 页面滚动时吸附底部 */
.v12-nav .vip-upgrade-hint {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  /* feat/vip-hint-relocate: 紧贴 detail-fee-section 下方，文档流定位，跟随页面上下滚动 */
  margin: -4px 12px 14px;  /* 负上方 margin 制造紧贴视觉，正下方 margin 与下一板块分隔 */
  padding: 8px 12px;
  font-size: 11px;
  color: var(--muted);
  background: var(--bg-highlight);
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.2s;
  position: static;        /* 文档流定位，与 fee-section 相对位置随滚动移动 */
}
.v12-nav .vip-upgrade-hint:active {
  background: var(--accent-dim);
  color: var(--accent);
}
.v12-nav .vip-upgrade-hint .lucide {
  width: 12px;
  height: 12px;
  color: var(--accent);
}
/* fix(#20260821-002): v12 详情页按钮 padding 也调整为 36px（与主区规则一致） */
.v12-nav .detail-footer-btn {
  width: calc(100% - 24px);
  margin: 0 12px 15px;
  padding: 36px 16px;
  font-size: 14px;
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.v12-nav .detail-footer-btn .lucide {
  width: 16px;
  height: 16px;
}
.v12-nav .detail-footer-btn > span {
  text-align: center;
  display: inline-block;
}

/* ── V12 QR Code Modal ── */
.deals-qr-modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 280px;
  max-width: 90vw;
  background: var(--bg-highlight);
  border-radius: var(--radius-xl);
  padding: 28px 24px 20px;
  text-align: center;
  z-index: 200;
  box-shadow: var(--v12-shadow-card, 0 6px 22px rgba(80,65,40,0.10));
}
.deals-qr-close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--accent-dim);
  color: var(--text-secondary);
  cursor: pointer;
}
.deals-qr-icon {
  width: 44px;
  height: 44px;
  background: var(--accent);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  margin: 0 auto 10px;
}
.deals-qr-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: 4px;
}
.deals-qr-tag {
  font-size: 12px;
  font-weight: 600;
  color: var(--accent);
  margin-bottom: 16px;
}
.deals-qr-code {
  display: flex;
  justify-content: center;
  margin-bottom: 10px;
}
.deals-qr-placeholder {
  width: 160px;
  height: 160px;
}
.deals-qr-timer {
  font-size: 10px;
  color: var(--text-tertiary);
  margin-top: 8px;
  text-align: center;
}
.deals-qr-footnote {
  font-size: 10px;
  color: var(--text-muted);
  margin-top: 6px;
}

/* ===== Design System Tokens (V5 cream white + coral) ===== */
:root {
  --cream: #FCFAF5;
  --cream-deep: #F7F2E9;
  --cream-warm: #FEFCF8;
  --oil-highlight: rgba(255, 255, 255, 0.78);
  --oil-shadow: rgba(140, 110, 70, 0.18);

  --bg-deep: #FCF9F3;
  --bg-surface: #FEFCF8;
  --bg-elevated: rgba(255, 253, 247, 0.88);
  --bg-highlight: #FFFFFD;
  --bg-card: #FFFFFE;
  --bg-glass: rgba(255, 253, 247, 0.72);
  --canvas-clear: 252, 249, 243;

  --accent: #FF5E5E;
  --accent-soft: rgba(255, 94, 94, 0.10);
  --accent-glow: rgba(255, 94, 94, 0.20);
  --accent-dim: rgba(255, 94, 94, 0.06);
  --accent-deep: #D93B3B;

  --text-primary: #221C14;
  --text-secondary: #5E5140;
  --text-tertiary: #8A7C66;
  --text-muted: #B8A98E;
  --text-white: #FFFFFF;

  --vip-gold: #D9A84B;
  --kid-blue: #4EADE0;
  --official-purple: #8C70D6;
  --live-red: #E94256;
  --cyan: #20BCD1;
  --orange: #E88A3A;
  --pink: #E074A4;
  --success: #22C55E;  /* feat/audit-profile-layout: 修复绑定手机/微信 icon 不可见（var(--green) 未定义）*/

  --border-subtle: rgba(120, 90, 50, 0.08);
  --border-light: rgba(120, 90, 50, 0.14);
  --border-accent: rgba(255, 94, 94, 0.25);

  --radius-full: 9999px;
  --radius-2xl: 24px;
  --radius-xl: 18px;
  --radius-lg: 14px;
  --radius-md: 10px;
  --radius-sm: 7px;
  --radius-xs: 5px;

  --shadow-card: 0 6px 22px rgba(140, 110, 70, 0.12), 0 2px 6px rgba(140, 110, 70, 0.06);
  --shadow-soft: 0 3px 14px rgba(140, 110, 70, 0.10);
  --shadow-glow: 0 0 30px rgba(255, 94, 94, 0.15);
  --shadow-up: 0 -4px 24px rgba(140, 110, 70, 0.15);

  --tab-bar-height: 50px;

  --space-3xs: 3px;
  --space-2xs: 5px;
  --space-xs: 8px;
  --space-sm: 12px;
  --space-md: 16px;
  --space-lg: 20px;
  --space-xl: 24px;
  --space-2xl: 32px;
  --space-3xl: 40px;

  --font: -apple-system, "SF Pro Display", "SF Pro Text", "Inter", "PingFang SC", "Noto Sans SC", "Microsoft YaHei", sans-serif;
}

* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

html, body {
  height: 100%;
  background: #F5F0E6;
  font-family: var(--font);
  color: var(--text-primary);
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
}


/* ===== Phone Frame ===== */
.phone {
  width: 390px;
  height: 844px;
  background: var(--bg-deep);
  border-radius: 48px;
  overflow: hidden;
  position: relative;
  display: flex;
  flex-direction: column;
  box-shadow:
    0 0 0 1px rgba(120,90,50,0.12),
    0 30px 70px rgba(140,110,70,0.28),
    0 8px 20px rgba(140,110,70,0.18);
  transition: background 0.35s ease;
}
/* cream oil texture overlay on phone body */
.phone::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(120% 60% at 20% -10%, rgba(255,255,255,0.55), transparent 60%),
    radial-gradient(90% 50% at 80% 110%, rgba(255,250,240,0.5), transparent 60%),
    repeating-linear-gradient(135deg, rgba(255,255,255,0.06) 0 2px, transparent 2px 6px),
    repeating-linear-gradient(45deg, rgba(160,120,70,0.008) 0 3px, transparent 3px 9px);
  pointer-events: none;
  z-index: 0;
  mix-blend-mode: soft-light;
  opacity: 0.9;
}
.phone > * { position: relative; z-index: 1; }

/* ===== 小屏移动设备适配：满屏铺开（覆盖固定 390x844 手机框） ===== */
@media (max-width: 500px), (max-height: 900px) {
  .phone {
    width: 100vw;
    height: 100vh; /* 旧浏览器回退 */
    height: 100dvh;
    max-width: 100%;
    max-height: 100%;
    border-radius: 0;
    box-shadow: none;
  }
  /* safe-area：顶部导航避开刘海，底部 TabBar 避开手势条 */
  .top-area {
    padding-top: env(safe-area-inset-top, 0px);
  }
  .tab-bar {
    height: calc(var(--tab-bar-height, 50px) + env(safe-area-inset-bottom, 0px));
    padding-bottom: calc(var(--space-2xs) + env(safe-area-inset-bottom, 0px));
  }
}

/* ===== Background Grid ===== */
.bg-grid {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image: 
    linear-gradient(rgba(255, 94, 108, 0.020) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 94, 108, 0.020) 1px, transparent 1px);
  background-size: 44px 44px;
  mask-image: radial-gradient(ellipse 85% 55% at 50% -5%, black 30%, transparent 78%);
  -webkit-mask-image: radial-gradient(ellipse 85% 55% at 50% -5%, black 30%, transparent 78%);
}

/* ===== Particle Canvas ===== */
#particle-canvas {
  position: absolute;
  inset: 0;
  z-index: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* ===== Scrollable Content ===== */
.scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  padding-bottom: 150px;
  position: relative;
  z-index: 1;
  overscroll-behavior: contain;
}
.scroll::-webkit-scrollbar { display: none; }

/* ===== Status Bar ===== */
.status-bar {
  display: none !important;
}
.status-left, .status-right { display: flex; align-items: center; gap: 5px; }

/* ===== Top Sticky Area ===== */
.top-area {
  position: sticky;
  top: 0;
  z-index: 10;
  background: linear-gradient(180deg, rgba(255, 94, 94, 0.14), rgba(251, 245, 232, 0.82));
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid var(--border-subtle);
}
/* V8: cream top bar with light coral tint — white text switched to deep coral */
.top-area .logo-title {
  background: none;
  -webkit-text-fill-color: var(--accent-deep);
  color: var(--accent-deep);
  filter: none;
  animation: none;
}
.top-area .logo-title .highlight {
  color: var(--accent-deep);
  -webkit-text-fill-color: var(--accent-deep);
}
.top-area .hero-tagline-text .ongoing-count,
.top-area .hero-tagline-text .ongoing-text { color: var(--accent-deep); }
.top-area .hero-tagline-text .live-icon { color: var(--accent-deep); }
/* ===== Logo Section ===== */
.logo-section {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 20px 6px;
  height: 62px;
  box-sizing: border-box;
  position: relative;
  z-index: 2;
}

.logo {
  display: flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  user-select: none;
}

.logo-mark {
  width: 48px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  border-radius: 50%;
  overflow: hidden;
}

.logo-mark-img {
  display: block;
  width: 118%;
  height: 118%;
  object-fit: cover;
  object-position: center;
}

.logo-wordmark {
  display: flex;
  flex-direction: column;
  gap: 1px;
  justify-content: flex-start;
}

.logo-title {
  font-size: 19px;
  font-weight: 800;
  letter-spacing: -0.5px;
  line-height: 1.05;
  background: linear-gradient(90deg, #ffffff 0%, var(--accent) 30%, #ffffff 50%, var(--accent) 70%, #ffffff 100%);
  background-size: 220% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 0 10px rgba(255, 94, 108, 0.18));
  animation: logoShine 20s linear infinite;
}

.logo-title .highlight {
  font-family: Georgia, "Times New Roman", serif;
  font-style: italic;
  font-weight: 700;
  letter-spacing: 0.5px;
  color: var(--accent);
  -webkit-text-fill-color: var(--accent);
  font-size: 1.7em;
  display: inline-block;
  vertical-align: -4px;
  line-height: 0.9;
}

.logo-title .logo-city {
  font-family: Georgia, "Times New Roman", serif;
  font-style: italic;
  font-weight: 300;
  letter-spacing: 0.3px;
  color: var(--accent);
  -webkit-text-fill-color: var(--accent);
  font-size: 0.85em;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  background: var(--accent-dim);
  padding: 2px 10px;
  border-radius: var(--radius-full);
  margin-top: -1px;
  line-height: 1.4;
  cursor: pointer;
  transition: background 0.2s;
}
.logo-title .logo-city:hover {
  background: var(--accent-soft);
}
.logo-title .logo-city .logo-city-icon {
  width: 11px;
  height: 11px;
  flex-shrink: 0;
}
html[data-lang="zh"] .logo-title .logo-city {
  color: #000000;
  -webkit-text-fill-color: #000000;
}

@keyframes logoShine {
  0% { background-position: 220% center; }
  100% { background-position: -220% center; }
}

.logo-sub {
  font-size: 8px;
  font-weight: 700;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-tertiary);
  line-height: 1;
  min-height: 18px;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
}
/* logo-sub reserved height: 18px = 2 lines of English subtitle (8px × 2 + line-height) */

.logo-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}

.logo-btn {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255,253,247,0.8);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-full);
  color: var(--text-secondary);
  box-shadow: 0 3px 10px rgba(140,110,70,0.1), inset 0 1px 0 rgba(255,255,255,0.8);
  cursor: pointer;
  transition: all 0.2s ease;
  position: relative;
}
.logo-btn:hover {
  background: var(--bg-highlight);
  color: var(--text-primary);
}
.logo-btn svg {
  width: 16px;
  height: 16px;
}
.logo-btn .badge {
  position: absolute;
  top: 7px;
  right: 7px;
  width: 7px;
  height: 7px;
  background: var(--live-red);
  border-radius: 50%;
  border: 2px solid var(--bg-deep);
}

/* ── Page back button ── */
.page-back-btn {
  /* 固定在 .phone 容器内边缘（按钮整体在 .phone 内部）
     bootstrap.js 会自动把按钮迁移到 .phone 内，因此 position: absolute 相对 .phone 定位
     left:10px 距 .phone 左内边 10px（按钮外边缘整体可见，不被屏幕边缘吃掉） */
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-card, #fff);
  color: var(--accent);
  border: 1px solid var(--border-subtle, #F0E8E0);
  cursor: pointer;
  z-index: 15;
  flex-shrink: 0;
  transition: background 0.2s ease, transform 0.15s ease;
  box-shadow: var(--shadow-soft, 0 2px 8px rgba(0,0,0,0.06));
  padding: 0;
}
.page-back-btn:active {
  background: var(--accent-dim, rgba(255, 94, 94, 0.08));
  transform: translateY(-50%) scale(0.92);
}
.page-back-btn svg {
  width: 15px;
  height: 15px;
  display: block;
}
.page-forward-btn {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-card, #fff);
  color: var(--accent);
  border: 1px solid var(--border-subtle, #F0E8E0);
  cursor: pointer;
  z-index: 15;
  flex-shrink: 0;
  transition: background 0.2s ease, transform 0.15s ease;
  box-shadow: var(--shadow-soft, 0 2px 8px rgba(0,0,0,0.06));
  padding: 0;
}
.page-forward-btn:active {
  background: var(--accent-dim, rgba(255, 94, 94, 0.08));
  transform: translateY(-50%) scale(0.92);
}
.page-forward-btn svg {
  width: 15px;
  height: 15px;
  display: block;
}

/* ===== Hero Area ===== */
.hero {
  margin: 8px 14px 4px;
  padding: 2px 0;
  position: relative;
  z-index: 2;
  background: transparent;
  border: none;
  border-radius: 0;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.hero-greeting {
  font-size: 20px;
  font-weight: 300;
  color: var(--text-primary);
  letter-spacing: -0.3px;
  line-height: 1.15;
  margin-bottom: 1px;
  white-space: nowrap;
}

.hero-greeting strong {
  font-weight: 700;
  color: var(--text-primary);
  text-shadow: none;
  -webkit-text-stroke: 0;
}

.hero-tagline {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 1px;
}

.hero-tagline-text {
  font-size: 12px;
  font-weight: 500;
  color: var(--text-primary);
  letter-spacing: 0.2px;
  white-space: nowrap;
}

.hero-tagline-text .ongoing-count,
.hero-tagline-text .ongoing-text {
  color: var(--accent);
  font-weight: 700;
  -webkit-text-stroke: 0;
  text-shadow: none;
  paint-order: stroke fill;
}

.hero-tagline-text .live-icon {
  display: inline-flex;
  align-items: center;
  margin-left: 3px;
  color: var(--accent);
  animation: pulseLive 2s ease-in-out infinite;
}

.hero-tagline-text .live-icon svg {
  width: 12px;
  height: 12px;
}

@keyframes pulseLive {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.65; transform: scale(0.92); }
}

.hero-tagline-accent {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--accent-soft);
  border: 1px solid var(--border-accent);
  padding: 3px 10px;
  border-radius: var(--radius-full);
  font-size: 10px;
  font-weight: 700;
  color: var(--accent);
  letter-spacing: 0.3px;
  animation: pulseGlow 3s ease-in-out infinite;
}

@keyframes pulseGlow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 94, 108, 0); }
  50% { box-shadow: 0 0 16px rgba(255, 94, 108, 0.12); }
}

/* ===== Carousel ===== */
.section-carousel {
  padding: 14px 20px 16px;
  position: relative;
  z-index: 2;
}

.carousel {
  position: relative;
  height: 185px;
  border-radius: var(--radius-xl);
  overflow: hidden;
  background: var(--bg-elevated);
  border: 1px solid var(--border-subtle);
  box-shadow: var(--shadow-card);
  position: relative;
}
.carousel, .event-card, .trend-card, .soon-item, .cat-icon, .vip-card, .perk-item, .login-card { position: relative; }
.carousel::after, .event-card::after, .trend-card::after, .soon-item::after, .cat-icon::after, .vip-card::after, .perk-item::after, .login-card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 30%);
  pointer-events: none;
  mix-blend-mode: soft-light;
}
.carousel::before {
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.9), inset 0 -1px 0 rgba(120,90,50,0.08);
  pointer-events:none;
}

.carousel-track {
  display: flex;
  height: 100%;
  transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
}

.carousel-slide {
  min-width: 100%;
  height: 100%;
  position: relative;
  overflow: hidden;
}

.carousel-slide .slide-bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  transition: transform 6s ease;
}

.carousel-slide .slide-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(255,253,247,0.82) 0%, rgba(7,9,11,0.35) 42%, rgba(140,110,70,0.04) 72%, transparent 100%);
}

.carousel-slide .slide-content {
  position: absolute;
  left: var(--space-lg);
  bottom: var(--space-lg);
  right: var(--space-lg);
  z-index: 2;
}

.slide-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--accent);
  color: #fff;
  padding: 3px 10px 3px 11px;
  border-radius: var(--radius-full);
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  margin-bottom: 7px;
}
.slide-tag.vip-tag {
  background: var(--vip-gold);
  color: #fff;
}
.slide-tag.new-tag {
  background: var(--cyan);
  color: #fff;
}
.slide-tag.live-tag {
  background: var(--live-red);
  color: #fff;
}

.slide-title {
  font-size: 21px;
  font-weight: 800;
  color: #fff;
  line-height: 1.2;
  margin-bottom: 4px;
  letter-spacing: -0.3px;
  text-shadow: 0 2px 12px rgba(140,110,70,0.15);
}

.slide-sub {
  font-size: 11px;
  color: rgba(255,255,255,0.65);
  font-weight: 500;
}

.carousel-dots {
  position: absolute;
  right: var(--space-lg);
  bottom: var(--space-lg);
  z-index: 3;
  display: flex;
  gap: 5px;
}

.carousel-dots .dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: rgba(255,255,255,0.22);
  transition: all 0.4s ease;
  cursor: pointer;
}

.carousel-dots .dot.active {
  width: 24px;
  border-radius: 4px;
  background: var(--accent);
  box-shadow: 0 0 14px var(--accent-glow);
}

/* ===== Quick Stats ===== */
.section-stats {
  padding: 0 20px 20px;
  position: relative;
  z-index: 2;
}

.stats-row {
  display: flex;
  gap: 10px;
}

.stat-item {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  background: transparent;
  border-radius: var(--radius-lg);
}

.stat-icon {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
  background: transparent;
}
.stat-icon.events svg {
  width: 18px;
  height: 18px;
  color: var(--accent);
  filter: drop-shadow(0 0 6px rgba(255, 94, 108, 0.25));
}
.stat-icon.users svg {
  width: 18px;
  height: 18px;
  color: var(--official-purple);
  filter: drop-shadow(0 0 6px rgba(162, 132, 240, 0.25));
}
.stat-icon.hot svg {
  width: 18px;
  height: 18px;
  color: var(--orange);
  filter: drop-shadow(0 0 6px rgba(240, 136, 60, 0.25));
}

.stat-info {
  display: flex;
  flex-direction: column;
}

.stat-number {
  font-size: 15px;
  font-weight: 800;
  color: var(--text-primary);
  line-height: 1.1;
  letter-spacing: -0.2px;
}

.stat-label {
  font-size: 10px;
  font-weight: 500;
  color: var(--text-tertiary);
  line-height: 1.2;
  margin-top: 1px;
}

/* ===== Categories ===== */
.section-categories {
  padding: 0 20px 8px;
  position: relative;
  z-index: 2;
}

.section-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  margin-bottom: 14px;
}

.section-title-group {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.section-title {
  font-size: 18px;
  font-weight: 800;
  color: var(--accent);
  letter-spacing: -0.3px;
  line-height: 1.2;
}

.section-desc {
  font-size: 11px;
  color: var(--text-tertiary);
  font-weight: 500;
}

.section-link {
  font-size: 12px;
  color: var(--text-tertiary);
  font-weight: 600;
  cursor: pointer;
  transition: color 0.2s;
  white-space: nowrap;
  padding: 4px 0;
}
.section-link:hover { color: var(--accent); }

.cat-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 9px;
}

.cat-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 4px 6px 2px;
  background: transparent;
  border-radius: var(--radius-lg);
  cursor: pointer;
  transition: all 0.25s ease;
  text-decoration: none;
}
.cat-item:hover {
  transform: translateY(-2px);
}
.cat-item:active { transform: translateY(0px) scale(0.96); }

.cat-icon {
  width: 44px;
  height: 44px;
  border-radius: var(--radius-full);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--accent);
  border: 1px solid var(--accent);
  color: #fff;
  box-shadow: 0 4px 12px var(--accent-glow);
  transition: all 0.25s ease;
}
.cat-icon img {
  width: 26px;
  height: 26px;
  display: block;
  -webkit-mask-size: contain;
          mask-size: contain;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  background: currentColor;
}
.cat-item { color: var(--text-secondary); }
.cat-item:hover { color: var(--text-primary); }
.cat-item:active { color: var(--accent); }
.cat-item:active .cat-icon {
  width: 44px;
  height: 44px;
  border-radius: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--accent);
  border: 1px solid var(--accent);
  color: #fff;
  transition: all 0.25s ease;
  position: relative;
  box-shadow: 0 4px 12px var(--accent-glow);
}
.cat-icon .lucide {
  width: 21px;
  height: 21px;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.cat-item {
  color: var(--text-secondary);
  transition: color 0.2s;
}
.cat-item:active .cat-icon,
.cat-item:hover .cat-icon {
  color: #fff;
  border-color: var(--accent);
  background: var(--accent);
  box-shadow: 0 0 0 4px var(--accent-dim), 0 4px 12px var(--accent-glow);
}

.cat-label {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-secondary);
  text-align: center;
  white-space: nowrap;
}

/* ===== VIP Guide Banner ===== */
.vip-guide {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin: -2px 20px 8px;
  padding: 7px 14px;
  background: rgba(255, 94, 94, 0.2) !important;
  border: none;
  border-radius: var(--radius-lg);
  box-shadow: none;
  cursor: pointer;
  transition: opacity 0.2s;
  position: relative;
  z-index: 2;
}
.vip-guide:hover {
  opacity: 0.85;
}
.vip-guide-icon {
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
}
.vip-guide-icon svg {
  width: 18px;
  height: 18px;
  color: var(--vip-gold);
}
.vip-guide-text {
  flex: 1;
  font-size: 12px;
  font-weight: 600;
  color: #000000;
  line-height: 1.4;
}
.vip-guide-more {
  font-size: 12px;
  font-weight: 600;
  color: #000000;
  flex-shrink: 0;
  margin-right: -4px;
}

/* English-only font size reductions (Chinese sizes unchanged) */
html[data-lang="en"] .vip-guide-text {
  font-size: 8.5px;
  letter-spacing: -0.2px;
  white-space: nowrap;
  flex: 0 1 auto;
}
html[data-lang="en"] .vip-guide { gap: 6px; }
html[data-lang="en"] .vip-guide-more { font-size: 8.5px; margin-left: 4px; margin-right: 0; }
html[data-lang="en"] .hero-greeting {
  font-size: 15px;
  font-weight: 900;
  letter-spacing: -0.8px;
  color: #000000;
}
html[data-lang="en"] .hero-tagline-text { font-size: 11px; }
.vip-guide .arrow {
  width: 16px;
  height: 16px;
  color: var(--text-tertiary);
  flex-shrink: 0;
}
.vip-guide .arrow-icon {
  color: rgba(255, 255, 255, 0.9);
  flex-shrink: 0;
}

/* ===== Filters ===== */
.section-filters {
  padding: 0 0 14px;
  position: relative;
  z-index: 2;
}

.filter-header-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 20px;
  margin-bottom: var(--space-xs);
}

.nearby-toggle {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  padding: 6px 13px 6px 10px;
  border-radius: var(--radius-full);
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  cursor: pointer;
  transition: all 0.2s;
  user-select: none;
}
.nearby-toggle:hover { color: var(--accent); border-color: var(--border-accent); }
.nearby-toggle svg { width: 14px; height: 14px; }
.nearby-toggle .check { color: var(--accent); display: none; }
.nearby-toggle.active { 
  background: var(--accent-soft); 
  border-color: var(--border-accent); 
  color: var(--accent); 
}
.nearby-toggle.active .check { display: inline; }

.distance-select {
  display: none;
  padding: 0 20px;
  margin-bottom: var(--space-sm);
  gap: 6px;
  overflow-x: auto;
  scrollbar-width: none;
}
.distance-select.active { display: flex; }
.distance-option {
  flex-shrink: 0;
  padding: 5px 14px;
  border-radius: var(--radius-full);
  font-size: 11px;
  font-weight: 600;
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  color: var(--text-tertiary);
  cursor: pointer;
  transition: all 0.2s;
  white-space: nowrap;
}
.distance-option:hover { background: var(--bg-elevated); color: var(--text-secondary); }
.distance-option.active {
  background: var(--accent-soft);
  color: var(--accent);
  border-color: var(--border-accent);
}

.chip-scroll {
  display: flex;
  gap: 7px;
  padding: 0 20px;
  overflow-x: auto;
  scrollbar-width: none;
}
.chip-scroll::-webkit-scrollbar { display: none; }

.chip {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 6px 15px;
  border-radius: var(--radius-full);
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  cursor: pointer;
  transition: all 0.2s ease;
  white-space: nowrap;
  user-select: none;
}
.chip:hover { background: var(--bg-elevated); color: var(--text-primary); }
.chip.active {
  background: var(--accent-soft);
  color: var(--accent);
  border-color: var(--border-accent);
}
.chip.all-chip {
  background: var(--accent);
  color: #fff;
  font-weight: 800;
  border-color: transparent;
}
.chip.all-chip:hover {
  background: var(--accent);
  opacity: 0.9;
}

/* ===== Trending Section ===== */
.section-trending {
  padding: 0 20px 20px;
  position: relative;
  z-index: 2;
}

.trending-grid {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  scrollbar-width: none;
  padding: 2px 0 4px;
}
.trending-grid::-webkit-scrollbar { display: none; }

.trend-card {
  flex-shrink: 0;
  width: 170px;
  cursor: pointer;
  background: var(--bg-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-lg);
  overflow: hidden;
  cursor: pointer;
  transition: all 0.25s ease;
}
.trend-card:hover {
  border-color: var(--border-light);
  transform: translateY(-2px);
  box-shadow: var(--shadow-soft);
}

.trend-card-image {
  height: 100px;
  background-size: cover;
  background-position: center;
  position: relative;
}

.trend-card-image .trend-badge {
  position: absolute;
  top: 6px;
  left: 6px;
  padding: 2px 8px;
  border-radius: var(--radius-xs);
  font-size: 9px;
  font-weight: 800;
  background: var(--live-red);
  color: #fff;
  letter-spacing: 0.3px;
}

.trend-card-image .trend-rank {
  position: absolute;
  bottom: 6px;
  right: 6px;
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(140,110,70,0.15);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  border-radius: var(--radius-full);
  font-size: 10px;
  font-weight: 800;
  color: var(--accent);
}

.trend-card-body {
  padding: 10px 10px 10px;
}

.trend-card-title {
  font-size: 12px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.3;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin-bottom: 4px;
}

.trend-card-meta {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  color: var(--text-tertiary);
  font-weight: 500;
}

.trend-card-meta svg {
  width: 11px;
  height: 11px;
  opacity: 0.5;
}

.trend-card-price {
  font-size: 14px;
  font-weight: 800;
  color: var(--accent);
  margin-top: 5px;
  letter-spacing: -0.3px;
}
.trend-card-price .unit { font-size: 10px; font-weight: 700; }
.trend-card-price .original {
  font-size: 10px;
  color: var(--text-tertiary);
  text-decoration: line-through;
  font-weight: 600;
  margin-left: 4px;
}

/* ===== Starting Soon Section ===== */
.section-soon {
  padding: 0 20px 22px;
  position: relative;
  z-index: 2;
}

.soon-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.soon-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px;
  background: var(--bg-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-lg);
  cursor: pointer;
  transition: all 0.2s ease;
}
.soon-item:hover {
  border-color: var(--border-light);
  background: var(--bg-surface);
  transform: translateX(3px);
}

.soon-item-time {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  min-width: 44px;
  flex-shrink: 0;
}

.soon-item-day {
  font-size: 20px;
  font-weight: 800;
  color: var(--text-primary);
  line-height: 1;
  letter-spacing: -0.5px;
}

.soon-item-month {
  font-size: 9px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.soon-item-dot {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--accent);
  margin-top: 4px;
}

.soon-item-info {
  flex: 1;
  min-width: 0;
}

.soon-item-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.3;
  margin-bottom: 2px;
  display: -webkit-box;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.soon-item-location {
  font-size: 10px;
  color: var(--text-tertiary);
  font-weight: 500;
}

.soon-item-price {
  font-size: 14px;
  font-weight: 800;
  color: var(--accent);
  flex-shrink: 0;
  letter-spacing: -0.3px;
}
.soon-item-price .unit { font-size: 10px; }
.soon-item-price.free { color: var(--cyan); }

/* ===== Event Cards ===== */
.section-events {
  padding: 0 20px;
  position: relative;
  z-index: 2;
}

.event-card {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 12px;
  padding: 10px;
  margin-bottom: var(--space-md);
  background: var(--bg-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-lg);
  cursor: pointer;
  transition: all 0.25s ease;
  animation: fadeInUp 0.4s ease both;
}

/* fix(#20260821-001): 左右两栏布局
   第1栏：缩略图 (.event-card-image，flex 0 0 40%，方形圆角)
   第2栏：主信息 (.event-card-main，flex 1，含时间/聚合/标签/价格/组织者) */
.event-card-main {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1 1 0;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
}

/* fix(#20260821-001+#003): 价格 + 组织者 并排底部行；英文长文本时允许 wrap */
.event-card-footer-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px solid rgba(0,0,0,0.05);
  flex-wrap: wrap;
}
.event-card-footer-row .price-group {
  margin-top: 0;
  flex-shrink: 0;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
}
.event-card-footer-row .org-info {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 100%;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 6px;
}

/* 旧 .event-card-aside 规则保留以兼容 JS 旧引用，但实际不再使用 */
.event-card-aside { display: none; }
.event-card-aside .event-card-info-aggregate { display: none; }
.event-card-aside .price-group { display: none; }
.event-card:nth-child(1) { animation-delay: 0.03s; }
.event-card:nth-child(2) { animation-delay: 0.07s; }
.event-card:nth-child(3) { animation-delay: 0.11s; }
.event-card:nth-child(4) { animation-delay: 0.15s; }
.event-card:nth-child(5) { animation-delay: 0.19s; }

.event-card:hover {
  border-color: var(--border-light);
  background: var(--bg-surface);
  transform: translateY(-1px);
  box-shadow: var(--shadow-soft);
}
.event-card:active { transform: translateY(0px) scale(0.99); }

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

.event-card-image {
  /* fix(#20260821-001): 方形圆角，40% 宽度 */
  flex: 0 0 40%;
  aspect-ratio: 1 / 1;
  align-self: flex-start;
  border-radius: 12px;
  background-size: cover;
  background-position: center;
  flex-shrink: 0;
  position: relative;
  overflow: hidden;
}

.event-card-image .card-tag {
  position: absolute;
  top: 6px;
  left: 6px;
  padding: 2px 8px;
  border-radius: var(--radius-xs);
  font-size: 9px;
  font-weight: 800;
  background: var(--accent);
  color: #fff;
  letter-spacing: 0.3px;
}
.event-card-image .card-tag.kid-tag { background: var(--kid-blue); color: #fff; }
.event-card-image .card-tag.vip-only-tag { background: var(--vip-gold); color: #fff; }
.event-card-image .card-tag.live-tag { background: var(--live-red); color: #fff; }

/* fix(#039+#041+#042+#003): 信息聚合 — 3 项：
   1) 前5头像  2) 已报名/限制  3) 过往参与人次
   fix(#20260821-001): 移到主区时间下方
   fix(#20260821-003): 长英文聚合文字可换行 */
.event-card-info-aggregate {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  margin-top: 4px;
  margin-bottom: 0;
  font-size: 11px;
  color: var(--text-tertiary);
  font-weight: 500;
  line-height: 1.4;
  min-width: 0;
  max-width: 100%;
}
.event-card-info-aggregate:empty { display: none; }
.event-card-info-aggregate > div {
  min-width: 0;
  max-width: 100%;
  word-break: break-word;
  overflow-wrap: anywhere;
}
.event-card-info-aggregate span {
  word-break: break-word;
  overflow-wrap: anywhere;
}

.event-card-info-avatars {
  display: flex;
  align-items: center;
  flex-shrink: 0;
}

/* 已报名文本 */
.event-card-info-reg {
  display: flex;
  align-items: center;
  gap: 3px;
  white-space: nowrap;
}
.event-card-info-reg strong { color: var(--accent, #FF5E5E); font-weight: 700; }

/* 过往参与人次 */
.event-card-info-hist {
  display: flex;
  align-items: center;
  gap: 3px;
  white-space: nowrap;
  color: var(--text-secondary, #555);
}
.event-card-info-hist strong { font-weight: 700; color: var(--text-primary, #222); }
.event-card-info-avatar {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  border: 1.5px solid #fff;
  margin-left: -6px;
  flex-shrink: 0;
}
.event-card-info-avatar:first-child { margin-left: 0; }

.event-card-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-width: 0;
}

.event-card-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
  line-height: 1.35;
  margin-bottom: 5px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  /* fix(#20260821-003): 长英文单词可换行，避免溢出 */
  word-break: break-word;
  overflow-wrap: anywhere;
}

.event-card-meta {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin-bottom: 6px;
}

.meta-row {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  color: var(--text-tertiary);
  font-weight: 500;
}
.meta-row svg {
  width: 12px;
  height: 12px;
  flex-shrink: 0;
  opacity: 0.5;
}

.event-card-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 6px;
  border-top: 1px solid rgba(255,255,255,0.04);
}

/* feat/event-card-tags: 位置下方的标签行（亲子 / VIP） */
.event-card-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 8px;
  min-height: 18px;  /* 占位：避免无标签时空布局抖动 */
}
.event-card-tags:empty {
  display: none;
}
.event-card-tag {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 7px;
  border-radius: 6px;
  font-size: 10px;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: 0.2px;
}
.event-card-tag-vip {
  background: linear-gradient(135deg, #f59e0b, #fbbf24);
  color: #fff;
  box-shadow: 0 1px 2px rgba(245, 158, 11, 0.3);
}
.event-card-tag-family {
  background: rgba(34, 197, 94, 0.15);
  color: #16a34a;
  border: 1px solid rgba(34, 197, 94, 0.3);
}
.event-card-tag-vip .lucide,
.event-card-tag-family .lucide {
  width: 11px;
  height: 11px;
}

.org-info {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

/* fix(#041): 在 .event-card-main 内（缩略图右列小区域）用 28px 头像 */
.event-card-main .org-avatar {
  width: 28px;
  height: 28px;
  border-width: 1.5px;
}

.org-avatar {
  position: relative;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  flex-shrink: 0;
  border: 2px solid var(--surface, #fff);
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
  /* issue-20260816-025: 放大至与 .detail-org-avatar 同尺寸（44×44），
     让角标（官方 OFF / 商家 / VIP）有充足空间显示 */
}
/* Default avatar fallback — person silhouette when image fails to load */
.org-avatar::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--bg-highlight, #f0f0f0) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23b0b0b0'%3E%3Ccircle cx='12' cy='8' r='4.5'/%3E%3Cpath d='M4 22c0-4.4 3.6-8 8-8s8 3.6 8 8'/%3E%3C/svg%3E") center/55% no-repeat;
  z-index: -1;
  border-radius: 50%;
  pointer-events: none;
}

.org-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.org-badge {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 1px 5px;
  border-radius: 4px;
  font-size: 8px;
  font-weight: 800;
  background: rgba(167,132,240,0.10);
  color: var(--official-purple);
  margin-left: 2px;
}
.org-badge.gold {
  background: rgba(240,200,80,0.10);
  color: var(--vip-gold);
}

.price-group {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-shrink: 0;
}
.price-vip {
  font-size: 15px;
  font-weight: 800;
  color: var(--vip-gold);
  letter-spacing: -0.3px;
}
.price-vip .unit { font-size: 10px; font-weight: 700; }
.price-normal {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  text-decoration: line-through;
}
.price-free {
  font-size: 14px;
  font-weight: 800;
  color: var(--accent);
}

/* ===== Tab Bar ===== */
.phone > .tab-bar,
.tab-bar {
  flex: 0 0 auto;
  position: absolute !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 30 !important;
  height: var(--tab-bar-height, 50px);
  padding: var(--space-3xs) var(--space-xs) var(--space-2xs);
  display: flex;
  justify-content: space-around;
  align-items: stretch;
  background: var(--bg-elevated, rgba(254,252,248,0.92));
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-top: 1px solid var(--border-subtle);
  z-index: 20;
}

.tab-item {
  display: flex;
  flex: 1;
  min-width: 0;
  flex-direction: column;
  align-items: center;
  gap: var(--space-3xs);
  background: none;
  border: none;
  color: var(--text-tertiary);
  cursor: pointer;
  transition: color 0.2s;
  position: relative;
  padding: 0 var(--space-xs);
  -webkit-tap-highlight-color: transparent;
}

.tab-item .lucide {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: all 0.2s;
}
.tab-item:hover { color: var(--accent); }
.tab-item.active { color: var(--accent); }
.tab-item.active .lucide {
  filter: drop-shadow(0 0 6px var(--accent-glow, rgba(255,94,94,0.35)));
}
.tab-label {
  font-size: 10px;
  line-height: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
.tab-item.fab .fab-bg {
  width: 36px;
  height: 36px;
  background: var(--accent);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  box-shadow: none;
  transition: transform 0.2s;
}

.tab-item.fab .fab-bg .lucide {
  width: 20px;
  height: 20px;
  color: #fff;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  filter: none;
}

.tab-item.fab:hover .fab-bg {
  transform: scale(1.05);
}

.tab-item.fab .tab-label {
  color: var(--text-primary);
}

.tab-fab {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 3px;
  cursor: pointer;
  flex: 1;
  -webkit-tap-highlight-color: transparent;
}
.tab-fab .lucide {
  width: 40px;
  height: 40px;
  background: var(--accent);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  stroke-width: 2.5;
  margin-bottom: 2px;
  box-shadow: 0 4px 16px rgba(255,94,94,0.3);
  transition: transform 0.2s;
}
.tab-fab:active .lucide {
  transform: scale(0.92);
}

.tab-item .tab-badge {
  position: absolute;
  display: none;
  top: 2px;
  right: 6px;
  width: 8px;
  height: 8px;
  background: var(--live-red);
  border-radius: 50%;
  border: 2px solid var(--bg-deep);
}

/* ===== Section Divider ===== */
.section-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 2px 20px 16px;
  position: relative;
  z-index: 2;
}

.section-divider-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--border-light), transparent);
}

.section-divider-label {
  font-size: 9px;
  font-weight: 700;
  color: var(--text-tertiary);
  letter-spacing: 1.5px;
  text-transform: uppercase;
  white-space: nowrap;
}

.section-divider-dot {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--accent);
}

/* ===== Load More ===== */
.load-more {
  display: flex;
  justify-content: center;
  padding: 6px 0 26px;
  position: relative;
  z-index: 2;
}

.load-more-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--bg-glass);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid var(--border-subtle);
  padding: 9px 24px;
  border-radius: var(--radius-full);
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  cursor: pointer;
  transition: all 0.2s;
}
.load-more-btn:hover {
  border-color: var(--border-light);
  color: var(--text-primary);
  background: var(--bg-elevated);
}
.load-more-btn svg {
  width: 14px;
  height: 14px;
}

/* ===== Lucide Icons Styling ===== */
.lucide { 
  width: var(--icon-size, 22px); 
  height: var(--icon-size, 22px);
  stroke-width: 1.8;
  color: currentColor;
  display: block;
  transition: all 0.2s ease;
  filter: drop-shadow(0 0 3px transparent);
}
.lucide.glow-accent { 
  filter: drop-shadow(0 0 4px rgba(255, 94, 108, 0.15));
}
.lucide.glow-gold { 
  filter: drop-shadow(0 0 4px rgba(240, 200, 80, 0.15));
}
.lucide.accent { color: var(--accent); }
.lucide.gold { color: var(--vip-gold); }
.lucide.cyan { color: var(--cyan); }
.lucide.purple { color: var(--official-purple); }
.lucide.orange { color: var(--orange); }

.icon-btn .lucide { width: 17px; height: 17px; }
.stat-icon .lucide { width: 18px; height: 18px; }
.vip-guide-icon .lucide { width: 18px; height: 18px; }
.fab-bg .lucide { width: 20px; height: 20px; stroke-width: 2; color: #fff; }
.meta-row .lucide { width: 12px; height: 12px; opacity: 0.5; }
.logo-btn .lucide { width: 16px; height: 16px; }
.check-icon { width: 13px; height: 13px; }
.load-more-btn .lucide { width: 14px; height: 14px; }
.arrow-icon { width: 16px; height: 16px; color: var(--text-tertiary); }

/* ===== Top 5 3D Coverflow (added for style3) ===== */
.section-top5 {
  padding: 6px 0 14px;
  position: relative;
  z-index: 2;
}
.top5-head {
  padding: 0 20px 8px;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
}
.top5-title-group {
  display: flex;
  align-items: center;
  gap: 8px;
}
.top5-title {
  font-size: 18px;
  font-weight: 800;
  color: var(--accent);
  letter-spacing: -0.3px;
}
.top5-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 22px;
  padding: 0 10px;
  border-radius: var(--radius-full);
  background: linear-gradient(135deg, #FF5E5E 0%, #FF9B7A 100%);
  color: #fff;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.3px;
  box-shadow: 0 4px 14px var(--accent-glow);
}
.top5-badge::before {
  content: '';
  width: 10px;
  height: 10px;
  background: radial-gradient(circle, currentColor 40%, transparent 55%);
  border-radius: 50%;
  opacity: 0.8;
}
.top5-hint {
  font-size: 11px;
  color: var(--text-tertiary);
  font-weight: 500;
}

.doorway {
  position: relative;
  perspective: 1100px;
  perspective-origin: 50% 52%;
}
.doorway-stage {
  position: relative;
  height: 260px;
  overflow: visible;
  touch-action: pan-y;
  user-select: none;
}

/* glass layer (sits beneath the cards, full width strip, only where cards are) */
.doorway-glass-layer {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 300px;
  height: 230px;
  transform: translate(-50%, -50%);
  border-radius: var(--radius-2xl);
  overflow: hidden;
  pointer-events: none;
  background: linear-gradient(135deg,
    rgba(255, 94, 108, 0.08) 0%,
    rgba(30, 213, 224, 0.07) 35%,
    rgba(240, 200, 80, 0.06) 65%,
    rgba(162, 132, 240, 0.08) 100%);
  border: 1px solid rgba(255, 255, 255, 0.12);
  box-shadow:
    0 30px 60px rgba(140,110,70,0.18),
    inset 0 1px 0 rgba(255,255,255,0.18),
    inset 0 -1px 0 rgba(140,110,70,0.10),
    0 0 80px rgba(255, 94, 108,0.08);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
}
.doorway-video,
.doorway-fallback {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0.55;
  mix-blend-mode: screen;
}
.doorway-fallback { opacity: 0.7; }
.doorway-chroma {
  position: absolute;
  inset: -30%;
  background: conic-gradient(
    from 0deg,
    rgba(255, 94, 108,0.18),
    rgba(30,213,224,0.14),
    rgba(242,59,80,0.10),
    rgba(220,150,90,0.14),
    rgba(240,200,80,0.14),
    rgba(255, 94, 108,0.18));
  filter: blur(28px);
  opacity: 0.55;
  animation: chromaSpin 14s linear infinite;
}
@keyframes chromaSpin { to { transform: rotate(360deg); } }
.doorway-highlight {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(115deg, transparent 38%, rgba(255,255,255,0.18) 50%, transparent 62%) 0 0/220% 100% no-repeat,
    radial-gradient(120% 60% at 50% -10%, rgba(255,255,255,0.22), transparent 60%);
  animation: glassSweep 6s ease-in-out infinite;
}
@keyframes glassSweep {
  0%   { background-position: -120% 0, 0 0; }
  55%  { background-position: 140% 0, 0 0; }
  100% { background-position: 140% 0, 0 0; }
}
.doorway-vignette {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(120% 80% at 50% 50%, transparent 55%, rgba(7,9,11,0.55) 100%),
    linear-gradient(180deg, rgba(7,9,11,0.0) 0%, rgba(7,9,11,0.35) 100%);
}

/* cards */
.doorway-track {
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
}
.door-card {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 240px;
  height: 240px;
  margin-left: -120px;
  margin-top: -120px;
  border-radius: 22px;
  overflow: hidden;
  background: var(--bg-elevated);
  border: 1px solid rgba(255,255,255,0.08);
  box-shadow:
    0 18px 44px rgba(140,110,70,0.18),
    inset 0 1px 0 rgba(255,255,255,0.10),
    inset 0 0 0 1px rgba(255,255,255,0.02);
  transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1),
              opacity 0.45s ease,
              filter 0.45s ease,
              box-shadow 0.45s ease;
  will-change: transform, opacity;
  cursor: pointer;
}
.door-card-img {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
}
.door-card-veil {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(7,9,11,0.0) 30%, rgba(7,9,11,0.75) 100%),
    linear-gradient(0deg, rgba(7,9,11,0.25) 0%, transparent 45%);
}
.door-card-gloss {
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0) 45%);
  mix-blend-mode: overlay;
  opacity: 0.6;
}
.door-card-rank {
  position: absolute;
  top: 12px;
  left: 12px;
  width: 34px;
  height: 34px;
  border-radius: 12px;
  background: linear-gradient(135deg, #FF5E5E 0%, #FF9B7A 100%);
  color: #fff;
  font-size: 16px;
  font-weight: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 6px 18px rgba(255,94,94,0.45);
  letter-spacing: -0.5px;
}
.door-card-rank.rank-silver {
  background: linear-gradient(135deg, #E4E8EE 0%, #B8BFC8 100%);
  color: #fff;
  box-shadow: 0 6px 16px rgba(200,210,220,0.25);
}
.door-card-rank.rank-bronze {
  background: linear-gradient(135deg, #E0A264 0%, #B87A40 100%);
  color: #fff;
  box-shadow: 0 6px 16px rgba(224,162,100,0.30);
}
.door-card-rank.rank-other {
  background: rgba(255,255,255,0.10);
  color: var(--text-primary);
  border: 1px solid rgba(255,255,255,0.14);
  box-shadow: none;
}
.door-card-tag {
  position: absolute;
  top: 12px;
  right: 12px;
  height: 22px;
  padding: 0 9px;
  border-radius: var(--radius-full);
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.6px;
  display: inline-flex;
  align-items: center;
  text-transform: uppercase;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
.door-card-tag.tag-vip {
  background: rgba(240,200,80,0.92);
  color: #fff;
}
.door-card-tag.tag-hot {
  background: rgba(242,59,80,0.92);
  color: #fff;
}
.door-card-tag.tag-live {
  background: rgba(242,59,80,0.92);
  color: #fff;
}
.door-card-tag.tag-live::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: #fff;
  margin-right: 5px;
  animation: livePulse 1.2s ease-in-out infinite;
}
.door-card-tag.tag-new {
  background: rgba(30,213,224,0.92);
  color: #fff;
}
@keyframes livePulse { 50% { opacity: 0.3; } }
.door-card-body {
  position: absolute;
  left: 14px;
  right: 14px;
  bottom: 12px;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 10px;
}
.door-card-info { min-width: 0; flex: 1; }
.door-card-title {
  font-size: 15px;
  font-weight: 800;
  color: #fff;
  line-height: 1.2;
  text-shadow: 0 2px 10px rgba(0,0,0,0.6);
  letter-spacing: -0.2px;
  margin-bottom: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.door-card-meta {
  font-size: 10px;
  color: rgba(255,255,255,0.75);
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 4px;
}
.door-card-meta .lucide { width: 10px; height: 10px; }
.door-card-cta {
  flex-shrink: 0;
  height: 30px;
  padding: 0 12px;
  border-radius: var(--radius-full);
  background: var(--accent);
  color: #fff;
  font-size: 11px;
  font-weight: 800;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  box-shadow: 0 8px 20px var(--accent-glow);
}
.door-card-cta .lucide { width: 12px; height: 12px; }

/* center card highlight */
.door-card.is-center {
  box-shadow:
    0 28px 60px rgba(0,0,0,0.65),
    0 0 0 2px rgba(255,94,94,0.40),
    0 0 60px rgba(255,94,94,0.25),
    inset 0 1px 0 rgba(255,255,255,0.16);
}
.door-card.is-side { opacity: 0.85; filter: saturate(0.85) brightness(0.82); }
.door-card.is-far  { opacity: 0.35; filter: saturate(0.6) brightness(0.55) blur(1px); pointer-events: none; }
.door-card.is-hidden { opacity: 0; pointer-events: none; }

/* dots */
.doorway-dots {
  display: flex;
  justify-content: center;
  gap: 6px;
  margin-top: 14px;
}
.doorway-dots .dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgba(255,255,255,0.20);
  transition: all 0.4s ease;
  cursor: pointer;
}
.doorway-dots .dot.active {
  width: 22px;
  border-radius: 4px;
  background: var(--accent);
  box-shadow: 0 0 12px var(--accent-glow);
}

/* light theme adjustments for doorway */

/* ============================================ */
/* Page: Discover                               */
/* ============================================ */
/* ============================================ */
/* Discover V12 — Category Tabs + Article Feed  */
/* ============================================ */

.discover-cat-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 2px;
  padding: 6px 6px;
  background: var(--bg-page);
  border-bottom: 1px solid var(--border-subtle);
}

.discover-cat-tab {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 6px 2px;
  border: none;
  background: transparent;
  border-radius: 8px;
  font-size: 10px;
  font-weight: 500;
  color: var(--text-secondary);
  cursor: pointer;
  transition: all 0.15s;
  white-space: nowrap;
  overflow: hidden;
  text-align: center;
}
.discover-cat-tab .lucide {
  width: 16px;
  height: 16px;
  color: var(--text-tertiary);
  transition: color 0.15s;
  flex-shrink: 0;
}
.discover-cat-tab.active {
  background: var(--accent);
  color: #fff;
}
.discover-cat-tab.active .lucide {
  color: #fff;
}
.discover-cat-tab:not(.active):active {
  background: var(--accent-dim);
  color: var(--accent);
}
.discover-cat-tab:not(.active):active .lucide {
  color: var(--accent);
}

/* ---- Discover Article Feed —小红书瀑布流两列 ---- */
.discover-articles {
  padding: 8px 12px 20px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

.discover-article {
  background: var(--bg-highlight);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: var(--shadow-soft);
  transition: box-shadow 0.2s;
  display: flex;
  flex-direction: column;
}
.discover-article:active {
  box-shadow: var(--shadow-card);
}

.article-img {
  width: 100%;
  aspect-ratio: 3 / 4;
  background-size: cover;
  background-position: center;
  position: relative;
  flex-shrink: 0;
}

.article-vip-lock {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  background: rgba(0,0,0,0.35);
  backdrop-filter: blur(3px);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1px;
}
.article-vip-lock .lucide {
  width: 22px;
  height: 22px;
}

.article-body {
  padding: 8px 10px 10px;
  flex: 1;
  display: flex;
  flex-direction: column;
}

.article-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  line-height: 1.35;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin-bottom: 4px;
}

.article-date {
  font-size: 10px;
  color: var(--text-muted);
  margin-bottom: 6px;
}

.article-addr {
  font-size: 10px;
  color: var(--accent);
  font-weight: 500;
  margin-bottom: 4px;
}

.article-actions {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 14px;
  padding-top: 6px;
  border-top: 1px solid var(--border-subtle);
  margin-top: auto;
}
.article-action {
  display: flex;
  align-items: center;
  gap: 2px;
  border: none;
  background: none;
  padding: 2px 0;
  cursor: pointer;
  font-size: 10px;
  color: var(--text-tertiary);
  font-family: inherit;
}
.article-action .lucide {
  width: 14px;
  height: 14px;
}
.article-action.liked { color: var(--accent); }
.article-action.liked .lucide { color: var(--accent); }
.article-action.liked .lucide path { fill: currentColor; }
.article-action.bookmarked { color: var(--vip-gold); }
.article-action.bookmarked .lucide { color: var(--vip-gold); }
.article-action.bookmarked .lucide path { fill: currentColor; }

.discover-empty {
  grid-column: 1 / -1;
  text-align: center;
  padding: 60px 20px;
  color: var(--text-muted);
  font-size: 14px;
  font-weight: 500;
}

/* ============================================ */
/* Page: Publish                                */
/* ============================================ */
.publish-form { padding:8px 20px 90px; }
.publish-section { margin-bottom:16px; }
.publish-label { font-size:11px; font-weight:700; color:var(--text-secondary); margin-bottom:5px; letter-spacing:0.3px; }
.publish-input { width:100%; padding:11px 14px; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:var(--radius-md); font-size:14px; font-weight:500; color:var(--text-primary); outline:none; }
.publish-input:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-dim); }
.publish-textarea { width:100%; padding:11px 14px; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:var(--radius-md); font-size:14px; font-weight:500; color:var(--text-primary); outline:none; min-height:100px; font-family:inherit; resize:vertical; }
.publish-textarea:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-dim); }
.publish-row { display:flex; gap:10px; }
.publish-row .publish-section { flex:1; }
.publish-categories { display:flex; gap:6px; flex-wrap:wrap; }
.publish-cat { padding:6px 14px; border-radius:20px; font-size:12px; font-weight:600; border:1.5px solid var(--border-subtle); color:var(--text-tertiary); background:var(--bg-highlight); cursor:pointer; }
.publish-cat.selected { color:var(--accent); background:var(--accent-soft); border-color:var(--border-accent); }
.publish-upload { display:flex; gap:8px; }
.publish-upload-slot { width:72px; height:72px; border-radius:var(--radius-md); border:1.5px dashed var(--border-light); display:flex; align-items:center; justify-content:center; color:var(--text-muted); cursor:pointer; }
.publish-upload-slot:hover { border-color:var(--border-accent); color:var(--accent); }
.publish-location { display:flex; align-items:center; gap:8px; color:var(--text-secondary); font-size:13px; font-weight:500; padding:10px 14px; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:var(--radius-md); cursor:pointer; }
.publish-location .lucide { width:16px; height:16px; color:var(--accent); }
.publish-btn { display:block; width:100%; padding:13px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-lg); font-size:15px; font-weight:800; cursor:pointer; margin-top:6px; }
.publish-btn:active { opacity:0.85; }
.publish-btn:disabled { opacity:0.4; cursor:default; }

/* Publish org type selector */
.publish-org-types { display:flex; flex-direction:row; gap:6px; flex-wrap:nowrap; }
.publish-org-option { display:inline-flex; align-items:center; gap:3px; padding:3px 8px; border-radius:14px; font-size:11px; font-weight:600; border:1.5px solid var(--border-light); cursor:pointer; background:var(--bg-highlight,#f5f5f5); color:var(--text-secondary,#666); transition:all 0.15s; white-space:nowrap; }
.publish-org-option:active { transform:scale(0.97); }
.publish-org-option.selected { color:var(--accent); background:var(--accent-soft,#eef2ff); border-color:var(--accent); }
.publish-org-option .lucide { width:13px; height:13px; }

/* Fee Type Selector */
.publish-fee-types { display:flex; gap:8px; }
.publish-fee-option { flex:1; display:flex; flex-direction:column; align-items:center; gap:6px; padding:12px 6px; border-radius:var(--radius-md); border:1.5px solid var(--border-light); background:var(--bg-highlight); cursor:pointer; text-align:center; font-size:12px; font-weight:600; color:var(--text-tertiary); transition:all 0.15s; }
.publish-fee-option.selected { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }
.publish-fee-option .lucide { color:var(--text-muted); width:20px; height:20px; }
.publish-fee-option.selected .lucide { color:var(--accent); }

/* Sub Price Groups */
#subPrices { display:grid; grid-template-columns:1fr 1fr; gap:6px; }
.publish-sub-item { display:flex; align-items:center; gap:3px; min-width:0; }
.publish-sub-option { padding:3px 6px; border-radius:12px; font-size:11px; font-weight:600; border:1.5px solid var(--border-light); color:var(--text-tertiary); background:var(--bg-highlight); cursor:pointer; user-select:none; white-space:nowrap; transition:all 0.15s; flex-shrink:0; }
.publish-sub-option.selected { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }
.publish-sub-input-wrap { display:flex; align-items:center; gap:1px; flex:1; min-width:0; }
.publish-sub-currency { font-size:11px; font-weight:700; color:var(--text-muted); flex-shrink:0; }
.publish-sub-input { flex:1; min-width:0; height:24px; border-radius:4px; border:1px solid var(--border-light); background:var(--bg-card); padding:0 4px; font-size:12px; color:var(--text-primary); outline:none; width:0; }
.publish-sub-input:focus { border-color:var(--accent); }

/* AA Price Hint */
.publish-aa-hint { font-size:11px; color:var(--text-muted); margin-top:4px; padding-left:2px; }

/* Activity Type Chips */
.publish-type-options { display:flex; gap:8px; }
.publish-type-chip { display:flex; align-items:center; gap:6px; padding:8px 14px; border-radius:20px; font-size:13px; font-weight:600; border:1.5px solid var(--border-light); color:var(--text-secondary); background:var(--bg-highlight); cursor:pointer; transition:all 0.15s; }
.publish-type-chip.selected { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }

/* Refund Policy */
.publish-refund-options { display:flex; gap:8px; }
.publish-refund-option { flex:1; display:flex; flex-direction:column; align-items:center; gap:6px; padding:10px 6px; border-radius:var(--radius-md); border:1.5px solid var(--border-light); background:var(--bg-highlight); cursor:pointer; text-align:center; font-size:11px; font-weight:600; color:var(--text-tertiary); transition:all 0.15s; }
.publish-refund-option.selected { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }
.publish-refund-option .lucide { width:16px; height:16px; color:var(--text-muted); }
.publish-refund-option.selected .lucide { color:var(--accent); }

/* ============================================ */
/* Page: Event Detail                           */
/* ============================================ */
.detail-hero { margin:8px 20px 14px; border-radius:var(--radius-xl); overflow:hidden; box-shadow:var(--shadow-card); position:relative; height:200px; background-size:cover; background-position:center; }
.detail-hero-tag { position:absolute; top:12px; left:12px; padding:4px 10px; border-radius:6px; font-size:10px; font-weight:700; background:var(--accent); color:#fff; }
/* .detail-back removed — back button now lives in logo-actions as icon-only X */
/* fix(#20260821-002): detail-body 与底部按钮间距调整为 15px */
.detail-body { padding:0 20px 15px; }
.detail-title { font-size:22px; font-weight:800; color:var(--text-primary); letter-spacing:-0.4px; line-height:1.25; margin-bottom:8px; }
.detail-tags { display:flex; gap:6px; margin-bottom:12px; flex-wrap:wrap; }
.detail-tag { padding:3px 10px; border-radius:20px; font-size:10px; font-weight:700; background:var(--accent-soft); color:var(--accent); }
.detail-tag.official { background:var(--accent-dim); color:var(--official-purple); }
.detail-tag.vip { background:var(--accent-dim); color:var(--vip-gold); }
/* ======= Fee Type + Price Section (V12) ======= */
.detail-fee-section { margin-bottom:var(--space-sm); display:flex; flex-wrap:wrap; gap:var(--space-xs); align-items:flex-start; }
.detail-fee-badge { font-size:9px; font-weight:800; color:var(--text-white); background:var(--accent); padding:var(--space-3xs) var(--space-xs); border-radius:var(--radius-sm); letter-spacing:0.5px; flex-shrink:0; line-height:16px; }
.detail-fee-badge.free { background:var(--kid-blue); }
.detail-fee-badge.aa { background:var(--vip-gold); }
.detail-price-block { display:flex; flex-direction:column; gap:var(--space-3xs); flex:1; }
.detail-price-row { display:flex; align-items:center; gap:var(--space-2xs); }
.detail-price-row .price-type { font-size:11px; color:var(--text-muted); font-weight:600; min-width:44px; }
.detail-price-row .price-value { font-size:18px; font-weight:800; color:var(--text-primary); letter-spacing:-0.3px; }
.detail-price-row.vip .price-value { color:var(--vip-gold); }
.detail-price-row .price-save { font-size:9px; font-weight:700; color:var(--text-white); background:var(--vip-gold); padding:var(--space-3xs) var(--space-2xs); border-radius:var(--radius-xs); line-height:16px; }
.detail-sub-prices { display:flex; flex-wrap:wrap; gap:var(--space-3xs); width:100%; margin-top:var(--space-3xs); }
.sub-price-chip { font-size:9px; color:var(--accent); background:var(--accent-soft); padding:var(--space-3xs) var(--space-sm); border-radius:var(--radius-sm); font-weight:600; line-height:18px; border:1px solid var(--accent-dim); }
/* ======= Activity Type (V12) ======= */
.detail-activity-type { display:flex; gap:var(--space-2xs); margin-bottom:var(--space-sm); flex-wrap:wrap; }
.activity-chip { font-size:10px; font-weight:700; padding:var(--space-3xs) var(--space-xs); border-radius:var(--radius-md); display:inline-flex; align-items:center; gap:var(--space-3xs); }
.activity-chip.vip-only { background:var(--accent-dim); color:var(--vip-gold); border:1px solid var(--border-light); }
.activity-chip.family { background:var(--accent-dim); color:var(--pink); border:1px solid var(--border-light); }
/* 新版徽章（page.js 动态控制 id=detailVipOnlyChip/detailFamilyChip）*/
.activity-chip-vip { background:linear-gradient(135deg, #f59e0b, #d97706); color:#fff; border:none; box-shadow:0 1px 3px rgba(217,119,6,0.35); }
.activity-chip-family { background:var(--accent-dim); color:var(--pink); border:1px solid var(--border-light); }
/* ======= Family Prices (V12) ======= */
.detail-family-prices { background:var(--bg-highlight); border-radius:var(--radius-sm); padding:var(--space-xs) var(--space-sm); margin-bottom:var(--space-md); border:1px solid var(--border-subtle); }
.detail-family-prices .detail-info-row { margin-bottom:var(--space-3xs); }
.detail-family-prices .detail-info-row:last-child { margin-bottom:0; }
/* ======= Rules & Refund (V12) ======= */
.detail-rules-section { background:var(--bg-highlight); border-radius:var(--radius-sm); padding:var(--space-xs) var(--space-sm); margin-bottom:var(--space-sm); border:1px solid var(--border-subtle); }
.detail-rules-header { display:flex; align-items:center; gap:var(--space-2xs); cursor:pointer; font-size:12px; font-weight:700; color:var(--text-primary); }
.detail-info-icon { width:16px; height:16px; flex-shrink:0; }
.detail-chevron-icon { width:14px; height:14px; flex-shrink:0; margin-left:auto; transition:transform 0.2s; }
.detail-time-sep { margin:0 var(--space-3xs); color:var(--text-muted); }
.detail-rules-body { padding-top:var(--space-xs); display:block; }
.rules-row { display:flex; align-items:flex-start; gap:var(--space-2xs); margin-bottom:var(--space-2xs); font-size:11px; line-height:1.5; flex-wrap:wrap; }
.rules-row:last-child { margin-bottom:0; }
.rules-label { font-weight:700; color:var(--text-primary); white-space:nowrap; min-width:54px; }
.rules-text { color:var(--text-muted); flex:1; }
.rules-tag { font-size:9px; font-weight:600; padding:var(--space-3xs) var(--space-2xs); border-radius:var(--radius-xs); background:var(--accent-dim); color:var(--vip-gold); white-space:nowrap; }
/* ======= Organizer Type Label (V12) ======= */
.org-type-label { font-size:9px; font-weight:700; padding:var(--space-3xs) var(--space-2xs); border-radius:var(--radius-xs); margin-left:var(--space-2xs); vertical-align:middle; }
.org-type-label.official { background:rgba(140,112,214,0.12); color:var(--official-purple); }
.org-type-label.merchant { background:rgba(255,183,77,0.12); color:#ffa726; }
.detail-info { display:flex; flex-direction:column; gap:10px; margin-bottom:16px; }
.detail-info-row { display:flex; align-items:center; gap:10px; }
.detail-info-icon { width:36px; height:36px; border-radius:var(--radius-sm); background:var(--accent-soft); display:flex; align-items:center; justify-content:center; color:var(--accent); flex-shrink:0; }
.detail-info-icon .lucide { width:16px; height:16px; }
.detail-info-text { flex:1; }
.detail-info-label { font-size:10px; color:var(--text-muted); font-weight:600; }
.detail-info-value { font-size:13px; font-weight:700; color:var(--text-primary); }
.detail-desc { font-size:13px; color:var(--text-secondary); line-height:1.7; margin-bottom:16px; font-weight:500; }
.detail-photo { margin-bottom:16px; border-radius:var(--radius-lg); overflow:hidden; box-shadow:var(--shadow-soft); }
.detail-photo-img { display:block; width:100%; height:auto; aspect-ratio:16/10; object-fit:cover; }
.detail-map { height:100px; border-radius:var(--radius-md); background:var(--bg-highlight); border:1.5px solid var(--border-subtle); margin-bottom:16px; display:flex; align-items:center; justify-content:center; font-size:12px; color:var(--text-muted); gap:6px; cursor:pointer; }
.detail-org { display:flex; align-items:center; gap:12px; padding:14px; background:var(--bg-highlight); border-radius:var(--radius-lg); box-shadow:var(--shadow-soft); margin-bottom:16px; }
.detail-org-avatar { width:44px; height:44px; border-radius:50%; background-size:cover; background-position:center; flex-shrink:0; position:relative; }
.detail-org-info { flex:1; }
.detail-org-name { font-size:14px; font-weight:700; color:var(--text-primary); }
.detail-org-meta { font-size:11px; color:var(--text-muted); font-weight:500; }
/* fix(#20260821-002): 按钮上下内边距 36px，按钮内 span 水平居中 */
.detail-footer-btn { display:flex; align-items:center; justify-content:center; gap:6px; margin:0 20px 15px; padding:36px 16px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-lg); font-size:16px; font-weight:800; cursor:pointer; letter-spacing:-0.3px; text-align:center; }
.detail-footer-btn > span { text-align:center; display:inline-block; }
.detail-footer-btn:active { opacity:0.85; }
.detail-footer-btn .lucide { width:18px; height:18px; flex-shrink:0; }
.detail-footer-btn.cancel { background:var(--pink); }
#detailFooterBtn.cancel { background-color:#ff5d5d; }
.detail-footer-btn.cancel:active { opacity:0.85; }

/* Cancel Registration Modal — 页面中部居中弹窗 */
.cancel-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,0.45); z-index:100; display:none; align-items:center; justify-content:center; padding:20px; }
.cancel-sheet { width:100%; max-width:400px; margin:0 auto; background:var(--bg-card); border-radius:var(--radius-lg); padding:var(--space-md); box-shadow:var(--shadow-card); animation:cancelPop 0.22s ease-out; }
@keyframes cancelPop { 0% { opacity:0; transform:scale(0.94) translateY(8px); } 100% { opacity:1; transform:scale(1) translateY(0); } }
.cancel-sheet-handle { display:none; }
.cancel-sheet-title { font-size:16px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-md); text-align:center; }
.cancel-event-info { display:flex; align-items:center; gap:var(--space-xs); padding:var(--space-xs) 0; margin-bottom:var(--space-sm); }
.cancel-event-icon .lucide { width:20px; height:20px; color:var(--accent); }
.cancel-event-name { font-size:13px; font-weight:700; color:var(--text-primary); }
.cancel-event-date { font-size:11px; color:var(--text-muted); }
.cancel-section { margin-bottom:var(--space-sm); }
.cancel-section-label { font-size:11px; font-weight:600; color:var(--text-secondary); margin-bottom:var(--space-3xs); text-transform:uppercase; letter-spacing:0.04em; }
.cancel-reason-list { display:flex; flex-wrap:wrap; gap:var(--space-2xs); }
.cancel-reason-item { display:flex; align-items:center; gap:var(--space-2xs); padding:var(--space-2xs) var(--space-xs); border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13px; color:var(--text-primary); cursor:pointer; }
.cancel-reason-item:has(input:checked) { border-color:var(--accent); background:var(--accent-dim); }
.cancel-reason-item input { accent-color:var(--accent); }
.cancel-refund-row { display:flex; justify-content:space-between; align-items:center; padding:var(--space-2xs) 0; }
.cancel-refund-type { font-size:13px; color:var(--text-secondary); }
.cancel-refund-value { font-size:13px; font-weight:600; color:var(--text-primary); }
.cancel-refund-money { font-size:18px; font-weight:800; color:var(--accent); }
.cancel-refund-hint { font-size:11px; color:var(--text-muted); margin-top:var(--space-3xs); }
.cancel-refund-policy { font-size:12px; color:var(--text-secondary); line-height:1.5; margin-bottom:var(--space-2xs); background:var(--bg-highlight); padding:8px 10px; border-radius:var(--radius-md); }
.cancel-actions { display:flex; gap:var(--space-xs); margin-top:var(--space-md); }
.cancel-btn { flex:1; padding:var(--space-xs) var(--space-sm); border:none; border-radius:var(--radius-lg); font-size:14px; font-weight:700; cursor:pointer; text-align:center; }
.cancel-btn-secondary { background:var(--bg-highlight); color:var(--text-primary); }
.cancel-btn-danger { background:var(--pink); color:#fff; }
.cancel-btn-danger:active { opacity:0.85; }
.cancel-btn-danger:disabled { opacity:0.5; cursor:not-allowed; }

/* ============================================ */
/* Page: Messages                               */
/* ============================================ */
.msgs-tabs { display:flex; gap:8px; padding:4px 20px 0; border-bottom:1px solid var(--border-subtle); }
.msgs-tab { padding:8px 2px 10px; font-size:13px; font-weight:700; color:var(--text-muted); position:relative; cursor:pointer; }
.msgs-tab.active { color:var(--accent); }
.msgs-tab.active::after { content:''; position:absolute; bottom:-1px; left:0; right:0; height:2.5px; background:var(--accent); border-radius:2px; }
.msgs-tab-badge { display:inline-block; background:var(--accent); color:#fff; font-size:9px; padding:1px 6px; border-radius:20px; margin-left:4px; font-weight:800; }
.msgs-list { padding:0 0 90px; }
.msgs-item { display:flex; gap:12px; padding:14px 20px; border-bottom:1px solid var(--border-subtle); cursor:pointer; }
.msgs-item.unread { background:var(--accent-dim); }
.msgs-item:active { background:rgba(120,90,50,0.04); }
.msgs-avatar { width:48px; height:48px; min-width:48px; border-radius:50%; background-size:cover; background-position:center; position:relative; flex-shrink:0; }
.msgs-online-dot { position:absolute; bottom:0; right:0; width:12px; height:12px; background:#4ADE80; border:2px solid var(--bg-highlight); border-radius:50%; }
.msgs-content { flex:1; min-width:0; }
.msgs-header { display:flex; justify-content:space-between; align-items:center; }
.msgs-name { font-size:14px; font-weight:700; color:var(--text-primary); }
.msgs-time { font-size:10px; color:var(--text-muted); font-weight:500; }
.msgs-preview { font-size:12px; color:var(--text-tertiary); margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-weight:500; }
.msgs-unread-dot { width:8px; height:8px; min-width:8px; background:var(--accent); border-radius:50%; margin-top:14px; flex-shrink:0; }
.msgs-system { display:flex; gap:12px; padding:14px 20px; border-bottom:1px solid var(--border-subtle); cursor:pointer; }
.msgs-system-icon { width:48px; height:48px; min-width:48px; border-radius:50%; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.msgs-system-icon .lucide { width:20px; height:20px; color:var(--accent); }

/* ============================================ */
/* Page: Profile                                */
/* ============================================ */
.profile-header { padding:16px 20px 12px; display:flex; align-items:center; gap:14px; }
.profile-avatar { width:44px; height:44px; flex-shrink:0; position:relative; }
.profile-info { flex:1; }
.profile-name { font-size:20px; font-weight:800; color:var(--text-primary); letter-spacing:-0.3px; }
.profile-bio { font-size:12px; color:var(--text-muted); margin-top:2px; font-weight:500; }
/* 未登录态：去登录链接（默认隐藏，已登录时 JS 隐藏） */
.profile-login-link {
  padding: 5px 14px; background: var(--accent); color: #fff;
  border-radius: 20px; font-size: 12px; font-weight: 700;
  text-decoration: none; flex-shrink: 0;
  display: inline-block;
}
.profile-login-link:hover { opacity: 0.92; }
/* fix(#035): 顶部 logo-actions 中的登录入口（胶囊式，与 logo-btn 风格统一） */
.profile-topbar-login {
  background: var(--accent); color: #fff !important;
  padding: 4px 12px; border-radius: 999px;
  font-size: 12px; font-weight: 700;
  text-decoration: none;
  display: inline-flex; align-items: center; justify-content: center;
  height: 32px; line-height: 1;
}
.profile-topbar-login:hover { opacity: 0.92; }
.profile-edit { padding:5px 14px; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:20px; font-size:12px; font-weight:700; color:var(--text-secondary); cursor:pointer; flex-shrink:0; }
.profile-stats { display:flex; margin:0 20px 14px; padding:14px 0; background:var(--bg-highlight); border-radius:var(--radius-lg); box-shadow:var(--shadow-soft); }
.profile-stat { flex:1; text-align:center; border-right:1px solid var(--border-subtle); }
.profile-stat:last-child { border-right:none; }
.profile-stat-num { font-size:20px; font-weight:900; color:var(--text-primary); letter-spacing:-0.3px; }
.profile-stat-label { font-size:10px; color:var(--text-muted); font-weight:600; margin-top:2px; }
.profile-vip { margin:0 20px 14px; padding:14px 16px; background:var(--accent-soft); border-radius:var(--radius-lg); display:flex; align-items:center; justify-content:space-between; }
.profile-vip-left { display:flex; align-items:center; gap:10px; }
.profile-vip-icon { width:36px; height:36px; border-radius:var(--radius-sm); background:rgba(217,168,75,0.15); display:flex; align-items:center; justify-content:center; }
.profile-vip-icon .lucide { width:20px; height:20px; color:var(--vip-gold); }
.profile-vip-title { font-size:13px; font-weight:800; color:var(--text-primary); }
.profile-vip-sub { font-size:10px; color:var(--text-tertiary); font-weight:600; }
.profile-vip-btn { padding:6px 14px; background:var(--vip-gold); color:#fff; border:none; border-radius:20px; font-size:11px; font-weight:700; cursor:pointer; }
/* red-packet-20260815: profile 会员码卡片（VIP 到店核销得红包） */
.profile-vip-code-card { margin:0 20px 14px; padding:14px 16px; background:var(--accent-soft); border-radius:var(--radius-lg); display:flex; flex-direction:column; align-items:center; gap:8px; }
.profile-vip-code-head { width:100%; display:flex; justify-content:space-between; align-items:center; font-size:12px; font-weight:800; color:var(--text-primary); }
.profile-vip-code-timer { font-size:10px; font-weight:600; color:var(--text-tertiary); }
.profile-vip-code-body { width:150px; height:150px; background:#fff; border-radius:12px; padding:6px; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(0,0,0,0.06); cursor:pointer; }
.profile-vip-code-img { width:100%; height:100%; object-fit:contain; }
.profile-vip-code-foot { font-size:11px; color:var(--accent,#FF5E5E); font-weight:600; cursor:pointer; }
/* feat/audit-settings-save: settings.html "保存"按钮单独使用品牌强调色 #ff5d5d（与 --accent 视觉一致）*/
button#settingsSaveBtn.profile-vip-btn {
  background-color: #ff5d5d;
}
.profile-menu { margin:0 20px 90px; }
.profile-menu-group { margin-bottom: 2px; background:var(--bg-highlight); border-radius:var(--radius-md); box-shadow:var(--shadow-soft); overflow:hidden; }
.profile-menu-item { display:flex; align-items:center; gap:8px; padding: 6px 12px; border-bottom:1px solid var(--border-subtle); cursor:pointer; }
.profile-menu-item:last-child { border-bottom:none; }
.profile-menu-item:active { background:var(--accent-dim); }
.profile-menu-icon { width:24px; height:24px; border-radius:var(--radius-xs); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.profile-menu-icon .lucide { width:14px; height:14px; color:#fff; stroke-width: 2.5; }
.profile-menu-text { flex:1; font-size:13px; font-weight:600; color:var(--text-primary); }
.profile-menu-arrow { color:var(--text-muted); font-size:16px; line-height:1; }
#profileBindWxStatus,#profileBindPhoneStatus { font-size:13px; }

/* ===== Profile V12 — Wallet ===== */
.profile-wallet { margin:0 20px 14px; padding:16px; background:var(--bg-highlight); border-radius:var(--radius-lg); box-shadow:var(--shadow-soft); }
.profile-wallet-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; }
.profile-wallet-title { display:flex; align-items:center; gap:6px; font-size:14px; font-weight:800; color:var(--text-primary); }
.profile-wallet-icon { width:18px; height:18px; color:var(--accent); }
.profile-wallet-settings { padding:3px 10px; background:none; border:1.5px solid var(--border-light); border-radius:14px; font-size:11px; font-weight:600; color:var(--text-secondary); cursor:pointer; }
.profile-wallet-balance-row { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px; }
.profile-wallet-balance { font-size:28px; font-weight:900; color:var(--text-primary); letter-spacing:-0.5px; flex:1; min-width:0; }
.profile-wallet-currency { font-size:16px; font-weight:700; color:var(--text-muted); margin-right:2px; }
.profile-wallet-amount { font-variant-numeric:tabular-nums; }
.profile-wallet-actions { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-bottom:10px; }
.profile-wallet-action { display:flex; flex-direction:column; align-items:center; gap:4px; padding:8px 0; background:none; border:none; cursor:pointer; border-radius:var(--radius-sm); }
.profile-wallet-action:active { background:var(--accent-dim); }
.profile-wallet-action-icon { width:32px; height:32px; border-radius:var(--radius-sm); display:flex; align-items:center; justify-content:center; }
.profile-wallet-action-icon .lucide { width:16px; height:16px; color:#fff; }
.profile-wallet-action span { font-size:11px; font-weight:600; color:var(--text-tertiary); }
/* feat/wallet-inline: 余额行内的"提现"按钮 — 缩小 40%（60% of original），flex 行内右对齐 */
.profile-wallet-action-inline {
  flex-direction:row;
  flex:0 0 auto;
  padding:6px 10px;
  gap:6px;
  background:var(--bg-surface);
  border:1px solid var(--border-subtle);
  border-radius:var(--radius-md);
}
.profile-wallet-action-inline:active { background:var(--accent-dim); }
.profile-wallet-action-inline .profile-wallet-action-icon { width:19px; height:19px; border-radius:var(--radius-xs); }
.profile-wallet-action-inline .profile-wallet-action-icon .lucide { width:11px; height:11px; }
.profile-wallet-action-inline span { font-size:10px; }
.profile-wallet-rules { font-size:10px; color:var(--text-muted); font-weight:500; text-align:center; padding:var(--space-2xs) 0; }

/* ===== Follow List (6.8) ===== */
.follow-header { display:flex; align-items:center; gap:var(--space-xs); padding:var(--space-sm) var(--space-lg); border-bottom:1px solid var(--border-light); }
.follow-back { display:flex; align-items:center; justify-content:center; width:30px; height:30px; border:none; background:none; color:var(--text-secondary); cursor:pointer; border-radius:var(--radius-xs); }
.follow-back:active { background:var(--bg-highlight); }
.follow-title { font-size:16px; font-weight:800; color:var(--text-primary); }
.follow-item { display:flex; align-items:center; gap:var(--space-xs); padding:var(--space-sm) var(--space-lg); }
.follow-item + .follow-item { border-top:1px solid var(--border-subtle); }
.follow-item-avatar { width:var(--space-3xl); height:var(--space-3xl); border-radius:50%; background-size:cover; background-position:center; flex-shrink:0; }
.follow-item-info { flex:1; min-width:0; }
.follow-item-name { font-size:14px; font-weight:700; color:var(--text-primary); letter-spacing:-0.2px; }
.follow-item-bio { font-size:11px; color:var(--text-muted); font-weight:500; margin-top:1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.follow-item-btn { padding:var(--space-2xs) var(--space-sm); border-radius:var(--radius-full); font-size:11px; font-weight:700; border:1.5px solid var(--accent); background:none; color:var(--accent); cursor:pointer; white-space:nowrap; transition:all 0.15s; }
.follow-item-btn:active { transform:scale(0.96); }
.follow-item-btn.following { background:var(--bg-highlight); border-color:var(--border-light); color:var(--text-tertiary); }
.follow-empty { text-align:center; padding:var(--space-xl) var(--space-lg); font-size:13px; color:var(--text-muted); font-weight:500; }
.follow-hint { text-align:center; font-size:10px; color:var(--text-tertiary); font-weight:500; padding:0 var(--space-lg) var(--space-lg); }

.wallet-toast { position:fixed; bottom:100px; left:50%; transform:translateX(-50%); background:rgba(0,0,0,0.8); color:#fff; padding:10px 20px; border-radius:20px; font-size:13px; font-weight:600; z-index:9999; }
@keyframes walletToastIn { from{opacity:0;transform:translateX(-50%) translateY(10px)} to{opacity:1;transform:translateX(-50%) translateY(0)} }
@keyframes walletToastOut { from{opacity:1} to{opacity:0} }

/* ===== Profile V12 — Event Tabs ===== */
.profile-section { margin:0 20px 14px; }
.profile-section-header { font-size:14px; font-weight:800; color:var(--text-primary); margin-bottom:10px; display:flex; align-items:center; justify-content:space-between; }
.profile-events-tabs { display:flex; gap:0; margin-bottom:12px; border-radius:var(--radius-xs); overflow:hidden; border:1.5px solid var(--border-light); }
.profile-events-tab { flex:1; padding:7px 0; text-align:center; font-size:12px; font-weight:700; color:var(--text-secondary); background:none; border:none; cursor:pointer; }
.profile-events-tab.active { background:var(--accent); color:#fff; font-weight:800; }
.profile-events-list { background:var(--bg-highlight); border-radius:var(--radius-lg); box-shadow:var(--shadow-soft); overflow:hidden; }
.profile-event-card { display:flex; flex-direction:column; border-bottom:1px solid var(--border-subtle); }
.profile-event-card:last-child { border-bottom:none; }
.profile-event-card-main { display:flex; align-items:center; gap:10px; padding:10px 12px 6px; cursor:pointer; }
.profile-event-card-main:active { background:var(--accent-dim); border-radius:var(--radius-sm); }
.profile-event-cancel-btn { margin:0 12px 8px; padding:4px 0; background:none; border:1px solid var(--pink); border-radius:var(--radius-sm); font-size:11px; font-weight:600; color:var(--pink); cursor:pointer; text-align:center; width:calc(100% - 24px); }
.profile-event-cancel-btn:active { background:var(--pink); color:#fff; }
.profile-event-img { width:48px; height:48px; border-radius:var(--radius-xs); background-size:cover; background-position:center; flex-shrink:0; }
.profile-event-info { flex:1; min-width:0; }
.profile-event-name { font-size:12px; font-weight:700; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-bottom:2px; }
.profile-event-date { font-size:10px; color:var(--text-muted); font-weight:500; }
.profile-event-status { display:inline-block; margin-top:3px; padding:1px 7px; background:var(--accent-dim); border-radius:20px; font-size:9px; font-weight:700; color:var(--accent); }
.profile-event-status.status-done { background:rgba(34,197,94,0.1); color:var(--accent); }
.profile-event-status.status-organizer { background:rgba(217,168,75,0.12); color:var(--vip-gold); }
/* feat/card-qr: 卡片右侧签到二维码（组织者扫码核销用） */
.profile-event-qr { flex-shrink:0; width:56px; height:56px; border-radius:var(--radius-xs); overflow:hidden; border:1px solid var(--border-subtle); background:#fff; cursor:pointer; position:relative; }
.profile-event-qr:active { background:var(--accent-dim); }
.profile-event-qr-canvas { display:block; width:56px; height:56px; }
/* fix(profile-org-layout): 我组织的三栏布局——左信息/中统计/右按钮 */
.profile-org-card .profile-org-main { display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:8px; padding:10px 12px; cursor:pointer; }
.profile-org-card .profile-org-main:active { background:var(--accent-dim); border-radius:var(--radius-sm); }
.profile-org-info { min-width:0; }
.profile-org-stats { display:flex; flex-direction:column; align-items:center; gap:3px; }
.profile-org-stat { display:flex; align-items:baseline; gap:2px; font-size:10px; color:var(--text-muted); font-weight:500; white-space:nowrap; }
.profile-org-stat-num { font-size:13px; font-weight:700; color:var(--text-primary); }
.profile-org-checkin-btn { justify-self:end; flex-shrink:0; padding:7px 12px; border:none; border-radius:var(--radius-sm); background:var(--accent); color:#fff; font-size:12px; font-weight:700; cursor:pointer; white-space:nowrap; }
.profile-org-checkin-btn:active { opacity:.85; }
.profile-events-more { width:100%; padding:10px; background:none; border:none; text-align:center; font-size:12px; font-weight:600; color:var(--text-secondary); cursor:pointer; margin-top:8px; }

/* ===== Profile V12 — Favorites ===== */
.profile-favorites-row { background:var(--bg-highlight); border-radius:var(--radius-lg); box-shadow:var(--shadow-soft); overflow:hidden; }
.profile-fav-item { display:flex; align-items:center; gap:10px; padding:10px 12px; border-bottom:1px solid var(--border-subtle); cursor:pointer; }
.profile-fav-item:last-child { border-bottom:none; }
.profile-fav-item:active { background:var(--accent-dim); }
.profile-fav-img { width:40px; height:40px; border-radius:var(--radius-xs); background-size:cover; background-position:center; flex-shrink:0; }
.profile-fav-info { flex:1; min-width:0; }
.profile-fav-name { font-size:12px; font-weight:700; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-bottom:1px; }
.profile-fav-date { font-size:10px; color:var(--text-muted); font-weight:500; }

/* ===== Profile V12 — Scan Modal ===== */
.scan-overlay { position:fixed; inset:0; background:rgba(0,0,0,0.6); display:flex; align-items:center; justify-content:center; z-index:999; }
.scan-modal { width:300px; background:var(--bg-card); border-radius:var(--radius-lg); padding:24px; text-align:center; }
.scan-modal-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:20px; }
.scan-modal-header span { font-size:16px; font-weight:800; color:var(--text-primary); }
.scan-close { width:28px; height:28px; border-radius:50%; background:var(--bg-highlight); border:none; font-size:14px; color:var(--text-muted); cursor:pointer; display:flex; align-items:center; justify-content:center; }
.scan-frame { width:200px; height:200px; margin:0 auto 16px; position:relative; }
.scan-frame-inner { width:100%; height:100%; position:relative; background:rgba(0,0,0,0.04); border-radius:var(--radius-sm); display:flex; align-items:center; justify-content:center; }
.scan-corner { position:absolute; width:24px; height:24px; border-color:var(--accent); border-style:solid; }
.scan-corner-tl { top:4px; left:4px; border-width:2px 0 0 2px; border-radius:4px 0 0 0; }
.scan-corner-tr { top:4px; right:4px; border-width:2px 2px 0 0; border-radius:0 4px 0 0; }
.scan-corner-bl { bottom:4px; left:4px; border-width:0 0 2px 2px; border-radius:0 0 0 4px; }
.scan-corner-br { bottom:4px; right:4px; border-width:0 2px 2px 0; border-radius:0 0 4px 0; }
.scan-line { position:absolute; top:8px; left:8px; width:calc(100% - 16px); height:2px; background:var(--accent); opacity:0.7; border-radius:2px; }
@keyframes scanMove { 0%{top:8px} 50%{top:calc(100% - 10px)} 100%{top:8px} }
.scan-placeholder { display:flex; align-items:center; justify-content:center; }
.scan-hint { font-size:12px; color:var(--text-muted); font-weight:500; margin-bottom:14px; }
.scan-stats { font-size:11px; color:var(--text-secondary); font-weight:600; margin-bottom:14px; }
.scan-stats span { margin:0 2px; }
#scanCheckedCount, #scanTotalCount { font-weight:800; color:var(--accent); }
.scan-manual-btn { width:100%; padding:9px 0; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:var(--radius-sm); font-size:13px; font-weight:700; color:var(--text-secondary); cursor:pointer; }
.scan-manual-btn:active { background:var(--accent-dim); }

/* ============================================ */
/* Page: Search                                 */
/* ============================================ */
.search-bar-wrap { display:flex; align-items:center; gap:8px; background:var(--bg-highlight); border:1.5px solid var(--border-light); border-radius:var(--radius-lg); padding:0 4px 0 14px; margin:8px 20px 0; }
.search-bar-wrap:focus-within { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-dim); }
.search-bar-wrap input { flex:1; border:none; background:transparent; font-size:14px; font-weight:500; color:var(--text-primary); outline:none; padding:11px 0; }
.search-bar-wrap input::placeholder { color:var(--text-muted); }
.search-bar-wrap .lucide { width:18px; height:18px; color:var(--text-tertiary); }
.search-bar-cancel { padding:10px 10px 10px 4px; font-size:13px; font-weight:600; color:var(--accent); cursor:pointer; white-space:nowrap; }
.search-section { padding:16px 20px 0; }
.search-section-title { font-size:13px; font-weight:700; color:var(--text-secondary); margin-bottom:10px; }
.search-section-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.search-clear { font-size:11px; color:var(--text-muted); font-weight:500; cursor:pointer; }
.search-tags { display:flex; gap:8px; flex-wrap:wrap; }
.search-tag { padding:5px 14px; background:var(--bg-highlight); border:1.5px solid var(--border-subtle); border-radius:20px; font-size:12px; color:var(--text-tertiary); font-weight:500; cursor:pointer; }
.search-list { display:flex; flex-direction:column; gap:8px; }
.search-item { display:flex; align-items:center; gap:10px; cursor:pointer; padding:4px 0; }
.search-rank { width:18px; font-size:13px; font-weight:900; color:var(--text-muted); text-align:center; }
.search-rank.top3 { color:var(--accent); }
.search-name { flex:1; font-size:14px; font-weight:600; color:var(--text-primary); }
.search-count { font-size:10px; color:var(--text-muted); font-weight:500; }

/* ===== Payment / Order ===== */
.payment-section { padding:var(--space-md) var(--space-lg) 0; }
.payment-event-card { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); overflow:hidden; margin-bottom:var(--space-sm); }
.payment-event-image { width:100%; height:140px; background-size:cover; background-position:center; }
.payment-event-body { padding:var(--space-sm) var(--space-md); }
.payment-event-title { font-size:15px; font-weight:800; color:var(--text-primary); margin-bottom:4px; }
.payment-event-meta { display:flex; align-items:center; gap:5px; font-size:12px; color:var(--text-tertiary); margin-bottom:2px; }
.payment-event-meta .lucide { width:13px; height:13px; opacity:0.5; }
.payment-section-title { font-size:16px; font-weight:800; color:var(--text-primary); margin-bottom:12px; }
.ticket-selector { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); margin-bottom:var(--space-sm); }
.ticket-row { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-bottom:1px solid var(--border-subtle); }
.ticket-row:last-child { border-bottom:none; }
.ticket-info { display:flex; flex-direction:column; gap:2px; }
.ticket-name { font-size:15px; font-weight:700; color:var(--text-primary); }
.ticket-limit { font-size:11px; color:var(--text-muted); font-weight:500; }
.ticket-price { display:flex; align-items:center; gap:6px; }
.ticket-vip { font-size:13px; font-weight:700; color:var(--accent); }
.ticket-normal { font-size:11px; color:var(--text-muted); text-decoration:line-through; font-weight:500; }
.qty-selector { display:flex; align-items:center; gap:0; border:1.5px solid var(--border-light); border-radius:var(--radius-sm); overflow:hidden; }
.qty-btn { width:30px; height:30px; display:flex; align-items:center; justify-content:center; background:var(--bg-card); border:none; cursor:pointer; color:var(--text-primary); font-size:14px; font-weight:700; transition:background 0.15s; }
.qty-btn:active { background:var(--accent-soft); }
.qty-btn .lucide { width:14px; height:14px; }
.qty-btn:disabled { opacity:0.3; cursor:not-allowed; }
.qty-value { width:30px; height:30px; display:flex; align-items:center; justify-content:center; font-size:14px; font-weight:700; color:var(--text-primary); background:var(--bg-highlight); border-left:1.5px solid var(--border-light); border-right:1.5px solid var(--border-light); }
.price-summary { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); margin-bottom:var(--space-sm); }
.price-row { display:flex; justify-content:space-between; align-items:center; padding:6px 0; font-size:13px; }
.price-label { color:var(--text-tertiary); font-weight:500; }
.price-value { font-weight:700; color:var(--text-primary); }
.price-savings { color:var(--accent); font-weight:700; }
.price-divider { height:1px; background:var(--border-subtle); margin:6px 0; }
.price-total { padding:10px 0 0; display:flex; justify-content:space-between; align-items:center; }
.price-total-label { font-size:16px; font-weight:800; color:var(--text-primary); }
.price-total-value { font-size:20px; font-weight:900; color:var(--accent); }
.payment-submit { background:var(--accent); border:none; border-radius:var(--radius-md); width:100%; padding:14px 20px; color:var(--text-white); font-size:16px; font-weight:800; cursor:pointer; text-align:center; box-shadow:var(--shadow-glow); transition:opacity 0.15s; }
.payment-submit:active { opacity:0.85; }
/* fix(#049): 确认支付按钮位于费用合计下方，随内容滚动（内容流内） */
.payment-actions { display:flex; flex-direction:column; gap:var(--space-md); padding:16px var(--space-lg) var(--space-md); }

/* ===== Order Success ===== */
.success-section { display:flex; flex-direction:column; align-items:center; padding:60px 20px 40px; }
.success-icon { width:70px; height:70px; border-radius:50%; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; margin-bottom:var(--space-xl); }
.success-icon .lucide { width:32px; height:32px; color:var(--accent); stroke-width:2.5; }
.success-title { font-size:22px; font-weight:900; color:var(--text-primary); margin-bottom:6px; }
.success-sub { font-size:14px; color:var(--text-tertiary); font-weight:500; margin-bottom:var(--space-2xl); }
.success-actions { display:flex; flex-direction:column; gap:var(--space-sm); width:100%; padding:0 20px; }
.success-btn-primary { background:var(--accent); border:none; border-radius:var(--radius-sm); padding:14px 20px; color:var(--text-white); font-size:15px; font-weight:800; cursor:pointer; text-align:center; box-shadow:var(--shadow-glow); }
.success-btn-secondary { background:var(--bg-card); border:1.5px solid var(--border-light); border-radius:var(--radius-sm); padding:14px 20px; color:var(--text-tertiary); font-size:15px; font-weight:700; cursor:pointer; text-align:center; }

/* ===== My Tickets ===== */
.tickets-tabs { display:flex; gap:0; padding:0 var(--space-lg); margin-bottom:var(--space-sm); background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); margin:0 var(--space-lg) var(--space-sm); overflow:hidden; }
.tickets-tab { flex:1; padding:12px 0; text-align:center; font-size:14px; font-weight:700; color:var(--text-muted); cursor:pointer; position:relative; transition:color 0.15s; border:none; background:transparent; }
.tickets-tab.active { color:var(--accent); }
.tickets-tab.active::after { content:''; position:absolute; bottom:0; left:50%; transform:translateX(-50%); width:24px; height:3px; background:var(--accent); border-radius:2px; }
.tickets-tab .tickets-count { display:inline-block; margin-left:4px; font-size:11px; color:var(--text-muted); font-weight:500; }
.tickets-list { padding:0 var(--space-lg) var(--space-2xl); display:flex; flex-direction:column; gap:var(--space-sm); }
.ticket-card { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); overflow:hidden; }
.ticket-card-top { display:flex; gap:var(--space-sm); padding:var(--space-sm); }
.ticket-card-image { width:80px; height:80px; border-radius:var(--radius-sm); background-size:cover; background-position:center; flex-shrink:0; }
.ticket-card-body { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; justify-content:center; }
.ticket-card-title { font-size:14px; font-weight:800; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ticket-card-date { font-size:11px; color:var(--text-tertiary); font-weight:500; display:flex; align-items:center; gap:3px; }
.ticket-card-date .lucide { width:11px; height:11px; opacity:0.5; }
.ticket-card-status { display:inline-block; padding:2px 10px; border-radius:var(--radius-full); font-size:10px; font-weight:800; margin-top:3px; }
.ticket-card-status.paid { background:rgba(78,173,224,0.12); color:var(--kid-blue); }
.ticket-card-status.used { background:rgba(32,188,209,0.12); color:var(--cyan); }
.ticket-card-status.refunded { background:var(--accent-dim); color:var(--accent); }
.ticket-card-footer { display:flex; justify-content:space-between; align-items:center; padding:8px var(--space-sm); border-top:1px solid var(--border-subtle); }
.ticket-card-order { font-size:10px; color:var(--text-muted); font-weight:500; }
.ticket-card-btn { font-size:12px; font-weight:700; color:var(--accent); cursor:pointer; border:none; background:transparent; }
.tickets-empty { display:flex; flex-direction:column; align-items:center; padding:60px 20px; gap:12px; }
.tickets-empty .lucide { width:40px; height:40px; color:var(--text-muted); opacity:0.4; }
.tickets-empty-text { font-size:14px; color:var(--text-muted); font-weight:500; }

/* ===== Ticket Detail ===== */
.ticket-detail-section { padding:var(--space-md) var(--space-lg); }
.ticket-detail-header { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); display:flex; gap:var(--space-sm); margin-bottom:var(--space-sm); }
.ticket-detail-image { width:80px; height:80px; border-radius:var(--radius-sm); background-size:cover; background-position:center; flex-shrink:0; }
.ticket-detail-info { flex:1; min-width:0; }
.ticket-detail-title { font-size:15px; font-weight:800; color:var(--text-primary); margin-bottom:2px; }
.ticket-detail-meta { display:flex; align-items:center; gap:4px; font-size:11px; color:var(--text-tertiary); margin-bottom:2px; }
.ticket-detail-meta .lucide { width:12px; height:12px; opacity:0.5; }
.ticket-detail-status { display:inline-block; padding:2px 12px; border-radius:var(--radius-full); font-size:11px; font-weight:800; margin-top:4px; }
.ticket-detail-status.paid { background:rgba(78,173,224,0.12); color:var(--kid-blue); }
.ticket-detail-status.used { background:rgba(32,188,209,0.12); color:var(--cyan); }
.ticket-detail-status.refunded { background:var(--accent-dim); color:var(--accent); }
.qr-section { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); text-align:center; margin-bottom:var(--space-sm); }
.qr-section-title { font-size:14px; font-weight:800; color:var(--text-primary); margin-bottom:2px; }
.qr-section-tip { font-size:11px; color:var(--text-muted); font-weight:500; margin-bottom:var(--space-md); }
.qr-code { width:160px; height:160px; margin:0 auto; background:var(--bg-highlight); border:2px solid var(--border-light); border-radius:var(--radius-md); display:flex; align-items:center; justify-content:center; }
.qr-code-placeholder { display:flex; flex-direction:column; align-items:center; gap:6px; }
.qr-code-placeholder .lucide { width:48px; height:48px; color:var(--text-muted); opacity:0.3; }
.qr-code-placeholder span { font-size:10px; color:var(--text-muted); font-weight:500; }
.ticket-info-section { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); margin-bottom:var(--space-sm); }
.ticket-info-title { font-size:14px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-sm); }
.ticket-info-row { display:flex; justify-content:space-between; padding:5px 0; border-bottom:1px solid var(--border-subtle); font-size:13px; }
.ticket-info-row:last-child { border-bottom:none; }
.ticket-info-label { color:var(--text-tertiary); font-weight:500; }
.ticket-info-value { color:var(--text-primary); font-weight:600; }
.ticket-detail-actions { display:flex; flex-direction:column; gap:var(--space-sm); padding:0 var(--space-lg) var(--space-3xl); }
.ticket-action-refund, .ticket-action-contact, .ticket-action-share {
  display:flex; align-items:center; justify-content:center; gap:6px;
  width:100%; padding:12px; border-radius:var(--radius-md);
  font-size:14px; font-weight:700; cursor:pointer; text-align:center;
}
.ticket-action-refund { background:var(--bg-card); border:1.5px solid var(--border-accent); color:var(--accent); }
.ticket-action-contact { background:var(--bg-card); border:1.5px solid var(--border-light); color:var(--text-tertiary); }

/* ===== v2 优化：标题截断 + 价格组对齐 (index-v2) ===== */
.event-card-title {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  line-height: 1.35;
}
.trend-card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
}
.trend-card-price {
  margin-top: auto;
}
.vip-guide-more { cursor: pointer; }

/* ===== VIP Trial Banner (8.3) ===== */
.vip-trial-banner { display:flex; align-items:center; gap:var(--space-sm); background:linear-gradient(135deg,var(--accent-dim),var(--accent-soft)); border-radius:var(--radius-md); margin:0 var(--space-lg) var(--space-sm); padding:var(--space-sm) var(--space-md); border:1px solid var(--accent); }
.vip-trial-icon { width:32px; height:32px; border-radius:var(--radius-full); background:var(--accent); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.vip-trial-icon .lucide { width:16px; height:16px; color:var(--text-white); }
.vip-trial-info { flex:1; min-width:0; }
.vip-trial-title { font-size:13px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-3xs); }
.vip-trial-bar { height:4px; border-radius:var(--radius-full); background:var(--border-subtle); margin-bottom:var(--space-3xs); overflow:hidden; }
.vip-trial-fill { height:100%; border-radius:var(--radius-full); background:var(--accent); transition:width 0.3s; }
.vip-trial-desc { font-size:10px; color:var(--text-tertiary); font-weight:500; }
.vip-trial-expired { background:var(--bg-highlight); border-color:var(--text-tertiary); }
.vip-trial-expired .vip-trial-icon { background:var(--text-tertiary); }
.vip-trial-expired .vip-trial-fill { background:var(--text-tertiary); }
.vip-trial-expired .vip-trial-title { color:var(--text-tertiary); }

/* ===== VIP Center ===== */
.vip-hero { background:var(--accent); border-radius:var(--radius-lg); padding:var(--space-xl); color:var(--text-white); margin:0 var(--space-lg) var(--space-md); box-shadow:var(--shadow-card); }
.vip-hero-status { font-size:17px; font-weight:800; letter-spacing:-0.3px; }
.vip-hero-badge { display:inline-flex; align-items:center; gap:6px; background:rgba(255,255,255,0.25); padding:4px 14px; border-radius:var(--radius-full); font-size:13px; font-weight:700; margin-top:var(--space-sm); }
.vip-hero-valid { font-size:11px; opacity:0.75; margin-top:var(--space-xs); }
.vip-hero-code { display:flex; align-items:center; justify-content:space-between; background:rgba(255,255,255,0.15); border-radius:var(--radius-sm); padding:10px var(--space-sm); margin-top:var(--space-sm); font-size:12px; font-weight:600; cursor:pointer; }
.vip-hero-code .lucide { width:16px; height:16px; }
.vip-section { padding:0 var(--space-lg); margin-bottom:var(--space-md); }
.vip-section-title { font-size:15px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-sm); display:flex; justify-content:space-between; align-items:center; }
.vip-section-title a { font-size:11px; color:var(--accent); text-decoration:none; font-weight:600; }
.vip-privilege-list { display:flex; flex-direction:column; gap:var(--space-xs); }
.vip-priv-item { display:flex; align-items:center; gap:var(--space-sm); background:var(--bg-card); border-radius:var(--radius-sm); padding:10px var(--space-sm); box-shadow:var(--shadow-card); }
.vip-priv-icon { width:24px; height:24px; border-radius:var(--radius-full); background:var(--accent-soft); display:flex; align-items:center; justify-content:center; color:var(--accent); flex-shrink:0; }
.vip-priv-icon .lucide { width:14px; height:14px; }
.vip-priv-text { font-size:13px; font-weight:600; color:var(--text-primary); }
.vip-actions { display:flex; gap:var(--space-sm); padding:0 var(--space-lg) var(--space-2xl); }
.vip-btn-primary { flex:1; background:var(--accent); color:var(--text-white); border:none; border-radius:var(--radius-sm); padding:12px; font-size:14px; font-weight:700; cursor:pointer; }
.vip-btn-outline { flex:1; background:var(--bg-card); color:var(--text-primary); border:1.5px solid var(--border-light); border-radius:var(--radius-sm); padding:12px; font-size:14px; font-weight:700; cursor:pointer; }

/* ===== VIP Purchase ===== */
.plan-section { padding:0 var(--space-lg); margin-bottom:var(--space-sm); }
.plan-current { font-size:12px; color:var(--text-tertiary); font-weight:500; margin-bottom:var(--space-md); display:flex; justify-content:space-between; }
.plan-grid { display:flex; flex-direction:column; gap:var(--space-sm); }
.plan-card { display:flex; justify-content:space-between; align-items:center; background:var(--bg-card); border-radius:var(--radius-md); padding:var(--space-md); box-shadow:var(--shadow-card); border:2px solid transparent; cursor:pointer; }
.plan-card.active { border-color:var(--accent); background:var(--accent-dim); }
.plan-card-left { flex:1; }
.plan-name { font-size:14px; font-weight:700; color:var(--text-primary); }
.plan-perk { font-size:11px; color:var(--accent); font-weight:500; margin-top:var(--space-3xs); }
.plan-price { text-align:right; }
.plan-price-current { font-size:18px; font-weight:800; color:var(--text-primary); }
.plan-price-original { font-size:11px; color:var(--text-tertiary); text-decoration:line-through; }
.plan-badge { display:inline-block; background:var(--accent); color:var(--text-white); font-size:9px; font-weight:600; padding:var(--space-3xs) var(--space-xs); border-radius:var(--radius-full); margin-top:var(--space-xs); }
/* .plan-compare removed (V12 — replaced by trial banner) */

/* ===== VIP Code (full screen) ===== */
.vip-code-page { background:var(--cream); min-height:100%; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:var(--space-3xl) var(--space-lg); }
.vip-code-avatar { width:56px; height:56px; border-radius:var(--radius-full); background:var(--accent-soft); display:flex; align-items:center; justify-content:center; margin-bottom:var(--space-sm); }
.vip-code-avatar .lucide { width:28px; height:28px; color:var(--accent); }
.vip-code-name { font-size:18px; font-weight:800; color:var(--text-primary); margin-bottom:2px; }
.vip-code-level { font-size:12px; color:var(--accent); font-weight:700; margin-bottom:4px; }
.vip-code-valid { font-size:10px; color:var(--text-tertiary); font-weight:500; margin-bottom:var(--space-lg); }
.vip-code-qr { width:200px; height:200px; background:var(--bg-highlight); border:8px solid var(--accent); border-radius:var(--radius-md); display:flex; align-items:center; justify-content:center; margin-bottom:var(--space-sm); }
.vip-code-qr .lucide { width:80px; height:80px; color:rgba(0,0,0,0.08); }
.vip-code-qr .vip-code-svg { width:100%; height:100%; display:block; }
.vip-code-timer { font-size:11px; color:var(--text-muted); font-weight:500; margin-bottom:var(--space-lg); display:flex; align-items:center; gap:4px; }
.vip-code-timer strong { color:var(--accent); font-weight:800; }
.vip-code-tip { font-size:11px; color:var(--text-tertiary); font-weight:500; text-align:center; padding:var(--space-sm) var(--space-lg); background:var(--accent-dim); border-radius:var(--radius-full); }
.vip-code-screenshot { font-size:10px; color:var(--text-muted); margin-top:var(--space-sm); display:flex; align-items:center; gap:4px; }

/* ===== Merchant List ===== */
.merchant-list-hero { background:linear-gradient(135deg,var(--accent),var(--accent-deep)); border-radius:var(--radius-lg); margin:15px var(--space-lg) 15px; padding:var(--space-lg); color:var(--text-white); }
.merchant-hero-title { font-size:17px; font-weight:800; letter-spacing:-0.3px; }
.merchant-hero-desc { font-size:11px; opacity:0.85; margin-top:2px; }
.merchant-search { display:flex; align-items:center; gap:var(--space-xs); background:var(--bg-card); border-radius:var(--radius-full); padding:8px var(--space-sm); margin:var(--space-sm) var(--space-lg) var(--space-xs); box-shadow:var(--shadow-card); }
.merchant-search .lucide { width:16px; height:16px; color:var(--text-tertiary); flex-shrink:0; }
.merchant-search input { flex:1; border:none; outline:none; font-size:13px; font-weight:500; color:var(--text-primary); background:transparent; font-family:inherit; }
.merchant-search input::placeholder { color:var(--text-tertiary); }
.merchant-section { padding:0 var(--space-lg); }
.merchant-card { display:flex; flex-direction:column; align-items:stretch; gap:var(--space-sm); background:var(--bg-card); border-radius:var(--radius-md); padding:var(--space-sm); box-shadow:var(--shadow-card); margin-bottom:var(--space-xs); }
.merchant-icon { width:44px; height:44px; border-radius:var(--radius-md); background:var(--accent-dim); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.merchant-icon .lucide { width:22px; height:22px; color:var(--accent); }
.merchant-info { flex:1; }
.merchant-name { font-size:14px; font-weight:700; color:var(--text-primary); }
.merchant-location { font-size:11px; color:var(--text-tertiary); margin-top:1px; }
.merchant-discount { font-size:11px; font-weight:800; color:var(--accent); background:var(--accent-dim); padding:3px 8px; border-radius:var(--radius-full); white-space:nowrap; }
.merchant-vip-lock { padding:var(--space-lg); text-align:center; }
.merchant-vip-lock p { font-size:13px; color:var(--text-tertiary); font-weight:500; margin-bottom:var(--space-sm); }
.merchant-vip-lock .btn-primary { background:var(--accent); color:var(--text-white); border:none; border-radius:var(--radius-sm); padding:10px 24px; font-size:13px; font-weight:700; cursor:pointer; }

/* ===== Merchant Detail ===== */
.merchant-header { margin:0 var(--space-lg) var(--space-md); }
.merchant-cover { width:100%; height:160px; background:linear-gradient(135deg,var(--accent-dim),var(--bg-card)); border-radius:var(--radius-lg); display:flex; align-items:flex-end; padding:var(--space-sm); position:relative; }
.merchant-cover-icon { width:48px; height:48px; border-radius:var(--radius-md); background:var(--bg-highlight); display:flex; align-items:center; justify-content:center; }
.merchant-cover-icon .lucide { width:24px; height:24px; color:var(--accent); }
.merchant-cover-name { font-size:16px; font-weight:800; color:var(--text-primary); margin-left:var(--space-sm); }
.merchant-cover-tag { background:rgba(255,255,255,0.9); padding:3px 10px; border-radius:var(--radius-full); font-size:10px; font-weight:700; color:var(--text-primary); }
.merchant-info-section { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); margin:0 var(--space-lg) var(--space-sm); }
.merchant-info-row { display:flex; justify-content:space-between; padding:8px 0; border-bottom:1px solid var(--border-subtle); }
.merchant-info-row:last-child { border-bottom:none; }
.merchant-info-label { font-size:12px; color:var(--text-tertiary); font-weight:500; display:flex; align-items:center; gap:4px; }
.merchant-info-label .lucide { width:14px; height:14px; }
.merchant-info-value { font-size:12px; color:var(--text-primary); font-weight:600; text-align:right; }
.merchant-discount-card { margin:0 var(--space-lg) var(--space-sm); background:var(--accent-dim); border-radius:var(--radius-lg); padding:var(--space-md); display:flex; align-items:center; gap:var(--space-sm); }
.merchant-discount-card .lucide { width:24px; height:24px; color:var(--accent); flex-shrink:0; }
.merchant-discount-text { flex:1; font-size:13px; font-weight:700; color:var(--text-primary); line-height:1.4; }
.merchant-intro { font-size:12px; color:var(--text-secondary); line-height:1.6; padding:var(--space-sm) 0; }
.merchant-actions { display:flex; gap:var(--space-sm); padding:var(--space-md) var(--space-lg) var(--space-2xl); }
.merchant-btn-map { flex:1; background:var(--bg-card); border:1.5px solid var(--border-light); border-radius:var(--radius-sm); padding:12px; font-size:13px; font-weight:700; color:var(--text-primary); cursor:pointer; }
.merchant-btn-scan { flex:1; background:var(--accent); border:none; border-radius:var(--radius-sm); padding:12px; font-size:13px; font-weight:700; color:var(--text-white); cursor:pointer; }

/* ===== Merchant Scan ===== */
.scan-page { display:flex; flex-direction:column; align-items:center; padding:var(--space-2xl) var(--space-lg) var(--space-3xl); }
.scan-frame { width:240px; height:240px; border:3px solid var(--accent); border-radius:var(--radius-md); display:flex; align-items:center; justify-content:center; position:relative; margin-bottom:var(--space-lg); }
.scan-frame .lucide { width:60px; height:60px; color:var(--text-muted); opacity:0.3; }
.scan-corner { position:absolute; width:20px; height:20px; border-color:var(--accent); border-style:solid; }
.scan-corner.tl { top:-3px; left:-3px; border-width:3px 0 0 3px; border-radius:var(--radius-xs) 0 0 0; }
.scan-corner.tr { top:-3px; right:-3px; border-width:3px 3px 0 0; border-radius:0 var(--radius-xs) 0 0; }
.scan-corner.bl { bottom:-3px; left:-3px; border-width:0 0 3px 3px; border-radius:0 0 0 var(--radius-xs); }
.scan-corner.br { bottom:-3px; right:-3px; border-width:0 3px 3px 0; border-radius:0 0 var(--radius-xs) 0; }
.scan-hint { font-size:12px; color:var(--text-tertiary); font-weight:500; text-align:center; margin-bottom:var(--space-lg); }
.scan-records { width:100%; padding:0 var(--space-lg); }
.scan-records-title { font-size:13px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-sm); }
.scan-record { display:flex; justify-content:space-between; background:var(--bg-card); border-radius:var(--radius-sm); padding:var(--space-sm); margin-bottom:var(--space-xs); box-shadow:var(--shadow-card); }
.scan-record-name { font-size:13px; font-weight:600; color:var(--text-primary); }
.scan-record-time { font-size:12px; color:var(--text-tertiary); font-weight:500; }

/* ===== Merchant Stats ===== */
.stats-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:var(--space-xs); padding:0 var(--space-lg); margin-bottom:var(--space-md); }
.stats-card { background:var(--bg-card); border-radius:var(--radius-md); padding:var(--space-md); box-shadow:var(--shadow-card); text-align:center; }
.stats-card .lucide { width:20px; height:20px; color:var(--accent); margin-bottom:4px; }
.stats-num { font-size:24px; font-weight:800; color:var(--text-primary); letter-spacing:-0.5px; }
.stats-label { font-size:10px; color:var(--text-tertiary); font-weight:500; margin-top:2px; }
.stats-monthly { padding:0 var(--space-lg) var(--space-2xl); }
.stats-monthly-title { font-size:13px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-sm); }
.stats-bar { height:120px; display:flex; align-items:flex-end; gap:6px; background:var(--bg-card); border-radius:var(--radius-md); padding:var(--space-sm); box-shadow:var(--shadow-card); }
.stats-bar-col { flex:1; display:flex; flex-direction:column; align-items:center; gap:3px; }
.stats-bar-fill { width:100%; background:var(--accent); border-radius:4px 4px 0 0; min-height:4px; transition:height 0.3s; }
.stats-bar-label { font-size:9px; color:var(--text-tertiary); font-weight:500; }

/* ===== Chat Detail ===== */
.chat-messages { display:flex; flex-direction:column; gap:var(--space-sm); padding:var(--space-md) var(--space-lg); }
.chat-msg { max-width:78%; }
.chat-msg.incoming { align-self:flex-start; }
.chat-msg.outgoing { align-self:flex-end; }
.chat-msg-sender { display:flex; align-items:center; gap:6px; margin-bottom:4px; }
.chat-msg-avatar { width:28px; height:28px; border-radius:50%; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; color:var(--accent); flex-shrink:0; }
.chat-msg-avatar .lucide { width:14px; height:14px; }
.chat-msg-name { font-size:11px; font-weight:600; color:var(--text-secondary); }
.chat-bubble { background:var(--bg-elevated); border-radius:var(--radius-lg); border-bottom-left-radius:4px; padding:var(--space-sm) var(--space-md); font-size:13px; color:var(--text-primary); line-height:1.5; box-shadow:var(--shadow-soft); }
.chat-msg.outgoing .chat-bubble { background:var(--accent); color:var(--text-white); border-radius:var(--radius-lg); border-bottom-right-radius:4px; }
.chat-msg-time { font-size:10px; color:var(--text-tertiary); font-weight:500; margin-top:3px; padding:0 4px; }
.chat-msg.outgoing .chat-msg-time { text-align:right; }
.chat-input-bar { position:absolute; bottom:64px; left:0; right:0; display:flex; align-items:center; gap:var(--space-xs); padding:var(--space-xs) var(--space-sm); background:var(--bg-card); border-top:1px solid var(--border-subtle); }
.chat-input-bar input { flex:1; border:1.5px solid var(--border-light); border-radius:var(--radius-full); padding:9px var(--space-sm); font-size:13px; outline:none; font-family:inherit; background:var(--bg-surface); }
.chat-send { width:36px; height:36px; border-radius:var(--radius-full); background:var(--accent); border:none; display:flex; align-items:center; justify-content:center; cursor:pointer; color:var(--text-white); }
.chat-send .lucide { width:18px; height:18px; }

/* ===== User Profile ===== */
.profile-header-card { margin:0 var(--space-lg) var(--space-md); background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-lg); display:flex; flex-direction:column; align-items:center; }
.profile-header-avatar { width:64px; height:64px; border-radius:var(--radius-full); background:var(--accent-dim); display:flex; align-items:center; justify-content:center; margin-bottom:var(--space-sm); position:relative; }
.profile-header-avatar .lucide { width:32px; height:32px; color:var(--accent); }
/* merchant-onboarding-20260812: 用户资料页头像商家徽章 */
.profile-header-merchant-badge { position:absolute; right:-4px; bottom:-4px; background:var(--orange,#f97316); color:#fff; border-radius:10px; padding:1px 6px; font-size:9px; font-weight:800; letter-spacing:0.3px; border:2px solid #fff; box-shadow:0 1px 4px rgba(0,0,0,0.15); line-height:1.4; }
.profile-header-name { font-size:17px; font-weight:800; color:var(--text-primary); }
.profile-header-bio { font-size:12px; color:var(--text-tertiary); font-weight:500; margin-top:3px; }
.profile-stats { display:flex; justify-content:center; gap:var(--space-xl); margin-top:var(--space-md); }
.profile-stat { text-align:center; }
.profile-stat-num { font-size:18px; font-weight:800; color:var(--text-primary); }
.profile-stat-label { font-size:10px; color:var(--text-tertiary); font-weight:500; margin-top:1px; }
.profile-events { padding:0 var(--space-lg) var(--space-2xl); }

/* ===== Articles ===== */
.article-sections { padding:0 var(--space-lg); }
.article-tabs { display:flex; gap:var(--space-xs); overflow-x:auto; padding-bottom:var(--space-sm); margin-bottom:var(--space-sm); }
.article-tab { padding:5px 14px; border-radius:var(--radius-full); font-size:12px; font-weight:600; color:var(--text-tertiary); background:var(--bg-card); white-space:nowrap; cursor:pointer; border:1px solid var(--border-subtle); }
.article-tab.active { background:var(--accent); color:var(--text-white); border-color:var(--accent); }
.article-card { background:var(--bg-card); border-radius:var(--radius-md); box-shadow:var(--shadow-card); padding:var(--space-md); margin-bottom:var(--space-sm); display:flex; flex-direction:column; gap:var(--space-xs); }
.article-card-title { font-size:14px; font-weight:800; color:var(--text-primary); line-height:1.35; display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; }
.article-card-desc { font-size:12px; color:var(--text-tertiary); font-weight:500; line-height:1.4; display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; }
.article-card-footer { display:flex; justify-content:space-between; align-items:center; font-size:11px; color:var(--text-muted); font-weight:500; margin-top:var(--space-xs); }

/* ===== Article Detail ===== */
.article-detail { padding:0 var(--space-lg) var(--space-2xl); }
.article-detail-cover { width:100%; height:180px; background:linear-gradient(135deg,var(--accent-dim),var(--bg-card)); border-radius:var(--radius-lg); display:flex; align-items:flex-end; padding:var(--space-md); margin-bottom:var(--space-md); }
.article-detail-tags { display:flex; gap:4px; }
.article-detail-tag { padding:3px 10px; border-radius:var(--radius-full); font-size:10px; font-weight:600; background:rgba(255,255,255,0.9); color:var(--text-primary); }
.article-detail-meta { display:flex; justify-content:space-between; font-size:11px; color:var(--text-tertiary); font-weight:500; margin-bottom:var(--space-md); }
.article-detail-body { font-size:14px; color:var(--text-primary); line-height:1.7; }

/* ===== Admin Panel (desktop layout) ===== */
body:has(.admin-wrap) { display:block; margin:0; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif; }
.admin-wrap { display:flex; height:100vh; background:var(--bg-page); }
.admin-sidebar { position:fixed; top:0; left:0; width:220px; height:100vh; z-index:100; background:var(--bg-card); border-right:1px solid var(--border-subtle); padding:var(--space-lg) 0; display:flex; flex-direction:column; box-sizing:border-box; }
.admin-logo { font-size:18px; font-weight:800; color:var(--text-primary); padding:0 var(--space-lg) var(--space-lg); border-bottom:1px solid var(--border-subtle); margin-bottom:var(--space-md); letter-spacing:-0.3px; }
.admin-logo span { color:var(--accent); }
.admin-nav { list-style:none; padding:0; margin:0; flex:1; }
.admin-nav li a { display:flex; align-items:center; gap:10px; padding:10px var(--space-lg); font-size:14px; font-weight:600; color:var(--text-secondary); text-decoration:none; transition:all 0.15s; border-left:3px solid transparent; }
.admin-nav li a:hover { background:var(--bg-page); color:var(--text-primary); }
.admin-nav li a.active { background:var(--accent-soft); color:var(--accent); border-left-color:var(--accent); }
.admin-nav li a i { width:18px; height:18px; }
.admin-footer { border-top:1px solid var(--border-subtle); padding:var(--space-md) var(--space-lg); display:flex; flex-direction:column; gap:var(--space-sm); }
.admin-footer a { display:flex; align-items:center; gap:10px; font-size:13px; font-weight:600; color:var(--text-tertiary); text-decoration:none; }
.admin-footer a:hover { color:var(--accent); }
.admin-lang-btns { display:flex; gap:6px; }
.admin-lang-btn { flex:1; background:none; border:1px solid var(--border-subtle); border-radius:6px; color:var(--text-tertiary); font-size:13px; font-weight:500; padding:5px 0; cursor:pointer; transition:all 0.2s; text-align:center; }
.admin-lang-btn:hover { border-color:var(--accent); color:var(--accent); }
.admin-lang-btn.active { background:var(--accent); color:#fff; border-color:var(--accent); font-weight:700; }
.admin-main { flex:1; margin-left:220px; padding:var(--space-2xl); overflow-y:auto; min-width:0; }
.admin-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:var(--space-xl); }
.admin-header h1 { font-size:24px; font-weight:800; color:var(--text-primary); letter-spacing:-0.3px; }
.admin-actions { display:flex; gap:var(--space-sm); }
.admin-btn { padding:8px 16px; border-radius:var(--radius-md); border:none; font-size:13px; font-weight:600; cursor:pointer; background:var(--bg-card); color:var(--text-secondary); display:inline-flex; align-items:center; gap:6px; transition:all 0.15s; }
.admin-btn:hover { background:var(--border-subtle); color:var(--text-primary); }
.admin-btn-primary { background:var(--accent); color:#fff; }
.admin-btn-primary:hover { opacity:0.9; }
.admin-btn-success { background:var(--accent); color:#fff; }
.admin-btn-success:hover { opacity:0.9; }
.admin-btn-danger { background:var(--accent); color:#fff; }
.admin-btn-danger:hover { opacity:0.9; }
.admin-btn-sm { padding:5px 10px; font-size:12px; }
.admin-search { position:relative; }
.admin-search input { width:240px; padding:8px 12px 8px 34px; border-radius:var(--radius-md); border:1px solid var(--border-subtle); font-size:13px; background:var(--bg-card); color:var(--text-primary); outline:none; transition:0.15s; }
.admin-search input:focus { border-color:var(--accent); }
.admin-search .search-icon { position:absolute; left:10px; top:50%; transform:translateY(-50%); color:var(--text-muted); width:16px; height:16px; }
.admin-filters { display:flex; gap:var(--space-sm); margin-bottom:var(--space-lg); flex-wrap:wrap; }
.admin-filter-chip { padding:5px 14px; border-radius:var(--radius-full); font-size:12px; font-weight:600; background:var(--bg-card); color:var(--text-secondary); border:none; cursor:pointer; transition:0.15s; }
.admin-filter-chip.active { background:var(--accent); color:#fff; }
.admin-filter-chip:hover { background:var(--border-subtle); }
.admin-table-wrap { background:var(--bg-card); border-radius:var(--radius-lg); border:1px solid var(--border-subtle); overflow:hidden; }
.admin-table { width:100%; border-collapse:collapse; }
.admin-table th { padding:12px 16px; font-size:11px; font-weight:700; color:var(--text-tertiary); text-transform:uppercase; letter-spacing:0.5px; text-align:left; border-bottom:1px solid var(--border-subtle); background:var(--bg-page); }
.admin-table td { padding:12px 16px; font-size:13px; color:var(--text-primary); border-bottom:1px solid var(--border-subtle); }
.admin-table tr:last-child td { border-bottom:none; }
.admin-table tr:hover td { background:var(--accent-soft); }
.admin-pill { display:inline-block; padding:2px 10px; border-radius:var(--radius-full); font-size:11px; font-weight:600; }
.admin-pill-default { background:var(--border-subtle); color:var(--text-secondary); }
.admin-pill-active { background:var(--accent-soft); color:var(--accent); }
.admin-pill-inactive { background:var(--bg-page); color:var(--text-tertiary); border:1px solid var(--border-subtle); }

.admin-cell-actions { display:flex; gap:6px; }
.admin-user-cell { display:flex; align-items:center; gap:8px; }
.admin-user-avatar { width:28px; height:28px; border-radius:50%; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; overflow:hidden; }
.admin-user-avatar i { width:14px; height:14px; color:var(--accent); }
.admin-user-banned { background:var(--accent-soft); opacity:0.5; }
.admin-user-banned i { color:var(--text-tertiary); }
.admin-stats-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:var(--space-md); margin-bottom:var(--space-xl); }
.admin-stat-card { background:var(--bg-card); border-radius:var(--radius-lg); padding:var(--space-lg); border:1px solid var(--border-subtle); display:flex; flex-direction:column; justify-content:flex-end; }
.admin-stat-card .stat-num { font-size:28px; font-weight:800; color:var(--text-primary); letter-spacing:-0.5px; }
.admin-stat-card .stat-label { font-size:12px; color:var(--text-tertiary); font-weight:600; margin-top:4px; }
.admin-stat-card .stat-change { font-size:11px; font-weight:700; margin-top:4px; }
.admin-stat-card .stat-change.up { color:var(--accent); }
.admin-stat-card .stat-change.down { color:var(--text-tertiary); }
.admin-form { background:var(--bg-card); border-radius:var(--radius-lg); border:1px solid var(--border-subtle); padding:var(--space-xl); margin-bottom:var(--space-xl); }
.admin-btn-save { margin-left:auto; }
.admin-btn-icon i { width:14px; height:14px; }
.admin-form-group { margin-bottom:var(--space-lg); }
.admin-form-group label { display:block; font-size:13px; font-weight:700; color:var(--text-secondary); margin-bottom:6px; }
.admin-form-group input,
.admin-form-group textarea,
.admin-form-group select { width:100%; padding:10px 14px; border-radius:var(--radius-md); border:1px solid var(--border-subtle); font-size:14px; background:var(--bg-card); color:var(--text-primary); outline:none; transition:0.15s; box-sizing:border-box; font-family:inherit; }
.admin-form-group input:focus,
.admin-form-group textarea:focus,
.admin-form-group select:focus { border-color:var(--accent); }
.admin-form-group textarea { min-height:200px; resize:vertical; line-height:1.6; }
.admin-form-row { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-md); }
.admin-form-row + .admin-form-row { margin-top:var(--space-lg); }
.admin-form-title { font-size:18px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-lg); }
.admin-form-hint { font-size:12px; color:var(--text-tertiary); font-weight:500; margin-top:4px; }
.admin-input-sm { width:200px !important; }
.admin-select-sm { width:240px !important; }
.admin-pill-gold { background:var(--accent); color:#fff !important; }
.admin-price-input { width:120px; font-size:18px; font-weight:800; }
.admin-price-unit { font-size:18px; font-weight:800; color:var(--text-primary); }
.admin-price-label { font-size:14px; color:var(--text-tertiary); font-weight:500; }
.admin-price-row { display:flex; align-items:center; gap:8px; }
.admin-form-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:var(--space-lg); }
.admin-order-id { font-family:var(--font-mono); font-size:12px; font-weight:600; }
.admin-amount { font-weight:700; }
.admin-total-row td { border-top:1px solid var(--border-subtle); font-weight:700; }
.admin-total-amount { font-weight:700; border-top:1px solid var(--border-subtle); color:var(--accent); }

/* ===== Admin Modal ===== */
.admin-modal-overlay { position:fixed; inset:0; z-index:1000; background:rgba(0,0,0,0.4); display:flex; align-items:center; justify-content:center; }
.admin-modal { background:var(--bg-card); border-radius:var(--radius-lg); width:560px; max-width:90vw; max-height:85vh; overflow-y:auto; box-shadow:0 20px 60px rgba(0,0,0,0.15); }
.admin-modal-header { display:flex; justify-content:space-between; align-items:center; padding:var(--space-lg) var(--space-xl); border-bottom:1px solid var(--border-subtle); }
.admin-modal-title { font-size:17px; font-weight:800; color:var(--text-primary); }
.admin-modal-close { width:32px; height:32px; border-radius:var(--radius-full); border:none; background:var(--border-subtle); cursor:pointer; display:flex; align-items:center; justify-content:center; color:var(--text-secondary); }
.admin-modal-close:hover { background:var(--accent-soft); color:var(--accent); }
.admin-modal-body { padding:var(--space-xl); }
.admin-modal-footer { display:flex; justify-content:flex-end; gap:var(--space-sm); padding:var(--space-lg) var(--space-xl); border-top:1px solid var(--border-subtle); }
.admin-modal-field { margin-bottom:var(--space-md); }
.admin-modal-field label { display:block; font-size:12px; font-weight:700; color:var(--text-secondary); margin-bottom:4px; }
.admin-modal-field .value { font-size:14px; color:var(--text-primary); font-weight:600; line-height:1.5; }
.admin-modal-field-row { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-md); }
.admin-modal-field .cover-preview { width:100%; height:120px; border-radius:var(--radius-md); background:var(--bg-page); object-fit:cover; border:1px solid var(--border-subtle); }
.admin-modal-field .cover-placeholder { width:100%; height:120px; border-radius:var(--radius-md); background:var(--accent-dim); display:flex; align-items:center; justify-content:center; color:var(--text-muted); font-size:13px; }
.admin-modal-section-title { font-size:13px; font-weight:800; color:var(--text-primary); margin:var(--space-lg) 0 var(--space-sm); padding-bottom:4px; border-bottom:1px solid var(--border-subtle); }
.admin-modal-table { width:100%; border-collapse:collapse; }
.admin-modal-table th { padding:8px 10px; font-size:11px; font-weight:700; color:var(--text-tertiary); text-align:left; border-bottom:1px solid var(--border-subtle); }
.admin-modal-table td { padding:8px 10px; font-size:13px; color:var(--text-primary); border-bottom:1px solid var(--border-subtle); }
.admin-vio-btn { color:var(--accent); border:1px solid var(--border-accent); background:transparent; }
.admin-vio-btn:hover { background:var(--accent-soft); }

/* ===== Admin Form Components (V12) ===== */
.admin-form-section { margin-bottom:var(--space-xl); }
.admin-form-section-title { font-size:13px; font-weight:800; color:var(--text-primary); margin-bottom:var(--space-sm); padding-bottom:var(--space-3xs); border-bottom:1px solid var(--border-subtle); }
.admin-form-row { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-sm); }
.admin-form-group { display:flex; flex-direction:column; gap:var(--space-2xs); }
.admin-form-group label { font-size:12px; font-weight:700; color:var(--text-secondary); }
.admin-textarea { width:100%; padding:var(--space-xs); border-radius:var(--radius-sm); border:1px solid var(--border); font-size:12px; font-family:var(--font-body); line-height:1.5; resize:vertical; color:var(--text-primary); background:var(--surface); outline:none; }
.admin-textarea:focus { border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-dim); }
.admin-feature-list { display:flex; flex-direction:column; gap:var(--space-sm); }
.admin-feature-row { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-xs); align-items:start; padding:var(--space-xs) 0; border-bottom:1px solid var(--border-subtle); }
.admin-feature-row:last-child { border-bottom:none; }
.admin-feature-control { display:flex; flex-direction:column; gap:var(--space-3xs); }
.admin-feature-control label { font-size:12px; font-weight:700; color:var(--text-secondary); }
.admin-feature-input { font-size:11px; padding:var(--space-2xs) var(--space-2xs); }
.admin-form-group-inline { display:flex; justify-content:space-between; align-items:center; padding:var(--space-xs) var(--space-sm); background:var(--bg-page); border-radius:var(--radius-sm); min-height:36px; }
.admin-form-group-inline label { font-size:12px; font-weight:600; color:var(--text-secondary); }
.admin-form-row-switch { display:flex; align-items:center; gap:var(--space-xs); }
.admin-input { width:100%; padding:8px 10px; border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13px; color:var(--text-primary); background:var(--surface); outline:none; }
.admin-input:focus { border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-dim); }
.admin-select { padding:6px 10px; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13px; color:var(--text-primary); outline:none; }
.admin-select:focus { border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-dim); }
.admin-pill-discount { background:rgba(224,116,164,0.12); color:#E074A4; font-weight:700; font-size:11px; padding:2px 8px; border-radius:var(--radius-full); }
.admin-empty-cell { text-align:center; padding:var(--space-3xl) 0; color:var(--text-tertiary); font-size:14px; }
.admin-switch { position:relative; display:inline-block; width:36px; height:20px; cursor:pointer; flex-shrink:0; }
.admin-switch input { display:none; }
.admin-switch span { position:absolute; inset:0; background:var(--border); border-radius:20px; transition:background 0.2s; }
.admin-switch input:checked + span { background:var(--accent); }
.admin-switch span::before { content:''; position:absolute; left:2px; top:2px; width:16px; height:16px; background:#fff; border-radius:50%; transition:transform 0.2s; }
.admin-switch input:checked + span::before { transform:translateX(16px); }
.admin-btn-cancel { background:var(--bg-page); color:var(--text-secondary); border:1px solid var(--border); }
.admin-btn-cancel:hover { background:var(--border-subtle); }

/* ===== Admin Approval Tabs ===== */
.admin-approval-tabs { display:flex; gap:var(--space-sm); margin-bottom:var(--space-lg); }
.admin-approval-tab { padding:6px 16px; border-radius:var(--radius-full); font-size:12px; font-weight:600; border:none; cursor:pointer; background:var(--bg-card); color:var(--text-secondary); transition:0.15s; }
.admin-approval-tab.active { background:var(--accent); color:#fff; }

/* ===== Admin Upload Area ===== */
/* ===== Admin Banner Cards ===== */
.admin-banner-grid { display:flex; flex-direction:column; gap:var(--space-sm); margin-bottom:var(--space-lg); }
.admin-banner-item { display:flex; align-items:center; gap:var(--space-md); background:var(--bg-card); border-radius:var(--radius-lg); border:1px solid var(--border-subtle); padding:var(--space-md); cursor:grab; transition:0.15s; }
.admin-banner-item:hover { border-color:var(--accent-soft); }
.admin-banner-item.dragging { opacity:0.4; }
.admin-banner-order { width:24px; text-align:center; font-size:13px; font-weight:700; color:var(--text-tertiary); flex-shrink:0; }
.admin-banner-cover { width:100px; height:56px; border-radius:var(--radius-sm); object-fit:cover; background:var(--bg-page); border:1px solid var(--border-subtle); flex-shrink:0; display:flex; align-items:center; justify-content:center; color:var(--text-muted); font-size:10px; }
.admin-banner-cover i { width:20px; height:20px; }
.admin-banner-meta { flex:1; min-width:0; }
.admin-banner-meta .bt { font-size:14px; font-weight:700; color:var(--text-primary); }
.admin-banner-meta .bs { font-size:11px; color:var(--text-tertiary); margin-top:2px; }
.admin-banner-meta .badge-link { display:inline-block; padding:0 6px; border-radius:var(--radius-full); font-size:10px; font-weight:700; background:var(--accent-soft); color:var(--accent); margin-left:4px; }
.admin-banner-acts { display:flex; gap:6px; flex-shrink:0; }
.admin-drag-hint { font-size:11px; color:var(--text-muted); margin-bottom:var(--space-sm); }

/* ===== Category Card Grid ===== */
.admin-cat-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:var(--space-md); }
.admin-cat-card { background:var(--bg-card); border-radius:var(--radius-lg); border:1px solid var(--border-subtle); padding:var(--space-md); text-align:center; transition:0.15s; position:relative; }
.admin-cat-card:hover { border-color:var(--accent-soft); }
.admin-cat-card .ci { width:40px; height:40px; border-radius:50%; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; margin:0 auto var(--space-xs); }
.admin-cat-card .ci i { width:20px; height:20px; color:var(--accent); }
.admin-cat-card .cz { font-size:13px; font-weight:700; color:var(--text-primary); }
.admin-cat-card .ce { font-size:10px; color:var(--text-tertiary); }
.admin-cat-card .ca { position:absolute; top:4px; right:4px; display:flex; gap:3px; opacity:0; transition:0.15s; }
.admin-cat-card:hover .ca { opacity:1; }
.admin-cat-card.disabled { opacity:0.4; }
.admin-cat-section-tabs { display:flex; gap:0; margin-bottom:var(--space-lg); border-bottom:1px solid var(--border-subtle); }
.admin-cat-section-tab { padding:10px 20px; font-size:13px; font-weight:700; border:none; background:transparent; color:var(--text-secondary); cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-1px; transition:0.15s; }
.admin-cat-section-tab.active { color:var(--accent); border-bottom-color:var(--accent); }
.admin-cat-section-tab:hover { color:var(--text-primary); }
.admin-cat-section { display:none; }
.admin-cat-section.active { display:block; }

/* === Admin Settings - Tab navigation === */
.admin-settings-tabs { display:flex; gap:0; margin-bottom:var(--space-xl); border-bottom:2px solid var(--border-light); }
.admin-settings-tab { padding:12px 24px; font-size:13px; font-weight:700; border:none; background:transparent; color:var(--text-secondary); cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-2px; transition:0.15s; display:flex; align-items:center; gap:8px; }
.admin-settings-tab.active { color:var(--accent); border-bottom-color:var(--accent); }
.admin-settings-tab:hover { color:var(--text-primary); }
.admin-settings-tab .lucide { width:16px; height:16px; }
.admin-settings-panel { display:none; }
.admin-settings-panel.active { display:block; }
.admin-password-btn { margin-top:var(--space-lg); }

/* === Admin Settings - Admin Management === */
.admin-admins-toolbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:var(--space-lg); }
.admin-admins-toolbar-label { font-size:13px; color:var(--text-secondary); font-weight:500; }
.admin-admins-table { width:100%; border-collapse:collapse; }
.admin-admins-table th { font-size:11px; color:var(--text-tertiary); text-transform:uppercase; font-weight:700; letter-spacing:0.5px; padding:10px 12px; text-align:left; border-bottom:2px solid var(--border-light); }
.admin-admins-table td { padding:10px 12px; font-size:13px; border-bottom:1px solid var(--border-subtle); vertical-align:middle; }
.admin-admins-table tr:hover td { background:var(--bg-page); }
.admin-admins-avatar { width:28px; height:28px; border-radius:50%; background:var(--accent-dim); display:flex; align-items:center; justify-content:center; color:var(--accent); flex-shrink:0; }
.admin-admins-avatar .lucide { width:14px; height:14px; }
.admin-admins-cell { display:flex; align-items:center; gap:10px; }
.admin-admins-role-pill { display:inline-block; padding:2px 10px; border-radius:20px; font-size:11px; font-weight:600; background:var(--accent-dim); color:var(--accent); }
.admin-admins-role-pill.super { background:var(--accent-soft); color:var(--accent); }
.admin-admins-role-pill.editor { background:var(--accent-dim); color:var(--accent); }
.admin-admins-role-pill.finance { background:var(--bg-page); color:var(--text-secondary); }
.admin-admins-date { font-size:12px; color:var(--text-secondary); }
.admin-admins-status { padding:2px 10px; border-radius:20px; font-size:11px; font-weight:600; display:inline-block; }
.admin-admins-status.active { background:var(--accent-dim); color:var(--accent); }
.admin-admins-status.disabled { background:var(--bg-page); color:var(--text-tertiary); }
.admin-admins-actions { display:flex; gap:8px; }
.admin-admins-btn-icon { width:28px; height:28px; border-radius:6px; border:1px solid var(--border-light); background:var(--surface); cursor:pointer; display:flex; align-items:center; justify-content:center; color:var(--text-secondary); transition:0.15s; padding:0; }
.admin-admins-btn-icon:hover { border-color:var(--accent); color:var(--accent); }
.admin-admins-btn-icon.delete:hover { border-color:var(--accent); color:var(--accent); }

/* === Admin Settings - Permission Matrix === */
.admin-perm-table { width:100%; border-collapse:collapse; margin-top:var(--space-md); }
.admin-perm-table th { font-size:11px; color:var(--text-tertiary); font-weight:700; text-transform:uppercase; letter-spacing:0.5px; padding:10px 12px; text-align:center; border-bottom:2px solid var(--border-light); }
.admin-perm-table th:first-child { text-align:left; }
.admin-perm-table td { padding:8px 12px; font-size:12px; border-bottom:1px solid var(--border-subtle); text-align:center; }
.admin-perm-table td:first-child { text-align:left; font-weight:600; color:var(--text-primary); }
.admin-perm-table tr:hover td { background:var(--bg-page); }
.admin-perm-check { width:20px; height:20px; border-radius:4px; border:1px solid var(--border-light); background:var(--surface); display:inline-flex; align-items:center; justify-content:center; cursor:pointer; transition:0.15s; color:transparent; }
.admin-perm-check.checked { background:var(--accent); border-color:var(--accent); color:#fff; }
.admin-perm-check.checked .lucide { width:14px; height:14px; }
.admin-perm-check.disabled { opacity:0.3; cursor:not-allowed; }
.admin-perm-section { margin-bottom:var(--space-xl); }
.admin-perm-section h3 { font-size:14px; font-weight:700; color:var(--text-primary); margin-bottom:var(--space-xs); }
.admin-perm-section p { font-size:12px; color:var(--text-tertiary); margin-bottom:var(--space-sm); }
.admin-perm-role-card { display:flex; align-items:flex-end; gap:16px; padding:14px 16px; border:1px solid var(--border-subtle); border-radius:var(--radius-md); margin-bottom:var(--space-sm); transition:0.15s; }
.admin-perm-role-card:hover { border-color:var(--border-light); background:var(--bg-page); }
.admin-perm-role-icon { width:36px; height:36px; border-radius:8px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.admin-perm-role-icon .lucide { width:18px; height:18px; }
.admin-perm-role-icon.admin { background:var(--accent-soft); color:var(--accent); }
.admin-perm-role-icon.editor { background:var(--accent-dim); color:var(--accent); }
.admin-perm-role-icon.operator { background:var(--accent-soft); color:var(--accent); }
.admin-perm-role-icon.finance { background:var(--accent-dim); color:var(--accent); }
.admin-perm-role-info { flex:1; }
.admin-perm-role-info strong { font-size:13px; display:block; color:var(--text-primary); }
.admin-perm-role-info span { font-size:11px; color:var(--text-tertiary); }
.admin-perm-role-users { font-size:12px; color:var(--text-secondary); background:var(--bg-page); padding:2px 10px; border-radius:20px; }
.admin-perm-header-actions { display:flex; justify-content:space-between; align-items:center; margin-bottom:var(--space-md); }
.admin-perm-header-actions .admin-form-title { margin-bottom:0; }
/* === Admin Settings - Interactive Permission Toggles === */
.admin-perm-tabs { display:flex; gap:8px; margin-bottom:var(--space-lg); flex-wrap:wrap; }
.admin-perm-tab { padding:6px 16px; font-size:12px; font-weight:600; border-radius:var(--radius-sm); border:1px solid var(--border-light); background:var(--surface); cursor:pointer; color:var(--text-secondary); transition:all 0.15s; display:flex; align-items:center; gap:6px; }
.admin-perm-tab:hover { border-color:var(--accent-dim); color:var(--text-primary); }
.admin-perm-tab.active { border-color:var(--accent); color:var(--accent); background:var(--accent-soft); }
.admin-perm-tab .lucide { width:14px; height:14px; }
.admin-perm-tab.preview { font-style:normal; opacity:0.65; }
.admin-perm-check { cursor:pointer; transition:all 0.1s; }
.admin-perm-check:not(.disabled):hover { transform:scale(1.1); box-shadow:0 0 0 2px var(--accent-dim); }
.admin-perm-check.disabled { opacity:0.25; cursor:not-allowed; }
/* Custom Role Card */
.admin-perm-role-card .admin-perm-role-actions { display:flex; gap:4px; opacity:0; transition:opacity 0.15s; }
.admin-perm-role-card:hover .admin-perm-role-actions { opacity:1; }
.admin-perm-role-card.custom { border-style:dashed; background:var(--bg-page); }
.admin-perm-role-btn-sm { width:24px; height:24px; border-radius:4px; border:1px solid var(--border-light); background:var(--surface); cursor:pointer; display:flex; align-items:center; justify-content:center; color:var(--text-tertiary); }
.admin-perm-role-btn-sm:hover { border-color:var(--accent); color:var(--accent); }
.admin-perm-role-btn-sm.danger:hover { border-color:var(--accent); color:var(--accent); }
/* Color Swatches */
.admin-perm-color-swatches { display:flex; gap:8px; margin-top:4px; flex-wrap:wrap; }
.admin-perm-color-swatch { width:28px; height:28px; border-radius:50%; border:2px solid transparent; cursor:pointer; transition:all 0.1s; }
.admin-perm-color-swatch:hover { transform:scale(1.15); }
.admin-perm-color-swatch.selected { border-color:var(--text-primary); box-shadow:0 0 0 2px var(--surface); }
/* Icon Picker */
.admin-perm-icon-list { display:flex; gap:6px; flex-wrap:wrap; margin-top:4px; }
.admin-perm-icon-opt { width:32px; height:32px; border-radius:6px; border:1px solid var(--border-light); background:var(--surface); cursor:pointer; display:flex; align-items:center; justify-content:center; color:var(--text-secondary); transition:all 0.1s; }
.admin-perm-icon-opt:hover { border-color:var(--accent); color:var(--accent); }
.admin-perm-icon-opt.selected { border-color:var(--accent); background:var(--accent-soft); color:var(--accent); }
.admin-perm-icon-opt .lucide { width:16px; height:16px; }

/* === Admin Settings - Password Form === */
.admin-password-form { max-width:420px; }
.admin-password-form .admin-form-group { margin-bottom:var(--space-lg); }
.admin-password-form .admin-input { width:100%; box-sizing:border-box; }
.admin-password-rule { font-size:11px; color:var(--text-tertiary); margin-top:var(--space-xs); display:flex; align-items:center; gap:6px; }
.admin-password-rule .lucide { width:12px; height:12px; color:var(--accent); }
.admin-btn-secondary { padding:10px 24px; border:1px solid var(--border-light); border-radius:var(--radius-md); background:var(--surface); color:var(--text-primary); font-size:13px; font-weight:600; cursor:pointer; transition:0.15s; display:inline-flex; align-items:center; gap:8px; }
.admin-btn-secondary:hover { border-color:var(--text-muted); }

.admin-upload-area { border:2px dashed var(--border-light); border-radius:var(--radius-md); padding:var(--space-xl); text-align:center; cursor:pointer; transition:0.15s; }
.admin-upload-area:hover { border-color:var(--accent); background:var(--accent-dim); }
.admin-upload-area .lucide { width:28px; height:28px; color:var(--text-muted); margin-bottom:var(--space-xs); }
.admin-upload-area p { font-size:12px; color:var(--text-tertiary); font-weight:500; }
.admin-cover-preview { width:100%; height:140px; border-radius:var(--radius-md); background:var(--bg-page); object-fit:cover; border:1px solid var(--border-subtle); margin-bottom:var(--space-sm); display:none; }

/* === Deals Map === */
.deals-map-wrap { padding:8px 20px 20px; }
.deals-map-header { display:flex; align-items:center; gap:6px; margin-bottom:10px; }
.deals-map { border-radius:var(--radius-lg); overflow:hidden; background:var(--bg-page); border:1px solid var(--border-subtle); box-shadow:var(--shadow-card); }
.deals-map-svg { display:block; width:100%; height:auto; }

/* ===== City Picker — Mobile Optimized ===== */
.picker-overlay {
  position:fixed; inset:0; z-index:1000;
  background:rgba(0,0,0,0.5); backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  display:flex; align-items:flex-end; justify-content:center;
  visibility:hidden; opacity:0; transition:opacity 0.25s, visibility 0s 0.25s;
}
.picker-overlay.active { visibility:visible; opacity:1; transition:opacity 0.25s, visibility 0s 0s; }
.city-sheet {
  width:100%; max-height:82vh; background:var(--bg-card,#fff);
  border-radius:20px 20px 0 0; padding:0 0 env(safe-area-inset-bottom,16px);
  position:relative;
  transform:translateY(100%); transition:transform 0.35s cubic-bezier(0.22,1,0.36,1);
  box-shadow:0 -4px 30px rgba(0,0,0,0.12);
}
.city-sheet.active { transform:translateY(0); }
.city-sheet-header {
  display:flex; align-items:center; justify-content:space-between;
  padding:16px 20px 6px; font-size:16px; font-weight:700; color:var(--text-primary);
}
.city-sheet-close {
  width:28px; height:28px; border:none; background:var(--bg-page);
  border-radius:50%; font-size:16px; color:var(--text-muted);
  cursor:pointer; display:flex; align-items:center; justify-content:center;
}
.city-search-wrap {
  position:relative; padding:0 16px 10px;
}
.city-search-icon {
  position:absolute; left:28px; top:50%; transform:translateY(-50%);
  color:var(--text-muted); pointer-events:none;
}
.city-search {
  display:block; width:100%; padding:9px 12px 9px 36px;
  border:1px solid var(--border); border-radius:10px;
  font-size:14px; background:var(--bg-page); color:var(--text-primary);
  outline:none; box-sizing:border-box;
}
.city-search:focus { border-color:var(--accent); }

/* ---- Alphabet sidebar ---- */
.city-alphabet {
  position:absolute; right:2px; top:70px; z-index:5;
  display:flex; flex-direction:column; align-items:center;
  gap:1px; pointer-events:none;
}
.alpha-letter {
  display:flex; align-items:center; justify-content:center;
  width:20px; height:14px; font-size:10px; font-weight:600;
  color:var(--accent); cursor:pointer; pointer-events:auto;
  border-radius:3px; user-select:none; -webkit-user-select:none;
}
.alpha-letter:active { background:var(--accent-dim); }

/* ---- List container ---- */
.city-list {
  padding:0 8px 12px 8px;
  max-height:calc(82vh - 100px); overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  padding-right:30px;
}

/* ---- Hot cities ---- */
.city-hot-label {
  padding:4px 8px 8px; font-size:13px; font-weight:700;
  color:var(--text-primary);
}
.city-hot-row {
  display:flex; flex-wrap:wrap; gap:8px; padding:0 8px 16px;
  border-bottom:1px solid var(--border); margin-bottom:4px;
}
.city-hot-item {
  padding:6px 14px; border-radius:20px; font-size:13px; font-weight:600;
  background:var(--bg-page); color:var(--text-primary);
  cursor:pointer; transition:all 0.15s; border:1px solid var(--border);
}
.city-hot-item:active { transform:scale(0.96); }
.city-hot-item.active {
  background:var(--accent); color:#fff; border-color:var(--accent);
}

/* ---- Province groups (2-column grid) ---- */
.city-group { scroll-margin-top:8px; }
.city-group-label {
  padding:12px 8px 6px; font-size:11px; font-weight:700;
  color:var(--text-muted); letter-spacing:0.03em;
  position:sticky; top:0; z-index:2;
  background:var(--bg-card,#fff);
}
.city-grid {
  display:grid; grid-template-columns:1fr 1fr; gap:4px;
  padding:0 4px;
}
.city-item {
  display:flex; align-items:center; gap:4px;
  padding:10px 10px; border-radius:10px; cursor:pointer;
  transition:background 0.12s; font-size:14px; font-weight:500;
  color:var(--text-primary); min-width:0;
}
.city-item:active { background:var(--bg-page); }
.city-item.active { color:var(--accent); background:var(--accent-dim); }
.city-check { flex-shrink:0; color:var(--accent); }
.city-chevron { display:inline-block; vertical-align:middle; margin-left:4px; opacity:0.5; }

/* ---- Search results (single column) ---- */
.city-search-result {
  padding:12px 14px; border-radius:10px; font-size:14px; font-weight:500;
}
.city-noresult {
  padding:40px 12px; text-align:center; color:var(--text-muted); font-size:14px;
}

/* ===== V12 — Event Detail enhancements ===== */

/* Participant avatars row (1.2) */
.detail-participants {
  display:flex; align-items:center; gap:12px;
  padding:14px 16px; margin:0 16px;
  background:var(--surface-card,#f8f9fa);
  border-radius:12px;
}
.participant-avatars {
  display:flex; align-items:center; flex-shrink:0;
}
.p-avatar {
  width:30px; height:30px; border-radius:50%;
  background-size:cover; background-position:center;
  border:2px solid var(--bg-page,#fff);
  margin-left:-8px; flex-shrink:0;
}
.p-avatar:first-child { margin-left:0; }
.p-avatar.last {
  background:var(--accent-dim,#eef2ff);
  display:flex; align-items:center; justify-content:center;
  font-size:10px; font-weight:700; color:var(--accent);
  border:2px solid var(--bg-page,#fff);
}
.participant-info {
  display:flex; align-items:center; gap:8px; flex:1; justify-content:space-between;
}
.participant-label {
  font-size:13px; font-weight:600; color:var(--text-primary,#222);
}
.participant-count {
  font-size:13px; font-weight:700; color:var(--accent);
  background:var(--accent-dim,#eef2ff);
  padding:2px 10px; border-radius:20px;
}

/* Organizer star badge (1.5) */
.detail-org-avatar-wrap {
  position:relative; flex-shrink:0;
}
.org-badge-star {
  position:absolute; bottom:-4px; right:-4px;
  width:20px; height:20px; border-radius:50%;
  background:linear-gradient(135deg,#f6d365,#fda085);
  display:flex; align-items:center; justify-content:center;
  font-size:11px; color:#fff;
  box-shadow:0 1px 4px rgba(0,0,0,0.15);
  border:2px solid var(--bg-page,#fff);
}

/* Official avatar gold ring */
.org-avatar-official {
  box-shadow:0 0 0 2.5px #f6d365, 0 0 0 4px var(--bg-page,#fff);
  border-radius:50%;
  cursor:pointer;
}
/* 小尺寸官方头像（金色环比例适配，保持视觉一致）*/
.org-avatar.org-avatar-official {
  box-shadow:0 0 0 1.5px #f6d365, 0 0 0 2.5px var(--bg-page,#fff);
  border-color:transparent;
}
.org-badge-official {
  position:absolute; bottom:-4px; right:-4px;
  padding:1px 6px; border-radius:10px;
  background:linear-gradient(135deg,#f6d365,#fda085);
  color:#fff; font-size:9px; font-weight:800; letter-spacing:0.3px;
  box-shadow:0 1px 4px rgba(0,0,0,0.15);
  border:2px solid var(--bg-page,#fff);
  line-height:1.4;
}
/* merchant-onboarding-20260812: 组织者头像商家徽章（与官方徽章互斥；同位置不同颜色） */
.org-badge-merchant {
  position:absolute; bottom:-4px; right:-4px;
  padding:1px 6px; border-radius:10px;
  background:var(--orange,#f97316);
  color:#fff; font-size:9px; font-weight:800; letter-spacing:0.3px;
  box-shadow:0 1px 4px rgba(0,0,0,0.15);
  border:2px solid var(--bg-page,#fff);
  line-height:1.4;
}

/* Contact organizer button (7.2) */
.detail-contact-btn {
  display:flex; align-items:center; justify-content:center; gap:6px;
  width:calc(100% - 32px); margin:12px 16px 4px;
  padding:12px; border-radius:12px;
  background:var(--accent); color:#fff;
  font-size:14px; font-weight:600;
  border:none; cursor:pointer;
  transition:opacity 0.12s;
}
.detail-contact-btn:active { opacity:0.8; }
.detail-contact-btn .lucide { width:16px; height:16px; }

/* Chat group card (7.1) */
.detail-chat-group {
  margin:16px 16px 0;
  padding:14px 16px;
  background:var(--surface-card,#f8f9fa);
  border-radius:12px;
  cursor:pointer;
  transition:background 0.12s;
}
.detail-chat-group:active { background:var(--bg-page,#f0f0f5); }
.chat-group-header {
  display:flex; align-items:center; gap:10px;
}
.chat-group-icon {
  width:38px; height:38px; border-radius:10px;
  background:var(--accent-dim,#eef2ff);
  display:flex; align-items:center; justify-content:center;
  flex-shrink:0;
}
.chat-group-icon .lucide { width:18px; height:18px; color:var(--accent); }
.chat-group-info { flex:1; min-width:0; }
.chat-group-name {
  font-size:14px; font-weight:700; color:var(--text-primary,#222);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.chat-group-meta {
  font-size:11px; color:var(--text-muted,#888);
  margin-top:1px;
}
.chat-group-arrow { width:16px; height:16px; color:var(--text-muted,#bbb); }
.chat-group-preview {
  margin-top:10px; padding-top:10px;
  border-top:1px solid var(--border,#eee);
}
.chat-preview-item {
  font-size:12px; line-height:1.6;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  color:var(--text-muted,#666);
}
.chat-preview-item + .chat-preview-item { margin-top:2px; }
.chat-preview-name {
  font-weight:600; color:var(--text-primary,#444);
}

/* ===== Deals V12 — Article Card Format + VIP Permissions ===== */
.deals-invite-block {
  display: flex; align-items: center; gap: 12px;
  margin: 14px 20px 8px; padding: 14px 16px;
  background: var(--bg-highlight, #FFF8F5);
  border: 1px solid var(--border-subtle, #F0E8E0);
  border-radius: var(--radius-lg, 14px);
  box-shadow: var(--shadow-soft, 0 2px 8px rgba(255, 94, 94, 0.06));
  transition: transform 0.15s ease;
}
.deals-invite-block:active { transform: scale(0.99); }
.deals-invite-icon {
  flex-shrink: 0;
  width: 40px; height: 40px; border-radius: var(--radius-md, 10px);
  background: linear-gradient(135deg, var(--accent, #FF5E5E) 0%, #FF8C7A 100%);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 12px rgba(255, 94, 94, 0.25);
}
.deals-invite-icon .lucide { width: 22px; height: 22px; color: #fff; stroke-width: 2.5; }
.deals-invite-body { flex: 1; min-width: 0; }
.deals-invite-title {
  font-size: 14px; font-weight: 700;
  color: var(--text-primary, #222);
  margin-bottom: 2px;
}
.deals-invite-sub {
  font-size: 12px; font-weight: 500;
  color: var(--text-secondary, #888);
}
.deals-invite-btn {
  flex-shrink: 0;
  background: var(--accent, #FF5E5E); color: #fff; border: none;
  padding: 7px 16px; border-radius: var(--radius-full, 999px);
  font-size: 12px; font-weight: 700; cursor: pointer;
  transition: opacity 0.2s;
}
.deals-invite-btn:active { opacity: 0.85; }

.deals-vip-banner {
  display:flex; align-items:center; gap:8px;
  margin:8px 20px 0; padding:10px 14px;
  background:linear-gradient(135deg, var(--accent-dim) 0%, rgba(249,118,102,0.08) 100%);
  border:1px solid var(--accent-soft);
  border-radius:var(--radius-lg,12px);
}
.deals-vip-banner-icon {
  flex-shrink:0;
  width:28px; height:28px; border-radius:50%;
  background:var(--accent); color:white;
  display:flex; align-items:center; justify-content:center;
}
.deals-vip-banner-text {
  flex:1; font-size:12px; color:var(--text-secondary,#555); line-height:1.4; font-weight:500;
}
.deals-vip-banner-btn {
  flex-shrink:0;
  background:var(--accent); color:white; border:none;
  padding:6px 14px; border-radius:var(--radius-full,999px);
  font-size:12px; font-weight:700; cursor:pointer;
}

/* Deal Cards — Article Format */
.deals-list { padding:4px 20px 8px; display:flex; flex-direction:column; gap:14px; }

.deal-card {
  border-radius:var(--radius-lg,14px);
  overflow:hidden;
  background:var(--surface,#fff);
  border:1px solid var(--border-subtle,#eee);
  box-shadow:var(--shadow-card,0 1px 4px rgba(0,0,0,0.06));
  cursor:pointer;
  transition:transform 0.15s, box-shadow 0.15s;
}
.deal-card:active { transform:scale(0.985); }

.deal-card-image {
  position:relative;
  width:100%; height:180px;
  background-size:cover; background-position:center;
}
.deal-card-tag {
  position:absolute; top:10px; left:10px;
  background:var(--accent); color:white;
  padding:3px 10px; border-radius:var(--radius-full,999px);
  font-size:12px; font-weight:800; letter-spacing:0.5px;
}
.deal-card-tag.accent-gold {
  background:var(--vip-gold,#d9a84b); color:white;
}
.deal-card-badge {
  position:absolute; top:10px; right:10px;
  font-size:10px; font-weight:700;
  padding:2px 8px; border-radius:var(--radius-full,999px);
  background:var(--accent-soft,#fdd); color:var(--accent);
}
.deal-card-badge.vip-gold {
  background:rgba(217,168,75,0.15); color:var(--vip-gold,#d9a84b);
}

/* Lock Overlay */
.deal-card-lock-overlay {
  position:absolute; inset:0;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  background:rgba(255,255,255,0.6);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  color:var(--text-muted,#888); gap:6px;
}
.deal-card-lock-text {
  font-size:13px; font-weight:700; color:var(--text-secondary,#555);
}

.deal-card-body {
  padding:12px 14px 14px;
  transition:filter 0.3s;
}
.deal-card-body.blurred {
  filter:blur(4px);
  pointer-events:none;
  user-select:none;
}

.deal-card-title {
  font-size:15px; font-weight:700; color:var(--text-primary,#222);
  line-height:1.35; margin-bottom:4px;
}
.deal-card-desc {
  font-size:12px; color:var(--text-tertiary,#888);
  line-height:1.4; margin-bottom:10px;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}

.deal-card-footer-row {
  display:flex; align-items:center; justify-content:space-between;
  margin-bottom:10px;
}
.deal-card-save {
  font-size:13px; font-weight:800; color:var(--accent);
  background:var(--accent-soft,#fdd); padding:2px 10px;
  border-radius:var(--radius-sm,6px);
  display:inline-flex; align-items:center;
}
.deal-card-prices {
  display:flex; align-items:baseline; gap:6px;
}
.deal-card-price-current {
  font-size:16px; font-weight:800; color:var(--text-primary,#222);
}
.deal-card-price-original {
  font-size:12px; color:var(--text-tertiary,#999);
  text-decoration:line-through;
}

.deal-card-claim {
  width:100%;
  background:var(--accent); color:white; border:none;
  padding:10px; border-radius:var(--radius-sm,8px);
  font-size:14px; font-weight:700; cursor:pointer;
  transition:opacity 0.2s;
}
.deal-card-claim.locked-btn {
  background:var(--border-subtle,#ddd) !important;
  color:var(--text-tertiary,#999) !important;
}
.deal-card-claim:active { opacity:0.8; }

/* VIP Lock Modal */
.deals-modal-overlay {
  position:fixed; inset:0; z-index:2000;
  background:rgba(0,0,0,0.45);
  backdrop-filter:blur(4px);
  -webkit-backdrop-filter:blur(4px);
  display:flex; align-items:center; justify-content:center;
  visibility:hidden; opacity:0;
  transition:opacity 0.25s, visibility 0s 0.25s;
}
.deals-modal-overlay.active {
  visibility:visible; opacity:1;
  transition:opacity 0.25s, visibility 0s 0s;
}

.deals-modal {
  background:var(--surface,#fff);
  border-radius:var(--radius-xl,18px);
  padding:28px 24px 20px;
  margin:0 28px; width:auto; max-width:320px;
  text-align:center;
  box-shadow:0 8px 32px rgba(0,0,0,0.15);
  transform:translateY(20px);
  transition:transform 0.3s cubic-bezier(0.16,1,0.3,1);
}
.deals-modal-overlay.active .deals-modal {
  transform:translateY(0);
}

.deals-modal-icon {
  width:56px; height:56px; border-radius:50%;
  background:var(--accent-soft,#fdd);
  color:var(--accent);
  display:flex; align-items:center; justify-content:center;
  margin:0 auto 14px;
}

.deals-modal-title {
  font-size:17px; font-weight:800; color:var(--text-primary,#222);
  margin-bottom:8px;
}
.deals-modal-desc {
  font-size:13px; color:var(--text-tertiary,#888);
  line-height:1.5; margin-bottom:20px;
}

.deals-modal-btn {
  width:100%;
  background:var(--accent); color:white; border:none;
  padding:12px; border-radius:var(--radius-sm,10px);
  font-size:15px; font-weight:700; cursor:pointer;
  margin-bottom:8px;
}
.deals-modal-cancel {
  width:100%;
  background:transparent; color:var(--text-tertiary,#888); border:none;
  padding:10px; border-radius:var(--radius-sm,10px);
  font-size:13px; font-weight:600; cursor:pointer;
}

/* ===== Deals Scroll VIP Tip ===== */
.deals-scroll-tip {
  margin:16px 16px 0;
  padding:20px;
  background:var(--bg-card,#fff);
  border-radius:var(--radius-lg,14px);
  text-align:center;
  box-shadow:var(--shadow-card,0 2px 8px rgba(0,0,0,0.06));
  border:1px solid var(--border-vip,rgba(217,168,75,0.4));
}
.deals-scroll-tip-icon {
  margin-bottom:10px;
}
.deals-scroll-tip p {
  margin:0 0 14px;
  font-size:14px;
  color:var(--text-secondary,#666);
  line-height:1.6;
}
.deals-scroll-tip-btn {
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:10px 24px;
  background:var(--vip-gold,linear-gradient(135deg,#f6d365,#fda085));
  color:#fff;
  border:none;
  border-radius:var(--radius-sm,10px);
  font-size:14px;
  font-weight:700;
  cursor:pointer;
}

/* ===== Deal Detail Page ===== */
.deal-hero {
  position:relative; width:100%; height:200px;
  background-size:cover; background-position:center;
}
.deal-hero-tags {
  position:absolute; bottom:12px; left:16px;
  display:flex; gap:var(--space-2xs,6px); align-items:center;
}
.deal-hero-tag {
  padding:var(--space-3xs,3px) var(--space-xs,8px);
  background:var(--accent); color:#fff;
  font-size:var(--text-caption,11px); font-weight:700;
  border-radius:var(--radius-sm,10px);
}
.deal-hero-badge {
  padding:var(--space-3xs,3px) var(--space-xs,8px);
  background:rgba(255,255,255,0.9); color:var(--accent);
  font-size:var(--text-caption,11px); font-weight:700; border-radius:var(--radius-sm,10px);
}
.deal-hero-badge.vip-gold {
  background:linear-gradient(135deg,#f6d365,#fda085); color:#fff;
}

.deal-detail-body {
  padding:var(--space-md,16px) var(--space-md,16px) var(--space-xl,32px);
}
.deal-detail-title {
  font-size:var(--text-heading,22px); font-weight:800; color:var(--text-primary);
  line-height:1.25; margin-bottom:var(--space-sm,12px);
}
.deal-detail-save-row {
  display:flex; align-items:center; justify-content:space-between;
  margin-bottom:var(--space-md,16px); padding-bottom:var(--space-md,16px);
  border-bottom:1px solid var(--border-light);
}
.deal-detail-save {
  font-size:var(--text-body,14px); font-weight:700; color:var(--accent,#ff6348);
  background:var(--accent-dim,#fde); padding:var(--space-3xs,3px) var(--space-xs,8px);
  border-radius:var(--radius-sm,10px);
}
.deal-detail-prices { display:flex; align-items:center; gap:var(--space-2xs,6px); }
.deal-detail-price-current {
  font-size:var(--text-heading,22px); font-weight:800; color:var(--text-primary);
}
.deal-detail-price-original {
  font-size:var(--text-body,14px); color:var(--text-tertiary,#999);
  text-decoration:line-through;
}

.deal-detail-section {
  margin-bottom:var(--space-lg,24px);
}
.deal-detail-section-title {
  font-size:var(--text-body,14px); font-weight:700; color:var(--text-primary);
  margin-bottom:var(--space-2xs,6px);
}
.deal-detail-desc {
  font-size:var(--text-body,14px); line-height:1.6; color:var(--text-secondary);
  margin-bottom:var(--space-2xs,6px);
}
.deal-detail-desc-more {
  font-size:var(--text-caption,11px); line-height:1.6; color:var(--text-tertiary,#999);
}
.deal-detail-terms {
  list-style:none; padding:0; margin:0;
}
.deal-detail-terms li {
  font-size:var(--text-caption,11px); color:var(--text-tertiary,#999);
  line-height:1.5; margin-bottom:var(--space-2xs,6px);
  padding-left:12px; position:relative;
}
.deal-detail-terms li::before {
  content:'·'; position:absolute; left:0; color:var(--accent); font-weight:700;
}

.deal-detail-address {
  display:flex; align-items:center; gap:var(--space-2xs,6px);
  font-size:var(--text-caption,11px); color:var(--text-tertiary,#999);
  margin-bottom:var(--space-sm,12px);
}
.deal-detail-addr-icon {
  width:14px; height:14px; color:var(--accent); flex-shrink:0;
}
.deal-detail-map {
  border-radius:var(--radius-md,14px); overflow:hidden;
  border:1px solid var(--border-light); background:var(--bg-highlight,#f5f7fa);
  margin-bottom:var(--space-sm,12px);
}

.deal-detail-claim-btn {
  width:100%; padding:14px; border:none;
  background:var(--accent); color:#fff;
  font-size:var(--text-body,14px); font-weight:700; cursor:pointer;
  border-radius:var(--radius-md,14px);
  transition:opacity 0.2s;
}
.deal-detail-claim-btn:active { opacity:0.8; }
.deal-detail-claim-btn:disabled { opacity:0.5; cursor:default; }

.deal-detail-vip-notice {
  display:flex; align-items:center; gap:var(--space-2xs,6px);
  justify-content:center; margin-top:var(--space-sm,12px);
  font-size:var(--text-caption,11px); color:var(--accent); font-weight:600;
  background:var(--accent-dim,#fde);
  padding:var(--space-xs,8px) var(--space-sm,12px);
  border-radius:var(--radius-sm,10px);
}
.deal-detail-vip-notice svg { width:14px; height:14px; }

/* =============================================
   Phase 2 — New Components (2026-07-25)
   ============================================= */

/* ---- Publish draft + preview ---- */
.publish-preview-btn { display:block; width:100%; padding:12px; background:var(--bg-highlight); color:var(--text-secondary); border:1.5px solid var(--border-light); border-radius:var(--radius-lg); font-size:14px; font-weight:700; cursor:pointer; margin-bottom:20px; }
.publish-preview-btn:active { background:var(--accent-dim); color:var(--accent); border-color:var(--accent-dim); }

.preview-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,0.5); z-index:100; display:none; align-items:center; justify-content:center; }
.preview-sheet { background:var(--bg-card); border-radius:var(--radius-xl); width:90%; max-width:360px; max-height:80vh; overflow-y:auto; padding:20px; box-shadow:0 20px 60px rgba(0,0,0,0.25); }
.preview-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:16px; }
.preview-header span { font-size:16px; font-weight:800; color:var(--text-primary); }
.preview-close { background:none; border:none; font-size:14px; font-weight:600; color:var(--text-muted); cursor:pointer; padding:4px 8px; border-radius:var(--radius-sm); }
.preview-close:active { background:var(--accent-dim); }
.preview-body { font-size:13px; }

.draft-toast { position:fixed; bottom:100px; left:50%; transform:translateX(-50%); background:var(--text-primary); color:#fff; padding:12px 16px; border-radius:var(--radius-lg); box-shadow:0 8px 24px rgba(0,0,0,0.3); z-index:99; display:none; flex-direction:column; gap:10px; min-width:280px; font-size:13px; font-weight:500; }
.draft-toast-actions { display:flex; gap:8px; justify-content:flex-end; }
.draft-toast-actions button { padding:6px 16px; border-radius:var(--radius-sm); border:none; font-size:12px; font-weight:700; cursor:pointer; }
.draft-toast-actions button:first-child { background:rgba(255,255,255,0.2); color:#fff; }
.draft-toast-actions button.primary { background:var(--accent); color:#fff; }

/* ---- Confirm Order Page ---- */
.confirm-section { padding:0 20px 80px; }
.confirm-section-title { font-size:14px; font-weight:800; color:var(--text-primary); margin:20px 0 10px; }
.confirm-section-title:first-child { margin-top:0; }

.confirm-event-card { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); overflow:hidden; }
.confirm-event-image { height:120px; background-size:cover; background-position:center; }
.confirm-event-body { padding:12px; }
.confirm-event-title { font-size:15px; font-weight:800; color:var(--text-primary); margin-bottom:6px; }
.confirm-event-meta { display:flex; align-items:center; gap:6px; font-size:11px; color:var(--text-secondary); margin-bottom:3px; }
.confirm-event-meta .lucide { width:13px; height:13px; color:var(--text-muted); }

.confirm-tickets-list { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); overflow:hidden; margin-bottom:10px; }
.confirm-ticket-row { display:flex; align-items:center; justify-content:space-between; padding:12px 14px; border-bottom:1px solid var(--border-subtle); }
.confirm-ticket-row:last-child { border-bottom:none; }
.confirm-ticket-left { display:flex; align-items:center; gap:6px; }
.confirm-ticket-name { font-size:13px; font-weight:700; color:var(--text-primary); }
.confirm-ticket-limit { font-size:12px; color:var(--text-muted); font-weight:500; }
.confirm-ticket-right { display:flex; align-items:center; gap:8px; }
.confirm-ticket-vip-label { font-size:10px; font-weight:600; color:var(--accent); background:var(--accent-dim); padding:2px 6px; border-radius:var(--radius-full); }
.confirm-ticket-price { font-size:15px; font-weight:800; color:var(--accent); }

.confirm-price-summary { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:14px; }
.confirm-price-row { display:flex; justify-content:space-between; align-items:center; font-size:12px; color:var(--text-secondary); margin-bottom:8px; font-weight:500; }
.confirm-price-row.savings { color:var(--accent); font-weight:600; }
.confirm-savings { font-size:13px; font-weight:700; }
.confirm-price-divider { height:1px; background:var(--border-subtle); margin:10px 0; }
.confirm-price-total { display:flex; justify-content:space-between; align-items:center; font-size:14px; font-weight:700; color:var(--text-primary); }
.confirm-total-value { font-size:20px; font-weight:900; color:var(--accent); }

/* fix(#049): confirm-actions sticky 在 phone 容器底部，避免被裁掉 */
/* fix(#049): 确认/返回修改按钮位于支付宝选项下方，随内容滚动（内容流内） */
.confirm-actions { display:flex; flex-direction:column; gap:10px; margin-top:20px; padding:0 var(--space-lg) var(--space-md); }
.confirm-btn-primary { width:100%; padding:14px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-lg); font-size:16px; font-weight:800; cursor:pointer; box-shadow:var(--shadow-glow); }
.confirm-btn-primary:active { opacity:0.85; }
.confirm-btn-secondary { width:100%; padding:12px; background:var(--bg-highlight); color:var(--text-secondary); border:1.5px solid var(--border-light); border-radius:var(--radius-lg); font-size:14px; font-weight:600; cursor:pointer; }
.confirm-btn-secondary:active { background:var(--accent-dim); }

/* ---- Ticket: QR + Share + Refund Timeline ---- */
.ticket-action-share { background:var(--bg-highlight); border:1.5px solid var(--border-light); color:var(--text-secondary); }
.ticket-action-share:active { background:var(--accent-dim); color:var(--accent); border-color:var(--accent-dim); }

.refund-timeline-section { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:var(--space-md); margin-bottom:var(--space-sm); }

/* ===== Onboarding Tour Focus Highlight ===== */
/* 当 onboarding 引导高亮目标元素时，应用焦点框与脉冲动画 */
[data-onboarding-focus="true"] {
  position: relative;
  z-index: 9999;
  animation: onboardingPulse 1.6s ease-in-out infinite;
}

@keyframes onboardingPulse {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(255, 94, 94, 0.5);
  }
  50% {
    box-shadow: 0 0 0 10px rgba(255, 94, 94, 0);
  }
}

/* 防止 transform / opacity 之外的高频重绘 */
/* 使用 transform: scale 配合 box-shadow 帧动画（性能可接受） */
.refund-timeline-title { font-size:14px; font-weight:800; color:var(--text-primary); margin-bottom:16px; }
.refund-timeline { position:relative; padding-left:24px; }
.refund-timeline::before { content:''; position:absolute; left:7px; top:4px; bottom:4px; width:2px; background:var(--border-light); }
.refund-step { position:relative; margin-bottom:20px; display:flex; align-items:flex-start; gap:12px; }
.refund-step:last-child { margin-bottom:0; }
.refund-step-dot { width:16px; height:16px; border-radius:50%; border:3px solid var(--border-light); background:var(--bg-card); flex-shrink:0; position:relative; z-index:1; }
.refund-step.done .refund-step-dot { background:var(--accent); border-color:var(--accent); }
.refund-step.active .refund-step-dot { background:var(--bg-card); border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-dim); }
.refund-step-content { flex:1; }
.refund-step-label { font-size:12px; font-weight:700; color:var(--text-secondary); }
.refund-step.done .refund-step-label { color:var(--text-primary); }
.refund-step.active .refund-step-label { color:var(--accent); }
.refund-step-time { font-size:10px; color:var(--text-muted); margin-top:2px; font-weight:500; }
.refund-step-amount { font-size:14px; font-weight:800; color:var(--accent); margin-top:3px; }

.ticket-card-status.refunding { background:rgba(245,158,11,0.12); color:#d97706; }
.ticket-card-status.rejected { background:rgba(239,68,68,0.1); color:#ef4444; }
.ticket-detail-status.refunding { background:rgba(245,158,11,0.12); color:#d97706; }
.ticket-detail-status.rejected { background:rgba(239,68,68,0.1); color:#ef4444; }

.ticket-card-btn.review { color:var(--accent); margin-left:8px; }

/* ---- Event Detail: Favorite + Join Group ---- */
.detail-hero-fav { position:absolute; top:12px; right:12px; width:36px; height:36px; border-radius:50%; background:rgba(0,0,0,0.35); border:none; display:flex; align-items:center; justify-content:center; cursor:pointer; z-index:2; backdrop-filter:blur(6px); }
.detail-hero-fav .lucide { width:18px; height:18px; color:#fff; }
.detail-hero-fav.faved .lucide { fill:var(--accent); color:var(--accent); }

.detail-contact-btn.joined { color:var(--accent); border-color:var(--accent); background:var(--accent-dim); }
#detailJoinedBtn { width:90px; flex:0 0 auto; }

/* ---- Organizer Check-in Page ---- */
.checkin-container { padding:0 20px 80px; }
.checkin-event-header { text-align:center; padding:20px 0 16px; }
.checkin-event-name { font-size:18px; font-weight:800; color:var(--text-primary); }
.checkin-event-date { font-size:12px; color:var(--text-muted); font-weight:500; margin-top:4px; }

.checkin-stats { display:flex; align-items:center; justify-content:center; gap:0; background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); padding:16px; margin-bottom:14px; }
.checkin-stat { flex:1; text-align:center; }
.checkin-stat-num { font-size:24px; font-weight:900; color:var(--text-primary); font-variant-numeric:tabular-nums; }
.checkin-stat-label { font-size:11px; color:var(--text-muted); font-weight:500; margin-top:2px; }
.checkin-stat-divider { width:1px; height:32px; background:var(--border-subtle); }

.checkin-actions-row { display:flex; gap:10px; margin-bottom:20px; }
.checkin-action-btn { flex:1; display:flex; align-items:center; justify-content:center; gap:6px; padding:12px; border-radius:var(--radius-lg); font-size:14px; font-weight:700; cursor:pointer; border:1.5px solid var(--border-light); background:var(--bg-card); color:var(--text-secondary); }
.checkin-action-btn .lucide { width:18px; height:18px; }
.checkin-action-btn:active { background:var(--accent-dim); }
.checkin-action-btn.primary { background:var(--accent); color:#fff; border-color:var(--accent); box-shadow:var(--shadow-glow); }
.checkin-action-btn.primary:active { opacity:0.85; }

.checkin-list-section { background:var(--bg-card); border-radius:var(--radius-lg); box-shadow:var(--shadow-card); overflow:hidden; }
.checkin-list-title { padding:14px 14px 8px; font-size:13px; font-weight:800; color:var(--text-primary); }
.checkin-list { }
.checkin-item { display:flex; align-items:center; gap:10px; padding:10px 14px; border-bottom:1px solid var(--border-subtle); }
.checkin-item:last-child { border-bottom:none; }
.checkin-item-avatar { width:36px; height:36px; border-radius:50%; background-size:cover; background-position:center; flex-shrink:0; background-color:var(--bg-highlight); }
.checkin-item-info { flex:1; min-width:0; }
.checkin-item-name { font-size:13px; font-weight:700; color:var(--text-primary); }
.checkin-item-time { font-size:10px; color:var(--text-muted); font-weight:500; margin-top:1px; }
.checkin-item-badge { width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.checkin-item-badge.checked { background:var(--accent-dim); color:var(--accent); }
.checkin-item-btn { padding:5px 12px; border-radius:var(--radius-full); border:1.5px solid var(--border-light); background:var(--bg-highlight); font-size:11px; font-weight:600; color:var(--text-secondary); cursor:pointer; white-space:nowrap; }
.checkin-item-btn:active { background:var(--accent-dim); color:var(--accent); border-color:var(--accent-dim); }

.checkin-toast { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); background:rgba(0,0,0,0.8); color:#fff; padding:12px 24px; border-radius:var(--radius-lg); font-size:13px; font-weight:600; z-index:200; opacity:1; transition:opacity 0.3s; pointer-events:none; }

@keyframes checkinFadeIn { from { opacity:0; transform:translateY(-8px); } to { opacity:1; transform:translateY(0); } }

/* ===== Phase 3: Reviews (event-detail.html) ===== */
.detail-reviews {
  margin: 16px 20px 80px;
  padding: 20px 16px;
  background: var(--surface, #fff);
  border-radius: 16px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.05);
}
.detail-reviews-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 16px;
  gap: 12px;
}
.detail-reviews-header-left { flex:1; min-width:0; }
.detail-reviews-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--fg, #222);
  display: block;
}
.detail-reviews-summary {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 6px;
  font-size: 13px;
}
.detail-reviews-stars { color: var(--accent, #f5a623); font-size: 16px; letter-spacing: 2px; }
.detail-reviews-avg { font-weight: 700; color: var(--fg, #222); font-size: 18px; }
.detail-reviews-divider { color: var(--muted, #bbb); }
.detail-reviews-total { color: var(--muted, #999); }
.detail-reviews-header-right { display: flex; gap: 8px; flex-shrink: 0; }
.detail-reviews-sort {
  padding: 6px 14px;
  border-radius: 20px;
  border: 1px solid var(--border, #ddd);
  background: transparent;
  font-size: 12px;
  color: var(--muted, #666);
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.15s;
}
.detail-reviews-sort.active {
  background: var(--accent, #4a90d9);
  color: #fff;
  border-color: var(--accent, #4a90d9);
}
.detail-reviews-list { display: flex; flex-direction: column; gap: 12px; }
.review-item {
  padding: 12px 0;
  border-bottom: 1px solid var(--border, #eee);
}
.review-item:last-child { border-bottom: none; }
.review-item-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.review-item-user { display: flex; align-items: center; gap: 8px; }
.review-item-name { font-size: 13px; font-weight: 600; color: var(--fg, #222); }
.review-item-stars { color: var(--accent, #f5a623); font-size: 13px; letter-spacing: 1px; }
.review-item-date { font-size: 11px; color: var(--muted, #bbb); }
.review-item-text { font-size: 13px; color: var(--fg, #333); line-height: 1.5; margin-top: 6px; }
.review-item-actions { margin-top: 6px; }
.review-item-helpful {
  background: none;
  border: none;
  font-size: 12px;
  color: var(--muted, #999);
  cursor: pointer;
  padding: 2px 0;
  transition: color 0.15s;
}
.review-item-helpful:active { color: var(--accent, #4a90d9); }
.detail-reviews-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 30px 20px;
  color: var(--muted, #999);
  font-size: 13px;
}
.detail-reviews-write-btn {
  display: block;
  width: 100%;
  margin-top: 16px;
  padding: 12px;
  border-radius: 12px;
  background: var(--accent, #4a90d9);
  color: #fff;
  border: none;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}
.detail-reviews-write-btn:active { opacity: 0.8; }

/* Review Write Panel */
.review-panel-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.5);
  z-index: 200;
  display: none;
  align-items: flex-end;
  justify-content: center;
}
.review-panel-overlay.active { display: flex; }
.review-panel {
  background: var(--surface, #fff);
  width: 100%;
  max-width: 430px;
  border-radius: 20px 20px 0 0;
  padding: 24px 20px 40px;
}
.review-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}
.review-panel-title { font-size: 18px; font-weight: 700; color: var(--fg, #222); }
.review-panel-close {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--border, #eee);
  border: none;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 16px;
  color: var(--muted, #666);
}
.review-stars-input {
  display: flex;
  gap: 8px;
  justify-content: center;
  margin-bottom: 16px;
}
.review-star-btn {
  background: none;
  border: none;
  font-size: 32px;
  cursor: pointer;
  color: var(--muted, #ccc);
  transition: transform 0.15s, color 0.15s;
  padding: 0;
  line-height: 1;
}
.review-star-btn:active { transform: scale(1.2); }
.review-panel-text {
  width: 100%;
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid var(--border, #ddd);
  background: var(--bg, #f8f8f8);
  font-size: 14px;
  resize: none;
  font-family: inherit;
  min-height: 100px;
  margin-bottom: 10px;
}
.review-panel-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}
.review-anon-label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--muted, #666);
  cursor: pointer;
}
.review-char-count { font-size: 12px; color: var(--muted, #bbb); }
.review-panel-submit {
  width: 100%;
  padding: 14px;
  border-radius: 12px;
  background: var(--accent, #4a90d9);
  color: #fff;
  border: none;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}
.review-panel-submit:active { opacity: 0.8; }

/* ===== Phase 3: Chat Enhanced (chat-detail.html) ===== */
.chat-input-tool {
  width: 36px; height: 36px;
  border-radius: 50%;
  border: none;
  background: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--muted, #999);
  flex-shrink: 0;
  transition: background 0.15s;
}
.chat-input-tool:active { background: var(--border, #eee); }
.chat-input-tool .lucide { width: 20px; height: 20px; }

.chat-emoji-panel {
  position: absolute;
  bottom: 56px;
  left: 0; right: 0;
  background: var(--surface, #fff);
  border-top: 1px solid var(--border, #eee);
  padding: 12px 16px;
  max-height: 200px;
  overflow-y: auto;
  z-index: 10;
  animation: checkinFadeIn 0.2s ease;
}
.chat-emoji-grid {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 4px;
}
.chat-emoji-item {
  aspect-ratio: 1;
  font-size: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  background: none;
  cursor: pointer;
  border-radius: 8px;
  transition: background 0.1s;
  padding: 4px;
}
.chat-emoji-item:active { background: var(--border, #eee); }

.chat-mention-dropdown {
  position: absolute;
  bottom: 56px;
  left: 0; right: 0;
  background: var(--surface, #fff);
  border-top: 1px solid var(--border, #eee);
  max-height: 180px;
  overflow-y: auto;
  z-index: 10;
  animation: checkinFadeIn 0.15s ease;
}
.chat-mention-item {
  padding: 12px 20px;
  font-size: 14px;
  color: var(--fg, #222);
  cursor: pointer;
  border-bottom: 1px solid var(--border, #f5f5f5);
  transition: background 0.1s;
}
.chat-mention-item:active { background: var(--bg, #f5f5f5); }

.chat-bubble-image { padding: 4px !important; background: transparent !important; }

.chat-safety-toast {
  position: fixed;
  top: 80px;
  left: 20px; right: 20px;
  background: rgba(231,76,60,0.95);
  color: #fff;
  padding: 12px 16px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  z-index: 300;
  animation: checkinFadeIn 0.3s ease;
  box-shadow: 0 4px 16px rgba(231,76,60,0.3);
}

/* =============================================
   Phase 4 — Empty State + Skeleton
   ============================================= */

/* ---- Empty State ---- */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 48px 24px;
  text-align: center;
  min-height: 200px;
}
.empty-state-icon {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--bg-card, #f5f5f5);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 16px;
  color: var(--text-tertiary, #ccc);
}
.empty-state-icon svg { width: 28px; height: 28px; }
.empty-state-text {
  font-size: 15px;
  color: var(--text-tertiary, #999);
  line-height: 1.5;
  margin-bottom: 16px;
}
.empty-state-action {
  padding: 10px 24px;
  background: var(--accent, #f97666);
  color: #fff;
  border: none;
  border-radius: 20px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: opacity 0.15s;
}
.empty-state-action:active { opacity: 0.8; }

/* ---- Skeleton Screen (Shimmer) ---- */
@keyframes skeletonShimmer {
  0% { background-position: -400px 0; }
  100% { background-position: 400px 0; }
}
.skeleton {
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 800px 100%;
  animation: skeletonShimmer 1.5s ease-in-out infinite;
  border-radius: var(--radius-md, 8px);
}
.skeleton-card {
  padding: 16px;
  background: var(--bg-card, #fff);
  border-radius: var(--radius-lg, 12px);
  border: 1px solid var(--border-subtle, #eee);
  overflow: hidden;
}
.skeleton-card .skeleton-img {
  width: 100%;
  height: 160px;
  border-radius: var(--radius-md, 8px);
  margin-bottom: 12px;
}
.skeleton-card .skeleton-line {
  height: 14px;
  margin-bottom: 8px;
}
.skeleton-card .skeleton-line:last-child { margin-bottom: 0; width: 60%; }
.skeleton-card .skeleton-line.short { width: 42%; }

/* ---- Skeleton: Event Card ---- */
.skeleton-event-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 14px;
  background: var(--bg-card, #fff);
  border-radius: var(--radius-lg, 12px);
  border: 1px solid var(--border-subtle, #eee);
  overflow: hidden;
}
.skeleton-event-card .skeleton-thumb {
  width: 100%;
  height: 130px;
  border-radius: var(--radius-md, 8px);
}
.skeleton-event-card .skeleton-title {
  height: 18px;
  width: 80%;
}
.skeleton-event-card .skeleton-meta {
  height: 12px;
  width: 50%;
}

/* ---- Skeleton: Article Card ---- */
.skeleton-article-card {
  display: flex;
  gap: 12px;
  padding: 14px;
  background: var(--bg-card, #fff);
  border-radius: var(--radius-lg, 12px);
  border: 1px solid var(--border-subtle, #eee);
  overflow: hidden;
}
.skeleton-article-card .skeleton-thumb {
  width: 80px;
  height: 80px;
  border-radius: var(--radius-sm, 6px);
  flex-shrink: 0;
}
.skeleton-article-card .skeleton-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.skeleton-article-card .skeleton-title {
  height: 16px;
  width: 90%;
}
.skeleton-article-card .skeleton-desc {
  height: 12px;
  width: 100%;
}
.skeleton-article-card .skeleton-desc:last-child { width: 65%; }

/* =============================================
   Phase 4 — Community Rules Modal
   ============================================= */

.community-rules-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.5);
  z-index: 300;
  display: flex;
  align-items: center;
  justify-content: center;
  animation: checkinFadeIn 0.2s ease;
}
.community-rules-modal {
  width: 340px;
  max-height: 80vh;
  background: var(--bg-card, #fff);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 8px 32px rgba(0,0,0,0.15);
}
.community-rules-modal-header {
  padding: 20px 20px 12px;
  font-size: 17px;
  font-weight: 700;
  color: var(--text-primary, #222);
}
.community-rules-modal-body {
  padding: 0 20px 16px;
  font-size: 14px;
  color: var(--text-secondary, #666);
  line-height: 1.8;
  max-height: 50vh;
  overflow-y: auto;
  white-space: pre-line;
}
.community-rules-modal-footer {
  padding: 12px 20px 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.community-rules-agree-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--text-secondary, #666);
  cursor: pointer;
}
.community-rules-agree-row input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; accent-color: var(--accent, #f97666); }
.community-rules-confirm {
  width: 100%;
  padding: 12px;
  background: var(--accent, #f97666);
  color: #fff;
  border: none;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  opacity: 0.5;
  pointer-events: none;
  transition: opacity 0.15s;
}
.community-rules-confirm.active {
  opacity: 1;
  pointer-events: auto;
}

/* =============================================
   Phase 4 — Admin Refund Enhanced
   ============================================= */

.admin-refund-reject-modal {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.5);
  z-index: 300;
  display: flex;
  align-items: center;
  justify-content: center;
}
.admin-refund-reject-box {
  width: 360px;
  background: var(--bg-card, #fff);
  border-radius: 16px;
  padding: 24px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.15);
}
.admin-refund-reject-box h3 {
  font-size: 16px;
  font-weight: 700;
  margin: 0 0 12px;
  color: var(--text-primary, #222);
}
.admin-refund-reject-box textarea {
  width: 100%;
  height: 80px;
  border: 1px solid var(--border-subtle, #eee);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 14px;
  resize: none;
  outline: none;
  box-sizing: border-box;
  color: var(--text-primary, #222);
}
.admin-refund-reject-box textarea:focus { border-color: var(--accent, #f97666); }
.admin-refund-reject-actions {
  display: flex;
  gap: 8px;
  margin-top: 14px;
  justify-content: flex-end;
}
.admin-refund-reject-actions button {
  padding: 8px 18px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border-subtle, #eee);
  background: var(--bg-card, #fff);
  color: var(--text-secondary, #666);
}
.admin-refund-reject-actions button.primary {
  background: var(--accent, #f97666);
  color: #fff;
  border-color: var(--accent, #f97666);
}

/* ---- Refund Status Pills ---- */
.admin-refund-status-pill {
  display: inline-block;
  padding: 3px 10px;
  border-radius: 10px;
  font-size: 12px;
  font-weight: 600;
}
.admin-refund-status-pill.pending { background: #fff3cd; color: #856404; }
.admin-refund-status-pill.approved { background: #d4edda; color: #155724; }
.admin-refund-status-pill.rejected { background: #f8d7da; color: #721c24; }
.admin-refund-status-pill.processing { background: #cce5ff; color: #004085; }

/* ===== Help & FAQ Page ===== */
.help-faq-accordion {
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--border-subtle);
}
.help-faq-accordion-item {
  border-bottom: 1px solid var(--border-subtle);
  cursor: pointer;
  transition: background 0.15s;
}
.help-faq-accordion-item:last-child { border-bottom: none; }
.help-faq-accordion-item:hover { background: var(--bg-deep); }
.help-faq-accordion-q {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-xs);
  padding: var(--space-md) var(--space-lg);
}
.help-faq-accordion-q span {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  line-height: 1.45;
}
.help-faq-accordion-q .lucide {
  width: 16px;
  height: 16px;
  color: var(--text-tertiary);
  flex-shrink: 0;
  transition: transform 0.25s ease;
}
.help-faq-accordion-item.open .help-faq-accordion-q .lucide {
  transform: rotate(180deg);
}
.help-faq-accordion-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease, padding 0.3s ease;
  font-size: 13px;
  color: var(--text-secondary);
  line-height: 1.65;
  padding: 0 var(--space-lg);
}
.help-faq-accordion-item.open .help-faq-accordion-a {
  max-height: 220px;
  padding: 0 var(--space-lg) var(--space-md);
}

/* AI Box */
.help-ai-box {
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  border: 1px solid var(--border-subtle);
  padding: var(--space-lg);
  box-shadow: var(--shadow-card);
}
.help-ai-header {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  margin-bottom: var(--space-sm);
}
.help-ai-header .lucide {
  width: 18px;
  height: 18px;
  color: var(--accent);
}
.help-ai-header span {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-primary);
}
.help-ai-row {
  display: flex;
  gap: var(--space-xs);
}
.help-ai-row input {
  flex: 1;
  padding: 10px 14px;
  border: 1px solid var(--border-light);
  border-radius: var(--radius-md);
  background: var(--bg-deep);
  font-size: 14px;
  font-weight: 500;
  color: var(--text-primary);
  outline: none;
  transition: border-color 0.2s;
}
.help-ai-row input:focus { border-color: var(--accent); }
.help-ai-row input::placeholder { color: var(--text-muted); }
.help-ai-row button {
  padding: 10px 14px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: var(--radius-md);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
  transition: opacity 0.2s;
}
.help-ai-row button:active { opacity: 0.85; }
.help-ai-answer {
  margin-top: var(--space-sm);
  padding: var(--space-sm);
  background: var(--bg-deep);
  border-radius: var(--radius-md);
  font-size: 13px;
  color: var(--text-secondary);
  line-height: 1.6;
  display: none;
}
.help-ai-answer.visible { display: block; }
.help-ai-thinking {
  color: var(--text-muted);
  font-style: italic;
  font-size: 13px;
}

/* Contact Card */
.help-contact-card {
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  padding: var(--space-xl);
  text-align: center;
  border: 1px solid var(--border-subtle);
}
.help-contact-card h4 {
  font-size: 16px;
  font-weight: 800;
  color: var(--text-primary);
  margin-bottom: 4px;
}
.help-contact-card p {
  font-size: 12px;
  color: var(--text-tertiary);
  margin-bottom: var(--space-md);
  line-height: 1.5;
}
.help-qr-block {
  width: 130px;
  height: 130px;
  background: var(--bg-deep);
  border-radius: var(--radius-md);
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
}
.help-qr-block::before {
  content: '';
  position: absolute;
  inset: 14px;
  border: 4px solid var(--text-tertiary);
  border-radius: 4px;
  opacity: 0.3;
}
.help-qr-block::after {
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  background: var(--text-tertiary);
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border-radius: 2px;
  opacity: 0.35;
}
.help-qr-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-tertiary);
  margin-top: var(--space-xs);
}

.help-no-result {
  padding: var(--space-md) var(--space-lg);
  text-align: center;
  color: var(--text-muted);
  font-size: 13px;
}

/* ===== Moment Detail Page ===== */
.moment-detail-page {
  padding-bottom: 120px;
}
.moment-detail-carousel {
  position: relative;
  width: 100%;
  aspect-ratio: 1;
  background: var(--bg-deep);
  overflow: hidden;
}
.moment-detail-carousel-track {
  display: flex;
  height: 100%;
  transition: transform 0.3s ease;
}
.moment-detail-carousel-slide {
  flex: 0 0 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-deep);
}
.moment-detail-carousel-slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.moment-detail-carousel-dots {
  position: absolute;
  bottom: 12px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 6px;
  z-index: 2;
}
.moment-detail-carousel-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgba(255,255,255,0.5);
  transition: all 0.2s;
}
.moment-detail-carousel-dot.active {
  background: #fff;
  width: 18px;
  border-radius: 3px;
}
.moment-detail-carousel-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(0,0,0,0.25);
  border: none;
  color: #fff;
  font-size: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
}
.moment-detail-carousel-prev { left: 8px; }
.moment-detail-carousel-next { right: 8px; }
.moment-detail-carousel-counter {
  position: absolute;
  top: 12px;
  right: 12px;
  background: rgba(0,0,0,0.45);
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 12px;
  z-index: 2;
}

/* Moment Detail Info */
.moment-detail-info {
  padding: var(--space-lg);
}
.moment-detail-publisher {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-bottom: var(--space-md);
}
.moment-detail-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  background-color: var(--border-subtle);
  flex-shrink: 0;
}
.moment-detail-nick {
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
}
.moment-detail-event-link {
  font-size: 12px;
  color: var(--accent);
  margin-top: 2px;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 3px;
}
.moment-detail-event-link .lucide { width: 12px; height: 12px; }
.moment-detail-desc {
  font-size: 14px;
  color: var(--text-primary);
  line-height: 1.6;
  margin-bottom: var(--space-md);
}
.moment-detail-meta {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  padding: var(--space-sm) 0;
  border-top: 1px solid var(--border-subtle);
  border-bottom: 1px solid var(--border-subtle);
  margin-bottom: var(--space-md);
}
.moment-detail-meta-item {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  color: var(--text-secondary);
  cursor: pointer;
  user-select: none;
  background: none;
  border: none;
  padding: 8px 0;
}
.moment-detail-meta-item.liked { color: var(--accent); }
.moment-detail-meta-item.favorited { color: var(--vip-gold); }
.moment-detail-meta-item .lucide { width: 18px; height: 18px; }
.moment-detail-time {
  font-size: 12px;
  color: var(--text-muted);
  margin-left: auto;
}

/* Comment Section */
.moment-comments {
  padding: 0 var(--space-lg);
}
.moment-comments-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: var(--space-md);
}
.moment-comment-item {
  display: flex;
  gap: var(--space-sm);
  margin-bottom: var(--space-md);
}
.moment-comment-avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  background-color: var(--border-subtle);
  flex-shrink: 0;
}
.moment-comment-body {
  flex: 1;
}
.moment-comment-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-secondary);
  margin-bottom: 3px;
}
.moment-comment-text {
  font-size: 14px;
  color: var(--text-primary);
  line-height: 1.5;
}
.moment-comment-time {
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 3px;
}
.moment-comment-empty {
  text-align: center;
  color: var(--text-muted);
  font-size: 13px;
  padding: var(--space-xl) 0;
}

/* Comment Input */
.moment-comment-input-wrap {
  position: fixed;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 390px;
  max-width: 100vw;
  background: var(--bg-surface);
  border-top: 1px solid var(--border-subtle);
  padding: var(--space-sm) var(--space-lg);
  padding-bottom: max(var(--space-sm), env(safe-area-inset-bottom));
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  z-index: 50;
  box-sizing: border-box;
}
.moment-comment-input {
  flex: 1;
  border: 1px solid var(--border-light);
  border-radius: 20px;
  padding: 10px 16px;
  font-size: 14px;
  font-family: inherit;
  background: var(--bg-card);
  color: var(--text-primary);
  outline: none;
}
.moment-comment-input:focus { border-color: var(--accent); }
.moment-comment-send {
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 20px;
  padding: 10px 18px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
}
.moment-comment-send:disabled { opacity: 0.45; cursor: not-allowed; }

/* ===== Moments Grid — Photo Group Cards ===== */
.moments-group-section {
  padding: 0 16px;
  margin-bottom: 12px;
}
.moments-group-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}
.moments-group-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--text-primary);
}
.moments-group-count {
  font-size: 12px;
  color: var(--text-muted);
}
.moments-group-card {
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  margin-bottom: 12px;
  cursor: pointer;
}
.moments-group-cover {
  width: 100%;
  height: 160px;
  background-size: cover;
  background-position: center;
  background-color: var(--bg-deep);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.moments-group-cover-overlay {
  position: absolute;
  inset: 0;
  background: rgba(0,0,0,0.08);
  display: flex;
  align-items: center;
  justify-content: center;
}
.moments-group-cover-count {
  background: rgba(0,0,0,0.6);
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  padding: 8px 20px;
  border-radius: 20px;
}
.moments-group-body {
  padding: var(--space-sm) var(--space-md);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.moments-group-name {
  font-size: 14px;
  font-weight: 700;
  color: var(--text-primary);
}
.moments-group-meta {
  font-size: 12px;
  color: var(--text-muted);
}

/* ===== Admin Moments Page ===== */
.admin-moments-tabs {
  display: flex;
  gap: 4px;
  margin-bottom: var(--space-lg);
  background: var(--bg-deep);
  border-radius: var(--radius-md);
  padding: 4px;
}
.admin-moments-tab {
  flex: 1;
  padding: 8px 16px;
  border-radius: var(--radius-sm);
  font-size: 13px;
  font-weight: 600;
  text-align: center;
  cursor: pointer;
  border: none;
  background: transparent;
  color: var(--text-secondary);
  transition: all 0.15s;
}
.admin-moments-tab.active {
  background: var(--bg-card);
  color: var(--text-primary);
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}
.admin-moments-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-card);
}
.admin-moments-table th {
  text-align: left;
  padding: 12px 16px;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-secondary);
  background: var(--bg-deep);
  border-bottom: 1px solid var(--border-subtle);
}
.admin-moments-table td {
  padding: 10px 16px;
  font-size: 13px;
  color: var(--text-primary);
  border-bottom: 1px solid var(--border-subtle);
  vertical-align: middle;
}
.admin-moments-table tr:last-child td { border-bottom: none; }
.admin-moments-table tr:hover td { background: var(--accent-dim); }
.admin-moments-thumb {
  width: 48px;
  height: 48px;
  border-radius: 8px;
  background-size: cover;
  background-position: center;
  background-color: var(--bg-deep);
}
.admin-moments-publisher-info {
  display: flex;
  align-items: center;
  gap: 8px;
}
.admin-moments-publisher-avatar {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  background-color: var(--border-subtle);
}

/* Admin Rules Panel */
.admin-moments-rules-panel {
  background: var(--bg-card);
  border-radius: var(--radius-lg);
  padding: var(--space-lg);
  box-shadow: var(--shadow-card);
  margin-bottom: var(--space-lg);
}
.admin-moments-rules-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: var(--space-md);
}
.admin-moments-rules-row {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  margin-bottom: var(--space-sm);
}
.admin-moments-rules-row label {
  font-size: 13px;
  color: var(--text-secondary);
  min-width: 160px;
}
.admin-moments-rules-row input {
  width: 80px;
  padding: 6px 10px;
  border: 1px solid var(--border-light);
  border-radius: var(--radius-sm);
  font-size: 14px;
  text-align: center;
  font-family: inherit;
}

/* Moment card inline photo count */
.moment-card-photo-count-inline {
  font-size: 11px;
  color: var(--text-tertiary, #999);
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  white-space: nowrap;
}
.moment-card-photo-count-inline::before {
  content: '';
  display: inline-block;
  width: 12px;
  height: 12px;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='18' rx='2'/%3E%3Ccircle cx='8.5' cy='8.5' r='1.5'/%3E%3Cpolyline points='21 15 16 10 5 21'/%3E%3C/svg%3E") no-repeat center;
  background-size: contain;
  margin-right: 1px;
}
.moment-card-img-wrap {
  position: relative;
}
.moment-card-event-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  margin-bottom: 4px;
}

/* Moments Grid + Card */
.moments-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  padding: 10px 16px 100px;
}
.moment-card {
  margin: 0;
  border-radius: 12px;
  background: var(--surface, #fff);
  box-shadow: 0 1px 4px rgba(0,0,0,0.06);
  cursor: pointer;
  transition: transform 0.18s ease;
  /* issue-20260816-022: 移除 overflow:hidden，否则头像右下角角标被裁；
     图片圆角由 .moment-card-img-wrap 接管（顶部区域 + overflow:hidden） */
}
.moment-card-img-wrap {
  overflow: hidden;
  border-top-left-radius: 12px;
  border-top-right-radius: 12px;
}
.moment-card.featured {
  grid-column: 1 / -1;
}
.moment-card.featured .moment-card-img {
  aspect-ratio: 16/7;
}
.moment-card-featured-badge {
  position: absolute; top: 10px; left: 10px;
  background: rgba(0,0,0,0.55); backdrop-filter: blur(4px);
  color: #fff; font-size: 11px; font-weight: 700;
  padding: 4px 10px; border-radius: 20px;
  letter-spacing: 0.3px;
}
.moment-card.featured .moment-card-desc {
  -webkit-line-clamp: 3; font-size: 13px;
}
.moment-card {
  border-radius: 12px;
  overflow: hidden;
  background: var(--surface, #fff);
  box-shadow: 0 1px 4px rgba(0,0,0,0.06);
  cursor: pointer;
  transition: transform 0.18s ease;
}
.moment-card:active { transform: scale(0.98); }
.moment-card-img {
  width: 100%;
  display: block;
  background-size: cover;
  background-position: center;
  height: auto;
  aspect-ratio: 4/3;
}
.moment-card-body {
  padding: 8px 10px 10px;
}
.moment-card-user {
  display: flex;
  align-items: center;
  gap: 6px;
}
.moment-card-avatar {
  width: 22px; height: 22px;
  border-radius: 50%;
  background-size: cover;
  background-position: center;
  background-color: var(--border, #eee);
  flex-shrink: 0;
  position: relative;
}
.moment-card-nick {
  font-size: 12px;
  font-weight: 600;
  color: var(--fg, #222);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.moment-card-event {
  font-size: 10px;
  color: var(--accent, #4a90d9);
  margin-top: 4px;
  line-height: 1.3;
}
.moment-card-desc {
  font-size: 12px;
  color: var(--muted, #666);
  margin-top: 4px;
  line-height: 1.4;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.moment-card-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 6px;
}
.moment-card-time {
  font-size: 10px;
  color: var(--muted, #999);
}
.moment-card-like {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  color: var(--muted, #999);
  cursor: pointer;
  user-select: none;
  background: none;
  border: none;
  padding: 2px 4px;
  border-radius: 4px;
  transition: color 0.15s;
}
.moment-card-like.liked { color: var(--accent, #e74c3c); font-weight: 600; }
.moment-card-like.favorited { color: var(--vip-gold, #D9A84B); font-weight: 600; }
.moment-card-like .lucide { width: 14px; height: 14px; }
.moment-card-like:active { background: var(--accent-dim); }
.moment-card-stats {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 12px;
  color: var(--text-muted);
}
.moment-card-stat {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  cursor: pointer;
  background: none;
  border: none;
  color: inherit;
  font-size: 12px;
  padding: 2px 4px;
  border-radius: 4px;
  transition: color 0.15s;
}
.moment-card-stat:active { color: var(--accent); }
.moment-card-stat.liked { color: var(--accent); font-weight: 600; }
.moment-card-stat.favorited { color: var(--vip-gold, #D9A84B); font-weight: 600; }
.moment-card-stat svg { width: 14px; height: 14px; }

/* ===== Moments Empty State ===== */
.moments-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 60px 40px; text-align: center; gap: 12px;
}
.moments-empty-icon { width: 56px; height: 56px; border-radius: 50%; background: var(--bg-deep, #f5f7fa); display: flex; align-items: center; justify-content: center; color: var(--text-muted); }
.moments-empty-icon svg { width: 28px; height: 28px; }
.moments-empty-text { font-size: 13px; color: var(--text-tertiary, #999); font-weight: 500; }

/* ===== Moments FAB ===== */
.moments-fab {
  position: fixed; bottom: 110px; right: 28px; z-index: 100;
  width: 52px; height: 52px; border-radius: 50%;
  background: var(--accent); color: #fff; border: none;
  box-shadow: 0 4px 16px rgba(0,0,0,0.18); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: transform 0.2s, box-shadow 0.2s;
}
.moments-fab:active { transform: scale(0.92); box-shadow: 0 2px 8px rgba(0,0,0,0.15); }
.moments-fab svg { width: 24px; height: 24px; }

/* ===== Moments Upload Overlay & Panel ===== */
.moments-upload-overlay {
  position: fixed; inset: 0; z-index: 300;
  background: rgba(0,0,0,0.45); backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  display: flex; align-items: center; justify-content: center;
  visibility: hidden; opacity: 0;
  transition: opacity 0.25s, visibility 0s 0.25s;
}
.moments-upload-overlay.active {
  visibility: visible; opacity: 1;
  transition: opacity 0.25s, visibility 0s 0s;
}
.moments-upload-panel {
  background: var(--surface, #fff); border-radius: 18px;
  padding: 22px 20px 24px; margin: 0 24px;
  width: 100%; max-width: 370px; max-height: 85vh; overflow-y: auto;
  box-shadow: 0 12px 40px rgba(0,0,0,0.22);
  transform: translateY(24px);
  transition: transform 0.3s cubic-bezier(0.16,1,0.3,1);
}
.moments-upload-overlay.active .moments-upload-panel {
  transform: translateY(0);
}
.moments-upload-header {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 8px;
}
.moments-upload-title { font-size: 17px; font-weight: 800; color: var(--text-primary, #222); }
.moments-upload-close {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--bg-deep, #f5f7fa); border: none;
  font-size: 16px; color: var(--text-secondary, #555);
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: background 0.15s;
}
.moments-upload-close:active { background: var(--border, #ddd); }

/* ===== Moments Photo Grid (upload) ===== */
.moments-photo-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 8px; margin-bottom: 16px;
}
.moments-photo-slot {
  aspect-ratio: 1; border-radius: 10px;
  border: 2px dashed var(--border-subtle, #e0e0e0);
  background: var(--bg-deep, #fafafa);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; position: relative;
  background-size: cover; background-position: center;
  transition: border-color 0.2s;
}
.moments-photo-slot:hover { border-color: var(--accent); }
.moments-photo-slot.has-photo { border-style: solid; border-color: transparent; }
.moments-photo-plus {
  font-size: 28px; font-weight: 300; color: var(--text-muted, #bbb);
  user-select: none; pointer-events: none;
}
.moments-photo-slot.has-photo .moments-photo-plus { display: none; }

/* ===== Moments Upload Form ===== */
.moments-upload-select {
  width: 100%; padding: 10px 14px; margin-bottom: 12px;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  border-radius: 10px; background: var(--bg-deep, #fafafa);
  font-size: 13px; color: var(--text-primary, #222);
  font-family: inherit; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.moments-upload-select:focus { outline: none; border-color: var(--accent); }
.moments-upload-text {
  width: 100%; min-height: 80px; padding: 10px 14px; margin-bottom: 16px;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  border-radius: 10px; font-size: 13px; color: var(--text-primary, #222);
  font-family: inherit; resize: vertical;
  background: var(--bg-deep, #fafafa);
}
.moments-upload-text:focus { outline: none; border-color: var(--accent); }
.moments-upload-text::placeholder { color: var(--text-muted, #ccc); }
.moments-upload-btn {
  width: 100%; padding: 13px; border: none;
  background: var(--accent); color: #fff;
  font-size: 15px; font-weight: 700; cursor: pointer;
  border-radius: 12px; transition: opacity 0.2s;
}
.moments-upload-btn:active { opacity: 0.82; }

/* ===== Moment Publish Page ===== */
.moment-publish-wrap { padding: 0 20px 130px; }

.mp-section { margin-bottom: 20px; }
.mp-mode-tabs {
  display: flex;
  background: var(--bg-card, #f5f5f5);
  border-radius: 10px;
  padding: 3px;
  margin-bottom: 20px;
  gap: 0;
}
.mp-mode-tab {
  flex: 1;
  padding: 10px 0;
  text-align: center;
  font-size: 14px;
  font-weight: 600;
  color: var(--text-secondary, #999);
  background: transparent;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.2s;
}
.mp-mode-tab.active {
  background: var(--surface, #fff);
  color: var(--text-primary, #222);
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}
.mp-rule-banner {
  background: var(--bg-deep, #FCF9F3);
  border: 1px solid var(--border-subtle, #eee);
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 20px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--text-secondary, #999);
}
.mp-rule-banner svg { flex-shrink: 0; color: var(--accent, #FF5E5E); }
.mp-section.mp-group-hidden { display: none; }
.mp-section.mp-moment-hidden { display: none; }
.mp-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.mp-section-label { font-size: 15px; font-weight: 700; color: var(--text-primary, #222); }
.mp-section-hint { font-size: 11px; color: var(--text-tertiary, #aaa); }

/* Photo Grid */
.mp-photo-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.mp-photo-slot {
  aspect-ratio: 1; border-radius: 12px;
  border: 2px dashed var(--border-subtle, #ddd);
  background: var(--bg-deep, #f8f8f8);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; position: relative;
  background-size: cover; background-position: center;
  transition: border-color 0.2s, transform 0.15s;
}
.mp-photo-slot:hover { border-color: var(--accent); transform: scale(1.02); }
.mp-photo-slot:active { transform: scale(0.96); }
.mp-photo-slot svg { color: var(--text-muted, #ccc); }
.mp-photo-slot.has-photo { border-style: solid; border-color: transparent; }
.mp-photo-remove {
  position: absolute; top: 6px; right: 6px;
  width: 22px; height: 22px; border-radius: 50%;
  background: rgba(0,0,0,0.55); color: #fff;
  font-size: 12px; display: flex; align-items: center; justify-content: center;
  cursor: pointer; backdrop-filter: blur(4px);
  opacity: 0; transition: opacity 0.15s;
}
.mp-photo-slot.has-photo:hover .mp-photo-remove { opacity: 1; }

/* Select */
.mp-select {
  width: 100%; padding: 12px 14px;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  border-radius: 12px; background: var(--bg-deep, #fafafa);
  font-size: 14px; color: var(--text-primary, #222);
  font-family: inherit; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 14px center;
  cursor: pointer;
}
.mp-select:focus { outline: none; border-color: var(--accent); }

/* Textarea */
.mp-textarea {
  width: 100%; min-height: 100px; padding: 12px 14px;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  border-radius: 12px; font-size: 14px; color: var(--text-primary, #222);
  font-family: inherit; resize: vertical; line-height: 1.6;
  background: var(--bg-deep, #fafafa);
}
.mp-textarea:focus { outline: none; border-color: var(--accent); }
.mp-textarea::placeholder { color: var(--text-muted, #ccc); }
.mp-char-count { text-align: right; font-size: 11px; color: var(--text-muted, #bbb); margin-top: 4px; }

/* Radio Row */
.mp-radio-row { display: flex; flex-direction: column; gap: 8px; }
.mp-radio {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px; border-radius: 12px;
  background: var(--bg-deep, #fafafa); cursor: pointer;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  transition: border-color 0.2s;
}
.mp-radio:has(input:checked) { border-color: var(--accent); background: var(--accent-dim, #fef0ef); }
.mp-radio input[type="radio"] { accent-color: var(--accent); width: 18px; height: 18px; cursor: pointer; }
.mp-radio-label { font-size: 14px; font-weight: 500; color: var(--text-primary, #222); }

/* Location */
.mp-location-row {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px; border-radius: 12px;
  background: var(--bg-deep, #fafafa); cursor: pointer;
  border: 1.5px solid var(--border-subtle, #e0e0e0);
  transition: border-color 0.2s;
}
.mp-location-row:active { border-color: var(--accent); }
.mp-location-text { flex: 1; font-size: 14px; color: var(--text-secondary, #777); }
.mp-location-row svg { color: var(--text-muted, #aaa); flex-shrink: 0; }

/* Location Picker Overlay */
.mp-location-picker-overlay {
  position: fixed; inset: 0; z-index: 400;
  background: rgba(0,0,0,0.45); backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  display: flex; align-items: flex-end; justify-content: center;
}
.mp-location-picker {
  background: var(--surface, #fff); border-radius: 18px 18px 0 0;
  padding: 20px 20px 30px; width: 100%; max-width: 390px;
  max-height: 60vh; overflow-y: auto;
}
.mp-location-picker-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 14px;
}
.mp-location-picker-title { font-size: 16px; font-weight: 700; color: var(--text-primary, #222); }
.mp-location-picker-close {
  width: 30px; height: 30px; border-radius: 50%;
  background: var(--bg-deep); border: none; font-size: 14px;
  color: var(--text-secondary); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.mp-location-list { display: flex; flex-direction: column; gap: 4px; }
.mp-location-item {
  width: 100%; padding: 13px 14px; text-align: left;
  background: var(--bg-deep); border: none; border-radius: 10px;
  font-size: 14px; color: var(--text-primary); cursor: pointer;
  font-family: inherit; transition: background 0.15s;
}
.mp-location-item:hover { background: var(--accent-dim); }

/* Publish Button */
.mp-publish-btn {
  width: 100%; padding: 15px; border: none;
  background: var(--accent); color: #fff;
  font-size: 16px; font-weight: 700; cursor: pointer;
  border-radius: 14px; margin-top: 12px;
  transition: opacity 0.2s, transform 0.15s;
  font-family: inherit;
}
.mp-publish-btn:active { opacity: 0.85; transform: scale(0.98); }

/* Toast */
.mp-toast {
  position: fixed; top: 50%; left: 50%; transform: translate(-50%,-50%);
  z-index: 500; background: rgba(0,0,0,0.78); color: #fff;
  padding: 14px 28px; border-radius: 12px; font-size: 15px; font-weight: 600;
  backdrop-filter: blur(10px);
}

/* ===== Moment Detail V2 — Photo-First Design ===== */
/* ===== Moment Detail V3 — Social post detail ===== */
.moment-detail-v3 { padding: 0; background: var(--bg-deep); min-height: 60vh; }

/* ── Header: user info ── */
.md-detail-header { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--surface); }
.md-detail-header-avatar { width: 44px; height: 44px; border-radius: 50%; background-size: cover; background-position: center; flex-shrink: 0; background-color: var(--bg-deep); position: relative; }
.md-detail-header-info { flex: 1; min-width: 0; }
.md-detail-header-name { font-size: 15px; font-weight: 700; color: var(--text-primary); line-height: 1.3; }
.md-detail-header-time { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
.md-detail-header-badge { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--accent); background: var(--accent-dim); padding: 2px 8px; border-radius: 9999px; margin-top: 4px; cursor: pointer; white-space: nowrap; max-width: fit-content; }
.md-detail-header-badge svg { width: 12px; height: 12px; }

/* ── Image carousel ── */
.md-detail-carousel { position: relative; background: var(--bg-deep); overflow: hidden; user-select: none; -webkit-user-select: none; }
.md-detail-carousel-track { display: flex; transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); will-change: transform; }
.md-detail-carousel-slide { min-width: 100%; }
.md-detail-carousel-slide img { display: block; width: 100%; max-height: 520px; object-fit: cover; }
.md-detail-carousel-arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 36px; height: 36px; border-radius: 50%; background: rgba(255,255,255,0.85); border: none; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 2; box-shadow: 0 2px 8px rgba(0,0,0,0.12); color: var(--text-primary); }
.md-detail-carousel-arrow:active { background: rgba(255,255,255,1); }
.md-detail-carousel-arrow.prev { left: 10px; }
.md-detail-carousel-arrow.next { right: 10px; }
.md-detail-carousel-counter { position: absolute; bottom: 10px; right: 12px; background: rgba(0,0,0,0.5); color: #fff; font-size: 11px; font-weight: 600; padding: 3px 9px; border-radius: 9999px; backdrop-filter: blur(8px); pointer-events: none; }
.md-detail-carousel-dots { display: flex; justify-content: center; gap: 6px; padding: 10px 0; background: var(--surface); }
.md-detail-carousel-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--border-light); border: none; padding: 0; cursor: pointer; transition: all 0.2s; }
.md-detail-carousel-dot.active { background: var(--accent); width: 18px; border-radius: 3px; }

/* ── Content / description ── */
.md-detail-content { padding: 14px 16px; background: var(--surface); }
.md-detail-desc { font-size: 15px; color: var(--text-primary); line-height: 1.65; white-space: pre-wrap; word-break: break-word; }
.md-detail-event-link { display: inline-flex; align-items: center; gap: 5px; margin-top: 10px; padding: 6px 12px; background: var(--accent-dim); border-radius: 9999px; font-size: 12px; color: var(--accent); font-weight: 600; cursor: pointer; text-decoration: none; border: none; font-family: inherit; }
.md-detail-event-link svg { width: 14px; height: 14px; flex-shrink: 0; }

/* ── Stats bar ── */
.md-detail-stats { display: flex; align-items: center; gap: 24px; padding: 10px 16px; background: var(--surface); border-top: 1px solid var(--border-subtle); border-bottom: 1px solid var(--border-subtle); }
.md-detail-stat { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; color: var(--text-secondary); cursor: pointer; background: none; border: none; padding: 4px 0; font-family: inherit; }
.md-detail-stat svg { width: 18px; height: 18px; transition: transform 0.15s; }
.md-detail-stat:active svg { transform: scale(0.85); }
.md-detail-stat.liked { color: var(--accent); }
.md-detail-stat.liked svg { fill: var(--accent); stroke: var(--accent); }

/* ── Comment section ── */
.md-detail-comments-section { background: var(--surface); padding: 0 16px 12px; }
.md-detail-comments-title { font-size: 14px; font-weight: 700; color: var(--text-primary); padding: 14px 0 10px; }
.md-detail-comment-item { display: flex; gap: 10px; padding: 12px 0; border-bottom: 1px solid var(--border-subtle); }
.md-detail-comment-item:last-child { border-bottom: none; }
.md-detail-comment-avatar { width: 34px; height: 34px; border-radius: 50%; background-size: cover; background-position: center; flex-shrink: 0; background-color: var(--bg-deep); }
.md-detail-comment-body { flex: 1; min-width: 0; }
.md-detail-comment-name { font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: 3px; }
.md-detail-comment-name .reply-to { font-weight: 400; color: var(--text-muted); }
.md-detail-comment-text { font-size: 14px; color: var(--text-secondary); line-height: 1.5; word-break: break-word; }
.md-detail-comment-meta { display: flex; align-items: center; gap: 16px; margin-top: 6px; font-size: 11px; color: var(--text-muted); }
.md-detail-comment-meta button { background: none; border: none; padding: 0; font-size: 11px; color: var(--text-muted); cursor: pointer; font-family: inherit; transition: color 0.15s; }
.md-detail-comment-meta button.comment-liked { color: var(--accent); font-weight: 600; }

/* ── Nested replies ── */
.md-detail-replies { margin-top: 8px; padding: 10px 12px; background: var(--bg-deep); border-radius: var(--radius-md); }
.md-detail-reply-item { display: flex; gap: 8px; padding: 6px 0; }
.md-detail-reply-item + .md-detail-reply-item { border-top: 1px solid var(--border-subtle); padding-top: 8px; margin-top: 2px; }
.md-detail-reply-avatar { width: 26px; height: 26px; border-radius: 50%; background-size: cover; background-position: center; flex-shrink: 0; background-color: var(--border-light); }
.md-detail-reply-body { flex: 1; min-width: 0; }
.md-detail-reply-name { font-size: 12px; font-weight: 700; color: var(--text-primary); }
.md-detail-reply-name .reply-to { font-weight: 400; color: var(--accent); }
.md-detail-reply-text { font-size: 13px; color: var(--text-secondary); line-height: 1.5; word-break: break-word; margin: 2px 0; }
.md-detail-reply-meta { display: flex; align-items: center; gap: 14px; font-size: 10px; color: var(--text-muted); margin-top: 3px; }
.md-detail-reply-meta button { background: none; border: none; padding: 0; font-size: 10px; color: var(--text-muted); cursor: pointer; font-family: inherit; }

/* ── Load more ── */
.md-detail-load-more { text-align: center; padding: 14px 0; }
.md-detail-load-more button { background: none; border: 1px solid var(--border-light); border-radius: 9999px; padding: 7px 22px; font-size: 12px; color: var(--text-secondary); cursor: pointer; font-family: inherit; }
.md-detail-load-more button:active { background: var(--bg-deep); }

/* ── Comment input bar ── */
.md-detail-comment-input-bar { display: flex; align-items: center; gap: 8px; padding: 10px 16px; background: var(--surface); border-top: 1px solid var(--border-subtle); }
.md-detail-comment-input-bar .reply-hint { font-size: 11px; color: var(--accent); margin-right: 4px; white-space: nowrap; cursor: pointer; font-weight: 600; }
.md-detail-comment-input-bar .reply-hint:active { opacity: 0.7; }
.md-detail-comment-input { flex: 1; border: 1px solid var(--border-light); border-radius: 22px; padding: 9px 16px; font-size: 14px; background: var(--bg-deep); color: var(--text-primary); outline: none; font-family: inherit; }
.md-detail-comment-input:focus { border-color: var(--accent); background: var(--surface); }
.md-detail-comment-send { background: var(--accent); color: #fff; border: none; border-radius: 22px; padding: 9px 18px; font-size: 13px; font-weight: 700; cursor: pointer; white-space: nowrap; font-family: inherit; transition: opacity 0.15s; }
.md-detail-comment-send:disabled { opacity: 0.4; cursor: default; }
.md-detail-comment-send:active:not(:disabled) { opacity: 0.85; transform: scale(0.96); }

/* ── Emotion bar ── */
.md-detail-emotion-bar { display: flex; align-items: center; justify-content: center; gap: 4px; padding: 12px 16px; background: var(--surface); border-top: 1px solid var(--border-subtle); }
.md-detail-emotion-btn { display: flex; flex-direction: column; align-items: center; gap: 2px; background: none; border: none; cursor: pointer; padding: 6px 10px; border-radius: var(--radius-md); transition: background 0.15s, transform 0.12s; font-family: inherit; }
.md-detail-emotion-btn:active { background: var(--bg-deep); transform: scale(0.88); }
.md-detail-emotion-btn.pressed { background: var(--accent-soft); }
.md-detail-emotion-btn .emo-icon { width: 22px; height: 22px; stroke-width: 2; }
.md-detail-emotion-btn .emo-label { font-size: 10px; color: var(--text-muted); }
.md-detail-emotion-btn.pressed .emo-label { color: var(--accent); font-weight: 600; }

/* ── Not found state ── */
.md-detail-not-found { text-align: center; padding: 100px 20px; color: var(--text-muted); font-size: 14px; }
.md-detail-empty-state { text-align: center; padding: 80px 20px; }
.md-detail-empty-icon { width: 64px; height: 64px; margin: 0 auto 20px; color: var(--text-muted); opacity: 0.5; }
.md-detail-empty-icon svg { width: 100%; height: 100%; }
.md-detail-empty-title { font-size: 16px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; }
.md-detail-empty-desc { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; }
.md-detail-empty-btn { display: inline-flex; align-items: center; gap: 8px; padding: 12px 28px; background: var(--accent); color: #fff; border: none; border-radius: 9999px; font-size: 14px; font-weight: 700; cursor: pointer; font-family: inherit; transition: transform 0.15s, opacity 0.15s; }
.md-detail-empty-btn:active { transform: scale(0.95); opacity: 0.9; }
.md-detail-empty-btn svg { width: 18px; height: 18px; flex-shrink: 0; }

/* ═══ Wallet Page — migrated from inline <style> ═══ */
/* Wallet Page */
.wallet-balance-card {
  margin: 12px 16px;
  padding: 24px 20px;
  border-radius: 16px;
  background: var(--accent);
  color: #fff;
}
.wallet-balance-label {
  font-size: 13px;
  opacity: 0.8;
  margin-bottom: 6px;
}
.wallet-balance-row {
  display: flex;
  align-items: baseline;
  gap: 4px;
}
.wallet-balance-currency {
  font-size: 24px;
  font-weight: 300;
}
.wallet-balance-amount {
  font-size: 40px;
  font-weight: 800;
  letter-spacing: -0.02em;
}
.wallet-balance-sub {
  display: flex;
  justify-content: space-between;
  margin-top: 12px;
  font-size: 12px;
  opacity: 0.75;
}
.wallet-balance-frozen { opacity: 0.6; }

/* Quick Actions */
.wallet-actions-row {
  display: flex;
  gap: 12px;
  margin: 4px 16px 20px;
}
.wallet-action-btn {
  flex: 1;
  padding: 14px 8px;
  border-radius: 14px;
  border: 1.5px solid var(--border, #ddd);
  background: var(--surface, #fff);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  transition: all 0.15s;
  font-family: inherit;
}
.wallet-action-btn:active { transform: scale(0.96); background: var(--bg, #f5f5f5); }
.wallet-action-icon {
  width: 42px; height: 42px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.wallet-action-icon .lucide { width: 20px; height: 20px; color: #fff; }
.wallet-action-label {
  font-size: 12px;
  font-weight: 600;
  color: var(--fg, #222);
}

/* Transactions */
.wallet-tx-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 20px 10px;
}
.wallet-tx-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--fg, #222);
}
.wallet-tx-more {
  font-size: 12px;
  color: var(--accent, #4a90d9);
  cursor: pointer;
  background: none;
  border: none;
}
.wallet-tx-list {
  padding: 0 16px 100px;
}
.wallet-tx-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 0;
  border-bottom: 1px solid var(--border, #eee);
}
.wallet-tx-icon {
  width: 40px; height: 40px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.wallet-tx-icon .lucide { width: 18px; height: 18px; color: #fff; }
.wallet-tx-info { flex: 1; min-width: 0; }
.wallet-tx-name { font-size: 14px; font-weight: 600; color: var(--fg, #222); }
.wallet-tx-date { font-size: 11px; color: var(--muted, #999); margin-top: 2px; }
.wallet-tx-amount {
  font-size: 15px;
  font-weight: 700;
  white-space: nowrap;
}
.wallet-tx-amount.income { color: var(--accent, #4a90d9); }
.wallet-tx-amount.expense { color: var(--fg, #222); }
.wallet-tx-empty {
  text-align: center;
  padding: 40px 20px;
  color: var(--muted, #999);
  font-size: 14px;
}

/* Recharge / Withdraw Panel */
.wallet-panel-overlay {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.5);
  z-index: 200;
  display: none;
  align-items: flex-end;
  justify-content: center;
}
.wallet-panel-overlay.active { display: flex; }
.wallet-panel {
  background: var(--surface, #fff);
  width: 100%;
  max-width: 430px;
  border-radius: 20px 20px 0 0;
  padding: 24px 20px max(40px, env(safe-area-inset-bottom, 40px));
  max-height: 85vh;
  overflow-y: auto;
}
.wallet-panel-title {
  font-size: 18px;
  font-weight: 700;
  color: var(--fg, #222);
  margin-bottom: 20px;
  text-align: center;
}
.wallet-amount-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-bottom: 16px;
}
.wallet-amount-option {
  padding: 16px 8px;
  border-radius: 12px;
  border: 1.5px solid var(--border, #ddd);
  background: var(--surface, #fff);
  text-align: center;
  cursor: pointer;
  font-family: inherit;
  font-size: 17px;
  font-weight: 700;
  color: var(--fg, #222);
  transition: all 0.15s;
}
.wallet-amount-option:active { transform: scale(0.96); }
.wallet-amount-option.selected {
  border-color: var(--accent, #4a90d9);
  background: color-mix(in srgb, var(--accent, #4a90d9) 8%, #fff);
  color: var(--accent, #4a90d9);
}
.wallet-amount-custom {
  width: 100%;
  padding: 14px 16px;
  border-radius: 12px;
  border: 1.5px solid var(--border, #ddd);
  font-size: 16px;
  text-align: center;
  font-family: inherit;
  font-weight: 600;
  color: var(--fg, #222);
  margin-bottom: 16px;
}
.wallet-amount-custom:focus { outline: none; border-color: var(--accent, #4a90d9); }
.wallet-panel-hint {
  font-size: 12px;
  color: var(--muted, #999);
  text-align: center;
  margin-bottom: 16px;
  line-height: 1.5;
}
.wallet-panel-btn {
  width: 100%;
  padding: 14px;
  border-radius: 12px;
  background: var(--accent, #4a90d9);
  color: #fff;
  border: none;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.15s;
}
.wallet-panel-btn:active { opacity: 0.8; }
.wallet-panel-close {
  display: block;
  margin: 12px auto 0;
  background: none;
  border: none;
  color: var(--muted, #999);
  font-size: 14px;
  cursor: pointer;
  padding: 8px;
}

/* ═══ VIP Center — migrated from inline <style> ═══ */

/* ═══ VIP Plan Detail — migrated from inline <style> ═══ */

/* ═══ Login Page — migrated from inline <style> ═══ */
/* VIP 页面专用 — 底部 TabBar 匹配设计系统 (50px) */
.vip-center .tab-bar { height: 50px; padding: 3px 6px 4px; }
.vip-center .tab-item { gap: 1px; padding: 0 6px; }
.vip-center .tab-item .lucide { width: 18px; height: 18px; }
.vip-center .tab-label { font-size: 9px; }
.vip-center .tab-item.fab .fab-bg { width: 32px; height: 32px; }
.vip-center .tab-item.fab .fab-bg .lucide { width: 18px; height: 18px; }
  /* ===== Login V11 — 奶油白 + 珊瑚红风格对齐 ===== */
  .login-hero {
    position: relative;
    padding: 28px 28px 0;
    z-index: 2;
  }
  .login-title {
    font-size: 30px;
    font-weight: 800;
    color: var(--text-primary);
    letter-spacing: -0.5px;
    line-height: 1.05;
    margin-bottom: var(--space-sm);
  }
  .login-title .accent { color: var(--accent); }
  .login-subtitle {
    font-size: 14px;
    color: var(--text-secondary);
    line-height: 1.3;
    font-weight: 500;
    min-height: 2.6em;
  }

  /* Feature bullets — solid V11 card style, no glass */
  .login-perks {
    margin: 28px 28px 0;
    display: grid;
    gap: 10px;
    position: relative;
    z-index: 2;
  }
  .perk-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--bg-card);
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
  }
  .perk-icon {
    width: 34px;
    height: 34px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    background: var(--accent-soft);
    color: var(--accent);
  }
  .perk-icon .lucide { width: 18px; height: 18px; }
  .perk-text {
    font-size: 13px;
    color: var(--text-primary);
    font-weight: 600;
  }
  .perk-sub {
    font-size: 11px;
    color: var(--text-tertiary);
    font-weight: 500;
    margin-top: 2px;
  }

  /* Login action card — solid V11, no glass, no rainbow border */
  .login-card {
    position: relative;
    z-index: 2;
    margin: 26px 20px 0;
    padding: 20px 18px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-2xl);
    box-shadow: var(--shadow-card);
  }

  /* feat/phone-auth-channel: 双 Tab 样式 */
  .login-tabs {
    display: flex;
    gap: 4px;
    margin-bottom: 16px;
    background: var(--surface-hover, rgba(0,0,0,0.04));
    border-radius: 12px;
    padding: 4px;
  }
  .login-tab {
    flex: 1;
    background: transparent;
    border: none;
    padding: 10px 0;
    border-radius: 9px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary, #666);
    cursor: pointer;
    transition: all .2s;
  }
  .login-tab.active {
    background: var(--bg-card, #fff);
    color: var(--accent, #ff5e6c);
    box-shadow: 0 2px 6px rgba(0,0,0,0.06);
  }
  .phone-form { display: flex; flex-direction: column; gap: 14px; }
  .phone-field { display: flex; flex-direction: column; gap: 6px; }
  .phone-field label {
    font-size: 12px;
    color: var(--text-secondary, #888);
    font-weight: 600;
    letter-spacing: .3px;
  }
  .phone-field input {
    width: 100%;
    height: 44px;
    padding: 0 14px;
    border: 1px solid var(--border-light, #e5e5e5);
    border-radius: 10px;
    font-size: 15px;
    background: var(--bg-input, #fafafa);
    color: var(--text, #222);
    outline: none;
    transition: border-color .2s;
    box-sizing: border-box;
  }
  .phone-field input:focus { border-color: var(--accent, #ff5e6c); }
  .phone-sms-row { display: flex; gap: 8px; }
  .phone-sms-row input { flex: 1; }
  .phone-sms-btn {
    flex-shrink: 0;
    height: 44px;
    padding: 0 14px;
    border: 1px solid var(--accent, #ff5e6c);
    border-radius: 10px;
    background: transparent;
    color: var(--accent, #ff5e6c);
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: all .2s;
  }
  .phone-sms-btn:disabled {
    border-color: var(--border-light, #ccc);
    color: var(--text-tertiary, #999);
    cursor: not-allowed;
  }
  .phone-form-foot {
    display: flex;
    justify-content: space-between;
    margin-top: 4px;
    font-size: 13px;
  }
  .phone-form-link {
    color: var(--text-secondary, #888);
    text-decoration: none;
  }
  .phone-form-link:hover { color: var(--accent, #ff5e6c); }
  .phone-form-msg {
    margin-top: 8px;
    font-size: 12px;
    min-height: 18px;
    text-align: center;
    color: var(--text-secondary, #888);
  }
  .phone-form-msg.error { color: #e53935; }
  .phone-form-msg.success { color: #22c55e; }

  .btn-primary {
    width: 100%;
    height: 54px;
    border: none;
    border-radius: var(--radius-xl);
    background: var(--accent);
    color: #fff;
    font-size: 16px;
    font-weight: 800;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    cursor: pointer;
    box-shadow: 0 14px 30px var(--accent-glow);
    transition: transform 0.15s ease, box-shadow 0.25s ease;
  }
  .btn-primary:active { transform: translateY(1px); }
  .btn-primary .wx-logo {
    width: 22px; height: 22px;
  }

  .btn-secondary-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-top: 12px;
  }
  .btn-ghost {
    height: 48px;
    border-radius: var(--radius-xl);
    border: 1px solid var(--border-light);
    background: var(--bg-surface);
    color: var(--text-primary);
    font-size: 13px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    cursor: pointer;
    transition: background 0.2s ease, border-color 0.2s ease;
  }
  .btn-ghost:hover { background: var(--accent-dim); border-color: var(--border-accent); }
  .btn-ghost .lucide { width: 16px; height: 16px; color: var(--text-secondary); }

  /* Location permission callout */
  .permission-row {
    margin: 14px 20px 0;
    padding: 12px 14px;
    border-radius: var(--radius-lg);
    background: var(--accent-soft);
    border: 1px solid var(--border-accent);
    display: flex;
    align-items: center;
    gap: 10px;
    position: relative;
    z-index: 2;
  }
  .permission-icon {
    width: 30px; height: 30px; border-radius: 50%;
    background: var(--accent-soft);
    color: var(--accent);
    display: flex; align-items: center; justify-content: center; flex-shrink: 0;
  }
  .permission-icon .lucide { width: 16px; height: 16px; }
  .permission-text {
    font-size: 12px;
    color: var(--text-primary);
    font-weight: 600;
    line-height: 1.4;
  }
  .permission-sub {
    font-size: 11px;
    color: var(--text-tertiary);
    font-weight: 500;
    margin-top: 2px;
  }

  /* Terms */
  .terms-row {
    position: relative;
    z-index: 2;
    margin: 18px 28px 0;
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 11px;
    color: var(--text-tertiary);
    line-height: 1.55;
  }
  .terms-check {
    width: 16px; height: 16px;
    border-radius: 5px;
    border: 1.5px solid var(--border-light);
    flex-shrink: 0;
    margin-top: 1px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    background: var(--bg-surface);
    transition: all 0.2s ease;
  }
  .terms-check.checked {
    background: var(--accent);
    border-color: var(--accent);
    color: #fff;
    box-shadow: 0 0 12px var(--accent-glow);
  }
  .terms-check .lucide { width: 12px; height: 12px; opacity: 0; }
  .terms-check.checked .lucide { opacity: 1; }
  .terms-row a { color: var(--accent); text-decoration: none; }

  /* Home entry link */
  .enter-skip {
    margin: 14px 28px 24px;
    text-align: center;
    font-size: 12px;
    color: var(--text-tertiary);
    font-weight: 500;
    position: relative; z-index: 2;
  }
  .enter-skip a {
    color: var(--text-secondary);
    text-decoration: none;
    margin-left: 6px;
    font-weight: 600;
  }
  .enter-skip a::after {
    content: ' →';
    color: var(--accent);
  }

  .login-bottom-spacer { height: 10px; }

  .login-logo {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    text-decoration: none;
    margin-bottom: 24px;
    pointer-events: auto;
  }
  .login-logo .logo-mark {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    overflow: hidden;
  }
  .login-logo .logo-mark-img {
    width: 118%;
    height: 118%;
    object-fit: cover;
    object-position: center;
    filter: drop-shadow(0 4px 14px rgba(140,110,70,0.25));
  }
  .login-logo .logo-title { font-size: 24px; }
  .login-logo .logo-sub { font-size: 9px; letter-spacing: 1.8px; }

  .login-carousel-hint {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding: 8px 28px 10px;
    position: relative; z-index: 2;
  }
  .login-carousel-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--text-primary);
    letter-spacing: -0.2px;
  }
  .login-carousel-tip {
    font-size: 11px;
    color: var(--text-tertiary);
    font-weight: 500;
    transition: color 0.3s ease;
  }
  .login-carousel-tip.paused { color: var(--accent); }
  /* mini coverflow overrides */
  .login-door { padding: 0 0 6px; }
  .login-door .doorway-stage { height: 200px; }
  .login-door .doorway-glass-layer {
    width: 220px; height: 170px;
    border-radius: 20px;
  }
  .login-door .door-card {
    width: 150px; height: 180px;
    margin-left: -75px; margin-top: -90px;
    border-radius: 18px;
  }
  .login-door .door-card-rank {
    top: 8px; left: 8px;
    width: 26px; height: 26px; border-radius: 9px;
    font-size: 12px;
  }
  .login-door .door-card-tag {
    top: 8px; right: 8px;
    height: 18px; padding: 0 7px; font-size: 8px;
  }
  .login-door .door-card-body { left: 10px; right: 10px; bottom: 10px; }
  .login-door .door-card-title { font-size: 12px; margin-bottom: 3px; }
  .login-door .door-card-meta { font-size: 9px; }
  .login-door .door-card-meta .lucide { width: 9px; height: 9px; }
  .login-door .door-card-cta { display: none; } /* hide CTA on login preview */
  .login-door .door-card-gloss { opacity: 0.5; }
  .phone.light-theme .login-door .doorway-glass-layer {
    box-shadow:
      0 16px 34px rgba(0,0,0,0.14),
      inset 0 1px 0 rgba(255,255,255,0.7),
      0 0 60px rgba(255,94,108,0.18);
  }

/* ═══ Login Page — remaining inline-to-CSS ═══ */
.login-scroll { padding-bottom: 24px; }
.login-status-bar { padding-top: 14px; }
.login-hero-wrap { position: relative; }
.login-lang-toggle-wrap { position: absolute; top: 0; right: 28px; z-index: 10; display: flex; gap: 4px; align-items: center; }
.login-lang-btn { width: 34px; height: 34px; border-radius: 50%; border: none; background: var(--bg-glass); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--text-primary); box-shadow: 0 2px 8px rgba(0,0,0,0.08); transition: background 0.2s; }
.login-home-indicator { position: absolute; left: 0; right: 0; bottom: 8px; display: flex; justify-content: center; pointer-events: none; z-index: 3; }
.login-home-indicator-bar { width: 134px; height: 5px; border-radius: 3px; background: rgba(255,255,255,0.25); }

/* ═══ Icon size utilities ═══ */
.lucide-xs { width: 12px; height: 12px; opacity: 0.5; }
.lucide-sm { width: 14px; height: 14px; }
.lucide-md { width: 16px; height: 16px; }
.lucide-lg { width: 20px; height: 20px; }
.lucide-xl { width: 24px; height: 24px; }
.lucide-2xl { width: 32px; height: 32px; }
.lucide-3xl { width: 40px; height: 40px; }
.lucide-4xl { width: 48px; height: 48px; }
.lucide-accent { color: var(--accent); }
.lucide-muted { color: var(--muted); }
.lucide-vip-gold { color: var(--vip-gold); }

/* ═══ VIP Plan Selector Tabs ═══ */
.plan-selector-tabs {
  display: flex;
  gap: var(--space-2xs);
  padding: var(--space-xs) var(--space-sm);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.plan-selector-tab {
  flex: 1; min-width: 0;
  padding: var(--space-xs) var(--space-2xs);
  border-radius: var(--radius-md);
  background: var(--surface);
  border: 1px solid var(--border);
  text-align: center;
  cursor: pointer;
  transition: all 0.2s ease;
  font-size: var(--small-tag);
  font-weight: 600;
  color: var(--text-secondary);
  white-space: nowrap;
}
.plan-selector-tab.active {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

/* ═══ VIP Plan Detail — Reconstructed ═══ */
.plan-detail-hero {
  background: var(--accent);
  border-radius: var(--radius-lg);
  margin: var(--space-sm) var(--space-sm) 0;
  padding: var(--space-lg) var(--space-md);
  text-align: center;
  position: relative;
  overflow: hidden;
}
.plan-detail-hero::before {
  content: '';
  position: absolute;
  top: -60px; right: -60px;
  width: 200px; height: 200px;
  border-radius: 50%;
  background: rgba(255,255,255,0.08);
}
.plan-detail-hero::after {
  content: '';
  position: absolute;
  bottom: -40px; left: -40px;
  width: 140px; height: 140px;
  border-radius: 50%;
  background: rgba(255,255,255,0.06);
}
.plan-detail-icon {
  width: 48px; height: 48px;
  background: rgba(255,255,255,0.2);
  border-radius: var(--radius-md);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto var(--space-xs);
  color: #fff;
}
.plan-detail-icon .lucide { width: 26px; height: 26px; }
.plan-detail-name {
  font-size: var(--heading);
  font-weight: 700;
  color: #fff;
  margin-bottom: var(--space-2xs);
}
.plan-detail-price-wrap {
  display: flex; align-items: center; justify-content: center;
  gap: var(--space-xs);
  margin-bottom: var(--space-3xs);
}
.plan-detail-price-current {
  font-size: 32px; font-weight: 800;
  color: #fff;
  line-height: 1;
}
.plan-detail-price-original {
  font-size: var(--body);
  color: rgba(255,255,255,0.6);
  text-decoration: line-through;
}
.plan-detail-badge {
  display: inline-block;
  background: rgba(255,255,255,0.2);
  color: #fff;
  font-size: var(--caption);
  padding: var(--space-3xs) var(--space-xs);
  border-radius: 20px;
  margin-top: var(--space-2xs);
}
.plan-detail-monthly {
  color: rgba(255,255,255,0.7);
  font-size: var(--caption);
  margin-top: var(--space-2xs);
}
.plan-detail-subscribe {
  display: block;
  margin: var(--space-xs) var(--space-sm) var(--space-md);
  padding: 14px;
  background: var(--accent);
  color: #fff;
  text-align: center;
  border-radius: var(--radius-md);
  font-size: var(--body);
  font-weight: 700;
  border: none;
  width: calc(100% - 32px);
  cursor: pointer;
  transition: opacity 0.2s;
}
.plan-detail-subscribe:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}
/* Plan Payment Methods */
.plan-payment-section {
  margin: var(--space-md) var(--space-sm) 0;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow: hidden;
}
.plan-payment-header {
  padding: var(--space-xs) var(--space-sm);
  font-size: var(--body);
  font-weight: 700;
  color: var(--text-primary);
  border-bottom: 1px solid var(--border);
}
.plan-payment-option {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  padding: var(--space-xs) var(--space-sm);
  cursor: pointer;
  border-bottom: 1px solid var(--border);
  transition: background 0.15s;
}
.plan-payment-option:last-child { border-bottom: none; }
.plan-payment-option:hover { background: var(--bg-deep); }
.plan-payment-radio {
  width: 20px; height: 20px;
  border: 2px solid var(--border);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  transition: border-color 0.2s, background 0.2s;
}
.plan-payment-option.selected .plan-payment-radio {
  border-color: var(--accent);
  background: var(--accent);
}
.plan-payment-radio::after {
  content: '';
  width: 8px; height: 8px;
  border-radius: 50%;
  background: #fff;
  opacity: 0;
  transition: opacity 0.2s;
}
.plan-payment-option.selected .plan-payment-radio::after {
  opacity: 1;
}
.plan-payment-icon {
  width: 28px; height: 28px;
  border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-size: 16px;
  flex-shrink: 0;
}
.plan-payment-icon.wechat { background: #07C160; color: #fff; }
.plan-payment-icon.alipay { background: #1677FF; color: #fff; }
.plan-payment-label {
  font-size: var(--body);
  color: var(--text-primary);
  font-weight: 500;
}
.plan-payment-subtotal {
  padding: var(--space-xs) var(--space-sm);
  display: flex; justify-content: space-between; align-items: center;
  border-top: 1px solid var(--border);
  background: var(--bg-deep);
}
.plan-payment-subtotal-label {
  font-size: var(--body);
  color: var(--text-secondary);
}
.plan-payment-subtotal-value {
  font-size: var(--h3);
  font-weight: 700;
  color: var(--accent);
}
.plan-detail-perks {
  margin: var(--space-sm);
}
.plan-detail-perks-title {
  font-size: var(--body);
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: var(--space-xs);
  padding-left: var(--space-2xs);
}
.plan-detail-perk-item {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  padding: var(--space-xs) var(--space-2xs);
  border-bottom: 1px solid var(--border);
}
.plan-detail-perk-item:last-child { border-bottom: none; }
.plan-detail-perk-icon {
  width: 24px; height: 24px;
  background: var(--accent-dim);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent);
  flex-shrink: 0;
}
.plan-detail-perk-icon .lucide { width: 14px; height: 14px; }
.plan-detail-perk-text {
  font-size: var(--caption);
  color: var(--text-primary);
  flex: 1;
}
.plan-detail-perk-check {
  color: var(--accent);
  font-size: var(--small-tag);
}

/* Payment overlay */
.payment-overlay {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: flex-end;
  animation: paymentOverlayIn 0.28s ease;
}
@keyframes paymentOverlayIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.payment-overlay-mask {
  position: absolute;
  inset: 0;
  background: rgba(0,0,0,0.45);
  backdrop-filter: blur(4px);
}
.payment-overlay-sheet {
  position: relative;
  width: 100%;
  max-width: 390px;
  margin: 0 auto;
  background: var(--surface);
  border-radius: 20px 20px 0 0;
  padding: 32px 24px 40px;
  display: flex;
  flex-direction: column;
  align-items: center;
  animation: paymentSheetUp 0.32s cubic-bezier(0.32, 0.72, 0, 1);
}
@keyframes paymentSheetUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}
.payment-sheet-amount {
  font-size: 40px;
  font-weight: 800;
  color: var(--fg);
  letter-spacing: -0.01em;
  margin-bottom: 4px;
}
.payment-sheet-plan {
  font-size: var(--body);
  font-weight: 600;
  color: var(--muted);
  margin-bottom: 24px;
}
.payment-sheet-method {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 20px;
  background: var(--bg-deep);
  border-radius: 12px;
  width: 100%;
  margin-bottom: 28px;
}
.payment-sheet-method-icon {
  width: 36px;
  height: 36px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  flex-shrink: 0;
}
.payment-sheet-method-icon.wechat { background: #07C160; }
.payment-sheet-method-icon.alipay { background: #1677FF; }
.payment-sheet-method-text {
  font-size: var(--body);
  font-weight: 600;
  color: var(--fg);
}
.payment-sheet-method-switch {
  margin-left: auto;
  font-size: var(--small);
  color: var(--accent);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  transition: background 0.2s;
}
.payment-sheet-method-switch:hover { background: var(--accent-soft); }
.payment-sheet-btn {
  width: 100%;
  height: 50px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 25px;
  font-size: 17px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.2s, transform 0.15s;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
.payment-sheet-btn:active { opacity: 0.85; transform: scale(0.98); }
.payment-sheet-btn:disabled { opacity: 0.55; pointer-events: none; }
.payment-sheet-btn .spinner {
  width: 20px;
  height: 20px;
  border: 2.5px solid rgba(255,255,255,0.3);
  border-top-color: #fff;
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* Payment success state */
.payment-sheet-success {
  text-align: center;
  padding: 12px 0 8px;
}
.payment-sheet-success-icon {
  width: 72px;
  height: 72px;
  border-radius: 50%;
  background: #34C759;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 16px;
  animation: successPop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes successPop {
  0% { transform: scale(0); }
  70% { transform: scale(1.1); }
  100% { transform: scale(1); }
}
.payment-sheet-success-icon svg {
  width: 36px;
  height: 36px;
  stroke-width: 3;
}
.payment-sheet-success-title {
  font-size: 20px;
  font-weight: 700;
  color: var(--fg);
  margin-bottom: 6px;
}
.payment-sheet-success-sub {
  font-size: var(--small);
  color: var(--muted);
}

/* Payment method picker inside overlay */
.payment-method-picker {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 24px;
}
.payment-method-picker-option {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  background: var(--bg-deep);
  border-radius: 12px;
  border: 2px solid transparent;
  cursor: pointer;
  transition: border-color 0.2s, background 0.2s;
}
.payment-method-picker-option.selected {
  border-color: var(--accent);
  background: var(--accent-soft);
}
.payment-method-picker-icon {
  width: 36px;
  height: 36px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  flex-shrink: 0;
}
.payment-method-picker-icon.wechat { background: #07C160; }
.payment-method-picker-icon.alipay { background: #1677FF; }
.payment-method-picker-text {
  font-size: var(--body);
  font-weight: 600;
  color: var(--fg);
}
.payment-method-picker-check {
  margin-left: auto;
  color: var(--accent);
}

/* ===== V12 首次登录引导遮罩 ===== */
.onboarding-overlay {
  position: fixed; inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity 0.4s ease;
  pointer-events: none;
}
.onboarding-overlay.onboarding-visible {
  opacity: 1;
  pointer-events: auto;
}
.onboarding-overlay.onboarding-exit {
  opacity: 0;
}
.onboarding-backdrop {
  position: absolute; inset: 0;
  background: rgba(0,0,0,0.55);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.onboarding-card {
  position: relative;
  background: #fff;
  border-radius: 24px;
  width: 320px;
  max-width: 85vw;
  padding: 32px 28px 24px;
  text-align: center;
  box-shadow: 0 24px 80px rgba(0,0,0,0.25);
  transform: translateY(20px) scale(0.96);
  transition: transform 0.4s cubic-bezier(0.34,1.56,0.64,1);
}
.onboarding-visible .onboarding-card {
  transform: translateY(0) scale(1);
}
.onboarding-slide {
  min-height: 180px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.onboarding-icon {
  font-size: 56px;
  line-height: 1;
  margin-bottom: 20px;
}
.onboarding-title {
  font-size: 20px;
  font-weight: 800;
  color: var(--fg, #222);
  margin: 0 0 12px;
  letter-spacing: -0.01em;
}
.onboarding-desc {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted, #666);
  line-height: 1.6;
  margin: 0;
  max-width: 260px;
}
.onboarding-dots {
  display: flex;
  justify-content: center;
  gap: 8px;
  margin: 24px 0;
}
.onboarding-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--border, #ddd);
  transition: all 0.3s ease;
}
.onboarding-dot.active {
  width: 20px;
  border-radius: 4px;
  background: var(--accent, #FF5E5E);
}
.onboarding-actions {
  display: flex;
  gap: 12px;
  justify-content: center;
}
.onboarding-skip {
  flex: 1;
  padding: 12px;
  border: none;
  border-radius: 12px;
  background: var(--bg-highlight, #f5f5f5);
  color: var(--muted, #888);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.2s;
}
.onboarding-skip:hover { background: #eee; }
.onboarding-next {
  flex: 2;
  padding: 12px;
  border: none;
  border-radius: 12px;
  background: var(--accent, #FF5E5E);
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  transition: opacity 0.2s, transform 0.15s;
}
.onboarding-next:hover { opacity: 0.9; }
.onboarding-next:active { transform: scale(0.97); }

/* ===== feat/user-settings-page: 个人设置页样式（复用 V5 设计系统） ===== */
.settings-back-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border-radius: 50%;
}
.settings-field {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  padding: 11px 16px;
  border-bottom: 1px solid var(--border-subtle);
}
.settings-field:last-child { border-bottom: none; }
.settings-field:has(.settings-field-textarea) {
  flex-direction: column;
  align-items: stretch;
  gap: var(--space-xs);
}
.settings-field-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  flex-shrink: 0;
  min-width: 64px;
}
.settings-field:has(.settings-field-textarea) .settings-field-label {
  margin-bottom: 2px;
}
.settings-field-input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-size: 14px;
  font-family: inherit;
  color: var(--text-primary);
  padding: 6px 10px;
  text-align: right;
  min-width: 0;
  border-radius: var(--radius-sm);
  background: var(--bg-surface);
  border: 1px solid var(--border-subtle);
  transition: border-color 0.2s;
}
.settings-field-input:focus {
  border-color: var(--accent);
  background: var(--bg-highlight);
}
/* feat/audit-avatar-upload: 用 <img> 渲染 data URL 头像（避免 background-image url() 解析失败）*/
.settings-avatar-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
}
.settings-field-input::placeholder {
  color: var(--text-muted);
  font-weight: 500;
}
.settings-field-input:focus {
  color: var(--text-primary);
}
.settings-field:has(.settings-field-textarea) .settings-field-input {
  text-align: left;
  padding: 8px 10px;
}
.settings-field-textarea {
  resize: none;
  min-height: 56px;
  line-height: 1.5;
}
.settings-char-count {
  text-align: right;
  font-size: 10px;
  color: var(--text-muted);
  font-weight: 600;
  margin-top: 4px;
}
.settings-gender-row {
  display: flex;
  gap: var(--space-lg);
  flex: 1;
  justify-content: flex-end;
}
.settings-gender-item {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  color: var(--text-secondary);
  cursor: pointer;
  font-weight: 600;
}
.settings-gender-item:has(input:checked) {
  color: var(--accent);
}
.settings-gender-item input[type="radio"] {
  cursor: pointer;
  accent-color: var(--accent);
  margin: 0;
}
.settings-toast {
  position: fixed;
  bottom: 80px;
  left: 50%;
  transform: translateX(-50%) translateY(20px);
  background: rgba(34, 32, 28, 0.92);
  color: var(--text-white);
  padding: 10px 18px;
  border-radius: var(--radius-full);
  font-size: 13px;
  font-weight: 600;
  z-index: 1000;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s, transform 0.25s;
  max-width: 80vw;
  text-align: center;
  box-shadow: var(--shadow-card);
}
.settings-toast-show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}
.settings-toast-error {
  background: rgba(217, 59, 59, 0.95);
}
.settings-toast-success {
  background: rgba(76, 153, 76, 0.95);
}

/* ==================== vip-flow-stitch-20260812 VIP 横幅 ==================== */
.vip-promo-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 8px 12px;
  padding: 10px 12px;
  background: linear-gradient(135deg, rgba(255, 230, 180, 0.5), rgba(255, 200, 150, 0.3));
  border: 1px solid var(--border-subtle, #EDE9E3);
  border-radius: 12px;
  font-size: 13px;
  color: var(--text, #333);
}
.vip-promo-banner-inner {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
}
.vip-promo-icon {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--accent, #FF5E5E);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.vip-promo-icon i { width: 16px; height: 16px; }
.vip-promo-text {
  flex: 1;
  line-height: 1.4;
  font-weight: 500;
}
.vip-promo-cta {
  background: var(--accent, #FF5E5E);
  color: #fff;
  border: none;
  border-radius: 16px;
  padding: 5px 12px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  flex-shrink: 0;
}
.vip-promo-cta:active { opacity: 0.85; }
.vip-promo-close {
  background: transparent;
  border: none;
  color: var(--muted, #999);
  cursor: pointer;
  padding: 4px 6px;
  font-size: 11px;
  flex-shrink: 0;
}

/* issue-20260816-028: 全站头像角标统一样式
   - 全部固定右下角（一致视觉位置）
   - 缩小50%（整体 transform: scale(0.5) 保持文字清晰可读）
   - 文字统一：中文 官方/商家/VIP，英文 Official/Merchant/VIP */
.user-badge-official,
.profile-merchant-badge,
.vip-badge-avatar {
  position: absolute;
  bottom: 0;
  right: 0;
  border-radius: 999px;
  padding: 3px 10px;
  font-size: 10px;
  font-weight: 800;
  line-height: 1.4;
  letter-spacing: 0.3px;
  border: 1.5px solid var(--bg-page, #fff);
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
  z-index: 3;
  white-space: nowrap;
  transform: scale(0.5);
  transform-origin: bottom right;
}

/* 官方：金底，文字 官方 / Official */
.user-badge-official {
  background: linear-gradient(135deg, #f6d365, #fda085);
  color: #fff;
}

/* 商家：橙底，文字 商家 / Merchant */
.profile-merchant-badge {
  background: var(--orange, #f97316);
  color: #fff;
}

/* VIP：红底，文字 VIP */
.vip-badge-avatar {
  background: var(--accent, #FF5E5E);
  color: #fff;
}

/* 兼容：保留旧 lucide i/svg 样式规则（适配旧代码残留） */
.profile-merchant-badge svg,
.vip-badge-avatar i { width: 8px; height: 8px; }
.profile-merchant-badge span,
.vip-badge-avatar span,
.user-badge-official span { letter-spacing: 0.2px; }

/* issue-20260816-022: 小尺寸头像（20-28px）迷你徽章 — 仅图标，无文字、无白边 */
.user-badge-official.is-mini,
.profile-merchant-badge.is-mini,
.vip-badge-avatar.is-mini {
  width: 16px;
  height: 16px;
  min-width: 16px;
  padding: 0;
  border: 1.5px solid var(--bg-page, #fff);
  font-size: 0;
  letter-spacing: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  box-shadow: 0 1px 2px rgba(0,0,0,0.18);
}
.user-badge-official.is-mini,
.vip-badge-avatar.is-mini,
.profile-merchant-badge.is-mini {
  bottom: 0;
  right: 0;
  left: auto;
  top: auto;
  transform: scale(0.5);
  transform-origin: bottom right;
}
.user-badge-official.is-mini svg,
.profile-merchant-badge.is-mini svg,
.vip-badge-avatar.is-mini svg {
  width: 8px;
  height: 8px;
}
.profile-merchant-badge.is-mini span,
.vip-badge-avatar.is-mini span,
.user-badge-official.is-mini span {
  display: none;
}

/* VIP-only 活动标签 */
.detail-vip-only-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 10px;
  background: linear-gradient(135deg, rgba(255, 230, 180, 0.6), rgba(255, 200, 150, 0.4));
  color: var(--accent, #FF5E5E);
  font-size: 11px;
  font-weight: 700;
  border: 1px solid var(--accent, #FF5E5E);
}
.detail-vip-only-tag i { width: 12px; height: 12px; }

/* 续费按钮态 */
.vip-center-renew-cta {
  background: var(--cyan, #06b6d4) !important;
}
