/* 跨页过渡只在桌面宽屏启用。移动端(尤其安卓 App WebView)上, view-transition 会在
   新页加载完成前把旧页冻结成快照 → 点 tab 半天不动的"卡"感; 移动端直接秒切更跟手。
   不支持的浏览器本就忽略。 */
@media (min-width: 900px) {
  @view-transition { navigation: auto; }
  ::view-transition-old(root) { animation-duration: 0.2s; }
  ::view-transition-new(root) { animation-duration: 0.2s; }
}

/* ============================================================================
   千羽宗 · 仙侠风样式
   配色:
     墨色   #0a0a14  深底
     夜墨   #14141f  卡片
     霜露   #1a1a28  hover
     边羽   #2a2a3a  分隔线
     霞光金 #d4af6a  主强调(标题/品牌)
     月白   #e8e0c8  正文
     凡尘   #8a8270  次要文字
     朱砂   #c44a3a  警示/强调
     青露   #6ab0a0  成功
============================================================================ */
:root {
  --bg: #0a0a14;
  --bg-deep: #050510;
  --card: #14141f;
  --card-hover: #1a1a28;
  --border: #2a2a3a;
  --border-strong: #3a3a4a;
  --gold: #d4af6a;
  --gold-soft: #b89456;
  --gold-deep: #8a7654;
  --moon: #e8e0c8;
  --dust: #8a8270;
  --dust-soft: #5a5040;
  --vermilion: #c44a3a;
  --jade: #6ab0a0;
  --shadow: 0 2px 24px rgba(0,0,0,0.6);
  --shadow-glow: 0 0 32px rgba(212,175,106,0.15);
  /* 美化 v2: 统一圆角 + 层次阴影 + 聚焦环 */
  --radius: 10px;
  --radius-sm: 6px;
  --radius-xs: 4px;
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.4);
  --shadow-md: 0 8px 28px rgba(0,0,0,0.42);
  --shadow-lg: 0 22px 60px rgba(0,0,0,0.5);
  --hairline: rgba(212,175,106,0.10);   /* 卡片顶部高光发丝线 */
  --serif: 'Cinzel', 'Noto Serif SC', 'STSong', 'SimSun', serif;
  --sans: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
  /* 主题相关的派生色 (深色默认) */
  --body-grad-1: rgba(212,175,106,0.04);
  --body-grad-2: rgba(106,176,160,0.03);
  --nav-bg: rgba(10,10,20,0.82);
  --overlay-mask: rgba(0,0,0,0.6);
}

/* ==================== 浅色主题 · 宣纸水墨风 ==================== */
:root[data-theme="light"] {
  --bg: #f2ece0;          /* 宣纸米白 */
  --bg-deep: #e8e0d0;
  --card: #faf6ec;        /* 略白的纸 */
  --card-hover: #f3ecda;
  --border: #ddd0b8;      /* 淡墨边 */
  --border-strong: #c9b896;
  --gold: #9c7a28;        /* 浅底上金色加深才清晰 */
  --gold-soft: #b08c3a;
  --gold-deep: #c9b896;
  --moon: #2c2418;        /* 墨色正文 */
  --dust: #7a6f55;        /* 次要文字 */
  --dust-soft: #a89a7a;
  --vermilion: #b83a28;   /* 朱砂 */
  --jade: #3d8a72;        /* 青 */
  --shadow: 0 2px 20px rgba(120,100,60,0.14);
  --shadow-glow: 0 0 28px rgba(156,122,40,0.12);
  --shadow-sm: 0 1px 2px rgba(120,100,60,0.12);
  --shadow-md: 0 8px 26px rgba(120,100,60,0.16);
  --shadow-lg: 0 22px 54px rgba(120,100,60,0.2);
  --hairline: rgba(156,122,40,0.14);
  --body-grad-1: rgba(156,122,40,0.05);
  --body-grad-2: rgba(61,138,114,0.04);
  --nav-bg: rgba(242,236,224,0.86);
  --overlay-mask: rgba(60,48,30,0.4);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  background: var(--bg);
  color: var(--moon);
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.7;
  min-height: 100%;
  -webkit-font-smoothing: antialiased;
}

/* 背景: 微弱星辰 + 远山 + 流光 */
body {
  background:
    radial-gradient(ellipse at top, var(--body-grad-1) 0%, transparent 50%),
    radial-gradient(ellipse at bottom, var(--body-grad-2) 0%, transparent 60%),
    var(--bg);
  background-attachment: fixed;
  position: relative;
}
/* 宣纸/墨色质感: 极淡噪点 */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0.4;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");
}
body > * { position: relative; z-index: 1; }

/* 主题切换柔和过渡 (排除高频动画元素) */
:root[data-theme] body, :root[data-theme] body * {
  transition: background-color 0.35s ease, color 0.35s ease, border-color 0.35s ease;
}
@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; }
}

/* ============================================================================
   导航栏
============================================================================ */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--nav-bg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--border);
  padding-top: env(safe-area-inset-top);   /* 主屏 app 模式: nav 内容避开状态栏(桌面/普通浏览器 env=0 无影响) */
}
.nav-inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 16px 24px;
  display: flex;
  align-items: center;
  gap: 32px;
}
.brand {
  display: flex;
  align-items: center;
  gap: 12px;
  text-decoration: none;
  color: var(--gold);
}
.brand-mark {
  width: 32px; height: 32px;
  display: flex; align-items: center; justify-content: center;
}
.brand-text {
  font-family: var(--serif);
  font-size: 18px;
  letter-spacing: 0.5em;
  font-weight: 400;
  padding-left: 0.5em;  /* compensate for letter-spacing */
}
.nav-links {
  display: flex;
  gap: 28px;
  list-style: none;
  flex: 1;
}
.nav-link {
  color: var(--moon);
  text-decoration: none;
  font-size: 14px;
  position: relative;
  padding: 4px 0;
  letter-spacing: 0.1em;
  opacity: 0.85;
  white-space: nowrap;            /* 防止窄屏时汉字竖排换行 */
  transition: opacity 0.2s, color 0.2s;
}
.nav-link:hover, .nav-link.active {
  color: var(--gold);
  opacity: 1;
}
.nav-link::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: -6px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
  opacity: 0;
  transform: scaleX(0.4);
  transition: opacity 0.25s, transform 0.25s;
}
.nav-link:hover::after { opacity: 0.7; transform: scaleX(1); }
.nav-link.active::after { opacity: 1; transform: scaleX(1); box-shadow: 0 0 6px var(--gold); }
.nav-actions {
  display: flex;
  gap: 12px;
  align-items: center;
  margin-left: auto;   /* 链接收进汉堡(721-900)后, 操作区仍靠右, 不留中间空荡 */
}

/* ============================================================================
   按钮
============================================================================ */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 10px 22px;
  border: 1px solid var(--border-strong);
  background: transparent;
  color: var(--moon);
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: 0.1em;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.25s ease;
  border-radius: 2px;
  position: relative;
  overflow: hidden;
}
.btn:hover {
  border-color: var(--gold);
  color: var(--gold);
  background: linear-gradient(180deg, rgba(212,175,106,0.09), rgba(212,175,106,0.03));
}
.btn:active { transform: scale(0.97); }
/* 光泽扫过 */
.btn::after {
  content: '';
  position: absolute;
  top: 0; left: -120%;
  width: 60%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(212,175,106,0.18), transparent);
  transition: left 0.6s ease;
  pointer-events: none;
}
.btn:hover::after { left: 130%; }
.btn-primary {
  border-color: var(--gold-deep);
  background: linear-gradient(180deg, rgba(212,175,106,0.2), rgba(212,175,106,0.08));
  color: var(--gold);
  box-shadow: 0 2px 12px rgba(212,175,106,0.12);
}
.btn-primary:hover {
  border-color: var(--gold);
  background: linear-gradient(180deg, rgba(212,175,106,0.3), rgba(212,175,106,0.15));
  box-shadow: 0 4px 28px rgba(212,175,106,0.3);
}
.btn-ghost {
  border-color: transparent;
  background: transparent;
}
.btn-ghost:hover {
  border-color: var(--border);
  background: var(--card-hover);
}
.btn-sm { padding: 6px 14px; font-size: 13px; }
.btn-lg { padding: 14px 32px; font-size: 15px; }
.btn-block { width: 100%; }
.btn:disabled { opacity: 0.4; cursor: not-allowed; }

