diff --git a/Cargo.lock b/Cargo.lock
index e5c93db..9845496 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3215,6 +3215,7 @@ dependencies = [
  "tauri-plugin-upload",
  "tokio",
  "urlencoding",
+ "uuid",
  "zip 2.2.0",
 ]
 
diff --git a/apps/desktop/components.json b/apps/desktop/components.json
new file mode 100644
index 0000000..a1939f9
--- /dev/null
+++ b/apps/desktop/components.json
@@ -0,0 +1,17 @@
+{
+	"$schema": "https://next.shadcn-svelte.com/schema.json",
+	"style": "new-york",
+	"tailwind": {
+		"config": "tailwind.config.ts",
+		"css": "src/app.css",
+		"baseColor": "neutral"
+	},
+	"aliases": {
+		"components": "$lib/components",
+		"utils": "$lib/utils",
+		"ui": "$lib/components/ui",
+		"hooks": "$lib/hooks"
+	},
+	"typescript": true,
+	"registry": "https://next.shadcn-svelte.com/registry"
+}
\ No newline at end of file
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index a0e3b94..5c07566 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -21,44 +21,43 @@
 		"@kksh/ui": "workspace:*",
 		"@kksh/utils": "workspace:*",
 		"@std/semver": "npm:@jsr/std__semver@^1.0.3",
-		"@tauri-apps/api": "^2",
+		"@tanstack/table-core": "^8.20.5",
+		"@tauri-apps/api": "^2.1.0",
 		"@tauri-apps/plugin-shell": "^2",
-		"bits-ui": "1.0.0-next.36",
 		"gsap": "^3.12.5",
-		"lucide-svelte": "^0.454.0",
 		"lz-string": "^1.5.0",
 		"mode-watcher": "^0.4.1",
 		"semver": "^7.6.3",
-		"svelte-radix": "^2.0.1",
 		"svelte-sonner": "^0.3.28",
 		"sveltekit-superforms": "^2.20.0",
 		"tauri-plugin-clipboard-api": "^2.1.11",
-		"uuid": "^11.0.2"
+		"uuid": "^11.0.3"
 	},
 	"devDependencies": {
 		"@kksh/types": "workspace:*",
 		"@sveltejs/adapter-static": "^3.0.6",
-		"@sveltejs/kit": "^2.7.4",
+		"@sveltejs/kit": "^2.8.0",
 		"@sveltejs/vite-plugin-svelte": "^4.0.0",
 		"@tailwindcss/aspect-ratio": "^0.4.2",
 		"@tailwindcss/container-queries": "^0.1.1",
 		"@tailwindcss/forms": "^0.5.9",
 		"@tailwindcss/typography": "^0.5.15",
-		"@tauri-apps/cli": "^2.0.4",
+		"@tauri-apps/cli": "^2.1.0",
 		"@types/bun": "latest",
 		"@types/semver": "^7.5.8",
-		"@unocss/preset-attributify": "^0.64.0",
 		"autoprefixer": "^10.4.20",
+		"bits-ui": "1.0.0-next.49",
 		"clsx": "^2.1.1",
 		"embla-carousel-svelte": "^8.3.1",
 		"formsnap": "^1.0.1",
+		"lucide-svelte": "^0.456.0",
+		"svelte-radix": "^2.0.1",
 		"tailwind-merge": "^2.5.4",
 		"tailwind-variants": "^0.2.1",
 		"tailwindcss": "^3.4.14",
 		"tailwindcss-animate": "^1.0.7",
 		"tslib": "^2.8.1",
 		"typescript": "^5.6.3",
-		"unocss": "^0.64.0",
 		"vaul-svelte": "^0.3.2",
 		"vite": "^5.4.10"
 	}
diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml
index 9293907..2ffebf6 100644
--- a/apps/desktop/src-tauri/Cargo.toml
+++ b/apps/desktop/src-tauri/Cargo.toml
@@ -48,6 +48,7 @@ tauri-plugin-store = "2.1.0"
 tauri-plugin-deep-link = "2"
 tauri-plugin-log = { version = "2.0.1", features = ["colored"] }
 zip = "2.1.3"
+uuid = "1.11.0"
 # tauri-plugin-devtools = "2.0.0"
 
 [target."cfg(target_os = \"macos\")".dependencies]
diff --git a/apps/desktop/src/app.css b/apps/desktop/src/app.css
index 2e46a91..b3f5499 100644
--- a/apps/desktop/src/app.css
+++ b/apps/desktop/src/app.css
@@ -3,73 +3,75 @@
 @tailwind utilities;
 
 @layer base {
-  :root {
-    --background: 0 0% 100%;
-    --foreground: 0 0% 3.9%;
-    --muted: 0 0% 96.1%;
-    --muted-foreground: 0 0% 45.1%;
-    --popover: 0 0% 100%;
-    --popover-foreground: 0 0% 3.9%;
-    --card: 0 0% 100%;
-    --card-foreground: 0 0% 3.9%;
-    --border: 0 0% 89.8%;
-    --input: 0 0% 89.8%;
-    --primary: 0 0% 9%;
-    --primary-foreground: 0 0% 98%;
-    --secondary: 0 0% 96.1%;
-    --secondary-foreground: 0 0% 9%;
-    --accent: 0 0% 96.1%;
-    --accent-foreground: 0 0% 9%;
-    --destructive: 0 72.2% 50.6%;
-    --destructive-foreground: 0 0% 98%;
-    --ring: 0 0% 3.9%;
-    --radius: 0.5rem;
-	--sidebar-background: 0 0% 98%;
-    --sidebar-foreground: 240 5.3% 26.1%;
-    --sidebar-primary: 240 5.9% 10%;
-    --sidebar-primary-foreground: 0 0% 98%;
-    --sidebar-accent: 240 4.8% 95.9%;
-    --sidebar-accent-foreground: 240 5.9% 10%;
-    --sidebar-border: 220 13% 91%;
-    --sidebar-ring: 217.2 91.2% 59.8%;
-  }
+	:root {
+		--background: 0 0% 100%;
+		--foreground: 0 0% 3.9%;
+		--muted: 0 0% 96.1%;
+		--muted-foreground: 0 0% 45.1%;
+		--popover: 0 0% 100%;
+		--popover-foreground: 0 0% 3.9%;
+		--card: 0 0% 100%;
+		--card-foreground: 0 0% 3.9%;
+		--border: 0 0% 89.8%;
+		--input: 0 0% 89.8%;
+		--primary: 0 0% 9%;
+		--primary-foreground: 0 0% 98%;
+		--secondary: 0 0% 96.1%;
+		--secondary-foreground: 0 0% 9%;
+		--accent: 0 0% 96.1%;
+		--accent-foreground: 0 0% 9%;
+		--destructive: 0 72.2% 50.6%;
+		--destructive-foreground: 0 0% 98%;
+		--ring: 0 0% 3.9%;
+		--radius: 0.5rem;
 
-  .dark {
-    --background: 0 0% 3.9%;
-    --foreground: 0 0% 98%;
-    --muted: 0 0% 14.9%;
-    --muted-foreground: 0 0% 63.9%;
-    --popover: 0 0% 3.9%;
-    --popover-foreground: 0 0% 98%;
-    --card: 0 0% 3.9%;
-    --card-foreground: 0 0% 98%;
-    --border: 0 0% 14.9%;
-    --input: 0 0% 14.9%;
-    --primary: 0 0% 98%;
-    --primary-foreground: 0 0% 9%;
-    --secondary: 0 0% 14.9%;
-    --secondary-foreground: 0 0% 98%;
-    --accent: 0 0% 14.9%;
-    --accent-foreground: 0 0% 98%;
-    --destructive: 0 62.8% 30.6%;
-    --destructive-foreground: 0 0% 98%;
-    --ring: 0 0% 83.1%;
-	--sidebar-background: 240 5.9% 10%;
-    --sidebar-foreground: 240 4.8% 95.9%;
-    --sidebar-primary: 224.3 76.3% 48%;
-    --sidebar-primary-foreground: 0 0% 100%;
-    --sidebar-accent: 240 3.7% 15.9%;
-    --sidebar-accent-foreground: 240 4.8% 95.9%;
-    --sidebar-border: 240 3.7% 15.9%;
-    --sidebar-ring: 217.2 91.2% 59.8%;
-  }
+		--sidebar-background: 0 0% 98%;
+		--sidebar-foreground: 240 5.3% 26.1%;
+		--sidebar-primary: 240 5.9% 10%;
+		--sidebar-primary-foreground: 0 0% 98%;
+		--sidebar-accent: 240 4.8% 95.9%;
+		--sidebar-accent-foreground: 240 5.9% 10%;
+		--sidebar-border: 220 13% 91%;
+		--sidebar-ring: 217.2 91.2% 59.8%;
+	}
+
+	.dark {
+		--background: 0 0% 3.9%;
+		--foreground: 0 0% 98%;
+		--muted: 0 0% 14.9%;
+		--muted-foreground: 0 0% 63.9%;
+		--popover: 0 0% 3.9%;
+		--popover-foreground: 0 0% 98%;
+		--card: 0 0% 3.9%;
+		--card-foreground: 0 0% 98%;
+		--border: 0 0% 14.9%;
+		--input: 0 0% 14.9%;
+		--primary: 0 0% 98%;
+		--primary-foreground: 0 0% 9%;
+		--secondary: 0 0% 14.9%;
+		--secondary-foreground: 0 0% 98%;
+		--accent: 0 0% 14.9%;
+		--accent-foreground: 0 0% 98%;
+		--destructive: 0 62.8% 30.6%;
+		--destructive-foreground: 0 0% 98%;
+		--ring: 0 0% 83.1%;
+
+		--sidebar-background: 240 5.9% 10%;
+		--sidebar-foreground: 240 4.8% 95.9%;
+		--sidebar-primary: 224.3 76.3% 48%;
+		--sidebar-primary-foreground: 0 0% 100%;
+		--sidebar-accent: 240 3.7% 15.9%;
+		--sidebar-accent-foreground: 240 4.8% 95.9%;
+		--sidebar-border: 240 3.7% 15.9%;
+		--sidebar-ring: 217.2 91.2% 59.8%;
+	}
 }
 
 @layer base {
-  * {
-    @apply border-border;
-  }
-  body {
-    @apply bg-background text-foreground;
-  }
-}
\ No newline at end of file
+	* {
+		@apply border-border;
+	}
+	body {
+		@apply bg-background text-foreground;
+	}
+}
diff --git a/apps/desktop/src/lib/cmds/builtin.ts b/apps/desktop/src/lib/cmds/builtin.ts
index d17b71e..cb70ae6 100644
--- a/apps/desktop/src/lib/cmds/builtin.ts
+++ b/apps/desktop/src/lib/cmds/builtin.ts
@@ -4,12 +4,14 @@ import type { BuiltinCmd } from "@kksh/ui/types"
 import { getVersion } from "@tauri-apps/api/app"
 import { WebviewWindow } from "@tauri-apps/api/webviewWindow"
 import { exit } from "@tauri-apps/plugin-process"
+import { dev } from "$app/environment"
 import { goto } from "$app/navigation"
 import { toast } from "svelte-sonner"
+import { derived } from "svelte/store"
 import * as clipboard from "tauri-plugin-clipboard-api"
 import { v4 as uuidv4 } from "uuid"
 
-export const builtinCmds: BuiltinCmd[] = [
+export const rawBuiltinCmds: BuiltinCmd[] = [
 	{
 		name: "Store",
 		iconifyIcon: "streamline:store-2-solid",
@@ -95,7 +97,8 @@ export const builtinCmds: BuiltinCmd[] = [
 				url: "/troubleshooters/extension-window",
 				title: "Extension Window Troubleshooter"
 			})
-		}
+		},
+		keywords: ["extension", "window", "troubleshooter"]
 	},
 	{
 		name: "Extension Permission Inspector",
@@ -104,7 +107,8 @@ export const builtinCmds: BuiltinCmd[] = [
 		function: async () => {
 			appState.clearSearchTerm()
 			goto("/extension/permission-inspector")
-		}
+		},
+		keywords: ["extension"]
 	},
 	{
 		name: "Extension Loading Troubleshooter",
@@ -113,7 +117,8 @@ export const builtinCmds: BuiltinCmd[] = [
 		function: async () => {
 			appState.clearSearchTerm()
 			goto("/troubleshooters/extension-loading")
-		}
+		},
+		keywords: ["extension", "troubleshooter"]
 	},
 	{
 		name: "Create Quicklink",
@@ -124,28 +129,15 @@ export const builtinCmds: BuiltinCmd[] = [
 			goto("/extension/create-quick-link")
 		}
 	},
-	// {
-	// 	name: "Settings",
-	// 	iconifyIcon: "solar:settings-linear",
-	// 	description: "Open Settings",
-	// 	function: async () => {
-	// 		const windows = await getAllWebviewWindows()
-	// 		const found = windows.find((w) => w.label === SettingsWindowLabel)
-	// 		if (found) {
-	// 			ElNotification.error("Settings Page is already open")
-	// 		} else {
-	// 			const win = await newSettingsPage()
-	// 			setTimeout(() => {
-	// 				// this is a backup, if window is not properly loaded,
-	// 				// the show() will not be called within setting page, we call it here with a larger delay,
-	// 				// at least the window will be shown
-	// 				win.show()
-	// 			}, 800)
-	// 		}
-	// 		const appStateStore = useAppStateStore()
-	// 		appStateStore.setSearchTermSync("")
-	// 	}
-	// },
+	{
+		name: "Settings",
+		iconifyIcon: "solar:settings-linear",
+		description: "Open Settings",
+		function: async () => {
+			goto("/settings")
+			appState.clearSearchTerm()
+		}
+	},
 	{
 		name: "Check Update",
 		iconifyIcon: "material-symbols:update",
@@ -226,6 +218,18 @@ export const builtinCmds: BuiltinCmd[] = [
 			}, 2_000)
 		}
 	},
+	{
+		name: "MDNS Debugger",
+		iconifyIcon: "material-symbols:wifi-find",
+		description: "MDNS Debugger",
+		function: async () => {
+			goto("/troubleshooters/mdns-debugger")
+		},
+		flags: {
+			developer: true
+		},
+		keywords: ["mdns", "debugger", "troubleshooter"]
+	},
 	{
 		name: "Toggle Hide On Blur",
 		iconifyIcon: "ri:toggle-line",
@@ -240,5 +244,24 @@ export const builtinCmds: BuiltinCmd[] = [
 			})
 			appState.clearSearchTerm()
 		}
+	},
+	{
+		name: "Toggle Developer Mode",
+		iconifyIcon: "hugeicons:developer",
+		description: "Toggle Developer Mode",
+		function: async () => {
+			appConfig.update((config) => {
+				toast.success(`Developer Mode toggled to: ${!config.developerMode}`)
+				return { ...config, developerMode: !config.developerMode }
+			})
+		}
 	}
