/* ============================================================
   v1123 · 禁欲系骨架 + 高密度信息 + 张力
   老板定调（2026-09-22）：「收成极简，还是保留密度但把质感做到极致要有张力」
                        「禁欲系的 ui 设计要引领行业风尚」「世界波的视觉冲击力」

   设计原则 —— 不靠装饰，只做结构与节奏：
     ① 去装饰   抹掉投影 / 渐变 / 光晕，容器只留 1px 细线与纯色
     ② 收圆角   20px → 3px（圆润=亲和，锋利=专业）
     ③ hairline 区块之间用细线分隔，而非卡片堆叠
     ④ 数字优先 全部 tabular-nums 等宽，涨跌一眼对齐
     ⑤ 高对比   主文字拉满，次文字提亮到可读，拒绝灰雾
     ⑥ 张力     = 极大关键数字 × 极细线 × 大留白，不靠颜色堆砌

   ⚠️ CLS 铁律（v1114 架构性遗产，勿忘）：
     #main-content 是 flex 任务线，首屏由 JS 渐进注入。任一槽位迟到 → 其后元素整体下推。
     lx-design-system.css 的「⑧ v1114」段用伪元素撑出占位高度（hero / top1 / home-picks）。
     本文件改字号与内边距会改变最终高度 → 必须与占位数值同步，否则 CLS 反弹。
     部署后必须复测三处实际高度并回写占位。

   ⚠️ 选择器均为 2026-09-22 真实 DOM 实测命中（v1120 样机里的 .card/.stat-card/
     .t1-price/.rise/.fall 实测零命中，已剔除，不留死代码）。
   ============================================================ */

/* ── ① 去装饰：抹掉全部投影与光晕 ───────────────────────── */
#main-content *,
#main-content {
  box-shadow: none !important;
  text-shadow: none !important;
}
.lx-daily-hero,
.lhp,
.dpv-top1,
.dpv-list-item,
.lhp-card {
  background-image: none !important;
  backdrop-filter: none !important;
}

/* ── ② 收圆角：专业感来自锋利 ──────────────────────────── */
.lx-daily-hero,
.lhp,
.dpv-top1,
.dpv-list-item,
.lhp-card,
.dpv-top1-badge,
.badge {
  border-radius: 3px !important;
}

/* ── ③ hairline 网格：细线分隔，纯色底 ─────────────────── */
.lx-daily-hero,
.lhp {
  background: #0d1117 !important;
  border: 1px solid rgba(255, 255, 255, 0.10) !important;
}
.lhp-card,
.dpv-list-item {
  background: transparent !important;
  border: 1px solid rgba(255, 255, 255, 0.08) !important;
  border-radius: 2px !important;
  padding: 10px 12px !important;          /* 压缩留白 = 提升单位面积信息量 */
}

/* ── ④ 数字优先：等宽数字，涨跌对齐 ────────────────────── */
body,
#main-content,
.lhp-card,
.dpv-list-item,
.dpv-top1,
.lx-daily-hero {
  font-variant-numeric: tabular-nums !important;
  font-feature-settings: "tnum" 1 !important;
}

/* ── ⑤ 高对比：拒绝灰雾 ────────────────────────────────── */
body {
  color: #e8edf5 !important;
}
.lhp-code,
.dpv-sub,
.lhp-date,
.lhp-foot,
.text-muted,
.dpv-top1-code {
  color: #93a1b5 !important;              /* 实测仍满足 WCAG AA 4.5:1 on #0d1117 */
}

/* ── ⑥ 张力：关键数字放大 × 极细线 × 大留白 ────────────── */
/* Top1 涨跌 = 首屏最该冲击的数字（直接回答「能不能赚钱」） */
.dpv-top1-chg {
  font-size: 34px !important;
  font-weight: 800 !important;
  letter-spacing: -1px !important;
  line-height: 1.0 !important;
}
.dpv-top1-name {
  font-size: 20px !important;
  font-weight: 700 !important;
  letter-spacing: -0.3px !important;
}
/* 精选卡片价格 */
.lhp-price {
  font-size: 26px !important;
  font-weight: 700 !important;
  letter-spacing: -0.5px !important;
  line-height: 1.05 !important;
}
.lhp-name {
  font-size: 15px !important;
  font-weight: 600 !important;
}

/* Top1 视觉重心：左侧 3px 强调线，把首屏钉住 */
.dpv-top1 {
  border-left: 3px solid rgba(255, 255, 255, 0.55) !important;
  padding-left: 14px !important;
}

/* 区块节奏：块间大间距拉开结构，块内高密度
   ⚠️ 血泪（v1123b）：这里曾经写成 `#main-content > * { margin-bottom: 14px }`，
   结果给 h1.lx-sr-only 这类「随加载出现/消失的临时子节点」也加了 14px 外边距，
   首屏整体 +14px 再 −14px 弹一次，单项位移 v=0.0557，CLS 从 0.0454 反弹到 0.0941。
   → 全局 margin 一律禁用，只给稳定常驻块加。 */
#lx-daily-hero,
#lx-home-picks {
  margin-bottom: 14px !important;
}
.lhp-card,
.dpv-list-item {
  border-bottom: 1px solid rgba(255, 255, 255, 0.06) !important;
}

/* ── A 股铁律：红涨绿跌（实测 .up/.down 命中，.rise/.fall 零命中） ── */
.up {
  color: #ff3b3b !important;
}
.down {
  color: #00c853 !important;
}

/* ── 移动端 390×844：冲击力不靠溢出 ───────────────────── */
@media (max-width: 767px) {
  .dpv-top1-chg {
    font-size: 26px !important;
    letter-spacing: -0.6px !important;
  }
  .dpv-top1-name {
    font-size: 17px !important;
  }
  .lhp-price {
    font-size: 21px !important;
  }
  .lhp-card,
  .dpv-list-item {
    padding: 9px 10px !important;
  }
  #lx-daily-hero,
  #lx-home-picks {
    margin-bottom: 10px !important;
  }
}

/* ============================================================
   v1125 · 数智人不再「一说话就下台」
   背景：用户在首屏问琍璇 → lx-ask.js 切到 ai-chat 视图 → 白名单只放行 daily-picks
        → hero display:none → 父元素宽 0 → _setupCanvas() Math.max(1,0)=1 → canvas 坍缩 1×1。
   修法：ai-chat 视图下 hero 变「右侧悬浮头像卡」，只露头像。
   ⚠️ 用 position:fixed（不占文档流）→ 对 CLS 零影响，且不复发 v643「hero 常驻 20 视图重叠」。
   ⚠️ 尺寸必须由 lx-ask.js 触发 _setupCanvas() 重设，否则位图仍停在 1×1。
   ============================================================ */
@media (min-width: 768px) {
  /* ⚠️ 双写 ID 提特异性：lx-design-system.css:1135 用的是
     body[data-lx-view]:not([data-lx-view="daily-picks"]) #lx-daily-hero → 特异性 (1,2,1)，
     单 ID 的 (1,1,1) 会被它压掉（实测 heroDisp 仍是 none）。双写 ID → (2,1,1) 稳赢。 */
  body[data-lx-view="ai-chat"] #lx-daily-hero#lx-daily-hero {
    display: block !important;
    position: fixed !important;
    top: 64px;
    right: 28px;
    width: 148px;
    height: 181px;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    z-index: 45;
    border: 1px solid rgba(255, 255, 255, 0.12) !important;
    border-radius: 3px !important;
    overflow: hidden !important;
    background: #0d1117 !important;
  }
  body[data-lx-view="ai-chat"] #lx-daily-hero > :not(.lx-dh-inner),
  body[data-lx-view="ai-chat"] #lx-daily-hero .lx-dh-inner > :not(.lx-dh-avatar) {
    display: none !important;
  }
  body[data-lx-view="ai-chat"] #lx-daily-hero .lx-dh-inner,
  body[data-lx-view="ai-chat"] #lx-daily-hero .lx-dh-avatar {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
  }
}

/* ============================================================
   v1126 · 说话态视觉反馈（P0-B 过渡版）
   ⚠️ 诚实声明：这不伪造口型。数智人六个表情共用同一张静态图（素材级缺口），
      真口型需多帧素材或 IVH 引擎。本动画只表达「她在说话」——呼吸/缩放/光环。
   ⚠️ 只用 transform / box-shadow / filter：不触发重排 → 零 CLS 风险。
   ============================================================ */
