/* AUTO-EXTRACTED from homepage-ch.html · 单一来源，勿手改单页副本 */
/* ---- Fluid · Liquid Glass button (radius 999) ---- */
.btn{ position:relative; isolation:isolate; display:inline-flex; align-items:center; gap:12px;
  padding:16px 32px; border-radius:999px; border:1px solid transparent; overflow:visible;
  color:var(--c-ink); font-weight:500; font-size:18px; line-height:21px; cursor:pointer;
  background:linear-gradient(135deg, rgba(255,255,255,.55), rgba(255,255,255,.18) 42%, rgba(255,255,255,.42));
  backdrop-filter:blur(10px) var(--glass-feel);
  -webkit-backdrop-filter:blur(10px) var(--glass-feel);
  box-shadow:
    inset 0 1px 1px rgba(255,255,255,.9),
    inset 0 -8px 16px rgba(255,255,255,.4),
    inset 0 2px 6px rgba(255,255,255,.5),
    0 10px 28px -10px rgba(var(--c-ink-rgb),.28);
  transition:transform .5s var(--ease), box-shadow .5s var(--ease); }
/* specular highlight — slides down on hover */
.btn::before{ content:""; position:absolute; inset:0; z-index:-1; border-radius:inherit;
  background:radial-gradient(130% 90% at 30% 0%, rgba(255,255,255,.85), transparent 55%);
  opacity:.85; transition:transform .6s var(--ease), opacity .6s var(--ease); }
/* 蓝调玻璃描边环 · 单一来源 —— btn 与 nav 逐字相同的 ::after 环，提取为 .glass-ring 复用。
   消费者（btn/nav）须自带 position≠static + isolation:isolate（二者本就有）；markup 组合 class="… glass-ring"，改一处两者同步。 */
.glass-ring::after{ content:""; position:absolute; inset:0; border-radius:inherit; padding:1px; z-index:-1; pointer-events:none;
  background:linear-gradient(135deg, rgba(255,255,255,.95), color-mix(in srgb, var(--c-accent-2) 50%, transparent) 38%, rgba(255,255,255,.1) 68%, rgba(255,255,255,.8));
  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite:xor; mask-composite:exclude; }
.btn .dot{ position:relative; isolation:isolate; box-shadow:0 0 0 0 rgba(var(--c-accent-rgb),0); transition:transform .5s var(--ease), box-shadow .5s var(--ease); }
/* 呼吸点变体 · 单一来源 —— .dot--live = .dot + dot-halo 呼吸光晕（默认浅底蓝光）。
   btn / hero / 各页 eyebrow 在 markup 里组合 class="dot dot--live" 复用，改一处全同步。
   深底场景（如 homepage hero 视频）再叠 .dot--live--on-dark，仅把光晕核心改白以保对比。 */
.dot--live{ position:relative; isolation:isolate; }
.dot--live::before{ content:""; position:absolute; left:50%; top:50%; z-index:-1; width:22px; height:22px; border-radius:50%; pointer-events:none;
  transform:translate(-50%,-50%) scale(.55);
  background:radial-gradient(circle, rgba(var(--c-accent-rgb),.55) 0%, rgba(var(--c-accent-rgb),.38) 36%, rgba(var(--c-accent-rgb),.14) 68%, rgba(var(--c-accent-rgb),0) 100%);
  filter:blur(2px); animation:dot-halo 2.4s var(--ease-io) infinite; }
.dot--live--on-dark::before{ background:radial-gradient(circle, rgba(255,255,255,.95) 0%, rgba(255,255,255,.55) 38%, rgba(var(--c-accent-rgb),.16) 68%, rgba(var(--c-accent-rgb),0) 100%); }
.btn:hover{ transform:translateY(-2px) scale(1.015);
  box-shadow:
    inset 0 1px 1px rgba(255,255,255,1),
    inset 0 -8px 18px rgba(255,255,255,.5),
    inset 0 2px 8px rgba(255,255,255,.6),
    0 16px 36px -12px rgba(var(--c-accent-rgb),.34); }
.btn:hover::before{ transform:translateY(7px); opacity:1; }
.btn:hover .dot{ transform:scale(1.5); box-shadow:0 0 10px rgba(var(--c-accent-rgb),.5); }
.btn:active{ transform:translateY(0) scale(.99); }

/* ============================================================ NAV */
/* V5 浮动胶囊·满宽 (液态玻璃) + 滚动收起/出现 */
.nav{ position:fixed; top:14px; left:50%; transform:translateX(-50%); z-index:100;
  width:calc(min(100%, var(--maxw)) - 2 * var(--page-x)); height:56px;
  display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:24px;
  padding:0 16px 0 26px; border-radius:999px; isolation:isolate;
  background:linear-gradient(135deg, rgba(255,255,255,.5), rgba(255,255,255,.2) 45%, rgba(255,255,255,.4));
  -webkit-backdrop-filter:blur(16px) var(--glass-feel); backdrop-filter:blur(16px) var(--glass-feel);
  box-shadow:
    inset 0 1px 1px rgba(255,255,255,.9),
    inset 0 -6px 14px rgba(255,255,255,.4),
    0 14px 32px -14px rgba(var(--c-ink-rgb),.3);
  transition:background .45s var(--ease), backdrop-filter .45s var(--ease), box-shadow .45s var(--ease), transform .5s var(--ease), opacity .5s var(--ease); }
/* nav 描边环现由 .glass-ring 提供（markup: class="nav glass-ring"，单一来源同 btn）*/
.nav.tuck{ transform:translateX(-50%) translateY(calc(-100% - 22px)); opacity:0; }
.nav__logo img{ height:27px; width:auto; }
.nav__links{ justify-self:center; display:flex; gap:40px; }
.nav__links a{ font-size:14px; line-height:21px; font-weight:500; color:var(--c-ink); padding:4px 0; position:relative; white-space:nowrap; transition:color .3s var(--ease); }
.nav__links a::after{ content:""; position:absolute; left:0; bottom:0; height:1.5px; width:0; background:var(--c-accent); transition:width .35s var(--ease); }
.nav__links a:hover{ color:var(--c-accent); } .nav__links a:hover::after{ width:100%; }
.nav__links a.active{ color:var(--c-accent); } .nav__links a.active::after{ width:100%; }
.nav__lang{ justify-self:end; display:flex; align-items:center; gap:6px; border-radius:100px; padding:6px 12px;
  background:rgba(255,255,255,.55); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); border:1px solid rgba(255,255,255,.7); }
