TITLE Lava Lamp, 1971 PROMPT An ambient page: one tall lava lamp glowing in a 1971 living room, its wax rendered with a hand-written WebGL fragment shader as smooth metaballs that rise, neck, pinch off, cool and sink. Concept: hypnotic viscous motion, and a deliberately saturated period palette instead of a dark screen-saver. Mood: groovy, warm, drowsy. Palette: wall field orange #FF5E1F, amber liquid #FFB000, wax magenta-pink #D91E63, deep aubergine #3A0A2A for shadows, type and the lamp's base, and cream #FBE9D0. The page background is a flat saturated orange wall with a huge 70s supergraphic: a band of concentric rounded stripes in amber, magenta, cream and a thin aubergine pinstripe that runs in from the left edge and curves down around the lamp. Saturated light page. The lamp: a classic rocket-shaped silhouette: spun-aluminium conical base and cap (drawn with CSS/SVG gradients, a brushed-metal conic highlight) and a tapered glass vessel between them. The vessel's interior is the WebGL canvas, masked to the glass outline. The lamp stands on a low teak sideboard edge with a soft coloured glow cast on the wall and tabletop that pulses subtly as large blobs pass the bulb. Shader: 10–14 metaballs whose positions are simulated in JavaScript with simple thermal physics (each blob has temperature; heated at the bottom it becomes buoyant and rises, cools near the top, sinks; slight horizontal wander; soft collisions; blobs merge visually by the metaball field) and passed as uniforms. The fragment shader sums the field, uses a smooth threshold for the wax surface, computes a pseudo-normal from the field gradient for glossy lighting (a soft specular highlight, rim light, subsurface glow: wax brighter and more orange-yellow near the hot bottom, deeper magenta at the top), renders the liquid as a vertical amber gradient with faint suspended sparkle, and adds glass effects: a vertical specular streak down the left side, darker refraction at the edges (cylindrical lens: horizontally compress the scene toward the edges), and a reflection of a window on the glass. A mound of settled wax sits at the bottom, bulging before releasing a blob. Interaction: watch-only is complete in itself. Additionally: pressing and holding on the lamp heats it (blobs rise faster and stretch into long necks); dragging left/right tilts the lamp a few degrees (the liquid's "up" changes and blobs slide along the glass, then it rocks back with a damped wobble): the signature moment is a slow blob stretching, necking to a thread and pinching into two, with glassy highlights; a small rotary dimmer knob on the sideboard, drawn in period style, sets the bulb heat from "mellow" to "far out"; a row of three colour chips (enamel buttons) changes the wax/liquid combination to two alternative period schemes (teal wax in lime liquid on a mustard wall; cream wax in red liquid on a magenta wall), with the wall graphic recolouring in a staggered sweep. Typography: fat, tight 70s display lettering for the title, drawn large and low on the wall to the side of the lamp: "Lava Lamp, 1971" in a heavy rounded serif/soft slab stack (Cooper-like: "Cooper Black", Georgia bold, with tight tracking and generous curves) in cream with an aubergine drop-shade; beneath, small text in lowercase sans: "wait for it." and after a minute "there it goes." (the caption changes for a few seconds whenever a blob pinches off in mid-liquid, then returns). Tiny knob legends in tracked caps on a cream enamel control plate fixed to the sideboard front, with a pilot jewel that glows with the bulb. Keyboard: Space heats the focused lamp, arrow keys nudge its tilt and turn the knob. Entrance: the lamp is cold: wax lies at the bottom; the bulb clicks on, the glow spreads up the wall over two seconds and the first big blob lifts off. Fallback without WebGL: an SVG/CSS lamp with blobs made from blurred circles under a contrast filter (the gooey technique) animated by keyframes. Performance: shader over a small canvas only; DPR capped at 2; pause when hidden. Reduced motion: simulation at quarter speed, no tilt wobble. DESCRIPTION A flat, saturated tangerine living-room wall carries a supergraphic of seven concentric stripes that sweeps in from the left edge and bends down around a single rocket-shaped lava lamp standing on the edge of a teak sideboard. The lamp's spun-aluminium cap and hourglass base frame a tapered glass vessel in which glossy magenta wax lifts off a settled mound, stretches, necks to a thread, pinches in two, cools at the top and sinks again, all in amber liquid with drifting sparkle, a specular streak and a small window reflected on the glass. Fat cream Cooper-style lettering with a stepped aubergine drop-shade sits low on the wall beside it, over a quiet lowercase caption that says "wait for it." until a blob lets go. The page opens cold: the stripes draw themselves, the title springs up, the bulb flickers on, its glow spreads up the wall and the first big blob leaves the mound. The mood is warm, drowsy and unapologetically 1971. VISUAL TECHNIQUES - Hand-written WebGL fragment shader summing a finite-support metaball field (12 simulated blobs, 3 neck threads, 1 mound) with a smooth antialiased threshold - Pseudo-normals from the analytic field gradient for wrap diffuse, twin-lobe specular, rim transmission, under-lighting from the bulb and temperature-driven wax colour - Glass rendered in the shader: outline mask, cylindrical-lens compression toward the edges, edge darkening, vertical specular streaks, curved four-pane window reflection, suspended twinkling sparkle - JavaScript thermal simulation: per-blob temperature, buoyancy, viscous drag, soft collisions, velocity sharing, bonded pairs that break and neck, anisotropic velocity stretch - Lamp metalwork from CSS conic gradients converging on each cone's apex, with fine spin lines and aubergine-toned shadows - SVG supergraphic stripes drawn in with stroke-dash animation and recoloured by staggered overlay sweeps; wall recoloured by an expanding clip-path circle from the lamp - SVG title lettering fattened and softened with round-joined strokes and a stacked drop-shade, fitted to its ink bounds at load - Wall and tabletop glow that pulses with wax passing the bulb; feTurbulence paper grain and anisotropic teak grain - Enamel control plate in CSS: knurled rotary dimmer, pilot jewel, three domed colour chips - Fallback without WebGL: blurred circles under an SVG contrast (gooey) filter animated by keyframes inside the clipped glass INTERACTION MODEL Watching is enough: the lamp runs by itself and the caption switches to "there it goes." each time a blob pinches off. Pressing and holding the lamp (or holding Space when it is focused) heats it, so blobs rise faster and stretch longer and the glow brightens. Dragging left or right while holding tilts the lamp up to about seven degrees; the wax slides along the glass toward the new "up", the mound slumps to the low side, and on release the lamp rocks back with a damped wobble (arrow keys give it a nudge). The dimmer knob on the sideboard plate is dragged, scrolled or turned with arrow keys to set bulb heat from mellow to far out. Three enamel chips switch between tangerine (magenta wax in amber), avocado (teal wax in lime on mustard) and cherry (cream wax in red on magenta): the wall colour spreads out from the lamp and the stripes recolour one after another. With reduced motion the simulation runs at quarter speed, the entrance is skipped and the tilt returns without wobble.