Don’t have your code read from eulerAngles (or localEulerAngles). Instead, control the angle yourself in a float, then drive the rotation with a fresh rotation each time, created with Quaternion.Euler( 0, 0, angle), for example.
Here’s why:
Notes on clamping camera rotation and NOT using .eulerAngles because of gimbal lock:
How to instantly see gimbal lock for yourself:
All about Euler angles and rotations, by StarManta: