+ {/* Hero skeleton — full viewport width like the actual HeroBanner */}
+
diff --git a/app/(pages)/settings/loading.tsx b/app/(pages)/settings/loading.tsx
index f557de5..6ce91f2 100644
--- a/app/(pages)/settings/loading.tsx
+++ b/app/(pages)/settings/loading.tsx
@@ -1,26 +1,48 @@
import { Skeleton } from "@/components/ui/skeleton";
+function SectionSkeleton({
+ headingWidth,
+ children,
+}: {
+ headingWidth: string;
+ children: React.ReactNode;
+}) {
+ return (
+
+ );
+}
+
export default function SettingsLoading() {
return (
{/* Header */}
{/* Account card */}
-
-
-
-
+
+
+
- {/* Media server cards */}
-
-
-
-
-
+ {/* Integrations cards */}
+
+
+
+
+
+
+
);
}
diff --git a/components/skeletons.tsx b/components/skeletons.tsx
index 68dd86c..efee6be 100644
--- a/components/skeletons.tsx
+++ b/components/skeletons.tsx
@@ -1,5 +1,14 @@
import { Skeleton } from "@/components/ui/skeleton";
+function SectionHeading({ width = "w-32" }: { width?: string }) {
+ return (
+
+
+
+
+ );
+}
+
export function TitleCardSkeleton() {
return (
@@ -14,7 +23,7 @@ export function TitleCardSkeleton() {
export function ContinueWatchingSkeleton() {
return (
-
+
@@ -28,12 +37,14 @@ export function ContinueWatchingSkeleton() {
}
export function StatCardSkeleton() {
- return
;
+ return (
+
+ );
}
export function StatsSectionSkeleton() {
return (
-
+
@@ -45,8 +56,8 @@ export function StatsSectionSkeleton() {
export function ContinueWatchingSectionSkeleton() {
return (
-
-
+
+
@@ -59,7 +70,7 @@ export function ContinueWatchingSectionSkeleton() {
export function TitleGridSectionSkeleton() {
return (
-
+
@@ -90,20 +101,32 @@ export function RecommendationsSkeleton() {
export function TitleDetailSkeleton() {
return (
-
-
-
+
+
+
-
-
+
-
-
-
+
+
+
+
+ {Array.from({ length: 5 }).map((_, i) => (
+ // biome-ignore lint/suspicious/noArrayIndexKey: static skeleton
+
+ ))}
+
@@ -116,7 +139,7 @@ export function DashboardSkeleton() {