.nav__lang .z{ font-weight:700; font-size:11px; letter-spacing:.88px; color:#000; }
.nav__lang .sep{ font-family:var(--ff-sans); font-weight:700; font-size:11px; color:rgba(0,0,0,.3); }
.nav__lang .en{ font-family:var(--ff-sans); font-weight:700; font-size:11px; letter-spacing:.88px; color:rgba(0,0,0,.45); cursor:pointer; }
.nav__lang a{ text-decoration:none; transition:color .2s; }
.nav__lang a:hover{ color:#000; }
/* 英文页：EN 高亮、中 淡化（中文页则相反，靠上面 .z/.en 基色） */
html[lang="en"] .nav__lang .z{ color:rgba(0,0,0,.45); }
html[lang="en"] .nav__lang .en{ color:#000; }

@keyframes dot-halo{ 0%{ transform:translate(-50%,-50%) scale(.55); opacity:0; } 28%{ opacity:.92; } 100%{ transform:translate(-50%,-50%) scale(1.7); opacity:0; } }

.card-strategy{ position:relative; height:378px; overflow:hidden; background:var(--c-bg); border:1px solid var(--c-hairline);
  padding:30px; display:flex; flex-direction:column; isolation:isolate;
  transition:transform .75s var(--ease-soft), box-shadow .75s var(--ease-soft), border-color .75s var(--ease-soft);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),0), 0 14px 30px -14px rgba(var(--c-ink-rgb),0), 0 36px 64px -30px rgba(var(--c-ink-rgb),0); }
.card-strategy__bg{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:-2; transition:transform 1.1s var(--ease); }
.card-strategy:nth-child(1) .card-strategy__bg{ object-position:18% 50%; }
.card-strategy:nth-child(2) .card-strategy__bg{ object-position:52% 50%; }
.card-strategy:nth-child(3) .card-strategy__bg{ object-position:86% 50%; }
/* V6 紧凑渐变生长：常驻窄带托标题，hover 白色上爬加深 */
.card-strategy__grad{ position:absolute; inset:0; z-index:-1; background:linear-gradient(180deg, rgba(var(--c-bg-rgb),0) 0%, rgba(var(--c-bg-rgb),0) 60%, rgba(var(--c-bg-rgb),.92) 100%); transition:background .62s var(--ease-soft); }
.card-strategy:hover .card-strategy__grad{ background:linear-gradient(180deg, rgba(var(--c-bg-rgb),.04) 0%, rgba(var(--c-bg-rgb),.52) 34%, rgba(var(--c-bg-rgb),.97) 100%); }
.card-strategy:hover{ transform:translateY(-6px); border-color:var(--c-accent-line);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),.10), 0 14px 30px -14px rgba(var(--c-ink-rgb),.14), 0 36px 64px -30px rgba(var(--c-ink-rgb),.20); }
.card-strategy:hover .card-strategy__bg{ transform:scale(1.06); }
.card-strategy__top{ display:flex; align-items:center; justify-content:space-between; }
.card-strategy__top .idx{ font-size:11px; line-height:16.5px; letter-spacing:var(--tracking-caption); text-transform:uppercase; color:var(--c-accent); }
.card-strategy__top .tag{ font-size:11px; line-height:16.5px; letter-spacing:var(--tracking-caption); text-transform:uppercase; color:var(--c-muted); }
.card-strategy__foot{ margin-top:auto; display:flex; flex-direction:column; gap:0; transition:gap .55s var(--ease-soft); }
.card-strategy:hover .card-strategy__foot{ gap:14px; }
.card-strategy__title{ font-weight:400; font-size:32px; line-height:33px; letter-spacing:-0.32px; color:var(--c-ink); text-shadow:0 1px 14px rgba(var(--c-bg-rgb),.5); }  /* 0702：标题字重 regular（此前吃 h3 默认粗体） */
/* 0708 Vera：卡片标题「智能/科技/Intelligence/Tech」改黑（.b 着色删除，继承标题 ink 色；home & about 中英共 4 页生效） */
.tags{ display:grid; grid-template-rows:0fr; opacity:0; transform:translateY(8px);
  transition:grid-template-rows .55s var(--ease-soft), opacity .45s var(--ease) .04s, transform .55s var(--ease-soft); }
.tags > .tags__inner{ overflow:hidden; display:flex; flex-wrap:wrap; gap:8px; min-height:0; }
.card-strategy:hover .tags{ grid-template-rows:1fr; opacity:1; transform:translateY(0); }
.tags span{ border:1px solid var(--c-tag-line); border-radius:100px; padding:6px 13px; font-size:11px; line-height:16.5px; letter-spacing:.03em; color:var(--c-slate); }
.corner{ position:absolute; width:14px; height:14px; opacity:.4; z-index:1; }
.corner.tl{ left:12px; top:12px; border-left:1px solid var(--c-ink); border-top:1px solid var(--c-ink); }
.corner.br{ right:12px; bottom:12px; border-right:1px solid var(--c-ink); border-bottom:1px solid var(--c-ink); }

.marquee{ position:relative; overflow:hidden; margin:0 var(--rail);
  border-top:1px solid var(--c-grid); border-bottom:1px solid var(--c-grid);
  background:linear-gradient(180deg, rgba(240,238,231,0) 0%, var(--c-accent-wash) 50%, rgba(240,238,231,0) 100%); padding:11px 0; }
.marquee__track{ display:flex; gap:60px; width:max-content; align-items:center; animation:marquee 38s linear infinite; }
.marquee:hover .marquee__track{ animation-play-state:paused; }
.marquee__item{ display:flex; gap:60px; align-items:center; }
.marquee__item .name{ font-size:20px; line-height:32px; color:var(--c-ink); white-space:nowrap; }
.marquee__item .dia{ font-family:var(--ff-sc); font-size:14px; line-height:21px; color:var(--c-accent); }
@keyframes marquee{ to{ transform:translateX(-50%); } }

.card-project{ position:relative; aspect-ratio:1/1; overflow:hidden; background:var(--c-ink); border:1px solid var(--c-divider);
  transition:transform .75s var(--ease-soft), box-shadow .75s var(--ease-soft), border-color .75s var(--ease-soft);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),0), 0 14px 30px -14px rgba(var(--c-ink-rgb),0), 0 36px 64px -30px rgba(var(--c-ink-rgb),0); }
.card-project__bg{ position:absolute; inset:0; z-index:0; width:100%; height:100%; object-fit:cover; transition:transform 1.1s var(--ease); }
.card-project__plate{ position:absolute; left:0; right:0; bottom:0; height:50%; z-index:1; pointer-events:none;
  background:linear-gradient(180deg, rgba(var(--c-bg-rgb),.04) 0%, rgba(var(--c-bg-rgb),.46) 26%, rgba(var(--c-bg-rgb),.78) 60%, rgba(var(--c-bg-rgb),.97) 100%);
  -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
  clip-path:inset(100% 0 0 0); transition:clip-path .64s var(--ease-soft); }
.card-project__plate::before{ content:""; position:absolute; left:22px; right:22px; top:0; height:1.5px; border-radius:2px;
  background:linear-gradient(90deg, rgba(var(--c-accent-rgb),0), rgba(var(--c-accent-rgb),.5) 20%, rgba(var(--c-accent-rgb),.5) 80%, rgba(var(--c-accent-rgb),0)); }
.card-project__plate::after{ content:""; position:absolute; left:22px; right:22px; top:1.5px; height:1px;
  background:linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.65) 30%, rgba(255,255,255,.65) 70%, rgba(255,255,255,0)); }
