Also update generate_type_code() to accept event_id parameter
for proper per-event uniqueness checking.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Display and crop were using inconsistent coordinate systems.
Display now uses: translate(translateX+offsetX, translateY+offsetY) scale(zoomLevel)
Crop uses: srcX = -(offsetX + translateX) / scale
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>