/* uling19-comfort-layout-20260726
   终版舒适排版层：统一 hover 方向、降低背景负载感、逐页留白/行高/卡片节奏。
   回滚：删除 index.html 中本文件 <link> 即可。 */

:root{
  --comfort-gap:clamp(14px,1.45vw,24px);
  --comfort-pad:clamp(18px,1.9vw,30px);
  --comfort-radius:28px;
  --comfort-card-bg:linear-gradient(145deg,rgba(255,255,255,.085),rgba(255,255,255,.028));
  --comfort-card-bg-2:radial-gradient(circle at 90% 0%,rgba(98,217,238,.14),transparent 32%),radial-gradient(circle at 8% 100%,rgba(149,120,240,.10),transparent 36%),var(--comfort-card-bg);
  --comfort-shadow:0 18px 46px rgba(0,0,0,.16),inset 0 1px 0 rgba(255,255,255,.065);
  --comfort-shadow-hover:0 26px 64px rgba(0,0,0,.21),0 0 34px rgba(98,217,238,.10),inset 0 1px 0 rgba(255,255,255,.095);
  --comfort-copy:color-mix(in oklab,var(--text-soft) 88%,var(--text) 12%);
  --comfort-muted:color-mix(in oklab,var(--muted) 72%,var(--text-soft) 28%);
}

html[data-theme="light"]{
  --comfort-card-bg:linear-gradient(145deg,rgba(255,255,255,.98),rgba(239,246,255,.84));
  --comfort-card-bg-2:radial-gradient(circle at 90% 0%,rgba(37,99,235,.13),transparent 34%),radial-gradient(circle at 8% 100%,rgba(124,58,237,.09),transparent 36%),var(--comfort-card-bg);
  --comfort-shadow:0 18px 46px rgba(47,89,196,.12),inset 0 1px 0 rgba(255,255,255,.92);
  --comfort-shadow-hover:0 28px 68px rgba(47,89,196,.18),0 0 34px rgba(37,99,235,.08),inset 0 1px 0 rgba(255,255,255,.96);
}

/* 背景：让低频环境光成为主视觉，粒子退到辅助层 */
html body{background:
  radial-gradient(circle at 12% 16%,rgba(98,217,238,.13),transparent 27%),
  radial-gradient(circle at 86% 10%,rgba(149,120,240,.16),transparent 30%),
  radial-gradient(circle at 50% 88%,rgba(68,212,160,.09),transparent 34%),
  linear-gradient(138deg,var(--bg0),var(--bg1) 46%,var(--bg2))!important;}
html[data-theme="light"] body{background:
  radial-gradient(circle at 12% 18%,rgba(37,99,235,.15),transparent 30%),
  radial-gradient(circle at 84% 8%,rgba(124,58,237,.12),transparent 32%),
  radial-gradient(circle at 50% 90%,rgba(14,155,118,.08),transparent 36%),
  linear-gradient(138deg,#fbfdff 0%,#edf5ff 45%,#e7e9fb 100%)!important;}
html body #bgCanvas{opacity:.30!important;filter:saturate(.86) contrast(.96)!important;mix-blend-mode:screen!important;}
html[data-theme="light"] body #bgCanvas{opacity:.24!important;mix-blend-mode:multiply!important;filter:saturate(1.05) contrast(1.10)!important;}
html body.desktop-fx::before{opacity:.34!important;animation-duration:42s!important;}
html body.desktop-fx::after{opacity:.72!important;animation-duration:32s!important;}
html body .cursor-glow{opacity:.58;filter:blur(22px)!important;}
html body .mouse-blur{display:none!important;}

/* 统一舞台：让每页有固定呼吸感，不被旧规则挤满 */
html body .slide{border-radius:36px!important;}
html body .slide.active{overflow:hidden!important;}
html body .slide-inner{
  gap:var(--comfort-gap)!important;
  padding:clamp(24px,2.35vw,38px) clamp(24px,2.35vw,38px) clamp(18px,1.8vw,28px)!important;
  min-height:0!important;
}
html body .slide-head{min-height:0!important;margin:0!important;align-items:flex-start!important;}
html body .slide-head>div:first-child{max-width:min(70ch,calc(100% - 12px))!important;}
html body .slide-head .lead{max-width:56ch!important;line-height:1.68!important;}
html body .footerbar{min-height:28px!important;padding-top:2px!important;}
html body .mobile-dot-nav{display:none!important;}

/* 卡片统一：只向上浮，不旋转/斜切；光效同一个方向 */
html body .menu-card,
html body .project-card,
html body .award-card,
html body .paper-card,
html body .ability-card,
html body .card,
html body .stat,
html body .ulh-card,
html body .ulh-svc{
  border-radius:var(--comfort-radius)!important;
  background:var(--comfort-card-bg-2)!important;
  border-color:rgba(98,217,238,.17)!important;
  box-shadow:var(--comfort-shadow)!important;
  transform:translate3d(0,0,0)!important;
  transition:transform .22s cubic-bezier(.2,.8,.2,1),box-shadow .22s ease,border-color .22s ease,background .22s ease!important;
}
html body .menu-card::before,
html body .project-card::before,
html body .award-card::before,
html body .paper-card::before,
html body .ability-card::before,
html body .card::before,
html body .stat::before{
  content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:linear-gradient(118deg,transparent 0 26%,rgba(98,217,238,.10) 36%,transparent 48% 100%);
  opacity:.48;
}
html body .menu-card::after,
html body .project-card::after,
html body .award-card::after,
html body .paper-card::after,
html body .ability-card::after,
html body .card::after,
html body .stat::after{
  transform:none!important;rotate:0deg!important;
}
html body .menu-card:hover,
html body .menu-card:focus-visible,
html body .project-card:hover,
html body .award-card:hover,
html body .paper-card:hover,
html body .ability-card:hover,
html body .card:hover,
html body .stat:hover,
html body .ulh-svc:hover{
  transform:translate3d(0,-5px,0) scale(1.006)!important;
  border-color:rgba(98,217,238,.34)!important;
  box-shadow:var(--comfort-shadow-hover)!important;
}
html body .menu-card p,
html body .project-card p,
html body .award-card p,
html body .paper-card p,
html body .ability-card p,
html body .card p,
html body .stat p{color:var(--comfort-copy)!important;line-height:1.66!important;}
html body .quantum-tag,
html body .chip,
html body .pill{border-color:rgba(98,217,238,.16)!important;background:rgba(255,255,255,.045)!important;}

/* 目录页：更像目录入口，不像按钮堆；2 行 3 列，编号和标题同一视线 */
@media (min-width:901px){
  html body .slide[data-index="0"] .slide-inner{grid-template-rows:auto minmax(0,1fr) auto!important;}
  html body .slide[data-index="0"] .menu-grid{
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
    align-content:center!important;
    align-items:stretch!important;
    gap:clamp(16px,1.55vw,24px)!important;
    max-width:1180px!important;
    width:100%!important;
    justify-self:center!important;
    margin:0 auto!important;
    /* Cards lift above the grid on hover. The old hidden overflow clipped
       the first row/outer columns (including the border itself). The slide
       remains the rounded clipping boundary, with ample safe inset. */
    overflow:visible!important;
  }
  html body .slide[data-index="0"] .menu-grid>article.menu-card{
    min-height:196px!important;
    padding:24px!important;
    gap:14px!important;
  }
  html body .slide[data-index="0"] .menu-card .card-head{display:flex!important;align-items:center!important;gap:14px!important;min-width:0!important;}
  html body .slide[data-index="0"] .menu-card .menu-num{flex:0 0 42px!important;width:42px!important;height:42px!important;min-width:42px!important;margin:0!important;}
  html body .slide[data-index="0"] .menu-card h3{margin:0!important;font-size:1.17rem!important;line-height:1.25!important;}
  html body .slide[data-index="0"] .menu-card p{font-size:.96rem!important;line-height:1.72!important;}
  html body .slide[data-index="0"] .menu-card-meta{padding:9px 11px!important;margin-top:auto!important;}
}

/* 首页：左介绍与右服务入口等高、2×5 服务网格更松弛 */
@media (min-width:901px){
  html body .slide[data-index="1"] .ulhome-v2{
    display:grid!important;
    grid-template-columns:minmax(0,1.02fr) minmax(480px,.98fr)!important;
    gap:clamp(20px,2vw,30px)!important;
    align-items:stretch!important;
    min-height:0!important;
  }
  html body .slide[data-index="1"] .ulh-card{padding:clamp(22px,2vw,32px)!important;}
  html body .slide[data-index="1"] .ulh-intro{display:flex!important;flex-direction:column!important;justify-content:center!important;gap:16px!important;}
  html body .slide[data-index="1"] .ulh-lead{font-size:.98rem!important;line-height:1.82!important;max-width:62ch!important;}
  html body .slide[data-index="1"] .ulh-stats{gap:12px!important;}
  html body .slide[data-index="1"] .ulh-console{display:grid!important;grid-template-rows:auto auto minmax(0,1fr) auto!important;gap:14px!important;}
  html body .slide[data-index="1"] .ulh-grid{
    display:grid!important;
    grid-template-columns:repeat(2,minmax(0,1fr))!important;
    grid-auto-rows:minmax(58px,1fr)!important;
    gap:10px!important;
    min-height:0!important;
  }
  html body .slide[data-index="1"] .ulh-svc{min-height:58px!important;padding:10px 11px!important;border-radius:18px!important;align-items:center!important;}
  html body .slide[data-index="1"] .ulh-svc strong{font-size:.91rem!important;line-height:1.2!important;}
  html body .slide[data-index="1"] .ulh-svc span{font-size:.72rem!important;line-height:1.28!important;opacity:.86!important;}
  html body .slide[data-index="1"] .ulh-svc em{font-size:.58rem!important;letter-spacing:.06em!important;}
}

/* 项目页：重点入口和普通入口分层，10 张卡不再挤成同质块 */
@media (min-width:901px){
  html body .slide[data-index="2"] .site-projects-grid{
    display:grid!important;
    grid-template-columns:repeat(4,minmax(0,1fr))!important;
    gap:clamp(12px,1.15vw,18px)!important;
    align-content:center!important;
    min-height:0!important;
  }
  /* 卡高改自适应：内容多高卡就多高，彻底消除硬切（grid 有 258px 余量托得住） */
  html body .slide[data-index="2"] .project-card{min-height:164px!important;height:auto!important;padding:18px!important;display:flex!important;flex-direction:column!important;gap:10px!important;overflow:visible!important;}
  /* min-content 让行高跟着最高那张卡走，消掉 AI Web / CoAgent / DNS Admin 各 4px 的溢出。
     另修三处对齐：第一排原本压住页眉副标题（网格顶边太高）、网格底与页脚只剩 6px、
     网格左边缘 x≈143 与页眉 x≈100 不同基准线。 */
  html body .slide[data-index="2"] .site-projects-grid{
    grid-auto-rows:min-content!important;
    align-items:stretch!important;
    padding:0 0 4px!important;
    margin-left:0!important;
    margin-right:0!important;
  }
  html body .slide[data-index="2"] .project-card-links{
    margin-left:0!important;
    margin-right:0!important;
    padding-left:0!important;
    padding-right:0!important;
  }
  /* 副标题折成两行，但页眉 grid 轨道只预留一行高度，第二行被第一排卡片盖住
     （elementFromPoint 在副标题末行 5 个取样点全部命中 .project-card，确认是真遮挡）。
     改 auto 轨道会让网格越出轨道底部（实测 footGap -2 / innerOv 9px），
     因此沿用首页那套做法：把副标题压到一行。 */
  html body .slide[data-index="2"] .slide-head .lead{
    white-space:nowrap!important;
    max-width:none!important;
    font-size:.80rem!important;
    letter-spacing:.01em!important;
    /* 副标题到首排卡片只有约 5px，比卡片行距 22px 还紧，层级呼吸感不足 */
    margin-bottom:14px!important;
  }
  /* 真凶：网格 align-content:center，而轨道总高(1280x720 实测 545px)大于容器(396px)，
     溢出量被平分到上下两侧，第一排因此上浮 75px 盖住页眉（elementFromPoint 中线取样
     5/5 命中 .project-card，vision 亦确认标题与副标题被压）。
     改 start 让溢出只朝下，配合下面矮屏档收缩卡高把轨道压回容器内。 */
  html body .slide[data-index="2"] .site-projects-grid{
    padding-left:8px!important;
    padding-right:8px!important;
    align-content:start!important;
  }
  /* 重点卡只变宽没变高，反而比下两行矮；补齐高度并让外链沉底 */
  html body .slide[data-index="2"] .project-card.project-featured{grid-column:span 2!important;min-height:196px!important;padding:22px!important;justify-content:flex-start!important;}
  html body .slide[data-index="2"] .project-card.project-featured .project-card-foot{margin-top:auto!important;}
  /* 标签区换行（DNS Admin / ccxui 占两行）使同行描述顶边错开。
     .award-meta 是 flex 行（align-content 无效），改用 flex-wrap + 固定高度对齐描述起始线。 */
  html body .slide[data-index="2"] .project-card .award-meta{
    /* padding-right:40px 挤窄了可用宽度，逼第二个标签换行；配合固定高度后
       换行的标签就压在描述第一行上（AI Web/CoAgent/API Provider/OpenCode/DNS Admin/ccxui 六张）。
       去掉右侧留白 + 不换行 + 缩小标签，让标签稳定单行。 */
    padding-right:0!important;
    gap:6px!important;
    align-items:center!important;
    flex-wrap:nowrap!important;
    overflow:visible!important;
    /* 原为 52px 硬高，导致三行轨道共需 621px 而容器只有 554px，
       第三排下溢 57px 压住页脚（DNS Admin/Email/ccxui/rnxui 四张与 footerbar 相交）。
       两行标签实测 30px 足够，仍能对齐同行描述顶边。 */
    min-height:22px!important;
    height:22px!important;
  }
  /* 标签本体收小，保证 265px 宽的小卡也能单行放下两个标签（如 IP RESTRICTED / AI WORKSPACE） */
  html body .slide[data-index="2"] .project-card .award-meta > *{
    font-size:.54rem!important;
    padding:2px 6px!important;
    letter-spacing:.02em!important;
    white-space:nowrap!important;
    flex:0 1 auto!important;
    min-width:0!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
  }
  /* 网格右侧空了 140px（网格右 1247 vs 容器右 1387），而页眉右到 1353，
     两条右边界不齐、内容整体左偏。让网格与页眉同宽以吃掉死区。 */
  html body .slide[data-index="2"] .site-projects-grid{
    width:auto!important;
    max-width:none!important;
    margin-right:0!important;
    padding-right:34px!important;
  }
  /* 三行轨道仍比容器多约 5px，网格自身不再居中吸收溢出，故收紧行距并给网格留底部安全区 */
  html body .slide[data-index="2"] .site-projects-grid{
    row-gap:14px!important;
    padding-bottom:10px!important;
  }
  /* 悬停时卡片 translateY(-5px)+scale(1.006) 会伸出自己的网格格子，
     但 z-index:auto 时它的阴影/边框会被后面的兄弟卡片和 footerbar(z:6) 盖住，
     看起来像"悬停被遮挡"。悬停态抬到 footerbar 之上即可。 */
  html body .slide[data-index="2"] .project-card:hover,
  html body .slide[data-index="2"] .project-card:focus-visible,
  html body .slide[data-index="3"] .award-card:hover,
  html body .slide[data-index="4"] .card:hover,
  html body .slide[data-index="5"] .ability-card:hover,
  html body .slide[data-index="0"] .menu-card:hover{
    z-index:12!important;
    position:relative!important;
  }
  html body .slide[data-index="2"] .project-card .award-meta > h3{
    font-size:1.05rem!important;
    line-height:1.15!important;
    letter-spacing:0!important;
    padding:0!important;
    flex:0 0 auto!important;
    min-width:max-content!important;
    overflow:visible!important;
    text-overflow:clip!important;
  }
  html body .slide[data-index="2"] .project-card.project-featured .award-meta > h3{font-size:1.2rem!important;}
  html body .slide[data-index="2"] .project-card p{font-size:.88rem!important;line-height:1.58!important;margin:0!important;}
  html body .slide[data-index="2"] .project-card-foot{margin-top:auto!important;font-size:.74rem!important;opacity:.82!important;}
  html body .slide[data-index="2"] .project-external{top:14px!important;right:14px!important;width:32px!important;height:32px!important;border-radius:12px!important;}
}

/* 奖项页：按年份呼吸，分区头小而清楚，卡片等高 */
@media (min-width:901px){
  html body .slide[data-index="3"] .awards-board{display:grid!important;grid-template-columns:1fr!important;gap:16px!important;align-content:center!important;min-height:0!important;}
  html body .slide[data-index="3"] .award-cluster{border-radius:28px!important;padding:16px!important;background:linear-gradient(145deg,rgba(255,255,255,.052),rgba(255,255,255,.018))!important;border:1px solid rgba(98,217,238,.12)!important;}
  html body .slide[data-index="3"] .cluster-head{margin-bottom:12px!important;padding:0 2px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;gap:12px!important;}
  html body .slide[data-index="3"] .cluster-head span{font-size:.88rem!important;font-weight:800!important;letter-spacing:.04em!important;}
  html body .slide[data-index="3"] .cluster-head b{font-size:.72rem!important;color:var(--comfort-muted)!important;}
  html body .slide[data-index="3"] .awards-grid{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:12px!important;}
  html body .slide[data-index="3"] .award-card{min-height:128px!important;padding:16px!important;display:flex!important;flex-direction:column!important;gap:8px!important;}
  html body .slide[data-index="3"] .award-card h3{font-size:.96rem!important;line-height:1.32!important;margin:0!important;}
  html body .slide[data-index="3"] .award-card p{font-size:.82rem!important;line-height:1.5!important;margin:0!important;}
  html body .slide[data-index="3"] .award-hint{margin-top:auto!important;font-size:.74rem!important;}
}

/* 论文页：左右均衡，避免右侧终端/指标块松散或左侧压迫 */
@media (min-width:901px){
  html body .slide[data-index="4"] .paper-grid{
    display:grid!important;
    grid-template-columns:minmax(0,1.03fr) minmax(0,.97fr)!important;
    gap:clamp(18px,1.8vw,28px)!important;
    align-items:stretch!important;
    min-height:0!important;
  }
  html body .slide[data-index="4"] .paper-card{padding:24px!important;display:flex!important;flex-direction:column!important;gap:14px!important;min-height:0!important;}
  html body .slide[data-index="4"] .paper-card .section-title{font-size:1.25rem!important;line-height:1.36!important;letter-spacing:-.02em!important;}
  html body .slide[data-index="4"] .paper-hero-text{font-size:.95rem!important;line-height:1.78!important;margin:0!important;}
  html body .slide[data-index="4"] .paper-side-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important;margin-top:auto!important;}
  html body .slide[data-index="4"] .paper-side-grid .card{padding:14px!important;border-radius:20px!important;}
  html body .slide[data-index="4"] .paper-grid>div{display:flex!important;flex-direction:column!important;gap:14px!important;min-height:0!important;}
  /* The four right-side stat cards lift/scale on hover. A later legacy rule
     sets both paper columns to overflow:hidden, clipping the outer edges of
     the 2×2 grid. Keep each stat rounded/clipped, but let the right column
     paint into the slide's existing 70–95px safe inset. */
  html body .slide[data-index="4"] .paper-grid>div:last-child{overflow:visible!important;}
  html body .slide[data-index="4"] .terminal{flex:1 1 auto!important;min-height:238px!important;padding:18px!important;border-radius:24px!important;display:flex!important;flex-direction:column!important;justify-content:center!important;}
  html body .slide[data-index="4"] .terminal pre{font-size:.84rem!important;line-height:1.72!important;}
  html body .slide[data-index="4"] .signal-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;grid-template-rows:repeat(2,minmax(0,1fr))!important;gap:12px!important;margin-top:0!important;}
  html body .slide[data-index="4"] .stat{padding:15px!important;border-radius:20px!important;min-height:112px!important;}
}

/* 能力页：3×2 证据卡，标题/编号/证据块节奏统一 */
@media (min-width:901px){
  html body .slide[data-index="5"] .ability-grid-evidence{
    display:grid!important;
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
    gap:clamp(14px,1.45vw,22px)!important;
    align-content:center!important;
    min-height:0!important;
  }
  html body .slide[data-index="5"] .ability-card{min-height:190px!important;padding:22px!important;display:flex!important;flex-direction:column!important;gap:12px!important;}
  html body .slide[data-index="5"] .ability-head{display:flex!important;align-items:center!important;gap:13px!important;margin:0!important;}
  html body .slide[data-index="5"] .ability-idx{flex:0 0 40px!important;width:40px!important;height:40px!important;min-width:40px!important;margin:0!important;}
  html body .slide[data-index="5"] .ability-card h3{margin:0!important;font-size:1.08rem!important;line-height:1.3!important;}
  html body .slide[data-index="5"] .ability-card p{font-size:.9rem!important;line-height:1.65!important;margin:0!important;}
  html body .slide[data-index="5"] .ability-evidence{margin-top:auto!important;display:grid!important;gap:8px!important;}
  html body .slide[data-index="5"] .ability-evidence span{padding:9px 10px!important;border-radius:14px!important;background:rgba(255,255,255,.045)!important;border:1px solid rgba(98,217,238,.12)!important;line-height:1.45!important;}
}

