diff --git a/src/components/DocumentViewer.tsx b/src/components/DocumentViewer.tsx
index 0fa1f770..75a627a9 100644
--- a/src/components/DocumentViewer.tsx
+++ b/src/components/DocumentViewer.tsx
@@ -1,6 +1,7 @@
"use client";
import Link from "next/link";
+import dynamic from "next/dynamic";
import { useRouter } from "next/navigation";
import {
CircleAlert,
@@ -64,7 +65,6 @@ import {
} from "@/components/ui-primitives";
import { BadgeCluster } from "@/components/clinical-dashboard/clinical-badge";
import { SignedImage } from "@/components/clinical-dashboard/signed-image";
-import { NativePdfEmbed, PdfCanvasViewer } from "@/components/document-viewer/pdf-canvas-viewer";
import { NonPdfSourcePreview } from "@/components/document-viewer/non-pdf-source-preview";
import { clearCachedSignedUrl, getCachedSignedUrl, setCachedSignedUrl } from "@/lib/signed-url-cache";
import { readLocalProjectIdentity, unsafeLocalProjectMessage } from "@/lib/local-project-identity";
@@ -105,6 +105,34 @@ import { buildDocumentSummaryBadges } from "@/lib/document-summary-badges";
import { documentSummaryQuestion } from "@/lib/answer-contract";
import type { DocumentDetailPayload } from "@/lib/document-detail-contract";
+// pdf-canvas-viewer is only needed after a source document has loaded and the
+// user is viewing a PDF. Keeping it out of the document route's initial client
+// chunk avoids parsing its reader controls for image, text, and download-only
+// documents. pdf.js itself remains loaded on demand by that component.
+const PdfCanvasViewer = dynamic(
+ () => import("@/components/document-viewer/pdf-canvas-viewer").then((module) => module.PdfCanvasViewer),
+ {
+ ssr: false,
+ loading: () =>