fix: guard unwind-protect cleanup against unbound variables
Initialize screen/graph/input/audio to nil before setf so they're
always bound even if init fails. Wrap cleanup in ignore-errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>