body.lx-speaking #lx-daily-hero .lx-dh-avatar {
  animation: lx-speak-breathe 1.1s ease-in-out infinite !important;
}
body.lx-speaking #lx-daily-hero .lx-dh-avatar::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 3px;
  animation: lx-speak-ring 1.1s ease-in-out infinite;
}
@keyframes lx-speak-breathe {
  0%, 100% { transform: scale(1) translateY(0); }
  50%      { transform: scale(1.035) translateY(-2px); }
}
@keyframes lx-speak-ring {
  0%, 100% { opacity: 0.15; }
  50%      { opacity: 0.75; }
}
@media (prefers-reduced-motion: reduce) {
  body.lx-speaking #lx-daily-hero .lx-dh-avatar,
  body.lx-speaking #lx-daily-hero .lx-dh-avatar::after { animation: none !important; }
}

/* ===== v1128 · hero 真人视频驱动（复用已有 IVH 素材，零新增成本） =====
 * 素材：/static/ivh/lixuan_brand_greet.mp4（538x426 · 11.1s · H.264 · 129KB · 纯黑背景）
 * 方案：绝对定位叠入 .lx-dh-avatar（槽位尺寸固定 -> 零 CLS）+ mix-blend-mode:screen 抠黑
 *      + :has() 隐藏被视频取代的活体 canvas（避免「视频人 + canvas 人」混合成像）
 * 红线：这是琍璇真实 IVH 问候录像（口型与问候语真实同步），非伪造口型。 */
#lx-daily-hero .lx-dh-avatar > video.lx-dh-video {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: center center !important;
  mix-blend-mode: screen !important;
  z-index: 3 !important;
  pointer-events: none !important;
  background: transparent !important;
  opacity: 1;
  transition: opacity .26s ease;
}
#lx-daily-hero .lx-dh-avatar > video.lx-dh-video.lx-dh-fade { opacity: 0 !important; }
/* v1238: 只隐藏活体 canvas，【不再隐藏底图 img】。
   原实现把 video ~ img 一并 display:none —— 但本文件上方注释写明视频是
   「纯黑背景 + mix-blend-mode:screen 抠黑叠加」在底图之上，底图是必须存在的背景层，
   注释里要隐藏的只有 canvas（避免「视频人 + canvas 人」混合成像）。
   误隐藏后果（实测）：抠黑之下空无一物只剩轮廓；且视频是横版 538x426，
   单独 cover 进竖版 224x274 容器宽高比偏差 35.37%；
   而竖版底图 avatar-portrait-clean.webp(430x527) 被压成 0x0 完全不显示。
   修复后（运行时注入实测）：底图 222x272 偏差 0.04%（等比），
   视频仍 z-index:3 + screen 叠加，保留琍璇真实 IVH 问候口型（红线：非伪造口型）。*/
#lx-daily-hero .lx-dh-avatar > video.lx-dh-video ~ img.lx-dh-full-img {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: 50% 22% !important;
  z-index: 1 !important;
}
#lx-daily-hero .lx-dh-avatar > video.lx-dh-video ~ canvas#lx-hero-canvas {
  display: none !important;
}
@media (prefers-reduced-motion: reduce) {
  #lx-daily-hero .lx-dh-avatar > video.lx-dh-video { display: none !important; }
}

/* ===== v1130 · ai-chat 态：单一数智人 + 不穿透卡片 =====
 * 实证根因：v1125 头像卡 fixed + mix-blend-mode:screen -> 视频黑底被抠掉，
 *          背后聊天内容透进她的画面；且 ai-dock 同时播同一个 greet.mp4 = 两个动态影像。
 * 修法：① 头像卡改 normal 不透明 + 圆角 + 克制投影（浮层卡片，禁欲系）
 *      ② ai-chat 态关掉 ai-dock 重复动态影像，改用已有静态头像
 * daily-picks 原位 hero 仍保留 screen 抠黑（深色 hero 渐变上合成干净）。 */
body[data-lx-view="ai-chat"] #lx-daily-hero .lx-dh-avatar > video.lx-dh-video {
  mix-blend-mode: normal !important;
  background: #04060a !important;
  border-radius: 14px !important;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.55) !important;
}
body[data-lx-view="ai-chat"] video.ai-avatar-idle-video { display: none !important; }
body[data-lx-view="ai-chat"] .ai-dock-avatar-area {
  background-image: url('/static/img/avatar-portrait-bust-clean.webp?v=v1040');
  background-size: cover !important;
  background-position: center 18% !important;
}
@media (prefers-reduced-motion: reduce) {
  body[data-lx-view="ai-chat"] #lx-daily-hero .lx-dh-avatar > video.lx-dh-video { display: none !important; }
}

