@keyframes gp-pipe-flow{to{stroke-dashoffset:-36px}}@keyframes gp-packet-move{0%{opacity:0;transform:translate(0)}6%{opacity:1}94%{opacity:1}to{transform:translateX(var(--pipe-travel,280px));opacity:0}}@keyframes gp-water-wave{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes gp-provider-orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes gp-explode-shake{0%,to{transform:translate(0)}15%{transform:translate(-4px,2px)}30%{transform:translate(4px,-3px)}45%{transform:translate(-3px,-2px)}60%{transform:translate(3px,3px)}}@keyframes gp-timer-glitch{0%,to{opacity:1;transform:scale(1)}25%{opacity:.7;transform:scale(1.04)skew(-2deg)}50%{opacity:1;transform:scale(.98)}75%{opacity:.85;transform:scale(1.06)skew(2deg)}}@keyframes gp-stream-pulse{0%{stroke-dashoffset:120px;opacity:.3}50%{opacity:.9}to{stroke-dashoffset:0;opacity:.3}}@keyframes gp-env-pop{0%{opacity:0;transform:scale(.85)translateY(8px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes gp-env-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)translateY(-6px)}}.gp-intro-viewport{width:100%;height:100%;position:relative;overflow:hidden}.gp-intro-layer{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.gp-intro-hero-zoom{transform-origin:50% 55%;will-change:transform}.gp-intro-provider-orbit{width:200px;height:200px;margin:-100px 0 0 -100px;animation:48s linear infinite gp-provider-orbit;position:absolute;top:50%;left:50%}.gp-intro-provider-slot{transform-origin:50% 100px;position:absolute;top:0;left:50%;transform:translate(-50%)}.gp-intro-wide{width:min(920px,96%);height:min(300px,72%);position:relative}.gp-intro-side{flex-direction:column;align-items:center;gap:8px;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.gp-intro-side--left{left:0}.gp-intro-side--right{flex-direction:row;align-items:flex-end;gap:16px;right:0}.gp-intro-pipe{height:64px;position:absolute;top:42%;left:20%;right:20%}.gp-intro-pipe-flow{animation:.9s linear infinite gp-pipe-flow}.gp-intro-packet{animation:gp-packet-move var(--packet-dur,5s)linear infinite;animation-delay:var(--packet-delay,0s);will-change:transform;position:absolute;left:0}.gp-intro-timer-bar{text-align:center;z-index:4;position:absolute;top:8%;left:50%;transform:translate(-50%)}.gp-intro-explode .gp-intro-wide,.gp-intro-explode .gp-intro-timer-bar{animation:.45s ease-in-out gp-explode-shake}.gp-intro-explode .gp-intro-timer-value{animation:.35s steps(2,end) infinite gp-timer-glitch;color:#f87171!important}.gp-intro-water-surface{animation:2s ease-in-out infinite gp-water-wave}.gp-intro-text-center{text-align:center;z-index:6;flex-direction:column;justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.gp-intro-virtualize{width:min(960px,96%);height:min(320px,75%);position:relative}.gp-intro-stream{stroke-dasharray:120;animation:2s ease-in-out infinite gp-stream-pulse}.gp-intro-env-grid{flex-direction:column;gap:8px;min-width:160px;display:flex;position:absolute;top:50%;right:0;transform:translateY(-50%)}.gp-intro-env-card{color:#ededed;background:#37d39914;border:1px solid #37d39959;border-radius:6px;padding:8px 12px;font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,monospace;font-size:11px;animation:.35s ease-out both gp-env-pop}.gp-intro-env-card--out{animation:.3s ease-in forwards gp-env-out}@media (prefers-reduced-motion:reduce){.gp-intro-provider-orbit,.gp-intro-pipe-flow,.gp-intro-packet,.gp-intro-water-surface,.gp-intro-stream,.gp-intro-explode .gp-intro-wide,.gp-intro-explode .gp-intro-timer-bar,.gp-intro-explode .gp-intro-timer-value{animation:none}}