.card-project:hover .card-project__plate{ clip-path:inset(0 0 0 0); }
.card-project__badge{ position:absolute; top:14px; right:14px; z-index:3; background:rgba(var(--c-bg-rgb),.72); border:1px solid var(--c-accent-line); border-radius:100px; padding:4px 10px; font-size:10px; line-height:15px; letter-spacing:.8px; color:var(--c-accent); backdrop-filter:blur(2px); }
.card-project__foot{ position:absolute; left:0; right:0; bottom:0; z-index:2; padding:24px; display:flex; flex-direction:column; gap:0; transition:gap .55s var(--ease-soft); }
.card-project__foot .t{ font-weight:700; font-size:22px; line-height:29px; letter-spacing:-0.2px; color:var(--c-ink);
  text-shadow:0 0 20px rgba(var(--c-bg-rgb),.95), 0 0 7px rgba(var(--c-bg-rgb),.92); transition:text-shadow .5s var(--ease); }
.card-project__foot .d{ font-size:13px; line-height:19.5px; color:var(--c-slate);
  display:grid; grid-template-rows:0fr; opacity:0; transform:translateY(6px);
  transition:grid-template-rows .55s var(--ease-soft), opacity .45s var(--ease) .04s, transform .55s var(--ease-soft); }
.card-project__foot .d > .d-inner{ overflow:hidden; min-height:0; display:block; }
.card-project:hover .card-project__bg{ transform:scale(1.06); }
.card-project:hover{ transform:translateY(-6px); border-color:var(--c-accent-line);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),.10), 0 14px 30px -14px rgba(var(--c-ink-rgb),.14), 0 36px 64px -30px rgba(var(--c-ink-rgb),.20); }
.card-project:hover .card-project__foot{ gap:5px; }
.card-project:hover .card-project__foot .t{ text-shadow:0 0 20px rgba(var(--c-bg-rgb),0), 0 0 7px rgba(var(--c-bg-rgb),0); }
.card-project:hover .card-project__foot .d{ grid-template-rows:1fr; opacity:1; transform:translateY(0); }
/* ---------- card-project--logo · 默认墨色 logo 居中变体（首页代表项目）· additive，不改 base / --wall ----------
   默认：bg 之上叠「居中墨色 logo」（--logo 传图 → CSS mask + --c-ink 上色；z-1，DOM 在 plate 之前 → hover 时 plate 盖其上）、名称隐藏；
   hover：沿用 canonical —— 磨砂 plate 升起盖在 logo 上方 + 名称/描述揭示（plate/bg放大/描述 全用现成规则）。 */
.card-project--logo .card-project__logo{ position:absolute; inset:0; z-index:1; pointer-events:none;
  -webkit-mask-image:var(--logo); mask-image:var(--logo);
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:center 50%; mask-position:center 50%;
  -webkit-mask-size:60% auto; mask-size:60% auto;
  background-color:var(--c-ink);
  transition:-webkit-mask-position .55s var(--ease-soft), mask-position .55s var(--ease-soft); }
.card-project--logo:hover .card-project__logo{ -webkit-mask-position:center 34%; mask-position:center 34%; }   /* hover：logo 上浮（与 card-project--wall 统一）*/
.card-project--logo .card-project__foot .t{ opacity:0; transition:opacity .45s var(--ease); }
.card-project--logo:hover .card-project__foot .t{ opacity:1; }

/* ---------- card-project--wall · 名称墙变体（portfolio 被投企业）----------
   透明磨砂卡：默认整卡居中显示名称；hover → 项目图淡入 + 底部满宽磨砂带升起
   (全文描述居中) + 名称移到带顶上方 14px。深底卡加 .card-project--ondark
   (portfolio ondark JS 采样判定) 让 hover 名称翻白。
   网格容器 .rgrid（列数/响应式）属 portfolio 页面布局，留页面内联。 */
.card-project--wall{ cursor:default;
  background:rgba(var(--c-bg-rgb),.30); border:1px solid rgba(var(--c-bg-rgb),.55);
  -webkit-backdrop-filter:blur(16px) saturate(1.1); backdrop-filter:blur(16px) saturate(1.1); }
.card-project--wall .card-project__bg{ opacity:0; transition:opacity .7s var(--ease), transform 1.1s var(--ease); }
.card-project--wall:hover .card-project__bg{ opacity:1; }
.card-project--wall .card-project__badge--ipo{ top:46px; background:var(--c-accent); border-color:var(--c-accent); color:var(--c-bg); }
.card-project--logo .card-project__badge--ipo{ background:var(--c-accent); border-color:var(--c-accent); color:var(--c-bg); }
.card-project--logo .card-project__badge:not(.card-project__badge--ipo) ~ .card-project__badge--ipo{ top:46px; }

/* ① 默认名称墙：整卡绝对居中，hover 淡出（交叉淡入到组内 hover 名称） */
.card-project--wall .card-project__name--wall{ position:absolute; inset:0; z-index:3;
  display:flex; align-items:center; justify-content:center;
  text-align:center; padding:0 20px; pointer-events:none;
  opacity:1; transition:opacity .42s var(--ease); }
.card-project--wall:hover .card-project__name--wall{ opacity:0; }
/* ② 底部锚定组：hover 名称 + 磨砂带作为 flex 列贴底 */
.card-project--wall .card-project__group{ position:absolute; inset:0; z-index:2;
  display:flex; flex-direction:column; justify-content:flex-end; align-items:stretch;
  pointer-events:none; }
/* hover 名称：带顶上方固定 14px gap */
.card-project--wall .card-project__name{ flex:0 0 auto; margin:0 0 14px; padding:0 20px;
  text-align:center; opacity:0; transition:opacity .42s var(--ease) .06s; }
.card-project--wall:hover .card-project__name{ opacity:1; }
.card-project--wall .card-project__name .t,
.card-project--wall .card-project__name--wall .t{ font-family:var(--ff-sc); font-weight:600; font-size:28px; line-height:1.25; letter-spacing:-0.4px;
  color:var(--c-ink); text-shadow:0 0 14px rgba(var(--c-bg-rgb),.85), 0 1px 3px rgba(var(--c-bg-rgb),.7); }
.card-project--wall:hover .card-project__name .t{ text-shadow:0 0 16px rgba(var(--c-bg-rgb),.92), 0 1px 6px rgba(var(--c-bg-rgb),.8); }
/* ★ 深底反色：仅 hover 名称翻浅（描述与默认名称墙不动） */
.card-project--wall.card-project--ondark:hover .card-project__name .t{
  color:#fff;
  text-shadow:0 1px 12px rgba(0,0,0,.55), 0 0 4px rgba(0,0,0,.45); }
/* 磨砂带（foot）：底部满宽，内容驱动高度 */
.card-project--wall .card-project__foot{ position:relative; left:auto; right:auto; bottom:auto; top:auto; z-index:2;
  flex:0 0 auto; width:100%;
  min-height:40%; max-height:66%;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:22px 22px 24px; text-align:center;
  background:linear-gradient(180deg, rgba(var(--c-bg-rgb),.04) 0%, rgba(var(--c-bg-rgb),.46) 26%, rgba(var(--c-bg-rgb),.78) 60%, rgba(var(--c-bg-rgb),.97) 100%);
  -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
  clip-path:inset(100% 0 0 0); transition:clip-path .64s var(--ease-soft); }
