/* v3 可视化组件样式。默认（无脚本 / 减弱动态效果）就是终态；只有 html.motion 且元素还没 .in 时，才先藏起来等动画。
   时长三档：160 状态切换 / 480 入场 / 900–1200 描线；缓动：入场 --ease，描线 --draw。 */
:root { --draw: cubic-bezier(.65, 0, .35, 1); --line-strong: rgba(242, 245, 241, .22); }

/* 通用：描线、淡入 */
.motion [data-anim]:not(.in) [pathLength] { stroke-dashoffset: 1; }
[data-anim] [pathLength] { stroke-dasharray: 1 1; stroke-dashoffset: 0; transition: stroke-dashoffset 1100ms var(--draw) var(--d, 0ms); }
.motion [data-anim]:not(.in) .fade, .motion [data-anim]:not(.in) .vz-node, .motion [data-anim]:not(.in) .vz-tag, .motion [data-anim]:not(.in) .vz-gapt,
.motion [data-anim]:not(.in) .o-node, .motion [data-anim]:not(.in) .o-steps li, .motion [data-anim]:not(.in) .o-branch span,
.motion [data-anim]:not(.in) .h-dot, .motion [data-anim]:not(.in) .h-card, .motion [data-anim]:not(.in) .a-lab, .motion [data-anim]:not(.in) .a-num,
.motion [data-anim]:not(.in) .m-city, .motion [data-anim]:not(.in) .m-tag, .motion [data-anim]:not(.in) .m-pct,
.motion [data-anim]:not(.in) .vz-thr-m li, .motion [data-anim]:not(.in) .vz-tl li, .motion [data-anim]:not(.in) .c-phone li { opacity: 0; }
.vz-node, .vz-tag, .vz-gapt, .o-node, .o-steps li, .o-branch span, .h-dot, .h-card, .a-lab, .a-num, .m-city, .m-tag, .m-pct, .vz-thr-m li, .vz-tl li, .fade {
  transition: opacity 480ms var(--ease) var(--d, 0ms); }
.vz-wrap, .vz-bars, .vz-ring, .vz-tl, .vz-orbit, .vz-hub, .vz-arc5, .vz-chat, .vz-map, .vz-clock, .vz-num { margin: 0; }
.vz text { font-family: var(--font); }

/* 1. 阈值穿越图 */
.vz-threshold { position: relative; }
.vz-thr-d { width: 100%; height: auto; display: block; overflow: visible; }
.vz-axis { stroke: var(--line-strong); stroke-width: 1; }
.vz-thr { stroke: rgba(242, 245, 241, .34); stroke-width: 1; stroke-dasharray: 4 6; }
.vz-lab, .vz-tick { fill: var(--muted); font-size: 13px; }
.vz-cross { fill: none; stroke: var(--text); stroke-width: 2.5; stroke-linecap: round; }
.vz-cross.now { stroke: var(--lime-400); stroke-width: 3; }
.vz-node circle { fill: var(--text); }
.vz-node.now circle { fill: var(--lime-400); }
.vz-node .vz-pulse { fill: none; stroke: var(--lime-400); stroke-width: 1.5; transform-box: fill-box; transform-origin: center; }
.motion .vz-threshold.in .vz-pulse { animation: vzPulse 1.6s var(--ease) 1.4s 2 both; }
@keyframes vzPulse { 0% { transform: scale(1); opacity: .9; } 100% { transform: scale(3.2); opacity: 0; } }
.vz-drop { stroke: rgba(242, 245, 241, .14); stroke-width: 1; stroke-dasharray: 2 4; }
.vz .vz-year { font-family: "Anton", var(--font); font-size: 40px; fill: var(--text); }
.vz-tag.now .vz-year { fill: var(--lime-400); }
.vz-cty { font-size: 13px; fill: var(--muted); }
.vz-gap { fill: none; stroke: rgba(242, 245, 241, .26); stroke-width: 1; }
.vz-gapt { fill: var(--muted); font-size: 13px; }
.vz-thr-m { display: none; margin: 0; padding: 0; list-style: none; }
@media (max-width: 767px) {
  .vz-thr-d { display: none; }
  .vz-thr-m { display: grid; gap: 0; border-left: 1px solid var(--line-strong); margin-left: 8px; }
  .vz-thr-m li { position: relative; display: grid; grid-template-columns: auto 1fr; gap: 0 16px; padding: 0 0 28px 24px; }
  .vz-thr-m li::before { content: ""; position: absolute; left: -5px; top: 14px; width: 9px; height: 9px; border-radius: 50%; background: var(--text); }
  .vz-thr-m li.now::before { background: var(--lime-400); box-shadow: 0 0 0 6px rgba(157, 255, 113, .18); }
  .vz-m-year { grid-row: span 2; font-family: "Anton", var(--font); font-size: 40px; line-height: 44px; }
  .vz-thr-m li.now .vz-m-year { color: var(--lime-400); }
  .vz-m-c { font-weight: 600; padding-top: 4px; } .vz-m-v { color: var(--muted); font-size: 13px; }
  .vz-m-gap { position: absolute; left: 24px; top: -22px; font-size: 12px; color: var(--muted); }
}

