/* ============================================================
   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;
    /* [LX-V1926-AICHAT-NOCLIP] 必须同时解除 min-height：CSS 规范 min-height 恒压过 height，
       只写 height:100% 打不过 L300 的 .lx-dh-inner{min-height:311px}（v1134 CLS 预留），
       实测 ai-chat 下 inner 仍是 311px，超出 hero 卡 181px → overflow:hidden 砍掉
       131px(42.1%) → 数智人只剩额头+眉眼。ai-chat 态 hero 为 position:fixed
       （不占文档流），解除预留对 CLS 零影响。 [/LX-V1926-AICHAT-NOCLIP] */
    min-height: 0 !important;
  }
}

/* ============================================================
   v1126 · 说话态视觉反馈（P0-B 过渡版）
   ⚠️ 诚实声明：这不伪造口型。数智人六个表情共用同一张静态图（素材级缺口），
      真口型需多帧素材或 IVH 引擎。本动画只表达「她在说话」——呼吸/缩放/光环。
   ⚠️ 只用 transform / box-shadow / filter：不触发重排 → 零 CLS 风险。
   ============================================================ */

/* ===== 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;
  /* [LX-V1935-GHOST-FILTER] screen 抠黑残影消除：素材背景已实测为纯黑（四角亮度 0.0），
     但仍有约 19%% 非纯黑像素（人脸边缘/抗锯齿/压缩伪影），screen 下这些暗灰
     会把 hero 底色提亮 ⇒ 人脸外围朦胧矩形痕迹。contrast 把暗灰压向 0，
     实测槽位截图像素：30-80 暗灰档 13.8%% → 5.6%%（-59%%），亮部 >=200 档 5.6%%→6.4%%
     （不降反升，人脸无损）。1.50 档虽更狠但 >=200 升至 7.4%% 有高光溢出嫌疑，故选 1.30。
     ai-chat 态是 normal 不透明混合，不需要压暗 ⇒ 该态显式 filter:none。 [/LX-V1935-GHOST-FILTER] */
  filter: contrast(1.30) brightness(0.92) !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-V1798-HERO-ALIVE] 已删除原规则：
     `#lx-daily-hero .lx-dh-avatar > video.lx-dh-video ~ canvas#lx-hero-canvas { display:none !important; }`
   原因：该规则用「video 元素【是否存在于 DOM】」决定是否隐藏 canvas，
         而 video 的【实际可见性】由本文末 v1251 的
         `video.lx-dh-video{display:none!important}` 独立决定 —— 两者完全脱节。
         只要 JS 插入了 video（哪怕它 display:none），canvas 就被永久隐藏；
         叠加 lx-hero-living.js 对 img 的隐藏 -> 首屏数智人【三层全灭、整块空白】。
   此前未炸只是因为 video src=lixuan_brand_greet.mp4 实测 404 -> error 回调 v.remove()。
   ⛔ 一旦补传该素材变 200，video 永久驻留 -> 首屏数智人永久空白。
   canvas 活体（LivingPortrait）是首屏数智人的主显示层，不应被 video 的 DOM 存在性误伤。
   ⚠️ 若将来放开 v1251 让 video 真正可见，必须恢复「video 可见时隐藏 canvas」，
      但判据要用 video 的【实际可见性】（如 JS 加类 / :not([hidden])），不要用 DOM 存在性。
   HERO_TOKEN:rule249 */
@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;
  /* LX-V2048-NOSHADOW: 删 28px 黑色投影（禁欲极简·无廉价投影） */
  box-shadow: none !important;
  /* [LX-V1935-GHOST-FILTER] ai-chat 为不透明混合，无需压暗（实测加 filter 会整体暗 10%）[/LX-V1935-GHOST-FILTER] */
  filter: none !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=v1562');
  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-V1816-HERO-VISIBLE] v1251 的 `display:none !important` 已注释掉
   —— 老板拍板（2026-10-19）：解除隐藏，让首屏真人影像真正显示。
   · 原职责（单一）：隐藏横版 IVH video 层（538x426 片源 cover 进 222x272 竖容器错位 35%，
     mix-blend-mode:screen 抠黑叠加在竖版底图上会形成双重曝光）。
   · 本次核查结论：本规则只做「隐藏 video」这一件事，不承担别的职责 ——
     ① 全仓 CSS 里 .lx-dh-video 只在本文件出现；
     ② video 是 position:absolute;inset:0，不参与文档流 → 解除隐藏零 CLS、零布局位移；
     ③ 无「移动端省流量」等媒体查询依赖它。
     故按原注释写的回退路径「回退=删除本块」执行，且用注释而非删除，保留取证。
   · 回退：把下面那行的注释去掉即可（还原 v1251 行为）。
   HERO_TOKEN:v1816 */
/* #lx-daily-hero .lx-dh-avatar > video.lx-dh-video { display: none !important; } */
/* LX_V1251 */

/* [LX-V1817-HERO-EXCLUSIVE] video 真正可见 => canvas 让位（消除「视频人+canvas人」双重成像）
   ---------------------------------------------------------------------------
   背景：两次改动的配套没对齐。
   · V1798 删掉 `video ~ canvas{display:none!important}`，因为它的判据只是 video 的
     【DOM 存在性】—— JS 一插 video（哪怕 404 不可见）canvas 就被永久隐藏 => 首屏空白。
     那次在注释里留下明确待办：「若将来放开 v1251 让 video 真正可见，必须恢复
     「video 可见时隐藏 canvas」，但判据要用 video 的【实际可见性】」。
   · V1816 放开了 v1251（老板拍板：让真人影像真正显示），但上述待办一直没补。
   · 实测后果（general-purpose-1 · WebKit 真解码 2026-10-20）：
       video  222.96x273.65  z-index:3  mix-blend-mode:screen
       canvas 222.56x272.81  z-index:2
       两层重叠占 canvas 面积 99.5%，video 在前 => 两张脸重叠成像。
   · 2026-10-20 老板拍板：video 真正可见时让 canvas 让位，只保留真人录像一层。
   实现：标记类 .lx-dh-video-live 由 js/lx-hero-living.js 在 readyState>=2 且
   videoWidth>0 时加到槽位；解码失败则摘除该类，canvas 自动回归。
   ⛔ 不要改回 :has(video) —— 那又掉回「DOM 存在性」的老坑。
   HERO_TOKEN:exclusive */
#lx-daily-hero .lx-dh-avatar.lx-dh-video-live > canvas#lx-hero-canvas {
  display: none !important;
}