.card-project--wall:hover .card-project__foot{ clip-path:inset(0 0 0 0); }
.card-project--wall .card-project__foot::before{ content:""; position:absolute; left:22px; right:22px; top:0; height:1.5px; border-radius:2px;
  background:linear-gradient(90deg, rgba(var(--c-accent-rgb),0), rgba(var(--c-accent-rgb),.5) 20%, rgba(var(--c-accent-rgb),.5) 80%, rgba(var(--c-accent-rgb),0)); }
.card-project--wall .card-project__foot::after{ content:""; position:absolute; left:22px; right:22px; top:1.5px; height:1px;
  background:linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.65) 30%, rgba(255,255,255,.65) 70%, rgba(255,255,255,0)); }
/* ⚠ 覆盖 components.css 的 .card-project__foot .d 折叠机制(grid-template-rows:0fr) → 改 block + opacity 揭示，全文不截 */
.card-project--wall .card-project__foot .d{ display:block; grid-template-rows:none; font-size:14.5px; line-height:22px;
  color:var(--c-slate); text-align:center;
  text-shadow:0 0 12px rgba(var(--c-bg-rgb),.9), 0 1px 4px rgba(var(--c-bg-rgb),.75);
  opacity:0; transform:translateY(6px);
  transition:opacity .45s var(--ease) .12s, transform .55s var(--ease-soft) .12s; }
.card-project--wall:hover .card-project__foot .d{ grid-template-rows:none; opacity:1; transform:none; }
.card-project--wall .card-project__foot .d > .d-inner{ display:block; overflow:visible; min-height:0; max-width:94%; margin:0 auto; }

/* ── 0702 墙卡 logo 变体（仅含 .card-project__logo 的卡生效；portfolio-en 名称墙不受影响） ──
   默认：居中深墨 logo（alpha mask + background-color 控色，mask 资源已视觉归一 assets/proj-logos/mask/）；
   hover：logo 上移不缩放、玻璃块(z2)压 logo(z1)、标题进玻璃块左对齐、深底卡(ondark) logo 反白。 */
.card-project--wall .card-project__logo{ position:absolute; inset:0; z-index:1; pointer-events:none;
  -webkit-mask-image:var(--logo); mask-image:var(--logo);
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  -webkit-mask-position:center 50%; mask-position:center 50%;
  -webkit-mask-size:70% auto; mask-size:70% auto;
  background-color:var(--c-ink);
  transition:-webkit-mask-position .55s var(--ease-soft), mask-position .55s var(--ease-soft), background-color .4s var(--ease); }
