injects below — and a static one here would come FIRST in the document, so the browser and every crawler would use it and ignore the page's own. That was live: all three prerendered pages carried two tags and the generic one won. The SPA fallback (200.html) has no title until JS runs, which is correct for a shell that only ever exists to boot the app. --> <!-- Figtree font from Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Figtree:wght@400;500;600;700&display=swap" rel="stylesheet"> %sveltekit.head% </head> <body data-sveltekit-preload-data="hover" class="bg-base-100 text-base-content antialiased"> <div style="display: contents"> <div class="min-h-screen flex flex-col"> <header class="bg-base-200 border-b border-base-300 sticky top-0 z-50"><nav class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex justify-between h-16"><div class="flex items-center"><a href="./" class="flex items-center space-x-2" data-svelte-h="svelte-rxuus8"><span class="text-2xl">🍐</span> <span class="font-semibold text-xl text-base-content">Model Pear</span></a></div> <div class="hidden sm:flex items-center space-x-4" data-svelte-h="svelte-gw3tpg"><a href="./structuring" class="text-base-content/70 hover:text-base-content px-3 py-2 text-sm font-medium transition-colors">Transaction Structuring</a> <a href="./pricing" class="text-base-content/70 hover:text-base-content px-3 py-2 text-sm font-medium transition-colors">Pricing Calculator</a></div> <div class="flex items-center sm:ml-4 dropdown dropdown-end dropdown-close"><button id="burger-trigger" type="button" class="btn btn-ghost btn-square" aria-haspopup="menu" aria-expanded="false" aria-controls="burger-menu" aria-label="Open menu"><svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg></button> <ul id="burger-menu" role="menu" tabindex="-1" aria-labelledby="burger-trigger" class="menu dropdown-content bg-base-200 border border-base-300 rounded-box shadow-2xl w-72 max-w-[calc(100vw-1rem)] mt-2 p-2"> <li><a href="./structuring" data-menu-item data-close role="menuitem">Transaction Structuring</a></li> <li><a href="./pricing" data-menu-item data-close role="menuitem">Pricing Calculator</a></li> <li class="menu-divider" data-svelte-h="svelte-1ll3hx0"><hr class="border-base-300"></li> <li><button type="button" data-menu-item role="menuitem"> <svg class="h-5 w-5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v2m0 14v2m9-9h-2M5 12H3m15.364-6.364l-1.414 1.414M7.05 16.95l-1.414 1.414m12.728 0l-1.414-1.414M7.05 7.05L5.636 5.636M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path></svg> <span data-svelte-h="svelte-f4uih9">Light mode</span></button></li> <li><button id="burger-install-item" type="button" data-menu-item data-close hidden class="hidden" role="menuitem" data-svelte-h="svelte-4hthh7"><svg class="h-5 w-5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4 4m0 0l-4-4m4 4V4"></path></svg> <span>Install app</span></button></li> <li><button type="button" data-menu-item role="menuitem" data-svelte-h="svelte-1n5pw6s"><svg class="h-5 w-5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path></svg> <span>Check for updates</span></button></li> <li><label class="justify-between gap-3"><span class="flex flex-col items-start gap-0.5" data-svelte-h="svelte-1nin02m"><span>Automatic updates</span> <span class="text-xs text-base-content/60">Updates apply automatically when the app opens</span></span> <input type="checkbox" class="toggle toggle-primary toggle-sm flex-shrink-0" data-menu-item role="menuitemcheckbox" checked aria-checked="true"></label></li> <li class="menu-divider" data-svelte-h="svelte-1ll3hx0"><hr class="border-base-300"></li> <li><button type="button" data-menu-item role="menuitem" data-svelte-h="svelte-1pp4bkd"><svg class="h-5 w-5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"></path></svg> <span>Save as PDF</span></button></li></ul></div></div></nav></header> <main class="flex-1"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12" data-svelte-h="svelte-12v10t2"> <div class="text-center mb-12"><h1 class="text-4xl font-bold text-base-content mb-4">Software Transaction Structuring Tool</h1> <p class="text-xl text-base-content/70 max-w-3xl mx-auto">Find the best deal structure for both you and your client. Analyse financial impact, tax efficiency, and long-term value across multiple transaction models.</p></div> <div class="grid md:grid-cols-2 gap-8 max-w-4xl mx-auto"> <a href="./pricing" class="card bg-base-200 border border-base-300 transition-all duration-200 hover:border-primary/50 hover:bg-base-200/80 p-8 group"><div class="flex items-center space-x-4 mb-4"><div class="w-12 h-12 bg-primary/20 rounded-lg flex items-center justify-center"><span class="text-2xl">💰</span></div> <h2 class="text-2xl font-semibold text-base-content group-hover:text-primary transition-colors">Pricing Calculator</h2></div> <p class="text-base-content/70 mb-6">Find the price where you hit your margin AND your client sees clear ROI. Perfect for SaaS, per-seat, usage-based, and one-time pricing models.</p> <div class="flex items-center text-primary font-medium">Get started <svg class="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div></a> <a href="./structuring" class="card bg-base-200 border border-base-300 transition-all duration-200 hover:border-primary/50 hover:bg-base-200/80 p-8 group"><div class="flex items-center space-x-4 mb-4"><div class="w-12 h-12 bg-accent/20 rounded-lg flex items-center justify-center"><span class="text-2xl">📊</span></div> <h2 class="text-2xl font-semibold text-base-content group-hover:text-accent transition-colors">Transaction Structuring</h2></div> <p class="text-base-content/70 mb-6">Compare structures to find the best deal for both parties. Analyse 6 models across financial, tax, accounting, and compliance dimensions.</p> <div class="flex items-center text-accent font-medium">Explore models <svg class="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div></a></div> <div class="mt-16"><h3 class="text-lg font-semibold text-base-content text-center mb-8">What the tool analyses</h3> <div class="grid sm:grid-cols-2 lg:grid-cols-5 gap-4 max-w-5xl mx-auto"><div class="text-center p-4"><div class="w-10 h-10 bg-success/20 rounded-full flex items-center justify-center mx-auto mb-2"><span>💵</span></div> <p class="text-sm font-medium text-base-content">Financial Impact</p> <p class="text-xs text-base-content/70">Revenue, costs, profit</p></div> <div class="text-center p-4"><div class="w-10 h-10 bg-warning/20 rounded-full flex items-center justify-center mx-auto mb-2"><span>🏛️</span></div> <p class="text-sm font-medium text-base-content">Tax Efficiency</p> <p class="text-xs text-base-content/70">SA tax optimisation</p></div> <div class="text-center p-4"><div class="w-10 h-10 bg-primary/20 rounded-full flex items-center justify-center mx-auto mb-2"><span>📖</span></div> <p class="text-sm font-medium text-base-content">Accounting</p> <p class="text-xs text-base-content/70">IFRS treatment</p></div> <div class="text-center p-4"><div class="w-10 h-10 bg-error/20 rounded-full flex items-center justify-center mx-auto mb-2"><span>⚖️</span></div> <p class="text-sm font-medium text-base-content">Compliance</p> <p class="text-xs text-base-content/70">Transfer pricing</p></div> <div class="text-center p-4"><div class="w-10 h-10 bg-accent/20 rounded-full flex items-center justify-center mx-auto mb-2"><span>📈</span></div> <p class="text-sm font-medium text-base-content">Long-term Value</p> <p class="text-xs text-base-content/70">NPV, IRR, payback</p></div></div></div></div></main> <dialog class="modal" aria-labelledby="install-modal-title"> <form method="dialog" class="modal-backdrop" data-svelte-h="svelte-povsts"><button>close</button></form></dialog> <footer class="bg-base-200 border-t border-base-300" data-svelte-h="svelte-covuwu"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6"><div class="flex flex-col sm:flex-row justify-between items-center gap-2"><p class="text-sm text-base-content/70 text-center sm:text-left">Software Transaction Structuring Tool</p> <p class="text-sm text-base-content/60">v2.0.0 - TypeScript + SvelteKit</p></div></div></footer></div> <script> { __sveltekit_1d2009j = { base: new URL(".", location).pathname.slice(0, -1) }; const element = document.currentScript.parentElement; Promise.all([ import("./_app/immutable/entry/start.B5eR6XL9.js"), import("./_app/immutable/entry/app.D_JU9JQ5.js") ]).then(([kit, app]) => { kit.start(app, element, { node_ids: [0, 2], data: [null,null], form: null, error: null }); }); } </script> </div> <!-- Debug pill root — separate from SvelteKit tree so it survives app crashes --> <div id="debug-root"></div> <!-- Pre-framework debug pill (inline, no dependencies). Captures errors before JS bundles load. Includes 20-second loading timeout that warns users if the framework fails to mount. Bridges to the Svelte app via window.__debugPushError(). --> <script> // Circular buffer for pre-framework errors window.__debugErrors = []; window.__debugPushError = function(msg, stack) { window.__debugErrors.push({ msg: msg, stack: stack, time: Date.now() }); if (window.__debugErrors.length > 200) window.__debugErrors.shift(); // Update inline pill badge if it exists var badge = document.getElementById('debug-inline-error-count'); if (badge) { badge.textContent = window.__debugErrors.length; badge.style.display = 'inline'; } }; // Capture errors before any module scripts load. // Stored as named references on window so debugLog.ts can remove them // once the module takes over (prevents double-capture). window.__debugInlineErrorHandler = function(e) { window.__debugPushError(e.message || 'Unknown error', e.filename + ':' + e.lineno); }; window.__debugInlineRejectionHandler = function(e) { window.__debugPushError('Unhandled rejection: ' + e.reason); }; window.addEventListener('error', window.__debugInlineErrorHandler); window.addEventListener('unhandledrejection', window.__debugInlineRejectionHandler); // Loading timeout — warn user if framework fails to mount within 20s window.__debugSvelteMounted = false; window.__debugClearLoadTimer = function() { window.__debugSvelteMounted = true; clearTimeout(window.__debugLoadTimer); // Hide inline pill once Svelte pill takes over var inlinePill = document.getElementById('debug-inline-pill'); if (inlinePill) inlinePill.style.display = 'none'; }; window.__debugLoadTimer = setTimeout(function() { if (!window.__debugSvelteMounted) { // Show inline pill with warning var pill = document.getElementById('debug-inline-pill'); if (pill) pill.style.display = 'flex'; var warning = document.getElementById('debug-inline-warning'); if (warning) warning.style.display = 'block'; } }, 20000); </script> <!-- Inline debug pill (visible only if framework fails to mount within 20s) --> <div id="debug-inline-pill" style=" display: none; position: fixed; bottom: 16px; right: 16px; z-index: 80; flex-direction: column; align-items: flex-end; gap: 8px; font-family: monospace; font-size: 12px; "> <div id="debug-inline-warning" style=" display: none; background: var(--color-base-200); color: var(--color-warning); border: var(--border) solid var(--color-base-300); border-radius: var(--radius-field); padding: 12px 16px; max-width: 320px; line-height: 1.4; "> This is taking longer than usual. Check the browser console for errors, or try reloading. <span id="debug-inline-error-count" style=" display: none; background: var(--color-error); color: var(--color-error-content); border-radius: 9999px; padding: 0 5px; font-size: 10px; margin-left: 4px; ">0</span> </div> </div> </body> </html>