/* ============================================================================
   首页 Hero
============================================================================ */
.hero {
  position: relative;
  padding: 120px 24px 100px;
  overflow: hidden;
  text-align: center;
}
.hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse at center top, rgba(212,175,106,0.1) 0%, transparent 50%);
  pointer-events: none;
}
/* 灵气星辰: 极淡光点缓慢浮动 */
.hero::after {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 18% 35%, rgba(212,175,106,0.5) 0.8px, transparent 1.6px),
    radial-gradient(circle at 72% 22%, rgba(212,175,106,0.4) 0.8px, transparent 1.6px),
    radial-gradient(circle at 45% 60%, rgba(106,176,160,0.3) 0.8px, transparent 1.6px),
    radial-gradient(circle at 88% 70%, rgba(212,175,106,0.35) 0.8px, transparent 1.6px),
    radial-gradient(circle at 30% 80%, rgba(212,175,106,0.3) 0.8px, transparent 1.6px);
  background-size: 100% 100%;
  animation: hero-stars 9s ease-in-out infinite;
  pointer-events: none;
}
@keyframes hero-stars {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 0.85; }
}
.hero-inner { position: relative; z-index: 1; max-width: 920px; margin: 0 auto; }
.hero-title {
  font-family: var(--serif);
  font-size: clamp(48px, 9vw, 96px);
  font-weight: 300;
  letter-spacing: 0.4em;
  color: var(--gold);
  margin-bottom: 24px;
  padding-left: 0.4em;
  text-shadow: 0 0 40px rgba(212,175,106,0.4), 0 0 80px rgba(212,175,106,0.18);
  line-height: 1.1;
  animation: glow-pulse 4.5s ease-in-out infinite, fade-up 0.9s ease-out 0.1s both;
}
@keyframes glow-pulse {
  0%, 100% { text-shadow: 0 0 40px rgba(212,175,106,0.4), 0 0 80px rgba(212,175,106,0.18); }
  50% { text-shadow: 0 0 52px rgba(212,175,106,0.55), 0 0 104px rgba(212,175,106,0.3); }
}
@keyframes fade-up {
  from { opacity: 0; transform: translateY(24px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero-sub {
  font-family: var(--serif);
  font-size: clamp(13px, 2vw, 16px);
  letter-spacing: 0.6em;
  color: var(--gold-soft);
  margin-bottom: 48px;
  opacity: 0.7;
  padding-left: 0.6em;
  animation: fade-up 0.9s ease-out 0.25s both;
}
.hero-tagline {
  font-size: 17px;
  color: var(--moon);
  margin-bottom: 56px;
  line-height: 2;
  opacity: 0.9;
  letter-spacing: 0.05em;
  animation: fade-up 0.9s ease-out 0.4s both;
}
.hero-tagline strong { color: var(--gold); font-weight: 500; }
.hero-actions {
  display: flex;
  gap: 16px;
  justify-content: center;
  flex-wrap: wrap;
  animation: fade-up 0.9s ease-out 0.55s both;
}

/* 分隔标记: 八卦/羽毛 */
.divider {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 80px auto 60px;
  max-width: 600px;
  color: var(--gold-deep);
  opacity: 0.5;
}
.divider::before, .divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, var(--gold-deep) 35%, var(--gold-soft) 50%, var(--gold-deep) 65%, transparent 100%);
  filter: drop-shadow(0 0 4px rgba(212,175,106,0.15));
}
.divider-mark {
  margin: 0 24px;
  font-size: 20px;
  letter-spacing: 0.3em;
  font-family: var(--serif);
  text-shadow: 0 0 16px rgba(212,175,106,0.25);
}

/* ============================================================================
   Section
============================================================================ */
.section {
  max-width: 1280px;
  margin: 0 auto;
  padding: 80px 24px;
}
.section-head {
  text-align: center;
  margin-bottom: 56px;
}
.section-title {
  font-family: var(--serif);
  font-size: clamp(28px, 4vw, 40px);
  letter-spacing: 0.3em;
  color: var(--gold);
  font-weight: 300;
  padding-left: 0.3em;
}
.section-sub {
  margin-top: 12px;
  font-size: 14px;
  letter-spacing: 0.2em;
  color: var(--dust);
}

/* ============================================================================
   三大殿堂卡片
============================================================================ */
.halls {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
}
.hall {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 4px;
  padding: 40px 32px;
  text-decoration: none;
  color: inherit;
  transition: transform 0.3s cubic-bezier(0.2,0.7,0.3,1), border-color 0.3s, box-shadow 0.3s, background 0.3s;
  position: relative;
  overflow: hidden;
  text-align: center;
}
.hall::before {
  content: '';
  position: absolute;
  top: 0; left: 50%;
  width: 0; height: 1px;
  background: var(--gold);
  transition: all 0.4s ease;
  transform: translateX(-50%);
}
/* 右上角印章式角线 */
.hall::after {
  content: '';
  position: absolute;
  top: 10px; right: 10px;
  width: 16px; height: 16px;
  border-top: 1.5px solid var(--gold-deep);
  border-right: 1.5px solid var(--gold-deep);
  opacity: 0.3;
  transition: opacity 0.3s, top 0.3s, right 0.3s;
}
.hall:hover {
  border-color: var(--gold-deep);
  background: var(--card-hover);
  transform: translateY(-6px);
  box-shadow: 0 14px 36px rgba(212,175,106,0.14), inset 0 1px 0 rgba(212,175,106,0.08);
}
.hall:hover::before { width: 80%; box-shadow: 0 0 12px var(--gold); }
.hall:hover::after { opacity: 0.7; top: 8px; right: 8px; }
.hall-icon {
  font-size: 40px;
  margin-bottom: 20px;
  filter: drop-shadow(0 0 12px rgba(212,175,106,0.3));
  transition: transform 0.3s;
}
.hall:hover .hall-icon { transform: scale(1.08) translateY(-2px); }
.hall-title {
  font-family: var(--serif);
  font-size: 22px;
  letter-spacing: 0.4em;
  color: var(--gold);
  margin-bottom: 12px;
  padding-left: 0.4em;
}
.hall-en {
  font-size: 11px;
  letter-spacing: 0.3em;
  color: var(--dust-soft);
  margin-bottom: 20px;
  font-family: var(--serif);
}
.hall-desc {
  color: var(--moon);
  opacity: 0.75;
  font-size: 14px;
  line-height: 1.8;
}

/* ============================================================================
   工具卡片
============================================================================ */
.tools-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 20px;
}
.tool-card {
  background: var(--card);
  border: 1px solid var(--border);
  padding: 24px;
  text-decoration: none;
  color: inherit;
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: all 0.25s ease;
  position: relative;
}
.tool-card:hover {
  border-color: var(--gold-deep);
  background: var(--card-hover);
  transform: translateY(-1px);
}
.tool-card.locked { opacity: 0.55; }
.tool-card.locked:hover { transform: none; }
.tool-card-head {
  display: flex;
  align-items: center;
  gap: 12px;
}
.tool-icon { font-size: 28px; }
.tool-name {
  font-family: var(--serif);
  font-size: 16px;
  letter-spacing: 0.15em;
  color: var(--gold);
}
.tool-tagline {
  color: var(--moon);
  opacity: 0.7;
  font-size: 13px;
  line-height: 1.6;
}
.tool-card-foot {
  margin-top: auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 11px;
  color: var(--dust);
  letter-spacing: 0.1em;
  padding-top: 12px;
  border-top: 1px dashed var(--border);
}
.tier-badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border: 1px solid var(--gold-deep);
  color: var(--gold-soft);
  font-size: 10px;
  letter-spacing: 0.2em;
  border-radius: 1px;
}
.tier-badge.locked {
  border-color: var(--vermilion);
  color: var(--vermilion);
}

/* ============================================================================
   表单 (登录 / 注册 / 设置)
============================================================================ */
.form-card {
  max-width: 440px;
  margin: 80px auto;
  padding: 48px 40px;
  background: var(--card);
  border: 1px solid var(--border);
  position: relative;
}
.form-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
}
.form-title {
  text-align: center;
  font-family: var(--serif);
  font-size: 26px;
  letter-spacing: 0.5em;
  color: var(--gold);
  margin-bottom: 8px;
  padding-left: 0.5em;
}
.form-sub {
  text-align: center;
  font-size: 12px;
  letter-spacing: 0.3em;
  color: var(--dust);
  margin-bottom: 36px;
}
.form-group { margin-bottom: 20px; }
.form-label {
  display: block;
  font-size: 13px;
  color: var(--dust);
  letter-spacing: 0.1em;
  margin-bottom: 8px;
}
.form-input {
  width: 100%;
  padding: 12px 14px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--moon);
  font-family: var(--sans);
  font-size: 14px;
  border-radius: 3px;
  transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;
}
.form-input:focus {
  outline: none;
  border-color: var(--gold);
  background: var(--bg-deep);
  box-shadow: 0 0 0 1px var(--gold-deep), 0 0 14px rgba(212,175,106,0.22);
}
.form-input::placeholder { color: var(--dust); opacity: 0.6; }
.form-row { display: flex; gap: 10px; }
.form-row .form-input { flex: 1; }
.form-hint { font-size: 12px; color: var(--dust); margin-top: 6px; letter-spacing: 0.05em; }
.form-error {
  color: var(--vermilion);
  font-size: 13px;
  margin-bottom: 16px;
  padding: 10px 14px;
  background: rgba(196,74,58,0.08);
  border-left: 2px solid var(--vermilion);
}
.form-success {
  color: var(--jade);
  font-size: 13px;
  margin-bottom: 16px;
  padding: 10px 14px;
  background: rgba(106,176,160,0.08);
  border-left: 2px solid var(--jade);
}
.form-divider {
  display: flex;
  align-items: center;
  margin: 24px 0;
  font-size: 12px;
  color: var(--dust-soft);
  letter-spacing: 0.2em;
}
.form-divider::before, .form-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--border);
}
.form-divider span { padding: 0 16px; }
.form-foot {
  margin-top: 28px;
  text-align: center;
  font-size: 13px;
  color: var(--dust);
}
.form-foot a { color: var(--gold-soft); text-decoration: none; }
.form-foot a:hover { color: var(--gold); }