.card-project--wall:hover .card-project__logo{ -webkit-mask-position:center 34%; mask-position:center 34%; }
.card-project--wall.card-project--ondark:hover .card-project__logo{ background-color:#fff; }
/* 默认描边 = hover 描边（两态一致） */
.card-project--wall:has(.card-project__logo){ border-color:var(--c-accent-line); }
/* 玻璃块：canonical bg/模糊/高度不动，只左对齐 + 标题进块 + 字号 */
.card-project--wall:has(.card-project__logo) .card-project__foot{ align-items:flex-start; text-align:left; }
.card-project--wall:has(.card-project__logo) .card-project__foot .t{ display:block; font-family:var(--ff-sc); font-weight:600;
  font-size:15px; line-height:1.3; letter-spacing:-0.2px; color:var(--c-ink); text-align:left;
  text-shadow:0 0 12px rgba(var(--c-bg-rgb),.9), 0 1px 3px rgba(var(--c-bg-rgb),.72);
  margin:0 0 4px; opacity:0; transform:translateY(6px);
  transition:opacity .42s var(--ease) .06s, transform .5s var(--ease-soft) .06s; }
.card-project--wall:has(.card-project__logo):hover .card-project__foot .t{ opacity:1; transform:none; }
.card-project--wall:has(.card-project__logo) .card-project__foot .d{ font-size:11.5px; line-height:16.5px; text-align:left; }
/* 描述左右 padding 与标题对齐（去掉 94% 居中收窄） */
.card-project--wall:has(.card-project__logo) .card-project__foot .d > .d-inner{ max-width:none; margin:0; }

/* ---------- 触屏（无 hover）设备适配 ----------
   被投企业名称墙卡片 / 首页代表项目卡片：移动端/微信无 hover，遵循「默认仅显示基础态、
   交互（悬停/点按打开弹窗）才揭示」——与桌面 hover 行为一致，不做常驻强制显示。
   footer 地址卡片则触屏常驻城市背景图（见 ②）。 */
@media (hover: none) {
  /* ① 首页代表项目（.card-project--logo）：触屏端「仅悬停/点按」才揭示名称与描述
         （默认保持居中 logo，不强制常显）；描述中文限 2 行、英文限 2 行（限悬停态生效） */
  .card-project--logo:hover .card-project__foot .d > .d-inner{ display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden; }
  #projects.lang-zh .card-project--logo:hover .card-project__foot .d > .d-inner{ -webkit-line-clamp:2; }
  #projects.lang-en .card-project--logo:hover .card-project__foot .d > .d-inner{ -webkit-line-clamp:2; }
}

.ticker{ position:relative; overflow:hidden; padding-top:60px; padding-bottom:var(--gap); }
.ticker__track{ display:flex; gap:24px; width:max-content; animation:ticker 44s linear infinite; }
.ticker__track:hover{ animation-play-state:paused; }
.ticker__group{ display:flex; gap:24px; }
/* 奖项 ticker 卡（logo 版，F: A→B 翻色）：左上角机构 logo（白底 PNG 作 CSS mask，颜色 background-color
   控：默认 ink → hover 白；各卡高度由内联 --lh 定），右上引号，底部奖项文字。与「代表项目」图片卡区分。
   静态预览用 .is-hover 复现 hover 终态（不抬升）。 */
.ticker .card-award{ position:relative; width:340px; flex:none; min-height:200px; padding:26px 28px; overflow:hidden;
  display:flex; flex-direction:column; isolation:isolate; background:var(--c-bg); border:1px solid var(--c-hairline);
  transition:transform .6s var(--ease-soft), box-shadow .6s var(--ease-soft), border-color .6s var(--ease-soft); }
.ticker .card-award::before{ content:""; position:absolute; inset:0; z-index:0; opacity:0; transition:opacity .55s var(--ease);
  background:radial-gradient(120% 100% at 100% 100%, rgba(var(--c-accent-rgb),.42) 0%, rgba(var(--c-accent-rgb),0) 52%), linear-gradient(158deg, #16233d 0%, #0d1b2a 58%, #091324 100%); }
.card-award__top{ display:block; position:relative; z-index:2; }
.card-award__logo{ display:block; height:var(--lh,56px); width:100%; z-index:2;
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat; -webkit-mask-size:contain; mask-size:contain;
  -webkit-mask-position:left top; mask-position:left top;
  background-color:var(--c-ink); transition:background-color .5s var(--ease); }
.card-award__quote{ position:absolute; top:16px; right:11px; z-index:1; font-family:var(--ff-sans); line-height:.7;
  pointer-events:none; user-select:none; font-size:66px; color:var(--c-accent); opacity:.16;
  transition:opacity .5s var(--ease), color .5s var(--ease); }
.card-award__body{ margin-top:auto; position:relative; z-index:1; }
.card-award__award{ letter-spacing:-0.1px; font-size:14px; line-height:22px; color:var(--c-slate);
  transition:color .5s var(--ease), font-size .5s var(--ease-soft), line-height .5s var(--ease-soft); }
.card-award .corner{ position:absolute; width:13px; height:13px; opacity:.5; z-index:2; transition:opacity .45s var(--ease); }
.card-award .corner.tl{ left:11px; top:11px; border-left:1px solid var(--c-accent); border-top:1px solid var(--c-accent); }
.card-award .corner.br{ right:11px; bottom:11px; border-right:1px solid var(--c-accent); border-bottom:1px solid var(--c-accent); }
.ticker .card-award:hover{ transform:translateY(-5px); }
.ticker .card-award.is-hover{ transform:none; }
.ticker .card-award:hover, .ticker .card-award.is-hover{ border-color:color-mix(in srgb, var(--c-accent-2) 28%, transparent);
  box-shadow:0 18px 44px -20px rgba(9,19,40,.6), 0 6px 16px -10px rgba(var(--c-accent-rgb),.4); }
.ticker .card-award:hover::before, .ticker .card-award.is-hover::before{ opacity:1; }
.card-award:hover .corner, .card-award.is-hover .corner{ opacity:0; }
.card-award:hover .card-award__quote, .card-award.is-hover .card-award__quote{ color:color-mix(in srgb, var(--c-accent-2) 50%, transparent); opacity:1; }
.card-award:hover .card-award__award, .card-award.is-hover .card-award__award{ color:rgba(255,255,255,.72); }
.card-award:hover .card-award__logo, .card-award.is-hover .card-award__logo{ background-color:#fff; }
@keyframes ticker{ to{ transform:translateX(-50%); } }

/* ============================================================ FOOTER */
.footer{ position:relative; min-height:420px; background:var(--c-bg); overflow:hidden; padding:0; }
.footer__rule{ position:absolute; left:0; right:0; height:0; border-top:1px solid var(--c-grid); z-index:4; }
.footer__rule.top{ top:0; } .footer__rule.bot{ bottom:52px; }
.footer__bg{ position:absolute; left:var(--rail); right:var(--rail); top:1px; bottom:53px; overflow:hidden; z-index:0; }
.footer__bg img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center; }
/* 背景视频 B：放大到屏宽 100vw（窗口仍是 .footer__bg 的 rail-clip，不动），60% 透明 */
.footer__bg video{ position:absolute; top:0; bottom:0; left:50%; width:100vw; height:100%;
  transform:translateX(-50%); object-fit:cover; object-position:center; opacity:.60; }
.footer__inner{ position:relative; z-index:2; padding:40px 104px 24px; display:flex; flex-direction:column; gap:26px; }
/* 上半行：左 标语+社交 / 右 两张正方卡 */
.footer__top{ display:flex; align-items:flex-start; justify-content:space-between; gap:40px; }
.footer__left{ flex:1; min-width:0; display:flex; flex-direction:column; gap:26px; }
.footer__slogan{ font-family:var(--ff-sc); font-weight:400; font-size:24px; line-height:51.2px; letter-spacing:-0.4px; color:rgba(var(--c-ink-rgb),.92); max-width:720px; }
/* EN 标语较长：中文标语的 24px/51.2px 行距会让英文折到 3 行且撑出页脚格 → 全站 EN 收字号+行距（单一来源，覆盖 homepage-en 原内联补丁） */
html[lang="en"] .footer__slogan{ font-weight:400; font-size:22px; line-height:1.45; letter-spacing:0; max-width:800px; }  /* 0702：放宽到两行完整（720 折三行；880 Vera 嫌宽） */
.footer__social{ display:flex; gap:8px; }
.footer__social a{ width:56px; height:56px; border-radius:56px; background:rgba(255,255,255,.05); border:1px solid #fff; backdrop-filter:blur(10px);
  display:flex; align-items:center; justify-content:center; transition:transform .35s var(--ease), background .35s var(--ease); }
.footer__social a:hover{ transform:translateY(-3px); background:rgba(255,255,255,.3); }
.footer__social img{ width:24px; height:24px; }
.footer__social a.big img{ width:30px; height:30px; }
/* 0708 Vera：微信/小红书 hover 浮出二维码卡（LinkedIn 无 qrpop 自动跳过）。
   0710 Vera：改在图标下方展开——上方会伸出 footer 顶缘被裁。 */
.footer__social a{ position:relative; }
.footer__social .qrpop{ position:absolute; top:calc(100% + 12px); left:50%; width:132px; padding:8px; box-sizing:border-box;
  background:#fff; border:1px solid var(--c-hairline); border-radius:0; box-shadow:0 18px 40px rgba(0,0,0,.18);   /* 0708 Vera：直角 */
  opacity:0; transform:translate(-50%,-8px); pointer-events:none; z-index:6;
  transition:opacity .3s var(--ease), transform .3s var(--ease); }
.footer__social a:hover .qrpop{ opacity:1; transform:translate(-50%,0); }
.footer__social a .qrpop img{ display:block; width:100%; height:auto; }  /* a 提权盖过 a.big img 的 30px */
/* 正方定位卡 — 默认融入(纯文字+顶线)，hover 浮出 blur0 天际线 */
.footer__locs{ display:flex; gap:20px; flex:none; align-items:flex-start; }
.card-location{ position:relative; width:200px; height:200px; overflow:hidden; border-radius:0;
  padding:17px 18px; gap:16px; display:flex; flex-direction:column; justify-content:flex-start;
  background:transparent; border:1px solid transparent; border-top-color:rgba(var(--c-ink-rgb),.18);
  transition:border-color .45s var(--ease), background .45s var(--ease); }
.card-location > *{ position:relative; z-index:2; }
.card-location__tex{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; opacity:0; transition:opacity .45s var(--ease); }
.card-location__scrim{ position:absolute; inset:0; z-index:1; background:rgba(255,255,255,.6); opacity:0; transition:opacity .45s var(--ease); }
.card-location:hover{ border-color:var(--c-divider); background:rgba(255,255,255,.05); }
.card-location:hover .card-location__tex, .card-location:hover .card-location__scrim{ opacity:1; }
.card-location .city{ font-family:var(--ff-sc); font-size:20px; line-height:30px; font-weight:700; letter-spacing:-0.2px; color:var(--c-ink); }
.card-location .addr{ font-family:var(--ff-sc); font-size:15px; line-height:26px; color:var(--c-ink); }
.card-location--sh .card-location__tex{ object-position:50% 50%; }
.card-location--hk .card-location__tex{ object-position:34% 36%; }
/* ④ footer 地址卡片：桌面 :hover 揭示城市背景图（上海/香港天际线）；
   移动端用 JS 点按切换 .is-open 揭示（点击显示、点别处/再点隐藏），非常驻显示。
   注意：.is-open 揭示规则放在全局（不包 @media(hover:none)），JS 也始终挂载，
   这样无论设备把自身报告成 hover:hover 还是 hover:none 都能生效（避免某些手机/
   iPad/桌面模式因 (hover:none) 不匹配而 JS 不挂载、卡片不交互、点按无揭示）。 */
.card-location{ outline:none; cursor:pointer; }
.card-location.is-open,
.card-location:focus-within{ border-color:var(--c-divider); background:rgba(255,255,255,.05); }
.card-location.is-open .card-location__tex,
.card-location.is-open .card-location__scrim,
.card-location:focus-within .card-location__tex,
.card-location:focus-within .card-location__scrim{ opacity:1; }
/* 分隔线 */
.footer__div{ height:1px; border:0; background:rgba(var(--c-ink-rgb),.12); width:100%; }
/* 下半行：左 logo / 右 两个邮箱玻璃胶囊 */
.footer__bottom{ display:flex; align-items:center; justify-content:space-between; gap:clamp(20px,3vw,40px); }
.footer__logo img{ height:clamp(28px,2vw,34px); width:auto; }
.footer__mails{ display:flex; flex-wrap:nowrap; gap:clamp(10px,1vw,20px); }
.mailpill{ display:inline-flex; gap:10px; align-items:center; padding:13px clamp(16px,1.5vw,30px); border-radius:999px;
  background:rgba(255,255,255,.45); border:1px solid rgba(255,255,255,.8); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  box-shadow:0 4px 16px -12px rgba(var(--c-ink-rgb),.3); transition:transform .35s var(--ease), background .35s var(--ease); }
.mailpill:hover{ transform:translateY(-2px); background:rgba(255,255,255,.7); }
/* dot-in hover：默认无点（dot 收为 0 footprint，margin-right:-12 抵消容器 gap:12 → 内容贴左、点不可见）；
   hover → accent 点在左侧淡入撑开、内容整体右移 19px（动效同 nav ①b）。 */
.mailpill .dot{ width:0; opacity:0; margin-right:-10px;
  transition:width .38s var(--ease), opacity .3s var(--ease), margin-right .38s var(--ease); }
.mailpill:hover .dot{ width:7px; opacity:1; margin-right:0; }
.mailpill .l{ color:var(--c-accent); font-size:clamp(11px,1.05vw,15px); line-height:1; white-space:nowrap; }  /* 0720 R2-F：桌面胶囊字号流动，窄桌面自动缩→EN 不再撑破(免 1300 断点)；label 永不换行 */
.mailpill .m{ color:var(--c-ink); font-size:clamp(11px,1.05vw,15px); line-height:1; white-space:nowrap; }
.footer__icp{ position:absolute; left:0; right:0; bottom:0; height:52px; z-index:3; display:flex; align-items:center; justify-content:flex-end; padding:0 104px; }
.footer__icp span{ font-family:var(--ff-sans); font-size:11px; line-height:16.5px; letter-spacing:1.32px; color:rgba(var(--c-ink-rgb),.4); }
/* 0720 T7-B（治本，替代 0717 EN-only 补丁）：桌面档 ICP 是绝对覆盖层（盖住 inner 底 52px）+ 背景框底钉在
   距 footer 底 53px。inner 原 padding-bottom 只有 24 → 内容底行落在距底 24（比框底 53 还低）→ 内容多时
   胶囊行跌出背景框（EN 标语折行 / 中英胶囊挤窄时都会触发，#65）。给桌面档 inner 预留 80（框偏移 52 + ~28 呼吸），
   中英统一；≤1024 ICP 转 static（kit），此规则不参与。 */
@media (min-width:1025px){ .footer__inner{ padding-bottom:80px; } }

/* 0720 R2-F 断点重构：footer 响应式收紧到只剩 2 个断点（1024 / 768），旧的
   1300(缩胶囊) / 1024(堆叠) / 560(换行) / 480(半宽) 全部撤除。
   桌面(≥1025)= 上面 base 的流动 token；≤1024 的全部 footer 响应式统一由
   mobile-shared.css(kit) 承接（kit 晚加载、同权取胜，避免旧的跨文件层叠打架）。 */

/* ---------- card-member · 团队成员卡（正方 photo + 玻璃名牌 corner L 角）----------
   card 家族成员；名牌玻璃质感沿用 card-project__plate 语言。
   网格容器 .team-grid（列数/响应式）属页面布局，留在 team 页内联。 */
.card-member{ display:flex; flex-direction:column; background:var(--c-bg); border:1px solid var(--c-divider); overflow:hidden; cursor:pointer;
  transition:transform .75s var(--ease-soft), box-shadow .75s var(--ease-soft), border-color .75s var(--ease-soft);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),0), 0 24px 50px -26px rgba(var(--c-ink-rgb),0); }
.card-member__photo{ position:relative; aspect-ratio:1/1; overflow:hidden; background:var(--c-ink); }
.card-member__photo img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block; transition:transform 1.1s var(--ease); }
.card-member__plate{ position:relative; padding:20px 20px 22px;
  background:linear-gradient(180deg, rgba(var(--c-bg-rgb),.62) 0%, rgba(var(--c-bg-rgb),.86) 55%, rgba(var(--c-bg-rgb),.97) 100%);
  -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px); }
