. A hardcoded title renders first and, since the HTML spec uses the first , would override every page's title in the initial SSR HTML. --> <script> // Desktop-only gate — runs before SvelteKit hydrates. // Spec: BROWSER_SUPPORT_POLICY.md §6 (function () { try { var path = window.location.pathname; // Only the interactive document tools are desktop-only; the marketing // landing, pricing, license, and legal pages are viewable on any device. var isToolRoute = path === '/app' || path.indexOf('/app/') === 0 || path === '/merge' || path.indexOf('/merge/') === 0; if (!isToolRoute) return; if (window.location.search.indexOf('force-desktop=true') !== -1) { try { sessionStorage.setItem('aegis-force-desktop', '1'); } catch (_) {} return; } if (sessionStorage.getItem('aegis-force-desktop') === '1') return; var ua = navigator.userAgent; var isMobileOrTablet = /Mobi|Android|iPhone|iPad|iPod/i.test(ua) || (window.matchMedia('(pointer: coarse)').matches && window.innerWidth < 1024) || (navigator.maxTouchPoints > 1 && window.innerWidth < 1280); if (isMobileOrTablet) { window.location.replace('/desktop-required'); } } catch (_) { // If detection throws, fail open — let the app load. } })(); </script> <script> // Theme (no-flash). Tool + activation pages are always light; elsewhere // honor the saved choice, falling back to the OS preference. (function () { try { var path = window.location.pathname; var isLightOnly = path === '/app' || path.indexOf('/app/') === 0 || path === '/merge' || path.indexOf('/merge/') === 0 || path === '/license' || path.indexOf('/license/') === 0; var el = document.documentElement; if (isLightOnly) { el.classList.add('light'); return; } var saved = localStorage.getItem('aegis-theme'); var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; if (saved === 'dark' || (!saved && prefersDark)) el.classList.add('dark'); else if (saved === 'light') el.classList.add('light'); } catch (e) {} })(); </script> %sveltekit.head% <script defer src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon='{"token":"0392b2ccade54eb390155402e87e233b"}'></script></head> <body data-sveltekit-preload-data="hover"> <div style="display: contents"><!--[--><!--[0--><!--[--><!--[-1--><div class="flex min-h-screen flex-col"><nav class="sticky top-0 z-40 border-b backdrop-blur" style="background-color: color-mix(in srgb, var(--color-bg) 82%, transparent); border-color: var(--color-border)"><div class="mx-auto max-w-6xl px-4 sm:px-6"><div class="flex h-16 items-center justify-between gap-4"><a href="/" class="flex items-center gap-2.5 no-underline" style="color: var(--color-text)"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="30" height="30" role="img" aria-label="AegisPDF"><title>AegisPDF AegisPDF

The desktop PDF workstation for documents you can't upload.

Find and redact sensitive data, OCR scanned pages, and merge documents, entirely in your browser. Your files never leave your device.

Pick a PDF to open it in your browser.

No document loaded. Open a PDF to begin.

Page operations: click thumbnails to navigate, ✕ to delete, drag to reorder, multi-select then Extract to split into a new PDF. Every action goes on the undo stack.