/* 2. 横条 */
.vz-bars ol { margin: 0; padding: 0; list-style: none; display: grid; gap: 14px; }
.vz-bars li { display: grid; grid-template-columns: 7em 1fr auto; align-items: center; gap: 12px; font-size: 14px; color: var(--muted); }
.vz-bars .b-track { height: 8px; border-radius: 4px; background: rgba(242, 245, 241, .06); overflow: hidden; }
.vz-bars .b-fill { display: block; height: 100%; width: 100%; border-radius: 4px; background: var(--text); transform-origin: left; transform: scaleX(var(--w)); transition: transform 900ms var(--ease) var(--d, 0ms); }
.vz-bars li.hi .b-fill { background: var(--lime-400); }
.vz-bars li.hi { color: var(--text); }
.motion .vz-bars:not(.in) .b-fill { transform: scaleX(0); }
.vz-bars .b-val { font-family: "Anton", var(--font); font-size: 22px; color: var(--text); font-variant-numeric: tabular-nums; }
.vz-bars li.hi .b-val { color: var(--lime-400); }
.vz-bars figcaption, .vz-src { margin-top: 12px; font-size: 12px; color: var(--muted); }

/* 3. 环形数值 */
.vz-ring { position: relative; display: grid; justify-items: center; text-align: center; gap: 12px; }
.vz-ring svg { width: 148px; height: 148px; }
.vz-ring .r-bg { fill: none; stroke: rgba(242, 245, 241, .08); stroke-width: 2; }
.vz-ring .r-fg { fill: none; stroke: var(--text); stroke-width: 2; stroke-linecap: round; stroke-dasharray: var(--f) 1; }
.vz-ring.hi .r-fg { stroke: var(--lime-400); }
.motion .vz-ring:not(.in) .r-fg { stroke-dasharray: 0 1; }
.vz-ring .r-fg { transition: stroke-dasharray 1000ms var(--draw); }
.vz-ring .r-val { position: absolute; top: 74px; transform: translateY(-50%); display: grid; justify-items: center; gap: 4px; line-height: 1; white-space: nowrap; }
.vz-ring .r-val b { font-family: "Anton", var(--font); font-weight: 400; font-size: 30px; }
.vz-ring .r-val small { font-size: 12px; color: var(--muted); }
.vz-ring.hi .r-val { color: var(--lime-400); }
.vz-ring figcaption { max-width: 14em; color: var(--muted); font-size: 13px; line-height: 20px; }