.card-member__plate::before{ content:""; position:absolute; left:0; right:0; top:0; height:1.5px;
  background:linear-gradient(90deg, rgba(var(--c-accent-rgb),0), rgba(var(--c-accent-rgb),.5) 20%, rgba(var(--c-accent-rgb),.5) 80%, rgba(var(--c-accent-rgb),0)); }
.card-member__plate::after{ content:""; position:absolute; left:0; right:0; top:1.5px; height:1px;
  background:linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.65) 30%, rgba(255,255,255,.65) 70%, rgba(255,255,255,0)); }
.card-member__plate .corner{ position:absolute; width:13px; height:13px; opacity:.55; z-index:2; }
.card-member__plate .corner.tl{ left:10px; top:9px; border-left:1px solid var(--c-accent); border-top:1px solid var(--c-accent); }
.card-member__plate .corner.br{ right:10px; bottom:10px; border-right:1px solid var(--c-accent); border-bottom:1px solid var(--c-accent); }
.card-member__txt{ min-width:0; display:flex; flex-direction:column; gap:5px; }
.card-member__txt .t{ font-weight:700; font-size:22px; line-height:29px; letter-spacing:-0.2px; color:var(--c-ink); }
.card-member__txt .d{ font-size:13px; line-height:19.5px; color:var(--c-slate); }
.card-member:hover{ transform:translateY(-6px); border-color:var(--c-accent-line);
  box-shadow:0 4px 10px -6px rgba(var(--c-ink-rgb),.10), 0 24px 50px -26px rgba(var(--c-ink-rgb),.20); }
.card-member:hover .card-member__photo img{ transform:scale(1.06); }

/* ============================================================
   HERO · 子页通用 (.hax) — about / team / portfolio / news 四页共用
   display 蓝标题 + 呼吸点 label + “I Value You” 运动轴。
   ⚠ 首页 hero 是另一套 .hero__ivy(打字机动画 + glowNodeC)；本组件在
   components.css 里、加载早于页面内联 <style>，故子页 ivy 选择器一律
   限定 .hax 作用域，避免裸选择器把属性泄漏到首页。.hax__ 前缀、flowDown、
   haxRise 首页不使用，可裸放。
   ============================================================ */
