Add consent-gated replication: "Add" publishes an offer instead of syncing immediately
Dashboard "Add" now calls offerDid() which publishes an offer record and stores in
offered_dids table without triggering sync. Replication begins only when mutual consent
is detected during periodic offer discovery. Offered DIDs display with purple "offered"
status in the dashboard and can be revoked.