Pulsar
Versioned build artifact descending into an open repository folder with extraction progress barbuild/artifactsv2.4.1sha256a3f9…size14.2 MBstatusdownloadingextracting artifact

Deployment Artifact

CSS

A versioned build artifact descends into an open repository folder whose lid lifts on arrival; a progress bar tracks extraction and a side panel shows checksum, size, and download status.

Tier
CSS
Dependencies
None
Duration
9 s, loops
Categories
Icons and micro-interactions, Data and progress
Use cases
Determinate progress, Dashboards and reporting
Industries
SaaS and software, Cross-industry
Style
Technical · light stroke
Set
deploy
Tags
loopprogresslineui

Companion assets

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

Animated
Versioned build artifact descending into an open repository folder with extraction progress barbuild/artifactsv2.4.1sha256a3f9…size14.2 MBstatusdownloadingextracting artifact
CSS tier
Static vector
Deployment Artifact, not animated
Download SVG

Code

animation.svg

<svg xmlns="http://www.w3.org/2000/svg" aria-labelledby="deploy-artifact-title" class="pulsar pulsar-deploy-artifact" data-pulsar="deploy-artifact" role="img" viewBox="0 0 160 96"><title id="deploy-artifact-title">Versioned build artifact descending into an open repository folder with extraction progress bar</title><g fill="none" stroke="currentColor" stroke-width=".7" opacity=".5"><rect width="44" height="36" x="10" y="30" rx="2"></rect><path id="deploy-artifact-tab" d="M10 30v-4h16l4 4"></path></g><rect id="deploy-artifact-folderfill" width="44" height="36" x="10" y="30" fill="currentColor" opacity=".08" rx="2"></rect><g fill="none" stroke="currentColor" stroke-width=".5" opacity=".18"><line x1="16" x2="46" y1="40" y2="40"></line><line x1="16" x2="38" y1="44" y2="44"></line><line x1="16" x2="42" y1="48" y2="48"></line></g><g fill="currentColor" font-family="monospace"><text x="14" y="53" font-size="5" opacity=".55">build/</text><text x="14" y="60" font-size="4" opacity=".4">artifacts</text></g><g id="deploy-artifact-pkg"><rect width="28" height="20" x="60" y="10" fill="none" stroke="currentColor" stroke-width=".6" opacity=".5" rx="2"></rect><line x1="60" x2="88" y1="20" y2="20" fill="none" stroke="currentColor" stroke-width=".8"></line><line x1="74" x2="74" y1="10" y2="30" fill="none" stroke="currentColor" stroke-width=".8"></line><text x="63" y="8" fill="currentColor" font-family="monospace" font-size="5" font-weight="700">v2.4.1</text></g><g id="deploy-artifact-arrow" fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1" opacity=".8"><line x1="74" x2="74" y1="30" y2="56"></line><polygon fill="currentColor" stroke="none" points="70,52 74,60 78,52" opacity=".8"></polygon></g><g fill="currentColor" font-family="monospace"><text x="100" y="34" font-size="4" opacity=".4">sha256</text><text id="deploy-artifact-hash" x="100" y="40" font-size="5" font-weight="700" opacity="1">a3f9…</text><text x="100" y="48" font-size="4" opacity=".4">size</text><text x="100" y="54" font-size="5" opacity=".55">14.2 MB</text><text x="100" y="62" font-size="4" opacity=".4">status</text><text id="deploy-artifact-status" x="100" y="68" font-size="5" font-weight="700" opacity="1">downloading</text></g><rect width="140" height="5" x="10" y="76" fill="none" stroke="currentColor" stroke-width=".5" opacity=".3" rx="1"></rect><rect id="deploy-artifact-prog" width="0" height="5" x="10" y="76" fill="currentColor" opacity=".55" rx="1"></rect><g fill="currentColor" font-family="monospace"><text x="10" y="88" font-size="4" opacity=".4">extracting artifact</text></g></svg>

animation.css

.pulsar-deploy-artifact {
  --pulsar-accent: currentColor;
}