-]
+].map((cmd) => ({ ...cmd, id: uuidv4() }))
+
+export const builtinCmds = derived(appConfig, ($appConfig) => {
+	return rawBuiltinCmds.filter((cmd) => {
+		const passDeveloper = cmd.flags?.developer ? $appConfig.developerMode : true
+		const passDev = cmd.flags?.dev ? dev : true
+		return passDeveloper && passDev
+	})
+})
diff --git a/apps/desktop/src/lib/components/common/HotkeyInput.svelte b/apps/desktop/src/lib/components/common/HotkeyInput.svelte
new file mode 100644
index 0000000..f29299e
--- /dev/null
+++ b/apps/desktop/src/lib/components/common/HotkeyInput.svelte
@@ -0,0 +1,81 @@
+<script lang="ts">
+	import { keyCodeToKey, keyCombToDisplay } from "@/utils/js"
+	import { isShortcut } from "@/utils/key"
+	import { Button, Input } from "@kksh/svelte5"
+	import { cn } from "@kksh/svelte5/utils"
+	import { onMount } from "svelte"
+
+	let {
+		// keys = $bindable([]),
+		class: className,
+		// ref = $bindable(null),
+		// recording = $bindable(false),
+		onSubmit
+	}: {
+		// keys?: string[] | null
+		class?: string
+		// recording?: boolean
+		// ref?: HTMLInputElement | null
+		onSubmit?: (keys: string[]) => void
+	} = $props()
+	let keys = $state<string[]>([])
+	let recording = $state(false)
+	let savedShortcut = $state<Set<string> | null>(null)
+	let keyCombination = $derived(
+		savedShortcut !== null
+			? keyCombToDisplay(Array.from(savedShortcut))
+			: keyCombToDisplay(keys ?? [])
+	)
+	let inputRef = $state<HTMLInputElement | null>(null)
+	function onKeyDown(e: KeyboardEvent) {
+		if (recording) {
+			e.preventDefault()
+			const newKeys = [...keys, keyCodeToKey(e.code)]
+			keys = newKeys
+			if (isShortcut(newKeys)) {
+				//   console.log("shortcut detected", newKeys)
+				savedShortcut = new Set(newKeys)
+				recording = false // stop recording
+			}
+		}
+	}
+
+	function onKeyUp(e: KeyboardEvent) {
+		e.preventDefault()
+		if (recording) {
+			keys = keys.filter((k) => k !== keyCodeToKey(e.code))
+		}
+	}
+
+	onMount(() => {
+		console.log(inputRef)
+		inputRef?.focus()
+		setTimeout(() => {
+			inputRef?.focus()
+		}, 100)
+	})
+</script>
+
+<form
+	class="flex flex-col gap-1"
+	onsubmit={(e) => {
+		e.preventDefault()
+		onSubmit?.(Array.from(keys))
+	}}
+>
+	<!-- <pre>recording: {recording}</pre> -->
+	<Input
+		value={keyCombination}
+		class={cn("w-full text-center", className)}
+		onkeydown={onKeyDown}
+		autofocus
+		bind:ref={inputRef}
+		onkeyup={onKeyUp}
+		onfocus={() => {
+			recording = true
+			keys = []
+		}}
+		onblur={() => (recording = false)}
+	/>
+	<Button size="sm" type="submit" variant="outline">Submit</Button>
+</form>
diff --git a/apps/desktop/src/lib/components/common/HotkeyInputPopover.svelte b/apps/desktop/src/lib/components/common/HotkeyInputPopover.svelte
new file mode 100644
index 0000000..8bda438
--- /dev/null
+++ b/apps/desktop/src/lib/components/common/HotkeyInputPopover.svelte
@@ -0,0 +1,49 @@
+<script lang="ts">
+	import { cn } from "@/utils"
+	import { keyCombToDisplay } from "@/utils/js"
+	import { ButtonModule, Input, Label, Popover } from "@kksh/svelte5"
+	import HotkeyInput from "./HotkeyInput.svelte"
+
+	let {
+		class: className,
+		savedHotkey,
+		onSubmit
+	}: { class?: string; savedHotkey: string[]; onSubmit: (keys: string[]) => void } = $props()
+	let recording = $state(false)
+	let keys = $state<string[]>([])
+	function onRecordClicked() {
+		keys = []
+		recording = true
+	}
+	let open = $state(false)
+	let inputRef = $state<HTMLInputElement | null>(null)
+</script>
+
+<Popover.Root bind:open>
+	<Popover.Trigger
+		onclick={onRecordClicked}
+		class={cn(ButtonModule.buttonVariants({ variant: "outline", size: "sm" }), className)}
+	>
+		<!-- <button>recording: {recording}</button> -->
+		{#if savedHotkey.length === 0}
+			<span>Record Hotkey</span>
+		{:else}
+			<span>{keyCombToDisplay(savedHotkey)}</span>
+		{/if}
+	</Popover.Trigger>
+	<Popover.Content
+		class="w-60"
+		onOpenAutoFocus={(e: FocusEvent) => {
+			e.preventDefault()
+			console.log("inputRef", inputRef)
+			// inputRef?.focus()
+		}}
+	>
+		<HotkeyInput
+			onSubmit={(keys) => {
+				open = false
+				onSubmit(keys)
+			}}
+		/>
+	</Popover.Content>
+</Popover.Root>
diff --git a/apps/desktop/src/lib/components/common/sidebar-trigger.svelte b/apps/desktop/src/lib/components/common/sidebar-trigger.svelte
new file mode 100644
index 0000000..9012ed3
--- /dev/null
+++ b/apps/desktop/src/lib/components/common/sidebar-trigger.svelte
@@ -0,0 +1,24 @@
+<script lang="ts">
+	import { goHome } from "@/utils/route"
+	import { Button, SideBar } from "@kksh/svelte5"
+	import { Constants } from "@kksh/ui"
+	import { ArrowLeftIcon } from "lucide-svelte"
+
+	const { useSidebar } = SideBar
+	const sidebar = useSidebar()
+</script>
+
+<div class="fixed flex h-10 w-full items-center gap-2 pl-1 pt-1" data-tauri-drag-region>
+	<SideBar.Trigger class="z-50" />
+	{#if sidebar.state === "collapsed"}
+		<Button
+			variant="outline"
+			size="icon"
+			class="z-50 {Constants.CLASSNAMES.BACK_BUTTON}"
+			onclick={goHome}
+		>
+			<ArrowLeftIcon class="h-4 w-4" />
+		</Button>
+	{/if}
+</div>
+<div class="h-10"></div>
diff --git a/apps/desktop/src/lib/components/standalone/settings/AddDevExtForm.svelte b/apps/desktop/src/lib/components/standalone/settings/AddDevExtForm.svelte
index 53f66d3..83bf116 100644
--- a/apps/desktop/src/lib/components/standalone/settings/AddDevExtForm.svelte
+++ b/apps/desktop/src/lib/components/standalone/settings/AddDevExtForm.svelte
@@ -109,7 +109,7 @@
 	}
 </script>
 
-<div class="flex justify-center gap-3">
+<div class="flex justify-center gap-3 my-3">
 	<Button size="sm" onclick={pickExtFolders}>Install from Extension Folders</Button>
 	<Button size="sm" onclick={pickExtFiles}>Install from Extension Tarball File</Button>
 </div>
diff --git a/apps/desktop/src/lib/components/standalone/settings/hotkey-pick.svelte b/apps/desktop/src/lib/components/standalone/settings/hotkey-pick.svelte
new file mode 100644
index 0000000..0e42f29
--- /dev/null
+++ b/apps/desktop/src/lib/components/standalone/settings/hotkey-pick.svelte
@@ -0,0 +1,22 @@
+<script lang="ts">
+	import HotkeyInput from "@/components/common/HotkeyInput.svelte"
+	import HotkeyInputPopover from "@/components/common/HotkeyInputPopover.svelte"
+	import { appConfig } from "@/stores"
+	import { updateAppHotkey } from "@/utils/hotkey"
+	import { onMount } from "svelte"
+
+	let savedHotkey = $state<string[]>([])
+
+	onMount(() => {
+		savedHotkey = $appConfig.triggerHotkey ?? []
+	})
+
+	function updateHotkey(keys: string[]) {
+		savedHotkey = keys
+		updateAppHotkey(keys, $appConfig.triggerHotkey).then(() => {
+			appConfig.setTriggerHotkey(keys)
+		})
+	}
+</script>
+
+<HotkeyInputPopover {savedHotkey} onSubmit={updateHotkey} />
diff --git a/apps/desktop/src/lib/components/standalone/settings/install-npm-package-name-form.svelte b/apps/desktop/src/lib/components/standalone/settings/install-npm-package-name-form.svelte
index 4cb78b5..02d7f2d 100644
--- a/apps/desktop/src/lib/components/standalone/settings/install-npm-package-name-form.svelte
+++ b/apps/desktop/src/lib/components/standalone/settings/install-npm-package-name-form.svelte
@@ -50,10 +50,10 @@
 	<Form.Field {form} name="name">
 		<Form.Control>
 			{#snippet children({ props })}
-				<flex items-center gap-2>
+				<div class="flex items-center gap-2">
 					<Input {...props} bind:value={$formData.name} placeholder="NPM Package Name" />
 					<Form.Button class="my-1">Install</Form.Button>
-				</flex>
+				</div>
 			{/snippet}
 		</Form.Control>
 		<Form.FieldErrors />
diff --git a/apps/desktop/src/lib/components/standalone/settings/install-tarball-url-form.svelte b/apps/desktop/src/lib/components/standalone/settings/install-tarball-url-form.svelte
index a950a64..8fb26a1 100644
--- a/apps/desktop/src/lib/components/standalone/settings/install-tarball-url-form.svelte
+++ b/apps/desktop/src/lib/components/standalone/settings/install-tarball-url-form.svelte
@@ -51,10 +51,10 @@
 	<Form.Field {form} name="url">
 		<Form.Control>
 			{#snippet children({ props })}
-				<flex items-center gap-2>
+				<div class="flex items-center gap-2">
 					<Input {...props} bind:value={$formData.url} placeholder="Tarball URL" />
 					<Form.Button class="my-1">Install</Form.Button>
-				</flex>
+				</div>
 			{/snippet}
 		</Form.Control>
 		<Form.FieldErrors />
diff --git a/apps/desktop/src/lib/stores/appConfig.ts b/apps/desktop/src/lib/stores/appConfig.ts
index 78ebcd0..40bbb72 100644
--- a/apps/desktop/src/lib/stores/appConfig.ts
+++ b/apps/desktop/src/lib/stores/appConfig.ts
@@ -5,6 +5,7 @@ import { PersistedAppConfig, type AppConfig } from "@kksh/types"
 import { debug, error } from "@tauri-apps/plugin-log"
 import * as os from "@tauri-apps/plugin-os"
 import { load } from "@tauri-apps/plugin-store"
+import { get } from "svelte/store"
 import * as v from "valibot"
 
 export const defaultAppConfig: AppConfig = {
@@ -24,13 +25,16 @@ export const defaultAppConfig: AppConfig = {
 	hideOnBlur: true,
 	extensionAutoUpgrade: true,
 	joinBetaProgram: false,
-	onBoarded: false
+	onBoarded: false,
+	developerMode: false
 }
 
 interface AppConfigAPI {
 	init: () => Promise<void>
+	get: () => AppConfig
 	setTheme: (theme: ThemeConfig) => void
 	setDevExtensionPath: (devExtensionPath: string | null) => void
+	setTriggerHotkey: (triggerHotkey: string[]) => void
 }
 
 function createAppConfig(): WithSyncStore<AppConfig> & AppConfigAPI {
@@ -67,11 +71,15 @@ function createAppConfig(): WithSyncStore<AppConfig> & AppConfigAPI {
 
 	return {
 		...store,
+		get: () => get(store),
 		setTheme: (theme: ThemeConfig) => store.update((config) => ({ ...config, theme })),
 		setDevExtensionPath: (devExtensionPath: string | null) => {
 			console.log("setDevExtensionPath", devExtensionPath)
 			store.update((config) => ({ ...config, devExtensionPath }))
 		},
+		setTriggerHotkey: (triggerHotkey: string[]) => {
+			store.update((config) => ({ ...config, triggerHotkey }))
+		},
 		init
 	}
 }
diff --git a/apps/desktop/src/lib/utils.ts b/apps/desktop/src/lib/utils.ts
new file mode 100644
index 0000000..ac680b3
--- /dev/null
+++ b/apps/desktop/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+	return twMerge(clsx(inputs));
+}
diff --git a/apps/desktop/src/lib/utils/dom.ts b/apps/desktop/src/lib/utils/dom.ts
index 36bcfa6..1502fac 100644
--- a/apps/desktop/src/lib/utils/dom.ts
+++ b/apps/desktop/src/lib/utils/dom.ts
@@ -1,3 +1,11 @@
 export function getActiveElementNodeName(): string | undefined {
 	return document.activeElement?.nodeName
 }
+
+export function isInputElement(element: HTMLElement): boolean {
+	return element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement
+}
+
+export function isKeyboardEventFromInputElement(e: KeyboardEvent): boolean {
+	return isInputElement(e.target as HTMLElement)
+}
diff --git a/apps/desktop/src/lib/utils/hotkey.ts b/apps/desktop/src/lib/utils/hotkey.ts
new file mode 100644
index 0000000..5a134bc
--- /dev/null
+++ b/apps/desktop/src/lib/utils/hotkey.ts
@@ -0,0 +1,58 @@
+import { getAllWindows } from "@tauri-apps/api/window"
+import { isRegistered, register, unregister } from "@tauri-apps/plugin-global-shortcut"
+import { debug, info } from "@tauri-apps/plugin-log"
+import { sendNotificationWithPermission } from "./notification"
+
+/**
+ * Tauri global shortcut doesn't accept 'Meta' Key. This function maps browser detected keys to Tauri-accepted keys.
+ * @param key
+ */
+export function mapKeyToTauriKey(key: string): string {
+	if (key === "Meta") {
+		return "Command"
+	}
+	return key
+}
+
+export async function registerAppHotkey(hotkeyStr: string) {
+	if (await isRegistered(hotkeyStr)) {
+		debug(`Hotkey (${hotkeyStr}) already registered`)
+		await unregister(hotkeyStr)
+	}
+	info(`Registering hotkey: ${hotkeyStr}`)
+	return register(hotkeyStr, async (e) => {
+		if (e.state === "Released") {
+			const wins = await getAllWindows()
+			const mainWin = wins.find((w) => w.label === "main")
+			if (!mainWin) {
+				return sendNotificationWithPermission(
+					"No main window found",
+					"Please open main window first"
+				)
+			}
+			const isVisible = await mainWin.isVisible()
+			const isFocused = await mainWin.isFocused()
+			if (isVisible) {
+				if (isFocused) {
+					mainWin.hide()
+				} else {
+					mainWin.setFocus()
+				}
+			} else {
+				mainWin.show()
+				mainWin.setFocus()
+			}
+		}
+	})
+}
+
+export async function updateAppHotkey(newHotkey: string[], oldHotkey?: string[] | null) {
+	if (oldHotkey) {
+		const hotkeyStr = oldHotkey.map(mapKeyToTauriKey).join("+")
+		if (await isRegistered(hotkeyStr)) {
+			await unregister(hotkeyStr)
+		}
+	}
+	const hotkeyStr = newHotkey.map(mapKeyToTauriKey).join("+")
+	return registerAppHotkey(hotkeyStr)
+}
diff --git a/apps/desktop/src/lib/utils/js.ts b/apps/desktop/src/lib/utils/js.ts
new file mode 100644
index 0000000..a2f99f6
--- /dev/null
+++ b/apps/desktop/src/lib/utils/js.ts
@@ -0,0 +1,52 @@
+export function setsEqual<T>(set1: Set<T>, set2: Set<T>) {
+	if (set1.size !== set2.size) return false
+	for (let item of set1) {
+		if (!set2.has(item)) return false
+	}
+	return true
+}
+
+export const keyToDisplayMap: Record<string, string> = {
+	" ": "Space",
+	Enter: "↵",
+	ArrowUp: "↑",
+	ArrowDown: "↓",
+	ArrowLeft: "←",
+	ArrowRight: "→",
+	Escape: "Esc",
+	Meta: "⌘",
+	Control: "Ctrl",
+	Alt: "⌥",
+	Shift: "⇧"
+}
+
+export function keyCodeToKey(keyCode: string): string {
+	if (keyCode.startsWith("Key")) {
+		return keyCode.slice(3)
+	}
+	if (keyCode.endsWith("Left")) {
+		return keyCode.slice(0, -4)
+	}
+	if (keyCode.startsWith("Digit")) {
+		return keyCode.slice(5)
+	}
+	if (keyCode.endsWith("Right")) {
+		return keyCode.slice(0, -5)
+	}
+	return keyCode
+}
+
+export function keyToDisplay(keyCode: string): string {
+	const mappedChar = keyToDisplayMap[keyCodeToKey(keyCode)]
+	if (mappedChar) {
+		return mappedChar
+	} else {
+		return keyCode
+	}
+}
+
+export function keyCombToDisplay(keyComb: string[]): string {
+	return keyComb.map(keyToDisplay).join("+")
+}
+
+export const modifierKeySet = new Set(["Meta", "Shift", "Alt", "Control"])
diff --git a/apps/desktop/src/lib/utils/key.ts b/apps/desktop/src/lib/utils/key.ts
index 61e9527..1b7458f 100644
--- a/apps/desktop/src/lib/utils/key.ts
+++ b/apps/desktop/src/lib/utils/key.ts
@@ -1,20 +1,30 @@
 import { appState } from "@/stores"
+import { toggleDevTools } from "@kksh/api/commands"
+import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"
+import { getCurrentWindow } from "@tauri-apps/api/window"
+import { platform } from "@tauri-apps/plugin-os"
 import { goto } from "$app/navigation"
-import { goBack, goHome } from "./route"
+import { isKeyboardEventFromInputElement } from "./dom"
+import { modifierKeySet } from "./js"
+import { goBack, goHome, goHomeOrCloseDependingOnWindow } from "./route"
+import { isInMainWindow } from "./window"
 
 export function goHomeOnEscape(e: KeyboardEvent) {
+	console.log("goHomeOnEscape", e.key)
 	if (e.key === "Escape") {
 		goHome()
 	}
 }
 
 export function goBackOnEscape(e: KeyboardEvent) {
+	console.log("goBackOnEscape", e.key)
 	if (e.key === "Escape") {
 		goBack()
 	}
 }
 
 export function goBackOnEscapeClearSearchTerm(e: KeyboardEvent) {
+	console.log("goBackOnEscapeClearSearchTerm", e.key)
 	if (e.key === "Escape") {
 		if (appState.get().searchTerm) {
 			appState.clearSearchTerm()
@@ -25,6 +35,7 @@ export function goBackOnEscapeClearSearchTerm(e: KeyboardEvent) {
 }
 
 export function goHomeOnEscapeClearSearchTerm(e: KeyboardEvent) {
+	console.log("goHomeOnEscapeClearSearchTerm", e.key)
 	if (e.key === "Escape") {
 		if (appState.get().searchTerm) {
 			appState.clearSearchTerm()
@@ -33,3 +44,76 @@ export function goHomeOnEscapeClearSearchTerm(e: KeyboardEvent) {
 		}
 	}
 }
+
+export function goBackOrCloseOnEscape(e: KeyboardEvent) {
+	console.log("goBackOrCloseOnEscape", e.key)
+	if (e.key === "Escape") {
+		if (isInMainWindow()) {
+			goBack()
+		} else {
+			getCurrentWindow().close()
+		}
+	}
+}
+
+export function goHomeOrCloseOnEscapeWithInput(e: KeyboardEvent) {
+	if (e.key === "Escape") {
+		if (isKeyboardEventFromInputElement(e)) {
+			const target = e.target as HTMLInputElement
+			if (target.value === "") {
+				goHomeOrCloseDependingOnWindow()
+			} else {
+				target.value = ""
+			}
+		} else {
+			goHomeOrCloseDependingOnWindow()
+		}
+	}
+}
+
+export async function globalKeyDownHandler(e: KeyboardEvent) {
+	const _platform = platform()
+	if ((_platform === "macos" && e.metaKey) || (_platform === "windows" && e.ctrlKey)) {
+		if (e.key === ",") {
+			e.preventDefault()
+			goto("/settings")
+		}
+	}
+	// Toggle Devtools with control + shift + I
+	if (e.ctrlKey && e.shiftKey && e.key === "I") {
+		e.preventDefault()
+		toggleDevTools()
+	}
+	// Reload window with control + shift + R
+	if (e.ctrlKey && e.shiftKey && e.key === "R") {
+		e.preventDefault()
+		const appWin = getCurrentWebviewWindow()
+		await appWin.hide()
+		location.reload()
+		setTimeout(() => {
+			appWin.show()
+		}, 1_000)
+	}
+}
+
+export function isLetter(letter: string): boolean {
+	if (letter.length != 1) return false
+	return letter.match(/[a-zA-Z]/) ? true : false
+}
+
+export function isShortcut(letters: string[]): boolean {
+	// letters contain at least one modifier key and one non-modifier key
+
+	let hasModifier = false
+	let hasNonModifier = false
+
+	for (let letter of letters) {
+		if (modifierKeySet.has(letter)) {
+			hasModifier = true
+		} else {
+			hasNonModifier = true
+		}
+	}
+
+	return hasModifier && hasNonModifier
+}
diff --git a/apps/desktop/src/lib/utils/notification.ts b/apps/desktop/src/lib/utils/notification.ts
new file mode 100644
index 0000000..7d14986
--- /dev/null
+++ b/apps/desktop/src/lib/utils/notification.ts
@@ -0,0 +1,20 @@
+// import { notification } from "@kksh/api/ui"
+import * as notification from "@tauri-apps/plugin-notification"
+
+export async function getNotificationPermission() {
+	let permissionGranted = await notification.isPermissionGranted()
+
+	// If not we need to request it
+	if (!permissionGranted) {
+		const permission = await notification.requestPermission()
+		permissionGranted = permission === "granted"
+	}
+	return permissionGranted
+}
+
+export async function sendNotificationWithPermission(title: string, body: string) {
+	const notificationGranted = await getNotificationPermission()
+	if (notificationGranted) {
+		notification.sendNotification({ title, body })
+	}
+}
diff --git a/apps/desktop/src/lib/utils/route.ts b/apps/desktop/src/lib/utils/route.ts
index e483218..24bd483 100644
--- a/apps/desktop/src/lib/utils/route.ts
+++ b/apps/desktop/src/lib/utils/route.ts
@@ -1,4 +1,6 @@
+import { getCurrentWindow } from "@tauri-apps/api/window"
 import { goto } from "$app/navigation"
+import { isInMainWindow } from "./window"
 
 export function goBack() {
 	window.history.back()
@@ -7,3 +9,11 @@ export function goBack() {
 export function goHome() {
 	goto("/")
 }
+
+export function goHomeOrCloseDependingOnWindow() {
+	if (isInMainWindow()) {
+		goHome()
+	} else {
+		getCurrentWindow().close()
+	}
+}
diff --git a/apps/desktop/src/routes/+layout.svelte b/apps/desktop/src/routes/+layout.svelte
index e0dfed2..079021f 100644
--- a/apps/desktop/src/routes/+layout.svelte
+++ b/apps/desktop/src/routes/+layout.svelte
@@ -3,6 +3,9 @@
 	import "../app.css"
 	import { appConfig, appState, extensions, quickLinks } from "@/stores"
 	import { initDeeplink } from "@/utils/deeplink"
+	import { updateAppHotkey } from "@/utils/hotkey"
+	import { globalKeyDownHandler, goBackOrCloseOnEscape } from "@/utils/key"
+	import { listenToWindowBlur } from "@/utils/tauri-events"
 	import { isInMainWindow } from "@/utils/window"
 	import {
 		ModeWatcher,
@@ -12,15 +15,39 @@
 		updateTheme,
 		type ThemeConfig
 	} from "@kksh/svelte5"
-	import { ViewTransition } from "@kksh/ui"
+	import { Constants, ViewTransition } from "@kksh/ui"
 	import type { UnlistenFn } from "@tauri-apps/api/event"
+	import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"
 	import { attachConsole } from "@tauri-apps/plugin-log"
+	import { afterNavigate, beforeNavigate } from "$app/navigation"
+	import { gsap } from "gsap"
+	import { Flip } from "gsap/Flip"
 	import { onDestroy, onMount } from "svelte"
 
-	onMount(() => {
-		setTimeout(() => {
-			import("virtual:uno.css")
-		}, 1000)
+	/* -------------------------------------------------------------------------- */
+	/*                             Gsap Flip Animation                            */
+	/* -------------------------------------------------------------------------- */
+	gsap.registerPlugin(Flip)
+	let flipState: Flip.FlipState
+
+	beforeNavigate(() => {
+		flipState = Flip.getState(
+			`.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`
+		)
+	})
+
+	afterNavigate(() => {
+		if (!flipState) {
+			return
+		}
+
+		Flip.from(flipState, {
+			targets: `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`,
+			duration: 0.5,
+			absolute: true,
+			scale: true,
+			ease: "ease-out"
+		})
 	})
 
 	let { children } = $props()
@@ -29,12 +56,31 @@
 	onMount(async () => {
 		attachConsole().then((unlistener) => unlisteners.push(unlistener))
 		initDeeplink().then((unlistener) => unlisteners.push(unlistener))
+
 		quickLinks.init()
 		appConfig.init()
 		if (isInMainWindow()) {
+			if ($appConfig.triggerHotkey) {
+				updateAppHotkey($appConfig.triggerHotkey)
+			}
+			unlisteners.push(
+				await listenToWindowBlur(() => {
+					const win = getCurrentWebviewWindow()
+					win.isFocused().then((isFocused) => {
+						// this extra is focused check may be needed because blur event got triggered somehow when window show()
+						// for edge case: when settings page is opened and focused, switch to main window, the blur event is triggered for main window
+						if (!isFocused) {
+							if ($appConfig.hideOnBlur) {
+								win.hide()
+							}
+						}
+					})
+				})
+			)
 			extensions.init()
 		} else {
 		}
+		getCurrentWebviewWindow().show()
 	})
 
 	onDestroy(() => {
@@ -42,6 +88,7 @@
 	})
 </script>
 
+<svelte:window on:keydown={globalKeyDownHandler} />
 <ViewTransition />
 <ModeWatcher />
 <Toaster richColors />
diff --git a/apps/desktop/src/routes/+layout.ts b/apps/desktop/src/routes/+layout.ts
index 028840b..703f971 100644
--- a/apps/desktop/src/routes/+layout.ts
+++ b/apps/desktop/src/routes/+layout.ts
@@ -1,4 +1,4 @@
-import { getExtensionsFolder } from "@/constants"
+import { getExtensionsFolder, IS_IN_TAURI } from "@/constants"
 import type { LayoutLoad } from "./$types"
 
 // Tauri doesn't have a Node.js server to do proper SSR
@@ -8,5 +8,5 @@ export const prerender = true
 export const ssr = false
 
 export const load: LayoutLoad = async () => {
-	return { extsInstallDir: await getExtensionsFolder() }
+	return { extsInstallDir: IS_IN_TAURI ? await getExtensionsFolder() : "" }
 }
diff --git a/apps/desktop/src/routes/+page.svelte b/apps/desktop/src/routes/+page.svelte
index be1be7f..ec0a512 100644
--- a/apps/desktop/src/routes/+page.svelte
+++ b/apps/desktop/src/routes/+page.svelte
@@ -5,8 +5,9 @@
 	import { systemCommands } from "@/cmds/system"
 	import { appConfig, appState, devStoreExts, installedStoreExts, quickLinks } from "@/stores"
 	import { cmdQueries } from "@/stores/cmdQuery"
-	import { getActiveElementNodeName } from "@/utils/dom"
-	import { openDevTools } from "@kksh/api/commands"
+	import { getActiveElementNodeName, isKeyboardEventFromInputElement } from "@/utils/dom"
+	import Icon from "@iconify/svelte"
+	import { openDevTools, toggleDevTools } from "@kksh/api/commands"
 	import type { ExtPackageJsonExtra } from "@kksh/api/models"
 	import { isExtPathInDev } from "@kksh/extension/utils"
 	import { Button, Command, DropdownMenu } from "@kksh/svelte5"
@@ -23,22 +24,29 @@
 	import { cn, commandScore } from "@kksh/ui/utils"
 	import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"
 	import { exit } from "@tauri-apps/plugin-process"
-	import { EllipsisVerticalIcon } from "lucide-svelte"
-	import type { Writable } from "svelte/store"
+	import { CircleXIcon, EllipsisVerticalIcon, RefreshCcwIcon } from "lucide-svelte"
 
+	let inputEle: HTMLInputElement | null = null
 	function onKeyDown(event: KeyboardEvent) {
 		if (event.key === "Escape") {
-			if (getActiveElementNodeName() === "INPUT") {
-				;(event.target as HTMLInputElement).value = ""
-				if ((event.target as HTMLInputElement | undefined)?.id === "main-command-input") {
-					$appState.searchTerm = ""
-				}
-			}
+			;(event.target as HTMLInputElement).value = ""
+			$appState.searchTerm = ""
 		}
 	}
 </script>
 
-<svelte:window on:keydown={onKeyDown} />
+<svelte:window
+	on:keydown={(e) => {
+		if (e.key === "/") {
+			if (isKeyboardEventFromInputElement(e)) {
+				e.preventDefault()
+			} else {
+				e.preventDefault()
+				inputEle?.focus()
+			}
+		}
+	}}
+/>
 <Command.Root
 	class={cn("h-screen rounded-lg border shadow-md")}
 	bind:value={$appState.highlightedCmd}
@@ -53,9 +61,11 @@
 >
 	<CustomCommandInput
 		autofocus
+		bind:ref={inputEle}
 		id="main-command-input"
 		placeholder={$cmdQueries.length === 0 ? "Type a command or search..." : undefined}
 		bind:value={$appState.searchTerm}
+		onkeydown={onKeyDown}
 	>
 		{#snippet rightSlot()}
 			<span
@@ -88,15 +98,42 @@
 				<DropdownMenu.Trigger>
 					<Button variant="outline" size="icon"><EllipsisVerticalIcon /></Button>
 				</DropdownMenu.Trigger>
-				<DropdownMenu.Content>
+				<DropdownMenu.Content class="w-80">
 					<DropdownMenu.Group>
-						<DropdownMenu.GroupHeading>Settings</DropdownMenu.GroupHeading>
 						<DropdownMenu.Separator />
-						<DropdownMenu.Item onclick={() => exit()}>Quit</DropdownMenu.Item>
-						<DropdownMenu.Item onclick={() => openDevTools()}>Open Dev Tools</DropdownMenu.Item>
-						<DropdownMenu.Item onclick={() => getCurrentWebviewWindow().hide()}
-							>Close Window</DropdownMenu.Item
+						<DropdownMenu.Item onclick={() => exit()}>
+							<CircleXIcon class="h-4 w-4 text-red-500" />
+							Quit
+						</DropdownMenu.Item>
+						<DropdownMenu.Item onclick={() => getCurrentWebviewWindow().hide()}>
+							<CircleXIcon class="h-4 w-4 text-red-500" />
+							Close Window
+						</DropdownMenu.Item>
+					</DropdownMenu.Group>
+					<DropdownMenu.Separator />
+					<DropdownMenu.Group>
+						<DropdownMenu.GroupHeading data-tauri-drag-region>Developer</DropdownMenu.GroupHeading>
+						<DropdownMenu.Item onclick={toggleDevTools}>
+							<Icon icon="mingcute:code-fill" class="mr-2 h-5 w-5 text-green-500" />
+							Toggle Devtools
+							<DropdownMenu.Shortcut>⌃+Shift+I</DropdownMenu.Shortcut>
+						</DropdownMenu.Item>
+						<DropdownMenu.Item onclick={() => location.reload()}>
+							<RefreshCcwIcon class="mr-2 h-4 w-4 text-green-500" />
+							Reload Window
+							<DropdownMenu.Shortcut>⌃+Shift+R</DropdownMenu.Shortcut>
+						</DropdownMenu.Item>
+						<DropdownMenu.Item
+							onclick={() => {
+								appConfig.update((config) => ({ ...config, hmr: !config.hmr }))
+							}}
 						>
+							<Icon
+								icon={$appConfig.hmr ? "fontisto:toggle-on" : "fontisto:toggle-off"}
+								class={cn("mr-1 h-5 w-5", $appConfig.hmr ? "text-green-500" : "")}
+							/>
+							Toggle Dev Extension HMR
+						</DropdownMenu.Item>
 					</DropdownMenu.Group>
 				</DropdownMenu.Content>
 			</DropdownMenu.Root>
@@ -123,7 +160,7 @@
 			/>
 		{/if}
 		<QuickLinks quickLinks={$quickLinks} />
-		<BuiltinCmds {builtinCmds} />
+		<BuiltinCmds builtinCmds={$builtinCmds} />
 		<SystemCmds {systemCommands} />
 	</Command.List>
 	<GlobalCommandPaletteFooter />
diff --git a/apps/desktop/src/routes/extension/store/+layout.svelte b/apps/desktop/src/routes/extension/store/+layout.svelte
index 965001f..8b08a63 100644
--- a/apps/desktop/src/routes/extension/store/+layout.svelte
+++ b/apps/desktop/src/routes/extension/store/+layout.svelte
@@ -1,31 +1,31 @@
 <script lang="ts">
-	import { Constants } from "@kksh/ui"
-	import { afterNavigate, beforeNavigate } from "$app/navigation"
-	import { gsap } from "gsap"
-	import { Flip } from "gsap/Flip"
+	// import { Constants } from "@kksh/ui"
+	// import { afterNavigate, beforeNavigate } from "$app/navigation"
+	// import { gsap } from "gsap"
+	// import { Flip } from "gsap/Flip"
 
-	gsap.registerPlugin(Flip)
-	let flipState: Flip.FlipState
+	// gsap.registerPlugin(Flip)
+	// let flipState: Flip.FlipState
 
-	beforeNavigate(() => {
-		flipState = Flip.getState(
-			`.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`
-		)
-	})
+	// beforeNavigate(() => {
+	// 	flipState = Flip.getState(
+	// 		`.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`
+	// 	)
+	// })
 
-	afterNavigate(() => {
-		if (!flipState) {
-			return
-		}
+	// afterNavigate(() => {
+	// 	if (!flipState) {
+	// 		return
+	// 	}
 
-		Flip.from(flipState, {
-			targets: `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`,
-			duration: 0.5,
-			absolute: true,
-			scale: true,
-			ease: "ease-out"
-		})
-	})
+	// 	Flip.from(flipState, {
+	// 		targets: `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`,
+	// 		duration: 0.5,
+	// 		absolute: true,
+	// 		scale: true,
+	// 		ease: "ease-out"
+	// 	})
+	// })
 
 	const { children } = $props()
 </script>
diff --git a/apps/desktop/src/routes/extension/ui-worker/+page.svelte b/apps/desktop/src/routes/extension/ui-worker/+page.svelte
index 2dffffc..4969a1d 100644
--- a/apps/desktop/src/routes/extension/ui-worker/+page.svelte
+++ b/apps/desktop/src/routes/extension/ui-worker/+page.svelte
@@ -56,11 +56,14 @@
 	let loaded = $state(false)
 
 	async function goBack() {
+		console.log("goBack")
 		if (isInMainWindow()) {
+			console.log("goBack in main window")
 			// if in main window, then winExtMap store must contain this
-			winExtMap.unregisterExtensionFromWindow(appWin.label)
+			// winExtMap.unregisterExtensionFromWindow(appWin.label)
 			goto("/")
 		} else {
+			console.log("goBack in webview window")
 			appWin.close()
 		}
 	}
@@ -179,6 +182,7 @@
 			searchBarPlaceholder = placeholder
 		},
 		async goBack() {
+			console.log("goBack in ui-worker")
 			goBack()
 		}
 	}
diff --git a/apps/desktop/src/routes/settings/+layout.svelte b/apps/desktop/src/routes/settings/+layout.svelte
new file mode 100644
index 0000000..cc52a0c
--- /dev/null
+++ b/apps/desktop/src/routes/settings/+layout.svelte
@@ -0,0 +1,18 @@
+<script lang="ts">
+	import { goHomeOrCloseOnEscapeWithInput } from "@/utils/key"
+	import { SideBar } from "@kksh/svelte5"
+	import SidebarTrigger from "$lib/components/common/sidebar-trigger.svelte"
+	import SettingsSidebar from "./sidebar.svelte"
+
+	let { children } = $props()
+</script>
+
+<svelte:window on:keydown={goHomeOrCloseOnEscapeWithInput} />
+
+<SideBar.Provider style="--sidebar-width: 13rem;">
+	<SettingsSidebar />
+	<main class="grow overflow-x-clip">
+		<SidebarTrigger />
+		{@render children?.()}
+	</main>
+</SideBar.Provider>
diff --git a/apps/desktop/src/routes/settings/+page.svelte b/apps/desktop/src/routes/settings/+page.svelte
new file mode 100644
index 0000000..cf5544f
--- /dev/null
+++ b/apps/desktop/src/routes/settings/+page.svelte
@@ -0,0 +1,65 @@
+<script lang="ts">
+	import HotkeyInputPopover from "@/components/common/HotkeyInputPopover.svelte"
+	import HotkeyPick from "@/components/standalone/settings/hotkey-pick.svelte"
+	import { appConfig } from "@/stores"
+	import { Button, Switch } from "@kksh/svelte5"
+	import { Shiki } from "@kksh/ui"
+	import { dev } from "$app/environment"
+	import { onMount, type Snippet } from "svelte"
+</script>
+
+<main class="container flex flex-col space-y-2">
+	<!-- <h3 class="text-mg mb-2 ml-3 font-bold">App Updates</h3> -->
+	<ul class="rounded-lg border">
+		<li>
+			<span>Launch at Login</span>
+			<Switch bind:checked={$appConfig.launchAtLogin} />
+		</li>
+		<li class="">
+			<span>Hotkey</span>
+			<!-- <HotkeyInput bind:keys={$appConfig.triggerHotkey} /> -->
+			<!-- <HotkeyInputPopover class="" /> -->
+			<HotkeyPick />
+		</li>
+		<li>
+			<span>Menu Bar Icon</span>
+			<Switch bind:checked={$appConfig.showInTray} />
+		</li>
+		<li>
+			<span>Hide On Blur</span>
+			<Switch bind:checked={$appConfig.hideOnBlur} />
+		</li>
+		<li>
+			<span>Extension Auto Upgrade</span>
+			<Switch bind:checked={$appConfig.extensionAutoUpgrade} />
+		</li>
+		<li>
+			<span>Dev Extension HMR</span>
+			<Switch bind:checked={$appConfig.hmr} />
+		</li>
+		<li>
+			<span>Join Beta Updates</span>
+			<Switch bind:checked={$appConfig.joinBetaProgram} />
+		</li>
+
+		<!-- <li>
+				<span>Language</span>
+				<Switch bind:checked={$appConfig} />
+			</li> -->
+	</ul>
+	{#if dev}
+		<Shiki class="w-full overflow-x-auto" lang="json" code={JSON.stringify($appConfig, null, 2)} />
+	{/if}
+</main>
+
+<style scoped>
+	li {
+		@apply flex items-center justify-between border-b px-3 py-3;
+	}
+	ul li:last-child {
+		@apply border-b-0;
+	}
+	li > span {
+		@apply text-sm;
+	}
+</style>
diff --git a/apps/desktop/src/routes/settings/about/+page.svelte b/apps/desktop/src/routes/settings/about/+page.svelte
new file mode 100644
index 0000000..135bb24
--- /dev/null
+++ b/apps/desktop/src/routes/settings/about/+page.svelte
@@ -0,0 +1,59 @@
+<script lang="ts">
+	import { goHome } from "@/utils/route"
+	import { checkUpdateAndInstall } from "@/utils/updater"
+	import Icon from "@iconify/svelte"
+	import { Button, Card, SideBar } from "@kksh/svelte5"
+	import { Layouts, TauriLink } from "@kksh/ui"
+	import { getVersion } from "@tauri-apps/api/app"
+	import { onMount } from "svelte"
+
+	let appVersion = ""
+	onMount(async () => {
+		appVersion = await getVersion()
+	})
+</script>
+
+<Layouts.Center class="absolute left-0 top-0 h-full w-full overflow-hidden border">
+	<div>
+		<div class="flex w-full items-center space-x-5">
+			<img src="/favicon.png" class="w-44" alt="Logo" />
+			<div class="flex flex-col space-y-1">
+				<p class="text-3xl font-bold">KunKun Shell</p>
+				<p class="text-xs">Version: {appVersion}</p>
+				<p>
+					<strong class="font-bold">Author: </strong>
+					<a
+						href="https://github.com/HuakunShen"
+						target="_blank"
+						rel="noreferrer"
+						class="flex items-center gap-2 font-mono text-sm hover:text-blue-600 hover:underline hover:dark:text-blue-500"
+					>
+						@HuakunShen
+						<Icon icon="mdi:github" class="h-5 w-5" />
+					</a>
+				</p>
+				<a
+					href="https://github.com/kunkunsh/kunkun"
+					target="_blank"
+					rel="noreferrer"
+					class="flex items-center gap-2 font-mono text-sm hover:text-blue-600 hover:underline hover:dark:text-blue-500"
+				>
+					Source Code
+					<Icon icon="mdi:github" class="h-5 w-5" />
+				</a>
+				<a
+					href="https://github.com/kunkunsh/kunkunExtensions"
+					target="_blank"
+					rel="noreferrer"
+					class="flex items-center gap-2 font-mono text-sm hover:text-blue-600 hover:underline hover:dark:text-blue-500"
+				>
+					Extensions Source Code
+					<Icon icon="mdi:github" class="h-5 w-5" />
+				</a>
+				<Button onclick={checkUpdateAndInstall} size="sm" variant="secondary">
+					Check for Updates
+				</Button>
+			</div>
+		</div>
+	</div>
+</Layouts.Center>
diff --git a/apps/desktop/src/routes/settings/add-dev-extension/+page.svelte b/apps/desktop/src/routes/settings/add-dev-extension/+page.svelte
index e8d9d1b..0e77e62 100644
--- a/apps/desktop/src/routes/settings/add-dev-extension/+page.svelte
+++ b/apps/desktop/src/routes/settings/add-dev-extension/+page.svelte
@@ -3,10 +3,10 @@
 	import DevExtPathForm from "@/components/standalone/settings/DevExtPathForm.svelte"
 	import { appConfig, extensions } from "@/stores"
 	import { goBackOnEscape } from "@/utils/key"
-	import { goBack } from "@/utils/route"
+	import { goBack, goHome } from "@/utils/route"
 	import * as extAPI from "@kksh/extension"
 	import { installFromNpmPackageName } from "@kksh/extension"
-	import { Button, Separator } from "@kksh/svelte5"
+	import { Button, Separator, SideBar } from "@kksh/svelte5"
 	import { StrikeSeparator } from "@kksh/ui"
 	import { open as openFileSelector } from "@tauri-apps/plugin-dialog"
 	import * as fs from "@tauri-apps/plugin-fs"
@@ -14,18 +14,16 @@
 	import { ArrowLeftIcon } from "lucide-svelte"
 	import { toast } from "svelte-sonner"
 	import * as v from "valibot"
+
+	const { useSidebar } = SideBar
+	const sidebar = useSidebar()
 </script>
 
-<svelte:window on:keydown={goBackOnEscape} />
-<Button variant="outline" size="icon" class="fixed left-2 top-2 z-50" onclick={goBack}>
-	<ArrowLeftIcon class="h-4 w-4" />
-</Button>
-<div class="absolute left-0 top-0 h-10 w-screen" data-tauri-drag-region></div>
-<main class="container pt-10">
+<main class="container">
 	<h2 class="text-2xl font-bold">Add Dev Extension</h2>
 	<small>
 		There are 4 options to install an extension in developer mode. Either load it from your local
 		tarball file, a tarball remote URL, npm package name or load from a remote URL.
 	</small>
-	<AddDevExtForm />
+	<AddDevExtForm  />
 </main>
diff --git a/apps/desktop/src/routes/settings/developer/+page.svelte b/apps/desktop/src/routes/settings/developer/+page.svelte
new file mode 100644
index 0000000..e69de29
diff --git a/apps/desktop/src/routes/settings/extensions/+page.svelte b/apps/desktop/src/routes/settings/extensions/+page.svelte
new file mode 100644
index 0000000..e69de29
diff --git a/apps/desktop/src/routes/settings/set-dev-ext-path/+page.svelte b/apps/desktop/src/routes/settings/set-dev-ext-path/+page.svelte
index 5d5d0ee..9636f4e 100644
--- a/apps/desktop/src/routes/settings/set-dev-ext-path/+page.svelte
+++ b/apps/desktop/src/routes/settings/set-dev-ext-path/+page.svelte
@@ -1,17 +1,8 @@
 <script lang="ts">
 	import DevExtPathForm from "@/components/standalone/settings/DevExtPathForm.svelte"
-	import { goBackOnEscape } from "@/utils/key"
-	import { goBack } from "@/utils/route"
-	import { Button } from "@kksh/svelte5"
-	import { ArrowLeftIcon } from "lucide-svelte"
 </script>
 
-<svelte:window on:keydown={goBackOnEscape} />
-<Button variant="outline" size="icon" class="fixed left-2 top-2 z-50" onclick={goBack}>
-	<ArrowLeftIcon class="h-4 w-4" />
-</Button>
-<div class="absolute left-0 top-0 h-10 w-screen" data-tauri-drag-region></div>
-<main class="container pt-10">
+<main class="container">
 	<h2 class="text-2xl font-bold">Set Dev Extension Path</h2>
 	<p>This is where your extensions will be installed.</p>
 	<DevExtPathForm />
diff --git a/apps/desktop/src/routes/settings/sidebar.svelte b/apps/desktop/src/routes/settings/sidebar.svelte
new file mode 100644
index 0000000..a5bfa86
--- /dev/null
+++ b/apps/desktop/src/routes/settings/sidebar.svelte
@@ -0,0 +1,90 @@
+<script lang="ts">
+	import { goHome } from "@/utils/route"
+	import { Button, SideBar } from "@kksh/svelte5"
+	import { Constants } from "@kksh/ui"
+	import { ArrowLeftIcon } from "lucide-svelte"
+	import Blocks from "lucide-svelte/icons/blocks"
+	import Cog from "lucide-svelte/icons/cog"
+	import FileCode2 from "lucide-svelte/icons/file-code-2"
+	import Info from "lucide-svelte/icons/info"
+	import Route from "lucide-svelte/icons/route"
+	import SquareTerminal from "lucide-svelte/icons/square-terminal"
+	import { onMount } from "svelte"
+
+	const items = [
+		{
+			title: "General",
+			url: "/settings",
+			icon: Cog
+		},
+		{
+			title: "Developer",
+			url: "/settings/developer",
+			icon: SquareTerminal
+		},
+		{
+			title: "Extensions",
+			url: "/settings/extensions",
+			icon: Blocks
+		},
+		{
+			title: "Set Dev Extension",
+			url: "/settings/set-dev-ext-path",
+			icon: Route
+		},
+		{
+			title: "Add Dev Extension",
+			url: "/settings/add-dev-extension",
+			icon: FileCode2
+		},
+		{
+			title: "About",
+			url: "/settings/about",
+			icon: Info
+		}
+	]
+	let currentItem = $state(items.find((item) => window.location.pathname === item.url))
+</script>
+
+<SideBar.Root>
+	<SideBar.Header class="h-12">
+		<SideBar.Menu>
+			<SideBar.MenuItem data-tauri-drag-region>
+				<Button
+					variant="outline"
+					size="icon"
+					class={Constants.CLASSNAMES.BACK_BUTTON}
+					onclick={goHome}
+				>
+					<ArrowLeftIcon class="h-4 w-4" />
+				</Button>
+			</SideBar.MenuItem>
+		</SideBar.Menu>
+	</SideBar.Header>
+	<SideBar.Content>
+		<SideBar.Group>
+			<SideBar.GroupLabel data-tauri-drag-region>Settings</SideBar.GroupLabel>
+			<SideBar.GroupContent>
+				<SideBar.Menu>
+					{#each items as item (item.title)}
+						<SideBar.MenuItem>
+							<SideBar.MenuButton
+								isActive={currentItem?.url === item.url}
+								onclick={() => {
+									currentItem = item
+								}}
+							>
+								{#snippet child({ props })}
+									<a href={item.url} {...props}>
+										<item.icon />
+										<span>{item.title}</span>
+									</a>
+								{/snippet}
+							</SideBar.MenuButton>
+						</SideBar.MenuItem>
+					{/each}
+				</SideBar.Menu>
+			</SideBar.GroupContent>
+		</SideBar.Group>
+	</SideBar.Content>
+</SideBar.Root>
diff --git a/apps/desktop/src/routes/troubleshooters/+layout.svelte b/apps/desktop/src/routes/troubleshooters/+layout.svelte
new file mode 100644
index 0000000..8972418
--- /dev/null
+++ b/apps/desktop/src/routes/troubleshooters/+layout.svelte
@@ -0,0 +1,18 @@
+<script lang="ts">
+	import SidebarTrigger from "@/components/common/sidebar-trigger.svelte"
+	import { goHomeOrCloseOnEscapeWithInput } from "@/utils/key"
+	import { SideBar } from "@kksh/svelte5"
+	import TroubleshootersSidebar from "./sidebar.svelte"
+
+	let { children } = $props()
+</script>
+
+<svelte:window on:keydown={goHomeOrCloseOnEscapeWithInput} />
+
+<SideBar.Provider style="--sidebar-width: 12rem;">
+	<TroubleshootersSidebar class="flex-none" />
+	<main class="grow overflow-x-clip">
+		<SidebarTrigger />
+		{@render children?.()}
+	</main>
+</SideBar.Provider>
diff --git a/apps/desktop/src/routes/troubleshooters/extension-loading/+page.svelte b/apps/desktop/src/routes/troubleshooters/extension-loading/+page.svelte
index df4901d..43b31b6 100644
--- a/apps/desktop/src/routes/troubleshooters/extension-loading/+page.svelte
+++ b/apps/desktop/src/routes/troubleshooters/extension-loading/+page.svelte
@@ -77,12 +77,7 @@
 	})
 </script>
 
-<svelte:window on:keydown={goBackOnEscape} />
-<Button variant="outline" size="icon" class="absolute left-2 top-2 z-50" onclick={goBack}>
-	<ArrowLeftIcon class="h-4 w-4" />
-</Button>
-<div class="absolute left-0 top-0 h-10 w-screen" data-tauri-drag-region></div>
-<div class="container pt-10">
+<div class="container">
 	<h1 class="text-2xl font-bold">Extension Loading Troubleshooter</h1>
 	<Button class="my-2" onclick={check}>Check</Button>
 	<Dialog.Root bind:open={isDialogOpen}>
diff --git a/apps/desktop/src/routes/troubleshooters/extension-window/+page.svelte b/apps/desktop/src/routes/troubleshooters/extension-window/+page.svelte
index 08c0044..e6d4d1d 100644
--- a/apps/desktop/src/routes/troubleshooters/extension-window/+page.svelte
+++ b/apps/desktop/src/routes/troubleshooters/extension-window/+page.svelte
@@ -65,11 +65,7 @@
 	}
 </script>
 
-<svelte:window on:keydown={onKeyDown} />
-<Button variant="outline" size="icon" class="absolute left-2 top-2 z-50" onclick={goBack}>
-	<ArrowLeftIcon class="h-4 w-4" />
-</Button>
-<main class="container h-screen w-screen pt-10">
+<main class="container">
 	<div class="flex items-center justify-between space-x-2">
 		<div class="flex items-center space-x-2">
 			<Checkbox id="refreshEverySecond" bind:checked={refreshEverySecond} />
diff --git a/apps/desktop/src/routes/troubleshooters/mdns-debugger/+page.svelte b/apps/desktop/src/routes/troubleshooters/mdns-debugger/+page.svelte
new file mode 100644
index 0000000..a7305ba
--- /dev/null
+++ b/apps/desktop/src/routes/troubleshooters/mdns-debugger/+page.svelte
@@ -0,0 +1,27 @@
+<script lang="ts">
+	import { goBackOnEscape } from "@/utils/key.js"
+	import { goBack } from "@/utils/route"
+	import { getPeers } from "@kksh/api/commands"
+	import type { MdnsPeers } from "@kksh/api/models"
+	import { Button } from "@kksh/svelte5"
+	import { ArrowLeftIcon } from "lucide-svelte"
+	import { onMount } from "svelte"
+
+	let peers: MdnsPeers = $state({})
+
+	async function refreshPeers() {
+		console.log("refreshPeers")
+		peers = await getPeers()
+		console.log("peers", peers)
+	}
+
+	onMount(async () => {
+		await refreshPeers()
+	})
+</script>
+
+<div class="h-10" data-tauri-drag-region></div>
+<main class="container">
+	<Button onclick={refreshPeers}>Refresh mDNS Peers</Button>
+	<pre>{JSON.stringify(peers, null, 2)}</pre>
+</main>
diff --git a/apps/desktop/src/routes/troubleshooters/sidebar.svelte b/apps/desktop/src/routes/troubleshooters/sidebar.svelte
new file mode 100644
index 0000000..c4f16aa
--- /dev/null
+++ b/apps/desktop/src/routes/troubleshooters/sidebar.svelte
@@ -0,0 +1,72 @@
+<script lang="ts">
+	import { goHome } from "@/utils/route"
+	import { Button, SideBar } from "@kksh/svelte5"
+	import { Constants } from "@kksh/ui"
+	import { ArrowLeftIcon } from "lucide-svelte"
+	import AppWindow from "lucide-svelte/icons/app-window"
+	import Loader from "lucide-svelte/icons/loader"
+	import Network from "lucide-svelte/icons/network"
+
+	let { class: className }: { class?: string } = $props()
+	const items = [
+		{
+			title: "Extension Loading",
+			url: "/troubleshooters/extension-loading",
+			icon: Loader
+		},
+		{
+			title: "Extension Window",
+			url: "/troubleshooters/extension-window",
+			icon: AppWindow
+		},
+		{
+			title: "MDNS Debugger",
+			url: "/troubleshooters/mdns-debugger",
+			icon: Network
+		}
+	]
+	let currentItem = $state(items.find((item) => window.location.pathname === item.url))
+</script>
+
+<SideBar.Root class={className}>
+	<SideBar.Header class="h-12">
+		<SideBar.Menu>
+			<SideBar.MenuItem data-tauri-drag-region>
+				<Button
+					variant="outline"
+					size="icon"
+					class="z-50 {Constants.CLASSNAMES.BACK_BUTTON}"
+					onclick={goHome}
+				>
+					<ArrowLeftIcon class="h-4 w-4" />
+				</Button>
+			</SideBar.MenuItem>
+		</SideBar.Menu>
+	</SideBar.Header>
+	<SideBar.Content>
+		<SideBar.Group>
+			<SideBar.GroupLabel data-tauri-drag-region>Settings</SideBar.GroupLabel>
+			<SideBar.GroupContent>
+				<SideBar.Menu>
+					{#each items as item (item.title)}
+						<SideBar.MenuItem>
+							<SideBar.MenuButton
+								isActive={currentItem?.url === item.url}
+								onclick={() => {
+									currentItem = item
+								}}
+							>
+								{#snippet child({ props })}
+									<a href={item.url} {...props}>
+										<item.icon />
+										<span>{item.title}</span>
+									</a>
+								{/snippet}
+							</SideBar.MenuButton>
+						</SideBar.MenuItem>
+					{/each}
+				</SideBar.Menu>
+			</SideBar.GroupContent>
+		</SideBar.Group>
+	</SideBar.Content>
+</SideBar.Root>
diff --git a/apps/desktop/svelte.config.js b/apps/desktop/svelte.config.js
index b626a71..44f109f 100644
--- a/apps/desktop/svelte.config.js
+++ b/apps/desktop/svelte.config.js
@@ -15,7 +15,7 @@ const config = {
 		alias: {
 			"@/*": "./src/lib/*",
 			// "@kksh/ui/*": "../../packages/ui/*",
-			"@kksh/svelte5/*": "../../node_modules/@kksh/svelte5/src/lib/*"
+			// "@kksh/svelte5/*": "../../node_modules/@kksh/svelte5/src/lib/*"
 		}
 	}
 }
diff --git a/apps/desktop/tailwind.config.ts b/apps/desktop/tailwind.config.ts
index 95c4e88..9cc7699 100644
--- a/apps/desktop/tailwind.config.ts
+++ b/apps/desktop/tailwind.config.ts
@@ -8,7 +8,7 @@ const config: Config = {
 	content: [
 		"./src/**/*.{html,js,svelte,ts}",
 		"./node_modules/@kksh/ui/src/**/*.{html,js,svelte,ts}",
-		"../../node_modules/@kksh/svelte5/src/**/*.{html,js,svelte,ts}"
+		"../../node_modules/@kksh/svelte5/dist/**/*.{html,js,svelte,ts}"
 	],
 	safelist: ["dark", "bg-red-500/30"],
 	theme: {
@@ -77,10 +77,10 @@ const config: Config = {
 			keyframes: {
 				"accordion-down": {
 					from: { height: "0" },
-					to: { height: "var(--radix-accordion-content-height)" }
+					to: { height: "var(--bits-accordion-content-height)" }
 				},
 				"accordion-up": {
-					from: { height: "var(--radix-accordion-content-height)" },
+					from: { height: "var(--bits-accordion-content-height)" },
 					to: { height: "0" }
 				},
 				"caret-blink": {
diff --git a/apps/desktop/uno.config.ts b/apps/desktop/uno.config.ts
deleted file mode 100644
index 7ca4602..0000000
--- a/apps/desktop/uno.config.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { defineConfig, presetAttributify, presetTagify, presetUno } from "unocss"
-
-export default defineConfig({
-	presets: [presetUno(), presetAttributify(), presetTagify()]
-})
diff --git a/apps/desktop/vite.config.js b/apps/desktop/vite.config.js
index 09ea201..c7490e5 100644
--- a/apps/desktop/vite.config.js
+++ b/apps/desktop/vite.config.js
@@ -1,5 +1,4 @@
 import { sveltekit } from "@sveltejs/kit/vite"
-import UnoCSS from "unocss/vite"
 import { defineConfig } from "vite"
 
 // @ts-expect-error process is a nodejs global
@@ -7,7 +6,7 @@ const host = process.env.TAURI_DEV_HOST
 
 // https://vitejs.dev/config/
 export default defineConfig(async () => ({
-	plugins: [UnoCSS(), sveltekit()],
+	plugins: [sveltekit()],
 	// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
 	//
 	// 1. prevent vite from obscuring rust errors
diff --git a/package.json b/package.json
index 382d7fb..ce65e48 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
 	"devDependencies": {
 		"@ianvs/prettier-plugin-sort-imports": "^4.3.1",
 		"@kksh/api": "workspace:*",
-		"@kksh/svelte5": "0.1.2-beta.8",
+		"@kksh/svelte5": "0.1.9",
 		"prettier": "^3.2.5",
 		"prettier-plugin-svelte": "^3.2.7",
 		"prettier-plugin-tailwindcss": "^0.6.8",
diff --git a/packages/tauri-plugins/jarvis/src/commands/discovery.rs b/packages/tauri-plugins/jarvis/src/commands/discovery.rs
index 640d511..cbb744b 100644
--- a/packages/tauri-plugins/jarvis/src/commands/discovery.rs
+++ b/packages/tauri-plugins/jarvis/src/commands/discovery.rs
@@ -13,13 +13,15 @@ impl Peers {
     }
 
     pub fn remove_peer(&self, service_type: String, fullname: String) {
-        let peers = self.peers.lock().unwrap();
-        // find the peer by service_type and fullname
-        let peer = peers
+        let peer = self
+            .peers
+            .lock()
+            .unwrap()
             .iter()
-            .find(|(_, peer)| peer.fullname == fullname && peer.service_type == service_type);
-        if let Some((hostname, _)) = peer {
-            self.peers.lock().unwrap().remove(hostname);
+            .find(|(_, peer)| peer.fullname == fullname && peer.service_type == service_type)
+            .map(|(hostname, _)| hostname.clone());
+        if let Some(hostname) = peer {
+            self.peers.lock().unwrap().remove(&hostname);
         }
     }
 
@@ -39,5 +41,6 @@ pub async fn get_peers(
     state: tauri::State<'_, Peers>,
 ) -> Result<HashMap<String, ServiceInfoMod>, String> {
     let _peers = state.peers.lock().unwrap();
+    println!("get_peers: {:?}", _peers);
     Ok(_peers.to_owned())
 }
diff --git a/packages/tauri-plugins/jarvis/src/setup/peer_discovery.rs b/packages/tauri-plugins/jarvis/src/setup/peer_discovery.rs
index d062560..82358b2 100644
--- a/packages/tauri-plugins/jarvis/src/setup/peer_discovery.rs
+++ b/packages/tauri-plugins/jarvis/src/setup/peer_discovery.rs
@@ -2,11 +2,13 @@ use crate::commands::discovery::Peers;
 use mdns_sd::ServiceEvent;
 use tauri::{AppHandle, Manager, Runtime};
 use tauri_plugin_network::network::mdns::MdnsService;
+use uuid::Uuid;
 
 pub fn setup_mdns(my_port: u16) -> anyhow::Result<MdnsService> {
-    let mdns = MdnsService::new("tauri")?;
+    let mdns = MdnsService::new("kunkun")?;
+    let id = Uuid::new_v4();
     mdns.register(
-        "tauridesktop",
+        &format!("desktop-{}", id),
         &MdnsService::get_default_ips_str(),
         my_port,
         None,
@@ -23,13 +25,22 @@ pub fn handle_mdns_service_evt<R: Runtime>(
     tauri::async_runtime::spawn(async move {
         while let Ok(event) = rx.recv() {
             match event {
+                // ServiceEvent::ServiceResolved(info) => {
+                //     log::info!("Service Resolved: {:?}", info);
+                // },
                 ServiceEvent::ServiceResolved(info) => {
+                    log::info!("Service Resolved: {:?}", info);
                     app_handle.state::<Peers>().add_peer(info.into());
+                    let peers = app_handle.state::<Peers>().peers.lock().unwrap().clone();
+                    log::info!("Peers: {:?}", peers);
                 }
                 ServiceEvent::ServiceRemoved(service_type, fullname) => {
+                    log::info!("Service Removed: {:?} {:?}", service_type, fullname);
                     app_handle
                         .state::<Peers>()
                         .remove_peer(service_type, fullname);
+                    let peers = app_handle.state::<Peers>().peers.lock().unwrap().clone();
+                    log::info!("Peers: {:?}", peers);
                 }
                 _ => {}
             }
diff --git a/packages/types/src/appConfig.ts b/packages/types/src/appConfig.ts
index 289adc0..225a988 100644
--- a/packages/types/src/appConfig.ts
+++ b/packages/types/src/appConfig.ts
@@ -16,7 +16,8 @@ export const PersistedAppConfig = v.object({
 	hideOnBlur: v.boolean(),
 	extensionAutoUpgrade: v.boolean(),
 	joinBetaProgram: v.boolean(),
-	onBoarded: v.boolean()
+	onBoarded: v.boolean(),
+	developerMode: v.boolean()
 })
 
 export type PersistedAppConfig = v.InferOutput<typeof PersistedAppConfig>
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 1150566..bd35131 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -34,12 +34,11 @@
 		"lint": "eslint ."
 	},
 	"devDependencies": {
-		"tauri-plugin-shellx-api": "^2.0.11",
 		"@iconify/svelte": "^4.0.2",
 		"@kksh/api": "workspace:*",
-		"@kksh/svelte5": "^0.1.2-beta.8",
+		"@kksh/svelte5": "^0.1.9",
 		"@types/bun": "latest",
-		"bits-ui": "1.0.0-next.45",
+		"bits-ui": "1.0.0-next.49",
 		"clsx": "^2.1.1",
 		"formsnap": "2.0.0-next.1",
 		"lucide-svelte": "^0.454.0",
@@ -53,6 +52,7 @@
 		"tailwind-variants": "^0.2.1",
 		"tailwindcss": "^3.4.14",
 		"tailwindcss-animate": "^1.0.7",
+		"tauri-plugin-shellx-api": "^2.0.11",
 		"zod": "^3.23.8"
 	},
 	"dependencies": {
diff --git a/packages/ui/src/components/code/shiki.svelte b/packages/ui/src/components/code/shiki.svelte
index 6c3ed2b..6b7b0dd 100644
--- a/packages/ui/src/components/code/shiki.svelte
+++ b/packages/ui/src/components/code/shiki.svelte
@@ -3,7 +3,7 @@
 <script lang="ts">
 	import { cn } from "@kksh/ui/utils"
 	import { mode } from "mode-watcher"
-	import { createHighlighterCore } from "shiki/core"
+	import { createHighlighterCore, type HighlighterCore } from "shiki/core"
 	import { createOnigurumaEngine } from "shiki/engine/oniguruma"
 	import { onMount } from "svelte"
 
@@ -19,17 +19,29 @@
 		class?: string
 	} = $props()
 	let html = $state("")
+	let highlighter: HighlighterCore
 
-	onMount(async () => {
-		const highlighter = await createHighlighterCore({
-			themes: [import("shiki/themes/vitesse-dark.mjs"), import("shiki/themes/vitesse-light.mjs")],
-			langs: [import("shiki/langs/json.mjs"), import("shiki/langs/typescript.mjs")],
-			engine: createOnigurumaEngine(import("shiki/wasm"))
-		})
+	function refresh() {
 		html = highlighter.codeToHtml(code, {
 			lang,
 			theme: theme ?? ($mode === "dark" ? "vitesse-dark" : "vitesse-light")
 		})
+	}
+	onMount(async () => {
+		highlighter = await createHighlighterCore({
+			themes: [import("shiki/themes/vitesse-dark.mjs"), import("shiki/themes/vitesse-light.mjs")],
+			langs: [import("shiki/langs/json.mjs"), import("shiki/langs/typescript.mjs")],
+			engine: createOnigurumaEngine(import("shiki/wasm"))
+		})
+		refresh()
+	})
+
+	$effect(() => {
+		code // keep this here to watch for code changes
+		highlighter
+		if (highlighter) {
+			refresh()
+		}
 	})
 </script>
 
diff --git a/packages/ui/src/components/common/index.ts b/packages/ui/src/components/common/index.ts
index 92920a6..86e34dd 100644
--- a/packages/ui/src/components/common/index.ts
+++ b/packages/ui/src/components/common/index.ts
@@ -2,4 +2,5 @@ export { default as IconMultiplexer } from "./IconMultiplexer.svelte"
 export { default as IconSelector } from "./IconSelector.svelte"
 export { default as StrikeSeparator } from "./StrikeSeparator.svelte"
 export { default as LoadingBar } from "./LoadingBar.svelte"
+export { default as TauriLink } from "./TauriLink.svelte"
 export * from "./date"
diff --git a/packages/ui/src/components/extension/templates/MarkdownView.svelte b/packages/ui/src/components/extension/templates/MarkdownView.svelte
index 296b5d8..8d3f695 100644
--- a/packages/ui/src/components/extension/templates/MarkdownView.svelte
+++ b/packages/ui/src/components/extension/templates/MarkdownView.svelte
@@ -23,6 +23,6 @@
 <Button class="fixed left-2 top-2" onclick={onGoBack} variant="outline" size="icon">
 	<ArrowLeftIcon />
 </Button>
-<main class="container my-5">
+<main class="container my-5 px-12">
 	<Markdown markdown={markdownViewContent.content} />
 </main>
diff --git a/packages/ui/src/components/extension/templates/form-view.svelte b/packages/ui/src/components/extension/templates/form-view.svelte
index 7a3c040..9a3957e 100644
--- a/packages/ui/src/components/extension/templates/form-view.svelte
+++ b/packages/ui/src/components/extension/templates/form-view.svelte
@@ -16,4 +16,3 @@
 	<h1 class="text-2xl font-bold">{formViewContent.title}</h1>
 	<Form {formViewContent} />
 </main>
-<!-- <pre>{JSON.stringify(formViewContent, null, 2)}</pre> -->
diff --git a/packages/ui/src/components/main/BuiltinCmds.svelte b/packages/ui/src/components/main/BuiltinCmds.svelte
index 6ef23de..0c4c3a2 100644
--- a/packages/ui/src/components/main/BuiltinCmds.svelte
+++ b/packages/ui/src/components/main/BuiltinCmds.svelte
@@ -9,7 +9,7 @@
 </script>
 
 <DraggableCommandGroup heading="Builtin Commands">
-	{#each builtinCmds as cmd}
+	{#each builtinCmds as cmd (cmd.id)}
 		<Command.Item
 			class="flex justify-between"
 			onSelect={() => {
@@ -19,6 +19,7 @@
 				cmdName: cmd.name,
 				cmdType: CmdTypeEnum.Builtin
 			} satisfies CmdValue)}
+			keywords={cmd.keywords}
 		>
 			<span class="flex gap-2">
 				<IconMultiplexer
@@ -26,6 +27,10 @@
 					class="!h-5 !w-5 shrink-0"
 				/>
 				<span>{cmd.name}</span>
+				<!-- <pre>{JSON.stringify({
+						cmdName: cmd.name,
+						cmdType: CmdTypeEnum.Builtin
+					})}</pre> -->
 			</span>
 		</Command.Item>
 	{/each}
diff --git a/packages/ui/src/components/main/GlobalCommandPaletteFooter.svelte b/packages/ui/src/components/main/GlobalCommandPaletteFooter.svelte
index b8f20c6..8edfd8f 100644
--- a/packages/ui/src/components/main/GlobalCommandPaletteFooter.svelte
+++ b/packages/ui/src/components/main/GlobalCommandPaletteFooter.svelte
@@ -25,8 +25,12 @@
 	data-tauri-drag-region
 	class={cn("h-12 select-none items-center justify-between gap-4 border-t px-2", className)}
 >
-	<Avatar.Root class="p-2">
-		<Avatar.Image src="/favicon.png" alt="Kunkun Logo" class="select-none invert dark:invert-0" />
+	<Avatar.Root class="p-1.5">
+		<Avatar.Image
+			src="/favicon.png"
+			alt="Kunkun Logo"
+			class="h-full select-none invert dark:invert-0"
+		/>
 	</Avatar.Root>
 	<flex class="items-center gap-1">
 		{#if defaultAction}
diff --git a/packages/ui/src/components/main/types.ts b/packages/ui/src/components/main/types.ts
index fe12236..a16d685 100644
--- a/packages/ui/src/components/main/types.ts
+++ b/packages/ui/src/components/main/types.ts
@@ -8,10 +8,16 @@ import {
 import * as v from "valibot"
 
 export type BuiltinCmd = {
+	id: string
 	name: string
 	description: string
 	iconifyIcon: string
+	keywords?: string[]
 	function: () => Promise<void>
+	flags?: {
+		dev?: boolean // commands only available in dev mode
+		developer?: boolean // commands only available in developer mode
+	}
 }
 
 export type OnExtCmdSelect = (
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0058baf..5deabfe 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -88,8 +88,8 @@ importers:
         specifier: workspace:*
         version: link:packages/api
       '@kksh/svelte5':
-        specifier: 0.1.2-beta.8
-        version: 0.1.2-beta.8(lucide-svelte@0.454.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)
+        specifier: 0.1.9
+        version: 0.1.9(lucide-svelte@0.456.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)
       prettier:
         specifier: ^3.2.5
         version: 3.3.3
@@ -135,21 +135,18 @@ importers:
       '@std/semver':
         specifier: npm:@jsr/std__semver@^1.0.3
         version: '@jsr/std__semver@1.0.3'
+      '@tanstack/table-core':
+        specifier: ^8.20.5
+        version: 8.20.5
       '@tauri-apps/api':
-        specifier: ^2
-        version: 2.0.3
+        specifier: ^2.1.0
+        version: 2.1.0
       '@tauri-apps/plugin-shell':
         specifier: ^2
         version: 2.0.1
-      bits-ui:
-        specifier: 1.0.0-next.36
-        version: 1.0.0-next.36(svelte@5.1.9)
       gsap:
         specifier: ^3.12.5
         version: 3.12.5
-      lucide-svelte:
-        specifier: ^0.454.0
-        version: 0.454.0(svelte@5.1.9)
       lz-string:
         specifier: ^1.5.0
         version: 1.5.0
@@ -159,31 +156,28 @@ importers:
       semver:
         specifier: ^7.6.3
         version: 7.6.3
-      svelte-radix:
-        specifier: ^2.0.1
-        version: 2.0.1(svelte@5.1.9)
       svelte-sonner:
         specifier: ^0.3.28
         version: 0.3.28(svelte@5.1.9)
       sveltekit-superforms:
         specifier: ^2.20.0
-        version: 2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
+        version: 2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
       tauri-plugin-clipboard-api:
         specifier: ^2.1.11
         version: 2.1.11(typescript@5.6.3)
       uuid:
-        specifier: ^11.0.2
-        version: 11.0.2
+        specifier: ^11.0.3
+        version: 11.0.3
     devDependencies:
       '@kksh/types':
         specifier: workspace:*
         version: link:../../packages/types
       '@sveltejs/adapter-static':
         specifier: ^3.0.6
-        version: 3.0.6(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))
+        version: 3.0.6(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))
       '@sveltejs/kit':
-        specifier: ^2.7.4
-        version: 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
+        specifier: ^2.8.0
+        version: 2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
       '@sveltejs/vite-plugin-svelte':
         specifier: ^4.0.0
         version: 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
@@ -200,20 +194,20 @@ importers:
         specifier: ^0.5.15
         version: 0.5.15(tailwindcss@3.4.14)
       '@tauri-apps/cli':
-        specifier: ^2.0.4
-        version: 2.0.4
+        specifier: ^2.1.0
+        version: 2.1.0
       '@types/bun':
         specifier: latest
         version: 1.1.13
       '@types/semver':
         specifier: ^7.5.8
         version: 7.5.8
-      '@unocss/preset-attributify':
-        specifier: ^0.64.0
-        version: 0.64.0
       autoprefixer:
         specifier: ^10.4.20
         version: 10.4.20(postcss@8.4.47)
+      bits-ui:
+        specifier: 1.0.0-next.49
+        version: 1.0.0-next.49(svelte@5.1.9)
       clsx:
         specifier: ^2.1.1
         version: 2.1.1
@@ -222,7 +216,13 @@ importers:
         version: 8.3.1(svelte@5.1.9)
       formsnap:
         specifier: ^1.0.1
-        version: 1.0.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3))
+        version: 1.0.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3))
+      lucide-svelte:
+        specifier: ^0.456.0
+        version: 0.456.0(svelte@5.1.9)
+      svelte-radix:
+        specifier: ^2.0.1
+        version: 2.0.1(svelte@5.1.9)
       tailwind-merge:
         specifier: ^2.5.4
         version: 2.5.4
@@ -241,9 +241,6 @@ importers:
       typescript:
         specifier: ^5.6.3
         version: 5.6.3
-      unocss:
-        specifier: ^0.64.0
-        version: 0.64.0(postcss@8.4.47)(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
       vaul-svelte:
         specifier: ^0.3.2
         version: 0.3.2(svelte@5.1.9)
@@ -541,20 +538,20 @@ importers:
         specifier: workspace:*
         version: link:../api
       '@kksh/svelte5':
-        specifier: ^0.1.2-beta.8
-        version: 0.1.2-beta.8(lucide-svelte@0.454.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)
+        specifier: ^0.1.9
+        version: 0.1.9(lucide-svelte@0.454.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)
       '@types/bun':
         specifier: latest
         version: 1.1.13
       bits-ui:
-        specifier: 1.0.0-next.45
-        version: 1.0.0-next.45(svelte@5.1.9)
+        specifier: 1.0.0-next.49
+        version: 1.0.0-next.49(svelte@5.1.9)
       clsx:
         specifier: ^2.1.1
         version: 2.1.1
       formsnap:
         specifier: 2.0.0-next.1
-        version: 2.0.0-next.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3))
+        version: 2.0.0-next.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3))
       lucide-svelte:
         specifier: ^0.454.0
         version: 0.454.0(svelte@5.1.9)
@@ -575,7 +572,7 @@ importers:
         version: 0.3.28(svelte@5.1.9)
       sveltekit-superforms:
         specifier: ^2.20.0
-        version: 2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
+        version: 2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
       tailwind-merge:
         specifier: ^2.5.4
         version: 2.5.4
@@ -668,12 +665,6 @@ packages:
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
 
-  '@antfu/install-pkg@0.4.1':
-    resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==}
-
-  '@antfu/utils@0.7.10':
-    resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
-
   '@ark/schema@0.10.0':
     resolution: {integrity: sha512-zpfXwWLOzj9aUK+dXQ6aleJAOgle4/WrHDop5CMX2M88dFQ85NdH8O0v0pvMAQnfFcaQAZ/nVDYLlBJsFc09XA==}
 
@@ -980,12 +971,6 @@ packages:
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/aix-ppc64@0.23.1':
-    resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [aix]
-
   '@esbuild/aix-ppc64@0.24.0':
     resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
     engines: {node: '>=18'}
@@ -998,12 +983,6 @@ packages:
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm64@0.23.1':
-    resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [android]
-
   '@esbuild/android-arm64@0.24.0':
     resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
     engines: {node: '>=18'}
@@ -1016,12 +995,6 @@ packages:
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-arm@0.23.1':
-    resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [android]
-
   '@esbuild/android-arm@0.24.0':
     resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
     engines: {node: '>=18'}
@@ -1034,12 +1007,6 @@ packages:
     cpu: [x64]
     os: [android]
 
-  '@esbuild/android-x64@0.23.1':
-    resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [android]
-
   '@esbuild/android-x64@0.24.0':
     resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
     engines: {node: '>=18'}
@@ -1052,12 +1019,6 @@ packages:
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-arm64@0.23.1':
-    resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [darwin]
-
   '@esbuild/darwin-arm64@0.24.0':
     resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
     engines: {node: '>=18'}
@@ -1070,12 +1031,6 @@ packages:
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.23.1':
-    resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [darwin]
-
   '@esbuild/darwin-x64@0.24.0':
     resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
     engines: {node: '>=18'}
@@ -1088,12 +1043,6 @@ packages:
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-arm64@0.23.1':
-    resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [freebsd]
-
   '@esbuild/freebsd-arm64@0.24.0':
     resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
     engines: {node: '>=18'}
@@ -1106,12 +1055,6 @@ packages:
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.23.1':
-    resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [freebsd]
-
   '@esbuild/freebsd-x64@0.24.0':
     resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
     engines: {node: '>=18'}
@@ -1124,12 +1067,6 @@ packages:
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm64@0.23.1':
-    resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [linux]
-
   '@esbuild/linux-arm64@0.24.0':
     resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
     engines: {node: '>=18'}
@@ -1142,12 +1079,6 @@ packages:
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-arm@0.23.1':
-    resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [linux]
-
   '@esbuild/linux-arm@0.24.0':
     resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
     engines: {node: '>=18'}
@@ -1160,12 +1091,6 @@ packages:
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.23.1':
-    resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [linux]
-
   '@esbuild/linux-ia32@0.24.0':
     resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
     engines: {node: '>=18'}
@@ -1178,12 +1103,6 @@ packages:
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.23.1':
-    resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
-    engines: {node: '>=18'}
-    cpu: [loong64]
-    os: [linux]
-
   '@esbuild/linux-loong64@0.24.0':
     resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
     engines: {node: '>=18'}
@@ -1196,12 +1115,6 @@ packages:
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.23.1':
-    resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
-    engines: {node: '>=18'}
-    cpu: [mips64el]
-    os: [linux]
-
   '@esbuild/linux-mips64el@0.24.0':
     resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
     engines: {node: '>=18'}
@@ -1214,12 +1127,6 @@ packages:
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.23.1':
-    resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [linux]
-
   '@esbuild/linux-ppc64@0.24.0':
     resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
     engines: {node: '>=18'}
@@ -1232,12 +1139,6 @@ packages:
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.23.1':
-    resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
-    engines: {node: '>=18'}
-    cpu: [riscv64]
-    os: [linux]
-
   '@esbuild/linux-riscv64@0.24.0':
     resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
     engines: {node: '>=18'}
@@ -1250,12 +1151,6 @@ packages:
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.23.1':
-    resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
-    engines: {node: '>=18'}
-    cpu: [s390x]
-    os: [linux]
-
   '@esbuild/linux-s390x@0.24.0':
     resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
     engines: {node: '>=18'}
@@ -1268,12 +1163,6 @@ packages:
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/linux-x64@0.23.1':
-    resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [linux]
-
   '@esbuild/linux-x64@0.24.0':
     resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
     engines: {node: '>=18'}
@@ -1286,24 +1175,12 @@ packages:
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/netbsd-x64@0.23.1':
-    resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [netbsd]
-
   '@esbuild/netbsd-x64@0.24.0':
     resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-arm64@0.23.1':
-    resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openbsd]
-
   '@esbuild/openbsd-arm64@0.24.0':
     resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
     engines: {node: '>=18'}
@@ -1316,12 +1193,6 @@ packages:
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/openbsd-x64@0.23.1':
-    resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [openbsd]
-
   '@esbuild/openbsd-x64@0.24.0':
     resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
     engines: {node: '>=18'}
@@ -1334,12 +1205,6 @@ packages:
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/sunos-x64@0.23.1':
-    resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [sunos]
-
   '@esbuild/sunos-x64@0.24.0':
     resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
     engines: {node: '>=18'}
@@ -1352,12 +1217,6 @@ packages:
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-arm64@0.23.1':
-    resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [win32]
-
   '@esbuild/win32-arm64@0.24.0':
     resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
     engines: {node: '>=18'}
@@ -1370,12 +1229,6 @@ packages:
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.23.1':
-    resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [win32]
-
   '@esbuild/win32-ia32@0.24.0':
     resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
     engines: {node: '>=18'}
@@ -1388,12 +1241,6 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@esbuild/win32-x64@0.23.1':
-    resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [win32]
-
   '@esbuild/win32-x64@0.24.0':
     resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
     engines: {node: '>=18'}
@@ -1480,9 +1327,6 @@ packages:
   '@iconify/types@2.0.0':
     resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
 
-  '@iconify/utils@2.1.33':
-    resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==}
-
   '@internationalized/date@3.5.6':
     resolution: {integrity: sha512-jLxQjefH9VI5P9UQuqB6qNKnvFt1Ky1TPIzHGsIlCi7sZZoMR8SdYbBGRvM0y+Jtb+ez4ieBzmiAUcpmPYpyOw==}
 
@@ -1524,8 +1368,8 @@ packages:
   '@jsr/std__semver@1.0.3':
     resolution: {integrity: sha512-d1uBT0Muxhd3yBIw9ZE1Q/4N1Y0td0EJe1AqwM3hP05IMwaWQV/miksQOPR3rup3bVovuIvqBm7WJcoUripdQA==, tarball: https://npm.jsr.io/~/11/@jsr/std__semver/1.0.3.tgz}
 
-  '@kksh/svelte5@0.1.2-beta.8':
-    resolution: {integrity: sha512-cXReqYbZ/KXICucNREz6T/1DguTlGjvkq2qlUriYH/lgfgsUjbq8ZPhVsCIb0qlDT9IYIu5Pc/8X+azGqFirRA==}
+  '@kksh/svelte5@0.1.9':
+    resolution: {integrity: sha512-k6NNyLHCfoC1XQ09dWBtZJDYOLJiXZ9KxmSwtZbu4rdepoY0tMYql+odj92w2tjhzM6Q/LHdtq6DNz67Fxf20Q==}
     peerDependencies:
       lucide-svelte: ^0.454.0
       svelte: ^5.1.10
@@ -1964,8 +1808,8 @@ packages:
     peerDependencies:
       '@sveltejs/kit': ^2.0.0
 
-  '@sveltejs/kit@2.7.4':
-    resolution: {integrity: sha512-3DOPQYck3CpAmPgGq/HuhJMCCz8GF0ukbompPJQ2zShoSzrEKW9iG/l0nZmaxMvuOO3NNLmZj8F3W9uzqmkNdw==}
+  '@sveltejs/kit@2.8.0':
+    resolution: {integrity: sha512-HCiWupCuKJQ3aPaC4Xc6lpPdjOOnoGzEiYjOqMqppdtfGtY2ABrx932Vw66ZwS2RGXc0BmZvFvNq5SzqlmDVLg==}
     engines: {node: '>=18.13'}
     hasBin: true
     peerDependencies:
@@ -2011,6 +1855,10 @@ packages:
     peerDependencies:
       tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
 
+  '@tanstack/table-core@8.20.5':
+    resolution: {integrity: sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==}
+    engines: {node: '>=12'}
+
   '@tauri-apps/api@2.0.0-rc.3':
     resolution: {integrity: sha512-k1erUfnoOFJwL5VNFZz0BQZ2agNstG7CNOjwpdWMl1vOaVuSn4DhJtXB0Deh9lZaaDlfrykKOyZs9c3XXpMi5Q==}
 
@@ -2020,71 +1868,139 @@ packages:
   '@tauri-apps/api@2.0.3':
     resolution: {integrity: sha512-840qk6n8rbXBXMA5/aAgTYsg5JAubKO0nXw5wf7IzGnUuYKGbB4oFBIZtXOIWy+E0kNTDI3qhq5iqsoMJfwp8g==}
 
+  '@tauri-apps/api@2.1.0':
+    resolution: {integrity: sha512-1w/JygZOiUtdOU7qart78MaB4/qayZ2heB793KhbZRS7I9q4sxXcXaB7He6uFlprD8w5TI9P8HCuEByCvWRtfw==}
+
   '@tauri-apps/cli-darwin-arm64@2.0.4':
     resolution: {integrity: sha512-siH7rOHobb16rPbc11k64p1mxIpiRCkWmzs2qmL5IX21Gx9K5onI3Tk67Oqpf2uNupbYzItrOttaDT4NHFC7tw==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [darwin]
 
+  '@tauri-apps/cli-darwin-arm64@2.1.0':
+    resolution: {integrity: sha512-ESc6J6CE8hl1yKH2vJ+ALF+thq4Be+DM1mvmTyUCQObvezNCNhzfS6abIUd3ou4x5RGH51ouiANeT3wekU6dCw==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [darwin]
+
   '@tauri-apps/cli-darwin-x64@2.0.4':
     resolution: {integrity: sha512-zIccfbCoZMfmUpnk6PFCV0keFyfVj1A9XV3Oiiitj/dkTZ9CQvzjhX3XC0XcK4rsTWegfr2PjSrK06aiPAROAw==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [darwin]
 
+  '@tauri-apps/cli-darwin-x64@2.1.0':
+    resolution: {integrity: sha512-TasHS442DFs8cSH2eUQzuDBXUST4ECjCd0yyP+zZzvAruiB0Bg+c8A+I/EnqCvBQ2G2yvWLYG8q/LI7c87A5UA==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [darwin]
+
   '@tauri-apps/cli-linux-arm-gnueabihf@2.0.4':
     resolution: {integrity: sha512-fgQqJzefOGWCBNg4yrVA82Rg4s1XQr5K0dc2rCxBhJfa696e8dQ1LDrnWq/AiO5r+uHfVaoQTIUvxxpFicYRSA==}
     engines: {node: '>= 10'}
     cpu: [arm]
     os: [linux]
 
+  '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0':
+    resolution: {integrity: sha512-aP7ZBGNL4ny07Cbb6kKpUOSrmhcIK2KhjviTzYlh+pPhAptxnC78xQGD3zKQkTi2WliJLPmBYbOHWWQa57lQ9w==}
+    engines: {node: '>= 10'}
+    cpu: [arm]
+    os: [linux]
+
   '@tauri-apps/cli-linux-arm64-gnu@2.0.4':
     resolution: {integrity: sha512-u8wbt5tPA9pI6j+d7jGrfOz9UVCiTp+IYzKNiIqlrDsAjqAUFaNXYHKqOUboeFWEmI4zoCWj6LgpS2OJTQ5FKg==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
 
+  '@tauri-apps/cli-linux-arm64-gnu@2.1.0':
+    resolution: {integrity: sha512-ZTdgD5gLeMCzndMT2f358EkoYkZ5T+Qy6zPzU+l5vv5M7dHVN9ZmblNAYYXmoOuw7y+BY4X/rZvHV9pcGrcanQ==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+
   '@tauri-apps/cli-linux-arm64-musl@2.0.4':
     resolution: {integrity: sha512-hntF1V8e3V1hlrESm93PsghDhf3lA5pbvFrRfYxU1c+fVD/jRXGVw8BH3O1lW8MWwhEg1YdhKk01oAgsuHLuig==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
 
+  '@tauri-apps/cli-linux-arm64-musl@2.1.0':
+    resolution: {integrity: sha512-NzwqjUCilhnhJzusz3d/0i0F1GFrwCQbkwR6yAHUxItESbsGYkZRJk0yMEWkg3PzFnyK4cWTlQJMEU52TjhEzA==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+
   '@tauri-apps/cli-linux-x64-gnu@2.0.4':
     resolution: {integrity: sha512-Iq1GGJb+oT1T0ZV8izrgf0cBtlzPCJaWcNueRbf1ZXquMf+FSTyQv+/Lo8rq5T6buOIJOH7cAOTuEWWqiCZteg==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
 
+  '@tauri-apps/cli-linux-x64-gnu@2.1.0':
+    resolution: {integrity: sha512-TyiIpMEtZxNOQmuFyfJwaaYbg3movSthpBJLIdPlKxSAB2BW0VWLY3/ZfIxm/G2YGHyREkjJvimzYE0i37PnMA==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+
   '@tauri-apps/cli-linux-x64-musl@2.0.4':
     resolution: {integrity: sha512-9NTk6Pf0bSwXqCBdAA+PDYts9HeHebZzIo8mbRzRyUbER6QngG5HZb9Ka36Z1QWtJjdRy6uxSb4zb/9NuTeHfA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
 
+  '@tauri-apps/cli-linux-x64-musl@2.1.0':
+    resolution: {integrity: sha512-/dQd0TlaxBdJACrR72DhynWftzHDaX32eBtS5WBrNJ+nnNb+znM3gON6nJ9tSE9jgDa6n1v2BkI/oIDtypfUXw==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+
   '@tauri-apps/cli-win32-arm64-msvc@2.0.4':
     resolution: {integrity: sha512-OF2e9oxiBFR8A8wVMOhUx9QGN/I1ZkquWC7gVQBnA56nx9PabJlDT08QBy5UD8USqZFVznnfNr2ehlheQahb3g==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [win32]
 
+  '@tauri-apps/cli-win32-arm64-msvc@2.1.0':
+    resolution: {integrity: sha512-NdQJO7SmdYqOcE+JPU7bwg7+odfZMWO6g8xF9SXYCMdUzvM2Gv/AQfikNXz5yS7ralRhNFuW32i5dcHlxh4pDg==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [win32]
+
   '@tauri-apps/cli-win32-ia32-msvc@2.0.4':
     resolution: {integrity: sha512-T+hCKB3rFP6q0saHHtR02hm6wr1ZPJ0Mkii3oRTxjPG6BBXoVzHNCYzvdgEGJPTA2sFuAQtJH764NRtNlDMifw==}
     engines: {node: '>= 10'}
     cpu: [ia32]
     os: [win32]
 
+  '@tauri-apps/cli-win32-ia32-msvc@2.1.0':
+    resolution: {integrity: sha512-f5h8gKT/cB8s1ticFRUpNmHqkmaLutT62oFDB7N//2YTXnxst7EpMIn1w+QimxTvTk2gcx6EcW6bEk/y2hZGzg==}
+    engines: {node: '>= 10'}
+    cpu: [ia32]
+    os: [win32]
+
   '@tauri-apps/cli-win32-x64-msvc@2.0.4':
     resolution: {integrity: sha512-GVaiI3KWRFLomjJmApHqihhYlkJ+7FqhumhVfBO6Z2tWzZjQyVQgTdNp0kYEuW2WoAYEj0dKY6qd4YM33xYcUA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [win32]
 
+  '@tauri-apps/cli-win32-x64-msvc@2.1.0':
+    resolution: {integrity: sha512-P/+LrdSSb5Xbho1LRP4haBjFHdyPdjWvGgeopL96OVtrFpYnfC+RctB45z2V2XxqFk3HweDDxk266btjttfjGw==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [win32]
+
   '@tauri-apps/cli@2.0.4':
     resolution: {integrity: sha512-Hl9eFXz+O366+6su9PfaSzu2EJdFe1p8K8ghkWmi40dz8VmSE7vsMTaOStD0I71ckSOkh2ICDX7FQTBgjlpjWw==}
     engines: {node: '>= 10'}
     hasBin: true
 
+  '@tauri-apps/cli@2.1.0':
+    resolution: {integrity: sha512-K2VhcKqBhAeS5pNOVdnR/xQRU6jwpgmkSL2ejHXcl0m+kaTggT0WRDQnFtPq6NljA7aE03cvwsbCAoFG7vtkJw==}
+    engines: {node: '>= 10'}
+    hasBin: true
+
   '@tauri-apps/plugin-deep-link@2.0.0':
     resolution: {integrity: sha512-cDa2k1OrRU5DoKc0IXl1Y8RlFOU107u2phdZfT7FkApsC6TL/VAPs3YOUTT8p9/PZ50EjOKP104HFMqVqnQ0bw==}
 
@@ -2277,86 +2193,6 @@ packages:
   '@ungap/structured-clone@1.2.0':
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
-  '@unocss/astro@0.64.0':
-    resolution: {integrity: sha512-4Ijf3cQblSjdC3XV4SvzkEj17z6gNsuMGy7M+TvNN4cZhGLWQCIChtHR525ESGxJ4kdZ6FoIUoxmLdWHMOpX4Q==}
-    peerDependencies:
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      vite:
-        optional: true
-
-  '@unocss/cli@0.64.0':
-    resolution: {integrity: sha512-xfY/qm7vr/4Qaf+CcQHuBJSg5ApZBvvGVD1zwyGFgfhfOFYR1hI3DS2zl75zav6btEwwXsjY7AUv6uYGF4M7dA==}
-    engines: {node: '>=14'}
-    hasBin: true
-
-  '@unocss/config@0.64.0':
-    resolution: {integrity: sha512-L97x4vEk7jNG5ptZY5Xp0xgEk//tbMpQVm2BzfyL7w+Hg8X3AV4YjFL6hysHvpYiTdUCVaZg+S0s3b7wuj8Mqw==}
-    engines: {node: '>=14'}
-
-  '@unocss/core@0.64.0':
-    resolution: {integrity: sha512-Qb8wWPYNlTagCdJGzULew+e3NMM8Bd7fr38lDLgrMj+njop+wzkSe1ZZOyMMH9yHSq/Rznn5eCjnyzyHwxGslQ==}
-
-  '@unocss/extractor-arbitrary-variants@0.64.0':
-    resolution: {integrity: sha512-oVB8l8zM+x0MQJTkraRcsrfJnWEwyPVgMgtzmNUm//HqV+xTrjZCNtOqHFNIZdj/+w0gkErGQLxzRwyPjlHq4g==}
-
-  '@unocss/inspector@0.64.0':
-    resolution: {integrity: sha512-aFEfxEuPOpbPNH3j1CLLnN7ZyZkc64XoxZbz7RbG20Wy5oJxonOnlu+Wikz9SfGvIyF16MVAMCkHu12WFRRC+g==}
-
-  '@unocss/postcss@0.64.0':
-    resolution: {integrity: sha512-OMDhAUDEzbb7i+fcYEYNxwdWJLSYklMrFGSC60ADK96UPX/B9S0z1pBz7N34DRPPIzg6shO6NQfDHOaxLelAeg==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      postcss: ^8.4.21
-
-  '@unocss/preset-attributify@0.64.0':
-    resolution: {integrity: sha512-3T1mktq5rAQxHXtdLkjjj1UOjPwy9iGbVUChvxyaGV5oOsj1mvfe1oetxz8HqAVQak8MtvsJzFzvuuQQln/6OA==}
-
-  '@unocss/preset-icons@0.64.0':
-    resolution: {integrity: sha512-jhozA4r583agZZpKttdootaWfvQ29lY/kHxNU1Ah2xeRQcVXXEh7M3cG0bo9HSIX9/BgXSk5rWQlqSPIqFl4Lw==}
-
-  '@unocss/preset-mini@0.64.0':
-    resolution: {integrity: sha512-bc7zanalVQUrETJ06eyS7y/lhceRlY8kBG/lRCV/dYmKl4Ho/s57LrpZH0G63OcO6IfWIjwoZHVC8/RHAqnYvQ==}
-
-  '@unocss/preset-tagify@0.64.0':
-    resolution: {integrity: sha512-WlRQXYgtVzJpVlZ+itXhrQyvMj6XW1InNIfvAHMorr5BGvMGETLRnuWwYYhGg2YDF/g+/EucU5PQmk9UkurBzg==}
-
-  '@unocss/preset-typography@0.64.0':
-    resolution: {integrity: sha512-hMKxhHTRUjvwB0gcdWOh6zWWolH9pvIvgB4p2GaFT1vKyFD0wkTZ/7S/Q3OMKJyevSKHyIgKd+PhNGKTx5FuQQ==}
-
-  '@unocss/preset-uno@0.64.0':
-    resolution: {integrity: sha512-gUmuL8anty551r/Q2XU5wc0aNZ+te4yydnamXHSUv3EkX6PCphOaiWsQ5f95fj26G8EYH9fLBvxqXurFBPM7og==}
-
-  '@unocss/preset-web-fonts@0.64.0':
-    resolution: {integrity: sha512-qraIhS0tCFHvdPQnzGTfi/dggwyboWPU8UQn8oLMsmPKogNPsYQfjrtTZs8X6F1KNaPV18c6saaWYvVZ8tXPoA==}
-
-  '@unocss/preset-wind@0.64.0':
-    resolution: {integrity: sha512-cJbZI4etFrIIQoC1VhRqyEZU5fUaYqOH3uIt5lM3osxBdAvHds7SPjLRbdR612US7JbuPeFhMMRnA1EYoo39sQ==}
-
-  '@unocss/reset@0.64.0':
-    resolution: {integrity: sha512-75SiDtRX/mtg/7GWeoLfDfdWF4z59zF1XesL46FNd2hDZL36a+SZHIKB/J+PPzLyX9irqm3mAETS2PNfynuJpA==}
-
-  '@unocss/rule-utils@0.64.0':
-    resolution: {integrity: sha512-R5b/uspq6XsmpEqhxSzOOePHsS+pdxya+0pkQw7m6thsUxNDL7kVDpBiz2iNX5lnwagvhyhUWYu85a8XmZ8ymw==}
-    engines: {node: '>=14'}
-
-  '@unocss/transformer-attributify-jsx@0.64.0':
-    resolution: {integrity: sha512-/kG7NFmqMCftK5DJUgMUbe9SWRJt20Z55o36aaCkBcEsrTSYBmWYDyIJPZa3TxsjO8H1qDekRVu7CgDxwlxMEQ==}
-
-  '@unocss/transformer-compile-class@0.64.0':
-    resolution: {integrity: sha512-p1LZG2AUsD0FrkCSo1JOsWVQ+sEMcgnVCm6XtCgxBraV3nPFeZUyxmj9yEkt0HhfYkMTvdT155c3rDhbwP8AFw==}
-
-  '@unocss/transformer-directives@0.64.0':
-    resolution: {integrity: sha512-+e2bDEQMEsfq4KZ2R+GQNrEv0bL3E1KbXGPQXUiMGitmZzzagDfIBk9VTP3gNhU+hgTaWtjXlReeap1eSmwKGQ==}
-
-  '@unocss/transformer-variant-group@0.64.0':
-    resolution: {integrity: sha512-c4CN+W8ShBhGIma3KHHcBe7CRljRwZ0f5UamRrUIMs28a2jfa1TlPlr/4Ke5b6icr0mwTGajJEUaPanOK0Fp1A==}
-
-  '@unocss/vite@0.64.0':
-    resolution: {integrity: sha512-QrfXlI8YcIaqQc4WRVrLbCho8eEi5pjs1/C8AwnUHGximEDN6MZNUk0htjo4QZ+50IA2b4RrYdz1N3875bJoFg==}
-    peerDependencies:
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-
   '@vinejs/compiler@2.5.0':
     resolution: {integrity: sha512-hg4ekaB5Y2zh+IWzBiC/WCDWrIfpVnKu/ubUvelKlidc/VbulsexoFRw5kJGHZenPVI5YzNnDeTdYSALkTV7jQ==}
     engines: {node: '>=18.0.0'}
@@ -2377,20 +2213,6 @@ packages:
   '@vue/compiler-ssr@3.5.12':
     resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
 
-  '@vue/reactivity@3.5.12':
-    resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
-
-  '@vue/runtime-core@3.5.12':
-    resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
-
-  '@vue/runtime-dom@3.5.12':
-    resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
-
-  '@vue/server-renderer@3.5.12':
-    resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
-    peerDependencies:
-      vue: 3.5.12
-
   '@vue/shared@3.5.12':
     resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
 
@@ -2504,14 +2326,8 @@ packages:
     peerDependencies:
       svelte: ^4.0.0 || ^5.0.0-next.118
 
-  bits-ui@1.0.0-next.36:
-    resolution: {integrity: sha512-xkMLjRYWsS7ZwqWssE1tYqQb/7vo89tcJdznc5nEwl+wpMZNeXuUDm3hc++hFZImursN5pltD1KkVTmAfmbsaQ==}
-    engines: {node: '>=18', pnpm: '>=8.7.0'}
-    peerDependencies:
-      svelte: ^5.0.0-next.1
-
-  bits-ui@1.0.0-next.45:
-    resolution: {integrity: sha512-kt7gYIirEo2Rg1hMudcGEzSHogQTA22d/j1x8v+wIshsIqqcCN6DXJZpTojSCQWxny8IEa9CRnLwAzY4B2qf1Q==}
+  bits-ui@1.0.0-next.49:
+    resolution: {integrity: sha512-7EoNj7pu9+RVv6MM1kGVvDzH2aA38v07Q+BDSq8yiLIHxZ5dTkDHwoikhtT/+jMU25c0uYvHq44GEQX+027IFw==}
     engines: {node: '>=18', pnpm: '>=8.7.0'}
     peerDependencies:
       svelte: ^5.0.0-next.1
@@ -2546,16 +2362,6 @@ packages:
   bun-types@1.1.34:
     resolution: {integrity: sha512-br5QygTEL/TwB4uQOb96Ky22j4Gq2WxWH/8Oqv20fk5HagwKXo/akB+LiYgSfzexCt6kkcUaVm+bKiPl71xPvw==}
 
-  bundle-require@5.0.0:
-    resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    peerDependencies:
-      esbuild: '>=0.18'
-
-  cac@6.7.14:
-    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
-    engines: {node: '>=8'}
-
   callsites@3.1.0:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
     engines: {node: '>=6'}
@@ -2637,9 +2443,6 @@ packages:
   color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
 
-  colorette@2.0.20:
-    resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
   comlink-stdio@0.1.7:
     resolution: {integrity: sha512-LTTyZfEq3KuDKnNSFDsDbJzNh5F6h+MTd13D6K7yRt9zvnP2nxZ5DgyaAaw2H87vQUzJ1T93Se1o3FHk9Ch7cw==}
     peerDependencies:
@@ -2676,13 +2479,6 @@ packages:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
-  confbox@0.1.8:
-    resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
-  consola@3.2.3:
-    resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
-    engines: {node: ^14.18.0 || >=16.10.0}
-
   convert-source-map@2.0.0:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
 
@@ -2697,18 +2493,11 @@ packages:
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     engines: {node: '>= 8'}
 
-  css-tree@3.0.1:
-    resolution: {integrity: sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==}
-    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
   cssesc@3.0.0:
     resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
     engines: {node: '>=4'}
     hasBin: true
 
-  csstype@3.1.3:
-    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
   data-uri-to-buffer@4.0.1:
     resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
     engines: {node: '>= 12'}
@@ -2743,9 +2532,6 @@ packages:
     resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
     engines: {node: '>=8'}
 
-  defu@6.1.4:
-    resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
-
   dependency-tree@11.0.1:
     resolution: {integrity: sha512-eCt7HSKIC9NxgIykG2DRq3Aewn9UhVS14MB3rEn6l/AsEI1FBg6ZGSlCU0SZ6Tjm2kkhj6/8c2pViinuyKELhg==}
     engines: {node: '>=18'}
@@ -2755,9 +2541,6 @@ packages:
     resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
     engines: {node: '>=6'}
 
-  destr@2.0.3:
-    resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
-
   detect-indent@6.1.0:
     resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
     engines: {node: '>=8'}
@@ -2829,9 +2612,6 @@ packages:
     resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
     engines: {node: '>=12'}
 
-  duplexer@0.1.2:
-    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
@@ -2883,11 +2663,6 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
-  esbuild@0.23.1:
-    resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
-    engines: {node: '>=18'}
-    hasBin: true
-
   esbuild@0.24.0:
     resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
     engines: {node: '>=18'}
@@ -3122,9 +2897,6 @@ packages:
   get-own-enumerable-property-symbols@3.0.2:
     resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
 
-  get-tsconfig@4.8.1:
-    resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
-
   glob-parent@5.1.2:
     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
     engines: {node: '>= 6'}
@@ -3173,10 +2945,6 @@ packages:
   gsap@3.12.5:
     resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==}
 
-  gzip-size@6.0.0:
-    resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
-    engines: {node: '>=10'}
-
   has-flag@4.0.0:
     resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
     engines: {node: '>=8'}
@@ -3222,9 +2990,6 @@ packages:
   import-meta-resolve@4.1.0:
     resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
 
-  importx@0.4.4:
-    resolution: {integrity: sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==}
-
   imurmurhash@0.1.4:
     resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
     engines: {node: '>=0.8.19'}
@@ -3333,10 +3098,6 @@ packages:
     resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
     hasBin: true
 
-  jiti@2.0.0-beta.3:
-    resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==}
-    hasBin: true
-
   joi@17.13.3:
     resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
 
@@ -3393,9 +3154,6 @@ packages:
   known-css-properties@0.35.0:
     resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
 
-  kolorist@1.8.0:
-    resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
   levn@0.4.1:
     resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
     engines: {node: '>= 0.8.0'}
@@ -3417,14 +3175,6 @@ packages:
   linkify-it@5.0.0:
     resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
 
-  load-tsconfig@0.2.5:
-    resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  local-pkg@0.5.0:
-    resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
-    engines: {node: '>=14'}
-
   locate-character@3.0.0:
     resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
 
@@ -3469,6 +3219,11 @@ packages:
     peerDependencies:
       svelte: ^3 || ^4 || ^5.0.0-next.42
 
+  lucide-svelte@0.456.0:
+    resolution: {integrity: sha512-SSdmxJOmL1h42ZypuGr54dYsXAT5o6WkQPKVDFnnrD0liOaXzfNNJuA7JbpkO9FFozBchyVpB1A1mKRmXOD8ug==}
+    peerDependencies:
+      svelte: ^3 || ^4 || ^5.0.0-next.42
+
   lunr@2.3.9:
     resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
 
@@ -3501,9 +3256,6 @@ packages:
   mdast-util-to-hast@13.2.0:
     resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
 
-  mdn-data@2.12.1:
-    resolution: {integrity: sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==}
-
   mdurl@2.0.0:
     resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
 
@@ -3568,9 +3320,6 @@ packages:
     engines: {node: '>=10'}
     hasBin: true
 
-  mlly@1.7.2:
-    resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==}
-
   mode-watcher@0.4.1:
     resolution: {integrity: sha512-bNC+1NXmwEFZtziCdZSgP7HFQTpqJPcQn9GwwJQGSf6SBF3neEPYV1uRwkYuAQwbsvsXIYtzaqgedDzJ7D1mhg==}
     peerDependencies:
@@ -3621,9 +3370,6 @@ packages:
     resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
     engines: {node: '>=10.5.0'}
 
-  node-fetch-native@1.6.4:
-    resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
-
   node-fetch@3.3.2:
     resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3659,9 +3405,6 @@ packages:
     resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
     engines: {node: '>= 6'}
 
-  ofetch@1.4.1:
-    resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
-
   once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
 
@@ -3761,12 +3504,6 @@ packages:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
 
-  pathe@1.1.2:
-    resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
-  perfect-debounce@1.0.0:
-    resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
-
   picocolors@1.1.0:
     resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
 
@@ -3793,9 +3530,6 @@ packages:
     resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     engines: {node: '>= 6'}
 
-  pkg-types@1.2.1:
-    resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
-
   plimit-lit@1.6.1:
     resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==}
     engines: {node: '>=12'}
@@ -4059,9 +3793,6 @@ packages:
     resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
     engines: {node: '>=8'}
 
-  resolve-pkg-maps@1.0.0:
-    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
   resolve@1.22.8:
     resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
     hasBin: true
@@ -4169,10 +3900,6 @@ packages:
     resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
     engines: {node: '>=14'}
 
-  sirv@2.0.4:
-    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
-    engines: {node: '>= 10'}
-
   sirv@3.0.0:
     resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==}
     engines: {node: '>=18'}
@@ -4406,13 +4133,6 @@ packages:
   tiny-glob@0.2.9:
     resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
 
-  tinyexec@0.3.1:
-    resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
-
-  tinyglobby@0.2.10:
-    resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==}
-    engines: {node: '>=12.0.0'}
-
   tmp@0.0.33:
     resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
     engines: {node: '>=0.6.0'}
@@ -4468,11 +4188,6 @@ packages:
   tslib@2.8.1:
     resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
 
-  tsx@4.19.2:
-    resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
-    engines: {node: '>=18.0.0'}
-    hasBin: true
-
   turbo-darwin-64@2.2.3:
     resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==}
     cpu: [x64]
@@ -4539,12 +4254,6 @@ packages:
   uc.micro@2.1.0:
     resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
 
-  ufo@1.5.4:
-    resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
-
-  unconfig@0.5.5:
-    resolution: {integrity: sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==}
-
   undici-types@5.26.5:
     resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
 
@@ -4574,18 +4283,6 @@ packages:
     resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
     engines: {node: '>= 10.0.0'}
 
-  unocss@0.64.0:
-    resolution: {integrity: sha512-wiEFRjGXSogzf/4+KICXjFDgSGloSCV1Ka2Dct/8Z8U+iwRqeVpHGVQcGjBFg9Uh0DH1fSVBbis2aPuIkT0nEA==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      '@unocss/webpack': 0.64.0
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      '@unocss/webpack':
-        optional: true
-      vite:
-        optional: true
-
   update-browserslist-db@1.1.1:
     resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
     hasBin: true
@@ -4602,6 +4299,10 @@ packages:
     resolution: {integrity: sha512-14FfcOJmqdjbBPdDjFQyk/SdT4NySW4eM0zcG+HqbHP5jzuH56xO3J1DGhgs/cEMCfwYi3HQI1gnTO62iaG+tQ==}
     hasBin: true
 
+  uuid@11.0.3:
+    resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==}
+    hasBin: true
+
   uuid@9.0.1:
     resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
     hasBin: true
@@ -4687,22 +4388,9 @@ packages:
       vite:
         optional: true
 
-  vue-flow-layout@0.1.1:
-    resolution: {integrity: sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==}
-    peerDependencies:
-      vue: ^3.4.37
-
   vue-sonner@1.2.5:
     resolution: {integrity: sha512-dAFCdq2cYxEwvW4gHuJhySCXklmxOWzjl5QwkNL9IIdkqyvSkdu+YnAbnJBdIAH/zo1bhXTuGG+m0Two4AX/KA==}
 
-  vue@3.5.12:
-    resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
   walkdir@0.4.1:
     resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==}
     engines: {node: '>=6.0.0'}
@@ -4821,13 +4509,6 @@ snapshots:
       '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
 
-  '@antfu/install-pkg@0.4.1':
-    dependencies:
-      package-manager-detector: 0.2.2
-      tinyexec: 0.3.1
-
-  '@antfu/utils@0.7.10': {}
-
   '@ark/schema@0.10.0':
     dependencies:
       '@ark/util': 0.10.0
@@ -5599,213 +5280,141 @@ snapshots:
   '@esbuild/aix-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/aix-ppc64@0.23.1':
-    optional: true
-
   '@esbuild/aix-ppc64@0.24.0':
     optional: true
 
   '@esbuild/android-arm64@0.21.5':
     optional: true
 
-  '@esbuild/android-arm64@0.23.1':
-    optional: true
-
   '@esbuild/android-arm64@0.24.0':
     optional: true
 
   '@esbuild/android-arm@0.21.5':
     optional: true
 
-  '@esbuild/android-arm@0.23.1':
-    optional: true
-
   '@esbuild/android-arm@0.24.0':
     optional: true
 
   '@esbuild/android-x64@0.21.5':
     optional: true
 
-  '@esbuild/android-x64@0.23.1':
-    optional: true
-
   '@esbuild/android-x64@0.24.0':
     optional: true
 
   '@esbuild/darwin-arm64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-arm64@0.23.1':
-    optional: true
-
   '@esbuild/darwin-arm64@0.24.0':
     optional: true
 
   '@esbuild/darwin-x64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-x64@0.23.1':
-    optional: true
-
   '@esbuild/darwin-x64@0.24.0':
     optional: true
 
   '@esbuild/freebsd-arm64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.23.1':
-    optional: true
-
   '@esbuild/freebsd-arm64@0.24.0':
     optional: true
 
   '@esbuild/freebsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-x64@0.23.1':
-    optional: true
-
   '@esbuild/freebsd-x64@0.24.0':
     optional: true
 
   '@esbuild/linux-arm64@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm64@0.23.1':
-    optional: true
-
   '@esbuild/linux-arm64@0.24.0':
     optional: true
 
   '@esbuild/linux-arm@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm@0.23.1':
-    optional: true
-
   '@esbuild/linux-arm@0.24.0':
     optional: true
 
   '@esbuild/linux-ia32@0.21.5':
     optional: true
 
-  '@esbuild/linux-ia32@0.23.1':
-    optional: true
-
   '@esbuild/linux-ia32@0.24.0':
     optional: true
 
   '@esbuild/linux-loong64@0.21.5':
     optional: true
 
-  '@esbuild/linux-loong64@0.23.1':
-    optional: true
-
   '@esbuild/linux-loong64@0.24.0':
     optional: true
 
   '@esbuild/linux-mips64el@0.21.5':
     optional: true
 
-  '@esbuild/linux-mips64el@0.23.1':
-    optional: true
-
   '@esbuild/linux-mips64el@0.24.0':
     optional: true
 
   '@esbuild/linux-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/linux-ppc64@0.23.1':
-    optional: true
-
   '@esbuild/linux-ppc64@0.24.0':
     optional: true
 
   '@esbuild/linux-riscv64@0.21.5':
     optional: true
 
-  '@esbuild/linux-riscv64@0.23.1':
-    optional: true
-
   '@esbuild/linux-riscv64@0.24.0':
     optional: true
 
   '@esbuild/linux-s390x@0.21.5':
     optional: true
 
-  '@esbuild/linux-s390x@0.23.1':
-    optional: true
-
   '@esbuild/linux-s390x@0.24.0':
     optional: true
 
   '@esbuild/linux-x64@0.21.5':
     optional: true
 
-  '@esbuild/linux-x64@0.23.1':
-    optional: true
-
   '@esbuild/linux-x64@0.24.0':
     optional: true
 
   '@esbuild/netbsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/netbsd-x64@0.23.1':
-    optional: true
-
   '@esbuild/netbsd-x64@0.24.0':
     optional: true
 
-  '@esbuild/openbsd-arm64@0.23.1':
-    optional: true
-
   '@esbuild/openbsd-arm64@0.24.0':
     optional: true
 
   '@esbuild/openbsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/openbsd-x64@0.23.1':
-    optional: true
-
   '@esbuild/openbsd-x64@0.24.0':
     optional: true
 
   '@esbuild/sunos-x64@0.21.5':
     optional: true
 
-  '@esbuild/sunos-x64@0.23.1':
-    optional: true
-
   '@esbuild/sunos-x64@0.24.0':
     optional: true
 
   '@esbuild/win32-arm64@0.21.5':
     optional: true
 
-  '@esbuild/win32-arm64@0.23.1':
-    optional: true
-
   '@esbuild/win32-arm64@0.24.0':
     optional: true
 
   '@esbuild/win32-ia32@0.21.5':
     optional: true
 
-  '@esbuild/win32-ia32@0.23.1':
-    optional: true
-
   '@esbuild/win32-ia32@0.24.0':
     optional: true
 
   '@esbuild/win32-x64@0.21.5':
     optional: true
 
-  '@esbuild/win32-x64@0.23.1':
-    optional: true
-
   '@esbuild/win32-x64@0.24.0':
     optional: true
 
@@ -5910,18 +5519,6 @@ snapshots:
 
   '@iconify/types@2.0.0': {}
 
-  '@iconify/utils@2.1.33':
-    dependencies:
-      '@antfu/install-pkg': 0.4.1
-      '@antfu/utils': 0.7.10
-      '@iconify/types': 2.0.0
-      debug: 4.3.7
-      kolorist: 1.8.0
-      local-pkg: 0.5.0
-      mlly: 1.7.2
-    transitivePeerDependencies:
-      - supports-color
-
   '@internationalized/date@3.5.6':
     dependencies:
       '@swc/helpers': 0.5.13
@@ -5984,13 +5581,20 @@ snapshots:
 
   '@jsr/std__semver@1.0.3': {}
 
-  '@kksh/svelte5@0.1.2-beta.8(lucide-svelte@0.454.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)':
+  '@kksh/svelte5@0.1.9(lucide-svelte@0.454.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)':
     dependencies:
       lucide-svelte: 0.454.0(svelte@5.1.9)
       svelte: 5.1.9
       svelte-persisted-store: 0.12.0(svelte@5.1.9)
       svelte-sonner: 0.3.28(svelte@5.1.9)
 
+  '@kksh/svelte5@0.1.9(lucide-svelte@0.456.0(svelte@5.1.9))(svelte-sonner@0.3.28(svelte@5.1.9))(svelte@5.1.9)':
+    dependencies:
+      lucide-svelte: 0.456.0(svelte@5.1.9)
+      svelte: 5.1.9
+      svelte-persisted-store: 0.12.0(svelte@5.1.9)
+      svelte-sonner: 0.3.28(svelte@5.1.9)
+
   '@manypkg/find-root@1.1.0':
     dependencies:
       '@babel/runtime': 7.26.0
@@ -6564,11 +6168,11 @@ snapshots:
       - bufferutil
       - utf-8-validate
 
-  '@sveltejs/adapter-static@3.0.6(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))':
+  '@sveltejs/adapter-static@3.0.6(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))':
     dependencies:
-      '@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
+      '@sveltejs/kit': 2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
 
-  '@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))':
+  '@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))':
     dependencies:
       '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
       '@types/cookie': 0.6.0
@@ -6633,42 +6237,76 @@ snapshots:
       postcss-selector-parser: 6.0.10
       tailwindcss: 3.4.14
 
+  '@tanstack/table-core@8.20.5': {}
+
   '@tauri-apps/api@2.0.0-rc.3': {}
 
   '@tauri-apps/api@2.0.1': {}
 
   '@tauri-apps/api@2.0.3': {}
 
+  '@tauri-apps/api@2.1.0': {}
+
   '@tauri-apps/cli-darwin-arm64@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-darwin-arm64@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-darwin-x64@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-darwin-x64@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-linux-arm-gnueabihf@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-linux-arm64-gnu@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-linux-arm64-gnu@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-linux-arm64-musl@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-linux-arm64-musl@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-linux-x64-gnu@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-linux-x64-gnu@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-linux-x64-musl@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-linux-x64-musl@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-win32-arm64-msvc@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-win32-arm64-msvc@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-win32-ia32-msvc@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-win32-ia32-msvc@2.1.0':
+    optional: true
+
   '@tauri-apps/cli-win32-x64-msvc@2.0.4':
     optional: true
 
+  '@tauri-apps/cli-win32-x64-msvc@2.1.0':
+    optional: true
+
   '@tauri-apps/cli@2.0.4':
     optionalDependencies:
       '@tauri-apps/cli-darwin-arm64': 2.0.4
@@ -6682,65 +6320,78 @@ snapshots:
       '@tauri-apps/cli-win32-ia32-msvc': 2.0.4
       '@tauri-apps/cli-win32-x64-msvc': 2.0.4
 
+  '@tauri-apps/cli@2.1.0':
+    optionalDependencies:
+      '@tauri-apps/cli-darwin-arm64': 2.1.0
+      '@tauri-apps/cli-darwin-x64': 2.1.0
+      '@tauri-apps/cli-linux-arm-gnueabihf': 2.1.0
+      '@tauri-apps/cli-linux-arm64-gnu': 2.1.0
+      '@tauri-apps/cli-linux-arm64-musl': 2.1.0
+      '@tauri-apps/cli-linux-x64-gnu': 2.1.0
+      '@tauri-apps/cli-linux-x64-musl': 2.1.0
+      '@tauri-apps/cli-win32-arm64-msvc': 2.1.0
+      '@tauri-apps/cli-win32-ia32-msvc': 2.1.0
+      '@tauri-apps/cli-win32-x64-msvc': 2.1.0
+
   '@tauri-apps/plugin-deep-link@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-dialog@2.0.1':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-fs@2.0.0-rc.1':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-fs@2.0.1':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-global-shortcut@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-http@2.0.1':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-log@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-notification@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-os@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-os@2.0.0-rc.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-process@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-shell@2.0.1':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-store@2.1.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-updater@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@tauri-apps/plugin-upload@2.0.0':
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   '@ts-graphviz/adapter@2.0.5':
     dependencies:
@@ -6906,157 +6557,6 @@ snapshots:
 
   '@ungap/structured-clone@1.2.0': {}
 
-  '@unocss/astro@0.64.0(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/reset': 0.64.0
-      '@unocss/vite': 0.64.0(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
-    optionalDependencies:
-      vite: 5.4.10(@types/node@22.8.7)(terser@5.36.0)
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-      - vue
-
-  '@unocss/cli@0.64.0(rollup@4.24.3)':
-    dependencies:
-      '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.3(rollup@4.24.3)
-      '@unocss/config': 0.64.0
-      '@unocss/core': 0.64.0
-      '@unocss/preset-uno': 0.64.0
-      cac: 6.7.14
-      chokidar: 3.6.0
-      colorette: 2.0.20
-      consola: 3.2.3
-      magic-string: 0.30.12
-      pathe: 1.1.2
-      perfect-debounce: 1.0.0
-      tinyglobby: 0.2.10
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-
-  '@unocss/config@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      unconfig: 0.5.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@unocss/core@0.64.0': {}
-
-  '@unocss/extractor-arbitrary-variants@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/inspector@0.64.0(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-      gzip-size: 6.0.0
-      sirv: 2.0.4
-      vue-flow-layout: 0.1.1(vue@3.5.12(typescript@5.6.3))
-    transitivePeerDependencies:
-      - vue
-
-  '@unocss/postcss@0.64.0(postcss@8.4.47)':
-    dependencies:
-      '@unocss/config': 0.64.0
-      '@unocss/core': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-      css-tree: 3.0.1
-      postcss: 8.4.47
-      tinyglobby: 0.2.10
-    transitivePeerDependencies:
-      - supports-color
-
-  '@unocss/preset-attributify@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/preset-icons@0.64.0':
-    dependencies:
-      '@iconify/utils': 2.1.33
-      '@unocss/core': 0.64.0
-      ofetch: 1.4.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@unocss/preset-mini@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/extractor-arbitrary-variants': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-
-  '@unocss/preset-tagify@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/preset-typography@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/preset-mini': 0.64.0
-
-  '@unocss/preset-uno@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/preset-mini': 0.64.0
-      '@unocss/preset-wind': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-
-  '@unocss/preset-web-fonts@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      ofetch: 1.4.1
-
-  '@unocss/preset-wind@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/preset-mini': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-
-  '@unocss/reset@0.64.0': {}
-
-  '@unocss/rule-utils@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      magic-string: 0.30.12
-
-  '@unocss/transformer-attributify-jsx@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/transformer-compile-class@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/transformer-directives@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-      '@unocss/rule-utils': 0.64.0
-      css-tree: 3.0.1
-
-  '@unocss/transformer-variant-group@0.64.0':
-    dependencies:
-      '@unocss/core': 0.64.0
-
-  '@unocss/vite@0.64.0(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.3(rollup@4.24.3)
-      '@unocss/config': 0.64.0
-      '@unocss/core': 0.64.0
-      '@unocss/inspector': 0.64.0(vue@3.5.12(typescript@5.6.3))
-      chokidar: 3.6.0
-      magic-string: 0.30.12
-      tinyglobby: 0.2.10
-      vite: 5.4.10(@types/node@22.8.7)(terser@5.36.0)
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-      - vue
-
   '@vinejs/compiler@2.5.0':
     optional: true
 
@@ -7102,28 +6602,6 @@ snapshots:
       '@vue/compiler-dom': 3.5.12
       '@vue/shared': 3.5.12
 
-  '@vue/reactivity@3.5.12':
-    dependencies:
-      '@vue/shared': 3.5.12
-
-  '@vue/runtime-core@3.5.12':
-    dependencies:
-      '@vue/reactivity': 3.5.12
-      '@vue/shared': 3.5.12
-
-  '@vue/runtime-dom@3.5.12':
-    dependencies:
-      '@vue/reactivity': 3.5.12
-      '@vue/runtime-core': 3.5.12
-      '@vue/shared': 3.5.12
-      csstype: 3.1.3
-
-  '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@vue/compiler-ssr': 3.5.12
-      '@vue/shared': 3.5.12
-      vue: 3.5.12(typescript@5.6.3)
-
   '@vue/shared@3.5.12': {}
 
   acorn-jsx@5.3.2(acorn@8.12.1):
@@ -7227,17 +6705,7 @@ snapshots:
       nanoid: 5.0.8
       svelte: 5.1.9
 
-  bits-ui@1.0.0-next.36(svelte@5.1.9):
-    dependencies:
-      '@floating-ui/core': 1.6.8
-      '@floating-ui/dom': 1.6.12
-      '@internationalized/date': 3.5.6
-      esm-env: 1.1.4
-      runed: 0.15.3(svelte@5.1.9)
-      svelte: 5.1.9
-      svelte-toolbelt: 0.4.6(svelte@5.1.9)
-
-  bits-ui@1.0.0-next.45(svelte@5.1.9):
+  bits-ui@1.0.0-next.49(svelte@5.1.9):
     dependencies:
       '@floating-ui/core': 1.6.8
       '@floating-ui/dom': 1.6.12
@@ -7288,13 +6756,6 @@ snapshots:
       '@types/node': 20.12.14
       '@types/ws': 8.5.13
 
-  bundle-require@5.0.0(esbuild@0.21.5):
-    dependencies:
-      esbuild: 0.21.5
-      load-tsconfig: 0.2.5
-
-  cac@6.7.14: {}
-
   callsites@3.1.0: {}
 
   camelcase-css@2.0.1: {}
@@ -7368,8 +6829,6 @@ snapshots:
 
   color-name@1.1.4: {}
 
-  colorette@2.0.20: {}
-
   comlink-stdio@0.1.7(typescript@5.5.4):
     dependencies:
       typescript: 5.5.4
@@ -7393,10 +6852,6 @@ snapshots:
 
   concat-map@0.0.1: {}
 
-  confbox@0.1.8: {}
-
-  consola@3.2.3: {}
-
   convert-source-map@2.0.0: {}
 
   cookie@0.6.0: {}
@@ -7413,15 +6868,8 @@ snapshots:
       shebang-command: 2.0.0
       which: 2.0.2
 
-  css-tree@3.0.1:
-    dependencies:
-      mdn-data: 2.12.1
-      source-map-js: 1.2.1
-
   cssesc@3.0.0: {}
 
-  csstype@3.1.3: {}
-
   data-uri-to-buffer@4.0.1: {}
 
   dayjs@1.11.13:
@@ -7443,8 +6891,6 @@ snapshots:
 
   define-lazy-prop@2.0.0: {}
 
-  defu@6.1.4: {}
-
   dependency-tree@11.0.1:
     dependencies:
       commander: 12.1.0
@@ -7456,8 +6902,6 @@ snapshots:
 
   dequal@2.0.3: {}
 
-  destr@2.0.3: {}
-
   detect-indent@6.1.0: {}
 
   detective-amd@6.0.0:
@@ -7536,8 +6980,6 @@ snapshots:
 
   dotenv@16.0.3: {}
 
-  duplexer@0.1.2: {}
-
   eastasianwidth@0.2.0: {}
 
   effect@3.10.8:
@@ -7608,33 +7050,6 @@ snapshots:
       '@esbuild/win32-ia32': 0.21.5
       '@esbuild/win32-x64': 0.21.5
 
-  esbuild@0.23.1:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.23.1
-      '@esbuild/android-arm': 0.23.1
-      '@esbuild/android-arm64': 0.23.1
-      '@esbuild/android-x64': 0.23.1
-      '@esbuild/darwin-arm64': 0.23.1
-      '@esbuild/darwin-x64': 0.23.1
-      '@esbuild/freebsd-arm64': 0.23.1
-      '@esbuild/freebsd-x64': 0.23.1
-      '@esbuild/linux-arm': 0.23.1
-      '@esbuild/linux-arm64': 0.23.1
-      '@esbuild/linux-ia32': 0.23.1
-      '@esbuild/linux-loong64': 0.23.1
-      '@esbuild/linux-mips64el': 0.23.1
-      '@esbuild/linux-ppc64': 0.23.1
-      '@esbuild/linux-riscv64': 0.23.1
-      '@esbuild/linux-s390x': 0.23.1
-      '@esbuild/linux-x64': 0.23.1
-      '@esbuild/netbsd-x64': 0.23.1
-      '@esbuild/openbsd-arm64': 0.23.1
-      '@esbuild/openbsd-x64': 0.23.1
-      '@esbuild/sunos-x64': 0.23.1
-      '@esbuild/win32-arm64': 0.23.1
-      '@esbuild/win32-ia32': 0.23.1
-      '@esbuild/win32-x64': 0.23.1
-
   esbuild@0.24.0:
     optionalDependencies:
       '@esbuild/aix-ppc64': 0.24.0
@@ -7889,17 +7304,17 @@ snapshots:
     dependencies:
       fetch-blob: 3.2.0
 
-  formsnap@1.0.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)):
+  formsnap@1.0.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)):
     dependencies:
       nanoid: 5.0.8
       svelte: 5.1.9
-      sveltekit-superforms: 2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
+      sveltekit-superforms: 2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
 
-  formsnap@2.0.0-next.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)):
+  formsnap@2.0.0-next.1(svelte@5.1.9)(sveltekit-superforms@2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)):
     dependencies:
       svelte: 5.1.9
       svelte-toolbelt: 0.4.6(svelte@5.1.9)
-      sveltekit-superforms: 2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
+      sveltekit-superforms: 2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3)
 
   fraction.js@4.3.7: {}
 
@@ -7939,10 +7354,6 @@ snapshots:
 
   get-own-enumerable-property-symbols@3.0.2: {}
 
-  get-tsconfig@4.8.1:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
   glob-parent@5.1.2:
     dependencies:
       is-glob: 4.0.3
@@ -7998,10 +7409,6 @@ snapshots:
 
   gsap@3.12.5: {}
 
-  gzip-size@6.0.0:
-    dependencies:
-      duplexer: 0.1.2
-
   has-flag@4.0.0: {}
 
   hasown@2.0.2:
@@ -8056,18 +7463,6 @@ snapshots:
 
   import-meta-resolve@4.1.0: {}
 
-  importx@0.4.4:
-    dependencies:
-      bundle-require: 5.0.0(esbuild@0.21.5)
-      debug: 4.3.7
-      esbuild: 0.21.5
-      jiti: 2.0.0-beta.3
-      jiti-v1: jiti@1.21.6
-      pathe: 1.1.2
-      tsx: 4.19.2
-    transitivePeerDependencies:
-      - supports-color
-
   imurmurhash@0.1.4: {}
 
   inflight@1.0.6:
@@ -8147,8 +7542,6 @@ snapshots:
 
   jiti@1.21.6: {}
 
-  jiti@2.0.0-beta.3: {}
-
   joi@17.13.3:
     dependencies:
       '@hapi/hoek': 9.3.0
@@ -8205,8 +7598,6 @@ snapshots:
 
   known-css-properties@0.35.0: {}
 
-  kolorist@1.8.0: {}
-
   levn@0.4.1:
     dependencies:
       prelude-ls: 1.2.1
@@ -8225,13 +7616,6 @@ snapshots:
     dependencies:
       uc.micro: 2.1.0
 
-  load-tsconfig@0.2.5: {}
-
-  local-pkg@0.5.0:
-    dependencies:
-      mlly: 1.7.2
-      pkg-types: 1.2.1
-
   locate-character@3.0.0: {}
 
   locate-path@5.0.0:
@@ -8272,6 +7656,10 @@ snapshots:
     dependencies:
       svelte: 5.1.9
 
+  lucide-svelte@0.456.0(svelte@5.1.9):
+    dependencies:
+      svelte: 5.1.9
+
   lunr@2.3.9: {}
 
   lz-string@1.5.0: {}
@@ -8322,8 +7710,6 @@ snapshots:
       unist-util-visit: 5.0.0
       vfile: 6.0.3
 
-  mdn-data@2.12.1: {}
-
   mdurl@2.0.0: {}
 
   memoize-weak@1.0.2: {}
@@ -8379,13 +7765,6 @@ snapshots:
 
   mkdirp@3.0.1: {}
 
-  mlly@1.7.2:
-    dependencies:
-      acorn: 8.12.1
-      pathe: 1.1.2
-      pkg-types: 1.2.1
-      ufo: 1.5.4
-
   mode-watcher@0.4.1(svelte@5.1.9):
     dependencies:
       svelte: 5.1.9
@@ -8424,8 +7803,6 @@ snapshots:
 
   node-domexception@1.0.0: {}
 
-  node-fetch-native@1.6.4: {}
-
   node-fetch@3.3.2:
     dependencies:
       data-uri-to-buffer: 4.0.1
@@ -8451,12 +7828,6 @@ snapshots:
 
   object-hash@3.0.0: {}
 
-  ofetch@1.4.1:
-    dependencies:
-      destr: 2.0.3
-      node-fetch-native: 1.6.4
-      ufo: 1.5.4
-
   once@1.4.0:
     dependencies:
       wrappy: 1.0.2
@@ -8554,10 +7925,6 @@ snapshots:
 
   path-type@4.0.0: {}
 
-  pathe@1.1.2: {}
-
-  perfect-debounce@1.0.0: {}
-
   picocolors@1.1.0: {}
 
   picocolors@1.1.1: {}
@@ -8572,12 +7939,6 @@ snapshots:
 
   pirates@4.0.6: {}
 
-  pkg-types@1.2.1:
-    dependencies:
-      confbox: 0.1.8
-      mlly: 1.7.2
-      pathe: 1.1.2
-
   plimit-lit@1.6.1:
     dependencies:
       queue-lit: 1.5.2
@@ -8767,8 +8128,6 @@ snapshots:
 
   resolve-from@5.0.0: {}
 
-  resolve-pkg-maps@1.0.0: {}
-
   resolve@1.22.8:
     dependencies:
       is-core-module: 2.15.1
@@ -8886,12 +8245,6 @@ snapshots:
 
   signal-exit@4.1.0: {}
 
-  sirv@2.0.4:
-    dependencies:
-      '@polka/url': 1.0.0-next.28
-      mrmime: 2.0.0
-      totalist: 3.0.1
-
   sirv@3.0.0:
     dependencies:
       '@polka/url': 1.0.0-next.28
@@ -9067,9 +8420,9 @@ snapshots:
       magic-string: 0.30.12
       zimmerframe: 1.1.2
 
-  sveltekit-superforms@2.20.0(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3):
+  sveltekit-superforms@2.20.0(@sveltejs/kit@2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.1.9)(typescript@5.6.3):
     dependencies:
-      '@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
+      '@sveltejs/kit': 2.8.0(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))
       devalue: 5.1.1
       just-clone: 6.2.0
       memoize-weak: 1.0.2
@@ -9152,7 +8505,7 @@ snapshots:
       '@huakunshen/comlink': 4.4.1
       '@rollup/plugin-alias': 5.1.1(rollup@4.24.3)
       '@rollup/plugin-typescript': 11.1.6(rollup@4.24.3)(tslib@2.8.1)(typescript@5.5.4)
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       '@tauri-apps/plugin-dialog': 2.0.1
       '@tauri-apps/plugin-fs': 2.0.1
       '@tauri-apps/plugin-http': 2.0.1
@@ -9179,7 +8532,7 @@ snapshots:
       '@huakunshen/comlink': 4.4.1
       '@rollup/plugin-alias': 5.1.1(rollup@4.24.3)
       '@rollup/plugin-typescript': 11.1.6(rollup@4.24.3)(tslib@2.8.1)(typescript@5.6.3)
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       '@tauri-apps/plugin-dialog': 2.0.1
       '@tauri-apps/plugin-fs': 2.0.1
       '@tauri-apps/plugin-http': 2.0.1
@@ -9217,32 +8570,32 @@ snapshots:
 
   tauri-plugin-network-api@2.0.4(typescript@5.5.4):
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       valibot: 0.40.0(typescript@5.5.4)
     transitivePeerDependencies:
       - typescript
 
   tauri-plugin-network-api@2.0.4(typescript@5.6.3):
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       valibot: 0.40.0(typescript@5.6.3)
     transitivePeerDependencies:
       - typescript
 
   tauri-plugin-shellx-api@2.0.11:
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
 
   tauri-plugin-system-info-api@2.0.8(typescript@5.5.4):
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       valibot: 0.40.0(typescript@5.5.4)
     transitivePeerDependencies:
       - typescript
 
   tauri-plugin-system-info-api@2.0.8(typescript@5.6.3):
     dependencies:
-      '@tauri-apps/api': 2.0.3
+      '@tauri-apps/api': 2.1.0
       valibot: 0.40.0(typescript@5.6.3)
     transitivePeerDependencies:
       - typescript
@@ -9275,13 +8628,6 @@ snapshots:
       globalyzer: 0.1.0
       globrex: 0.1.2
 
-  tinyexec@0.3.1: {}
-
-  tinyglobby@0.2.10:
-    dependencies:
-      fdir: 6.4.2(picomatch@4.0.2)
-      picomatch: 4.0.2
-
   tmp@0.0.33:
     dependencies:
       os-tmpdir: 1.0.2
@@ -9337,13 +8683,6 @@ snapshots:
 
   tslib@2.8.1: {}
 
-  tsx@4.19.2:
-    dependencies:
-      esbuild: 0.23.1
-      get-tsconfig: 4.8.1
-    optionalDependencies:
-      fsevents: 2.3.3
-
   turbo-darwin-64@2.2.3:
     optional: true
 
@@ -9395,16 +8734,6 @@ snapshots:
 
   uc.micro@2.1.0: {}
 
-  ufo@1.5.4: {}
-
-  unconfig@0.5.5:
-    dependencies:
-      '@antfu/utils': 0.7.10
-      defu: 6.1.4
-      importx: 0.4.4
-    transitivePeerDependencies:
-      - supports-color
-
   undici-types@5.26.5: {}
 
   undici-types@6.19.8: {}
@@ -9436,33 +8765,6 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unocss@0.64.0(postcss@8.4.47)(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3)):
-    dependencies:
-      '@unocss/astro': 0.64.0(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
-      '@unocss/cli': 0.64.0(rollup@4.24.3)
-      '@unocss/core': 0.64.0
-      '@unocss/postcss': 0.64.0(postcss@8.4.47)
-      '@unocss/preset-attributify': 0.64.0
-      '@unocss/preset-icons': 0.64.0
-      '@unocss/preset-mini': 0.64.0
-      '@unocss/preset-tagify': 0.64.0
-      '@unocss/preset-typography': 0.64.0
-      '@unocss/preset-uno': 0.64.0
-      '@unocss/preset-web-fonts': 0.64.0
-      '@unocss/preset-wind': 0.64.0
-      '@unocss/transformer-attributify-jsx': 0.64.0
-      '@unocss/transformer-compile-class': 0.64.0
-      '@unocss/transformer-directives': 0.64.0
-      '@unocss/transformer-variant-group': 0.64.0
-      '@unocss/vite': 0.64.0(rollup@4.24.3)(vite@5.4.10(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
-    optionalDependencies:
-      vite: 5.4.10(@types/node@22.8.7)(terser@5.36.0)
-    transitivePeerDependencies:
-      - postcss
-      - rollup
-      - supports-color
-      - vue
-
   update-browserslist-db@1.1.1(browserslist@4.24.2):
     dependencies:
       browserslist: 4.24.2
@@ -9477,6 +8779,8 @@ snapshots:
 
   uuid@11.0.2: {}
 
+  uuid@11.0.3: {}
+
   uuid@9.0.1: {}
 
   valibot@0.31.1:
@@ -9531,22 +8835,8 @@ snapshots:
     optionalDependencies:
       vite: 5.4.10(@types/node@22.8.7)(terser@5.36.0)
 
-  vue-flow-layout@0.1.1(vue@3.5.12(typescript@5.6.3)):
-    dependencies:
-      vue: 3.5.12(typescript@5.6.3)
-
   vue-sonner@1.2.5: {}
 
-  vue@3.5.12(typescript@5.6.3):
-    dependencies:
-      '@vue/compiler-dom': 3.5.12
-      '@vue/compiler-sfc': 3.5.12
-      '@vue/runtime-dom': 3.5.12
-      '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3))
-      '@vue/shared': 3.5.12
-    optionalDependencies:
-      typescript: 5.6.3
-
   walkdir@0.4.1: {}
 
   wcwidth@1.0.1: