TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/aurora-borealis/llms.txt
Use this file to discover all available pages before exploring further.
AuroraBackground component renders a completely passive, full-screen backdrop that evokes the sweeping colour bands of the aurora borealis. It sits behind every page in the portfolio and is intentionally self-contained — no props, no configuration at the call site — so that the rest of the application can focus entirely on foreground content.
Visual output
Three semi-transparentmotion.div gradient layers float and drift independently over a deep-navy base (#050814). Each layer uses a radial gradient centred on the viewport, a large blur filter to soften hard edges, and CSS mix-blend-mode: screen to let overlapping hues add together rather than occlude one another. On top of all three gradient layers sits an SVG whose single <path> cycles between three wave shapes, filled with a teal-to-violet linear gradient, completing the illusion of rolling light ribbons.
The outer wrapper is set to opacity: 0.6 so the combined effect stays subtle and never competes with the foreground.
Layer reference
| Layer | Dominant Color | Blend Mode | Blur | Animation Duration |
|---|---|---|---|---|
| Base div | #050814 (deep navy) | — | — | Static |
| Layer 1 (teal) | rgba(45, 212, 191, 0.15) | Normal | 60 px | 20 s |
| Layer 2 (cyan / violet) | rgba(34, 211, 238, 0.15) + rgba(139, 92, 246, 0.1) | Screen | 80 px | 25 s |
| Layer 3 (magenta) | rgba(236, 72, 153, 0.1) | Screen | 100 px | 30 s |
| SVG wave | #2DD4BF → #22D3EE → #8B5CF6 | — | — | 15 s |
Layer 1 — teal drift
A largemotion.div at opacity-50 carries a radial gradient from teal (rgba(45, 212, 191, 0.15)) through a pale teal mid-stop (rgba(20, 184, 166, 0.05)) to transparent. The element deliberately overshoots the viewport by 100 % on every side (-inset-[100%]) so the gradient centre can travel into and out of the frame without revealing a hard edge. Framer Motion animates x, y, and scale on a 20 s looping linear cycle:
Layer 2 — cyan / violet counter-drift
Atopacity-40 with mix-blend-mode: screen, this layer adds a second radial gradient blending cyan and violet. It travels in the opposite direction to Layer 1, creating a crossing-wave illusion. Duration is 25 s to ensure the two layers are never perfectly in phase.
Layer 3 — magenta figure-eight
The faintest layer (opacity-30, mix-blend-mode: screen) uses a pure magenta gradient and traces a figure-eight path over 30 s. The longer duration and unique path prevent any periodic repetition from being visible.
SVG wave overlay
An<svg> spanning the full viewport contains a single linearGradient (id="aurora-grad") defined diagonally from top-left (x1="0%" y1="0%") to bottom-right (x2="100%" y2="100%"):
| Stop | Color | Stop Opacity |
|---|---|---|
| 0 % | #2DD4BF (teal) | 0.4 |
| 50 % | #22D3EE (cyan) | 0.2 |
| 100 % | #8B5CF6 (violet) | 0.4 |
motion.path filled with url(#aurora-grad) morphs between three distinct wave shapes on a 15 s loop, adding an organic undulation that the blurred div layers cannot achieve alone.
Usage
AuroraBackground accepts no props. All colours, speeds, and opacities live inside the component. See the Customization section below if you need to tweak them.Implementation notes
Non-interactive by design
The outer container carries both
pointer-events-none and z-0, ensuring the background can never intercept clicks, focus events, or scroll interactions from foreground elements.Fixed positioning
fixed inset-0 pins the component to the viewport rather than the document flow, so it scrolls neither with the page nor with any positioned ancestor.Overflow clipping
overflow-hidden on the outer container prevents the oversized Layer 1 element (which extends 100 % beyond every edge) from causing scrollbars or layout shifts.GPU compositing
Framer Motion automatically adds
will-change: transform to every motion.div it animates, promoting each layer to its own compositor layer and keeping the animation off the main thread.Customization
All customization requires editingcomponents/AuroraBackground.js directly, as the component exposes no props.
Changing gradient colors
Each layer’s color is controlled by thergba values inside its background style. For example, to shift Layer 1 from teal to emerald:
<linearGradient> element. Edit the stopColor and stopOpacity attributes on each <stop> to change the ribbon palette.
Changing animation speed
Eachmotion.div has a transition block with a duration key (in seconds). Lower values produce faster, more energetic motion; higher values produce a calmer drift:
motion.path transition. Its default is 15 s.
Changing overall opacity
The outer container defaults toopacity-60 (60 %). Swap this Tailwind class to adjust global intensity without touching individual layers:
opacity-50, opacity-40, opacity-30) can be changed independently to balance the contribution of each color band.