1c58f12c5d
The green/black-sheet luminance threshold could not separate the slab from the 'black' sheet, which in real photos reads at lum ~50 and overlaps the slab's bark/shadow tones (measured on the user's samples: 0% green, 60-80% dark, no brightness gap) - it removed 100% of the image. Replace the mask pass with connectivity-based background removal: sample the sheet tone from the border, flood-fill from the border marking sheet-connected pixels as background, keep the connected remainder as the slab. Robust to tonal overlap. Adds bgRemoval.ts (removeBackground + sampleSheetTone) with unit tests proving a sheet-toned slab pixel survives via enclosure.