- Add GRAVITY_ANOMALY_FLOOR/CEIL constants
- Add createGravityZones() — three cylindrical zones with rising particles,
floor ring indicators, and translucent disc fills
- Add rebuildGravityZones() — repositions zones to match loaded portal
positions and tints them to each portal's color/status
- Animate particles floating upward with horizontal drift; reset to floor
when they exceed ceiling height
- Ring/disc opacity pulses subtly via sine wave each frame
- respects performanceTier particle budget via particleCount()
Refs #478