loadFile() reads fileUrl synchronously before its first await. When called from a \$effect, Svelte tracks that read and re-runs the effect every time fileUrl changes — i.e. after every successful load — causing an infinite cycle of file fetches and PdfViewer remounts. Fix: wrap the fileUrl read in untrack() so callers never accidentally subscribe to fileUrl changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>