.hax{ position:relative; min-height:100vh; display:flex; flex-direction:column; align-items:center; padding:200px var(--page-x) 0; overflow:hidden; background:var(--c-bg); }
.hax__bg{ position:absolute; inset:0; z-index:0; width:100%; height:100%; object-fit:cover; }
.hax__fade{ position:absolute; inset:0; z-index:1; pointer-events:none; background:linear-gradient(180deg, rgba(var(--c-bg-rgb),0) 45%, var(--cream-grad) 78%); }
.hax__halo{ position:absolute; left:50%; top:40%; z-index:0; pointer-events:none; width:min(900px,86%); aspect-ratio:1/1; transform:translate(-50%,-50%); background:radial-gradient(circle at center, var(--c-accent-wash) 0%, rgba(var(--c-accent-rgb),.018) 38%, rgba(var(--c-accent-rgb),0) 70%); }
.hax__inner{ position:relative; z-index:2; width:100%; max-width:var(--maxw); display:flex; flex-direction:column; align-items:center; text-align:center; }
.hax__kick{ display:inline-flex; align-items:center; gap:10px; margin-bottom:36px; }
.hax__kick .caption{ color:var(--c-accent); letter-spacing:.2em; }
.hax__title{ font-family:var(--ff-sc); font-weight:700; font-size:108px; line-height:1.04; letter-spacing:-0.64px; color:var(--c-accent); }
.hax__desc{ margin-top:34px; max-width:680px; font-family:var(--ff-sc); font-weight:400; font-size:22px; line-height:37px; letter-spacing:-0.2px; color:var(--c-slate); }
/* 0707 Vera 定 W2 宽 748；0708 Vera：取消两端对齐，回普通居中（继承 .hax__inner text-align:center） */
html[lang="en"] .hax__desc{ max-width:748px; text-wrap:pretty; }
.hax .hero__ivy{ display:flex; flex-direction:column; align-items:center; gap:15px; margin-top:46px; }
.hax .hero__ivy .ivy-t{ font-family:var(--ff-sans); font-style:italic; font-size:28.3px; line-height:31.2px; letter-spacing:-0.34px; color:var(--c-accent);
  display:flex; align-items:baseline; justify-content:center; gap:10px; white-space:nowrap; }
.hax .ivy-t .w{ display:inline-flex; align-items:baseline; }
.hax .ivy-t .cap{ display:inline-block; vertical-align:baseline; transform-origin:center bottom; }
/* 0702 <ivy-hero> 拆字结构（rest=alue/ou 由 site.js 滚动收起为「I V Y」） */
.hax .hero__ivy .ivy-t{ will-change:gap; }
.hax .ivy-t .rest{ display:inline-block; overflow:hidden; vertical-align:baseline; white-space:nowrap; }
.hax .ivy-t .rest > .rest-inner{ display:inline-block; white-space:nowrap; }
.hax .ivy-t .ch{ display:inline-block; }
.hax .ivy-line{ position:relative; width:1px; height:165px;
  background:linear-gradient(to bottom, rgba(var(--c-accent-rgb),.55) 0%, rgba(var(--c-accent-rgb),.18) 58%, rgba(var(--c-accent-rgb),0) 100%); }
.hax .ivy-glow{ position:absolute; left:50%; top:0; width:5px; height:5px; margin-left:-2.5px; border-radius:50%; opacity:0;
  background:rgba(var(--c-accent-rgb),.95); box-shadow:0 0 8px 2px rgba(var(--c-accent-rgb),.5); animation:flowDown 2.6s var(--ease) infinite; }
.hax .ivy-glow::before{ content:''; position:absolute; left:50%; bottom:5px; width:2px; height:56px; margin-left:-1px;
  background:linear-gradient(180deg, rgba(var(--c-accent-rgb),0) 0%, rgba(var(--c-accent-rgb),.4) 100%); filter:blur(.5px); }
@keyframes flowDown{ 0%{ transform:translateY(-4px); opacity:0; } 12%{ opacity:1; } 86%{ opacity:1; } 100%{ transform:translateY(167px); opacity:0; } }
/* 入场：kick/标题/desc 逐个上浮淡入 */
.hax__kick, .hax__title, .hax__desc{ opacity:0; transform:translateY(20px); animation:haxRise .9s var(--ease-soft) both; }
.hax__kick{ animation-delay:.12s; } .hax__title{ animation-delay:.26s; } .hax__desc{ animation-delay:.42s; }
@keyframes haxRise{ to{ opacity:1; transform:none; } }
@media (max-width:1100px){
  .hax{ padding-top:150px; }
  .hax__title{ font-size:64px; letter-spacing:-1.2px; }
  .hax__desc{ font-size:18px; line-height:30px; }
}
@media (prefers-reduced-motion:reduce){
  .hax__kick, .hax__title, .hax__desc{ opacity:1; transform:none; animation:none; }
  .hax .ivy-glow{ animation:none; opacity:0; }
}

/* ============================================================ NAV v2 （新增 · opt-in，不改 v1）
   v2 布局 = 磨砂玻璃只包中间 4 tab；logo / 中·EN 贴齐内容栏。markup: <nav class="nav nav--v2">，
   描边环 .glass-ring 从 nav 移到 .nav__links。上方原 .nav（v1 满宽胶囊）整段保留不动。
   消费方式：页面写 <site-nav-v2>（partials.js）即得 v2 布局 + 确定版 tab 动效。 */
.nav--v2{ background:none; -webkit-backdrop-filter:none; backdrop-filter:none;
  box-shadow:none; border-radius:0; padding:0; }
.nav--v2 .nav__links{ position:relative; isolation:isolate;
  padding:13px 34px; gap:40px; border-radius:999px;
  background:linear-gradient(135deg, rgba(255,255,255,.5), rgba(255,255,255,.2) 45%, rgba(255,255,255,.4));
  -webkit-backdrop-filter:blur(16px) var(--glass-feel); backdrop-filter:blur(16px) var(--glass-feel);
  box-shadow: inset 0 1px 1px rgba(255,255,255,.9), inset 0 -6px 14px rgba(255,255,255,.4),
              0 14px 32px -14px rgba(var(--c-ink-rgb),.3); }

/* ============================================================ NAV v3 （0702 · 满宽磨砂玻璃条 .nav--bar）
   应用规则：页面顶部（y≤40）保持 v2 浮动胶囊；滚动后 site.js 给 #nav 加 .nav--bar → 本变体接管。
   定稿参数（tests/0702/home-nav-glassbar/home-nav-glassbar-final.html）：高 64 · 左右 pad 80 ·
   logo 左 · tab+lang 右簇（间距 80）· V2 液态玻璃（scrolled 加厚）+ 底缘蓝→白→蓝发丝。
   形态切换瞬时完成（site.js 短暂加 .navswap 抑制 transition），出现/消失沿用现有 .tuck。 */