/* OAuth 第三方按钮 */
.oauth-row { display: flex; gap: 10px; }
.oauth-btn {
  flex: 1;
  padding: 10px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--moon);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-size: 13px;
  text-decoration: none;
  transition: all 0.2s;
}
.oauth-btn:hover { border-color: var(--gold-deep); color: var(--gold); }

/* ============================================================================
   公告
============================================================================ */
.notice-list { display: flex; flex-direction: column; gap: 16px; }
.notice {
  padding: 20px 24px;
  background: var(--card);
  border: 1px solid var(--border);
  border-left: 2px solid var(--gold-deep);
}
.notice.pinned { border-left-color: var(--vermilion); }
.notice-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}
.notice-title {
  font-family: var(--serif);
  color: var(--gold);
  font-size: 16px;
  letter-spacing: 0.15em;
}
.notice-date { font-size: 12px; color: var(--dust); }
.notice-body { color: var(--moon); opacity: 0.85; font-size: 14px; }

/* ============================================================================
   Footer
============================================================================ */
footer {
  margin-top: 120px;
  padding: 48px 24px;
  border-top: 1px solid var(--border);
  text-align: center;
  color: var(--dust);
  font-size: 12px;
  letter-spacing: 0.2em;
}
footer .brand-text { font-size: 14px; opacity: 0.7; }

/* ============================================================================
   小工具
============================================================================ */
.text-gold { color: var(--gold); }
.text-dust { color: var(--dust); }
.text-center { text-align: center; }
.spacer-32 { height: 32px; }
.spacer-64 { height: 64px; }
.hidden { display: none !important; }

/* 标签 chip */
.chip {
  display: inline-flex;
  align-items: center;
  padding: 4px 12px;
  font-size: 11px;
  letter-spacing: 0.15em;
  border: 1px solid var(--border-strong);
  color: var(--dust);
  border-radius: 1px;
  margin-right: 6px;
  line-height: 1.4;
}
/* 触摸目标 — 当 chip 作为按钮用时(button.chip) */
button.chip { min-height: 36px; padding: 6px 14px; }
@media (max-width: 720px) {
  button.chip { min-height: 40px; padding: 8px 16px; font-size: 12px; }
}

/* Toast */
.toast {
  position: fixed;
  top: 24px;
  right: 24px;
  z-index: 100;
  padding: 14px 20px;
  background: var(--card);
  border: 1px solid var(--border-strong);
  border-left: 3px solid var(--gold);
  color: var(--moon);
  font-size: 13px;
  box-shadow: var(--shadow);
  animation: slidein 0.3s ease;
  max-width: 360px;
}
.toast.error { border-left-color: var(--vermilion); }
.toast.success { border-left-color: var(--jade); }
@keyframes slidein {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}

/* 汉堡菜单 */
.nav-burger {
  display: none;
  background: transparent;
  border: 1px solid var(--border);
  width: 36px;
  height: 36px;
  cursor: pointer;
  padding: 0;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  border-radius: 2px;
}
.nav-burger span {
  display: block;
  width: 18px;
  height: 1px;
  background: var(--gold);
  transition: all 0.25s ease;
}
.nav-burger.open span:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.nav-burger.open span:nth-child(2) { opacity: 0; }
.nav-burger.open span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
/* 中等宽度(721-900px): 7 个链接挤不下会汉字竖排 → 收进汉堡菜单(≤720 再交给底部 tab) */
@media (max-width: 900px) {
  .nav-links { display: none; }
  .nav-burger { display: flex; }
}
.nav-drawer {
  display: none;
  position: absolute;          /* 浮层下拉: 不撑高 sticky nav, 且 z-index 随 nav(50) 盖住 chat-shell(30) */
  top: 100%; left: 0; right: 0;
  flex-direction: column;
  background: var(--bg-deep);
  border-bottom: 1px solid var(--border);
  box-shadow: var(--shadow-md);
  padding: 8px 0;
  max-height: 80vh;
  overflow-y: auto;
}
.nav-drawer.open { display: flex; }
.nav-drawer .nav-link {
  padding: 14px 24px;
  border-bottom: 1px solid var(--border);
  letter-spacing: 0.2em;
}
.nav-drawer .nav-link:last-child { border-bottom: none; }

body.no-scroll { overflow: hidden; }

/* ============================================================================
   议事厅(聊天)
============================================================================ */
.chat-shell {
  display: grid;
  grid-template-columns: 240px 1fr 220px;
  gap: 1px;
  background: var(--border);
  height: calc(100vh - 65px);
  max-width: 1480px;
  margin: 0 auto;
  border-bottom: 1px solid var(--border);
}
.chat-aside {
  background: var(--bg);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.chat-aside-head {
  padding: 18px 16px 12px;
  font-family: var(--serif);
  color: var(--gold);
  letter-spacing: 0.22em;
  padding-left: calc(16px + 0.22em);
  font-size: 13px;
  border-bottom: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
}
.chat-aside-body {
  flex: 1;
  overflow-y: auto;
  padding: 8px 0;
}

/* 频道项 */
.ch-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 16px;
  cursor: pointer;
  border-left: 2px solid transparent;
  color: var(--moon);
  font-size: 13px;
  letter-spacing: 0.1em;
  transition: background 0.15s;
}
.ch-item:hover { background: var(--card); }
.ch-item.active {
  background: var(--card-hover);
  border-left-color: var(--gold);
  color: var(--gold);
}
.ch-item.locked { opacity: 0.4; cursor: not-allowed; }
.ch-icon { width: 22px; text-align: center; opacity: 0.7; }
.ch-name { flex: 1; }
.ch-badge {
  background: var(--vermilion);
  color: var(--moon);
  font-size: 10px;
  padding: 1px 7px;
  border-radius: 9px;
  font-family: monospace;
  min-width: 18px;
  text-align: center;
}
.ch-mention {
  color: var(--vermilion); font-size: 11px; font-weight: 600;
  flex-shrink: 0; white-space: nowrap; letter-spacing: 0.02em;
}
/* 被 @ 的整条消息: 左侧朱红标 + 淡底, 一眼看到 */
.msg.at-me .msg-body { background: rgba(196,74,58,0.06); border-radius: 8px; padding: 4px 8px; box-shadow: inset 3px 0 0 var(--vermilion); }

/* 主区 */
.chat-main {
  background: var(--bg-deep);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  position: relative;
}
.chat-header {
  padding: 7px 16px;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--bg);
}
.chat-title {
  font-family: var(--serif);
  font-size: 16px;
  letter-spacing: 0.22em;
  padding-left: 0.22em;   /* 抵消 letter-spacing 让首字不偏 */
  color: var(--gold);
  white-space: nowrap;    /* 标题不换行(妖币信号视图头部拥挤时曾被挤断行) */
  overflow: hidden;
  text-overflow: ellipsis;
}
.chat-desc { display: none; }   /* 去掉殿名下描述行, 顶栏更窄 */
.chat-online-count { color: var(--jade); font-size: 12px; white-space: nowrap; }
.chat-backdrop { display: none; }   /* 仅移动端抽屉打开时显示(见 @media) */

.chat-pinned {
  padding: 10px 22px;
  background: rgba(212,175,106,0.06);
  border-bottom: 1px solid var(--border);
  font-size: 12px;
  color: var(--moon);
  display: flex;
  align-items: center;
  gap: 8px;
}
.chat-pinned::before { content: '📌'; }

.chat-messages {
  flex: 1;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;   /* 到顶/到底不把滚动传给外层 → 翻记录时顶部不跟着动 */
  padding: 16px 22px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.chat-messages::-webkit-scrollbar { width: 8px; }
.chat-messages::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 4px; }
.chat-messages::-webkit-scrollbar-track { background: transparent; }