/* 4. 小时间轴 */
.vz-tl { position: relative; padding-top: 8px; }
.vz-tl ol { position: relative; display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; margin: 0; padding: 28px 0 0; list-style: none; }
.vz-tl .tl-line { position: absolute; left: 0; right: 0; top: 22px; height: 1px; background: var(--line-strong); }
.vz-tl li { position: relative; }
.vz-tl li::before { content: ""; position: absolute; top: -12px; left: 0; width: 9px; height: 9px; border-radius: 50%; background: var(--text); transform: translateY(-50%); }
.vz-tl li.future::before { background: var(--ink); border: 1.5px solid var(--text); }
.vz-tl li b { display: block; font-family: "Anton", var(--font); font-weight: 400; font-size: 26px; line-height: 32px; }
.vz-tl li span { display: block; color: var(--muted); font-size: 13px; line-height: 20px; margin-top: 4px; }
.vz-tl .tl-today { position: absolute; top: 0; left: 46%; font-size: 12px; color: var(--lime-400); padding-left: 14px; }
.vz-tl .tl-today::before { content: ""; position: absolute; left: 0; top: 18px; width: 9px; height: 9px; border-radius: 50%; background: var(--lime-400); box-shadow: 0 0 0 5px rgba(157, 255, 113, .18); }

/* 5. 轨道流程 */
.vz-orbit { position: relative; }
.vz-orbit .o-svg { width: 100%; height: auto; display: block; overflow: visible; }
.o-path { fill: none; stroke: var(--line-strong); stroke-width: 1.5; }
.o-node circle { fill: var(--graphite); stroke: var(--text); stroke-width: 1.5; }
.o-node .o-halo { fill: none; stroke: rgba(157, 255, 113, .0); }
.o-node circle:first-child { transition: fill 480ms var(--ease) var(--d, 0ms), stroke 480ms var(--ease) var(--d, 0ms); }
.vz-orbit.in .o-node circle:first-child, .no-js .o-node circle:first-child { fill: var(--text); }
.o-node:last-of-type circle:first-child { stroke: var(--lime-400); }
.vz-orbit.in .o-node:last-of-type circle:first-child { fill: var(--lime-400); }
.vz-orbit.in .o-node:last-of-type .o-halo { stroke: rgba(157, 255, 113, .35); }
.o-steps { display: grid; grid-template-columns: repeat(var(--n), 1fr); gap: 24px; margin: -40px 0 0; padding: 0; list-style: none; text-align: center; }
.o-steps li { display: grid; gap: 6px; justify-items: center; }
.o-steps .o-n { font-family: "Anton", var(--font); font-size: 14px; color: var(--muted); letter-spacing: .06em; }
.o-steps b { font-size: 20px; line-height: 28px; }
.o-steps li > span:last-child { color: var(--muted); font-size: 14px; line-height: 22px; max-width: 16em; }
.o-steps li:last-child b { color: var(--lime-400); }
.o-branch { display: flex; justify-content: flex-end; gap: 12px; margin-top: 20px; }
.o-branch span { padding: 8px 14px; border-radius: 999px; border: 1px solid rgba(157, 255, 113, .4); color: var(--text); font-size: 13px; background: rgba(157, 255, 113, .06); }
@media (max-width: 767px) {
  .vz-orbit .o-svg { display: none; }
  .o-steps { grid-template-columns: 1fr; margin: 0; text-align: left; gap: 0; border-left: 1px solid var(--line-strong); margin-left: 8px; }
  .o-steps li { justify-items: start; grid-template-columns: auto 1fr; padding: 0 0 24px 24px; position: relative; }
  .o-steps li::before { content: ""; position: absolute; left: -5px; top: 6px; width: 9px; height: 9px; border-radius: 50%; background: var(--text); }
  .o-steps li:last-child::before { background: var(--lime-400); }
  .o-steps .o-n { grid-row: span 2; padding-right: 8px; padding-top: 4px; }
  .o-branch { justify-content: flex-start; flex-wrap: wrap; margin-left: 32px; margin-top: 0; }
}