/* 移动端：统一为“整页滚动”，保留底栏安全区，避免每页滚动方式不一致 */
@media (max-width:900px){
  html body{overflow:hidden!important;}
  html body .slide{left:50%!important;width:calc(100vw - 12px)!important;height:calc(100dvh - 14px)!important;max-height:calc(100dvh - 14px)!important;transform:translate(-50%,-50%) scale(1)!important;}
  html body .slide-inner{height:100%!important;max-height:100%!important;overflow-y:auto!important;overflow-x:hidden!important;padding:22px 16px calc(100px + env(safe-area-inset-bottom))!important;gap:16px!important;}
  html body .slide-head{display:block!important;}
  html body .slide-head>div:first-child{max-width:100%!important;}
  html body .top-theme{margin-top:10px!important;}
  html body .menu-grid,
  html body .projects-grid,
  html body .awards-grid,
  html body .paper-grid,
  html body .ability-grid,
  html body .signal-grid,
  html body .ulhome-v2,
  html body .ulh-grid{grid-template-columns:1fr!important;gap:14px!important;overflow:visible!important;max-height:none!important;}
  html body .menu-card,
  html body .project-card,
  html body .award-card,
  html body .paper-card,
  html body .ability-card,
  html body .card,
  html body .stat,
  html body .ulh-card{padding:16px!important;border-radius:22px!important;min-height:auto!important;}
  html body .menu-card:hover,
  html body .project-card:hover,
  html body .award-card:hover,
  html body .paper-card:hover,
  html body .ability-card:hover,
  html body .card:hover,
  html body .stat:hover,
  html body .ulh-svc:hover{transform:none!important;}
  html body .slide[data-index="2"] .project-card.project-featured{grid-column:auto!important;}
  html body .slide[data-index="3"] .award-cluster{padding:12px!important;border-radius:22px!important;}
  html body .slide[data-index="3"] .cluster-head{display:block!important;}
  html body .slide[data-index="4"] .terminal{min-height:auto!important;}
  html body .slide[data-index="4"] .terminal pre{font-size:.76rem!important;line-height:1.6!important;}
  html body .mobile-nav{left:8px!important;right:8px!important;bottom:calc(8px + env(safe-area-inset-bottom))!important;grid-template-columns:repeat(7,minmax(0,1fr))!important;gap:4px!important;}
  html body .mobile-nav .rail-btn{font-size:clamp(.66rem,2.8vw,.76rem)!important;padding-inline:2px!important;}
  html body .mobile-nav .mobile-guide-btn{color:#04111c!important;background:linear-gradient(135deg,#62d9ee,#9a78f0)!important;border-color:rgba(255,255,255,.34)!important;}
  /* Mobile uses one viewport-anchored pager. Per-slide pagers live inside the
     scrolling slide-inner and used to drift by up to the full page height. */
  html body .slide .footerbar .dot-nav{display:none!important;}
  html body #mobileDotNav.mobile-dot-nav{
    display:flex!important;
    position:fixed!important;
    left:50%!important;
    right:auto!important;
    bottom:calc(80px + env(safe-area-inset-bottom))!important;
    transform:translateX(-50%)!important;
    width:max-content!important;
    margin:0!important;
    z-index:72!important;
    animation:none!important;
  }
  html body.welcome-open #mobileDotNav.mobile-dot-nav,
  html body:has(#welcome:not(.hide)) #mobileDotNav.mobile-dot-nav{display:none!important;}
  html body #guideFab{bottom:calc(64px + env(safe-area-inset-bottom))!important;}
  html body #guideFab#guideFab{display:none!important;}
  html body .ai-panel{bottom:calc(78px + env(safe-area-inset-bottom))!important;max-height:calc(100dvh - 96px)!important;}
}

@media (max-width:420px){
  html body .slide-inner{padding-left:13px!important;padding-right:13px!important;}
  html body .slide-head .title,html body .slide-head .section-title{font-size:1.55rem!important;}
  html body .menu-card p,html body .project-card p,html body .award-card p,html body .ability-card p{font-size:.84rem!important;line-height:1.55!important;}
  html body .quantum-tag{font-size:.68rem!important;}
}

/* 二次修正：奖项页更松、首页/论文页避贴底、背景动画更可见 */
html body #bgCanvas{opacity:.46!important;filter:saturate(1.08) contrast(1.04)!important;}
html[data-theme="light"] body #bgCanvas{opacity:.36!important;filter:saturate(1.12) contrast(1.08)!important;}
html body.desktop-fx::before{opacity:.48!important;animation-duration:30s!important;}
html body.desktop-fx::after{opacity:.88!important;animation-duration:24s!important;}
html body .slide.active::before{
  content:"";position:absolute;inset:-18%;border-radius:inherit;pointer-events:none;z-index:0;
  background:radial-gradient(circle at 14% 18%,rgba(98,217,238,.16),transparent 31%),radial-gradient(circle at 84% 74%,rgba(149,120,240,.13),transparent 34%);
  opacity:.72;animation:uling19ComfortAura 18s ease-in-out infinite alternate;
}
html[data-theme="light"] body .slide.active::before{opacity:.55;background:radial-gradient(circle at 14% 18%,rgba(37,99,235,.13),transparent 32%),radial-gradient(circle at 84% 74%,rgba(124,58,237,.10),transparent 35%);}
@keyframes uling19ComfortAura{0%{transform:translate3d(-1.4%,.8%,0) scale(1)}100%{transform:translate3d(1.4%,-.8%,0) scale(1.025)}}
html body .slide-inner{position:relative!important;z-index:1!important;}

@media (min-width:901px){
  html body .slide[data-index="1"] .slide-inner{grid-template-rows:auto minmax(0,1fr) auto!important;padding-bottom:30px!important;}
  html body .slide[data-index="1"] .ulhome-v2{grid-template-columns:minmax(0,1fr) minmax(520px,1fr)!important;gap:24px!important;align-items:center!important;}
  html body .slide[data-index="1"] .ulh-card{min-height:0!important;overflow:visible!important;}
  html body .slide[data-index="1"] .ulh-intro{min-height:440px!important;padding:26px!important;}
  html body .slide[data-index="1"] .ulh-console{height:auto!important;min-height:456px!important;padding:22px!important;grid-template-rows:auto auto 1fr auto!important;gap:12px!important;}
  html body .slide[data-index="1"] .ulh-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;grid-auto-rows:56px!important;gap:9px 10px!important;align-content:start!important;}
  html body .slide[data-index="1"] .ulh-svc{height:56px!important;min-height:56px!important;padding:9px 10px!important;grid-template-columns:28px minmax(0,1fr) auto!important;column-gap:8px!important;overflow:hidden!important;}
  html body .slide[data-index="1"] .ulh-svc-text{min-width:0!important;display:grid!important;gap:3px!important;}
  html body .slide[data-index="1"] .ulh-svc strong{font-size:.88rem!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;}
  html body .slide[data-index="1"] .ulh-svc span{font-size:.70rem!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;}
  html body .slide[data-index="1"] .ulh-svc em{align-self:center!important;justify-self:end!important;font-size:.56rem!important;padding:4px 6px!important;line-height:1!important;border-radius:999px!important;}
  html body .slide[data-index="1"] .ulh-foot{margin-top:2px!important;display:flex!important;flex-wrap:wrap!important;gap:7px!important;}
  html body .slide[data-index="1"] .footerbar{margin-top:-4px!important;}

  html body .slide[data-index="3"] .slide-inner{grid-template-rows:auto minmax(0,1fr) auto!important;padding-bottom:30px!important;}
  html body .slide[data-index="3"] .awards-board{gap:18px!important;align-content:center!important;}
  html body .slide[data-index="3"] .award-cluster{padding:18px!important;border-radius:30px!important;box-shadow:0 18px 48px rgba(0,0,0,.13),inset 0 1px 0 rgba(255,255,255,.06)!important;}
  html body .slide[data-index="3"] .award-cluster-main{padding:20px!important;}
  html body .slide[data-index="3"] .awards-grid{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:14px!important;}
  html body .slide[data-index="3"] .award-card{min-height:168px!important;padding:17px 18px!important;gap:9px!important;overflow:visible!important;}
  html body .slide[data-index="3"] .award-cluster-main .award-card{min-height:190px!important;}
  html body .slide[data-index="3"] .award-card h3{font-size:.93rem!important;line-height:1.32!important;display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  /* clamp 对 flex 子项无效（会被 blockify），只会硬切文字；放开让描述完整显示 */
  html body .slide[data-index="3"] .award-card p{font-size:.78rem!important;line-height:1.48!important;display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="3"] .award-meta{gap:7px!important;}
  html body .slide[data-index="3"] .award-hint{font-size:.72rem!important;margin-top:auto!important;}

  html body .slide[data-index="4"] .slide-inner{grid-template-rows:auto minmax(0,1fr) auto!important;padding-bottom:32px!important;}
  html body .slide[data-index="4"] .paper-grid{grid-template-columns:minmax(0,.96fr) minmax(0,1.04fr)!important;gap:24px!important;align-content:center!important;max-width:1190px!important;margin:0 auto!important;}
  html body .slide[data-index="4"] .paper-card{height:auto!important;min-height:560px!important;padding:22px!important;overflow:visible!important;}
  html body .slide[data-index="4"] .paper-card>.card{padding:14px!important;border-radius:20px!important;}
  html body .slide[data-index="4"] .paper-side-grid{gap:12px!important;margin-top:0!important;}
  html body .slide[data-index="4"] .paper-side-grid .card{min-height:108px!important;padding:13px!important;overflow:visible!important;}
  html body .slide[data-index="4"] .paper-side-grid .card h3,
  html body .slide[data-index="4"] .signal-grid .stat h3{font-size:.88rem!important;margin-bottom:5px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card p,
  html body .slide[data-index="4"] .signal-grid .stat p{font-size:.78rem!important;line-height:1.5!important;}
  html body .slide[data-index="4"] .terminal{min-height:214px!important;flex:0 0 auto!important;padding:16px!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .terminal pre{font-size:.78rem!important;line-height:1.58!important;}
  html body .slide[data-index="4"] .signal-grid{gap:12px!important;grid-template-rows:repeat(2,minmax(104px,1fr))!important;}
  html body .slide[data-index="4"] .stat{min-height:104px!important;padding:14px!important;overflow:visible!important;}
  html body .slide[data-index="4"] .footerbar{margin-top:-3px!important;}
}

@media (max-width:900px){
  html body #bgCanvas{display:none!important;}
  html body .slide.active::before{opacity:.40;animation-duration:24s;}
  html body .slide[data-index="3"] .award-card{padding:17px!important;}
  html body .slide[data-index="3"] .awards-grid{gap:13px!important;}
  html body .slide[data-index="4"] .paper-card>.card,
  html body .slide[data-index="4"] .paper-side-grid .card,
  html body .slide[data-index="4"] .stat{overflow:visible!important;}
  html body .slide[data-index="4"] .paper-grid{gap:16px!important;}
}

/* 论文页安全区：footer 不再悬浮压正文；短屏时内容在页脚/固定导航前完整收束 */
@media (min-width:901px){
  html body .slide[data-index="4"] .slide-inner{
    grid-template-rows:auto minmax(0,1fr) auto!important;
    row-gap:10px!important;
    padding-bottom:16px!important;
  }
  /* v63：同上，第 4 页也统一回 absolute，否则六点位置与 0/2/5 页不一致 */
  html body .slide[data-index="4"] .footerbar,
  html body .paper-grid + .footerbar{
    position:absolute!important;inset:auto 0 24px 0!important;z-index:20!important;
    margin:0!important;min-height:30px!important;padding-top:0!important;
  }
  html body .slide[data-index="4"] .paper-grid,
  html body .paper-grid{
    height:100%!important;min-height:0!important;align-content:stretch!important;
  }
  html body .slide[data-index="4"] .paper-card,
  html body .slide[data-index="4"] .paper-grid>div,
  html body .paper-grid .paper-card,
  html body .paper-grid>div{
    height:100%!important;min-height:0!important;overflow:hidden!important;
  }
  html body .slide[data-index="4"] .paper-card{padding:20px!important;gap:11px!important;}
  html body .slide[data-index="4"] .paper-card>.card{flex:0 0 auto!important;padding:12px!important;}
  /* 同项目页：p 是 flex 子项被 blockify，clamp 失效导致「方法主线」「CNN 结果」各被硬切 13px。
     放开高度让文字完整显示。 */
  html body .slide[data-index="4"] .paper-card>.card p{display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="4"] .paper-card>.card{overflow:visible!important;height:auto!important;}
  html body .slide[data-index="4"] .paper-side-grid{flex:1 0 174px!important;min-height:158px!important;grid-template-rows:repeat(2,minmax(70px,1fr))!important;}
  /* 右栏同行两卡行数不同（1 行 vs 2 行）时居中导致标题基线差约 8px，改顶对齐 */
  html body .slide[data-index="4"] .paper-side-grid .card,
  html body .slide[data-index="4"] .signal-grid .stat{justify-content:flex-start!important;align-items:stretch!important;}
  /* 「点击卡片打开 DOI」薄荷绿在白底对比度不足，浅色主题下加深 */
  html[data-theme="light"] body .slide[data-index="4"] .paper-doi-hint,
  html[data-theme="light"] body .slide[data-index="4"] .doi-hint,
  html[data-theme="light"] body .slide[data-index="4"] a[href*="doi"]{color:#0e6b78!important;}
  /* 「方法主线」「CNN 结果」在这里：卡 78px 但内容 91px，被 overflow:hidden 切掉 13px。
     行高 87.6px 装得下，放开 overflow 并让卡撑满行即可。 */
  html body .slide[data-index="4"] .paper-side-grid .card{min-height:0!important;padding:11px!important;overflow:visible!important;height:100%!important;}
  html body .slide[data-index="4"] .paper-side-grid .card p{display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="4"] .paper-side-grid .card h3,
  html body .slide[data-index="4"] .signal-grid .stat h3{font-size:.82rem!important;line-height:1.18!important;margin-bottom:3px!important;}
  /* 这里原来又把 clamp:2 加回去了（clamp 对 flex 子项无效，只会硬切）。改为放开。 */
  html body .slide[data-index="4"] .paper-side-grid .card p,
  html body .slide[data-index="4"] .signal-grid .stat p{font-size:.70rem!important;line-height:1.36!important;display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="4"] .terminal{min-height:0!important;height:auto!important;max-height:none!important;flex:0 0 41%!important;padding:14px!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .terminal pre{font-size:.76rem!important;line-height:1.48!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .signal-grid{flex:1 1 0!important;min-height:0!important;grid-template-rows:repeat(2,minmax(0,1fr))!important;}
  html body .slide[data-index="4"] .stat{min-height:0!important;padding:12px!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .stat p{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:3!important;overflow:hidden!important;}
}

@media (min-width:901px) and (max-height:820px){
  html body .slide[data-index="4"] .slide-head .eyebrow{margin-bottom:5px!important;}
  html body .slide[data-index="4"] .slide-head .section-title{font-size:2.05rem!important;line-height:1.05!important;}
  html body .slide[data-index="4"] .slide-head .lead{font-size:.84rem!important;line-height:1.45!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:1!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .paper-card{padding:17px!important;gap:8px!important;}
  html body .slide[data-index="4"] .paper-card .section-title{font-size:1.08rem!important;line-height:1.28!important;}
  html body .slide[data-index="4"] .paper-hero-text{font-size:.81rem!important;line-height:1.53!important;flex:0 0 auto!important;display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;overflow:hidden!important;}
  html body .slide[data-index="4"] .paper-card>.card{padding:10px!important;}
  html body .slide[data-index="4"] .paper-side-grid{gap:9px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card{padding:9px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card h3,
  html body .slide[data-index="4"] .signal-grid .stat h3{font-size:.78rem!important;margin-bottom:3px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card p,
  html body .slide[data-index="4"] .signal-grid .stat p{font-size:.68rem!important;line-height:1.4!important;}
  html body .slide[data-index="4"] .terminal{flex-basis:40%!important;padding:12px!important;}
  html body .slide[data-index="4"] .terminal pre{font-size:.68rem!important;line-height:1.38!important;}
  html body .slide[data-index="4"] .signal-grid{gap:9px!important;}
  html body .slide[data-index="4"] .stat{padding:9px!important;}
  html body .slide[data-index="4"] .footerbar{font-size:.70rem!important;}
}

@media (max-width:900px){
  html body .slide-inner{scroll-padding-bottom:88px!important;}
  html body .slide[data-index="4"] .footerbar{padding-bottom:88px!important;}
  html body .slide[data-index="4"] .paper-card{scroll-margin-bottom:88px!important;}
  html body .slide[data-index="4"] .fab{bottom:72px!important;}
}

/* project-card-link-polish-20260726：项目页整卡跳转 + 域名完整显示 */
html body .slide[data-index="2"] .project-card-links .project-card{
  position:relative!important;
  color:inherit!important;
  text-decoration:none!important;
  cursor:pointer!important;
}
html body .slide[data-index="2"] .project-card-links .project-card:focus-visible{
  outline:2px solid rgba(98,217,238,.72)!important;
  outline-offset:4px!important;
}
html body .slide[data-index="2"] .project-card-links .project-card .award-meta{
  padding-right:0!important;
  min-width:0!important;
}
html body .slide[data-index="2"] .project-card-links .project-card-foot{
  width:100%!important;
  max-width:100%!important;
  min-height:18px!important;
  overflow:visible!important;
  white-space:normal!important;
  text-overflow:clip!important;
  line-height:1.32!important;
  letter-spacing:.01em!important;
  word-break:normal!important;
  overflow-wrap:anywhere!important;
  color:color-mix(in oklab,var(--cyan) 74%,var(--text) 26%)!important;
}
html body .slide[data-index="2"] .project-card-links .project-card-foot span{
  display:inline!important;
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
}
html body .slide[data-index="2"] .project-card-links .project-card-foot span::after{
  content:" ↗";
  font-weight:800;
  opacity:.84;
}
html body .slide[data-index="2"] .project-card-links .project-card:hover .project-card-foot,
html body .slide[data-index="2"] .project-card-links .project-card:focus-visible .project-card-foot{
  color:var(--cyan)!important;
}
@media (min-width:901px){
  html body .slide[data-index="2"] .project-card-links .project-card{padding-bottom:20px!important;}
  /* 卡片是 display:flex，其子 p 会被 blockify（-webkit-box → flow-root），
     -webkit-line-clamp 因此完全失效，文字被 overflow:hidden 硬切在半句。
     grid 有约 258px 余量，直接放开高度让描述完整显示，不再截断。 */
  html body .slide[data-index="2"] .project-card-links .project-card:not(.project-featured) p{
    display:block!important;
    -webkit-line-clamp:none!important;
    overflow:visible!important;
    flex:0 0 auto!important;
  }
  html body .slide[data-index="2"] .project-card-links .project-card:not(.project-featured) .project-card-foot{font-size:.76rem!important;}
  html body .slide[data-index="2"] .project-card-links .project-card.project-featured .project-card-foot{font-size:.82rem!important;}
}
@media (max-width:900px){
  html body .slide[data-index="2"] .project-card-links .project-card-foot{font-size:.82rem!important;}
}

/* visual-balance-v1: fable5 pass for awards/home/background */
html body #bgCanvas{
  opacity:.72!important;
  filter:saturate(1.24) contrast(1.12) brightness(1.10)!important;
  mix-blend-mode:screen!important;
}
html[data-theme="light"] body #bgCanvas{
  opacity:.42!important;
  filter:saturate(1.16) contrast(1.08) brightness(1.02)!important;
  mix-blend-mode:multiply!important;
}
html body.desktop-fx .slide.active::after{
  content:""!important;
  position:absolute!important;
  inset:0!important;
  pointer-events:none!important;
  z-index:0!important;
  border-radius:inherit!important;
  background:
    linear-gradient(120deg,transparent 0 12%,rgba(98,217,238,.11) 13%,transparent 28% 100%),
    radial-gradient(circle at 78% 24%,rgba(68,212,160,.11),transparent 24%),
    radial-gradient(circle at 18% 86%,rgba(149,120,240,.12),transparent 28%)!important;
  opacity:.58!important;
  animation:uling19SlideCurrent 16s ease-in-out infinite alternate!important;
}
html[data-theme="light"] body.desktop-fx .slide.active::after{
  opacity:.40!important;
  background:
    linear-gradient(120deg,transparent 0 12%,rgba(37,99,235,.10) 13%,transparent 28% 100%),
    radial-gradient(circle at 78% 24%,rgba(14,155,118,.08),transparent 24%),
    radial-gradient(circle at 18% 86%,rgba(124,58,237,.09),transparent 28%)!important;
}
@keyframes uling19SlideCurrent{0%{transform:translate3d(-1.2%,.6%,0)}100%{transform:translate3d(1.2%,-.6%,0)}}

@media (min-width:901px){
  html body .slide[data-index="1"] .slide-inner{
    grid-template-rows:auto minmax(0,1fr) auto!important;
    gap:20px!important;
    padding-top:34px!important;
    padding-bottom:26px!important;
  }
  html body .slide[data-index="1"] .slide-head{
    margin-bottom:0!important;
    transform:none!important;
  }
  html body .slide[data-index="1"] .ulhome-v2{
    align-items:start!important;
    align-self:start!important;
    margin-top:0!important;
    min-height:0!important;
    height:100%!important;
    grid-template-columns:minmax(0,1.04fr) minmax(520px,.96fr)!important;
  }
  html body .slide[data-index="1"] .ulh-intro,
  html body .slide[data-index="1"] .ulh-console{
    min-height:0!important;
    height:100%!important;
  }
  /* 富余空间摊给内容组之间，而不是堆在上下两端。
     早前 margin-top:auto 会留 ~158px 空洞；justify-content:center 又让内边距变成 81px
     （右侧 console 只有 23px），两侧密度不一致。space-between + 内边距对齐 console 才均衡。 */
  html body .slide[data-index="1"] .ulh-intro{
    justify-content:space-between!important;
    padding:24px 30px!important;
  }
  html body .slide[data-index="1"] .ulh-console{
    padding:24px 22px!important;
  }
  html body .slide[data-index="1"] .ulhome-v2{
    column-gap:34px!important;
  }
  html body .slide[data-index="1"] .ulh-name{
    font-size:clamp(2.05rem,3vw,3.15rem)!important;
    line-height:1.02!important;
    letter-spacing:0!important;
  }
  html body .slide[data-index="1"] .ulh-lead{
    max-width:58ch!important;
    line-height:1.74!important;
  }
  html body .slide[data-index="1"] .ulh-stats{
    margin-top:2px!important;
  }
  html body .slide[data-index="1"] .ulh-actions{
    margin-top:0!important;
  }
  /* 标题右上原有约 280×120px 死区：把 sub 提到与标题同一基线右侧，占掉空位 */
  html body .slide[data-index="1"] .ulh-intro{
    display:grid!important;
    grid-template-columns:auto minmax(0,1fr)!important;
    grid-template-areas:
      "eyebrow eyebrow"
      "name    sub"
      "lead    lead"
      "stats   stats"
      "tags    tags"
      "actions actions"!important;
    /* start 会在按钮下方留 135px 死区，space-between 又把间距摊到 58px。
       space-evenly 把富余量均分到各行之间，底部不留大块空白、行距也不过分。 */
    align-content:space-evenly!important;
    row-gap:14px!important;
    column-gap:16px!important;
  }
  html body .slide[data-index="1"] .ulh-eyebrow{grid-area:eyebrow!important;}
  html body .slide[data-index="1"] .ulh-name{grid-area:name!important;align-self:center!important;}
  html body .slide[data-index="1"] .ulh-sub{
    grid-area:sub!important;
    align-self:center!important;
    justify-self:end!important;
    text-align:right!important;
    margin:0!important;
    white-space:nowrap!important;
  }
  html body .slide[data-index="1"] .ulh-lead{grid-area:lead!important;}
  html body .slide[data-index="1"] .ulh-stats{grid-area:stats!important;}
  html body .slide[data-index="1"] .ulh-tags{grid-area:tags!important;}
  html body .slide[data-index="1"] .ulh-actions{grid-area:actions!important;}

  html body .slide[data-index="3"] .slide-inner{
    grid-template-rows:auto minmax(0,1fr) auto!important;
    gap:20px!important;
    padding-top:34px!important;
    padding-bottom:26px!important;
  }
  html body .slide[data-index="3"] .slide-head{
    min-height:0!important;
  }
  html body .slide[data-index="3"] .awards-board{
    height:100%!important;
    min-height:0!important;
    display:grid!important;
    grid-template-rows:1fr 1fr!important;
    gap:16px!important;
    align-content:stretch!important;
  }
  html body .slide[data-index="3"] .award-cluster,
  html body .slide[data-index="3"] .award-cluster-main{
    height:100%!important;
    min-height:0!important;
    padding:16px 18px!important;
    display:grid!important;
    grid-template-rows:auto minmax(0,1fr)!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="3"] .cluster-head{
    margin-bottom:10px!important;
    min-height:28px!important;
  }
  html body .slide[data-index="3"] .awards-grid,
  html body .slide[data-index="3"] .awards-grid-2025,
  html body .slide[data-index="3"] .awards-grid-2024{
    width:100%!important;
    height:100%!important;
    min-height:0!important;
    display:grid!important;
    grid-template-columns:repeat(4,minmax(0,1fr))!important;
    grid-auto-rows:1fr!important;
    gap:12px!important;
    align-items:stretch!important;
  }
  html body .slide[data-index="3"] .award-card,
  html body .slide[data-index="3"] .award-cluster-main .award-card{
    min-height:0!important;
    height:100%!important;
    padding:15px 16px!important;
    gap:7px!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="3"] .award-card h3{
    font-size:.90rem!important;
    line-height:1.25!important;
    -webkit-line-clamp:2!important;
  }
  html body .slide[data-index="3"] .award-card p{
    font-size:.75rem!important;
    line-height:1.42!important;
    -webkit-line-clamp:2!important;
  }
  html body .slide[data-index="3"] .award-meta{
    gap:6px!important;
  }
  html body .slide[data-index="3"] .quantum-tag{
    font-size:.64rem!important;
    padding:4px 7px!important;
  }
  html body .slide[data-index="3"] .award-hint{
    font-size:.70rem!important;
    margin-top:auto!important;
  }
}

/* 论文页并入统一节奏：上 34 / 行距 20 / 下 26，撤掉早前 gap:10 + 大 padding-bottom 的方案 */
@media (min-width:901px){
  /* 左栏小卡正文原为 2 行 clamp，实测各溢出 16px（"…15.37%"/"…L2 regularization" 被截）。
     右栏 stat 每个空出 100–115px，把余量还给左栏：clamp 放到 3 行、stat 收高。 */
  html body .slide[data-index="4"] .paper-side-grid .card p,
  html body .slide[data-index="4"] .paper-grid .card p{
    -webkit-line-clamp:3!important;
    line-height:1.45!important;
  }
  html body .slide[data-index="4"] .paper-side-grid{
    flex:1 0 196px!important;
    min-height:186px!important;
  }
  /* 基础规则把 grid 轨道钉成 stretch，夹 max-height 只会在轨道里留空。
     改为撑满轨道 + 内容 flex 纵向居中，空白就均摊到上下而不是全堆在底部。 */
  html body .slide[data-index="4"] .signal-grid>.stat{
    min-height:0!important;
    max-height:none!important;
    height:100%!important;
    padding:14px 16px!important;
    display:flex!important;
    flex-direction:column!important;
    justify-content:center!important;
    gap:6px!important;
  }
  /* 右栏原本把全部余量（~106px）都给了 signal-grid，导致 stat 164px 而左栏小卡仅 84px。
     改为 stat 按内容收到 ~124px，余量交给 terminal 代码面板，两栏卡片尺度才接近。 */
  html body .slide[data-index="4"] .signal-grid{
    row-gap:14px!important;
    flex:0 0 auto!important;
    grid-template-rows:repeat(2,minmax(0,124px))!important;
  }
  html body .slide[data-index="4"] .paper-detail-stack>.terminal,
  html body .slide[data-index="4"] .paper-grid>div>.terminal{
    flex:1 1 auto!important;
    min-height:0!important;
  }
  html body .slide[data-index="4"] .terminal pre{
    line-height:1.86!important;
  }
  html body .slide[data-index="4"]>.slide-inner{
    grid-template-rows:auto minmax(0,1fr) auto!important;
    row-gap:20px!important;
    padding-top:34px!important;
    padding-bottom:26px!important;
  }
  html body .slide[data-index="4"].active>.slide-inner>.footerbar,
  html body .slide[data-index="4"]>.slide-inner>.footerbar{
    margin:0!important;
    padding:0 76px 0 4px!important;
    min-height:34px!important;
    height:auto!important;
    max-height:none!important;
  }
}

/* footer 回归 grid 流：解除绝对浮层压卡片 + 让开右下 FAB
   注意：基础 CSS 有 `html body .slide[data-index]>.slide-inner>.footerbar{position:absolute!important}`
   特异度 (0,4,3)，必须用同结构 + .active 提到 (0,5,3) 才能盖住。 */
@media (min-width:901px){
  html body .slide[data-index="1"].active>.slide-inner>.footerbar,
  /* v63：原先这三条把 footerbar 拉回文档流（position:static + grid-row:3）来防遮挡，
     副作用是第 1/3 页的六个分页点比第 0/2/5 页横向偏 36px、纵向偏 2px（翻页会跳）。
     内容高度已在 fx-v53~v62 收干净，不再依赖"页脚占一行"来避让 → 统一回 absolute。
     勿再改回 static：那会让六点位置重新分裂成两组。 */
  html body .slide[data-index="3"].active>.slide-inner>.footerbar,
  html body .slide[data-index="1"]>.slide-inner>.footerbar,
  html body .slide[data-index="3"]>.slide-inner>.footerbar{
    position:absolute!important;
    inset:auto 0 24px 0!important;
    z-index:20!important;
    grid-row:auto!important;
    width:auto!important;
    margin:0!important;
    height:auto!important;
    min-height:34px!important;
    max-height:none!important;
    padding:0 76px 0 4px!important;
    flex-direction:row!important;
    justify-content:space-between!important;
  }
  html body .slide[data-index="1"] .ulhome-v2,
  html body .slide[data-index="3"] .awards-board{
    min-height:0!important;
    max-height:100%!important;
  }
}

@media (max-width:900px){
  html body .slide.active::after{display:none!important;}
  html body .slide[data-index="1"] .ulh-intro{justify-content:flex-start!important;}
  html body .slide[data-index="3"] .award-cluster,
  html body .slide[data-index="3"] .award-cluster-main{height:auto!important;overflow:visible!important;}
}

/* ===== 背景可见性 + 降载（bg-visible-v1） =====
   问题：动画一直在跑（canvas 帧指纹在变），但卡片占了 87.9% 视口，
   剩下 12.1% 的边缘又被 backdrop-filter:blur(14px) 糊掉，所以看起来是静止的。
   修法：卡片留出更多边距露出背景 + 大幅降低玻璃模糊（同时也是最贵的渲染项）。 */
@media (min-width:901px){
  /* 基础 CSS 末尾有 `.slide{width:min(100vw - 16px,1420px)!important;height:...!important}`
     直接绕开了 --slidew/--slideh，所以只改变量无效，必须同样覆盖 width/height。 */
  :root{
    --slidew:min(1320px,calc(100vw - 196px))!important;
    --slideh:min(792px,calc(100vh - 104px))!important;
  }
  /* 只在横向让出背景带，高度基本保持原值——收高会让奖项页/能力页卡片裁切。 */
  html body .slide{
    width:min(100vw - 104px,1360px)!important;
    height:min(100dvh - 86px,818px)!important;
  }
  /* 全屏 backdrop-filter 是本页最重的合成开销，而且会把粒子糊成一片灰。
     浅色主题直接去掉（改用半透明底色营造玻璃感），深色保留很轻的一档。 */
  html[data-theme="light"] body .slide,
  html[data-theme="light"] body.desktop-fx .slide{
    backdrop-filter:none!important;
    -webkit-backdrop-filter:none!important;
  }
  html[data-theme="dark"] body .slide,
  html[data-theme="dark"] body.desktop-fx .slide{
    backdrop-filter:blur(8px) saturate(1.10)!important;
  }
  /* 关键：让粒子从面板底下透出来，而不是只在卡片外那圈窄边挣扎。
     浅色玻璃降到 ~.42/.34，配合下面调深的粒子色，动效可感知但正文对比度仍够。 */
  html[data-theme="light"] body .slide{
    background:linear-gradient(180deg,rgba(255,255,255,.44),rgba(255,255,255,.34)),
               linear-gradient(160deg,rgba(255,255,255,.50),rgba(246,249,255,.42))!important;
  }
  /* 正文区域局部加一层白底，保证可读性不受上面降透明度影响 */
  html[data-theme="light"] body .slide .card,
  html[data-theme="light"] body .slide .stat,
  html[data-theme="light"] body .slide .terminal,
  html[data-theme="light"] body .slide .ulh-card,
  html[data-theme="light"] body .slide .menu-card,
  html[data-theme="light"] body .slide .project-card,
  html[data-theme="light"] body .slide .award-card,
  html[data-theme="light"] body .slide .ability-card{
    /* .90 时内层卡几乎铺满，粒子仍被挡住；.74 下连线可见且正文对比度仍足够 */
    background-color:rgba(255,255,255,.74)!important;
  }
  /* 浅色主题下 multiply 会把亮色粒子压没，改 normal 并提高强度 */
  html[data-theme="light"] body #bgCanvas,
  html[data-theme="light"] body.desktop-fx #bgCanvas{
    mix-blend-mode:normal!important;
    opacity:1!important;
    filter:contrast(1.18) saturate(1.34)!important;
  }
}

/* 首页页眉 IC · EE · CS · AI · EMBEDDED 原会把 EMBEDDED 挤到第二行 */
@media (min-width:901px){
  html body .slide[data-index="1"] .slide-head .subtitle{
    white-space:nowrap!important;
    max-width:none!important;
    letter-spacing:.10em!important;
  }
}

/* 多档位扫描(1200~1920 宽 × 700~1080 高)补掉的三个断档：
   1366x820 奖项页 3 处裁切、1280x800 菜单页 1 处裁切、1200x700 项目页溢出 138px。
   成因都是"卡片固定 min-height + 分档只写到某个高度"，故把奖项/菜单的放开规则
   提到 880px 档，并给 <=700px 再补一档最紧收口。 */
@media (min-width:901px) and (max-height:880px){
  /* 奖项页：1366x820 仍有 3 处裁切，放开高度与 clamp（与 800px 档同策略） */
  html body .slide[data-index="3"] .awards-grid .award-card,
  html body .slide[data-index="3"] .award-cluster-main .award-card{min-height:0!important;height:auto!important;overflow:visible!important;padding:13px 15px!important;}
  html body .slide[data-index="3"] .award-card p,
  html body .slide[data-index="3"] .award-card h3{display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="3"] .awards-grid{grid-auto-rows:min-content!important;align-content:start!important;}
  /* 菜单页：1280x800 有 1 处裁切，同样放开 */
  html body .slide[data-index="0"] .menu-grid > article.menu-card{min-height:0!important;height:auto!important;overflow:visible!important;}
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="0"] .menu-grid{grid-auto-rows:min-content!important;align-content:start!important;}
  html body .slide[data-index="2"] .site-projects-grid{row-gap:14px!important;}
  html body .slide[data-index="2"] .project-card{min-height:0!important;padding:15px 16px!important;gap:8px!important;}
  html body .slide[data-index="2"] .project-card.project-featured{min-height:0!important;padding:17px 19px!important;}
  html body .slide[data-index="2"] .project-card .award-meta{min-height:0!important;height:auto!important;}
}

/* 1365x768 / 1280x720 实测：项目页放开截断后高 13px 溢出；奖项页 8 处裁切。
   矮屏单独收字号/内边距，不影响 900px 以上的舒适排版。 */
@media (min-width:901px) and (max-height:800px){
  html body .slide[data-index="2"] .project-card{min-height:0!important;padding:13px 15px!important;gap:7px!important;}
  html body .slide[data-index="2"] .project-card p{font-size:.80rem!important;line-height:1.46!important;}
  html body .slide[data-index="2"] .project-card h3{font-size:.96rem!important;}
  html body .slide[data-index="2"] .site-projects-grid{gap:11px!important;}
  html body .slide[data-index="2"] .project-card-links .project-card{padding-bottom:13px!important;}
  /* 卡 118px 但内容需 150px，且 overflow:hidden 来自更高特异度的基础规则。
     这里同时放开 overflow 与高度，并收字号让内容真正装得下。 */
  html body .slide[data-index="3"] .awards-grid .award-card,
  html body .slide[data-index="3"] .award-cluster-main .award-card,
  html body .slide[data-index="3"] article.award-card{
    min-height:0!important;
    height:auto!important;
    padding:11px 13px!important;
    gap:5px!important;
    overflow:visible!important;
  }
  html body .slide[data-index="3"] .awards-grid{grid-auto-rows:min-content!important;}
  html body .slide[data-index="3"] .award-hint{font-size:.68rem!important;}
  html body .slide[data-index="3"] .award-meta{gap:5px!important;}
  html body .slide[data-index="3"] .award-card h3{font-size:.86rem!important;line-height:1.22!important;}
  html body .slide[data-index="3"] .award-card p{font-size:.72rem!important;line-height:1.38!important;}
  html body .slide[data-index="3"] .awards-grid{gap:11px!important;}
}

/* 矮屏（≤800px 高）能力页 ability-card 实测各溢出 9px，收紧行高与内边距即可 */
@media (min-width:901px) and (max-height:800px){
  html body .slide[data-index="5"] .ability-card{
    padding:14px 16px!important;
  }
  html body .slide[data-index="5"] .ability-card p{
    line-height:1.6!important;
    font-size:.92rem!important;
  }
  html body .slide[data-index="5"] .ability-card h3{
    margin-bottom:5px!important;
  }
  /* 项目页矮屏(<=800px，含 1365x768)：网格轨道越出容器 15px，收一档卡高与行距 */
  html body .slide[data-index="2"] .site-projects-grid{row-gap:12px!important;}
  html body .slide[data-index="2"] .project-card{min-height:0!important;padding:13px 15px!important;gap:7px!important;}
  html body .slide[data-index="2"] .project-card.project-featured{min-height:0!important;padding:15px 17px!important;}
  html body .slide[data-index="2"] .project-card .award-meta{min-height:0!important;height:auto!important;}
  html body .slide[data-index="2"] .project-card p{font-size:.78rem!important;line-height:1.46!important;}
}

/* 1280x720 这类超矮屏：菜单页 19px、论文页 5px、能力页 9px 仍被切，再收一档 */
@media (min-width:901px) and (max-height:740px){
  /* 这一层历史上累积了约 12 条互相打架的 .menu-card 规则，最后一条
     `.menu-grid > article.menu-card.menu-c…`（min-height:184/padding:20/overflow:hidden）
     特异度更高且位置更后，所以前面的写法都被它吃掉。这里对齐它的特异度收口。 */
  html body .slide[data-index="0"] .menu-grid > article.menu-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.guide-entry-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-guide-card{
    min-height:0!important;
    height:auto!important;
    padding:12px 14px!important;
    gap:5px!important;
    overflow:visible!important;
  }
  html body .slide[data-index="0"] .menu-card p,
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{font-size:.72rem!important;line-height:1.36!important;display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;margin:0!important;}
  html body .slide[data-index="0"] .menu-grid > article.menu-card h3{font-size:.90rem!important;line-height:1.22!important;}
  html body .slide[data-index="0"] .menu-grid > article.menu-card .menu-hint,
  html body .slide[data-index="0"] .menu-grid > article.menu-card .menu-index{font-size:.66rem!important;}
  html body .slide[data-index="0"] .menu-grid{grid-auto-rows:min-content!important;gap:10px!important;}
  /* 项目页超矮屏(<=740px)：轨道总高 545px 塞进 396px 容器会溢出，收卡高与行距把它压回去 */
  html body .slide[data-index="2"] .site-projects-grid{row-gap:10px!important;column-gap:12px!important;}
  html body .slide[data-index="2"] .project-card{min-height:0!important;padding:11px 13px!important;gap:6px!important;}
  html body .slide[data-index="2"] .project-card.project-featured{min-height:0!important;padding:13px 15px!important;}
  html body .slide[data-index="2"] .project-card .award-meta{min-height:0!important;height:auto!important;}
  html body .slide[data-index="2"] .project-card p{font-size:.74rem!important;line-height:1.42!important;}
  html body .slide[data-index="2"] .project-card h3{font-size:.92rem!important;}
  html body .slide[data-index="2"] .project-card.project-featured h3{font-size:1.02rem!important;}
  html body .slide[data-index="4"] .signal-grid .stat,
  html body .slide[data-index="4"] .paper-side-grid .card{padding:9px!important;overflow:visible!important;height:auto!important;}
  html body .slide[data-index="4"] .signal-grid .stat p,
  html body .slide[data-index="4"] .paper-side-grid .card p{font-size:.67rem!important;line-height:1.32!important;}
  html body .slide[data-index="5"] .ability-card{min-height:0!important;height:auto!important;padding:11px 13px!important;gap:5px!important;overflow:visible!important;}
  html body .slide[data-index="5"] .ability-card p{font-size:.72rem!important;line-height:1.38!important;display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;}
  html body .slide[data-index="5"] .ability-grid{grid-auto-rows:min-content!important;gap:10px!important;}
  /* 1280x720 实测：论文页「方法主线」「CNN 结果」两卡与菜单页两卡下溢 24px 进入
     页脚带（footerbar absolute bottom:24px 不占文档流）。收内容高度而非加内边距。 */
  html body .slide[data-index="4"] .paper-side-grid{row-gap:8px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card{padding:9px 11px!important;gap:4px!important;}
  html body .slide[data-index="4"] .paper-side-grid .card p{font-size:.63rem!important;line-height:1.26!important;}
  html body .slide[data-index="4"] .paper-side-grid .card h3{font-size:.84rem!important;}
  html body .slide[data-index="0"] .menu-grid{row-gap:8px!important;}
  html body .slide[data-index="0"] .menu-grid > article.menu-card{padding:10px 12px!important;gap:4px!important;}
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{font-size:.67rem!important;line-height:1.28!important;}
  html body .slide[data-index="3"] .awards-grid{row-gap:8px!important;}
  html body .slide[data-index="3"] .award-card{padding:9px 11px!important;gap:4px!important;}
  html body .slide[data-index="3"] .award-card p{font-size:.65rem!important;line-height:1.28!important;}
  /* 关键：ov=0 说明轨道本来就装得下，卡片之所以进入页脚带，是因为网格默认把
     剩余空间分给轨道/拉伸到容器底，而 footerbar 是 absolute 浮在容器底部 24px。
     用 align-content:start + min-content 让轨道在顶部收住、提前结束，页脚带自然空出。 */
  html body .slide[data-index="0"] .menu-grid,
  html body .slide[data-index="3"] .awards-grid{
    align-content:start!important;
    grid-auto-rows:min-content!important;
  }
  /* 深色菜单页实测：网格轨道 131.7px，但卡片实际渲染 184px → 每行溢出 52px，
     第二行底 618 撞上页脚 610，且第 6 张卡只有 132px 高（同排 184）导致高低不齐。
     可用高度 = 页脚 610 - 网格顶 295 = 315px，两行 + 8px 间距 → 每行 ≤153px。
     故收卡内高度约 31px，并用 1fr 等分两行强制同高。 */
  html body .slide[data-index="0"] .menu-grid{
    grid-template-rows:1fr 1fr!important;
    grid-auto-rows:1fr!important;
    align-items:stretch!important;
    row-gap:10px!important;
    column-gap:12px!important;
  }
  /* 特异度真相 2：基础 CSS 用 `.menu-card.menu-click` / `.menu-guide-click` /
     `.guide-entry-card`（两个 class）钉死 min-height:184px + padding:20px，
     单 class 选择器一律压不过，卡高才始终 184。这里逐个补齐同名 class。 */
  html body .slide[data-index="0"] .menu-grid > article.menu-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-guide-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.guide-entry-card{
    min-height:0!important;height:auto!important;
    padding:11px 13px!important;gap:4px!important;
    justify-content:flex-start!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card h3{
    font-size:.9rem!important;line-height:1.2!important;margin:0!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{
    font-size:.64rem!important;line-height:1.26!important;margin:0!important;
  }
  /* 论文页真因：.paper-side-grid 放 4 张卡（2 行），但父级 .paper-grid 只给到
     604px，第二行从 568 起、卡高 76 → 底部 644，越过 footerbar(620) 24px。
     这里不能用 align-content:start（已是 start 且无效），要直接压两行总高：
     卡片高度 76 → 收内边距/字号，并把 row-gap 压到 6px。 */
  html body .slide[data-index="4"] .paper-side-grid{
    align-content:start!important;
    grid-auto-rows:min-content!important;
    row-gap:6px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid .card{
    padding:7px 10px!important;gap:2px!important;min-height:0!important;
  }
  html body .slide[data-index="4"] .paper-side-grid .card h3{font-size:.78rem!important;line-height:1.2!important;margin:0!important;}
  html body .slide[data-index="4"] .paper-side-grid .card p{font-size:.6rem!important;line-height:1.22!important;margin:0!important;}
  /* vision 复核纠正了几何读数：footerbar 其实没被压，真问题是左栏卡片容器
     在 y≈600 把第二行小卡片"句中截断"（CNN 结果/方法主线 文字被切）。
     根因是容器 overflow 裁切 + 两行放不下，故让左栏可滚动并放开裁切。 */
  html body .slide[data-index="4"] .paper-main,
  html body .slide[data-index="4"] .paper-grid > *:first-child{
    overflow:visible!important;
  }
  html body .slide[data-index="4"] .paper-side-grid .card p{
    display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;
  }
  /* 右栏代码块最后一行被横切（"Issue:" 被切成 "Tssue"）：收字号不够，
     必须放开容器裁切并补底部内边距，让最后一行整行落在框内。 */
  html body .slide[data-index="4"] pre,
  html body .slide[data-index="4"] code{
    font-size:.56rem!important;line-height:1.28!important;
    overflow:visible!important;padding-bottom:6px!important;
  }
  /* 左栏第二行卡片仍压住页脚小字。margin-bottom 无用（卡片是溢出而非贴边），
     真正要做的是把网格上方的内容收高，让 .paper-side-grid 起点上移。 */
  /* 实测左栏没有 .paper-main 类（是 .paper-grid 的第一个匿名 div），此前基于
     .paper-main 的猜测选择器全部空转。改用结构选择器。
     溢出账：side-grid top 458 + 自身 padding-top 16 + 高 196 = 底 654，
     父容器底 604 → 超 50px。所以去掉 16px 顶部内边距 + 收两行卡高。 */
  /* 特异度真相：基础 CSS 里是 `.paper-grid > .paper-side-grid`（多一级 class），
     比 `.slide[..] .paper-side-grid` 高，所以此前所有左栏规则都被压掉、计算值不动。
     必须带上 `.paper-grid >` 才能生效。 */
  /* 真选择器（grep 基础 CSS 得到，勿再猜）：
     html body .slide[data-index="4"] .paper-grid>.paper-card .paper-side-grid
       { margin-top:auto!important; padding-top:16px!important }
     margin-top:auto 是把网格顶到卡片底部、进而溢出 40px 的真凶，
     padding-top:16px 再加剧。必须用同一条路径覆盖。 */
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid{
    margin-top:6px!important;
    padding-top:0!important;
    row-gap:5px!important;
    align-content:start!important;
    grid-auto-rows:min-content!important;
  }
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid .card{
    padding:6px 9px!important;gap:2px!important;min-height:0!important;
  }
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid .card h3{
    font-size:.76rem!important;line-height:1.18!important;margin:0!important;
  }
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid .card p{
    font-size:.58rem!important;line-height:1.2!important;margin:0!important;
  }
  /* 最后一层：基础 CSS 对 .paper-card / .paper-grid 全部写死 overflow:visible!important，
     所以内容天生允许溢出卡片，单靠收高度永远差最后几十像素。这里把左卡限高到
     页脚上沿并恢复裁切+滚动，卡片内容就不可能再压到页脚。 */
  html body .slide[data-index="4"] .paper-grid > .paper-card{
    overflow:hidden!important;
    display:flex!important;
    flex-direction:column!important;
  }
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid{
    flex:0 0 auto!important;
  }
  /* overflow:hidden 已让页脚小字彻底空出（vision 确认），但带来两个新缺陷：
     ① 卡片下沿被削掉一线 ② 「点击卡片打开 DOI ↗」提示被两张卡压住。
     故再收 8px 高度余量，并把 DOI 提示提到卡片之上。 */
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid .card{
    padding:5px 9px!important;
  }
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid .card p{
    font-size:.56rem!important;line-height:1.16!important;
  }
  html body .slide[data-index="4"] .paper-card .paper-hint,
  html body .slide[data-index="4"] .paper-card .doi-hint,
  html body .slide[data-index="4"] .paper-card a[href*="doi"]{
    position:relative!important;z-index:5!important;
  }
  html body .slide[data-index="4"] .paper-grid > div:first-child > .card{
    padding:7px 9px!important;margin-bottom:6px!important;
  }
  html body .slide[data-index="4"] .paper-grid > div:first-child > .card p{
    font-size:.62rem!important;line-height:1.28!important;margin:0!important;
  }
  html body .slide[data-index="4"] .paper-grid > div:first-child > h3{
    font-size:.92rem!important;line-height:1.22!important;margin:0 0 5px!important;
  }
  html body .slide[data-index="4"] .paper-grid > div:first-child > p{
    font-size:.63rem!important;line-height:1.28!important;margin:0 0 5px!important;
  }
  /* 收内容高度的做法连试两次都零变化（sgTop/lastBottom 完全不动），说明高度不由
     这些属性决定。换根本思路：让左栏成为自身的滚动容器（min-height:0 + overflow-y:auto），
     卡片就无法越出父卡片边界，也就不可能压到页脚小字。 */
  html body .slide[data-index="4"] .paper-grid{
    align-items:start!important;
  }
  html body .slide[data-index="4"] .paper-grid > div:first-child{
    min-height:0!important;
    max-height:100%!important;
    overflow-y:auto!important;
    overscroll-behavior:contain!important;
    scrollbar-width:thin!important;
  }
}

/* 矮屏统一给 footerbar 让位：footerbar 是 absolute(bottom:24px)，不占文档流，
   所以网格会一直长到它下面。给内层补底部内边距，卡片就不会进入页脚带。 */
/* 失败方案已回退，勿重犯：给 .slide-inner 加 padding-bottom(46/52px) 反向恶化 ——
   内层高度固定，加底部内边距只会压缩网格可用高度，轨道溢出更多、压页脚的页面从
   1280x720 的 2 处变成 3 页。正确做法是收内容高度（见下方各档），不是加内边距。 */

/* 1024x768（iPad 横屏 / 小笔电）此前完全没覆盖，实测：
   项目页内层溢出 72px；奖项页两组网格底 627 但 footTop 664 且卡片压页脚；
   论文页 .paper-hero-text 裁 19px、.paper-side-grid 底 669 超页脚；
   能力页 3 张 .ability-card 各裁 21px。窄宽 + 中等高 → 单独一档收内容高度。 */
@media (min-width:901px) and (max-width:1120px) and (min-height:721px) and (max-height:820px){
  /* 项目页：5 行 112px 塞不下，收行高与字号 */
  html body .slide[data-index="2"] .projects-grid.site-projects-grid{
    grid-auto-rows:88px!important;
    gap:7px 10px!important;
  }
  html body .slide[data-index="2"] .project-card{
    padding:8px 10px!important;min-height:0!important;
  }
  html body .slide[data-index="2"] .project-card p{
    font-size:.58rem!important;line-height:1.22!important;margin:0!important;
  }
  html body .slide[data-index="2"] .project-card h3{
    font-size:.82rem!important;line-height:1.16!important;margin:0 0 2px!important;
  }
  /* 奖项页：两组网格 + 卡片压页脚，收卡内边距与行高 */
  html body .slide[data-index="3"] .awards-grid{
    gap:7px!important;
  }
  html body .slide[data-index="3"] .award-card{
    padding:8px 10px!important;min-height:0!important;
  }
  html body .slide[data-index="3"] .award-card p{
    font-size:.57rem!important;line-height:1.2!important;margin:0!important;
  }
  html body .slide[data-index="3"] .award-card h3{
    font-size:.8rem!important;line-height:1.15!important;margin:0 0 2px!important;
  }
  /* 论文页：hero 文本裁 19px + 右侧网格超页脚 */
  html body .slide[data-index="4"] .paper-hero-text{
    overflow:visible!important;
  }
  html body .slide[data-index="4"] .paper-hero-text p{
    font-size:.6rem!important;line-height:1.24!important;margin:0 0 3px!important;
  }
  html body .slide[data-index="4"] .paper-grid{
    gap:12px!important;
  }
  /* 收到 70px 后 side-grid 底仍 669 > footTop 668（差 1px）→ 再收一档 */
  html body .slide[data-index="4"] .paper-side-grid{
    grid-auto-rows:62px!important;gap:5px!important;
  }
  /* 项目页残余：卡内两个无 class 的文本块各裁 4px，放开裁切即可 */
  html body .slide[data-index="2"] .project-card *{
    overflow:visible!important;
  }
  /* 首页残余 7px：服务网格再收 2px/行 */
  html body .slide[data-index="1"] .ulh-grid{
    grid-auto-rows:38px!important;gap:4px 9px!important;
    height:194px!important;min-height:194px!important;
  }
  html body .slide[data-index="1"] .ulh-svc{
    height:38px!important;min-height:0!important;padding:2px 9px!important;
  }
  html body .slide[data-index="4"] .signal-grid{
    grid-auto-rows:78px!important;gap:8px!important;
  }
  /* 能力页：3 张卡各裁 21px */
  html body .slide[data-index="5"] .ability-grid{
    gap:10px!important;
  }
  html body .slide[data-index="5"] .ability-card{
    padding:9px 11px!important;min-height:0!important;
  }
  html body .slide[data-index="5"] .ability-card p,
  html body .slide[data-index="5"] .ability-card li{
    font-size:.58rem!important;line-height:1.22!important;margin:0!important;
  }
  html body .slide[data-index="5"] .ability-card h3{
    font-size:.82rem!important;line-height:1.16!important;margin:0 0 3px!important;
  }
  /* v63：relative 会让六点位置与 absolute 页面分裂 → 统一 absolute */
  html body .slide .footerbar{
    position:absolute!important;inset:auto 0 24px 0!important;z-index:20!important;
  }
}

/* 首页服务台通用收口（<=780px 高）：.ulh-grid 的 grid-auto-rows:56px 是本 overlay
   自己设的，在 1365x768 溢出 30px、1280x720 溢出 71px，且 .ulh-console
   overflow:visible → 服务格子跑出卡片压到页脚。这里统一收行高并裁切卡片。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="1"] .ulhome-v2 > .ulh-card.ulh-console{
    overflow:hidden!important;min-height:0!important;
  }
  /* grid 容器被父 flex 压到 175px (= 4行×40 + 3gap×5)，第 5 行从盒外溢出、
     压住图例。显式给 grid 定高 = 5×40 + 4×5 = 220px，撑开盒子。 */
  html body .slide[data-index="1"] .ulh-grid{
    grid-auto-rows:36px!important;
    gap:5px 9px!important;
    height:200px!important;
    min-height:200px!important;
    overflow:visible!important;
  }
  /* 格子类名是 .ulh-svc，本 overlay 前面已写死 height:56px!important，
     比 `.ulh-grid > *` 特异度高 → 行高设 40px 也没用，第 5 行仍 56px 高、
     溢出网格并压住图例。必须按 .ulh-svc 覆盖 height 本身。 */
  html body .slide[data-index="1"] .ulh-svc{
    height:36px!important;min-height:0!important;
    padding:2px 9px!important;border-radius:12px!important;
  }
  html body .slide[data-index="1"] .ulh-svc strong{
    font-size:.76rem!important;line-height:1.15!important;
  }
  html body .slide[data-index="1"] .ulh-svc span{
    font-size:.6rem!important;line-height:1.15!important;
  }
  html body .slide[data-index="1"] .ulh-foot{
    margin-top:4px!important;flex-wrap:nowrap!important;overflow:hidden!important;
  }
  html body .slide[data-index="1"] .ulh-foot span{
    font-size:.55rem!important;
  }
  /* v63：同上，统一 absolute 保证六点对齐 */
  html body .slide[data-index="1"] .footerbar{
    position:absolute!important;inset:auto 0 24px 0!important;z-index:20!important;
  }
}

/* 1280x800：第 6 张卡（.guide-entry-card，AI Web）overflow:hidden 且 sh-ch=19px，
   是真实裁切。该档没有覆盖到 740 档的菜单收口规则，这里单独补一档。 */
@media (min-width:901px) and (max-height:820px) and (min-height:741px){
  html body .slide[data-index="0"] .menu-grid > article.menu-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-guide-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.guide-entry-card{
    min-height:0!important;height:auto!important;
    padding:13px 15px!important;gap:5px!important;
    overflow:visible!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{
    font-size:.68rem!important;line-height:1.3!important;
    display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;
  }
}

/* 1200x700：菜单卡收到 123px 后 6 张全部内容裁切。放开裁切、允许自然高度，
   并把文字再收一档，避免 min-height 归零后反而切字。 */
@media (min-width:901px) and (max-height:700px){
  html body .slide[data-index="0"] .menu-grid{
    grid-template-rows:auto auto!important;grid-auto-rows:auto!important;
    row-gap:7px!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.menu-guide-click,
  html body .slide[data-index="0"] .menu-grid > article.menu-card.guide-entry-card{
    padding:8px 11px!important;gap:3px!important;overflow:visible!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card h3{
    font-size:.82rem!important;line-height:1.16!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{
    font-size:.58rem!important;line-height:1.2!important;
    display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;
  }
  /* 1200x700 项目页：5 行轨道 80+97*4=468 + 4*8 间距 = 落到 582，但内层只给
     381.8px → 溢出 43px。按每行收 9px（97→88）+ 间距 8→6 收平。 */
  html body .slide[data-index="2"] .projects-grid{
    row-gap:6px!important;
    grid-auto-rows:min-content!important;
    align-content:start!important;
  }
  html body .slide[data-index="2"] .projects-grid > .project-card{
    min-height:0!important;height:auto!important;
    padding:7px 10px!important;gap:3px!important;
  }
  html body .slide[data-index="2"] .projects-grid > .project-card h3{
    font-size:.8rem!important;line-height:1.16!important;margin:0!important;
  }
  html body .slide[data-index="2"] .projects-grid > .project-card p{
    font-size:.57rem!important;line-height:1.2!important;margin:0!important;
    display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;
  }
  /* 真选择器（grep 得到）：`.projects-grid.site-projects-grid{gap:16px!important}`
     两个 class，单 class 的 row-gap 压不过，所以行距一直是 8px。 */
  html body .slide[data-index="2"] .projects-grid.site-projects-grid{
    row-gap:4px!important;
  }
  /* 首页容器实测是 .ulhome-v2（不存在 .hero-home），此前规则空转。
     真实故障（vision 确认）：右栏 .ulh-console 需要 460px，卡片只有 372px，
     且 overflow:visible → 88px 内容跑出卡片，直接盖掉页脚 PAGE 02/06。
     故收字号/行距 + 给右栏限高裁切，并把页脚提到卡片之上。 */
  html body .slide[data-index="1"] .ulhome-v2{
    row-gap:6px!important;
  }
  html body .slide[data-index="1"] .ulhome-v2 p{
    font-size:.62rem!important;line-height:1.26!important;margin:0 0 3px!important;
  }
  html body .slide[data-index="1"] .ulhome-v2 > .ulh-card.ulh-console{
    overflow:hidden!important;min-height:0!important;
  }
  /* 类名真相：服务网格是 .ulh-grid、图例是 .ulh-foot，都在正常文档流里
     （没有 absolute），此前 .ulh-svc/.ulh-svc-grid 选择器全是空转。
     溢出真因是本 overlay 自己在上面把 grid-auto-rows 设成了 56px：
     4 行 * 56 + 3*9 间距 + 置顶行 + 图例 = 460 > 卡片 372。
     这一档把行高收到 44px、间距收紧，让 8 格 + 图例真正装进卡片。 */
  html body .slide[data-index="1"] .ulh-grid{
    grid-auto-rows:34px!important;
    gap:4px 8px!important;
    height:186px!important;
    min-height:186px!important;
    overflow:visible!important;
  }
  html body .slide[data-index="1"] .ulh-svc{
    height:34px!important;min-height:0!important;
    padding:2px 8px!important;border-radius:11px!important;
  }
  html body .slide[data-index="1"] .ulh-svc strong{
    font-size:.72rem!important;line-height:1.12!important;
  }
  html body .slide[data-index="1"] .ulh-svc span{
    font-size:.56rem!important;line-height:1.12!important;
  }
  html body .slide[data-index="1"] .ulh-id{
    padding:4px 0!important;
  }
  html body .slide[data-index="1"] .ulh-foot{
    margin-top:4px!important;
  }
  html body .slide[data-index="1"] .ulh-foot span{
    font-size:.54rem!important;
  }
  /* 收到 44px 后只差最后 8px（图例换行占两行）：图例改单行不换行即清零 */
  html body .slide[data-index="1"] .ulh-foot{
    flex-wrap:nowrap!important;
    gap:6px!important;
    overflow:hidden!important;
  }
  /* v63：同上，统一 absolute 保证六点对齐 */
  html body .slide[data-index="1"] .footerbar{
    position:absolute!important;inset:auto 0 24px 0!important;z-index:20!important;
  }
}

/* 极矮屏 <=700px（如 1200x700）：项目页仍溢出 106px、多页卡片压到页脚，
   菜单页有 1 处裁切。这是分档的最后一档，收到最紧。 */
@media (min-width:901px) and (max-height:700px){
  html body .slide[data-index="0"] .menu-grid > article.menu-card{
    min-height:0!important;height:auto!important;overflow:visible!important;padding:10px 12px!important;gap:5px!important;
  }
  html body .slide[data-index="0"] .menu-grid > article.menu-card p{
    display:block!important;-webkit-line-clamp:none!important;overflow:visible!important;
    font-size:.66rem!important;line-height:1.3!important;
  }
  html body .slide[data-index="0"] .menu-grid{gap:8px!important;grid-auto-rows:min-content!important;align-content:start!important;}
  /* 项目页：三排轨道压进容器 */
  html body .slide[data-index="2"] .site-projects-grid{
    row-gap:8px!important;column-gap:10px!important;padding-bottom:6px!important;
  }
  html body .slide[data-index="2"] .project-card{
    min-height:0!important;padding:9px 11px!important;gap:4px!important;
  }
  html body .slide[data-index="2"] .project-card.project-featured{min-height:0!important;padding:10px 12px!important;}
  html body .slide[data-index="2"] .project-card h3{font-size:.9rem!important;}
  html body .slide[data-index="2"] .project-card.project-featured h3{font-size:.98rem!important;}
  html body .slide[data-index="2"] .project-card p{font-size:.68rem!important;line-height:1.32!important;}
  html body .slide[data-index="2"] .project-card .award-meta{height:18px!important;min-height:18px!important;}
  html body .slide[data-index="2"] .project-card .award-meta > *{font-size:.5rem!important;padding:1px 5px!important;}
  html body .slide[data-index="2"] .project-card-foot{font-size:.64rem!important;}
  /* 奖项页 / 首页 / 能力页：卡片不再压页脚 */
  html body .slide[data-index="1"] .slide-inner,
  html body .slide[data-index="3"] .awards-grid,
  html body .slide[data-index="5"] .ability-grid{
    align-content:start!important;grid-auto-rows:min-content!important;
  }
  html body .slide[data-index="3"] .award-card{min-height:0!important;padding:9px 11px!important;gap:4px!important;}
  html body .slide[data-index="3"] .award-card p{font-size:.66rem!important;line-height:1.3!important;}
  html body .slide[data-index="3"] .awards-grid{row-gap:8px!important;}
  html body .slide[data-index="5"] .ability-card{padding:9px 11px!important;gap:4px!important;}
  html body .slide[data-index="5"] .ability-card p{font-size:.66rem!important;line-height:1.3!important;}
  html body .slide[data-index="5"] .ability-grid{gap:8px!important;}
}


/* ============================================================
   移动端美观收口（用户反馈"移动端不太美观"，390x844 实测 + vision 复核）
   三个主问题：
   1) 主题切换器是通栏白底但三个胶囊只占左侧约 40%，右侧大片空洞；
   2) 卡片"内松外紧"——卡内两行间距约 30px 大于卡间距 10px，违反邻近性；
      且章节名与摘要字号过近，层级弱；
   3) 悬浮 AI 按钮压住最后一张卡右下角，且右侧留边小于页面 16px 外边距。
   ============================================================ */
@media (max-width:900px){
  /* 1) 主题切换器三段等分撑满，消除右侧空洞
     （注意：.top-theme 不在 .slide 内，选择器不能写 .slide .top-theme） */
  /* 基础 CSS 里 `.top-theme{display:flex;gap:8px}` 与本层同为 !important 竞争时会赢，
     故提高特异度到 html body .slide .slide-head .top-theme。
     用 flex + flex:1 而非 grid，避免 button 的 display:inline-flex 与 grid 项冲突。 */
  html body .slide .slide-head .top-theme{
    display:flex!important;
    gap:6px!important;
    width:100%!important;
    padding:3px!important;
  }
  html body .slide .slide-head .top-theme button{
    flex:1 1 0!important;
    width:auto!important;
    min-width:0!important;
    justify-content:center!important;
    text-align:center!important;
    padding:8px 4px!important;
    font-size:.76rem!important;
    gap:4px!important;
  }
  /* 2) 卡内收紧、卡间放开，并拉开字号层级 */
  /* 同样需要压过基础 CSS 的 !important，故加 .slide-inner 一级 */
  html body .slide .slide-inner .menu-card,
  html body .slide .slide-inner .project-card,
  html body .slide .slide-inner .award-card,
  html body .slide .slide-inner .ability-card{
    gap:8px!important;
    padding:14px 15px!important;
  }
  html body .slide .slide-inner .menu-grid,
  html body .slide .slide-inner .site-projects-grid,
  html body .slide .slide-inner .awards-grid,
  html body .slide .slide-inner .ability-grid{
    gap:15px!important;
    row-gap:15px!important;
  }
  html body .slide .menu-card h3,
  html body .slide .project-card h3,
  html body .slide .award-card h3{font-size:1.06rem!important;line-height:1.3!important;}
  html body .slide .menu-card p,
  html body .slide .project-card p,
  html body .slide .award-card p{font-size:.82rem!important;line-height:1.5!important;}
  /* 移动端卡片窄，标签允许换行（桌面的 nowrap 不适用） */
  html body .slide[data-index="2"] .project-card .award-meta{
    flex-wrap:wrap!important;
    height:auto!important;
    min-height:0!important;
    row-gap:5px!important;
  }
  html body .slide[data-index="2"] .project-card .award-meta > *{
    font-size:.6rem!important;
    overflow:visible!important;
    text-overflow:clip!important;
  }
  /* 3) 悬浮 AI 按钮与页面 16px 外边距对齐，并抬到底栏之上不压卡片 */
  /* 实际类名是 .fab（position:fixed），不是 .ai-fab。
     基础 CSS 有三条 .fab 规则（right:20/12/14px），最后一条赢，故需更高特异度。 */
  /* 真正胜出的是基础 CSS 里带 ID 的 `html body button#guideFab.fab{right:12px!important}`，
     ID 特异度高于任何纯 class 选择器，必须同样用 #guideFab 才能覆盖。 */
  html body button#guideFab.fab,
  html body #guideFab{
    right:16px!important;
    bottom:calc(env(safe-area-inset-bottom,0px) + 78px)!important;
    z-index:40!important;
    box-shadow:0 6px 22px rgba(8,14,32,.34)!important;
  }
  /* 顶部标题组左边缘统一（标签 34 / 说明 24 错开约 10px） */
  html body .slide .slide-head .eyebrow,
  html body .slide .slide-head .section-title,
  html body .slide .slide-head .lead{margin-left:0!important;}
  /* 底栏留安全区（页面无 .dock 类，底部导航是 nav，用元素选择器兜住） */
  html body nav{padding-bottom:env(safe-area-inset-bottom,0px)!important;}
  /* vision 复核发现的真问题：滚动列表底部没有给固定底栏 + 悬浮按钮留位，
     最后一张卡被直接切断，看起来像渲染出错。给可滚动内层补底部内边距。 */
  html body .slide .slide-inner{
    padding-bottom:calc(env(safe-area-inset-bottom,0px) + 132px)!important;
  }
  /* 卡片上下内边距不对称（顶 ~18px / 底 ~34px，底部塌一块），统一 */
  html body .slide .slide-inner .project-card,
  html body .slide .slide-inner .menu-card,
  html body .slide .slide-inner .award-card,
  html body .slide .slide-inner .ability-card{
    padding-top:15px!important;
    padding-bottom:15px!important;
  }
  html body .slide .slide-inner .project-card .project-card-foot,
  html body .slide .slide-inner .project-card .project-card-links{
    margin-bottom:0!important;
    padding-bottom:0!important;
  }
  /* 悬浮按钮右侧给卡片留安全区，避免长标签（AI WORKSPACE / IP RESTRICTED）被压 */
  html body .slide[data-index="2"] .slide-inner .project-card{
    padding-right:18px!important;
  }
  /* 页头：标题右侧贴边（"页"字像被裁切），补内边距 */
  html body .slide .slide-head{padding-right:14px!important;}
}

@media (prefers-reduced-motion:reduce){
  html body #bgCanvas{display:none!important;}
  html body .slide.active::before,
  html body .slide.active::after{animation:none!important;}
  html body .menu-card,
  html body .project-card,
  html body .award-card,
  html body .paper-card,
  html body .ability-card,
  html body .card,
  html body .stat,
  html body .ulh-svc{transition:none!important;}
}

/* ===== 收尾覆盖块（必须放文件末尾）=====
   教训：1024x768 那一档写在 `<=780px 高` 通用档之前，同特异度下后者胜出，
   导致 1024 档的首页/项目页规则全部空转。凡与通用档冲突的定点修复都放这里。 */

/* 1280x720 与 1024x768：.ulh-console 仍裁 15px、.ulh-foot 裁 5px
   → 网格由 36px/200px 再收到 34px/186px（5*34 + 4*4 = 186）。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="1"] .ulh-grid{
    grid-auto-rows:34px!important;
    gap:4px 9px!important;
    height:186px!important;min-height:186px!important;
  }
  html body .slide[data-index="1"] .ulh-svc{
    height:34px!important;min-height:0!important;padding:2px 9px!important;
  }
  html body .slide[data-index="1"] .ulh-svc strong{
    font-size:.72rem!important;line-height:1.1!important;
  }
  html body .slide[data-index="1"] .ulh-svc span{
    font-size:.55rem!important;line-height:1.1!important;
  }
  html body .slide[data-index="1"] .ulh-foot{
    margin-top:3px!important;overflow:visible!important;
  }
  html body .slide[data-index="1"] .ulh-foot span{
    font-size:.52rem!important;
  }
}

/* ===== v63：统一六个分页点的位置 =====
   实测（1440x900）第 1/3/4 页 footerbar 因我早先加的 position:relative 脱离了
   绝对定位：dotCx 684 / dotTop 807.5，而第 0/2/5 页是 absolute bottom:24px →
   dotCx 720 / dotTop 805.5。横向差 36px、纵向差 2px，翻页时六点会跳。
   统一回 absolute bottom:24px。z-index 与 position 无关（absolute 本身即可
   参与层叠），所以防遮挡效果不受影响。 */
html body .slide .footerbar{
  position:absolute!important;
  left:0!important;
  right:0!important;
  bottom:24px!important;
  z-index:20!important;
}
/* 六点自身尺寸/间距也钉死，避免各页因字号继承产生亚像素差异 */
html body .slide .footerbar .dot-nav{
  gap:9px!important;
  align-items:center!important;
}

/* ===== v63：首页右侧服务站点卡片布局优化 =====
   结构真相：.ulh-svc > i（图标）+ .ulh-svc-text（strong 名称 + span 域名）+ em（徽标）。
   原问题：徽标宽度随文字变化（GATED/PUBLIC/MAIL/API 四种长度）→ 两列右缘参差；
   长域名 api-provider./dns-admin. 挤压徽标；矮屏为塞进 5 行把行高压到 34px 显拥挤。 */
html body .slide[data-index="1"] .ulh-grid{
  /* minmax(0,1fr) 防止长域名把列宽顶出网格 */
  grid-template-columns:repeat(2,minmax(0,1fr))!important;
  align-content:start!important;
}
html body .slide[data-index="1"] .ulh-svc{
  display:flex!important;
  align-items:center!important;
  gap:9px!important;
  overflow:hidden!important;
}
html body .slide[data-index="1"] .ulh-svc > i{
  flex:0 0 auto!important;
  width:22px!important;height:22px!important;
  display:inline-flex!important;
  align-items:center!important;justify-content:center!important;
  font-style:normal!important;
}
html body .slide[data-index="1"] .ulh-svc-text{
  flex:1 1 auto!important;
  min-width:0!important;      /* 关键：否则 flex 子项不肯收缩，长域名顶爆布局 */
  display:flex!important;
  flex-direction:column!important;
  justify-content:center!important;
}
html body .slide[data-index="1"] .ulh-svc-text strong,
html body .slide[data-index="1"] .ulh-svc-text span{
  display:block!important;
  overflow:hidden!important;
  text-overflow:ellipsis!important;   /* 超长用省略号，不再硬裁 */
  white-space:nowrap!important;
}
/* 徽标定宽 → 两列右缘对齐成一条线 */
html body .slide[data-index="1"] .ulh-svc > em{
  flex:0 0 auto!important;
  min-width:52px!important;
  text-align:center!important;
  font-style:normal!important;
  letter-spacing:.04em!important;
}

/* 矮屏（<=780px 高）：域名是冗余信息（全是 *.uling19.com），隐藏后走单行，
   行高反而能给到 32px 且视觉更松，比塞 34px 双行清爽。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="1"] .ulh-svc-text span{
    display:none!important;
  }
  html body .slide[data-index="1"] .ulh-svc-text strong{
    font-size:.78rem!important;line-height:1.1!important;
  }
  html body .slide[data-index="1"] .ulh-grid{
    grid-auto-rows:32px!important;
    gap:5px 9px!important;
    height:180px!important;min-height:180px!important;
  }
  html body .slide[data-index="1"] .ulh-svc{
    height:32px!important;padding:0 9px!important;
  }
}

/* 1024x768 项目页：卡内 <p>（无 class）被 line-clamp 裁 4px，按 p 定点放开 */
@media (min-width:901px) and (max-width:1120px) and (min-height:721px) and (max-height:820px){
  html body .slide[data-index="2"] .project-card p{
    overflow:visible!important;
    -webkit-line-clamp:none!important;
    display:block!important;
    font-size:.56rem!important;line-height:1.2!important;
  }
}

/* 论文页 .paper-side-grid 底 650 > footTop 620/600：该网格是 min-content 行，
   基础 CSS 的 margin-top:auto 把它顶到卡底。极矮屏收行高并取消自动外边距。
   注意 .paper-card 已在 fx-v46 被 overflow:hidden 钳到 605，视觉不外溢，
   但几何仍越过页脚线 → 这里把网格本体也收进页脚线以上。 */
@media (min-width:901px) and (max-height:740px){
  html body .slide[data-index="4"] .paper-grid > .paper-card .paper-side-grid{
    margin-top:4px!important;padding-top:0!important;
    grid-auto-rows:52px!important;row-gap:4px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid > *{
    padding:5px 8px!important;min-height:0!important;
  }
  html body .slide[data-index="4"] .terminal pre{
    font-size:.5rem!important;line-height:1.24!important;
  }
}

/* ===== v64：六点位置真正统一 =====
   v63 只统一了 position 仍然分裂，实测根因有两个，都与 position 无关：
   1) 横向 36px 差 → footerbar 的 `padding:0 76px 0 4px` 不对称，dot-nav 作为
      flex 居中项被内边距推着左移 36px（(76-4)/2）。
   2) 纵向 2~4px 差 → 各档 footerbar min-height 不一（30px/34px/auto）。
   结论：不要再去调 footerbar 的 position/padding（那是为避让右下角 PAGE 标签用的），
   而是把 dot-nav 从 flex 流里摘出来，相对 footerbar 绝对居中 + 固定 footerbar 高度。 */
html body .slide .footerbar{
  height:34px!important;
  min-height:34px!important;
  max-height:34px!important;
  align-items:center!important;
}
html body .slide .footerbar .dot-nav{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  padding:0!important;
  gap:9px!important;
  align-items:center!important;
}

/* v64：footerbar 从文档流改回 absolute 后，奖项页(3)/论文页(4) 卡片重新压到页脚。
   实测 1200x700：.award-cluster 首组内容 188px 塞进 102px（裁 74px）。
   收口手段：卡片内边距 + 正文行数钳制（line-clamp 2 行），不动 DOM。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="3"] .awards-board{
    row-gap:6px!important;
  }
  html body .slide[data-index="3"] .award-cluster{
    overflow:hidden!important;
  }
  html body .slide[data-index="3"] .awards-grid{
    gap:6px!important;
    grid-auto-rows:minmax(0,auto)!important;
  }
  html body .slide[data-index="3"] .award-card{
    padding:7px 9px!important;
    min-height:0!important;
  }
  html body .slide[data-index="3"] .award-card h3{
    font-size:.76rem!important;line-height:1.14!important;margin:0 0 2px!important;
  }
  html body .slide[data-index="3"] .award-card p{
    font-size:.55rem!important;line-height:1.2!important;margin:0!important;
    display:-webkit-box!important;-webkit-box-orient:vertical!important;
    -webkit-line-clamp:2!important;overflow:hidden!important;
  }
  html body .slide[data-index="4"] .paper-side-grid{
    margin-top:4px!important;
  }
}

/* ===== v66：六点统一的最终收口（特异度 0,5,3 起）=====
   v65 残余两个真因，都不是 position 本身：
   1) 第 4 页 footerbar 被某条 (0,5,3) 规则钉成 static → dot-nav 的 offsetParent
      逃到 .slide-inner，绝对居中算到了屏幕中部（top≈444）。
   2) 各页 footerbar 高度不一（0/2/5 页 42px，1/3/4 页 34px）→ 以 top:50% 居中
      时纵向差 2~4px。
   对策：用与基础 CSS 同结构的 `.slide[data-index]>.slide-inner>.footerbar`
   把 position/bottom/height 全部钉死，再让 dot-nav 相对它绝对居中。
   勿再用低特异度的 `.slide .footerbar`：会被 (0,5,3) 规则压掉。 */
html body .slide[data-index]>.slide-inner>.footerbar,
html body .slide[data-index].active>.slide-inner>.footerbar{
  position:absolute!important;
  left:0!important;
  right:0!important;
  bottom:24px!important;
  top:auto!important;
  height:34px!important;
  min-height:34px!important;
  max-height:34px!important;
  z-index:20!important;
  align-items:center!important;
}
html body .slide[data-index]>.slide-inner>.footerbar>.dot-nav,
html body .slide[data-index].active>.slide-inner>.footerbar>.dot-nav{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  right:auto!important;
  bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  padding:0!important;
  gap:9px!important;
  align-items:center!important;
}

/* v66：论文页右侧 .paper-side-grid 几何越过页脚线。它是 margin-top:auto 贴卡底，
   所以加大卡片 padding-bottom 才能把它上推（收 margin 无效——已试过）。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="4"] .paper-grid>.paper-card{
    padding-bottom:96px!important;
  }
}
@media (min-width:901px) and (max-height:740px){
  html body .slide[data-index="4"] .paper-grid>.paper-card{
    padding-bottom:112px!important;
  }
}

/* ===== v69：六点统一的最后两处 =====
   1) dot 按钮实测三种尺寸（10.8 / 11 / 7.9px），源于各页字号继承差异 →
      钉死 11px，纵向 1.5px 差随之消失。
   2) footerbar 是 absolute（脱离流），slide-inner 的 grid 只剩 2 行，1fr 内容区
      会一直长到 padding-bottom 边界并压住页脚。desktop 下需留出
      24(bottom) + 34(footerbar) + 12(呼吸) = 70px。
      注意：第 4 页的 padding-bottom 由 applyPaperSafeLayout() 内联 !important 设定，
      CSS 改不动，已同步把该函数里的 26px/22px 改成 70px/66px。 */
@media (min-width:901px){
  html body .slide[data-index]>.slide-inner{
    padding-bottom:70px!important;
  }
  html body .slide[data-index]>.slide-inner>.footerbar>.dot-nav>button,
  html body .slide[data-index]>.slide-inner>.footerbar .dot-nav button{
    box-sizing:border-box!important;
    width:11px!important;
    height:11px!important;
    min-width:11px!important;
    min-height:11px!important;
    flex:0 0 11px!important;
    padding:0!important;
    margin:0!important;
    line-height:0!important;
    font-size:0!important;
  }
}
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index]>.slide-inner{
    padding-bottom:66px!important;
  }
}

/* ===== v70 收尾覆盖块（必须留在文件最末，同特异度后写者胜）===== */

/* 论文页矮屏：v66 给 .paper-card 加 96/112px padding-bottom 想把 side-grid 上推，
   实测反效果 —— 卡内容总高超出卡体，裁掉 187px。真因是 side-grid 用 margin-top:auto
   贴卡底，卡体高度又被 grid 拉满。改为固定小间距 + 压缩 side-grid 行高。
   勿再加大 padding-bottom：已两次证明会加剧卡内裁切。 */
@media (min-width:901px) and (max-height:780px){
  html body .slide[data-index="4"] .paper-grid>.paper-card{
    padding:16px!important;
    padding-bottom:16px!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card .paper-side-grid{
    margin-top:10px!important;
    padding-top:0!important;
    grid-auto-rows:auto!important;
    gap:8px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid>.card{
    padding:8px 10px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid>.card h3,
  html body .slide[data-index="4"] .paper-side-grid>.card strong{
    font-size:.8rem!important;
    line-height:1.25!important;
    margin-bottom:3px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid>.card p{
    font-size:.7rem!important;
    line-height:1.3!important;
    display:-webkit-box!important;
    -webkit-line-clamp:2!important;
    -webkit-box-orient:vertical!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="4"] .terminal pre{
    font-size:.68rem!important;
    line-height:1.34!important;
  }
}

/* 首页 1024x768：右下角操作按钮行越过页脚 65px。收按钮高度与行距。 */
@media (min-width:901px) and (max-width:1120px) and (max-height:800px){
  html body .slide[data-index="1"] .ulh-actions{
    gap:6px!important;
    margin-top:8px!important;
    flex-wrap:wrap!important;
  }
  html body .slide[data-index="1"] .ulh-actions .ulh-btn,
  html body .slide[data-index="1"] .ulh-actions>a,
  html body .slide[data-index="1"] .ulh-actions>button{
    height:30px!important;
    min-height:30px!important;
    max-height:30px!important;
    padding:0 10px!important;
    font-size:.72rem!important;
    border-radius:11px!important;
  }
  html body .slide[data-index="1"] .ulh-card{
    padding:12px!important;
    gap:8px!important;
  }
}

/* ===== v71 收尾覆盖块（文件末尾，胜过前面所有同特异度规则）===== */

/* 论文页矮屏：真正卡住的是 .paper-side-grid 的 `flex:1 0 196px; min-height:186px`
   （见前文 ~794 行那一档）。行高 auto 改不动它 —— flex-basis 196px 会强撑。
   这里直接解除 flex-basis 与 min-height，让它随内容收缩。 */
@media (min-width:901px) and (max-height:800px){
  html body .slide[data-index="4"] .paper-side-grid{
    flex:0 0 auto!important;
    min-height:0!important;
    height:auto!important;
    grid-template-rows:auto auto!important;
  }
  html body .slide[data-index="4"] .paper-side-grid>.card{
    min-height:0!important;
    height:auto!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card{
    justify-content:flex-start!important;
    gap:8px!important;
  }
}

/* 首页 1024x768：.ulh-actions 换行成 2 排（h72）才越界。按钮收窄并禁止换行。 */
@media (min-width:901px) and (max-width:1120px){
  html body .slide[data-index="1"] .ulh-actions{
    flex-wrap:nowrap!important;
    gap:5px!important;
    margin-top:6px!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="1"] .ulh-actions>a,
  html body .slide[data-index="1"] .ulh-actions>button{
    flex:0 1 auto!important;
    min-width:0!important;
    padding:0 8px!important;
    font-size:.68rem!important;
    white-space:nowrap!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
  }
}

/* ===== v72：分页点选中态 =====
   实测选中点 background 计算值是 rgba(0,0,0,0)（比未选中的 rgba(255,255,255,.06)
   还淡），当前页指示完全失效。改为实色短横条，深浅主题各给一套。
   注意：v69 把点钉成 11x11 且 flex:0 0 11px，选中态要拉宽必须同时覆盖 flex-basis
   与 max-width，否则宽度纹丝不动。 */
@media (min-width:901px){
  html body .slide[data-index]>.slide-inner>.footerbar .dot-nav button{
    transition:width .26s ease,background .26s ease,box-shadow .26s ease!important;
  }
  html body .slide[data-index]>.slide-inner>.footerbar .dot-nav button.active{
    width:26px!important;
    min-width:26px!important;
    max-width:26px!important;
    flex:0 0 26px!important;
    border-radius:999px!important;
    background:linear-gradient(90deg,var(--cyan,#62d9ee),var(--violet,#9578f0))!important;
    border-color:transparent!important;
    box-shadow:0 0 14px rgba(98,217,238,.45)!important;
  }
  html[data-theme="light"] body .slide[data-index]>.slide-inner>.footerbar .dot-nav button.active{
    background:linear-gradient(90deg,#2563eb,#7c3aed)!important;
    box-shadow:0 0 12px rgba(37,99,235,.35)!important;
  }
  html body .slide[data-index]>.slide-inner>.footerbar .dot-nav button:not(.active){
    background:rgba(255,255,255,.14)!important;
    border-color:rgba(126,245,255,.30)!important;
  }
  html[data-theme="light"] body .slide[data-index]>.slide-inner>.footerbar .dot-nav button:not(.active){
    background:rgba(37,99,235,.16)!important;
    border-color:rgba(37,99,235,.30)!important;
  }
}

/* ===== v73：论文页左卡矮屏裁切（vision 发现，几何探针漏报因阈值 30px）=====
   实测 1200x700：卡体 373px，内容 413px，超 40px，side-grid 底被切 25px。
   构成：section-title 44 + hero-text 40 + 摘要卡 104 + side-grid 139，
   加 gap 18/8/28 与上下 padding 32。这里从 gap 与文字行数两头收，
   不动卡体高度（卡体由 grid 轨道决定，夹高只会让内部继续溢出）。 */
@media (min-width:901px) and (max-height:800px){
  html body .slide[data-index="4"] .paper-grid>.paper-card{
    gap:6px!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card>.section-title{
    font-size:1.16rem!important;
    line-height:1.28!important;
    margin:0!important;
  }
  html body .slide[data-index="4"] .paper-hero-text{
    font-size:.74rem!important;
    line-height:1.34!important;
    display:-webkit-box!important;
    -webkit-line-clamp:2!important;
    -webkit-box-orient:vertical!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card>.card{
    min-height:0!important;
    padding:9px 11px!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card>.card p{
    font-size:.72rem!important;
    line-height:1.34!important;
    display:-webkit-box!important;
    -webkit-line-clamp:3!important;
    -webkit-box-orient:vertical!important;
    overflow:hidden!important;
  }
  html body .slide[data-index="4"] .paper-grid>.paper-card .paper-side-grid{
    margin-top:4px!important;
    gap:6px!important;
  }
  html body .slide[data-index="4"] .paper-side-grid>.card p{
    -webkit-line-clamp:2!important;
  }
}

/* ===== v74：.ulh-actions 收尾 =====
   v71 给它 nowrap + overflow:hidden，结果行高被压到 22px 反而把 30px 的按钮裁掉
   14px。nowrap 这条思路失败两次（先换行越界、后裁切），改为允许换行但把按钮压到
   26px 并收 gap，让两排也能装进容器。勿再用 nowrap + overflow:hidden 组合。 */
@media (min-width:901px) and (max-width:1120px){
  html body .slide[data-index="1"] .ulh-actions{
    flex-wrap:wrap!important;
    overflow:visible!important;
    gap:4px!important;
    row-gap:4px!important;
    margin-top:5px!important;
  }
  html body .slide[data-index="1"] .ulh-actions>a,
  html body .slide[data-index="1"] .ulh-actions>button{
    height:26px!important;
    min-height:26px!important;
    max-height:26px!important;
    padding:0 8px!important;
    font-size:.66rem!important;
    border-radius:9px!important;
  }
}
/* 首页右栏卡在 1200x700 溢出 11px：收内边距与图例行。 */
@media (min-width:901px) and (max-height:720px){
  html body .slide[data-index="1"] .ulh-console{
    padding:11px 12px!important;
    gap:6px!important;
  }
  html body .slide[data-index="1"] .ulh-foot{
    gap:5px!important;
    font-size:.62rem!important;
    line-height:1.2!important;
  }
}

/* ===== v75：.ulh-actions 第三次（也是最后一次）=====
   v74 用 `.ulh-actions>a`（0,3,3）想压到 26px，但 v70 块里的
   `.ulh-actions .ulh-btn`（0,4,2）特异度更高，实测按钮仍是 30px、两排共 70px、
   越过页脚 6px。这里改用同样带 .ulh-btn 的选择器并再加一级，
   压到 24px + gap 3px（两排 51px，省出 19px 余量）。
   教训：本文件内自压全部源于选择器特异度，不是加载顺序。 */
@media (min-width:901px) and (max-width:1120px){
  html body .slide[data-index="1"] .ulh-card .ulh-actions{
    flex-wrap:wrap!important;
    overflow:visible!important;
    gap:3px!important;
    row-gap:3px!important;
    margin-top:4px!important;
  }
  html body .slide[data-index="1"] .ulh-card .ulh-actions .ulh-btn,
  html body .slide[data-index="1"] .ulh-card .ulh-actions>a,
  html body .slide[data-index="1"] .ulh-card .ulh-actions>button{
    height:24px!important;
    min-height:24px!important;
    max-height:24px!important;
    padding:0 7px!important;
    font-size:.63rem!important;
    border-radius:8px!important;
    line-height:24px!important;
  }
}

/* ===== v78：停用旧的圆形高亮跟随，改用 JS 顶层 canvas 流星 =====
   .cursor-glow 是 z-index:1 的 DOM 元素，浅色主题卡背景近乎不透明白
   （rgba(255,255,255,.98)，z-index:3）会把它整块盖住 —— 这才是"浅色下
   鼠标跟随消失"的真因，调 opacity 无解。流星见 JS 里的 meteorCursor()。
   勿再给 .cursor-glow 加 opacity/z-index 试图救活它。 */
html body .cursor-glow,
html body .mouse-blur{display:none!important;}
html body canvas#cursorTrail{
  position:fixed!important;
  inset:0!important;
  pointer-events:none!important;
  z-index:93!important;  /* v82：回到卡片之上，靠 JS 文本避让保证不压字 */
  mix-blend-mode:normal!important;
}

/* ===== v85：首页服务格子间距与内边距收口（vision 实测反馈）=====
   问题：列间距仅 10px，小于卡片圆角 18px，两列几乎贴在一起，10 个格子
   读起来像表格行而非独立卡片；格内上下 padding 9px 承载 28px 图标 + 两行
   文字偏紧，站点名与域名行距也挤。
   处理：列间距 10->18px（纯横向，不影响已验收的纵向几何）；
        站点名/域名之间给 3px 行距；徽章设 min-width 让左缘对齐。
   注意：格高保持 56px、行距保持 9px —— 纵向几何已在 7 档位全部验收过
   （ALL_OK），勿改动，否则页脚遮挡会回归。 */
@media (min-width:901px){
  html body .slide[data-index="1"] .ulh-grid{
    /* v86：列间距 18->26px。18px 时与行距 9px 之比不够，vision 判定
       每行仍被读成"一条表格行 + 中间一道竖缝"而非两张独立卡片；
       列距需明显大于行距才能翻转分组关系。纯横向改动，不影响纵向几何。 */
    gap:9px 26px!important;
  }
  html body .slide[data-index="1"] .ulh-svc{
    padding:9px 12px!important;
    column-gap:9px!important;
  }
  /* 站点名与域名之间加一点呼吸，不增加总高（56px 内消化） */
  html body .slide[data-index="1"] .ulh-svc-label{
    line-height:1.16!important;
  }
  html body .slide[data-index="1"] .ulh-svc-host,
  html body .slide[data-index="1"] .ulh-svc small{
    margin-top:3px!important;
    line-height:1.1!important;
  }
  /* 徽章左缘对齐：PUBLIC 比 GATED 宽会导致起始位置来回跳 */
  html body .slide[data-index="1"] .ulh-svc .ulh-tag,
  html body .slide[data-index="1"] .ulh-svc .tone-tag,
  html body .slide[data-index="1"] .ulh-svc>:last-child{
    min-width:54px!important;
    text-align:center!important;
    justify-content:center!important;
  }
}

/* ===== v87：页脚文字收口 =====
   左下角提示文字（"点击卡片进入页面"/"重点项目放大"等）隐藏——
   纯说明性噪声，每页不同且信息价值低。
   右下角 .page-no 保留但改成代码标签风格：等宽字体、缩小、加字间距、降透明度。
   注意：基础 CSS 有多条高特异度规则覆盖 footerbar，需用完整链路压过。 */
html body .slide[data-index] > .slide-inner > .footerbar > span:not(.page-no){
  /* 左下提示文字：直接隐藏 */
  opacity:0!important;
  pointer-events:none!important;
}
html body .slide[data-index] > .slide-inner > .footerbar .page-no{
  /* v89：右下页码按用户要求删除（v87/v88 的代码标签风格已作废）。
     用 display:none 而非 opacity:0，避免仍占 flex 空间影响六点居中。 */
  display:none!important;
}


/* ===== v89：鼠标动效与背景动效重做 =====
   旧 v78-v84 流星拖尾 canvas 停用（#cursorTrail 由 JS 侧不再创建）。
   新方案见内联 JS 的 v89 段：磁场透镜（cursor）+ 流场数据河（background）。 */
#cursorTrail{display:none!important;}

/* ===== v90：背景 canvas 不透明度收口（关键修复）=====
   根因：overlay 里历史遗留了 6+ 处 #bgCanvas opacity 覆盖（.24/.30/.36/.42/.46/.72/.86），
   canvas 内部把粒子 alpha 提到 0.95 后，整层还要再乘 0.24 —— 实际只剩 ~0.23，
   这就是用户实测"肉眼根本看不到"的真因（不是 canvas 里的绘制参数不够）。
   这里用最高特异度钉死两主题，并统一混合模式：
   - 深色：screen（发光叠加，与 canvas 内 lighter 一致）
   - 浅色：normal（multiply 会把亮色粒子压没；normal 才保留 canvas 自身的深色墨）
   勿再在上方新增 #bgCanvas opacity 规则 —— 会被这块压过，改这里。 */
html body #bgCanvas,
html body.desktop-fx #bgCanvas,
html[data-theme="dark"] body #bgCanvas,
html[data-theme="dark"] body.desktop-fx #bgCanvas{
  opacity:1!important;
  mix-blend-mode:screen!important;
  filter:saturate(1.25) contrast(1.14) brightness(1.12)!important;
}
html[data-theme="light"] body #bgCanvas,
html[data-theme="light"] body.desktop-fx #bgCanvas{
  opacity:1!important;
  mix-blend-mode:normal!important;
  filter:saturate(1.22) contrast(1.16)!important;
}

/* ===== v91：解除背景动效被 backdrop-filter 糊掉（真凶）=====
   诊断：v90 把 #bgCanvas opacity 提到 1 后 vision 仍判"看不清、像光雾散景"。
   祖先链实测全部 background:transparent，唯一可疑项是
   .slide{backdrop-filter:blur(8px) saturate(1.1)} —— 它对"身后所有内容"做高斯模糊，
   bgCanvas 的细光丝穿过 8px blur 后就变成了弥散光斑，这才是"有亮度但没有丝"的原因。
   处理：卡片自身没有半透明底色（实测 rgba(0,0,0,0)），这层 blur 不承担玻璃拟态，
   纯属遗留，直接去掉，光丝即恢复锐利。
   同时把深色主题 canvas 的 mix-blend-mode 从 screen 改 normal：
   canvas 内部已经用 'lighter' 做加色发光，外层再 screen 一次会压缩高光动态范围。 */
html body .slide,
html body .slide.active,
html body .deck .slide{
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}
html body #bgCanvas,
html body.desktop-fx #bgCanvas,
html[data-theme="dark"] body #bgCanvas,
html[data-theme="dark"] body.desktop-fx #bgCanvas{
  mix-blend-mode:normal!important;
  filter:saturate(1.2) contrast(1.1) brightness(1.06)!important;
}

/* ===== v92：彻底解除面板对背景动效的遮挡（两层真凶）=====
   诊断链（v90 opacity 拉满、v91 提亮后 vision 仍判"看不清、像光雾"）：
   ① overlay 第 901-904 行 html[data-theme="dark"] body.desktop-fx .slide{
        backdrop-filter:blur(8px)} —— 特异度高于 v91 的写法，深色主题下仍在生效，
      把身后细光丝高斯模糊成弥散光斑（"有亮度但没有丝"的直接原因）。
   ② .slide 自身有半透明渐变底色（基础 CSS 第 33 行 + overlay 第 907 行），
      深色 --surface 档位仍会吃掉大部分对比度。
   处理：两主题都彻底去 backdrop-filter；.slide 底色降到很轻的一档，
   靠 border + box-shadow 维持面板边界，靠正文自身对比度保证可读。
   勿再在上方加 .slide backdrop-filter —— 会被这块压过，直接改这里。 */
html body .slide,
html body.desktop-fx .slide,
html[data-theme="dark"] body .slide,
html[data-theme="dark"] body.desktop-fx .slide,
html[data-theme="light"] body .slide,
html[data-theme="light"] body.desktop-fx .slide{
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}
html[data-theme="dark"] body .slide,
html[data-theme="dark"] body.desktop-fx .slide{
  /* 深色：底色降到 .30/.22，光丝可穿透，正文仍在深底上高对比 */
  background:linear-gradient(180deg,rgba(12,18,38,.30),rgba(10,15,32,.22)),
             linear-gradient(160deg,rgba(14,20,42,.34),rgba(9,14,30,.26))!important;
}
html[data-theme="light"] body .slide,
html[data-theme="light"] body.desktop-fx .slide{
  /* 浅色：从 .44/.34 降到 .30/.22，同理 */
  background:linear-gradient(180deg,rgba(255,255,255,.30),rgba(255,255,255,.22)),
             linear-gradient(160deg,rgba(255,255,255,.34),rgba(246,249,255,.26))!important;
}

/* ===== v93：面板底色回调（v92 降过头）=====
   v92 把 .slide 底色降到 .30/.22 以放行光丝，配合当时 alpha 0.88~0.95 的粒子
   导致 vision 判"特效压在 UI 之上、过曝冲掉正文对比度"。
   粒子侧已在 JS 里回落（数量 150->52、alpha 0.88->0.36、去 shadowBlur），
   面板侧回到 .52/.44 —— 既让光丝透出可感知，又给正文足够衬底。
   这是三方平衡：面板底色 / 粒子 alpha / 粒子数量，改一项要同时看另两项。 */
html[data-theme="dark"] body .slide,
html[data-theme="dark"] body.desktop-fx .slide{
  background:linear-gradient(180deg,rgba(12,18,38,.52),rgba(10,15,32,.44)),
             linear-gradient(160deg,rgba(14,20,42,.56),rgba(9,14,30,.48))!important;
}
html[data-theme="light"] body .slide,
html[data-theme="light"] body.desktop-fx .slide{
  background:linear-gradient(180deg,rgba(255,255,255,.52),rgba(255,255,255,.44)),
             linear-gradient(160deg,rgba(255,255,255,.56),rgba(246,249,255,.48))!important;
}

/* ===== v94：卡片内部斜纹压淡 =====
   vision 反馈：01/02/04 卡片右上的斜纹 + 网格纹理与背景光丝抢注意力，
   在留白区形成噪点。光丝是本轮主角，卡片纹理让位。 */
html body .slide .menu-card::before,
html body .slide .menu-card::after,
html body .slide .card::before,
html body .slide .card::after{
  opacity:.34!important;
}

/* ===== v102/v103：390px 移动端 .menu-grid 溢出 89px 收口 =====
   诊断（用 CSSOM 枚举命中规则 + matches() 实测）：
   ① 真凶是基础 CSS 在 (max-width:900px) 下给 .menu-grid 写了
      padding-bottom:96px!important（另有 30px/90px 两条同族规则），
      96px 底部内边距直接造成 ~89px 溢出。不是卡片高度之和的问题。
   ② 我上一版 (max-width:430px) 的 gap:7px 确实命中，但 overlay 内更靠后的
      (max-width:900px){gap:15px} 又盖回去了 —— 同 !important 时后写的胜。
   ③ 卡片规则 .menu-grid .menu-card 实测 matches:false；基础 CSS 一律用
      直接子选择器 > article.menu-card，改卡片必须用同一形态。
   处理：把 padding-bottom 收到 26px（保留避开 footerbar 的最小量），
   并把本块放在文件末尾确保顺序最后。
   勿再用 .menu-grid .menu-card 后代形态写移动端卡片规则。 */
@media (max-width:900px){
  html body .slide .menu-grid,
  html body .slide[data-index="0"] .menu-grid,
  html body section.slide[data-index="0"].active .menu-grid{
    padding-bottom:26px!important;
    height:auto!important;
    max-height:none!important;
    min-height:0!important;
    align-content:start!important;
  }
}
@media (max-width:430px){
  html body .slide .menu-grid,
  html body .slide[data-index="0"] .menu-grid,
  html body section.slide[data-index="0"].active .menu-grid{
    gap:8px!important;
    padding-bottom:22px!important;
  }
  html body .slide .menu-grid > article.menu-card,
  html body .slide[data-index="0"] .menu-grid > article.menu-card,
  html body section.slide[data-index="0"].active .menu-grid > article.menu-card{
    padding:10px 12px!important;
    min-height:0!important;
    border-radius:14px!important;
  }
  html body .slide .menu-grid > article.menu-card > .card-head{
    gap:7px!important;
    margin-bottom:3px!important;
  }
  html body .slide .menu-grid > article.menu-card p{
    margin:2px 0 4px!important;
    font-size:11.5px!important;
    line-height:1.44!important;
  }
  html body .slide .menu-grid > article.menu-card > .menu-card-meta{
    margin-top:4px!important;
    padding-top:5px!important;
    font-size:10.5px!important;
  }
}

/* ===== v104（已回退）：390px 移动端 .menu-grid 溢出 =====
   本轮用户要求只有三项：删除右下页码、重做鼠标动效、重做背景动效 —— 均已完成。
   移动端 86~150px 溢出是本轮之前就存在的历史遗留问题，不在本次范围内。
   三次尝试（调 gap / 砍 padding-bottom / slide-inner 改 flex+可滚动）都未解决，
   且 flex 方案因 .menu-grid 并非 .slide-inner 的直接子元素而选择器失配，
   为避免在非本轮范围内引入回归，此处整块回退，保持桌面端已验证的状态。
   下次要修需先用 DOM 链实测确认 .menu-grid 的真实父级再选选择器形态。 */

/* ===== v107：顶层 aurora/comet canvas 保护 =====
   动效改为 z:92/94 顶层 canvas 后，历史那些针对 #bgCanvas 的 opacity 拉满、
   以及强行 backdrop-filter:none / mix-blend-mode:normal 的修复都不再需要
   （bgCanvas 现在只刷纯色底）。这里把 .slide 的 blur 还回去，恢复原本的
   毛玻璃质感，同时确保新 canvas 不被任何规则干扰。 */
#auroraCanvas,#cometCanvas{
  position:fixed!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  pointer-events:none!important;
  opacity:1!important;
  filter:none!important;
  transform:none!important;
}
/* v109：aurora 的 mix-blend-mode 由 JS 按主题切换（深色 screen / 浅色 multiply），
   这里绝不能锁 normal，否则白底染不上色、暗底加不亮。
   comet 保持 normal（自身已足够亮，混色会失真）。 */
#cometCanvas{mix-blend-mode:normal!important;}
#auroraCanvas{z-index:2!important;}
#cometCanvas{z-index:94!important;}

/* ===== v126：成熟 Mesh Gradient 视觉收口 =====
   PCB 与卡片内“科技纹理”已弃用。全局色场负责氛围，卡片只承载信息。
   这是独立末尾覆盖块：回滚时删除本块即可，不碰已验收的布局几何。 */
html body .circuit-overlay{display:none!important;content:none!important;opacity:0!important;}
html body .slide.active::before,
html[data-theme="light"] body .slide.active::before{
  content:none!important;display:none!important;opacity:0!important;animation:none!important;background:none!important;
}

/* 卡片取消重复网格、斜向光带、局部径向光球。 */
html body .slide .menu-card::before,
html body .slide .menu-card::after,
html body .slide .project-card::before,
html body .slide .project-card::after,
html body .slide .award-card::before,
html body .slide .award-card::after,
html body .slide .paper-card::before,
html body .slide .ability-card::before,
html body .slide .ability-card::after,
html body .slide .card::before,
html body .slide .stat::before,
html body .slide .stat::after{
  content:none!important;display:none!important;opacity:0!important;background:none!important;
}

/* 深色：单层墨蓝玻璃，允许同一个 Mesh 环境色轻微透过。 */
html body .menu-card,
html body .project-card,
html body .award-card,
html body .paper-card,
html body .ability-card,
html body .card,
html body .stat,
html body .ulh-card,
html body .ulh-svc{
  background:linear-gradient(145deg,rgba(13,22,46,.68),rgba(8,15,34,.56))!important;
  border-color:rgba(126,171,238,.16)!important;
  box-shadow:0 16px 38px rgba(0,4,18,.18),inset 0 1px 0 rgba(255,255,255,.055)!important;
  backdrop-filter:blur(13px) saturate(1.06)!important;
  -webkit-backdrop-filter:blur(13px) saturate(1.06)!important;
}
html body .menu-card.guide-entry-card{
  background:linear-gradient(145deg,rgba(19,34,68,.72),rgba(18,22,52,.60))!important;
  border-color:rgba(112,157,230,.24)!important;
}

/* 浅色：不是不透明白卡；轻微透出统一色场但正文区域保持中性。 */
html[data-theme="light"] body .menu-card,
html[data-theme="light"] body .project-card,
html[data-theme="light"] body .award-card,
html[data-theme="light"] body .paper-card,
html[data-theme="light"] body .ability-card,
html[data-theme="light"] body .card,
html[data-theme="light"] body .stat,
html[data-theme="light"] body .ulh-card,
html[data-theme="light"] body .ulh-svc{
  background:linear-gradient(145deg,rgba(255,255,255,.78),rgba(244,248,255,.66))!important;
  border-color:rgba(71,111,182,.16)!important;
  box-shadow:0 14px 34px rgba(55,83,137,.09),inset 0 1px 0 rgba(255,255,255,.78)!important;
  backdrop-filter:blur(14px) saturate(1.04)!important;
  -webkit-backdrop-filter:blur(14px) saturate(1.04)!important;
}
html[data-theme="light"] body .menu-card.guide-entry-card{
  background:linear-gradient(145deg,rgba(247,251,255,.82),rgba(238,241,255,.72))!important;
  border-color:rgba(78,100,184,.22)!important;
}

/* 统一强调色，不再给 AI Web 单独洋红轮廓。 */
html body .menu-card.guide-entry-card,
html body .menu-card.guide-entry-card:hover{
  box-shadow:0 18px 42px rgba(20,42,90,.18),inset 0 1px 0 rgba(255,255,255,.075)!important;
}

/* 全局 Mesh canvas 自己处理主题，不再套历史 screen/multiply 滤镜。 */
html body #auroraCanvas,
html[data-theme="light"] body #auroraCanvas{
  opacity:1!important;filter:none!important;mix-blend-mode:normal!important;
}

@media (prefers-reduced-motion:reduce){
  html body #auroraCanvas{display:block!important;}
}
/* v127：压过历史 nth-child / guide-entry-card 高特异度卡片纹理。 */
html[data-theme] body .slide[data-index] .menu-grid>article.menu-card,
html[data-theme] body .slide[data-index] .project-card,
html[data-theme] body .slide[data-index] .award-card,
html[data-theme] body .slide[data-index] .paper-card,
html[data-theme] body .slide[data-index] .ability-card,
html[data-theme] body .slide[data-index] .card,
html[data-theme] body .slide[data-index] .stat{
  background:linear-gradient(145deg,rgba(13,22,46,.68),rgba(8,15,34,.56))!important;
  border-color:rgba(126,171,238,.16)!important;
  box-shadow:0 16px 38px rgba(0,4,18,.18),inset 0 1px 0 rgba(255,255,255,.055)!important;
  backdrop-filter:blur(13px) saturate(1.06)!important;
}
html[data-theme="light"] body .slide[data-index] .menu-grid>article.menu-card,
html[data-theme="light"] body .slide[data-index] .project-card,
html[data-theme="light"] body .slide[data-index] .award-card,
html[data-theme="light"] body .slide[data-index] .paper-card,
html[data-theme="light"] body .slide[data-index] .ability-card,
html[data-theme="light"] body .slide[data-index] .card,
html[data-theme="light"] body .slide[data-index] .stat{
  background:linear-gradient(145deg,rgba(255,255,255,.78),rgba(244,248,255,.66))!important;
  border-color:rgba(71,111,182,.16)!important;
  box-shadow:0 14px 34px rgba(55,83,137,.09),inset 0 1px 0 rgba(255,255,255,.78)!important;
}
html[data-theme] body .slide[data-index] .menu-card::before,
html[data-theme] body .slide[data-index] .menu-card::after,
html[data-theme] body .slide[data-index] .project-card::before,
html[data-theme] body .slide[data-index] .project-card::after,
html[data-theme] body .slide[data-index] .award-card::before,
html[data-theme] body .slide[data-index] .award-card::after,
html[data-theme] body .slide[data-index] .paper-card::before,
html[data-theme] body .slide[data-index] .ability-card::before,
html[data-theme] body .slide[data-index] .ability-card::after,
html[data-theme] body .slide[data-index] .card::before,
html[data-theme] body .slide[data-index] .stat::before,
html[data-theme] body .slide[data-index] .stat::after{
  content:none!important;display:none!important;opacity:0!important;background:none!important;
}
/* v128：以原规则同等/更高特异度关闭目录旧网格和斜光，避免触碰压缩主 CSS。 */
html body .slide[data-index="0"] .menu-card::before,
html body .slide[data-index="0"] .menu-card::after,
html[data-theme="dark"] body .slide[data-index="0"] .menu-card::before,
html[data-theme="dark"] body .slide[data-index="0"] .menu-card::after,
html[data-theme="light"] body .slide[data-index="0"] .menu-card::before,
html[data-theme="light"] body .slide[data-index="0"] .menu-card::after{
  content:none!important;display:none!important;opacity:0!important;
  background:none!important;background-image:none!important;box-shadow:none!important;
}
html[data-theme="light"] body .slide[data-index="0"] .menu-grid>article.menu-card,
html[data-theme="light"] body .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n),
html[data-theme="light"] body .slide[data-index="0"] .menu-grid>article.menu-card.guide-entry-card{
  background:linear-gradient(145deg,rgba(255,255,255,.78),rgba(244,248,255,.66))!important;
  border-color:rgba(71,111,182,.16)!important;
  box-shadow:0 14px 34px rgba(55,83,137,.09),inset 0 1px 0 rgba(255,255,255,.78)!important;
}
/* v129：ID 级结构选择器最终清除主 Deck 卡片的历史伪元素纹理。 */
html body #welcome~.deck .slide[data-index="0"] .menu-card::before,
html body #welcome~.deck .slide[data-index="0"] .menu-card::after{
  content:none!important;display:none!important;visibility:hidden!important;opacity:0!important;
  width:0!important;height:0!important;background:none!important;background-image:none!important;
}
/* v130：浅色只保留 Mesh 背景；关闭旧全局工程网格、径向光球与冗余 bgCanvas。 */
html[data-theme="light"] body.desktop-fx::before,
html[data-theme="light"] body.desktop-fx::after,
html[data-theme="light"] body::before,
html[data-theme="light"] body::after{
  content:none!important;display:none!important;opacity:0!important;background:none!important;animation:none!important;
}
html[data-theme="light"] body #bgCanvas{display:none!important;opacity:0!important;}
/* v131：浅色卡片提高中性遮罩，Mesh 只做跨卡片环境色，不形成卡内重复色带。 */
html[data-theme="light"] body .slide[data-index] .menu-grid>article.menu-card,
html[data-theme="light"] body .slide[data-index] .menu-grid>article.menu-card:nth-child(n),
html[data-theme="light"] body .slide[data-index] .project-card,
html[data-theme="light"] body .slide[data-index] .award-card,
html[data-theme="light"] body .slide[data-index] .paper-card,
html[data-theme="light"] body .slide[data-index] .ability-card,
html[data-theme="light"] body .slide[data-index] .card,
html[data-theme="light"] body .slide[data-index] .stat{
  background:linear-gradient(145deg,rgba(255,255,255,.91),rgba(248,250,255,.86))!important;
  backdrop-filter:blur(16px) saturate(.94)!important;
  -webkit-backdrop-filter:blur(16px) saturate(.94)!important;
}
/* v132：浅色卡片使用单一中性玻璃色，移除 145deg 自身造成的重复斜带。 */
html[data-theme="light"] body .slide[data-index] .menu-grid>article.menu-card,
html[data-theme="light"] body .slide[data-index] .menu-grid>article.menu-card:nth-child(n),
html[data-theme="light"] body .slide[data-index] .project-card,
html[data-theme="light"] body .slide[data-index] .award-card,
html[data-theme="light"] body .slide[data-index] .paper-card,
html[data-theme="light"] body .slide[data-index] .ability-card,
html[data-theme="light"] body .slide[data-index] .card,
html[data-theme="light"] body .slide[data-index] .stat{
  background:rgba(251,253,255,.89)!important;
}


/* v141：深色卡片回到统一中性玻璃，让有机背景成为唯一环境光源。 */
html[data-theme="dark"] body .menu-card,
html[data-theme="dark"] body .guide-entry-card,
html[data-theme="dark"] body .slide .menu-card{
  background:rgba(12,24,54,.76) !important;
  background-image:none !important;
}

/* v142：以 ID 级作用域压过历史奇偶卡、活动页渐变与旧 body Aura。 */
html[data-theme="dark"] body{
  background:#070d20 !important;
  background-image:none !important;
}
html[data-theme="dark"] body #welcome ~ .deck .slide.active{
  background:rgba(8,16,36,.38) !important;
  background-image:none !important;
}
html[data-theme="dark"] body #welcome ~ .deck .slide[data-index="0"] .menu-card,
html[data-theme="dark"] body #welcome ~ .deck .slide[data-index="0"] .guide-entry-card{
  background:rgba(10,22,49,.68) !important;
  background-image:none !important;
}

/* v144：浅色动态流场可见度；关闭旧 Aura，降低目录页白色遮罩。 */
html[data-theme="light"] body{
  background:#edf4ff !important;
  background-image:none !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"].active{
  background:rgba(255,255,255,.24) !important;
  background-image:none !important;
}
/* v157：浅色目录玻璃增强；降低乳白遮罩与模糊，保留清晰边缘。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .menu-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .guide-entry-card{
  background:rgba(250,253,255,.42) !important;
  background-image:none !important;
  border-color:rgba(55,96,168,.29) !important;
  box-shadow:0 14px 34px rgba(55,83,137,.12),inset 0 1px 0 rgba(255,255,255,.94) !important;
  backdrop-filter:blur(3px) saturate(1.12) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.12) !important;
}
/* v158：浅色目录完整玻璃层级，清除标题/元信息/主题控件的高白遮罩。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .slide-head{
  background:linear-gradient(135deg,rgba(250,253,255,.46),rgba(236,245,255,.31)) !important;
  border-color:rgba(55,102,176,.22) !important;
  box-shadow:0 18px 44px rgba(54,83,140,.10),inset 0 1px 0 rgba(255,255,255,.82) !important;
  backdrop-filter:blur(7px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(7px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .menu-card-meta{
  background:linear-gradient(135deg,rgba(224,240,255,.22),rgba(237,226,255,.16)) !important;
  border-color:rgba(58,101,174,.24) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .menu-num{
  background:linear-gradient(135deg,rgba(218,237,255,.38),rgba(235,221,255,.30)) !important;
  border-color:rgba(51,96,170,.28) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .top-theme{
  background:rgba(244,250,255,.34) !important;
  border-color:rgba(50,96,169,.27) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.82) !important;
  backdrop-filter:blur(4px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(4px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .top-theme button:not(.active){
  background:rgba(247,252,255,.22) !important;
}

/* v160：浅色六页统一多层玻璃。按页面结构分别收口，避免通配符破坏嵌套层级。 */
html[data-theme="light"] body #welcome ~ .deck .slide .top-theme{
  background:rgba(244,250,255,.34) !important;
  border-color:rgba(50,96,169,.27) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.82) !important;
  backdrop-filter:blur(4px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(4px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide .top-theme button:not(.active){
  background:rgba(247,252,255,.22) !important;
}

/* 首页：左右两块主玻璃 + 服务入口次级玻璃。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-card{
  background:linear-gradient(145deg,rgba(250,253,255,.46),rgba(234,244,255,.34)) !important;
  border-color:rgba(55,96,168,.28) !important;
  box-shadow:0 18px 44px rgba(55,83,137,.12),inset 0 1px 0 rgba(255,255,255,.90) !important;
  backdrop-filter:blur(6px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(6px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-svc{
  background:linear-gradient(145deg,rgba(226,241,255,.28),rgba(239,229,255,.18)) !important;
  border-color:rgba(58,101,174,.24) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72) !important;
  backdrop-filter:blur(3px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.08) !important;
}

/* 项目：特色卡与普通卡使用同一透明材质，尺寸负责层级。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="2"] .project-card{
  background:rgba(250,253,255,.42) !important;
  background-image:none !important;
  border-color:rgba(55,96,168,.29) !important;
  box-shadow:0 14px 34px rgba(55,83,137,.12),inset 0 1px 0 rgba(255,255,255,.92) !important;
  backdrop-filter:blur(3px) saturate(1.12) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.12) !important;
}

/* 奖项：分组容器是远层玻璃，奖项卡是中层玻璃。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-cluster{
  background:linear-gradient(145deg,rgba(238,247,255,.16),rgba(235,228,255,.09)) !important;
  border-color:rgba(55,101,173,.22) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.62) !important;
  backdrop-filter:blur(2px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(2px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-card{
  background:rgba(250,253,255,.42) !important;
  background-image:none !important;
  border-color:rgba(55,96,168,.29) !important;
  box-shadow:0 12px 30px rgba(55,83,137,.11),inset 0 1px 0 rgba(255,255,255,.92) !important;
  backdrop-filter:blur(3px) saturate(1.12) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.12) !important;
}

/* 论文：论文主卡、中右终端、统计/方法卡分三级透明度。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .paper-card{
  background:rgba(250,253,255,.42) !important;
  background-image:none !important;
  border-color:rgba(55,96,168,.29) !important;
  box-shadow:0 16px 38px rgba(55,83,137,.12),inset 0 1px 0 rgba(255,255,255,.92) !important;
  backdrop-filter:blur(4px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(4px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .terminal{
  background:linear-gradient(145deg,rgba(245,251,255,.38),rgba(230,240,255,.27)) !important;
  border-color:rgba(47,89,196,.28) !important;
  box-shadow:0 12px 30px rgba(55,83,137,.10),inset 0 1px 0 rgba(255,255,255,.82) !important;
  backdrop-filter:blur(5px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(5px) saturate(1.08) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .stat{
  background:rgba(247,252,255,.34) !important;
  background-image:none !important;
  border-color:rgba(58,101,174,.24) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.76) !important;
  backdrop-filter:blur(3px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.08) !important;
}

/* 能力：六张能力卡与目录页一致，标签保留更轻的内层。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-card{
  background:rgba(250,253,255,.42) !important;
  background-image:none !important;
  border-color:rgba(55,96,168,.29) !important;
  box-shadow:0 14px 34px rgba(55,83,137,.12),inset 0 1px 0 rgba(255,255,255,.92) !important;
  backdrop-filter:blur(3px) saturate(1.12) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.12) !important;
}

/* v161：六页浅色卡片统一为与深色相同的 13px 玻璃介质；白膜降至 28% 以匹配实际透景。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .menu-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="0"] .guide-entry-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="2"] .project-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .paper-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-card{
  background:rgba(248,252,255,.28) !important;
  background-image:none !important;
  border-color:rgba(50,92,164,.28) !important;
  box-shadow:0 16px 38px rgba(55,83,137,.11),inset 0 1px 0 rgba(255,255,255,.72) !important;
  backdrop-filter:blur(13px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(13px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-card{
  background:linear-gradient(145deg,rgba(248,252,255,.30),rgba(232,243,255,.22)) !important;
  border-color:rgba(50,92,164,.28) !important;
  box-shadow:0 18px 44px rgba(55,83,137,.11),inset 0 1px 0 rgba(255,255,255,.72) !important;
  backdrop-filter:blur(13px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(13px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-svc{
  background:linear-gradient(145deg,rgba(228,242,255,.18),rgba(238,228,255,.12)) !important;
  border-color:rgba(50,92,164,.22) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.60) !important;
  backdrop-filter:blur(7px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(7px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-cluster{
  background:linear-gradient(145deg,rgba(236,247,255,.10),rgba(233,226,255,.06)) !important;
  border-color:rgba(50,92,164,.20) !important;
  backdrop-filter:blur(5px) saturate(1.04) !important;
  -webkit-backdrop-filter:blur(5px) saturate(1.04) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .terminal{
  background:linear-gradient(145deg,rgba(242,250,255,.22),rgba(226,239,255,.16)) !important;
  border-color:rgba(47,89,196,.26) !important;
  backdrop-filter:blur(9px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(9px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .stat{
  background:rgba(245,251,255,.18) !important;
  background-image:none !important;
  border-color:rgba(50,92,164,.22) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.58) !important;
  backdrop-filter:blur(7px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(7px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-idx{
  background:rgba(240,248,255,.26) !important;
  border-color:rgba(50,92,164,.25) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-evidence span{
  background:rgba(235,246,255,.12) !important;
  border-color:rgba(50,92,164,.20) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-card p,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .card p,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .terminal pre{
  color:rgb(46,64,92) !important;
}

/* AI 导览上层鼠标光效：仅提升绘制层，不拦截任何交互。 */
html body #cometCanvas{
  z-index:1000 !important;
  pointer-events:none !important;
}

/* v162：除目录外按面积分级增强透明度；大卡 10-16%，小卡 8-14%。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-card{
  background:linear-gradient(145deg,rgba(246,251,255,.16),rgba(226,240,255,.10)) !important;
  backdrop-filter:blur(7px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(7px) saturate(1.08) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="2"] .project-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .paper-card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-card{
  background:rgba(246,251,255,.12) !important;
  background-image:none !important;
  border-color:rgba(45,86,157,.30) !important;
  box-shadow:0 16px 38px rgba(47,76,132,.12),inset 0 1px 0 rgba(255,255,255,.64) !important;
  backdrop-filter:blur(6px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(6px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"] .ulh-svc,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .card,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .stat{
  background:rgba(236,247,255,.09) !important;
  background-image:none !important;
  border-color:rgba(45,86,157,.23) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.50) !important;
  backdrop-filter:blur(4px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(4px) saturate(1.08) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"] .award-cluster{
  background:linear-gradient(145deg,rgba(228,244,255,.07),rgba(231,222,255,.035)) !important;
  backdrop-filter:blur(3px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .terminal{
  background:linear-gradient(145deg,rgba(236,248,255,.14),rgba(220,236,255,.09)) !important;
  backdrop-filter:blur(6px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(6px) saturate(1.08) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-idx{
  background:rgba(232,245,255,.14) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"] .ability-evidence span{
  background:rgba(226,243,255,.07) !important;
  border-color:rgba(45,86,157,.22) !important;
}

/* AI 导览：与页面一致的多层玻璃，浅色与深色分别保留对比。 */
html[data-theme="light"] body #guidePanel{
  background-color:rgba(239,248,255,.05) !important;
  background-image:linear-gradient(145deg,rgba(246,251,255,.11),rgba(226,239,255,.07)) !important;
  border-color:rgba(45,86,157,.30) !important;
  box-shadow:0 24px 62px rgba(47,76,132,.18),inset 0 1px 0 rgba(255,255,255,.68) !important;
  backdrop-filter:blur(10px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(10px) saturate(1.10) !important;
}
html[data-theme="light"] body #guidePanel .ai-head{
  background:linear-gradient(135deg,rgba(213,241,255,.14),rgba(229,220,255,.09)) !important;
  border-bottom-color:rgba(45,86,157,.23) !important;
}
html[data-theme="light"] body #guidePanel .msg,
html[data-theme="light"] body #guidePanel .chat-input,
html[data-theme="light"] body #guidePanel .mini-btn,
html[data-theme="light"] body #guidePanel .chat-links a{
  background:rgba(235,247,255,.10) !important;
  border-color:rgba(45,86,157,.24) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.48) !important;
  backdrop-filter:blur(4px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(4px) saturate(1.06) !important;
}
html[data-theme="light"] body #guidePanel .mini-btn.primary{
  background:linear-gradient(118deg,rgba(40,87,173,.82),rgba(104,71,173,.80)) !important;
  color:#fff !important;
}
html[data-theme="dark"] body #guidePanel{
  background:linear-gradient(145deg,rgba(9,18,42,.48),rgba(5,11,28,.38)) !important;
  border-color:rgba(126,171,238,.18) !important;
  box-shadow:0 24px 62px rgba(0,4,18,.32),inset 0 1px 0 rgba(255,255,255,.06) !important;
  backdrop-filter:blur(14px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(14px) saturate(1.08) !important;
}
html[data-theme="dark"] body #guidePanel .ai-head{
  background:linear-gradient(135deg,rgba(126,245,255,.08),rgba(160,135,255,.045)) !important;
}
html[data-theme="dark"] body #guidePanel .msg,
html[data-theme="dark"] body #guidePanel .chat-input,
html[data-theme="dark"] body #guidePanel .mini-btn,
html[data-theme="dark"] body #guidePanel .chat-links a{
  background:rgba(255,255,255,.045) !important;
  border-color:rgba(126,171,238,.16) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.045) !important;
}

/* v164：真正的透景根因——1~5 页父面板取消双层高白遮罩。目录页不动。 */
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="1"].active,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="2"].active,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="3"].active,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"].active,
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="5"].active{
  background-color:rgba(244,250,255,.10) !important;
  background-image:linear-gradient(145deg,rgba(247,252,255,.12),rgba(225,239,255,.07)) !important;
  border-color:rgba(45,86,157,.24) !important;
  box-shadow:0 24px 64px rgba(47,76,132,.11),inset 0 1px 0 rgba(255,255,255,.58) !important;
  backdrop-filter:blur(3px) saturate(1.06) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.06) !important;
}
/* 覆盖站点主样式里的高特异度导览实体背景。 */
html[data-theme="light"] body #guidePanel.ai-panel,
body[data-theme="light"] #guidePanel.ai-panel,
html.light body #guidePanel.ai-panel,
html.theme-light body #guidePanel.ai-panel,
body.light #guidePanel.ai-panel,
body.theme-light #guidePanel.ai-panel{
  background-color:rgba(239,248,255,.05) !important;
  background-image:linear-gradient(145deg,rgba(246,251,255,.11),rgba(226,239,255,.07)) !important;
  border-color:rgba(45,86,157,.30) !important;
  box-shadow:0 24px 62px rgba(47,76,132,.18),inset 0 1px 0 rgba(255,255,255,.68) !important;
  backdrop-filter:blur(10px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(10px) saturate(1.10) !important;
}
html[data-theme="dark"] body #guidePanel.ai-panel{
  background-color:rgba(6,13,31,.38) !important;
  background-image:linear-gradient(145deg,rgba(9,18,42,.48),rgba(5,11,28,.38)) !important;
  border-color:rgba(126,171,238,.18) !important;
  box-shadow:0 24px 62px rgba(0,4,18,.32),inset 0 1px 0 rgba(255,255,255,.06) !important;
}
html[data-theme="light"] body #welcome ~ .deck .slide[data-index="4"] .paper-card::after{
  color:rgba(25,72,134,.88) !important;
  text-shadow:0 1px 0 rgba(255,255,255,.55) !important;
}
html[data-theme="light"] body #guidePanel .ai-head span,
html[data-theme="light"] body #guidePanel .chat-status{
  color:rgb(58,76,105) !important;
}
html[data-theme="light"] body #guidePanel .chat-input::placeholder{
  color:rgba(43,63,94,.76) !important;
  opacity:1 !important;
}
html[data-theme="light"] body #guidePanel .mini-btn:not(.primary),
html[data-theme="light"] body #guidePanel .chat-links a{
  color:rgb(30,60,105) !important;
}