.msg {
  display: flex;
  gap: 12px;
  padding: 4px 0;
  position: relative;
}
.msg-avatar {
  width: 34px; height: 34px; flex-shrink: 0;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--card-hover), var(--bg));
  border: 1px solid var(--border-strong);
  display: flex; align-items: center; justify-content: center;
  font-size: 14px; color: var(--gold);
  font-family: var(--serif);
}
.msg-avatar.t-1 { border-color: var(--gold-soft); }
.msg-avatar.t-2 { border-color: var(--gold); box-shadow: 0 0 10px rgba(212,175,106,0.2); }
.msg-avatar.t-99 { border-color: var(--vermilion); }
.msg-avatar.t-3 { border-color: var(--jade); box-shadow: 0 0 10px rgba(106,176,160,0.25); }   /* 峰主 */
.msg-avatar.t-4 { border-color: #a78bfa; box-shadow: 0 0 10px rgba(167,139,250,0.25); }        /* 长老 */
.msg-avatar.t-5 { border-color: var(--vermilion); }                                            /* 宗主 */
.msg-body { flex: 1; min-width: 0; -webkit-touch-callout: none; }
.msg:not(.system) .msg-text { -webkit-user-select: none; user-select: none; }  /* 长按弹操作条, 不触发系统选字菜单 */
.msg-meta {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 3px;
}
.msg-name {
  color: var(--gold);
  font-size: 13px;
  font-family: var(--serif);
  letter-spacing: 0.1em;
}
.msg-name.t-99 { color: var(--vermilion); }
.msg-name.t-3 { color: var(--jade); }    /* 峰主 */
.msg-name.t-4 { color: #a78bfa; }        /* 长老 */
.msg-name.t-5 { color: var(--vermilion); } /* 宗主 */
.msg-time { color: var(--dust); font-size: 11px; }
.msg-tag {
  font-size: 10px;
  padding: 1px 6px;
  border: 1px solid var(--border-strong);
  color: var(--dust);
  border-radius: 1px;
  max-width: 110px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex-shrink: 0;
}
.msg-tag.t-0 { color: var(--dust); border-color: var(--border-strong); }
.msg-tag.t-1 { color: var(--gold-soft); border-color: var(--gold-soft); }
.msg-tag.t-2 { color: var(--gold); border-color: var(--gold); }
.msg-tag.t-99 { color: var(--vermilion); border-color: var(--vermilion); }
.msg-tag.t-3 { color: var(--jade); border-color: var(--jade); }      /* 峰主 */
.msg-tag.t-4 { color: #a78bfa; border-color: #a78bfa; }              /* 长老 */
.msg-tag.t-5 { color: var(--vermilion); border-color: var(--vermilion); } /* 宗主 */
.msg-text {
  color: var(--moon);
  font-size: 14px;
  line-height: 1.65;
  word-break: break-word;
  white-space: pre-wrap;
}
.msg-text .mention {
  background: rgba(212,175,106,0.15);
  color: var(--gold);
  padding: 1px 4px;
  border-radius: 2px;
}
.msg-text .mention.me {
  background: rgba(196,74,58,0.18);
  color: var(--vermilion);
  font-weight: 500;
}
.msg-image {
  max-width: 320px;
  max-height: 240px;
  border-radius: 4px;
  margin-top: 6px;
  cursor: pointer;
  border: 1px solid var(--border);
  /* 禁掉安卓 WebView 图片原生长按(拖拽/保存菜单), 否则会 touchcancel 掉我们的长按操作条 */
  -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; -webkit-user-drag: none;
}
/* 表情包: 单击放大, 长按出操作条收藏 */
.msg-sticker {
  width: 110px; height: 110px; object-fit: contain;
  margin-top: 6px; border-radius: 8px; cursor: pointer;
  -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; -webkit-user-drag: none;
}
.msg-reply {
  border-left: 2px solid var(--gold-deep);
  padding: 6px 10px;
  background: var(--card);
  font-size: 12px;
  color: var(--dust);
  margin-bottom: 6px;
  border-radius: 2px;
  cursor: pointer;
}
.msg-reply-name { color: var(--gold-soft); font-family: var(--serif); }
.msg-actions {
  position: absolute;
  right: 0; top: 4px;
  display: none;
  gap: 4px;
  background: var(--card);
  border: 1px solid var(--border-strong);
  border-radius: 4px;
  padding: 2px;
}
@media (hover: hover) { .msg:hover .msg-actions { display: flex; } }  /* 仅真能悬停的设备(桌面); 触屏轻点会误触发 :hover, 故排除 */
.msg-act-btn {
  background: transparent;
  border: none;
  color: var(--dust);
  cursor: pointer;
  font-size: 13px;
  padding: 4px 8px;
  border-radius: 2px;
}
.msg-act-btn:hover { color: var(--gold); background: var(--bg); }
.msg-act-btn.danger:hover { color: var(--vermilion); }
/* 移动端: 点击气泡展开操作条 */
.msg.show-actions .msg-actions { display: flex; }
/* 移动端点开时: 操作条不浮盖气泡, 而是换行排到消息下方(正常流) → 再点气泡稳定收起.
   浮盖式会让手指点到按钮被拦截, 收不起来; 换行到下方后气泡区域全程清爽. */
@media (max-width: 900px) {
  .msg.show-actions { flex-wrap: wrap; }
  .msg.show-actions .msg-body { flex-basis: calc(100% - 46px); }   /* 占满首行, 挤操作条换行 */
  .msg.show-actions .msg-actions {
    position: static;
    order: 3;
    align-self: flex-start;
    margin: 8px 0 2px 46px;    /* 46 ≈ 头像 + gap, 缩进对齐气泡左缘 */
    right: auto; top: auto; left: auto;
  }
  .msg.mine.show-actions .msg-actions { margin-left: auto; margin-right: 6px; }
}
/* 被引用跳转时高亮一下 */
.msg.flash { animation: msgFlash 1.2s ease; }
@keyframes msgFlash {
  0% { background: rgba(212,175,106,0.22); }
  100% { background: transparent; }
}
.msg .deleted-text { color: var(--dust); font-style: italic; opacity: 0.7; }

/* 空状态 / 加载更多 */
.chat-empty {
  margin: auto;
  color: var(--dust);
  font-size: 13px;
  letter-spacing: 0.2em;
}
.chat-loadmore {
  text-align: center;
  color: var(--dust);
  font-size: 12px;
  letter-spacing: 0.25em;
  padding: 8px 0;
  opacity: 0.7;
}

/* 置顶条 */
.chat-pinned .pin-text {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  cursor: pointer;
}
.chat-pinned .pin-text b { color: var(--gold-soft); font-family: var(--serif); font-weight: normal; }
.chat-pinned .pin-text:hover { color: var(--gold); }
.chat-pinned .pin-unpin {
  background: transparent; border: none; color: var(--dust);
  cursor: pointer; font-size: 13px; padding: 2px 6px; flex-shrink: 0;
}
.chat-pinned .pin-unpin:hover { color: var(--vermilion); }

/* 在线名单可点击 @ */
.user-row { cursor: pointer; }
.user-row:hover { background: var(--card); }

.msg.system .msg-avatar { display: none; }
.msg.system .msg-text {
  color: var(--dust);
  font-size: 12px;
  text-align: center;
  font-style: italic;
  width: 100%;
}
.msg.deleted .msg-text { color: var(--dust); font-style: italic; }

/* 消息分组: 同人 60s 内连发, 隐藏头像和元信息 */
.msg.compact { padding-top: 0; }
.msg.compact .msg-avatar { visibility: hidden; }
.msg.compact .msg-meta { display: none; }
.msg.compact .msg-text { margin-top: -4px; }

/* 微信风: 文字气泡化 + 自己的消息在右侧(system 系统消息不参与) */
.msg:not(.system) .msg-body { display: flex; flex-direction: column; align-items: flex-start; }
.msg:not(.system) .msg-text {
  background: var(--card);
  border: 1px solid var(--border);
  padding: 7px 12px;
  border-radius: 3px 12px 12px 12px;
  display: inline-block;
  max-width: 100%;
}
.msg.mine { flex-direction: row-reverse; }
.msg.mine .msg-body { align-items: flex-end; }
.msg.mine .msg-meta { flex-direction: row-reverse; }
.msg.mine .msg-text {
  background: linear-gradient(135deg, rgba(212,175,106,0.22), rgba(212,175,106,0.10));
  border-color: var(--gold-deep);
  border-radius: 12px 3px 12px 12px;
}
.msg.mine .msg-reply { align-self: flex-end; }
.msg.mine .msg-image { align-self: flex-end; }
.msg.mine .msg-actions { left: 0; right: auto; }

/* 修为(外部实盘境界, 辟谷=默认) — 跟在身份标签后, meta 行内 */
.msg-realm { font-size: 11px; color: var(--gold-soft); white-space: nowrap; opacity: 0.9; }
.msg-realm:empty { display: none; }   /* 未加载完不占位 */
.msg-realm::before { content: "☯"; margin-right: 1px; opacity: 0.7; }
[data-theme="light"] .msg-realm { color: #9a6f18; opacity: 1; font-weight: 500; }   /* 浅色: 深琥珀, 保证可读 */

/* 滚到底悬浮按钮 */
.scroll-bottom-btn {
  position: absolute;
  right: 24px;
  bottom: 90px;
  background: var(--card);
  border: 1px solid var(--gold-deep);
  color: var(--gold);
  padding: 8px 14px;
  border-radius: 20px;
  cursor: pointer;
  display: none;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  letter-spacing: 0.1em;
  box-shadow: 0 4px 16px rgba(0,0,0,0.5);
  z-index: 10;
}
.scroll-bottom-btn.show { display: flex; }
/* 回到未读: 顶部居中金色胶囊(点击跳到第一条未读) */
.unread-jump { position: absolute; top: 56px; left: 50%; transform: translateX(-50%); background: var(--gold); color: var(--bg); border: none; padding: 7px 16px; border-radius: 20px; cursor: pointer; display: none; align-items: center; gap: 4px; font-size: 12px; letter-spacing: 0.06em; font-family: var(--serif); box-shadow: 0 4px 16px rgba(212,175,106,0.42); z-index: 11; }
.unread-jump.show { display: inline-flex; }
.unread-jump b { font-weight: 600; }
.unread-jump:active { transform: translateX(-50%) scale(0.96); }
.scroll-bottom-btn:hover { background: var(--card-hover); }
.scroll-bottom-btn .num {
  background: var(--vermilion);
  color: var(--moon);
  padding: 1px 7px;
  border-radius: 9px;
  font-size: 11px;
  margin-left: 4px;
  min-width: 18px;
  text-align: center;
}

/* emoji 面板 */
.emoji-panel {
  position: absolute;
  bottom: 70px;
  right: 70px;
  background: var(--card);
  border: 1px solid var(--border-strong);
  border-radius: 4px;
  padding: 12px;
  width: 280px;
  display: none;
  z-index: 20;
  box-shadow: 0 4px 24px rgba(0,0,0,0.6);
}
.emoji-panel.show { display: block; }
.emoji-grid {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 4px;
  max-height: 200px;
  overflow-y: auto;
}
.emoji-grid button {
  background: transparent;
  border: none;
  font-size: 20px;
  padding: 4px;
  cursor: pointer;
  border-radius: 3px;
}
.emoji-grid button:hover { background: var(--card-hover); }
.emoji-panel-label {
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--dust);
  margin: 8px 0 4px;
}

/* day divider */
.day-divider {
  text-align: center;
  color: var(--dust);
  font-size: 11px;
  letter-spacing: 0.2em;
  margin: 18px 0;
  position: relative;
}
.day-divider::before, .day-divider::after {
  content: '';
  position: absolute;
  top: 50%; width: 30%; height: 1px;
  background: var(--border);
}
.day-divider::before { left: 0; }
.day-divider::after { right: 0; }

/* typing indicator */
.chat-typing {
  padding: 0 22px;
  height: 22px;
  color: var(--dust);
  font-size: 12px;
  font-style: italic;
}

/* 输入区 */
.chat-input-wrap {
  border-top: 1px solid var(--border);
  background: var(--bg);
  padding: 12px 22px 16px;
}
.chat-reply-bar {
  display: none;
  padding: 8px 12px;
  background: var(--card);
  border-left: 2px solid var(--gold-deep);
  border-radius: 2px;
  margin-bottom: 8px;
  font-size: 12px;
  color: var(--dust);
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.chat-reply-bar.show { display: flex; }
.chat-reply-bar-close {
  background: transparent; border: none; color: var(--dust);
  cursor: pointer; font-size: 16px; padding: 0 4px;
}
.chat-input {
  display: flex;
  align-items: flex-end;
  gap: 8px;
}
.chat-textarea {
  flex: 1;
  background: var(--bg-deep);
  border: 1px solid var(--border);
  color: var(--moon);
  font-family: var(--sans);
  font-size: 14px;
  padding: 10px 12px;
  border-radius: 4px;
  resize: none;
  min-height: 40px;
  max-height: 120px;
  line-height: 1.5;
}
.chat-textarea:focus { outline: none; border-color: var(--gold-deep); }
.chat-textarea:disabled { opacity: 0.5; cursor: not-allowed; }
.chat-input .btn { padding: 10px 18px; min-height: 40px; }
.chat-icon-btn {
  background: var(--bg-deep);
  border: 1px solid var(--border);
  color: var(--dust);
  width: 40px; height: 40px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 18px;
  display: flex; align-items: center; justify-content: center;
}
.chat-icon-btn:hover { border-color: var(--gold-deep); color: var(--gold); }

/* 在线侧栏 */
.user-row {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 16px;
  font-size: 12.5px;
  color: var(--moon);
  cursor: default;
  letter-spacing: 0.05em;
}
.user-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--jade);
}
.user-name { flex: 1; }
.user-tier { font-size: 10px; color: var(--dust); letter-spacing: 0.15em; }
.user-tier.t-1 { color: var(--gold-soft); }
.user-tier.t-2 { color: var(--gold); }
.user-tier.t-99 { color: var(--vermilion); }
.user-tier.t-3 { color: var(--jade); }    /* 峰主 */
.user-tier.t-4 { color: #a78bfa; }        /* 长老 */
.user-tier.t-5 { color: var(--vermilion); } /* 宗主 */

/* WS 状态指示 */
.ws-status {
  font-size: 10px;
  letter-spacing: 0.2em;
  padding: 2px 8px;
  border-radius: 1px;
}
.ws-status.connected { color: var(--jade); }
.ws-status.connecting { color: var(--gold-soft); }
.ws-status.disconnected { color: var(--vermilion); }

/* 手机端: 折叠为单栏 + 顶部抽屉 */
@media (max-width: 900px) {
  .chat-shell {
    grid-template-columns: 1fr;
    /* 顶部 nav 57 + 底部 tab bar 58 + 安全区, 输入框不被遮 */
    height: calc(100vh - 57px - 58px - env(safe-area-inset-bottom) - env(safe-area-inset-top));
  }
  /* chat 页: 用 fixed 在 nav(61)↔tab bar(58) 间撑开, 不依赖 vh,
     彻底避免输入框被底部 tab bar 遮挡(nav 实际 61px) */
  body.page-chat .chat-shell {
    position: fixed;
    top: calc(61px + env(safe-area-inset-top)); left: 0; right: 0;
    bottom: calc(58px + env(safe-area-inset-bottom));
    height: auto;
  }
  body.page-chat.has-tabbar { padding-bottom: 0; }
  /* 键盘弹出: 输入框贴键盘顶部, 隐藏底部 tab bar(仿微信) */
  body.page-chat.kb-open .chat-shell { bottom: var(--kb, 0px); }
  body.page-chat.kb-open .tabbar { transform: translateY(120%); }
  .tabbar { transition: transform 0.18s ease; }
  .chat-aside.chat-channels {
    position: fixed;
    top: calc(57px + env(safe-area-inset-top)); bottom: calc(58px + env(safe-area-inset-bottom)); left: -280px;
    width: 280px;
    z-index: 30;
    transition: left 0.25s ease;   /* ★ 用 left 位移, 不用 transform。
        iOS 独立 PWA: 对 position:fixed 元素做 transform 动画会污染状态栏(切系统灰褐材质且不还原),
        这就是"开抽屉状态栏变色、关了不回、跳页才复位"的真凶。改 left 即根治。
        border-right 分隔, 不用投影(投影 20px 模糊会糊进状态栏)。 */
    border-right: 1px solid var(--border);
  }
  .chat-aside.chat-channels.open { left: 0; }
  .chat-aside.chat-online { display: none; }
  .chat-aside.chat-online.open {
    display: flex;
    position: fixed;
    top: calc(57px + env(safe-area-inset-top)); bottom: 0; right: 0;
    width: 240px;
    z-index: 30;
    border-left: 1px solid var(--border);
  }
  /* 抽屉遮罩: 在抽屉(z30)之下、聊天内容之上, 点击关闭并挡住背后交互 */
  .chat-backdrop {
    position: fixed;
    top: calc(57px + env(safe-area-inset-top)); left: 0; right: 0;
    bottom: calc(58px + env(safe-area-inset-bottom));
    background: rgba(0,0,0,0.45);
    z-index: 29;
  }
  .chat-backdrop.show { display: block; }
  .chat-mobile-toggle {
    background: transparent;
    border: 1px solid var(--border);
    color: var(--gold);
    padding: 4px 9px;
    border-radius: 2px;
    cursor: pointer;
    font-size: 13px;
    line-height: 1.4;
  }
  .chat-messages { padding: 12px 14px; }
  .chat-input-wrap { padding: 10px 14px 14px; }
  /* 头部拥挤(妖币信号视图: 抽屉钮+标题+通知钮+搜索+铃铛+在线钮): 收紧间距/字距, 让标题一行放下 */
  .chat-header { gap: 7px; padding-left: 12px; padding-right: 12px; }
  .chat-title { letter-spacing: 0.14em; padding-left: 0.14em; }
  .sig-notify-hdr { padding: 4px 9px; }
}
@media (min-width: 901px) {
  .chat-mobile-toggle { display: none; }
}

/* ============================================================================
   移动适配 (≤720)
============================================================================ */
@media (max-width: 720px) {
  html, body { font-size: 14px; }
  .nav-inner { padding: 10px 14px; gap: 12px; }
  .nav-links { display: none; }
  .nav-burger { display: none; } /* 移动端改用底部 tab bar, 不要汉堡 */
  .brand-text { font-size: 15px; letter-spacing: 0.4em; padding-left: 0.4em; }
  .brand-mark { display: none; }   /* H5: 去掉 logo 图标, 只留「千羽宗」三字(PC 保留) */

  /* Hero 收紧 */
  .hero { padding: 56px 16px 48px; }
  .hero-title { letter-spacing: 0.3em; padding-left: 0.3em; }
  .hero-sub { letter-spacing: 0.45em; padding-left: 0.45em; margin-bottom: 32px; }
  .hero-tagline { font-size: 15px; margin-bottom: 36px; line-height: 1.85; }
  .hero-actions { gap: 12px; }
  .hero-actions .btn { flex: 1; min-width: 140px; }

  /* Section/divider */
  .section { padding: 44px 14px; }
  .section-head { margin-bottom: 36px; }
  .section-title { letter-spacing: 0.2em; padding-left: 0.2em; }
  .divider { margin: 56px auto 40px; }
  .divider-mark { margin: 0 14px; font-size: 14px; letter-spacing: 0.2em; }

  /* 三大殿堂 + 工具 + 资料 卡片 */
  .halls, .tools-grid {
    grid-template-columns: 1fr;
    gap: 14px;
  }
  .hall { padding: 28px 22px; }
  .hall-title { font-size: 18px; letter-spacing: 0.3em; padding-left: 0.3em; }
  .hall-icon { font-size: 32px; margin-bottom: 14px; }
  .hall-desc { font-size: 13px; line-height: 1.7; }
  .tool-card { padding: 18px 16px; gap: 10px; }
  .tool-name { font-size: 15px; }
  .tool-tagline { font-size: 12.5px; }

  /* Form card 全屏化 */
  .form-card {
    margin: 24px 12px;
    padding: 28px 20px;
  }
  .form-title { font-size: 22px; letter-spacing: 0.35em; padding-left: 0.35em; }
  .form-sub { font-size: 11px; margin-bottom: 28px; }
  .form-input {
    padding: 14px;
    font-size: 16px; /* 防 iOS 自动放大 */
  }
  .form-row { flex-direction: column; gap: 8px; }
  .form-row .btn { width: 100%; padding: 12px 14px; }
  .btn { padding: 12px 20px; min-height: 44px; /* iOS 触摸目标 */ }
  .btn-sm { padding: 8px 14px; min-height: 36px; }
  .btn-lg { padding: 14px 24px; }
  .oauth-row { flex-direction: column; gap: 8px; }
  .oauth-btn { padding: 12px; }

  /* Notice */
  .notice { padding: 16px 18px; }
  .notice-title { font-size: 15px; }
  .notice-head { flex-direction: column; align-items: flex-start; gap: 4px; }

  /* Admin 表格水平滚 + 缩内边距 */
  .admin-table th, .admin-table td { padding: 10px 12px; font-size: 12px; }
  .admin-table { min-width: 600px; }
  .admin-tab { padding: 10px 14px; font-size: 12px; letter-spacing: 0.15em; }

  /* Toast 移动端贴到底部 */
  .toast {
    top: auto;
    bottom: 16px;
    left: 16px;
    right: 16px;
    max-width: none;
    padding: 12px 16px;
    font-size: 13px;
  }

  /* Footer 收紧 */
  footer { margin-top: 64px; padding: 32px 14px; font-size: 11px; }
}

/* 超窄屏 (≤360) - 老 iPhone SE / 小屏安卓 */
@media (max-width: 360px) {
  .hero-title { font-size: 44px; }
  .form-card { margin: 16px 8px; padding: 24px 16px; }
  .hero-actions { flex-direction: column; }
  .hero-actions .btn { width: 100%; }
}

/* 抽屉只在 721-900px 汉堡区可用; ≤720(底部 tab)和 >900(完整链接)都强制隐藏,
   防止从汉堡区 resize 出去时 .open 残留导致抽屉闪现 */
@media (max-width: 720px), (min-width: 901px) {
  .nav-drawer { display: none !important; }
}

/* 主题切换按钮 */
.theme-toggle { font-size: 15px; line-height: 1; padding: 6px 10px !important; }
/* nav 安装到桌面 按钮 */
.nav-app-btn { display:inline-flex; align-items:center; color:var(--gold-soft) !important; border-color:var(--gold-deep) !important; font-size:12px; letter-spacing:0.04em; text-decoration:none; white-space:nowrap; }
.nav-app-btn:hover { color:var(--gold) !important; }
@media (max-width: 480px) { .nav-app-btn { padding:6px 9px !important; } }

/* ==================== 移动端底部 tab bar ==================== */
.tabbar { display: none; }
@media (max-width: 720px) {
  .tabbar {
    display: flex;
    position: fixed;
    bottom: 0; left: 0; right: 0;
    z-index: 70;
    background: var(--nav-bg);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border-top: 1px solid var(--gold-deep);
    padding-bottom: env(safe-area-inset-bottom); /* iPhone 底部安全区 */
    box-shadow: 0 -2px 16px rgba(0, 0, 0, 0.4);
  }
  .tabbar-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    padding: 8px 2px 7px;
    text-decoration: none;
    color: var(--dust);
    transition: color 0.15s;
    min-width: 0;
  }
  .tabbar-icon { font-size: 19px; line-height: 1; filter: grayscale(0.4) opacity(0.7); transition: filter 0.15s; }
  .tabbar-label { font-size: 10px; letter-spacing: 0.05em; white-space: nowrap; }
  .tabbar-item.active { color: var(--gold); }
  .tabbar-item.active .tabbar-icon { filter: none; }
  .tabbar-item:active { background: rgba(212, 175, 106, 0.08); }

  /* 给底部 tab 留出空间, 防内容被遮 */
  body.has-tabbar { padding-bottom: calc(58px + env(safe-area-inset-bottom)); }
  body.has-tabbar footer { margin-bottom: 0; }
}

/* ============================================================================
   ✦ 全方位美化 v2 — 统一质感 / 大气细节 / 聊天交互打磨
   (置于文件末尾, 同选择器后定义生效; 全部走主题变量, 深浅色通用)
============================================================================ */

/* ---- 全局细节: 滚动条 / 选区 / 聚焦 / 渲染 ---- */
html { scroll-behavior: smooth; }
body { text-rendering: optimizeLegibility; }
* { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
*::-webkit-scrollbar { width: 9px; height: 9px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: linear-gradient(var(--border-strong), var(--gold-deep));
  border-radius: 8px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
*::-webkit-scrollbar-thumb:hover { background: var(--gold-deep); background-clip: padding-box; }
::selection { background: rgba(212,175,106,0.28); color: var(--moon); }
:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; border-radius: var(--radius-xs); }
a, button, input, textarea, select { outline: none; }
img { max-width: 100%; }

/* ---- 标题: 金色竖向渐变(更有金属质感; hero 保留自身辉光不动) ---- */
.section-title, .hall-title, .tool-name, .notice-title, .form-title {
  background: linear-gradient(175deg, var(--moon) -40%, var(--gold) 35%, var(--gold-soft) 110%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
}
:root[data-theme="light"] .section-title,
:root[data-theme="light"] .hall-title,
:root[data-theme="light"] .tool-name,
:root[data-theme="light"] .notice-title,
:root[data-theme="light"] .form-title {
  background: linear-gradient(175deg, var(--gold-soft) -20%, var(--gold) 60%);
  -webkit-background-clip: text; background-clip: text;
}

/* 章节标题下方小华饰 */
.section-head { position: relative; }
.section-head::after {
  content: '❖';
  display: block;
  margin: 18px auto 0;
  font-size: 13px;
  color: var(--gold-deep);
  opacity: 0.7;
  letter-spacing: 0;
  text-shadow: 0 0 10px rgba(212,175,106,0.3);
}

/* ---- 卡片统一: 柔和圆角 + 层次阴影 + 顶部发丝高光 ---- */
.hall, .tool-card, .form-card, .notice, .chip {
  border-radius: var(--radius);
}
.hall, .tool-card {
  box-shadow: var(--shadow-sm);
  background-image: linear-gradient(180deg, var(--hairline), transparent 42%);
}
.hall { box-shadow: 0 4px 20px rgba(0,0,0,0.25), inset 0 1px 0 var(--hairline); }
:root[data-theme="light"] .hall { box-shadow: var(--shadow-sm), inset 0 1px 0 var(--hairline); }
.hall:hover {
  box-shadow: var(--shadow-lg), 0 0 0 1px var(--gold-deep), inset 0 1px 0 rgba(212,175,106,0.14);
}
.tool-card { border-radius: var(--radius); }
.tool-card:hover { box-shadow: var(--shadow-md); transform: translateY(-3px); }
.tool-card-foot { border-top-style: solid; border-top-color: var(--border); }

.form-card {
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  background-image: linear-gradient(180deg, var(--hairline), transparent 30%);
}
.form-card::before { border-radius: var(--radius) var(--radius) 0 0; }

.notice { border-radius: var(--radius-sm); box-shadow: var(--shadow-sm); transition: transform 0.25s, box-shadow 0.25s, border-color 0.25s; }
.notice:hover { transform: translateX(3px); box-shadow: var(--shadow-md); border-color: var(--gold-deep); }

/* ---- 按钮 / 输入: 柔和圆角 + 精修 ---- */
.btn { border-radius: var(--radius-sm); }
.btn-lg { border-radius: var(--radius); }
.btn-primary { box-shadow: 0 3px 16px rgba(212,175,106,0.16), inset 0 1px 0 rgba(255,240,200,0.12); }
.form-input, .oauth-btn { border-radius: var(--radius-sm); }
.form-input:hover:not(:focus) { border-color: var(--border-strong); }

/* ---- Toast: 圆角 + 阴影升级 ---- */
.toast { border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); }

/* ---- 导航: 主题切换/退出按钮更精致, 品牌印记微光 ---- */
.brand:hover .brand-mark { filter: drop-shadow(0 0 8px rgba(212,175,106,0.5)); }
.brand-mark { transition: filter 0.3s; }

/* ============================================================================
   ✦ 聊天模块交互打磨
============================================================================ */
.chat-shell { border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow-md); border: 1px solid var(--border); }
@media (max-width: 900px) { .chat-shell { border-radius: 0; border: none; box-shadow: none; } }

/* 频道侧栏: 选项 hover/active 更顺滑 */
.ch-item { border-radius: var(--radius-sm); transition: background 0.18s, color 0.18s, transform 0.12s; }
.ch-item:active { transform: scale(0.985); }
.ch-item.active { background: linear-gradient(90deg, rgba(212,175,106,0.14), transparent); box-shadow: inset 2px 0 0 var(--gold); }
.ch-badge { box-shadow: 0 0 0 2px var(--card); }

/* 消息: 整行 hover 微高亮 + 头像金环 + 平滑出现 */
/* 用 auto(瞬时跳转): 贴底是 scrollTop=scrollHeight 的 O(1) 操作, 与消息条数无关;
   之前 smooth 会"动画滚过"全部消息, 消息越多越慢 —— 这才是进入时"滚一下"的真因 */
.chat-messages { scroll-behavior: auto; }
.msg { border-radius: var(--radius-sm); padding: 5px 8px; margin: 0 -8px; transition: background 0.15s; }
.msg:hover { background: linear-gradient(90deg, rgba(212,175,106,0.05), transparent 70%); }
.msg-avatar { box-shadow: 0 0 0 1px var(--border), 0 2px 8px rgba(0,0,0,0.3); transition: transform 0.15s; }
.msg:hover .msg-avatar { transform: scale(1.05); }
.msg-image { border-radius: var(--radius-sm); transition: transform 0.2s, box-shadow 0.2s; }
.msg-image:hover { transform: scale(1.01); box-shadow: var(--shadow-md); }
.msg-reply { border-radius: var(--radius-xs); transition: background 0.15s; }
.msg-reply:hover { background: var(--card-hover); }
.msg.flash { border-radius: var(--radius-sm); }

/* 悬浮操作条: 浮起卡片质感 */
.msg-actions {
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-md);
  background: var(--card-hover);
  padding: 3px;
  gap: 2px;
}
.msg-act-btn { border-radius: var(--radius-xs); transition: background 0.15s, color 0.15s, transform 0.1s; }
.msg-act-btn:active { transform: scale(0.9); }

/* 置顶条: 更精致 */
.chat-pinned .pin-text { border-radius: var(--radius-xs); }

/* 输入区: 聚焦整体微光 + 圆角 + 发送按钮 */
.chat-input-wrap { border-top: 1px solid var(--border); background: linear-gradient(180deg, transparent, rgba(212,175,106,0.025)); }
.chat-textarea { border-radius: var(--radius-sm); transition: border-color 0.2s, box-shadow 0.2s, background 0.2s; }
.chat-textarea:focus { box-shadow: 0 0 0 1px var(--gold-deep), 0 0 16px rgba(212,175,106,0.16); }
.chat-icon-btn { border-radius: var(--radius-sm); transition: all 0.18s; }
.chat-icon-btn:active { transform: scale(0.92); }
.chat-input .btn { border-radius: var(--radius-sm); }

/* 在线名单行: hover 顺滑 + 在线点呼吸 */
.user-row { border-radius: var(--radius-sm); transition: background 0.15s; }
.user-dot { box-shadow: 0 0 6px var(--jade); animation: dot-breathe 2.6s ease-in-out infinite; }
@keyframes dot-breathe { 0%,100% { opacity: 0.6; } 50% { opacity: 1; } }

/* 滚到底按钮: 浮起 */
.scroll-bottom-btn { border-radius: 999px; box-shadow: var(--shadow-md); }

/* 日期分隔: 更轻盈 */
.day-divider { opacity: 0.85; }

/* 表情面板: 圆角 + 阴影 */
.emoji-panel { border-radius: var(--radius); box-shadow: var(--shadow-lg); }
.emoji-grid button { border-radius: var(--radius-xs); transition: background 0.12s, transform 0.1s; }
.emoji-grid button:active { transform: scale(0.85); }

/* ws 状态点 */
.ws-status::before { content: '●'; margin-right: 5px; font-size: 9px; }
.ws-status.connected::before { color: var(--jade); }
.ws-status.connecting::before { color: var(--gold-soft); animation: dot-breathe 1.2s infinite; }
.ws-status.disconnected::before { color: var(--vermilion); }

/* ============================================================================
   ✦ 宗门事务 / 通用列表卡片 圆角同步
============================================================================ */
.idea-card, .post-card, .rm-card, .cmt { transition: background 0.15s; }
.vote-btn { border-radius: var(--radius-sm); }
.post-img { border-radius: var(--radius-sm) !important; }

/* ---- 头像 ---- */
.msg-avatar { overflow: hidden; }
.user-av {
  width: 24px; height: 24px; border-radius: 50%; object-fit: cover;
  flex-shrink: 0; border: 1px solid var(--border-strong);
}
/* 登录态右上角: 道号胶囊 chip(头像/首字 + 道号, 描边块感), 点进洞府 */
.nav-user {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 3px 11px 3px 4px;
  border: 1px solid var(--border-strong);
  border-radius: 999px;
  background: var(--card);
  text-decoration: none;
  max-width: 150px;
  transition: border-color .15s, background .15s;
}
.nav-user:hover { border-color: var(--gold-deep); background: var(--card-hover); }
.nav-user-name {
  color: var(--gold); font-size: 13px; letter-spacing: 0.04em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.nav-avatar {
  width: 24px; height: 24px; border-radius: 50%; object-fit: cover;
  border: 1px solid var(--gold-deep); flex-shrink: 0;
}
.nav-avatar.fallback {
  display: inline-flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--gold-soft), var(--gold-deep));
  color: var(--bg); font-family: var(--serif); font-size: 13px; border: none;
}


