Cross
Small crosses at every intersection, a registration grid, with five of them lit and breathing.
An isometric lattice, the grid of a technical drawing, lit from one moving point.
“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
Set any of these on the section, or on any ancestor, and the hero follows. Nothing else in the file needs editing.
<!-- Pulsar by Business Nebula · "hero-lattice-slant" · 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: #ffffff;
background: #0b0a16;
}
.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, #0b0a16 0%, color-mix(in oklab, #0b0a16 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-lattice.mjs from heroes/hero-lattice-slant/params.json.
Consumers set four custom properties on any ancestor:
--pulsar-hero-bg the ground (default #0b0a16)
--pulsar-hero-ink the grid (default #ffffff)
--pulsar-accent the glows and nodes (default #8a7df7)
--pulsar-hero-speed a rate; 2 is twice as fast, 0.5 half speed */
.pulsar-hero-lattice-slant {
display: block;
width: 100%;
height: 100%;
color: var(--pulsar-hero-ink, #ffffff);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-ground {
fill: var(--pulsar-hero-bg, #0b0a16);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-accent-stop {
stop-color: var(--pulsar-accent, #8a7df7);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-ground-stop {
stop-color: var(--pulsar-hero-bg, #0b0a16);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-band {
transform-box: view-box;
will-change: transform;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
.pulsar-hero-lattice-slant .hero-lattice-slant-glow-1 {
transform-origin: 1280px 480px;
animation-name: hero-lattice-slant-glow-1;
animation-duration: calc(23s / var(--pulsar-hero-speed, 1));
}
@keyframes hero-lattice-slant-glow-1 {
from {
transform: translate(-60px, -80px) scale(0.94);
}
to {
transform: translate(60px, 80px) scale(1.06);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-hero-lattice-slant .hero-lattice-slant-glow-1 {
animation: none;
}
}
</style>
<section class="hero">
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="pulsar pulsar-hero pulsar-hero-lattice-slant" data-pulsar="hero-lattice-slant" 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-lattice-slant</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><radialGradient id="hero-lattice-slant-glow-1"><stop class="hero-lattice-slant-accent-stop" offset="0" stop-opacity=".5"></stop><stop class="hero-lattice-slant-accent-stop" offset=".5" stop-opacity=".21"></stop><stop class="hero-lattice-slant-accent-stop" offset="1" stop-opacity="0"></stop></radialGradient><linearGradient id="hero-lattice-slant-veil" x1="0" x2="1600" y1="0" y2="0" gradientUnits="userSpaceOnUse"><stop class="hero-lattice-slant-ground-stop" offset="0" stop-opacity=".92"></stop><stop class="hero-lattice-slant-ground-stop" offset=".3" stop-opacity=".6"></stop><stop class="hero-lattice-slant-ground-stop" offset=".62" stop-opacity=".15"></stop><stop class="hero-lattice-slant-ground-stop" offset="1" stop-opacity="0"></stop></linearGradient><pattern id="hero-lattice-slant-tile" width="56" height="56" patternTransform="scale(1 .866)skewX(-26.564)" patternUnits="userSpaceOnUse"><path fill="none" stroke="currentColor" d="M0 0h56M0 0v56"></path></pattern></defs><rect width="1600" height="900" class="hero-lattice-slant-ground"></rect><g class="hero-lattice-slant-band hero-lattice-slant-glow hero-lattice-slant-glow-1"><ellipse cx="1280" cy="480" fill="url(#hero-lattice-slant-glow-1)" rx="520" ry="380"></ellipse></g><rect width="1600" height="900" fill="url(#hero-lattice-slant-tile)" class="hero-lattice-slant-field" opacity=".3"></rect><rect width="1600" height="900" fill="url(#hero-lattice-slant-veil)" class="hero-lattice-slant-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>
/* Generated by scripts/hero-lattice.mjs from heroes/hero-lattice-slant/params.json.
Consumers set four custom properties on any ancestor:
--pulsar-hero-bg the ground (default #0b0a16)
--pulsar-hero-ink the grid (default #ffffff)
--pulsar-accent the glows and nodes (default #8a7df7)
--pulsar-hero-speed a rate; 2 is twice as fast, 0.5 half speed */
.pulsar-hero-lattice-slant {
display: block;
width: 100%;
height: 100%;
color: var(--pulsar-hero-ink, #ffffff);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-ground {
fill: var(--pulsar-hero-bg, #0b0a16);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-accent-stop {
stop-color: var(--pulsar-accent, #8a7df7);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-ground-stop {
stop-color: var(--pulsar-hero-bg, #0b0a16);
}
.pulsar-hero-lattice-slant .hero-lattice-slant-band {
transform-box: view-box;
will-change: transform;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
.pulsar-hero-lattice-slant .hero-lattice-slant-glow-1 {
transform-origin: 1280px 480px;
animation-name: hero-lattice-slant-glow-1;
animation-duration: calc(23s / var(--pulsar-hero-speed, 1));
}
@keyframes hero-lattice-slant-glow-1 {
from {
transform: translate(-60px, -80px) scale(0.94);
}
to {
transform: translate(60px, 80px) scale(1.06);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-hero-lattice-slant .hero-lattice-slant-glow-1 {
animation: none;
}
}
Small crosses at every intersection, a registration grid, with five of them lit and breathing.
A fine grid turned through forty-five degrees, two accent lights under it.
A fine dot grid with one accent light moving slowly beneath it.
A perspective floor receding to a horizon, with the horizon itself glowing and breathing.
Fine graph paper, the busiest grid of the series, with three lights under it at three rates.
A dense dot field with one round accent light and six lit dots around it, pulsing.
A honeycomb of thin hexagons with an accent light and an ink shadow moving under it.
Wide ruled squares, a sheet of graph paper, with an accent light and a shadow of ink drifting under it.
The floor turned over: a ceiling of lines converging above the copy, sparse, with one light at the far end.