pub fn step(attractor: AttractorType, state: Vec3, dt: f32) -> (Vec3, Vec3)
Evolve by one step and return (new_state, displacement). Uses RK4 for accuracy.