feat(editor): 8-point curve crop + CamScanner-grade pro filters v1.089 User compared our magic-color output against CamScanner's Magic Pro and asked for parity, plus CamScanner's 8-point (curved-edge) crop. 8-point curved crop: - CornerOverlayView gains 4 edge-midpoint handles (white, smaller) on top of the 4 corner handles. Each edge draws as a quadratic Bezier through its midpoint, so a curled paper edge can be matched by hand. Dragging a corner carries its two adjacent midpoints by half the delta, keeping a straight edge straight and a curved edge's bend intact. - CurveWarp (new) flattens the 8-point curved boundary with a Coons patch (each edge a quadratic Bezier; coarse 80x80 grid -> OpenCV resize+remap, same strategy as UVDoc). EditorFlatten uses it only when an edge is actually bent (isCurved past 0.5% of the short side); otherwise the existing perspective warp runs, so the straight-edge case is unchanged. Math validated in the python spike: straight edges map corners exactly, a bent midpoint lies on the boundary, remap leaves 0% black. CamScanner-grade filters (new ProFilters): - Magic Pro: magicColor (illumination flatten) -> per-channel white-point normalize (65th pct -> 242) -> bilateral texture suppression -> levels (black 35 / white 205) -> sharpen. This pushes the background to true white and kills paper-wrinkle texture, matching CamScanner's Magic Pro (our old magic left a gray cast). Validated on the reported document. - Deshadow: LAB L-channel background division (shadows gone, color kept). - Eco: scan-gray + raised white point (ink-saving light scan). - Editor and camera filter menus now expose 매직프로/음영제거/에코; the redundant enhance button was dropped (the function stays as a fallback). Constraint: CurveWarp/PerspectiveTransformer never recycle their source; EditorFlatten owns intermediates and the caller owns hi. Curve warp only triggers when a midpoint is bent past threshold. Confidence: medium-high Scope-risk: module Reversibility: moderate Directive: on-device, confirm the 8-point handles drag smoothly under zoom and Magic Pro background is pure white; tune levels white point (205) if some papers stay gray. Tested: assembleDebug + testDebugUnitTest exit=0 (25 tests, CurveWarpTest 3 new); python validation of Coons math, remap integrity, and Magic Pro background whiteness; manual memory/touch-path audit (no dangling enhance refs, recycle chain leak-free). Not-tested: on-device 8-point gesture feel and filter look across diverse papers. Related: CamScanner libpagescanner (CurveCropDewarp / 8-point), ENGINEERING_LOG section 4 (filters) 🐙 Autopus