/* ============================================================================
   丝滑大改造 · 全局地基  (缓动 / 骨架屏 / 入场 / 加载态 / 触感)
   —— 全部为新增类与伪元素, 不覆盖既有规则
============================================================================ */
:root {
  --ease: cubic-bezier(.4,0,.2,1);            /* 标准 */
  --ease-out: cubic-bezier(.16,1,.3,1);       /* 减速进场 */
  --ease-spring: cubic-bezier(.34,1.56,.64,1);/* 回弹 */
  --skel-base: rgba(138,130,112,0.14);
  --skel-shine: rgba(232,224,200,0.10);
}
:root[data-theme="light"] {
  --skel-base: rgba(120,100,60,0.12);
  --skel-shine: rgba(255,255,255,0.55);
}

/* 移动端点击不再出现灰色高亮块 */
* { -webkit-tap-highlight-color: transparent; }
/* 移动端惯性滚动 */
html { -webkit-overflow-scrolling: touch; }

/* ---------- 骨架屏 ---------- */
@keyframes qy-shimmer { 100% { transform: translateX(100%); } }
.skel { position: relative; overflow: hidden; background: var(--skel-base); border-radius: var(--radius-sm); }
.skel::after {
  content: ''; position: absolute; inset: 0; transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, var(--skel-shine), transparent);
  animation: qy-shimmer 1.25s var(--ease) infinite;
}
.skel-line { height: 12px; margin: 9px 0; }
.skel-line.sm { height: 10px; width: 55%; }
.skel-title { height: 18px; width: 42%; margin: 2px 0 14px; }
.skel-circle { border-radius: 50%; flex-shrink: 0; }
.skel-card { padding: 18px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card); }
@media (prefers-reduced-motion: reduce) { .skel::after { animation: none; } }

