/* === ORBIT.CSS === */
/* assets/css/orbit.css */
/* НАЗНАЧЕНИЕ: круговая схема "мозг в центре, источники по кругу, данные текут в центр" */
/* СВЯЗИ: luxe.css (переменные), views/partials/orbit.php */
/* Чистый CSS+SVG, без библиотек. 60fps, ~весит копейки */

.orbit{
  --orbit-size: 580px;          /* диаметр орбиты (больше воздуха) */
  --node: 86px;                 /* размер узла-источника */
  --spin: 70s;                  /* скорость вращения орбиты */
  position:relative;
  width:var(--orbit-size);
  height:var(--orbit-size);
  margin:0 auto;
  max-width:100%;
}

/* SVG со связями (под узлами) */
.orbit-lines{
  position:absolute;inset:0;width:100%;height:100%;
  overflow:visible;z-index:1;pointer-events:none;
}
.orbit-line{
  stroke:var(--gold);
  stroke-width:1;
  opacity:.22;
  fill:none;
}
/* бегущая частица данных по линии (к центру) */
.orbit-flow{
  stroke:var(--gold-bright);
  stroke-width:2.5;
  stroke-linecap:round;
  fill:none;
  stroke-dasharray:3 60;
  opacity:.9;
  animation:flow-in 2.6s linear infinite;
}
@keyframes flow-in{
  from{stroke-dashoffset:63}
  to{stroke-dashoffset:0}
}

/* вращающееся кольцо с узлами */
.orbit-ring{
  position:absolute;inset:0;
  animation:orbit-spin var(--spin) linear infinite;
  z-index:2;
}
@keyframes orbit-spin{ to{transform:rotate(360deg)} }

/* узел источника - позиционируется через --angle */
.orbit-node{
  position:absolute;top:50%;left:50%;
  width:var(--node);height:var(--node);
  margin:calc(var(--node) / -2);
  /* выносим на радиус и возвращаем угол, чтобы текст был ровным */
  transform:
    rotate(var(--angle))
    translate(calc(var(--orbit-size) / 2))
    rotate(calc(var(--angle) * -1));
}
/* контр-вращение, чтобы узлы не кувыркались вместе с кольцом */
.orbit-node-inner{
  width:100%;height:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  border:1px solid var(--line);
  border-radius:50%;
  background:radial-gradient(circle at 50% 35%, var(--surface-2), var(--surface));
  color:var(--ink);
  text-align:center;
  animation:orbit-counter var(--spin) linear infinite;
  transition:border-color .3s, transform .3s;
}
@keyframes orbit-counter{ to{transform:rotate(-360deg)} }
.orbit-node:hover .orbit-node-inner{
  border-color:var(--gold);
  box-shadow:0 0 24px -6px var(--gold-soft);
}
.orbit-node .ic{color:var(--gold)}
.orbit-node-label{
  font-size:11px;
  line-height:1.15;
  color:var(--muted);
  max-width:74px;
}
/* модули "наше" - золотая обводка ярче */
.orbit-node.is-module .orbit-node-inner{
  border-color:color-mix(in oklch, var(--gold), transparent 40%);
  background:radial-gradient(circle at 50% 35%, color-mix(in oklch,var(--gold),transparent 86%), var(--surface));
}

/* ЦЕНТР: мозг (крупнее, подпись внутри в 2 строки) */
.orbit-core{
  position:absolute;top:50%;left:50%;
  transform:translate(-50%,-50%);
  width:192px;height:192px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  border:1.5px solid var(--gold);
  border-radius:50%;
  background:radial-gradient(circle, color-mix(in oklch,var(--gold),transparent 80%), var(--surface) 72%);
  z-index:3;
  text-align:center;
}
.orbit-core::before{
  content:"";position:absolute;inset:-16px;
  border:1px solid var(--line);border-radius:50%;
  animation:core-pulse 3s ease-in-out infinite;
}
@keyframes core-pulse{
  0%,100%{transform:scale(1);opacity:.5}
  50%{transform:scale(1.07);opacity:.15}
}
.orbit-core .ic{color:var(--gold);margin-bottom:2px}
.orbit-core-title{
  font-family:var(--serif);font-size:22px;font-weight:600;color:var(--gold);line-height:1.02;
}
.orbit-core-sub{font-size:11px;color:var(--muted);line-height:1.2}

/* адаптив */
@media(max-width:1100px){ .orbit{--orbit-size:500px;--node:78px} .orbit-core{width:172px;height:172px} }
@media(max-width:900px){ .orbit{--orbit-size:400px;--node:66px;--spin:90s} .orbit-core{width:138px;height:138px} .orbit-core-title{font-size:18px} }
@media(max-width:560px){ .orbit{--orbit-size:320px;--node:54px} .orbit-node-label{font-size:9px;max-width:50px} .orbit-core{width:112px;height:112px} .orbit-core-title{font-size:15px} .orbit-core-sub{font-size:9px} }

/* пометка "скоро" для будущих источников */
.orbit-node.is-soon .orbit-node-inner{
  border-style:dashed;
  opacity:.78;
}
.orbit-soon{
  font-size:8.5px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--gold);opacity:.8;margin-top:-2px;
}

/* центрированный hero со схемой */
.hero-centered{padding:72px 0 64px}
.hero-intro{text-align:center;max-width:760px;margin:0 auto 8px}
.hero-intro .eyebrow{justify-content:center}
.hero-intro .lead{margin-left:auto;margin-right:auto}
.btns-center{justify-content:center}
.orbit-wrap{margin-top:24px;text-align:center}
.orbit-wrap .diag-title{margin-bottom:28px}

/* доступность: отключаем вращение */
@media(prefers-reduced-motion:reduce){
  .orbit-ring{animation:none}
  .orbit-node-inner{animation:none}
  .orbit-flow{animation:none;opacity:.5}
  .orbit-core::before{animation:none}
}
