lib/confirm.tsx — one ConfirmProvider (wraps the app) + a promise-based
useConfirm(). Any sensitive action does if (await confirm({ title, message, danger })) …; a single dialog handles Esc/Enter/click-outside and stops
propagation so open popovers don't close underneath it.
Confirmation wired into the destructive actions: space deletion (TopBar),
remove member + revoke invite (SharePopover), and disconnect Notion
(IntegrationsPanel). Danger styling on the confirm button.
Notes
Per product decision, individual card deletes stay instant (no per-card prompt)
to keep canvas editing fast.