/* ---------- 入场: 淡入 + 上移 ---------- */
@keyframes qy-rise { from { opacity: 0; transform: translateY(9px); } to { opacity: 1; transform: none; } }
.rise-in { animation: qy-rise .42s var(--ease-out) both; }
.page-fade { animation: qy-rise .5s var(--ease-out) both; }
/* 列表逐条 stagger */
.stagger > * { animation: qy-rise .42s var(--ease-out) both; }
.stagger > *:nth-child(1){animation-delay:.03s} .stagger > *:nth-child(2){animation-delay:.07s}
.stagger > *:nth-child(3){animation-delay:.11s} .stagger > *:nth-child(4){animation-delay:.15s}
.stagger > *:nth-child(5){animation-delay:.19s} .stagger > *:nth-child(6){animation-delay:.23s}
.stagger > *:nth-child(7){animation-delay:.27s} .stagger > *:nth-child(8){animation-delay:.31s}
.stagger > *:nth-child(9){animation-delay:.35s} .stagger > *:nth-child(n+10){animation-delay:.38s}
@media (prefers-reduced-motion: reduce) { .rise-in,.page-fade,.stagger>*{animation:none} }

/* ---------- 图片淡入(避免"砰"地跳出) ---------- */
img.img-fade { opacity: 0; transition: opacity .45s var(--ease-out); }
img.img-fade.loaded { opacity: 1; }

