All four configurable steps (resize, convert, compress, metadata) now have signal handlers that update the shared JobConfig via AppState. The run_processing function builds ProcessingJob from actual user choices instead of hardcoded values. Fixed clippy warnings (collapsed if-let chain, removed needless borrow).