Local-first with instant UI updates — data reads from IndexedDB, mutations sync to server via GraphQL.