Pulsar
1×

Trace

Busy

Two long shallow bands of points running across the section, joined end to end.

“Copy the hero” is the styles and the SVG, carrying the colours and speed you set above. “Copy as a section” adds the wrapper a hero actually needs: the SVG absolute behind the copy, inert to the pointer, and a scrim so the heading holds. The Free licence asks for one visible credit per page: Animation by Pulsar, linked to Pulsar. Licence

Tech
CSS, no JavaScript
Longest band
27 s, mirrored, loops
Canvas
1600 by 900, crops to fill
Default tone
Light ground: ground #f7f7fb, ink #1d1b3a
Family
Constellation · Points
Tags
pointshorizontalnetwork

The four variables

Set any of these on the section, or on any ancestor, and the hero follows. Nothing else in the file needs editing.

--pulsar-hero-bg
the ground, default #f7f7fb
--pulsar-hero-ink
the strokes, default #1d1b3a
--pulsar-accent
the accented strokes
--pulsar-hero-speed
a rate: 2 is twice as fast, 0.5 half speed

Files

Animated SVG
One file, styles inside it, animates in an img tag or on its own.Download animated SVG
Still
Trace, not animated
Download SVG

The code

As a section

<!-- Pulsar by Business Nebula · "hero-constellation-trace" · https://pulsaricons.com | Licence: https://pulsaricons.com/legal/licence | Free-licence credit: Animation by Pulsar, linked to https://pulsaricons.com | Business Nebula: https://businessnebula.com.au -->
<style>
.hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 70vh;
  display: flex;
  align-items: center;
  padding: 5rem 5%;
  color: #1d1b3a;
  background: #f7f7fb;
}
.hero > .pulsar-hero {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}
/* A scrim under the copy, heavier on the side the text sits on. */
.hero-scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(100deg, #f7f7fb 0%, color-mix(in oklab, #f7f7fb 78%, transparent) 40%, transparent 68%);
}
.hero-copy {
  position: relative;
  z-index: 2;
  max-width: 40rem;
}
.hero-eyebrow {
  font-size: 0.75rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  opacity: 0.8;
}
/* Generated by scripts/hero-constellation.mjs from heroes/hero-constellation-trace/params.json.
   Consumers set four custom properties on any ancestor:
     --pulsar-hero-bg     the ground          (default #f7f7fb)
     --pulsar-hero-ink    the dots and links  (default #1d1b3a)
     --pulsar-accent      the pulsing dots    (default #8a7df7)
     --pulsar-hero-speed  a rate; 2 is twice as fast, 0.5 half speed */
.pulsar-hero-constellation-trace {
  display: block;
  width: 100%;
  height: 100%;
  color: var(--pulsar-hero-ink, #1d1b3a);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-ground {
  fill: var(--pulsar-hero-bg, #f7f7fb);
}
.pulsar-hero-constellation-trace circle {
  fill: currentColor;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-link {
  fill: none;
  stroke: currentColor;
  stroke-width: 1;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-stars circle {
  fill: var(--pulsar-accent, #8a7df7);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-ground-stop {
  stop-color: var(--pulsar-hero-bg, #f7f7fb);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band {
  transform-box: view-box;
  will-change: transform;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band-1 {
  transform-origin: 1080px 380px;
  animation-name: hero-constellation-trace-band-1;
  animation-duration: calc(21s / var(--pulsar-hero-speed, 1));
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band-2 {
  transform-origin: 1220px 690px;
  animation-name: hero-constellation-trace-band-2;
  animation-duration: calc(27s / var(--pulsar-hero-speed, 1));
}
.pulsar-hero-constellation-trace .hero-constellation-trace-stars {
  animation-name: hero-constellation-trace-stars;
  animation-duration: calc(9s / var(--pulsar-hero-speed, 1));
}
@keyframes hero-constellation-trace-band-1 {
  from {
    transform: translate(-34px, -8px) rotate(-1.5deg);
  }
  to {
    transform: translate(34px, 8px) rotate(1.5deg);
  }
}
@keyframes hero-constellation-trace-band-2 {
  from {
    transform: translate(30px, 8px) rotate(1.5deg);
  }
  to {
    transform: translate(-30px, -8px) rotate(-1.5deg);
  }
}
@keyframes hero-constellation-trace-stars {
  from {
    opacity: 0.45;
  }
  to {
    opacity: 1;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pulsar-hero-constellation-trace .hero-constellation-trace-band-1,
  .pulsar-hero-constellation-trace .hero-constellation-trace-band-2,
  .pulsar-hero-constellation-trace .hero-constellation-trace-stars {
    animation: none;
  }
}
</style>
<section class="hero">
  <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="pulsar pulsar-hero pulsar-hero-constellation-trace" data-pulsar="hero-constellation-trace" preserveAspectRatio="xMidYMid slice" viewBox="0 0 1600 900"><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description><dc:title>hero-constellation-trace</dc:title><dc:creator>Pulsar by Business Nebula</dc:creator><dc:publisher>Business Nebula</dc:publisher><dc:source>https://pulsaricons.com/icons</dc:source><dc:relation>https://businessnebula.com.au</dc:relation><dc:rights>Pulsar licence, https://pulsaricons.com/legal/licence</dc:rights></rdf:Description></rdf:RDF></metadata><defs><linearGradient id="hero-constellation-trace-veil" x1="0" x2="1600" y1="0" y2="0" gradientUnits="userSpaceOnUse"><stop class="hero-constellation-trace-ground-stop" offset="0" stop-opacity=".9"></stop><stop class="hero-constellation-trace-ground-stop" offset=".3" stop-opacity=".55"></stop><stop class="hero-constellation-trace-ground-stop" offset=".64" stop-opacity=".12"></stop><stop class="hero-constellation-trace-ground-stop" offset="1" stop-opacity="0"></stop></linearGradient></defs><rect width="1600" height="900" class="hero-constellation-trace-ground"></rect><g class="hero-constellation-trace-band hero-constellation-trace-band-1"><path stroke-opacity=".18" d="m1469.7 381.2-61.7-28.8m61.7 28.8-126.5 50M776.8 393l55 45.7m-55-45.7 82.1-75.3M776.8 393l-96.7 10.1m96.7-10.1 135.4 66.9m389.5-139.8-135.9 22.8m135.9-22.8L1271 454.6m30.7-134.5-81.3 71.5m81.3-71.5 106.3 32.3m-106.3-32.3-80.5-15.1m80.5 15.1 41.5 111.1m-317.9-26.5 140.5-61.8m-140.5 61.8 102.9 20.6m-102.9-20.6-57.9-69.3m57.9 69.3-113.1 55.2m113.1-55.2 90.1-109.7m-90.1 109.7 23.8-97.9m116.7 36.1-37.6 82.4m37.6-82.4L1271 454.6m-105.2-111.7 54.6 48.7m-54.6-48.7-50.4-47.9m50.4 47.9 55.4-37.9m-55.4 37.9-116.7-36.1m79.1 118.5 142.8 29.3m-142.8-29.3 92.2-33.7m-92.2 33.7L1115.4 295m12.8 130.3 93-120.3m-93 120.3-79.1-118.5M831.8 438.7l27.1-121m-27.1 121-151.7-35.6m151.7 35.6 80.4 21.2m358.8-5.3-50.6-63m50.6 63L1221.2 305m49.8 149.6 72.2-23.4m-375.8-95.8-108.5-17.7m108.5 17.7-55.2 124.5m55.2-124.5 148-40.4m-148 40.4 81.7-28.6m171.3 84.8-105-96.6m105 96.6.8-86.6m-.8 86.6 122.8 39.6M858.9 317.7l53.3 142.2M1408 352.4l-64.8 78.8M1115.4 295l105.8 10m-105.8-10-66.3 11.8" class="hero-constellation-trace-link"></path><circle cx="1469.7" cy="381.2" r="1.6" fill-opacity=".35"></circle><circle cx="776.8" cy="393" r="1.68" fill-opacity=".38"></circle><circle cx="1025.3" cy="404.7" r="1.85" fill-opacity=".44"></circle><circle cx="1165.8" cy="342.9" r="1.93" fill-opacity=".47"></circle><circle cx="1128.2" cy="425.3" r="2.01" fill-opacity=".5"></circle><circle cx="831.8" cy="438.7" r="2.09" fill-opacity=".53"></circle><circle cx="1271" cy="454.6" r="2.18" fill-opacity=".56"></circle><circle cx="967.4" cy="335.4" r="2.26" fill-opacity=".59"></circle><circle cx="858.9" cy="317.7" r="2.42" fill-opacity=".64"></circle><circle cx="680.1" cy="403.1" r="2.51" fill-opacity=".67"></circle><circle cx="1408" cy="352.4" r="2.59" fill-opacity=".7"></circle><circle cx="912.2" cy="459.9" r="2.67" fill-opacity=".73"></circle><circle cx="1115.4" cy="295" r="2.75" fill-opacity=".76"></circle><circle cx="1221.2" cy="305" r="2.84" fill-opacity=".79"></circle><circle cx="1049.1" cy="306.8" r="3" fill-opacity=".85"></circle></g><g class="hero-constellation-trace-band hero-constellation-trace-band-2"><path stroke-opacity=".18" d="m953.6 655.4 1.7 73.1m-1.7-73.1L874 692.9m79.6-37.5 113 35.3m-111.3 37.8L874 692.9m81.3 35.6 111.3-37.8m-111.3 37.8 156.3 11.5m235.6-37.4 52.1-58.5m-52.1 58.5 122.9 44.2m-122.9-44.2-46-86m46 86-149.9 49m149.9-49-142.6-49.1m142.6 49.1-64.7 41.9m64.7-41.9 114.2-31.8m-324.4-3.7 60.3 84.5m-60.3-84.5 67.6-13.6m-67.6 13.6-70.4 23.6m70.4-23.6-25.4 72.9m287.7-95.9 70.8 102.7m-70.8-102.7-98.1-27.5m98.1 27.5-116.8 100.4m116.8-100.4 159.3 13.8m-159.3-13.8 62.1 26.7m8.7 76 88.5-88.9m-88.5 88.9-8.7-76m-160.2-54.2-96.6 36.9m96.6-36.9-18.7 127.9m-85.2 7.1 7.3-98.1m-7.3 98.1 85.2-7.1m-85.2 7.1-130.7-60.9m130.7 60.9-85.7-11.6m93-86.5 77.9 91m-77.9-91-138 37.2m138-37.2-93 86.5m-45-49.3 45 49.3m447-82.1-97.2 12.9" class="hero-constellation-trace-link"></path><circle cx="953.6" cy="655.4" r="1.6" fill-opacity=".35"></circle><circle cx="955.3" cy="728.5" r="1.7" fill-opacity=".39"></circle><circle cx="1347.2" cy="702.6" r="1.8" fill-opacity=".42"></circle><circle cx="1137" cy="667.1" r="1.9" fill-opacity=".46"></circle><circle cx="1399.3" cy="644.1" r="2" fill-opacity=".49"></circle><circle cx="1301.2" cy="616.6" r="2.2" fill-opacity=".56"></circle><circle cx="874" cy="692.9" r="2.3" fill-opacity=".6"></circle><circle cx="1197.3" cy="751.6" r="2.4" fill-opacity=".64"></circle><circle cx="1204.6" cy="653.5" r="2.5" fill-opacity=".67"></circle><circle cx="1282.5" cy="744.5" r="2.6" fill-opacity=".71"></circle><circle cx="1066.6" cy="690.7" r="2.7" fill-opacity=".74"></circle><circle cx="1461.4" cy="670.8" r="2.9" fill-opacity=".81"></circle><circle cx="1111.6" cy="740" r="3" fill-opacity=".85"></circle></g><g class="hero-constellation-trace-band hero-constellation-trace-stars"><circle cx="1301.7" cy="320.1" r="2.47"></circle><circle cx="1220.4" cy="391.6" r="3.28"></circle><circle cx="1343.2" cy="431.2" r="4.08"></circle><circle cx="1470.1" cy="746.8" r="2.94"></circle><circle cx="1558.6" cy="657.9" r="3.92"></circle></g><rect width="1600" height="900" fill="url(#hero-constellation-trace-veil)" class="hero-constellation-trace-veil"></rect></svg>
  <div class="hero-scrim" aria-hidden="true"></div>
  <div class="hero-copy">
    <h1>Your heading</h1>
    <p>Your supporting sentence.</p>
    <a href="#">Your call to action</a>
  </div>
</section>

animation.css

/* Generated by scripts/hero-constellation.mjs from heroes/hero-constellation-trace/params.json.
   Consumers set four custom properties on any ancestor:
     --pulsar-hero-bg     the ground          (default #f7f7fb)
     --pulsar-hero-ink    the dots and links  (default #1d1b3a)
     --pulsar-accent      the pulsing dots    (default #8a7df7)
     --pulsar-hero-speed  a rate; 2 is twice as fast, 0.5 half speed */
.pulsar-hero-constellation-trace {
  display: block;
  width: 100%;
  height: 100%;
  color: var(--pulsar-hero-ink, #1d1b3a);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-ground {
  fill: var(--pulsar-hero-bg, #f7f7fb);
}
.pulsar-hero-constellation-trace circle {
  fill: currentColor;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-link {
  fill: none;
  stroke: currentColor;
  stroke-width: 1;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-stars circle {
  fill: var(--pulsar-accent, #8a7df7);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-ground-stop {
  stop-color: var(--pulsar-hero-bg, #f7f7fb);
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band {
  transform-box: view-box;
  will-change: transform;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band-1 {
  transform-origin: 1080px 380px;
  animation-name: hero-constellation-trace-band-1;
  animation-duration: calc(21s / var(--pulsar-hero-speed, 1));
}
.pulsar-hero-constellation-trace .hero-constellation-trace-band-2 {
  transform-origin: 1220px 690px;
  animation-name: hero-constellation-trace-band-2;
  animation-duration: calc(27s / var(--pulsar-hero-speed, 1));
}
.pulsar-hero-constellation-trace .hero-constellation-trace-stars {
  animation-name: hero-constellation-trace-stars;
  animation-duration: calc(9s / var(--pulsar-hero-speed, 1));
}
@keyframes hero-constellation-trace-band-1 {
  from {
    transform: translate(-34px, -8px) rotate(-1.5deg);
  }
  to {
    transform: translate(34px, 8px) rotate(1.5deg);
  }
}
@keyframes hero-constellation-trace-band-2 {
  from {
    transform: translate(30px, 8px) rotate(1.5deg);
  }
  to {
    transform: translate(-30px, -8px) rotate(-1.5deg);
  }
}
@keyframes hero-constellation-trace-stars {
  from {
    opacity: 0.45;
  }
  to {
    opacity: 1;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pulsar-hero-constellation-trace .hero-constellation-trace-band-1,
  .pulsar-hero-constellation-trace .hero-constellation-trace-band-2,
  .pulsar-hero-constellation-trace .hero-constellation-trace-stars {
    animation: none;
  }
}

More in this family10 in Constellation

All heroes