/* v166：底部固定导航与页面统一为通透玻璃。 */
html[data-theme="light"] body.desktop-fx .left-rail,
html[data-theme="light"] body .left-rail,
body[data-theme="light"].desktop-fx .left-rail,
body[data-theme="light"] .left-rail,
html[data-theme="light"] body.desktop-fx .mobile-nav,
html[data-theme="light"] body .mobile-nav,
body[data-theme="light"].desktop-fx .mobile-nav,
body[data-theme="light"] .mobile-nav{
  background:linear-gradient(135deg,rgba(248,252,255,.16),rgba(226,239,255,.09)),rgba(239,248,255,.06) !important;
  border-color:rgba(45,86,157,.27) !important;
  box-shadow:0 18px 48px rgba(47,76,132,.14),inset 0 1px 0 rgba(255,255,255,.64) !important;
  backdrop-filter:blur(10px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(10px) saturate(1.10) !important;
}
html[data-theme="dark"] body .left-rail{
  background-color:rgba(5,12,29,.28) !important;
  background-image:linear-gradient(135deg,rgba(8,17,38,.46),rgba(12,22,44,.34)) !important;
  border-color:rgba(126,171,238,.17) !important;
  box-shadow:0 18px 48px rgba(0,4,18,.30),inset 0 1px 0 rgba(255,255,255,.055) !important;
  backdrop-filter:blur(10px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(10px) saturate(1.08) !important;
}
/* 能力卡成为可访问的页内跳转入口。 */
html body .slide[data-index="5"] .ability-card[data-go]{
  cursor:pointer !important;
}
html body .slide[data-index="5"] .ability-card[data-go]:focus-visible{
  outline:2px solid rgba(98,217,238,.78) !important;
  outline-offset:3px !important;
}
/* 浅色悬停不得继承深色的浅字数字标识。 */
html[data-theme="light"] body .slide[data-index="5"] .ability-card:hover .ability-idx,
html[data-theme="light"] body .slide[data-index="5"] .ability-card:focus-visible .ability-idx{
  color:rgb(24,55,105) !important;
  background:linear-gradient(135deg,rgba(211,239,255,.72),rgba(225,216,255,.62)) !important;
  border-color:rgba(45,86,157,.42) !important;
  box-shadow:0 8px 20px rgba(47,76,132,.14),inset 0 1px 0 rgba(255,255,255,.72) !important;
  text-shadow:none !important;
}

/* v169：开屏明确为 Ready 入口态；只透出抽象 WebGL，不透出后方正文噪声。 */
html body #welcome.welcome{
  background-color:rgba(4,10,25,.24) !important;
  background-image:linear-gradient(145deg,rgba(4,10,24,.24),rgba(7,13,30,.12)) !important;
  backdrop-filter:blur(3px) saturate(1.05) !important;
  -webkit-backdrop-filter:blur(3px) saturate(1.05) !important;
}
html[data-theme="light"] body #welcome.welcome{
  background-color:rgba(235,245,255,.16) !important;
  background-image:linear-gradient(145deg,rgba(248,252,255,.15),rgba(224,238,255,.08)) !important;
}
html body #welcome .welcome-box{
  width:min(760px,calc(100vw - 32px)) !important;
  padding:38px 42px 36px !important;
  border-radius:30px !important;
  background-color:rgba(7,15,36,.14) !important;
  background-image:linear-gradient(145deg,rgba(12,24,51,.24),rgba(7,15,35,.14)) !important;
  border-color:rgba(126,171,238,.24) !important;
  box-shadow:0 28px 82px rgba(0,4,18,.28),inset 0 1px 0 rgba(255,255,255,.085) !important;
  backdrop-filter:blur(10px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(10px) saturate(1.10) !important;
}
html[data-theme="light"] body #welcome .welcome-box{
  background-color:rgba(239,248,255,.03) !important;
  background-image:linear-gradient(145deg,rgba(249,253,255,.10),rgba(225,239,255,.06)) !important;
  border-color:rgba(45,86,157,.30) !important;
  box-shadow:0 28px 76px rgba(47,76,132,.15),inset 0 1px 0 rgba(255,255,255,.62) !important;
  backdrop-filter:blur(7px) saturate(1.10) !important;
  -webkit-backdrop-filter:blur(7px) saturate(1.10) !important;
}
html body #welcome .title{
  letter-spacing:.045em !important;
  line-height:1.05 !important;
}
html body #welcome .subtitle{
  margin-top:13px !important;
  letter-spacing:.06em !important;
  color:rgba(220,230,247,.82) !important;
}
html body #welcome .lead{
  color:rgba(232,238,250,.90) !important;
}
html[data-theme="light"] body #welcome .subtitle{
  color:rgb(16,27,53) !important;
}
html[data-theme="light"] body #welcome .lead{
  color:rgb(16,27,53) !important;
}
html[data-theme="light"] body #welcome .title{
  color:transparent !important;
  -webkit-text-fill-color:transparent !important;
  background-image:linear-gradient(105deg,#123f8c 0%,#2e68c7 28%,#7047b8 58%,#176f78 82%,#123f8c 108%) !important;
  background-size:180% 100% !important;
  background-position:35% 50% !important;
  background-clip:text !important;
  -webkit-background-clip:text !important;
  text-shadow:0 8px 26px rgba(50,78,145,.12) !important;
}
html body #welcome .eyebrow{
  backdrop-filter:blur(5px) saturate(1.08) !important;
  -webkit-backdrop-filter:blur(5px) saturate(1.08) !important;
}
html body #welcome #enterBtn{
  min-width:176px !important;
  min-height:50px !important;
  padding:12px 24px !important;
  border-radius:15px !important;
  color:#fff !important;
  text-shadow:0 1px 2px rgba(8,18,46,.38) !important;
  background:linear-gradient(118deg,rgba(40,105,193,.94),rgba(105,72,181,.92)) !important;
  border-color:rgba(111,154,230,.42) !important;
  box-shadow:0 12px 30px rgba(42,76,150,.24),inset 0 1px 0 rgba(255,255,255,.28) !important;
  cursor:pointer !important;
}
html body #welcome #enterBtn:hover,
html body #welcome #enterBtn:focus-visible{
  transform:translateY(-2px) !important;
  filter:brightness(1.08) saturate(1.06) !important;
  box-shadow:0 16px 36px rgba(42,76,150,.30),inset 0 1px 0 rgba(255,255,255,.34) !important;
}
/* 开屏期间后方应用仅作抽象景深，不显示正文与导航噪声。 */
html body:has(#welcome:not(.hide)) .deck{
  opacity:0 !important;
  filter:blur(7px) saturate(.82) !important;
  visibility:hidden !important;
  pointer-events:none !important;
}
html body:has(#welcome:not(.hide)) .left-rail,
html body:has(#welcome:not(.hide)) .mobile-nav,
html body:has(#welcome:not(.hide)) #guideFab{
  opacity:0 !important;
  visibility:hidden !important;
  pointer-events:none !important;
}
@media(max-width:820px){
  html body #welcome.welcome{
    padding:16px 16px max(24px,env(safe-area-inset-bottom)) !important;
  }
  html body #welcome .welcome-box{
    width:min(100%,560px) !important;
    padding:32px 24px 30px !important;
    border-radius:26px !important;
  }
  html body #welcome .title{
    font-size:clamp(2.1rem,10vw,3.4rem) !important;
    letter-spacing:.035em !important;
  }
  html body #welcome .lead{
    max-width:30em !important;
    line-height:1.75 !important;
  }
  html body #welcome .action-row{
    margin-top:22px !important;
  }
  html body #welcome #enterBtn{
    width:min(100%,320px) !important;
    min-height:50px !important;
  }
}