/* ---------- 按钮加载态: 内联 spinner ---------- */
@keyframes qy-spin { to { transform: rotate(360deg); } }
.btn.is-loading { color: transparent !important; pointer-events: none; opacity: 1 !important; }
.btn.is-loading::before {
  content: ''; position: absolute; top: 50%; left: 50%;
  width: 15px; height: 15px; margin: -8px 0 0 -8px;
  border: 2px solid var(--moon); border-top-color: transparent; border-radius: 50%;
  animation: qy-spin .6s linear infinite;
}
.btn-primary.is-loading::before { border-color: var(--bg); border-top-color: transparent; }
@media (prefers-reduced-motion: reduce) { .btn.is-loading::before { animation-duration: 1.6s; } }

/* ---------- 卡片/可点元素统一轻抬(只加 hover 位移, 依赖各自已有 transition) ---------- */
.lift { transition: transform .18s var(--ease-out), box-shadow .18s var(--ease), border-color .18s var(--ease); }
.lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }

/* iOS Safari: 输入框字体 <16px 聚焦时会自动放大页面且不回弹 → 移动端统一 16px 防缩放 */
@media (max-width: 720px) {
  input, textarea, select, .form-input, .chat-textarea { font-size: 16px; }
}

/* ===== @提及选人 ===== */
.chat-input-wrap { position: relative; }
.mention-pop {
  position: absolute; left: 12px; right: 12px; bottom: 100%; margin-bottom: 8px;
  background: var(--card); border: 1px solid var(--border-strong); border-radius: var(--radius);
  box-shadow: var(--shadow-lg); max-height: 244px; overflow-y: auto; display: none; z-index: 45;
  -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
}
.mention-pop.show { display: block; }
.mp-item { display: flex; align-items: center; gap: 10px; padding: 9px 12px; cursor: pointer; }
.mp-item.sel, .mp-item:hover { background: var(--card-hover); }
.mp-item img, .mp-dot { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; object-fit: cover; }
.mp-dot { background: linear-gradient(135deg, var(--card-hover), var(--bg)); border: 1px solid var(--border-strong); }
.mp-name { flex: 1; min-width: 0; color: var(--moon); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-tier { font-size: 11px; color: var(--dust); flex-shrink: 0; }

/* ===== emoji 面板 tabs + 收藏/自定义表情 ===== */
.emoji-tabs { display: flex; align-items: center; gap: 4px; padding: 7px 8px 5px; border-bottom: 1px solid var(--border); }
.etab { background: none; border: none; color: var(--dust); font-size: 13px; padding: 5px 11px; border-radius: 8px; cursor: pointer; transition: background .15s, color .15s; }
.etab.active { background: var(--card-hover); color: var(--gold); }
.etab-manage { margin-left: auto; background: none; border: none; color: var(--dust); font-size: 12px; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
/* grid-auto-rows 固定行高: 不依赖 aspect-ratio(旧 WebView 不支持会塌成 0 高 → 表情全叠一起),
   由网格强制每行 78px, 图片填满格子; 配合 max-height + overflow 多了就在弹窗内滑动 */
.sticker-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(64px, 1fr)); grid-auto-rows: 78px; gap: 8px; padding: 10px; max-height: 300px; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.sticker-item { position: relative; min-height: 72px; border-radius: 10px; overflow: hidden; cursor: pointer; border: 1px solid var(--border); background: var(--bg); transition: transform .1s; }
.sticker-item:active { transform: scale(0.94); }
.sticker-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sticker-del { position: absolute; top: 2px; right: 2px; width: 18px; height: 18px; border-radius: 50%; background: rgba(0,0,0,.6); color: #fff; font-size: 13px; line-height: 18px; text-align: center; display: none; }
.sticker-item.manage .sticker-del { display: block; }
.sticker-item.manage { animation: sticker-wobble .35s ease infinite alternate; }
@keyframes sticker-wobble { from { transform: rotate(-1.5deg); } to { transform: rotate(1.5deg); } }
.sticker-add { aspect-ratio: 1; border: 1px dashed var(--border-strong); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 26px; color: var(--dust); cursor: pointer; transition: color .15s, border-color .15s; }
.sticker-add:hover { color: var(--gold); border-color: var(--gold-deep); }
/* 手机上表情面板铺开成近全宽底部面板, 表情/贴图多了也能一屏铺开 + 滑动看全 */
@media (max-width: 720px) {
  .emoji-panel { left: 10px; right: 10px; width: auto; bottom: 66px; }
  .emoji-grid { grid-template-columns: repeat(7, 1fr); max-height: 42vh; }
  .sticker-grid { max-height: 46vh; }
}

/* ============================================================================
   原生 App 体验: 非首页隐藏顶部网页导航栏(html.app-noheader, 仅 App 内 + 移动宽度触发)
   顶栏本兼"状态栏占位", 去掉后要补 safe-area, 否则内容钻到刘海/状态栏下。
   H5 浏览器/桌面无此 class, 完全不受影响。
   ============================================================================ */
html.app-noheader nav.nav { display: none !important; }
/* 状态栏接缝根治: App 内把 body 背景改成【纯色 var(--bg)】(去掉原本的径向渐变)。
   safe-area 露出的顶部条与原生状态栏(也是 var(--bg) 同色) → 无缝。
   纯色是 body 自身背景、不是 fixed 伪元素 → 不受抽屉 transform/合成影响,
   根治"开关侧栏后状态栏又变色"。同时留出状态栏高度。 */
html.app-noheader body { padding-top: env(safe-area-inset-top); background: var(--bg); }
/* 聊天页是 fixed 布局, body 不需再留(chat-shell 自己补), 否则会双倍留白 */
html.app-noheader body.page-chat { padding-top: 0; }
/* ★ 聊天页整体(消息区/侧栏/在殿/蒙版)统一从状态栏下方 +12px 起, 顶部留一条统一的米色窄条:
   ①避开状态栏边界 → iOS 不再给状态栏叠系统遮罩(根治变色);
   ②消息区/蒙版/抽屉全对齐 → 没有蒙版缝、不露 ☰ 图标。 */
html.app-noheader body.page-chat .chat-shell,
html.app-noheader .chat-aside.chat-channels,
html.app-noheader .chat-aside.chat-online.open,
html.app-noheader .chat-backdrop { top: calc(env(safe-area-inset-top) + 12px); }
/* 坊市吸顶 hub: nav 没了, 贴状态栏下方(原来贴 --nav-h 下) */
html.app-noheader .fang-hub { top: env(safe-area-inset-top); }

