Form-driven payouts: configure a reward visitors earn on approval

Any Form block can be configured as a reward form: visitors see the offer ("$50 for an approved photo submission") upfront, the submission lands in your inbox stamped with payout metadata, and an org admin triggers the actual transfer after reviewing the entry.

Configure the form:
1. Select a Form block in the editor
2. Scroll to the "Payout (reward)" section at the bottom of the inspector
3. Set Payout enabled = "On"
4. Amount (cents) — e.g. 5000 = $50.00
5. Currency — three-letter code (default USD)
6. Description — visible to visitors below the amount (e.g. "for an approved photo submission")

What visitors see:
A green-bordered reward chip renders above the form heading: "REWARD · $50 · for an approved photo submission". The form below is unchanged — visitors fill it in normally and submit.

What happens on submit:
The submission is stamped with extra fields: payoutEnabled=true, payoutAmountCents, payoutCurrency, payoutDescription, payoutStatus='pending'. It lands in your submissions inbox just like any other form entry.

Approving + paying (admin):
The submissions inbox surfaces a "Pay $X" action on payout-enabled records. Click it to trigger the Stripe Connect transfer to the email captured on the form (visitors don't need to pre-onboard — recipient onboarding happens through the email link). Status flips: pending → paid (with stripeTransferId stamped) or rejected (with optional reason). Failed transfers retry up to 3 times before moving to a failed state with a manual retry option.

Stripe Connect end-to-end (Phase 11 v3):
The "Pay $X" button now triggers a real Stripe Connect transfer to the email captured on the form. If the recipient has no Connect account yet, the platform creates an Express account on the fly and the recipient gets an onboarding email. Until they finish onboarding the payout sits in 'awaiting-onboarding' and the inbox shows that state on the row. Once onboarding completes, the transfer fires automatically.

Idempotency + audit:
Every transfer uses idempotency key form_payout_{submissionId} so a double-click can't pay twice. A GL entry posts automatically (debit 6500 Bounty Expense / credit 1010 Cash) so the books stay clean. The submission row shows status chips end-to-end: pending → awaiting-onboarding → paid (with stripeTransferId stamped) or rejected (with optional reason) or failed.

Recipient onboarding:
The Stripe Express onboarding link goes to the email captured on the form. Recipients don't need any prior Turtini relationship — they complete a short Stripe form (name, address, bank). For small amounts (varies by country), Stripe may waive identity verification on the first transfer.