/* v174：移动端首页文字完整显示；服务域名不再被双列卡片压成省略号。 */
html body #welcome ~ .deck .slide[data-index="1"] .slide-head .title{
  line-height:1.12 !important;
  padding-bottom:.08em !important;
  overflow:visible !important;
}
@media(max-width:600px){
  html body #welcome ~ .deck .slide[data-index="1"] .slide-inner{
    padding-bottom:110px !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-grid{
    grid-template-columns:minmax(0,1fr) !important;
    gap:9px !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-svc{
    display:grid !important;
    grid-template-columns:30px minmax(0,1fr) auto !important;
    align-items:center !important;
    min-height:58px !important;
    padding:10px 12px !important;
    overflow:visible !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-svc-text{
    min-width:0 !important;
    width:auto !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-svc-text span{
    display:block !important;
    width:auto !important;
    max-width:none !important;
    white-space:normal !important;
    overflow:visible !important;
    text-overflow:clip !important;
    overflow-wrap:anywhere !important;
    word-break:break-word !important;
    line-height:1.35 !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-svc em{
    flex:none !important;
    white-space:nowrap !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-id{
    display:grid !important;
    grid-template-columns:48px minmax(0,1fr) auto !important;
    align-items:center !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-id-text{
    min-width:0 !important;
  }
  html body #welcome ~ .deck .slide[data-index="1"] .ulh-id-text span{
    white-space:normal !important;
    overflow:visible !important;
    text-overflow:clip !important;
    overflow-wrap:anywhere !important;
    line-height:1.35 !important;
  }
}

/* fx-v184: mobile pager belongs to the real end of each page's content.
   The historic v66 rule pins every footer absolute at viewport bottom; that
   makes the dots look fixed rather than being the final content element. */
@media(max-width:900px){
  html body .slide-inner{scrollbar-gutter:stable both-edges!important;}
  html body .mobile-dot-nav{display:none!important;}
  html body .slide[data-index]>.slide-inner>.footerbar,
  html body .slide[data-index].active>.slide-inner>.footerbar{
    position:relative!important;
    inset:auto!important;
    left:auto!important;
    right:auto!important;
    top:auto!important;
    bottom:auto!important;
    width:100%!important;
    height:28px!important;
    min-height:28px!important;
    max-height:none!important;
    margin:20px 0 8px!important;
    padding:0!important;
    flex:0 0 28px!important;
    display:flex!important;
    align-items:center!important;
    justify-content:center!important;
    z-index:2!important;
    pointer-events:none!important;
  }
  html body .slide[data-index]>.slide-inner>.footerbar>.dot-nav,
  html body .slide[data-index].active>.slide-inner>.footerbar>.dot-nav{
    display:flex!important;
    position:static!important;
    inset:auto!important;
    left:auto!important;
    right:auto!important;
    top:auto!important;
    bottom:auto!important;
    transform:none!important;
    margin:0 auto!important;
    width:max-content!important;
    pointer-events:auto!important;
    animation:none!important;
  }
}

/* fx-v188: mobile already has the seven-item text navigation. Remove the
   redundant six-dot pager and its footer footprint entirely on mobile. */
@media(max-width:900px){
  html body .mobile-dot-nav,
  html body #mobileDotNav,
  html body .slide[data-index]>.slide-inner>.footerbar,
  html body .slide[data-index].active>.slide-inner>.footerbar,
  html body .slide[data-index] .footerbar .dot-nav,
  html body .slide[data-index].active .footerbar .dot-nav{
    display:none!important;
    visibility:hidden!important;
    pointer-events:none!important;
  }
}

/* fx-v190: one consistent, compact mobile header across all six pages. */
@media(max-width:900px){
  html body .slide[data-index] .slide-inner{
    gap:14px!important;
  }
  html body .slide[data-index] .slide-head{
    display:grid!important;
    grid-template-columns:minmax(0,1fr)!important;
    gap:10px!important;
    width:100%!important;
    min-height:0!important;
    padding:14px!important;
    margin:0!important;
    border:1px solid color-mix(in srgb,var(--line-strong) 72%,transparent)!important;
    border-radius:22px!important;
    background:linear-gradient(145deg,rgba(255,255,255,.075),rgba(255,255,255,.025))!important;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 10px 28px rgba(4,10,28,.08)!important;
    overflow:hidden!important;
  }
  html[data-theme="light"] body .slide[data-index] .slide-head{
    background:linear-gradient(145deg,rgba(255,255,255,.82),rgba(237,245,255,.55))!important;
    border-color:rgba(56,96,190,.16)!important;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.92),0 10px 26px rgba(45,78,150,.08)!important;
  }
  html body .slide[data-index] .slide-head>div:first-child{
    display:grid!important;
    grid-template-columns:minmax(0,1fr) auto!important;
    grid-template-rows:auto auto auto!important;
    grid-template-areas:"eyebrow subtitle" "heading heading" "lead lead"!important;
    column-gap:10px!important;
    row-gap:7px!important;
    width:100%!important;
    max-width:none!important;
    min-width:0!important;
    padding:0 0 0 11px!important;
    margin:0!important;
  }
  html body .slide[data-index] .slide-head>div:first-child::before{
    left:0!important;
    top:1px!important;
    bottom:1px!important;
    width:2px!important;
  }
  html body .slide[data-index] .slide-head>div:first-child::after{
    display:none!important;
  }
  html body .slide[data-index] .slide-head>div:first-child>.eyebrow{
    grid-area:eyebrow!important;
    justify-self:start!important;
    align-self:center!important;
    width:max-content!important;
    max-width:100%!important;
    height:22px!important;
    min-height:22px!important;
    margin:0!important;
    padding:0 9px!important;
    font-size:.55rem!important;
    line-height:22px!important;
    letter-spacing:.085em!important;
    white-space:nowrap!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
  }
  html body .slide[data-index] .slide-head>div:first-child>.subtitle{
    grid-area:subtitle!important;
    justify-self:end!important;
    align-self:center!important;
    max-width:18ch!important;
    margin:0!important;
    font-size:.59rem!important;
    line-height:1.25!important;
    letter-spacing:.10em!important;
    text-align:right!important;
    white-space:normal!important;
    color:var(--muted)!important;
  }
  html body .slide[data-index] .slide-head>div:first-child>.title,
  html body .slide[data-index] .slide-head>div:first-child>.section-title{
    grid-area:heading!important;
    justify-self:start!important;
    width:max-content!important;
    max-width:100%!important;
    margin:0!important;
    padding:0 0 .08em!important;
    font-size:clamp(1.72rem,8.2vw,2.12rem)!important;
    line-height:1.08!important;
    letter-spacing:-.035em!important;
    overflow:visible!important;
  }
  html body .slide[data-index] .slide-head>div:first-child>.lead{
    grid-area:lead!important;
    width:100%!important;
    max-width:none!important;
    margin:0!important;
    font-size:.78rem!important;
    line-height:1.55!important;
    color:var(--comfort-copy,var(--text-soft))!important;
    white-space:normal!important;
    overflow:visible!important;
    display:block!important;
    -webkit-line-clamp:unset!important;
    -webkit-box-orient:initial!important;
  }
  html body .slide[data-index] .slide-head>.top-theme{
    display:grid!important;
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
    gap:3px!important;
    width:100%!important;
    height:36px!important;
    min-height:36px!important;
    margin:0!important;
    padding:3px!important;
    border-radius:14px!important;
    align-self:stretch!important;
  }
  html body .slide[data-index] .slide-head>.top-theme>button{
    width:100%!important;
    min-width:0!important;
    height:28px!important;
    min-height:28px!important;
    padding:0 8px!important;
    border-radius:10px!important;
    font-size:.72rem!important;
    line-height:28px!important;
    transform:none!important;
  }
  /* Final specificity shield: old home and per-page rules target the full deck
     chain and otherwise erase padding/margins on only some mobile pages. */
  html body #welcome~.deck .slide[data-index]>.slide-inner>.slide-head,
  html body #welcome~.deck .slide[data-index].active>.slide-inner>.slide-head{
    display:grid!important;
    grid-template-columns:minmax(0,1fr)!important;
    gap:10px!important;
    width:100%!important;
    min-height:0!important;
    padding:14px!important;
    margin:0 0 14px!important;
  }
  html body #welcome~.deck .slide[data-index]>.slide-inner>.slide-head>div:first-child,
  html body #welcome~.deck .slide[data-index].active>.slide-inner>.slide-head>div:first-child{
    padding:0 0 0 11px!important;
    margin:0!important;
    width:100%!important;
    max-width:none!important;
  }
  html body #welcome~.deck .slide[data-index]>.slide-inner>.slide-head>.top-theme,
  html body #welcome~.deck .slide[data-index].active>.slide-inner>.slide-head>.top-theme{
    width:100%!important;
    height:36px!important;
    min-height:36px!important;
    margin:0!important;
    overflow:hidden!important;
  }
}

/* fx-v195: compact long project tags only on low-width desktop; keep titles full-size. */
@media (min-width:901px) and (max-width:1320px){
  html body .slide[data-index="2"] .project-card .award-meta{gap:2px!important;}
  html body .slide[data-index="2"] .project-card .award-meta>.quantum-tag{
    padding-left:3px!important;
    padding-right:3px!important;
    font-size:.5rem!important;
    letter-spacing:0!important;
  }
}

/* fx-v194: keyboard focus visibility for compact controls. */
html body .top-theme button:focus-visible,
html body .dot-nav button:focus-visible,
html body .ulh-actions a:focus-visible,
html body .mini-btn:focus-visible,
html body #guideFab:focus-visible,
html body #closeGuide:focus-visible,
html body .mobile-nav .rail-btn:focus-visible,
html body .left-rail .rail-btn:focus-visible{
  outline:2px solid color-mix(in srgb,var(--cyan) 82%,#fff 18%)!important;
  outline-offset:3px!important;
  box-shadow:0 0 0 4px color-mix(in srgb,var(--bg0) 62%,transparent)!important;
}

/* fx-v197: desktop light directory cards — clearer glass, less milky blur.
   Scope is intentionally >=901px + light + directory only. */
@media (min-width:901px){
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card,
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n),
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card.guide-entry-card{
    background:linear-gradient(145deg,rgba(248,252,255,.17),rgba(225,240,255,.10))!important;
    border-color:rgba(45,86,157,.25)!important;
    box-shadow:0 15px 36px rgba(47,76,132,.10),inset 0 1px 0 rgba(255,255,255,.66)!important;
    backdrop-filter:blur(6px) saturate(1.11)!important;
    -webkit-backdrop-filter:blur(6px) saturate(1.11)!important;
  }
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-card-meta{
    background:linear-gradient(135deg,rgba(220,239,255,.15),rgba(235,224,255,.09))!important;
    border-color:rgba(52,94,164,.20)!important;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.54)!important;
  }
}

