A pendant that actually hangs there
The legacy swing was a fixed CSS keyframe — one rigid image rotating on a hard 4-second loop. Rebuilt as a JS verlet single-pendulum pivoting at the clasp, with an energy thermostat that holds the amplitude forever: it never decays to rest and never repeats exactly, so it reads as a real hanging chain. The drop-shadow and a background cast shadow sweep in sync, and the pendant takes a subtle parallax lean toward the cursor.
- Before
- One image, linear 4s CSS keyframe, ±8°.
- After
- Verlet pendulum — never decays, never a hard loop.
- src/app/page.tsx — verlet integrator + per-frame energy thermostat (g≈0.0007, ±~8°)
- Asset-separated layers: a static chain-top over the moving pendant so the top link sits over the bail (no shear)
- prefers-reduced-motion → static hero, no JS swing


