/* 图标里唯一的琥珀落点：与 Logo 同义 —— 智能落在连接处 */
.dot{fill:#F5A623}

/* ============================================================
   卡片内的「活体图形」 —— 全部纯 SVG + CSS，无请求、无依赖
   原则：每段动画的末帧都等于静止态，reduced-motion 下依然完整
   ============================================================ */

/* ---------- 通用 ---------- */
.viz{display:block;width:100%;height:100%}
.viz .trunk{fill:none;stroke:#CBD3DF;stroke-width:2;stroke-linecap:round}
.viz .branch{fill:none;stroke:#DCE2EA;stroke-width:2;stroke-linecap:round}

/* ---------- RK API：请求沿主干跑，到分岔点散开 ---------- */
.viz--api .node{fill:#0A1628;opacity:.32}
.viz--api .node.amber{fill:#F5A623;opacity:1}
.viz--api .pulse{
  fill:#F5A623;
  animation:apiRun 3.4s cubic-bezier(.4,0,.4,1) infinite;
}
.viz--api .p2{animation-delay:1.7s}
@keyframes apiRun{
  0%{transform:translateX(0);opacity:0}
  12%{opacity:1}
  70%{transform:translateX(126px);opacity:1}
  82%{transform:translateX(132px);opacity:0}
  100%{transform:translateX(132px);opacity:0}
}
.viz--api .node.n2,.viz--api .node.n3{
  animation:nodeBlink 3.4s var(--e-soft) infinite;
}
.viz--api .node.n3{animation-delay:.18s}
@keyframes nodeBlink{
  0%,62%{opacity:.35;transform:scale(1)}
  74%{opacity:1;transform:scale(1.5)}
  100%{opacity:.35;transform:scale(1)}
}
.viz--api .node{transform-box:fill-box;transform-origin:center}

/* ---------- RK 技能：六边形依次点亮，中心核常明 ---------- */
.viz--skill .hx{
  fill:none;stroke:#CFD7E2;stroke-width:2;stroke-linejoin:round;
  animation:hexLight 4.2s var(--e-soft) infinite;
}
.viz--skill .h2{animation-delay:.35s}
.viz--skill .h3{animation-delay:.7s}
@keyframes hexLight{
  0%,100%{stroke:#CFD7E2;fill:none}
  18%,46%{stroke:#F5A623;fill:rgba(245,166,35,.14)}
}
.viz--skill .core{
  fill:#F5A623;
  transform-box:fill-box;transform-origin:center;
  animation:corePop 4.2s var(--e-soft) infinite;
}
@keyframes corePop{
  0%,100%{transform:scale(1);opacity:.92}
  40%{transform:scale(1.28);opacity:1}
}

/* ---------- RK Agent：气泡逐条落下，最后一粒琥珀 ---------- */
.viz--agent .bub{
  fill:#E8ECF2;
  transform-box:fill-box;transform-origin:left center;
  animation:bubIn 5s var(--e-out) infinite;
}
.viz--agent .b2{animation-delay:.5s;fill:#DFE5EE}
.viz--agent .b3{animation-delay:1s;fill:rgba(245,166,35,.22)}
@keyframes bubIn{
  0%{transform:scaleX(0);opacity:0}
  10%{transform:scaleX(1);opacity:1}
  84%{transform:scaleX(1);opacity:1}
  100%{transform:scaleX(1);opacity:1}
}
.viz--agent .dot-amber{
  fill:#F5A623;transform-box:fill-box;transform-origin:center;
  animation:dotBlink 2.5s var(--e-soft) infinite;
}
@keyframes dotBlink{
  0%,100%{opacity:.45;transform:scale(.85)}
  50%{opacity:1;transform:scale(1)}
}

/* ---------- RK Team：用量柱呼吸，趋势线流动 ---------- */
.viz--team .tb{
  fill:#DDE3EC;
  transform-box:fill-box;transform-origin:bottom;
  animation:barBreath 6s var(--e-soft) infinite;
}
.viz--team .tb:nth-child(2n){animation-delay:.5s;fill:#D4DCE7}
.viz--team .tb:nth-child(3n){animation-delay:1.1s}
@keyframes barBreath{
  0%,100%{transform:scaleY(1)}
  50%{transform:scaleY(.72)}
}
.viz--team .team-line{
  fill:none;stroke:#3DD6C0;stroke-width:1.6;stroke-linecap:round;
  stroke-dasharray:5 8;opacity:.75;
  animation:traceFlow2 8s linear infinite;
}
@keyframes traceFlow2{to{stroke-dashoffset:-260}}
.viz--team .team-dot{
  fill:#F5A623;
  transform-box:fill-box;transform-origin:center;
  animation:corePop 5s var(--e-soft) infinite;
}

/* ---------- 深色区内的文字链 ---------- */
.tlink--onDark{
  color:var(--white);
  border-color:rgba(255,255,255,.22);
}
.tlink--onDark:hover{color:var(--amber);border-color:var(--amber)}

/* ---------- 场景卡内的页脚 ---------- */
.scene .card__foot{
  position:relative;z-index:1;
  margin-top:var(--s5);
  display:flex;align-items:center;
}

/* ---------- 仪表盘数字 ---------- */
.dash .kpi__val .num{font-variant-numeric:tabular-nums}

/* ---------- 数据条：数字入场时的一次光扫 ---------- */
.stat__num{position:relative}
.stat.is-in .stat__num::after{
  content:"";position:absolute;inset:-4px -10px;pointer-events:none;
  background:linear-gradient(100deg,transparent 30%,rgba(245,166,35,.22),transparent 70%);
  transform:translateX(-120%);
  animation:sheen 1100ms var(--e-out) 260ms 1 both;
}
@keyframes sheen{to{transform:translateX(120%)}}

/* ---------- 页脚水印缓慢呼吸 ---------- */
.foot__wm{animation:wmBreathe 14s var(--e-soft) infinite}
@keyframes wmBreathe{
  0%,100%{opacity:.04;transform:translateY(0)}
  50%{opacity:.075;transform:translateY(-10px)}
}
/* 场景区：与上一屏对齐，靠留白而非分隔线断句 */
.scenes-sec{padding-top:clamp(72px,8vh,112px)}
