/* ==========================================================================
   LAWHUB 1.8 — Professional network visuals
   1. Slide 6 miniature (net-mini--orbit), unchanged from 1.6.6
   2. "Professional Space" Legal Universe (assets/js/legal-universe.js)
   Every colour in the Legal Universe is a token, defined for both modes.
   ========================================================================== */

/* ---- 1. Slide 6 miniature ------------------------------------------------ */
.net-mini--orbit .net-mini__orbit {stroke:#8ca9c9;stroke-opacity:.44;fill:none;}
.net-mini--orbit .net-mini__orbit path {fill:none;stroke-width:1.85;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none!important;stroke-dashoffset:0!important;animation:none!important;vector-effect:non-scaling-stroke;}
.net-mini--orbit .net-mini__ring {stroke-opacity:1;stroke-width:1.95;}
.net-mini--orbit .net-mini__spoke {stroke-opacity:.62;stroke-width:1.45;}
.net-mini--orbit .net-mini__n circle{fill:#203650;stroke:#a3bdd7;stroke-width:1.6;filter:drop-shadow(0 5px 7px rgba(0,10,27,.18));}
.net-mini--orbit .net-mini__n circle:first-child{fill:#203650;stroke:#bfdaef;stroke-width:1.9;}
.net-mini--orbit .net-mini__people {display:block!important;stroke:#d4e4f6;stroke-width:1.62;stroke-opacity:.96;}
.net-mini--orbit .net-mini__p{fill:#a5d9ee;opacity:.75;}
html[data-theme="light"] .net-mini--orbit .net-mini__orbit {stroke:#6085ac;stroke-opacity:.69;}
html[data-theme="light"] .net-mini--orbit .net-mini__ring {stroke-opacity:.94;}
html[data-theme="light"] .net-mini--orbit .net-mini__spoke {stroke-opacity:.64;}
html[data-theme="light"] .net-mini--orbit .net-mini__n circle,
html[data-theme="light"] .net-mini--orbit .net-mini__n circle:first-child {fill:#f8fcff;stroke:#6c94bc;stroke-width:1.75;filter:drop-shadow(0 3px 5px rgba(30,71,113,.15)) drop-shadow(0 9px 13px rgba(29,77,123,.11));}
html[data-theme="light"] .net-mini--orbit .net-mini__n circle:first-child {fill:#dce9f6;stroke:#547da5;}
html[data-theme="light"] .net-mini--orbit .net-mini__people {stroke:#365f87;stroke-width:1.7;}
html[data-theme="light"] .net-mini--orbit .net-mini__p {fill:#4c89bd;opacity:.76;}
@media (prefers-reduced-motion: reduce) { .net-mini--orbit .net-mini__p { display: none !important; } }

/* ---- 2. Legal Universe ---------------------------------------------------- */
.lu {
  /* Night */
  --lu-facade-a: rgba(194, 205, 218, .46);
  --lu-facade-b: rgba(194, 205, 218, .04);
  --lu-orbit: rgba(194, 205, 218, .24);
  --lu-orbit-soft: rgba(194, 205, 218, .13);
  --lu-spoke: rgba(188, 212, 238, .26);
  --lu-spoke-hot: rgba(206, 226, 246, .85);
  --lu-core-a: #2c4361;
  --lu-core-b: #14233a;
  --lu-core-line: rgba(194, 205, 218, .32);
  --lu-core-ring: rgba(188, 212, 238, .20);
  --lu-glow: rgba(160, 196, 232, .34);
  --lu-badge: #1b2c43;
  --lu-badge-line: rgba(188, 212, 238, .52);
  --lu-icon: #c6dbf1;
  --lu-pulse: #d8e8f8;
  --lu-halo: rgba(188, 212, 238, .75);
  --lu-chip: rgba(15, 26, 42, .9);
  --lu-chip-line: rgba(194, 205, 218, .22);
  --lu-chip-text: #e7eef7;
  --lu-shadow: rgba(2, 8, 18, .5);
  --lu-field: radial-gradient(ellipse 58% 54% at 50% 50%, rgba(113, 158, 199, .10), transparent 72%);

  position: relative;
  width: 100%;
  max-width: 640px;
  margin: 0 auto;
  padding: 0;
  background: var(--lu-field);
  border-radius: 32px;
}
html[data-theme="light"] .lu {
  /* Day: ivory-white field, cool-blue line-work, deep-navy nucleus */
  --lu-facade-a: rgba(46, 84, 128, .55);
  --lu-facade-b: rgba(46, 84, 128, .06);
  --lu-orbit: rgba(43, 82, 124, .30);
  --lu-orbit-soft: rgba(43, 82, 124, .15);
  --lu-spoke: rgba(36, 87, 128, .30);
  --lu-spoke-hot: rgba(26, 72, 115, .85);
  --lu-core-a: #2a4566;
  --lu-core-b: #14233a;
  --lu-core-line: rgba(20, 35, 58, .45);
  --lu-core-ring: rgba(36, 87, 128, .24);
  --lu-glow: rgba(98, 146, 197, .30);
  --lu-badge: #ffffff;
  --lu-badge-line: rgba(36, 87, 128, .44);
  --lu-icon: #245780;
  --lu-pulse: #2c67a0;
  --lu-halo: rgba(36, 87, 128, .55);
  --lu-chip: rgba(255, 255, 255, .96);
  --lu-chip-line: rgba(33, 60, 89, .16);
  --lu-chip-text: #172740;
  --lu-shadow: rgba(30, 68, 112, .20);
  --lu-field: radial-gradient(ellipse 58% 54% at 50% 50%, rgba(170, 199, 230, .30), rgba(225, 236, 248, .10) 55%, transparent 74%);
}

.lu__svg { display: block; width: 100%; height: auto; overflow: visible; }

.lu .lu-stop--facade-a { stop-color: var(--lu-facade-a); }
.lu .lu-stop--facade-b { stop-color: var(--lu-facade-b); }
.lu .lu-stop--core-a { stop-color: var(--lu-core-a); }
.lu .lu-stop--core-b { stop-color: var(--lu-core-b); }
.lu .lu-stop--glow { stop-color: var(--lu-glow); }
.lu .lu-stop--glow-0 { stop-color: var(--lu-glow); stop-opacity: 0; }

/* Facade — drawn once on first view, then still */
.lu-facade { fill: none; stroke-width: 1.1; stroke-linecap: round; stroke-linejoin: round; }
.lu-draw { stroke-dasharray: 1400; stroke-dashoffset: 0; }
.js .lu.reveal:not(.is-in) .lu-draw { stroke-dashoffset: 0; }
.js .lu.is-in .lu-draw { animation: lu-draw 2.4s var(--ease-soft) both; animation-delay: calc(var(--i) * 120ms); }
@keyframes lu-draw { from { stroke-dashoffset: 1400; } to { stroke-dashoffset: 0; } }

/* Orbits — one weight family */
.lu-orbit { fill: none; stroke: var(--lu-orbit); stroke-width: 1.1; vector-effect: non-scaling-stroke; }
.lu-orbit--main { stroke-width: 1.25; }
.lu-orbit--tilt { stroke: var(--lu-orbit-soft); stroke-dasharray: 2 7; }
.lu-orbit--inner { stroke: var(--lu-orbit); stroke-dasharray: 1 7; }
.lu-orbit--faint { stroke: var(--lu-orbit-soft); }
.lu-spin { transform-box: view-box; transform-origin: 320px 292px; }
.lu.is-running .lu-spin { animation: em-orbit 120s linear infinite; }

/* Gentle orbital movement: dashes drift along the mirrored orbits, in
   opposite directions, at one shared slow tempo. */
.lu.is-running .lu-drift { animation: lu-drift 18s linear infinite; }
.lu.is-running .lu-drift--rev { animation-direction: reverse; }
@keyframes lu-drift { to { stroke-dashoffset: -90; } }

/* Spokes and pulses */
.lu-spoke {
  fill: none;
  stroke: var(--lu-spoke);
  stroke-width: 1.1;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
  transition: stroke var(--t-med) var(--ease-out);
}
.lu-spoke.is-hot { stroke: var(--lu-spoke-hot); }
.lu-pulse { fill: var(--lu-pulse); filter: drop-shadow(0 0 3px var(--lu-halo)); }

/* Nucleus — the dominant anchor */
.lu-core__ring { fill: none; stroke: var(--lu-core-ring); stroke-width: 1.1; }
.lu-core__disc {
  stroke: var(--lu-core-line);
  stroke-width: 1.2;
  filter: drop-shadow(0 18px 26px var(--lu-shadow)) drop-shadow(0 0 22px var(--lu-glow));
}
.lu .lh-mark--lu { width: 104px; height: 62.4px; }
/* The nucleus disc is navy in both modes, so the mark keeps its light finish. */
html[data-theme="light"] .lu .lh-mark--lu { --lh-top: #ffffff; --lh-bot: #b6d5f2; --lh-arc: #e1effe; }

/* Stations */
.lu-station { cursor: default; }
.lu-badge {
  fill: var(--lu-badge);
  stroke: var(--lu-badge-line);
  stroke-width: 1.3;
  filter: drop-shadow(0 6px 10px var(--lu-shadow));
  transition: stroke var(--t-med) var(--ease-out);
}
.lu-badge__icon { color: var(--lu-icon); pointer-events: none; }
.lu-badge__icon .emblem { width: 24px; height: 24px; }
.lu-halo { fill: none; stroke: var(--lu-halo); stroke-width: 1.2; }
.lu-station.is-hot .lu-badge { stroke: var(--lu-spoke-hot); }

/* Labels — measured chips, never crossed by line-work */
.lu-label__bg {
  fill: var(--lu-chip);
  stroke: var(--lu-chip-line);
  stroke-width: 1;
  filter: drop-shadow(0 6px 12px var(--lu-shadow));
  transition: stroke var(--t-med) var(--ease-out);
}
.lu-label__text {
  fill: var(--lu-chip-text);
  font-family: var(--f-body);
  font-weight: 500;
  letter-spacing: .01em;
}
.lu-label.is-hot .lu-label__bg { stroke: var(--lu-spoke-hot); }

/* Calm focus: hovering one station quietens the others */
.lu.is-focus .lu-station:not(.is-hot),
.lu.is-focus .lu-label:not(.is-hot) { opacity: .62; transition: opacity var(--t-med) var(--ease-out); }
.lu-station, .lu-label { transition: opacity var(--t-med) var(--ease-out); }

@media (max-width: 979px) {
  .lu { max-width: 600px; }
}
@media (prefers-reduced-motion: reduce) {
  .lu-draw { animation: none !important; stroke-dashoffset: 0 !important; }
  .lu-spin, .lu-drift { animation: none !important; }
}