.nav.nav--bar{ top:0; left:0; transform:none; width:100%; max-width:none; border-radius:0;
  height:64px; padding:0 80px; display:flex; align-items:center; gap:0;
  background:linear-gradient(180deg, rgba(255,255,255,.42), rgba(255,255,255,.15) 52%, rgba(255,255,255,.34));
  -webkit-backdrop-filter:blur(14px) var(--glass-feel); backdrop-filter:blur(14px) var(--glass-feel);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.85), inset 0 -1px 0 rgba(255,255,255,.5),
              0 8px 24px -16px rgba(var(--c-ink-rgb),.3); }
.nav.nav--bar::after{ content:""; position:absolute; left:0; right:0; bottom:0; height:1.5px; pointer-events:none;
  background:linear-gradient(90deg, rgba(141,180,255,0), rgba(141,180,255,.5) 18%, rgba(255,255,255,.7) 50%, rgba(141,180,255,.5) 82%, rgba(141,180,255,0)); }
.nav.nav--bar.scrolled{
  background:linear-gradient(180deg, rgba(255,255,255,.62), rgba(255,255,255,.4) 52%, rgba(255,255,255,.56));
  -webkit-backdrop-filter:blur(18px) saturate(185%) brightness(1.05); backdrop-filter:blur(18px) saturate(185%) brightness(1.05); }
.nav.nav--bar .nav__logo{ margin-right:auto; display:flex; align-items:center; }
.nav.nav--bar .nav__links{ padding:0; border-radius:0; background:none;
  -webkit-backdrop-filter:none; backdrop-filter:none; box-shadow:none; }
.nav.nav--bar .nav__lang{ margin-left:80px; }
.nav.nav--bar.tuck{ transform:translateY(calc(-100% - 2px)); }
.nav.navswap{ transition:none !important; }

/* ---- tab 动效 · 确定版 .nav__links--roll：竖向翻滚「逐字左→右」+ 下划线同步左→右（划完=翻完同刻）----
   每 tab markup（partials.js splitTab 自动生成）：
     <a data-nav=…><span class="ch" style="--chd:Xs"><span class="mask"><span class="roll">
        <span>字</span><span aria-hidden="true">字</span></span></span></span> …逐字… </a>
   逐字延迟靠每个 .ch 上的 --chd（自动继承给 .roll 与 .ch::after）；翻滚/下划线同为 .4s →
   每字「翻完=划完」、整行末字同刻收尾，且不限字数（中/英任意长度都自动同步）。 */
.nav__links--roll a{ position:relative; display:inline-flex; color:var(--c-ink); }
.nav__links--roll a:hover{ color:var(--c-ink); }            /* 翻滚不变色 */
.nav__links--roll .ch{ display:inline-block; }
.nav__links--roll .mask{ display:block; height:21px; overflow:hidden; }
.nav__links--roll .roll{ display:block; transition:transform .4s var(--ease) var(--chd,0s); }
.nav__links--roll .roll > span{ display:block; height:21px; line-height:21px; }
.nav__links--roll a:hover .roll{ transform:translateY(-21px); }
/* 整条下划线（一条，非逐字段）：width 0→100% 左→右画出；时长 --ul-dur = 末字翻完时刻
   （partials.js 按字数算 (n-1)*.05+.4），故整条画完与末字翻完同刻收尾。 */
.nav__links--roll a::after{ content:""; position:absolute; left:0; bottom:-3px; height:1.5px; width:0;
  background:var(--c-accent); transition:width var(--ul-dur,.55s) var(--ease); }
.nav__links--roll a:hover::after{ width:100%; }
.nav__links--roll a.active::after{ width:100%; transition:none; }   /* 当前页：下划线常驻 */

/* ---- tab 动效 · 备选①b（存档）.nav__links--dot：accent 点入 + 文字右移，文字本身不变色 ----
   每 tab markup：<a data-nav=…><span class="t">关于我们</span></a> */
.nav__links--dot a{ position:relative; }
.nav__links--dot a::after{ display:none; }
.nav__links--dot a:hover{ color:var(--c-ink); }
.nav__links--dot .t{ display:inline-block; transition:transform .4s var(--ease); }
.nav__links--dot a::before{ content:""; position:absolute; left:0; top:50%; width:5px; height:5px;
  border-radius:50%; background:var(--c-accent); transform:translate(-2px,-50%) scale(.3); opacity:0;
  transition:opacity .3s var(--ease), transform .4s var(--ease); }
.nav__links--dot a:hover .t, .nav__links--dot a.active .t{ transform:translateX(15px); }
.nav__links--dot a:hover::before, .nav__links--dot a.active::before{ opacity:1; transform:translate(0,-50%) scale(1); }

@media (prefers-reduced-motion:reduce){
  .nav__links--roll .roll, .nav__links--roll a::after,
  .nav__links--dot .t, .nav__links--dot a::before{ transition:none; }
}

/* ============================================================ 页面切换幕帘 · Cipher 六柱（0702 定稿）
   定稿 tests/0702/home-pagetrans/home-pagetrans-cipher-final.html：
   覆盖 = louvre 自顶向下长满（L→R stagger）；揭示 = 向底收回；dur .55 · stagger .08 · power3.inOut。
   markup + 行为由 site.js 单一来源注入（无需页面改动）；fill = 纯色主题蓝（0707 Vera 定：弃蓝光图回纯色）。
   <1025px 降 3 柱。html.tx-enter::before = 进场防闪全幅盖板（partials.js 在 head 同步加类，site.js 接管后移除）。 */
.tx-slats{ position:fixed; inset:0; z-index:1200; display:flex; flex-direction:row; pointer-events:none; visibility:hidden; }
.tx-slats.on{ visibility:visible; pointer-events:auto; }
.tx-slats i{ flex:1 1 0; height:100%; clip-path:inset(0 0 100% 0);
  transition:clip-path .55s cubic-bezier(.65,0,.35,1); transition-delay:calc(var(--i) * .08s);
  /* 0708 Vera：幕帘改网站背景米白；柱间发丝线删除（enter 盖板无线条，交接帧会闪一次——同质纯色后不可能闪） */
  background:var(--c-bg);
  will-change:clip-path; }  /* 提合成层：线上揭示时主线程忙于解码图片/起视频，避免 clip-path 掉帧 */
.tx-slats.cover i{ clip-path:inset(0 0 0 0); }
.tx-slats.reveal i{ clip-path:inset(100% 0 0 0); }
.tx-slats.hold i{ transition:none; }
@media (max-width:1024px){ .tx-slats i:nth-child(n+4){ display:none; } }
/* 0708 Vera 分场景：中英切换保留六柱幕帘；其余站内切换 = 纯色淡入淡出
   （tests/0708/home-pagetrans-fade/home-pagetrans-fade-final.html 定稿：米白 var(--c-bg) · 350ms · 停留0 · ease）。
   markup 同样由 site.js 注入；.hold = 进场无过渡接管（同 slats）。 */
.tx-fade{ position:fixed; inset:0; z-index:1200; background:var(--c-bg); opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity 350ms ease; }
.tx-fade.on{ visibility:visible; pointer-events:auto; }
.tx-fade.show{ opacity:1; }
.tx-fade.hold{ transition:none; }
@media (prefers-reduced-motion:reduce){ .tx-fade{ display:none; } }
html.tx-enter::before{ content:""; position:fixed; inset:0; z-index:1300;
  background:var(--c-bg); }
