/* Movement follows the network motif; content stays still and readable. */
.orbit-depth{position:absolute;inset:0;transform-style:flat;transition:transform .85s cubic-bezier(.16,1,.3,1)}
.network-traveler{position:absolute;left:50%;top:50%;width:370px;height:370px;border-radius:50%;transform:translate(-50%,-50%) rotateX(62deg) rotate(-30deg);pointer-events:none}
.network-traveler i{position:absolute;inset:0;border-radius:50%;animation:packet-orbit 9s linear infinite}
.network-traveler i::after{content:'';position:absolute;left:50%;top:-3px;width:7px;height:7px;background:#fff;border-radius:50%;box-shadow:0 0 12px #fff,0 0 28px #fff8}
.traveler-1{transform:translate(-50%,-50%) rotateY(61deg) rotate(35deg)}
.traveler-1 i{animation-duration:13s;animation-delay:-5s}
.traveler-2{transform:translate(-50%,-50%) rotateY(-61deg) rotate(-35deg)}
.traveler-2 i{animation-duration:17s;animation-delay:-10s;animation-direction:reverse}
.orbit-art .orbit-core{animation:core-breathe 6s ease-in-out infinite}
.orbit-art .orbit-halo{animation:halo-breathe 6s ease-in-out infinite}
.orbit-art .tag1{animation:tag-float 7s ease-in-out infinite}
.orbit-art .tag2{animation:tag-float 8s ease-in-out -3s infinite}
.orbit-art .o4{animation:inner-orbit 22s linear infinite}
.orbit-art .satellite{animation:signal-pulse 3.5s ease-in-out infinite}
.orbit-art .sat2{animation-delay:-1.7s}
.feature,.price-card{position:relative;isolation:isolate}
.feature::after,.price-card::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:radial-gradient(230px circle at var(--pointer-x,50%) var(--pointer-y,50%),#ffffff0c,transparent 80%);opacity:0;transition:opacity .3s;z-index:-1}
.feature:hover::after,.price-card:hover::after{opacity:1}
.feature .feature-title>.icon:last-child,.button>.icon:last-child{transition:transform .25s}
.feature:hover .feature-title>.icon:last-child{transform:translate(2px,-2px)}
.button:hover>.icon:last-child{transform:translateX(3px)}
.mini-world i:nth-child(7n){animation:map-signal 4s ease-in-out infinite}
.mini-world i:nth-child(11n){animation:map-signal 4s ease-in-out -2s infinite}
.feature:hover .speed-art>span{transform:translate(9px,-9px)}
.speed-art>span{transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.feature:hover .ip-art{transform:translateY(-5px);border-color:#666}
.ip-art{transition:transform .4s,border-color .4s}
.preview.motion-observed{opacity:.65;transform:perspective(1200px) rotateX(5deg) translateY(20px);transform-origin:50% 100%;transition:transform 1.1s cubic-bezier(.16,1,.3,1),opacity .8s}
.preview.motion-entered{opacity:1;transform:perspective(1200px) rotateX(0) translateY(0)}
.motion-observed .chart svg>path:last-child,.chart.motion-observed svg>path:last-child{clip-path:inset(0 100% 0 0)}
.motion-entered .chart svg>path:last-child,.chart.motion-entered svg>path:last-child{animation:draw-traffic 1.6s cubic-bezier(.2,.6,.3,1) both}
.motion-observed:not(.motion-visible) .network-traveler i,.motion-observed:not(.motion-visible) .orbit,.motion-observed:not(.motion-visible) .orbit-core,.motion-observed:not(.motion-visible) .orbit-halo,.motion-observed:not(.motion-visible) .orbit-tag,.motion-observed:not(.motion-visible) .satellite,.motion-observed:not(.motion-visible) .mini-world i{animation-play-state:paused}
#dash-view{animation:panel-enter .35s ease-out both}
.country-row .progress i{transform-origin:left;animation:bar-grow .85s cubic-bezier(.2,.7,.2,1) both}
.country-row:nth-child(3) .progress i{animation-delay:.07s}.country-row:nth-child(4) .progress i{animation-delay:.14s}.country-row:nth-child(5) .progress i{animation-delay:.21s}
dialog[open]{animation:dialog-enter .25s cubic-bezier(.2,.7,.2,1)}
@keyframes packet-orbit{to{transform:rotate(360deg)}}
@keyframes core-breathe{50%{box-shadow:0 0 85px #ffffff18,inset 0 1px #ffffff35;border-color:#777}}
@keyframes halo-breathe{50%{opacity:.5;transform:scale(1.2)}}
@keyframes tag-float{50%{translate:0 -9px}}
@keyframes inner-orbit{to{transform:translate(-50%,-50%) rotateX(35deg) rotateY(390deg)}}
@keyframes signal-pulse{50%{opacity:.35;box-shadow:0 0 22px #fff}}
@keyframes map-signal{50%{background:#fff;box-shadow:0 0 7px #fff9;opacity:1}}
@keyframes draw-traffic{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes panel-enter{from{opacity:.3;transform:translateY(7px)}to{opacity:1;transform:none}}
@keyframes bar-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes dialog-enter{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
@media(max-width:1100px){.network-traveler{width:310px;height:310px}}
@media(max-width:800px){.network-traveler{width:260px;height:260px}}
@media(max-width:560px){.network-traveler{width:250px;height:250px}}
@media(prefers-reduced-motion:reduce){.preview.motion-observed{opacity:1;transform:none}.motion-observed .chart svg>path:last-child,.chart.motion-observed svg>path:last-child{clip-path:none}.orbit-depth{transform:none!important}}
/* Flat, isolated layers prevent 3D plane intersections with the shield. */
.orbit-v2{perspective:none}
.orbit-v2 .orbit-halo{z-index:0;pointer-events:none;background:radial-gradient(ellipse,#ffffff0a,transparent 65%)}
.orbit-v2 .orbit-depth{z-index:1;pointer-events:none;display:grid;place-items:center}
.orbital-network{width:min(100%,470px);height:auto;overflow:visible}
.orbit-boundary{stroke:#ffffff0c;stroke-width:1;stroke-dasharray:1 7}
.orbit-guide{stroke:#ffffff05;stroke-width:1}
.orbit-track{stroke:#ffffff24;stroke-width:1;vector-effect:non-scaling-stroke}
.orbit-trail{stroke:#ffffff28;stroke-width:2;stroke-dasharray:5 95;stroke-linecap:round;animation:orbit-flow 14s linear infinite}
.orbit-packet{stroke:#eee;stroke-width:3;stroke-dasharray:.15 99.85;stroke-linecap:round;animation:orbit-flow 14s linear infinite;filter:drop-shadow(0 0 3px #ffffffa0)}
.lane-1{animation-duration:19s;animation-delay:-6s;animation-direction:reverse}
.lane-2{animation-duration:23s;animation-delay:-13s}
.network-ticks{stroke:#ffffff26;stroke-width:1}
.shield-layer{position:absolute;inset:0;z-index:3;pointer-events:none;transition:transform .95s cubic-bezier(.16,1,.3,1)}
.orbit-v2 .orbit-core{background:linear-gradient(145deg,#252525,#101010);border-color:#555;box-shadow:0 0 0 9px #0a0a0a,0 0 45px #ffffff0c,inset 0 1px #ffffff20;animation:shield-light 7s ease-in-out infinite}
.orbit-v2 .orbit-core .icon{position:relative;z-index:1}
.orbit-v2 .orbit-tag{z-index:4;background:#141414;pointer-events:none}
.orbit-v2 .orbit-coord{z-index:4;pointer-events:none}
.orbit-v2.motion-observed:not(.motion-visible) .orbit-trail,.orbit-v2.motion-observed:not(.motion-visible) .orbit-packet{animation-play-state:paused}
@keyframes orbit-flow{to{stroke-dashoffset:-100}}
@keyframes shield-light{50%{border-color:#777;box-shadow:0 0 0 9px #0a0a0a,0 0 55px #ffffff15,inset 0 1px #ffffff30}}
@media(max-width:560px){.orbital-network{width:310px;max-width:100%}}
@media(prefers-reduced-motion:reduce){.shield-layer{transform:none!important}.orbit-packet.lane-1,.orbit-trail.lane-1{stroke-dashoffset:-33}.orbit-packet.lane-2,.orbit-trail.lane-2{stroke-dashoffset:-66}}
