Site guide — how it was built

Fringe

A photoelastic stress laboratory that loads a transparent hook between crossed polarisers so its hidden internal stress erupts into bands of interference colour. Every fringe is a contour of equal shear; drive the load and they multiply and crowd at the throat.

Concept

The subject is a field you cannot feel

Stress lives inside every loaded part, invisible. Photoelasticity is the trick that gives it a body: a transparent birefringent material, viewed between two crossed polarising filters, converts the difference in principal stresses into a visible interference colour. FRINGE is a fictional stress-analysis lab whose single job on this page is to make that erupt — the resting hook already glowing, the fringes crowding where the part will fail first. The audience is engineers and product designers who want to see a stress concentration, not just compute one.

Palette — argued from the subject

Crossed-dark ground, contained spectral fringe

A crossed polariscope has a black field until something is stressed, so the ground is near-black and the interference colour is the only saturation on the page — reserved entirely for the art. The bright cyan is a contained spectral note used for interactive marks and focus, never for small text; body copy runs on a derived light ink for legibility.

Crossed-dark
#070A0E
The extinguished field of a crossed polariscope — the ground the fringes glow against.
Edge line / mark
#9AA0AC
The bright silhouette rim of the part and the hairline rules; too dim for body text, reserved for marks.
Plate ink (derived)
#D9DCE3
The legible body ink derived for the dark ground — about 12:1, well over the 4.5:1 floor.
Spectral cyan
#7FD8E0
One contained note of the fringe spectrum, used for slider fill, focus and peak highlights only.

The fringe spectrum itself — computed, not painted

The Michel-Lévy sequence the polariscope produces, from black extinction through first-order red into the high orders. On the site this strip is generated pixel-by-pixel from the same colour model as the hook.

Type

A serif for the light, a mono for the numbers

Cormorant Garamond carries the display and body — a high-contrast Garamond whose thin strokes feel optical, like something seen through glass, and whose large italic sets the one moment of typographic bravery in the wordmark. IBM Plex Mono handles every readout, eyebrow and label: fringe order, retardation in nanometres, applied load in kilonewtons — the instrument voice against the lyrical one.

Technique

A GLSL photoelastic fringe shader

The hero is a single full-screen fragment shader, raw WebGL, no library. A signed-distance field builds the hook — a partial arc for the curl, a capsule shank and a ring eye, smooth-unioned. For every fragment inside the part the shader fabricates a physically-motivated stress difference: curved-beam bending that peaks at the inner fibre of the throat, near-uniform axial tension in the shank, and two sharp stress concentrations at the inner throat and under the eye.

That stress difference becomes an optical retardation in nanometres. The transmitted colour is then integrated across the visible spectrum — twenty-four wavelengths, each weighted by an analytic approximation of the CIE colour-matching functions, its intensity the dark-field polariscope term sin²(πR/λ), summed in XYZ and converted to sRGB. Zero stress gives black extinction; as retardation climbs the pixel walks the true Michel-Lévy colour sequence. Raise the load and the retardation rises, so the sin² term cycles faster and the fringes literally multiply and crowd at the concentrations. A faint, slowly rotating isoclinic brush recalls the plane polariscope beneath the colour.

The fringe-order legend in section 02 runs the identical colour model in JavaScript, painting a canvas strip so the chart and the object are guaranteed to agree. GSAP choreographs one load-in sequence and the quiet scroll reveals.

Robustness

What happens when things go wrong

Iteration log

Three passes

Pass 1 — Craft

Legibility over the fringes

The resting screenshot was gorgeous but the mono eyebrow crossed the brightest fringes of the throat and washed out ("Bench 4" vanished). Added a soft left-anchored scrim behind the hero copy and shifted the hook slightly right on wide screens to clear the wordmark column, so the eyebrow and lede hold contrast while the object keeps its glow. Confirmed the type scale, tabular readouts and specimen rows read as one system.

Pass 2 — Depth

Two stress risers and a filmic grain

Enriched the stress model with a dedicated concentration term at both the inner throat and under the eye, so raising the load crowds fringes at two authentic risers rather than one — the true signature of the effect. Added the JavaScript-painted Michel-Lévy legend as a second-read artefact (it is computed the same way as the hook, so an attentive viewer can match a colour on the strip to a band on the throat), and a fine optical grain over the whole page for cinematic cohesion.

Pass 3 — Hardening

375px, reduced motion, and the fallback path

At 375px the copy overlapped the lower curl, so a vertical mobile scrim now darkens the text band while the hook's crown stays bright. Verified in headless Chrome: exactly one <h1>, zero console errors including WebGL, the reduced-motion path drawing a loaded static frame, and the signature itself — driving the load from N 1.5 to N 8.6 changed the rendered fringes (screenshot-hash diff). Removed a redundant blue vignette tint that muddied the ground.