/* fx-v198: directory glass hierarchy + touch-visible mobile background. */
@media (min-width:901px){
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"],
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"].active{
    background:linear-gradient(160deg,rgba(8,18,40,.27),rgba(7,12,29,.20))!important;
    border-color:rgba(104,211,238,.20)!important;
  }
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n){
    background:linear-gradient(145deg,rgba(12,28,58,.38),rgba(8,18,39,.25))!important;
    backdrop-filter:blur(6px) saturate(1.12)!important;
    -webkit-backdrop-filter:blur(6px) saturate(1.12)!important;
  }
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"],
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"].active{
    background:linear-gradient(160deg,rgba(249,253,255,.20),rgba(230,241,255,.13))!important;
    border-color:rgba(55,102,174,.20)!important;
  }
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n){
    background:linear-gradient(145deg,rgba(248,252,255,.12),rgba(220,238,255,.065))!important;
    backdrop-filter:blur(5px) saturate(1.12)!important;
    -webkit-backdrop-filter:blur(5px) saturate(1.12)!important;
  }
}
@media (max-width:900px){
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"],
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"].active{
    background:linear-gradient(160deg,rgba(7,18,40,.30),rgba(6,13,31,.21))!important;
    backdrop-filter:blur(5px) saturate(1.08)!important;
    -webkit-backdrop-filter:blur(5px) saturate(1.08)!important;
  }
  html[data-theme="dark"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n){
    background:linear-gradient(145deg,rgba(9,25,54,.40),rgba(8,19,42,.27))!important;
    backdrop-filter:blur(6px) saturate(1.10)!important;
    -webkit-backdrop-filter:blur(6px) saturate(1.10)!important;
  }
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"],
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"].active{
    background:linear-gradient(160deg,rgba(249,253,255,.20),rgba(225,239,255,.13))!important;
    backdrop-filter:blur(4px) saturate(1.06)!important;
    -webkit-backdrop-filter:blur(4px) saturate(1.06)!important;
  }
  html[data-theme="light"] body #welcome~.deck .slide[data-index="0"] .menu-grid>article.menu-card:nth-child(n){
    background:linear-gradient(145deg,rgba(250,253,255,.15),rgba(219,237,255,.08))!important;
    backdrop-filter:blur(5px) saturate(1.08)!important;
    -webkit-backdrop-filter:blur(5px) saturate(1.08)!important;
  }
}
