Pulsar
A vertical API gateway barrier opening an aperture to route data streams

API Gateway

CSS

A vertical gateway barrier opens an aperture to meter and route incoming technical packet streams between security zones.

Tier
CSS
Dependencies
None
Duration
3.6 s, loops
Categories
Icons and micro-interactions, Data and progress
Use cases
Navigation and wayfinding, Security and trust
Industries
SaaS and software, Cross-industry
Style
Technical · light stroke
Set
endpoint
Tags
looplineminimalui

Companion assets

The same artwork, not animated. Derived from the entry’s own resting state, so it matches exactly.

Animated
A vertical API gateway barrier opening an aperture to route data streams
CSS tier
Static vector
API Gateway, not animated
Download SVG

Code

animation.svg

<svg xmlns="http://www.w3.org/2000/svg" aria-labelledby="endpoint-gateway-title" class="pulsar pulsar-endpoint-gateway" data-pulsar="endpoint-gateway" role="img" viewBox="0 0 160 96"><title id="endpoint-gateway-title">A vertical API gateway barrier opening an aperture to route data streams</title><g fill="none" stroke="currentColor" stroke-linecap="square" stroke-width=".75" opacity=".3"><path id="endpoint-gateway-datum" d="M20 24h8m-8 0v8m120-8h-8m8 0v8M20 72h8m-8 0v-8m120 8h-8m8 0v-8"></path><path id="endpoint-gateway-grid" stroke-dasharray="2 4" d="M50 28v40m60-40v40"></path></g><g fill="none" stroke="currentColor" stroke-linecap="square" stroke-width="1.25"><line id="endpoint-gateway-track-in" x1="28" x2="74" y1="48" y2="48"></line><path id="endpoint-gateway-track-upper" d="M86 48h10l16-16h20"></path><path id="endpoint-gateway-track-lower" d="M86 48h10l16 16h20"></path><path id="endpoint-gateway-pillar-top" d="M80 18v20m-4 0h8"></path><path id="endpoint-gateway-pillar-bottom" d="M80 78V58m-4 0h8"></path><line id="endpoint-gateway-shutter-top" x1="80" x2="80" y1="38" y2="48"></line><line id="endpoint-gateway-shutter-bottom" x1="80" x2="80" y1="48" y2="58"></line></g><line id="endpoint-gateway-beam" x1="75" x2="85" y1="48" y2="48" stroke="currentColor" stroke-width="1.5"></line><g id="endpoint-gateway-node-in"><rect width="8" height="8" x="30" y="44" fill="currentColor" rx="1"></rect></g><g id="endpoint-gateway-node-upper"><circle cx="86" cy="48" r="3" fill="currentColor"></circle></g><g id="endpoint-gateway-node-lower"><circle cx="86" cy="48" r="3" fill="currentColor"></circle></g></svg>

animation.css

.pulsar-endpoint-gateway #endpoint-gateway-node-in,
.pulsar-endpoint-gateway #endpoint-gateway-node-upper,
.pulsar-endpoint-gateway #endpoint-gateway-node-lower,
.pulsar-endpoint-gateway #endpoint-gateway-shutter-top,
.pulsar-endpoint-gateway #endpoint-gateway-shutter-bottom,
.pulsar-endpoint-gateway #endpoint-gateway-beam {
  transform-box: fill-box;
  animation-duration: 3600ms;
  animation-delay: 0ms;
  animation-iteration-count: infinite;
  animation-fill-mode: both;
}

.pulsar-endpoint-gateway #endpoint-gateway-node-in {
  fill: var(--pulsar-accent, currentColor);
  transform-origin: center;
  animation-name: endpoint-gateway-node-in;
  animation-timing-function: cubic-bezier(0.25, 1, 0.5, 1);
}

.pulsar-endpoint-gateway #endpoint-gateway-node-upper {
  fill: var(--pulsar-accent, currentColor);
  transform-origin: center;
  animation-name: endpoint-gateway-node-upper;
  animation-timing-function: cubic-bezier(0.25, 1, 0.5, 1);
}

.pulsar-endpoint-gateway #endpoint-gateway-node-lower {
  fill: currentColor;
  transform-origin: center;
  animation-name: endpoint-gateway-node-lower;
  animation-timing-function: cubic-bezier(0.25, 1, 0.5, 1);
}

.pulsar-endpoint-gateway #endpoint-gateway-shutter-top {
  stroke: currentColor;
  transform-origin: center top;
  animation-name: endpoint-gateway-shutter;
  animation-timing-function: cubic-bezier(0.33, 1, 0.68, 1);
}

.pulsar-endpoint-gateway #endpoint-gateway-shutter-bottom {
  stroke: currentColor;
  transform-origin: center bottom;
  animation-name: endpoint-gateway-shutter;
  animation-timing-function: cubic-bezier(0.33, 1, 0.68, 1);
}

.pulsar-endpoint-gateway #endpoint-gateway-beam {
  stroke: var(--pulsar-accent, currentColor);
  transform-origin: center;
  animation-name: endpoint-gateway-beam;
  animation-timing-function: ease-in-out;
}

@keyframes endpoint-gateway-shutter {
  0%,
  14%,
  80%,
  100% {
    transform: scaleY(1);
  }
  24%,
  66% {
    transform: scaleY(0.2);
  }
}

@keyframes endpoint-gateway-beam {
  0%,
  20%,
  50%,
  100% {
    opacity: 0;
    transform: scaleX(0.2);
  }
  26%,
  36% {
    opacity: 1;
    transform: scaleX(1.4);
  }
}

@keyframes endpoint-gateway-node-in {
  0%,
  8% {
    transform: translate(0, 0);
    opacity: 1;
  }
  32% {
    transform: translate(44px, 0);
    opacity: 1;
  }
  38% {
    transform: translate(44px, 0) scale(0.2);
    opacity: 0;
  }
  88% {
    transform: translate(0, 0) scale(0.2);
    opacity: 0;
  }
  96%,
  100% {
    transform: translate(0, 0) scale(1);
    opacity: 1;
  }
}

@keyframes endpoint-gateway-node-upper {
  0%,
  30% {
    transform: translate(0, 0) scale(0.2);
    opacity: 0;
  }
  36% {
    transform: translate(0, 0) scale(1);
    opacity: 1;
  }
  48% {
    transform: translate(10px, 0);
    opacity: 1;
  }
  72% {
    transform: translate(46px, -16px);
    opacity: 1;
  }
  80%,
  100% {
    transform: translate(46px, -16px) scale(0.3);
    opacity: 0;
  }
}

@keyframes endpoint-gateway-node-lower {
  0%,
  30% {
    transform: translate(0, 0) scale(0.2);
    opacity: 0;
  }
  36% {
    transform: translate(0, 0) scale(1);
    opacity: 1;
  }
  48% {
    transform: translate(10px, 0);
    opacity: 1;
  }
  72% {
    transform: translate(46px, 16px);
    opacity: 1;
  }
  80%,
  100% {
    transform: translate(46px, 16px) scale(0.3);
    opacity: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .pulsar-endpoint-gateway * {
    animation: none !important;
  }

  .pulsar-endpoint-gateway #endpoint-gateway-beam {
    opacity: 0;
  }

  .pulsar-endpoint-gateway #endpoint-gateway-node-upper {
    transform: translate(46px, -16px);
    opacity: 1;
  }

  .pulsar-endpoint-gateway #endpoint-gateway-node-lower {
    transform: translate(46px, 16px);
    opacity: 1;
  }
}

From this family15 in Endpoint

See the family