diff --git a/frontend/src/components/ui/skeleton.tsx b/frontend/src/components/ui/skeleton.tsx
new file mode 100644
index 0000000..b53577f
--- /dev/null
+++ b/frontend/src/components/ui/skeleton.tsx
@@ -0,0 +1,16 @@
+import { cn } from '@/lib/utils'
+
+// push 전환 동안 pending 화면이 빈 배경(라이트 테마 = 흰 화면)으로 슬라이드되어
+// 보이지 않도록, 실제 레이아웃의 자리를 흉내 내는 shimmer 플레이스홀더 조각.
+// 화면별 스켈레톤을 감싸는 쪽에서 role="status" aria-label="불러오는 중"을 달고,
+// 조각 자체는 보조기기에 노출하지 않는다.
+export function Skeleton({ className }: { className?: string }) {
+ return (
+
+
+
+ )
+}
diff --git a/frontend/src/stackflow/activities/event-detail-activity.tsx b/frontend/src/stackflow/activities/event-detail-activity.tsx
index e6d9abb..e746368 100644
--- a/frontend/src/stackflow/activities/event-detail-activity.tsx
+++ b/frontend/src/stackflow/activities/event-detail-activity.tsx
@@ -3,6 +3,7 @@ import { useFlow } from '@stackflow/react'
import type { ActivityComponentType } from '@stackflow/react'
import { ActivityShell } from '@/stackflow/components/activity-shell'
import { MonogramAvatar } from '@/components/ui/monogram-avatar'
+import { Skeleton } from '@/components/ui/skeleton'
import { Badge } from '@/components/ui/badge'
import { fetchEvent } from '@/lib/api/events'
import { fetchPersons } from '@/lib/api/persons'
@@ -47,9 +48,34 @@ export const EventDetailActivity: ActivityComponentType<'EventDetail'> = ({
if (eventQuery.isPending) {
return (
-
- 불러오는 중…
-
+
+
+
몽글 상세
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
)
}
diff --git a/frontend/src/stackflow/activities/person-edit-activity.tsx b/frontend/src/stackflow/activities/person-edit-activity.tsx
index 469e9d5..f9febeb 100644
--- a/frontend/src/stackflow/activities/person-edit-activity.tsx
+++ b/frontend/src/stackflow/activities/person-edit-activity.tsx
@@ -6,6 +6,7 @@ import { ActivityShell } from '@/stackflow/components/activity-shell'
import { FormPageHeader } from '@/components/layout/form-page-header'
import { PersonForm, personToFormValues } from '@/components/person/person-form'
import { ConfirmPopup } from '@/components/ui/confirm-popup'
+import { Skeleton } from '@/components/ui/skeleton'
import { fetchChips } from '@/lib/api/chips'
import { deletePerson, fetchPerson, updatePerson } from '@/lib/api/persons'
import { formatPersonName } from '@/lib/format'
@@ -68,16 +69,47 @@ export const PersonEditActivity: ActivityComponentType<'PersonEdit'> = ({
)?.requestSubmit()
}
- if (!Number.isFinite(id) || personQuery.isPending) {
+ if (!Number.isFinite(id)) {
return (