.network-globe { position: relative; width: 100%; height: 100%; }
/* The poster includes 100px of transparent padding on each side of its 600px
   composition. Let that atmosphere extend beyond the original image bounds. */
.network-globe__poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; transform: scale(1.3333333333); pointer-events: none; opacity: 1; transition: opacity .6s ease; }
.network-globe__scene { position: absolute; inset: 0; opacity: 0; transition: opacity .6s ease; }
.network-globe--hero:not(.is-ready) .network-globe__poster,
.network-globe--hero:not(.is-ready) .network-globe__scene { will-change: opacity; }
.network-globe--hero .network-globe__poster,
.network-globe--hero .network-globe__scene { transition-duration: .42s; }
.network-globe.is-revealing .network-globe__scene, .network-globe.is-ready .network-globe__scene { opacity: 1; }
.network-globe.is-revealing .network-globe__poster, .network-globe.is-ready .network-globe__poster { opacity: 0; }
.network-globe.is-ready .network-globe__poster { visibility: hidden; }
/* Failed WebGL must restore the poster immediately, including mid-transition. */
.network-globe[data-state="fallback"] .network-globe__poster { opacity: 1; visibility: visible; transition: none; }
.network-globe--hero { height: 540px; }
/* globe.gl's HTML marker layer sets inline pointer-events:auto. The passive
   hero must leave every layer transparent to page scrolling and clicks. */
.network-globe--hero, .network-globe--hero * { pointer-events: none !important; touch-action: pan-y; }
.network-globe--network { cursor: grab; }
.network-globe--network:active, .network-globe--network.is-dragging { cursor: grabbing; }
.network-globe--network canvas { touch-action: none; }
.network-globe--network canvas:focus-visible { outline: 2px solid rgba(34,211,238,.72); outline-offset: -4px; }
.network-globe canvas { outline: none; }
.network-globe .globe-marker { position: relative; line-height: 0; }
.network-globe .gm-dot { display: block; width: 10px; height: 10px; border-radius: 50%; background: #f8fafc; border: 2px solid #fbbf24; box-shadow: 0 0 5px rgba(251,191,36,.58); }
.network-globe--network .globe-marker--sensor { width: 20px; height: 20px; margin: -10px 0 0 -10px; pointer-events: auto; }
.network-globe--network .gm-sensor-hit { display: block; width: 20px; height: 20px; border-radius: 50%; }
.network-globe--hero .globe-marker--featured { z-index: 2; }
.gm-location { position: absolute; bottom: 14px; padding: 6px 10px; border: 1px solid rgba(148,163,184,.25); border-radius: 6px; background: rgba(10,16,36,.92); color: #e2e8f0; font: 500 12px/1.4 'Inter', sans-serif; white-space: nowrap; box-shadow: 0 4px 16px rgba(0,0,0,.2); }
.gm-location__city, .gm-location__country { display: block; }
.gm-location__country { margin-top: 1px; color: #94a3b8; font-size: 10px; font-weight: 500; }
.gm-location::after { content: ''; position: absolute; bottom: -12px; width: 1px; height: 11px; background: rgba(251,191,36,.65); }
.gm-location--left { right: 3px; border-bottom-right-radius: 0; }
.gm-location--left::after { right: -1px; }
.gm-location--right { left: 3px; border-bottom-left-radius: 0; }
.gm-location--right::after { left: -1px; }
.network-globe--network .globe-marker:hover { z-index: 20; }
.network-globe--network .globe-marker:hover .gm-dot { transform: scale(1.4); }
.network-globe .globe-tip { display: none; position: absolute; left: 50%; bottom: 18px; transform: translateX(-50%); padding: 12px; min-width: 180px; background: #0a1024; border: 1px solid #334155; border-radius: 8px; color: #e2e8f0; font-size: 12px; line-height: 1.7; white-space: nowrap; pointer-events: none; }
.network-globe .globe-marker:hover .globe-tip { display: block; }
.network-globe .globe-tip strong { display: block; color: #67e8f9; margin-bottom: 4px; }
.network-globe .globe-tip-row { display: flex; justify-content: space-between; gap: 18px; }
.network-globe .globe-tip-row span:first-child { color: #94a3b8; }
.network-globe .is-filtered .gm-dot { animation: network-sensor-focus .7s ease-out both; }
@keyframes network-sensor-focus { 50% { transform: scale(1.4); box-shadow: 0 0 10px #fbbf24; } }
.network-globe__motion { color: #94a3b8; background: transparent; border: 0; padding: 6px 10px; font: inherit; font-size: 12px; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
.network-globe__motion:hover { color: #e2e8f0; }
.network-globe__motion:focus-visible { outline: 2px solid #67e8f9; outline-offset: 3px; border-radius: 3px; }
.network-globe__motion[hidden], .network-globe-status[hidden] { display: none; }
.network-globe-status { font-size: .8rem; color: #94a3b8; margin-top: .75rem; }
.landing-hero .landing-network-hero { flex: 0 0 600px; width: 600px; max-width: 100%; margin: 0; align-self: center; }
@media (min-width: 1101px) {
  /* Match the network explorer's canvas, letting the sphere extend beyond the
     right edge while the copy stays centered alongside it. */
  .landing-hero .public-hero__container { position: static; }
  .landing-hero .public-hero__layout { display: grid; grid-template-columns: min(600px, calc(100vw - 660px)) 1fr; align-content: center; min-height: 740px; }
  .landing-hero .public-hero__copy { position: relative; z-index: 2; grid-column: 1; grid-row: 1; }
  .landing-hero .landing-network-hero { position: static; grid-column: 2; grid-row: 1; width: 100%; align-self: start; }
  .landing-hero .network-globe--hero {
    position: absolute;
    width: 1080px;
    height: 850px;
    /* Same section-relative anchor and transform as global-network .map-stage. */
    top: 47%;
    right: 0;
    transform: translate(29%, -50%);
    z-index: 1;
  }
  .landing-hero .gm-location--right { left: auto; right: 3px; border-bottom-left-radius: 6px; border-bottom-right-radius: 0; }
  .landing-hero .gm-location--right::after { left: auto; right: -1px; }
}
@media (max-width: 1100px) {
  .landing-hero .landing-network-hero { flex-basis: auto; width: 600px; }
  .network-globe--hero { height: 430px; }
}
@media (max-width: 700px) {
  .landing-hero .landing-network-hero { width: 100%; }
  .network-globe--hero {
    width: 100vw;
    height: clamp(320px, 86vw, 430px);
    left: 50%;
    transform: translateX(-50%);
  }
}
@media (max-width: 639px) {
  .gm-location { padding: 4px 6px; font-size: 10px; }
  .gm-location__country { font-size: 9px; }
}
@media (max-width: 359px) {
  .network-globe--hero .gm-location__country { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .network-globe__scene, .network-globe__poster { transition: none; }
  .network-globe .is-filtered .gm-dot { animation: none; }
}
