Not a wallet. Not SMS money. Not multisig with a new name.
Remote scammers cannot stand in your light. Stolen halves expire. Gateways cannot sign for you.
Self-custody is mandatory (assertSelfCustody). gatewayHeldSeed: true throws.
Optical: pass captures from optical-capture.ts (getUserMedia or raster sample) into confluentSeal → seal channel: "optical-capture". Headless CI may omit captures and get channel: "simulated". Distinct partyIds still required. Lab Kindling uses the raster optical path by default.