The concept: LOW ORBIT is a two-night electronic festival on a decommissioned Danish airfield, and the page's one job is lineup + tickets delivered with overwhelming energy. The art direction is sunset-acid — hot coral, ultraviolet, jet black and signal yellow on a black field — with diagonal energy everywhere: tilted orbit rings, a rotated marquee, a photo knocked off its axis.
The hero is the thesis: a live synth loop you can actually start, feeding a canvas visual that listens. Everything else stays disciplined so that one element carries the boldness.
Four loud colors need rules to stay legible: coral marks headliners and structure labels, yellow marks data and interaction (times, hovers, the waveform), ultraviolet is atmosphere (orbit rings, shadows, the marquee band), and everything else is warm ink on black. No gradients between them — they meet at hard edges, like stage lighting.
Archivo — wdth 62, wght 900
Display: compressed variable Archivo. One family covers the whole compressed-to-extended grotesk brief through its width axis (62–125), which also makes the lineup hover possible.
Archivo — wdth 125
Extended cut of the same family for eyebrows and small caps labels — the stretch reads like runway signage.
Space Mono — schedule, coordinates, boarding-pass fields
Everything that is data — times, stage codes, coordinates — is set in mono, so structure is visually separable from voice.
The kinetic hover on lineup names animates the variable width axis itself — the letterforms physically stretch from compressed to wide, a typographic analogue of a filter opening:
.act__name {
font-variation-settings: "wdth" 62, "wght" 900;
transition: font-variation-settings .4s cubic-bezier(.3,1,.4,1);
}
.act:hover .act__name {
font-variation-settings: "wdth" 110, "wght" 900;
color: var(--yellow);
}
The hero canvas draws five tilted elliptical orbit rings with ~190 particles riding them, plus a waveform across the horizon. Pressing Start the signal builds a 128 BPM acid loop from scratch with the Web Audio API — no audio files: a sine-drop kick, filtered-noise hats, and a sawtooth bassline through a resonant lowpass (Q=15) whose cutoff envelope is the classic TB-303 move:
function acid(t, note, accent) {
const o = ac.createOscillator(), f = ac.createBiquadFilter(), g = ac.createGain();
o.type = "sawtooth"; o.frequency.value = mtof(note);
f.type = "lowpass"; f.Q.value = 15;
f.frequency.setValueAtTime(accent ? 2600 : 900, t);
f.frequency.exponentialRampToValueAtTime(160, t + 0.22); // the acid squelch
g.gain.setValueAtTime(0.26, t);
g.gain.exponentialRampToValueAtTime(0.001, t + 0.24);
o.connect(f).connect(g).connect(master);
o.start(t); o.stop(t + 0.26);
}
A 16-step scheduler with ~140 ms lookahead keeps timing sample-accurate. The master bus runs through an AnalyserNode; each frame the visual reads three bands and maps them to physics — bass blooms the ring radii, mids spin the particles, treble brightens them — while getByteTimeDomainData draws the real waveform:
analyser.getByteFrequencyData(freqData);
bass → ring radius (rx *= 1 + bass * 0.5)
mid → particle speed (a += sp * (0.5 + mid * 3.4))
treble → particle size + color flips to signal yellow
Before you press play, the same renderer idles on slow sine curves, so the hero is alive but calm. With prefers-reduced-motion the canvas renders a single static frame and every animation, marquee and reveal is switched off — the loop still plays if you ask for it.
Photos: the two field shots (night stage, golden-hour crowd) were generated with Nano Banana Pro and art-directed to match the palette — the lasers and the sunset carry the same coral/ultraviolet pair as the CSS.
Three structural devices encode real content: lineup type size = set time (bigger plays closer to sunrise, outlined names close their stage), stages carry aviation codes (RWY / HGR, like the airfield's own charts), and tickets are boarding passes — perforation, stub, barcode, PASSENGER: YOU / FROM: DUSK / TO: DAWN.
Built as one of 25 sites showcasing Claude Fable 5 · photos by Nano Banana Pro · everything else is hand-written HTML/CSS/JS