
  /* 深色启动仪表盘；十套配色与对比度规则统一维护在 _配色.html。 */
  :root{
    --底:#070B08; --面:#0D130F; --面2:#111815; --线:#28372E;
    --绿:#3FE07F; --绿膜:rgba(var(--雷达RGB),.09);
    --字:#E8F1EB; --淡:#8A968F;
    --转:8s;                      /* 雷达一圈的时间，节点脉冲跟它对齐 */
  }
  *{box-sizing:border-box}
  html,body{height:100%}
  body{margin:0;background:var(--底);color:var(--字);overflow:hidden;
       font:15px/1.75 "Microsoft YaHei","PingFang SC",-apple-system,sans-serif;
       -webkit-font-smoothing:antialiased}
  /* 数字和标记走等宽 —— 这是台仪表盘，数字要对得齐 */
  .mono{font-family:ui-monospace,"Cascadia Mono",Consolas,monospace;
        font-variant-numeric:tabular-nums}

  .屏{display:flex;width:100vw;height:100vh}

  /* ══ 左：雷达 ══ */
  .左{width:50%;flex-shrink:0;position:relative;display:flex;flex-direction:column;
      padding:22px 26px 24px;overflow:hidden;
      background:radial-gradient(120% 90% at 30% 18%,var(--雷达环境) 0%,var(--底) 62%)}

  .牌{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;
      border:1px solid var(--线);border-radius:99px;padding:6px 14px;
      font-size:12px;color:var(--淡);letter-spacing:.4px}
  .牌 i{width:6px;height:6px;border-radius:50%;background:var(--绿);
        box-shadow:0 0 8px var(--绿);animation:呼吸 2.4s ease-in-out infinite}
  @keyframes 呼吸{0%,100%{opacity:1}50%{opacity:.3}}

  .台{flex:1;display:grid;place-items:center;min-height:0}
  .雷达{position:relative;width:min(760px,68vh);aspect-ratio:1}

  .圈{position:absolute;inset:0;margin:auto;border-radius:50%;
      border:1px dashed rgba(var(--雷达RGB),.2)}
  .圈.c1{width:34%;height:34%}
  .圈.c2{width:64%;height:64%}
  .圈.c3{width:94%;height:94%;border-style:solid;border-color:rgba(var(--雷达RGB),.12)}

  /* 圈外的信号：从面板四周飞向雷达。跟圈内的回流粒子接上，
     整条链是「四周的源 → 雷达 → 核心」 */
  .外{position:absolute;inset:0;overflow:hidden;pointer-events:none}
  .流{position:absolute;width:var(--长);height:3px;border-radius:3px;
      transform-origin:0 50%;
      background:linear-gradient(to right,transparent,var(--绿));
      box-shadow:0 0 14px rgba(var(--雷达RGB),.5);
      animation:飞入 var(--时) cubic-bezier(.3,0,.6,1) infinite backwards}
  @keyframes 飞入{
    0%  {transform:rotate(var(--角)) translateX(0) scaleX(.3);opacity:0}
    12% {opacity:1}
    58% {opacity:.7}
    100%{transform:rotate(var(--角)) translateX(var(--程)) scaleX(1);opacity:0}
  }

  /* 浮尘：常驻的一层，专门保证圈外那片空白任何时刻都有东西在动。
     信号线是间歇的（一条飞完才轮到下一条），中间会有几秒空档，
     光靠它那片区域看着还是死的 */
  .尘{position:absolute;width:var(--径);height:var(--径);border-radius:50%;
      background:var(--绿);box-shadow:0 0 12px rgba(var(--雷达RGB),.7);
      animation:浮 var(--时) ease-in-out infinite alternate backwards}
  @keyframes 浮{
    0%  {transform:translate(0,0) scale(.5);opacity:.25}
    50% {opacity:1}
    100%{transform:translate(var(--dx),var(--dy)) scale(1.2);opacity:.4}
  }

  /* 内圈：采到的是什么。外圈说「从哪儿采」，内圈说「采到什么」 */
  .内{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;
      font-size:11px;color:var(--淡);letter-spacing:.5px;
      animation:内闪 var(--转) linear infinite backwards}
  @keyframes 内闪{
    0%,6%{color:var(--绿);text-shadow:0 0 12px rgba(var(--雷达RGB),.6)}
    18%,100%{color:var(--淡);text-shadow:none}
  }

  /* 环境光斑：填雷达周围那片空白。很淡，只做氛围不抢主体 */
  .左::before,.斑2{content:"";position:absolute;border-radius:50%;pointer-events:none;
      background:radial-gradient(circle,rgba(var(--雷达RGB),.07),transparent 70%)}
  .左::before{width:560px;height:560px;left:-160px;top:-140px;
      animation:飘A 24s ease-in-out infinite alternate}
  .斑2{width:460px;height:460px;right:-130px;bottom:60px;
      background:radial-gradient(circle,rgba(var(--雷达RGB),.05),transparent 70%);
      animation:飘B 31s ease-in-out infinite alternate}
  @keyframes 飘A{to{transform:translate(70px,50px) scale(1.12)}}
  @keyframes 飘B{to{transform:translate(-60px,-46px) scale(1.08)}}

  /* 刻度圈：仪器表圈。反向慢转，跟扫描线形成相对运动，层次就出来了 */
  .刻{position:absolute;inset:-5%;border-radius:50%;pointer-events:none;
      background:repeating-conic-gradient(from 0deg,
        rgba(var(--雷达RGB),.22) 0deg .45deg, transparent .45deg 6deg);
      -webkit-mask:radial-gradient(circle,transparent 47.5%,#000 48.5%,
                   #000 50%,transparent 51%);
              mask:radial-gradient(circle,transparent 47.5%,#000 48.5%,
                   #000 50%,transparent 51%);
      animation:反转 44s linear infinite}
  @keyframes 反转{to{transform:rotate(-360deg)}}

  /* 数据粒子：从源节点沿半径流回中心 —— 采集就是把数据收回来 */
  .轨{position:absolute;left:50%;top:50%;width:37%;height:0;
      transform-origin:0 0;pointer-events:none}
  /* 拖尾朝外、头朝内 —— 轨道本身是从中心往外转的，所以尾在 right */
  .粒{position:absolute;top:-2px;width:26px;height:4px;border-radius:2px;
      background:linear-gradient(to left,transparent,var(--绿));
      box-shadow:0 0 10px rgba(var(--雷达RGB),.55);
      /* backwards 不能省：animation-delay 还没到的时候，元素用的是「没动画」
         那套样式 —— left 没设就落在轨道原点，也就是正中间，会一直压住「38」。
         加了 backwards 才会在等待期间就摆成第一帧（在最外圈、透明）。 */
      animation:回流 3.4s cubic-bezier(.35,0,.65,1) infinite backwards}
  .粒::after{content:"";position:absolute;left:-2px;top:-1px;width:6px;height:6px;
      border-radius:50%;background:var(--绿);box-shadow:0 0 14px var(--绿)}
  @keyframes 回流{
    0%{left:100%;opacity:0}
    14%{opacity:.95}
    64%{opacity:.8}
    88%,100%{left:34%;opacity:0}   /* 停在核心球的光晕外面，别压住「38」 */
  }

  /* 核心涟漪：收到东西时从中心荡开一圈 */
  .漪{position:absolute;left:50%;top:50%;width:124px;height:124px;
      margin:-62px 0 0 -62px;border-radius:50%;pointer-events:none;
      border:1px solid rgba(var(--雷达RGB),.45);
      animation:荡开 3.4s cubic-bezier(.2,.6,.4,1) infinite}
  @keyframes 荡开{
    0%{transform:scale(1);opacity:.55}
    70%{opacity:0}
    100%{transform:scale(3.1);opacity:0}
  }

  /* 扫描线：一道扇形光绕中心转。醒狮右手举的就是雷达屏，这是它的延伸 */
  .扫{position:absolute;inset:0;border-radius:50%;
      background:conic-gradient(from 0deg,
        rgba(var(--雷达RGB),.28) 0deg, rgba(var(--雷达RGB),.09) 26deg,
        transparent 60deg, transparent 360deg);
      animation:转 var(--转) linear infinite;
      -webkit-mask:radial-gradient(circle,transparent 14%,#000 15%);
              mask:radial-gradient(circle,transparent 14%,#000 15%)}
  @keyframes 转{to{transform:rotate(360deg)}}

  .芯{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
      width:124px;height:124px;border-radius:50%;display:grid;place-items:center;
      background:radial-gradient(circle,var(--核心亮),var(--核心暗));
      border:1px solid rgba(var(--雷达RGB),.45);
      box-shadow:0 0 0 10px rgba(var(--雷达RGB),.045),0 0 46px rgba(var(--雷达RGB),.24)}
  .芯 b{font-size:37px;color:var(--绿);line-height:1;letter-spacing:-1px}
  .芯 span{font-size:11px;color:var(--淡);margin-top:2px}

  /* 源节点：扫描线扫到就亮一下 */
  .泡{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;
      padding:7px 15px;border-radius:99px;font-size:13.5px;
      background:var(--面2);border:1px solid var(--线);color:var(--淡);
      animation:亮 var(--转) linear infinite}
  @keyframes 亮{
    0%,7%{border-color:var(--绿);color:var(--绿);background:var(--品牌浅);
          box-shadow:0 0 16px rgba(var(--雷达RGB),.34)}
    20%,100%{border-color:var(--线);color:var(--淡);background:var(--面2);
             box-shadow:none}
  }

  .题{text-align:center;margin-top:0}
  .题 h1{margin:0;font-size:min(38px,4.2vh);font-weight:800;letter-spacing:6px;
         color:var(--绿);text-shadow:0 0 30px rgba(var(--雷达RGB),.45)}
  .题 p{margin:7px 0 0;color:var(--淡);font-size:12.5px;letter-spacing:2px}

  .脚{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
      background:var(--线);border:1px solid var(--线);border-radius:12px;
      overflow:hidden;margin-top:16px}
  .脚 div{background:var(--面);padding:11px 8px;text-align:center}
  .脚 b{display:block;font-size:20px;color:var(--绿);font-weight:700}
  .脚 span{font-size:12px;color:var(--淡)}

  :root{--底:#11192f;--面:#1b2946;--面2:#263654;--字:#fff5df;--淡:#c6c8cd;--线:#4c5e7c;--线重:#7c8ba4;--绿:#f5b642;--品牌浅:#3d3224;--雷达环境:#28334a;--核心亮:#493f2c;--核心暗:#202c40;--雷达RGB:245,182,66;color-scheme:dark}
button,a,summary{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--绿);outline-offset:5px}button{color:var(--字)}
.屏{height:100svh}.左{width:43%;padding:30px 32px 26px}.brandbar{display:flex;align-items:center;justify-content:space-between;z-index:1}.牌{padding:6px 12px 6px 8px;gap:8px}.牌 img{border-radius:50%}.motion{border:1px solid var(--线);border-radius:50%;width:30px;height:30px;background:transparent;color:var(--淡);font-size:13px}.台{padding:10px 0}.雷达{width:min(100%,65vh)}.题{z-index:1}.题 h1{font-size:clamp(32px,3.4vw,50px);letter-spacing:8px}.题 p{font-size:13px;letter-spacing:1.5px}.芯{display:flex;flex-direction:column;gap:14px}.芯 b{font-size:42px}.脚{flex-shrink:0;margin-top:20px}.脚 div{padding:13px 8px}.脚 b{font-size:24px}.脚 span{font-size:12px}
.右{width:57%;display:flex;flex-direction:column;border-left:1px solid var(--线);min-width:0}.头{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:28px 30px;border-bottom:1px solid var(--线);flex-shrink:0}.heading{display:flex;gap:10px;align-items:center}.头 h2{margin:0;display:flex;align-items:center;gap:10px;font-size:21px;letter-spacing:1px}.头 em{font-style:normal;font-size:11px;color:var(--绿);border:1px solid #786034;border-radius:99px;padding:2px 9px;letter-spacing:0;white-space:nowrap}.help{border:1px solid var(--线重);border-radius:50%;color:var(--淡);background:transparent;width:22px;height:22px;padding:0;line-height:20px}.home{background:#f5a623;border:1px solid #f5a623;border-radius:9px;color:#17253f;font-weight:700;font-size:13px;padding:10px 17px;white-space:nowrap;transition:background .2s}.home:hover{background:#ffc15b}.home span{margin-left:12px}.身{overflow-y:auto;min-height:0;padding:0 28px 20px;scrollbar-width:thin;scrollbar-color:var(--线重) transparent}.身::-webkit-scrollbar{width:6px}.身::-webkit-scrollbar-thumb{background:var(--线重);border-radius:8px}
.group{margin-top:16px;background:var(--面);border:1px solid var(--线);border-radius:14px;padding:14px;transition:border-color .2s}.group-heading{display:flex;align-items:center;gap:11px;list-style:none;border-radius:6px;padding:0 1px}.number{border:1px solid #8b6a32;background:#352f26;border-radius:8px;display:grid;place-items:center;width:35px;height:35px;color:var(--绿);font-size:19px;flex-shrink:0}.group h2{margin:0;color:var(--绿);font-size:16px;letter-spacing:.5px;flex:1}.count{border:1px solid var(--线);border-radius:99px;padding:2px 9px;color:var(--淡);font:11px/1.6 ui-monospace,monospace;white-space:nowrap}.sources{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:14px 0 0;padding:0}.source{border:1px solid var(--线);border-radius:10px;background:var(--底);padding:13px 14px;min-height:84px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:8px}.source h3{margin:0;font-size:15px;font-weight:600;line-height:1.35}.status{font-size:10px;line-height:1.6;display:inline-flex;gap:5px;align-items:center;color:#bec7d5}.status i{width:4px;height:4px;border-radius:50%;background:#93a0b5}.ready .status{color:#f6c766}.ready .status i{background:#f6c766;box-shadow:0 0 8px #f6c76666}.unavailable{border-style:dashed}.unavailable h3{color:#b3bdce}.catalog-footer{display:flex;justify-content:space-between;gap:12px;align-items:center;color:#b0b9c9;font-size:10px;margin:21px 2px 0}.catalog-footer button{padding:0;background:none;border:0;color:var(--淡);font-size:11px;white-space:nowrap}
.skip{position:absolute;top:-100px;left:20px;z-index:20;background:var(--绿);color:var(--底);padding:8px 16px}.skip:focus{top:12px}dialog{max-width:460px;width:calc(100% - 36px);background:var(--面);color:var(--字);border:1px solid var(--线重);border-radius:16px;padding:28px;box-shadow:0 24px 100px #0009}dialog::backdrop{background:#040812b8;backdrop-filter:blur(5px)}dialog h2{font-size:22px;margin:8px 0 18px}dialog p{font-size:14px;color:var(--淡)}dialog .note{font-size:12px;border-top:1px solid var(--线);padding-top:14px;margin-bottom:0}.eyebrow{font-size:12px;color:var(--绿);letter-spacing:2px}.close{position:absolute;right:14px;top:12px;border:0;background:transparent;font-size:24px;color:var(--淡)}body.paused *,body.paused *:before{animation-play-state:paused!important}
@media(min-width:1700px){.左{padding:34px 40px}.头{padding:34px 34px}.身{padding-inline:34px}.source{min-height:102px;padding:18px}.source h3{font-size:18px}.status{font-size:12px}.group{padding:18px}.group h2{font-size:18px}.group-heading{gap:14px}.number{width:42px;height:42px}.count,}
@media(max-width:1100px){.左{width:42%;padding:22px}.右{width:58%}.头{padding:22px 20px}.头 h2{font-size:18px}.身{padding:0 18px 18px}.source{padding:11px;min-height:80px}.source h3{font-size:13px}.group h2{font-size:14px}.group{padding:11px}.group-heading{gap:8px}.count{padding:2px 6px}.泡{font-size:11px;padding:6px 10px}.芯{width:105px;height:105px}.芯 b{font-size:36px}.内{font-size:10px}}
@media(max-width:800px){html,body{height:auto;overflow:auto}.屏{height:auto;display:block;width:100%}.左{width:100%;min-height:720px;min-height:min(860px,100svh);padding:22px 26px 24px}.台{min-height:310px}.雷达{width:min(95%,470px,59svh)}.右{width:100%;border-left:0;border-top:1px solid var(--线);overflow:visible}.头{padding:23px 22px}.身{overflow:visible;padding:0 18px 24px}.题 h1{font-size:40px}.脚{margin-top:20px}.源{font-size:14px}.group{padding:14px}.group h2{font-size:16px}.source h3{font-size:15px}.source{min-height:88px}.catalog-footer{font-size:10px}.头 h2{font-size:20px}}
@media(max-width:450px){.左{padding:18px 20px 22px;min-height:690px}.雷达{width:min(100%,380px)}.题 h1{font-size:36px}.题 p{font-size:11px}.脚 div{padding:11px 4px}.脚 span{font-size:10px}.脚 b{font-size:23px}.泡{font-size:11px;padding:6px 9px}.芯{width:98px;height:98px}.芯 b{font-size:33px}.芯 span{font-size:10px}.sources{grid-template-columns:repeat(2,minmax(0,1fr))}.group-heading{gap:7px}.group h2{font-size:14px;letter-spacing:0}.number{width:28px;height:30px;font-size:15px}.count{font-size:9px;padding:2px 6px}.头{padding:20px}.头 h2{font-size:19px;gap:7px}.home{padding:9px 12px;font-size:12px}.home span{margin-left:4px}.heading{gap:7px}.头 em{font-size:10px;padding:2px 7px}.身{padding-inline:14px}}
@media(prefers-reduced-motion:reduce){*,*:before{animation:none!important;scroll-behavior:auto!important}.扫{transform:rotate(38deg)}.motion{display:none}}
