/ src / routes / +layout.svelte
+layout.svelte
 1  <script lang="ts">
 2  	import { friendkit } from '$lib/store.svelte';
 3  	import { page } from '$app/state';
 4  	import { goto } from '$app/navigation';
 5  	import { resolve } from '$app/paths';
 6  	import { accessibility } from '$lib/accessibility.svelte';
 7  	import favicon from '$lib/assets/favicon.svg';
 8  	import { UIRoot } from 'svelte-akui';
 9  	import '$lib/styles/global.css';
10  
11  	let { children } = $props();
12  
13  	// Global onboarding redirect logic
14  	$effect(() => {
15  		const isAuth = friendkit.accessToken && friendkit.instance;
16  		const hasSync = !!friendkit.lastSync;
17  		const path = page.url.pathname;
18  		
19  		if (isAuth && !hasSync && path !== '/' && !path.startsWith('/callback') && path !== '/firstrun') {
20  			goto(resolve('/firstrun')).catch(console.error);
21  		}
22  	});
23  
24  	// The 'accessibility' store handles theme and contrast detection globally.
25  </script>
26  
27  <svelte:head>
28  	<link rel="icon" href={favicon} />
29  	<title>Friendkit - Mastodon Friend Manager</title>
30  </svelte:head>
31  
32  <UIRoot>
33  	{@render children()}
34  </UIRoot>
35  
36  <style>
37  </style>