···97979898### Cubit
9999100100-- [ ] `ProfileContextCubit` - manages tab state, loads counts on init for all three tabs
101101-- [ ] `ProfileContextState` - fields: `blockedByCount`, `blockingCount`, `listsOnCount`, per-tab `status` (initial/loading/loaded/error), per-tab item list + cursor
102102-- [ ] `loadBlockedBy({cursor})` - fetches page of blocked-by profiles, appends to state
103103-- [ ] `loadBlocking({cursor})` - fetches page of blocking profiles, appends to state
104104-- [ ] `loadListsOn({cursor})` - fetches page of lists, appends to state
105105-- [ ] Handle own-profile vs other-profile: blocking tab only available for own profile
100100+- [x] `ProfileContextCubit` - manages tab state, loads counts on init for all three tabs
101101+- [x] `ProfileContextState` - fields: `blockedByCount`, `blockingCount`, `listsOnCount`, per-tab `status` (initial/loading/loaded/error), per-tab item list + cursor
102102+- [x] `loadBlockedBy({cursor})` - fetches page of blocked-by profiles, appends to state
103103+- [x] `loadBlocking({cursor})` - fetches page of blocking profiles, appends to state
104104+- [x] `loadListsOn({cursor})` - fetches page of lists, appends to state
105105+- [x] Handle own-profile vs other-profile: blocking tab only available for own profile
106106107107### UI
108108
···1616 return _constellation.getBacklinksCount(did, 'app.bsky.graph.block:subject');
1717 }
18181919+ /// Returns the number of lists that [did] is a member of.
2020+ Future<int> getListsOnCount(String did) async {
2121+ return _constellation.getBacklinksCount(did, 'app.bsky.graph.listitem:subject');
2222+ }
2323+1924 /// Returns a page of profiles that have blocked [did], along with the total
2025 /// count and a cursor for the next page.
2126 Future<({List<ProfileView> profiles, String? cursor, int total})> getBlockedByProfiles(