Camera keeps moving around in circles and doesn't stop at -90.

Keep your own float for the rotation angle and set it into the rotation. Here’s why:

Notes on clamping camera rotation and NOT using .eulerAngles because of gimbal lock:

How to instantly see gimbal lock for yourself: