Gravity well
The key visual: a gravity well drawn across the whole section on a canvas, with cubes, spheres and dust orbiting it on two rings. The slot is the copy that sits on it. It is decoration: it labels nothing and tells no story; the copy does. “Everything gravitates towards the token” is what it means.
The well at rest, with the copy on it
The copy sits on the well.
Headline, subline and actions go in the slot; the mesh fades out before anything below starts.
The copy sits on the well.
Headline, subline and actions go in the slot; the mesh fades out before anything below starts.
Size L, position B, tilt 52
Size L, position B, tilt 52°: the props exist for the docs; the landing page uses the defaults.
Size L, position B, tilt 52°: the props exist for the docs; the landing page uses the defaults.
Story: /stories/gravity-well/large/
The physics, in two sentences
Section titled “The physics, in two sentences”The surface is z(r) = −K(1/r − 1/R_far), seen tilted (64° by default) and with perspective (s = F / (F − z)), so it narrows to a vanishing point below the mouth: the tube to infinity is the surface itself. Rings are log-spaced and flow inward at constant speed in log r; the 28 spokes are logarithmic spirals that turn once in 120 s, so the mesh swirls into the hole.
Guidelines
Section titled “Guidelines”- Cells of the mesh are painted opaque, back to front, in
bg-canvas, so the near wall hides the far wall. Lines arewell-lineand darken towell-throattoward the mouth; the mouth iswell-mouth(the other theme’s paper) with awell-glowrim. Outside the well the view blends back to a flat plane (0.9 R to 2.2 R) before the mesh fades out (0.95 R to 2.6 R); a wash of the page colour fades the top 42 %. - The orbit rings are dashed:
border-defaultoutside,well-glowinside. The objects take thewell-object-*triples (lit, top, shaded face),well-highlightfor the spheres’ specular point andwell-dustfor the motes; the inner ring turns in 60 s, the outer counter-turns in 90 s, the dust in 140 s. - Props:
tilt(40, 52, 64),size(S, L),offset(x and y, per cent of the section),position(A: well right of the copy; B: left). The landing page uses the defaults (64, S, +8 %, 0, A). - Motion: a
requestAnimationFrameloop while the page is visible, a slight parallax on scroll (mesh 0.35, objects 0.18). Underprefers-reduced-motion, and withstill, one frame at t = 0, no spin, no parallax. The canvas is capped at 2× device pixel ratio and isaria-hidden. The objects stay hidden until the script has placed the orbits (data-placed), so they are first painted where they belong: painted at a default position and then moved, Chromium rasterised them at a scale that depended on timing, anddta diffsaw a few pixels change between runs. - Desktop: copy left, well right; phones: the well above the copy, the section clipped so the x offset never scrolls sideways.
Tokens used
Section titled “Tokens used”Read from the component’s source (the canvas reads well-line, well-throat, well-mouth, well-glow, bg-canvas and border-default at run time):
--a--cx--cy--dy1--dy2--dyd--f--f2--f3--k--r--r1--r2--radius-full--rd--s--s1--s2--sd--space-1--space-12--space-14--space-6--stage-d--stage-m--stroke-hairline--tilt--well-dust--well-highlight--well-object-blue--well-object-blue-dark--well-object-blue-light--well-object-ink--well-object-ink-dark--well-object-ink-light--well-object-orange--well-object-orange-dark--well-object-orange-light--well-throat