/* ============================================================
   v1134 · CLS 根治（依据：layout-shift sources 实测，见 _diag/visual-audit）
   A) 非精选视图必须把 #tab-daily-picks 的子节点移出布局。
      背景：lx-home-flow.css 令 #tab-daily-picks / .dpv-container 为 display:contents，
      其子节点直接成为 #main-content(flex) 的项目；原隐藏清单只覆盖 hero/picks/guanxuan/living-status，
      漏了 dpv-* → 异步注入（t≈6.7s）在 ai-chat 等视图造成整页下推（单条 shift 0.2929）。
   B) hero 正文异步填充分两步（#lx-dh-indices 等），造成 body 186→311（桌面）/190→398（移动）
      的二次成长 → 预约 min-height 消除跳动（取稳态实测值）。
   ============================================================ */
#main-content:has(.tab-content.active:not(#tab-daily-picks)) #tab-daily-picks > * {
  display: none !important;
}
#lx-daily-hero .lx-dh-inner { min-height: 311px; }
#lx-daily-hero #lx-dh-indices { min-height: 28px; }
@media (max-width: 767px) {
  #lx-daily-hero .lx-dh-inner { min-height: 499px; }
  #lx-daily-hero #lx-dh-indices { min-height: 97px; }
}

/* ============================================================
   v1136 · hero 正文（.lx-dh-body）高度预算
   依据：五轮实测 .lx-dh-body 116→226→267→311 三段连续长高（合计 shift ≈0.105），
   来源为 quick-bar 搬家 + picks 异步注入。预约稳态高度后，内部填充不再改变外框。
   稳态实测值：桌面 body 311 / 移动 body 398（probe-sizes.cjs t=9s 取样）。
   ============================================================ */
#lx-daily-hero .lx-dh-body { min-height: 311px; }
@media (max-width: 767px) {
  #lx-daily-hero .lx-dh-body { min-height: 398px; }
}

/* v1168: 移动端触控热区兜底 v2（B 项）
   层叠真相：钉死者是 .header .btn-icon / .header .btn-icon.btn-ghost（height+min-height:32px!important，特异性 0,3,0）。
   同为 !important 时按特异性裁决 → 覆盖必须 > (0,3,0)。本块用「类名重复三次 + html body」= (0,3,2)。
   同时用 height:auto / width:auto 解开被钉死的固定高宽，再由 min-height/min-width 兜到 44。 */
@media (max-width:768px){
    html body .btn.btn.btn,
    html body .btn-icon.btn-icon.btn-icon,
    html body .btn-sm.btn-sm.btn-sm,
    html body .btn-tab.btn-tab.btn-tab,
    html body .btn-ghost.btn-ghost.btn-ghost,
    html body .lang-on.lang-on.lang-on,
    html body .lang-off.lang-off.lang-off,
    html body .lx-ask-go.lx-ask-go.lx-ask-go,
    html body .lx-ask-chip.lx-ask-chip.lx-ask-chip,
    html body .lx-dh-adopt.lx-dh-adopt.lx-dh-adopt,
    html body .bottom-nav-item.bottom-nav-item.bottom-nav-item,
    html body .nav-item.nav-item.nav-item,
    html body .hot-tag.hot-tag.hot-tag,
    html body .lhr-cta.lhr-cta.lhr-cta,
    html body .lx-user-label.lx-user-label.lx-user-label {
      min-height:44px !important;
      height:auto !important;
    }
    html body .btn-icon.btn-icon.btn-icon,
    html body .btn-star.btn-star.btn-star {
      min-width:44px !important;
      width:auto !important;
    }
}
/* LX_TAP_V1168C */

/* v1251: 数智人去重影 — 隐藏横版 IVH video 层（538x426 片源 cover 进 222x272 竖容器错位 35%，
   screen 抠黑叠加在竖版底图上形成双重曝光）。保留高清竖版底图（430x527 零变形），
   与 agent 栈视觉对齐。回退=删除本块。 */
#lx-daily-hero .lx-dh-avatar > video.lx-dh-video { display: none !important; }
/* LX_V1251 */