/* Accent elements */
.pulsar-deploy-artifact #deploy-artifact-folderfill,
.pulsar-deploy-artifact #deploy-artifact-prog {
  fill: var(--pulsar-accent, currentColor);
}

.pulsar-deploy-artifact #deploy-artifact-hash,
.pulsar-deploy-artifact #deploy-artifact-status {
  fill: var(--pulsar-accent, currentColor);
}

.pulsar-deploy-artifact #deploy-artifact-pkg text {
  fill: var(--pulsar-accent, currentColor);
}

.pulsar-deploy-artifact #deploy-artifact-pkg line,
.pulsar-deploy-artifact #deploy-artifact-arrow line {
  stroke: var(--pulsar-accent, currentColor);
}

/* ── Package descends ── */
.pulsar-deploy-artifact #deploy-artifact-pkg,
.pulsar-deploy-artifact #deploy-artifact-arrow {
  animation: deploy-artifact-descend 9000ms 0ms ease-in-out infinite;
}

@keyframes deploy-artifact-descend {
  0% {
    transform: translateY(0);
    opacity: 1;
  }
  55% {
    transform: translateY(30px);
    opacity: 1;
  }
  65% {
    transform: translateY(30px);
    opacity: 0;
  }
  70% {
    transform: translateY(0);
    opacity: 0;
  }
  80% {
    opacity: 1;
  }
  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

/* ── Folder tab lifts ── */
.pulsar-deploy-artifact #deploy-artifact-tab {
  transform-origin: 10px 26px;
  animation: deploy-artifact-lidopen 9000ms 0ms ease-in-out infinite;
}

@keyframes deploy-artifact-lidopen {
  0% {
    transform: rotate(0deg);
  }
  45% {
    transform: rotate(0deg);
  }
  60% {
    transform: rotate(-28deg);
  }
  75% {
    transform: rotate(-28deg);
  }
  85% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(0deg);
  }
}

/* ── Folder fill brightens on receive ── */
.pulsar-deploy-artifact #deploy-artifact-folderfill {
  animation: deploy-artifact-folderglint 9000ms 0ms ease-in-out infinite;
}

@keyframes deploy-artifact-folderglint {
  0%,
  100% {
    opacity: 0.08;
  }
  60% {
    opacity: 0.45;
  }
  80% {
    opacity: 0.15;
  }
}

/* ── Progress bar grows ── */
.pulsar-deploy-artifact #deploy-artifact-prog {
  animation: deploy-artifact-progress 9000ms 0ms ease-in-out infinite;
}

@keyframes deploy-artifact-progress {
  0% {
    width: 0;
  }
  65% {
    width: 140;
  }
  75% {
    width: 140;
  }
  80% {
    width: 0;
  }
  100% {
    width: 0;
  }
}

/* ── Status text accent pulse ── */
.pulsar-deploy-artifact #deploy-artifact-status {
  animation: deploy-artifact-statuspulse 9000ms 0ms ease-in-out infinite;
}

@keyframes deploy-artifact-statuspulse {
  0%,
  60% {
    opacity: 1;
  }
  66% {
    opacity: 0.5;
  }
  100% {
    opacity: 1;
  }
}

/* ── Hash flicker ── */
.pulsar-deploy-artifact #deploy-artifact-hash {
  animation: deploy-artifact-hashflicker 9000ms 0ms step-end infinite;
}

@keyframes deploy-artifact-hashflicker {
  0%,
  100% {
    opacity: 1;
  }
  33% {
    opacity: 0.4;
  }
  34% {
    opacity: 1;
  }
  66% {
    opacity: 0.4;
  }
  67% {
    opacity: 1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .pulsar-deploy-artifact * {
    animation: none !important;
    transform: none;
  }
  .pulsar-deploy-artifact #deploy-artifact-prog {
    width: 140;
    opacity: 1;
  }
  .pulsar-deploy-artifact #deploy-artifact-folderfill {
    opacity: 0.35;
  }
}

From this family15 in Deploy

See the family