/* 6. 中心辐射 */
.vz-hub { position: relative; width: 100%; max-width: 640px; margin: 0 auto; container-type: inline-size; }
.vz-hub svg { width: 100%; height: auto; display: block; }
.h-ring { fill: none; stroke: rgba(242, 245, 241, .07); }
.h-line { fill: none; stroke: var(--line-strong); stroke-width: 1.2; }
.h-dot { fill: var(--text); }
.h-core { fill: rgba(157, 255, 113, .1); stroke: var(--lime-400); stroke-width: 1.5; }
.vz-hub .h-center { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); font-weight: 700; font-size: clamp(15px, 2.7cqw, 17px); color: var(--lime-400); text-align: center; width: 6em; }
.vz-hub ol { margin: 0; padding: 0; list-style: none; }
.h-card { position: absolute; width: 46%; height: 30%; display: flex; flex-direction: column; justify-content: center; gap: 4px; padding: 0 clamp(16px, 3.6cqw, 24px); border-radius: 16px; background: var(--glass-bg); border: 1px solid var(--line); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); }
.h-card b { display: block; font-size: clamp(15px, 2.9cqw, 19px); line-height: 1.4; } .h-card span { display: block; font-size: clamp(13px, 2.25cqw, 15px); line-height: 1.5; color: var(--muted); }
.h-0 { left: 0; top: 0; } .h-1 { right: 0; top: 0; text-align: right; } .h-2 { left: 0; bottom: 0; } .h-3 { right: 0; bottom: 0; text-align: right; }
.vz-hub .h-center { line-height: 1.25; }
/* 图宽不到 600px（手机、1024 左右的双栏）时改为卡片列表：中心辐射在窄处会挤 */
@container (max-width: 599px) {
  .vz-hub svg { display: none; } .vz-hub .h-center { position: static; transform: none; display: block; width: auto; margin-bottom: 16px; text-align: left; }
  .vz-hub ol { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; } .h-card { position: static; width: auto; height: auto; padding: 16px 18px; text-align: left !important; }
}

/* 7. 五段半环 */
.vz-arc5 svg { width: 100%; max-width: 560px; height: auto; display: block; margin: 0 auto; overflow: visible; }
.a-seg { fill: none; stroke: var(--text); stroke-width: 10; stroke-linecap: round; }
.a-seg:last-of-type { stroke: var(--lime-400); }
.a-lab { fill: var(--text); font-size: 17px; font-weight: 600; }
.a-num { fill: var(--muted); font-family: "Anton", var(--font); font-size: 13px; }

