/** Phone photos are 4–8 MB; shrink to ~1600px JPEG so a yard with poor signal can still upload. Browser only. */ export async function shrinkImage(file: File, name = 'photo.jpg', maxSide = 1600): Promise { try { const bmp = await createImageBitmap(file); const scale = Math.min(1, maxSide / Math.max(bmp.width, bmp.height)); const canvas = document.createElement('canvas'); canvas.width = Math.round(bmp.width * scale); canvas.height = Math.round(bmp.height * scale); canvas.getContext('2d')!.drawImage(bmp, 0, 0, canvas.width, canvas.height); const blob = await new Promise(r => canvas.toBlob(r, 'image/jpeg', 0.8)); return blob ? new File([blob], name, { type: 'image/jpeg' }) : file; } catch { return file; } }