/* 「选股圈」—— 浅色清爽系（参考 /__mx/ai 配色：teal 强调 + 红涨绿跌）
   时尚化手法：柔和多层阴影、teal 渐变品牌、玻璃顶栏、微交互抬升 */

:root {
  --bg: #eef2f6;
  --bg-deep: #e7edf3;
  --panel: #ffffff;
  --panel-2: #f6f8fb;
  --raise: #f1f5f9;
  --line: #d8e0e8;
  --line-soft: #e8eef4;
  --ink: #1f2933;
  --ink-dim: #64748b;
  --ink-faint: #94a3b8;
  --accent: #0f766e;         /* teal 主强调 */
  --accent-strong: #115e59;
  --accent-soft: #f0fdfa;
  --accent-grad: linear-gradient(135deg, #14b8a6, #0ea5e9);
  --up: #dc2626;             /* 涨/买入：红（A股） */
  --up-soft: #fef2f2;
  --dn: #16a34a;             /* 跌/卖出：绿 */
  --dn-soft: #f0fdf4;
  --blue: #2563eb;
  --amber: #b45309;
  --amber-soft: #fffbeb;
  --radius: 12px;
  --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
          "Microsoft YaHei", "Noto Sans SC", sans-serif;
  --shadow-sm: 0 1px 2px rgba(16, 24, 40, .05), 0 1px 3px rgba(16, 24, 40, .07);
  --shadow-md: 0 2px 4px rgba(16, 24, 40, .05), 0 4px 12px rgba(16, 24, 40, .08);
  --shadow-lg: 0 8px 16px rgba(16, 24, 40, .08), 0 20px 40px rgba(16, 24, 40, .12);
  --glass: rgba(255, 255, 255, .82);        /* 顶栏 / 会话头：半透明面 */
  --glass-soft: rgba(255, 255, 255, .6);    /* 房间列表侧栏 */
  --glass-strong: rgba(255, 255, 255, .93); /* 底部 tab bar */
  --seg: #e2e8f0;                           /* 分段控件底 */
  --overlay: rgba(15, 23, 42, .42);         /* 遮罩 */
  --bubble-teacher: #14b8a6;
  --bg-glow-1: rgba(20, 184, 166, .07);
  --bg-glow-2: rgba(14, 165, 233, .06);
  --sab: env(safe-area-inset-bottom);    /* 底部安全区：横屏兜底时由 JS 改成物理底边那侧 */
  color-scheme: light;
}

/* 深色套（方案 A 的夜间版）：跟随系统；html[data-theme] 由「我的 → 外观」覆盖 */
@media (prefers-color-scheme: dark) {
  html:not([data-theme="light"]) {
    --bg: #0f151e; --bg-deep: #0b1017; --panel: #161d29; --panel-2: #1b2432; --raise: #1f2937;
    --line: #273244; --line-soft: #1f2937;
    --ink: #e6edf6; --ink-dim: #9aa8bb; --ink-faint: #6b7a90;
    --accent: #2dd4bf; --accent-strong: #5eead4; --accent-soft: rgba(45, 212, 191, .13);
    --up: #f87171; --up-soft: rgba(248, 113, 113, .14); --dn: #4ade80; --dn-soft: rgba(74, 222, 128, .14);
    --blue: #60a5fa; --amber: #fbbf24; --amber-soft: rgba(251, 191, 36, .14);
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px rgba(0, 0, 0, .3);
    --shadow-md: 0 2px 4px rgba(0, 0, 0, .3), 0 4px 12px rgba(0, 0, 0, .35);
    --shadow-lg: 0 8px 16px rgba(0, 0, 0, .35), 0 20px 40px rgba(0, 0, 0, .45);
    --glass: rgba(22, 29, 41, .86); --glass-soft: rgba(22, 29, 41, .6); --glass-strong: rgba(15, 21, 30, .94);
    --seg: #1f2937; --overlay: rgba(0, 0, 0, .55); --bubble-teacher: #2dd4bf;
    --bg-glow-1: rgba(20, 184, 166, .08); --bg-glow-2: rgba(14, 165, 233, .06);
    color-scheme: dark;
  }
}
html[data-theme="dark"] {
  --bg: #0f151e; --bg-deep: #0b1017; --panel: #161d29; --panel-2: #1b2432; --raise: #1f2937;
  --line: #273244; --line-soft: #1f2937;
  --ink: #e6edf6; --ink-dim: #9aa8bb; --ink-faint: #6b7a90;
  --accent: #2dd4bf; --accent-strong: #5eead4; --accent-soft: rgba(45, 212, 191, .13);
  --up: #f87171; --up-soft: rgba(248, 113, 113, .14); --dn: #4ade80; --dn-soft: rgba(74, 222, 128, .14);
  --blue: #60a5fa; --amber: #fbbf24; --amber-soft: rgba(251, 191, 36, .14);
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px rgba(0, 0, 0, .3);
  --shadow-md: 0 2px 4px rgba(0, 0, 0, .3), 0 4px 12px rgba(0, 0, 0, .35);
  --shadow-lg: 0 8px 16px rgba(0, 0, 0, .35), 0 20px 40px rgba(0, 0, 0, .45);
  --glass: rgba(22, 29, 41, .86); --glass-soft: rgba(22, 29, 41, .6); --glass-strong: rgba(15, 21, 30, .94);
  --seg: #1f2937; --overlay: rgba(0, 0, 0, .55); --bubble-teacher: #2dd4bf;
  --bg-glow-1: rgba(20, 184, 166, .08); --bg-glow-2: rgba(14, 165, 233, .06);
  color-scheme: dark;
}

* { box-sizing: border-box; }
html, body { height: 100%; }
* { -webkit-tap-highlight-color: transparent; }
body {
  margin: 0;
  background:
    radial-gradient(900px 420px at 12% -8%, var(--bg-glow-1), transparent 55%),
    radial-gradient(800px 380px at 96% -4%, var(--bg-glow-2), transparent 50%),
    var(--bg);
  background-attachment: fixed;
  color: var(--ink);
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  overscroll-behavior: none;
}
#app { height: 100%; }
input, select, button, textarea { font: inherit; color: inherit; }
a { color: var(--blue); text-decoration: none; }
button { cursor: pointer; border: none; background: none; }
::selection { background: rgba(20, 184, 166, .22); }

::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-thumb { background: var(--line); border-radius: 5px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: #aab8c6; }
::-webkit-scrollbar-track { background: transparent; }

.num { font-family: var(--mono); font-variant-numeric: tabular-nums; letter-spacing: -0.2px; }
.up { color: var(--up); }
.dn { color: var(--dn); }

/* ---------- 通用控件 ---------- */

.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px; border-radius: 9px;
  background: var(--panel); color: var(--ink);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-sm);
  transition: border-color .15s, box-shadow .15s, transform .06s;
  user-select: none; white-space: nowrap;
}
.btn:hover { border-color: #b9c6d4; box-shadow: var(--shadow-md); }
.btn:active { transform: translateY(1px); }
.btn.primary {
  background: var(--accent); color: #fff; font-weight: 600; border-color: var(--accent-strong);
}
.btn.primary:hover { background: var(--accent-strong); }
.btn.ghost { background: transparent; border-color: transparent; color: var(--ink-dim); box-shadow: none; }
.btn.ghost:hover { color: var(--ink); background: var(--raise); }
.btn.danger { color: var(--up); }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.btn.sm { padding: 4px 10px; font-size: 13px; border-radius: 8px; }

.inp {
  width: 100%; padding: 9px 12px; border-radius: 9px;
  background: var(--panel); border: 1px solid var(--line);
  color: var(--ink); outline: none;
  transition: border-color .15s, box-shadow .15s;
}
.inp:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(15, 118, 110, .13); }
.inp::placeholder { color: var(--ink-faint); }

/* Safari/WebKit 的原生 <select> 不认 padding：控件会塌成 ~21px 高、文字被裁光
   （全员战绩表“全部操作”筛选变成空白小条）。appearance:none 关掉原生外观后，
   两浏览器都按 padding/圆角渲染，箭头改为自绘，Chrome / Safari 表现一致。 */
select.inp {
  -webkit-appearance: none; appearance: none;
  padding-right: 30px;               /* 给自绘箭头留位（.inp 的 12px 不够） */
  line-height: 1.55;                 /* 与 input 内容高度对齐，外观等高 */
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7'%3E%3Cpath d='M1.5 1.5 5.5 5.5 9.5 1.5' fill='none' stroke='%2364748b' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
}
.tabbar select.inp { padding-right: 30px; }   /* 压过 .tabbar .inp 的 11px 右内边距 */

/* 分析师搜索（全员战绩表：输入即筛 + 候选下拉） */
.combo { position: relative; }
.combo .inp { width: 210px; padding-right: 28px; }
.combo-x {
  position: absolute; right: 7px; top: 50%; transform: translateY(-50%);
  width: 17px; height: 17px; padding: 0; border: none; border-radius: 50%;
  background: var(--raise); color: var(--ink-dim); font-size: 12px; line-height: 1;
  cursor: pointer;
}
.combo-x:hover { background: var(--line); color: var(--ink); }
.combo-list {
  position: absolute; top: calc(100% + 5px); left: 0; z-index: 40;
  min-width: 100%; max-height: 262px; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  box-shadow: var(--shadow-md); padding: 5px;
}
.combo-item {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 9px; border-radius: 8px; font-size: 13.5px; cursor: pointer;
}
.combo-item:hover { background: var(--accent-soft); }
.combo-item .gen-avatar { width: 24px; height: 24px; font-size: 11.5px; flex: none; }
.combo-cnt { margin-left: auto; color: var(--ink-faint); font-size: 12px; }

.chip {
  display: inline-flex; align-items: center;
  padding: 2px 9px; border-radius: 999px;
  font-size: 12px; line-height: 1.6; white-space: nowrap;
}
.chip.buy { background: var(--up-soft); color: var(--up); }
.chip.sell { background: var(--dn-soft); color: var(--dn); }

/* 操作标签按动作分色（参考 /__mx/ai：统一无描边纯色块；A股口径红=买入系，绿=卖出系） */
.chip.c-buy    { background: #fee2e2; color: #b91c1c; }
.chip.c-add    { background: #ffe4e6; color: #9f1239; }
.chip.c-cbuy   { background: #ffedd5; color: #c2410c; }   /* 条件买入 */
.chip.c-sell   { background: #dcfce7; color: #15803d; }
.chip.c-reduce { background: #d1fae5; color: #047857; }
.chip.c-clear  { background: #bbf7d0; color: #166534; }
.chip.c-csell  { background: #ccfbf1; color: #0f766e; }   /* 条件离场 */
.chip.c-creduce{ background: #ccfbf1; color: #0f766e; }   /* 条件减仓 */
.chip.c-profit { background: #fef3c7; color: #b45309; }   /* 止盈 */
.chip.c-stop   { background: #fed7aa; color: #9a3412; }   /* 止损 */
/* GLM 全量键名（conditional_buy 等）与上面缩写键同色 */
.chip.c-conditional_buy   { background: #ffedd5; color: #c2410c; }
.chip.c-conditional_sell,
.chip.c-conditional_reduce{ background: #ccfbf1; color: #0f766e; }
.chip.c-take_profit { background: #fef3c7; color: #b45309; }
.chip.c-stop_loss   { background: #fed7aa; color: #9a3412; }
.chip.c-hold   { background: #e0f2fe; color: #0369a1; }   /* 持有 */
.chip.c-watch  { background: #ede9fe; color: #6d28d9; }   /* 关注 */
.chip.c-avoid  { background: #e2e8f0; color: #475569; }   /* 回避 */
.chip.other { background: #e6f7f3; color: var(--accent-strong); }  /* 未知操作兜底 */

/* 头部行内状态：上次拉取摘要 / 拉取进度（贴着「拉取当天」左侧，省一行） */
.ai-head .head-status {
  flex: 1; min-width: 0; display: flex; align-items: center; justify-content: flex-end;
  gap: 8px; color: #1e40af; font-size: 12.5px;
}
.ai-head .head-status .st-line {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--ink-dim);
}
.ai-head .head-status .st-line.err { color: var(--up); }
.ai-head .head-status b { white-space: nowrap; }
.ai-head .st-bar { width: 110px; min-width: 60px; height: 8px; background: #dbeafe;
  border: 1px solid #93c5fd; border-radius: 99px; overflow: hidden; flex: none; }
.ai-head .st-bar i { display: block; height: 100%; background: #2563eb;
  border-radius: 99px; transition: width .4s; }
.ai-head .st-cur { color: #3b82f6; max-width: 200px; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
/* 手机端：状态条独占一行、内部可换行，进度条不再挤压遮挡文字 */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .ai-head { gap: 8px; }
  .ai-head .head-status {
    flex-basis: 100%; justify-content: flex-start; flex-wrap: wrap; gap: 6px 8px;
  }
  .ai-head .st-bar { width: 84px; min-width: 48px; }
  .ai-head .st-cur { max-width: calc(100vw - 120px); flex: 1; min-width: 120px; }
}
.chip.amber { background: var(--amber-soft); color: var(--amber); }
.chip.plain { background: var(--panel-2); color: var(--ink-dim); border: 1px solid var(--line); }
.chip.warn { background: #fee2e2; color: #b91c1c; }

.badge {
  min-width: 19px; padding: 1px 6px; border-radius: 999px;
  background: linear-gradient(135deg, #ef4444, #dc2626); color: #fff;
  font-size: 11.5px; font-weight: 700; text-align: center;
  font-family: var(--mono);
  box-shadow: 0 1px 3px rgba(220, 38, 38, .35);
}
.badge.pulse { animation: badge-pulse .5s ease; }
@keyframes badge-pulse { 0% { transform: scale(1.55); } 100% { transform: scale(1); } }

.card {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); box-shadow: var(--shadow-sm);
}

.spin {
  width: 15px; height: 15px; border-radius: 50%;
  border: 2px solid var(--line); border-top-color: var(--accent);
  animation: rot .7s linear infinite; display: inline-block;
}
@keyframes rot { to { transform: rotate(360deg); } }

.skeleton {
  border-radius: 8px; background: linear-gradient(100deg, var(--raise) 40%, #e8eef5 50%, var(--raise) 60%);
  background-size: 200% 100%; animation: shimmer 1.4s infinite linear;
}
@keyframes shimmer { to { background-position: -200% 0; } }

.toast-wrap { position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: 999; display: flex; flex-direction: column; gap: 8px; }
.toast {
  padding: 9px 18px; border-radius: 10px; font-size: 14px;
  background: var(--panel); border: 1px solid var(--line);
  box-shadow: var(--shadow-lg); animation: toast-in .25s ease;
}
.toast.err { border-color: rgba(220, 38, 38, .4); color: #b91c1c; }
@keyframes toast-in { from { opacity: 0; transform: translateY(-8px); } }

.empty { text-align: center; color: var(--ink-faint); padding: 48px 16px; }
.empty .big { font-size: 34px; margin-bottom: 8px; }

/* 生成式头像（分析师/房间）：渐变底 + 白色首字 */
.gen-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  color: #fff; font-weight: 700; flex: none;
  border-radius: 28%; text-shadow: 0 1px 2px rgba(0, 0, 0, .18);
  user-select: none;
}

/* ---------- 登录页：桌面左「介绍」右「登录」分栏，手机单列 ---------- */

.lg-stage { min-height: 100%; display: grid; grid-template-columns: 1.15fr 1fr; background: var(--bg); }
.lg-brand {
  position: relative; color: #fff; padding: 56px 56px 40px; display: flex; flex-direction: column; overflow: hidden;
  background:
    radial-gradient(720px 320px at 86% -18%, rgba(56, 189, 248, .38), transparent 62%),
    radial-gradient(620px 300px at 6% 128%, rgba(45, 212, 191, .32), transparent 60%),
    linear-gradient(135deg, #0f766e, #115e59 52%, #0c4a6e);
}
.lg-brand .logo { display: inline-block; filter: drop-shadow(0 8px 20px rgba(0, 0, 0, .3)); }
.lg-brand h1 { font-size: 34px; margin: 22px 0 6px; letter-spacing: -.5px; line-height: 1.2; font-weight: 800; }
.lg-brand h1 small { display: block; font-size: 13px; letter-spacing: 3px; opacity: .7; font-weight: 500; margin-top: 8px; }
.lg-brand .lead { font-size: 15px; opacity: .85; margin: 12px 0 28px; max-width: 460px; line-height: 1.7; }
.lg-feats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; max-width: 520px; }
.lg-feat { background: rgba(255, 255, 255, .1); border: 1px solid rgba(255, 255, 255, .18); border-radius: 12px; padding: 12px 14px; }
.lg-feat b { display: block; font-size: 14px; margin-bottom: 2px; }
.lg-feat small { font-size: 12px; opacity: .78; line-height: 1.5; display: block; }
.lg-pitch { display: none; }
.lg-live { margin-top: auto; padding-top: 30px; display: flex; gap: 26px; flex-wrap: wrap; }
.lg-live div b { display: block; font-size: 22px; }
.lg-live div small { font-size: 12px; opacity: .72; }
.lg-live .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: #94a3b8; margin-right: 6px; vertical-align: 2px; }
.lg-live .dot.open { background: #4ade80; box-shadow: 0 0 0 4px rgba(74, 222, 128, .25); }
.lg-live .dot.pre, .lg-live .dot.post { background: #fbbf24; }
.lg-form { display: flex; align-items: center; justify-content: center; padding: 40px 24px; background: var(--panel); }
.lg-card { width: 100%; max-width: 360px; animation: rise .45s ease both; }
.lg-card h2 { margin: 0 0 4px; font-size: 22px; }
.lg-card .sub { color: var(--ink-dim); font-size: 13px; margin-bottom: 18px; }
.lg-card form { display: flex; flex-direction: column; gap: 6px; }
.lg-card label { font-size: 12.5px; color: var(--ink-dim); margin-top: 8px; }
.lg-card .inp { height: 44px; border-radius: 11px; font-size: 14.5px; }
.lg-pw { position: relative; }
.lg-pw .inp { width: 100%; padding-right: 52px; }
.lg-pw .eye { position: absolute; right: 12px; top: 0; height: 44px; display: flex; align-items: center; color: var(--ink-faint); font-size: 12.5px; cursor: pointer; user-select: none; }
.lg-btn { justify-content: center; height: 44px; border-radius: 11px; font-size: 15px; font-weight: 700; margin-top: 14px; }
.lg-err { color: var(--up); font-size: 13px; text-align: center; margin-top: 4px; }
.lg-links { display: flex; justify-content: space-between; gap: 10px; margin-top: 14px; font-size: 12px; color: var(--ink-faint); flex-wrap: wrap; }
.lg-app { margin-top: 22px; padding: 10px 12px; border-radius: 12px; background: var(--panel-2); border: 1px solid var(--line-soft); display: flex; align-items: center; gap: 12px; font-size: 13px; text-decoration: none; color: inherit; }
.lg-app:hover { border-color: var(--accent); }
.lg-app .qr { width: 54px; height: 54px; border-radius: 8px; background: #fff; padding: 3px; flex: none; }
.lg-app .qr img { width: 100%; height: 100%; display: block; }
.lg-app .tx { flex: 1; min-width: 0; }
.lg-app b { display: block; font-size: 13.5px; }
.lg-app small { color: var(--ink-faint); font-size: 12px; }
.lg-app .go { color: var(--accent); font-weight: 600; white-space: nowrap; }
.lg-legal { margin-top: 16px; font-size: 11.5px; color: var(--ink-faint); text-align: center; line-height: 1.8; }
.lg-legal a { color: var(--ink-dim); text-decoration: none; }
@keyframes rise { from { opacity: 0; transform: translateY(14px); } }

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .lg-stage { grid-template-columns: 1fr; min-height: 100%; align-content: start; }
  .lg-brand { padding: 34px 20px 18px; text-align: center; align-items: center; color: var(--ink); background: none; }
  .lg-brand .logo { filter: drop-shadow(0 8px 20px rgba(13, 148, 136, .35)); }
  .lg-brand h1 { font-size: 24px; letter-spacing: 6px; margin: 12px 0 0; }
  .lg-brand h1 small { color: var(--ink-faint); opacity: 1; letter-spacing: 3px; font-size: 11.5px; margin-top: 4px; }
  .lg-brand .lead, .lg-feats, .lg-live { display: none; }
  .lg-pitch { display: flex; gap: 6px; justify-content: center; flex-wrap: wrap; margin-top: 12px; }
  .lg-pitch span { font-size: 11.5px; padding: 3px 9px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); }
  .lg-form { background: none; padding: 0 18px calc(24px + var(--sab)); align-items: flex-start; }
  .lg-card h2, .lg-card .sub { display: none; }
  .lg-card form { padding: 18px 16px 16px; background: var(--panel); border: 1px solid var(--line-soft); border-radius: 18px; box-shadow: var(--shadow-md); }
  .lg-card form label:first-child { margin-top: 0; }
  .lg-links { padding: 0 4px; }
}

/* ---------- 应用框架 ---------- */

.frame { height: 100%; display: flex; flex-direction: column; }
.topbar {
  display: flex; align-items: center; gap: 10px;
  height: 54px; padding: 0 16px; flex: none;
  background: var(--glass); backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--line);
  position: sticky; top: 0; z-index: 30;
}
.topbar .brand { display: flex; align-items: center; gap: 9px; }
.topbar .brand .logo { display: inline-flex; }
.topbar .brand b { letter-spacing: 1.5px; font-size: 16.5px; }
.topbar .nav { display: flex; gap: 2px; margin-left: 18px; }
.topbar .nav a {
  padding: 6px 14px; border-radius: 9px; color: var(--ink-dim); font-size: 14px; font-weight: 500;
  transition: color .15s, background .15s;
}
.topbar .nav a:hover { color: var(--ink); background: var(--raise); }
.topbar .nav a.on { color: var(--accent); background: var(--accent-soft); font-weight: 600; }
.topbar .grow { flex: 1; }
.topbar .who { color: var(--ink-dim); font-size: 13px; }
.topbar .lv-badge { flex: none; }
.hamburger { display: none; }
.mnav-btn { display: none; }
.mnav-backdrop { display: none; }
.mnav-sheet { display: none; }

/* ---------- 主界面（房间 + 消息流） ---------- */

.chat-body { flex: 1; display: flex; min-height: 0; position: relative; }

.rooms-pane {
  width: 292px; flex: none; display: flex; flex-direction: column; min-height: 0;
  background: var(--glass-soft); border-right: 1px solid var(--line);
}
.rooms-head { padding: 12px 12px 8px; display: flex; flex-direction: column; gap: 9px; }
.rooms-head .row { display: flex; gap: 6px; }
/* 侧栏过滤按钮行：一行放下（292px 侧栏 4 颗）；极窄时才整颗换行 */
.filter-toggles { display: flex; flex-wrap: wrap; gap: 5px; }
.filter-toggles .ft { flex: 0 0 auto; white-space: nowrap; padding: 4px 8px; font-size: 11.5px; }
.ft {
  padding: 4px 11px; border-radius: 999px; font-size: 12px; color: var(--ink-faint);
  border: 1px solid var(--line); background: var(--panel); box-shadow: var(--shadow-sm);
  transition: all .15s;
}
/* 纯图标按钮（🔔）：与文字胶囊同高、等宽圆形，不再被挤成竖条 */
.ft.ico {
  min-width: 30px; padding: 4px 0; text-align: center; line-height: 1;
}
.ft:hover { color: var(--ink-dim); }
.ft.on { color: var(--accent); border-color: rgba(15, 118, 110, .45); background: var(--accent-soft); font-weight: 600; }

.rooms-scroll { flex: 1; overflow-y: auto; padding: 2px 8px 20px; }
.room-item {
  display: flex; align-items: center; gap: 9px;
  padding: 9px 10px; border-radius: 11px; cursor: pointer;
  position: relative; transition: background .12s, box-shadow .12s;
  animation: rise .3s ease both;
}
.room-item:hover { background: var(--panel); box-shadow: var(--shadow-sm); }
.room-item.on {
  background: var(--panel); box-shadow: var(--shadow-md), inset 3px 0 0 var(--accent);
}
.room-item .ravatar { width: 40px; height: 40px; font-size: 16px; }
.room-item.pinned { background: var(--accent-soft); }
.room-item.pinned:hover { background: var(--accent-soft); filter: brightness(.98); }
.room-item.pinned.on { background: var(--panel); }
.room-item .rmain { flex: 1; min-width: 0; }
.room-item .rtitle {
  font-size: 14px; color: var(--ink); font-weight: 500; line-height: 1.3;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  overflow: hidden; word-break: break-all;   /* 群名最多两行，不再一行截断 */
}
.room-item.on .rtitle { color: var(--accent-strong); font-weight: 600; }
.room-item .rsub { font-size: 12px; color: var(--ink-faint); display: flex; gap: 6px; align-items: center; }
.room-item .rstate { display: none; }   /* 手机端才显示（微信式状态小标记） */
.room-item .rstate .rs-star { color: var(--amber); }
.room-item .racts { display: inline-flex; gap: 4px; align-items: center; }
/* 操作按钮常驻在「N 条」行内（原悬浮覆盖式在手机上与时间/角标重叠，弃用） */
.room-item .rmark {
  border: none; background: none; padding: 1px 2px; margin: -1px 0 -1px -2px;
  font-size: 12px; line-height: 1.2; color: var(--ink-faint); cursor: pointer;
  border-radius: 5px; transition: color .15s;
}
.room-item .rmark:hover { color: var(--ink-dim); }
.room-item .rmark.on { color: var(--amber); }
/* 置顶两态：📌 是彩色 emoji，color 不起作用 → 用灰度滤镜做「灰=未选 / 红原图=已选」 */
.room-item .rmark-pin { filter: grayscale(1) opacity(.5); }
.room-item .rmark-pin.on { filter: none; background: rgba(220, 38, 38, .1); }
/* 🔔 同为 emoji：灰=未提醒 / 亮=强制提醒中 */
.room-item .rmark-bell { filter: grayscale(1) opacity(.5); }
.room-item .rmark-bell.on { filter: none; background: rgba(217, 119, 6, .12); }
.room-item .rstate .rs-bell { color: var(--amber); }
.room-item .rmark-pin-on { color: var(--up); }
.room-item .rmark.rmark-ai {
  font-size: 10px; font-weight: 700; letter-spacing: .5px;
  border: 1px solid var(--line); border-radius: 6px; padding: 1px 5px;
  background: var(--panel-2); color: var(--ink-faint);
}
.room-item .rmark.rmark-ai.on,
.room-item .rmark.rmark-ai:hover { color: var(--accent-strong); border-color: var(--accent); }
.room-item .rmark.rmark-ai.on { background: var(--accent-soft); }
.room-item .meta { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex: none; }
.room-item .rtime { font-size: 11px; color: var(--ink-faint); font-family: var(--mono); }

/* 消息流 */
.feed-pane { flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; position: relative; }
.feed-head {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 18px; border-bottom: 1px solid var(--line); flex: none;
  background: var(--glass); backdrop-filter: blur(10px);
  position: relative; z-index: 25;   /* backdrop-filter 产生层叠上下文：需整体高于消息流，否则搜索下拉被盖 */
}
.feed-head h2 { margin: 0; font-size: 16px; }
.feed-head .sub { color: var(--ink-faint); font-size: 12.5px; }
.feed-scroll { flex: 1; overflow-y: auto; padding: 16px 18px 26px; }

.msg {
  display: flex; gap: 11px; padding: 10px 4px;
  border-bottom: 1px solid var(--line-soft);
  animation: rise .25s ease both;
}
.msg .mtime {
  font-family: var(--mono); font-size: 11.5px; color: #8595a8;
  padding-top: 3px; white-space: nowrap; min-width: 62px; text-align: right;
}
.msg .mbody { flex: 1; min-width: 0; }
.msg .sender { font-size: 13px; color: var(--accent-strong); margin-bottom: 3px; font-weight: 600; }
.msg .sender.none { display: none; }
.msg .text { white-space: pre-wrap; word-break: break-word; font-size: 15px; color: var(--ink); }
.msg .pics { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.msg .pics img {
  max-width: 200px; max-height: 210px; border-radius: 10px;
  border: 1px solid var(--line); cursor: zoom-in; object-fit: cover;
  display: block; box-shadow: var(--shadow-sm);
}
.ocr-box { margin-top: 8px; }
.ocr-box summary {
  cursor: pointer; color: var(--ink-dim); font-size: 12.5px; user-select: none;
  list-style: none; display: inline-flex; align-items: center; gap: 5px;
}
.ocr-box summary::before { content: "▤"; font-size: 11px; }
.ocr-box[open] summary::before { content: "▦"; }
.ocr-box pre {
  margin: 7px 0 0; padding: 9px 11px; border-radius: 9px;
  background: var(--panel-2); border: 1px solid var(--line-soft);
  font-family: var(--mono); font-size: 12px; line-height: 1.6;
  color: var(--ink-dim); white-space: pre-wrap; word-break: break-word;
}
.load-older { text-align: center; padding: 4px 0 14px; }
.jump-latest {
  position: absolute; bottom: 76px; right: 22px; z-index: 5;
  padding: 8px 14px; border-radius: 999px;
  background: var(--panel); border: 1px solid var(--line);
  box-shadow: var(--shadow-lg); font-size: 13px; color: var(--accent-strong); font-weight: 600;
}
.jump-latest.back { right: auto; left: 22px; color: var(--ink-dim); }
.feed-note { color: var(--ink-faint); font-size: 12px; padding: 2px 4px 10px; text-align: center; }

/* ---------- 微信式消息流（精致版） ---------- */

.time-divider {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  margin: 14px 0 8px; color: var(--ink-faint); font-size: 11px;
  font-family: var(--mono);
}
.time-divider::before, .time-divider::after {
  content: ""; flex: 1; height: 1px; max-width: 120px;
}
.time-divider::before { background: linear-gradient(90deg, transparent, var(--line-soft)); }
.time-divider::after { background: linear-gradient(90deg, var(--line-soft), transparent); }
/* 进房定位到第一条未读：红色分隔线（滚到底才清零） */
.unread-divider {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  margin: 10px 0 8px; color: var(--up); font-size: 11.5px; font-weight: 600;
}
.unread-divider::before, .unread-divider::after { content: ""; flex: 1; height: 1px; max-width: 120px; background: color-mix(in srgb, var(--up) 35%, transparent); }
.wc-msg { display: flex; gap: 11px; padding: 3px 2px 8px; animation: rise .22s ease both; }
.wc-msg.cont { padding-top: 0; margin-top: -3px; }   /* 同一人 5 分钟内连发：靠拢一点 */
.wc-quote { margin: 0 0 6px; padding: 6px 10px; border-left: 3px solid var(--ink-faint); background: rgba(127, 140, 160, .14); border-radius: 0 8px 8px 0; color: var(--dim); font-size: 12.5px; line-height: 1.5; white-space: pre-wrap; word-break: break-word; }
.wc-quote b { display: block; font-weight: 600; font-size: 12px; margin-bottom: 1px; color: var(--dim); }
.wc-msg.pressed .wc-bubble { outline: 2px solid var(--accent); outline-offset: 2px; }   /* 手机长按态；此前选择器写坏成 .wc-bubble，每个气泡都带描边 */
/* 桌面右键消息菜单 */
.msg-ctx-mask { position: fixed; inset: 0; z-index: 90; }
.msg-ctx { position: fixed; z-index: 91; min-width: 180px; padding: 5px; background: var(--panel); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow-lg); animation: fade .12s ease; }
.msg-ctx .mc-item { display: flex; align-items: center; gap: 9px; width: 100%; padding: 8px 10px; border: 0; background: none; color: var(--ink); font: inherit; font-size: 13px; border-radius: 8px; cursor: pointer; text-align: left; }
.msg-ctx .mc-item:hover, .msg-ctx .mc-item:focus-visible { background: var(--panel-2); outline: none; }
.msg-ctx .mc-item > span:first-child { color: var(--ink-dim); display: inline-flex; }
.msg-ctx .mc-code { color: var(--ink-faint); font-size: 11.5px; }
.msheet .mm-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 70vw; }
/* 同一天隔 5 分钟以上的时间锚（微信式） */
.time-anchor { display: flex; justify-content: center; margin: 8px 0 6px; }
.time-anchor span { font-size: 11px; color: var(--ink-faint); background: var(--panel-2); border: 1px solid var(--line-soft); padding: 1px 9px; border-radius: 999px; }
.wc-msg.focus .wc-bubble { outline: 2px solid rgba(15, 118, 110, .35); outline-offset: 3px; }
.wc-av { width: 40px; height: 40px; font-size: 16px; margin-top: 3px; border-radius: 32%; }
.room-tlink { color: inherit; text-decoration: none; border-bottom: 1px dashed var(--ink-faint); }
.room-tlink:hover { color: var(--accent); border-bottom-color: var(--accent); }
.wc-main { flex: 1; min-width: 0; }
.wc-name {
  font-size: 12px; margin: 0 0 5px 4px; font-weight: 600; letter-spacing: .2px;
  display: flex; align-items: baseline; gap: 8px;
}
.wc-time { font-size: 10px; font-weight: 400; color: var(--ink-faint); }
.wc-snap { font-size: 10px; font-weight: 500; color: var(--ink-faint); margin-left: 4px; }
.wc-snap::before { content: "·"; margin-right: 4px; }
.wc-snap.click { cursor: pointer; text-decoration: underline dotted; }
.wc-snap.click:hover { color: var(--accent); }
/* 说时价 → 一键条件单弹层 */
.snap-alert { display: flex; flex-direction: column; gap: 8px; min-width: 220px; }
.snap-alert b { font-size: 12.5px; }
.snap-alert .sa-btn { all: unset; cursor: pointer; padding: 8px 12px; border-radius: 10px; background: var(--accent-soft); color: var(--accent); font-size: 13px; font-weight: 600; text-align: center; }
.snap-alert .sa-btn:hover { filter: brightness(1.05); }
/* 系统与备份：交易日历覆盖编辑 */
.adm-cal-row { display: flex; gap: 8px; align-items: center; }
.adm-cal-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.adm-cal-list .chip i { font-style: normal; margin-left: 5px; cursor: pointer; color: var(--ink-faint); }
.adm-cal-list .chip i:hover { color: var(--dn); }
.wc-bubble {
  position: relative; display: inline-block;
  max-width: min(78%, 620px);
  background: var(--panel);
  border-radius: 6px 16px 16px 16px;
  padding: 9px 13px;
  box-shadow: 0 1px 1px rgba(16, 24, 40, .04), 0 3px 10px rgba(16, 24, 40, .06);
  word-break: break-word; white-space: pre-wrap;
  transition: box-shadow .15s;
}
.wc-bubble:hover { box-shadow: 0 1px 1px rgba(16,24,40,.05), 0 5px 16px rgba(16,24,40,.09); }
.wc-bubble .text { font-size: 15px; line-height: 1.6; }
.wc-bubble .text a, .wc-bubble .seg-link { color: #0a66c2; word-break: break-all; }
.wc-bubble .seg-audio {
  display: block; width: min(280px, 100%); margin-top: 6px; height: 40px;
}
.wc-bubble .seg-video {
  display: block; max-width: min(320px, 100%); margin-top: 6px;
  border-radius: 12px; background: #000;
}
.wc-bubble .seg-pic {
  display: block; max-width: min(420px, 100%); height: auto; margin-top: 6px;
  border-radius: 12px; cursor: zoom-in;
}
/* 图片占位：有宽高的行内 aspect-ratio 撑高；没宽高的加载完前给一块固定的浅底，免得后到把内容顶走 */
.wc-bubble .seg-pic, .wc-bubble .pics img { background: var(--panel-2); }
.wc-bubble .seg-pic:not([data-loaded]):not([style*="aspect-ratio"]),
.wc-bubble .pics img:not([data-loaded]):not([style*="aspect-ratio"]) { width: 220px; height: 160px; object-fit: cover; }
.wc-bubble .pics { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.wc-bubble .pics img {
  max-width: min(420px, 100%); height: auto; border-radius: 12px;
  cursor: zoom-in; display: block;
}
.wc-bubble .ocr-box { margin-top: 6px; }
.wc-bubble .ocr-box pre {
  margin: 6px 0 0; padding: 8px 10px; border-radius: 10px;
  background: var(--panel-2); border: 1px solid var(--line-soft);
  font-family: var(--mono); font-size: 12px; line-height: 1.6;
  color: var(--ink-dim); white-space: pre-wrap; word-break: break-word;
}

/* ---------- 群内搜索（顶栏常驻输入框 + 下拉结果） ---------- */
.rs-inline { position: relative; flex: 1; min-width: 120px; max-width: 340px; }
.feed-head .rs-inline + .btn { margin-left: auto; }
.rs-inline .inp { padding: 7px 12px; font-size: 13.5px; background: var(--panel-2); }
.rs-panel {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0; z-index: 20;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 13px; box-shadow: var(--shadow-lg);
  padding: 10px; animation: rise .18s ease both;
  max-height: 55vh; display: flex; flex-direction: column;
}
.rs-hint { color: var(--ink-faint); font-size: 12.5px; padding: 10px 4px 4px; }
.rs-list { overflow-y: auto; margin-top: 6px; }
.rs-item {
  display: flex; align-items: baseline; gap: 9px;
  padding: 7px 8px; border-radius: 9px; cursor: pointer; font-size: 13px;
}
.rs-item:hover { background: var(--panel-2); }
.rs-time { color: var(--ink-faint); font-size: 11px; flex: none; }
.rs-sender { flex: none; font-size: 12px; font-weight: 600; max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rs-text {
  color: var(--ink-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ---------- 搜索结果 ---------- */
.sr-group {
  display: flex; align-items: center; gap: 6px;
  color: var(--ink-faint); font-size: 11.5px; font-weight: 700; letter-spacing: 1px;
  padding: 10px 10px 5px;
}
.hit-item {
  display: flex; gap: 9px; padding: 9px 10px; border-radius: 11px; cursor: pointer;
  transition: background .12s; animation: rise .25s ease both;
}
.hit-item:hover { background: var(--panel); box-shadow: var(--shadow-sm); }
.hit-av { width: 34px; height: 34px; font-size: 14px; }
.hit-main { flex: 1; min-width: 0; }
.hit-top { display: flex; align-items: baseline; gap: 7px; font-size: 12.5px; }
.hit-top b { flex: none; }
.hit-room { color: var(--ink-faint); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hit-time { margin-left: auto; color: var(--ink-faint); font-size: 11px; flex: none; }
.hit-text {
  font-size: 13px; color: var(--ink-dim); margin-top: 2px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---------- 角落通知设置 ---------- */
.corner-cog {
  position: absolute; bottom: 22px; right: 22px; z-index: 6;
  width: 40px; height: 40px; border-radius: 50%;
  background: var(--panel); border: 1px solid var(--line);
  box-shadow: var(--shadow-md); font-size: 17px;
  display: flex; align-items: center; justify-content: center;
  transition: transform .15s;
}
.corner-cog:hover { transform: scale(1.08); }
.corner-cog.muted { opacity: .55; }
.set-pop {
  position: absolute; bottom: 70px; right: 22px; z-index: 7;
  width: 220px; padding: 12px 14px;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 13px; box-shadow: var(--shadow-lg);
  animation: rise .2s ease both;
}
.set-pop.left-pop { bottom: auto; top: 38px; left: 0; z-index: 50; }
.ft.mute { opacity: .55; }
.set-title { font-size: 12.5px; font-weight: 700; color: var(--ink-faint); margin-bottom: 8px; letter-spacing: 1px; }
.set-row {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 13.5px; padding: 6px 0;
}

/* ---------- 右下角新消息弹窗 ---------- */
.notif-stack {
  position: fixed; bottom: 20px; right: 20px; z-index: 60;
  display: flex; flex-direction: column; gap: 10px; pointer-events: none;
}
.notif-card {
  pointer-events: auto;
  display: flex; gap: 10px; align-items: flex-start;
  width: 300px; padding: 11px 13px; cursor: pointer;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 13px; box-shadow: var(--shadow-lg);
  animation: notif-in .28s cubic-bezier(.2,.9,.3,1.2) both;
  transition: transform .15s;
}
.notif-card:hover { transform: translateX(-3px); }
@keyframes notif-in { from { opacity: 0; transform: translateX(60px); } }
.n-av { width: 34px; height: 34px; font-size: 14px; }
.n-main { flex: 1; min-width: 0; }
.n-x { flex: none; border: 0; background: none; color: var(--ink-faint); cursor: pointer; font-size: 14px; padding: 2px 4px; border-radius: 6px; line-height: 1; }
.n-x:hover { background: var(--panel-2); color: var(--accent-strong); }
.n-top { display: flex; align-items: baseline; gap: 6px; }
.n-top b { font-size: 13px; color: var(--accent-strong); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.n-sender { color: var(--ink-faint); font-size: 11.5px; flex: none; }
.n-text {
  font-size: 12.5px; color: var(--ink-dim); margin-top: 3px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}


/* 灯箱 */
.lightbox {
  position: fixed; inset: 0; z-index: 200; background: rgba(15, 23, 42, .88);
  display: flex; align-items: center; justify-content: center; cursor: zoom-out;
  animation: fade .18s ease; touch-action: none; overscroll-behavior: contain; user-select: none;
}
.lightbox img { max-width: 94vw; max-height: 86vh; border-radius: 6px; box-shadow: var(--shadow-lg); cursor: zoom-in; will-change: transform; }
.lightbox.zoomed { cursor: default; }
.lightbox.zoomed img { cursor: grab; }
.lightbox.zoomed img:active { cursor: grabbing; }
.lb-top { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; gap: 10px; padding: calc(10px + var(--sat, 0px)) 14px 10px; color: #fff; font-size: 13px; cursor: default; }
.lb-top .num { flex: 1; }
.lb-zoom { font-size: 11px; background: rgba(255, 255, 255, .16); padding: 2px 8px; border-radius: 999px; }
.lb-x { width: 32px; height: 32px; border-radius: 50%; border: 0; background: rgba(255, 255, 255, .16); color: #fff; font-size: 15px; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; }
.lb-x:hover { background: rgba(255, 255, 255, .3); }
.lb-arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 40px; height: 56px; border: 0; border-radius: 10px; background: rgba(255, 255, 255, .12); color: #fff; font-size: 30px; line-height: 1; cursor: pointer; }
.lb-arrow:hover { background: rgba(255, 255, 255, .26); }
.lb-arrow.l { left: 12px; } .lb-arrow.r { right: 12px; }
.lb-bot { position: absolute; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 10px 14px calc(14px + var(--sab, 0px)); cursor: default; }
.lb-dots { display: flex; gap: 6px; }
.lb-dots i { width: 7px; height: 7px; border-radius: 50%; background: rgba(255, 255, 255, .38); cursor: pointer; transition: width .15s; }
.lb-dots i.on { width: 18px; border-radius: 4px; background: #fff; }
.lb-act { color: #fff; background: rgba(255, 255, 255, .16); border-radius: 999px; padding: 6px 14px; font-size: 12.5px; text-decoration: none; }
.lb-act:hover { background: rgba(255, 255, 255, .3); }
@keyframes fade { from { opacity: 0; } }

/* ---------- AI 汇总页 ---------- */

.ai-wrap { flex: 1; overflow-y: auto; padding: 20px clamp(14px, 3vw, 34px) 60px; }
.ai-head { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 14px; }
.ai-head h2 { margin: 0; font-size: 20px; }
.ai-head h2 small { font-size: 13px; color: var(--ink-dim); font-weight: 400; margin-left: 4px; }
/* 日期导航：白底一体容器（同 8787 .date-nav） */
.ai-head .date-nav { display: flex; align-items: center; gap: 6px; background: var(--panel);
  border: 1px solid var(--line); border-radius: 10px; padding: 4px; box-shadow: var(--shadow-sm); }
.ai-head .date-nav button {
  border: 0; background: var(--panel-2); border-radius: 8px; width: 28px; height: 28px;
  cursor: pointer; color: var(--ink); font-size: 15px;
}
.ai-head .date-nav button:disabled { opacity: .3; cursor: default; }
.ai-head .date-nav button.back-today { width: auto; padding: 0 10px; font-size: 12px; color: var(--accent); }
.ai-head .date-nav input[type=date] {
  border: 0; background: transparent; font-family: var(--mono); font-size: 13.5px;
  font-weight: 600; color: var(--ink); text-align: center; outline: none; width: 118px;
}
.today-tag { font-size: 11px; color: var(--accent); background: var(--accent-soft); border-radius: 6px; padding: 1px 6px; }

/* 历史记录：容器卡片 + 日期格（同 8787 .history/.day） */
.history { background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  padding: 12px 16px; margin-bottom: 14px; box-shadow: var(--shadow-sm); }
.history .hl { font-size: 13px; color: var(--ink-dim); margin-bottom: 8px; }
.days { display: flex; gap: 8px; flex-wrap: wrap; }
.day {
  border: 1px solid var(--line); border-radius: 10px; padding: 5px 12px; font-size: 12px;
  color: var(--ink-dim); cursor: pointer; text-align: center; background: var(--panel);
  line-height: 1.4; transition: border-color .12s;
}
.day b { display: block; color: var(--ink); font-family: var(--mono); font-size: 13px;
  font-variant-numeric: tabular-nums; }
.day:hover { border-color: var(--accent); }
.day.on { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.day.on b { color: var(--accent); }
.day.empty { opacity: .55; }
.day.empty b { color: var(--ink-dim); font-weight: 400; }
.day.add { border-style: dashed; background: transparent; color: var(--accent); }
.day.more { border-style: dashed; background: transparent; color: var(--accent); font-weight: 600; }

/* 站点数据统计：数字上 / 标签下，首卡 teal（同 8787 .stats/.stat） */
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin-bottom: 14px; }
.stat { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 12px 16px;
  animation: rise .35s ease both; transition: transform .15s, box-shadow .15s; }
.stat:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.stat .n { font-size: 22px; font-weight: 700; font-family: var(--mono); font-variant-numeric: tabular-nums; }
.stat .l { color: var(--ink-dim); font-size: 12px; }
.stat.teal .n { color: var(--accent); }

/* 胶囊分段 tab（同 8787 .tabs） */
.ai-tabs { display: flex; gap: 4px; background: var(--panel); border: 1px solid var(--line);
  border-radius: 12px; padding: 4px; width: fit-content; margin-bottom: 14px; flex-wrap: wrap;
  box-shadow: var(--shadow-sm); }
.ai-tabs button {
  border-radius: 9px; padding: 7px 16px; cursor: pointer; font-size: 14px;
  color: var(--ink-dim); transition: all .15s;
}
.ai-tabs button:hover { color: var(--ink); }
.ai-tabs button.on { background: var(--accent); color: #fff; font-weight: 600; }

/* tabs 行 + 右侧筛选：同一行省一排 */
.tabbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.tabbar .ai-tabs { margin-bottom: 0; }
.tabbar .tabbar-right { margin-left: auto; }
.tabbar .inp { padding: 6px 11px; font-size: 13.5px; }   /* 与胶囊 tab 等高，不显突兀 */
.tabbar .digest-search { width: 200px; }
/* 手机端：搜索框弹性占满剩余宽度，与「全部操作」下拉挤在同一行 */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .tabbar { gap: 8px; }
  .tabbar .combo { flex: 1; min-width: 0; }
  .tabbar .combo .inp { width: 100%; }
  .tabbar select.inp { flex: none; }
  /* 胶囊 tab 允许换行平铺：5 个 tab 手机上全部可见，不再单行横滑截断 */
  .ai-tabs { flex-wrap: wrap; max-width: 100%; }
  .ai-tabs button { flex: 1 1 30%; padding: 8px 6px; font-size: 13px; white-space: nowrap; }
  /* iOS：输入框字号 ≥16px，避免聚焦时整页自动放大 */
  .inp, input[type="text"], input[type="search"], input[type="password"], textarea {
    font-size: 16px;
  }
}

/* 搜索候选里的股票：蓝紫渐变方块头像 + 代码 */
.stk-avatar {
  width: 24px; height: 24px; border-radius: 7px; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-size: 11.5px; font-weight: 700; color: #fff;
  background: linear-gradient(135deg, #2563eb, #6366f1);
}
.combo-code { color: var(--ink-faint); font-size: 11.5px; }

/* 全员战绩表容器：桌面横向滚动兜底（手机端表格转卡片后不再需要） */
.ops-card { overflow-x: auto; }
.ops-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.ops-table th {
  text-align: left; color: var(--ink-faint); font-weight: 600; font-size: 12px;
  padding: 8px 10px; border-bottom: 1px solid var(--line);
  position: sticky; top: 0; background: var(--panel); z-index: 2; white-space: nowrap;
}
.ops-table th.sortable { cursor: pointer; user-select: none; }
.ops-table th.sortable:hover { color: var(--ink-dim); }
.ops-table th.sortable.on { color: var(--accent-strong); }
.ops-table td { padding: 9px 10px; border-bottom: 1px solid var(--line-soft); vertical-align: top; }
.ops-table tbody tr:last-child td { border-bottom: none; }   /* 卡片容器自带边框，去掉末行重复线 */
.ops-table tbody tr { transition: background .1s; }
.ops-table tbody tr:hover { background: var(--panel-2); }
.ops-table .t { font-family: var(--mono); font-size: 12px; color: var(--ink-dim); white-space: nowrap; }
.ops-table .quote { color: var(--ink-dim); font-size: 12.5px; max-width: 300px; }
.ops-table .stock b { display: block; }
.ops-table .stock span { font-family: var(--mono); color: var(--ink-faint); font-size: 11.5px; }
.ops-table .pct { font-family: var(--mono); font-weight: 600; white-space: nowrap; }
.ops-table .teacher-cell { display: flex; align-items: center; gap: 8px; }
.ops-table .teacher-cell .gen-avatar { width: 26px; height: 26px; font-size: 12px; }
.ops-table .teacher-cell a.t-link { display: flex; align-items: center; gap: 8px; color: inherit; text-decoration: none; min-width: 0; }
.ops-table .teacher-cell a.t-link:hover { color: var(--accent); }

.rank-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); gap: 12px; }
.rank-card { padding: 15px 17px; animation: rise .35s ease both; transition: transform .15s, box-shadow .15s; }
.rank-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
/* 榜单卡头部：网格两行——名次 / 头像跨两行居中；第一行 名字 + 损益，第二行 操作数 + 模拟盘说明（.rk-meta） */
.rank-card .rk-head { display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; grid-template-rows: auto auto; align-items: center; column-gap: 11px; row-gap: 3px; margin-bottom: 11px; }
.rank-card .rk-head .rk-badge, .rank-card .rk-head .gen-avatar { grid-row: 1 / 3; }
.rank-card .rk-head .gen-avatar { width: 44px; height: 44px; font-size: 18px; }
.rk-badge {
  flex: none; width: 26px; height: 26px; border-radius: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--mono); font-weight: 800; font-size: 13px;
  color: #fff; background: #cbd5e1;
}
.rk-badge.g1 { background: #f59e0b; }   /* 金 */
.rk-badge.g2 { background: #94a3b8; }   /* 银 */
.rk-badge.g3 { background: #b45309; }   /* 铜 */
.hot-teachers { color: var(--ink-dim); font-size: 12px; max-width: 260px; }
.rank-card .rk-head b { font-size: 15px; }
.rank-card .score { text-align: right; white-space: nowrap; }
.rank-card .score .v { font-size: 19px; font-weight: 800; }
.rank-card .rk-meta { grid-column: 3 / -1; min-width: 0; display: flex; flex-wrap: wrap; justify-content: space-between; gap: 2px 12px; font-size: 11.5px; color: var(--ink-faint); }
.rank-card .rk-meta span { white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.rank-kv { display: flex; flex-wrap: wrap; gap: 6px 14px; color: var(--ink-dim); font-size: 12.5px; margin-bottom: 9px; }
.rank-kv b { color: var(--ink); font-family: var(--mono); }
.stock-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.stk {
  font-size: 12px; font-family: var(--mono); white-space: nowrap;
  background: #f1f5f9; border: 1px solid #cbd5e1; color: #475569;
  border-radius: 6px; padding: 2px 8px;
}
.stk.pos { background: #fef2f2; border-color: #fecaca; color: #b91c1c; }   /* 涨：红（A股） */
.stk.neg { background: #f0fdf4; border-color: #bbf7d0; color: #15803d; }   /* 跌：绿 */
.stk.more { background: none; border: none; color: var(--ink-faint); font-family: var(--sans); }
.stk b { font-weight: 700; }
.modlinks { margin-top: 9px; display: flex; gap: 10px; }
.modlink { font-size: 12px; color: var(--accent); cursor: pointer; text-decoration: underline; }
.modlink:hover { color: var(--accent-strong); }

/* 战绩榜：点头像/名字进直播间 + 股票芯片点开后的操作明细 */
.rank-card .rk-name { min-width: 0; }
.rank-card .jump { cursor: pointer; }
.rank-card .rk-name.jump:hover b { color: var(--accent-strong); text-decoration: underline; }
.rank-card .gen-avatar.jump:hover { box-shadow: 0 0 0 2.5px var(--accent); }
.rank-card .stock-chips .stk { cursor: pointer; transition: border-color .12s, background .12s; }
.rank-card .stock-chips .stk:hover { border-color: var(--accent); }
.rank-card .stock-chips .stk.on {
  border-color: var(--accent); background: var(--accent-soft);
  color: var(--accent-strong); box-shadow: inset 0 0 0 1px var(--accent);
}
.rank-card .stock-chips .stk.on b { color: inherit; }
.rank-card .stock-chips .stk.more { cursor: default; }
.rank-ops { margin-top: 9px; border: 1px dashed var(--line); border-radius: 10px;
            background: var(--panel-2); padding: 8px 10px 9px; overflow-x: auto; }
.rank-ops .ro-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 3px; flex-wrap: wrap; }
.rank-ops .ro-head b { font-size: 13.5px; }
.rank-ops .ro-head .code { font-size: 11.5px; color: var(--ink-faint); }
.rank-ops .ro-head .ro-hint { margin-left: auto; font-size: 11px; color: var(--ink-faint); }
.rank-ops .ro-table th { padding: 5px 8px; font-size: 11px; }
.rank-ops .ro-table td { padding: 4.5px 8px; }
.rank-ops .ro-table { width: max(100%, 400px); }   /* 窄卡片下表格横向滚动，而不是把列压扁 */
.rank-ops .ro-table .quote { max-width: none; font-size: 12px; }

/* 热门股票榜：卡片列表 + 点击展开分析师原话 */
.hot-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.ft-group { display: flex; gap: 6px; }
.hot-meta { font-size: 12.5px; color: var(--ink-faint); }
.hot-search { width: 200px; margin-left: auto; padding: 6px 11px; font-size: 13px; }

.hot-list { display: flex; flex-direction: column; gap: 10px; }
.hot-card { padding: 0; overflow: hidden; animation: rise .35s ease both; transition: box-shadow .15s; }
.hot-card:hover { box-shadow: var(--shadow-md); }
.hot-head { display: flex; align-items: center; gap: 12px; padding: 12px 16px 7px; cursor: pointer; user-select: none; }
.hot-head:hover .hot-name b { color: var(--accent-strong); }
.hot-name { flex: none; }
.hot-name b { font-size: 16px; display: block; line-height: 1.25; }
.hot-name span { font-size: 11.5px; color: var(--ink-faint); letter-spacing: .3px; }
.hot-metrics { margin-left: auto; display: flex; gap: 22px; align-items: center; flex-wrap: wrap; }
.hm { text-align: right; }
.hm b { display: block; font-size: 14.5px; line-height: 1.3; white-space: nowrap; }
.hm .mslash { color: var(--ink-faint); font-weight: 400; }
.hm > span { font-size: 11px; color: var(--ink-faint); white-space: nowrap; }
.hot-arrow { flex: none; color: var(--ink-faint); font-size: 13px; transition: transform .18s, color .18s; }
.hot-card.open .hot-arrow { transform: rotate(90deg); color: var(--accent); }

.hot-teachers-row { display: flex; flex-wrap: wrap; gap: 5px; padding: 0 16px 12px 54px; }
.ht-chip {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 12px; color: var(--ink-dim); line-height: 1.9;
  background: var(--raise); border: 1px solid var(--line-soft);
  border-radius: 999px; padding: 1px 10px 1px 3px;
  max-width: 190px; white-space: nowrap; overflow: hidden;
}
.ht-chip .gen-avatar { width: 18px; height: 18px; font-size: 9.5px; flex: none; }
.ht-chip b { color: var(--ink-faint); font-weight: 600; font-size: 11px; }

.hot-detail { border-top: 1px dashed var(--line); background: var(--panel-2); padding: 11px 16px 14px 54px; }
.hd-loading { color: var(--ink-faint); font-size: 13px; padding: 8px 0; display: flex; align-items: center; gap: 8px; }
.hd-group { padding: 7px 0; }
.hd-group + .hd-group { border-top: 1px solid var(--line-soft); }
.hd-teacher { display: flex; align-items: center; gap: 7px; margin-bottom: 4px; }
.hd-teacher .gen-avatar { width: 22px; height: 22px; font-size: 10.5px; }
.hd-teacher b { font-size: 13px; }
.hd-teacher .cnt { font-size: 11px; color: var(--ink-faint); }
.hd-quote { display: flex; align-items: baseline; gap: 8px; padding: 2.5px 0; font-size: 12.5px; }
.hd-quote .chip { flex: none; font-size: 11px; padding: 0 8px; }
.hd-quote .when { flex: none; font-size: 11px; color: var(--ink-faint); }
.hd-quote .q { color: var(--ink-dim); }
.hd-quote .q em { font-style: normal; color: var(--ink-faint); font-size: 11px; }
.qjump { cursor: pointer; }
.qjump:hover { color: var(--ink); text-decoration: underline dotted; text-underline-offset: 3px; }

.hot-more { margin: 4px auto 0; display: flex; }
.hot-empty { padding: 40px 16px; text-align: center; }

/* 概念榜：展开的成分股行（hd-* 原话明细样式与热门榜共用） */
.cpt-stocks { border-top: 1px dashed var(--line); background: var(--panel-2); padding: 8px 16px 12px 54px; }
.cpt-stock { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 10px; cursor: pointer; user-select: none; }
.cpt-stock:hover { background: var(--raise); }
.cpt-stock b { font-size: 13.5px; }
.cpt-stock .code { font-size: 11.5px; color: var(--ink-faint); }
.cpt-stock .cs-meta { flex: 1; font-size: 11.5px; color: var(--ink-dim); text-align: right; white-space: nowrap; }
.cpt-stock .hot-arrow { font-size: 11px; }
.cpt-quotes { margin-top: 6px; border-top: 1px solid var(--line-soft); }

/* 速览 / 复盘：直显网格卡片 */
.digest-hint { color: var(--ink-faint); font-size: 12.5px; margin-bottom: 12px; }
.digest-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); gap: 14px; }
.digest-grid.single { grid-template-columns: 1fr; }
.digest-card { overflow: hidden; animation: rise .35s ease both; }
.digest-card .dg-head {
  display: flex; align-items: center; gap: 10px;
  padding: 11px 14px; border-bottom: 1px solid var(--line); background: var(--panel-2);
}
.digest-card .dg-head .gen-avatar { width: 34px; height: 34px; font-size: 14px; }
.digest-card .dg-head b { font-size: 14px; }
.digest-card .dg-head .sub { font-size: 11px; color: var(--ink-faint); font-family: var(--mono); }
.digest-card .dg-head .chip { margin-left: auto; }
.dg-body { position: relative; }
.dg-loading {
  position: absolute; inset: 0; height: 360px;
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-faint); font-size: 13px;
  background: linear-gradient(100deg, var(--panel-2) 40%, #eef3f8 50%, var(--panel-2) 60%);
  background-size: 200% 100%; animation: shimmer 1.4s infinite linear;
}
.digest-card iframe { width: 100%; height: 360px; border: none; display: block; background: #fff; position: relative; }
.digest-empty { grid-column: 1 / -1; }
.digest-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.digest-toolbar .digest-search { width: 200px; }
.dg-toggle { cursor: pointer; user-select: none; }
.dg-toggle:hover { background: var(--line); }
.digest-card.closed .dg-head { border-bottom: none; }
.dg-arrow { color: var(--ink-faint); font-size: 12px; margin-left: 6px; }
.dg-mods { display: flex; gap: 4px; margin-left: auto; flex: none; }
.dg-mod {
  border: 1px solid var(--line); background: var(--panel); color: var(--ink-faint);
  font-size: 11.5px; padding: 3px 10px; border-radius: 999px; cursor: pointer;
  flex: none; white-space: nowrap; line-height: 1.4;
}
.dg-mod.on { background: var(--accent, #2f6fed); border-color: var(--accent, #2f6fed); color: #fff; }
.dg-mod:disabled { opacity: .35; cursor: not-allowed; }

/* ---------- 设置 / 管理 ---------- */
.simple-wrap { flex: 1; overflow-y: auto; padding: 26px clamp(14px, 4vw, 40px); }
.simple-wrap .inner { max-width: 640px; margin: 0 auto; display: flex; flex-direction: column; gap: 18px; }
.simple-wrap .inner.wide { max-width: 1080px; }   /* 管理页：成员表 7 列需要更宽容器 */
.blk { padding: 18px 20px; }
.blk h3 { margin: 0 0 4px; font-size: 15.5px; }
.blk .hint { color: var(--ink-faint); font-size: 12.5px; margin-bottom: 14px; }
.form-grid { display: grid; grid-template-columns: 110px 1fr; gap: 11px 14px; align-items: center; }
.form-grid label { color: var(--ink-dim); font-size: 13.5px; }
.form-actions { display: flex; gap: 9px; margin-top: 16px; align-items: center; }
.switch { position: relative; width: 42px; height: 24px; flex: none; cursor: pointer; }
.switch input { opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.switch i {
  position: absolute; inset: 0; border-radius: 999px; background: var(--line);
  border: 1px solid var(--line); transition: background .15s; pointer-events: none;
}
.switch i::after {
  content: ""; position: absolute; top: 2.5px; left: 3px; width: 17px; height: 17px;
  border-radius: 50%; background: #fff; box-shadow: var(--shadow-sm); transition: all .15s;
}
.switch input:checked + i { background: var(--accent); border-color: var(--accent-strong); }
.switch input:checked + i::after { left: 21px; }

.user-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.user-table th { text-align: left; color: var(--ink-faint); font-weight: 600; font-size: 12px; padding: 7px 10px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.user-table td { padding: 9px 10px; border-bottom: 1px solid var(--line-soft); white-space: nowrap; }
.user-table td.ts { font-size: 12px; color: var(--ink-faint); white-space: nowrap; }
.user-table td.wrap { white-space: normal; min-width: 120px; }   /* 日志详情列：允许换行 */
.user-table td.note-cell { max-width: 160px; overflow: hidden; text-overflow: ellipsis;
                           color: var(--ink-faint); }   /* 备注列：超长省略，悬停看全文 */
/* 不能对 td 用 display:flex：td 脱离 table-cell 后不随行高拉伸，底线会错位断开 */
.user-table td.acts { text-align: right; }
.user-table td.acts > * + * { margin-left: 6px; }
.table-scroll { overflow-x: auto; }
.tag-admin { color: var(--accent); font-weight: 600; }
.tag-off { color: var(--ink-faint); }

/* ---------- 移动端 ---------- */

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .topbar .nav { display: none; }
  .feed-head .hamburger { display: inline-flex; }
  .topbar .who { display: none; }
  .topbar .mnav-btn { display: inline-flex; }
  .mnav-backdrop {
    display: block; position: fixed; inset: 0; z-index: 48;
    background: rgba(15, 23, 42, .35);
  }
  .mnav-sheet {
    display: flex; flex-direction: column; position: fixed; z-index: 49;
    top: auto; right: 8px;   /* 贴着「更多」按钮上方弹出，手指不用挪位 */
    bottom: calc(8px + 62px + var(--sab));
    min-width: 150px; padding: 6px; gap: 2px;
    background: var(--panel); border: 1px solid var(--line); border-radius: 12px;
    box-shadow: var(--shadow-lg); animation: rise .18s ease both;
  }
  .mnav-sheet a {
    padding: 9px 14px; border-radius: 8px; color: var(--ink-dim);
    font-size: 14px; font-weight: 500; text-decoration: none;
  }
  .mnav-sheet a.on { color: var(--accent); background: var(--accent-soft); font-weight: 600; }
  .chat-body { position: relative; }
  .rooms-pane {
    position: absolute; inset: 0; z-index: 40; width: 100%;
    background: var(--bg);
    transform: translateX(-102%); transition: transform .22s ease;
    border-right: none;
  }
  .rooms-pane.open { transform: none; box-shadow: var(--shadow-lg); }
  .rooms-backdrop { position: absolute; inset: 0; z-index: 39; background: var(--overlay); }
  /* 手机端房间条目：微信式排版（头像 44 / 群名单行截断 / 副行状态+条数 / 右侧时间+未读），
     操作收进长按菜单，无常驻按钮 */
  .room-item { padding: 11px 12px; -webkit-touch-callout: none; user-select: none; }
  .room-item .ravatar { width: 44px; height: 44px; font-size: 17px; }
  .room-item .rtitle {
    display: block; -webkit-box-orient: initial; -webkit-line-clamp: unset;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    font-size: 15px; word-break: keep-all;
  }
  .room-item .racts { display: none; }
  .room-item .rstate { display: inline-flex; gap: 3px; align-items: center; font-size: 12px; }
  .room-item .rsub { gap: 6px; }
  .wc-bubble .text { font-size: 15px; line-height: 1.55; }   /* 17→15：一屏多看约 40% 内容（第 3 批 B · U23） */
  .wc-bubble .pics img { max-width: 52vw; }
  .notif-stack { right: 12px; bottom: 12px; }
  .notif-card { width: calc(100vw - 80px); }
  .ops-table .quote { max-width: 150px; }
  .topbar { padding: 0 10px; }
  .digest-grid { grid-template-columns: 1fr; }
  .form-grid { grid-template-columns: 1fr; gap: 6px 14px; }
  /* 热门榜：指标组换行铺满、展开区取消左缩进 */
  .hot-search { width: 100%; margin-left: 0; order: 9; }
  .hot-head { flex-wrap: wrap; gap: 8px 10px; padding: 11px 13px 6px; }
  .hot-metrics { margin-left: 0; width: 100%; justify-content: space-between; gap: 6px; }
  .hm { text-align: left; }
  .hot-teachers-row, .hot-detail, .cpt-stocks { padding-left: 13px; }
  .cpt-stock .cs-meta { white-space: normal; }
}

.fade-enter-active { transition: opacity .18s ease; }
.fade-enter-from { opacity: 0; }


/* ---- 群内 AI 分析弹层 ---- */
.ai-btn.on { background: var(--accent-soft); color: var(--accent-strong); border-color: var(--accent); }
.ai-pop {
  position: absolute; right: 16px; bottom: 16px; z-index: 60;
  width: min(560px, calc(100% - 32px)); max-height: min(72vh, 760px);
  display: flex; flex-direction: column; overflow: hidden;
  box-shadow: var(--shadow-lg, 0 12px 32px rgba(15, 23, 42, .18));
  animation: rise .25s ease both;
}
.ai-pop-head {
  display: flex; align-items: center; gap: 10px; padding: 10px 12px;
  border-bottom: 1px solid var(--line); background: var(--panel-2); flex: none;
}
.ai-pop-head .gen-avatar { width: 32px; height: 32px; font-size: 13px; }
.ai-pop-title b { font-size: 14px; }
.ai-pop-title .sub { font-size: 11px; color: var(--ink-faint); max-width: 180px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ai-pop-head .dg-mods { margin-left: auto; }
.ai-pop-close {
  flex: none; border: none; background: none; cursor: pointer; padding: 4px 6px;
  color: var(--ink-faint); font-size: 13px; border-radius: 6px; line-height: 1;
}
.ai-pop-close:hover { background: var(--line); color: var(--ink); }
.ai-pop-body { overflow-y: auto; padding-bottom: 10px; flex: 1; min-height: 0; }
.ai-pop-body iframe { width: 100%; height: 360px; border: none; display: block; background: #fff; position: relative; }
.ai-pop-loading { min-height: 360px; height: auto; }
.ai-gen-state {   /* 按需生成：无内容时的等待/按钮态 */
  min-height: 300px; display: flex; flex-direction: column; gap: 10px;
  align-items: center; justify-content: center; color: var(--ink-faint); font-size: 13.5px;
}
.ai-gen-state .spin { width: 18px; height: 18px; }
.rail-card .empty .spin { display: inline-block; width: 16px; height: 16px; vertical-align: -3px; }
@media (max-width: 720px) {
  .ai-pop { right: 8px; left: 8px; bottom: 8px; width: auto; max-height: 70vh; }
  .ai-pop-title .sub { max-width: 90px; }
}

/* ---- 研报库 ---- */
.rp-wrap { flex: 1; display: flex; gap: 16px; min-height: 0; padding: 18px clamp(12px, 3vw, 34px) 40px; }
.rp-side { flex: none; width: 216px; background: var(--panel); border: 1px solid var(--line);
  border-radius: 14px; padding: 10px; align-self: flex-start;
  box-shadow: var(--shadow-sm); position: sticky; top: 14px; max-height: calc(100vh - 96px); overflow-y: auto; }
.rp-side-h { font-size: 13px; color: var(--ink-dim); padding: 4px 8px 10px; }
.rp-cat { display: flex; align-items: center; gap: 8px; padding: 9px 10px; border-radius: 9px;
  cursor: pointer; color: var(--ink); transition: background .12s; }
.rp-cat:hover { background: var(--raise); }
.rp-cat.on { background: var(--accent-soft); color: var(--accent-strong); font-weight: 600;
  box-shadow: inset 0 0 0 1px var(--accent); }
.rp-cat-name { flex: 1; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rp-cat-n { flex: none; font-size: 11px; color: var(--ink-dim); background: var(--raise);
  border-radius: 99px; padding: 1px 8px; }
.rp-cat.on .rp-cat-n { color: var(--accent); background: #fff; }

.rp-main { flex: 1; min-width: 0; }
.rp-list { background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
  overflow: hidden; box-shadow: var(--shadow-sm); }
.rp-row { display: flex; align-items: center; gap: 10px; padding: 10px 14px; cursor: pointer;
  border-bottom: 1px solid var(--line-soft); transition: background .12s; }
.rp-item:last-child .rp-row { border-bottom: none; }
.rp-item:last-child .rp-md-inline { border-bottom: none; }
.rp-row:hover { background: var(--panel-2); }
.rp-row.open { background: var(--accent-soft); }
.rp-row.open .rp-name { color: var(--accent-strong); font-weight: 600; }
.rp-thumb { flex: none; width: 46px; height: 46px; object-fit: cover; border-radius: 8px;
  border: 1px solid var(--line); background: var(--raise); }
.rp-act { flex: none; font-size: 11px; color: var(--ink-faint); white-space: nowrap; }
.rp-time { flex: none; font-size: 12px; color: var(--ink-faint); white-space: nowrap; }
.rp-name { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.rp-size { flex: none; font-size: 12px; color: var(--ink-faint); width: 62px; text-align: right; }
.rp-dl { flex: none; font-size: 12px; color: var(--ink-dim); padding: 3px 10px; border-radius: 7px;
  border: 1px solid var(--line); background: var(--panel); }
.rp-dl:hover { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); }
.rp-more { text-align: center; padding: 12px; color: var(--accent); font-size: 13px;
  cursor: pointer; background: var(--panel-2); }
.rp-more:hover { background: var(--accent-soft); }

/* 类型标签：图文 teal / PDF 红 / 音频蓝 / 图片紫 / 其他灰 */
.rp-kind { flex: none; font-size: 11px; line-height: 1; padding: 4px 8px; border-radius: 6px;
  background: var(--raise); color: var(--ink-dim); font-weight: 600; }
.k-md { background: var(--accent-soft); color: var(--accent); }
.k-pdf { background: var(--up-soft); color: var(--up); }
.k-audio { background: #eff6ff; color: var(--blue); }
.k-img { background: #f5f3ff; color: #7c3aed; }

/* 预览弹层（大图 / 音频） */
.rp-viewer { position: fixed; inset: 0; z-index: 200; background: rgba(15, 23, 42, .5);
  backdrop-filter: blur(3px); display: flex; flex-direction: column; animation: fade .18s ease both; }
.rp-vhead { display: flex; align-items: center; gap: 10px; padding: 10px 16px;
  background: var(--panel); border-bottom: 1px solid var(--line); box-shadow: var(--shadow-md); }
.rp-vtitle { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.rp-vbody { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; }
.rp-vbody img { margin: auto; max-width: min(92vw, 1000px); max-height: 100%; object-fit: contain;
  cursor: zoom-out; }
.rp-audio { margin: auto; padding: 30px; display: flex; flex-direction: column; gap: 14px;
  align-items: center; }
.rp-audio-name { font-size: 14px; color: var(--ink); max-width: 80vw; text-align: center; }
.rp-audio audio { width: min(86vw, 560px); }

/* 图文 md 行内展开正文 */
.rp-md-inline { border-bottom: 1px solid var(--line-soft); background: var(--panel-2); }
.rp-md-load { padding: 22px; color: var(--ink-dim); font-size: 13px;
  display: flex; align-items: center; gap: 8px; }
.rp-md { max-height: 62vh; overflow-y: auto; padding: 14px clamp(14px, 3vw, 30px) 18px;
  background: var(--panel); border-top: 1px dashed var(--line); }
.rp-md-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px clamp(14px, 3vw, 30px); background: var(--panel-2); }
.rp-md-up { font-size: 12px; color: var(--ink-dim); padding: 3px 10px; border-radius: 7px;
  border: 1px solid var(--line); background: var(--panel); cursor: pointer; }
.rp-md-up:hover { color: var(--accent); border-color: var(--accent); }
.rp-md h2, .rp-md h3, .rp-md h4, .rp-md h5 { margin: 1.4em 0 .5em; line-height: 1.35; }
.rp-md h2 { font-size: 19px; padding-bottom: .3em; border-bottom: 1px solid var(--line-soft); }
.rp-md h3 { font-size: 16px; } .rp-md h4 { font-size: 15px; } .rp-md h5 { font-size: 14px; }
.rp-md p { margin: .6em 0; }
.rp-md p.rp-lead { font-weight: 600; line-height: 1.7; }   /* 由超长标题降级来的首段 */
@media (max-width: 860px) { .rp-md { font-size: 14px; line-height: 1.75; } .rp-md h2 { font-size: 17px; } .rp-md h3 { font-size: 15.5px; } }
.rp-md .rp-ts { margin: .4em 0; color: var(--ink-dim); font-size: 13px; }   /* 时间戳转出的北京时间行 */
.rp-md ul, .rp-md ol { margin: .5em 0; padding-left: 1.6em; }
.rp-md li { margin: .25em 0; }
.rp-md blockquote { margin: .8em 0; padding: .5em 1em; border-left: 3px solid var(--accent);
  background: var(--accent-soft); border-radius: 0 8px 8px 0; color: var(--ink); }
.rp-md code { font-family: var(--mono); font-size: .88em; background: var(--raise);
  border-radius: 5px; padding: .15em .4em; }
.rp-md pre { background: #0f172a; color: #e2e8f0; border-radius: 10px; padding: 14px 16px;
  overflow-x: auto; font-size: 13px; line-height: 1.6; }
.rp-md pre code { background: none; color: inherit; padding: 0; }
.rp-md hr { border: none; border-top: 1px solid var(--line); margin: 1.4em 0; }
.rp-md a[data-rpfile] { color: var(--accent); }
.rp-md a[data-rpfile]:hover { text-decoration: underline; }

/* 飞书在线（未入库）条目 */
.day-onl { display: inline-block; margin-left: 4px; padding: 0 5px; border-radius: 6px;
  font-size: 10px; font-style: normal; color: var(--accent-strong);
  background: var(--accent-soft); border: 1px solid var(--accent); line-height: 16px; }
.day.on .day-onl { background: #fff; }
.rp-online { margin: 0 0 14px; background: var(--panel); border: 1px solid var(--line);
  border-radius: 12px; overflow: hidden; }
.rp-onl-h { padding: 10px 14px; font-size: 13px; font-weight: 600; color: var(--accent-strong);
  background: var(--accent-soft); border-bottom: 1px solid var(--line); }
.rp-onl-h small { font-weight: 400; color: var(--ink-dim); margin-left: 8px; }
.rp-onl-row { display: flex; align-items: center; gap: 10px; padding: 8px 14px;
  border-bottom: 1px solid var(--line-soft); }
.rp-onl-row:last-child { border-bottom: none; }
.rp-onl-row .rp-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; font-size: 14px; }
.rp-onl-assets { flex: none; font-size: 11px; color: var(--ink-dim); }

@media (max-width: 760px) {
  .rp-wrap { flex-direction: column; padding: 12px 12px 30px; }
  .rp-side { position: static; width: 100%; max-height: none; display: flex; gap: 6px;
    overflow-x: auto; padding: 8px; -webkit-overflow-scrolling: touch; }
  .rp-side-h { display: none; }
  .rp-cat { flex: none; gap: 4px; padding: 7px 12px; border: 1px solid var(--line);
    border-radius: 999px; align-items: center; flex-direction: row; }
  .rp-cat.on { border-color: rgba(15, 118, 110, .45); }
  /* 分类名完整显示：胶囊横滑，不再 96px 截断 */
  .rp-cat-name { max-width: none; font-size: 12.5px; white-space: nowrap; }
  .rp-cat-n { font-size: 10px; }
  .rp-size { display: none; }
  .rp-md { max-height: none; }   /* 手机上不限高，跟随页面滚动 */
  .rp-onl-assets { display: none; }
}

/* ---------- 管理后台控制台（侧栏 + 内容区） ---------- */
.admin-wrap { flex: 1; display: flex; min-height: 0; }
.admin-side {
  flex: none; width: 212px; padding: 16px 12px; display: flex; flex-direction: column; gap: 4px;
  border-right: 1px solid var(--line); background: var(--glass-soft);
}
.admin-side .grow { flex: 1; }
.admin-brand { font-weight: 700; font-size: 15px; padding: 4px 12px 14px; color: var(--ink); }
.admin-nav {
  display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-radius: 10px;
  color: var(--ink-dim); cursor: pointer; font-size: 14px; user-select: none; white-space: nowrap;
}
.admin-nav:hover { background: var(--raise); color: var(--ink); }
.admin-nav.on { background: var(--accent-soft); color: var(--accent-strong); font-weight: 600; }
.admin-main { flex: 1; overflow-y: auto; padding: 22px clamp(14px, 3vw, 34px); min-width: 0; }
.admin-main .card { margin-bottom: 18px; max-width: 1080px; }

/* 会员等级徽章 */
.lv-badge {
  display: inline-block; padding: 2px 11px; border-radius: 999px; font-size: 13px; font-weight: 600;
}
.lv-badge.lv-normal { background: var(--raise); color: var(--ink-dim); border: 1px solid var(--line); }
.lv-badge.lv-vip { background: #fef3c7; color: #b45309; border: 1px solid #fde68a; }
.lv-badge.lv-svip {
  background: linear-gradient(135deg, #fee2e2, #fef3c7); color: #b91c1c; border: 1px solid #fecaca;
}
.lv-badge.lv-admin { background: var(--accent-soft); color: var(--accent); border: 1px solid var(--line); }

/* 开通市场徽章（成员表 / 卡片 / 抽屉）：A股 暖红、美股 蓝；并排时紧挨着 */
.mk-badge { display: inline-block; padding: 1px 7px; border-radius: 6px; font-size: 11px; font-weight: 600; letter-spacing: .02em; line-height: 1.5; }
.mk-badge.mk-cn { background: #fdecea; color: #b3412b; border: 1px solid #f7c9c0; }
.mk-badge.mk-us { background: #e6eefb; color: #2f5db3; border: 1px solid #c6d6f3; }
.mk-badge.mk-any { background: var(--raise); color: var(--ink-dim); border: 1px solid var(--line); }
.mk-badge + .mk-badge { margin-left: 3px; }
html[data-theme="dark"] .mk-badge.mk-cn { background: rgba(240, 154, 134, .14); color: #f0a08c; border-color: rgba(240, 154, 134, .35); }
html[data-theme="dark"] .mk-badge.mk-us { background: rgba(143, 176, 240, .14); color: #9fbcf2; border-color: rgba(143, 176, 240, .35); }
.mk-sel { padding: 5px 26px 5px 9px; font-size: 12.5px; width: auto; }
.adm-users th.c-mk { width: 11%; }

/* 成员表：等级下拉 / 到期编辑 */
.lvl-sel { padding: 5px 26px 5px 9px; font-size: 12.5px; width: auto; }
.exp-warn { color: var(--up); font-weight: 600; }
.exp-edit { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; }
.exp-edit .inp { padding: 4px 8px; font-size: 12.5px; width: 136px; }

/* 等级权限卡片 */
.perm-row { display: flex; flex-wrap: wrap; gap: 8px 20px; padding: 8px 0 4px; }
.perm-item { display: inline-flex; gap: 7px; align-items: center; font-size: 14px; cursor: pointer; }
.room-cfg { display: flex; gap: 22px; padding: 10px 0 2px; }
.room-cfg label { display: inline-flex; gap: 7px; align-items: center; cursor: pointer; font-size: 14px; }
.room-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.room-chip {
  display: inline-flex; align-items: center; gap: 6px; background: var(--panel-2);
  border: 1px solid var(--line); border-radius: 999px; padding: 3px 11px; font-size: 12.5px;
}
.room-chip i { font-style: normal; color: var(--ink-faint); cursor: pointer; }
.room-chip i:hover { color: var(--up); }
.room-cand {
  margin-top: 8px; max-height: 224px; overflow-y: auto; border: 1px solid var(--line-soft);
  border-radius: 10px; padding: 6px; display: flex; flex-direction: column; gap: 2px; background: var(--panel-2);
}
.room-cand .cand {
  display: flex; gap: 9px; align-items: center; padding: 6px 9px; border-radius: 8px;
  font-size: 13.5px; cursor: pointer;
}
.room-cand .cand:hover { background: var(--raise); }
.room-cand .cand.off { opacity: .38; pointer-events: none; }

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .admin-wrap { flex-direction: column; }
  .admin-side {
    width: auto; flex-direction: row; align-items: center; overflow-x: auto;
    border-right: none; border-bottom: 1px solid var(--line); padding: 8px 10px;
    gap: 2px; scrollbar-width: none; position: sticky; top: 0; z-index: 20; background: var(--bg, #fff);   /* 手机没有顶栏，贴顶 */
  }
  .admin-brand { flex: none; white-space: nowrap; padding: 2px 10px 2px 2px; }
  .admin-nav { padding: 7px 10px; font-size: 13px; flex: none; }
  .admin-side .grow { display: none; }
  .admin-main { padding: 14px 12px 30px; }
  /* 成员表：手机隐藏低优先级列，缩短横向滚动距离 */
  .user-table .c-when { display: none; }
  .table-scroll { scrollbar-width: thin; }
  .admin-scroll-hint { display: block; color: var(--ink-faint); font-size: 11.5px; margin: 0 0 4px; }
  .admin-toolbar > .inp:first-child { width: 100% !important; }
  .form-grid label:has(+ input[type="date"]) ~ div { flex-wrap: wrap; }
}
.admin-scroll-hint { display: none; }

/* 成员列表工具栏（搜索 + 等级筛选） */
.admin-toolbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 8px 0 12px; }

/* 成员管理：标题行 + KPI + 表格卡 */
.adm-head { display: flex; align-items: center; gap: 12px; margin: 0 0 14px; max-width: 1080px; }
.adm-head h3 { margin: 0; font-size: 17px; }
.adm-head .hint { flex: 1; min-width: 0; }
.adm-kpis { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; max-width: 1080px; }
.adm-kpis .sk-stat { padding: 10px 14px; }
.adm-kpis .sk-stat b { display: block; font-size: 22px; margin: 2px 0; }
.adm-kpis .sk-stat small:last-child { color: var(--ink-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adm-kpis .sk-stat.warn b { color: var(--amber); }
.adm-kpis .sk-stat.act b { color: var(--up); }
.adm-pager { display: flex; align-items: center; justify-content: center; gap: 14px; padding: 10px 4px 2px; }
.adm-kpis.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }   /* 待办页顶部三张卡（手机沿用 adm-kpis 缩水样式，仍一行） */
.adm-kpis.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }      /* 收款页顶部两张卡 */
.adm-tbl { padding: 0; overflow: hidden; }
.adm-tbl .admin-toolbar { margin: 0; padding: 12px 14px; border-bottom: 1px solid var(--line-soft); }
.adm-tbl .admin-toolbar > .inp:first-child { width: 240px; }
.adm-filters { display: inline-flex; gap: 2px; }
.adm-filters span { padding: 4px 10px; border-radius: 999px; font-size: 12px; color: var(--ink-dim); cursor: pointer; white-space: nowrap; }
.adm-filters span:hover { background: var(--raise); }
.adm-filters span.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.adm-users th { background: var(--panel-2); padding: 8px 14px; }
.adm-users td { padding: 9px 14px; }
.adm-users tr.soon td { background: color-mix(in srgb, var(--amber) 7%, transparent); }
.adm-users .who b { display: block; font-size: 13.5px; }
.adm-users .who small { color: var(--ink-faint); font-size: 12px; }
/* 成员表 6 列固定宽（第 3 批 B · U19）：标签 / 设备 / IP / 来源 / 备注并进成员副标题，续期动作并进到期列，操作收成一个 ⋯ 菜单，1180px 内不横滚 */
.adm-users { table-layout: fixed; }
.adm-users th.c-sel, .adm-users td.c-sel { width: 34px; }
.adm-users th.c-lv { width: 12%; } .adm-users th.c-st { width: 11%; } .adm-users th.c-exp { width: 15%; } .adm-users th.c-when { width: 13%; } .adm-users th.c-act { width: 60px; }
.adm-users td.c-who { white-space: normal; }
.adm-users .who b { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.adm-users .who .adm-tag { font-weight: 400; }
.adm-users .who-sub { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.exp-cell { display: flex; flex-direction: column; gap: 2px; }
.exp-acts { display: flex; gap: 8px; font-size: 12px; }
.exp-acts a { cursor: pointer; color: var(--accent); }
.exp-acts a.on { font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
.adm-more { position: relative; display: inline-flex; }
.adm-users td.acts { vertical-align: middle; }
.adm-more .btn.on { background: var(--accent-soft); color: var(--accent); }
.adm-menu {
  position: fixed; z-index: 65; width: 160px; padding: 6px; font-size: 13px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px; box-shadow: var(--shadow-lg);
}
.adm-menu div { padding: 7px 10px; border-radius: 7px; cursor: pointer; white-space: nowrap; }
.adm-menu div:hover { background: var(--raise); }
.adm-menu div.danger { color: var(--up); }
.adm-menu .sep { height: 1px; padding: 0; margin: 4px 6px; background: var(--line-soft); cursor: default; }
.adm-menu .sep:hover { background: var(--line-soft); }

/* 添加成员：桌面右侧抽屉（手机时套 msheet 变底部弹层） */
.adm-drawer {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 71; width: min(380px, 100vw);
  background: var(--panel); border-left: 1px solid var(--line); box-shadow: var(--shadow-lg);
  padding: 18px 20px; display: flex; flex-direction: column; gap: 8px; overflow-y: auto;
  animation: drawer-in .22s cubic-bezier(.2, .8, .2, 1) both;
}
@keyframes drawer-in { from { transform: translateX(40px); opacity: 0; } }
.adm-drawer.msheet { top: auto; width: auto; border-left: none; padding: 8px 16px calc(14px + var(--sab)); animation: sheet-up .22s cubic-bezier(.2, .8, .2, 1) both; }
.adm-drawer-h { display: flex; align-items: center; justify-content: space-between; }
.adm-drawer-h h3 { margin: 0; font-size: 16px; }
.adm-drawer > .hint { margin-bottom: 6px; }
.adm-drawer > label { font-size: 12.5px; color: var(--ink-dim); margin-top: 4px; }
.adm-drawer .seg { max-width: 300px; }
.adm-drawer-f { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; }

/* 手机：成员卡片 + 底部操作面板 */
.adm-cards { display: flex; flex-direction: column; gap: 8px; padding: 10px 10px 12px; }
.adm-ucard { background: var(--panel-2); border: 1px solid var(--line-soft); border-radius: 12px; padding: 10px 12px; display: flex; flex-direction: column; gap: 4px; cursor: pointer; }
.adm-ucard.soon { border-color: color-mix(in srgb, var(--amber) 45%, transparent); }
.adm-ucard.expired, .adm-ucard.disabled { opacity: .7; }
.adm-ucard .l1 { display: flex; align-items: center; gap: 6px; }
.adm-ucard .l1 b { font-size: 15px; }
.adm-ucard .l1 .chip { margin-left: auto; }
.adm-ucard .l2 { font-size: 12.5px; color: var(--ink-dim); }
.adm-ucard .l3 { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-faint); flex-wrap: wrap; }
.adm-ucard .l3 .lv-badge { font-size: 11px; padding: 1px 8px; }
.adm-sheet .msheet-head { align-items: flex-start; }
.adm-sheet .msheet-head .lvl-sel { flex: none; }
.adm-sheet-t { font-size: 12px; color: var(--ink-faint); padding: 8px 18px 6px; }
.adm-sheet-quick { display: flex; gap: 6px; padding: 0 12px; }
.adm-sheet-quick span { flex: 1; text-align: center; padding: 9px 0; border-radius: 9px; border: 1px solid var(--line); background: var(--panel); font-size: 13px; cursor: pointer; white-space: nowrap; }
.adm-sheet-quick span.pri { background: var(--accent); color: #fff; border-color: var(--accent); font-weight: 600; }
.adm-sheet-date { display: flex; gap: 8px; padding: 8px 12px 0; }
.adm-sheet-date .inp { flex: 1; }
.adm-sheet-acts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; padding: 0 12px; }
.adm-sheet-acts span { text-align: center; padding: 10px 0; border-radius: 9px; background: var(--panel); border: 1px solid var(--line-soft); font-size: 13px; cursor: pointer; }
.adm-sheet-acts span.danger { color: var(--up); }
/* 手机：日志列表行 */
.adm-logs { display: flex; flex-direction: column; }
.adm-lrow { padding: 9px 2px; border-top: 1px solid var(--line-soft); display: flex; flex-direction: column; gap: 3px; }
.adm-lrow:first-child { border-top: none; }
.adm-lrow .a { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.adm-lrow .a .ts { margin-left: auto; font-size: 12px; color: var(--ink-faint); white-space: nowrap; }
.adm-lrow .b { font-size: 12px; color: var(--ink-faint); word-break: break-all; }

/* 使用画像：柱状条（逐日 / 时段）+ 排行横条 + 分层徽标 */
.us-bars { display: flex; align-items: flex-end; gap: 2px; height: 52px; }
.us-col { flex: 1; min-width: 2px; display: flex; align-items: flex-end; height: 100%; }
.us-col i { display: block; width: 100%; min-height: 2px; border-radius: 2px 2px 0 0; background: var(--accent); opacity: .78; }
.us-col i.zero { background: var(--line); opacity: .6; }
.us-axis { display: flex; justify-content: space-between; margin-top: 4px; font-size: 11px; }
.us-rank { display: flex; align-items: center; gap: 8px; padding: 3px 0; }
.us-rank .n { width: 112px; flex: none; font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.us-bar-track { flex: 1; height: 8px; border-radius: 999px; background: var(--panel-2); overflow: hidden; }
.us-bar-track i { display: block; height: 100%; border-radius: 999px; background: var(--accent); opacity: .75; }
/* 运营看板：会员分层堆叠条 + 图例 */
.ops-tiers { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--line-soft); display: flex; flex-direction: column; gap: 7px; }
.ops-tierbar { display: flex; height: 12px; border-radius: 999px; overflow: hidden; background: var(--panel-2); }
.ops-tierbar i { display: block; height: 100%; min-width: 0; transition: width .3s; }
.ops-tierbar .t-high { background: var(--accent); }
.ops-tierbar .t-mid { background: color-mix(in srgb, var(--accent) 55%, var(--panel-2)); }
.ops-tierbar .t-low { background: var(--amber); }
.ops-tierbar .t-zero { background: var(--line); }
.ops-tier-lg { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 12px; }
.ops-tier-lg i { display: inline-block; width: 9px; height: 9px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }
.ops-tier-lg .t-high { background: var(--accent); }
.ops-tier-lg .t-mid { background: color-mix(in srgb, var(--accent) 55%, var(--panel-2)); }
.ops-tier-lg .t-low { background: var(--amber); }
.ops-tier-lg .t-zero { background: var(--line); }
.chip.t-high { background: var(--accent-soft); color: var(--accent); }
.adm-users tr.us-row { cursor: pointer; }
.adm-users tr.us-row:hover td { background: var(--raise); }
/* 使用画像表：功能 / 群两列是长列表，固定布局下必须截断，否则溢出叠到相邻列（悬停 title 看全称，点行开抽屉） */
.adm-users th.c-ft { width: 16%; } .adm-users th.c-room { width: 15%; }
.adm-users td.ts { overflow: hidden; text-overflow: ellipsis; }
.adm-users tr.us-row .who b, .adm-users tr.us-row .who small { overflow: hidden; text-overflow: ellipsis; }
@media(max-width:860px) { .us-bars { height: 44px; gap: 1px; } .us-rank .n { width: 92px; } }

/* 手机端后台：头部（返回 + 标题 + 添加）+ 五个短页签等分一行 */
.adm-mhead { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding: 8px 14px 4px; gap: 8px; }
.adm-mhead a { color: var(--accent); text-decoration: none; font-size: 14px; }
.adm-mhead b { font-size: 20px; }
.adm-mhead .btn { justify-self: end; }
.adm-mtabs { display: grid; grid-template-columns: repeat(5, 1fr) 44px; gap: 4px; padding: 6px 12px 10px; position: sticky; top: 0; z-index: 20; background: var(--bg); }
.adm-mtabs a.more { font-weight: 700; letter-spacing: 1px; }
.adm-mtabs-more { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; padding: 0 12px 10px; }
.adm-mtabs-more a { text-align: center; padding: 8px 0; border-radius: 10px; font-size: 12.5px; color: var(--ink-dim); background: var(--panel); border: 1px solid var(--line-soft); text-decoration: none; white-space: nowrap; }
.adm-mtabs-more a.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; border-color: transparent; }
.adm-mtabs a { text-align: center; padding: 8px 0; border-radius: 10px; font-size: 12.5px; color: var(--ink-dim); background: var(--panel); border: 1px solid var(--line-soft); position: relative; text-decoration: none; white-space: nowrap; }
.adm-mtabs a.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; border-color: transparent; }
.adm-mtabs a i { position: absolute; top: -6px; right: -4px; min-width: 16px; height: 16px; border-radius: 999px; background: var(--up); color: #fff; font-size: 10px; font-style: normal; display: inline-flex; align-items: center; justify-content: center; padding: 0 4px; }
/* 手机端等级页：三张等级卡 + 一行一功能 + 吸底保存栏 */
.adm-lv3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 12px; }
.adm-lv3 .lvc { border: 1px solid var(--line-soft); border-radius: 12px; padding: 10px 6px; text-align: center; background: var(--panel-2); }
.adm-lv3 .n { font-size: 12.5px; font-weight: 600; }
.adm-lv3 .n.vip { color: #b45309; } .adm-lv3 .n.svip { color: #b91c1c; }
html[data-theme="dark"] .adm-lv3 .n.vip, html[data-theme="dark"] .adm-lv3 .n.svip { color: var(--amber); }
.adm-lv3 .p { margin-top: 6px; display: flex; align-items: center; justify-content: center; gap: 2px; font-size: 12px; color: var(--ink-dim); }
.adm-lv3 .p .inp { width: 58px; padding: 4px 4px; text-align: center; font-size: 14px; }
.adm-lv3 .r { margin-top: 6px; font-size: 11px; color: var(--ink-faint); }
.adm-perm .pcols { display: grid; grid-template-columns: 1fr 46px 46px 46px; padding: 8px 14px 4px; font-size: 11px; color: var(--ink-faint); text-align: center; }
.adm-perm .pcols span:first-child { text-align: left; }
.pgh { padding: 8px 14px 4px; font-size: 12px; color: var(--ink-faint); background: var(--panel-2); border-top: 1px solid var(--line-soft); font-weight: 600; }
.adm-perm .prow { display: grid; grid-template-columns: 1fr 46px 46px 46px; align-items: center; padding: 9px 14px; border-top: 1px solid var(--line-soft); }
.adm-perm .prow .t b { font-size: 14px; display: block; }
.adm-perm .prow .t small { color: var(--ink-faint); font-size: 11.5px; line-height: 1.4; display: block; }
.adm-perm .prow .pm-cb { justify-content: center; }
.adm-perm .prow .pm-cb i { width: 24px; height: 24px; border-radius: 7px; }
.adm-perm .prow.room { grid-template-columns: 1fr; }
.adm-perm .prow.room .sel { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: 8px; }
.adm-perm .prow.room .sel div { display: flex; gap: 4px; }
.adm-perm .prow.room .sel .inp { padding: 5px 6px; font-size: 12.5px; min-width: 0; flex: 1; }
.adm-perm .prow.room .sel .inp.num { flex: 0 0 48px; text-align: center; }
.adm-settings .h, .adm-rp .h { padding: 11px 14px; border-bottom: 1px solid var(--line-soft); display: flex; align-items: center; gap: 8px; font-weight: 600; }
.adm-settings .h .hint, .adm-rp .h .hint { margin-left: auto; font-weight: 400; }
.adm-settings .kv, .adm-rp .kv { display: flex; align-items: center; padding: 10px 14px; border-top: 1px solid var(--line-soft); gap: 10px; }
.adm-settings .kv:first-of-type, .adm-rp .kv:first-of-type { border-top: none; }
.adm-settings .kv .l, .adm-rp .kv .l { flex: 1; min-width: 0; }
.adm-settings .kv .l b, .adm-rp .kv .l b { display: block; font-size: 14px; }
.adm-settings .kv .l small, .adm-rp .kv .l small { color: var(--ink-faint); font-size: 11.5px; line-height: 1.4; display: block; }
.adm-settings .kv .inp { width: 96px; text-align: right; }
.adm-settings .kv select.inp { width: auto; text-align: left; }
.adm-savebar { position: fixed; left: 0; right: 0; bottom: calc(62px + var(--sab)); z-index: 30; padding: 10px 14px; background: var(--glass-strong); backdrop-filter: blur(12px); border-top: 1px solid var(--line-soft); display: flex; gap: 8px; }
.adm-savebar .btn { flex: 1; justify-content: center; padding: 10px 0; }
.adm-savebar .btn.primary { flex: 2; }
.admin-main.savebar { padding-bottom: calc(30px + 62px + 64px + var(--sab)) !important; }
/* 手机端研报体检：三个数 + 状态 + 列表 + 按钮网格 */
.adm-rp .st { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 12px; }
.adm-rp .st div { background: var(--panel-2); border: 1px solid var(--line-soft); border-radius: 12px; padding: 9px 6px; text-align: center; }
.adm-rp .st b { display: block; font-size: 18px; }
.adm-rp .st small { color: var(--ink-faint); font-size: 11px; }
.adm-rp .st b.ok { color: var(--accent); } .adm-rp .st b.bad { color: var(--up); }
.adm-rp .run { margin: 0 12px 10px; padding: 10px 12px; border-radius: 10px; background: var(--accent-soft); font-size: 12.5px; display: flex; align-items: center; gap: 8px; line-height: 1.5; }
.adm-rp .run .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex: none; }
.adm-rp .run .dot.busy { animation: rp-blink 1s infinite; }
@keyframes rp-blink { 50% { opacity: .2; } }
.adm-rp .acts { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 12px; border-top: 1px solid var(--line-soft); }
.adm-rp .acts .btn { justify-content: center; padding: 10px 0; }
.adm-rp .acts .btn.danger { border-color: color-mix(in srgb, var(--up) 40%, transparent); }

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .adm-head { flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
  .adm-head .hint { order: 3; flex-basis: 100%; }
  .adm-head .btn { margin-left: auto; }
  .adm-kpis { gap: 6px; margin-bottom: 10px; }
  .adm-kpis .sk-stat { padding: 8px 6px; text-align: center; }
  .adm-kpis .sk-stat b { font-size: 18px; }
  .adm-kpis .sk-stat small:last-child { display: none; }
  .adm-tbl .admin-toolbar { padding: 10px; gap: 6px; }
  .adm-tbl .admin-toolbar > .inp:first-child { flex: 1 1 140px; min-width: 0; width: auto !important; }   /* 第一行：搜索框 + 等级下拉 */
  .adm-tbl .admin-toolbar select { flex: none; }
  .adm-tbl .admin-toolbar .hint { flex: none; margin-left: auto; }
  .adm-filters { flex: 1 1 70%; min-width: 0; overflow-x: auto; scrollbar-width: none; }                /* 第二行：状态筛选 + 人数 */
}

/* 成员表行内展开的直播房间编辑区 */
.user-table td.room-edit-cell { white-space: normal; background: var(--panel-2); }

/* 手机端：房间编辑器脱离横向滚动的表格单元格，全屏覆盖层展示 */
.room-editor-head { display: none; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .form-actions { flex-wrap: wrap; }
  .room-edit-cell { padding: 0 !important; border: none !important; background: none !important; }
  .room-editor {
    position: fixed; inset: 0; z-index: 60; overflow-y: auto;
    background: var(--bg, #eef2f6); padding: 0 12px calc(20px + var(--sab));
  }
  .room-editor-head {
    display: flex; align-items: center; justify-content: space-between;
    position: sticky; top: 0; z-index: 2; margin: 0 -12px 10px; padding: 10px 14px;
    background: var(--panel, #fff); border-bottom: 1px solid var(--line, #d8e0e8);
  }
  .room-editor .room-cand { max-height: none; }
  .room-editor .cand { padding: 10px 9px; }
}

/* ---------- 帮助中心（HelpView）：hero + 功能导览 + 定价 + 对比 + FAQ ---------- */

.hp { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }

/* Hero：深青渐变 + 光斑，白字大标题 */
.hp-hero {
  position: relative; text-align: center; color: #fff; overflow: hidden;
  padding: 72px 24px 84px;
  background:
    radial-gradient(720px 320px at 86% -18%, rgba(56, 189, 248, .38), transparent 62%),
    radial-gradient(620px 300px at 6% 128%, rgba(45, 212, 191, .32), transparent 60%),
    linear-gradient(135deg, #0f766e, #115e59 52%, #0c4a6e);
}
.hp-hero::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(2px 2px at 18% 30%, rgba(255, 255, 255, .35), transparent 100%),
    radial-gradient(2px 2px at 72% 18%, rgba(255, 255, 255, .28), transparent 100%),
    radial-gradient(1.6px 1.6px at 48% 66%, rgba(255, 255, 255, .22), transparent 100%),
    radial-gradient(1.6px 1.6px at 88% 58%, rgba(255, 255, 255, .25), transparent 100%),
    radial-gradient(2px 2px at 30% 82%, rgba(255, 255, 255, .18), transparent 100%);
}
.hp-hero-badge {
  display: inline-block; padding: 5px 15px; border-radius: 999px; margin-bottom: 18px;
  background: rgba(255, 255, 255, .13); border: 1px solid rgba(255, 255, 255, .28);
  font-size: 13px; letter-spacing: 2px; backdrop-filter: blur(4px);
}
.hp-hero h1 {
  margin: 0 0 14px; font-size: clamp(30px, 4.4vw, 42px); letter-spacing: 3px; font-weight: 700;
  text-shadow: 0 2px 18px rgba(0, 0, 0, .22);
}
.hp-hero-sub { margin: 0 auto; max-width: 640px; line-height: 2; font-size: 15.5px; opacity: .92; }
.hp-hero-actions { margin-top: 30px; display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.hp-btn {
  display: inline-flex; align-items: center; gap: 7px; border-radius: 10px; cursor: pointer;
  padding: 10px 26px; font-size: 14.5px; font-weight: 600; border: none; white-space: nowrap;
  transition: transform .12s, box-shadow .15s, background .15s, border-color .15s;
}
.hp-btn:hover { transform: translateY(-1px); }
.hp-btn:active { transform: translateY(0); }
.hp-btn.light { background: #fff; color: var(--accent-strong); box-shadow: 0 6px 18px rgba(0, 0, 0, .22); }
.hp-btn.light:hover { box-shadow: 0 10px 26px rgba(0, 0, 0, .28); }
.hp-btn.ghost {
  background: rgba(255, 255, 255, .1); color: #fff; border: 1px solid rgba(255, 255, 255, .4);
  backdrop-filter: blur(4px);
}
.hp-btn.ghost:hover { background: rgba(255, 255, 255, .18); }
.hp-btn.teal { background: var(--accent); color: #fff; }
.hp-btn.teal:hover { background: var(--accent-strong); }

/* 主体 */
.hp-body { max-width: 1080px; margin: 0 auto; padding: 0 22px 10px; }

/* 吸顶锚点导航 */
.hp-toc {
  position: sticky; top: 0; z-index: 20; display: flex; gap: 8px; justify-content: center;
  flex-wrap: wrap; padding: 14px 0 12px; margin-bottom: 26px;
  background: linear-gradient(var(--bg) 78%, transparent);
}
.hp-toc button {
  padding: 7px 18px; border-radius: 999px; border: 1px solid var(--line); cursor: pointer;
  background: var(--panel); color: var(--ink-dim); font-size: 13.5px; font-weight: 500;
  box-shadow: var(--shadow-sm); transition: all .15s;
}
.hp-toc button:hover { color: var(--accent-strong); border-color: var(--accent); background: var(--accent-soft); }

/* 区块标题 */
.hp-sec { margin-bottom: 54px; scroll-margin-top: 64px; }
.hp-h2 {
  margin: 0 0 8px; font-size: 24px; letter-spacing: 1px; display: flex; align-items: center; gap: 12px;
}
.hp-h2::before {
  content: ""; width: 5px; height: 22px; border-radius: 3px; background: var(--accent-grad); flex: none;
}
.hp-sec-desc { margin: 0 0 22px; color: var(--ink-dim); line-height: 1.9; max-width: 760px; }

/* 功能导览卡片 */
.hp-feature-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
.hp-feature {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: var(--radius);
  padding: 22px 22px 16px; box-shadow: var(--shadow-sm);
  transition: transform .15s, box-shadow .15s, border-color .15s;
}
.hp-feature:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--line); }
.hp-feature-head { display: flex; gap: 13px; align-items: center; margin-bottom: 10px; }
.hp-feature-icon {
  width: 46px; height: 46px; flex: none; border-radius: 13px; display: flex; align-items: center;
  justify-content: center; font-size: 23px;
  background: linear-gradient(135deg, var(--accent-soft), #eff6ff); border: 1px solid var(--line-soft);
}
.hp-feature-title h3 { margin: 0 0 3px; font-size: 16.5px; }
.hp-need {
  display: inline-block; font-size: 12px; padding: 1px 10px; border-radius: 999px;
  background: var(--accent-soft); color: var(--accent-strong); border: 1px solid #cceee9; font-weight: 500;
}
.hp-need.free { background: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
.hp-feature-desc { margin: 0 0 12px; color: var(--ink-dim); font-size: 14px; line-height: 1.8; }
.hp-points { margin: 0; padding: 0; list-style: none; }
.hp-points li {
  position: relative; padding: 4px 0 4px 24px; font-size: 13.5px; color: var(--ink-dim); line-height: 1.7;
}
.hp-points li::before {
  content: "✓"; position: absolute; left: 2px; top: 4px; color: var(--accent); font-weight: 700; font-size: 12.5px;
}

/* 会员定价卡 */
.hp-price-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 18px;
  max-width: 960px; margin: 0 auto; align-items: stretch;
}
.hp-price {
  position: relative; background: var(--panel); border: 1px solid var(--line); border-radius: 16px;
  padding: 30px 26px 24px; box-shadow: var(--shadow-md); display: flex; flex-direction: column;
  transition: transform .15s, box-shadow .15s;
}
.hp-price:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.hp-price.price-vip {
  border: 2px solid var(--accent); box-shadow: 0 10px 30px rgba(15, 118, 110, .16);
}
.hp-price.price-svip {
  background: linear-gradient(160deg, #1e2938, #0f172a 70%); border: 1px solid #33415580;
  color: #e6edf5; box-shadow: 0 12px 34px rgba(15, 23, 42, .3);
}
.hp-price.price-svip .lv-badge { border-color: transparent; }
.hp-flag {
  position: absolute; top: -13px; left: 50%; transform: translateX(-50%); white-space: nowrap;
  padding: 4px 16px; border-radius: 999px; font-size: 12.5px; font-weight: 600;
  background: var(--accent-grad); color: #fff; box-shadow: 0 4px 12px rgba(20, 184, 166, .38);
}
.hp-flag.dark { background: linear-gradient(135deg, #b45309, #d97706); box-shadow: 0 4px 12px rgba(217, 119, 6, .4); }
.hp-price-head { text-align: center; }
.hp-price-num { text-align: center; margin: 18px 0 4px; color: var(--ink); }
.hp-price.price-svip .hp-price-num { color: #fbbf24; }
.hp-price-num .cur { font-size: 20px; font-weight: 600; margin-right: 2px; }
.hp-price-num b { font-size: 46px; font-weight: 800; letter-spacing: -1px; }
.hp-price-num .per { font-size: 14px; color: var(--ink-faint); margin-left: 4px; }
.hp-price.price-svip .hp-price-num .per { color: #94a3b8; }
.hp-price-cta { text-align: center; margin: 12px 0 18px; min-height: 38px; }
.hp-cta-text { font-size: 13px; color: var(--ink-faint); }
.hp-price.price-svip .hp-cta-text { color: #c3cfdd; }
.hp-perms { margin: 0 0 14px; padding: 16px 0 0; list-style: none; border-top: 1px dashed var(--line); }
.hp-price.price-svip .hp-perms { border-top-color: #334155; }
.hp-perms li {
  position: relative; padding: 5px 2px 5px 26px; font-size: 14px; color: var(--ink);
}
.hp-price.price-svip .hp-perms li { color: #cbd5e1; }
.hp-perms li::before {
  content: "✓"; position: absolute; left: 2px; color: var(--accent); font-weight: 700;
}
.hp-price.price-svip .hp-perms li::before { color: #34d399; }
.hp-perms li.off { color: var(--ink-faint); }
.hp-price.price-svip .hp-perms li.off { color: #64748b; }
.hp-perms li.off::before { content: "—"; color: #c6d0da; font-weight: 400; }
.hp-price.price-svip .hp-perms li.off::before { color: #475569; }
.hp-room {
  margin-top: auto; padding-top: 12px; border-top: 1px solid var(--line-soft);
  font-size: 12.5px; color: var(--ink-faint); text-align: center;
}
.hp-price.price-svip .hp-room { border-top-color: #334155; color: #b6c3d2; }

/* 加载失败/加载中 */
.hp-hint-err { text-align: center; color: var(--ink-faint); padding: 40px 0; }

/* 权限对比表 */
.hp-table-wrap {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: var(--radius);
  box-shadow: var(--shadow-sm); overflow-x: auto;
}
.hp-table { width: 100%; border-collapse: collapse; font-size: 14px; min-width: 520px; }
.hp-table th, .hp-table td { padding: 12px 18px; text-align: center; }
.hp-table th { background: var(--panel-2); color: var(--ink-dim); font-weight: 600; border-bottom: 1px solid var(--line); }
.hp-table td { border-bottom: 1px solid var(--line-soft); }
.hp-table tbody tr:last-child td { border-bottom: none; }
.hp-table tbody tr:hover td { background: var(--panel-2); }
.hp-table .l { text-align: left; font-weight: 500; }
.hp-mark.yes { color: var(--accent); font-weight: 800; }
.hp-mark.no { color: #c6d0da; }
.hp-room-cell { font-size: 13px; color: var(--ink-dim); }
.hp-price-row td { background: var(--accent-soft); font-weight: 600; }
.hp-price-row td b { font-size: 16px; color: var(--accent-strong); }
.hp-note { margin-top: 14px; font-size: 13px; color: var(--ink-faint); line-height: 1.9; }

/* FAQ */
.hp-faq-list { display: flex; flex-direction: column; gap: 10px; max-width: 820px; }
.hp-faq {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: var(--radius);
  padding: 4px 18px; box-shadow: var(--shadow-sm);
}
.hp-faq summary {
  cursor: pointer; padding: 13px 4px; font-weight: 600; font-size: 14.5px; list-style: none;
  position: relative; padding-right: 30px; user-select: none;
}
.hp-faq summary::-webkit-details-marker { display: none; }
.hp-faq summary::after {
  content: "+"; position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  width: 22px; height: 22px; border-radius: 999px; display: flex; align-items: center; justify-content: center;
  background: var(--accent-soft); color: var(--accent-strong); font-weight: 700; font-size: 15px;
}
.hp-faq[open] summary::after { content: "−"; }
.hp-faq p { margin: 0; padding: 0 4px 16px; color: var(--ink-dim); line-height: 2; font-size: 14px; }

/* 风险提示与免责声明（全文；同意层 .dc-* 复用 .hp-legal-n 序号） */
.hp-legal { display: flex; flex-direction: column; gap: 10px; max-width: 820px; }
.hp-legal-item {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: var(--radius);
  padding: 14px 18px; box-shadow: var(--shadow-sm);
}
.hp-legal-item h3 { margin: 0 0 6px; font-size: 14.5px; display: flex; align-items: center; gap: 8px; }
.hp-legal-item p { margin: 0; color: var(--ink-dim); line-height: 1.9; font-size: 13.5px; }
.hp-legal-n {
  width: 20px; height: 20px; border-radius: 999px; flex: none; display: inline-flex; align-items: center; justify-content: center;
  background: var(--amber-soft); color: var(--amber); font-size: 12px; font-weight: 700; margin-right: 8px;
}
.hp-footer a { color: var(--ink-dim); }

/* 页脚 */
.hp-footer {
  margin: 20px 0 34px; padding: 26px 0 6px; border-top: 1px solid var(--line-soft);
  display: flex; align-items: center; justify-content: center; gap: 9px;
  color: var(--ink-faint); font-size: 13px;
}
.hp-footer .logo { display: inline-flex; opacity: .85; }

/* 帮助页响应式 */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .hp-hero { padding: 52px 18px 62px; }
  .hp-hero-sub br { display: none; }
  .hp-body { padding: 0 14px 10px; }
  .hp-price-grid { grid-template-columns: 1fr; max-width: 400px; }
  .hp-price.price-vip { order: -1; }   /* 小屏把「最受欢迎」排到最前 */
  .hp-sec { margin-bottom: 40px; }
}

/* 手机推送教程（HelpView） */
.hp-push-rules { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 12px; margin-bottom: 20px; }
.hp-push-rule {
  background: var(--accent-soft); border: 1px solid #cceee9; border-radius: var(--radius);
  padding: 13px 16px; font-size: 13px; line-height: 1.8; color: var(--ink-dim);
}
.hp-push-rule b { display: block; color: var(--accent-strong); font-size: 13.5px; margin-bottom: 3px; }
.hp-push-rule p { margin: 0; }

.hp-push-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 16px; }
.hp-push-guide {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: var(--radius);
  padding: 22px 22px 18px; box-shadow: var(--shadow-sm);
  transition: transform .15s, box-shadow .15s, border-color .15s;
}
.hp-push-guide:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--line); }
.hp-steps { margin: 8px 0 0; padding: 0; list-style: none; counter-reset: hpstep; }
.hp-steps li {
  position: relative; counter-increment: hpstep; padding: 7px 2px 7px 34px;
  font-size: 13.5px; color: var(--ink-dim); line-height: 1.75; border-bottom: 1px dashed var(--line-soft);
}
.hp-steps li:last-child { border-bottom: none; }
.hp-steps li::before {
  content: counter(hpstep); position: absolute; left: 0; top: 8px;
  width: 22px; height: 22px; border-radius: 999px; display: flex; align-items: center; justify-content: center;
  background: var(--accent-soft); color: var(--accent-strong); font-weight: 700; font-size: 12px;
}
.hp-steps code {
  font-family: var(--mono); font-size: 12px; background: var(--panel-2); border: 1px solid var(--line-soft);
  border-radius: 5px; padding: 1px 6px; word-break: break-all; color: var(--ink);
}
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .hp-push-rules { grid-template-columns: 1fr; }
  .hp-push-grid { grid-template-columns: 1fr; }
}

/* ---------- 手机端体验增强：底部 tab bar + 表格卡片化 + 触控目标 ---------- */

.mtabbar { display: none; }

/* iOS「添加到主屏幕」引导横幅：悬于 tab bar 上方 */
.a2hs {
  position: fixed; left: 10px; right: 10px;
  bottom: calc(10px + 62px + var(--sab)); z-index: 46;
  display: none; align-items: center; gap: 10px;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 14px; box-shadow: var(--shadow-lg);
  padding: 12px 14px;
}
.a2hs .a2hs-ic { font-size: 22px; flex: none; }
.a2hs .a2hs-tx { flex: 1; min-width: 0; font-size: 13px; line-height: 1.6; color: var(--ink-dim); }
.a2hs .a2hs-tx b { color: var(--ink); }
.a2hs .a2hs-x {
  flex: none; width: 28px; height: 28px; border-radius: 50%;
  color: var(--ink-faint); font-size: 13px; background: var(--raise);
}

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  /* 沉浸模式：顶部品牌栏在手机端全部隐藏（导航由底部 tab bar +「更多」承担，
     退出/账号信息在「更多」抽屉里；桌面端保留顶栏） */
  .topbar { display: none; }

  /* 「更多」抽屉底部的账号行：昵称 + 等级徽章 + 退出 */
  .mnav-user {
    display: flex; align-items: center; gap: 8px;
    margin-top: 6px; padding: 10px 14px;
    border-top: 1px solid var(--line);
    color: var(--ink-dim); font-size: 13px;
  }
  .mnav-user .grow { flex: 0 0 4px; }
  .mnav-user .btn { margin-left: auto; }

  /* 底部 tab bar：核心页一步直达；「更多」弹出原顶栏抽屉（设置/帮助/管理） */
  .mtabbar {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 45;
    background: var(--glass-strong); backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-top: 1px solid var(--line);
    padding: 3px 6px calc(3px + var(--sab));
  }
  .mtabbar a {
    flex: 1; min-height: 48px; display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 1px;
    color: var(--ink-faint); font-size: 11px; text-decoration: none;
    border-radius: 10px; user-select: none;
  }
  .mtabbar a .mi { font-size: 20px; line-height: 1.15; }
  .mtabbar a.on { color: var(--accent); font-weight: 700; }
  .mnav-btn { display: none !important; }   /* 已由「更多」取代 */
  .a2hs { display: flex; }   /* 引导横幅仅手机端显示 */

  /* 手机只竖着滚：根容器把横向溢出全部裁掉（iOS Safari 只要文档比视口宽就能被手指拖偏，
     body 上单写 overflow-x:hidden 不管用，必须 html + body + 应用壳一起裁） */
  html, body { overflow-x: hidden; width: 100%; }
  #app, .frame { overflow: hidden; max-width: 100vw; }
  .ai-wrap, .sk-wrap, .sg-wrap, .simple-wrap, .rp-wrap, .feed-scroll, .admin-main { overflow-x: hidden; touch-action: pan-y pinch-zoom; }
  /* 里面自己会横滚的条（日期条 / 统计条 / 页签条）不受上面 pan-y 限制：手势由最近的滚动容器决定 */
  /* 各滚动容器给 tab bar 让位 */
  /* feed-scroll 的完整 padding 见下方直播间区块 */
  .ai-wrap { padding-bottom: calc(60px + 62px + var(--sab)); }
  .simple-wrap { padding-bottom: calc(26px + 62px + var(--sab)); }
  .rp-wrap { padding-bottom: calc(30px + 62px + var(--sab)); }
  .admin-main { padding-bottom: calc(30px + 62px + var(--sab)); }
  .hp { padding-bottom: 62px; }
  .jump-latest { bottom: calc(76px + 62px + var(--sab)); }
  .notif-stack { bottom: calc(12px + 62px + var(--sab)); }
  .ai-pop { bottom: calc(16px + 62px + var(--sab)); }

  /* 触控目标加大：小按钮/筛选胶囊不细于 34px 高 */
  .btn.sm { min-height: 34px; }
  .ft { padding: 6px 13px; }
  .topbar .btn.sm { min-height: 34px; }
  .rp-dl { padding: 7px 12px; }

  /* 直播间标题栏：第一行 ☰+房间名+AI分析+订阅，搜索框换到第二行占满 */
  .feed-head { flex-wrap: wrap; padding: 10px 12px; gap: 8px 10px; }
  .feed-head > div:first-of-type { flex: 1; min-width: 0; }   /* 房间名块占满第一行剩余 */
  .feed-head h2 { font-size: 15.5px; }
  .feed-head .rs-inline { flex-basis: 100%; order: 9; max-width: none; }
  .feed-head .rs-inline .inp { padding: 8px 12px; }

  /* 直播间标题栏手机端改为不透明纯色：半透明+毛玻璃的实际颜色随底下内容变化，
     会导致状态栏 theme-color（纯色采样）与页面顶部永远存在细微色差 */
  .feed-head { background: var(--bg-deep); backdrop-filter: none; -webkit-backdrop-filter: none; }

  /* 消息流可读性：字号/间距/气泡内边距微调 */
  .feed-scroll { padding: 12px 12px calc(26px + 62px + var(--sab)); }
  .wc-name { font-size: 12.5px; }
  .wc-time { font-size: 10.5px; }
  .wc-msg { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; }   /* 长按走自家菜单（有「复制正文」），不弹系统选字 / 存图 */
  .wc-msg { padding: 4px 2px 10px; gap: 10px; }
  .wc-av { width: 38px; height: 38px; }
  .wc-bubble { padding: 10px 14px; }

  /* 全员战绩表 → 卡片：每行一张卡，字段名由 data-th 提供 */
  .ops-card { overflow-x: visible; }
  .ops-table.cards { font-size: 13.5px; }
  .ops-table.cards, .ops-table.cards tbody { display: block; width: 100%; }
  .ops-table.cards thead { display: none; }
  .ops-table.cards tr {
    display: block; background: var(--panel-2);
    border-bottom: 1px solid var(--line-soft); padding: 4px 0;
  }
  .ops-table.cards tr:first-child { border-top-left-radius: 0; }
  .ops-table.cards td {
    display: flex; align-items: baseline; gap: 10px;
    padding: 5px 14px; border-bottom: none; vertical-align: baseline;
  }
  .ops-table.cards td::before {
    content: attr(data-th); flex: none; width: 52px;
    font-size: 11.5px; color: var(--ink-faint); white-space: nowrap;
  }
  .ops-table.cards td > * { flex: 1; min-width: 0; }
  /* 短内容不做通栏拉伸：操作标签/头像行/股票保持内容宽度，只有原话占满 */
  .ops-table.cards td > span.chip,
  .ops-table.cards td > .teacher-cell { flex: none; }
  .ops-table.cards .quote { max-width: none; font-size: 13px; }
  .ops-table.cards td.stock > * { flex: none; }
  .ops-table.cards td.pct { font-size: 14px; }
  .ops-table.cards td:has(> .empty) { display: block; }   /* 空态占位行还原整行 */
  .ops-table.cards td:has(> .empty)::before { content: none; }
}

/* ---------------- 股票识别 / 自选股 / 过滤 / 未读速览 / 日期跳转 ---------------- */

/* 消息里的股票名高亮（可点击） */
.stk-hit {
  display: inline;
  padding: 0 4px;
  margin: 0 1px;
  border-radius: 6px;
  background: rgba(14, 165, 233, .13);
  color: #0369a1;
  font-weight: 600;
  cursor: pointer;
  border-bottom: 1px dashed rgba(14, 165, 233, .55);
}
.stk-hit:hover { background: rgba(14, 165, 233, .25); }
.stk-q { display: inline-block; margin-left: 2px; padding: 0 4px; border-radius: 6px; font-size: 11px; font-weight: 700; line-height: 1.5; vertical-align: 1px; background: var(--raise); color: var(--ink-dim); }
.stk-q.up { background: var(--up-soft); color: var(--up); } .stk-q.dn { background: var(--dn-soft); color: var(--dn); }
.stk-rep { display: inline-block; margin-left: 3px; padding: 0 4px; border-radius: 6px; font-size: 10.5px; color: var(--ink-faint); border: 1px solid var(--line); text-decoration: none; vertical-align: 1px; line-height: 1.5; }
.stk-rep:hover { color: var(--accent); border-color: var(--accent); }
.stk-hit.watch {                      /* 自选股提及：更醒目 */
  background: rgba(245, 158, 11, .18);
  color: #b45309;
  border-bottom-color: rgba(245, 158, 11, .7);
}

/* 搜索结果 / 未读速览里的小股票标签 */
.hit-stocks { margin-top: 3px; display: flex; flex-wrap: wrap; gap: 4px; }
.stk-mini {
  font-size: 11.5px; padding: 1px 7px; border-radius: 999px;
  background: rgba(14, 165, 233, .12); color: #0369a1; cursor: pointer;
}
.stk-mini.watch { background: rgba(245, 158, 11, .18); color: #b45309; }

/* 房间内消息过滤条 */
.msg-filters {
  display: flex; align-items: center; gap: 6px;
  padding: 6px 14px; border-bottom: 1px solid var(--line);
  background: var(--panel);
}
.mf-cnt { font-size: 12px; color: var(--ink-dim); }
.mf-hint { font-size: 11.5px; color: var(--ink-faint, #94a3b8); margin-left: auto; }

/* 只看老师：手动指定老师面板 */
.tp-btn { max-width: 160px; overflow: hidden; text-overflow: ellipsis; }
.tp-panel {
  position: absolute; top: calc(100% + 4px); left: 14px; z-index: 30;
  min-width: 220px; max-width: 300px; max-height: 320px; overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 8px 24px rgba(0,0,0,.14); padding: 4px;
}
.tp-item {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 7px 10px; border-radius: 7px; cursor: pointer; font-size: 13px;
}
.tp-item:hover { background: var(--hover, rgba(0,0,0,.05)); }
.tp-item.sel { color: var(--accent); font-weight: 600; }
.tp-item .num { font-size: 11px; color: var(--ink-faint, #94a3b8); }
.tp-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tp-note { padding: 6px 10px; font-size: 11px; color: var(--ink-faint, #94a3b8); }

/* 日期分隔条：可点击跳转 */
.time-divider.jumpable { cursor: pointer; user-select: none; }
.time-divider.jumpable:hover { color: #0369a1; }

/* 日期跳转面板 */
.date-pop {
  position: absolute; top: 110px; left: 50%; transform: translateX(-50%);
  width: min(280px, 86vw); max-height: 55vh; z-index: 60;
  display: flex; flex-direction: column; padding: 10px;
}
.date-pop-head { display: flex; align-items: center; justify-content: space-between;
  padding: 2px 4px 8px; }
.date-list { overflow-y: auto; display: flex; flex-direction: column; gap: 2px; }
.date-item {
  display: flex; justify-content: space-between; align-items: center;
  padding: 7px 10px; border: none; border-radius: 8px; background: none;
  cursor: pointer; font-size: 13.5px;
}
.date-item:hover { background: rgba(14, 165, 233, .1); }
.date-item .num { font-size: 12px; color: var(--ink-dim); }

/* 自选股面板（房间列表区切换显示） */
.wl-head { display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px 6px; }
.wl-item {
  display: flex; align-items: center; gap: 8px;
  padding: 9px 12px; border-bottom: 1px solid var(--line);
  cursor: pointer;
}
.wl-item:hover { background: rgba(14, 165, 233, .06); }
.wl-name { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.wl-name .code { font-size: 11px; color: var(--ink-faint, #94a3b8); }
.wl-x { border: none; background: none; color: var(--ink-faint, #94a3b8);
  cursor: pointer; font-size: 13px; padding: 3px 6px; border-radius: 6px; }
.wl-x:hover { background: rgba(220, 38, 38, .1); color: var(--up); }
/* 自选股实时报价：右侧上下两行——价格大（粗）、涨跌幅小，右对齐、红涨绿跌 */
.wl-quote { display: flex; flex-direction: column; align-items: flex-end; gap: 1px;
  flex-shrink: 0; margin-right: 2px; text-align: right; }
.wl-quote b { font-size: 15px; font-weight: 700; line-height: 1.2; }
.wl-quote .q-pct { font-size: 11.5px; }
.sp-quote { display: flex; flex-direction: column; gap: 1px; padding: 4px 12px 8px; }
.sp-quote b { font-size: 19px; font-weight: 700; line-height: 1.2; }
.sp-quote .q-pct { font-size: 12.5px; }

/* 全局搜索：股票候选组的时间过滤条 */
.sr-dates { display: flex; align-items: center; gap: 6px; padding: 4px 12px 8px;
  font-size: 12px; color: var(--ink-dim); }
.sr-dates input[type="date"] {
  border: 1px solid var(--line); border-radius: 8px; padding: 3px 6px;
  font-size: 12px; background: var(--panel); color: inherit;
}

/* 未读聚合流速览 */
.uf-pop {
  position: absolute; top: 64px; right: 14px; width: min(420px, 92vw);
  max-height: 72vh; z-index: 60; display: flex; flex-direction: column;
  padding: 12px; box-shadow: 0 12px 40px rgba(15, 23, 42, .18);
}
.uf-head { display: flex; align-items: center; gap: 8px; padding-bottom: 8px;
  border-bottom: 1px solid var(--line); }
.uf-list { overflow-y: auto; }
.uf-item { padding: 9px 4px; border-bottom: 1px solid var(--line); cursor: pointer; }
.uf-item:hover { background: rgba(14, 165, 233, .06); }
.uf-top { display: flex; align-items: baseline; gap: 8px; font-size: 13px; }
.uf-room { flex: none; max-width: 45%; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.uf-sender { font-size: 12px; }
.uf-time { margin-left: auto; font-size: 11.5px; color: var(--ink-faint, #94a3b8); }
.uf-text { font-size: 13px; color: var(--ink-dim); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 股票详情弹层：fixed 定位，坐标由 JS 按点击位置计算（clampStockPop 防溢出） */
.stock-pop {
  position: fixed; width: min(300px, 88vw);
  z-index: 65; padding: 14px; box-shadow: 0 12px 40px rgba(15, 23, 42, .18);
}
.sp-head { display: flex; align-items: center; gap: 10px; }
.sp-title { flex: 1; min-width: 0; }
.sp-title .sub { font-size: 12px; color: var(--ink-faint, #94a3b8); }
.sp-actions { display: flex; gap: 8px; margin-top: 12px; }
.sp-actions .btn { flex: 1; justify-content: center; }

/* 自选提及弹窗（右下角，区别于普通新消息） */
.notif-card.wl { border: 1px solid rgba(245, 158, 11, .55); }

@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .msg-filters { flex-wrap: wrap; }
  .mf-hint { display: none; }
  .uf-pop { right: 6px; left: 6px; width: auto; }
}

/* 手机端房间长按操作菜单（微信式底部弹层） */
.act-mask { position: fixed; inset: 0; z-index: 70; background: var(--overlay); }
.act-sheet {
  position: fixed; left: 10px; right: 10px; bottom: calc(12px + 64px + var(--sab));
  z-index: 71; padding: 6px; border-radius: 16px;
  display: flex; flex-direction: column; gap: 2px;
  animation: rise .18s ease both;
}
.act-title { font-size: 12.5px; color: var(--ink-faint); padding: 8px 12px 6px; text-align: center; }
.act-item {
  border: none; background: none; text-align: center; padding: 13px 12px;
  font-size: 15.5px; color: var(--ink); cursor: pointer; border-radius: 12px;
}
.act-item:active { background: var(--raise); }
.act-item + .act-item { border-top: 1px solid var(--line-soft, var(--line)); }
.act-item.act-cancel { color: var(--ink-dim); margin-top: 4px; font-weight: 600; }
@media (min-width: 861px) and (min-height: 501px), (min-width: 861px) and (pointer: fine) {
  .act-sheet { left: 50%; transform: translateX(-50%); width: 320px; bottom: 80px; }
}

/* 实时连接状态徽章（直播页标题下）与 AI 页回落提示 */
.ws-off{margin-left:8px;color:#b45309;background:#fef3c7;border-radius:6px;padding:1px 6px;font-size:11px;font-family:inherit;white-space:nowrap}
.ai-fallback{margin-left:8px;font-size:12px;color:#6b7280;white-space:nowrap}
/* AI 生成标识（AI 汇总标题 / 速览复盘卡头 / 直播右栏） */
.chip.ai-gen { background: rgba(99, 102, 241, .12); color: #4f46e5; font-size: 10.5px; padding: 1px 7px; margin-left: 8px; vertical-align: middle; font-weight: 600; letter-spacing: .3px; }
@media (prefers-color-scheme: dark) { html:not([data-theme="light"]) .chip.ai-gen { background: rgba(129, 140, 248, .18); color: #a5b4fc; } }
html[data-theme="dark"] .chip.ai-gen { background: rgba(129, 140, 248, .18); color: #a5b4fc; }
.ai-legal { font-size: 11.5px; margin: -4px 0 12px; }
.sk-foot a, .sg-foot a, .ai-legal a { color: var(--ink-dim); }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse){.ai-fallback{white-space:normal;flex-basis:100%}}

/* =====================================================================
   原生化改版 v2（2026-09-12，方案 A）：手机端 App 式结构 + 桌面三栏 + 深色套
   ===================================================================== */

/* ---- 通用：图标 / 圆钮 / 分段 / 按压反馈 ---- */
.ic { display: inline-block; vertical-align: middle; flex: none; }
.icobtn {
  width: 36px; height: 36px; border-radius: 18px; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--panel); border: 1px solid var(--line); color: var(--ink);
  box-shadow: var(--shadow-sm); cursor: pointer; transition: background .12s, transform .08s, color .12s;
  position: relative;
}
.icobtn:hover { background: var(--raise); }
.icobtn:active { transform: scale(.94); }
.icobtn.on { color: var(--accent); border-color: rgba(15, 118, 110, .45); background: var(--accent-soft); }
.icobtn.amber.on { color: var(--amber); border-color: rgba(180, 83, 9, .4); background: var(--amber-soft); }
.icobtn .cnt {
  position: absolute; top: -5px; right: -5px; min-width: 16px; height: 16px; padding: 0 4px;
  border-radius: 8px; background: var(--accent); color: #fff; font-size: 10px; font-weight: 700;
  display: flex; align-items: center; justify-content: center; font-family: var(--mono);
}
.icobtn .cnt.red { background: #dc2626; }
.icobtn.plain { border-color: transparent; background: transparent; box-shadow: none; color: var(--ink); }
.seg { display: flex; background: var(--seg); border-radius: 10px; padding: 3px; gap: 2px; }
.seg-item {
  flex: 1; text-align: center; padding: 6px 4px; border-radius: 8px; font-size: 13px;
  color: var(--ink-dim); font-weight: 500; cursor: pointer; white-space: nowrap; user-select: none;
  transition: background .15s, color .15s;
}
.seg-item.on { background: var(--panel); color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgba(16, 24, 40, .12); }
.ft .ic { width: 14px; height: 14px; margin-right: 3px; }
/* 触屏：所有可点元素按下即反馈 */
@media (hover: none) {
  .room-item:active, .grp-row:active, .msheet-item:active, .ai-tabs button:active, .day:active,
  .rp-row:active, .hit-item:active, .uf-item:active, .wl-item:active { background: var(--raise); transition: none; }
  .btn:active, .ft:active, .seg-item:active, .icobtn:active { transform: scale(.96); }
}
.tag-teacher {
  display: inline-block; font-size: 10px; line-height: 1.5; color: var(--accent); background: var(--accent-soft);
  border: 1px solid rgba(15, 118, 110, .35); border-radius: 5px; padding: 0 5px; font-weight: 600; vertical-align: 1px;
}
.hscroll { display: flex; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.hscroll::-webkit-scrollbar { display: none; }
.skel-row { display: flex; align-items: center; gap: 12px; padding: 10px 16px; }
.skel-row .skeleton { height: 12px; }

/* ---- 页面切换过渡 ---- */
/* 切页不再做淡入淡出（app.js 已去掉 <transition mode="out-in">）：离场要等整页 opacity 过渡跑完才换 DOM，
   实测手机上一页几百行时 0.5–1.7s，用户感觉"每次都要等"；去掉后切页 ~10ms */

/* ---- 桌面顶栏：全局搜索 + 账号 ---- */
.topbar .gsearch {
  display: flex; align-items: center; gap: 8px; width: 300px; height: 34px; border-radius: 9px;
  background: var(--raise); border: 1px solid var(--line); padding: 0 10px; color: var(--ink-faint);
  font-size: 13px; cursor: text; white-space: nowrap; overflow: hidden; margin-left: auto;
}
.topbar .gsearch:hover { border-color: #b9c6d4; }
.topbar .gsearch kbd {
  margin-left: auto; font-family: var(--mono); font-size: 11px; border: 1px solid var(--line);
  border-radius: 5px; padding: 0 5px; background: var(--panel); color: var(--ink-faint);
}
.topbar .acct { display: flex; align-items: center; gap: 8px; cursor: pointer; padding: 4px 6px; border-radius: 9px; }
.topbar .acct:hover { background: var(--raise); }
.topbar .acct .gen-avatar { width: 28px; height: 28px; font-size: 12px; }
.topbar .acct .who { display: inline; }

/* ---- 房间列表：新行结构（预览行 + 状态小图标 + 时间/未读） ---- */
.room-item { gap: 10px; }
.room-item .ravatar { width: 42px; height: 42px; font-size: 16px; }
.room-item .rtitle-row { display: flex; align-items: center; gap: 5px; min-width: 0; }
.room-item .rtitle { display: block; white-space: nowrap; word-break: keep-all; overflow: hidden; text-overflow: ellipsis; }   /* 单行省略：名字完整优先，「直播中」挪到预览行（第 3 批 B · U13） */
.live.inline { margin: 0 5px 0 0; padding: 0; background: none; font-size: 11.5px; vertical-align: baseline; }
.live.inline i { width: 6px; height: 6px; }
.seg-wrap { position: relative; flex: 1; min-width: 0; }
.seg-wrap::after { content: ""; position: absolute; right: 0; top: 0; bottom: 0; width: 28px; border-radius: 0 10px 10px 0; pointer-events: none;
  background: linear-gradient(90deg, rgba(226, 232, 240, 0), var(--seg)); }   /* 筛选 chip 放不下时右侧渐隐提示可横滑 */
.room-item .rmarks { display: inline-flex; gap: 2px; align-items: center; flex: none; color: var(--ink-faint); }
/* 「直播中 / 刚说过」：房间名右侧与会话头副标题共用 */
.live { display: inline-flex; align-items: center; gap: 4px; flex: none; margin-left: 6px; padding: 1px 7px 1px 5px; border-radius: 999px;
        font-size: 10.5px; font-weight: 600; letter-spacing: .2px; font-family: var(--sans); color: var(--up); background: var(--up-soft); vertical-align: middle; }
.live i { width: 6px; height: 6px; border-radius: 50%; background: var(--up); animation: live-pulse 1.6s ease-in-out infinite; }
.live.quiet { color: var(--ink-faint); background: var(--panel-2); }
.live.quiet i { background: var(--ink-faint); animation: none; }
.room-item .rtitle-row .live { margin-left: 0; }
@keyframes live-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.7); } }
@media (prefers-reduced-motion: reduce) { .live i { animation: none; } }
.room-item .rmarks .ic { width: 13px; height: 13px; }
.room-item .rmarks .pin { color: var(--up); }
.room-item .rmarks .bell { color: var(--amber); }
.room-item .rmarks .star { color: var(--amber); }
.room-item .rprev {
  font-size: 12.5px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  margin-top: 2px; line-height: 1.35;
}
.room-item .rprev.unread { color: var(--ink-dim); }
.room-item .rprev .rcount { color: var(--ink-faint); }
.room-item .meta { min-height: 38px; justify-content: space-between; }
.room-item .racts {
  position: absolute; right: 8px; bottom: 6px; padding: 2px 4px; border-radius: 8px;
  background: var(--panel); border: 1px solid var(--line); box-shadow: var(--shadow-sm);
  opacity: 0; pointer-events: none; transition: opacity .12s;
}
.room-item:hover .racts { opacity: 1; pointer-events: auto; }
.room-item:hover .meta .badge { opacity: 0; }
.rooms-head .seg-row { display: flex; align-items: center; gap: 8px; }
.rooms-head .seg { flex: 1; min-width: 0; }
.rooms-head .seg-wrap .seg { width: 100%; box-sizing: border-box; }
.rooms-head .seg-item .n { font-family: var(--mono); font-size: 11px; margin-left: 3px; opacity: .8; }
.mhead { display: none; }
.ptr { display: none; }

/* ---- 底部菜单（长按房间 / 会话 ⋯）：原生式 sheet ---- */
.msheet {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 71;
  background: var(--bg); border-radius: 22px 22px 0 0;
  padding: 8px 0 calc(14px + var(--sab));
  box-shadow: 0 -12px 40px rgba(16, 24, 40, .18); animation: sheet-up .22s cubic-bezier(.2, .8, .2, 1) both;
  max-height: 86vh; overflow-y: auto;
}
@keyframes sheet-up { from { transform: translateY(40px); opacity: 0; } }
.msheet-handle { width: 38px; height: 5px; border-radius: 3px; background: var(--line); margin: 2px auto 12px; }
.msheet-head { display: flex; align-items: center; gap: 12px; padding: 0 18px 12px; }
.msheet-head .gen-avatar { width: 44px; height: 44px; font-size: 17px; }
.msheet-head b { font-size: 17px; display: block; }
.msheet-head .sub { font-size: 12.5px; color: var(--ink-dim); }
.msheet-list { margin: 0 12px; background: var(--panel); border-radius: 14px; overflow: hidden; }
.msheet-item {
  display: flex; align-items: center; gap: 12px; padding: 12px 16px; min-height: 56px;
  border-top: 1px solid var(--line-soft); cursor: pointer; width: 100%; text-align: left; color: var(--ink);
}
.msheet-item:first-child { border-top: none; }
.msheet-item .mi-ic {
  width: 34px; height: 34px; border-radius: 10px; flex: none; display: flex; align-items: center; justify-content: center;
  background: var(--accent-soft); color: var(--accent);
}
.msheet-item .mi-ic.amber { background: var(--amber-soft); color: var(--amber); }
.msheet-item .mi-ic.violet { background: rgba(99, 102, 241, .14); color: #4f46e5; }
.msheet-item .mi-ic.gray { background: var(--raise); color: var(--ink-dim); }
.msheet-item .mi-ic.red { background: var(--up-soft); color: var(--up); }
.msheet-item .mi-tx { flex: 1; min-width: 0; }
.msheet-item .mi-tx b { font-size: 15.5px; font-weight: 500; display: block; }
.msheet-item .mi-tx span { font-size: 12px; color: var(--ink-faint); }
.msheet-item .mi-on { color: var(--accent); }
.msheet-cancel {
  margin: 10px 12px 0; background: var(--panel); border-radius: 14px; padding: 14px; text-align: center;
  font-size: 16px; font-weight: 600; color: var(--accent); width: calc(100% - 24px); cursor: pointer;
}
@media (min-width: 861px) and (min-height: 501px), (min-width: 861px) and (pointer: fine) {
  .msheet { left: 50%; right: auto; transform: translateX(-50%); width: 380px; bottom: 60px; border-radius: 18px; padding-bottom: 12px; }
}

/* ---- 会话页：老师消息 / 新消息浮钮 / 手机导航栏 ---- */
.wc-msg.teacher .wc-bubble { border-left: 3px solid var(--bubble-teacher); border-top-left-radius: 4px; }
.wc-msg.teacher .wc-name > span:first-child { color: var(--accent) !important; }
.jump-latest {
  display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px;
  background: var(--accent); color: #fff; border: none; box-shadow: 0 8px 16px rgba(15, 118, 110, .25);
  font-size: 13px; font-weight: 600;
}
.jump-latest .ic { width: 16px; height: 16px; }
.rnav { display: none; }
.feed-head .rs-toggle { display: none; }
.msg-filters .mf-sp { flex: 1; }

/* ---- 桌面右栏：自选股 / 本群 AI / 未读速览 ---- */
.rail {
  width: 320px; flex: none; border-left: 1px solid var(--line); background: var(--panel-2);
  display: flex; flex-direction: column; min-height: 0;
}
.rail-head { padding: 12px 12px 8px; }
.rail-body { flex: 1; overflow-y: auto; padding: 0 12px 20px; display: flex; flex-direction: column; gap: 12px; }
.rail-body .rail-card { flex: none; }   /* 滚动发生在 rail-body；卡片被压扁会 clip 掉 iframe 底部且自身不可滚 */
.rail-card { background: var(--panel); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
.rail-card .rail-title { display: flex; align-items: center; gap: 6px; padding: 10px 14px 4px; font-size: 13px; font-weight: 600; }
.rail-card .rail-title .grow { flex: 1; }
.rail-card .rail-title .lnk { font-size: 12px; color: var(--accent); font-weight: 500; cursor: pointer; }
.rail .wl-item { padding: 9px 14px; }
.rail .uf-item { padding: 9px 14px; }
.rail .empty { padding: 26px 12px; }
.rail-ai { padding: 0 14px 12px; font-size: 13px; color: var(--ink-dim); line-height: 1.6; }
.rail-ai iframe { width: 100%; height: 420px; border: none; display: block; background: #fff; border-radius: 10px; margin-top: 8px; }
.rail-ai .dg-mods { margin-top: 8px; }

/* ---- 我的页 ---- */
.me-wrap { flex: 1; overflow-y: auto; padding: 22px clamp(14px, 4vw, 40px) 60px; }
.me-inner { max-width: 640px; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; }
.me-card { display: flex; align-items: center; gap: 14px; padding: 16px 14px; background: var(--panel); border-radius: 16px; border: 1px solid var(--line-soft); }
.me-card .gen-avatar { width: 58px; height: 58px; font-size: 22px; }
.me-card .me-name { font-size: 19px; font-weight: 700; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.me-card .me-sub { font-size: 13px; color: var(--ink-dim); margin-top: 2px; }
.grp-title { font-size: 12px; color: var(--ink-faint); padding: 0 14px 6px; }
.grp { background: var(--panel); border-radius: 14px; overflow: hidden; border: 1px solid var(--line-soft); }
.grp-row {
  display: flex; align-items: center; gap: 12px; padding: 11px 14px; min-height: 54px;
  border-top: 1px solid var(--line-soft); cursor: pointer; color: var(--ink);
}
.grp-row:first-child { border-top: none; }
.grp-row.static { cursor: default; }
.grp-row .gi {
  width: 30px; height: 30px; border-radius: 8px; flex: none; display: flex; align-items: center; justify-content: center;
  background: var(--accent-soft); color: var(--accent);
}
.grp-row .gi.amber { background: var(--amber-soft); color: var(--amber); }
.grp-row .gi.violet { background: rgba(99, 102, 241, .14); color: #4f46e5; }
.grp-row .gi.gray { background: var(--raise); color: var(--ink-dim); }
.grp-row .gi.red { background: var(--up-soft); color: var(--up); }
.grp-row .gl { flex: 1; min-width: 0; font-size: 15.5px; }
.grp-row .gl small { display: block; font-size: 12px; color: var(--ink-faint); font-weight: 400; }
.grp-row .gv { font-size: 13px; color: var(--ink-faint); white-space: nowrap; }
.grp-row .chev { color: var(--line); }
.grp-row.danger .gl { color: var(--up); text-align: center; }
.grp-sub { padding: 6px 14px 14px 56px; display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--line-soft); }
.grp-sub .form-grid { grid-template-columns: 86px 1fr; }
.grp-sub .seg { max-width: 300px; }
.me-version { text-align: center; font-size: 11.5px; color: var(--ink-faint); }

/* 我的页 · 手机：左栏 / 两列只是桌面的分组壳，手机上摊平成一列，按老顺序排 */
.me-inner:not(.desk) .me-rail, .me-inner:not(.desk) .me-main, .me-inner:not(.desk) .me-col { display: contents; }
.me-inner:not(.desk) .mhead { order: -2; }
.me-inner:not(.desk) .me-card { order: -1; }
.me-inner:not(.desk) #me-notify { order: 1; }
.me-inner:not(.desk) #me-alerts { order: 2; }
.me-inner:not(.desk) #me-watch { order: 3; }
.me-inner:not(.desk) #me-price { order: 4; }
.me-inner:not(.desk) #me-invite { order: 5; }
.me-inner:not(.desk) #me-theme { order: 6; }
.me-inner:not(.desk) #me-more { order: 7; }
.me-inner:not(.desk) #me-account { order: 8; }
.me-inner:not(.desk) .me-version { order: 9; }
.me-inner:not(.desk) .grp-title small { display: none; }

/* 我的页 · 桌面：左栏固定（档案 + 目录 + 退出）+ 右侧两列卡片 */
.me-inner.desk { max-width: 1240px; display: grid; grid-template-columns: 264px minmax(0, 1fr); gap: 20px; align-items: start; }
.me-inner.desk .mhead { display: flex; grid-column: 1 / -1; padding: 0 0 2px !important; }
.me-inner.desk .mhead-title { font-size: 24px; font-weight: 700; letter-spacing: -.3px; }
.me-rail { position: sticky; top: 0; display: flex; flex-direction: column; gap: 12px; }
.me-inner.desk .me-card { display: grid; grid-template-columns: auto 1fr; padding: 18px 16px 14px; }
.me-inner.desk .me-card .gen-avatar { width: 54px; height: 54px; font-size: 21px; }
.me-inner.desk .me-card .me-name { font-size: 17px; }
.me-pstats { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--line-soft); }
.me-pstats a { display: block; text-align: center; text-decoration: none; color: inherit; border-radius: 8px; padding: 4px 0; }
.me-pstats a:hover { background: var(--raise); }
.me-pstats b { display: block; font-size: 17px; }
.me-pstats small { color: var(--ink-faint); font-size: 11.5px; }
.me-renew { grid-column: 1 / -1; display: block; text-align: center; padding: 8px; border-radius: 10px; background: var(--accent-soft); color: var(--accent); font-weight: 600; font-size: 13px; text-decoration: none; }
.me-nav { padding: 6px; }
.me-nav a { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-radius: 9px; color: var(--ink-dim); text-decoration: none; font-size: 13.5px; }
.me-nav a:hover { background: var(--raise); }
.me-nav a.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.me-nav a.danger { color: var(--up); }
.me-nav .sep { height: 1px; background: var(--line-soft); margin: 6px 8px; }
.me-main { min-width: 0; }
.me-inner.desk .me-main { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: start; }
.me-inner.desk .me-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.me-inner.desk .me-sec { background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; overflow: hidden; scroll-margin-top: 12px; }
.me-inner.desk .me-sec .grp-title { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--line-soft); font-size: 14px; font-weight: 600; color: var(--ink); }
.me-inner.desk .me-sec .grp-title small { margin-left: auto; font-weight: 400; }
.me-inner.desk .me-sec .grp { border: none; border-radius: 0; background: transparent; }
.me-inner.desk .me-sec .grp-row { padding-left: 16px; padding-right: 16px; }
.me-inner.desk .me-sec .grp-note { padding: 8px 16px 12px; background: var(--panel-2); border-top: 1px solid var(--line-soft); }
.me-inner.desk #me-theme .grp { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; }
.me-inner.desk #me-theme .grp-row { min-width: 0; }
.me-inner.desk #me-theme .grp-sub { border-top: none; padding: 0 16px 0 0; }
.me-inner.desk #me-theme .grp-row:nth-child(n+3), .me-inner.desk #me-theme .grp-sub:nth-child(n+3) { border-top: 1px solid var(--line-soft); }
/* 更多功能：磁贴 */
.me-inner.desk .me-more .grp { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 14px 16px 16px; }
.me-inner.desk .me-more .grp-row { flex-direction: column; align-items: flex-start; gap: 8px; padding: 12px; min-height: 96px; border: 1px solid var(--line-soft); border-radius: 12px; background: var(--panel-2); }
.me-inner.desk .me-more .grp-row:hover { border-color: var(--line); background: var(--raise); }
.me-inner.desk .me-more .grp-row .chev { display: none; }
.me-inner.desk .me-more .grp-row .gl { font-size: 13.5px; font-weight: 600; }
.me-inner.desk .me-more .grp-row .gl small { font-weight: 400; margin-top: 2px; }
.me-inner.desk .me-more .grp-row .chip { margin-top: auto; }
/* 价格条件：添加行常开、横排 */
.me-inner.desk .al-form { flex-direction: row; flex-wrap: wrap; align-items: center; padding: 12px 16px; }
.me-inner.desk .al-form > .inp:first-child { flex-basis: 100%; }
.me-inner.desk .al-form .td-cands { flex-basis: 100%; }
.me-inner.desk .al-form .td-cands:has(.al-num) { flex-basis: auto; }
.me-inner.desk .al-form > div:last-child { margin-left: auto; }
.me-inner.desk .al-form .btn { flex: none !important; min-width: 84px; }
/* 账号安全：修改密码常开、一行 */
.pw-desk { border-top: none; padding: 12px 16px 14px; }
.pw-desk .form-grid { grid-template-columns: auto 1fr auto 1fr; }
.pw-desk .form-actions { margin-top: 4px; }

/* ---- AI 汇总 / 研报：桌面微调 ---- */
.ops-card { overflow-x: visible; }
@media (max-width: 1100px) { .ops-card { overflow-x: auto; } }
.rp-dl.icobtn { width: 34px; height: 34px; padding: 0; color: var(--accent); }
.ops-table .c-av, .ops-table .c-meta { display: none; }

/* =========================== 手机端（≤860px） =========================== */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  /* 手机端页面顶部一律纯色：去掉 body 的两团光晕（直播页房间面板铺了 --bg 才显得平，其它页透明会露出光晕） */
  body { background: var(--bg); }
  /* 底部 tab：SVG 图标 + 角标 */
  .mtabbar { padding: 6px 4px calc(2px + var(--sab)); border-top-color: var(--line-soft); }
  .mtabbar a { min-height: 50px; gap: 3px; font-size: 10.5px; font-weight: 500; position: relative; }
  .mtabbar a .ic { width: 24px; height: 24px; }
  .mtabbar a.on { color: var(--accent); font-weight: 600; }
  .mtabbar .tbadge {
    position: absolute; top: 2px; left: calc(50% + 6px); min-width: 17px; height: 17px; padding: 0 5px;
    border-radius: 9px; background: #dc2626; color: #fff; font-size: 10.5px; font-weight: 700;
    display: flex; align-items: center; justify-content: center; font-family: var(--mono);
  }
  .frame.immersive .mtabbar, .frame.immersive .a2hs { display: none; }

  /* 直播：列表为底层页面，会话页从右侧滑入覆盖 */
  .chat-body { position: relative; }
  .rooms-pane {
    position: static; transform: none; width: 100%; box-shadow: none; background: var(--bg);
    border-right: none; padding-bottom: calc(62px + var(--sab));
  }
  .rooms-pane.open { transform: none; box-shadow: none; }
  .rooms-backdrop { display: none; }
  .feed-pane {
    position: fixed; inset: 0; z-index: 50; background: var(--bg);
    transform: translateX(100%); transition: transform .28s cubic-bezier(.2, .8, .2, 1);
    box-shadow: -12px 0 40px rgba(16, 24, 40, .18); will-change: transform;
  }
  .feed-pane.open { transform: none; }
  .feed-pane.dragging { transition: none; }
  .feed-pane .empty.no-room { display: none; }

  /* 大标题头 */
  .mhead { display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; padding: 14px 16px 4px; }
  .mhead-title { font-size: 30px; font-weight: 700; letter-spacing: -.3px; line-height: 1.15; }
  .mhead-sub { font-size: 13px; color: var(--ink-dim); margin-top: 2px; }
  .mhead-acts { display: flex; gap: 8px; padding-bottom: 4px; }
  .rooms-head { padding: 6px 16px 8px; gap: 8px; }
  .rooms-head .row { display: none; }
  .rooms-head .row.show { display: flex; }
  .rooms-head .seg-row .icobtn { display: none; }   /* 手机端隐藏老师模式钮（自选股/未读速览在大标题右侧） */
  .rooms-scroll { padding: 0; background: var(--panel); border-top: 1px solid var(--line-soft); }
  .room-item { padding: 10px 16px; border-radius: 0; border-top: 1px solid var(--line-soft); animation: none; }
  .room-item:first-child { border-top: none; }
  .room-item .ravatar { width: 46px; height: 46px; font-size: 18px; }
  .room-item .rtitle { font-size: 16px; }
  .room-item .rprev { font-size: 13px; }
  .room-item .racts { display: none; }
  .room-item.on { box-shadow: none; }
  .room-item .rstate { display: none; }
  .room-item .meta .badge { opacity: 1 !important; }
  /* 下拉刷新指示 */
  .ptr { display: flex; align-items: center; justify-content: center; height: 0; overflow: hidden; color: var(--ink-faint); font-size: 12px; gap: 6px; transition: height .15s; }
  .ptr.armed, .ptr.busy { height: 40px; }

  /* 会话页：导航栏 + 筛选行 */
  .feed-head { display: none; }
  /* 微信式整页一色：导航/搜索/筛选行不再压白底，透出与消息区相同的 --bg，
     只在筛选行下压一条发丝线——顶部与内容浑然一体，没有白块断层；
     筛选胶囊回归基础款白底芯片，在灰底上自然浮起 */
  .rnav {
    display: flex; align-items: center; gap: 2px; padding: 6px 6px 6px 2px; flex: none;
    background: transparent; border-bottom: none; position: relative; z-index: 26;
  }
  .rnav .icobtn.plain { width: 40px; height: 40px; }
  .rnav-title { flex: 1; min-width: 0; text-align: center; }
  .rnav-title h2 { margin: 0; font-size: 17px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .rnav-title .sub { font-size: 11.5px; color: var(--ink-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .rnav-search { padding: 0 12px 8px; background: transparent; }
  .rnav-search .rs-inline { max-width: none; }
  .msg-filters { padding: 6px 12px 10px; border-bottom: 1px solid var(--line); background: transparent; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none;
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent); }   /* 右侧渐隐提示可横滑（第 3 批 B · U23） */
  .msg-filters::-webkit-scrollbar { display: none; }
  .msg-filters .ft { flex: none; padding: 6px 12px; }
  .msg-filters .mf-cnt { flex: none; }
  .feed-scroll { padding: 10px 12px calc(20px + var(--sab)); }
  .jump-latest { bottom: calc(24px + var(--sab)); right: 14px; }
  .notif-stack { bottom: calc(12px + 62px + var(--sab)); }
  .frame.immersive .notif-stack { bottom: calc(14px + var(--sab)); }
  .rail { display: none; }
  .uf-pop { position: fixed; top: 64px; left: 8px; right: 8px; width: auto; z-index: 66; max-height: 70vh; }
  .ai-pop { position: fixed; z-index: 66; }
  .tag-teacher { font-size: 10px; }

  /* 我的页 */
  .me-wrap { padding: 8px 16px calc(30px + 62px + var(--sab)); }
  .grp-row { min-height: 52px; }

  /* AI 汇总：横滑日期 / 统计 / tab；操作表改紧凑卡片行 */
  .ai-wrap { padding: 8px 0 calc(60px + 62px + var(--sab)); }
  .ai-head { padding: 0 16px; margin-bottom: 8px; }
  .ai-head h2 { font-size: 30px; font-weight: 700; letter-spacing: -.3px; }
  .ai-head h2 small { display: block; margin: 2px 0 0; font-size: 13px; }
  .ai-head .date-nav { order: 3; flex: 1; flex-wrap: wrap; }   /* 休市说明放不下时换到第二行，不把「回到今天」挤成竖排 */
  .ai-head .date-nav button.back-today { white-space: nowrap; flex: none; }
  .ai-head .ai-fallback { flex-basis: 100%; margin: 0; padding: 0 4px 2px; }
  .history { margin: 0 0 10px; padding: 10px 0 10px 16px; border-radius: 0; border-left: none; border-right: none; background: transparent; border: none; box-shadow: none; }
  .history .hl { display: none; }
  .days { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-right: 16px; }
  .days::-webkit-scrollbar { display: none; }
  .day { flex: none; min-width: 64px; }
  .stats { display: flex; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding: 0 16px; gap: 8px; margin-bottom: 10px; }
  .stats::-webkit-scrollbar { display: none; }
  .stat { flex: none; min-width: 104px; padding: 10px 12px; animation: none; }
  .stat .n { font-size: 20px; }
  .tabbar { padding: 0 16px; margin-bottom: 10px; }
  .ai-tabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; max-width: 100%; width: 100%; background: transparent; border: none; box-shadow: none; padding: 0; gap: 6px; }
  .ai-tabs::-webkit-scrollbar { display: none; }
  .ai-tabs button { flex: none; padding: 6px 12px; border-radius: 999px; background: var(--panel); border: 1px solid var(--line); color: var(--ink-dim); font-size: 13px; }
  .ai-tabs button.on { background: var(--accent-soft); color: var(--accent); border-color: rgba(15, 118, 110, .45); }
  .ai-wrap > div, .ai-wrap > .card, .ai-wrap > template + div { margin-left: 16px; margin-right: 16px; }
  .ai-wrap > .ai-head, .ai-wrap > .history, .ai-wrap > .stats, .ai-wrap > .tabbar { margin-left: 0; margin-right: 0; }
  .ops-card { overflow-x: visible; }
  .ops-table.cards tr {
    display: grid; grid-template-columns: 34px 1fr auto; grid-template-areas:
      "av stock pnl" "av meta pnl" "av quote quote";
    column-gap: 10px; row-gap: 2px; align-items: center; padding: 10px 14px; background: transparent;
  }
  .ops-table.cards td { display: block; padding: 0; border: none; }
  .ops-table.cards td::before { content: none; }
  .ops-table.cards td.c-av { grid-area: av; }
  .ops-table.cards td.c-av .gen-avatar { width: 32px; height: 32px; font-size: 13px; }
  .ops-table.cards td.stock { grid-area: stock; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
  .ops-table.cards td.stock b { display: inline; font-size: 15px; }
  .ops-table.cards td.stock span { font-family: var(--mono); font-size: 11px; color: var(--ink-faint); }
  .ops-table.cards td.c-act { grid-area: stock; justify-self: end; }
  .ops-table.cards td.c-meta { grid-area: meta; font-size: 12px; color: var(--ink-dim); }
  .ops-table.cards td.quote { grid-area: quote; font-size: 12.5px; color: var(--ink-dim); max-width: none; margin-top: 2px; }
  .ops-table.cards td.pct { grid-area: pnl; font-size: 15px; font-weight: 700; text-align: right; }
  .ops-table.cards td.pct.c-next { display: none; }
  .ops-table.cards td.t { display: none; }
  .ops-table.cards td.c-teacher { display: none; }

  /* 研报：日期单行横滑 + 两行标题 + 圆形下载钮 */
  .rp-wrap .history { padding-left: 12px; }
  .rp-row { align-items: center; padding: 11px 12px; gap: 10px; }
  .rp-row .rp-name { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.4; font-size: 15px; }
  .rp-row .rp-act { display: none; }
  .rp-dl { padding: 0; }
}

/* =========================== 桌面端（≥861px） =========================== */
@media (min-width: 861px) and (min-height: 501px), (min-width: 861px) and (pointer: fine) {
  .room-item .rprev { display: block; }
  .rooms-pane { width: 312px; }
  .feed-head { flex-wrap: nowrap; gap: 14px; padding: 9px 20px; }
  .feed-head h2 { white-space: nowrap; }
  .feed-head .rs-inline { margin-left: auto; max-width: 360px; }
  .feed-head .rs-inline + .btn { margin-left: 0; }
  .feed-head .head-acts { display: flex; gap: 8px; flex: none; }
  .feed-scroll { padding: 18px clamp(18px, 4vw, 60px) 26px; }
  .feed-scroll > * { max-width: 760px; margin-left: auto; margin-right: auto; }
  .msg-filters { padding: 8px 20px; background: var(--glass-soft); }
  .ai-pop { display: none; }   /* 桌面端 AI 分析在右栏 */
}

/* ---- 概念榜展开：成分股改成紧凑卡片网格，原话紧贴在被点开的个股下方 ---- */
.cpt-stocks { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 6px 10px; padding: 10px 16px 12px 54px; }
.cpt-stock {
  display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-radius: 10px; cursor: pointer;
  background: var(--panel); border: 1px solid var(--line-soft); transition: border-color .12s, background .12s;
}
.cpt-stock:hover { border-color: var(--line); background: var(--panel); }
.cpt-stock.on { border-color: rgba(15, 118, 110, .45); background: var(--accent-soft); }
.cpt-stock .cs-name { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 6px; }
.cpt-stock .cs-name b { font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cpt-stock .cs-name .code { font-size: 11px; color: var(--ink-faint); flex: none; }
.cpt-stock .cs-m { text-align: right; flex: none; min-width: 40px; }
.cpt-stock .cs-m b { display: block; font-size: 13.5px; line-height: 1.2; white-space: nowrap; }
.cpt-stock .cs-m > span { display: block; font-size: 10.5px; color: var(--ink-faint); white-space: nowrap; }
.cpt-stock .cs-m .mslash { color: var(--ink-faint); font-weight: 400; }
.cpt-stock .cs-pnl { min-width: 56px; }
.cpt-stock .hot-arrow { font-size: 11px; }
.cpt-quotes { grid-column: 1 / -1; margin: 0 0 6px; padding: 6px 0 0; border-top: 1px dashed var(--line); }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .cpt-stocks { grid-template-columns: 1fr; padding: 8px 12px 10px; gap: 6px; }
  .cpt-stock { gap: 8px; padding: 8px 10px; }
  .cpt-stock .cs-m { min-width: 34px; }
}

/* ==================== 会员留存：到期横幅 / 一键通知 / 邀请 / 首登引导 / 定价页签 ==================== */

/* 到期提醒横幅（frame 内、内容区之上；≤3 天 .urgent 转红） */
.expire-bar {
  display: flex; align-items: center; gap: 10px; padding: 9px 14px; flex: none;
  background: var(--amber-soft); color: var(--amber); border-bottom: 1px solid rgba(180, 83, 9, .18);
  font-size: 13.5px;
}
.expire-bar.urgent { background: var(--up-soft); color: var(--up); border-bottom-color: rgba(220, 38, 38, .2); }
/* 站点公告横幅（管理页发布；与到期横幅同款骨架，蓝青色调区分） */
.ann-bar {
  display: flex; align-items: center; gap: 10px; padding: 9px 14px; flex: none;
  background: var(--accent-soft); color: var(--accent-strong, var(--accent));
  border-bottom: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
  font-size: 13.5px;
}
.ann-bar .ann-ic { flex: none; }
.ann-bar .ann-tx { flex: 1; min-width: 0; line-height: 1.5; }
.ann-bar .ann-tx span { opacity: .85; }
.ann-bar .ann-x {
  flex: none; border: 0; background: none; color: inherit; cursor: pointer;
  font-size: 14px; padding: 4px 6px; border-radius: 6px; opacity: .7;
}
.ann-bar .ann-x:hover { background: color-mix(in srgb, var(--accent) 12%, transparent); opacity: 1; }
/* 管理页：设备弹层行 / 待办 KPI / 成员表勾选列 */
.adm-dev-row {
  display: flex; align-items: center; gap: 10px; padding: 10px 2px;
  border-top: 1px solid var(--line-soft); font-size: 13px;
}
.user-table .c-sel { width: 30px; padding-left: 8px; padding-right: 4px; }
.user-table .c-sel input { cursor: pointer; }
.adm-users .who .chip.warn { margin-left: 6px; font-size: 11px; }
.user-table tr.dim td { opacity: .55; }
.expire-bar .expire-tx { flex: 1; min-width: 0; line-height: 1.45; }
.expire-bar .expire-tx small { display: block; font-size: 12px; opacity: .85; }
.expire-bar .btn.sm { flex: none; }
@media (max-width: 480px) {
  .expire-bar { padding: 8px 12px; font-size: 13px; }
  .expire-bar .btn.sm { display: none; }
}
.expire-bar .expire-x {
  flex: none; width: 30px; height: 30px; border-radius: 8px; border: none; background: transparent;
  color: inherit; display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: .7;
}
.expire-bar .expire-x:hover { opacity: 1; background: rgba(0, 0, 0, .06); }

/* 我的页：分组内的动作行 / 邀请卡 */
.grp-actions { display: flex; gap: 8px; padding: 0 14px 12px 56px; }
.switch.busy { opacity: .5; pointer-events: none; }
.inv-head { display: flex; gap: 12px; align-items: flex-start; padding: 14px 14px 12px; }
.inv-title { font-size: 15.5px; font-weight: 600; line-height: 1.4; }
.inv-sub { font-size: 12.5px; color: var(--ink-faint); margin-top: 3px; line-height: 1.6; }
.inv-link {
  margin: 0 14px 12px; display: flex; align-items: center; gap: 8px; padding: 8px 8px 8px 12px;
  border-radius: 10px; background: var(--panel-2); border: 1px dashed var(--line);
}
.inv-url { flex: 1; min-width: 0; font-family: var(--mono); font-size: 12.5px; color: var(--ink-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.inv-link .btn.sm { flex: none; }

/* 首登引导：底部弹层（桌面居中卡片） */
.ob-mask { position: fixed; inset: 0; z-index: 120; background: var(--overlay); display: flex; align-items: flex-end; justify-content: center; }
.ob-sheet {
  width: 100%; max-width: 520px; max-height: 92vh; overflow-y: auto; background: var(--bg);
  border-radius: 22px 22px 0 0; padding: 10px 18px calc(22px + var(--sab));
  display: flex; flex-direction: column; gap: 14px; box-shadow: 0 -8px 30px rgba(0, 0, 0, .18);
  animation: ob-up .28s cubic-bezier(.2, .8, .2, 1);
}
@keyframes ob-up { from { transform: translateY(40px); opacity: 0; } to { transform: none; opacity: 1; } }
.ob-top { display: flex; justify-content: space-between; align-items: center; }
.ob-dots { display: flex; gap: 5px; align-items: center; }
.ob-dots i { width: 8px; height: 8px; border-radius: 4px; background: var(--line); transition: width .2s, background .2s; }
.ob-dots i.on { width: 22px; background: var(--accent); }
.ob-h1 { font-size: 22px; font-weight: 800; letter-spacing: -.3px; line-height: 1.3; }
.ob-sub { font-size: 13.5px; color: var(--ink-dim); margin-top: 5px; line-height: 1.65; }
.ob-rooms { display: flex; flex-direction: column; gap: 8px; }
.ob-room {
  display: flex; align-items: center; gap: 10px; padding: 7px 12px; border-radius: 12px;
  border: 1px solid var(--line-soft); background: var(--panel); cursor: pointer; transition: border-color .15s, background .15s;
}
.ob-room.on { border-color: var(--accent); background: var(--accent-soft); }
.ob-room .gen-avatar { width: 34px; height: 34px; font-size: 14px; }
.ob-room-tx { flex: 1; min-width: 0; }
.ob-room-tx b { display: block; font-size: 14.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ob-room-tx small { font-size: 12px; color: var(--ink-faint); }
.ob-star { color: var(--line); flex: none; display: flex; }
.ob-room.on .ob-star { color: var(--accent); }
.ob-cta { width: 100%; padding: 12px; font-size: 15px; justify-content: center; }
.ob-hero { text-align: center; padding-top: 6px; }
.ob-hero-ic { width: 72px; height: 72px; border-radius: 20px; margin: 0 auto 12px; background: var(--accent-soft); color: var(--accent); display: flex; align-items: center; justify-content: center; }
.ob-hero-ic.violet { background: rgba(99, 102, 241, .14); color: #4f46e5; }
.ob-note { font-size: 12.5px; color: var(--ink-faint); text-align: center; line-height: 1.7; }
.ob-hero-ic.amber { background: var(--amber-soft); color: var(--amber); }
/* 免责声明同意层：正文区自己滚动，勾选 + 按钮固定在底部 */
.dc-sheet { max-height: 92vh; }
.dc-body {
  flex: 1; min-height: 120px; max-height: 42vh; overflow-y: auto; -webkit-overflow-scrolling: touch;
  border: 1px solid var(--line-soft); border-radius: 14px; background: var(--panel); padding: 4px 14px;
}
.dc-item { padding: 10px 0; border-bottom: 1px solid var(--line-soft); }
.dc-item:last-child { border-bottom: 0; }
.dc-item b { display: flex; align-items: center; font-size: 13.5px; }
.dc-item p { margin: 4px 0 0; font-size: 13px; line-height: 1.8; color: var(--ink-dim); }
.dc-agree { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; line-height: 1.6; cursor: pointer; transition: opacity .2s; }
.dc-agree.dim { opacity: .55; }
.dc-agree input { width: 18px; height: 18px; margin: 1px 0 0; flex: none; accent-color: var(--accent); }
.ob-note a { color: var(--ink-dim); }
@media (min-width: 861px) and (min-height: 501px), (min-width: 861px) and (pointer: fine) {
  .ob-mask { align-items: center; }
  .ob-sheet { border-radius: 18px; padding-bottom: 22px; }
  .ob-sheet .msheet-handle { display: none; }
}

/* 邀请落地页（公开） */
.join-wrap { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding-bottom: 40px; }
.join-hero {
  padding: 40px 22px 32px; text-align: center; color: #fff;
  background: linear-gradient(160deg, #0f766e, #0b4f66 70%);
}
.join-badge { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border-radius: 999px; background: rgba(255, 255, 255, .16); font-size: 12.5px; }
.join-title { font-size: 24px; font-weight: 800; margin-top: 14px; line-height: 1.35; }
.join-title b { color: #99f6e4; }
.join-sub { font-size: 13.5px; opacity: .88; margin-top: 10px; line-height: 1.7; }
.join-card {
  width: min(100% - 28px, 520px); margin: -18px auto 0; background: var(--panel); border-radius: 16px;
  border: 1px solid var(--line-soft); padding: 16px 14px; display: flex; flex-direction: column; gap: 12px; box-shadow: var(--shadow-md);
}
.join-card + .hint { text-align: center; }
.join-f { display: flex; flex-direction: column; gap: 5px; }
.join-f > span { font-size: 12.5px; color: var(--ink-dim); }
.join-perms { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 10px; }
.join-perm { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; color: var(--ink); }
.join-perm i { font-style: normal; font-weight: 700; color: var(--dn); }
.join-perm.off { color: var(--ink-faint); }
.join-perm.off i { color: var(--line); }
.join-perm.room { color: var(--ink-dim); }
.join-perm.room::before { content: "·"; color: var(--line); margin-right: 2px; }
.join-price {
  margin-top: 8px; padding: 8px 12px; border-radius: 9px; font-size: 13px; color: var(--ink-dim);
  background: var(--panel-2); border: 1px solid var(--line-soft);
}
.join-price b { color: var(--ink); font-weight: 700; }
.join-price .sep { margin: 0 8px; color: var(--line); }
.join-price small { color: var(--up); margin-left: 6px; }
.join-wrap .hint { color: var(--ink-faint); font-size: 12.5px; line-height: 1.7; }
.join-wrap a { color: var(--accent); font-weight: 500; }
.join-wrap .hint a { color: var(--accent); }
/* 深色下 hero 压暗一档，与页面底色衔接；主按钮改深色字（白字压在薄荷绿上对比不够） */
@media (prefers-color-scheme: dark) {
  html:not([data-theme="light"]) .join-hero { background: linear-gradient(160deg, #0f5f5a, #0b3644 70%); }
  html:not([data-theme="light"]) .btn.primary,
  html:not([data-theme="light"]) .hp-btn.teal { color: #06201d; border-color: transparent; }
}
html[data-theme="dark"] .join-hero { background: linear-gradient(160deg, #0f5f5a, #0b3644 70%); }
html[data-theme="dark"] .btn.primary,
html[data-theme="dark"] .hp-btn.teal { color: #06201d; border-color: transparent; }

/* 帮助页：付费周期页签 + 紧凑定价行（手机一屏放下三档） */
.hp-bill { max-width: 420px; margin: 0 auto 14px; }
.hp-bill em { font-style: normal; font-size: 11px; color: var(--up); margin-left: 2px; }
.hp-plans { display: flex; flex-direction: column; gap: 10px; max-width: 760px; margin: 0 auto; }
.hp-plan {
  position: relative; display: grid; grid-template-columns: 1fr auto; grid-template-areas: "l r" "m m";
  gap: 6px 12px; align-items: center; padding: 14px 16px; background: var(--panel);
  border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow-sm);
}
.hp-plan.plan-vip { border: 2px solid var(--accent); box-shadow: 0 8px 24px rgba(15, 118, 110, .14); }
.hp-plan.plan-svip { background: linear-gradient(160deg, #1e2938, #0f172a 70%); border-color: #334155; color: #e6edf5; }
.hp-plan.plan-svip .lv-badge { border-color: transparent; }
.hp-plan-l { grid-area: l; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.hp-plan-l small { width: 100%; font-size: 12px; color: var(--ink-faint); }
.hp-plan.plan-svip .hp-plan-l small { color: #94a3b8; }
.hp-plan-flag { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; background: var(--accent-grad); color: #fff; }
.hp-plan-r { grid-area: r; text-align: right; }
.hp-plan-price { line-height: 1; white-space: nowrap; }
.hp-plan-price .cur { font-size: 15px; font-weight: 600; margin-right: 1px; }
.hp-plan-price b { font-size: 30px; font-weight: 800; letter-spacing: -1px; }
.hp-plan.plan-svip .hp-plan-price b { color: #fbbf24; }
.hp-plan-price .per { font-size: 12.5px; color: var(--ink-faint); margin-left: 3px; }
.hp-plan-r small { display: block; font-size: 12px; color: var(--ink-faint); margin-top: 4px; }
.hp-plan-r small em { font-style: normal; color: var(--up); font-weight: 600; }
.hp-plan.plan-svip .hp-plan-r small, .hp-plan.plan-svip .hp-plan-price .per { color: #94a3b8; }
.hp-plan-m { grid-area: m; display: flex; flex-wrap: wrap; gap: 4px 14px; padding-top: 6px; border-top: 1px dashed var(--line-soft); }
.hp-plan.plan-svip .hp-plan-m { border-top-color: #334155; }
.hp-pm { font-size: 13px; display: inline-flex; align-items: center; gap: 4px; }
.hp-pm i { font-style: normal; color: var(--dn); font-weight: 700; }
.hp-pm.off { color: var(--ink-faint); }
.hp-pm.off i { color: var(--line); }
.hp-plan.plan-svip .hp-pm.off { color: #64748b; }
.hp-plan.plan-svip .hp-pm.off i { color: #475569; }
.hp-save { display: block; font-size: 11.5px; color: var(--up); font-weight: 500; }
.hp-table .l small { font-weight: 400; color: var(--ink-faint); }
@media (min-width: 861px) and (min-height: 501px), (min-width: 861px) and (pointer: fine) {
  .hp-plan { grid-template-columns: 200px 1fr auto; grid-template-areas: "l m r"; gap: 10px 18px; padding: 16px 20px; }
  .hp-plan-m { border-top: none; padding-top: 0; }
  .hp-plan-price b { font-size: 34px; }
}

/* 管理页：侧栏角标 */
.admin-badge { display: inline-block; min-width: 18px; padding: 1px 6px; margin-left: 6px; border-radius: 999px; background: var(--up); color: #fff; font-size: 11px; font-weight: 600; text-align: center; }

/* ---- 手机横屏（高 ≤500px 的触屏）：沿用手机布局，只把大标题头压扁，给内容多留些高度 ---- */
@media (max-height: 500px) and (pointer: coarse) {
  .mhead { padding: 6px 16px 2px; }
  .mhead-title { font-size: 22px; }
  .mhead-sub { display: none; }
  .mhead-acts .icobtn { width: 32px; height: 32px; }
  .rooms-head { padding: 4px 16px 6px; }
  .mtabbar a { min-height: 42px; gap: 1px; }
  .mtabbar a .ic { width: 20px; height: 20px; }
  .ai-head h2 { font-size: 22px; }
  .ai-head h2 small { display: inline; margin-left: 6px; }
  .rnav { padding-top: 2px; padding-bottom: 2px; }
  .msg-filters { padding: 5px 12px; }
}

@media (prefers-color-scheme: dark) {

/* 深色模式：操作/等级胶囊由浅底深字改为「同色系透明底 + 亮字」，避免刺眼的白块 */
  html:not([data-theme="light"]) .chip.c-buy    { background: rgba(248, 113, 113, .16); color: #fca5a5; }
  html:not([data-theme="light"]) .chip.c-add    { background: rgba(251, 113, 133, .16); color: #fda4af; }
  html:not([data-theme="light"]) .chip.c-cbuy   { background: rgba(251, 146, 60, .16); color: #fdba74; }
  html:not([data-theme="light"]) .chip.c-sell   { background: rgba(74, 222, 128, .16); color: #86efac; }
  html:not([data-theme="light"]) .chip.c-reduce { background: rgba(52, 211, 153, .16); color: #6ee7b7; }
  html:not([data-theme="light"]) .chip.c-clear  { background: rgba(74, 222, 128, .22); color: #bbf7d0; }
  html:not([data-theme="light"]) .chip.c-csell,   html:not([data-theme="light"]) .chip.c-creduce,   html:not([data-theme="light"]) .chip.other { background: rgba(45, 212, 191, .16); color: #5eead4; }
  html:not([data-theme="light"]) .chip.c-profit { background: rgba(251, 191, 36, .16); color: #fcd34d; }
  html:not([data-theme="light"]) .chip.c-stop   { background: rgba(249, 115, 22, .18); color: #fdba74; }
  html:not([data-theme="light"]) .chip.c-conditional_buy   { background: rgba(251, 146, 60, .16); color: #fdba74; }
  html:not([data-theme="light"]) .chip.c-conditional_sell,
  html:not([data-theme="light"]) .chip.c-conditional_reduce{ background: rgba(45, 212, 191, .16); color: #5eead4; }
  html:not([data-theme="light"]) .chip.c-take_profit { background: rgba(251, 191, 36, .16); color: #fcd34d; }
  html:not([data-theme="light"]) .chip.c-stop_loss   { background: rgba(249, 115, 22, .18); color: #fdba74; }
  html:not([data-theme="light"]) .chip.c-hold   { background: rgba(56, 189, 248, .16); color: #7dd3fc; }
  html:not([data-theme="light"]) .chip.c-watch  { background: rgba(167, 139, 250, .18); color: #c4b5fd; }
  html:not([data-theme="light"]) .chip.c-avoid  { background: rgba(148, 163, 184, .16); color: #cbd5e1; }
  html:not([data-theme="light"]) .chip.warn     { background: rgba(248, 113, 113, .16); color: #fca5a5; }
  html:not([data-theme="light"]) .lv-badge.lv-vip  { background: rgba(251, 191, 36, .16); color: #fcd34d; border-color: rgba(251, 191, 36, .35); }
  html:not([data-theme="light"]) .lv-badge.lv-svip { background: linear-gradient(135deg, rgba(248, 113, 113, .2), rgba(251, 191, 36, .2)); color: #fca5a5; border-color: rgba(248, 113, 113, .35); }
}

/* 深色模式：操作/等级胶囊由浅底深字改为「同色系透明底 + 亮字」，避免刺眼的白块 */
html[data-theme="dark"] .chip.c-buy    { background: rgba(248, 113, 113, .16); color: #fca5a5; }
html[data-theme="dark"] .chip.c-add    { background: rgba(251, 113, 133, .16); color: #fda4af; }
html[data-theme="dark"] .chip.c-cbuy   { background: rgba(251, 146, 60, .16); color: #fdba74; }
html[data-theme="dark"] .chip.c-sell   { background: rgba(74, 222, 128, .16); color: #86efac; }
html[data-theme="dark"] .chip.c-reduce { background: rgba(52, 211, 153, .16); color: #6ee7b7; }
html[data-theme="dark"] .chip.c-clear  { background: rgba(74, 222, 128, .22); color: #bbf7d0; }
html[data-theme="dark"] .chip.c-csell, html[data-theme="dark"] .chip.c-creduce, html[data-theme="dark"] .chip.other { background: rgba(45, 212, 191, .16); color: #5eead4; }
html[data-theme="dark"] .chip.c-profit { background: rgba(251, 191, 36, .16); color: #fcd34d; }
html[data-theme="dark"] .chip.c-stop   { background: rgba(249, 115, 22, .18); color: #fdba74; }
html[data-theme="dark"] .chip.c-conditional_buy   { background: rgba(251, 146, 60, .16); color: #fdba74; }
html[data-theme="dark"] .chip.c-conditional_sell,
html[data-theme="dark"] .chip.c-conditional_reduce{ background: rgba(45, 212, 191, .16); color: #5eead4; }
html[data-theme="dark"] .chip.c-take_profit { background: rgba(251, 191, 36, .16); color: #fcd34d; }
html[data-theme="dark"] .chip.c-stop_loss   { background: rgba(249, 115, 22, .18); color: #fdba74; }
html[data-theme="dark"] .chip.c-hold   { background: rgba(56, 189, 248, .16); color: #7dd3fc; }
html[data-theme="dark"] .chip.c-watch  { background: rgba(167, 139, 250, .18); color: #c4b5fd; }
html[data-theme="dark"] .chip.c-avoid  { background: rgba(148, 163, 184, .16); color: #cbd5e1; }
html[data-theme="dark"] .chip.warn     { background: rgba(248, 113, 113, .16); color: #fca5a5; }
html[data-theme="dark"] .lv-badge.lv-vip  { background: rgba(251, 191, 36, .16); color: #fcd34d; border-color: rgba(251, 191, 36, .35); }
html[data-theme="dark"] .lv-badge.lv-svip { background: linear-gradient(135deg, rgba(248, 113, 113, .2), rgba(251, 191, 36, .2)); color: #fca5a5; border-color: rgba(248, 113, 113, .35); }

/* ==================== 锁定态 tab / 升级页 / 到期页 / 跟单模拟 ==================== */
.topbar .nav a.locked, .mtabbar a.locked { opacity: .55; }
.topbar .nav a .lk { display: inline-flex; margin-left: 3px; vertical-align: -1px; color: var(--ink-faint); }
.mtabbar a .lk {
  position: absolute; top: 4px; right: 12px; width: 15px; height: 15px; border-radius: 50%;
  background: var(--ink-faint); color: #fff; display: flex; align-items: center; justify-content: center;
}
.mtabbar a { position: relative; }

.up-wrap { flex: 1; overflow-y: auto; padding: 14px clamp(14px, 4vw, 40px) 60px; }
.up-inner { max-width: 560px; margin: 0 auto; display: flex; flex-direction: column; gap: 14px; }
.up-head { display: flex; align-items: center; gap: 8px; }
.up-head b { font-size: 17px; }
.up-hero { border-radius: 16px; padding: 18px 16px; background: linear-gradient(160deg, #0f766e, #0b4f66 70%); color: #fff; }
.up-h1 { font-size: 20px; font-weight: 800; line-height: 1.3; }
.up-sub { font-size: 13px; opacity: .85; margin-top: 8px; line-height: 1.7; }
.up-card { background: var(--panel); border-radius: 14px; border: 1px solid var(--line-soft); padding: 14px; }
.up-card-head { padding: 12px 12px 8px; display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; }
.up-card-head b { font-size: 14px; }
.up-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line-soft); }
.up-row .gen-avatar { width: 34px; height: 34px; font-size: 14px; }
.up-no { width: 18px; color: var(--ink-faint); font-size: 14px; }
.up-no.g1 { color: #b45309; }
.up-row-tx { flex: 1; min-width: 0; }
.up-row-tx b { display: block; font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.up-row-tx small { font-size: 12px; color: var(--ink-faint); display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.up-row-sc { text-align: right; }
.up-row-sc b { font-size: 16px; }
.up-row-sc small { display: block; font-size: 11px; color: var(--ink-faint); }
.up-blur-wrap { position: relative; }
.up-row.blur { filter: blur(4px); opacity: .55; user-select: none; }
.up-blur-cap { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.up-blur-cap .chip { background: var(--panel); box-shadow: var(--shadow-md); display: inline-flex; gap: 4px; align-items: center; }
.up-price-row { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.up-diff { color: var(--ink); font-size: 18px; }
.up-points { display: flex; gap: 6px 14px; margin: 10px 0 12px; font-size: 12.5px; color: var(--ink-dim); flex-wrap: wrap; }
.up-points span { display: inline-flex; align-items: center; gap: 4px; }
.up-points .ic { color: var(--dn); }

.ex-bar { display: flex; align-items: flex-start; gap: 10px; padding: 11px 12px; border-radius: 12px; background: var(--up-soft); border: 1px solid rgba(220, 38, 38, .25); color: var(--up); }
.ex-bar-tx { flex: 1; font-size: 13.5px; line-height: 1.5; }
.ex-bar-tx small { display: block; font-size: 12px; opacity: .85; }
.ex-stats { display: flex; gap: 18px; margin-top: 8px; flex-wrap: wrap; }
.ex-stats b { font-size: 24px; }
.ex-stats small { display: block; font-size: 12px; color: var(--ink-faint); }
.ex-room { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line-soft); opacity: .6; }
.ex-room .gen-avatar { width: 40px; height: 40px; font-size: 15px; }
.ex-room .ex-n { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--up); color: #fff; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; font-family: var(--mono); }

.rank-follow { margin-top: 10px; padding: 9px 11px; border-radius: 10px; background: var(--panel-2); display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.rank-follow .rf-k { font-size: 12.5px; color: var(--ink-dim); }
.rank-follow .rf-k small { display: block; font-size: 11px; color: var(--ink-faint); }
.rank-follow .rf-v { text-align: right; }
.rank-follow .rf-v b { font-size: 16px; }
.rank-follow .rf-v small { display: block; font-size: 11px; color: var(--ink-faint); }

/* ==================== 研报库改版：分类图标块 / 时间轴列表 / 阅读栏 / 手机胶囊 ==================== */
@media (min-width: 861px) { .rp-wrap { align-items: flex-start; } }   /* 手机是纵向堆叠，不能 flex-start（会让内容撑宽） */
.rp-cat { gap: 9px; padding: 7px 9px; }
.rp-cat-ic { width: 26px; height: 26px; border-radius: 7px; background: var(--panel-2); display: flex; align-items: center; justify-content: center; font-size: 14px; flex: none; }
.rp-cat.on .rp-cat-ic { background: var(--panel); }
.rp-cat-name { font-size: 13.5px; }
.rp-cat-n { background: transparent; color: var(--ink-faint); padding: 0; }
.rp-cat.on .rp-cat-n { background: transparent; }
.rp-side-h { font-size: 11.5px; color: var(--ink-faint); }

.rp-main { display: flex; flex-direction: column; gap: 10px; min-height: 0; }
.rp-main > * { flex-shrink: 0; }   /* 头部 / 日期条不因容器限高被压扁 */
.rp-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rp-head-ic { font-size: 22px; line-height: 1; }
.rp-title { margin: 0; font-size: 19px; font-weight: 700; }
.rp-title.big { font-size: 26px; font-weight: 800; letter-spacing: -.3px; }
.rp-sub { font-size: 12.5px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.rp-head .grow { flex: 1; }
.rp-search { display: flex; align-items: center; gap: 6px; width: 220px; padding: 0 10px; height: 32px; border-radius: 9px; border: 1px solid var(--line); background: var(--panel); color: var(--ink-faint); }
.rp-search.on { border-color: var(--accent); }
.rp-search input { flex: 1; min-width: 0; border: none; background: transparent; color: var(--ink); font-size: 13px; outline: none; }
.rp-search-x { cursor: pointer; display: inline-flex; }

.rp-days { display: flex; gap: 6px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding-bottom: 2px; }
.rp-days::-webkit-scrollbar { display: none; }
.rp-day { flex: none; min-width: 58px; padding: 5px 8px; border-radius: 10px; text-align: center; border: 1px solid var(--line-soft); background: var(--panel); cursor: pointer; line-height: 1.25; transition: border-color .12s; }
.rp-day small { display: block; font-size: 10.5px; color: var(--ink-faint); }
.rp-day b { display: block; font-size: 13px; font-variant-numeric: tabular-nums; }
.rp-day.wk { opacity: .55; }
.rp-day:hover { border-color: var(--accent); }
.rp-day.on { border-color: var(--accent); background: var(--accent-soft); opacity: 1; }
.rp-day.on b { color: var(--accent); }
.rp-day.more { border-style: dashed; color: var(--ink-dim); font-size: 12px; display: flex; align-items: center; padding: 5px 10px; }

.rp-body { display: flex; gap: 14px; align-items: flex-start; min-height: 0; }
.rp-list { flex: 1; min-width: 0; border-color: var(--line-soft); }
.rp-types { display: flex; gap: 12px; padding: 9px 14px; font-size: 12px; color: var(--ink-faint); border-bottom: 1px solid var(--line-soft); overflow-x: auto; scrollbar-width: none; }
.rp-type { cursor: pointer; white-space: nowrap; }
.rp-type small { color: var(--ink-faint); margin-left: 2px; }
.rp-type.on { color: var(--accent); font-weight: 600; }
.rp-row { align-items: flex-start; gap: 12px; padding: 10px 14px; }
.rp-row .rp-time { width: 44px; text-align: right; padding-top: 2px; font-variant-numeric: tabular-nums; }
.rp-row .rp-tx { flex: 1; min-width: 0; }
.rp-row .rp-name { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-height: 1.45; font-weight: 600; font-size: 14px; }
.rp-summ { font-size: 12px; color: var(--ink-dim); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rp-summ.faint { color: var(--ink-faint); }
.rp-side-col { flex: none; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.rp-side-col .rp-kind { font-size: 10.5px; padding: 3px 6px; }
.rp-side-col .rp-dl { border: none; background: transparent; padding: 0; color: var(--ink-faint); display: inline-flex; }
.rp-side-col .rp-dl:hover { color: var(--accent); background: transparent; }
.rp-row .rp-thumb { width: 56px; height: 56px; }

.rp-reader { width: 460px; flex: none; position: sticky; top: 66px; max-height: calc(100vh - 84px); background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; box-shadow: var(--shadow-md); display: flex; flex-direction: column; overflow: hidden; }
.rp-rhead { display: flex; align-items: center; gap: 6px; padding: 10px 12px; border-bottom: 1px solid var(--line-soft); }
.rp-rhead .hint { font-size: 12px; white-space: nowrap; }
.rp-rtitle { padding: 12px 16px 0; font-size: 16px; font-weight: 700; line-height: 1.45; }
.rp-rbody { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; }
.rp-md.reader { max-height: none; border-top: none; padding: 8px 16px 16px; font-size: 14px; line-height: 1.8; }
.rp-pdf { flex: 1; width: 100%; min-height: 60vh; border: none; background: var(--panel-2); }
.rp-rimg { max-width: 100%; margin: 12px auto; cursor: zoom-in; border-radius: 8px; }
.rp-rbody .rp-audio { padding: 30px 16px; }
.rp-rbody .rp-audio audio { width: 100%; }
.rp-rfoot { padding: 8px 12px; font-size: 11.5px; color: var(--ink-faint); border-top: 1px solid var(--line-soft); }
.rp-reader.wide { width: 620px; }   /* PDF / 图片：更宽才看得清 */
@media (max-width: 1280px) { .rp-reader.wide { width: 520px; } }
@media (max-width: 1180px) { .rp-reader { width: 380px; } .rp-reader.wide { width: 440px; } }

/* 手机 */
.rp-catchips { display: flex; gap: 6px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.rp-catchips::-webkit-scrollbar { display: none; }
.rp-catchip { flex: none; padding: 5px 11px; border-radius: 999px; font-size: 12.5px; border: 1px solid var(--line); background: var(--panel); color: var(--ink-dim); white-space: nowrap; }
.rp-catchip small { color: var(--ink-faint); margin-left: 3px; }
.rp-catchip.on { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); font-weight: 600; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .rp-wrap { padding: 10px 12px calc(30px + 62px + var(--sab)); gap: 10px; }
  .rp-head { gap: 8px; }
  .rp-head .rp-sub { flex: 1; }
  .rp-search { width: 34px; height: 34px; padding: 0; border-radius: 50%; justify-content: center; }
  .rp-search input, .rp-search-x { display: none; }
  .rp-search.on, .rp-search:focus-within { width: 100%; border-radius: 9px; padding: 0 10px; justify-content: flex-start; order: 5; }
  .rp-search.on input, .rp-search:focus-within input { display: block; }
  .rp-search.on .rp-search-x { display: inline-flex; }
  .rp-row { padding: 11px 12px; gap: 10px; }
  .rp-row .rp-time { width: 40px; }
  .rp-row .rp-name { font-size: 14.5px; }
  .rp-summ { display: none; }
  .rp-summ.faint { display: block; }
  .rp-types { padding: 8px 12px; }
}

/* ==================== 个股中心页 ==================== */
.ops-table .stock a.stk-link { color: inherit; text-decoration: none; }
.ops-table .stock a.stk-link:hover b { color: var(--accent); }
.sk-wrap { flex: 1; overflow-y: auto; padding: 12px clamp(12px, 4vw, 40px) 60px; }
.sk-inner { max-width: 640px; margin: 0 auto; display: flex; flex-direction: column; gap: 12px; }
.sk-head { display: flex; align-items: center; gap: 8px; }
.sk-head .grow { flex: 1; }
.sk-name { font-size: 20px; }
.sk-code { font-size: 12px; color: var(--ink-faint); }
.sk-quote { display: flex; align-items: center; gap: 14px; padding: 12px 14px; background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; }
.sk-price { font-size: 28px; font-weight: 800; letter-spacing: -.5px; line-height: 1.1; }
.sk-pct { font-size: 13px; font-weight: 600; margin-top: 2px; }
.sk-pct .hint { font-weight: 400; }
.sk-chart { flex: 1; min-width: 0; }
.sk-chart .hint { font-size: 11.5px; text-align: right; }
.sk-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.sk-stat { background: var(--panel); border: 1px solid var(--line-soft); border-radius: 12px; padding: 8px 10px; }
.sk-stat small { display: block; font-size: 11px; color: var(--ink-faint); }
.sk-stat b { font-size: 17px; font-weight: 800; white-space: nowrap; }
.sk-stat .up { color: var(--up); } .sk-stat .dn { color: var(--dn); }
.sk-inner .seg-item .n { font-size: 11px; color: var(--ink-faint); font-weight: 500; }
.sk-card { background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; overflow: hidden; }
.sk-filters { display: flex; gap: 12px; align-items: center; padding: 9px 12px; font-size: 12px; color: var(--ink-faint); border-bottom: 1px solid var(--line-soft); overflow-x: auto; scrollbar-width: none; white-space: nowrap; }
.sk-filters .grow { flex: 1; }
.sk-f { cursor: pointer; flex: none; }
.sk-f.on { color: var(--accent); font-weight: 600; }
.sk-op { display: flex; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line-soft); cursor: pointer; align-items: center; }
.sk-op:first-child { border-top: none; }
.sk-op:hover { background: var(--panel-2); }
.sk-op-t { width: 42px; flex: none; font-size: 11px; color: var(--ink-faint); line-height: 1.4; align-self: flex-start; padding-top: 2px; }
.sk-op-b { flex: 1; min-width: 0; }
.sk-op-h { display: flex; align-items: center; gap: 6px; font-size: 13px; flex-wrap: wrap; }
.sk-op-h small { font-size: 10.5px; }
.sk-op-h .chip { font-size: 11px; padding: 1px 7px; }
.sk-op-q { font-size: 13px; color: var(--ink); margin-top: 3px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.sk-op-q.strong { font-weight: 600; }
.sk-op-p { font-size: 11.5px; margin-top: 4px; }
.sk-op .chev { color: var(--line); flex: none; display: inline-flex; }
.sk-lock { display: flex; align-items: center; gap: 12px; padding: 16px 14px; font-size: 13.5px; line-height: 1.5; color: var(--ink-dim); }
.sk-lock > span:first-child { color: var(--ink-faint); display: inline-flex; }
.sk-lock > div { flex: 1; }
.sk-foot { font-size: 11.5px; text-align: center; line-height: 1.7; }
@media (max-width: 860px) { .sk-price { font-size: 26px; } .sk-quote { gap: 10px; } }

/* ==================== 信号流 ==================== */
.sg-wrap { flex: 1; overflow-y: auto; padding: 12px clamp(12px, 4vw, 40px) 60px; }
.sg-inner { max-width: 760px; margin: 0 auto; display: flex; flex-direction: column; gap: 10px; }
.sg-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sg-head .grow { flex: 1; }
.sg-title { margin: 0; font-size: 24px; font-weight: 800; letter-spacing: -.3px; }
.sg-date { width: auto; padding: 5px 28px 5px 10px; font-size: 13px; }
.sg-filters { display: flex; gap: 6px; }
.sg-f { flex: 1; text-align: center; padding: 6px 4px; border-radius: 9px; font-size: 12.5px; border: 1px solid var(--line); background: var(--panel); color: var(--ink-dim); cursor: pointer; white-space: nowrap; user-select: none; }
.sg-f small { color: var(--ink-faint); }
.sg-other { cursor: pointer; text-decoration: underline dotted; }
.sg-off { color: var(--amber); font-weight: 600; }
.sg-other.on { color: var(--accent); font-weight: 600; }
.sg-f.on { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); font-weight: 600; }
.sg-teachers { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.sg-teachers::-webkit-scrollbar { display: none; }
.sg-t { flex: none; display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px 3px 4px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel); font-size: 12px; color: var(--ink-dim); cursor: pointer; white-space: nowrap; }
.sg-t .gen-avatar { width: 18px; height: 18px; font-size: 10px; }
.sg-t small { color: var(--ink-faint); }
.sg-t.on { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
.sg-card { background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; overflow: hidden; }
.sg-sum { padding: 8px 12px; font-size: 11.5px; background: var(--panel-2); border-bottom: 1px solid var(--line-soft); }
.sg-row { display: flex; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line-soft); cursor: pointer; align-items: center; }
.sg-row:first-of-type { border-top: none; }
.sg-row:hover { background: var(--panel-2); }
.sg-row.my { background: rgba(245, 158, 11, .06); }
.sg-row.kw { border-left: 3px solid var(--amber); padding-left: 9px; }
.sg-time { width: 38px; flex: none; font-size: 12px; color: var(--ink-faint); align-self: flex-start; padding-top: 2px; }
.sg-body { flex: 1; min-width: 0; }
.sg-l1 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.sg-stock { font-size: 14.5px; font-weight: 700; color: var(--ink); text-decoration: none; }
a.sg-stock:hover { color: var(--accent); }
.sg-l1 .chip { font-size: 11px; padding: 1px 7px; }
.sg-tag { font-size: 10.5px; padding: 1px 6px; border-radius: 999px; }
.sg-tag.my { color: var(--amber); background: var(--amber-soft); }
.sg-tag.kw { color: var(--ink-dim); background: var(--raise); border: 1px dashed var(--line); }
.neg-tag { font-size: 10.5px; padding: 1px 6px; border-radius: 999px; margin-left: 4px; color: var(--amber); border: 1px dashed var(--amber); cursor: help; white-space: nowrap; }   /* 否定句纠正过的动作 */
.sg-quote { font-size: 12.5px; color: var(--ink-dim); margin-top: 3px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.sg-l3 { display: flex; align-items: center; gap: 5px; font-size: 11.5px; margin-top: 4px; white-space: nowrap; overflow: hidden; }
.sg-l3 .sg-tname { overflow: hidden; text-overflow: ellipsis; }
.sg-l3 .sg-wr { flex: none; }
.sg-l3 .sg-wr::before { content: "·"; margin-right: 5px; color: var(--line); }
.sg-l3 .gen-avatar { width: 16px; height: 16px; font-size: 9px; }
.sg-after { flex: none; text-align: right; min-width: 52px; }
.sg-after .num { font-size: 14px; font-weight: 700; }
.sg-after small { display: block; font-size: 10.5px; }
.sg-foot { font-size: 11.5px; text-align: center; line-height: 1.7; }
@media (max-width: 860px) { .sg-title { font-size: 22px; } .sg-f { font-size: 12px; padding: 6px 2px; } }

/* ==================== 老师主页 ==================== */
.rank-card .rk-home { font-size: 11px; color: var(--accent); background: var(--accent-soft); border-radius: 6px; padding: 1px 6px; text-decoration: none; margin-left: 4px; vertical-align: middle; }
.sg-tname { color: inherit; text-decoration: none; }
a.sg-tname:hover { color: var(--accent); }
.tc-id { display: flex; align-items: center; gap: 12px; }
.tc-av { width: 56px; height: 56px; font-size: 22px; }
.tc-tx { flex: 1; min-width: 0; }
.tc-name { font-size: 20px; font-weight: 800; }
.tc-sub { font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tc-sub a { color: var(--accent); text-decoration: none; }
.sk-card.pad { padding: 12px 14px; }
.tc-bar { display: flex; gap: 8px; align-items: center; font-size: 12.5px; margin-bottom: 6px; }
.tc-bar b { width: 86px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: none; }
.tc-bar .track { flex: 1; height: 8px; background: var(--panel-2); border-radius: 4px; overflow: hidden; }
.tc-bar .fill { height: 100%; border-radius: 4px; }
.tc-bar .fill.up { background: var(--up); } .tc-bar .fill.dn { background: var(--dn); }
.tc-bar > span { width: 92px; text-align: right; font-weight: 600; font-variant-numeric: tabular-nums; flex: none; }
.sk-stat b + small { display: block; font-size: 10.5px; color: var(--ink-faint); font-weight: 400; }

/* ==================== 首页「今天」 ==================== */
.td-head { display: flex; align-items: baseline; gap: 8px; }
.td-head .grow { flex: 1; }
.td-title { margin: 0; font-size: 24px; font-weight: 800; letter-spacing: -.3px; }
.warn-tx { color: var(--amber); font-weight: 600; }   /* 超时 / 对不上账的小字（第 4 批 O3/O5） */
.sk-stat.link { text-decoration: none; color: inherit; display: block; transition: border-color .15s; cursor: pointer; }
.sk-stat.link:hover { border-color: var(--accent); }
.sk-stat b.mid { font-size: 15px; display: block; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.td-sec { display: flex; align-items: baseline; gap: 6px; padding: 0 4px 6px; white-space: nowrap; }
.td-sec b { font-size: 15px; }
.td-sec .hint, .td-sec .td-add { flex: none; }
.td-sec .hint { overflow: hidden; text-overflow: ellipsis; }
.td-sec .grow { flex: 1; }
.td-add { font-size: 12.5px; color: var(--accent); text-decoration: none; }
.td-addbox { margin-bottom: 8px; }
.td-cands { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.td-cands .chip { cursor: pointer; }
.td-cands .chip small { color: var(--ink-faint); margin-left: 3px; }
.td-hold { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line-soft); cursor: pointer; position: relative; }
.td-hold:first-child { border-top: none; }
.td-hold:hover { background: var(--panel-2); }
/* 我的股票拖拽排序：行首 ⠿ 把手（touch-action:none 手机上才不滚屏）、拖起浮层、落点横线；
   行内禁文本选择 + iOS 长按放大镜（-webkit-touch-callout），手机长按拖动才不会选中文字 / 弹菜单 */
.td-hold { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
body.td-dragging { -webkit-user-select: none !important; user-select: none !important; -webkit-touch-callout: none !important; }
.td-drag { flex: none; width: 24px; height: 32px; margin: -4px -2px -4px -6px; display: inline-flex; align-items: center; justify-content: center; color: var(--ink-faint); opacity: .4; cursor: grab; touch-action: none; border-radius: 6px; }
.td-drag:hover, .td-drag:active { opacity: 1; background: var(--panel-2); }
.td-hold.lift { z-index: 5; background: var(--panel); box-shadow: 0 8px 22px rgba(16,24,40,.2); pointer-events: none; }
.td-hold.drop-above::before { content: ""; position: absolute; left: 8px; right: 8px; top: 0; height: 2px; border-radius: 2px; background: var(--accent); }
.td-hold-tx { flex: 1; min-width: 0; }
.td-hold-n { display: flex; align-items: baseline; gap: 6px; white-space: nowrap; }
.td-hold-n b, .td-hold-n .code { flex: none; }
.td-hold-n b { font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; }
.td-hold-n .code { font-size: 11px; color: var(--ink-faint); }
.td-hold-s { font-size: 12px; color: var(--ink-faint); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.td-hold-s.hot { color: var(--amber); }
.td-hold-s .acc { color: var(--accent); }
.td-hold-q { text-align: right; flex: none; }
.td-hold-q .num { font-size: 15px; font-weight: 700; }
.td-hold-q small { display: block; font-size: 11.5px; font-weight: 600; }
.td-hold-q .up { color: var(--up); } .td-hold-q .dn { color: var(--dn); }
.td-hold-q .asof { font-size: 10.5px; font-weight: 400; color: var(--ink-faint); }
/* 持仓行：老师最后表态 / 新研报标题 */
.td-stance { display: flex; flex-wrap: wrap; gap: 3px 6px; align-items: center; font-size: 12.5px; color: var(--ink-dim); margin-top: 3px; line-height: 1.45; min-width: 0; }
.td-stance .chip { font-size: 11px; padding: 1px 7px; }
.td-stance .tn { color: var(--ink); font-weight: 600; }
.td-stance .ago { color: var(--ink-faint); font-size: 11.5px; }
.td-stance .qt { color: var(--ink); flex-basis: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-stance.mute { color: var(--ink-faint); }
.chip.c-mute { background: var(--raise); color: var(--ink-faint); font-weight: 500; }
.td-rep { display: flex; gap: 6px; align-items: baseline; font-size: 12px; color: var(--accent); margin-top: 3px; min-width: 0; }
.td-rep .d { color: var(--ink-faint); font-size: 11px; flex: none; }
.td-rep .t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-rep.more { color: var(--ink-faint); }
/* 休市 / 盘前条 */
.td-closed { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 12px; background: var(--amber-soft); border: 1px solid color-mix(in srgb, var(--amber) 40%, transparent); font-size: 12.5px; margin: 0 0 12px; color: var(--ink-dim); }
.td-closed .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--amber); flex: none; }
.td-closed b { color: var(--amber); }
.td-closed .grow { flex: 1; }
.td-closed a { color: var(--accent); text-decoration: none; white-space: nowrap; font-weight: 600; }
/* 盘前：只是「还没开盘」的提示，不用休市的琥珀色 */
.td-closed.pre { background: var(--accent-soft); border-color: color-mix(in srgb, var(--accent) 35%, transparent); }
.td-closed.pre .dot, .td-closed.pre b { background: var(--accent); color: var(--accent); }
.td-closed.pre b { background: none; }
/* 盘中风向条：盘中（open）显示，30/60 分钟新信号 + 我的票有没有人动 + 直播中房间 */
.td-pulse { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 12px; background: var(--card2, var(--card)); border: 1px solid color-mix(in srgb, var(--line) 85%, #94a3b8); font-size: 12.5px; margin: 0 0 12px; color: var(--ink-dim); overflow-x: auto; scrollbar-width: none; white-space: nowrap; }
.td-pulse::-webkit-scrollbar { display: none; }
.td-pulse .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--up); flex: none; animation: pulse-dot 2s ease-in-out infinite; }
@keyframes pulse-dot { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.td-pulse b { color: var(--ink); }
.td-pulse a { color: var(--ink-dim); text-decoration: none; display: inline-flex; align-items: baseline; gap: 5px; }
.td-pulse a b, .td-pulse a:hover { color: var(--accent); }
.td-pulse i { font-style: normal; font-size: 12px; }
.td-pulse i.up { color: var(--up); }
.td-pulse i.dn { color: var(--dn); }
.td-pulse .my-hit { flex-direction: column; gap: 0; align-items: flex-start; }
/* 桌面：风向条保持单行，命中列表横排超长省略（条本身可横滑） */
@media (min-width: 861px) {
  .td-pulse .my-hit { flex-direction: row; align-items: baseline; gap: 6px; max-width: 46%; overflow: hidden; }
  .td-pulse .my-hit small { overflow: hidden; text-overflow: ellipsis; }
}
.td-pulse .my-hit b { color: var(--amber); }
.td-pulse .my-hit.quiet b, .td-pulse .my-hit.quiet small { color: var(--ink-dim); font-weight: 400; }
.td-pulse .grow { flex: 1; min-width: 12px; }
/* 持仓行：今天的表态高亮 */
.td-stance.today .chip { outline: 1.5px solid color-mix(in srgb, var(--accent) 55%, transparent); }
.td-tag.new { background: var(--accent-soft); color: var(--accent); font-size: 10.5px; padding: 1px 6px; border-radius: 6px; margin-left: 2px; }
/* 个股页：信号流跳来高亮的老师操作行 */
.sk-op.hl { outline: 2px solid color-mix(in srgb, var(--accent) 65%, transparent); border-radius: 10px; background: var(--accent-soft); }
/* 信号流：「只看已确认」小开关（行内 chip） */
.sg-f.conf { font-size: 11px; padding: 1px 7px; border-radius: 8px; border: 1px solid var(--line-soft); color: var(--ink-faint); }
.sg-f.conf.on { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 45%, transparent); background: var(--accent-soft); }
.td-x { color: var(--line); display: inline-flex; padding: 4px; flex: none; }
.td-x:hover { color: var(--up); }
.td-rank { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-top: 1px solid var(--line-soft); text-decoration: none; color: inherit; font-size: 13.5px; white-space: nowrap; }
.td-rank:first-child { border-top: none; }
.td-rank .no { width: 16px; color: var(--ink-faint); } .td-rank .no.g1 { color: #b45309; }
.td-rank .gen-avatar { width: 26px; height: 26px; font-size: 12px; }
.td-rank .nm { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
/* 首页老师榜（rk2）：两行网格——第一行 序号 | 头像 | 名字·操作数 | 累计金额，第二行战绩小字横跨名字到金额，
   四段各自不断行、整体按段落换行；窄屏（手机 / 桌面右栏）塞不下时折行，不再把名字挤成省略号或让金额溢出卡片 */
.td-rank.rk2 { display: grid; grid-template-columns: 16px 26px minmax(0, 1fr) auto; column-gap: 8px; row-gap: 2px; white-space: normal; }
.td-rank.rk2 .no, .td-rank.rk2 .gen-avatar { grid-row: 1 / 3; }
.td-rank.rk2 .nm { white-space: nowrap; }
.td-rank.rk2 .nm small { font-weight: 400; margin-left: 6px; }
.td-rank.rk2 .num { font-size: 14px; white-space: nowrap; justify-self: end; }
.td-rank.rk2 .td-stats { grid-column: 3 / 5; display: flex; flex-wrap: wrap; column-gap: 6px; font-size: 11px; line-height: 1.5; }
.td-rank.rk2 .td-stats span { white-space: nowrap; }
.td-rank.rk2 .td-stats span:not(:last-child)::after { content: "·"; margin-left: 6px; }   /* 分隔点挂在前一段末尾，折行时不落到下一行开头 */

/* ==================== 自选股提醒分级 / 价格条件提醒（我的页） ==================== */
.mx-pop { position: fixed; z-index: 90; max-width: min(360px, calc(100vw - 16px)); padding: 10px 12px; border-radius: 12px; background: var(--panel); color: var(--ink-dim); border: 1px solid var(--line-soft); box-shadow: var(--shadow-md); font-size: 12.5px; line-height: 1.7; }
.mx-pop b { color: var(--ink); }
.mx-pop a { color: var(--accent); text-decoration: none; }
.pnl-x { cursor: help; border-bottom: 1px dotted currentColor; }
.sr-flags { gap: 8px; padding-bottom: 4px; }
.sr-flags .sg-f { flex: none; padding: 4px 12px; font-size: 12px; }
.sr-wchip { font-size: 10.5px; padding: 0 6px; margin-left: 6px; vertical-align: 1px; }
.wl-item .wl-name .code { font-size: 11px; }
.grp-note { font-size: 11.5px; color: var(--ink-faint); line-height: 1.6; padding: 6px 14px 0; }
.al-row { min-height: 50px; }
.al-row .gl { font-size: 14.5px; }
.al-row .al-code { font-size: 11px; color: var(--ink-faint); margin-left: 4px; }
.al-row .gl small.acc { color: var(--amber); }
.al-row .td-x { margin-left: 2px; }
.al-add { justify-content: center; color: var(--accent); font-size: 14px; min-height: 46px; cursor: pointer; }
.al-form { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border-top: 1px solid var(--line-soft); background: var(--panel-2); }
.al-form .td-cands { margin-top: 0; align-items: center; }
.al-form .td-cands .chip.other { cursor: pointer; }
.al-form .al-num { width: 120px; padding: 5px 10px; font-size: 13px; }

/* ==================== 帮助页新版：分组 / 三栏定价卡 / 分组对比表 ==================== */
.hp-group { margin-bottom: 22px; }
.hp-group-title { margin: 0 0 10px; font-size: 14px; color: var(--ink-faint); font-weight: 600; letter-spacing: .5px; }
.hp-plans.hp-plans { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; max-width: 1000px; align-items: start; }
.hp-plan.hp-plan { grid-template-columns: 1fr; grid-template-areas: "l" "r" "m"; align-items: start; padding: 18px 18px 16px; gap: 8px; }
.hp-plan-flag { position: absolute; top: -10px; left: 16px; }
.hp-plan.plan-vip .hp-plan-flag, .hp-plan-flag { background: var(--accent); color: #fff; }
.hp-plan-flag.dark { background: linear-gradient(135deg, #b45309, #d97706); color: #fff; }
.hp-plan-r.hp-plan-r { text-align: left; }
.hp-plan-base { width: 100%; font-size: 12px; color: var(--ink-faint); margin-bottom: 2px; }
.hp-plan.plan-svip .hp-plan-base { color: #94a3b8; }
.hp-plan-m.hp-plan-m { flex-direction: column; gap: 5px; align-items: flex-start; padding-top: 10px; }
.hp-plan-room { width: 100%; font-size: 12px; color: var(--ink-faint); margin-top: 6px; }
.hp-plan.plan-svip .hp-plan-room { color: #94a3b8; }
.hp-group-row td { padding: 7px 18px !important; text-align: left; font-size: 12px; color: var(--ink-faint); background: var(--panel-2); font-weight: 600; }
.hp-table tbody tr.hp-group-row:hover td { background: var(--panel-2); }
.hp-td-desc { display: block; font-size: 11.5px; color: var(--ink-faint); font-weight: 400; margin-top: 2px; line-height: 1.5; }
@media (max-width: 860px) {
  /* 目录改回换行居中（同桌面基础样式），只收紧间距与字号，不再横向滚动 */
  .hp-toc { gap: 7px; margin-bottom: 20px; padding: 12px 0 10px; }
  .hp-toc button { padding: 6px 14px; font-size: 12.5px; }
  .hp-footer { flex-wrap: wrap; row-gap: 6px; }
  .hp-plans.hp-plans { grid-template-columns: 1fr; gap: 12px; }
  .hp-td-desc { display: none; }
  .hp-table th, .hp-table td { padding: 10px 8px; }
  .hp-table { min-width: 0; font-size: 13px; }
  .hp-table .lv-badge { font-size: 11px; padding: 1px 7px; }
}

/* ==================== 后台：权限矩阵 ==================== */
.pm-card h3 small { font-weight: 400; margin-left: 8px; }
.pm-wrap { overflow-x: auto; margin-top: 10px; }
.pm-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 720px; }
.pm-table th { padding: 8px 10px; text-align: center; font-size: 12px; color: var(--ink-dim); vertical-align: top; }
.pm-table th.l, .pm-table td.l { text-align: left; }
.pm-table th.r, .pm-table td.r { text-align: right; width: 90px; font-size: 11.5px; white-space: nowrap; }
.pm-table td { padding: 8px 10px; border-top: 1px solid var(--line-soft); vertical-align: middle; }
.pm-table td.c { text-align: center; }
.pm-table td.l code { font-size: 10.5px; color: var(--ink-faint); font-family: var(--mono); margin-left: 4px; }
.pm-table td.l .hint { font-size: 11.5px; margin-top: 2px; }
.pm-group td { padding: 6px 10px; font-size: 12px; color: var(--ink-faint); background: var(--panel-2); font-weight: 600; }
.pm-price { margin-top: 5px; font-weight: 400; color: var(--ink-faint); white-space: nowrap; }
.pm-price .mk-badge { margin-right: 2px; }
.pm-price .inp { width: 64px; padding: 2px 6px; font-size: 12px; text-align: center; display: inline-block; margin: 0 2px; }
.pm-cb { display: inline-flex; cursor: pointer; }
.pm-cb input { position: absolute; opacity: 0; width: 0; height: 0; }
.pm-cb i { width: 20px; height: 20px; border-radius: 6px; border: 1.5px solid var(--line); background: var(--panel); display: inline-flex; align-items: center; justify-content: center; color: #fff; font-style: normal; font-size: 13px; transition: background .12s; }
.pm-cb input:checked + i { background: var(--accent); border-color: var(--accent); }
.pm-cb input:checked + i::after { content: "✓"; }
.pm-room { white-space: nowrap; }
.pm-room .inp { width: 120px; display: inline-block; padding: 4px 8px; font-size: 12.5px; }
.pm-room .inp.num { width: 60px; margin-left: 4px; }

/* ==================== 概念榜联动 ==================== */
.ht-chip.link { text-decoration: none; color: inherit; cursor: pointer; }
.ht-chip.link:hover { color: var(--accent); border-color: var(--accent); }
.cpt-act { text-decoration: none; padding: 3px 9px; font-size: 12px; }
.cs-name .stk-link { color: inherit; text-decoration: none; }
.cs-name .stk-link:hover b { color: var(--accent); }
.sg-concept { cursor: pointer; font-size: 12px; }

/* ==================== 日历 / 周报（手机紧凑格；.cal-desk 桌面 KPI + 大格 + 右栏） ==================== */
.cal-nav { display: inline-flex; align-items: center; gap: 2px; }
.cal-month { font-size: 14px; min-width: 88px; text-align: center; }
.cal .dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; vertical-align: 1px; flex: none; }
.cal .dot.up { background: var(--up); } .cal .dot.dn { background: var(--dn); }
.cal-layout { display: flex; flex-direction: column; gap: 12px; }
.cal-main { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.cal-side { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 5px; }
.cal-wd { text-align: center; font-size: 11px; color: var(--ink-faint); }
.cal-cell { min-height: 46px; border-radius: 10px; background: var(--panel); border: 1px solid var(--line-soft); padding: 5px 4px 5px 5px; display: flex; flex-direction: column; gap: 2px; font-size: 11px; cursor: pointer; min-width: 0; }
.cal-cell:hover { border-color: var(--accent); }
.cal-cell.blank { background: transparent; border: none; cursor: default; }
.cal-cell.off { background: transparent; border-color: transparent; color: var(--ink-faint); cursor: default; font-size: 12px; }
.cal-cell.rep { background: transparent; border: 1px dashed var(--line); }
.cal-cell.today { border-color: var(--accent); }
.cal-cell.sel { border: 2px solid var(--accent); padding: 4px 3px 4px 4px; background: var(--accent-soft); }
.cal-d { display: flex; align-items: center; justify-content: space-between; gap: 4px; font-size: 12px; }
.cal-d b { font-size: 12.5px; }
.cal-p { font-weight: 700; min-height: 15px; font-size: 12.5px; }
.cal-p.up { color: var(--up); } .cal-p.dn { color: var(--dn); }
.cal-r { font-size: 10px; white-space: nowrap; letter-spacing: -.2px; }
.cal-legend { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; font-size: 11px; padding: 0 2px; }
.cal-chips { display: flex; gap: 6px; flex-wrap: wrap; padding: 10px 12px 4px; }
.cal-chips .chip { text-decoration: none; }
.cal-chips .chip b { color: var(--ink); margin-left: 2px; }
.cal-sub { font-size: 11.5px; padding: 6px 12px 2px; }
.cal-side .td-rank:first-of-type, .cal-sub + .td-rank { border-top: none; }
/* 摘要卡榜单一行：老师名必须显示全，笔数/胜率那截先缩（省略号），金额不折行 */
.cal-side .td-rank .nm { flex: none; white-space: nowrap; }
.cal-side .td-rank .cal-rk-sub { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right; font-size: 11.5px; }
.cal-side .td-rank b.num { white-space: nowrap; flex: none; }
.cal-watch { display: flex; flex-wrap: wrap; gap: 6px; padding: 4px 12px 12px; }
.cal-watch .chip { text-decoration: none; }
.cal-watch .chip b.up { color: var(--up); } .cal-watch .chip b.dn { color: var(--dn); }
.cal-week { padding: 10px 14px; display: flex; flex-direction: column; gap: 8px; font-size: 13px; line-height: 1.6; }
.cal-week a { color: var(--accent); text-decoration: none; }
/* 桌面（calendar.js 在 ≥861px 加 .cal-desk） */
.cal-desk .cal-kpis { margin-bottom: 2px; }
.cal-desk .cal-layout { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 14px; align-items: start; }
@media (max-width: 1400px) { .cal-desk .cal-layout { grid-template-columns: minmax(0, 1fr) 340px; } }
@media (max-width: 1100px) { .cal-desk .cal-layout { grid-template-columns: minmax(0, 1fr) 300px; } }
.cal-desk .cal-side { position: sticky; top: 0; }
.cal-desk .cal-grid { gap: 8px; }
.cal-desk .cal-cell { min-height: 92px; border-radius: 12px; padding: 8px 10px; gap: 3px; }
.cal-desk .cal-cell.sel { padding: 7px 9px; }
.cal-desk .cal-cell.off { min-height: 44px; }
/* 桌面：未到的日子画满格但置灰不可点，整月对齐、和右栏等高 */
.cal-desk .cal-cell.future { min-height: 92px; background: var(--panel-2); border: 1px solid transparent; color: var(--ink-faint); opacity: .6; }
.cal-desk .cal-cell.future:hover { border-color: transparent; }
.cal-desk .cal-d { justify-content: flex-start; gap: 6px; font-size: 13px; }
.cal-desk .cal-d b { font-size: 14px; }
.cal-top-pnl { font-size: 11.5px; font-weight: 600; }
.cal-top-pnl.up { color: var(--up); } .cal-top-pnl.dn { color: var(--dn); }
.cal-today { margin-left: auto; font-size: 10.5px; color: var(--accent); border: 1px solid var(--accent); border-radius: 5px; padding: 0 4px; line-height: 1.4; }
.cal-tch { font-size: 12px; color: var(--ink-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cal-tch b { color: var(--ink); font-weight: 600; }
.cal-desk .cal-p { font-size: 17px; }
.cal-meta { font-size: 11px; margin-top: auto; }
.cal-desk .cal-legend { justify-content: flex-start; gap: 16px; font-size: 11.5px; padding: 2px 4px; }

/* ==================== 桌面版四页（今天 / 信号流 / 个股 / 老师）：≥861px 才会渲染这些类 ==================== */
.dk-inner { max-width: 1360px; margin: 0 auto; display: flex; flex-direction: column; gap: 12px; }
.dk-sec { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--line-soft); font-size: 14px; white-space: nowrap; }
.dk-sec b { font-size: 14px; white-space: nowrap; }
.dk-sec b small { font-size: 11.5px; font-weight: 400; margin-left: 4px; }
.dk-sec .td-add { flex: none; }
.dk-sec .grow { flex: 1; }
.dk-sec .sk-f { font-size: 12px; color: var(--ink-faint); }
.dk-sec .sk-f.on { color: var(--accent); }
.td-col { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.td-col .sk-op:first-of-type, .td-col .td-hold:first-of-type, .td-col .td-rank:first-of-type, .td-col .sg-row:first-of-type { border-top: none; }
.td-col .dk-sec + .sk-op, .td-col .dk-sec + .td-hold, .td-col .dk-sec + .td-rank, .td-col .dk-sec + .sg-row, .td-col .dk-sec + .td-room { border-top: none; }
.td-col .sk-op .chev { display: none; }
.td-addbox.pad { padding: 10px 14px; border-bottom: 1px solid var(--line-soft); margin: 0; }
.sk-op-q.one { -webkit-line-clamp: 1; }
.sk-op-q.two { -webkit-line-clamp: 2; }
.sk-op-p.r { flex: none; text-align: right; line-height: 1.5; font-size: 11.5px; }
/* 今天 */
.td-kpis { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 10px; }
.td-kpis .sk-stat { padding: 10px 14px; }
.td-kpis .sk-stat b { font-size: 22px; }
.td-kpis .sk-stat b.mid { font-size: 18px; margin-top: 3px; }
.td-kpis .sk-stat b + small { font-size: 11.5px; color: var(--ink-dim); }
.td-grid { display: grid; grid-template-columns: 340px minmax(0, 1fr) 360px; gap: 14px; align-items: start; }
.td-grid .td-col:nth-child(3) { position: sticky; top: 68px; max-height: calc(100vh - 82px); overflow-y: auto; scrollbar-width: thin; }   /* 右栏比左栏短：跟随滚动，超高时内部滚（第 3 批 B · U11） */
/* 右栏「关注的老师 · 今日动作」「持仓相关新研报」 */
.td-follow { display: flex; align-items: center; gap: 9px; padding: 9px 12px; border-top: 1px solid var(--line-soft); text-decoration: none; color: inherit; font-size: 13.5px; }
.td-follow .gen-avatar { width: 28px; height: 28px; font-size: 12px; flex: none; }
.td-follow-tx { flex: 1; min-width: 0; }
.td-follow-l1 { display: flex; align-items: center; gap: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.td-follow .hint.one { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 12px; }
.td-follow > b.num { flex: none; font-size: 13px; }
.td-rep { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-top: 1px solid var(--line-soft); text-decoration: none; color: inherit; font-size: 13px; }
.td-rep-tag { flex: none; padding: 1px 7px; border-radius: 6px; font-size: 11.5px; background: var(--accent-soft); color: var(--accent); }
.td-rep-t.one { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 1240px) { .td-grid { grid-template-columns: 300px minmax(0, 1fr) 320px; } }
@media (max-width: 1060px) { .td-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .td-grid .td-col:nth-child(3) { grid-column: 1 / -1; } }
.td-room { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-top: 1px solid var(--line-soft); cursor: pointer; font-size: 13px; }
.td-room:hover { background: var(--panel-2); }
.td-room .gen-avatar { width: 28px; height: 28px; font-size: 12px; flex: none; }
.td-room-tx { flex: 1; min-width: 0; }
.td-room-tx .hint { font-size: 11.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.td-room-n { background: var(--up); color: #fff; border-radius: 999px; font-size: 11px; padding: 1px 7px; flex: none; }
/* 信号流 */
.sg-desk { max-width: 1360px; margin: 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) 420px; gap: 14px; align-items: start; }
@media (max-width: 1180px) { .sg-desk { grid-template-columns: minmax(0, 1fr) 360px; } }
.sg-desk-main { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.sg-desk .sg-head { flex-wrap: nowrap; }
.sg-desk .sg-title { white-space: nowrap; flex: none; }
.sg-desk .sg-hint { flex: 0 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }   /* 放不下先省略休市说明 */
.sg-desk .sg-f, .sg-desk .sg-date { flex: none; }
.sg-seg { flex: none; width: auto; }
.sg-seg .seg-item { white-space: nowrap; }
@media (max-width: 1240px) { .sg-desk .sg-head { flex-wrap: wrap; } .sg-desk .sg-hint { flex-basis: auto; } }   /* 窄桌面：筛选段落到第二行 */
.sg-seg .seg-item small { color: var(--ink-faint); font-weight: 500; }
.sg-desk .sg-f { flex: none; padding: 5px 12px; }
.sg-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.sg-table th { padding: 8px 8px; text-align: left; font-weight: 600; font-size: 11.5px; color: var(--ink-dim); background: var(--panel-2); white-space: nowrap; }
.sg-table th:first-child, .sg-table td:first-child { padding-left: 12px; }
.sg-table th.r, .sg-table td.r { text-align: right; padding-right: 12px; }
.sg-table td { padding: 8px 8px; border-top: 1px solid var(--line-soft); vertical-align: middle; }
.sg-table tbody tr { cursor: pointer; }
.sg-table tbody tr:hover { background: var(--panel-2); }
.sg-table tbody tr.my { background: rgba(245, 158, 11, .06); }
.sg-table tbody tr.on { background: var(--accent-soft); }
.sg-table tbody tr.kw td:first-child { box-shadow: inset 3px 0 0 var(--amber); }
.sg-table td.t { width: 52px; color: var(--ink-faint); white-space: nowrap; }
.sg-table td.s { white-space: nowrap; }
.sg-table td.s .sg-stock { font-size: 13.5px; }
.sg-star { font-size: 10.5px; color: var(--amber); margin-left: 4px; }
.sg-table td .chip { font-size: 11px; padding: 1px 7px; white-space: nowrap; }
.sg-table td .sg-tag { margin-left: 4px; }
.sg-table td.q { color: var(--ink-dim); font-size: 12.5px; max-width: 0; width: 46%; }
.sg-table td.q .sg-q-text { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sg-src { display: none; font-size: 11px; color: var(--accent); text-decoration: none; white-space: nowrap; margin-left: 6px; }
.sg-table tbody tr:hover td.q { display: table-cell; }
.sg-table tbody tr:hover .sg-q-text { display: inline; }
.sg-table tbody tr:hover .sg-src { display: inline; }
.sg-table td.w { white-space: nowrap; font-size: 12.5px; }
.sg-table td.w .gen-avatar { width: 18px; height: 18px; font-size: 10px; vertical-align: middle; margin-right: 5px; }
.sg-table td.w small { font-size: 11.5px; }
.sg-table td.r b { font-weight: 700; }
.sg-panel { position: sticky; top: 0; background: var(--panel); border: 1px solid var(--line-soft); border-radius: 14px; padding: 14px; display: flex; flex-direction: column; gap: 10px; box-shadow: var(--shadow-md); }
.sg-p-head { display: flex; align-items: center; gap: 8px; }
.sg-p-head .grow { flex: 1; }
.sg-p-name { font-size: 18px; }
.sg-p-quote { display: flex; align-items: center; gap: 12px; }
.sg-p-quote .sk-price { font-size: 24px; }
.sg-p-quote .grow { flex: 1; }
.sg-p-stats { display: flex; gap: 14px; font-size: 12px; }
.sg-p-stats b { color: var(--ink); }
.sg-p-stats b.up { color: var(--up); } .sg-p-stats b.dn { color: var(--dn); }
.sg-p-ops { border: 1px solid var(--line-soft); border-radius: 12px; overflow: hidden; }
.sg-p-ops .sk-op { padding: 8px 10px; }
.sg-p-ops .sk-op:first-child { border-top: none; }
/* 个股 */
.sk-desk .sk-concepts { font-size: 12px; margin-left: 4px; }
.sk-grid { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 14px; align-items: start; }
@media (max-width: 1180px) { .sk-grid { grid-template-columns: minmax(0, 1fr) 340px; } }
.sk-quote.big { gap: 20px; padding: 14px 16px; }
.sk-quote.big .sk-price { font-size: 30px; }
.sk-range { text-align: right; font-size: 12px; line-height: 1.5; flex: none; }
.sk-range b { font-size: 14px; }
.td-kpis.four .sk-stat b { font-size: 20px; }
.sk-desk .sk-card .sk-op-q { -webkit-line-clamp: 2; }
/* 老师 */
.tc-desk .tc-id { gap: 12px; }
.tc-desk .tc-av { width: 48px; height: 48px; font-size: 20px; }
.tc-desk .tc-name { font-size: 22px; }
.tc-grid { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr) 380px; gap: 14px; align-items: start; }
/* 老师主页 · 模拟盘（手机一张卡 + 桌面左栏持仓表） */
.pp-acct { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-bottom: 1px solid var(--line-soft); }
.pp-acct > div { padding: 10px 12px; border-right: 1px solid var(--line-soft); min-width: 0; }
.pp-acct > div:last-child { border-right: none; }
.pp-acct small { display: block; font-size: 11px; color: var(--ink-faint); }
.pp-acct b { font-size: 15px; font-weight: 800; white-space: nowrap; }
.pp-sub { font-size: 11px; margin-top: 2px; white-space: nowrap; }
.pp-tabs { display: flex; gap: 14px; padding: 8px 12px 0; font-size: 12.5px; color: var(--ink-faint); border-top: 1px solid var(--line-soft); }
.pp-tabs span { cursor: pointer; padding-bottom: 6px; }
.pp-tabs span.on { color: var(--accent); font-weight: 600; box-shadow: inset 0 -2px 0 var(--accent); }
.pp-row { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); gap: 8px; align-items: center; padding: 9px 12px; border-top: 1px solid var(--line-soft); font-size: 13px; cursor: pointer; }
.pp-row:hover { background: var(--panel-2); }
.pp-row.pp-h { font-size: 11px; border-top: none; padding: 8px 12px 4px; cursor: default; background: none; }
.pp-tabs + .pp-row.pp-h, .dk-sec + .pp-row.pp-h { border-top: none; }
.pp-nm { min-width: 0; }
.pp-nm b { display: block; font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-nm small { font-size: 10.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
.pp-r { text-align: right; min-width: 0; }
.pp-r b { display: block; font-weight: 700; }
.pp-r small { font-size: 10.5px; color: var(--ink-faint); }
.pp-r.up small { color: var(--up); } .pp-r.dn small { color: var(--dn); }
.tc-desk .pp-row { grid-template-columns: minmax(0, 1.8fr) minmax(0, .7fr) minmax(0, .7fr) minmax(0, .9fr) minmax(0, .9fr); }
.pp-cl { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-top: 1px solid var(--line-soft); font-size: 12.5px; }
.pp-cl.link { cursor: pointer; }
.pp-cl.link:hover { background: var(--panel-2); }
.pp-cl.link:hover .pp-cn { color: var(--accent); }
.dk-sec + .pp-cl { border-top: none; }
.pp-d { flex: none; font-size: 11px; white-space: nowrap; min-width: 108px; }
.pp-cn { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: 600; }
.pp-cl .chip { font-size: 10.5px; padding: 0 6px; flex: none; }
.pp-pn { width: 92px; text-align: right; font-weight: 700; flex: none; }
.pp-pn small { font-weight: 400; color: var(--ink-faint); margin-left: 3px; }
.pp-pn.up small { color: var(--up); } .pp-pn.dn small { color: var(--dn); }
.pp-more { text-align: center; padding: 8px; cursor: pointer; border-top: 1px solid var(--line-soft); color: var(--accent); font-size: 12px; }
.pp-rule { font-size: 11px; line-height: 1.6; padding: 8px 12px 10px; border-top: 1px solid var(--line-soft); }
@media (max-width: 860px) { .pp-d { min-width: 0; } .pp-pn { width: 84px; } }
/* 老师主页桌面右栏：页签卡粘在视口里、内部滚动 */
.tc-grid > .td-col:nth-child(3) { align-self: stretch; }   /* 右栏拉到整行高，粘性卡才有滚动空间 */
.tc-side { position: sticky; top: 0; display: flex; flex-direction: column; max-height: calc(100vh - 92px); }
.tc-side-tabs { flex: none; flex-wrap: wrap; border-top: none; border-bottom: 1px solid var(--line-soft); align-items: center; gap: 0 12px; padding: 0 12px; }   /* 页签 + 筛选：标签本身不折字，窄栏放不下时整组筛选换到第二行 */
.tc-side-tabs span { flex: none; white-space: nowrap; padding: 10px 0 8px; }
.tc-side-tabs .tc-fs { display: flex; gap: 12px; padding: 0; }   /* 全部 / 买入 / 卖出 成组，换行时一起换 */
.tc-side-tabs .grow { flex: 1; }
.tc-side-tabs .sk-f { font-size: 12px; color: var(--ink-faint); box-shadow: none; }
.tc-side-tabs .sk-f.on { color: var(--accent); }
.tc-side-tabs .td-add { font-size: 12px; }
.tc-side-body { flex: 1; min-height: 0; overflow-y: auto; }
.tc-side-body .sk-op:first-child { border-top: none; }
@media (max-width: 1240px) { .tc-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 320px; } }
@media (max-width: 1060px) { .tc-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .tc-grid .td-col:nth-child(3) { grid-column: 1 / -1; } }

/* ---------- 「加入我的股票」弹层（mystock.js） ---------- */
.ms-sheet { gap: 12px; }
.ms-top { display: flex; align-items: center; justify-content: space-between; font-size: 16px; }
.ms-stock { display: flex; align-items: baseline; gap: 8px; font-size: 18px; } .ms-stock .code { font-size: 12px; color: var(--ink-faint); }
.ms-kind { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .ms-kind .seg { flex: none; } .ms-kind .seg-item { padding: 6px 18px; }
.ms-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.ms-fields label { display: grid; gap: 4px; } .ms-fields small { font-size: 11.5px; color: var(--ink-faint); } .ms-fields .inp { width: 100%; }
.ms-hint { font-size: 12px; line-height: 1.5; }
.ms-err { color: var(--dn); font-size: 12.5px; }
.ms-acts { display: flex; gap: 8px; align-items: center; } .ms-acts .grow { flex: 1; } .ms-acts .btn.dn { color: var(--dn); }

/* 「我的股票」：持有 / 观察分组、标签、盈亏行 */
.td-grp { display: flex; align-items: baseline; gap: 8px; padding: 8px 12px 2px; font-size: 12px; color: var(--ink-dim); }
.td-grp b { font-size: 12.5px; } .td-grp small { color: var(--ink-faint); font-size: 11px; }
.td-grp + .td-hold { border-top: none; }
.td-tag { font-size: 10.5px; padding: 0 6px; border-radius: 6px; background: var(--raise); color: var(--ink-faint); font-weight: 600; margin-left: 2px; flex: none; }
.td-tag.hold { background: var(--accent-soft); color: var(--accent); }
/* 盘中异动：涨跌超阈值（默认 ±3%，我的页可调）的持有 / 观察行置顶 + 高亮 */
.td-tag.move { background: rgba(230, 100, 40, .13); color: #d05a1e; }
.td-hold.move { background: linear-gradient(90deg, rgba(230, 100, 40, .07), transparent 70%); }
.hint.mv { color: #d05a1e; flex: none; }
/* 「⚡ N 只异动置顶」从我的股票标题行挪出来，做成描边小胶囊，不挤右边的恢复默认 / 添加 */
.td-mv { display: inline-flex; align-items: center; gap: 4px; margin: 10px 4px 8px; padding: 2px 10px; border-radius: 999px; font-size: 11.5px; font-weight: 600; color: #d05a1e; background: rgba(230, 100, 40, .07); border: 1px solid color-mix(in srgb, #d05a1e 30%, transparent); cursor: pointer; }
.td-mv:hover { background: rgba(230, 100, 40, .13); }
@media (min-width: 861px) { .td-mv { margin: 12px 14px 12px; } }   /* 桌面与 dk-sec 左右对齐，上下留匀 */
@media (prefers-color-scheme: dark) { html:not([data-theme="light"]) .td-mv { color: #ffa06a; background: rgba(255, 140, 80, .12); border-color: color-mix(in srgb, #ffa06a 32%, transparent); } }
html[data-theme="dark"] .td-mv { color: #ffa06a; background: rgba(255, 140, 80, .12); border-color: color-mix(in srgb, #ffa06a 32%, transparent); }
@media (prefers-color-scheme: dark) { html:not([data-theme="light"]) .td-pulse { border-color: var(--line-soft); } }   /* 加深只针对浅色；深色维持原样 */
html[data-theme="dark"] .td-pulse { border-color: var(--line-soft); }
.mv { color: #d05a1e; }
@media (prefers-color-scheme: dark) { .td-tag.move { background: rgba(255, 140, 80, .16); color: #ffa06a; } .hint.mv, .mv { color: #ffa06a; } }
.td-pnl { display: flex; flex-wrap: wrap; gap: 3px 8px; align-items: baseline; font-size: 12.5px; margin-top: 3px; cursor: pointer; min-width: 0; }
/* 持仓行两行制（第 3 批 B · U20）：浮盈行 / 成本行各自单行省略，不再「今日 -」断在行尾、金额掉到下一行 */
.td-pnl .a, .td-pnl .b { flex-basis: 100%; min-width: 0; }
.td-pnl .a { display: flex; gap: 6px; align-items: baseline; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) { .td-pnl .b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } }   /* 桌面左栏窄，成本行允许折行 */
.td-hold { align-items: flex-start; }   /* 报价列与名字行顶对齐，不再随卡片变高漂到中间 */
.td-hold .td-hold-q { padding-top: 1px; }
.td-hold .td-drag, .td-hold .td-x { align-self: center; }
.td-pnl .lbl { color: var(--ink-faint); font-size: 11.5px; } .td-pnl b { font-size: 14px; }
.td-pnl .lbl.edit { color: var(--accent); }
.td-pnl .up { color: var(--up); } .td-pnl .dn { color: var(--dn); }

/* 老师主页「风险」卡（模拟盘账本） */
.pp-risk { padding: 10px 12px 12px; }
.pp-risk-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; } .pp-risk-h b { font-size: 13.5px; }
.pp-risk-g { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; }
.pp-risk-g > div { display: grid; gap: 1px; min-width: 0; }
.pp-risk-g small { font-size: 11px; color: var(--ink-faint); } .pp-risk-g b { font-size: 16px; } .pp-risk-g span { font-size: 11px; color: var(--ink-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pp-risk-warn { margin-top: 10px; padding: 8px 10px; border-radius: 10px; background: var(--amber-soft); color: var(--amber); font-size: 12px; line-height: 1.5; }
@media (max-width: 860px) { .pp-risk-g { grid-template-columns: repeat(3, 1fr); row-gap: 10px; } .pp-risk { border-top: 1px solid var(--line-soft); } }

/* 房间列表分组（老师房 / 交流群 / 资讯） */
.rooms-seg .seg-item { white-space: nowrap; padding-left: 7px; padding-right: 7px; font-size: 12.5px; }
.rooms-head .rooms-seg { overflow-x: auto; scrollbar-width: none; }   /* 放不下时横滑，不压住右侧按钮 */
.rooms-head .rooms-seg::-webkit-scrollbar { display: none; }
.rooms-head .seg-row .icobtn { flex: none; }
.rooms-seg .n.soft { background: var(--raise); color: var(--ink-faint); }
.rgrp-row { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; margin: 6px 0 10px; border-top: 1px solid var(--line-soft); font-size: 13.5px; color: var(--ink-dim); cursor: pointer; }
.rgrp-row small { color: var(--ink-faint); margin-left: 6px; } .rgrp-row .chev { color: var(--ink-faint); font-size: 18px; }
.rgrp-row:hover { background: var(--panel-2); }
.rgrp-back { padding: 8px 14px; font-size: 12.5px; color: var(--accent); cursor: pointer; }
.ob-picked { display: flex; flex-wrap: wrap; gap: 6px; }
.ob-sheet .td-cands { margin-top: -4px; }
.rp-summ.rp-mine { color: var(--ink-dim); display: block !important; } .rp-summ.rp-mine b { color: var(--accent); font-weight: 600; }   /* 手机端摘要默认隐藏，这行是命中股票，要显示 */
.rp-summ.rp-mine + .rp-summ.faint { display: none; }

/* 三大指数条（今天页 / 信号流） */
.idx-bar { display: flex; align-items: baseline; gap: 14px; padding: 6px 2px 8px; font-size: 12.5px; overflow-x: auto; scrollbar-width: none; white-space: nowrap; }
.idx-bar::-webkit-scrollbar { display: none; }
.idx-bar > span { display: inline-flex; align-items: baseline; gap: 5px; }
.idx-bar small { color: var(--ink-faint); font-size: 11.5px; } .idx-bar b { font-weight: 600; } .idx-bar i { font-style: normal; font-size: 12px; font-weight: 600; }
.idx-bar .up { color: var(--up); } .idx-bar .dn { color: var(--dn); }
.idx-bar .idx-as { margin-left: auto; font-size: 11px; }
.idx-bar.desk { padding: 2px 0 6px; }
/* 手机：指数放不下一行，改为换行，避免横向截断、收盘标签被挤出屏幕 */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .idx-bar { flex-wrap: wrap; overflow-x: visible; gap: 4px 14px; }
  .idx-bar .idx-as { margin-left: 0; }
}
/* 信号流折叠 / 标签 */
.sg-more { font-size: 11.5px; color: var(--accent); cursor: pointer; white-space: nowrap; margin-left: 4px; }
/* 「我的股票」不足 5 条时接其他信号的分隔行（第 3 批 B · U15/U24） */
.sg-divider { display: flex; align-items: center; gap: 10px; padding: 12px 12px 6px; color: var(--ink-dim); font-size: 12.5px; }
.sg-divider i { flex: 1; height: 1px; background: var(--line-soft); }
.sg-divider-td { padding: 0 !important; border-top: 0 !important; }
.sg-row.sub { padding-left: 22px; background: var(--panel-2); } .sg-table tr.sub td { background: var(--panel-2); } .sg-table tr.sub td.t { color: var(--ink-faint); }
.sg-tag.ok { color: var(--dn); background: var(--dn-soft); }
.sg-tag.warn { color: var(--amber); background: var(--amber-soft); margin-left: 4px; }
.sk-stat small.warn { color: var(--amber); }
.sk-marklegend { font-size: 11px; padding: 2px 2px 0; } .sk-marklegend i { font-style: normal; font-size: 10px; } .sk-marklegend .up { color: var(--up); } .sk-marklegend .dn { color: var(--dn); }
.sk-mark { cursor: help; }

/* ==================== 个股 K 线（KLineChart + 老师信号标记，views/stock/chart.js） ==================== */
.sk-kcard { display: flex; flex-direction: column; }
.sk-quote.flat { border: 0; border-radius: 0; background: none; padding: 12px 12px 6px; align-items: flex-start; }
.sk-quote.flat.big { padding: 14px 16px 10px; align-items: center; gap: 16px; border-bottom: 1px solid var(--line-soft); }
.sk-quote.flat .grow { flex: 1; }
.sk-vsep { width: 1px; align-self: stretch; background: var(--line-soft); flex: none; }
.sk-kf { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; padding: 0 12px 8px; }
.sk-quote.big .sk-kf { padding: 0; }
.sk-kf-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.sk-inner .sk-kf-row { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; padding-bottom: 2px; }
.sk-inner .sk-kf-row::-webkit-scrollbar { display: none; }
.sk-kf-lb { flex: none; font-size: 11.5px; margin-right: 2px; }
.sk-f2 { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel); font-size: 12.5px; color: var(--ink-dim); cursor: pointer; white-space: nowrap; min-height: 28px; box-sizing: border-box; flex: none; user-select: none; }
.sk-f2:hover { border-color: var(--accent); }
.sk-f2.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.sk-f2.dis { opacity: .5; }
.sk-f2 .n { font-style: normal; font-size: 11px; opacity: .8; margin-left: 1px; }
.sk-f2 .gen-avatar { width: 16px; height: 16px; font-size: 9px; }
.sk-f2 .ic-chev { transform: rotate(90deg); }
.seg.mini { flex: none; padding: 2px; border-radius: 8px; }
.seg.mini .seg-item { padding: 3px 9px; font-size: 12px; border-radius: 6px; flex: none; }
.seg-item.dis { opacity: .45; cursor: not-allowed; }
.sk-kbox { position: relative; }
.sk-kwrap { height: 330px; width: 100%; }
.sk-kwrap.mobile { height: 250px; }
.sk-k { width: 100%; height: 100%; }
.sk-kload { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: var(--panel); }
.sk-klegend { display: flex; flex-wrap: wrap; gap: 3px 12px; padding: 6px 12px 10px; text-align: left; }
.sk-klegend .grow { flex: 1; }
.sk-kcard .sk-chart { padding: 6px 12px 0; }
/* 桌面：悬停 / 固定的簇明细卡（fixed，贴鼠标） */
.sk-tip { position: fixed; z-index: 90; width: 300px; background: var(--panel); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow-lg); padding: 10px 12px; font-size: 12.5px; }
.sk-tip-h { display: flex; align-items: baseline; gap: 8px; white-space: nowrap; overflow: hidden; }
.sk-tip-h > b { font-size: 13px; }
.sk-tip-sub { font-size: 11px; margin: 5px 0 2px; }
.sk-tip-list.scroll { max-height: 240px; overflow-y: auto; }
.sk-tip-row { display: flex; align-items: center; gap: 6px; padding: 5px 6px; margin: 0 -6px; border-top: 1px solid var(--line-soft); cursor: pointer; border-radius: 6px; }
.sk-tip-row:first-child { border-top: 0; }
.sk-tip-row:hover, .sk-tip-row.hl { background: var(--panel-2); }
.sk-tip-row .gen-avatar { width: 18px; height: 18px; font-size: 10px; }
.sk-tip-row .chip { padding: 0 7px; font-size: 11px; }
.sk-tip-row .grow { flex: 1; }
.sk-tip-px { font-weight: 600; }
.sk-tip-px small { margin-left: 3px; font-weight: 400; }
.sk-tip-only { font-size: 11.5px; color: var(--accent); cursor: pointer; }
.sk-tip-f { display: flex; align-items: center; gap: 8px; margin-top: 8px; font-size: 11px; }
.sk-tip-f .grow { flex: 1; }
/* 手机：图下的信号卡 */
.sk-sigcard { margin: 0 12px 8px; border: 1px solid var(--accent); background: var(--accent-soft); border-radius: 10px; padding: 9px 11px; font-size: 12.5px; }
.sk-sig-h { display: flex; align-items: center; gap: 7px; }
.sk-sig-h .gen-avatar { width: 20px; height: 20px; font-size: 11px; }
.sk-sig-h .grow, .sk-sig-a .grow { flex: 1; }
.sk-sig-n { display: flex; gap: 14px; margin-top: 6px; flex-wrap: wrap; }
.sk-sig-n b { color: var(--ink); }
.sk-sig-q { margin-top: 5px; color: var(--ink); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.sk-sig-a { display: flex; align-items: center; gap: 14px; margin-top: 7px; font-size: 12px; }
.sk-sig-a a { color: var(--accent); cursor: pointer; }
/* 指定老师面板（views/stock/pick.js） */
.sk-pk-q { width: 100%; }
.sk-pk-list { background: var(--panel); border-radius: 12px; border: 1px solid var(--line-soft); max-height: 52vh; overflow-y: auto; }
.sk-pk-sec { display: flex; justify-content: space-between; padding: 8px 12px 4px; font-size: 11px; color: var(--ink-faint); }
.sk-pk-row { display: flex; align-items: center; gap: 9px; padding: 8px 12px; min-height: 44px; box-sizing: border-box; cursor: pointer; }
.sk-pk-row.cur { background: var(--panel-2); }
.sk-pk-row.on { background: var(--accent-soft); box-shadow: inset 3px 0 0 var(--accent); }
.sk-pk-row .gen-avatar { width: 24px; height: 24px; font-size: 12px; }
.sk-pk-b { flex: 1; min-width: 0; } .sk-pk-b b { font-size: 13.5px; display: block; } .sk-pk-b small { font-size: 11px; }
.sk-pk-star { font-style: normal; color: var(--amber); font-size: 11px; }
.sk-pk-n { font-size: 14px; }

/* ==== App 下载页（AppDlView，#/app）==== */
.appdl-scroll { flex: 1; min-height: 0; overflow-y: auto; }   /* 页面自己滚（.frame 是 overflow hidden 的壳） */
.appdl-stage { max-width: 960px; margin: 0 auto; padding: 30px 24px calc(56px + var(--sab)); }
/* 首屏：左标题 + 两个按钮 + 版本信息，右真机截图 */
.appdl-hero { display: grid; grid-template-columns: minmax(0, 1fr) 232px; gap: 34px; align-items: center; margin-bottom: 26px; }
.appdl-hero .logo { display: inline-block; filter: drop-shadow(0 6px 16px rgba(11, 42, 51, .22)); }
.appdl-hero h1 { font-size: 32px; margin: 14px 0 8px; letter-spacing: -.3px; }
.appdl-hero h1 em { font-style: normal; background: var(--accent-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.appdl-hero p { color: var(--ink-dim); font-size: 14.5px; line-height: 1.7; max-width: 560px; margin: 0 0 18px; }
.ah-cta { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.ah-cta .appdl-btn { width: auto; padding: 11px 20px; }
.ah-cta .ghost2 { background: var(--panel); }
.ah-cta small { flex-basis: 100%; color: var(--ink-faint); font-size: 12px; }
.ah-meta { display: flex; gap: 18px; margin-top: 14px; font-size: 12.5px; color: var(--ink-dim); flex-wrap: wrap; }
.ah-meta b { color: var(--ink); }
.ah-shot { justify-self: center; width: 232px; border-radius: 34px; border: 7px solid #1c1f26; overflow: hidden; box-shadow: var(--shadow-lg); background: #0f151e; position: relative; }
.ah-shot img { width: 100%; display: block; }
.ah-shot::after { content: ""; position: absolute; top: 8px; left: 50%; transform: translateX(-50%); width: 80px; height: 20px; border-radius: 12px; background: #1c1f26; }
.appdl-detect { margin: 0 0 12px; padding: 12px 14px; border-radius: 14px; background: var(--accent-soft); border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent); font-size: 13.5px; line-height: 1.6; }
.appdl-detect b { color: var(--accent); }
.appdl-big { width: 100%; justify-content: center; height: 50px; border-radius: 14px; font-size: 15.5px; font-weight: 700; margin-bottom: 14px; text-decoration: none; }
.appdl-big svg { margin-right: 6px; }
.appdl-other { margin-top: 12px; padding: 12px 14px; border-radius: 12px; background: var(--panel); border: 1px solid var(--line-soft); font-size: 13.5px; display: flex; align-items: center; cursor: pointer; }
.appdl-other .chev { margin-left: auto; color: var(--ink-faint); }
.ac-pic { display: block; width: 100%; max-width: 320px; margin-top: 8px; border-radius: 10px; border: 1px solid var(--line-soft); }
.appdl-faq { margin-top: 16px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.appdl-faq .faq { background: var(--panel-2); border: 1px solid var(--line-soft); border-radius: 12px; padding: 12px 14px; font-size: 13px; }
.appdl-faq .faq b { display: block; margin-bottom: 4px; }
.appdl-faq .faq span { color: var(--ink-dim); font-size: 12.5px; line-height: 1.6; }
.appdl-warn { display: flex; align-items: center; gap: 8px; margin: 0 0 14px; padding: 10px 14px; border-radius: 12px;
  background: var(--amber-soft); color: var(--amber); font-size: 13px; line-height: 1.6; }
.appdl-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: stretch; }
.appdl-card { position: relative; background: var(--panel); border: 1px solid var(--line); border-radius: 16px;
  padding: 20px 20px 18px; box-shadow: var(--shadow-sm); display: flex; flex-direction: column; }
.appdl-card.hot { border-color: var(--accent); box-shadow: var(--shadow-md); }
.appdl-card.hot::before { content: "本机推荐"; position: absolute; top: -10px; right: 14px; padding: 3px 11px;
  border-radius: 99px; background: var(--accent-grad); color: #fff; font-size: 11px; font-weight: 600; letter-spacing: 1px; }
.ac-head { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; }
.ac-ic { flex: none; width: 42px; height: 42px; border-radius: 12px; display: flex; align-items: center; justify-content: center; color: #fff; }
.ac-ic.teal { background: var(--accent-grad); }
.ac-ic.dark { background: linear-gradient(135deg, #334155, #0f172a); }
.ac-head b { display: block; font-size: 16px; }
.ac-head small { color: var(--ink-dim); font-size: 12.5px; }
.ac-steps { list-style: none; margin: 2px 0 14px; padding: 0; counter-reset: acs; flex: 1; }
.ac-steps li { counter-increment: acs; position: relative; padding: 8px 0 8px 34px; font-size: 13.5px; line-height: 1.55;
  border-bottom: 1px dashed var(--line-soft); }
.ac-steps li:last-child { border-bottom: 0; }
.ac-steps li::before { content: counter(acs); position: absolute; left: 0; top: 9px; width: 22px; height: 22px;
  border-radius: 50%; background: var(--raise); border: 1px solid var(--line); color: var(--accent-strong);
  font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.ac-steps li small { color: var(--ink-faint); font-size: 11.5px; }
.safari-share { display: inline-flex; width: 20px; height: 20px; border-radius: 5px; background: var(--raise);
  border: 1px solid var(--line); align-items: center; justify-content: center; font-size: 12px; vertical-align: -4px; }
.appdl-btn { width: 100%; justify-content: center; padding: 12px; font-size: 15px; border-radius: 12px; text-decoration: none; }
.appdl-btn svg { margin-right: 6px; }
.ac-note { margin: 12px 0 0; font-size: 11.5px; color: var(--ink-faint); line-height: 1.7; }
.appdl-qr { margin-top: 16px; display: flex; gap: 18px; align-items: center; background: var(--panel);
  border: 1px solid var(--line); border-radius: 16px; padding: 18px 22px; box-shadow: var(--shadow-sm); }
.appdl-qr img { flex: none; width: 132px; height: 132px; border-radius: 10px; border: 1px solid var(--line-soft); }
.appdl-qr b { display: block; font-size: 15px; margin-bottom: 3px; }
.appdl-qr small { display: block; color: var(--ink-dim); font-size: 12.5px; line-height: 1.6; }
.appdl-qr .qr-url { color: var(--ink-faint); font-family: var(--mono); font-size: 11.5px; }
.appdl-foot { text-align: center; margin-top: 24px; color: var(--ink-faint); font-size: 12.5px; }
.appdl-foot a { color: var(--accent); text-decoration: none; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .appdl-stage { padding: 18px 16px calc(56px + var(--sab)); }
  .appdl-hero { grid-template-columns: 1fr; text-align: center; margin-bottom: 14px; }
  .appdl-hero h1 { font-size: 23px; margin: 10px 0 4px; }
  .appdl-hero p { font-size: 12.5px; margin: 0 auto; }
  .appdl-grid { grid-template-columns: 1fr; }
  .appdl-faq { grid-template-columns: 1fr; gap: 8px; }
}

/* ---------- 第十二轮：全站细节 ---------- */
/* 股票代码点击即复制（MX.bindCopyCodes）：给个手势提示，不改字号颜色 */
.num.code, .sk-code, .combo-code, .al-code, [data-copy] { cursor: copy; }
.num.code:hover, .sk-code:hover, .combo-code:hover, .al-code:hover, [data-copy]:hover { text-decoration: underline dotted; text-underline-offset: 3px; }
/* 今天页 KPI「持仓有新表态」点击后高亮对应持仓行 */
.td-hold.flash { animation: td-flash 1.8s ease-out; }
@keyframes td-flash { 0%, 40% { box-shadow: inset 0 0 0 2px var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); } 100% { box-shadow: none; } }
/* 小图标钮触控区拉到 36px（视觉尺寸不变：负 margin 抵消） */
.td-x { padding: 10px; margin: -6px; min-width: 36px; min-height: 36px; align-items: center; justify-content: center; }
/* 回到顶部浮钮（lib/ui.js MxToTop）：手机避开底部 tab，桌面贴内容区右下 */
.totop { position: fixed; right: 16px; bottom: 24px; z-index: 40; width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--line);
  background: var(--glass-strong, var(--panel)); color: var(--ink-soft); box-shadow: var(--shadow-lg); display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; backdrop-filter: blur(10px); animation: fade .15s ease; }
.totop svg { transform: rotate(180deg); }
.totop:hover { color: var(--accent); border-color: var(--accent); }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .totop { right: 12px; bottom: calc(62px + var(--sab) + 14px); }
  .frame:has(.a2hs) .totop { bottom: calc(62px + var(--sab) + 96px); }   /* 装 App / 加主屏幕引导条在时让开 */
}
/* 统一「加载失败 · 重试」块（today / signals / stock / teacher / calendar） */
.load-fail { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 34px 16px; color: var(--ink-dim); text-align: center; }
.load-fail b { color: var(--ink); font-size: 15px; }
.load-fail span { font-size: 12.5px; color: var(--ink-faint); max-width: 420px; }
/* 信号流手机行：行尾 › 表示「整行点击 = 看原话」，与股票名（进个股）区分 */
.sg-row .sg-go { flex: none; align-self: center; color: var(--line); margin-left: -4px; display: inline-flex; }
.sg-row:active .sg-go { color: var(--accent); }
/* 「只看已确认」开关：手机在摘要行末、桌面在筛选行；不再出现在每一行里 */
.sg-sum .sg-f.conf { display: inline-block; flex: none; margin-left: 4px; vertical-align: 1px; }
.sg-filters .sg-f.conf, .sg-head .sg-f.conf { flex: none; }

/* ---------- 全站快捷面板（lib/quick.js MxQuick） ---------- */
.qk-mask { position: fixed; inset: 0; z-index: 130; background: var(--overlay); display: flex; align-items: flex-start; justify-content: center; padding-top: 84px; animation: fade .12s ease; }
.qk { width: min(560px, calc(100vw - 32px)); max-height: calc(100vh - 120px); background: var(--panel); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow-lg); display: flex; flex-direction: column; overflow: hidden; }
.qk-in { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--line-soft); color: var(--ink-faint); }
.qk-inp { flex: 1; min-width: 0; border: none; outline: none; background: transparent; color: var(--ink); font-size: 15px; font-family: inherit; }
.qk-inp::placeholder { color: var(--ink-faint); }
.qk-x { border: none; background: transparent; color: var(--ink-faint); cursor: pointer; display: inline-flex; padding: 4px; }
.qk-cancel { border: none; background: transparent; color: var(--ink-dim); font-size: 14px; padding: 4px 2px; }
.qk-list { flex: 1; overflow-y: auto; min-height: 0; }
.qk-sec { display: flex; align-items: center; font-size: 11px; color: var(--ink-faint); letter-spacing: .04em; padding: 10px 14px 4px; }
.qk-clear { margin-left: auto; border: none; background: transparent; color: var(--ink-faint); font-size: 11px; cursor: pointer; }
.qk-item { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-top: 1px solid var(--line-soft); cursor: pointer; min-height: 44px; }
.qk-item.on { background: var(--accent-soft); }
.qk-item.msg { border-top: 1px solid var(--line); }
.qk-tx { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 7px; overflow: hidden; white-space: nowrap; }
.qk-tx b { font-size: 14.5px; } .qk-tx .hint { overflow: hidden; text-overflow: ellipsis; }
.qk-tx .dim { color: var(--ink-dim); }
.qk-stk { width: 26px; height: 26px; border-radius: 7px; background: var(--panel-2); border: 1px solid var(--line-soft); display: inline-flex; align-items: center; justify-content: center; color: var(--ink-dim); font-size: 11px; flex: none; }
.qk-stk.go { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }
.qk-item .gen-avatar { width: 26px; height: 26px; font-size: 12px; flex: none; }
.qk-item .gen-avatar.sq { border-radius: 7px; }
.qk-q { font-size: 13px; flex: none; }
.qk-enter, .qk-chev { flex: none; color: var(--ink-faint); display: inline-flex; }
.qk kbd { font: 11px var(--mono); padding: 1px 5px; border: 1px solid var(--line); border-radius: 5px; color: var(--ink-faint); background: var(--panel-2); }
.qk-foot { display: flex; gap: 14px; padding: 8px 14px; border-top: 1px solid var(--line-soft); font-size: 11.5px; color: var(--ink-faint); }
.qk-empty { padding: 26px 16px; text-align: center; }
.td-qk { gap: 5px; color: var(--ink-dim); }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .qk-mask { padding-top: 0; background: var(--bg); animation: none; }
  .qk-mask.mobile .qk { width: 100%; max-height: none; height: 100%; border: none; border-radius: 0; box-shadow: none; background: var(--bg); }
  .qk-mask.mobile .qk-in { background: var(--panel); padding: 10px 12px; padding-top: calc(10px + env(safe-area-inset-top)); }
  .qk-mask.mobile .qk-list { padding-bottom: calc(20px + var(--sab)); }
  .qk-mask.mobile .qk-item { background: var(--panel); }
  .qk-mask.mobile .qk-sec { background: var(--bg); }
}
/* 信号流「上次看到这里」：头部胶囊 + 行「新」标 + 分隔线（复用直播间 .unread-divider） */
.sg-newpill { border: none; background: var(--up-soft); color: var(--up); font-size: 12px; font-weight: 600; padding: 3px 10px; border-radius: 999px; cursor: pointer; flex: none; }
.sg-tag.new { color: var(--up); background: var(--up-soft); font-weight: 600; }
.sg-seen { margin: 6px 0; padding: 4px 0; }
.sg-seen-tr td { padding: 0 8px !important; background: transparent !important; }
/* 个股页快捷操作条（我的股票 / 价格提醒 / 复制代码 / 最近说过的老师） */
.sk-acts { display: flex; gap: 8px; padding: 8px 0 10px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.sk-acts::-webkit-scrollbar { display: none; }
.sk-acts.inline { padding: 0; overflow: visible; flex-wrap: wrap; justify-content: flex-end; }
.sk-act { display: inline-flex; align-items: center; gap: 5px; padding: 7px 11px; border-radius: 9px; background: var(--panel); border: 1px solid var(--line); font-size: 12.5px; color: var(--ink); flex: none; box-shadow: var(--shadow-sm); cursor: pointer; text-decoration: none; font-family: inherit; min-height: 34px; }
.sk-act.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }
.sk-act .gen-avatar { width: 16px; height: 16px; font-size: 9px; }
.sk-act:hover { border-color: var(--accent); }
.ms-fields.one { grid-template-columns: 1fr; }
.sk-al-list { display: flex; flex-direction: column; gap: 6px; }
.sk-al { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border-radius: 9px; background: var(--panel-2); font-size: 13px; }
.sk-al small { margin-left: auto; }
/* 研报页搜索「本日 / 全部」切换 */
.rp-qseg { flex: none; padding: 2px; border-radius: 8px; } .rp-qseg .seg-item { padding: 4px 10px; font-size: 12px; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) { .rp-qseg { order: 6; } .rp-search.on { width: calc(100% - 96px); } }
.rp-search .spin { width: 12px; height: 12px; }
.rp-ssum { padding: 8px 12px; font-size: 11.5px; background: var(--panel-2); border-bottom: 1px solid var(--line-soft); } .rp-ssum b { color: var(--ink); }
/* 统一确认弹窗（MX.confirm） */
.mx-cfm-mask { position: fixed; inset: 0; z-index: 140; background: var(--overlay); display: flex; align-items: center; justify-content: center; padding: 16px; animation: fade .12s ease; }
.mx-cfm { width: min(400px, 100%); background: var(--panel); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow-lg); padding: 16px; display: flex; flex-direction: column; gap: 10px; }
.mx-cfm-t { font-size: 15px; line-height: 1.4; }
.mx-cfm-b { font-size: 12.5px; color: var(--ink-dim); line-height: 1.5; white-space: pre-line; }
.mx-cfm-in { display: grid; gap: 4px; } .mx-cfm-in small { font-size: 11.5px; color: var(--ink-faint); }
.mx-cfm-f { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
.btn.primary.danger { background: var(--up); border-color: var(--up); color: #fff; }
/* ---------- 后台 C 批：成员表 / 抽屉 / 批量条 / 日志 / 健康 ---------- */
.user-table th.sortable { cursor: pointer; user-select: none; } .user-table th.sortable:hover { color: var(--ink); }
.user-table th.sortable.on { color: var(--accent); } .user-table th.sortable i { font-style: normal; font-size: 9px; margin-left: 3px; }
.adm-name { cursor: pointer; } .adm-name:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
.adm-tag { display: inline-flex; align-items: center; gap: 4px; padding: 1px 7px; border-radius: 999px; font-size: 11px; background: var(--accent-soft); color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent); margin: 1px 4px 1px 0; cursor: pointer; white-space: nowrap; }
.adm-tag.ghost { background: transparent; color: var(--ink-dim); border-style: dashed; } .adm-tag.ghost:hover { color: var(--accent); border-color: var(--accent); }
.adm-tag i { font-style: normal; color: var(--ink-faint); cursor: pointer; } .adm-tag i:hover { color: var(--up); }
.adm-note { font-size: 11.5px; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.adm-batch { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: -4px 0 12px; padding: 8px 12px; border-radius: 10px; background: var(--accent-soft); border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent); font-size: 13px; }
.adm-batch .btn.danger { color: var(--up); }
.adm-ucard .adm-ck { width: 18px; height: 18px; margin-right: 6px; vertical-align: -3px; } .adm-ucard.sel { box-shadow: inset 0 0 0 2px var(--accent); }
.adm-mdrawer { width: min(460px, 100vw); padding: 0; gap: 0; }
.adm-mdrawer .adm-drawer-h { padding: 14px 16px; border-bottom: 1px solid var(--line-soft); }
.adm-mdrawer .adm-drawer-h .row { display: flex; align-items: center; } .adm-mdrawer .gen-avatar { width: 36px; height: 36px; font-size: 15px; flex: none; }
.adm-mdrawer-b { flex: 1; overflow-y: auto; padding: 12px 16px calc(16px + var(--sab)); display: flex; flex-direction: column; gap: 14px; }
.adm-mdrawer.msheet { max-height: 92vh; }
.adm-sec-t { font-size: 11px; color: var(--ink-faint); letter-spacing: .04em; margin-bottom: 6px; }
.adm-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .adm-grid3 { display: grid; grid-template-columns: 1fr 1fr 1.2fr; gap: 8px; }
.adm-grid2 label, .adm-grid3 label, .adm-sec > label { display: grid; gap: 4px; } .adm-grid2 small, .adm-grid3 small, .adm-sec > label > small { font-size: 11px; color: var(--ink-faint); }
.adm-grid2 .inp, .adm-grid3 .inp, .adm-sec > label > .inp { width: 100%; }
.adm-tagin { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; min-height: 36px; padding: 4px 8px; border-radius: 9px; border: 1px solid var(--line); background: var(--panel); }
.adm-tagin:focus-within { border-color: var(--accent); } .adm-tagin input { flex: 1; min-width: 70px; border: none; outline: none; background: transparent; color: var(--ink); font-size: 13px; }
.adm-pays { display: flex; flex-direction: column; } .adm-pay { display: flex; gap: 8px; align-items: baseline; padding: 6px 0; border-top: 1px solid var(--line-soft); font-size: 12.5px; }
.adm-ipbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; padding: 8px 12px; border-radius: 10px; background: var(--amber-soft); border: 1px solid color-mix(in srgb, var(--amber) 40%, transparent); font-size: 12.5px; }
.adm-ip { cursor: pointer; } .adm-ip:hover, .adm-ip.on { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
.adm-health { display: grid; grid-template-columns: 1.3fr 1fr; gap: 12px; }
.adm-hl { border: 1px solid var(--line-soft); border-radius: 10px; overflow: hidden; }
.adm-hl-h, .adm-hl-r { display: flex; align-items: center; gap: 8px; padding: 7px 12px; font-size: 12.5px; border-top: 1px solid var(--line-soft); }
.adm-hl-h { border-top: none; background: var(--panel-2); } .adm-hl-h .hint { margin-left: auto; }
.adm-hl-r .dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--ink-faint); }
.adm-hl-r .dot.ok { background: var(--dn); } .adm-hl-r .dot.warn { background: var(--amber); } .adm-hl-r .dot.bad { background: var(--up); }
.sk-stat b.amber { color: var(--amber); }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .adm-health { grid-template-columns: 1fr; } .adm-grid3 { grid-template-columns: 1fr 1fr; } .adm-grid2 { grid-template-columns: 1fr; }
  .adm-batch { position: sticky; top: 0; z-index: 5; }
}
.adm-logpager { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 6px 0 10px; font-size: 12.5px; }

/* ---------- 公开老师战绩榜 /board（免登录获客页；web_public.prerender_html 预渲染同一套类名） ---------- */
.bd-page { gap: 0; padding-bottom: 0; }
.bd-page > * { flex: none; }   /* join-wrap 是 flex 列：hero overflow:hidden 会被压扁成一条（min-height:auto 失效） */
.bd-page a { color: var(--accent); font-weight: 500; cursor: pointer; }

/* Hero：深行情底 + 青蓝光晕 + 金色问句；左文案 + 搜索，右 Top1 快照 */
.bd-hero { position: relative; overflow: hidden; color: #fff; padding: 52px 24px 64px;
  background: linear-gradient(165deg, #0c1a2e 0%, #0a1424 55%, #0d2033 100%); }
.bd-hero-bg { position: absolute; inset: -40%; pointer-events: none;
  background:
    radial-gradient(38% 42% at 24% 18%, rgba(14,180,230,.20), transparent 70%),
    radial-gradient(34% 40% at 82% 78%, rgba(20,184,166,.18), transparent 70%),
    radial-gradient(22% 26% at 68% 12%, rgba(245,194,107,.10), transparent 70%); }
.bd-hero-in { position: relative; max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 56px; align-items: center; }
.bd-hero-l { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.bd-badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 999px; align-self: flex-start;
  background: rgba(94,140,220,.14); border: 1px solid rgba(94,140,220,.28); font-size: 12.5px; color: #a8c6f0; letter-spacing: .5px; }
.bd-h1 { margin: 0; font-size: 42px; line-height: 1.25; font-weight: 800; letter-spacing: .5px; }
.bd-h1 em { font-style: normal; background: linear-gradient(100deg, #ffd98a, #f5c26b 55%, #ffab6b);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.bd-sub { margin: 0; font-size: 15px; line-height: 1.75; color: #9db1cc; max-width: 480px; }

/* 搜索 */
.bd-search { display: flex; align-items: center; gap: 8px; height: 50px; padding: 0 6px 0 16px; border-radius: 14px; background: #fff; box-sizing: border-box; margin-top: 4px; }
.bd-search-ic { display: inline-flex; color: #94a3b8; flex: none; }
.bd-search-inp { flex: 1; min-width: 0; height: 100%; border: none; outline: none; background: none; font-size: 15px; color: #1f2933; }
.bd-search-inp::placeholder { color: #94a3b8; }
.bd-search-btn { flex: none; height: 38px; padding: 0 20px; border-radius: 10px; color: #fff; font-weight: 700; font-size: 14px; white-space: nowrap;
  background: linear-gradient(135deg, #14b8a6, #0ea5e9); box-shadow: 0 4px 14px rgba(14,165,233,.35); }
.bd-search-btn.sm { height: 34px; padding: 0 16px; font-size: 13px; align-self: flex-start; }
.bd-search-btn:disabled { opacity: .6; }
.bd-search-hint { font-size: 12.5px; color: #7e93b1; }
.bd-search-hint a { color: #a8c6f0; text-decoration: underline; font-weight: 500; }
.bd-found { border-radius: 14px; padding: 10px 12px; background: rgba(255,255,255,.06); border: 1px solid rgba(148,175,215,.22); display: flex; flex-direction: column; gap: 6px; }
.bd-found .hint { color: #7e93b1; font-size: 12px; }
.bd-found .hint a { color: #a8c6f0; }
.bd-found-row { display: flex; align-items: center; gap: 10px; padding: 8px 6px; border-radius: 10px; color: #fff; text-decoration: none; }
.bd-found-row:hover { background: rgba(255,255,255,.06); }
.bd-found-row .bd-rank { background: rgba(255,255,255,.12); color: #e8f1ff; }
.bd-found-name { flex: 1; min-width: 0; font-weight: 700; font-size: 15px; display: flex; flex-direction: column; gap: 1px; }
.bd-found-name i { font-style: normal; font-weight: 400; font-size: 11.5px; color: #7e93b1; }
.bd-found-none { display: flex; flex-direction: column; gap: 6px; padding: 4px 2px; font-size: 13px; color: #9db1cc; }
.bd-found-none b { color: #fff; font-size: 14.5px; }
.bd-found-ok { flex-direction: row; align-items: center; gap: 8px; color: #99f6e4; font-size: 13.5px; border-color: rgba(45,212,191,.35); }
.bd-form { display: flex; flex-direction: column; gap: 8px; padding: 12px; border-radius: 14px; background: rgba(255,255,255,.06); border: 1px solid rgba(148,175,215,.22); }
.bd-form .inp { background: #fff; color: #1f2933; border-color: transparent; }
.bd-form-act { display: flex; gap: 8px; align-items: center; }
.bd-form-act .btn.ghost { color: #a8c6f0; }

/* Top1 快照卡 */
.bd-hero-r { display: flex; flex-direction: column; gap: 12px; align-items: flex-end; }
.bd-top1 { width: 100%; border-radius: 20px; padding: 20px 22px; box-sizing: border-box; display: flex; flex-direction: column; gap: 14px;
  background: rgba(255,255,255,.06); border: 1px solid rgba(245,194,107,.45); box-shadow: 0 20px 60px rgba(0,0,0,.35); }
.bd-top1-h { display: flex; justify-content: space-between; font-size: 12.5px; color: #a8c6f0; letter-spacing: .5px; }
.bd-top1-h .gold { display: inline-flex; align-items: center; gap: 4px; color: #f5c26b; }
.bd-top1-n { display: flex; align-items: center; gap: 12px; font-size: 26px; font-weight: 800; }
.bd-top1-k { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.bd-top1-k div { display: flex; flex-direction: column; gap: 2px; }
.bd-top1-k b { font-size: 24px; font-weight: 800; color: #e8f1ff; font-variant-numeric: tabular-nums; }
.bd-top1-k b.up { color: #ff7a6b; }
.bd-top1-k span { font-size: 11.5px; color: #7e93b1; }
.bd-top1-f { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding-top: 12px; border-top: 1px solid rgba(148,175,215,.18); font-size: 12.5px; color: #9db1cc; text-decoration: none; }
.bd-top1-f b { color: #55d6c8; font-weight: 600; white-space: nowrap; }
.bd-ks { display: flex; gap: 18px; font-size: 12px; color: #7e93b1; }
.bd-ks b { color: #e8f1ff; font-size: 16px; font-weight: 800; font-variant-numeric: tabular-nums; }

/* 锁入口（行内 / 领奖台 / Top1） */
.bd-lock { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 500; color: var(--ink-dim); padding: 5px 9px; border-radius: 8px;
  border: 1px solid var(--line-soft); background: var(--panel-2); white-space: nowrap; text-decoration: none; flex: none; }
.bd-lock:hover { border-color: var(--accent); color: var(--accent); }
.bd-top1 .bd-lock, .bd-found .bd-lock { color: #7e93b1; background: transparent; border: 1px dashed rgba(148,175,215,.4); font-size: 11.5px; padding: 2px 7px; }

/* 主体：左榜单 + 右转化栏 */
.bd-body { max-width: 1100px; margin: -28px auto 0; padding: 0 24px; width: 100%; box-sizing: border-box; position: relative;
  display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 40px; align-items: start; }
.bd-col-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.bd-tabs { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 16px; background: var(--panel); border: 1px solid var(--line); box-shadow: var(--shadow-md); }
.bd-seg { display: flex; gap: 4px; background: var(--seg); border-radius: 10px; padding: 3px; }
.bd-seg button { padding: 7px 18px; border-radius: 8px; font-size: 13.5px; font-weight: 600; color: var(--ink-dim); font-family: inherit; transition: background .15s, color .15s; }
.bd-seg button.on { color: var(--accent); background: var(--panel); font-weight: 700; box-shadow: 0 1px 2px rgba(16,24,40,.08); }
.bd-end { margin-left: auto; font-size: 12.5px; text-align: right; }

/* 领奖台 */
.bd-podium { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: end; margin-top: 4px; }
.bd-pod { border-radius: 18px; padding: 18px 16px 16px; background: var(--panel); border: 1px solid var(--line); display: flex; flex-direction: column; gap: 6px; box-shadow: var(--shadow-sm); min-width: 0; }
.bd-pod.p1 { order: 0; padding: 22px 18px 18px; background: linear-gradient(175deg, rgba(245,194,107,.18), var(--panel) 60%); border-color: #f5c26b;
  box-shadow: 0 8px 16px rgba(245,194,107,.18), var(--shadow-lg); }
.bd-pod.p2 { order: -1; }
.bd-pod.p3 { order: 1; }
.bd-pod-h { display: flex; align-items: center; gap: 8px; min-width: 0; }
.bd-medal { width: 26px; height: 26px; border-radius: 50%; flex: none; display: inline-flex; align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: 12px; }
.bd-medal.m1 { width: 30px; height: 30px; font-size: 13px; background: linear-gradient(135deg, #ffd98a, #e8a63a); box-shadow: 0 2px 6px rgba(232,166,58,.5); }
.bd-medal.m2 { background: linear-gradient(135deg, #cbd5e1, #94a3b8); }
.bd-medal.m3 { background: linear-gradient(135deg, #d9a679, #b07547); }
.bd-pod-name { font-size: 16px; font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-pod.p1 .bd-pod-name { font-size: 18px; }
.bd-pod-pnl { font-size: 24px; font-weight: 800; font-variant-numeric: tabular-nums; }
.bd-pod.p1 .bd-pod-pnl { font-size: 30px; }
.bd-pod-pnl-m { display: none; }
.bd-pod-meta { font-size: 12px; color: var(--ink-faint); }
.bd-pod .bd-lock { align-self: flex-start; margin-top: 4px; }
.bd-pod.p1 .bd-lock { color: var(--amber); background: var(--amber-soft); border-color: rgba(245,194,107,.6); }

/* 4 名以后 */
.bd-list { display: flex; flex-direction: column; gap: 8px; position: relative; }
.bd-list.cut::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 110px; pointer-events: none;
  background: linear-gradient(180deg, transparent, var(--bg) 85%); }
.bd-row { display: flex; align-items: center; gap: 13px; padding: 12px 16px; border-radius: 14px; background: var(--panel); border: 1px solid var(--line); transition: border-color .15s; }
.bd-row:hover { border-color: var(--accent); }
.bd-rank { width: 28px; height: 28px; border-radius: 8px; flex: none; display: inline-flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 13px; color: var(--ink-dim); background: var(--raise); font-variant-numeric: tabular-nums; }
.bd-main { flex: 1; min-width: 0; }
.bd-line { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.bd-name { font-weight: 700; font-size: 15px; white-space: nowrap; }
.bd-meta { font-size: 12px; color: var(--ink-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bd-bar { height: 5px; border-radius: 3px; margin-top: 7px; background: var(--raise); overflow: hidden; }
.bd-bar i { display: block; height: 100%; border-radius: 3px; }
.bd-bar i.up { background: linear-gradient(90deg, #dc2626, #f97316); }
.bd-bar i.down { background: linear-gradient(90deg, #16a34a, #4ade80); }
.bd-pnl { font-weight: 800; font-size: 17px; flex: none; font-variant-numeric: tabular-nums; min-width: 72px; text-align: right; }
.bd-page .up { color: var(--up); } .bd-page .down { color: var(--dn); }
.bd-expand { display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; padding: 4px 0 8px; }
.bd-expand .btn { font-weight: 600; padding: 9px 22px; border-radius: 12px; }
.bd-expand .hint { font-size: 12.5px; }
.bd-more { text-align: center; }

/* 说明卡 / FAQ */
.bd-card { background: var(--panel); border: 1px solid var(--line); border-radius: 16px; padding: 22px 24px; display: flex; flex-direction: column; gap: 16px; }
.bd-card h2 { margin: 0; font-size: 18px; font-weight: 800; }
.bd-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.bd-steps > div { display: flex; flex-direction: column; gap: 6px; }
.bd-steps i { font-style: normal; font-size: 12px; color: var(--accent); font-weight: 700; letter-spacing: 1px; }
.bd-steps b { font-size: 14.5px; }
.bd-steps span { font-size: 12.5px; color: var(--ink-dim); line-height: 1.65; }
.bd-faq { display: flex; flex-direction: column; }
.bd-faq-item { padding: 12px 0; border-top: 1px solid var(--line-soft); display: flex; flex-direction: column; gap: 4px; }
.bd-faq-item:first-child { border-top: none; padding-top: 0; }
.bd-faq-item b { font-size: 13.5px; font-weight: 600; }
.bd-faq-item span { font-size: 12.5px; color: var(--ink-dim); line-height: 1.65; }

/* 右栏 */
.bd-col-side { display: flex; flex-direction: column; gap: 14px; position: sticky; top: 14px; }
.bd-cta { border-radius: 20px; padding: 22px 22px 20px; background: var(--panel); border: 1px solid #99f6e4; box-shadow: var(--shadow-lg); display: flex; flex-direction: column; gap: 14px; }
.bd-cta-t { font-size: 17px; font-weight: 800; line-height: 1.4; }
.bd-cta-t b { color: var(--accent); }
.bd-cta-l { display: flex; flex-direction: column; gap: 9px; }
.bd-cta-l > span { display: flex; align-items: center; gap: 9px; font-size: 13.5px; }
.bd-cta-l > span > span { display: inline-flex; color: var(--accent); flex: none; }
.bd-cta-btn { display: inline-flex; align-items: center; justify-content: center; height: 46px; border-radius: 12px; background: var(--accent); color: #fff !important; font-weight: 700; font-size: 15px; text-decoration: none; border: 1px solid var(--accent-strong); transition: transform .15s, box-shadow .15s; }
.bd-cta-btn:hover { transform: translateY(-1px); box-shadow: var(--shadow-md); }
.bd-cta-btn.sm { height: 42px; padding: 0 22px; font-size: 14.5px; }
.bd-cta-sub { font-size: 12px; color: var(--ink-faint); text-align: center; }
.bd-side-card { border-radius: 16px; padding: 16px 18px; background: var(--panel); border: 1px solid var(--line); display: flex; flex-direction: column; gap: 8px; color: var(--ink); text-decoration: none; }
.bd-side-card > b { font-size: 13.5px; }
.bd-side-card > span { font-size: 12.5px; color: var(--ink-dim); line-height: 1.6; }
.bd-side-act { display: flex; gap: 8px; margin-top: 2px; }
.bd-app { flex-direction: row; align-items: center; gap: 12px; }
.bd-app-ic { width: 44px; height: 44px; border-radius: 12px; flex: none; display: inline-flex; align-items: center; justify-content: center; color: #fff; background: var(--accent-grad); }
.bd-app-t { display: flex; flex-direction: column; gap: 2px; }
.bd-app-t b { font-size: 13.5px; } .bd-app-t span { font-size: 12px; color: var(--ink-dim); }

.bd-legal { max-width: 1100px; margin: 36px auto 0; padding: 0 24px 44px; text-align: center; line-height: 1.8; }
.bd-legal a { color: var(--accent); }

/* 手机端：hero 顶部品牌行（桌面有顶栏，不显示）+ 底部常驻登录条 */
.bd-mtop { display: none; }
.bd-sticky { display: none; }

/* 深色：青边 CTA 与金边领奖台压暗一档 */
html[data-theme="dark"] .bd-cta { border-color: rgba(45,212,191,.45); }
html[data-theme="dark"] .bd-pod.p1 { background: linear-gradient(175deg, rgba(245,194,107,.14), var(--panel) 60%); }
html[data-theme="dark"] .bd-pod.p1 .bd-lock { background: rgba(245,194,107,.12); color: #f5c26b; }
@media (prefers-color-scheme: dark) {
  html:not([data-theme="light"]) .bd-cta { border-color: rgba(45,212,191,.45); }
  html:not([data-theme="light"]) .bd-pod.p1 { background: linear-gradient(175deg, rgba(245,194,107,.14), var(--panel) 60%); }
  html:not([data-theme="light"]) .bd-pod.p1 .bd-lock { background: rgba(245,194,107,.12); color: #f5c26b; }
}

/* 手机 / 窄屏 */
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .bd-hero { padding: 14px 18px 44px; }
  .bd-mtop { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
  .bd-mtop-b { display: inline-flex; align-items: center; gap: 8px; font-weight: 800; font-size: 16px; letter-spacing: 1px; color: #fff; }
  .bd-mtop .btn { text-decoration: none; }
  .bd-mtop .btn.primary { color: #fff; }
  #app:has(.bd-page) .a2hs { display: none !important; }   /* 获客页手机端：装 App 横幅让位给登录条 */
  .bd-hero-in { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .bd-hero-r { display: none; }
  .bd-h1 { font-size: 30px; }
  .bd-sub { font-size: 13.5px; }
  .bd-search { height: 48px; padding-left: 14px; }
  .bd-search-inp { font-size: 14px; }
  .bd-search-btn { padding: 0 14px; font-size: 13.5px; }
  .bd-body { grid-template-columns: minmax(0, 1fr); gap: 12px; padding: 0 12px; margin-top: -24px; }
  .bd-col-main { gap: 12px; }
  .bd-tabs { flex-direction: column; align-items: stretch; gap: 6px; padding: 8px 10px; border-radius: 14px; }
  .bd-seg { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .bd-seg button { padding: 8px 0; text-align: center; }
  .bd-end { margin: 0; text-align: center; font-size: 11.5px; }
  /* 领奖台：Top1 通栏在上，2 / 3 名并排 */
  .bd-podium { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .bd-pod.p1 { order: -1; grid-column: 1 / -1; padding: 16px 16px 14px; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
  .bd-pod.p1 .bd-pod-h { flex: 1; min-width: 0; }
  .bd-pod.p1 .bd-pod-pnl { display: none; }
  .bd-pod.p1 .bd-pod-pnl-m { display: inline; margin-left: auto; font-size: 24px; }
  .bd-pod.p1 .bd-pod-meta { flex-basis: 100%; }
  .bd-pod.p1 .bd-lock { margin: 0; }
  .bd-pod.p2, .bd-pod.p3 { order: 0; padding: 14px; }
  .bd-pod-name { font-size: 15px; }
  .bd-pod-pnl { font-size: 21px; }
  .bd-pod-meta { font-size: 11.5px; }
  .bd-pod.p2 .bd-lock, .bd-pod.p3 .bd-lock { display: none; }
  .bd-row { gap: 11px; padding: 12px 13px; }
  .bd-row .bd-lock { display: none; }
  .bd-line { flex-direction: column; align-items: flex-start; gap: 2px; }
  .bd-meta { white-space: normal; }
  .bd-pnl { min-width: 0; }
  .bd-card { padding: 18px 16px; gap: 12px; }
  .bd-card h2 { font-size: 16.5px; }
  .bd-steps { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .bd-col-side { position: static; }
  .bd-legal { padding: 0 20px calc(96px + var(--sab)); margin-top: 20px; font-size: 11.5px; }
  .bd-sticky { display: flex; align-items: center; gap: 10px; position: fixed; left: 0; right: 0; bottom: 0; z-index: 20;
    padding: 10px 14px calc(10px + var(--sab)); background: var(--glass-strong); backdrop-filter: blur(14px); border-top: 1px solid var(--line);
    transform: translateY(110%); transition: transform .25s; }
  .bd-sticky.show { transform: none; }
  .bd-sticky-t { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
  .bd-sticky-t b { font-size: 13.5px; } .bd-sticky-t span { font-size: 11.5px; color: var(--ink-dim); }
}

/* ---------------- 客服气泡（后台「客服对话」tab 用；#/support 客服页 2026-09-16 起改用下面的 .spv-* 体系） ---------------- */
.sp-day { align-self: center; font-size: 10.5px; color: var(--ink-dim); background: var(--line); border-radius: 99px;
  padding: 3px 12px; user-select: none; }
.sp-msg { display: flex; gap: 8px; align-items: flex-start; max-width: 86%; }
.sp-msg small { font-size: 10.5px; color: var(--ink-dim); display: block; margin-top: 3px; }
.sp-av { width: 28px; height: 28px; border-radius: 28%; flex: none; display: inline-flex; align-items: center; justify-content: center;
  font-size: 11.5px; font-weight: 700; color: #fff; background: linear-gradient(135deg, #f59e0b, #ef4444); }
.sp-av.guest { background: linear-gradient(135deg, #8b5cf6, #ec4899); }
.sp-msg.me { align-self: flex-end; flex-direction: row-reverse; }
.sp-msg.me .sp-av { background: linear-gradient(135deg, #14b8a6, #0ea5e9); }
.sp-col { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; }
.sp-msg.me .sp-col { align-items: flex-end; }
.sp-bubble { padding: 8px 12px; border-radius: 14px 14px 14px 4px; background: var(--raise, var(--line)); font-size: 13.5px; line-height: 1.6;
  white-space: pre-wrap; word-break: break-word; border: 1px solid var(--line); }
.sp-msg.me .sp-bubble { border-radius: 14px 14px 4px 14px; background: color-mix(in srgb, var(--accent) 16%, var(--panel));
  border-color: color-mix(in srgb, var(--accent) 30%, var(--line)); }

/* ---------------- 联系客服独立页（#/support；SupportView） ----------------
   2026-09-16 改版（方案 B）：桌面双栏——左栏客服信息卡 + 常见问题直发，右栏会话卡；≤ 860px 单列全屏。
   气泡体系在 .spv 作用域内覆盖：「我」实心 teal 无头像，客服白卡 + 头像图标；后台 sp2 仍用上面的老样式。 */
.spv { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; background: var(--bg);
  --spv-me-bg: var(--accent); --spv-me-ink: #fff; --spv-card: var(--panel); }
@media (prefers-color-scheme: dark) { html:not([data-theme="light"]) .spv { --spv-me-bg: #0f766e; } }   /* 深色下 accent 太亮，白字看不清 */
html[data-theme="dark"] .spv { --spv-me-bg: #0f766e; }
.spv-wrap { flex: 1; min-height: 0; display: flex; justify-content: center; gap: 20px; width: 100%; }
.spv-side { display: none; }
.spv-main { flex: 1; min-height: 0; min-width: 0; display: flex; flex-direction: column; background: var(--spv-card); overflow: hidden; }
.spv-head { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line-soft); flex: none;
  background: var(--glass); backdrop-filter: blur(14px); }
.spv-back { width: 36px; height: 36px; margin-left: -8px; border: 0; border-radius: 10px; background: none; color: var(--ink);
  display: inline-flex; align-items: center; justify-content: center; cursor: pointer; flex: none; }
.spv-back:hover { background: var(--raise); }
.spv-av { width: 40px; height: 40px; border-radius: 28%; flex: none; display: inline-flex; align-items: center; justify-content: center;
  color: #fff; background: var(--accent-grad); box-shadow: 0 2px 6px rgba(20, 184, 166, .35); }
.spv-av.sm { width: 30px; height: 30px; border-radius: 30%; box-shadow: none; }
.spv-av.lg { width: 48px; height: 48px; border-radius: 30%; }
.spv-head-t { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 0; }
.spv-head-t b { font-size: 15px; line-height: 1.2; }
.spv-status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-dim); }
.spv-status i { width: 7px; height: 7px; border-radius: 50%; background: #22c55e; box-shadow: 0 0 0 3px rgba(34, 197, 94, .18); flex: none; }
.spv-body { flex: 1; display: flex; flex-direction: column; min-height: 0; }
.spv-msgs { flex: 1; min-height: 0; overflow-y: auto; padding: 16px 14px; display: flex; flex-direction: column; gap: 14px; background: var(--bg); }
.spv-empty { color: var(--ink-dim); font-size: 12.5px; text-align: center; margin: auto 0; line-height: 1.7; padding: 0 12px; }
.spv-notice { align-self: center; display: flex; align-items: center; gap: 8px; max-width: 86%; padding: 8px 14px; border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 8%, transparent); color: var(--ink-dim); font-size: 12px; line-height: 1.55; }
.spv-notice svg { flex: none; }
.spv-day { align-self: center; font-size: 11px; color: var(--ink-faint); padding: 2px 10px; user-select: none; }
.spv-msg { display: flex; gap: 10px; align-items: flex-end; max-width: 82%; }
.spv-msg .spv-col { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; min-width: 0; }
.spv-bubble { padding: 10px 14px; border-radius: 16px 16px 16px 5px; background: var(--panel); color: var(--ink); font-size: 15px; line-height: 1.6;
  box-shadow: var(--shadow-sm); white-space: pre-wrap; word-break: break-word; }
.spv-msg small { font-size: 11px; color: var(--ink-faint); padding: 0 4px; }
.spv-msg.me { align-self: flex-end; flex-direction: column; align-items: flex-end; gap: 4px; }
.spv-msg.me .spv-bubble { border-radius: 16px 16px 5px 16px; background: var(--spv-me-bg); color: var(--spv-me-ink); box-shadow: 0 2px 6px rgba(15, 118, 110, .22); }
/* 快捷问题：输入框上方一排可横滑的胶囊（还没有对话时） */
.spv-chips { display: flex; gap: 8px; padding: 10px 14px 0; overflow-x: auto; background: var(--spv-card); flex: none; scrollbar-width: none; }
.spv-chips::-webkit-scrollbar { display: none; }
.spv-chip { flex: none; border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--line)); background: var(--panel); color: var(--accent);
  font: inherit; font-size: 13px; padding: 7px 14px; border-radius: 99px; cursor: pointer; box-shadow: var(--shadow-sm); }
.spv-chip:hover { background: var(--accent-soft); }
/* 输入区：胶囊 + 圆形发送键 */
.spv-input { padding: 10px 14px calc(12px + var(--sab, 0px)); background: var(--spv-card); border-top: 1px solid var(--line-soft); flex: none; }
.spv-pill { display: flex; align-items: flex-end; gap: 10px; padding: 6px 6px 6px 16px; border-radius: 22px; background: var(--panel-2); border: 1px solid var(--line);
  transition: border-color .15s, box-shadow .15s; }
.spv-pill:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(15, 118, 110, .13); }
.spv-pill textarea { flex: 1; min-width: 0; resize: none; border: 0; outline: none; background: none; color: var(--ink); font: inherit; font-size: 16px; line-height: 1.5;
  padding: 6px 0; min-height: 24px; max-height: 108px; }
.spv-pill textarea::placeholder { color: var(--ink-faint); }
.spv-send { width: 36px; height: 36px; flex: none; border: 0; border-radius: 50%; background: var(--accent); color: #fff; display: inline-flex; align-items: center;
  justify-content: center; cursor: pointer; box-shadow: 0 2px 6px rgba(15, 118, 110, .3); transition: transform .06s, opacity .15s; }
.spv-send:hover { background: var(--accent-strong); }
.spv-send:active { transform: translateY(1px); }
.spv-send:disabled { opacity: .4; cursor: not-allowed; box-shadow: none; }
.spv-hint { display: none; font-size: 11px; color: var(--ink-faint); padding: 6px 4px 0; text-align: right; }
.spv-err { min-height: 0; padding: 0 14px 4px; font-size: 11.5px; color: var(--danger, #d64545); flex: none; background: var(--spv-card); }
.spv-err:empty { display: none; }
/* 访客身份卡（未登录首次打开）：居中卡片 */
.spv-idwrap { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; justify-content: center; padding: 24px 20px 40px;
  background: var(--bg); background-image: radial-gradient(420px 300px at 50% -10%, rgba(20, 184, 166, .14), transparent 70%); }
.spv-idcard { display: flex; flex-direction: column; gap: 16px; padding: 26px 22px 22px; border-radius: 20px; background: var(--panel); border: 1px solid var(--line);
  box-shadow: var(--shadow-lg); width: 100%; max-width: 420px; margin: 0 auto; }
.spv-idcard h3 { margin: 6px 0 0; font-size: 20px; line-height: 1.25; }
.spv-idcard p { margin: 0; font-size: 13.5px; line-height: 1.7; color: var(--ink-dim); }
.spv-field { display: flex; flex-direction: column; gap: 6px; }
.spv-field label { display: flex; gap: 6px; font-size: 13px; font-weight: 600; }
.spv-field label small { font-weight: 400; color: var(--ink-faint); font-size: 12px; align-self: center; }
.spv-field .inp { padding: 12px 14px; border-radius: 12px; font-size: 16px; }
.spv-id-err { min-height: 15px; font-size: 12px; color: var(--danger, #d64545); line-height: 1.4; margin-top: -6px; }
.spv-idcard .btn.primary { justify-content: center; padding: 12px 16px; border-radius: 12px; font-size: 16px; box-shadow: 0 2px 6px rgba(15, 118, 110, .3); }
.spv-priv { display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 12px; color: var(--ink-faint); }
@media (max-width: 860px) {
  .spv-head { padding: calc(10px + var(--sat, 0px)) 14px 10px; }
}
/* 桌面：双栏 + 卡片化 */
@media (min-width: 861px) {
  .spv { background: var(--bg); background-image: radial-gradient(900px 400px at 20% -10%, var(--bg-glow-1), transparent 60%), radial-gradient(800px 400px at 90% 0%, var(--bg-glow-2), transparent 60%); }
  .spv-wrap { padding: 24px 24px 28px; max-width: 1140px; margin: 0 auto; }
  .spv-side { display: flex; flex-direction: column; gap: 16px; width: 300px; flex: none; }
  .spv-card { display: flex; flex-direction: column; gap: 12px; padding: 20px; border-radius: 18px; background: var(--panel); border: 1px solid var(--line); box-shadow: var(--shadow-md); }
  .spv-card .who { display: flex; align-items: center; gap: 12px; }
  .spv-card .who b { font-size: 17px; }
  .spv-card p { margin: 0; font-size: 13px; line-height: 1.7; color: var(--ink-dim); }
  .spv-card .meta { display: flex; flex-direction: column; gap: 8px; padding-top: 12px; border-top: 1px solid var(--line-soft); }
  .spv-card .meta span { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--ink-dim); }
  .spv-card .meta svg { flex: none; }
  .spv-card .cap { font-size: 12px; font-weight: 600; color: var(--ink-faint); letter-spacing: .5px; }
  .spv-faq { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; text-align: left; padding: 11px 14px; border: 1px solid var(--line-soft);
    border-radius: 12px; background: var(--panel); font: inherit; font-size: 13.5px; color: var(--ink); cursor: pointer; box-shadow: var(--shadow-sm); transition: border-color .15s, box-shadow .15s; }
  .spv-faq:hover { border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); box-shadow: var(--shadow-md); }
  .spv-faq:disabled { opacity: .5; cursor: default; }
  .spv-faq svg { flex: none; }
  .spv-card a.more { font-size: 12.5px; padding-top: 2px; }
  .spv-main { width: 760px; flex: none; border-radius: 18px; border: 1px solid var(--line); box-shadow: var(--shadow-lg); }
  .spv-head { padding: 14px 20px; }
  .spv-head-t b { font-size: 16px; }
  .spv-back { display: none; }
  .spv-msgs { padding: 20px 24px; gap: 16px; }
  .spv-msg { max-width: 72%; }
  .spv-bubble { font-size: 14px; }
  .spv-chips { padding: 12px 20px 0; }
  .spv-input { padding: 12px 20px 16px; }
  .spv-pill textarea { font-size: 14px; }
  .spv-hint { display: block; }
  .spv-idwrap { background: none; }
}
@media (min-width: 861px) and (max-width: 1140px) {   /* 中等宽度：侧栏收起，会话卡自适应 */
  .spv-side { display: none; }
  .spv-main { width: 100%; max-width: 760px; }
}
@media (min-width: 1141px) { .spv-chips { display: none; } }   /* 侧栏已有常见问题，输入框上不再重复一排 */

/* ---------------- 管理后台「客服对话」tab（IM 双栏） ---------------- */
.sp2-wrap { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 14px; height: 100%; min-height: 460px; }
.sp2-list { border: 1px solid var(--line); border-radius: 12px; overflow-y: auto; background: var(--panel); }
.sp2-item { display: flex; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--line); cursor: pointer; align-items: center; }
.sp2-item:hover { background: var(--line); }
.sp2-item.on { background: color-mix(in srgb, var(--accent) 10%, var(--panel)); }
.sp2-item .gen-avatar { width: 36px; height: 36px; font-size: 14px; }
.sp2-item .gen-avatar.guest { background: linear-gradient(135deg, #8b5cf6, #ec4899); }
.sp2-item-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.sp2-item-main b { font-size: 13px; display: flex; align-items: center; gap: 6px; min-width: 0; }
.sp2-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sp2-gtag { font-size: 10.5px; flex: none; }
.sp2-aitag { flex: none; font-size: 10.5px; font-weight: 600; padding: 1px 7px; border-radius: 99px; background: var(--amber-soft); color: var(--amber); }
.sp2-aitag.seen { background: var(--raise); color: var(--ink-faint); font-weight: 500; }   /* 真人看过：降为灰 */
.sp-msg.me .sp-av.bot { background: linear-gradient(135deg, #f59e0b, #d97706); font-size: 10.5px; }
.sp2-last { font-size: 11.5px; color: var(--ink-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sp2-item-side { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex: none; }
.sp2-item-side small { font-size: 10.5px; color: var(--ink-dim); }
.sp2-dot { min-width: 17px; height: 17px; border-radius: 99px; background: var(--danger, #d64545); color: #fff;
  font-size: 10px; font-style: normal; display: inline-flex; align-items: center; justify-content: center; padding: 0 5px; font-weight: 600; }
.sp2-main { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); min-height: 0; }
.sp2-top { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var(--line); }
.sp2-top .gen-avatar { width: 34px; height: 34px; font-size: 13.5px; }
.sp2-top .gen-avatar.guest { background: linear-gradient(135deg, #8b5cf6, #ec4899); }
.sp2-top-t { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.sp2-top-t b { font-size: 13.5px; }
.sp2-top-t small { font-size: 11px; color: var(--ink-dim); }
.sp2-msgs { flex: 1; overflow-y: auto; padding: 14px; display: flex; flex-direction: column; gap: 12px;
  background: var(--bg-deep, var(--panel-2)); }
.sp2-msgs .sp-msg { max-width: 74%; }
.sp2-input { display: flex; gap: 8px; align-items: flex-end; padding: 10px 12px; border-top: 1px solid var(--line); }
.sp2-input textarea { flex: 1; resize: none; font: inherit; font-size: 13px; max-height: 96px; }
@media (max-width: 720px) {
  .sp2-wrap { grid-template-columns: 1fr; height: auto; }
  .sp2-list { max-height: 180px; }
  .sp2-main { height: 62vh; }
  .sp2-msgs .sp-msg { max-width: 88%; }
}

/* ---------------- 管理后台：老师请求 ---------------- */
.tq-row { display: flex; align-items: center; gap: 12px; padding: 13px 2px; border-bottom: 1px solid var(--line); }
.tq-row:last-child { border-bottom: 0; }
.tq-row .gen-avatar { width: 36px; height: 36px; font-size: 15px; }
.tq-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.tq-line1 { display: flex; align-items: center; gap: 8px; min-width: 0; }
.tq-line1 b { font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tq-line1 .chip { font-size: 11px; flex: none; }
.tq-sub { display: flex; align-items: baseline; gap: 10px; min-width: 0; flex-wrap: wrap; }
.tq-contact { font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.tq-when { font-size: 11px; color: var(--ink-dim); flex: none; margin-left: auto; }
.tq-note { font-size: 12px; color: var(--ink-dim); line-height: 1.55; white-space: pre-wrap; word-break: break-word;
  border-left: 3px solid var(--line); padding: 1px 0 1px 9px; }
.tq-act { flex: none; align-self: center; }
.tq-row.done { opacity: .55; }
.tq-row.done .tq-act { opacity: 1; }
@media (max-width: 720px) {
  .tq-row { flex-wrap: wrap; }
  .tq-act { order: -1; margin-left: auto; align-self: flex-start; }
}


/* ---------- 客服会话 AI 摘要/意向/评分 ---------- */
.sp2-ai-intent { display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 600; vertical-align: 1px; }
.sp2-ai-intent.i-high { background: rgba(229,72,77,.14); color: var(--up, #e5484d); border: 1px solid rgba(229,72,77,.35); }
.sp2-ai-intent.i-mid { background: rgba(245,194,107,.14); color: #b45309; border: 1px solid rgba(245,194,107,.4); }
.sp2-ai-intent.i-low { background: rgba(127,140,160,.12); color: var(--ink-faint, #94a3b8); border: 1px solid var(--line, #d8e0e8); }
.sp2-ai-intent.i-none { background: rgba(127,140,160,.08); color: var(--ink-faint, #94a3b8); border: 1px solid var(--line, #d8e0e8); }
.sp2-ai-sum { display: block; margin-top: 3px; font-size: 11.5px; color: var(--ink-faint, #94a3b8); line-height: 1.5; }
.sp2-ai-score { font-style: normal; margin-left: 6px; font-weight: 700; color: var(--ink-dim, #64748b); }
.sp2-ai-score.good { color: var(--dn, #2ecc8f); }
.sp2-ai-score.bad { color: var(--up, #e5484d); }

/* 老师页账户曲线不足 5 天的占位（第 3 批 B · U18）：2 个点连成斜线像走势，改成进度条 + 一句话 */
.pp-nocurve { margin: 10px 12px 0; height: 110px; border-radius: 10px; background: var(--panel-2); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center; }
.pp-nocurve b { font-size: 13px; }
.pp-bars { display: flex; gap: 6px; align-items: flex-end; height: 22px; }
.pp-bars i { width: 8px; height: 10px; border-radius: 2px; background: var(--line); }
.pp-bars i.on { background: var(--accent); height: 18px; }

/* 飞书转发的房间分组头（第 4 批 O12） */
.adm-roomgrp { position: sticky; top: 0; background: var(--panel); padding: 6px 2px 4px; font-size: 12.5px; font-weight: 600; color: var(--ink-dim); border-bottom: 1px solid var(--line-soft); z-index: 1; }
.adm-roomgrp:not(:first-child) { margin-top: 8px; }

/* 信号纠错（第 4 批 C10，仅管理员可见） */
.ops-table th.c-fix, .ops-table td.c-fix { width: 76px; white-space: nowrap; text-align: right; }
.fix-btn { opacity: .45; padding: 2px 8px; }
.ops-table tr:hover .fix-btn { opacity: 1; }
.fix-mask { position: fixed; inset: 0; z-index: 60; }
.fix-menu { position: fixed; z-index: 61; min-width: 208px; }
.fix-head { padding: 6px 10px 8px; border-bottom: 1px solid var(--line-soft); font-size: 13px; }
.fix-head .hint { font-size: 11.5px; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 190px; }
.fix-sep { padding: 8px 10px 2px; font-size: 11.5px; color: var(--ink-faint); }

/* 老师页「账本外的证据」（第 4 批 C6）：被跳过的卖出 / 涨停买不到，单列展示、明确不进账户损益 */
.pp-shadow { margin: 10px 12px 0; padding: 10px 12px; border-radius: 10px; background: var(--panel-2); border: 1px dashed var(--line); font-size: 12.5px; }
.pp-shadow > b { font-size: 13px; margin-right: 6px; }
.pp-sh-row { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.pp-sh-row b.num { font-size: 15px; }
.pp-sh-row .chip { flex: none; }
.pp-sh-row small.hint { flex: 1; min-width: 150px; font-size: 11.5px; line-height: 1.5; }
.pp-sh-note { margin-top: 8px; line-height: 1.6; font-size: 11.5px; }
.sk-card > .pp-shadow { margin: 0; border: 0; background: none; padding: 12px; }

/* ---- 直播群「操作信号」：桌面右栏第四页签 / 手机信号条 + 底部抽屉（chat/signals.js）---- */
.rail .seg-item { font-size: 12.5px; padding-left: 2px; padding-right: 2px; }
.rail .seg-item .n { font-family: var(--mono); font-size: 11px; color: var(--up); font-weight: 600; }
.rail .seg-item .n.soft { color: var(--ink-faint); font-weight: 500; }
.sig-card .hint, .sig-sheet .hint, .sig-strip .hint { color: var(--ink-faint); font-size: 12px; font-weight: 400; }
.sig-card .grow, .sig-sheet .grow, .sig-strip .grow { flex: 1; }
.sig-card .lnk, .sig-sheet .lnk { color: var(--accent); cursor: pointer; font-size: 12px; font-weight: 500; }
.sig-head { display: flex; align-items: center; gap: 10px; padding: 12px 14px 8px; }
.sig-head .gen-avatar { width: 34px; height: 34px; font-size: 14px; border-radius: 10px; }
.sig-head-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.sig-head-l1 { display: flex; align-items: center; gap: 6px; font-size: 14px; }
.sig-head-l1 b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.sig-kpi { font-size: 11px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sig-kpi b { color: var(--ink); font-weight: 600; }
.sig-kpi b.up { color: var(--up); } .sig-kpi b.dn { color: var(--dn); }
.sig-filters { display: flex; gap: 5px; align-items: center; padding: 2px 14px 10px; }
.sig-chip {
  height: 24px; padding: 0 8px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel);
  font-size: 12px; color: var(--ink-dim); white-space: nowrap; cursor: pointer; display: inline-flex; align-items: center; gap: 3px;
}
.sig-chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.sig-chip.dash { border-style: dashed; }
.sig-chip.dash.on { background: var(--accent-soft); color: var(--accent); border-style: solid; }
.sig-day { display: flex; align-items: center; gap: 8px; padding: 8px 14px 4px; font-size: 11.5px; font-weight: 600; color: var(--ink-faint); white-space: nowrap; }
.sig-day i { flex: 1; height: 1px; background: var(--line-soft); }
.sig-day span:last-child { font-weight: 400; }
.sig-row { display: flex; flex-direction: column; gap: 4px; padding: 9px 14px; border-top: 1px solid var(--line-soft); cursor: pointer; }
.sig-row:hover { background: var(--raise); }
.sig-row.fresh { background: var(--accent-soft); }
.sig-l1 { display: flex; align-items: center; gap: 7px; min-width: 0; }
.sig-l1 .chip { flex: none; font-size: 11.5px; padding: 2px 7px; }
.sig-tm { font-size: 11px; color: var(--ink-faint); width: 36px; flex: none; }
.sig-nm { font-size: 13.5px; font-weight: 600; color: var(--ink); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-decoration: none; }
.sig-nm:hover { color: var(--accent); }
.sig-pct { font-size: 12.5px; font-weight: 600; flex: none; white-space: nowrap; }
.sig-pct.hint { font-weight: 400; font-size: 11px; }
.sig-l2 { display: flex; align-items: center; gap: 6px; padding-left: 43px; font-size: 12px; color: var(--ink-dim); min-width: 0; }
.sig-cd { font-size: 10.5px; color: var(--ink-faint); flex: none; }
.sig-l2 .sg-tag { flex: none; }
.sig-quote { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.sig-foot { padding: 14px 14px 12px; font-size: 12px; color: var(--ink-faint); line-height: 1.6; border-top: 1px solid var(--line-soft); }
.sig-foot a { color: var(--accent); }
.sig-tip { padding: 9px 14px; border-top: 1px solid var(--line-soft); font-size: 12px; color: var(--ink-faint); }
.sig-empty { padding: 26px 16px !important; font-size: 13px; line-height: 1.6; }
.sig-empty .hint { display: inline-block; margin-top: 4px; }
.sig-empty .btn { display: inline-flex; }
/* 手机：过滤条下的信号条 */
.sig-strip { display: flex; align-items: stretch; margin: 8px 12px 0; border-radius: 12px; border: 1px solid var(--accent); background: var(--accent-soft); overflow: hidden; flex: none; }
.sig-strip-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; padding: 9px 0 9px 12px; border: 0; background: transparent; text-align: left; color: var(--ink); cursor: pointer; }
.sig-strip-l1 { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--accent); font-weight: 600; white-space: nowrap; }
.sig-strip-l1 .chev { color: var(--ink-faint); font-size: 16px; line-height: 1; }
.sig-strip-l2 { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; }   /* 放不下时横滑 */
.sig-strip-l2::-webkit-scrollbar { display: none; }
.sig-strip-chip { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 8px; border-radius: 999px; border: 1px solid var(--line-soft); background: var(--panel); font-size: 12.5px; white-space: nowrap; flex: none; }
.sig-strip-chip .chip { font-size: 11px; padding: 1px 6px; }
.sig-strip-chip .num { font-size: 11.5px; font-weight: 600; }
.sig-strip-x { width: 40px; flex: none; border: 0; background: transparent; color: var(--ink-faint); font-size: 13px; cursor: pointer; }
/* 手机：底部抽屉（复用 .msheet 的定位 / 动画） */
.sig-sheet { padding-top: 6px; max-height: 88vh; display: flex; flex-direction: column; }
.sig-sheet .msheet-handle { flex: none; }
.sig-sheet-x { position: absolute; right: 10px; top: 14px; }
.sig-sheet-body { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; background: var(--panel); margin: 0 12px; border-radius: 14px; }
.sig-sheet-body .sig-head { padding-right: 40px; }
.sig-sheet-body .sig-nm { font-size: 14.5px; }
.sig-sheet-body .sig-row { padding: 11px 16px; }
.sig-sheet-foot { flex: none; display: flex; justify-content: space-between; padding: 10px 24px 4px; font-size: 12.5px; }
.sig-sheet-foot .lnk { color: var(--accent); }

/* ===== 美股群（Discord 采集，权限键 discord，#/discord） =====
   布局与消息行复用直播页：chat-body / rooms-pane / wc-msg 气泡；
   这里只放 Discord 特有的：左栏分类头（可折叠）+ 未读 / 搜索命中行 / BOT 标 / 双语正文 / embed 卡 / 图片网格 / 附件卡 / 悬停动作 */
/* 分类头：可折叠按钮（239 个频道平铺近 20 屏，默认只展开有未读的）+ 未读汇总角标 */
.dc-cat { display: flex; align-items: center; gap: 8px; width: calc(100% - 20px); margin: 14px 10px 6px; padding: 3px 6px; border: 0; border-radius: 8px;
  font: inherit; font-size: 12px; font-weight: 700; color: var(--ink-dim); text-transform: uppercase; letter-spacing: .4px;
  background: none; cursor: pointer; text-align: left; transition: background .12s; }
.dc-cat:hover { background: var(--panel); }
.dc-cat .chev { flex: none; font-size: 9px; opacity: .55; transition: transform .15s ease; }
.dc-cat.open .chev { transform: rotate(90deg); }
.dc-cat .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-cat .num { font-weight: 600; opacity: .7; }
.dc-cat.has-unread .nm { color: var(--accent-strong); }
.dc-cat .dc-ub { flex: none; min-width: 18px; text-align: center; padding: 0 5px; border-radius: 8px; font-size: 10.5px; font-weight: 700;
  background: var(--accent); color: #fff; }
/* 「有动态」视图开关 */
.dc-views { align-items: center; }
.dc-chip { border: 1px solid var(--line); background: var(--panel-2); color: var(--ink-dim); border-radius: 999px;
  padding: 3px 12px; font-size: 12px; font-weight: 500; cursor: pointer; transition: color .12s; font-family: inherit; }
.dc-chip:hover { color: var(--ink); }
.dc-chip.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); font-weight: 600; }
.dc-vhint { font-size: 11px; color: var(--ink-faint); }
/* 频道行 ⭐ 常用（个人维度，localStorage） */
.dc-star { border: 0; background: none; padding: 0; height: 16px; line-height: 1; font-size: 14px; color: var(--ink-faint);
  opacity: .45; cursor: pointer; transition: opacity .12s, color .12s; }
.dc-star:hover, .dc-star.on { opacity: 1; color: var(--amber); }
/* 搜索时间范围 */
.dc-days { display: flex; gap: 6px; margin: 2px 10px 6px; }
.dc-days button { border: 1px solid var(--line); background: none; color: var(--ink-faint); border-radius: 999px;
  padding: 2px 10px; font-size: 11.5px; cursor: pointer; font-family: inherit; }
.dc-days button.on { background: var(--panel); color: var(--ink); border-color: var(--ink-faint); }
/* 正文行内码（markdown `code`） */
.dc-code { font-family: var(--mono); font-size: .88em; background: var(--panel-2); border: 1px solid var(--line);
  border-radius: 5px; padding: 0 4px; word-break: break-all; }
/* 操作信号（本群/全站 24h 买卖动作）：两行头部（标题行不挤、副题行带范围切换）；行样式复用直播页 sig-* */
.dc-sigbtn { position: relative; }
.dc-sigbtn.on { color: var(--accent-strong); }
.dc-sig-badge { position: absolute; top: -3px; right: -5px; min-width: 16px; height: 16px; line-height: 16px; padding: 0 4px;
  border-radius: 8px; background: var(--up, #dc2626); color: #fff; font-size: 10px; font-weight: 700; pointer-events: none; }
.dc-sig-head { display: flex; flex-direction: column; gap: 5px; padding: 10px 12px 9px; flex: none; border-bottom: 1px solid var(--line); }
.dc-sig-head .l1 { display: flex; align-items: center; gap: 8px; }
.dc-sig-head .l1 b { font-size: 14px; white-space: nowrap; }
.dc-sig-head .l2 { display: flex; align-items: center; gap: 6px; min-width: 0; }
.dc-sig-head .l2 .sub { flex: 1; min-width: 0; font-size: 11.5px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-chip.sm { padding: 2px 10px; font-size: 11.5px; }
.dc-sig-mhead { display: flex; flex-direction: column; gap: 5px; padding: 2px 2px 10px; }
.dc-sig-mhead .l1 { display: flex; align-items: center; gap: 8px; }
.dc-sig-mhead .l1 b { font-size: 15px; }
.dc-sig-mhead .l2 { display: flex; align-items: center; gap: 6px; min-width: 0; }
.dc-sig-nm2 { font-weight: 400; font-size: 11px; color: var(--ink-faint); margin-left: 4px; }
.dc-sig-px { flex: none; font-size: 11px; color: var(--ink-dim); }
.dc-sig-more { padding: 10px 14px 12px; display: flex; justify-content: center; border-top: 1px solid var(--line-soft); }
.dc-sig-ch { max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-total { margin-left: 8px; vertical-align: 2px; font-size: 11px; }
.dc-who { color: var(--ink); font-weight: 600; margin-right: 4px; }
.room-item .rprev.unread .dc-who { color: var(--accent-strong); }
.dc-live { color: var(--accent); }
.dc-offline { margin: 0 14px 6px; padding: 8px 12px; border-radius: 10px; background: var(--amber-soft); color: var(--amber); font-size: 12.5px; line-height: 1.5; }
.dc-ft-n { margin-left: 5px; font-size: 11px; opacity: .8; }
/* 搜索命中 */
.dc-hit { margin: 2px 6px; padding: 8px 10px; border-radius: 10px; cursor: pointer; }
.dc-hit:hover, .dc-hit.on { background: var(--panel); box-shadow: var(--shadow-sm); }
.dc-hit-top { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; margin-bottom: 2px; }
.dc-hit-top b { color: var(--accent-strong); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-hit-top .num { color: var(--ink-faint); font-size: 11px; white-space: nowrap; }
.dc-hit-txt { font-size: 12.5px; color: var(--ink-dim); line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.dc-hit-txt mark { background: rgba(251, 191, 36, .32); color: inherit; border-radius: 3px; padding: 0 1px; }
/* 消息 */
.dc-bottag { font-size: 10px; padding: 1px 5px; border-radius: 4px; }
.dc-link { color: var(--blue); text-decoration: none; border-bottom: 1px dashed currentColor; word-break: break-all; }
.dc-tk { font-family: var(--mono); font-weight: 700; color: var(--amber); background: var(--amber-soft); padding: 0 5px; border-radius: 5px; font-size: .9em; }
.dc-at { color: var(--blue); background: color-mix(in srgb, var(--blue) 14%, transparent); padding: 0 5px; border-radius: 5px; font-size: .9em; }
.dc-orig { color: var(--ink-faint); font-size: .87em; line-height: 1.5; padding-bottom: 6px; margin-bottom: 6px; border-bottom: 1px dashed var(--line); }
.dc-msg .wc-bubble { max-width: min(86%, 640px); }
.dc-embed { display: block; margin-top: 6px; max-width: 560px; background: var(--panel-2); border: 1px solid var(--line); border-left: 3px solid var(--blue); border-radius: 6px 10px 10px 6px; padding: 9px 12px; font-size: 13px; text-align: left; white-space: normal; position: relative; }
.dc-embed.has-thumb { padding-right: 84px; min-height: 76px; }
.dc-embed-thumb { position: absolute; right: 10px; top: 10px; width: 64px; height: 64px; border-radius: 8px; overflow: hidden; background: var(--panel); }
.dc-embed-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dc-embed-author { font-size: 11px; color: var(--ink-dim); margin-bottom: 2px; }
.dc-embed-title { font-weight: 700; margin-bottom: 3px; }
.dc-embed-desc { line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
.dc-embed-fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; margin-top: 8px; }
.dc-embed-field b { display: block; font-size: 11px; color: var(--ink-dim); margin-bottom: 1px; font-weight: 600; }
.dc-embed-field span { font-size: 13px; white-space: pre-wrap; }
.dc-embed-footer { margin-top: 8px; font-size: 11px; color: var(--ink-dim); }
/* 图片：单图等比最大 460×360（宽高由 picStyle 算），多图 2 列方格；悬停出文件名 + 尺寸 + ⤓ */
.dc-gal { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; white-space: normal; }
.dc-gal.grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; max-width: 460px; }
.dc-pic { position: relative; display: block; border-radius: 10px; overflow: hidden; background: var(--panel-2); border: 1px solid var(--line); cursor: zoom-in; max-width: 460px; line-height: 0; }
.dc-pic img { display: block; max-width: 100%; max-height: 360px; width: 100%; height: 100%; object-fit: contain; }
.dc-pic:not([style*="aspect-ratio"]) img { width: auto; height: auto; }
.dc-pic:not([style*="aspect-ratio"]) { min-width: 120px; min-height: 80px; }   /* 没宽高信息的图：懒加载前给块底，免得后到把内容顶走 */
.dc-gal.grid .dc-pic { max-width: none; aspect-ratio: 1; }
.dc-gal.grid .dc-pic img { width: 100%; height: 100%; max-height: none; object-fit: cover; }
.dc-pic-ov { position: absolute; left: 0; right: 0; bottom: 0; display: flex; align-items: center; gap: 8px; padding: 6px 8px 6px 10px; font-size: 11.5px; line-height: 1.3; color: #fff; background: linear-gradient(transparent, rgba(0, 0, 0, .66)); opacity: 0; transition: opacity .15s; }
.dc-pic:hover .dc-pic-ov, .dc-pic:focus-visible .dc-pic-ov { opacity: 1; }
.dc-pic-ov .fn { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-pic-dim { font-size: 10.5px; opacity: .85; white-space: nowrap; }
.dc-dl { width: 26px; height: 26px; border-radius: 8px; background: rgba(255, 255, 255, .2); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; text-decoration: none; flex: none; }
.dc-dl:hover { background: rgba(255, 255, 255, .38); }
/* 附件卡：文件 / 过期未归档的图 */
.dc-file { display: flex; align-items: center; gap: 10px; margin-top: 6px; padding: 8px 10px 8px 8px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel-2); max-width: 460px; white-space: normal; line-height: 1.35; }
.dc-file-ic { width: 38px; height: 38px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; font-size: 10.5px; font-weight: 800; font-family: var(--mono); letter-spacing: .3px; flex: none; background: color-mix(in srgb, var(--blue) 16%, transparent); color: var(--blue); }
.dc-file-ic.image { background: var(--accent-soft); color: var(--accent); }
.dc-file.gone .dc-file-ic { background: var(--raise); color: var(--ink-faint); }
.dc-file-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.dc-file-name { font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dc-file-sub { font-size: 11.5px; color: var(--ink-dim); }
.dc-file-sub.warn { color: var(--amber); }
.dc-file-btn { flex: none; white-space: nowrap; }
/* 悬停动作（桌面）：气泡右侧浮出复制 / 下载 */
.dc-msg .wc-main { position: relative; }
.dc-acts { position: absolute; right: 0; top: 18px; display: none; gap: 2px; padding: 2px; background: var(--panel); border: 1px solid var(--line); border-radius: 9px; box-shadow: var(--shadow-md); }
.dc-msg:hover .dc-acts { display: inline-flex; }
.dc-act { border: 0; background: transparent; color: var(--ink-dim); width: 28px; height: 26px; border-radius: 7px; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 14px; text-decoration: none; }
.dc-act:hover { background: var(--panel-2); color: var(--ink); }
/* 灯箱底部：文件名行 + 主按钮 */
.lb-fn { color: rgba(255, 255, 255, .72); font-size: 12px; }
.lb-act.pri { background: var(--accent); color: #062b27; font-weight: 700; }
.lb-act.pri:hover { filter: brightness(1.08); }
.lb-acts { display: flex; gap: 8px; }
@media (max-width: 860px) {
  .dc-embed, .dc-msg .wc-bubble { max-width: 100%; }
  .wc-bubble .dc-embed, .wc-bubble .dc-gal, .wc-bubble .dc-file { max-width: 100%; }
  .dc-pic-ov { opacity: 1; background: linear-gradient(transparent, rgba(0, 0, 0, .5)); }
  .dc-pic-ov .fn, .dc-pic-dim { display: none; }   /* 手机：只留右下角 ⤓，别挡图 */
  .dc-pic-ov { justify-content: flex-end; padding: 4px 6px; }
  .wc-bubble .dc-embed, .wc-bubble .dc-atts { max-width: 100%; }
}

/* ===== 市场切换（双市场用户）：桌面顶栏 logo 右侧 / 手机「今天」标题右侧 ===== */
.mkt-seg { display: inline-flex; background: var(--seg); border-radius: 9px; padding: 3px; gap: 2px; font-size: 12.5px; font-weight: 600; flex: none; }
.mkt-seg span { padding: 3px 12px; border-radius: 7px; color: var(--ink-dim); cursor: pointer; user-select: none; line-height: 1.4; white-space: nowrap; }
.td-head .td-title { white-space: nowrap; }
.td-head > .hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mkt-seg span.on { background: var(--panel); color: var(--ink); box-shadow: 0 1px 2px rgba(16, 24, 40, .18); }
.topbar .mkt-seg { margin-left: -6px; }

/* ===== 美股首页（#/us）：复用今天页骨架（td-head / td-kpis / td-grid / sk-card / dk-sec） ===== */
.us-when { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.us-page .td-title { white-space: nowrap; }
.us-phase { color: var(--ink); }
.us-phase.open { color: var(--dn); } .us-phase.pre { color: var(--accent); } .us-phase.after { color: var(--amber); } .us-phase.closed { color: var(--ink-faint); }
.us-page .sk-stat b.acc { color: var(--accent); }
/* 涨跌配色：默认沿用站内 A股习惯（红涨绿跌）；prefs.us_colors=us 时整页翻成美股习惯 */
.us-green-up { --up: #16a34a; --up-soft: #f0fdf4; --dn: #dc2626; --dn-soft: #fef2f2; }
html[data-theme="dark"] .us-green-up { --up: #4ade80; --up-soft: rgba(74, 222, 128, .14); --dn: #f87171; --dn-soft: rgba(248, 113, 113, .14); }
@media (prefers-color-scheme: dark) { html:not([data-theme="light"]) .us-green-up { --up: #4ade80; --up-soft: rgba(74, 222, 128, .14); --dn: #f87171; --dn-soft: rgba(248, 113, 113, .14); } }
.us-green-up .chip.c-buy { background: var(--up-soft); color: var(--up); }
.us-green-up .chip.c-sell { background: var(--dn-soft); color: var(--dn); }
/* 信号：桌面一行一条（时间 · 代码 · 动作 · 原话 · 频道 · 涨跌） */
.us-sig { display: flex; align-items: center; gap: 10px; height: 42px; padding: 0 14px; border-top: 1px solid var(--line-soft); cursor: pointer; white-space: nowrap; font-size: 13px; }
.us-sig:first-of-type, .dk-sec + .us-sig { border-top: none; }
.us-sig:hover { background: var(--panel-2); }
.us-sig-tm { width: 40px; flex: none; font-size: 12px; color: var(--ink-faint); }
.us-sig-tk { width: 54px; flex: none; font-size: 14.5px; }
.us-sig .chip { flex: none; padding: 1px 8px; font-size: 11.5px; }
.us-sig .sg-tag { flex: none; }
.us-sig-q { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.us-sig-ch { width: 128px; flex: none; font-size: 12px; overflow: hidden; text-overflow: ellipsis; }
.us-sig-pct { width: 60px; flex: none; text-align: right; font-size: 14.5px; }
/* 手机：两行（代码 + 动作 / 原话） */
.us-sig.m { height: auto; padding: 9px 14px; white-space: normal; }
.us-sig.m .us-sig-tm { width: 36px; }
.us-sig-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.us-sig-tx .l1 { display: flex; align-items: center; gap: 6px; }
.us-sig-tx .l1 b { font-size: 14.5px; }
.us-sig-tx .l2 { font-size: 12px; color: var(--ink-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 频道行 */
.us-ch { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-top: 1px solid var(--line-soft); cursor: pointer; }
.us-ch:first-of-type, .dk-sec + .us-ch { border-top: none; }
.us-ch:hover { background: var(--panel-2); }
.us-ch .gen-avatar { width: 32px; height: 32px; font-size: 13px; border-radius: 9px; flex: none; }
.us-ch-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.us-ch-tx b { font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.us-ch-tx small { font-size: 12px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.us-ch .badge { position: static; flex: none; }
/* 自选：桌面行 / 手机横滑胶囊 */
.us-wrow { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-top: 1px solid var(--line-soft); }
.us-wrow:first-of-type, .dk-sec + .us-wrow, .td-addbox + .us-wrow { border-top: none; }
.us-wrow-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.us-wrow-tx b { font-size: 15px; margin-right: 6px; }
.us-wrow-tx > div > small { font-size: 12px; }
.us-wrow-tx > small { font-size: 12px; color: var(--ink-dim); }
.us-wrow-q { display: flex; flex-direction: column; align-items: flex-end; gap: 1px; flex: none; }
.us-wrow-q b { font-size: 15px; }
.us-wrow-q small { font-size: 12.5px; font-weight: 700; }
.us-x { color: var(--ink-faint); font-size: 12px; padding: 4px 6px; border-radius: 6px; flex: none; }
.us-x:hover { color: var(--up); background: var(--raise); }
.us-watch-strip { display: flex; gap: 8px; padding: 4px 14px 12px; overflow-x: auto; scrollbar-width: none; }
.us-watch-strip::-webkit-scrollbar { display: none; }
.us-wchip { flex: none; width: 104px; padding: 8px 10px; border-radius: 10px; background: var(--raise); display: flex; flex-direction: column; gap: 1px; }
.us-wchip b { font-size: 13.5px; }
.us-wchip span { font-size: 12.5px; font-weight: 700; }
.us-wchip small { font-size: 10.5px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 本周回顾 / 热门标的 */
.us-week { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); padding: 12px 14px 8px; }
.us-week div { display: flex; flex-direction: column; }
.us-week small { font-size: 12px; color: var(--ink-faint); }
.us-week b { font-size: 20px; }
.us-week-best { padding: 0 14px 14px; font-size: 12.5px; }
.us-week-best b { color: var(--ink); }
.us-hot { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; }
.us-hot-row { display: flex; align-items: center; gap: 10px; font-size: 13px; }
.us-hot-row > b:first-child { width: 54px; flex: none; }
.us-hot-row .bar { flex: 1; height: 8px; border-radius: 999px; background: var(--raise); overflow: hidden; }
.us-hot-row .bar div { height: 8px; border-radius: 999px; background: var(--accent); }
.us-hot-row > span { width: 34px; flex: none; text-align: right; font-size: 12.5px; }
.us-hot-row > b:last-child { width: 56px; flex: none; text-align: right; font-size: 12.5px; }
/* 我的：美股用户的「开通 A股」卡（档案卡下方） */
.me-cn-offer { padding: 14px 16px; border-radius: 14px; background: var(--panel); border: 1px solid #f7c9c0; display: flex; flex-direction: column; gap: 8px; }
html[data-theme="dark"] .me-cn-offer { border-color: rgba(240, 154, 134, .45); }
.me-cn-offer .l1 { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.me-cn-offer .l1 .grow { flex: 1; }
.me-cn-offer p { margin: 0; font-size: 13px; color: var(--ink-dim); line-height: 1.5; }
.me-cn-offer .l3 { display: flex; align-items: center; gap: 10px; margin-top: 2px; }
.me-cn-offer .pr { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; font-size: 13px; white-space: nowrap; }
.me-cn-offer .pr small { font-size: 11.5px; }
.me-cn-offer .btn { flex: none; white-space: nowrap; }

/* 等级矩阵：美股群大类分配 */
.pm-cats { vertical-align: top; }
.pm-cats .inp { width: 100%; max-width: 170px; }
.pm-cats-sum { font-size: 11.5px; margin: 6px 0 4px; }
.pm-cats-chips { display: flex; flex-wrap: wrap; gap: 4px; justify-content: center; }
.pm-cats-chips .chip { font-size: 11.5px; padding: 1px 8px; cursor: pointer; }
.pm-cats-chips .chip i { font-style: normal; color: var(--ink-faint); margin-left: 2px; }
.pm-cats-chips .chip.ghost { border: 1px dashed var(--line); background: transparent; color: var(--ink-dim); }
.pm-catpick { background: var(--panel-2); }
.pm-catgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 6px; }
.pm-catgrid label { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 8px; border: 1px solid var(--line-soft); font-size: 12.5px; cursor: pointer; white-space: nowrap; overflow: hidden; }
.pm-catgrid label.on { background: var(--accent-soft); border-color: var(--accent); }
.pm-catgrid label span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.pm-catgrid label small { color: var(--ink-faint); }

/* ===== 美股信号页 / 自选页 / 联想搜索 ===== */
.us-search { position: relative; display: flex; align-items: center; gap: 6px; }
.us-search .inp { padding-left: 30px; width: 280px; max-width: 100%; }
.us-search.compact .inp { width: 220px; padding-top: 5px; padding-bottom: 5px; font-size: 13px; }
.us-search-ic { position: absolute; left: 10px; color: var(--ink-faint); display: inline-flex; pointer-events: none; }
.us-search .spin.sm { position: absolute; right: 10px; width: 12px; height: 12px; }
.us-search-dd { position: absolute; top: calc(100% + 4px); left: 0; z-index: 30; width: 340px; max-width: calc(100vw - 32px); padding: 6px; border-radius: 12px; background: var(--panel); border: 1px solid var(--line); box-shadow: var(--shadow-lg); }
.us-search-it { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 8px; cursor: pointer; white-space: nowrap; font-size: 13px; }
.us-search-it.on { background: var(--accent-soft); }
.us-search-it > b:first-child { width: 60px; flex: none; }
.us-search-it .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.us-search-it > b:last-child { width: 56px; flex: none; text-align: right; font-size: 12.5px; }
.us-search-ft { padding: 4px 10px 2px; font-size: 11px; }
@media (max-width: 860px) { .us-search .inp, .us-search.compact .inp { width: 100%; } .us-search { width: 100%; } }
/* 信号页 */
.us-days { font-size: 12px; }
.us-days span { padding: 2px 10px; }
.us-sig-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.us-chips { display: flex; gap: 4px; padding: 3px; border-radius: 999px; background: var(--panel); border: 1px solid var(--line-soft); font-size: 13px; font-weight: 600; overflow-x: auto; scrollbar-width: none; max-width: 100%; }
.us-chips::-webkit-scrollbar { display: none; }
.us-chip { flex: none; padding: 4px 12px; border-radius: 999px; color: var(--ink-dim); cursor: pointer; white-space: nowrap; }
.us-chip b { margin-left: 4px; font-weight: 500; color: var(--ink-faint); }
.us-chip.on { background: var(--accent-soft); color: var(--accent); }
.us-chip.on b { color: var(--accent); }
.us-sig-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; align-items: start; }
@media (max-width: 1060px) { .us-sig-grid { grid-template-columns: minmax(0, 1fr); } }
.us-day { display: flex; align-items: baseline; gap: 8px; padding: 8px 14px 4px; font-size: 12px; font-weight: 700; color: var(--ink-faint); letter-spacing: .04em; background: var(--raise); }
.us-sig-tk { width: 56px; }
.us-sig-px { width: 130px; flex: none; text-align: right; font-size: 12px; overflow: hidden; text-overflow: ellipsis; }
.us-sig-ch { width: 150px; }
.us-sig .sg-tag.my { flex: none; }
.us-sig.m .l1 { flex-wrap: nowrap; overflow: hidden; }
.us-sig.m .l1 .chip { flex: none; padding: 1px 8px; font-size: 11px; height: 18px; line-height: 16px; box-sizing: border-box; white-space: nowrap; }
.us-sig.m .l1 .sg-tag { flex: none; white-space: nowrap; }
.us-sig.m .l1 b { flex: none; }
.us-sig.m .l1-ch { min-width: 0; font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.us-sig-r { flex: none; display: flex; flex-direction: column; align-items: flex-end; gap: 1px; }
.us-sig-r .us-sig-pct { width: auto; }
.us-sig-r small { font-size: 10.5px; }
.us-more { padding: 10px; text-align: center; border-top: 1px solid var(--line-soft); }
.us-rank { display: flex; align-items: center; gap: 8px; padding: 9px 14px; border-top: 1px solid var(--line-soft); font-size: 13px; cursor: pointer; white-space: nowrap; }
.us-rank:hover { background: var(--panel-2); }
.us-rank .no { width: 18px; color: var(--ink-faint); }
.us-rank .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.us-rank > b:last-child { width: 56px; text-align: right; }
/* 自选页 */
.us-wh, .us-wr { display: flex; align-items: center; gap: 10px; padding: 0 14px; white-space: nowrap; }
.us-wh { height: 32px; font-size: 12px; background: var(--raise); }
.us-wr { min-height: 54px; border-top: 1px solid var(--line-soft); cursor: pointer; }
.us-wr:hover { background: var(--panel-2); }
.us-wr.open { background: var(--panel-2); }
.us-wh .c1, .us-wr .c1 { width: 190px; flex: none; display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.us-wr .c1 > b { font-size: 15px; }
.us-wr .c1 > small { overflow: hidden; text-overflow: ellipsis; }
.us-wh .c2, .us-wr .c2 { width: 120px; flex: none; text-align: right; display: flex; flex-direction: column; align-items: flex-end; line-height: 1.25; }
.us-wr .c2 b { font-size: 14.5px; } .us-wr .c2 span { font-size: 12px; font-weight: 700; }
.us-wh .c3, .us-wr .c3 { width: 140px; flex: none; text-align: right; font-size: 13px; }
.us-wr .c3 { cursor: text; padding: 4px 0; border-radius: 6px; }
.us-wr .c3:hover { color: var(--accent); }
.us-wh .c4, .us-wr .c4 { width: 120px; flex: none; text-align: right; display: flex; flex-direction: column; align-items: flex-end; line-height: 1.25; }
.us-wr .c4 b { font-size: 14px; } .us-wr .c4 span { font-size: 11.5px; }
.us-wh .c5, .us-wr .c5 { flex: 1; min-width: 0; font-size: 13px; color: var(--ink-dim); overflow: hidden; text-overflow: ellipsis; }
.us-wh .c6, .us-wr .c6 { width: 56px; flex: none; display: flex; gap: 8px; justify-content: flex-end; font-size: 12px; }
.us-wr.m { min-height: 60px; padding: 10px 14px; }
.us-wr.m .c1 { flex: 1; width: auto; flex-direction: column; align-items: flex-start; gap: 1px; }
.us-wr.m .c1 .say { font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.us-wr.m .c1 .say:not(.hint) { color: var(--ink-dim); }
.us-wr.m .c2 { width: auto; } .us-wr.m .c4 { width: 70px; }
.us-wx { padding: 6px 14px 10px; background: var(--raise); border-top: 1px solid var(--line-soft); display: flex; flex-direction: column; gap: 6px; }
.us-wedit { display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; padding: 4px 0 8px; }
.us-wedit label { display: flex; flex-direction: column; gap: 2px; font-size: 11.5px; color: var(--ink-faint); }
.us-wedit .inp { width: 120px; }
.us-wsig { display: flex; align-items: center; gap: 8px; font-size: 12.5px; white-space: nowrap; cursor: pointer; }
.us-wsig .tm { width: 60px; flex: none; }
.us-wsig .chip { flex: none; padding: 0 7px; font-size: 11px; height: 18px; line-height: 16px; box-sizing: border-box; }
.us-wsig .q { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.us-wsig .ch { width: 150px; flex: none; overflow: hidden; text-overflow: ellipsis; }
.us-wsig > b { width: 60px; flex: none; text-align: right; }
.us-wact { display: flex; gap: 14px; font-size: 12px; margin-top: 2px; }
.us-wact .grow { flex: 1; }
/* 升级页美股预览 / 帮助页市场切换 */
.up-hot { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 4px 16px 10px; font-size: 12.5px; }
.up-scope { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13px; margin-top: 4px; }
.hp-mkt { max-width: 520px; margin-bottom: 8px; }

/* ===== 美股群页重设计（2026-09-18，效果图：画布「P3 · 美股群重设计」） ===== */
/* 左栏头部：标题 + 大类 / 频道数；搜索框桌面常显（手机点放大镜展开）；「全部 / 有动态」两枚 chip */
.dc-lhead .mhead-sub { font-size: 12px; }
.dc-rhead { gap: 8px; }
.dc-search { position: relative; align-items: center; }
.dc-search .inp { padding-left: 30px; padding-right: 30px; height: 34px; border-radius: 9px; background: var(--raise); border-color: transparent; font-size: 13px; }
.dc-search .inp:focus { border-color: var(--accent); background: var(--panel); }
.dc-search-ic { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: var(--ink-faint); display: inline-flex; pointer-events: none; }
.dc-search-x { position: absolute; right: 2px; top: 50%; transform: translateY(-50%); }
.rooms-head .row.dc-views { display: flex; }
/* 大类头：▸ 名称 · 数量 · 未读（灰底小胶囊）；★ 常用 置顶 */
.dc-cat { margin: 10px 8px 2px; padding: 4px 6px; text-transform: none; letter-spacing: .2px; font-size: 12px; width: calc(100% - 16px); }
.dc-cat .chev { font-size: 11px; opacity: .6; }
.dc-cat .cnt { font-weight: 500; opacity: .6; }
.dc-cat.star .nm { color: var(--amber); }
.dc-cat.has-unread .nm { color: var(--ink-dim); }   /* 有未读不变色（效果图：大类头一律灰，未读只看右侧灰胶囊） */
.dc-cat .dc-ub { background: var(--raise); color: var(--ink-dim); border-radius: 999px; min-width: 20px; }
.dc-rooms { display: flex; flex-direction: column; gap: 1px; padding: 0 6px; }
/* 频道行：36px 圆角头像 · 名称 + 时间 / 预览 + ★ + 未读 */
.dc-room { display: flex; align-items: center; gap: 10px; padding: 8px 8px; border-radius: 11px; cursor: pointer; transition: background .12s; }
.dc-room:hover { background: var(--panel); }
.dc-room.on { background: var(--accent-soft); }
.dc-room .dc-rav { width: 36px; height: 36px; border-radius: 10px; font-size: 14px; flex: none; }
.dc-room .rmain { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.dc-room .rtitle-row { display: flex; align-items: baseline; gap: 6px; }
.dc-room .rtitle { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-room .rtime { flex: none; font-size: 11px; color: var(--ink-faint); }
.dc-room .rprev-row { display: flex; align-items: center; gap: 6px; }
.dc-room .rprev { flex: 1; min-width: 0; font-size: 12px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-room.unread .rprev { color: var(--ink-dim); }
.dc-room .badge { position: static; flex: none; }
.dc-room .dc-star { flex: none; opacity: 0; }
.dc-room:hover .dc-star, .dc-room .dc-star.on { opacity: 1; }
@media (pointer: coarse) { .dc-room .dc-star { opacity: 0; } .dc-room .dc-star.on { opacity: .8; } }
/* 左栏 chips：效果图是无边框的小胶囊 */
.dc-rhead .dc-chip { border-color: transparent; background: transparent; padding: 3px 10px; font-size: 12.5px; font-weight: 600; }
.dc-rhead .dc-chip.on { background: var(--accent-soft); color: var(--accent-strong); }
/* 右栏「今日信号」卡：一行一条 时间 · 代码 · 动作 · 涨跌 */
.dc-sigcard-h { display: flex; align-items: baseline; gap: 6px; padding: 10px 14px; border-bottom: 1px solid var(--line); font-size: 12px; white-space: nowrap; overflow: hidden; }
.dc-sigcard-h .hint { overflow: hidden; text-overflow: ellipsis; }
.dc-sigcard-h b { font-size: 13.5px; }
.dc-sigcard-h .grow { flex: 1; }
.dc-srow { display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-top: 1px solid var(--line-soft); cursor: pointer; white-space: nowrap; font-size: 13px; }
.dc-srow:first-of-type { border-top: 0; }
.dc-srow:hover { background: var(--raise); }
.dc-srow.old { opacity: .75; }
.dc-srow .tm { width: 40px; flex: none; font-size: 12px; color: var(--ink-faint); }
.dc-srow .tk { min-width: 52px; flex: none; font-size: 13.5px; }
.dc-srow .chip { flex: none; padding: 1px 8px; font-size: 11px; height: 18px; line-height: 16px; box-sizing: border-box; }
.dc-srow .sg-tag { flex: none; }
.dc-srow .grow { flex: 1; }
.dc-srow .pct { flex: none; width: 60px; text-align: right; font-size: 13px; }
/* 会话头：头像 + 名称 + 副题（大类 · 近 3 日信号 · 实时）+ ★ 常用 / 本频道信号 pill */
.dc-hav { width: 36px; height: 36px; border-radius: 10px; font-size: 14px; flex: none; }
.dc-rnav .dc-hav { width: 32px; height: 32px; margin-right: 8px; }
.dc-fhead { gap: 12px; }
.dc-fhead-tx { flex: 1; min-width: 0; }
.dc-fhead-tx h2 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-fhead .head-acts { display: flex; align-items: center; gap: 6px; }
.dc-pill { border: 1px solid var(--line); background: transparent; color: var(--ink-dim); border-radius: 999px; padding: 4px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer; font-family: inherit; white-space: nowrap; }
.dc-pill:hover { color: var(--ink); border-color: var(--ink-faint); }
.dc-pill.on { background: var(--amber-soft); color: var(--amber); border-color: transparent; }
.dc-star.hd { font-size: 18px; height: auto; padding: 0 6px; opacity: .5; }
.dc-star.hd.on { opacity: 1; }
/* 手机：会话页顶部「本群今日」信号条（点开底部抽屉看本频道全部） */
.dc-today { display: flex; align-items: center; gap: 8px; padding: 7px 14px; background: var(--panel); border-bottom: 1px solid var(--line-soft); font-size: 12px; white-space: nowrap; overflow: hidden; cursor: pointer; }
.dc-today .grow { flex: 1; }
.dc-today-it { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 999px; background: var(--raise); flex: none; }
.dc-today-it i { font-style: normal; font-weight: 700; }
.dc-today-it i.c-buy, .dc-today-it i.c-add { color: var(--up); } .dc-today-it i.c-sell, .dc-today-it i.c-reduce, .dc-today-it i.c-stop { color: var(--dn); }
/* 消息：机器人告警 = 一张卡（气泡本身就是卡：embed 不再套第二层框），解析出信号的按方向描左边；
   卡片底部「⚡ 买入 NVDA · 信号 177.20 → 现 180.85 · +2.06%」一行一条 */
.dc-msg.bot .wc-bubble { border-radius: 12px; border: 1px solid var(--line); background: var(--panel); max-width: min(82%, 680px); }
.dc-msg.bot .wc-bubble .dc-embed { margin-top: 0; max-width: none; background: transparent; border: 0; border-radius: 0; padding: 0; }
.dc-msg.bot .wc-bubble .dc-embed + .dc-embed { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line-soft); }
.dc-msg.bot .wc-bubble .text + .dc-embed { margin-top: 8px; }
.dc-msg.bot .wc-bubble .dc-embed.has-thumb { padding-right: 84px; }
.dc-msg.bot .wc-bubble .dc-embed-thumb { top: 0; right: 0; }
.dc-msg.dir-buy .wc-bubble { border-left: 3px solid var(--up); }
.dc-msg.dir-sell .wc-bubble { border-left: 3px solid var(--dn); }
.dc-msig { display: flex; flex-direction: column; gap: 3px; margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--line-soft); }
.dc-msig-it { font-size: 12.5px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dc-msig-it:hover { color: var(--accent-strong); }
.dc-msig-it i { font-style: normal; font-weight: 700; }
.dc-msig-it i.c-buy, .dc-msig-it i.c-add { color: var(--up); } .dc-msig-it i.c-sell, .dc-msig-it i.c-reduce, .dc-msig-it i.c-stop { color: var(--dn); }
/* 会话头 pill 筛选（机器人 / 人工 / 图片 = 单选切换）；桌面不再有单独筛选行 */
.dc-pill-sep { width: 1px; height: 18px; background: var(--line); margin: 0 2px; }
.dc-pill.f.on { background: var(--accent-soft); color: var(--accent-strong); border-color: transparent; }
.dc-fnote { padding: 6px 20px; font-size: 12px; color: var(--ink-faint); border-bottom: 1px solid var(--line-soft); }
.dc-fnote a { color: var(--accent); }
.dc-chstat-t { display: flex; align-items: baseline; gap: 6px; }
.dc-chstat-t b { font-size: 13.5px; }
/* 右栏「本频道」：战绩块 + 热门 + 信号列表 */
.dc-sig-head .l1 .sub { font-size: 12px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.dc-rail-link { font-size: 12px; color: var(--accent); white-space: nowrap; }
.dc-chstat { background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; flex: none; }
.dc-chstat-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.dc-chstat-grid div { display: flex; flex-direction: column; }
.dc-chstat-grid small { font-size: 11.5px; color: var(--ink-faint); }
.dc-chstat-grid b { font-size: 19px; }
.dc-chhot { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; font-size: 12px; }
.dc-chhot .chip { cursor: pointer; padding: 1px 8px; font-size: 11.5px; }
.sig-sheet-body .dc-chstat { margin: 0 0 10px; }
.dc-dtitle { display: flex; align-items: baseline; gap: 8px; padding: 2px 2px 0; white-space: nowrap; overflow: hidden; }
.dc-dtitle .hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 11.5px; }
.dc-dtitle b { font-size: 16px; }
.dc-dtitle .grow { flex: 1; }
.dc-dtitle .badge { position: static; }

/* 右栏「本频道」三卡（效果图）：栏底 panel，卡片用页面底色，1px 细线，头部一行 */
.dc-sig-rail { background: var(--panel); width: 320px; }
.dc-rail-body { padding: 14px 14px 20px; gap: 14px; }
.dc-card { background: var(--bg); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; flex: none; }
.dc-card-pad { padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; }
.dc-card-h { display: flex; align-items: baseline; gap: 6px; padding: 10px 14px; border-bottom: 1px solid var(--line); font-size: 12px; white-space: nowrap; overflow: hidden; }
.dc-card-h b { font-size: 13.5px; }
.dc-card-h .grow { flex: 1; }
.dc-card-link { color: var(--accent); font-size: 12px; white-space: nowrap; }
.dc-card-x { width: 22px; height: 22px; font-size: 12px; margin-left: 2px; align-self: center; }
.dc-card-t { display: flex; align-items: baseline; gap: 6px; }
.dc-card-t b { font-size: 13.5px; }
.dc-card-empty { padding: 18px 14px; font-size: 12.5px; color: var(--ink-faint); text-align: center; }
.dc-card-more { padding: 9px 14px; text-align: center; font-size: 12.5px; border-top: 1px solid var(--line-soft); }
.dc-card-more a { color: var(--accent); }
.dc-chstat-note { font-size: 12px; }
.dc-rail-note { font-size: 11.5px; line-height: 1.6; padding: 0 2px; }
.dc-srow:first-of-type { border-top: 0; }
.dc-card-h + .dc-srow { border-top: 0; }

/* ===== 帮助页 · 会员定价（效果图版）：市场 / 周期两组切换同一行，三张竖排卡 ===== */
.hp-segs { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 16px; }
.hp-segs .seg { margin: 0; max-width: none; width: auto; display: inline-flex; }
.hp-segs .seg-item { padding: 6px 16px; font-size: 13.5px; }
.hp-segs .hp-bill { margin-left: auto; }
.hp-plans.v2 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; max-width: none; align-items: stretch; }
.hp-plans.v2 .hp-plan { display: flex; flex-direction: column; gap: 10px; padding: 20px 22px 18px; border-radius: 14px; background: var(--panel); border: 1px solid var(--line); box-shadow: none; }
.hp-plans.v2 .hp-plan.plan-vip { border: 1px solid var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }
.hp-plans.v2 .hp-plan.plan-svip { background: var(--panel); color: inherit; border-color: var(--line); }
.hp-plans.v2 .hp-plan-flag { position: absolute; top: -10px; right: 16px; left: auto; }
.hp-plans.v2 .hp-plan-l { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; }
.hp-plans.v2 .hp-plan-l small { width: auto; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--ink-faint); }
.hp-plans.v2 .hp-plan-r { text-align: left; }
.hp-plans.v2 .hp-plan-price b { font-size: 36px; letter-spacing: -1px; color: inherit; }
.hp-plans.v2 .hp-plan.plan-svip .hp-plan-price b { color: inherit; }
.hp-plans.v2 .hp-plan-r small { font-size: 12.5px; color: var(--ink-dim); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hp-plans.v2 .hp-plan-r small em { color: var(--accent); font-weight: 600; }
.hp-plans.v2 .hp-plan-m { display: flex; flex-direction: column; gap: 6px; padding-top: 12px; border-top: 1px solid var(--line-soft); align-items: flex-start; flex: 1; }
.hp-plans.v2 .hp-plan-base { font-size: 12.5px; color: var(--ink-faint); margin: 0 0 2px; }
.hp-plans.v2 .hp-pm { font-size: 13.5px; }
.hp-plans.v2 .hp-pm i { color: var(--accent); }
.hp-plans.v2 .hp-plan-foot { display: flex; flex-direction: column; gap: 4px; padding-top: 10px; border-top: 1px solid var(--line-soft); }
.hp-plans.v2 .hp-plan-room { margin: 0; font-size: 12.5px; color: var(--ink-faint); line-height: 1.5; }
@media (max-width: 860px), (max-height: 500px) and (pointer: coarse) {
  .hp-plans.v2 { grid-template-columns: 1fr; }
  .hp-segs .hp-bill { margin-left: 0; }
}

/* 首页先读个人变化；错误、观点和旧报价保持明确可见。 */
button.route-action{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
button.text-action{color:var(--accent);text-decoration:none}
.mkt-seg>button{padding:5px 9px;border-radius:6px;font-size:12px;line-height:1.3}
.mkt-seg>button.on{background:var(--panel);box-shadow:var(--shadow-sm);font-weight:600}
a.us-sig-link{color:inherit;text-decoration:none}
button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
/* 个人动态：概览侧栏与有阅读层次的消息列表。 */
.td-focus{flex:none;margin-bottom:2px;overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow-sm)}
.td-focus-head{display:flex;align-items:center;gap:12px;padding:18px 22px;border-bottom:1px solid var(--line-soft)}
.td-focus-icon,.td-focus-empty-icon{display:flex;align-items:center;justify-content:center;flex:none;color:var(--accent);background:var(--accent-soft);border-radius:12px;width:40px;height:40px}
.td-focus-heading{flex:1;min-width:0}
.td-focus-heading h3{margin:0;font-size:16px;font-weight:650;letter-spacing:.2px;line-height:1.5}
.td-focus-heading p{margin:3px 0 0;color:var(--ink-dim);font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.td-focus-more{display:flex;align-items:center;justify-content:center;gap:5px;flex:none;min-height:36px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:12px;color:var(--ink-dim);transition:background .15s,color .15s}
.td-focus-more:hover{background:var(--accent-soft);color:var(--accent)}
.td-focus-body{display:grid;grid-template-columns:230px minmax(0,1fr)}
.td-focus-links{display:flex;flex-direction:column;gap:0;padding:8px 18px;background:var(--panel-2);border-right:1px solid var(--line-soft)}
.td-focus-links a{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;min-height:60px;padding:12px 0;border-top:1px solid var(--line-soft);color:var(--ink);text-decoration:none}
.td-focus-links a:first-child{border-top:0}
.td-focus-label{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-dim);line-height:1.5}
.td-focus-label>span{display:flex;flex:none;color:var(--accent)}
.td-focus-value{display:flex;align-items:baseline;gap:5px;flex:none;max-width:100%;flex-wrap:wrap}
.td-focus-value b{font-size:23px;font-weight:650;line-height:1.2;letter-spacing:-.6px;overflow-wrap:anywhere}
.td-focus-value small{font-size:11px;color:var(--ink-dim)}
.td-focus-links a:hover .td-focus-label,.td-focus-links a:hover .td-focus-value b{color:var(--accent)}
.td-focus-feed{min-width:0;align-self:center;padding:4px 22px}
.td-focus-row{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,auto);gap:6px 20px;padding:15px 24px 15px 0;border-top:1px solid var(--line-soft);color:var(--ink);text-decoration:none;transition:background .15s}
.td-focus-row:first-child{border-top:0}
.td-focus-row:hover{background:var(--panel-2)}
.td-focus-stock{display:flex;align-items:center;gap:9px;flex-wrap:wrap;min-width:0}
.td-focus-stock>b{font-size:15px;line-height:1.4;overflow-wrap:anywhere}
.td-focus-stock .chip{flex:none;font-size:11px;line-height:1.4;padding:3px 7px;border-radius:5px}
.td-focus-code{font-size:11px;color:var(--ink-dim)}
.td-focus-meta{display:flex;align-items:center;justify-content:flex-end;gap:10px;min-width:0;font-size:11px;color:var(--ink-dim)}
.td-focus-meta>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
.td-focus-meta time{flex:none;font-size:10.5px}
.td-focus-quote{grid-column:1/-1;min-width:0;margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;font-size:13px;color:var(--ink-dim);line-height:1.7}
.td-focus-arrow{position:absolute;right:0;top:18px;display:flex;color:var(--ink-faint)}
.td-focus-row:hover .td-focus-arrow{color:var(--accent)}
.td-focus-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:160px;padding:22px;text-align:center}
.td-focus-empty-icon{margin-bottom:10px;width:44px;height:44px;color:var(--ink-dim);background:var(--panel-2)}
.td-focus-empty>b{font-size:14px;font-weight:600}
.td-focus-empty p{max-width:380px;margin:6px 0 0;color:var(--ink-dim);font-size:12px;line-height:1.8}
.td-refresh-note{padding:9px 14px;background:var(--amber-soft);color:var(--amber);font-size:12px;line-height:1.6}
.sg-tag.semantic{color:var(--amber);background:var(--amber-soft);white-space:nowrap}
.td-expand{display:block;margin:10px auto 14px;text-align:center}
.quote-asof{display:block;font-size:10px;line-height:1.5;color:var(--ink-dim);font-weight:400;white-space:normal}
.quote-asof.stale{color:var(--amber)}
.us-wrow-q{min-width:100px}.us-wchip{max-width:180px}.us-wchip .quote-asof{white-space:normal}
.dc-source-health{margin:8px 0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:11px;line-height:1.6;color:var(--ink-dim)}
.dc-source-health summary{cursor:pointer;color:var(--ink)}
.dc-source-health>div{padding:6px 0;border-top:1px solid var(--line-soft);overflow-wrap:anywhere}
.lazy-fail,.us-query-fail{margin:14px auto;max-width:640px;padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
@media (max-width:860px), (max-height:500px) and (pointer:coarse){
 .td-focus-head{padding:15px;gap:10px}
 .td-focus-heading h3{font-size:15px}
 .td-focus-heading p{font-size:11px}
 .td-focus-heading p>span{display:block}
 .td-focus-icon{width:34px;height:34px;border-radius:10px}
 .td-focus-more{padding:6px 8px}
 .td-focus-body{grid-template-columns:minmax(0,1fr)}
 .td-focus-links{flex-direction:row;padding:14px 6px;border-right:0;border-bottom:1px solid var(--line-soft)}
 .td-focus-links a{flex:1;min-width:0;min-height:0;flex-direction:column;align-items:flex-start;gap:8px;padding:0 10px;border-top:0;border-left:1px solid var(--line)}
 .td-focus-links a:first-child{border-left:0}
 .td-focus-label{font-size:11px;gap:5px}
 .td-focus-value b{font-size:22px}
 .td-focus-value small{font-size:10px}
 .td-focus-feed{padding:0 15px}
 .td-focus-row{grid-template-columns:minmax(0,1fr);gap:5px;padding:14px 22px 14px 0}
 .td-focus-meta{justify-content:flex-start;gap:8px;flex-wrap:wrap}
 .td-focus-meta>span{max-width:100%}
 .td-focus-quote{font-size:12px}
 .td-focus-empty{min-height:155px;padding:22px 8px}
 .td-focus{margin-bottom:2px}
}
@media(max-width:700px){
 .td-pnl{min-width:0}
 .td-pnl b{font-size:16px;white-space:nowrap}
 .us-wr .c4{min-width:0;overflow-wrap:anywhere}
 .us-week b,.sk-stat>b{max-width:100%;overflow-wrap:anywhere}
}
