POST /jobs/{id}/cancel sets status → cancelled, frees printer if printing, logs 'Job cancelled'. Button visible in all non-terminal states (queued, printing). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>