[ Interaction Lab ]
Tap an interaction to try it
[ ACCRETION ]
hover to pull · hold, then let go
a = −∇Φ · ∇²Φ = 4πGρ · softened ε
4000 grains · 3 masses
captured 0 · mass ×0.00 · rev 0
[ GROWN TO SHAPE ]
click to change the shape
∂v/∂t = Dv·lap v + u·v^2 − (F + k)·v
F 0.037 · k 0.06 · v = 0 outside the mask
[ MERCURY ]
hover to pull · grab and fling
F(d) = σ·sin(π(d − r₀)/(h − r₀)) · Σ b²/|p − xᵢ|² = 1
60 particles · σ 1800
drops 1 · held 0 · |v| 0
[ PATH ]
drag the slit down the d attribute
B(u) = (1−u)³P₀ + 3(1−u)²uP₁ + 3(1−u)u²P₂ + u³P₃
bell · 11 commands · viewBox 100
0/11 M · pen 0 0 · len 0
[ LOUPE ]
read the small print · press to zoom
ρ = R · M·u / (1 + (M − 1)·u), u = d/R
R 118px · M 2.4 / 3.4 · 9px print
×2.4 · ln 1:1 · 0 legible
[ PALIMPSEST ]
slide from draft to final
cᵢ = m > θᵢ ? finalᵢ : draftᵢ · ghostᵢ = the other
m = x / w · θ = blob(x, y) · 52 × 20
draft 100% · final 0%
[ REACTION–DIFFUSION ]
∂v/∂t = Dv·lap v + u·v^2 − (F + k)·v
F 0.037 · k 0.06 · Du 1 · Dv 0.5
[ SPRING ]
drag a number · drag the mass · tap to step
m·ẍ = −k(x − x₀) − c·ẋ · ζ = c / 2√(km)
k 20–1000 · c 0–60 · m 0.1–4
ζ 0.30 · settle 0.00s · over 0%
00000000000000000000
1
.
sheet
[
data-open
] {
2
transform
:
translateY
(
0
);
3
transition
:
transform
400ms
4
cubic-bezier
(
0.32
,
0.72
,
0.00
,
1.00
);
5
}
0
1
t →
[ EASE ]
drag a number or a handle · tap to replay
B(s) = 3(1−s)²s·P₁ + 3(1−s)s²·P₂ + s³ · y = B_y(B_x⁻¹(t))
P₀ (0,0) · P₃ (1,1) · ticks at 60 Hz
24 frames · Δmax 17% · t 0.00
[ CONTOURS ]
erase · watch it heal
∂v/∂t = Dv·lap v + u·v^2 − (F + k)·v
F 0.037 · k 0.06 · isolines v 0.10 0.19 0.28
[ TORCH ]
aim the lamp · hold to focus
Iᵢ = cone(∠ᵢ − φ, α) · reach(dᵢ, L)
α 24° → 11° · L 340 → 560px
aim 0° · lit 0 · read 0%
[ STIR ]
move through the water
u = ∇ × ψ(x, t) · E + drag(p, ṗ, σ)
n 3 000 · σ 46px · τ 1.8s
stir 0.00 · calm
[ LEVEL ]
drag sideways to tilt
Σ [ (x − x₀)·ĝ(φ) ≥ h ] = V per vessel · φ̈ = k(θ − φ) − cφ̇
flood fill 42% · k 40 · c 3.2
tilt 0° · surface 0° · wet 42%
[ KEYFRAMES ]
drag the slit through the stops
v = lerp(vₖ, vₖ₊₁, B(u)) · u from slit y between stops
sheet-in · 3 stops · 500ms
offset 0% · y 100.0% · op 0.00