···99 // svelte-ignore state_referenced_locally
1010 let record = $state(data[item.cardType] as any);
11111212- // Use card-specific emoji if set, otherwise fall back to PDS data
1313- let emoji = $derived(item.cardData?.emoji ?? record?.value?.status);
1212+ let mode = $derived(item.cardData?.mode ?? 'emoji');
1313+ // Emoji mode: use cardData. Statusphere mode: use latest record from PDS.
1414+ let emoji = $derived(
1515+ mode === 'statusphere' ? record?.value?.status : item.cardData?.emoji
1616+ );
1417 let animated = $derived(emojiToNotoAnimatedWebp(emoji));
1518</script>
1619
+8-3
src/lib/cards/media/StatusphereCard/index.ts
···55import { listRecords, putRecord } from '$lib/atproto';
66import StatusphereCard from './StatusphereCard.svelte';
77import EditStatusphereCard from './EditStatusphereCard.svelte';
88+import SettingsStatusphereCard from './SettingsStatusphereCard.svelte';
89import icons from './icons.json';
910import * as TID from '@atcute/tid';
1011···1213 type: 'statusphere',
1314 contentComponent: StatusphereCard,
1415 editingContentComponent: EditStatusphereCard,
1616+ settingsComponent: SettingsStatusphereCard,
15171618 createNew: (item) => {},
17191820 loadData: async (items, { did }) => {
2121+ // Only fetch statusphere records if any card uses statusphere mode
2222+ const needsStatusphere = items.some((i) => i.cardData.mode === 'statusphere');
2323+ if (!needsStatusphere) return undefined;
2424+1925 const data = await listRecords({ did, collection: 'xyz.statusphere.status', limit: 1 });
2020-2126 return data[0];
2227 },
2328 upload: async (item) => {
2424- if (item.cardData.hasUpdate) {
2929+ if (item.cardData.mode === 'statusphere' && item.cardData.hasUpdate) {
2530 await putRecord({
2631 rkey: TID.now(),
2732 collection: 'xyz.statusphere.status',
···3136 }
3237 });
3338 delete item.cardData.hasUpdate;
3434- // Keep item.cardData.emoji so each card can have its own status
3939+ delete item.cardData.emoji;
3540 }
36413742 return item;