-
+
Save details
diff --git a/src/app/portal/portal-sign-out.tsx b/src/app/portal/portal-sign-out.tsx
index 700e4f7..9c06e7f 100644
--- a/src/app/portal/portal-sign-out.tsx
+++ b/src/app/portal/portal-sign-out.tsx
@@ -21,7 +21,7 @@ export function PortalSignOut() {
};
return (
-
+
Sign out
diff --git a/src/components/admin/admin-loading.tsx b/src/components/admin/admin-loading.tsx
new file mode 100644
index 0000000..e5a2014
--- /dev/null
+++ b/src/components/admin/admin-loading.tsx
@@ -0,0 +1,31 @@
+import { Skeleton } from "@/components/ui/skeleton";
+import { cn } from "@/lib/utils";
+
+// Shared admin loading state (#280). Replaces bare `Loading...`
+// divs — which announced nothing to screen readers and yanked the
+// layout when content arrived — with a status-announced skeleton that
+// roughly matches a page: title line, a wide card, then row lines.
+// The pulse is motion-safe only (see Skeleton).
+export function AdminLoading({
+ label,
+ rows = 3,
+ className,
+}: {
+ // What is loading — announced to assistive tech as
+ // "Loading
@@ -238,7 +239,7 @@ export function AdminShell({ children }: { children: React.ReactNode }) {
View Site
@@ -246,11 +247,12 @@ export function AdminShell({ children }: { children: React.ReactNode }) {
- {loggingOut ? "Logging out…" : "Logout"}
+ Logout