/* 8. 双语对话：手机只露上半截，底部渐隐进卡片 */
.vz-chat { display: grid; justify-items: center; gap: 20px; }
.c-phone { position: relative; width: 340px; max-width: 100%; height: 368px; overflow: hidden; padding: 14px 14px 0; border-radius: 44px 44px 0 0;
  background: linear-gradient(180deg, #1a211d, #0f1412 70%); border: 1px solid rgba(242, 245, 241, .14); border-bottom: 0;
  box-shadow: inset 0 0 0 6px #070a09, inset 0 0 0 7px rgba(242, 245, 241, .06), 0 -10px 60px rgba(157, 255, 113, .05);
  -webkit-mask-image: linear-gradient(180deg, #000 72%, transparent); mask-image: linear-gradient(180deg, #000 72%, transparent); }
.c-island { display: block; width: 92px; height: 26px; margin: 4px auto 0; border-radius: 13px; background: #050706; box-shadow: inset 0 0 0 1px rgba(242, 245, 241, .06); }
.c-head { display: flex; justify-content: center; padding: 14px 0 16px; margin: 0 6px 14px; border-bottom: 1px solid rgba(242, 245, 241, .07); }
.c-chip { display: inline-flex; align-items: center; gap: 8px; padding: 5px 12px; border-radius: 999px; font-size: 12px; line-height: 16px; letter-spacing: .02em; color: var(--text);
  background: rgba(157, 255, 113, .08); border: 1px solid rgba(157, 255, 113, .22); }
.c-chip i { font-style: normal; color: var(--lime-400); }
.c-phone ol { margin: 0; padding: 0 10px; list-style: none; display: grid; gap: 10px; }
.c-phone li { max-width: 80%; padding: 10px 14px 11px; border-radius: 18px; font-size: 14px; line-height: 20px; transition: opacity 480ms var(--ease) var(--d, 0ms), transform 480ms var(--ease) var(--d, 0ms); }
.motion .vz-chat:not(.in) .c-phone li { transform: translateY(8px); }
.c-phone p { margin: 0; }
.c-phone .c-tr { margin-top: 7px; padding-top: 7px; border-top: 1px solid rgba(242, 245, 241, .08); color: var(--lime-400); font-size: 12.5px; line-height: 18px; }
.c-guest { justify-self: start; background: rgba(242, 245, 241, .07); border-bottom-left-radius: 6px; }
.c-staff { justify-self: end; background: rgba(157, 255, 113, .09); box-shadow: inset 0 0 0 1px rgba(157, 255, 113, .2); border-bottom-right-radius: 6px; }
.c-staff .c-tr { border-top-color: rgba(157, 255, 113, .16); }
.vz-chat figcaption { color: var(--muted); font-size: 14px; line-height: 22px; text-align: center; max-width: 30em; text-wrap: balance; }

/* 9. 点阵地图 */
.vz-map svg { width: 100%; height: auto; display: block; overflow: visible; }
.m-dot { fill: rgba(242, 245, 241, .16); }
.m-dot.m-vn { fill: var(--lime-400); }
.m-dot.m-my { fill: rgba(242, 245, 241, .55); }
.m-arc { fill: none; stroke: rgba(157, 255, 113, .55); stroke-width: 1.5; }
.m-city circle { fill: var(--text); stroke: var(--ink); stroke-width: 2; }
.m-city.vn circle { fill: var(--lime-400); }
.m-g-bg { fill: none; stroke: rgba(157, 255, 113, .14); stroke-width: 3; }
.m-g { fill: none; stroke: var(--lime-400); stroke-width: 3; stroke-linecap: round; stroke-dasharray: var(--f) 1 !important; transition: stroke-dasharray 1000ms var(--draw) .4s !important; }
.motion .vz-map:not(.in) .m-g { stroke-dasharray: 0 1 !important; }
.m-tag { fill: var(--text); font-size: 22px; font-weight: 600; }
.m-tag.vn { fill: var(--lime-400); font-size: 26px; }
.vz-map .m-pct { fill: var(--lime-400); font-family: "Anton", var(--font); font-size: 34px; }
.vz-map figcaption { color: var(--muted); font-size: 13px; margin-top: 8px; }

/* 10. 30 分钟时钟环 */
.vz-clock { position: relative; width: 260px; max-width: 100%; aspect-ratio: 1; display: grid; place-items: center; }
.vz-clock svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.k-tick { stroke: rgba(242, 245, 241, .14); stroke-width: 1.5; } .k-tick.on { stroke: rgba(157, 255, 113, .5); }
.k-bg { fill: none; stroke: rgba(242, 245, 241, .06); stroke-width: 6; }
.vz-clock .k-fg { fill: none; stroke: var(--lime-400); stroke-width: 6; stroke-linecap: round; stroke-dasharray: .5 1; transition: stroke-dasharray 1100ms var(--draw); }
.motion .vz-clock:not(.in) .k-fg { stroke-dasharray: 0 1; }
.k-val { position: relative; font-family: "Anton", var(--font); font-size: 64px; line-height: 1; margin-top: -24px; }
.k-sub { position: absolute; top: 58%; color: var(--muted); font-size: 14px; }
.k-badge { position: absolute; bottom: -8px; padding: 6px 14px; border-radius: 999px; background: var(--lime-400); color: var(--ink); font-size: 13px; font-weight: 700; }

/* 11. 图形符号 */
.gl { display: block; flex: none; }
.gl-big { color: var(--text); }
.gl-big circle, .gl-big rect, .gl-big path { fill: none; stroke: currentColor; stroke-width: 1.6; }
.gl-big .gl-grow circle { fill: currentColor; stroke: none; transition: opacity 480ms var(--ease) var(--d, 0ms), transform 480ms var(--ease) var(--d, 0ms); transform-box: fill-box; transform-origin: center; }
.gl-big .gl-grow circle:nth-child(5) { fill: var(--lime-400); }
.motion [data-anim]:not(.in) .gl-grow circle:not(:nth-child(5)) { opacity: 0; transform: scale(.2); }
.gl-big .gl-net circle { fill: currentColor; stroke: none; }
.gl-big .gl-stack rect { transition: opacity 480ms var(--ease) var(--d, 0ms); }
.gl-big .gl-stack rect:last-child { stroke: var(--lime-400); }
.motion [data-anim]:not(.in) .gl-stack rect { opacity: 0; }
.gl-line { color: var(--text); }
.gl-line path, .gl-line circle, .gl-line rect { fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }

/* 12. 大数字 */
.vz-num b { display: block; font-family: "Anton", var(--font); font-weight: 400; font-size: 88px; line-height: 1; font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.vz-num.hi b { color: var(--lime-400); }
.vz-num figcaption { margin-top: 12px; color: var(--muted); font-size: 15px; line-height: 24px; max-width: 22em; }
.vz-num small { display: block; margin-top: 4px; font-size: 12px; color: var(--muted); }
@media (max-width: 639px) { .vz-num b { font-size: 60px; } }

/* 阈值图：穿越线两端的点 */
.vz-end { fill: var(--text); } .vz-end.now { fill: var(--lime-400); }
.motion [data-anim]:not(.in) .vz-end { opacity: 0; } .vz-end { transition: opacity 480ms var(--ease) var(--d, 0ms); }

/* 分组横条 */
.vz-bgroups { display: grid; gap: 28px; }
.vz-bgroup .bg-h { margin: 0 0 12px; font-size: 14px; color: var(--muted); }

/* 小时间轴：按日期等比 */
.vz-tl ol { display: block; position: relative; height: 110px; padding: 0; }
.vz-tl li { position: absolute; left: calc(var(--x) * 100%); top: 28px; width: 46%; }
.vz-tl li.future { transform: translateX(-100%); text-align: right; }
.vz-tl li.future::before { left: auto; right: 0; }
.vz-tl .tl-line { top: 22px; }
.vz-tl .tl-today { top: auto; bottom: -8px; left: calc(var(--x) * 100%); transform: translateX(-50%); padding: 0; }
.vz-tl .tl-today::before { left: 50%; top: -94px; margin-left: -5px; }

/* 投资方向同心三环 */
.vz-dr svg { width: 100%; max-width: 440px; height: auto; display: block; margin: 0 auto; }
.dr-ring { fill: none; stroke: var(--line-strong); stroke-width: 1.5; transition: stroke-dashoffset 1100ms var(--draw) var(--d, 0ms), stroke .16s ease-out, stroke-width .16s ease-out; }
.dr-ring.dr-consumer { stroke: rgba(242, 245, 241, .5); }
.dr-ring.dr-ai-compute { stroke: var(--lime-400); }
.dr-lab { fill: var(--muted); font-size: 15px; font-weight: 600; transition: opacity 480ms var(--ease) var(--d, 0ms), fill .16s ease-out; }
.dr-core { fill: var(--lime-400); }
.motion [data-anim]:not(.in) .dr-lab { opacity: 0; }
.dirs:has(.dir-row[data-k="consumer"]:hover) .dr-consumer, .dirs:has(.dir-row[data-k="consumer"]:focus-visible) .dr-consumer,
.dirs:has(.dir-row[data-k="ai-app"]:hover) .dr-ai-app, .dirs:has(.dir-row[data-k="ai-app"]:focus-visible) .dr-ai-app,
.dirs:has(.dir-row[data-k="ai-compute"]:hover) .dr-ai-compute, .dirs:has(.dir-row[data-k="ai-compute"]:focus-visible) .dr-ai-compute { stroke: var(--lime-400); stroke-width: 3; fill: var(--lime-400); }
.dirs:has(.dir-row:hover) text.dr-ring, .dirs text.dr-lab { stroke: none; stroke-width: 0; }

/* 一行三列数字 */
.vz-nrow ol { display: grid; grid-template-columns: repeat(3, 1fr); margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--line-strong); }
.vz-nrow li { padding: 20px 16px 0 0; transition: opacity 480ms var(--ease) var(--d, 0ms); }
.vz-nrow li + li { padding-left: 16px; border-left: 1px solid var(--line); }
.vz-nrow b { display: block; font-family: "Anton", var(--font); font-weight: 400; font-size: 32px; line-height: 40px; }
.vz-nrow li:first-child b { color: var(--lime-400); }
.vz-nrow span { display: block; margin-top: 8px; color: var(--muted); font-size: 14px; line-height: 22px; }
.motion .vz-nrow:not(.in) li { opacity: 0; }
/* 窄屏：三列改成三行，左数字、右说明 */
@media (max-width: 639px) {
  .vz-nrow ol { grid-template-columns: 1fr; }
  .vz-nrow li, .vz-nrow li + li { display: grid; grid-template-columns: 132px 1fr; gap: 16px; align-items: baseline; padding: 16px 0; border-left: 0; border-bottom: 1px solid var(--line); }
  .vz-nrow b { font-size: 30px; line-height: 36px; } .vz-nrow span { margin-top: 0; font-size: 14px; line-height: 21px; }
}

/* 跨语言流程 */
.vz-f3 ol { display: grid; grid-template-columns: 1fr 48px 1fr 48px 1fr; align-items: center; margin: 0; padding: 0; list-style: none; }
.f3-n { display: grid; gap: 4px; justify-items: center; text-align: center; padding: 20px 12px; border-radius: 16px; border: 1px solid var(--line-strong); transition: opacity 480ms var(--ease) var(--d, 0ms); }
.f3-n.hi { border-color: var(--lime-400); background: rgba(157, 255, 113, .07); }
.f3-n b { font-size: 15px; line-height: 22px; } .f3-n span { font-size: 12px; line-height: 18px; color: var(--muted); }
.f3-arrow span { display: block; height: 1px; margin: 0 6px; background: var(--lime-400); position: relative; }
.f3-arrow span::before, .f3-arrow span::after { content: ""; position: absolute; top: -3px; width: 7px; height: 7px; border-top: 1px solid var(--lime-400); border-right: 1px solid var(--lime-400); }
.f3-arrow span::after { right: 0; transform: rotate(45deg); } .f3-arrow span::before { left: 0; transform: rotate(-135deg); }
.motion .vz-f3:not(.in) .f3-n { opacity: 0; }

/* 地图：97% 的缺口要看得见 */
.m-g { stroke-linecap: butt; stroke-width: 4; }
.vz-nrow .nr-v { margin: 0; display: flex; align-items: baseline; flex-wrap: wrap; gap: 0 4px; }
.vz-nrow .nr-v small { font-size: 14px; color: var(--muted); }
.vz-nrow li:first-child .nr-v b { color: var(--lime-400); }
.vz-tl .tl-today { top: -4px !important; bottom: auto !important; padding: 0 0 18px !important; transform: translateX(-50%); line-height: 16px; }
.vz-tl .tl-today::before { top: 21px !important; left: 50% !important; margin-left: -5px; }

/* 投资方向：三层玻璃圆盘 */
.vz-ds svg { width: 100%; max-width: 560px; height: auto; display: block; margin: 0 auto; overflow: visible; }
.ds-plate { transition: transform 900ms var(--ease) var(--d, 0ms), opacity 600ms var(--ease) var(--d, 0ms); }
.motion .vz-ds:not(.in) .ds-plate { transform: translateY(40px); opacity: 0; }
.ds-edge { fill: none; stroke: rgba(242, 245, 241, .28); stroke-width: 1; transition: stroke .2s ease-out; }
.ds-rim { fill: none; stroke-width: 1.5; }
.ds-lip { fill: none; stroke: rgba(242, 245, 241, .12); stroke-width: 1; }
.ds-plate.top .ds-edge { stroke: rgba(157, 255, 113, .9); }
.ds-plate.top .ds-lip { stroke: rgba(157, 255, 113, .5); }
.vz-ds .ds-n { font-family: "Anton", var(--font); font-size: 13px; fill: var(--muted); letter-spacing: .08em; }
.vz-ds .ds-lab { font-size: 15px; font-weight: 600; fill: var(--text); }
.ds-plate.top .ds-lab, .ds-plate.top .ds-n { fill: var(--lime-400); }
.ds-beam { transition: opacity 900ms var(--ease) 900ms; }
.ds-spark { fill: #eaffdf; filter: drop-shadow(0 0 6px #9dff71) drop-shadow(0 0 14px #9dff71); }
.motion .vz-ds:not(.in) .ds-beam, .motion .vz-ds:not(.in) .ds-spark { opacity: 0; }
.motion .vz-ds.in .ds-spark { animation: dsPulse 2.4s ease-in-out 1.4s 2; }
@keyframes dsPulse { 50% { opacity: .35; } }
.dirs:has(.dir-row[data-k="consumer"]:hover) .ds-consumer .ds-edge, .dirs:has(.dir-row[data-k="consumer"]:focus-visible) .ds-consumer .ds-edge,
.dirs:has(.dir-row[data-k="ai-app"]:hover) .ds-ai-app .ds-edge, .dirs:has(.dir-row[data-k="ai-app"]:focus-visible) .ds-ai-app .ds-edge { stroke: var(--lime-400); stroke-width: 2; }
.dirs:has(.dir-row[data-k="consumer"]:hover) .ds-consumer, .dirs:has(.dir-row[data-k="ai-app"]:hover) .ds-ai-app, .dirs:has(.dir-row[data-k="ai-compute"]:hover) .ds-ai-compute { transform: translateY(-6px); transition-delay: 0ms; }
/* 投资方向（倒置叠层）：标签在右侧 */
.vz-ds svg { max-width: 640px; }
.vz-ds .ds-lab { font-size: 18px; font-weight: 600; fill: var(--text); }
.vz-ds .ds-lab .ds-n { font-family: "Anton", var(--font); font-size: 15px; fill: var(--muted); font-weight: 400; }
.ds-plate.top .ds-lab { fill: var(--lime-400); }
.ds-hit { fill: rgba(157, 255, 113, .9); }
/* 三国团队（不用地图） */
.vz-team svg { width: 100%; height: auto; display: block; overflow: visible; }
.tm-ring { fill: none; stroke: rgba(242, 245, 241, .06); }
.tm-arc { fill: none; stroke: rgba(157, 255, 113, .6); stroke-width: 1.5; stroke-dasharray: 1 1; }
.tm-g-bg { fill: none; stroke: rgba(157, 255, 113, .14); stroke-width: 6; }
.tm-g { fill: none; stroke: var(--lime-400); stroke-width: 6; stroke-linecap: butt; stroke-dasharray: 1 1 !important; transition: stroke-dasharray 1200ms var(--draw) .2s !important; filter: drop-shadow(0 0 8px rgba(157, 255, 113, .6)); }
.motion .vz-team:not(.in) .tm-g { stroke-dasharray: 0 1 !important; }
.vz-team .tm-pct { font-family: "Anton", var(--font); font-size: 68px; fill: var(--lime-400); }
.vz-team .tm-name { font-size: 31px; font-weight: 600; fill: var(--text); }
.vz-team .tm-sub { font-size: 29px; fill: var(--muted); }
.tm-node { transition: opacity 480ms var(--ease) var(--d, 0ms); }
.motion .vz-team:not(.in) .tm-node { opacity: 0; }
.vz-team { margin: 0; }  /* figure 默认左右各 40px 外边距，手机上会把图挤窄 */
.vz-team svg { max-width: 560px; margin: 0 auto; }
.vz-team figcaption { color: var(--muted); font-size: 14px; margin-top: 8px; }
.a-legend { display: none; }
/* 窄屏：图内文字改到图下方的列表，最小 13px */
@media (max-width: 639px) {
  .vz-arc5 .a-lab { display: none; } .a-num { font-size: 24px; }
  .a-legend { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; margin: 16px 0 0; padding: 0; list-style: none; font-size: 14px; line-height: 20px; font-weight: 600; }
  .a-legend span { margin-right: 8px; font-family: "Anton", var(--font); font-weight: 400; color: var(--muted); }
  .a-legend li:last-child span { color: var(--lime-400); }
  .vz-ds text.ds-n2 { font-size: 27px; }
}
.vz-ds .ds-n2 { font-family: "Anton", var(--font); font-size: 22px; fill: var(--muted); }
.ds-plate.top .ds-n2 { fill: var(--lime-400); }
.vz-ds svg { max-width: 560px; }
.vz-nrow ol > li { min-width: 0; overflow-wrap: anywhere; }
