diff --git a/.gitignore b/.gitignore
index d006b65..8eadf1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,9 @@
node_modules/
web/node_modules/
web/build/
+web/.svelte-kit/
data/
.env
+docker-watcher
+docker-watcher.exe
+server.exe
diff --git a/docker-watcher b/docker-watcher
deleted file mode 100644
index a38faf1..0000000
Binary files a/docker-watcher and /dev/null differ
diff --git a/docker-watcher.exe b/docker-watcher.exe
deleted file mode 100644
index 481d0a2..0000000
Binary files a/docker-watcher.exe and /dev/null differ
diff --git a/internal/api/dns.go b/internal/api/dns.go
index 1432010..c61b6bd 100644
--- a/internal/api/dns.go
+++ b/internal/api/dns.go
@@ -1,6 +1,7 @@
package api
import (
+ "fmt"
"log/slog"
"net/http"
"strings"
@@ -36,7 +37,11 @@ func (s *Server) listDNSRecords(w http.ResponseWriter, r *http.Request) {
// In wildcard mode, show expected records from consumers without sync status.
if settings.WildcardDNS {
- expectedFQDNs := s.computeExpectedFQDNs(settings)
+ expectedFQDNs, err := s.computeExpectedFQDNs(settings)
+ if err != nil {
+ respondError(w, http.StatusInternalServerError, "failed to compute expected records: "+err.Error())
+ return
+ }
var views []dnsRecordView
for fqdn, consumer := range expectedFQDNs {
parts := strings.SplitN(consumer, ":", 2)
@@ -253,7 +258,11 @@ func (s *Server) syncDNSRecords(w http.ResponseWriter, r *http.Request) {
}
// Compute expected FQDNs from active consumers.
- expectedFQDNs := s.computeExpectedFQDNs(settings)
+ expectedFQDNs, err := s.computeExpectedFQDNs(settings)
+ if err != nil {
+ respondError(w, http.StatusInternalServerError, "failed to compute expected records: "+err.Error())
+ return
+ }
// Get actual provider records.
providerRecords, err := provider.ListRecords(r.Context())
@@ -332,18 +341,29 @@ func (s *Server) syncDNSRecords(w http.ResponseWriter, r *http.Request) {
}
// computeExpectedFQDNs returns a map of FQDN -> "consumerType:consumerID" for all active DNS consumers.
-func (s *Server) computeExpectedFQDNs(settings store.Settings) map[string]string {
+func (s *Server) computeExpectedFQDNs(settings store.Settings) (map[string]string, error) {
expected := make(map[string]string)
// Instances with proxy enabled.
- projects, _ := s.store.GetAllProjects()
+ projects, err := s.store.GetAllProjects()
+ if err != nil {
+ return nil, fmt.Errorf("get projects: %w", err)
+ }
for _, p := range projects {
- stages, _ := s.store.GetStagesByProjectID(p.ID)
+ stages, err := s.store.GetStagesByProjectID(p.ID)
+ if err != nil {
+ slog.Warn("dns: failed to get stages", "project_id", p.ID, "error", err)
+ continue
+ }
for _, st := range stages {
if !st.EnableProxy {
continue
}
- instances, _ := s.store.GetInstancesByStageID(st.ID)
+ instances, err := s.store.GetInstancesByStageID(st.ID)
+ if err != nil {
+ slog.Warn("dns: failed to get instances", "stage_id", st.ID, "error", err)
+ continue
+ }
for _, inst := range instances {
if inst.NpmProxyID > 0 && inst.Subdomain != "" && inst.Status == "running" {
fqdn := inst.Subdomain + "." + settings.Domain
@@ -361,5 +381,5 @@ func (s *Server) computeExpectedFQDNs(settings store.Settings) map[string]string
}
}
- return expected
+ return expected, nil
}
diff --git a/internal/deployer/rollback.go b/internal/deployer/rollback.go
index 5bb1e06..8b047c4 100644
--- a/internal/deployer/rollback.go
+++ b/internal/deployer/rollback.go
@@ -46,8 +46,10 @@ func (d *Deployer) rollback(ctx context.Context, deployID string, containerID st
if instanceID != "" {
inst, err := d.store.GetInstanceByID(instanceID)
if err == nil && inst.Subdomain != "" {
- settings, _ := d.store.GetSettings()
- if settings.Domain != "" {
+ settings, settingsErr := d.store.GetSettings()
+ if settingsErr != nil {
+ slog.Warn("rollback: failed to get settings for DNS cleanup", "error", settingsErr)
+ } else if settings.Domain != "" {
fqdn := inst.Subdomain + "." + settings.Domain
d.removeDNS(ctx, fqdn, deployID)
}
diff --git a/web/.svelte-kit/ambient.d.ts b/web/.svelte-kit/ambient.d.ts
deleted file mode 100644
index 3de0b3a..0000000
--- a/web/.svelte-kit/ambient.d.ts
+++ /dev/null
@@ -1,424 +0,0 @@
-
-// this file is generated — do not edit it
-
-
-///
-
-/**
- * This module provides access to environment variables that are injected _statically_ into your bundle at build time and are limited to _private_ access.
- *
- * | | Runtime | Build time |
- * | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
- * | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
- * | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
- *
- * Static environment variables are [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env` at build time and then statically injected into your bundle at build time, enabling optimisations like dead code elimination.
- *
- * **_Private_ access:**
- *
- * - This module cannot be imported into client-side code
- * - This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured)
- *
- * For example, given the following build time environment:
- *
- * ```env
- * ENVIRONMENT=production
- * PUBLIC_BASE_URL=http://site.com
- * ```
- *
- * With the default `publicPrefix` and `privatePrefix`:
- *
- * ```ts
- * import { ENVIRONMENT, PUBLIC_BASE_URL } from '$env/static/private';
- *
- * console.log(ENVIRONMENT); // => "production"
- * console.log(PUBLIC_BASE_URL); // => throws error during build
- * ```
- *
- * The above values will be the same _even if_ different values for `ENVIRONMENT` or `PUBLIC_BASE_URL` are set at runtime, as they are statically replaced in your code with their build time values.
- */
-declare module '$env/static/private' {
- export const ACSetupSvcPort: string;
- export const ACSvcPort: string;
- export const ALLUSERSPROFILE: string;
- export const ANDROID_SDK_HOME: string;
- export const APPDATA: string;
- export const APPLICATIONINSIGHTS_CONFIGURATION_CONTENT: string;
- export const APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL: string;
- export const APPLICATION_INSIGHTS_NO_STATSBEAT: string;
- export const CHROME_CRASHPAD_PIPE_NAME: string;
- export const CLAUDECODE: string;
- export const CLAUDE_AGENT_SDK_VERSION: string;
- export const CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING: string;
- export const CLAUDE_CODE_ENTRYPOINT: string;
- export const COLOR: string;
- export const COMMONPROGRAMFILES: string;
- export const CommonProgramW6432: string;
- export const COMPUTERNAME: string;
- export const COMSPEC: string;
- export const COPILOT_OTEL_ENABLED: string;
- export const COPILOT_OTEL_EXPORTER_TYPE: string;
- export const COPILOT_OTEL_FILE_EXPORTER_PATH: string;
- export const COREPACK_ENABLE_AUTO_PIN: string;
- export const CUDA_PATH: string;
- export const CUDA_PATH_V10_1: string;
- export const CUDA_PATH_V12_0: string;
- export const CUDA_PATH_V12_4: string;
- export const CUDA_PATH_V13_1: string;
- export const CUDA_PATH_V13_2: string;
- export const DriverData: string;
- export const EDITOR: string;
- export const ELECTRON_RUN_AS_NODE: string;
- export const EXEPATH: string;
- export const FPS_BROWSER_APP_PROFILE_STRING: string;
- export const FPS_BROWSER_USER_PROFILE_STRING: string;
- export const GIT_EDITOR: string;
- export const GOPATH: string;
- export const HOME: string;
- export const HOMEDRIVE: string;
- export const HOMEPATH: string;
- export const INIT_CWD: string;
- export const LOCALAPPDATA: string;
- export const LOGONSERVER: string;
- export const MSYSTEM: string;
- export const NODE: string;
- export const NoDefaultCurrentDirectoryInExePath: string;
- export const NODE_ENV: string;
- export const NODE_UNC_HOST_ALLOWLIST: string;
- export const npm_command: string;
- export const npm_config_cache: string;
- export const npm_config_globalconfig: string;
- export const npm_config_global_prefix: string;
- export const npm_config_init_module: string;
- export const npm_config_local_prefix: string;
- export const npm_config_metrics_registry: string;
- export const npm_config_node_gyp: string;
- export const npm_config_noproxy: string;
- export const npm_config_prefix: string;
- export const npm_config_userconfig: string;
- export const npm_config_user_agent: string;
- export const npm_execpath: string;
- export const npm_lifecycle_event: string;
- export const npm_lifecycle_script: string;
- export const npm_node_execpath: string;
- export const npm_package_json: string;
- export const npm_package_name: string;
- export const npm_package_version: string;
- export const NUMBER_OF_PROCESSORS: string;
- export const NVCUDASAMPLES10_1_ROOT: string;
- export const NVCUDASAMPLES_ROOT: string;
- export const NVTOOLSEXT_PATH: string;
- export const OLDPWD: string;
- export const OneDrive: string;
- export const OneDriveConsumer: string;
- export const OS: string;
- export const OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: string;
- export const OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: string;
- export const PATH: string;
- export const PATHEXT: string;
- export const PLINK_PROTOCOL: string;
- export const PROCESSOR_ARCHITECTURE: string;
- export const PROCESSOR_IDENTIFIER: string;
- export const PROCESSOR_LEVEL: string;
- export const PROCESSOR_REVISION: string;
- export const ProgramData: string;
- export const PROGRAMFILES: string;
- export const ProgramW6432: string;
- export const PROMPT: string;
- export const PSModulePath: string;
- export const PUBLIC: string;
- export const PWD: string;
- export const PyCharm: string;
- export const QtMsBuild: string;
- export const RlsSvcPort: string;
- export const SESSIONNAME: string;
- export const SHELL: string;
- export const SHLVL: string;
- export const SYSTEMDRIVE: string;
- export const SYSTEMROOT: string;
- export const TEMP: string;
- export const TERM: string;
- export const TMP: string;
- export const USERDOMAIN: string;
- export const USERDOMAIN_ROAMINGPROFILE: string;
- export const USERNAME: string;
- export const USERPROFILE: string;
- export const VIRTUAL_ENV: string;
- export const VSCODE_CODE_CACHE_PATH: string;
- export const VSCODE_CRASH_REPORTER_PROCESS_TYPE: string;
- export const VSCODE_CWD: string;
- export const VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOME: string;
- export const VSCODE_ESM_ENTRYPOINT: string;
- export const VSCODE_HANDLES_UNCAUGHT_ERRORS: string;
- export const VSCODE_IPC_HOOK: string;
- export const VSCODE_L10N_BUNDLE_LOCATION: string;
- export const VSCODE_NLS_CONFIG: string;
- export const VSCODE_PID: string;
- export const VsPythonPath: string;
- export const WebStorm: string;
- export const WINDIR: string;
- export const _: string;
-}
-
-/**
- * This module provides access to environment variables that are injected _statically_ into your bundle at build time and are _publicly_ accessible.
- *
- * | | Runtime | Build time |
- * | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
- * | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
- * | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
- *
- * Static environment variables are [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env` at build time and then statically injected into your bundle at build time, enabling optimisations like dead code elimination.
- *
- * **_Public_ access:**
- *
- * - This module _can_ be imported into client-side code
- * - **Only** variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`) are included
- *
- * For example, given the following build time environment:
- *
- * ```env
- * ENVIRONMENT=production
- * PUBLIC_BASE_URL=http://site.com
- * ```
- *
- * With the default `publicPrefix` and `privatePrefix`:
- *
- * ```ts
- * import { ENVIRONMENT, PUBLIC_BASE_URL } from '$env/static/public';
- *
- * console.log(ENVIRONMENT); // => throws error during build
- * console.log(PUBLIC_BASE_URL); // => "http://site.com"
- * ```
- *
- * The above values will be the same _even if_ different values for `ENVIRONMENT` or `PUBLIC_BASE_URL` are set at runtime, as they are statically replaced in your code with their build time values.
- */
-declare module '$env/static/public' {
-
-}
-
-/**
- * This module provides access to environment variables set _dynamically_ at runtime and that are limited to _private_ access.
- *
- * | | Runtime | Build time |
- * | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
- * | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
- * | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
- *
- * Dynamic environment variables are defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`.
- *
- * **_Private_ access:**
- *
- * - This module cannot be imported into client-side code
- * - This module includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured)
- *
- * > [!NOTE] In `dev`, `$env/dynamic` includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
- *
- * > [!NOTE] To get correct types, environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
- * >
- * > ```env
- * > MY_FEATURE_FLAG=
- * > ```
- * >
- * > You can override `.env` values from the command line like so:
- * >
- * > ```sh
- * > MY_FEATURE_FLAG="enabled" npm run dev
- * > ```
- *
- * For example, given the following runtime environment:
- *
- * ```env
- * ENVIRONMENT=production
- * PUBLIC_BASE_URL=http://site.com
- * ```
- *
- * With the default `publicPrefix` and `privatePrefix`:
- *
- * ```ts
- * import { env } from '$env/dynamic/private';
- *
- * console.log(env.ENVIRONMENT); // => "production"
- * console.log(env.PUBLIC_BASE_URL); // => undefined
- * ```
- */
-declare module '$env/dynamic/private' {
- export const env: {
- ACSetupSvcPort: string;
- ACSvcPort: string;
- ALLUSERSPROFILE: string;
- ANDROID_SDK_HOME: string;
- APPDATA: string;
- APPLICATIONINSIGHTS_CONFIGURATION_CONTENT: string;
- APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL: string;
- APPLICATION_INSIGHTS_NO_STATSBEAT: string;
- CHROME_CRASHPAD_PIPE_NAME: string;
- CLAUDECODE: string;
- CLAUDE_AGENT_SDK_VERSION: string;
- CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING: string;
- CLAUDE_CODE_ENTRYPOINT: string;
- COLOR: string;
- COMMONPROGRAMFILES: string;
- CommonProgramW6432: string;
- COMPUTERNAME: string;
- COMSPEC: string;
- COPILOT_OTEL_ENABLED: string;
- COPILOT_OTEL_EXPORTER_TYPE: string;
- COPILOT_OTEL_FILE_EXPORTER_PATH: string;
- COREPACK_ENABLE_AUTO_PIN: string;
- CUDA_PATH: string;
- CUDA_PATH_V10_1: string;
- CUDA_PATH_V12_0: string;
- CUDA_PATH_V12_4: string;
- CUDA_PATH_V13_1: string;
- CUDA_PATH_V13_2: string;
- DriverData: string;
- EDITOR: string;
- ELECTRON_RUN_AS_NODE: string;
- EXEPATH: string;
- FPS_BROWSER_APP_PROFILE_STRING: string;
- FPS_BROWSER_USER_PROFILE_STRING: string;
- GIT_EDITOR: string;
- GOPATH: string;
- HOME: string;
- HOMEDRIVE: string;
- HOMEPATH: string;
- INIT_CWD: string;
- LOCALAPPDATA: string;
- LOGONSERVER: string;
- MSYSTEM: string;
- NODE: string;
- NoDefaultCurrentDirectoryInExePath: string;
- NODE_ENV: string;
- NODE_UNC_HOST_ALLOWLIST: string;
- npm_command: string;
- npm_config_cache: string;
- npm_config_globalconfig: string;
- npm_config_global_prefix: string;
- npm_config_init_module: string;
- npm_config_local_prefix: string;
- npm_config_metrics_registry: string;
- npm_config_node_gyp: string;
- npm_config_noproxy: string;
- npm_config_prefix: string;
- npm_config_userconfig: string;
- npm_config_user_agent: string;
- npm_execpath: string;
- npm_lifecycle_event: string;
- npm_lifecycle_script: string;
- npm_node_execpath: string;
- npm_package_json: string;
- npm_package_name: string;
- npm_package_version: string;
- NUMBER_OF_PROCESSORS: string;
- NVCUDASAMPLES10_1_ROOT: string;
- NVCUDASAMPLES_ROOT: string;
- NVTOOLSEXT_PATH: string;
- OLDPWD: string;
- OneDrive: string;
- OneDriveConsumer: string;
- OS: string;
- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: string;
- OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: string;
- PATH: string;
- PATHEXT: string;
- PLINK_PROTOCOL: string;
- PROCESSOR_ARCHITECTURE: string;
- PROCESSOR_IDENTIFIER: string;
- PROCESSOR_LEVEL: string;
- PROCESSOR_REVISION: string;
- ProgramData: string;
- PROGRAMFILES: string;
- ProgramW6432: string;
- PROMPT: string;
- PSModulePath: string;
- PUBLIC: string;
- PWD: string;
- PyCharm: string;
- QtMsBuild: string;
- RlsSvcPort: string;
- SESSIONNAME: string;
- SHELL: string;
- SHLVL: string;
- SYSTEMDRIVE: string;
- SYSTEMROOT: string;
- TEMP: string;
- TERM: string;
- TMP: string;
- USERDOMAIN: string;
- USERDOMAIN_ROAMINGPROFILE: string;
- USERNAME: string;
- USERPROFILE: string;
- VIRTUAL_ENV: string;
- VSCODE_CODE_CACHE_PATH: string;
- VSCODE_CRASH_REPORTER_PROCESS_TYPE: string;
- VSCODE_CWD: string;
- VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOME: string;
- VSCODE_ESM_ENTRYPOINT: string;
- VSCODE_HANDLES_UNCAUGHT_ERRORS: string;
- VSCODE_IPC_HOOK: string;
- VSCODE_L10N_BUNDLE_LOCATION: string;
- VSCODE_NLS_CONFIG: string;
- VSCODE_PID: string;
- VsPythonPath: string;
- WebStorm: string;
- WINDIR: string;
- _: string;
- [key: `PUBLIC_${string}`]: undefined;
- [key: `${string}`]: string | undefined;
- }
-}
-
-/**
- * This module provides access to environment variables set _dynamically_ at runtime and that are _publicly_ accessible.
- *
- * | | Runtime | Build time |
- * | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
- * | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
- * | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
- *
- * Dynamic environment variables are defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`.
- *
- * **_Public_ access:**
- *
- * - This module _can_ be imported into client-side code
- * - **Only** variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`) are included
- *
- * > [!NOTE] In `dev`, `$env/dynamic` includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
- *
- * > [!NOTE] To get correct types, environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
- * >
- * > ```env
- * > MY_FEATURE_FLAG=
- * > ```
- * >
- * > You can override `.env` values from the command line like so:
- * >
- * > ```sh
- * > MY_FEATURE_FLAG="enabled" npm run dev
- * > ```
- *
- * For example, given the following runtime environment:
- *
- * ```env
- * ENVIRONMENT=production
- * PUBLIC_BASE_URL=http://example.com
- * ```
- *
- * With the default `publicPrefix` and `privatePrefix`:
- *
- * ```ts
- * import { env } from '$env/dynamic/public';
- * console.log(env.ENVIRONMENT); // => undefined, not public
- * console.log(env.PUBLIC_BASE_URL); // => "http://example.com"
- * ```
- *
- * ```
- *
- * ```
- */
-declare module '$env/dynamic/public' {
- export const env: {
- [key: `PUBLIC_${string}`]: string | undefined;
- }
-}
diff --git a/web/.svelte-kit/generated/client-optimized/app.js b/web/.svelte-kit/generated/client-optimized/app.js
deleted file mode 100644
index 39d73d8..0000000
--- a/web/.svelte-kit/generated/client-optimized/app.js
+++ /dev/null
@@ -1,62 +0,0 @@
-export { matchers } from './matchers.js';
-
-export const nodes = [
- () => import('./nodes/0'),
- () => import('./nodes/1'),
- () => import('./nodes/2'),
- () => import('./nodes/3'),
- () => import('./nodes/4'),
- () => import('./nodes/5'),
- () => import('./nodes/6'),
- () => import('./nodes/7'),
- () => import('./nodes/8'),
- () => import('./nodes/9'),
- () => import('./nodes/10'),
- () => import('./nodes/11'),
- () => import('./nodes/12'),
- () => import('./nodes/13'),
- () => import('./nodes/14'),
- () => import('./nodes/15'),
- () => import('./nodes/16'),
- () => import('./nodes/17'),
- () => import('./nodes/18'),
- () => import('./nodes/19')
-];
-
-export const server_loads = [];
-
-export const dictionary = {
- "/": [3],
- "/containers/stale": [4],
- "/deploy": [5],
- "/events": [6],
- "/login": [7],
- "/projects": [8],
- "/projects/[id]": [9],
- "/projects/[id]/env": [10],
- "/projects/[id]/volumes": [11],
- "/projects/[id]/volumes/[volId]/browse": [12],
- "/proxies": [13],
- "/proxies/create": [14],
- "/proxies/[id]/edit": [15],
- "/settings": [16,[2]],
- "/settings/auth": [17,[2]],
- "/settings/credentials": [18,[2]],
- "/settings/registries": [19,[2]]
- };
-
-export const hooks = {
- handleError: (({ error }) => { console.error(error) }),
-
- reroute: (() => {}),
- transport: {}
-};
-
-export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode]));
-export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode]));
-
-export const hash = false;
-
-export const decode = (type, value) => decoders[type](value);
-
-export { default as root } from '../root.js';
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/matchers.js b/web/.svelte-kit/generated/client-optimized/matchers.js
deleted file mode 100644
index f6bd30a..0000000
--- a/web/.svelte-kit/generated/client-optimized/matchers.js
+++ /dev/null
@@ -1 +0,0 @@
-export const matchers = {};
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/0.js b/web/.svelte-kit/generated/client-optimized/nodes/0.js
deleted file mode 100644
index b2e56b2..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/0.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/+layout.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/+layout.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/1.js b/web/.svelte-kit/generated/client-optimized/nodes/1.js
deleted file mode 100644
index bf58bad..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/1.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/10.js b/web/.svelte-kit/generated/client-optimized/nodes/10.js
deleted file mode 100644
index e6a2138..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/10.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/env/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/11.js b/web/.svelte-kit/generated/client-optimized/nodes/11.js
deleted file mode 100644
index 845e958..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/11.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/volumes/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/12.js b/web/.svelte-kit/generated/client-optimized/nodes/12.js
deleted file mode 100644
index 5063af2..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/12.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/projects/[id]/volumes/[volId]/browse/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/projects/[id]/volumes/[volId]/browse/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/13.js b/web/.svelte-kit/generated/client-optimized/nodes/13.js
deleted file mode 100644
index 1dd3e67..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/13.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/14.js b/web/.svelte-kit/generated/client-optimized/nodes/14.js
deleted file mode 100644
index aad2c84..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/14.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/create/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/create/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/15.js b/web/.svelte-kit/generated/client-optimized/nodes/15.js
deleted file mode 100644
index f6aa48d..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/15.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/[id]/edit/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/[id]/edit/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/16.js b/web/.svelte-kit/generated/client-optimized/nodes/16.js
deleted file mode 100644
index c50e736..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/16.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/17.js b/web/.svelte-kit/generated/client-optimized/nodes/17.js
deleted file mode 100644
index c9d4556..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/17.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/auth/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/18.js b/web/.svelte-kit/generated/client-optimized/nodes/18.js
deleted file mode 100644
index 89f61fb..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/18.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/credentials/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/19.js b/web/.svelte-kit/generated/client-optimized/nodes/19.js
deleted file mode 100644
index 0dbce1c..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/19.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/registries/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/2.js b/web/.svelte-kit/generated/client-optimized/nodes/2.js
deleted file mode 100644
index 2e594ab..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/2.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/+layout.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/3.js b/web/.svelte-kit/generated/client-optimized/nodes/3.js
deleted file mode 100644
index 1cb4f85..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/3.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/4.js b/web/.svelte-kit/generated/client-optimized/nodes/4.js
deleted file mode 100644
index f0ad0c3..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/4.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/containers/stale/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/containers/stale/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/5.js b/web/.svelte-kit/generated/client-optimized/nodes/5.js
deleted file mode 100644
index bbb7e92..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/5.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/deploy/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/6.js b/web/.svelte-kit/generated/client-optimized/nodes/6.js
deleted file mode 100644
index dc4cd24..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/6.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/events/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/events/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/7.js b/web/.svelte-kit/generated/client-optimized/nodes/7.js
deleted file mode 100644
index f2b26cd..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/7.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/login/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/8.js b/web/.svelte-kit/generated/client-optimized/nodes/8.js
deleted file mode 100644
index 0d2d91a..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/8.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client-optimized/nodes/9.js b/web/.svelte-kit/generated/client-optimized/nodes/9.js
deleted file mode 100644
index a9df14e..0000000
--- a/web/.svelte-kit/generated/client-optimized/nodes/9.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/app.js b/web/.svelte-kit/generated/client/app.js
deleted file mode 100644
index f53b18c..0000000
--- a/web/.svelte-kit/generated/client/app.js
+++ /dev/null
@@ -1,64 +0,0 @@
-export { matchers } from './matchers.js';
-
-export const nodes = [
- () => import('./nodes/0'),
- () => import('./nodes/1'),
- () => import('./nodes/2'),
- () => import('./nodes/3'),
- () => import('./nodes/4'),
- () => import('./nodes/5'),
- () => import('./nodes/6'),
- () => import('./nodes/7'),
- () => import('./nodes/8'),
- () => import('./nodes/9'),
- () => import('./nodes/10'),
- () => import('./nodes/11'),
- () => import('./nodes/12'),
- () => import('./nodes/13'),
- () => import('./nodes/14'),
- () => import('./nodes/15'),
- () => import('./nodes/16'),
- () => import('./nodes/17'),
- () => import('./nodes/18'),
- () => import('./nodes/19'),
- () => import('./nodes/20')
-];
-
-export const server_loads = [];
-
-export const dictionary = {
- "/": [3],
- "/containers/stale": [4],
- "/deploy": [5],
- "/dns": [6],
- "/events": [7],
- "/login": [8],
- "/projects": [9],
- "/projects/[id]": [10],
- "/projects/[id]/env": [11],
- "/projects/[id]/volumes": [12],
- "/projects/[id]/volumes/[volId]/browse": [13],
- "/proxies": [14],
- "/proxies/create": [15],
- "/proxies/[id]/edit": [16],
- "/settings": [17,[2]],
- "/settings/auth": [18,[2]],
- "/settings/credentials": [19,[2]],
- "/settings/registries": [20,[2]]
- };
-
-export const hooks = {
- handleError: (({ error }) => { console.error(error) }),
-
- reroute: (() => {}),
- transport: {}
-};
-
-export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode]));
-export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode]));
-
-export const hash = false;
-
-export const decode = (type, value) => decoders[type](value);
-
-export { default as root } from '../root.js';
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/matchers.js b/web/.svelte-kit/generated/client/matchers.js
deleted file mode 100644
index f6bd30a..0000000
--- a/web/.svelte-kit/generated/client/matchers.js
+++ /dev/null
@@ -1 +0,0 @@
-export const matchers = {};
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/0.js b/web/.svelte-kit/generated/client/nodes/0.js
deleted file mode 100644
index b2e56b2..0000000
--- a/web/.svelte-kit/generated/client/nodes/0.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/+layout.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/+layout.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/1.js b/web/.svelte-kit/generated/client/nodes/1.js
deleted file mode 100644
index bf58bad..0000000
--- a/web/.svelte-kit/generated/client/nodes/1.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/10.js b/web/.svelte-kit/generated/client/nodes/10.js
deleted file mode 100644
index a9df14e..0000000
--- a/web/.svelte-kit/generated/client/nodes/10.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/11.js b/web/.svelte-kit/generated/client/nodes/11.js
deleted file mode 100644
index e6a2138..0000000
--- a/web/.svelte-kit/generated/client/nodes/11.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/env/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/12.js b/web/.svelte-kit/generated/client/nodes/12.js
deleted file mode 100644
index 845e958..0000000
--- a/web/.svelte-kit/generated/client/nodes/12.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/[id]/volumes/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/13.js b/web/.svelte-kit/generated/client/nodes/13.js
deleted file mode 100644
index 5063af2..0000000
--- a/web/.svelte-kit/generated/client/nodes/13.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/projects/[id]/volumes/[volId]/browse/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/projects/[id]/volumes/[volId]/browse/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/14.js b/web/.svelte-kit/generated/client/nodes/14.js
deleted file mode 100644
index 1dd3e67..0000000
--- a/web/.svelte-kit/generated/client/nodes/14.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/15.js b/web/.svelte-kit/generated/client/nodes/15.js
deleted file mode 100644
index aad2c84..0000000
--- a/web/.svelte-kit/generated/client/nodes/15.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/create/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/create/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/16.js b/web/.svelte-kit/generated/client/nodes/16.js
deleted file mode 100644
index f6aa48d..0000000
--- a/web/.svelte-kit/generated/client/nodes/16.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/proxies/[id]/edit/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/proxies/[id]/edit/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/17.js b/web/.svelte-kit/generated/client/nodes/17.js
deleted file mode 100644
index c50e736..0000000
--- a/web/.svelte-kit/generated/client/nodes/17.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/18.js b/web/.svelte-kit/generated/client/nodes/18.js
deleted file mode 100644
index c9d4556..0000000
--- a/web/.svelte-kit/generated/client/nodes/18.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/auth/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/19.js b/web/.svelte-kit/generated/client/nodes/19.js
deleted file mode 100644
index 89f61fb..0000000
--- a/web/.svelte-kit/generated/client/nodes/19.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/credentials/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/2.js b/web/.svelte-kit/generated/client/nodes/2.js
deleted file mode 100644
index 2e594ab..0000000
--- a/web/.svelte-kit/generated/client/nodes/2.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/+layout.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/20.js b/web/.svelte-kit/generated/client/nodes/20.js
deleted file mode 100644
index 0dbce1c..0000000
--- a/web/.svelte-kit/generated/client/nodes/20.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/settings/registries/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/3.js b/web/.svelte-kit/generated/client/nodes/3.js
deleted file mode 100644
index 1cb4f85..0000000
--- a/web/.svelte-kit/generated/client/nodes/3.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/4.js b/web/.svelte-kit/generated/client/nodes/4.js
deleted file mode 100644
index f0ad0c3..0000000
--- a/web/.svelte-kit/generated/client/nodes/4.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/containers/stale/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/containers/stale/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/5.js b/web/.svelte-kit/generated/client/nodes/5.js
deleted file mode 100644
index bbb7e92..0000000
--- a/web/.svelte-kit/generated/client/nodes/5.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/deploy/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/6.js b/web/.svelte-kit/generated/client/nodes/6.js
deleted file mode 100644
index 060758e..0000000
--- a/web/.svelte-kit/generated/client/nodes/6.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/dns/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/7.js b/web/.svelte-kit/generated/client/nodes/7.js
deleted file mode 100644
index dc4cd24..0000000
--- a/web/.svelte-kit/generated/client/nodes/7.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as universal from "../../../../src/routes/events/+page.ts";
-export { universal };
-export { default as component } from "../../../../src/routes/events/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/8.js b/web/.svelte-kit/generated/client/nodes/8.js
deleted file mode 100644
index f2b26cd..0000000
--- a/web/.svelte-kit/generated/client/nodes/8.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/login/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/client/nodes/9.js b/web/.svelte-kit/generated/client/nodes/9.js
deleted file mode 100644
index 0d2d91a..0000000
--- a/web/.svelte-kit/generated/client/nodes/9.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as component } from "../../../../src/routes/projects/+page.svelte";
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/root.js b/web/.svelte-kit/generated/root.js
deleted file mode 100644
index 4d1e892..0000000
--- a/web/.svelte-kit/generated/root.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { asClassComponent } from 'svelte/legacy';
-import Root from './root.svelte';
-export default asClassComponent(Root);
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/root.svelte b/web/.svelte-kit/generated/root.svelte
deleted file mode 100644
index 1c16fc8..0000000
--- a/web/.svelte-kit/generated/root.svelte
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-{#if constructors[1]}
- {@const Pyramid_0 = constructors[0]}
-
-
- {#if constructors[2]}
- {@const Pyramid_1 = constructors[1]}
-
-
-
-
-
-
- {:else}
- {@const Pyramid_1 = constructors[1]}
-
-
-
- {/if}
-
-
-{:else}
- {@const Pyramid_0 = constructors[0]}
-
-
-
-{/if}
-
-{#if mounted}
-
- {#if navigated}
- {title}
- {/if}
-
-{/if}
\ No newline at end of file
diff --git a/web/.svelte-kit/generated/server/internal.js b/web/.svelte-kit/generated/server/internal.js
deleted file mode 100644
index 59dd322..0000000
--- a/web/.svelte-kit/generated/server/internal.js
+++ /dev/null
@@ -1,54 +0,0 @@
-
-import root from '../root.js';
-import { set_building, set_prerendering } from '__sveltekit/environment';
-import { set_assets } from '$app/paths/internal/server';
-import { set_manifest, set_read_implementation } from '__sveltekit/server';
-import { set_private_env, set_public_env } from '../../../node_modules/@sveltejs/kit/src/runtime/shared-server.js';
-
-export const options = {
- app_template_contains_nonce: false,
- async: false,
- csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false},"reportOnly":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}},
- csrf_check_origin: true,
- csrf_trusted_origins: [],
- embedded: false,
- env_public_prefix: 'PUBLIC_',
- env_private_prefix: '',
- hash_routing: false,
- hooks: null, // added lazily, via `get_hooks`
- preload_strategy: "modulepreload",
- root,
- service_worker: false,
- service_worker_options: undefined,
- server_error_boundaries: false,
- templates: {
- app: ({ head, body, assets, nonce, env }) => "\r\n\r\n\t\r\n\t\t \r\n\t\t \r\n\t\t \r\n\t\t" + head + "\r\n\t\r\n\t\r\n\t\t" + body + "
\r\n\t\r\n\r\n",
- error: ({ status, message }) => "\n\n\t\n\t\t \n\t\t" + message + " \n\n\t\t\n\t\n\t\n\t\t\n\t\t\t
" + status + " \n\t\t\t
\n\t\t\t\t
" + message + " \n\t\t\t\n\t\t
\n\t\n\n"
- },
- version_hash: "1rlkqzj"
-};
-
-export async function get_hooks() {
- let handle;
- let handleFetch;
- let handleError;
- let handleValidationError;
- let init;
-
-
- let reroute;
- let transport;
-
-
- return {
- handle,
- handleFetch,
- handleError,
- handleValidationError,
- init,
- reroute,
- transport
- };
-}
-
-export { set_assets, set_building, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation };
diff --git a/web/.svelte-kit/non-ambient.d.ts b/web/.svelte-kit/non-ambient.d.ts
deleted file mode 100644
index c91a09b..0000000
--- a/web/.svelte-kit/non-ambient.d.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-
-// this file is generated — do not edit it
-
-
-declare module "svelte/elements" {
- export interface HTMLAttributes {
- 'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null;
- 'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null;
- 'data-sveltekit-preload-code'?:
- | true
- | ''
- | 'eager'
- | 'viewport'
- | 'hover'
- | 'tap'
- | 'off'
- | undefined
- | null;
- 'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null;
- 'data-sveltekit-reload'?: true | '' | 'off' | undefined | null;
- 'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null;
- }
-}
-
-export {};
-
-
-declare module "$app/types" {
- type MatcherParam = M extends (param : string) => param is (infer U extends string) ? U : string;
-
- export interface AppTypes {
- RouteId(): "/" | "/containers" | "/containers/stale" | "/deploy" | "/dns" | "/events" | "/login" | "/projects" | "/projects/[id]" | "/projects/[id]/env" | "/projects/[id]/volumes" | "/projects/[id]/volumes/[volId]" | "/projects/[id]/volumes/[volId]/browse" | "/proxies" | "/proxies/create" | "/proxies/[id]" | "/proxies/[id]/edit" | "/settings" | "/settings/auth" | "/settings/credentials" | "/settings/registries";
- RouteParams(): {
- "/projects/[id]": { id: string };
- "/projects/[id]/env": { id: string };
- "/projects/[id]/volumes": { id: string };
- "/projects/[id]/volumes/[volId]": { id: string; volId: string };
- "/projects/[id]/volumes/[volId]/browse": { id: string; volId: string };
- "/proxies/[id]": { id: string };
- "/proxies/[id]/edit": { id: string }
- };
- LayoutParams(): {
- "/": { id?: string; volId?: string };
- "/containers": Record;
- "/containers/stale": Record;
- "/deploy": Record;
- "/dns": Record;
- "/events": Record;
- "/login": Record;
- "/projects": { id?: string; volId?: string };
- "/projects/[id]": { id: string; volId?: string };
- "/projects/[id]/env": { id: string };
- "/projects/[id]/volumes": { id: string; volId?: string };
- "/projects/[id]/volumes/[volId]": { id: string; volId: string };
- "/projects/[id]/volumes/[volId]/browse": { id: string; volId: string };
- "/proxies": { id?: string };
- "/proxies/create": Record;
- "/proxies/[id]": { id: string };
- "/proxies/[id]/edit": { id: string };
- "/settings": Record;
- "/settings/auth": Record;
- "/settings/credentials": Record;
- "/settings/registries": Record
- };
- Pathname(): "/" | "/containers/stale" | "/deploy" | "/dns" | "/events" | "/login" | "/projects" | `/projects/${string}` & {} | `/projects/${string}/env` & {} | `/projects/${string}/volumes` & {} | `/projects/${string}/volumes/${string}/browse` & {} | "/proxies" | "/proxies/create" | `/proxies/${string}/edit` & {} | "/settings" | "/settings/auth" | "/settings/credentials" | "/settings/registries";
- ResolvedPathname(): `${"" | `/${string}`}${ReturnType}`;
- Asset(): string & {};
- }
-}
\ No newline at end of file
diff --git a/web/.svelte-kit/output/client/.vite/manifest.json b/web/.svelte-kit/output/client/.vite/manifest.json
deleted file mode 100644
index d079a9c..0000000
--- a/web/.svelte-kit/output/client/.vite/manifest.json
+++ /dev/null
@@ -1,949 +0,0 @@
-{
- ".svelte-kit/generated/client-optimized/app.js": {
- "file": "_app/immutable/entry/app.C3eO1cEh.js",
- "name": "entry/app",
- "src": ".svelte-kit/generated/client-optimized/app.js",
- "isEntry": true,
- "imports": [
- "_DKemW7Dm.js",
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_BSXRhUWv.js",
- "_BoGS7hWi.js"
- ],
- "dynamicImports": [
- ".svelte-kit/generated/client-optimized/nodes/0.js",
- ".svelte-kit/generated/client-optimized/nodes/1.js",
- ".svelte-kit/generated/client-optimized/nodes/2.js",
- ".svelte-kit/generated/client-optimized/nodes/3.js",
- ".svelte-kit/generated/client-optimized/nodes/4.js",
- ".svelte-kit/generated/client-optimized/nodes/5.js",
- ".svelte-kit/generated/client-optimized/nodes/6.js",
- ".svelte-kit/generated/client-optimized/nodes/7.js",
- ".svelte-kit/generated/client-optimized/nodes/8.js",
- ".svelte-kit/generated/client-optimized/nodes/9.js",
- ".svelte-kit/generated/client-optimized/nodes/10.js",
- ".svelte-kit/generated/client-optimized/nodes/11.js",
- ".svelte-kit/generated/client-optimized/nodes/12.js",
- ".svelte-kit/generated/client-optimized/nodes/13.js",
- ".svelte-kit/generated/client-optimized/nodes/14.js",
- ".svelte-kit/generated/client-optimized/nodes/15.js",
- ".svelte-kit/generated/client-optimized/nodes/16.js",
- ".svelte-kit/generated/client-optimized/nodes/17.js",
- ".svelte-kit/generated/client-optimized/nodes/18.js",
- ".svelte-kit/generated/client-optimized/nodes/19.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/0.js": {
- "file": "_app/immutable/nodes/0.BMqZW0X_.js",
- "name": "nodes/0",
- "src": ".svelte-kit/generated/client-optimized/nodes/0.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_CnPWu_ZO.js",
- "_kfynmD3Z.js",
- "_DELaSNrV.js",
- "_BSEsuAwr.js",
- "_BlV-f-zB.js",
- "_CjZL2MYp.js",
- "_LFhQE6G2.js",
- "_R0-LJft-.js",
- "_CGCp4lb_.js",
- "_CcoMVVg8.js",
- "_DrzuxmSv.js",
- "_Hsiz6fBZ.js",
- "_CWCQOKDd.js",
- "_CvtQ6g1S.js",
- "_DPFeFjvi.js",
- "_DTyrBG6r.js",
- "_Bpb8V1MF.js"
- ],
- "css": [
- "_app/immutable/assets/0.DnmtykcB.css"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/1.js": {
- "file": "_app/immutable/nodes/1.Bdu_R2Hn.js",
- "name": "nodes/1",
- "src": ".svelte-kit/generated/client-optimized/nodes/1.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_BSEsuAwr.js",
- "_DKemW7Dm.js",
- "_BlV-f-zB.js",
- "_CWhLh9u1.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/10.js": {
- "file": "_app/immutable/nodes/10.DFEGHcUu.js",
- "name": "nodes/10",
- "src": ".svelte-kit/generated/client-optimized/nodes/10.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_Bxa5VUw6.js",
- "_DELaSNrV.js",
- "_Bpb8V1MF.js",
- "_CjZL2MYp.js",
- "_scnZuc49.js",
- "_C6FeVxU4.js",
- "_LFhQE6G2.js",
- "_R0-LJft-.js",
- "_Icw0y4KW.js",
- "_BFW91e3Y.js",
- "_CPatcLwq.js",
- "_CpnAtA5t.js",
- "_BberSjRt.js",
- "_BE_zO38m.js",
- "_CexodXHl.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/11.js": {
- "file": "_app/immutable/nodes/11.DMrjUtpD.js",
- "name": "nodes/11",
- "src": ".svelte-kit/generated/client-optimized/nodes/11.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_Bxa5VUw6.js",
- "_DELaSNrV.js",
- "_Bpb8V1MF.js",
- "_CjZL2MYp.js",
- "_scnZuc49.js",
- "_C6FeVxU4.js",
- "_LFhQE6G2.js",
- "_R0-LJft-.js",
- "_Icw0y4KW.js",
- "_BphdEXYy.js",
- "_BvIWRct8.js",
- "_CPatcLwq.js",
- "_BE_zO38m.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/12.js": {
- "file": "_app/immutable/nodes/12.BO7G7YPE.js",
- "name": "nodes/12",
- "src": ".svelte-kit/generated/client-optimized/nodes/12.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_BoGS7hWi.js",
- "_DELaSNrV.js",
- "_Bpb8V1MF.js",
- "_CjZL2MYp.js",
- "_Icw0y4KW.js",
- "_BFW91e3Y.js",
- "_BE_zO38m.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/13.js": {
- "file": "_app/immutable/nodes/13.DJV70kty.js",
- "name": "nodes/13",
- "src": ".svelte-kit/generated/client-optimized/nodes/13.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_Bpb8V1MF.js",
- "_kfynmD3Z.js",
- "_BphdEXYy.js",
- "_CPatcLwq.js",
- "_CpnAtA5t.js",
- "_CnPWu_ZO.js",
- "_Icw0y4KW.js",
- "_Bxa5VUw6.js",
- "_R0-LJft-.js",
- "_BvIWRct8.js",
- "_CexodXHl.js",
- "_DrzuxmSv.js",
- "_BFW91e3Y.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/14.js": {
- "file": "_app/immutable/nodes/14.udJGaOK1.js",
- "name": "nodes/14",
- "src": ".svelte-kit/generated/client-optimized/nodes/14.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_BSEsuAwr.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_ecfdBtDb.js",
- "_BlV-f-zB.js",
- "_CWhLh9u1.js",
- "_kfynmD3Z.js",
- "_DsQCf6vC.js",
- "_DrzuxmSv.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/15.js": {
- "file": "_app/immutable/nodes/15.BC8amYnm.js",
- "name": "nodes/15",
- "src": ".svelte-kit/generated/client-optimized/nodes/15.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_ecfdBtDb.js",
- "_DELaSNrV.js",
- "_CWhLh9u1.js",
- "_Bpb8V1MF.js",
- "_kfynmD3Z.js",
- "_DsQCf6vC.js",
- "_DrzuxmSv.js",
- "_BFW91e3Y.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/16.js": {
- "file": "_app/immutable/nodes/16.DrkZ20qh.js",
- "name": "nodes/16",
- "src": ".svelte-kit/generated/client-optimized/nodes/16.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_Bpb8V1MF.js",
- "_DfwQ65vN.js",
- "_BxXVdbgr.js",
- "_CjZL2MYp.js",
- "_R0-LJft-.js",
- "_DhEbbC3M.js",
- "_BFW91e3Y.js",
- "_BE_zO38m.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/17.js": {
- "file": "_app/immutable/nodes/17.CjAaIU5M.js",
- "name": "nodes/17",
- "src": ".svelte-kit/generated/client-optimized/nodes/17.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_Bxa5VUw6.js",
- "_scnZuc49.js",
- "_C6FeVxU4.js",
- "_BFW91e3Y.js",
- "_CexodXHl.js",
- "_DTyrBG6r.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/18.js": {
- "file": "_app/immutable/nodes/18.C3f1k8vs.js",
- "name": "nodes/18",
- "src": ".svelte-kit/generated/client-optimized/nodes/18.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_Bpb8V1MF.js",
- "_DfwQ65vN.js",
- "_BE_zO38m.js",
- "_CjZL2MYp.js",
- "_LFhQE6G2.js",
- "_BFW91e3Y.js",
- "_CPatcLwq.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/19.js": {
- "file": "_app/immutable/nodes/19.CiwgThsf.js",
- "name": "nodes/19",
- "src": ".svelte-kit/generated/client-optimized/nodes/19.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_Bxa5VUw6.js",
- "_Bpb8V1MF.js",
- "_DfwQ65vN.js",
- "_CexodXHl.js",
- "_BE_zO38m.js",
- "_CjZL2MYp.js",
- "_kfynmD3Z.js",
- "_scnZuc49.js",
- "_C6FeVxU4.js",
- "_BFW91e3Y.js",
- "_CPatcLwq.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/2.js": {
- "file": "_app/immutable/nodes/2.DWWtnNKd.js",
- "name": "nodes/2",
- "src": ".svelte-kit/generated/client-optimized/nodes/2.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CnPWu_ZO.js",
- "_CZnXUJhL.js",
- "_kfynmD3Z.js",
- "_DELaSNrV.js",
- "_CWCQOKDd.js",
- "_DqoiTw6k.js",
- "_DhEbbC3M.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/3.js": {
- "file": "_app/immutable/nodes/3.C0WC8trC.js",
- "name": "nodes/3",
- "src": ".svelte-kit/generated/client-optimized/nodes/3.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_Bpb8V1MF.js",
- "_BPqRr2-s.js",
- "_ip4Jv8C8.js",
- "_CexodXHl.js",
- "_CGCp4lb_.js",
- "_CvtQ6g1S.js",
- "_Hsiz6fBZ.js",
- "_DVE7XZFM.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/4.js": {
- "file": "_app/immutable/nodes/4.BxW_ZYFP.js",
- "name": "nodes/4",
- "src": ".svelte-kit/generated/client-optimized/nodes/4.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_Bpb8V1MF.js",
- "_kfynmD3Z.js",
- "_scnZuc49.js",
- "_DVE7XZFM.js",
- "_C8zo5-Sk.js",
- "_CexodXHl.js",
- "_ip4Jv8C8.js",
- "_BFW91e3Y.js",
- "_CjZL2MYp.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/5.js": {
- "file": "_app/immutable/nodes/5.C24PPPF_.js",
- "name": "nodes/5",
- "src": ".svelte-kit/generated/client-optimized/nodes/5.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_Bxa5VUw6.js",
- "_Bpb8V1MF.js",
- "_DfwQ65vN.js",
- "_BxXVdbgr.js",
- "_CjZL2MYp.js",
- "_Hsiz6fBZ.js",
- "_BvIWRct8.js",
- "_BFW91e3Y.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/6.js": {
- "file": "_app/immutable/nodes/6.CEvKoBqC.js",
- "name": "nodes/6",
- "src": ".svelte-kit/generated/client-optimized/nodes/6.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_BoGS7hWi.js",
- "_kfynmD3Z.js",
- "_Bpb8V1MF.js",
- "_DPFeFjvi.js",
- "_CexodXHl.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/7.js": {
- "file": "_app/immutable/nodes/7.DneEC9SR.js",
- "name": "nodes/7",
- "src": ".svelte-kit/generated/client-optimized/nodes/7.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_phMGo29-.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_CWhLh9u1.js",
- "_DELaSNrV.js",
- "_CcoMVVg8.js",
- "_BFW91e3Y.js",
- "_DTyrBG6r.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/8.js": {
- "file": "_app/immutable/nodes/8.BQus6eSQ.js",
- "name": "nodes/8",
- "src": ".svelte-kit/generated/client-optimized/nodes/8.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_Bpb8V1MF.js",
- "_C6FeVxU4.js",
- "_BvIWRct8.js",
- "_BFW91e3Y.js",
- "_DfwQ65vN.js",
- "_BE_zO38m.js",
- "_CexodXHl.js",
- "_BxXVdbgr.js"
- ]
- },
- ".svelte-kit/generated/client-optimized/nodes/9.js": {
- "file": "_app/immutable/nodes/9.g1C7u4k3.js",
- "name": "nodes/9",
- "src": ".svelte-kit/generated/client-optimized/nodes/9.js",
- "isEntry": true,
- "isDynamicEntry": true,
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_ecfdBtDb.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_Bxa5VUw6.js",
- "_DELaSNrV.js",
- "_Bpb8V1MF.js",
- "_BPqRr2-s.js",
- "_BE_zO38m.js",
- "_C8zo5-Sk.js",
- "_scnZuc49.js",
- "_BphdEXYy.js",
- "_CexodXHl.js",
- "_Hsiz6fBZ.js",
- "_C6FeVxU4.js",
- "_LFhQE6G2.js",
- "_R0-LJft-.js",
- "_Icw0y4KW.js",
- "_DqoiTw6k.js",
- "_BFW91e3Y.js",
- "_DVE7XZFM.js",
- "_CPatcLwq.js",
- "_DfwQ65vN.js",
- "_BberSjRt.js",
- "_CjZL2MYp.js"
- ]
- },
- "_BE_zO38m.js": {
- "file": "_app/immutable/chunks/BE_zO38m.js",
- "name": "Skeleton",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_BFW91e3Y.js": {
- "file": "_app/immutable/chunks/BFW91e3Y.js",
- "name": "IconLoader",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_BJdXET8u.js": {
- "file": "_app/immutable/chunks/BJdXET8u.js",
- "name": "disclose-version",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_BPqRr2-s.js": {
- "file": "_app/immutable/chunks/BPqRr2-s.js",
- "name": "StatusBadge",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_kfynmD3Z.js"
- ]
- },
- "_BSEsuAwr.js": {
- "file": "_app/immutable/chunks/BSEsuAwr.js",
- "name": "legacy",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_BSXRhUWv.js": {
- "file": "_app/immutable/chunks/BSXRhUWv.js",
- "name": "props",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_BberSjRt.js": {
- "file": "_app/immutable/chunks/BberSjRt.js",
- "name": "ToggleSwitch",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_BlV-f-zB.js": {
- "file": "_app/immutable/chunks/BlV-f-zB.js",
- "name": "lifecycle",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_BoGS7hWi.js": {
- "file": "_app/immutable/chunks/BoGS7hWi.js",
- "name": "this",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_Bpb8V1MF.js": {
- "file": "_app/immutable/chunks/Bpb8V1MF.js",
- "name": "api",
- "imports": [
- "_DTyrBG6r.js"
- ]
- },
- "_BphdEXYy.js": {
- "file": "_app/immutable/chunks/BphdEXYy.js",
- "name": "IconExternalLink",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_BvIWRct8.js": {
- "file": "_app/immutable/chunks/BvIWRct8.js",
- "name": "IconSearch",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_BxXVdbgr.js": {
- "file": "_app/immutable/chunks/BxXVdbgr.js",
- "name": "EntityPicker",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_CZnXUJhL.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js",
- "_BoGS7hWi.js",
- "_R0-LJft-.js",
- "_BvIWRct8.js"
- ],
- "css": [
- "_app/immutable/assets/EntityPicker.D4Qf6tQ2.css"
- ]
- },
- "_Bxa5VUw6.js": {
- "file": "_app/immutable/chunks/Bxa5VUw6.js",
- "name": "select",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_C6FeVxU4.js": {
- "file": "_app/immutable/chunks/C6FeVxU4.js",
- "name": "IconPlus",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_C8zo5-Sk.js": {
- "file": "_app/immutable/chunks/C8zo5-Sk.js",
- "name": "ConfirmDialog",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_kfynmD3Z.js",
- "_CGCp4lb_.js"
- ]
- },
- "_CGCp4lb_.js": {
- "file": "_app/immutable/chunks/CGCp4lb_.js",
- "name": "IconAlert",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_CPatcLwq.js": {
- "file": "_app/immutable/chunks/CPatcLwq.js",
- "name": "IconEdit",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_CWCQOKDd.js": {
- "file": "_app/immutable/chunks/CWCQOKDd.js",
- "name": "IconSettings",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_CWhLh9u1.js": {
- "file": "_app/immutable/chunks/CWhLh9u1.js",
- "name": "entry",
- "imports": [
- "_DKemW7Dm.js",
- "_phMGo29-.js"
- ]
- },
- "_CZnXUJhL.js": {
- "file": "_app/immutable/chunks/CZnXUJhL.js",
- "name": "each",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_CcoMVVg8.js": {
- "file": "_app/immutable/chunks/CcoMVVg8.js",
- "name": "theme",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_CexodXHl.js": {
- "file": "_app/immutable/chunks/CexodXHl.js",
- "name": "EmptyState",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_kfynmD3Z.js"
- ]
- },
- "_CjZL2MYp.js": {
- "file": "_app/immutable/chunks/CjZL2MYp.js",
- "name": "toast",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_CnPWu_ZO.js": {
- "file": "_app/immutable/chunks/CnPWu_ZO.js",
- "name": "snippet",
- "imports": [
- "_DKemW7Dm.js",
- "_BSXRhUWv.js"
- ]
- },
- "_CpnAtA5t.js": {
- "file": "_app/immutable/chunks/CpnAtA5t.js",
- "name": "IconLock",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_CvtQ6g1S.js": {
- "file": "_app/immutable/chunks/CvtQ6g1S.js",
- "name": "IconProxies",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_DELaSNrV.js": {
- "file": "_app/immutable/chunks/DELaSNrV.js",
- "name": "stores",
- "imports": [
- "_CWhLh9u1.js"
- ]
- },
- "_DKemW7Dm.js": {
- "file": "_app/immutable/chunks/DKemW7Dm.js",
- "name": "runtime"
- },
- "_DPFeFjvi.js": {
- "file": "_app/immutable/chunks/DPFeFjvi.js",
- "name": "sse",
- "imports": [
- "_DTyrBG6r.js"
- ]
- },
- "_DTyrBG6r.js": {
- "file": "_app/immutable/chunks/DTyrBG6r.js",
- "name": "auth"
- },
- "_DVE7XZFM.js": {
- "file": "_app/immutable/chunks/DVE7XZFM.js",
- "name": "IconClock",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_DfwQ65vN.js": {
- "file": "_app/immutable/chunks/DfwQ65vN.js",
- "name": "FormField",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_kfynmD3Z.js",
- "_DgtbvmBB.js"
- ]
- },
- "_DgtbvmBB.js": {
- "file": "_app/immutable/chunks/DgtbvmBB.js",
- "name": "input",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_DhEbbC3M.js": {
- "file": "_app/immutable/chunks/DhEbbC3M.js",
- "name": "IconShield",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_DqoiTw6k.js": {
- "file": "_app/immutable/chunks/DqoiTw6k.js",
- "name": "IconKey",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_DrzuxmSv.js": {
- "file": "_app/immutable/chunks/DrzuxmSv.js",
- "name": "IconGlobe",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_DsQCf6vC.js": {
- "file": "_app/immutable/chunks/DsQCf6vC.js",
- "name": "ProxyForm",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_BSXRhUWv.js",
- "_Bpb8V1MF.js",
- "_DfwQ65vN.js",
- "_CZnXUJhL.js",
- "_LFhQE6G2.js",
- "_R0-LJft-.js",
- "_BFW91e3Y.js",
- "_kfynmD3Z.js",
- "_C8zo5-Sk.js"
- ]
- },
- "_EntityPicker.D4Qf6tQ2.css": {
- "file": "_app/immutable/assets/EntityPicker.D4Qf6tQ2.css",
- "src": "_EntityPicker.D4Qf6tQ2.css"
- },
- "_Hsiz6fBZ.js": {
- "file": "_app/immutable/chunks/Hsiz6fBZ.js",
- "name": "IconDeploy",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_Icw0y4KW.js": {
- "file": "_app/immutable/chunks/Icw0y4KW.js",
- "name": "IconChevronRight",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_LFhQE6G2.js": {
- "file": "_app/immutable/chunks/LFhQE6G2.js",
- "name": "IconCheck",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_R0-LJft-.js": {
- "file": "_app/immutable/chunks/R0-LJft-.js",
- "name": "IconX",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "_ecfdBtDb.js": {
- "file": "_app/immutable/chunks/ecfdBtDb.js",
- "name": "svelte-head",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_ip4Jv8C8.js": {
- "file": "_app/immutable/chunks/ip4Jv8C8.js",
- "name": "SkeletonCard",
- "imports": [
- "_BJdXET8u.js",
- "_BSEsuAwr.js",
- "_DKemW7Dm.js",
- "_BE_zO38m.js"
- ]
- },
- "_kfynmD3Z.js": {
- "file": "_app/immutable/chunks/kfynmD3Z.js",
- "name": "index",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_phMGo29-.js": {
- "file": "_app/immutable/chunks/phMGo29-.js",
- "name": "index-client",
- "imports": [
- "_DKemW7Dm.js"
- ]
- },
- "_scnZuc49.js": {
- "file": "_app/immutable/chunks/scnZuc49.js",
- "name": "IconTrash",
- "imports": [
- "_BJdXET8u.js",
- "_DKemW7Dm.js",
- "_kfynmD3Z.js",
- "_BSXRhUWv.js"
- ]
- },
- "node_modules/@sveltejs/kit/src/runtime/client/entry.js": {
- "file": "_app/immutable/entry/start.BU-sFgwv.js",
- "name": "entry/start",
- "src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js",
- "isEntry": true,
- "imports": [
- "_CWhLh9u1.js"
- ]
- }
-}
\ No newline at end of file
diff --git a/web/.svelte-kit/output/client/_app/immutable/assets/0.DnmtykcB.css b/web/.svelte-kit/output/client/_app/immutable/assets/0.DnmtykcB.css
deleted file mode 100644
index b93e6c6..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/assets/0.DnmtykcB.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-400:oklch(85.2% .199 91.936);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-4{right:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.col-span-full{grid-column:1/-1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[38px\]{height:38px}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[1\.5rem\]{min-height:1.5rem}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[180px\]{min-width:180px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--border-primary\)\]>:not(:last-child)){border-color:var(--border-primary)}:where(.divide-\[var\(--border-secondary\)\]>:not(:last-child)){border-color:var(--border-secondary)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--border-input\)\]{border-color:var(--border-input)}.border-\[var\(--border-primary\)\]{border-color:var(--border-primary)}.border-\[var\(--border-secondary\)\]{border-color:var(--border-secondary)}.border-\[var\(--color-danger\)\]{border-color:var(--color-danger)}.border-\[var\(--color-danger-light\)\]{border-color:var(--color-danger-light)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.bg-\[var\(--border-primary\)\]{background-color:var(--border-primary)}.bg-\[var\(--color-brand-50\)\],.bg-\[var\(--color-brand-50\)\]\/30{background-color:var(--color-brand-50)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-brand-50\)\]\/30{background-color:color-mix(in oklab,var(--color-brand-50) 30%,transparent)}}.bg-\[var\(--color-brand-100\)\]{background-color:var(--color-brand-100)}.bg-\[var\(--color-brand-600\)\]{background-color:var(--color-brand-600)}.bg-\[var\(--color-danger\)\]{background-color:var(--color-danger)}.bg-\[var\(--color-danger-light\)\]{background-color:var(--color-danger-light)}.bg-\[var\(--color-info\)\]{background-color:var(--color-info)}.bg-\[var\(--color-success\)\]{background-color:var(--color-success)}.bg-\[var\(--color-warning\)\]{background-color:var(--color-warning)}.bg-\[var\(--surface-card\)\]{background-color:var(--surface-card)}.bg-\[var\(--surface-card-hover\)\]{background-color:var(--surface-card-hover)}.bg-\[var\(--surface-input\)\]{background-color:var(--surface-input)}.bg-\[var\(--surface-overlay\)\]{background-color:var(--surface-overlay)}.bg-\[var\(--surface-page\)\]{background-color:var(--surface-page)}.bg-\[var\(--surface-sidebar\)\]{background-color:var(--surface-sidebar)}.bg-\[var\(--text-tertiary\)\]{background-color:var(--text-tertiary)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-yellow-400{background-color:var(--color-yellow-400)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[26px\]{padding-top:26px}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--color-brand-500\)\]{color:var(--color-brand-500)}.text-\[var\(--color-brand-600\)\]{color:var(--color-brand-600)}.text-\[var\(--color-brand-700\)\]{color:var(--color-brand-700)}.text-\[var\(--color-danger\)\]{color:var(--color-danger)}.text-\[var\(--text-link\)\]{color:var(--text-link)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--text-tertiary\)\]{color:var(--text-tertiary)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-indigo-700{color:var(--color-indigo-700)}.text-purple-700{color:var(--color-purple-700)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-1{text-decoration-thickness:1px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[var\(--shadow-lg\)\]{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-sm\)\]{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--border-primary\)\]{--tw-ring-color:var(--border-primary)}.ring-amber-300{--tw-ring-color:var(--color-amber-300)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-red-300{--tw-ring-color:var(--color-red-300)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:bg-\[var\(--color-brand-100\)\]:is(:where(.group):hover *){background-color:var(--color-brand-100)}.group-hover\:text-\[var\(--text-secondary\)\]:is(:where(.group):hover *){color:var(--text-secondary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--text-tertiary\)\]::placeholder{color:var(--text-tertiary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--color-brand-300\)\]:hover{border-color:var(--color-brand-300)}.hover\:bg-\[var\(--color-brand-700\)\]:hover{background-color:var(--color-brand-700)}.hover\:bg-\[var\(--color-danger-dark\)\]:hover{background-color:var(--color-danger-dark)}.hover\:bg-\[var\(--color-danger-light\)\]:hover{background-color:var(--color-danger-light)}.hover\:bg-\[var\(--color-info-dark\)\]:hover{background-color:var(--color-info-dark)}.hover\:bg-\[var\(--color-success-dark\)\]:hover{background-color:var(--color-success-dark)}.hover\:bg-\[var\(--surface-card\)\]:hover{background-color:var(--surface-card)}.hover\:bg-\[var\(--surface-card-hover\)\]:hover{background-color:var(--surface-card-hover)}.hover\:bg-amber-50:hover{background-color:var(--color-amber-50)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-emerald-50:hover{background-color:var(--color-emerald-50)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-\[var\(--color-brand-600\)\]:hover{color:var(--color-brand-600)}.hover\:text-\[var\(--color-brand-700\)\]:hover{color:var(--color-brand-700)}.hover\:text-\[var\(--color-danger\)\]:hover{color:var(--color-danger)}.hover\:text-\[var\(--text-link\)\]:hover{color:var(--text-link)}.hover\:text-\[var\(--text-link-hover\)\]:hover{color:var(--text-link-hover)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-emerald-600:hover{color:var(--color-emerald-600)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-white:hover{color:var(--color-white)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[var\(--shadow-md\)\]:hover{--tw-shadow:var(--shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-\[var\(--color-brand-400\)\]:focus{border-color:var(--color-brand-400)}.focus\:border-\[var\(--color-brand-500\)\]:focus{border-color:var(--color-brand-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[var\(--color-brand-400\)\]:focus{--tw-ring-color:var(--color-brand-400)}.focus\:ring-\[var\(--color-brand-500\)\]:focus{--tw-ring-color:var(--color-brand-500)}.focus\:ring-\[var\(--color-danger\)\]:focus{--tw-ring-color:var(--color-danger)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-\[var\(--color-brand-600\)\]:focus-visible{outline-color:var(--color-brand-600)}.focus-visible\:outline-\[var\(--color-danger\)\]:focus-visible{outline-color:var(--color-danger)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:w-48{width:calc(var(--spacing) * 48)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}:where(.sm\:space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:static{position:static}.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:border-red-700{border-color:var(--color-red-700)}.dark\:border-red-900{border-color:var(--color-red-900)}.dark\:bg-\[var\(--color-brand-900\)\]\/10{background-color:var(--color-brand-900)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-\[var\(--color-brand-900\)\]\/10{background-color:color-mix(in oklab,var(--color-brand-900) 10%,transparent)}}.dark\:bg-amber-500{background-color:var(--color-amber-500)}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900) 30%,transparent)}}.dark\:bg-amber-900\/40{background-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/40{background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.dark\:bg-amber-950{background-color:var(--color-amber-950)}.dark\:bg-blue-500{background-color:var(--color-blue-500)}.dark\:bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900) 30%,transparent)}}.dark\:bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-emerald-900\/30{background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30{background-color:color-mix(in oklab,var(--color-emerald-900) 30%,transparent)}}.dark\:bg-emerald-950{background-color:var(--color-emerald-950)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-indigo-950{background-color:var(--color-indigo-950)}.dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900) 30%,transparent)}}.dark\:bg-purple-950{background-color:var(--color-purple-950)}.dark\:bg-red-500{background-color:var(--color-red-500)}.dark\:bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.dark\:bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.dark\:bg-red-950{background-color:var(--color-red-950)}.dark\:bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950) 30%,transparent)}}.dark\:bg-violet-900\/30{background-color:#4d179a4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-violet-900\/30{background-color:color-mix(in oklab,var(--color-violet-900) 30%,transparent)}}.dark\:bg-violet-950{background-color:var(--color-violet-950)}.dark\:text-amber-300{color:var(--color-amber-300)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-violet-300{color:var(--color-violet-300)}.dark\:text-violet-400{color:var(--color-violet-400)}.dark\:ring-amber-700{--tw-ring-color:var(--color-amber-700)}.dark\:ring-blue-700{--tw-ring-color:var(--color-blue-700)}.dark\:ring-red-700{--tw-ring-color:var(--color-red-700)}@media(hover:hover){.dark\:hover\:bg-red-900\/30:hover{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-red-900\/30:hover{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.dark\:hover\:bg-red-950:hover{background-color:var(--color-red-950)}}}}:root{--color-brand-50:#eef2ff;--color-brand-100:#e0e7ff;--color-brand-200:#c7d2fe;--color-brand-300:#a5b4fc;--color-brand-400:#818cf8;--color-brand-500:#6366f1;--color-brand-600:#4f46e5;--color-brand-700:#4338ca;--color-brand-800:#3730a3;--color-brand-900:#312e81;--color-success:#16a34a;--color-success-light:#dcfce7;--color-success-dark:#15803d;--color-warning:#d97706;--color-warning-light:#fef3c7;--color-warning-dark:#b45309;--color-danger:#dc2626;--color-danger-light:#fee2e2;--color-danger-dark:#b91c1c;--color-info:#2563eb;--color-info-light:#dbeafe;--color-info-dark:#1d4ed8;--surface-page:#f8fafc;--surface-card:#fff;--surface-card-hover:#f8fafc;--surface-sidebar:#fff;--surface-overlay:#0000004d;--surface-input:#fff;--border-primary:#e2e8f0;--border-secondary:#f1f5f9;--border-focus:var(--color-brand-500);--border-input:#cbd5e1;--text-primary:#0f172a;--text-secondary:#475569;--text-tertiary:#94a3b8;--text-inverse:#fff;--text-link:var(--color-brand-600);--text-link-hover:var(--color-brand-700);--space-0:0;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--font-family-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-family-mono:"JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.2s cubic-bezier(.4, 0, .2, 1);--transition-slow:.3s cubic-bezier(.4, 0, .2, 1);--sidebar-width:16rem;--sidebar-collapsed-width:0;--topbar-height:4rem}[data-theme=dark]{--surface-page:#0f172a;--surface-card:#1e293b;--surface-card-hover:#334155;--surface-sidebar:#1e293b;--surface-overlay:#0009;--surface-input:#1e293b;--border-primary:#334155;--border-secondary:#1e293b;--border-focus:var(--color-brand-400);--border-input:#475569;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-tertiary:#64748b;--text-inverse:#0f172a;--text-link:var(--color-brand-400);--text-link-hover:var(--color-brand-300);--color-success:#22c55e;--color-success-light:#14532d;--color-warning:#f59e0b;--color-warning-light:#451a03;--color-danger:#ef4444;--color-danger-light:#450a0a;--color-info:#3b82f6;--color-info-light:#172554;--shadow-sm:0 1px 2px 0 #0000004d;--shadow-md:0 4px 6px -1px #0006, 0 2px 4px -2px #0000004d;--shadow-lg:0 10px 15px -3px #0006, 0 4px 6px -4px #0000004d;--shadow-xl:0 20px 25px -5px #0006, 0 8px 10px -6px #0000004d}@keyframes pulse-status{0%,to{opacity:1}50%{opacity:.5}}@keyframes slide-in-right{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes button-press{0%,to{transform:scale(1)}50%{transform:scale(.97)}}.animate-pulse-status{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse-status}.animate-slide-in{animation:slide-in-right var(--transition-slow) forwards}.animate-slide-out{animation:slide-out-right var(--transition-slow) forwards}.animate-fade-in{animation:fade-in var(--transition-normal) forwards}.animate-scale-in{animation:scale-in var(--transition-normal) forwards}.active\:animate-press:active{animation:.15s ease-in-out button-press}.skeleton{background:linear-gradient(90deg,var(--border-secondary) 25%,var(--border-primary) 50%,var(--border-secondary) 75%);border-radius:var(--radius-md);background-size:200% 100%;animation:1.5s ease-in-out infinite skeleton-shimmer}.toggle-switch{background-color:var(--border-primary);border-radius:var(--radius-full);cursor:pointer;width:2.75rem;height:1.5rem;transition:background-color var(--transition-fast);position:relative}.toggle-switch[aria-checked=true]{background-color:var(--color-brand-600)}.toggle-switch:after{content:"";border-radius:var(--radius-full);width:1.25rem;height:1.25rem;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast);background-color:#fff;position:absolute;top:.125rem;left:.125rem}.toggle-switch[aria-checked=true]:after{transform:translate(1.25rem)}html,body{height:100%;font-family:var(--font-family-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--surface-page);color:var(--text-primary);margin:0;padding:0;overflow:hidden}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.focus-ring:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-primary);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
diff --git a/web/.svelte-kit/output/client/_app/immutable/assets/EntityPicker.D4Qf6tQ2.css b/web/.svelte-kit/output/client/_app/immutable/assets/EntityPicker.D4Qf6tQ2.css
deleted file mode 100644
index a003d75..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/assets/EntityPicker.D4Qf6tQ2.css
+++ /dev/null
@@ -1 +0,0 @@
-.entity-picker-backdrop.svelte-1bxz98v{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:var(--surface-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fade-in var(--transition-normal) forwards}.entity-picker-container.svelte-1bxz98v{position:fixed;top:0;right:0;bottom:0;left:0;z-index:61;display:flex;align-items:flex-start;justify-content:center;padding-top:12vh;pointer-events:none}.entity-picker-modal.svelte-1bxz98v{pointer-events:auto;width:90vw;max-width:500px;background:var(--surface-card);border:1px solid var(--border-primary);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);overflow:hidden;animation:scale-in var(--transition-normal) forwards;display:flex;flex-direction:column}.entity-picker-header.svelte-1bxz98v{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-secondary)}.entity-picker-title.svelte-1bxz98v{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--text-primary);margin:0}.entity-picker-close.svelte-1bxz98v{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-md);background:transparent;color:var(--text-tertiary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.entity-picker-close.svelte-1bxz98v:hover{background:var(--surface-card-hover);color:var(--text-primary)}.entity-picker-search.svelte-1bxz98v{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-secondary)}.entity-picker-search-icon{flex-shrink:0;color:var(--text-tertiary)}.entity-picker-search-input.svelte-1bxz98v{flex:1;border:none;outline:none;background:transparent;font-size:var(--text-sm);color:var(--text-primary);font-family:var(--font-family-sans)}.entity-picker-search-input.svelte-1bxz98v::placeholder{color:var(--text-tertiary)}.entity-picker-close-inline.svelte-1bxz98v{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-tertiary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.entity-picker-close-inline.svelte-1bxz98v:hover{background:var(--surface-card-hover);color:var(--text-primary)}.entity-picker-list.svelte-1bxz98v{overflow-y:auto;max-height:60vh;padding:var(--space-1) 0}.entity-picker-empty.svelte-1bxz98v{padding:var(--space-8) var(--space-4);text-align:center;font-size:var(--text-sm);color:var(--text-tertiary)}.entity-picker-group-header.svelte-1bxz98v{padding:var(--space-2) var(--space-4) var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em}.entity-picker-item.svelte-1bxz98v{display:flex;align-items:center;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-4);border:none;background:transparent;cursor:pointer;text-align:left;font-family:var(--font-family-sans);transition:background var(--transition-fast);border-left:3px solid transparent}.entity-picker-item--highlighted.svelte-1bxz98v{background:var(--surface-card-hover)}.entity-picker-item--current.svelte-1bxz98v{border-left-color:var(--color-brand-500)}.entity-picker-item-icon.svelte-1bxz98v{flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;color:var(--text-tertiary)}.entity-picker-item-content.svelte-1bxz98v{display:flex;flex-direction:column;gap:1px;min-width:0}.entity-picker-item-label.svelte-1bxz98v{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-picker-item-description.svelte-1bxz98v{font-size:var(--text-xs);color:var(--text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-picker-item--disabled.svelte-1bxz98v{opacity:.45;cursor:default;pointer-events:none}.entity-picker-item-hint.svelte-1bxz98v{font-size:var(--text-xs);color:var(--text-tertiary);font-style:italic;white-space:nowrap}
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BE_zO38m.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BE_zO38m.js
deleted file mode 100644
index 68523f7..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BE_zO38m.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as d,b as h}from"./BJdXET8u.js";import{Q as f,t as n}from"./DKemW7Dm.js";import{b as m,a as c}from"./kfynmD3Z.js";import{p as r}from"./BSXRhUWv.js";function p(t,e,l,i){var a=t.__style;if(f||a!==e){var s=m(e);(!f||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}var u=h('
');function g(t,e){const l=r(e,"class",3,""),i=r(e,"width",3,"100%"),a=r(e,"height",3,"1rem"),s=r(e,"rounded",3,!1);var o=u();n(()=>{c(o,1,`skeleton ${l()??""}`),p(o,`width: ${i()??""}; height: ${a()??""}; ${s()?"border-radius: 9999px;":""}`)}),d(t,o)}export{g as S,p as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BFW91e3Y.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BFW91e3Y.js
deleted file mode 100644
index bc64f73..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BFW91e3Y.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as m}from"./DKemW7Dm.js";import{s,a as f}from"./kfynmD3Z.js";import{p as a}from"./BSXRhUWv.js";var c=p(' ');function g(e,o){const r=a(o,"size",3,20),i=a(o,"class",3,"");var t=c();m(()=>{s(t,"width",r()),s(t,"height",r()),f(t,0,`animate-spin ${i()??""}`)}),n(e,t)}export{g as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BJdXET8u.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BJdXET8u.js
deleted file mode 100644
index a9a308b..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BJdXET8u.js
+++ /dev/null
@@ -1,2 +0,0 @@
-var ke=Object.defineProperty;var ve=t=>{throw TypeError(t)};var We=(t,e,r)=>e in t?ke(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Z=(t,e,r)=>We(t,typeof e!="symbol"?e+"":e,r),ae=(t,e,r)=>e.has(t)||ve("Cannot "+r);var s=(t,e,r)=>(ae(t,e,"read from private field"),r?r.call(t):e.get(t)),h=(t,e,r)=>e.has(t)?ve("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),o=(t,e,r,a)=>(ae(t,e,"write to private field"),a?a.call(t,r):e.set(t,r),r),v=(t,e,r)=>(ae(t,e,"access private method"),r);import{aS as xe,g as Re,B as Ve,o as $e,aT as ge,Z as B,af as Se,W as _,Q as w,C as F,aU as be,l as Be,a0 as Ae,a2 as Ye,aV as me,a7 as P,N as Y,aj as ie,H as ye,ao as Ue,aW as je,aX as te,aY as re,aZ as Te,a_ as qe,a$ as Xe,b0 as Oe,m as De,a5 as ze,ap as fe,V as U,F as Ze,a3 as Ge,b1 as G,E as Je,P as Ke,b2 as Qe,b3 as et,I as tt,b4 as rt,aA as st,au as nt,X as j,b5 as at,b6 as it,b7 as ft,b8 as ot,b9 as lt,ba as ut,bb as le,R as Me,aK as dt,T as ht,at as ue,U as J,bc as ct,an as _t,bd as pt,ab as vt,p as gt,a4 as bt,as as mt,e as yt}from"./DKemW7Dm.js";function Tt(t){let e=0,r=Se(0),a;return()=>{xe()&&(Re(r),Ve(()=>(e===0&&(a=$e(()=>t(()=>ge(r)))),e+=1,()=>{B(()=>{e-=1,e===0&&(a==null||a(),a=void 0,ge(r))})})))}}var Et=Je|Ke;function wt(t,e,r,a){new Nt(t,e,r,a)}var T,q,R,k,g,S,E,N,O,W,L,V,X,z,D,se,u,Le,Fe,Ie,de,Q,ee,he;class Nt{constructor(e,r,a,f){h(this,u);Z(this,"parent");Z(this,"is_pending",!1);Z(this,"transform_error");h(this,T);h(this,q,w?_:null);h(this,R);h(this,k);h(this,g);h(this,S,null);h(this,E,null);h(this,N,null);h(this,O,null);h(this,W,0);h(this,L,0);h(this,V,!1);h(this,X,new Set);h(this,z,new Set);h(this,D,null);h(this,se,Tt(()=>(o(this,D,Se(s(this,W))),()=>{o(this,D,null)})));var n;o(this,T,e),o(this,R,r),o(this,k,i=>{var d=F;d.b=this,d.f|=be,a(i)}),this.parent=F.b,this.transform_error=f??((n=this.parent)==null?void 0:n.transform_error)??(i=>i),o(this,g,Be(()=>{if(w){const i=s(this,q);Ae();const d=i.data===Ye;if(i.data.startsWith(me)){const c=JSON.parse(i.data.slice(me.length));v(this,u,Fe).call(this,c)}else d?v(this,u,Ie).call(this):v(this,u,Le).call(this)}else v(this,u,de).call(this)},Et)),w&&o(this,T,_)}defer_effect(e){je(e,s(this,X),s(this,z))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!s(this,R).pending}update_pending_count(e,r){v(this,u,he).call(this,e,r),o(this,W,s(this,W)+e),!(!s(this,D)||s(this,V))&&(o(this,V,!0),B(()=>{o(this,V,!1),s(this,D)&&ze(s(this,D),s(this,W))}))}get_effect_pending(){return s(this,se).call(this),Re(s(this,D))}error(e){var r=s(this,R).onerror;let a=s(this,R).failed;if(!r&&!a)throw e;s(this,S)&&(fe(s(this,S)),o(this,S,null)),s(this,E)&&(fe(s(this,E)),o(this,E,null)),s(this,N)&&(fe(s(this,N)),o(this,N,null)),w&&(U(s(this,q)),Ze(),U(Ge()));var f=!1,n=!1;const i=()=>{if(f){et();return}f=!0,n&&Qe(),s(this,N)!==null&&ie(s(this,N),()=>{o(this,N,null)}),v(this,u,ee).call(this,()=>{v(this,u,de).call(this)})},d=l=>{try{n=!0,r==null||r(l,i),n=!1}catch(c){G(c,s(this,g)&&s(this,g).parent)}a&&o(this,N,v(this,u,ee).call(this,()=>{try{return P(()=>{var c=F;c.b=this,c.f|=be,a(s(this,T),()=>l,()=>i)})}catch(c){return G(c,s(this,g).parent),null}}))};B(()=>{var l;try{l=this.transform_error(e)}catch(c){G(c,s(this,g)&&s(this,g).parent);return}l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(d,c=>G(c,s(this,g)&&s(this,g).parent)):d(l)})}}T=new WeakMap,q=new WeakMap,R=new WeakMap,k=new WeakMap,g=new WeakMap,S=new WeakMap,E=new WeakMap,N=new WeakMap,O=new WeakMap,W=new WeakMap,L=new WeakMap,V=new WeakMap,X=new WeakMap,z=new WeakMap,D=new WeakMap,se=new WeakMap,u=new WeakSet,Le=function(){try{o(this,S,P(()=>s(this,k).call(this,s(this,T))))}catch(e){this.error(e)}},Fe=function(e){const r=s(this,R).failed;r&&o(this,N,P(()=>{r(s(this,T),()=>e,()=>()=>{})}))},Ie=function(){const e=s(this,R).pending;e&&(this.is_pending=!0,o(this,E,P(()=>e(s(this,T)))),B(()=>{var r=o(this,O,document.createDocumentFragment()),a=Y();r.append(a),o(this,S,v(this,u,ee).call(this,()=>P(()=>s(this,k).call(this,a)))),s(this,L)===0&&(s(this,T).before(r),o(this,O,null),ie(s(this,E),()=>{o(this,E,null)}),v(this,u,Q).call(this,ye))}))},de=function(){try{if(this.is_pending=this.has_pending_snippet(),o(this,L,0),o(this,W,0),o(this,S,P(()=>{s(this,k).call(this,s(this,T))})),s(this,L)>0){var e=o(this,O,document.createDocumentFragment());Ue(s(this,S),e);const r=s(this,R).pending;o(this,E,P(()=>r(s(this,T))))}else v(this,u,Q).call(this,ye)}catch(r){this.error(r)}},Q=function(e){this.is_pending=!1,e.transfer_effects(s(this,X),s(this,z))},ee=function(e){var r=F,a=Oe,f=De;te(s(this,g)),re(s(this,g)),Te(s(this,g).ctx);try{return qe.ensure(),e()}catch(n){return Xe(n),null}finally{te(r),re(a),Te(f)}},he=function(e,r){var a;if(!this.has_pending_snippet()){this.parent&&v(a=this.parent,u,he).call(a,e,r);return}o(this,L,s(this,L)+e),s(this,L)===0&&(v(this,u,Q).call(this,r),s(this,E)&&ie(s(this,E),()=>{o(this,E,null)}),s(this,O)&&(s(this,T).before(s(this,O)),o(this,O,null)))};const Rt=["touchstart","touchmove"];function St(t){return Rt.includes(t)}const H=Symbol("events"),Ce=new Set,ce=new Set;function At(t,e,r,a={}){function f(n){if(a.capture||_e.call(e,n),!n.cancelBubble)return rt(()=>r==null?void 0:r.call(this,n))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?B(()=>{e.addEventListener(t,f,a)}):e.addEventListener(t,f,a),f}function Ct(t,e,r,a,f){var n={capture:a,passive:f},i=At(t,e,r,n);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&tt(()=>{e.removeEventListener(t,i,n)})}function Pt(t,e,r){(e[H]??(e[H]={}))[t]=r}function Ht(t){for(var e=0;e{throw C});throw M}}finally{t[H]=e,delete t.currentTarget,re(x),te($)}}}var we;const oe=((we=globalThis==null?void 0:globalThis.window)==null?void 0:we.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function Ot(t){return(oe==null?void 0:oe.createHTML(t))??t}function Pe(t){var e=nt("template");return e.innerHTML=Ot(t.replaceAll("","")),e.content}function A(t,e){var r=F;r.nodes===null&&(r.nodes={start:t,end:e,a:null,t:null})}function kt(t,e){var r=(e&it)!==0,a=(e&ft)!==0,f,n=!t.startsWith("");return()=>{if(w)return A(_,null),_;f===void 0&&(f=Pe(n?t:""+t),r||(f=j(f)));var i=a||at?document.importNode(f,!0):f.cloneNode(!0);if(r){var d=j(i),l=i.lastChild;A(d,l)}else A(i,i);return i}}function Dt(t,e,r="svg"){var a=!t.startsWith(""),f=`<${r}>${a?t:""+t}${r}>`,n;return()=>{if(w)return A(_,null),_;if(!n){var i=Pe(f),d=j(i);n=j(d)}var l=n.cloneNode(!0);return A(l,l),l}}function Wt(t,e){return Dt(t,e,"svg")}function xt(t=""){if(!w){var e=Y(t+"");return A(e,e),e}var r=_;return r.nodeType!==lt?(r.before(r=Y()),U(r)):ut(r),A(r,r),r}function Vt(){if(w)return A(_,null),_;var t=document.createDocumentFragment(),e=document.createComment(""),r=Y();return t.append(e,r),A(e,r),t}function $t(t,e){if(w){var r=F;((r.f&ot)===0||r.nodes.end===null)&&(r.nodes.end=_),Ae();return}t!==null&&t.before(e)}function Bt(t,e){var r=e==null?"":typeof e=="object"?`${e}`:e;r!==(t.__t??(t.__t=t.nodeValue))&&(t.__t=r,t.nodeValue=`${r}`)}function Mt(t,e){return He(t,e)}function Yt(t,e){le(),e.intro=e.intro??!1;const r=e.target,a=w,f=_;try{for(var n=j(r);n&&(n.nodeType!==Me||n.data!==dt);)n=ht(n);if(!n)throw ue;J(!0),U(n);const i=He(t,{...e,anchor:n});return J(!1),i}catch(i){if(i instanceof Error&&i.message.split(`
-`).some(d=>d.startsWith("https://svelte.dev/e/")))throw i;return i!==ue&&console.warn("Failed to hydrate: ",i),e.recover===!1&&ct(),le(),_t(r),J(!1),Mt(t,e)}finally{J(a),U(f)}}const K=new Map;function He(t,{target:e,anchor:r,props:a={},events:f,context:n,intro:i=!0,transformError:d}){le();var l=void 0,c=pt(()=>{var x=r??e.appendChild(Y());wt(x,{pending:()=>{}},b=>{gt({});var p=De;if(n&&(p.c=n),f&&(a.$$events=f),w&&A(b,null),l=t(b,a)||{},w&&(F.nodes.end=_,_===null||_.nodeType!==Me||_.data!==bt))throw mt(),ue;yt()},d);var $=new Set,M=b=>{for(var p=0;p{var I;for(var b of $)for(const y of[e,document]){var p=K.get(y),m=p.get(b);--m==0?(y.removeEventListener(b,_e),p.delete(b),p.size===0&&K.delete(y)):p.set(b,m)}ce.delete(M),x!==r&&((I=x.parentNode)==null||I.removeChild(x))}});return pe.set(l,c),l}let pe=new WeakMap;function Ut(t,e){const r=pe.get(t);return r?(pe.delete(t),r(e)):Promise.resolve()}const Lt="5";var Ne;typeof window<"u"&&((Ne=window.__svelte??(window.__svelte={})).v??(Ne.v=new Set)).add(Lt);export{$t as a,kt as b,Pt as c,Ht as d,Ct as e,Wt as f,Vt as g,A as h,Yt as i,Mt as m,Bt as s,xt as t,Ut as u};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BPqRr2-s.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BPqRr2-s.js
deleted file mode 100644
index cbacaf2..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BPqRr2-s.js
+++ /dev/null
@@ -1 +0,0 @@
-import{s as B,a as i,b as p}from"./BJdXET8u.js";import{p as C,c as m,g as t,s as u,r as k,t as c,e as M,u as a}from"./DKemW7Dm.js";import{p as j,i as q}from"./BSXRhUWv.js";import{a as g}from"./kfynmD3Z.js";var D=p(" "),E=p(" ");function J(f,e){C(e,!0);const l=j(e,"size",3,"md"),v={running:{bg:"bg-emerald-50 dark:bg-emerald-950",text:"text-emerald-700 dark:text-emerald-300",dot:"bg-emerald-500"},success:{bg:"bg-emerald-50 dark:bg-emerald-950",text:"text-emerald-700 dark:text-emerald-300",dot:"bg-emerald-500"},stopped:{bg:"bg-gray-100 dark:bg-gray-800",text:"text-gray-700 dark:text-gray-300",dot:"bg-gray-400"},failed:{bg:"bg-red-50 dark:bg-red-950",text:"text-red-700 dark:text-red-300",dot:"bg-red-500"},rolled_back:{bg:"bg-red-50 dark:bg-red-950",text:"text-red-700 dark:text-red-300",dot:"bg-red-500"},removing:{bg:"bg-amber-50 dark:bg-amber-950",text:"text-amber-700 dark:text-amber-300",dot:"bg-amber-500"},pending:{bg:"bg-blue-50 dark:bg-blue-950",text:"text-blue-700 dark:text-blue-300",dot:"bg-blue-500"},pulling:{bg:"bg-blue-50 dark:bg-blue-950",text:"text-blue-700 dark:text-blue-300",dot:"bg-blue-500"},starting:{bg:"bg-amber-50 dark:bg-amber-950",text:"text-amber-700 dark:text-amber-300",dot:"bg-amber-500"},configuring_proxy:{bg:"bg-amber-50 dark:bg-amber-950",text:"text-amber-700 dark:text-amber-300",dot:"bg-amber-500"},health_checking:{bg:"bg-violet-50 dark:bg-violet-950",text:"text-violet-700 dark:text-violet-300",dot:"bg-violet-500"}},_={bg:"bg-gray-100 dark:bg-gray-800",text:"text-gray-700 dark:text-gray-300",dot:"bg-gray-400"},r=a(()=>v[e.status]??_),y=a(()=>l()==="sm"?"text-xs px-2 py-0.5":"text-sm px-2.5 py-0.5"),n=a(()=>l()==="sm"?"h-1.5 w-1.5":"h-2 w-2"),h=a(()=>e.status.replace(/_/g," ")),z=a(()=>e.status==="running"||e.status==="pulling"||e.status==="starting"||e.status==="health_checking");var b=E(),d=m(b),o=m(d);{var w=s=>{var x=D();c(()=>g(x,1,`absolute inline-flex h-full w-full animate-ping rounded-full ${t(r).dot??""} opacity-50`)),i(s,x)};q(o,s=>{t(z)&&s(w)})}var S=u(o,2);k(d);var A=u(d);k(b),c(()=>{g(b,1,`inline-flex items-center gap-1.5 rounded-full font-medium ${t(r).bg??""} ${t(r).text??""} ${t(y)??""}`),g(d,1,`relative flex ${t(n)??""}`),g(S,1,`relative inline-flex rounded-full ${t(n)??""} ${t(r).dot??""}`),B(A,` ${t(h)??""}`)}),i(f,b),M()}export{J as S};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BSEsuAwr.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BSEsuAwr.js
deleted file mode 100644
index f826270..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BSEsuAwr.js
+++ /dev/null
@@ -1 +0,0 @@
-import{z as a}from"./DKemW7Dm.js";a();
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BSXRhUWv.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BSXRhUWv.js
deleted file mode 100644
index 7315aed..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BSXRhUWv.js
+++ /dev/null
@@ -1 +0,0 @@
-var J=Object.defineProperty;var L=t=>{throw TypeError(t)};var Q=(t,e,a)=>e in t?J(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a;var U=(t,e,a)=>Q(t,typeof e!="symbol"?e+"":e,a),x=(t,e,a)=>e.has(t)||L("Cannot "+a);var r=(t,e,a)=>(x(t,e,"read from private field"),a?a.call(t):e.get(t)),b=(t,e,a)=>e.has(t)?L("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,a),C=(t,e,a,s)=>(x(t,e,"write to private field"),s?s.call(t,a):e.set(t,a),a);import{ax as F,ae as V,ay as W,d as q,az as Z,g as A,I as K,aA as X,ai as ee,ap as D,aj as te,N as k,a7 as Y,H as ae,Q as O,W as z,ao as se,a9 as re,l as ie,a0 as ne,E as fe,a1 as ue,a3 as ce,V as de,U as $,aB as oe,aC as le,aD as he,b as _e,aE as ve,C as be,ah as ge,aF as Se,o as me,aq as pe,aG as Ee,aH as Ie,y as Pe,aa as ye,aI as Ae,S as Re,aJ as Te}from"./DKemW7Dm.js";let y=!1,M=Symbol();function we(t,e,a){const s=a[e]??(a[e]={store:null,source:V(void 0),unsubscribe:F});if(s.store!==t&&!(M in a))if(s.unsubscribe(),s.store=t??null,t==null)s.source.v=void 0,s.unsubscribe=F;else{var i=!0;s.unsubscribe=W(t,n=>{i?s.source.v=n:q(s.source,n)}),i=!1}return t&&M in a?Z(t):A(s.source)}function Be(){const t={};function e(){K(()=>{for(var a in t)t[a].unsubscribe();X(t,M,{enumerable:!1,value:!0})})}return[t,e]}function De(t){var e=y;try{return y=!1,[t(),y]}finally{y=e}}var l,_,o,g,E,I,R;class Oe{constructor(e,a=!0){U(this,"anchor");b(this,l,new Map);b(this,_,new Map);b(this,o,new Map);b(this,g,new Set);b(this,E,!0);b(this,I,e=>{if(r(this,l).has(e)){var a=r(this,l).get(e),s=r(this,_).get(a);if(s)ee(s),r(this,g).delete(a);else{var i=r(this,o).get(a);i&&(r(this,_).set(a,i.effect),r(this,o).delete(a),i.fragment.lastChild.remove(),this.anchor.before(i.fragment),s=i.effect)}for(const[n,u]of r(this,l)){if(r(this,l).delete(n),n===e)break;const f=r(this,o).get(u);f&&(D(f.effect),r(this,o).delete(u))}for(const[n,u]of r(this,_)){if(n===a||r(this,g).has(n))continue;const f=()=>{if(Array.from(r(this,l).values()).includes(n)){var h=document.createDocumentFragment();se(u,h),h.append(k()),r(this,o).set(n,{effect:u,fragment:h})}else D(u);r(this,g).delete(n),r(this,_).delete(n)};r(this,E)||!s?(r(this,g).add(n),te(u,f,!1)):f()}}});b(this,R,e=>{r(this,l).delete(e);const a=Array.from(r(this,l).values());for(const[s,i]of r(this,o))a.includes(s)||(D(i.effect),r(this,o).delete(s))});this.anchor=e,C(this,E,a)}ensure(e,a){var s=ae,i=re();if(a&&!r(this,_).has(e)&&!r(this,o).has(e))if(i){var n=document.createDocumentFragment(),u=k();n.append(u),r(this,o).set(e,{effect:Y(()=>a(u)),fragment:n})}else r(this,_).set(e,Y(()=>a(this.anchor)));if(r(this,l).set(s,e),i){for(const[f,c]of r(this,_))f===e?s.unskip_effect(c):s.skip_effect(c);for(const[f,c]of r(this,o))f===e?s.unskip_effect(c.effect):s.skip_effect(c.effect);s.oncommit(r(this,I)),s.ondiscard(r(this,R))}else O&&(this.anchor=z),r(this,I).call(this,s)}}l=new WeakMap,_=new WeakMap,o=new WeakMap,g=new WeakMap,E=new WeakMap,I=new WeakMap,R=new WeakMap;function Le(t,e,a=!1){var s;O&&(s=z,ne());var i=new Oe(t),n=a?fe:0;function u(f,c){if(O){var h=ue(s);if(f!==parseInt(h.substring(1))){var v=ce();de(v),i.anchor=v,$(!1),i.ensure(f,c),$(!0);return}}i.ensure(f,c)}ie(()=>{var f=!1;e((c,h=0)=>{f=!0,u(h,c)}),f||u(-1,null)},n)}function Ue(t,e,a,s){var w;var i=!pe||(a&Ee)!==0,n=(a&Se)!==0,u=(a&Ae)!==0,f=s,c=!0,h=()=>(c&&(c=!1,f=u?me(s):s),f);let v;if(n){var G=Re in t||Te in t;v=((w=oe(t,e))==null?void 0:w.set)??(G&&e in t?d=>t[e]=d:void 0)}var m,N=!1;n?[m,N]=De(()=>t[e]):m=t[e],m===void 0&&s!==void 0&&(m=h(),v&&(i&&le(),v(m)));var S;if(i?S=()=>{var d=t[e];return d===void 0?h():(c=!0,d)}:S=()=>{var d=t[e];return d!==void 0&&(f=void 0),d===void 0?f:d},i&&(a&he)===0)return S;if(v){var H=t.$$legacy;return(function(d,P){return arguments.length>0?((!i||!P||H||N)&&v(P?S():d),d):S()})}var T=!1,p=((a&Ie)!==0?Pe:ye)(()=>(T=!1,S()));n&&A(p);var j=be;return(function(d,P){if(arguments.length>0){const B=P?A(p):i&&n?_e(d):d;return q(p,B),T=!0,f!==void 0&&(f=B),d}return ve&&T||(j.f&ge)!==0?p.v:A(p)})}export{Oe as B,we as a,Le as i,Ue as p,Be as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BberSjRt.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BberSjRt.js
deleted file mode 100644
index 456b65d..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BberSjRt.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as b,s as m,c as h,a as g,b as k}from"./BJdXET8u.js";import{p as _,c as r,r as i,t as p,e as v}from"./DKemW7Dm.js";import{s as w,a as x}from"./kfynmD3Z.js";import{p as l}from"./BSXRhUWv.js";var y=k(' ');function z(n,t){_(t,!0);let a=l(t,"checked",15,!1),d=l(t,"label",3,""),s=l(t,"disabled",3,!1);function f(){var o;s()||(a(!a()),(o=t.onchange)==null||o.call(t,a()))}var e=y(),c=r(e),u=r(c,!0);i(c),i(e),p(()=>{w(e,"aria-checked",a()),x(e,1,`toggle-switch ${s()?"opacity-50 cursor-not-allowed":""}`),e.disabled=s(),m(u,d())}),h("click",e,f),g(n,e),v()}b(["click"]);export{z as T};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BlV-f-zB.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BlV-f-zB.js
deleted file mode 100644
index affc347..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BlV-f-zB.js
+++ /dev/null
@@ -1 +0,0 @@
-import{m as d,n as g,i as c,o as m,q as v,v as l,g as p,x as b,y as h}from"./DKemW7Dm.js";function x(n=!1){const s=d,e=s.l.u;if(!e)return;let r=()=>b(s.s);if(n){let o=0,t={};const _=h(()=>{let i=!1;const a=s.s;for(const f in a)a[f]!==t[f]&&(t[f]=a[f],i=!0);return i&&o++,o});r=()=>p(_)}e.b.length&&g(()=>{u(s,r),l(e.b)}),c(()=>{const o=m(()=>e.m.map(v));return()=>{for(const t of o)typeof t=="function"&&t()}}),e.a.length&&c(()=>{u(s,r),l(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}export{x as i};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BoGS7hWi.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BoGS7hWi.js
deleted file mode 100644
index 4abce98..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BoGS7hWi.js
+++ /dev/null
@@ -1 +0,0 @@
-import{m as w,A as T,B as x,o as A,C as B,D,S as E}from"./DKemW7Dm.js";function n(r,f){return r===f||(r==null?void 0:r[E])===f}function k(r={},f,i,O){var p=w.r,S=B;return T(()=>{var a,t;return x(()=>{a=t,t=[],A(()=>{r!==i(...t)&&(f(r,...t),a&&n(i(...a),r)&&f(null,...a))})}),()=>{let s=S;for(;s!==p&&s.parent!==null&&s.parent.f&D;)s=s.parent;const h=()=>{t&&n(i(...t),r)&&f(null,...t)},c=s.teardown;s.teardown=()=>{h(),c==null||c()}}}),r}export{k as b};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/Bpb8V1MF.js b/web/.svelte-kit/output/client/_app/immutable/chunks/Bpb8V1MF.js
deleted file mode 100644
index 1043a33..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/Bpb8V1MF.js
+++ /dev/null
@@ -1 +0,0 @@
-import{g as y,c as S}from"./DTyrBG6r.js";class $ extends Error{constructor(e,n){super(e),this.status=n,this.name="ApiError"}}async function f(t,e){const n=y(),o={"Content-Type":"application/json",...e==null?void 0:e.headers};n&&(o.Authorization=`Bearer ${n}`);const r=await fetch(t,{...e,headers:o});if(r.status===401&&typeof window<"u"&&!t.includes("/auth/"))throw S(),window.location.href="/login",new $("Authentication required",401);let u;try{u=await r.json()}catch{throw new $(`Server returned non-JSON response (HTTP ${r.status})`,r.status)}if(!u.success)throw new $(u.error??"Unknown API error",r.status);return u.data}function s(t){return f(t)}function i(t,e){return f(t,{method:"POST",body:e!==void 0?JSON.stringify(e):void 0})}function a(t,e){return f(t,{method:"PUT",body:JSON.stringify(e)})}function c(t){return f(t,{method:"DELETE"})}function w(){return s("/api/projects")}function P(t){return s(`/api/projects/${t}`)}function k(t){return i("/api/projects",t)}function x(t,e){return a(`/api/projects/${t}`,e)}function E(t){return c(`/api/projects/${t}`)}function q(t,e){return i(`/api/projects/${t}/stages`,e)}function I(t,e){return c(`/api/projects/${t}/stages/${e}`)}function R(t,e){return s(`/api/projects/${t}/stages/${e}/instances`)}function U(t,e,n){return i(`/api/projects/${t}/stages/${e}/instances`,{image_tag:n})}function T(t,e,n){return c(`/api/projects/${t}/stages/${e}/instances/${n}`)}function b(t,e,n){return i(`/api/projects/${t}/stages/${e}/instances/${n}/stop`)}function A(t,e,n){return i(`/api/projects/${t}/stages/${e}/instances/${n}/start`)}function C(t,e,n){return i(`/api/projects/${t}/stages/${e}/instances/${n}/restart`)}function L(t=50){return s(`/api/deploys?limit=${t}`)}function V(t){return i("/api/deploy/inspect",{image:t})}function D(t){return i("/api/deploy/quick",t)}function O(){return s("/api/registries")}function N(t){return i("/api/registries",t)}function J(t,e){return a(`/api/registries/${t}`,e)}function _(t){return c(`/api/registries/${t}`)}function z(t){return i(`/api/registries/${t}/test`)}function B(t,e){return s(`/api/registries/${t}/tags/${encodeURIComponent(e)}`)}function H(t){return s(`/api/registries/${t}/images`)}function W(){return s("/api/settings")}function F(t){return a("/api/settings",t)}function G(){return s("/api/settings/webhook-url")}function K(){return i("/api/settings/webhook-url/regenerate")}function M(){return s("/api/settings/npm-certificates")}function Q(){return s("/api/health")}function X(t,e){return s(`/api/projects/${t}/stages/${e}/env`)}function Y(t,e,n){return i(`/api/projects/${t}/stages/${e}/env`,n)}function Z(t,e,n,o){return a(`/api/projects/${t}/stages/${e}/env/${n}`,o)}function m(t,e,n){return c(`/api/projects/${t}/stages/${e}/env/${n}`)}function tt(t){return s(`/api/projects/${t}/volumes`)}function et(t,e){return i(`/api/projects/${t}/volumes`,e)}function nt(t,e,n){return a(`/api/projects/${t}/volumes/${e}`,n)}function ot(){return s("/api/volumes/scopes")}function st(t,e){return c(`/api/projects/${t}/volumes/${e}`)}function it(t,e,n){const o=new URLSearchParams;n!=null&&n.path&&o.set("path",n.path),n!=null&&n.stage&&o.set("stage",n.stage),n!=null&&n.tag&&o.set("tag",n.tag);const r=o.toString();return s(`/api/projects/${t}/volumes/${e}/browse${r?`?${r}`:""}`)}function rt(t,e,n){const o=new URLSearchParams;n!=null&&n.path&&o.set("path",n.path),n!=null&&n.stage&&o.set("stage",n.stage),n!=null&&n.tag&&o.set("tag",n.tag);const r=typeof localStorage<"u"?localStorage.getItem("auth_token"):null;r&&o.set("token",r);const u=o.toString();return`/api/projects/${t}/volumes/${e}/download${u?`?${u}`:""}`}async function ut(t,e,n,o){const r=new URLSearchParams;o!=null&&o.path&&r.set("path",o.path),o!=null&&o.stage&&r.set("stage",o.stage),o!=null&&o.tag&&r.set("tag",o.tag);const u=r.toString(),p=new FormData;for(let g=0;g ');function w(e,a){const s=r(a,"size",3,20),i=r(a,"class",3,"");var t=m();h(()=>{o(t,"width",s()),o(t,"height",s()),c(t,0,l(i()))}),n(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BvIWRct8.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BvIWRct8.js
deleted file mode 100644
index 1a3f537..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BvIWRct8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as c,f as n}from"./BJdXET8u.js";import{t as p}from"./DKemW7Dm.js";import{s as o,a as l,c as m}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var f=n(' ');function w(a,t){const s=e(t,"size",3,20),i=e(t,"class",3,"");var r=f();p(()=>{o(r,"width",s()),o(r,"height",s()),l(r,0,m(i()))}),c(a,r)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/BxXVdbgr.js b/web/.svelte-kit/output/client/_app/immutable/chunks/BxXVdbgr.js
deleted file mode 100644
index 2e2d9eb..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/BxXVdbgr.js
+++ /dev/null
@@ -1 +0,0 @@
-import{h as ee,d as Fe,g as ue,a as u,c as N,b as m,s as R,e as Xe}from"./BJdXET8u.js";import{Q as K,V as fe,X as F,t as I,a0 as pe,C as Be,ar as Ge,W as _e,R as Ke,T as Qe,as as Ue,at as We,au as Ye,av as je,aw as Je,p as Ze,i as he,d as z,g as e,h as Q,e as $e,a as U,u as q,s as w,c as o,r as n}from"./DKemW7Dm.js";import{p as be,i as M,s as et,a as tt}from"./BSXRhUWv.js";import{e as me,i as ke}from"./CZnXUJhL.js";import{r as at,s as te,t as st,a as it}from"./kfynmD3Z.js";import{b as rt}from"./DgtbvmBB.js";import{b as ye}from"./BoGS7hWi.js";import{I as ge}from"./R0-LJft-.js";import{I as nt}from"./BvIWRct8.js";function lt(X,i,O=!1,H=!1,D=!1,ae=!1){var k=X,f="";if(O){var c=X;K&&(k=fe(F(c)))}I(()=>{var y=Be;if(f===(f=i()??"")){K&&pe();return}if(O&&!K){y.nodes=null,c.innerHTML=f,f!==""&&ee(F(c),c.lastChild);return}if(y.nodes!==null&&(Ge(y.nodes.start,y.nodes.end),y.nodes=null),f!==""){if(K){_e.data;for(var v=pe(),T=v;v!==null&&(v.nodeType!==Ke||v.data!=="");)T=v,v=Qe(v);if(v===null)throw Ue(),We;ee(_e,T),k=fe(v);return}var B=H?je:D?Je:void 0,g=Ye(H?"svg":D?"math":"template",B);g.innerHTML=f;var C=H||D?g:g.content;if(ee(F(C),C.lastChild),H||D)for(;F(C);)k.before(F(C));else k.before(C)}})}var ot=m(''),ct=m(' '),vt=m('
'),dt=m(''),ut=m(' '),ft=m(' '),pt=m(' '),_t=m(' '),ht=m(" ",1),bt=m('
',1);function It(X,i){Ze(i,!0);const O=()=>tt(st,"$t",H),[H,D]=et(),ae=be(i,"current",3,""),k=be(i,"title",3,"");let f=U(""),c=U(0),y=U(void 0),v=U(void 0);const T=q(()=>{const t=e(f).toLowerCase().trim();return t?i.items.filter(s=>{var d;return s.label.toLowerCase().includes(t)||(((d=s.description)==null?void 0:d.toLowerCase().includes(t))??!1)}):i.items}),B=q(()=>{const t=[],s=new Map;for(const d of e(T)){const p=d.group??"",L=s.get(p);L!==void 0?t[L].items.push(d):(s.set(p,t.length),t.push({name:p,items:[d]}))}return t}),g=q(()=>e(T));he(()=>{i.open&&(z(f,""),z(c,0),requestAnimationFrame(()=>{var t;(t=e(y))==null||t.focus()}))}),he(()=>{e(T).length,z(c,0)});function C(){requestAnimationFrame(()=>{var s;const t=(s=e(v))==null?void 0:s.querySelector('[data-highlighted="true"]');t==null||t.scrollIntoView({block:"nearest"})})}function se(t){switch(t.key){case"ArrowDown":{t.preventDefault(),z(c,(e(c)+1)%e(g).length),C();break}case"ArrowUp":{t.preventDefault(),z(c,(e(c)-1+e(g).length)%e(g).length),C();break}case"Enter":{t.preventDefault();const s=e(g)[e(c)];s&&!s.disabled&&i.onselect(s.value);break}case"Escape":{t.preventDefault(),i.onclose();break}}}function xe(){i.onclose()}function ze(t){t.disabled||i.onselect(t.value)}function we(t,s){let d=0;for(let p=0;p{var s=bt(),d=Q(s),p=w(d,2),L=o(p),re=o(L);{var Ie=a=>{var l=ot(),x=o(l),A=o(x,!0);n(x);var h=w(x,2),j=o(h);ge(j,{size:18}),n(h),n(l),I(()=>R(A,k())),N("click",h,function(...G){var S;(S=i.onclose)==null||S.apply(this,G)}),u(a,l)};M(re,a=>{k()&&a(Ie)})}var W=w(re,2),ne=o(W);nt(ne,{size:16,class:"entity-picker-search-icon"});var P=w(ne,2);at(P),ye(P,a=>z(y,a),()=>e(y));var Ae=w(P,2);{var Me=a=>{var l=ct(),x=o(l);ge(x,{size:16}),n(l),N("click",l,function(...A){var h;(h=i.onclose)==null||h.apply(this,A)}),u(a,l)};M(Ae,a=>{k()||a(Me)})}n(W);var Y=w(W,2),He=o(Y);{var De=a=>{var l=vt(),x=o(l,!0);n(l),I(A=>R(x,A),[()=>O()("entityPicker.noResults")]),u(a,l)},Te=a=>{var l=ue(),x=Q(l);me(x,17,()=>e(B),ke,(A,h,j)=>{var G=ht(),S=Q(G);{var Le=V=>{var r=dt(),J=o(r,!0);n(r),I(()=>R(J,e(h).name)),u(V,r)};M(S,V=>{e(h).name&&V(Le)})}var Ne=w(S,2);me(Ne,17,()=>e(h).items,ke,(V,r,J)=>{const le=q(()=>we(j,J)),oe=q(()=>e(le)===e(c)),Re=q(()=>e(r).value===ae());var E=_t();let ce;var ve=o(E);{var qe=b=>{var _=ut();lt(_,()=>e(r).icon,!0),n(_),u(b,_)};M(ve,b=>{e(r).icon&&b(qe)})}var de=w(ve,2),Z=o(de),Oe=o(Z,!0);n(Z);var Pe=w(Z,2);{var Se=b=>{var _=ft(),$=o(_,!0);n(_),I(()=>R($,e(r).disabledHint)),u(b,_)},Ve=b=>{var _=pt(),$=o(_,!0);n(_),I(()=>R($,e(r).description)),u(b,_)};M(Pe,b=>{e(r).disabledHint?b(Se):e(r).description&&b(Ve,1)})}n(de),n(E),I(()=>{ce=it(E,1,"entity-picker-item svelte-1bxz98v",null,ce,{"entity-picker-item--highlighted":e(oe)&&!e(r).disabled,"entity-picker-item--current":e(Re),"entity-picker-item--disabled":e(r).disabled}),te(E,"data-highlighted",e(oe)),E.disabled=e(r).disabled,R(Oe,e(r).label)}),N("click",E,()=>ze(e(r))),Xe("mouseenter",E,()=>{z(c,e(le),!0)}),u(V,E)}),u(A,G)}),u(a,l)};M(He,a=>{e(g).length===0?a(De):a(Te,-1)})}n(Y),ye(Y,a=>z(v,a),()=>e(v)),n(L),n(p),I(a=>{te(L,"aria-label",k()),te(P,"placeholder",a)},[()=>i.placeholder??O()("entityPicker.search")]),N("click",d,xe),N("keydown",d,se),N("keydown",p,se),rt(P,()=>e(f),a=>z(f,a)),u(t,s)};M(Ce,t=>{i.open&&t(Ee)})}u(X,ie),$e(),D()}Fe(["click","keydown"]);export{It as E};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/Bxa5VUw6.js b/web/.svelte-kit/output/client/_app/immutable/chunks/Bxa5VUw6.js
deleted file mode 100644
index 11afb67..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/Bxa5VUw6.js
+++ /dev/null
@@ -1 +0,0 @@
-import{G as s,H as v,A as o,I as c,J as b,K as m,L as h}from"./DKemW7Dm.js";function d(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(t(a));return}for(a of e.options){var i=t(a);if(h(i,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function y(e){var r=new MutationObserver(()=>{d(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function S(e,r,f=r){var a=new WeakSet,i=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),t);else{var _=e.querySelector(l)??e.querySelector("option:not([disabled])");n=_&&t(_)}f(n),e.__value=n,v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=v;if(a.has(l))return}if(d(e,u,i),i&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=t(n),f(u))}e.__value=u,i=!1}),y(e)}function t(e){return"__value"in e?e.__value:e.value}export{S as b,y as i,d as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/C6FeVxU4.js b/web/.svelte-kit/output/client/_app/immutable/chunks/C6FeVxU4.js
deleted file mode 100644
index b98dea1..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/C6FeVxU4.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as c}from"./DKemW7Dm.js";import{s as r,a as h,c as l}from"./kfynmD3Z.js";import{p as a}from"./BSXRhUWv.js";var m=p(' ');function u(e,s){const o=a(s,"size",3,20),i=a(s,"class",3,"");var t=m();c(()=>{r(t,"width",o()),r(t,"height",o()),h(t,0,l(i()))}),n(e,t)}export{u as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/C8zo5-Sk.js b/web/.svelte-kit/output/client/_app/immutable/chunks/C8zo5-Sk.js
deleted file mode 100644
index 4345f9e..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/C8zo5-Sk.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Q,g as R,a as j,s as l,c as u,b as S}from"./BJdXET8u.js";import{p as T,h as z,e as U,s as o,c as t,g,r as e,t as W,u as b}from"./DKemW7Dm.js";import{p as I,i as X,s as Y,a as Z}from"./BSXRhUWv.js";import{a as L,t as $}from"./kfynmD3Z.js";import{I as tt}from"./CGCp4lb_.js";var et=S('
',1);function nt(V,a){T(a,!0);const A=()=>Z($,"$t",B),[B,D]=Y(),q=I(a,"confirmLabel",3,"Confirm"),v=I(a,"confirmVariant",3,"primary"),E=b(()=>v()==="danger"?"bg-[var(--color-danger)] hover:bg-[var(--color-danger-dark)] focus-visible:outline-[var(--color-danger)]":"bg-[var(--color-brand-600)] hover:bg-[var(--color-brand-700)] focus-visible:outline-[var(--color-brand-600)]"),F=b(()=>v()==="danger"?"bg-[var(--color-danger-light)]":"bg-[var(--color-brand-50)]"),G=b(()=>v()==="danger"?"text-[var(--color-danger)]":"text-[var(--color-brand-600)]");var x=R(),H=z(x);{var J=d=>{var p=et(),_=z(p),h=o(_,2),y=t(h),f=t(y),i=t(f),K=t(i);tt(K,{size:20,get class(){return g(G)}}),e(i);var k=o(i,2),m=t(k),M=t(m,!0);e(m);var C=o(m,2),N=t(C,!0);e(C),e(k),e(f);var w=o(f,2),n=t(w),O=t(n,!0);e(n);var c=o(n,2),P=t(c,!0);e(c),e(w),e(y),e(h),W(s=>{L(i,1,`flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full ${g(F)??""}`),l(M,a.title),l(N,a.message),l(O,s),L(c,1,`rounded-lg px-4 py-2 text-sm font-medium text-white ${g(E)??""} shadow-sm transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 active:animate-press`),l(P,q())},[()=>A()("common.cancel")]),u("click",_,function(...s){var r;(r=a.oncancel)==null||r.apply(this,s)}),u("click",n,function(...s){var r;(r=a.oncancel)==null||r.apply(this,s)}),u("click",c,function(...s){var r;(r=a.onconfirm)==null||r.apply(this,s)}),j(d,p)};X(H,d=>{a.open&&d(J)})}j(V,x),U(),D()}Q(["click"]);export{nt as C};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CGCp4lb_.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CGCp4lb_.js
deleted file mode 100644
index e8f7990..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CGCp4lb_.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as p,f as n}from"./BJdXET8u.js";import{t as h}from"./DKemW7Dm.js";import{s as o,a as l,c as m}from"./kfynmD3Z.js";import{p as r}from"./BSXRhUWv.js";var c=n(' ');function w(e,a){const s=r(a,"size",3,20),i=r(a,"class",3,"");var t=c();h(()=>{o(t,"width",s()),o(t,"height",s()),l(t,0,m(i()))}),p(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CPatcLwq.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CPatcLwq.js
deleted file mode 100644
index 3b79154..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CPatcLwq.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as l}from"./DKemW7Dm.js";import{s as a,a as c,c as m}from"./kfynmD3Z.js";import{p as r}from"./BSXRhUWv.js";var f=p(' ');function w(e,s){const o=r(s,"size",3,20),i=r(s,"class",3,"");var t=f();l(()=>{a(t,"width",o()),a(t,"height",o()),c(t,0,m(i()))}),n(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CWCQOKDd.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CWCQOKDd.js
deleted file mode 100644
index 49de6dc..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CWCQOKDd.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as i,f as c}from"./BJdXET8u.js";import{t as n}from"./DKemW7Dm.js";import{s,a as p,c as v}from"./kfynmD3Z.js";import{p as l}from"./BSXRhUWv.js";var m=c(' ');function w(o,t){const r=l(t,"size",3,20),e=l(t,"class",3,"");var a=m();n(()=>{s(a,"width",r()),s(a,"height",r()),p(a,0,v(e()))}),i(o,a)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CWhLh9u1.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CWhLh9u1.js
deleted file mode 100644
index 014f6e0..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CWhLh9u1.js
+++ /dev/null
@@ -1 +0,0 @@
-var Zt=t=>{throw TypeError(t)};var Ce=(t,e,n)=>e.has(t)||Zt("Cannot "+n);var v=(t,e,n)=>(Ce(t,e,"read from private field"),n?n.call(t):e.get(t)),A=(t,e,n)=>e.has(t)?Zt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{w as Dt,a as T,g as I,d as O,Y as gt,be as je}from"./DKemW7Dm.js";import{o as te}from"./phMGo29-.js";class Vt{constructor(e,n){this.status=e,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}}class qt{constructor(e,n){this.status=e,this.location=n}}class Bt extends Error{constructor(e,n,a){super(a),this.status=e,this.text=n}}new URL("sveltekit-internal://");function Ne(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function De(t){return t.split("%25").map(decodeURI).join("%25")}function Ve(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function At({href:t}){return t.split("#")[0]}function qe(...t){let e=5381;for(const n of t)if(typeof n=="string"){let a=n.length;for(;a;)e=e*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)e=e*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;new TextDecoder;function Be(t){const e=atob(t),n=new Uint8Array(e.length);for(let a=0;a((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&H.delete(Kt(t)),Ke(t,e));const H=new Map;function Me(t,e){const n=Kt(t,e),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...s}=JSON.parse(a.textContent);const o=a.getAttribute("data-ttl");return o&&H.set(n,{body:r,init:s,ttl:1e3*Number(o)}),a.getAttribute("data-b64")!==null&&(r=Be(r)),Promise.resolve(new Response(r,s))}return window.fetch(t,e)}function Fe(t,e,n){if(H.size>0){const a=Kt(t,n),r=H.get(a);if(r){if(performance.now(){const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return e.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(s)return e.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const o=a.split(/\[(.+?)\](?!\])/);return"/"+o.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Tt(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Tt(String.fromCharCode(...l.slice(2).split("-").map(m=>parseInt(m,16))));const d=Ge.exec(l),[,u,w,p,f]=d;return e.push({name:p,matcher:f,optional:!!u,rest:!!w,chained:w?c===1&&o[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return Tt(l)}).join("")}).join("")}/?$`),params:e}}function Ye(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function ze(t){return t.slice(1).split("/").filter(Ye)}function He(t,e,n){const a={},r=t.slice(1),s=r.filter(i=>i!==void 0);let o=0;for(let i=0;id).join("/"),o=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){a[l.name]=c;const d=e[i+1],u=r[i+1];d&&!d.rest&&d.optional&&u&&l.chained&&(o=0),!d&&!u&&Object.keys(a).length===s.length&&(o=0);continue}if(l.optional&&l.chained){o++;continue}return}if(!o)return a}function Tt(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Je({nodes:t,server_loads:e,dictionary:n,matchers:a}){const r=new Set(e);return Object.entries(n).map(([i,[l,c,d]])=>{const{pattern:u,params:w}=We(i),p={id:i,exec:f=>{const m=u.exec(f);if(m)return He(m,w,a)},errors:[1,...d||[]].map(f=>t[f]),layouts:[0,...c||[]].map(o),leaf:s(l)};return p.errors.length=p.layouts.length=Math.max(p.errors.length,p.layouts.length),p});function s(i){const l=i<0;return l&&(i=~i),[l,t[i]]}function o(i){return i===void 0?i:[r.has(i),t[i]]}}function pe(t,e=JSON.parse){try{return e(sessionStorage[t])}catch{}}function ee(t,e,n=JSON.stringify){const a=n(e);try{sessionStorage[t]=a}catch{}}var ce;const U=((ce=globalThis.__sveltekit_m287x4)==null?void 0:ce.base)??"";var fe;const Xe=((fe=globalThis.__sveltekit_m287x4)==null?void 0:fe.assets)??U??"",Qe="1775075469000",ge="sveltekit:snapshot",me="sveltekit:scroll",_e="sveltekit:states",Ze="sveltekit:pageurl",M="sveltekit:history",X="sveltekit:navigation",D={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},St=location.origin;function Mt(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function q(){return{x:pageXOffset,y:pageYOffset}}function K(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const ne={...D,"":D.hover};function we(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function ve(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=we(t)}}function Pt(t,e,n){let a;try{if(a=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const i=location.hash.split("#")[1]||"/";a.hash=`#${i}${a.hash}`}}catch{}const r=t instanceof SVGAElement?t.target.baseVal:t.target,s=!a||!!r||Rt(a,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),o=(a==null?void 0:a.origin)===St&&t.hasAttribute("download");return{url:a,external:s,target:r,download:o}}function mt(t){let e=null,n=null,a=null,r=null,s=null,o=null,i=t;for(;i&&i!==document.documentElement;)a===null&&(a=K(i,"preload-code")),r===null&&(r=K(i,"preload-data")),e===null&&(e=K(i,"keepfocus")),n===null&&(n=K(i,"noscroll")),s===null&&(s=K(i,"reload")),o===null&&(o=K(i,"replacestate")),i=we(i);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:ne[a??"off"],preload_data:ne[r??"off"],keepfocus:l(e),noscroll:l(n),reload:l(s),replace_state:l(o)}}function re(t){const e=Dt(t);let n=!0;function a(){n=!0,e.update(o=>o)}function r(o){n=!1,e.set(o)}function s(o){let i;return e.subscribe(l=>{(i===void 0||n&&l!==i)&&o(i=l)})}return{notify:a,set:r,subscribe:s}}const ye={v:()=>{}};function tn(){const{set:t,subscribe:e}=Dt(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${Xe}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const o=(await r.json()).version!==Qe;return o&&(t(!0),ye.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:a}}function Rt(t,e,n){return t.origin!==St||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function An(t){}const be=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...be];const en=new Set([...be]);[...en];function nn(t){return t.filter(e=>e!=null)}function Ft(t){return t instanceof Vt||t instanceof Bt?t.status:500}function rn(t){return t instanceof Bt?t.text:"Internal Error"}let R,Q,It;const an=te.toString().includes("$$")||/function \w+\(\) \{\}/.test(te.toString()),ae="a:";var rt,at,ot,st,it,lt,ct,ft,ue,ut,de,dt,he;an?(R={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(ae)},Q={current:null},It={current:!1}):(R=new(ue=class{constructor(){A(this,rt,T({}));A(this,at,T(null));A(this,ot,T(null));A(this,st,T({}));A(this,it,T({id:null}));A(this,lt,T({}));A(this,ct,T(-1));A(this,ft,T(new URL(ae)))}get data(){return I(v(this,rt))}set data(e){O(v(this,rt),e)}get form(){return I(v(this,at))}set form(e){O(v(this,at),e)}get error(){return I(v(this,ot))}set error(e){O(v(this,ot),e)}get params(){return I(v(this,st))}set params(e){O(v(this,st),e)}get route(){return I(v(this,it))}set route(e){O(v(this,it),e)}get state(){return I(v(this,lt))}set state(e){O(v(this,lt),e)}get status(){return I(v(this,ct))}set status(e){O(v(this,ct),e)}get url(){return I(v(this,ft))}set url(e){O(v(this,ft),e)}},rt=new WeakMap,at=new WeakMap,ot=new WeakMap,st=new WeakMap,it=new WeakMap,lt=new WeakMap,ct=new WeakMap,ft=new WeakMap,ue),Q=new(de=class{constructor(){A(this,ut,T(null))}get current(){return I(v(this,ut))}set current(e){O(v(this,ut),e)}},ut=new WeakMap,de),It=new(he=class{constructor(){A(this,dt,T(!1))}get current(){return I(v(this,dt))}set current(e){O(v(this,dt),e)}},dt=new WeakMap,he),ye.v=()=>It.current=!0);function on(t){Object.assign(R,t)}const sn=new Set(["icon","shortcut icon","apple-touch-icon"]);let Y=null;const j=pe(me)??{},Z=pe(ge)??{},C={url:re({}),page:re({}),navigating:Dt(null),updated:tn()};function Gt(t){j[t]=q()}function ln(t,e){let n=t+1;for(;j[n];)delete j[n],n+=1;for(n=e+1;Z[n];)delete Z[n],n+=1}function tt(t,e=!1){return e?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function ke(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(U||"/");t&&await t.update()}}function oe(){}let Wt,$t,_t,P,Ct,E;const wt=[],vt=[];let y=null;function jt(){var t;(t=y==null?void 0:y.fork)==null||t.then(e=>e==null?void 0:e.discard()),y=null}const pt=new Map,Ee=new Set,cn=new Set,J=new Set;let _={branch:[],error:null,url:null},Se=!1,yt=!1,se=!0,et=!1,z=!1,Re=!1,Yt=!1,xe,k,L,V;const bt=new Set,ie=new Map;async function Pn(t,e,n){var s,o,i,l,c;(s=globalThis.__sveltekit_m287x4)!=null&&s.data&&globalThis.__sveltekit_m287x4.data,document.URL!==location.href&&(location.href=location.href),E=t,await((i=(o=t.hooks).init)==null?void 0:i.call(o)),Wt=Je(t),P=document.documentElement,Ct=e,$t=t.nodes[0],_t=t.nodes[1],$t(),_t(),k=(l=history.state)==null?void 0:l[M],L=(c=history.state)==null?void 0:c[X],k||(k=L=Date.now(),history.replaceState({...history.state,[M]:k,[X]:L},""));const a=j[k];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await kn(Ct,n)):(await F({type:"enter",url:Mt(E.hash?Rn(new URL(location.href)):location.href),replace_state:!0}),r()),bn()}function fn(){wt.length=0,Yt=!1}function Le(t){vt.some(e=>e==null?void 0:e.snapshot)&&(Z[t]=vt.map(e=>{var n;return(n=e==null?void 0:e.snapshot)==null?void 0:n.capture()}))}function Ue(t){var e;(e=Z[t])==null||e.forEach((n,a)=>{var r,s;(s=(r=vt[a])==null?void 0:r.snapshot)==null||s.restore(n)})}function le(){Gt(k),ee(me,j),Le(L),ee(ge,Z)}async function Ae(t,e,n,a){let r;e.invalidateAll&&jt(),await F({type:"goto",url:Mt(t),keepfocus:e.keepFocus,noscroll:e.noScroll,replace_state:e.replaceState,state:e.state,redirect_count:n,nav_token:a,accept:()=>{e.invalidateAll&&(Yt=!0,r=[...ie.keys()]),e.invalidate&&e.invalidate.forEach(yn)}}),e.invalidateAll&>().then(gt).then(()=>{ie.forEach(({resource:s},o)=>{var i;r!=null&&r.includes(o)&&((i=s.refresh)==null||i.call(s))})})}async function un(t){if(t.id!==(y==null?void 0:y.id)){jt();const e={};bt.add(e),y={id:t.id,token:e,promise:Ie({...t,preload:e}).then(n=>(bt.delete(e),n.type==="loaded"&&n.state.error&&jt(),n)),fork:null}}return y.promise}async function Ot(t){var n;const e=(n=await xt(t,!1))==null?void 0:n.route;e&&await Promise.all([...e.layouts,e.leaf].filter(Boolean).map(a=>a[1]()))}async function Te(t,e,n){var s;const a={params:_.params,route:{id:((s=_.route)==null?void 0:s.id)??null},url:new URL(location.href)};_={...t.state,nav:a};const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(R,t.props.page),xe=new E.root({target:e,props:{...t.props,stores:C,components:vt},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ue(L),n){const o={from:null,to:{...a,scroll:j[k]??q()},willUnload:!1,type:"enter",complete:Promise.resolve()};J.forEach(i=>i(o))}yt=!0}async function kt({url:t,params:e,branch:n,errors:a,status:r,error:s,route:o,form:i}){let l="never";if(U&&(t.pathname===U||t.pathname===U+"/"))l="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(l=f.slash);t.pathname=Ne(t.pathname,l),t.search=t.search;const c={type:"loaded",state:{url:t,params:e,branch:n,error:s,route:o},props:{constructors:nn(n).map(f=>f.node.component),page:Qt(R)}};i!==void 0&&(c.props.form=i);let d={},u=!R,w=0;for(let f=0;fi(new URL(o))))return!0;return!1}function Ht(t,e){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?e??null:null}function pn(t,e){if(!t)return new Set(e.searchParams.keys());const n=new Set([...t.searchParams.keys(),...e.searchParams.keys()]);for(const a of n){const r=t.searchParams.getAll(a),s=e.searchParams.getAll(a);r.every(o=>s.includes(o))&&s.every(o=>r.includes(o))&&n.delete(a)}return n}function gn({error:t,url:e,route:n,params:a}){return{type:"loaded",state:{error:t,url:e,route:n,params:a,branch:[]},props:{page:Qt(R),constructors:[]}}}async function Ie({id:t,invalidating:e,url:n,params:a,route:r,preload:s}){if((y==null?void 0:y.id)===t)return bt.delete(y.token),y.promise;const{errors:o,layouts:i,leaf:l}=r,c=[...i,l];o.forEach(h=>h==null?void 0:h().catch(()=>{})),c.forEach(h=>h==null?void 0:h[1]().catch(()=>{}));const d=_.url?t!==Et(_.url):!1,u=_.route?r.id!==_.route.id:!1,w=pn(_.url,n);let p=!1;const f=c.map(async(h,g)=>{var $;if(!h)return;const b=_.branch[g];return h[1]===(b==null?void 0:b.loader)&&!hn(p,u,d,w,($=b.universal)==null?void 0:$.uses,a)?b:(p=!0,zt({loader:h[1],url:n,params:a,route:r,parent:async()=>{var ht;const N={};for(let B=0;B{});const m=[];for(let h=0;hPromise.resolve({}),server_data_node:Ht(s)}),i={node:await _t(),loader:_t,universal:null,server:null,data:null};return kt({url:n,params:r,branch:[o,i],status:t,error:e,errors:[],route:null})}catch(o){if(o instanceof qt)return Ae(new URL(o.location,location.href),{},0);throw o}}async function _n(t){const e=t.href;if(pt.has(e))return pt.get(e);let n;try{const a=(async()=>{let r=await E.hooks.reroute({url:new URL(t),fetch:async(s,o)=>dn(s,o,t).promise})??t;if(typeof r=="string"){const s=new URL(t);E.hash?s.hash=r:s.pathname=r,r=s}return r})();pt.set(e,a),n=await a}catch{pt.delete(e);return}return n}async function xt(t,e){if(t&&!Rt(t,U,E.hash)){const n=await _n(t);if(!n)return;const a=wn(n);for(const r of Wt){const s=r.exec(a);if(s)return{id:Et(t),invalidating:e,route:r,params:Ve(s),url:t}}}}function wn(t){return De(E.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(U.length))||"/"}function Et(t){return(E.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Oe({url:t,type:e,intent:n,delta:a,event:r,scroll:s}){let o=!1;const i=Xt(_,n,t,e,s??null);a!==void 0&&(i.navigation.delta=a),r!==void 0&&(i.navigation.event=r);const l={...i.navigation,cancel:()=>{o=!0,i.reject(new Error("navigation cancelled"))}};return et||Ee.forEach(c=>c(l)),o?null:i}async function F({type:t,url:e,popped:n,keepfocus:a,noscroll:r,replace_state:s,state:o={},redirect_count:i=0,nav_token:l={},accept:c=oe,block:d=oe,event:u}){var B;const w=V;V=l;const p=await xt(e,!1),f=t==="enter"?Xt(_,p,e,t):Oe({url:e,type:t,delta:n==null?void 0:n.delta,intent:p,scroll:n==null?void 0:n.scroll,event:u});if(!f){d(),V===l&&(V=w);return}const m=k,h=L;c(),et=!0,yt&&f.navigation.type!=="enter"&&C.navigating.set(Q.current=f.navigation);let g=p&&await Ie(p);if(!g){if(Rt(e,U,E.hash))return await tt(e,s);g=await Pe(e,{id:null},await nt(new Bt(404,"Not Found",`Not found: ${e.pathname}`),{url:e,params:{},route:{id:null}}),404,s)}if(e=(p==null?void 0:p.url)||e,V!==l)return f.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(i<20){await F({type:t,url:new URL(g.location,e),popped:n,keepfocus:a,noscroll:r,replace_state:s,state:o,redirect_count:i+1,nav_token:l}),f.fulfil(void 0);return}g=await Jt({status:500,error:await nt(new Error("Redirect loop"),{url:e,params:{},route:{id:null}}),url:e,route:{id:null}})}else g.props.page.status>=400&&await C.updated.check()&&(await ke(),await tt(e,s));if(fn(),Gt(m),Le(h),g.props.page.url.pathname!==e.pathname&&(e.pathname=g.props.page.url.pathname),o=n?n.state:o,!n){const S=s?0:1,G={[M]:k+=S,[X]:L+=S,[_e]:o};(s?history.replaceState:history.pushState).call(history,G,"",e),s||ln(k,L)}const b=p&&(y==null?void 0:y.id)===p.id?y.fork:null;y=null,g.props.page.state=o;let x;if(yt){const S=(await Promise.all(Array.from(cn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(S.length>0){let W=function(){S.forEach(Ut=>{J.delete(Ut)})};S.push(W),S.forEach(Ut=>{J.add(Ut)})}const G=f.navigation.to;_={...g.state,nav:{params:G.params,route:G.route,url:G.url}},g.props.page&&(g.props.page.url=e);const Lt=b&&await b;Lt?x=Lt.commit():(Y=null,xe.$set(g.props),Y&&Object.assign(g.props.page,Y),on(g.props.page),x=(B=je)==null?void 0:B()),Re=!0}else await Te(g,Ct,!1);const{activeElement:$}=document;await x,await gt(),await gt();let N=null;if(se){const S=n?n.scroll:r?q():null;S?scrollTo(S.x,S.y):(N=e.hash&&document.getElementById($e(e)))?N.scrollIntoView():scrollTo(0,0)}const ht=document.activeElement!==$&&document.activeElement!==document.body;!a&&!ht&&Sn(e,!N),se=!0,g.props.page&&(Y&&Object.assign(g.props.page,Y),Object.assign(R,g.props.page)),et=!1,t==="popstate"&&Ue(L),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=q()),J.forEach(S=>S(f.navigation)),C.navigating.set(Q.current=null)}async function Pe(t,e,n,a,r){return t.origin===St&&t.pathname===location.pathname&&!Se?await Jt({status:a,error:n,url:t,route:e}):await tt(t,r)}function vn(){let t,e={element:void 0,href:void 0},n;P.addEventListener("mousemove",i=>{const l=i.target;clearTimeout(t),t=setTimeout(()=>{s(l,D.hover)},20)});function a(i){i.defaultPrevented||s(i.composedPath()[0],D.tap)}P.addEventListener("mousedown",a),P.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(i=>{for(const l of i)l.isIntersecting&&(Ot(new URL(l.target.href)),r.unobserve(l.target))},{threshold:0});async function s(i,l){const c=ve(i,P),d=c===e.element&&(c==null?void 0:c.href)===e.href&&l>=n;if(!c||d)return;const{url:u,external:w,download:p}=Pt(c,U,E.hash);if(w||p)return;const f=mt(c),m=u&&Et(_.url)===Et(u);if(!(f.reload||m))if(l<=f.preload_data){e={element:c,href:c.href},n=D.tap;const h=await xt(u,!1);if(!h)return;un(h)}else l<=f.preload_code&&(e={element:c,href:c.href},n=l,Ot(u))}function o(){r.disconnect();for(const i of P.querySelectorAll("a")){const{url:l,external:c,download:d}=Pt(i,U,E.hash);if(c||d)continue;const u=mt(i);u.reload||(u.preload_code===D.viewport&&r.observe(i),u.preload_code===D.eager&&Ot(l))}}J.add(o),o()}function nt(t,e){if(t instanceof Vt)return t.body;const n=Ft(t),a=rn(t);return E.hooks.handleError({error:t,event:e,status:n,message:a})??{message:a}}function $n(t,e={}){return t=new URL(Mt(t)),t.origin!==St?Promise.reject(new Error("goto: invalid URL")):Ae(t,e,0)}function yn(t){if(typeof t=="function")wt.push(t);else{const{href:e}=new URL(t,location.href);wt.push(n=>n.href===e)}}function bn(){var e;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(le(),!et){const r=Xt(_,void 0,null,"leave"),s={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Ee.forEach(o=>o(s))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&le()}),(e=navigator.connection)!=null&&e.saveData||vn(),P.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=ve(n.composedPath()[0],P);if(!a)return;const{url:r,external:s,target:o,download:i}=Pt(a,U,E.hash);if(!r)return;if(o==="_parent"||o==="_top"){if(window.parent!==window)return}else if(o&&o!=="_self")return;const l=mt(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||i)return;const[d,u]=(E.hash?r.hash.replace(/^#/,""):r.href).split("#"),w=d===At(location);if(s||l.reload&&(!w||!u)){Oe({url:r,type:"link",event:n})?et=!0:n.preventDefault();return}if(u!==void 0&&w){const[,p]=_.url.href.split("#");if(p===u){if(n.preventDefault(),u===""||u==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const f=a.ownerDocument.getElementById(decodeURIComponent(u));f&&(f.scrollIntoView(),f.focus())}return}if(z=!0,Gt(k),t(r),!l.replace_state)return;z=!1}n.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await F({type:"link",url:r,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??r.href===location.href,event:n})}),P.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const i=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(Rt(i,U,!1))return;const l=n.target,c=mt(l);if(c.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(l,r);i.search=new URLSearchParams(d).toString(),F({type:"form",url:i,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??i.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Nt){if((a=n.state)!=null&&a[M]){const r=n.state[M];if(V={},r===k)return;const s=j[r],o=n.state[_e]??{},i=new URL(n.state[Ze]??location.href),l=n.state[X],c=_.url?At(location)===At(_.url):!1;if(l===L&&(Re||c)){o!==R.state&&(R.state=o),t(i),j[k]=q(),s&&scrollTo(s.x,s.y),k=r;return}const u=r-k;await F({type:"popstate",url:i,popped:{state:o,scroll:s,delta:u},accept:()=>{k=r,L=l},block:()=>{history.go(-u)},nav_token:V,event:n})}else if(!z){const r=new URL(location.href);t(r),E.hash&&location.reload()}}}),addEventListener("hashchange",()=>{z&&(z=!1,history.replaceState({...history.state,[M]:++k,[X]:L},"",location.href))});for(const n of document.querySelectorAll("link"))sn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&C.navigating.set(Q.current=null)});function t(n){_.url=R.url=n,C.page.set(Qt(R)),C.page.notify()}}async function kn(t,{status:e=200,error:n,node_ids:a,params:r,route:s,server_route:o,data:i,form:l}){Se=!0;const c=new URL(location.href);let d;({params:r={},route:s={id:null}}=await xt(c,!1)||{}),d=Wt.find(({id:p})=>p===s.id);let u,w=!0;try{const p=a.map(async(m,h)=>{const g=i[h];return g!=null&&g.uses&&(g.uses=En(g.uses)),zt({loader:E.nodes[m],url:c,params:r,route:s,parent:async()=>{const b={};for(let x=0;x{const i=history.state;Nt=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(i,"",t),e&&scrollTo(s,o),Nt=!1})}else{const s=document.body,o=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),o!==null?s.setAttribute("tabindex",o):s.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const s=[];for(let o=0;o{if(r.rangeCount===s.length){for(let o=0;o{s=u,o=w});return i.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url,scroll:q()},to:n&&{params:(e==null?void 0:e.params)??null,route:{id:((d=e==null?void 0:e.route)==null?void 0:d.id)??null},url:n,scroll:r},willUnload:!e,type:a,complete:i},fulfil:s,reject:o}}function Qt(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Rn(t){const e=new URL(t);return e.hash=decodeURIComponent(t.hash),e}function $e(t){let e;if(E.hash){const[,,n]=t.hash.split("#",3);e=n??""}else e=t.hash.slice(1);return decodeURIComponent(e)}export{Pn as a,$n as g,An as l,R as p,C as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CZnXUJhL.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CZnXUJhL.js
deleted file mode 100644
index 0fb8dc1..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CZnXUJhL.js
+++ /dev/null
@@ -1 +0,0 @@
-import{N as V,l as fe,_ as ne,Q as H,V as Y,X as ie,a0 as le,g as K,a1 as ue,a2 as se,a3 as P,U as q,W as L,R as oe,a4 as de,a5 as $,H as ve,a6 as w,a7 as U,a8 as te,a9 as ce,aa as pe,J as ge,ab as J,ac as he,ad as _e,ae as Ee,af as j,ag as me,ah as Te,ai as re,aj as ae,ak as B,Z as we,al as Ae,am as Ce,an as Se,ao as Ne,ap as Ie,T as Re}from"./DKemW7Dm.js";function Me(e,r){return r}function ke(e,r,u){for(var s=[],c=r.length,l,i=r.length,p=0;p{if(l){if(l.pending.delete(E),l.done.add(E),l.pending.size===0){var d=e.outrogroups;X(e,J(l.done)),d.delete(l),d.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var f=s.length===0&&u!==null;if(f){var t=u,a=t.parentNode;Se(a),a.append(t),e.items.clear()}X(e,r,!f)}else l={pending:new Set(r),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(l)}function X(e,r,u=!0){var s;if(e.pending.size>0){s=new Set;for(const i of e.pending.values())for(const p of i)s.add(e.items.get(p).e)}for(var c=0;c{var v=u();return ge(v)?v:v==null?[]:J(v)}),d,m=new Map,T=!0;function R(v){(C.effect.f&Te)===0&&(C.pending.delete(v),C.fallback=a,xe(C,d,i,r,s),a!==null&&(d.length===0?(a.f&w)===0?re(a):(a.f^=w,b(a,null,i)):ae(a,()=>{a=null})))}function n(v){C.pending.delete(v)}var o=fe(()=>{d=K(E);var v=d.length;let h=!1;if(H){var O=ue(i)===se;O!==(v===0)&&(i=P(),Y(i),q(!1),h=!0)}for(var S=new Set,g=ve,x=ce(),N=0;Nl(i)):(a=U(()=>l(ee??(ee=V()))),a.f|=w)),v>S.size&&te(),H&&v>0&&Y(P()),!T)if(m.set(g,S),x){for(const[F,z]of p)S.has(F)||g.skip_effect(z.e);g.oncommit(R),g.ondiscard(n)}else R(g);h&&q(!0),K(E)}),C={effect:o,items:p,pending:m,outrogroups:null,fallback:a};T=!1,H&&(i=L)}function M(e){for(;e!==null&&(e.f&Ae)===0;)e=e.next;return e}function xe(e,r,u,s,c){var D,k,_,F,z,Q,W,Z,y;var l=(s&Ce)!==0,i=r.length,p=e.items,f=M(e.effect.first),t,a=null,E,d=[],m=[],T,R,n,o;if(l)for(o=0;o0){var N=(s&ne)!==0&&i===0?u:null;if(l){for(o=0;o{var A,G;if(E!==void 0)for(n of E)(G=(A=n.nodes)==null?void 0:A.a)==null||G.apply()})}function De(e,r,u,s,c,l,i,p){var f=(i&he)!==0?(i&_e)===0?Ee(u,!1,!1):j(u):null,t=(i&me)!==0?j(c):null;return{v:f,i:t,e:U(()=>(l(r,f??u,t??c,p),()=>{e.delete(s)}))}}function b(e,r,u){if(e.nodes)for(var s=e.nodes.start,c=e.nodes.end,l=r&&(r.f&w)===0?r.nodes.start:u;s!==null;){var i=Re(s);if(l.before(s),s===c)return;s=i}}function I(e,r,u){r===null?e.effect.first=u:r.next=u,u===null?e.effect.last=r:u.prev=r}export{be as e,Me as i};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CcoMVVg8.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CcoMVVg8.js
deleted file mode 100644
index b6cbd52..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CcoMVVg8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{w as n,j as r}from"./DKemW7Dm.js";const o="dw_theme";function s(){if(typeof localStorage<"u"){const e=localStorage.getItem(o);if(e==="light"||e==="dark"||e==="system")return e}return"system"}const t=n(s());t.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(o,e)});const i=r(t,e=>e==="system"?typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e);function d(e){typeof document<"u"&&document.documentElement.setAttribute("data-theme",e)}function c(e){t.set(e)}export{d as a,i as r,c as s,t};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CexodXHl.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CexodXHl.js
deleted file mode 100644
index 168bf7f..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CexodXHl.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as J,s as d,a as e,g as K,b as f,f as v,c as N}from"./BJdXET8u.js";import{c as n,r as l,s as c,t as h,h as O}from"./DKemW7Dm.js";import{p,i as x}from"./BSXRhUWv.js";import{s as P}from"./kfynmD3Z.js";var Q=v(' '),R=v(' '),T=v(' '),U=v(' '),W=v(' '),X=v(' '),Y=f('
'),$=f(' '),tt=f(' '),rt=f('');function it(B,o){const _=p(o,"description",3,""),u=p(o,"actionLabel",3,""),y=p(o,"actionHref",3,""),s=p(o,"icon",3,"projects");var m=rt(),g=n(m),C=n(g);{var H=t=>{var r=Q();e(t,r)},A=t=>{var r=R();e(t,r)},L=t=>{var r=T();e(t,r)},E=t=>{var r=U();e(t,r)},V=t=>{var r=W();e(t,r)},Z=t=>{var r=X();e(t,r)};x(C,t=>{s()==="projects"?t(H):s()==="instances"?t(A,1):s()==="deploys"?t(L,2):s()==="registries"?t(E,3):s()==="volumes"?t(V,4):s()==="users"&&t(Z,5)})}l(g);var k=c(g,2),z=n(k,!0);l(k);var M=c(k,2);{var S=t=>{var r=Y(),b=n(r,!0);l(r),h(()=>d(b,_())),e(t,r)};x(M,t=>{_()&&t(S)})}var q=c(M,2);{var D=t=>{var r=K(),b=O(r);{var F=i=>{var a=$(),w=c(n(a));l(a),h(()=>{P(a,"href",y()),d(w,` ${u()??""}`)}),e(i,a)},G=i=>{var a=tt(),w=c(n(a));l(a),h(()=>d(w,` ${u()??""}`)),N("click",a,function(...I){var j;(j=o.onaction)==null||j.apply(this,I)}),e(i,a)};x(b,i=>{y()?i(F):o.onaction&&i(G,1)})}e(t,r)};x(q,t=>{u()&&t(D)})}l(m),h(()=>d(z,o.title)),e(B,m)}J(["click"]);export{it as E};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CjZL2MYp.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CjZL2MYp.js
deleted file mode 100644
index 5a0597e..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CjZL2MYp.js
+++ /dev/null
@@ -1 +0,0 @@
-import{w as l}from"./DKemW7Dm.js";function p(){const{subscribe:i,update:s}=l([]);let u=0;function e(t,n="info",r=5e3){const o=`toast-${++u}-${Date.now()}`,b={id:o,message:t,type:n,duration:r};return s(d=>[...d,b]),r>0&&setTimeout(()=>c(o),r),o}function c(t){s(n=>n.filter(r=>r.id!==t))}function f(t,n=5e3){return e(t,"success",n)}function a(t,n=7e3){return e(t,"error",n)}function w(t,n=5e3){return e(t,"warning",n)}function m(t,n=5e3){return e(t,"info",n)}return{subscribe:i,add:e,remove:c,success:f,error:a,warning:w,info:m}}const T=p();export{T as t};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CnPWu_ZO.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CnPWu_ZO.js
deleted file mode 100644
index f466a90..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CnPWu_ZO.js
+++ /dev/null
@@ -1 +0,0 @@
-import{l as p,E as t}from"./DKemW7Dm.js";import{B as c}from"./BSXRhUWv.js";function m(r,s,...a){var e=new c(r);p(()=>{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{m as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CpnAtA5t.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CpnAtA5t.js
deleted file mode 100644
index efa5e72..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CpnAtA5t.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as c}from"./BJdXET8u.js";import{t as p}from"./DKemW7Dm.js";import{s,a as h,c as m}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var f=c(' ');function w(a,r){const o=e(r,"size",3,20),i=e(r,"class",3,"");var t=f();p(()=>{s(t,"width",o()),s(t,"height",o()),h(t,0,m(i()))}),n(a,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/CvtQ6g1S.js b/web/.svelte-kit/output/client/_app/immutable/chunks/CvtQ6g1S.js
deleted file mode 100644
index 091d1a4..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/CvtQ6g1S.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as c,f as n}from"./BJdXET8u.js";import{t as p}from"./DKemW7Dm.js";import{s as o,a as l,c as h}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var m=n(' ');function w(a,r){const s=e(r,"size",3,20),i=e(r,"class",3,"");var t=m();p(()=>{o(t,"width",s()),o(t,"height",s()),l(t,0,h(i()))}),c(a,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DELaSNrV.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DELaSNrV.js
deleted file mode 100644
index 26b96d2..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DELaSNrV.js
+++ /dev/null
@@ -1 +0,0 @@
-import{s as e}from"./CWhLh9u1.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DKemW7Dm.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DKemW7Dm.js
deleted file mode 100644
index 3a21e17..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DKemW7Dm.js
+++ /dev/null
@@ -1 +0,0 @@
-var Tt=Object.defineProperty;var Sn=e=>{throw TypeError(e)};var At=(e,n,t)=>n in e?Tt(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var se=(e,n,t)=>At(e,typeof n!="symbol"?n+"":n,t),nn=(e,n,t)=>n.has(e)||Sn("Cannot "+t);var _=(e,n,t)=>(nn(e,n,"read from private field"),t?t.call(e):n.get(e)),I=(e,n,t)=>n.has(e)?Sn("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,t),Ee=(e,n,t,r)=>(nn(e,n,"write to private field"),r?r.call(e,t):n.set(e,t),t),D=(e,n,t)=>(nn(e,n,"access private method"),t);var St=Array.isArray,Rt=Array.prototype.indexOf,Ne=Array.prototype.includes,Er=Array.from,br=Object.defineProperty,Ce=Object.getOwnPropertyDescriptor,Nt=Object.getOwnPropertyDescriptors,Ot=Object.prototype,xt=Array.prototype,jn=Object.getPrototypeOf,Rn=Object.isExtensible;const ue=()=>{};function mr(e){return e()}function Yn(e){for(var n=0;n{e=r,n=s});return{promise:t,resolve:e,reject:n}}function Tr(e,n){if(Array.isArray(e))return e;if(!(Symbol.iterator in e))return Array.from(e);const t=[];for(const r of e)if(t.push(r),t.length===n)break;return t}const T=2,ve=4,je=8,qn=1<<24,te=16,z=32,de=64,kt=128,F=512,b=1024,x=2048,G=4096,V=8192,B=16384,ge=32768,Nn=1<<25,Ge=65536,On=1<<17,It=1<<18,Ye=1<<19,Un=1<<20,Ar=1<<25,he=65536,sn=1<<21,_n=1<<22,J=1<<23,ce=Symbol("$state"),Sr=Symbol("legacy props"),Rr=Symbol(""),$=new class extends Error{constructor(){super(...arguments);se(this,"name","StaleReactionError");se(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Ln;const Or=!!((Ln=globalThis.document)!=null&&Ln.contentType)&&globalThis.document.contentType.includes("xml"),Qe=3,Vn=8;function Dt(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function xr(e,n,t){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Pt(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Ct(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Mt(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Ft(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function kr(){throw new Error("https://svelte.dev/e/hydration_failed")}function Ir(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Lt(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function jt(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Yt(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Dr(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Pr=1,Cr=2,Mr=4,Fr=8,Lr=16,jr=1,Yr=2,Hr=4,qr=8,Ur=16,Vr=1,Br=2,Ht="[",qt="[!",zr="[?",Ut="]",vn={},S=Symbol(),Vt="http://www.w3.org/1999/xhtml",Gr="http://www.w3.org/2000/svg",$r="http://www.w3.org/1998/Math/MathML";function dn(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function Kr(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Xr(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let ee=!1;function Zr(e){ee=e}let m;function Oe(e){if(e===null)throw dn(),vn;return m=e}function Wr(){return Oe(re(m))}function Jr(e){if(ee){if(re(m)!==null)throw dn(),vn;m=e}}function Qr(e=1){if(ee){for(var n=e,t=m;n--;)t=re(t);m=t}}function es(e=!0){for(var n=0,t=m;;){if(t.nodeType===Vn){var r=t.data;if(r===Ut){if(n===0)return t;n-=1}else(r===Ht||r===qt||r[0]==="["&&!isNaN(Number(r.slice(1))))&&(n+=1)}var s=re(t);e&&t.remove(),t=s}}function ns(e){if(!e||e.nodeType!==Vn)throw dn(),vn;return e.data}function Bn(e){return e===this.v}function zn(e,n){return e!=e?n==n:e!==n||e!==null&&typeof e=="object"||typeof e=="function"}function Gn(e){return!zn(e,this.v)}let en=!1;function ts(){en=!0}let O=null;function $e(e){O=e}function rs(e,n=!1,t){O={p:O,i:!1,c:null,e:null,s:e,x:null,r:y,l:en&&!n?{s:null,u:null,$:[]}:null}}function ss(e){var n=O,t=n.e;if(t!==null){n.e=null;for(var r of t)ct(r)}return n.i=!0,O=n.p,{}}function He(){return!en||O!==null&&O.l===null}let le=[];function $n(){var e=le;le=[],Yn(e)}function xn(e){if(le.length===0&&!Me){var n=le;queueMicrotask(()=>{n===le&&$n()})}le.push(e)}function Bt(){for(;le.length>0;)$n()}function zt(e){var n=y;if(n===null)return h.f|=J,e;if((n.f&ge)===0&&(n.f&ve)===0)throw e;Ke(e,n)}function Ke(e,n){for(;n!==null;){if((n.f&kt)!==0){if((n.f&ge)===0)throw e;try{n.b.error(e);return}catch(t){e=t}}n=n.parent}throw e}const Gt=-7169;function g(e,n){e.f=e.f&Gt|n}function hn(e){(e.f&F)!==0||e.deps===null?g(e,b):g(e,G)}function Kn(e){if(e!==null)for(const n of e)(n.f&T)===0||(n.f&he)===0||(n.f^=he,Kn(n.deps))}function $t(e,n,t){(e.f&x)!==0?n.add(e):(e.f&G)!==0&&t.add(e),Kn(e.deps),g(e,b)}function Xn(e,n,t){if(e==null)return n(void 0),t&&t(void 0),ue;const r=yr(()=>e.subscribe(n,t));return r.unsubscribe?()=>r.unsubscribe():r}const be=[];function Kt(e,n){return{subscribe:Xt(e,n).subscribe}}function Xt(e,n=ue){let t=null;const r=new Set;function s(a){if(zn(e,a)&&(e=a,t)){const f=!be.length;for(const l of r)l[1](),be.push(l,e);if(f){for(let l=0;l{r.delete(l),r.size===0&&t&&(t(),t=null)}}return{set:s,update:i,subscribe:o}}function is(e,n,t){const r=!Array.isArray(e),s=r?[e]:e;if(!s.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const i=n.length<2;return Kt(t,(o,a)=>{let f=!1;const l=[];let c=0,v=ue;const u=()=>{if(c)return;v();const d=n(r?l[0]:l,o,a);i?o(d):v=typeof d=="function"?d:ue},w=s.map((d,A)=>Xn(d,N=>{l[A]=N,c&=~(1<{c|=1< n=t)(),n}const Z=new Set;let p=null,R=null,ln=null,Me=!1,tn=!1,me=null,Ue=null;var kn=0;let Zt=1;var Ae,Se,K,q,Le,C,ae,X,U,Re,oe,E,Ve,Zn,Be,fn,an,Wn;const Je=class Je{constructor(){I(this,E);se(this,"id",Zt++);se(this,"current",new Map);se(this,"previous",new Map);I(this,Ae,new Set);I(this,Se,new Set);I(this,K,new Map);I(this,q,new Map);I(this,Le,null);I(this,C,[]);I(this,ae,new Set);I(this,X,new Set);I(this,U,new Map);se(this,"is_fork",!1);I(this,Re,!1);I(this,oe,new Set)}skip_effect(n){_(this,U).has(n)||_(this,U).set(n,{d:[],m:[]})}unskip_effect(n){var t=_(this,U).get(n);if(t){_(this,U).delete(n);for(var r of t.d)g(r,x),this.schedule(r);for(r of t.m)g(r,G),this.schedule(r)}}capture(n,t,r=!1){t!==S&&!this.previous.has(n)&&this.previous.set(n,t),(n.f&J)===0&&(this.current.set(n,[n.v,r]),R==null||R.set(n,n.v))}activate(){p=this}deactivate(){p=null,R=null}flush(){try{tn=!0,p=this,D(this,E,Be).call(this)}finally{kn=0,ln=null,me=null,Ue=null,tn=!1,p=null,R=null,Q.clear()}}discard(){for(const n of _(this,Se))n(this);_(this,Se).clear(),Z.delete(this)}increment(n,t){let r=_(this,K).get(t)??0;if(_(this,K).set(t,r+1),n){let s=_(this,q).get(t)??0;_(this,q).set(t,s+1)}}decrement(n,t,r){let s=_(this,K).get(t)??0;if(s===1?_(this,K).delete(t):_(this,K).set(t,s-1),n){let i=_(this,q).get(t)??0;i===1?_(this,q).delete(t):_(this,q).set(t,i-1)}_(this,Re)||r||(Ee(this,Re,!0),xn(()=>{Ee(this,Re,!1),this.flush()}))}transfer_effects(n,t){for(const r of n)_(this,ae).add(r);for(const r of t)_(this,X).add(r);n.clear(),t.clear()}oncommit(n){_(this,Ae).add(n)}ondiscard(n){_(this,Se).add(n)}settled(){return(_(this,Le)??Ee(this,Le,Hn())).promise}static ensure(){if(p===null){const n=p=new Je;tn||(Z.add(p),Me||xn(()=>{p===n&&n.flush()}))}return p}apply(){{R=null;return}}schedule(n){var s;if(ln=n,(s=n.b)!=null&&s.is_pending&&(n.f&(ve|je|qn))!==0&&(n.f&ge)===0){n.b.defer_effect(n);return}for(var t=n;t.parent!==null;){t=t.parent;var r=t.f;if(me!==null&&t===y&&(h===null||(h.f&T)===0))return;if((r&(de|z))!==0){if((r&b)===0)return;t.f^=b}}_(this,C).push(t)}};Ae=new WeakMap,Se=new WeakMap,K=new WeakMap,q=new WeakMap,Le=new WeakMap,C=new WeakMap,ae=new WeakMap,X=new WeakMap,U=new WeakMap,Re=new WeakMap,oe=new WeakMap,E=new WeakSet,Ve=function(){return this.is_fork||_(this,q).size>0},Zn=function(){for(const r of _(this,oe))for(const s of _(r,q).keys()){for(var n=!1,t=s;t.parent!==null;){if(_(this,U).has(t)){n=!0;break}t=t.parent}if(!n)return!0}return!1},Be=function(){var a,f;if(kn++>1e3&&(Z.delete(this),Jt()),!D(this,E,Ve).call(this)){for(const l of _(this,ae))_(this,X).delete(l),g(l,x),this.schedule(l);for(const l of _(this,X))g(l,G),this.schedule(l)}const n=_(this,C);Ee(this,C,[]),this.apply();var t=me=[],r=[],s=Ue=[];for(const l of n)try{D(this,E,fn).call(this,l,t,r)}catch(c){throw nt(l),c}if(p=null,s.length>0){var i=Je.ensure();for(const l of s)i.schedule(l)}if(me=null,Ue=null,D(this,E,Ve).call(this)||D(this,E,Zn).call(this)){D(this,E,an).call(this,r),D(this,E,an).call(this,t);for(const[l,c]of _(this,U))et(l,c)}else{_(this,K).size===0&&Z.delete(this),_(this,ae).clear(),_(this,X).clear();for(const l of _(this,Ae))l(this);_(this,Ae).clear(),In(r),In(t),(a=_(this,Le))==null||a.resolve()}var o=p;if(_(this,C).length>0){const l=o??(o=this);_(l,C).push(..._(this,C).filter(c=>!_(l,C).includes(c)))}o!==null&&(Z.add(o),D(f=o,E,Be).call(f)),Z.has(this)||D(this,E,Wn).call(this)},fn=function(n,t,r){n.f^=b;for(var s=n.first;s!==null;){var i=s.f,o=(i&(z|de))!==0,a=o&&(i&b)!==0,f=a||(i&V)!==0||_(this,U).has(s);if(!f&&s.fn!==null){o?s.f^=b:(i&ve)!==0?t.push(s):qe(s)&&((i&te)!==0&&_(this,X).add(s),ke(s));var l=s.first;if(l!==null){s=l;continue}}for(;s!==null;){var c=s.next;if(c!==null){s=c;break}s=s.parent}}},an=function(n){for(var t=0;t!this.current.has(w));if(s.length===0)n&&u.discard();else if(t.length>0){u.activate();var i=new Set,o=new Map;for(var a of t)Jn(a,s,i,o);if(_(u,C).length>0){u.apply();for(var f of _(u,C))D(l=u,E,fn).call(l,f,[],[]);Ee(u,C,[])}u.deactivate()}}for(const u of Z)_(u,oe).has(this)&&(_(u,oe).delete(this),_(u,oe).size===0&&!D(c=u,E,Ve).call(c)&&(u.activate(),D(v=u,E,Be).call(v)))};let pe=Je;function Wt(e){var n=Me;Me=!0;try{for(var t;;){if(Bt(),p===null)return t;p.flush()}}finally{Me=n}}function Jt(){try{Ft()}catch(e){Ke(e,ln)}}let j=null;function In(e){var n=e.length;if(n!==0){for(var t=0;t0)){Q.clear();for(const s of j){if((s.f&(B|V))!==0)continue;const i=[s];let o=s.parent;for(;o!==null;)j.has(o)&&(j.delete(o),i.push(o)),o=o.parent;for(let a=i.length-1;a>=0;a--){const f=i[a];(f.f&(B|V))===0&&ke(f)}}j.clear()}}j=null}}function Jn(e,n,t,r){if(!t.has(e)&&(t.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&T)!==0?Jn(s,n,t,r):(i&(_n|te))!==0&&(i&x)===0&&Qn(s,n,r)&&(g(s,x),pn(s))}}function Qn(e,n,t){const r=t.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Ne.call(n,s))return!0;if((s.f&T)!==0&&Qn(s,n,t))return t.set(s,!0),!0}return t.set(e,!1),!1}function pn(e){p.schedule(e)}function et(e,n){if(!((e.f&z)!==0&&(e.f&b)!==0)){(e.f&x)!==0?n.d.push(e):(e.f&G)!==0&&n.m.push(e),g(e,b);for(var t=e.first;t!==null;)et(t,n),t=t.next}}function nt(e){g(e,b);for(var n=e.first;n!==null;)nt(n),n=n.next}function tt(e,n,t,r){const s=He()?yn:nr;var i=e.filter(u=>!u.settled);if(t.length===0&&i.length===0){r(n.map(s));return}var o=y,a=Qt(),f=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(u=>u.promise)):null;function l(u){a();try{r(u)}catch(w){(o.f&B)===0&&Ke(w,o)}Xe()}if(t.length===0){f.then(()=>l(n.map(s)));return}var c=wn();function v(){Promise.all(t.map(u=>er(u))).then(u=>l([...n.map(s),...u])).catch(u=>Ke(u,o)).finally(()=>c())}f?f.then(()=>{a(),v(),Xe()}):v()}function Qt(){var e=y,n=h,t=O,r=p;return function(i=!0){xe(e),ne(n),$e(t),i&&(e.f&B)===0&&(r==null||r.activate(),r==null||r.apply())}}function Xe(e=!0){xe(null),ne(null),$e(null),e&&(p==null||p.deactivate())}function wn(){var e=y,n=e.b,t=p,r=n.is_rendered();return n.update_pending_count(1,t),t.increment(r,e),(s=!1)=>{n.update_pending_count(-1,t),t.decrement(r,e,s)}}function yn(e){var n=T|x,t=h!==null&&(h.f&T)!==0?h:null;return y!==null&&(y.f|=Ye),{ctx:O,deps:null,effects:null,equals:Bn,f:n,fn:e,reactions:null,rv:0,v:S,wv:0,parent:t??y,ac:null}}function er(e,n,t){let r=y;r===null&&Dt();var s=void 0,i=En(S),o=!h,a=new Map;return _r(()=>{var w;var f=y,l=Hn();s=l.promise;try{Promise.resolve(e()).then(l.resolve,l.reject).finally(Xe)}catch(d){l.reject(d),Xe()}var c=p;if(o){if((f.f&ge)!==0)var v=wn();if(r.b.is_rendered())(w=a.get(c))==null||w.reject($),a.delete(c);else{for(const d of a.values())d.reject($);a.clear()}a.set(c,l)}const u=(d,A=void 0)=>{if(v){var N=A===$;v(N)}if(!(A===$||(f.f&B)!==0)){if(c.activate(),A)i.f|=J,un(i,A);else{(i.f&J)!==0&&(i.f^=J),un(i,d);for(const[Ie,De]of a){if(a.delete(Ie),Ie===c)break;De.reject($)}}c.deactivate()}};l.promise.then(u,d=>u(null,d||"unknown"))}),cr(()=>{for(const f of a.values())f.reject($)}),new Promise(f=>{function l(c){function v(){c===s?f(i):l(s)}c.then(v,v)}l(s)})}function fs(e){const n=yn(e);return pt(n),n}function nr(e){const n=yn(e);return n.equals=Gn,n}function tr(e){var n=e.effects;if(n!==null){e.effects=null;for(var t=0;t0&&!it&&ir()}return n}function ir(){it=!1;for(const e of on)(e.f&b)!==0&&g(e,G),qe(e)&&ke(e);on.clear()}function rn(e){ie(e,e.v+1)}function lt(e,n,t){var r=e.reactions;if(r!==null)for(var s=He(),i=r.length,o=0;o{if(_e===i)return a();var f=h,l=_e;ne(null),Fn(i);var c=a();return ne(f),Fn(l),c};return r&&t.set("length",W(e.length)),new Proxy(e,{defineProperty(a,f,l){(!("value"in l)||l.configurable===!1||l.enumerable===!1||l.writable===!1)&&Lt();var c=t.get(f);return c===void 0?o(()=>{var v=W(l.value);return t.set(f,v),v}):ie(c,l.value,!0),!0},deleteProperty(a,f){var l=t.get(f);if(l===void 0){if(f in a){const c=o(()=>W(S));t.set(f,c),rn(s)}}else ie(l,S),rn(s);return!0},get(a,f,l){var w;if(f===ce)return e;var c=t.get(f),v=f in a;if(c===void 0&&(!v||(w=Ce(a,f))!=null&&w.writable)&&(c=o(()=>{var d=Pe(v?a[f]:S),A=W(d);return A}),t.set(f,c)),c!==void 0){var u=Te(c);return u===S?void 0:u}return Reflect.get(a,f,l)},getOwnPropertyDescriptor(a,f){var l=Reflect.getOwnPropertyDescriptor(a,f);if(l&&"value"in l){var c=t.get(f);c&&(l.value=Te(c))}else if(l===void 0){var v=t.get(f),u=v==null?void 0:v.v;if(v!==void 0&&u!==S)return{enumerable:!0,configurable:!0,value:u,writable:!0}}return l},has(a,f){var u;if(f===ce)return!0;var l=t.get(f),c=l!==void 0&&l.v!==S||Reflect.has(a,f);if(l!==void 0||y!==null&&(!c||(u=Ce(a,f))!=null&&u.writable)){l===void 0&&(l=o(()=>{var w=c?Pe(a[f]):S,d=W(w);return d}),t.set(f,l));var v=Te(l);if(v===S)return!1}return c},set(a,f,l,c){var An;var v=t.get(f),u=f in a;if(r&&f==="length")for(var w=l;wW(S)),t.set(w+"",d))}if(v===void 0)(!u||(An=Ce(a,f))!=null&&An.writable)&&(v=o(()=>W(void 0)),ie(v,Pe(l)),t.set(f,v));else{u=v.v!==S;var A=o(()=>Pe(l));ie(v,A)}var N=Reflect.getOwnPropertyDescriptor(a,f);if(N!=null&&N.set&&N.set.call(c,l),!u){if(r&&typeof f=="string"){var Ie=t.get("length"),De=Number(f);Number.isInteger(De)&&De>=Ie.v&&ie(Ie,De+1)}rn(s)}return!0},ownKeys(a){Te(s);var f=Reflect.ownKeys(a).filter(v=>{var u=t.get(v);return u===void 0||u.v!==S});for(var[l,c]of t)c.v!==S&&!(l in a)&&f.push(l);return f},setPrototypeOf(){jt()}})}function Dn(e){try{if(e!==null&&typeof e=="object"&&ce in e)return e[ce]}catch{}return e}function os(e,n){return Object.is(Dn(e),Dn(n))}var Pn,lr,fr,ft,at;function us(){if(Pn===void 0){Pn=window,lr=document,fr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,n=Node.prototype,t=Text.prototype;ft=Ce(n,"firstChild").get,at=Ce(n,"nextSibling").get,Rn(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),Rn(t)&&(t.__t=void 0)}}function Ze(e=""){return document.createTextNode(e)}function We(e){return ft.call(e)}function re(e){return at.call(e)}function cs(e,n){if(!ee)return We(e);var t=We(m);if(t===null)t=m.appendChild(Ze());else if(n&&t.nodeType!==Qe){var r=Ze();return t==null||t.before(r),Oe(r),r}return n&&bn(t),Oe(t),t}function _s(e,n=!1){if(!ee){var t=We(e);return t instanceof Comment&&t.data===""?re(t):t}if(n){if((m==null?void 0:m.nodeType)!==Qe){var r=Ze();return m==null||m.before(r),Oe(r),r}bn(m)}return m}function vs(e,n=1,t=!1){let r=ee?m:e;for(var s;n--;)s=r,r=re(r);if(!ee)return r;if(t){if((r==null?void 0:r.nodeType)!==Qe){var i=Ze();return r===null?s==null||s.after(i):r.before(i),Oe(i),i}bn(r)}return Oe(r),r}function ar(e){e.textContent=""}function ds(){return!1}function hs(e,n,t){return document.createElementNS(n??Vt,e,void 0)}function bn(e){if(e.nodeValue.length<65536)return;let n=e.nextSibling;for(;n!==null&&n.nodeType===Qe;)n.remove(),e.nodeValue+=n.nodeValue,n=e.nextSibling}function ps(e){ee&&We(e)!==null&&ar(e)}let Cn=!1;function or(){Cn||(Cn=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var n;if(!e.defaultPrevented)for(const t of e.target.elements)(n=t.__on_r)==null||n.call(t)})},{capture:!0}))}function mn(e){var n=h,t=y;ne(null),xe(null);try{return e()}finally{ne(n),xe(t)}}function ws(e,n,t,r=t){e.addEventListener(n,()=>mn(t));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),or()}function ot(e){y===null&&(h===null&&Mt(),Ct()),ye&&Pt()}function ur(e,n){var t=n.last;t===null?n.last=n.first=e:(t.next=e,e.prev=t,n.last=e)}function H(e,n){var t=y;t!==null&&(t.f&V)!==0&&(e|=V);var r={ctx:O,deps:null,nodes:null,f:e|x|F,first:null,fn:n,last:null,next:null,parent:t,b:t&&t.b,prev:null,teardown:null,wv:0,ac:null},s=r;if((e&ve)!==0)me!==null?me.push(r):pe.ensure().schedule(r);else if(n!==null){try{ke(r)}catch(o){throw we(r),o}s.deps===null&&s.teardown===null&&s.nodes===null&&s.first===s.last&&(s.f&Ye)===0&&(s=s.first,(e&te)!==0&&(e&Ge)!==0&&s!==null&&(s.f|=Ge))}if(s!==null&&(s.parent=t,t!==null&&ur(s,t),h!==null&&(h.f&T)!==0&&(e&de)===0)){var i=h;(i.effects??(i.effects=[])).push(s)}return r}function ut(){return h!==null&&!Y}function cr(e){const n=H(je,null);return g(n,b),n.teardown=e,n}function ys(e){ot();var n=y.f,t=!h&&(n&z)!==0&&(n&ge)===0;if(t){var r=O;(r.e??(r.e=[])).push(e)}else return ct(e)}function ct(e){return H(ve|Un,e)}function gs(e){return ot(),H(je|Un,e)}function Es(e){pe.ensure();const n=H(de|Ye,e);return(t={})=>new Promise(r=>{t.outro?hr(n,()=>{we(n),r(void 0)}):(we(n),r(void 0))})}function bs(e){return H(ve,e)}function _r(e){return H(_n|Ye,e)}function ms(e,n=0){return H(je|n,e)}function Ts(e,n=[],t=[],r=[]){tt(r,n,t,s=>{H(je,()=>e(...s.map(Te)))})}function As(e,n=[],t=[],r=[]){if(t.length>0||r.length>0)var s=wn();tt(r,n,t,i=>{H(ve,()=>e(...i.map(Te))),s&&s()})}function Ss(e,n=0){var t=H(te|n,e);return t}function Rs(e){return H(z|Ye,e)}function _t(e){var n=e.teardown;if(n!==null){const t=ye,r=h;Mn(!0),ne(null);try{n.call(null)}finally{Mn(t),ne(r)}}}function Tn(e,n=!1){var t=e.first;for(e.first=e.last=null;t!==null;){const s=t.ac;s!==null&&mn(()=>{s.abort($)});var r=t.next;(t.f&de)!==0?t.parent=null:we(t,n),t=r}}function vr(e){for(var n=e.first;n!==null;){var t=n.next;(n.f&z)===0&&we(n),n=t}}function we(e,n=!0){var t=!1;(n||(e.f&It)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(dr(e.nodes.start,e.nodes.end),t=!0),g(e,Nn),Tn(e,n&&!t),Fe(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(const i of r)i.stop();_t(e),e.f^=Nn,e.f|=B;var s=e.parent;s!==null&&s.first!==null&&vt(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function dr(e,n){for(;e!==null;){var t=e===n?null:re(e);e.remove(),e=t}}function vt(e){var n=e.parent,t=e.prev,r=e.next;t!==null&&(t.next=r),r!==null&&(r.prev=t),n!==null&&(n.first===e&&(n.first=r),n.last===e&&(n.last=t))}function hr(e,n,t=!0){var r=[];dt(e,r,!0);var s=()=>{t&&we(e),n&&n()},i=r.length;if(i>0){var o=()=>--i||s();for(var a of r)a.out(o)}else s()}function dt(e,n,t){if((e.f&V)===0){e.f^=V;var r=e.nodes&&e.nodes.t;if(r!==null)for(const a of r)(a.is_global||t)&&n.push(a);for(var s=e.first;s!==null;){var i=s.next,o=(s.f&Ge)!==0||(s.f&z)!==0&&(e.f&te)!==0;dt(s,n,o?t:!1),s=i}}}function Ns(e){ht(e,!0)}function ht(e,n){if((e.f&V)!==0){e.f^=V,(e.f&b)===0&&(g(e,x),pe.ensure().schedule(e));for(var t=e.first;t!==null;){var r=t.next,s=(t.f&Ge)!==0||(t.f&z)!==0;ht(t,s?n:!1),t=r}var i=e.nodes&&e.nodes.t;if(i!==null)for(const o of i)(o.is_global||n)&&o.in()}}function Os(e,n){if(e.nodes)for(var t=e.nodes.start,r=e.nodes.end;t!==null;){var s=t===r?null:re(t);n.append(t),t=s}}let ze=!1,ye=!1;function Mn(e){ye=e}let h=null,Y=!1;function ne(e){h=e}let y=null;function xe(e){y=e}let L=null;function pt(e){h!==null&&(L===null?L=[e]:L.push(e))}let k=null,P=0,M=null;function pr(e){M=e}let wt=1,fe=0,_e=fe;function Fn(e){_e=e}function yt(){return++wt}function qe(e){var n=e.f;if((n&x)!==0)return!0;if(n&T&&(e.f&=~he),(n&G)!==0){for(var t=e.deps,r=t.length,s=0;se.wv)return!0}(n&F)!==0&&R===null&&g(e,b)}return!1}function gt(e,n,t=!0){var r=e.reactions;if(r!==null&&!(L!==null&&Ne.call(L,e)))for(var s=0;s{e.ac.abort($)}),e.ac=null);try{e.f|=sn;var c=e.fn,v=c();e.f|=ge;var u=e.deps,w=p==null?void 0:p.is_fork;if(k!==null){var d;if(w||Fe(e,P),u!==null&&P>0)for(u.length=P+k.length,d=0;d{i=0,o==null||o()},n.onmessage=p=>{try{const d=JSON.parse(p.data);u(d)}catch{}},n.onerror=()=>{if(n==null||n.close(),n=null,f)return;if(i++,r==null||r(i),m>0&&i>m){y==null||y();return}const p=Math.min(l*Math.pow(2,i-1),a),d=p*.2*Math.random(),D=p+d;s=setTimeout(E,D)}}return E(),{close(){f=!0,s!==null&&(clearTimeout(s),s=null),n==null||n.close(),n=null}}}function S(t){return x("/api/events",{onEvent(e){var u,o,r;e.type==="instance_status"?(u=t.onInstanceStatus)==null||u.call(t,e.payload):e.type==="deploy_status"?(o=t.onDeployStatus)==null||o.call(t,e.payload):e.type==="event_log"&&((r=t.onEventLog)==null||r.call(t,e.payload))},onOpen:t.onOpen,onError:t.onError})}export{S as c};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DTyrBG6r.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DTyrBG6r.js
deleted file mode 100644
index 8c22f43..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DTyrBG6r.js
+++ /dev/null
@@ -1 +0,0 @@
-const e="auth_token";function o(){return typeof localStorage<"u"?localStorage.getItem(e):null}function n(){return o()!==null}function a(t){typeof localStorage<"u"&&localStorage.setItem(e,t)}function l(){typeof localStorage<"u"&&localStorage.removeItem(e)}export{l as c,o as g,n as i,a as s};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DVE7XZFM.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DVE7XZFM.js
deleted file mode 100644
index a9f40c9..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DVE7XZFM.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as c,f as n}from"./BJdXET8u.js";import{t as l}from"./DKemW7Dm.js";import{s as t,a as p,c as m}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var f=n(' ');function h(i,r){const s=e(r,"size",3,20),a=e(r,"class",3,"");var o=f();l(()=>{t(o,"width",s()),t(o,"height",s()),p(o,0,m(a()))}),c(i,o)}export{h as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DfwQ65vN.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DfwQ65vN.js
deleted file mode 100644
index 6720c43..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DfwQ65vN.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as L,a as i,b as n,s as g,c as N}from"./BJdXET8u.js";import{p as O,t as u,e as P,c as x,s as f,r as p,M as Q}from"./DKemW7Dm.js";import{p as l,i as m}from"./BSXRhUWv.js";import{s as t,a as j,r as R}from"./kfynmD3Z.js";import{b as z}from"./DgtbvmBB.js";var S=n('* '),U=n(''),V=n(" "),W=n('
'),X=n('
'),Y=n('
');function te(A,r){O(r,!0);let h=l(r,"type",3,"text"),y=l(r,"value",15,""),q=l(r,"placeholder",3,""),b=l(r,"required",3,!1),v=l(r,"disabled",3,!1),s=l(r,"error",3,""),w=l(r,"helpText",3,"");const F="border-[var(--border-input)] focus:ring-[var(--color-brand-500)] focus:border-[var(--color-brand-500)]",T="border-[var(--color-danger)] focus:ring-[var(--color-danger)]",k="opacity-60 cursor-not-allowed bg-[var(--surface-card-hover)]";var _=Y(),c=x(_),D=x(c),B=f(D);{var C=a=>{var e=S();i(a,e)};m(B,a=>{b()&&a(C)})}p(c);var E=f(c,2);{var G=a=>{var e=U();Q(e),u(()=>{t(e,"id",r.name),t(e,"name",r.name),t(e,"placeholder",q()),e.required=b(),e.disabled=v(),j(e,1,`w-full rounded-lg border px-3 py-2 text-sm transition-all duration-150 focus:outline-none focus:ring-2 bg-[var(--surface-input)] text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] ${s()?T:F} ${v()?k:""}`)}),N("input",e,function(...o){var d;(d=r.oninput)==null||d.apply(this,o)}),z(e,y),i(a,e)},H=a=>{var e=V();R(e),u(()=>{t(e,"id",r.name),t(e,"name",r.name),t(e,"type",h()),t(e,"placeholder",q()),e.required=b(),e.disabled=v(),j(e,1,`w-full rounded-lg border px-3 py-2 text-sm transition-all duration-150 focus:outline-none focus:ring-2 bg-[var(--surface-input)] text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] ${s()?T:F} ${v()?k:""}`)}),N("input",e,function(...o){var d;(d=r.oninput)==null||d.apply(this,o)}),z(e,y),i(a,e)};m(E,a=>{h()==="textarea"?a(G):a(H,-1)})}var M=f(E,2);{var I=a=>{var e=W(),o=x(e,!0);p(e),u(()=>g(o,s())),i(a,e)};m(M,a=>{s()&&a(I)})}var J=f(M,2);{var K=a=>{var e=X(),o=x(e,!0);p(e),u(()=>g(o,w())),i(a,e)};m(J,a=>{w()&&!s()&&a(K)})}p(_),u(()=>{t(c,"for",r.name),g(D,`${r.label??""} `)}),i(A,_),P()}L(["input"]);export{te as F};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DgtbvmBB.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DgtbvmBB.js
deleted file mode 100644
index d25d72a..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DgtbvmBB.js
+++ /dev/null
@@ -1 +0,0 @@
-import{G as n,H as t,Y as E,o as w,B as i,I as A,Z as m,Q as S,L as V}from"./DKemW7Dm.js";function B(e,f,l=f){var s=new WeakSet;n(e,"input",async c=>{var v=c?e.defaultValue:e.value;if(v=h(e)?k(v):v,l(v),t!==null&&s.add(t),await E(),v!==(v=f())){var r=e.selectionStart,o=e.selectionEnd,d=e.value.length;if(e.value=v??"",o!==null){var a=e.value.length;r===o&&o===d&&a>d?(e.selectionStart=a,e.selectionEnd=a):(e.selectionStart=r,e.selectionEnd=Math.min(o,a))}}}),(S&&e.defaultValue!==e.value||w(f)==null&&e.value)&&(l(h(e)?k(e.value):e.value),t!==null&&s.add(t)),i(()=>{var c=f();if(e===document.activeElement){var v=t;if(s.has(v))return}h(e)&&c===k(e.value)||e.type==="date"&&!c&&!e.value||c!==e.value&&(e.value=c??"")})}const u=new Set;function C(e,f,l,s,c=s){var v=l.getAttribute("type")==="checkbox",r=e;let o=!1;if(f!==null)for(var d of f)r=r[d]??(r[d]=[]);r.push(l),n(l,"change",()=>{var a=l.__value;v&&(a=b(r,a,l.checked)),c(a)},()=>c(v?[]:null)),i(()=>{var a=s();if(S&&l.defaultChecked!==l.checked){o=!0;return}v?(a=a||[],l.checked=a.includes(l.__value)):l.checked=V(l.__value,a)}),A(()=>{var a=r.indexOf(l);a!==-1&&r.splice(a,1)}),u.has(r)||(u.add(r),m(()=>{r.sort((a,_)=>a.compareDocumentPosition(_)===4?-1:1),u.delete(r)})),m(()=>{if(o){var a;if(v)a=b(r,a,l.checked);else{var _=r.find(y=>y.checked);a=_==null?void 0:_.__value}c(a)}})}function b(e,f,l){for(var s=new Set,c=0;c ');function w(e,s){const o=r(s,"size",3,20),i=r(s,"class",3,"");var t=f();p(()=>{a(t,"width",o()),a(t,"height",o()),l(t,0,m(i()))}),n(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DqoiTw6k.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DqoiTw6k.js
deleted file mode 100644
index 12c996d..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DqoiTw6k.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as c,f as p}from"./BJdXET8u.js";import{t as n}from"./DKemW7Dm.js";import{s as o,a as m,c as h}from"./kfynmD3Z.js";import{p as a}from"./BSXRhUWv.js";var l=p(' ');function w(e,r){const s=a(r,"size",3,20),i=a(r,"class",3,"");var t=l();n(()=>{o(t,"width",s()),o(t,"height",s()),m(t,0,h(i()))}),c(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DrzuxmSv.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DrzuxmSv.js
deleted file mode 100644
index 6f9dcd0..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DrzuxmSv.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as c,f as n}from"./BJdXET8u.js";import{t as p}from"./DKemW7Dm.js";import{s,a as l,c as h}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var m=n(' ');function w(a,r){const o=e(r,"size",3,20),i=e(r,"class",3,"");var t=m();p(()=>{s(t,"width",o()),s(t,"height",o()),l(t,0,h(i()))}),c(a,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/DsQCf6vC.js b/web/.svelte-kit/output/client/_app/immutable/chunks/DsQCf6vC.js
deleted file mode 100644
index 395db61..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/DsQCf6vC.js
+++ /dev/null
@@ -1 +0,0 @@
-import{g as qe,a as c,s as f,b as x,d as Ee,e as Ne,c as ne,t as Re}from"./BJdXET8u.js";import{p as ye,h as J,e as he,c as i,r as o,s as d,t as w,g as e,a as P,b as se,d as l,u as _}from"./DKemW7Dm.js";import{p as He,i as k,s as we,a as ke}from"./BSXRhUWv.js";import{w as Ke,x as Oe,y as Xe,z as Ae}from"./Bpb8V1MF.js";import{F as le}from"./DfwQ65vN.js";import{e as Be,i as Ge}from"./CZnXUJhL.js";import{I as Je}from"./LFhQE6G2.js";import{I as Me}from"./R0-LJft-.js";import{I as de}from"./BFW91e3Y.js";import{t as Ce}from"./kfynmD3Z.js";import{C as Qe}from"./C8zo5-Sk.js";var We=x('
'),Ye=x(' '),Ze=x(' ',1),$e=x(' '),et=x(' ',1),tt=x('
'),rt=x('
'),at=x(''),ot=x('
');function it(Y,a){ye(a,!0);const n=()=>ke(Ce,"$t",Z),[Z,$]=we(),p=He(a,"loading",3,!1),D={syntax:"proxies.validation.syntax",dns:"proxies.validation.dns",tcp:"proxies.validation.tcp",http:"proxies.validation.http"};function I(b){const y=D[b];return y?n()(y):b}var V=qe(),U=J(V);{var j=b=>{var y=ot(),S=i(y),B=i(S,!0);o(S);var q=d(S,2);{var E=z=>{var T=We(),N=i(T);de(N,{size:16});var v=d(N,2),F=i(v,!0);o(v),o(T),w(R=>f(F,R),[()=>n()("proxies.validation.checking")]),c(z,T)},M=z=>{var T=at();Be(T,21,()=>a.result.steps,Ge,(N,v)=>{var F=rt(),R=i(F),ee=i(R);{var te=u=>{var g=Ze(),C=J(g),H=i(C);Je(H,{size:14,class:"text-emerald-600 dark:text-emerald-400"}),o(C);var L=d(C,2),O=i(L,!0);o(L);var X=d(L,2);{var K=m=>{var h=Ye(),G=i(h);o(h),w(()=>f(G,`— ${e(v).message??""}`)),c(m,h)};k(X,m=>{e(v).message&&m(K)})}w(m=>f(O,m),[()=>I(e(v).name)]),c(u,g)},re=u=>{var g=et(),C=J(g),H=i(C);Me(H,{size:14,class:"text-red-600 dark:text-red-400"}),o(C);var L=d(C,2),O=i(L,!0);o(L);var X=d(L,2);{var K=m=>{var h=$e(),G=i(h);o(h),w(()=>f(G,`— ${e(v).message??""}`)),c(m,h)};k(X,m=>{e(v).message&&m(K)})}w(m=>f(O,m),[()=>I(e(v).name)]),c(u,g)};k(ee,u=>{e(v).passed?u(te):u(re,-1)})}o(R);var ae=d(R,2);{var Q=u=>{var g=tt(),C=i(g,!0);o(g),w(()=>f(C,e(v).hint)),c(u,g)};k(ae,u=>{!e(v).passed&&e(v).hint&&u(Q)})}o(F),c(N,F)}),o(T),c(z,T)};k(q,z=>{p()&&!a.result?z(E):a.result&&z(M,1)})}o(y),w(z=>f(B,z),[()=>n()("proxies.validation.title")]),c(b,y)};k(U,b=>{(p()||a.result)&&b(j)})}c(Y,V),he(),$()}var nt=x(" ",1),st=x('Validation reported issues but you can still create the proxy.
'),lt=x('
'),dt=x(' '),vt=x(' ',1);function wt(Y,a){var xe,pe,ge,_e;ye(a,!0);const n=()=>ke(Ce,"$t",Z),[Z,$]=we();let p=P(se(((xe=a.proxy)==null?void 0:xe.destination_url)??"")),D=P(se(((ge=(pe=a.proxy)==null?void 0:pe.destination_port)==null?void 0:ge.toString())??"")),I=P(se(((_e=a.proxy)==null?void 0:_e.domain)??"")),V=P(null),U=P(!1),j=P(null),b=P(!1),y=P(""),S=P(!1),B=P(!1);const q=_(()=>parseInt(e(D),10)),E=_(()=>!isNaN(e(q))&&e(q)>=1&&e(q)<=65535),M=_(()=>e(p).trim().length>0&&e(D).trim().length>0&&e(E)&&e(I).trim().length>0&&!e(b)),z=_(()=>a.mode==="create"?n()("proxies.form.title"):n()("proxies.form.editTitle")),T=_(()=>(e(b),a.mode==="create"?n()("proxies.form.create"):n()("proxies.form.save")));function N(t){if(!t)return"";try{const r=t.includes("://")?t:`http://${t}`;return new URL(r).hostname.replace(/^(www|api|app)\./,"").replace(/\.\w+$/,"").replace(/[^a-z0-9.-]/gi,"-").toLowerCase()||""}catch{return t.replace(/[^a-z0-9.-]/gi,"-").toLowerCase()}}function v(){e(j)!==null&&clearTimeout(e(j)),l(V,null),!(!e(p).trim()||!e(D).trim()||!e(E))&&l(j,setTimeout(()=>{F()},300),!0)}async function F(){if(!(!e(p).trim()||!e(E))){l(U,!0);try{l(V,await Ke(e(p).trim(),e(q)),!0)}catch{l(V,null)}finally{l(U,!1)}}}function R(){if(a.mode==="create"){const t=N(e(p));(!e(I)||e(I)===N(e(p).slice(0,-1)))&&l(I,t,!0)}v()}function ee(){v()}function te(){e(j)!==null&&clearTimeout(e(j)),F()}async function re(){var r;if(!e(M))return;l(b,!0),l(y,"");const t={domain:e(I).trim(),destination_url:e(p).trim(),destination_port:e(q)};try{const s=a.mode==="create"?await Oe(t):await Xe(a.proxy.id,t);(r=a.onsave)==null||r.call(a,s)}catch(s){l(y,s instanceof Error?s.message:"Unknown error",!0)}finally{l(b,!1)}}async function ae(){var t;if(a.proxy){l(B,!0);try{await Ae(a.proxy.id),l(S,!1),(t=a.ondelete)==null||t.call(a,a.proxy.id)}catch(r){l(y,r instanceof Error?r.message:"Unknown error",!0)}finally{l(B,!1)}}}var Q=vt(),u=J(Q),g=i(u),C=i(g,!0);o(g);var H=d(g,2),L=i(H);{let t=_(()=>n()("proxies.form.destination"));le(L,{get label(){return e(t)},name:"destination_url",placeholder:"192.168.1.100 or http://my-service",required:!0,oninput:R,get value(){return e(p)},set value(r){l(p,r,!0)}})}var O=d(L,2);{let t=_(()=>n()("proxies.form.port")),r=_(()=>e(D)&&!e(E)?n()("validation.invalidPort"):"");le(O,{get label(){return e(t)},name:"destination_port",type:"number",placeholder:"8080",required:!0,get error(){return e(r)},oninput:ee,get value(){return e(D)},set value(s){l(D,s,!0)}})}var X=d(O,2);{let t=_(()=>n()("proxies.form.domain")),r=_(()=>n()("proxies.form.domainHelp"));le(X,{get label(){return e(t)},name:"domain",placeholder:"my-service.example.com",required:!0,get helpText(){return e(r)},get value(){return e(I)},set value(s){l(I,s,!0)}})}var K=d(X,2),m=i(K);it(m,{get result(){return e(V)},get loading(){return e(U)}});var h=d(m,2),G=i(h);{var Ie=t=>{var r=nt(),s=J(r);de(s,{size:14});var A=d(s);w(be=>f(A,` ${be??""}`),[()=>n()("proxies.form.validating")]),c(t,r)},ze=t=>{var r=Re();w(s=>f(r,s),[()=>n()("proxies.form.validate")]),c(t,r)};k(G,t=>{e(U)?t(Ie):t(ze,-1)})}o(h),o(K);var ve=d(K,2);{var Le=t=>{var r=st();c(t,r)};k(ve,t=>{e(V)&&!e(V).valid&&t(Le)})}var ce=d(ve,2);{var Pe=t=>{var r=lt(),s=i(r,!0);o(r),w(()=>f(s,e(y))),c(t,r)};k(ce,t=>{e(y)&&t(Pe)})}var ue=d(ce,2),oe=i(ue),Ve=i(oe);{var Te=t=>{var r=dt(),s=i(r,!0);o(r),w(A=>f(s,A),[()=>n()("proxies.form.delete")]),ne("click",r,()=>{l(S,!0)}),c(t,r)};k(Ve,t=>{a.mode==="edit"&&t(Te)})}o(oe);var me=d(oe,2),W=i(me),De=i(W,!0);o(W);var ie=d(W,2),fe=i(ie);{var Se=t=>{de(t,{size:14})};k(fe,t=>{e(b)&&t(Se)})}var Fe=d(fe);o(ie),o(me),o(ue),o(H),o(u);var Ue=d(u,2);{var je=t=>{{let r=_(()=>n()("proxies.form.delete")),s=_(()=>n()("proxies.form.deleteConfirm")),A=_(()=>e(B)?n()("common.loading"):n()("proxies.form.delete"));Qe(t,{get open(){return e(S)},get title(){return e(r)},get message(){return e(s)},get confirmLabel(){return e(A)},confirmVariant:"danger",onconfirm:ae,oncancel:()=>{l(S,!1)}})}};k(Ue,t=>{a.mode==="edit"&&t(je)})}w((t,r)=>{f(C,e(z)),h.disabled=t,f(De,r),ie.disabled=!e(M),f(Fe,` ${e(T)??""}`)},[()=>!e(p).trim()||!e(E)||e(U),()=>n()("proxies.form.cancel")]),Ne("submit",H,t=>{t.preventDefault(),re()}),ne("click",h,te),ne("click",W,()=>{var t;return(t=a.oncancel)==null?void 0:t.call(a)}),c(Y,Q),he(),$()}Ee(["click"]);export{wt as P};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/Hsiz6fBZ.js b/web/.svelte-kit/output/client/_app/immutable/chunks/Hsiz6fBZ.js
deleted file mode 100644
index 197a41e..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/Hsiz6fBZ.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as m,f as n}from"./BJdXET8u.js";import{t as p}from"./DKemW7Dm.js";import{s,a as c,c as l}from"./kfynmD3Z.js";import{p as r}from"./BSXRhUWv.js";var f=n(' ');function w(e,t){const o=r(t,"size",3,20),i=r(t,"class",3,"");var a=f();p(()=>{s(a,"width",o()),s(a,"height",o()),c(a,0,l(i()))}),m(e,a)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/Icw0y4KW.js b/web/.svelte-kit/output/client/_app/immutable/chunks/Icw0y4KW.js
deleted file mode 100644
index e24873b..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/Icw0y4KW.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as m}from"./DKemW7Dm.js";import{s as r,a as c,c as f}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var h=p(' ');function w(a,o){const s=e(o,"size",3,20),i=e(o,"class",3,"");var t=h();m(()=>{r(t,"width",s()),r(t,"height",s()),c(t,0,f(i()))}),n(a,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/LFhQE6G2.js b/web/.svelte-kit/output/client/_app/immutable/chunks/LFhQE6G2.js
deleted file mode 100644
index 5e1778e..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/LFhQE6G2.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as c}from"./DKemW7Dm.js";import{s as r,a as l,c as m}from"./kfynmD3Z.js";import{p as e}from"./BSXRhUWv.js";var f=p(' ');function w(a,s){const o=e(s,"size",3,20),i=e(s,"class",3,"");var t=f();c(()=>{r(t,"width",o()),r(t,"height",o()),l(t,0,m(i()))}),n(a,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/R0-LJft-.js b/web/.svelte-kit/output/client/_app/immutable/chunks/R0-LJft-.js
deleted file mode 100644
index 941c8a7..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/R0-LJft-.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as m}from"./DKemW7Dm.js";import{s as r,a as c,c as f}from"./kfynmD3Z.js";import{p as a}from"./BSXRhUWv.js";var h=p(' ');function w(e,s){const o=a(s,"size",3,20),i=a(s,"class",3,"");var t=h();m(()=>{r(t,"width",o()),r(t,"height",o()),c(t,0,f(i()))}),n(e,t)}export{w as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/ecfdBtDb.js b/web/.svelte-kit/output/client/_app/immutable/chunks/ecfdBtDb.js
deleted file mode 100644
index 8c21f47..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/ecfdBtDb.js
+++ /dev/null
@@ -1 +0,0 @@
-import{N as y,l as u,O as _,P as o,Q as t,R as g,T as l,U as i,V as d,W as p,X as m}from"./DKemW7Dm.js";function T(n,r){let s=null,E=t;var a;if(t){s=p;for(var e=m(document.head);e!==null&&(e.nodeType!==g||e.data!==n);)e=l(e);if(e===null)i(!1);else{var f=l(e);e.remove(),d(f)}}t||(a=document.head.appendChild(y()));try{u(()=>r(a),_|o)}finally{E&&(i(!0),d(s))}}export{T as h};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/ip4Jv8C8.js b/web/.svelte-kit/output/client/_app/immutable/chunks/ip4Jv8C8.js
deleted file mode 100644
index e74d8ef..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/ip4Jv8C8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as _,b as w}from"./BJdXET8u.js";import"./BSEsuAwr.js";import{c as d,s as e,r as a}from"./DKemW7Dm.js";import{S as r}from"./BE_zO38m.js";var b=w('');function k(l){var i=b(),t=d(i),v=d(t),s=d(v);r(s,{width:"60%",height:"1.25rem"});var p=e(s,2);r(p,{width:"80%",height:"0.875rem"}),a(v);var c=e(v,2);r(c,{width:"4rem",height:"1.5rem",rounded:!0}),a(t);var o=e(t,2),m=d(o);r(m,{width:"5rem",height:"0.875rem"});var f=e(m,2);r(f,{width:"4rem",height:"0.875rem"}),a(o);var h=e(o,2),n=d(h);r(n,{width:"3.5rem",height:"0.75rem"});var g=e(n,2);r(g,{width:"4.5rem",height:"0.75rem"}),a(h),a(i),_(l,i)}export{k as S};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/kfynmD3Z.js b/web/.svelte-kit/output/client/_app/immutable/chunks/kfynmD3Z.js
deleted file mode 100644
index 1d11de8..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/kfynmD3Z.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{Q as l,aM as C,aN as S,aO as F,aP as y,aQ as D,Z as I,aR as R,w as U,j as b}from"./DKemW7Dm.js";function h(e){var a,o,t="";if(typeof e=="string"||typeof e=="number")t+=e;else if(typeof e=="object")if(Array.isArray(e)){var n=e.length;for(a=0;a=0;){var s=i+r;(i===0||u.includes(t[i-1]))&&(s===t.length||u.includes(t[s]))?t=(i===0?"":t.substring(0,i))+t.substring(s+1):i=s}}return t===""?null:t}function Be(e,a){return e==null?null:String(e)}function Ge(e,a,o,t,n,r){var i=e.__className;if(l||i!==o||i===void 0){var s=N(o,t,r);(!l||s!==e.getAttribute("class"))&&(s==null?e.removeAttribute("class"):a?e.className=s:e.setAttribute("class",s)),e.__className=o}else if(r&&n!==r)for(var d in r){var p=!!r[d];(n==null||p!==!!n[d])&&e.classList.toggle(d,p)}return r}const L=Symbol("is custom element"),j=Symbol("is html"),A=y?"link":"LINK",H=y?"progress":"PROGRESS";function Ke(e){if(l){var a=!1,o=()=>{if(!a){if(a=!0,e.hasAttribute("value")){var t=e.value;m(e,"value",null),e.value=t}if(e.hasAttribute("checked")){var n=e.checked;m(e,"checked",null),e.checked=n}}};e.__on_r=o,I(o),R()}}function Qe(e,a){var o=w(e);o.value===(o.value=a??void 0)||e.value===a&&(a!==0||e.nodeName!==H)||(e.value=a??"")}function m(e,a,o,t){var n=w(e);l&&(n[a]=e.getAttribute(a),a==="src"||a==="srcset"||a==="href"&&e.nodeName===A)||n[a]!==(n[a]=o)&&(a==="loading"&&(e[C]=o),o==null?e.removeAttribute(a):typeof o!="string"&&E(e).includes(a)?e[a]=o:e.setAttribute(a,o))}function w(e){return e.__attributes??(e.__attributes={[L]:e.nodeName.includes("-"),[j]:e.namespaceURI===S})}var v=new Map;function E(e){var a=e.getAttribute("is")||e.nodeName,o=v.get(a);if(o)return o;v.set(a,o=[]);for(var t,n=e,r=Element.prototype;r!==n;){t=D(n);for(var i in t)t[i].set&&o.push(i);n=F(n)}return o}const T={name:"Docker Watcher",version:"v0.1"},x={connected:"connected",disconnected:"disconnected",rawError:"Technical details",retryNow:"Retry now"},M={dashboard:"Dashboard",projects:"Projects",deploy:"Deploy",proxies:"Proxies",events:"Events",settings:"Settings",logout:"Log out"},V={title:"Dashboard",quickDeploy:"Quick Deploy",totalProjects:"Total Projects",runningInstances:"Running Instances",failedInstances:"Failed Instances",projects:"Projects",retry:"Retry",noProjects:"No projects yet.",addFirst:"Add your first project",loadFailed:"Failed to load dashboard",staleContainers:"Stale Containers"},O={title:"Projects",addProject:"Add Project",cancel:"Cancel",newProject:"New Project",name:"Name",image:"Image",port:"Port",registry:"Registry",created:"Created",view:"View",noProjects:"No projects configured yet.",getStarted:'Click "Add Project" to get started.',createProject:"Create Project",creating:"Creating...",healthcheck:"Healthcheck Path",nameRequired:"Name and image are required.",loadFailed:"Failed to load projects",createFailed:"Failed to create project",browseImages:"Browse Images",selectImage:"Select an image",noImages:"No images found",loadingImages:"Loading images...",imageLoadFailed:"Failed to load images"},$={deleteProject:"Delete Project",envVars:"Environment Variables",volumes:"Volume Mounts",stages:"Stages",noStages:"No stages configured for this project.",pattern:"Pattern",autoDeploy:"auto-deploy",requiresConfirm:"requires confirm",instances:"instances",deployNewVersion:"Deploy new version",selectTag:"Select tag to deploy",loadingTags:"Loading tags...",chooseTag:"Choose a tag...",enterTag:"Enter image tag (e.g., dev-abc123)",deploy:"Deploy",deploying:"Deploying...",recentDeploys:"Recent Deploys",noDeployHistory:"No deploy history for this project.",tag:"Tag",status:"Status",started:"Started",finished:"Finished",error:"Error",noInstancesRunning:"No instances running",deleteConfirmTitle:"Delete Project",deleteConfirmMessage:"This will permanently delete the project '{name}' and all its stages, instances, and deploy history. This cannot be undone.",loadFailed:"Failed to load project",deleteFailed:"Failed to delete project",deployFailed:"Deploy failed"},_={title:"Environment Variables",description:"Manage per-stage environment variable overrides. Stage-level values override project-level defaults.",stage:"Stage",projectDefaults:"Project-Level Defaults",stageOverrides:"Stage Overrides",key:"Key",value:"Value",secret:"Secret",source:"Source",actions:"Actions",overridden:"overridden",inherited:"inherited",overridesProject:"overrides project",stageOnly:"stage only",edit:"Edit",change:"Change",delete:"Delete",save:"Save",add:"Add",adding:"Adding...",noStages:"No stages configured. Add stages to the project first.",loadFailed:"Failed to load project",envAdded:"Environment variable added",envUpdated:"Environment variable updated",envDeleted:"Environment variable deleted",addFailed:"Failed to add env var",updateFailed:"Failed to update env var",deleteFailed:"Failed to delete env var",loadEnvFailed:"Failed to load env vars"},q={title:"Volume Mounts",description:"Configure volume mounts for containers. Choose a scope to control how volumes are shared between deploys.",sourceHost:"Source (Host)",targetContainer:"Target (Container)",scope:"Scope",nameColumn:"Name",namePlaceholder:"e.g. shared-db",requiresName:"requires name",noHostPath:"no host path",tmpfs:"tmpfs (in-memory)",actions:"Actions",edit:"Edit",delete:"Delete",save:"Save",add:"Add",adding:"Adding...",noVolumes:"No volumes configured yet. Add one above.",volumeAdded:"Volume added",volumeUpdated:"Volume updated",volumeDeleted:"Volume deleted",loadFailed:"Failed to load volumes",addFailed:"Failed to add volume",updateFailed:"Failed to update volume",deleteFailed:"Failed to delete volume"},W={title:"Volume Browser",loadFailed:"Failed to load directory",empty:"This directory is empty.",name:"Name",size:"Size",modified:"Modified",downloadAll:"Download volume as ZIP",downloadFolder:"Download folder as ZIP",upload:"Upload files",uploaded:"Uploaded",files:"file(s)",uploadFailed:"Failed to upload files",browse:"Browse",download:"Download"},B={title:"Quick Deploy",description:"Deploy a container image with zero configuration. Paste an image URL, review the defaults, and deploy.",step1:"1. Enter Image URL",imageUrl:"Image URL",imageUrlHelp:"Full image URL including tag (e.g., git.example.com/user/app:dev-abc123)",inspect:"Inspect",inspecting:"Inspecting...",step2:"2. Review Configuration",reviewDesc:"These defaults were detected from the image. Adjust as needed before deploying.",projectName:"Project Name",port:"Port",portHelp:"Container port to expose (1-65535)",healthCheckPath:"Health Check Path",healthCheckHelp:"Optional HTTP path for health verification",stage:"Stage",development:"Development",release:"Release",production:"Production",stageHelp:"Deployment stage for this image",subdomainOverride:"Subdomain Override",subdomainHelp:"Leave empty to use the default subdomain pattern",envVars:"Environment Variables",envVarsHelp:"One per line, KEY=VALUE format",step3:"3. Deploy",deployDesc:"A new project will be created and the container will be deployed immediately.",deployBtn:"Deploy",inspectedSuccess:"Image inspected successfully",deployedSuccess:"Deployed {name} successfully!",inspectFailed:"Failed to inspect image",deployFailed:"Deployment failed",browseImages:"Browse",selectImage:"Select an image from a registry",noImages:"No images found",loadingImages:"Loading...",imageLoadFailed:"Failed to load images"},G={title:"Settings",general:"General",registries:"Registries",credentials:"Credentials",authentication:"Authentication",appearance:"Appearance",staleThreshold:"Stale threshold (days)",staleThresholdHelp:"Containers inactive for longer than this will be flagged as stale."},K={title:"General Settings",globalConfig:"Global Configuration",domain:"Domain",domainHelp:"Base domain for subdomain routing",serverIp:"Server IP",serverIpHelp:"Public IP address of the server",dockerNetwork:"Docker Network",dockerNetworkHelp:"Docker network for deployed containers",subdomainPattern:"Subdomain Pattern",subdomainPatternHelp:"Pattern for auto-generated subdomains",pollingInterval:"Polling Interval (seconds)",pollingIntervalHelp:"How often to check registries for new tags (10-86400)",notificationUrl:"Notification URL",notificationUrlHelp:"Webhook URL for deploy notifications",saveSettings:"Save Settings",saving:"Saving...",saved:"Settings saved successfully",saveFailed:"Failed to save settings",loadFailed:"Failed to load settings",webhookUrl:"Webhook URL",webhookDesc:"This secret URL receives image push notifications from your CI pipeline.",noWebhookUrl:"No webhook URL configured",copy:"Copy",copied:"Webhook URL copied to clipboard",regenerateUrl:"Regenerate URL",regenerating:"Regenerating...",regenerated:"Webhook URL regenerated",regenerateFailed:"Failed to regenerate webhook URL",regenerateWarning:"Warning: regenerating will invalidate the current URL. Update your CI pipelines.",sslCertificate:"SSL Certificate",sslCertificateHelp:"Wildcard certificate from NPM for auto-SSL on proxy hosts",selectCertificate:"Select Certificate",noCertificate:"None (no SSL)",clearCertificate:"Clear",loadingCertificates:"Loading certificates...",noCertificatesFound:"No wildcard certificates found in NPM"},Q={title:"Container Registries",description:"Manage your container registries for image detection.",addRegistry:"Add Registry",editRegistry:"Edit Registry",addNewRegistry:"Add New Registry",name:"Name",nameHelp:"A friendly name for this registry",url:"URL",urlHelp:"Registry base URL",type:"Type",typeHelp:"Registry type for API compatibility",token:"Token",tokenHelpNew:"API token for authentication",tokenHelpEdit:"Leave empty to keep the existing token",owner:"Owner",ownerHelp:"Package owners, comma-separated (e.g., alexei,my-org)",save:"Save",saving:"Saving...",update:"Update",test:"Test",testing:"Testing...",edit:"Edit",delete:"Delete",noRegistries:"No registries configured yet.",addFirst:"Add your first registry",registryUpdated:"Registry updated",registryAdded:"Registry added",registryDeleted:'Registry "{name}" deleted',testSuccess:'Connection to "{name}" successful',saveFailed:"Failed to save registry",deleteFailed:"Failed to delete registry",testFailed:"Connection test failed",loadFailed:"Failed to load registries",deleteConfirm:'Delete registry "{name}"? This cannot be undone.'},Z={title:"Credentials",description:"Manage credentials for Nginx Proxy Manager and registry tokens. All values are encrypted at rest.",npm:"Nginx Proxy Manager",npmDesc:"Credentials for managing proxy hosts via NPM API",configured:"Configured",npmUrl:"NPM URL",npmUrlHelp:"Nginx Proxy Manager API URL",email:"Email",emailHelp:"NPM admin email",password:"Password",passwordHelpNew:"NPM admin password (will be encrypted)",passwordHelpEdit:"Enter the new password to replace the existing one",changeCredentials:"Change Credentials",save:"Save",saving:"Saving...",saved:"NPM credentials saved",saveFailed:"Failed to save NPM credentials",loadFailed:"Failed to load credentials",registryTokens:"Registry Tokens",registryTokensDesc:"Registry authentication tokens are managed per-registry in the",registriesLink:"Registries",registryTokensSuffix:"section. Each registry stores its token encrypted in the database."},z={title:"Authentication Settings",description:"Configure authentication mode and manage users.",authMode:"Authentication Mode",local:"Local (username/password)",oidc:"OIDC (SSO)",oidcConfig:"OIDC Provider Configuration",issuerUrl:"Issuer URL",clientId:"Client ID",clientSecret:"Client Secret",redirectUrl:"Redirect URL",saveSettings:"Save Settings",saving:"Saving...",saved:"Settings saved",saveFailed:"Failed to save",loadFailed:"Failed to load settings",localUsers:"Local Users",username:"Username",email:"Email",role:"Role",created:"Created",noUsers:"No users found.",addUser:"Add User",viewer:"Viewer",admin:"Admin",userCreated:"User created",userDeleted:"User deleted",createFailed:"Failed to create user",deleteFailed:"Failed to delete user",deleteConfirm:"Are you sure you want to delete this user?",usernameRequired:"Username and password are required",password:"Password"},Y={title:"Docker Watcher",subtitle:"Sign in to your account",username:"Username",password:"Password",signIn:"Sign in",signingIn:"Signing in...",or:"or",ssoButton:"Sign in with SSO (OIDC)",loginFailed:"Login failed",networkError:"Network error"},X={title:"Proxies",create:"Create Proxy",noProxies:"No proxies configured yet.",noProxiesDesc:"Create a standalone proxy or deploy a project to see proxies here.",standalone:"Standalone Proxies",managed:"Managed",lastChecked:"Last checked",health:{healthy:"Healthy",unhealthy:"Unhealthy",unknown:"Unknown"},filter:{search:"Search proxies...",health:"Health",type:"Type",all:"All",clear:"Clear filters"},form:{title:"Create Proxy",editTitle:"Edit Proxy",destination:"Destination URL / IP",port:"Port",domain:"Domain",domainHelp:"The public domain for this proxy.",validate:"Validate",validating:"Validating...",create:"Create Proxy",save:"Save Changes",cancel:"Cancel",delete:"Delete",deleteConfirm:"Delete this proxy? This cannot be undone."},validation:{title:"Destination Validation",syntax:"URL syntax",dns:"DNS resolution",tcp:"TCP connection",http:"HTTP response",checking:"Checking...",skipped:"Skipped"}},J={cancel:"Cancel",confirm:"Confirm",delete:"Delete",edit:"Edit",save:"Save",retry:"Retry",loading:"Loading...",noData:"No data",project:"Project",back:"Back",actions:"Actions",stop:"Stop",start:"Start",restart:"Restart",remove:"Remove",instance:"instance",instances:"instances"},ee={stopConfirm:"This will stop the running container. The instance can be started again later.",restartConfirm:"This will restart the container, causing brief downtime.",removeConfirm:"This will permanently remove the container and its proxy configuration. This cannot be undone.",actionFailed:"Action failed"},te={noProjects:"No projects yet",noProjectsDesc:"Get started by creating your first project or use Quick Deploy.",createProject:"Create Project",noInstances:"No instances",noInstancesDesc:"Deploy a new version to see instances here.",noDeploys:"No deploy history",noDeploysDesc:"Deploy history will appear here after your first deployment.",noRegistries:"No registries",noRegistriesDesc:"Add a container registry to enable image detection.",noVolumes:"No volumes",noVolumesDesc:"Configure volume mounts for persistent data.",noUsers:"No users",noUsersDesc:"Add local users to manage access."},ae={required:"{field} is required",invalidUrl:"Invalid URL format",invalidDomain:"Invalid domain format",invalidIp:"Invalid IP format",invalidEmail:"Invalid email format",invalidPort:"Port must be between 1 and 65535",invalidPollingInterval:"Polling interval must be between 10 and 86400 seconds",invalidProjectName:"Only lowercase letters, numbers, and hyphens allowed",requiredWhenUpdating:"{field} is required when updating credentials",requiredForNew:"{field} is required for new registries"},oe={stopInstance:"Stop Instance",startInstance:"Start Instance",restartInstance:"Restart Instance",removeInstance:"Remove Instance"},ne={light:"Light",dark:"Dark",system:"System"},ie={search:"Search...",noResults:"No results found"},re={title:"Stale Containers",noStale:"No stale containers",noStaleDesc:"All containers are healthy and running.",cleanup:"Clean up",cleanupAll:"Clean up all",confirmCleanup:"This will stop and remove the container. Continue?",confirmBulkCleanup:"This will stop and remove all stale containers. Continue?",daysStale:"days stale",lastAlive:"Last alive",count:"Stale",cleanedUp:"Container cleaned up",bulkCleanedUp:"{count} containers cleaned up",cleanupFailed:"Cleanup failed",loadFailed:"Failed to load stale containers"},se={title:"Event Log",noEvents:"No events found",noEventsDesc:"Events will appear here as they occur.",loadMore:"Load more",newEvents:"new events",filter:{severity:"Severity",source:"Source",dateRange:"Date range",search:"Search events...",lastHour:"Last hour",last24h:"Last 24 hours",last7d:"Last 7 days",allTime:"All time",clear:"Clear filters"},severity:{info:"Info",warn:"Warning",error:"Error"},source:{deploy:"Deploy",container:"Container",proxy:"Proxy",system:"System"},metadata:"Details"},le={cpu:"CPU",mem:"MEM",unavailable:"Stats unavailable"},de={title:"System Health",containers:"Containers",proxies:"Proxies",recentErrors:"Recent Errors"},ce={en:"English",ru:"Russian"},ge={app:T,health:x,nav:M,dashboard:V,projects:O,projectDetail:$,envEditor:_,volumeEditor:q,volumeBrowser:W,quickDeploy:B,settings:G,settingsGeneral:K,settingsRegistries:Q,settingsCredentials:Z,settingsAuth:z,login:Y,proxies:X,common:J,instance:ee,empty:te,validation:ae,confirm:oe,theme:ne,entityPicker:ie,stale:re,events:se,stats:le,systemHealth:de,language:ce},pe={name:"Docker Watcher",version:"v0.1"},ue={connected:"подключён",disconnected:"отключён",rawError:"Технические детали",retryNow:"Проверить сейчас"},me={dashboard:"Панель",projects:"Проекты",deploy:"Деплой",proxies:"Прокси",events:"События",settings:"Настройки",logout:"Выйти"},ve={title:"Панель управления",quickDeploy:"Быстрый деплой",totalProjects:"Всего проектов",runningInstances:"Запущенных экземпляров",failedInstances:"Сбойных экземпляров",projects:"Проекты",retry:"Повторить",noProjects:"Проектов пока нет.",addFirst:"Добавьте первый проект",loadFailed:"Не удалось загрузить панель",staleContainers:"Устаревшие контейнеры"},fe={title:"Проекты",addProject:"Добавить проект",cancel:"Отмена",newProject:"Новый проект",name:"Название",image:"Образ",port:"Порт",registry:"Реестр",created:"Создан",view:"Открыть",noProjects:"Проекты ещё не настроены.",getStarted:"Нажмите «Добавить проект» для начала.",createProject:"Создать проект",creating:"Создание...",healthcheck:"Путь проверки здоровья",nameRequired:"Название и образ обязательны.",loadFailed:"Не удалось загрузить проекты",createFailed:"Не удалось создать проект",browseImages:"Обзор образов",selectImage:"Выберите образ",noImages:"Образы не найдены",loadingImages:"Загрузка образов...",imageLoadFailed:"Не удалось загрузить образы"},ye={deleteProject:"Удалить проект",envVars:"Переменные окружения",volumes:"Тома",stages:"Стадии",noStages:"Для этого проекта не настроены стадии.",pattern:"Шаблон",autoDeploy:"авто-деплой",requiresConfirm:"нужно подтверждение",instances:"экземпляров",deployNewVersion:"Развернуть новую версию",selectTag:"Выберите тег для деплоя",loadingTags:"Загрузка тегов...",chooseTag:"Выберите тег...",enterTag:"Введите тег образа (напр., dev-abc123)",deploy:"Развернуть",deploying:"Развёртывание...",recentDeploys:"Последние деплои",noDeployHistory:"Нет истории деплоев для этого проекта.",tag:"Тег",status:"Статус",started:"Начат",finished:"Завершён",error:"Ошибка",noInstancesRunning:"Нет запущенных экземпляров",deleteConfirmTitle:"Удалить проект",deleteConfirmMessage:"Это безвозвратно удалит проект '{name}' и все его стадии, экземпляры и историю деплоев.",loadFailed:"Не удалось загрузить проект",deleteFailed:"Не удалось удалить проект",deployFailed:"Деплой не удался"},he={title:"Переменные окружения",description:"Управление переопределениями переменных окружения на уровне стадий. Значения стадий переопределяют значения проекта.",stage:"Стадия",projectDefaults:"Значения проекта по умолчанию",stageOverrides:"Переопределения стадии",key:"Ключ",value:"Значение",secret:"Секрет",source:"Источник",actions:"Действия",overridden:"переопределено",inherited:"наследуется",overridesProject:"переопределяет проект",stageOnly:"только стадия",edit:"Изменить",change:"Изменить",delete:"Удалить",save:"Сохранить",add:"Добавить",adding:"Добавление...",noStages:"Стадии не настроены. Сначала добавьте стадии к проекту.",loadFailed:"Не удалось загрузить проект",envAdded:"Переменная окружения добавлена",envUpdated:"Переменная окружения обновлена",envDeleted:"Переменная окружения удалена",addFailed:"Не удалось добавить переменную",updateFailed:"Не удалось обновить переменную",deleteFailed:"Не удалось удалить переменную",loadEnvFailed:"Не удалось загрузить переменные"},we={title:"Тома",description:"Настройка монтирования томов для контейнеров. Выберите область видимости для управления общим доступом между развёртываниями.",sourceHost:"Источник (хост)",targetContainer:"Цель (контейнер)",scope:"Область",nameColumn:"Имя",namePlaceholder:"напр. shared-db",requiresName:"требуется имя",noHostPath:"нет пути на хосте",tmpfs:"tmpfs (в памяти)",actions:"Действия",edit:"Изменить",delete:"Удалить",save:"Сохранить",add:"Добавить",adding:"Добавление...",noVolumes:"Тома ещё не настроены. Добавьте один выше.",volumeAdded:"Том добавлен",volumeUpdated:"Том обновлён",volumeDeleted:"Том удалён",loadFailed:"Не удалось загрузить тома",addFailed:"Не удалось добавить том",updateFailed:"Не удалось обновить том",deleteFailed:"Не удалось удалить том"},Pe={title:"Обзор тома",loadFailed:"Не удалось загрузить каталог",empty:"Этот каталог пуст.",name:"Имя",size:"Размер",modified:"Изменён",downloadAll:"Скачать том как ZIP",downloadFolder:"Скачать папку как ZIP",upload:"Загрузить файлы",uploaded:"Загружено",files:"файл(ов)",uploadFailed:"Не удалось загрузить файлы",browse:"Обзор",download:"Скачать"},Ce={title:"Быстрый деплой",description:"Разверните образ контейнера без настройки. Вставьте URL образа, проверьте параметры и разверните.",step1:"1. Введите URL образа",imageUrl:"URL образа",imageUrlHelp:"Полный URL образа с тегом (напр., git.example.com/user/app:dev-abc123)",inspect:"Проверить",inspecting:"Проверка...",step2:"2. Проверка конфигурации",reviewDesc:"Эти параметры были обнаружены из образа. Измените при необходимости перед деплоем.",projectName:"Имя проекта",port:"Порт",portHelp:"Порт контейнера (1-65535)",healthCheckPath:"Путь проверки здоровья",healthCheckHelp:"Необязательный HTTP-путь для проверки работоспособности",stage:"Стадия",development:"Разработка",release:"Релиз",production:"Продакшн",stageHelp:"Стадия развёртывания для этого образа",subdomainOverride:"Переопределение поддомена",subdomainHelp:"Оставьте пустым для использования шаблона по умолчанию",envVars:"Переменные окружения",envVarsHelp:"По одной на строку, формат KEY=VALUE",step3:"3. Развёртывание",deployDesc:"Будет создан новый проект и контейнер будет развёрнут немедленно.",deployBtn:"Развернуть",inspectedSuccess:"Образ успешно проверен",deployedSuccess:"{name} успешно развёрнут!",inspectFailed:"Не удалось проверить образ",deployFailed:"Развёртывание не удалось",browseImages:"Обзор",selectImage:"Выберите образ из реестра",noImages:"Образы не найдены",loadingImages:"Загрузка...",imageLoadFailed:"Не удалось загрузить образы"},Se={title:"Настройки",general:"Общие",registries:"Реестры",credentials:"Учётные данные",authentication:"Аутентификация",appearance:"Внешний вид",staleThreshold:"Порог устаревания (дни)",staleThresholdHelp:"Контейнеры, неактивные дольше этого срока, будут помечены как устаревшие."},Fe={title:"Общие настройки",globalConfig:"Глобальная конфигурация",domain:"Домен",domainHelp:"Базовый домен для маршрутизации поддоменов",serverIp:"IP сервера",serverIpHelp:"Публичный IP-адрес сервера",dockerNetwork:"Docker-сеть",dockerNetworkHelp:"Docker-сеть для развёрнутых контейнеров",subdomainPattern:"Шаблон поддомена",subdomainPatternHelp:"Шаблон для автоматически генерируемых поддоменов",pollingInterval:"Интервал опроса (секунды)",pollingIntervalHelp:"Как часто проверять реестры на новые теги (10-86400)",notificationUrl:"URL уведомлений",notificationUrlHelp:"URL вебхука для уведомлений о деплоях",saveSettings:"Сохранить настройки",saving:"Сохранение...",saved:"Настройки успешно сохранены",saveFailed:"Не удалось сохранить настройки",loadFailed:"Не удалось загрузить настройки",webhookUrl:"URL вебхука",webhookDesc:"Этот секретный URL получает уведомления о push-событиях из вашего CI-пайплайна.",noWebhookUrl:"URL вебхука не настроен",copy:"Копировать",copied:"URL вебхука скопирован в буфер обмена",regenerateUrl:"Перегенерировать URL",regenerating:"Перегенерация...",regenerated:"URL вебхука перегенерирован",regenerateFailed:"Не удалось перегенерировать URL вебхука",regenerateWarning:"Внимание: перегенерация сделает текущий URL недействительным. Обновите ваши CI-пайплайны.",sslCertificate:"SSL-сертификат",sslCertificateHelp:"Wildcard-сертификат из NPM для автоматического SSL на прокси-хостах",selectCertificate:"Выбрать сертификат",noCertificate:"Нет (без SSL)",clearCertificate:"Очистить",loadingCertificates:"Загрузка сертификатов...",noCertificatesFound:"Wildcard-сертификаты в NPM не найдены"},De={title:"Реестры контейнеров",description:"Управление реестрами контейнеров для обнаружения образов.",addRegistry:"Добавить реестр",editRegistry:"Редактировать реестр",addNewRegistry:"Добавить новый реестр",name:"Название",nameHelp:"Понятное название для этого реестра",url:"URL",urlHelp:"Базовый URL реестра",type:"Тип",typeHelp:"Тип реестра для совместимости API",token:"Токен",tokenHelpNew:"API-токен для аутентификации",tokenHelpEdit:"Оставьте пустым, чтобы сохранить текущий токен",owner:"Владелец",ownerHelp:"Владельцы пакетов через запятую (напр., alexei,my-org)",save:"Сохранить",saving:"Сохранение...",update:"Обновить",test:"Тест",testing:"Тестирование...",edit:"Изменить",delete:"Удалить",noRegistries:"Реестры ещё не настроены.",addFirst:"Добавьте первый реестр",registryUpdated:"Реестр обновлён",registryAdded:"Реестр добавлен",registryDeleted:"Реестр «{name}» удалён",testSuccess:"Подключение к «{name}» успешно",saveFailed:"Не удалось сохранить реестр",deleteFailed:"Не удалось удалить реестр",testFailed:"Тест подключения не удался",loadFailed:"Не удалось загрузить реестры",deleteConfirm:"Удалить реестр «{name}»? Это действие необратимо."},Ie={title:"Учётные данные",description:"Управление учётными данными для Nginx Proxy Manager и токенами реестров. Все значения зашифрованы.",npm:"Nginx Proxy Manager",npmDesc:"Учётные данные для управления прокси-хостами через NPM API",configured:"Настроено",npmUrl:"URL NPM",npmUrlHelp:"URL API Nginx Proxy Manager",email:"Email",emailHelp:"Email администратора NPM",password:"Пароль",passwordHelpNew:"Пароль администратора NPM (будет зашифрован)",passwordHelpEdit:"Введите новый пароль для замены текущего",changeCredentials:"Изменить учётные данные",save:"Сохранить",saving:"Сохранение...",saved:"Учётные данные NPM сохранены",saveFailed:"Не удалось сохранить учётные данные NPM",loadFailed:"Не удалось загрузить учётные данные",registryTokens:"Токены реестров",registryTokensDesc:"Токены аутентификации реестров управляются для каждого реестра в разделе",registriesLink:"Реестры",registryTokensSuffix:". Каждый реестр хранит свой токен в зашифрованном виде."},Re={title:"Настройки аутентификации",description:"Настройка режима аутентификации и управление пользователями.",authMode:"Режим аутентификации",local:"Локальный (логин/пароль)",oidc:"OIDC (SSO)",oidcConfig:"Конфигурация OIDC-провайдера",issuerUrl:"URL издателя",clientId:"ID клиента",clientSecret:"Секрет клиента",redirectUrl:"URL перенаправления",saveSettings:"Сохранить настройки",saving:"Сохранение...",saved:"Настройки сохранены",saveFailed:"Не удалось сохранить",loadFailed:"Не удалось загрузить настройки",localUsers:"Локальные пользователи",username:"Имя пользователя",email:"Email",role:"Роль",created:"Создан",noUsers:"Пользователи не найдены.",addUser:"Добавить пользователя",viewer:"Наблюдатель",admin:"Администратор",userCreated:"Пользователь создан",userDeleted:"Пользователь удалён",createFailed:"Не удалось создать пользователя",deleteFailed:"Не удалось удалить пользователя",deleteConfirm:"Вы уверены, что хотите удалить этого пользователя?",usernameRequired:"Имя пользователя и пароль обязательны",password:"Пароль"},Ue={title:"Docker Watcher",subtitle:"Войдите в свой аккаунт",username:"Имя пользователя",password:"Пароль",signIn:"Войти",signingIn:"Вход...",or:"или",ssoButton:"Войти через SSO (OIDC)",loginFailed:"Ошибка входа",networkError:"Ошибка сети"},be={title:"Прокси",create:"Создать прокси",noProxies:"Прокси ещё не настроены.",noProxiesDesc:"Создайте автономный прокси или разверните проект, чтобы увидеть прокси здесь.",standalone:"Автономные прокси",managed:"Управляемые",lastChecked:"Последняя проверка",health:{healthy:"Работает",unhealthy:"Недоступен",unknown:"Неизвестно"},filter:{search:"Поиск прокси...",health:"Здоровье",type:"Тип",all:"Все",clear:"Сбросить фильтры"},form:{title:"Создать прокси",editTitle:"Редактировать прокси",destination:"URL / IP назначения",port:"Порт",domain:"Домен",domainHelp:"Публичный домен для этого прокси.",validate:"Проверить",validating:"Проверка...",create:"Создать прокси",save:"Сохранить изменения",cancel:"Отмена",delete:"Удалить",deleteConfirm:"Удалить этот прокси? Это действие необратимо."},validation:{title:"Проверка назначения",syntax:"Синтаксис URL",dns:"DNS разрешение",tcp:"TCP подключение",http:"HTTP ответ",checking:"Проверка...",skipped:"Пропущено"}},ke={cancel:"Отмена",confirm:"Подтвердить",delete:"Удалить",edit:"Изменить",save:"Сохранить",retry:"Повторить",loading:"Загрузка...",noData:"Нет данных",project:"Проект",back:"Назад",actions:"Действия",stop:"Остановить",start:"Запустить",restart:"Перезапустить",remove:"Удалить",instance:"экземпляр",instances:"экземпляров"},Ne={stopConfirm:"Контейнер будет остановлен. Экземпляр можно будет запустить снова позже.",restartConfirm:"Контейнер будет перезапущен с кратковременным простоем.",removeConfirm:"Контейнер и его прокси-конфигурация будут безвозвратно удалены.",actionFailed:"Действие не удалось"},Le={noProjects:"Проектов пока нет",noProjectsDesc:"Начните с создания первого проекта или используйте быстрый деплой.",createProject:"Создать проект",noInstances:"Нет экземпляров",noInstancesDesc:"Разверните новую версию, чтобы увидеть экземпляры здесь.",noDeploys:"Нет истории деплоев",noDeploysDesc:"История деплоев появится здесь после первого развёртывания.",noRegistries:"Нет реестров",noRegistriesDesc:"Добавьте реестр контейнеров для обнаружения образов.",noVolumes:"Нет томов",noVolumesDesc:"Настройте монтирование томов для постоянных данных.",noUsers:"Нет пользователей",noUsersDesc:"Добавьте локальных пользователей для управления доступом."},je={required:"Поле {field} обязательно",invalidUrl:"Неверный формат URL",invalidDomain:"Неверный формат домена",invalidIp:"Неверный формат IP",invalidEmail:"Неверный формат email",invalidPort:"Порт должен быть от 1 до 65535",invalidPollingInterval:"Интервал опроса должен быть от 10 до 86400 секунд",invalidProjectName:"Допускаются только строчные буквы, цифры и дефисы",requiredWhenUpdating:"Поле {field} обязательно при обновлении учётных данных",requiredForNew:"Поле {field} обязательно для новых реестров"},Ae={stopInstance:"Остановить экземпляр",startInstance:"Запустить экземпляр",restartInstance:"Перезапустить экземпляр",removeInstance:"Удалить экземпляр"},He={light:"Светлая",dark:"Тёмная",system:"Системная"},Ee={search:"Поиск...",noResults:"Ничего не найдено"},Te={title:"Устаревшие контейнеры",noStale:"Нет устаревших контейнеров",noStaleDesc:"Все контейнеры исправны и работают.",cleanup:"Очистить",cleanupAll:"Очистить все",confirmCleanup:"Это остановит и удалит контейнер. Продолжить?",confirmBulkCleanup:"Это остановит и удалит все устаревшие контейнеры. Продолжить?",daysStale:"дней устарел",lastAlive:"Последний раз жив",count:"Устаревшие",cleanedUp:"Контейнер очищен",bulkCleanedUp:"{count} контейнеров очищено",cleanupFailed:"Не удалось очистить",loadFailed:"Не удалось загрузить устаревшие контейнеры"},xe={title:"Журнал событий",noEvents:"Событий не найдено",noEventsDesc:"События будут отображаться здесь по мере их возникновения.",loadMore:"Загрузить ещё",newEvents:"новых событий",filter:{severity:"Уровень",source:"Источник",dateRange:"Период",search:"Поиск событий...",lastHour:"Последний час",last24h:"Последние 24 часа",last7d:"Последние 7 дней",allTime:"За всё время",clear:"Сбросить фильтры"},severity:{info:"Инфо",warn:"Предупреждение",error:"Ошибка"},source:{deploy:"Развёртывание",container:"Контейнер",proxy:"Прокси",system:"Система"},metadata:"Подробности"},Me={cpu:"ЦП",mem:"ОЗУ",unavailable:"Статистика недоступна"},Ve={title:"Состояние системы",containers:"Контейнеры",proxies:"Прокси",recentErrors:"Недавние ошибки"},Oe={en:"Английский",ru:"Русский"},$e={app:pe,health:ue,nav:me,dashboard:ve,projects:fe,projectDetail:ye,envEditor:he,volumeEditor:we,volumeBrowser:Pe,quickDeploy:Ce,settings:Se,settingsGeneral:Fe,settingsRegistries:De,settingsCredentials:Ie,settingsAuth:Re,login:Ue,proxies:be,common:ke,instance:Ne,empty:Le,validation:je,confirm:Ae,theme:He,entityPicker:Ee,stale:Te,events:xe,stats:Me,systemHealth:Ve,language:Oe},P="dw_locale",c={en:ge,ru:$e};function _e(){if(typeof localStorage<"u"){const e=localStorage.getItem(P);if(e==="en"||e==="ru")return e}return typeof navigator<"u"&&navigator.language.toLowerCase().startsWith("ru")?"ru":"en"}const g=U(_e());g.subscribe(e=>{typeof localStorage<"u"&&localStorage.setItem(P,e)});function f(e,a){const o=a.split(".");let t=e;for(const n of o){if(t==null||typeof t!="object")return a;t=t[n]}return typeof t=="string"?t:a}const Ze=b(g,e=>{const a=c[e]??c.en;return(o,t)=>{let n=f(a,o);if(n===o&&(n=f(c.en,o)),t)for(const[r,i]of Object.entries(t))n=n.replace(new RegExp(`\\{${r}\\}`,"g"),i);return n}});function ze(e){g.set(e)}const Ye=["en","ru"];export{Ge as a,Be as b,We as c,Qe as d,ze as e,Ye as f,g as l,Ke as r,m as s,Ze as t};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/phMGo29-.js b/web/.svelte-kit/output/client/_app/immutable/chunks/phMGo29-.js
deleted file mode 100644
index f7516f1..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/phMGo29-.js
+++ /dev/null
@@ -1 +0,0 @@
-import{i as u,m as o,aq as a,o as t}from"./DKemW7Dm.js";function c(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function l(e){o===null&&c(),a&&o.l!==null?i(o).m.push(e):u(()=>{const n=t(e);if(typeof n=="function")return n})}function f(e){o===null&&c(),l(()=>()=>t(e))}function i(e){var n=e.l;return n.u??(n.u={a:[],b:[],m:[]})}export{f as a,l as o};
diff --git a/web/.svelte-kit/output/client/_app/immutable/chunks/scnZuc49.js b/web/.svelte-kit/output/client/_app/immutable/chunks/scnZuc49.js
deleted file mode 100644
index fd2c073..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/chunks/scnZuc49.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as n,f as p}from"./BJdXET8u.js";import{t as c}from"./DKemW7Dm.js";import{s as e,a as h,c as l}from"./kfynmD3Z.js";import{p as o}from"./BSXRhUWv.js";var m=p(' ');function g(r,s){const a=o(s,"size",3,20),i=o(s,"class",3,"");var t=m();c(()=>{e(t,"width",a()),e(t,"height",a()),h(t,0,l(i()))}),n(r,t)}export{g as I};
diff --git a/web/.svelte-kit/output/client/_app/immutable/entry/app.C3eO1cEh.js b/web/.svelte-kit/output/client/_app/immutable/entry/app.C3eO1cEh.js
deleted file mode 100644
index beb2559..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/entry/app.C3eO1cEh.js
+++ /dev/null
@@ -1,2 +0,0 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BMqZW0X_.js","../chunks/BJdXET8u.js","../chunks/DKemW7Dm.js","../chunks/phMGo29-.js","../chunks/BSXRhUWv.js","../chunks/CZnXUJhL.js","../chunks/CnPWu_ZO.js","../chunks/kfynmD3Z.js","../chunks/DELaSNrV.js","../chunks/CWhLh9u1.js","../chunks/BSEsuAwr.js","../chunks/BlV-f-zB.js","../chunks/CjZL2MYp.js","../chunks/LFhQE6G2.js","../chunks/R0-LJft-.js","../chunks/CGCp4lb_.js","../chunks/CcoMVVg8.js","../chunks/DrzuxmSv.js","../chunks/Hsiz6fBZ.js","../chunks/CWCQOKDd.js","../chunks/CvtQ6g1S.js","../chunks/DPFeFjvi.js","../chunks/DTyrBG6r.js","../chunks/Bpb8V1MF.js","../assets/0.DnmtykcB.css","../nodes/1.Bdu_R2Hn.js","../nodes/2.DWWtnNKd.js","../chunks/DqoiTw6k.js","../chunks/DhEbbC3M.js","../nodes/3.C0WC8trC.js","../chunks/ecfdBtDb.js","../chunks/BPqRr2-s.js","../chunks/ip4Jv8C8.js","../chunks/BE_zO38m.js","../chunks/CexodXHl.js","../chunks/DVE7XZFM.js","../nodes/4.BxW_ZYFP.js","../chunks/scnZuc49.js","../chunks/C8zo5-Sk.js","../chunks/BFW91e3Y.js","../nodes/5.C24PPPF_.js","../chunks/Bxa5VUw6.js","../chunks/DfwQ65vN.js","../chunks/DgtbvmBB.js","../chunks/BxXVdbgr.js","../chunks/BoGS7hWi.js","../chunks/BvIWRct8.js","../assets/EntityPicker.D4Qf6tQ2.css","../nodes/6.CEvKoBqC.js","../nodes/7.DneEC9SR.js","../nodes/8.BQus6eSQ.js","../chunks/C6FeVxU4.js","../nodes/9.g1C7u4k3.js","../chunks/BphdEXYy.js","../chunks/Icw0y4KW.js","../chunks/CPatcLwq.js","../chunks/BberSjRt.js","../nodes/10.DFEGHcUu.js","../chunks/CpnAtA5t.js","../nodes/11.DMrjUtpD.js","../nodes/12.BO7G7YPE.js","../nodes/13.DJV70kty.js","../nodes/14.udJGaOK1.js","../chunks/DsQCf6vC.js","../nodes/15.BC8amYnm.js","../nodes/16.DrkZ20qh.js","../nodes/17.CjAaIU5M.js","../nodes/18.C3f1k8vs.js","../nodes/19.CiwgThsf.js"])))=>i.map(i=>d[i]);
-var M=r=>{throw TypeError(r)};var X=(r,t,e)=>t.has(r)||M("Cannot "+e);var l=(r,t,e)=>(X(r,t,"read from private field"),e?e.call(r):t.get(r)),G=(r,t,e)=>t.has(r)?M("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),H=(r,t,e,n)=>(X(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e);import{Q as Z,a0 as ct,l as _t,E as mt,a1 as lt,a3 as dt,V as ft,U as $,aK as vt,W as ht,d as Y,aJ as gt,g as h,aL as Et,aA as Pt,ae as pt,p as yt,n as Rt,i as Ot,Y as At,h as L,s as Tt,e as bt,a as J,c as Lt,r as It,u as j,t as Dt}from"../chunks/DKemW7Dm.js";import{i as Vt,m as wt,u as xt,a as P,g as V,b as et,t as jt,s as kt}from"../chunks/BJdXET8u.js";import{o as St}from"../chunks/phMGo29-.js";import{B as Ct,p as B,i as U}from"../chunks/BSXRhUWv.js";import{b as k}from"../chunks/BoGS7hWi.js";function S(r,t,e){var n;Z&&(n=ht,ct());var i=new Ct(r);_t(()=>{var m=t()??null;if(Z){var s=lt(n),a=s===vt,u=m!==null;if(a!==u){var y=dt();ft(y),i.anchor=y,$(!1),i.ensure(m,m&&(c=>e(c,m))),$(!0);return}}i.ensure(m,m&&(c=>e(c,m)))},mt)}function Bt(r){return class extends Ut{constructor(t){super({component:r,...t})}}}var p,d;class Ut{constructor(t){G(this,p);G(this,d);var m;var e=new Map,n=(s,a)=>{var u=pt(a,!1,!1);return e.set(s,u),u};const i=new Proxy({...t.props||{},$$events:{}},{get(s,a){return h(e.get(a)??n(a,Reflect.get(s,a)))},has(s,a){return a===gt?!0:(h(e.get(a)??n(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,u){return Y(e.get(a)??n(a,u),u),Reflect.set(s,a,u)}});H(this,d,(t.hydrate?Vt:wt)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((m=t==null?void 0:t.props)!=null&&m.$$host)||t.sync===!1)&&Et(),H(this,p,i.$$events);for(const s of Object.keys(l(this,d)))s==="$set"||s==="$destroy"||s==="$on"||Pt(this,s,{get(){return l(this,d)[s]},set(a){l(this,d)[s]=a},enumerable:!0});l(this,d).$set=s=>{Object.assign(i,s)},l(this,d).$destroy=()=>{xt(l(this,d))}}$set(t){l(this,d).$set(t)}$on(t,e){l(this,p)[t]=l(this,p)[t]||[];const n=(...i)=>e.call(this,...i);return l(this,p)[t].push(n),()=>{l(this,p)[t]=l(this,p)[t].filter(i=>i!==n)}}$destroy(){l(this,d).$destroy()}}p=new WeakMap,d=new WeakMap;const Yt="modulepreload",qt=function(r,t){return new URL(r,t).href},tt={},o=function(t,e,n){let i=Promise.resolve();if(e&&e.length>0){let s=function(c){return Promise.all(c.map(g=>Promise.resolve(g).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};const a=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),y=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));i=s(e.map(c=>{if(c=qt(c,n),c in tt)return;tt[c]=!0;const g=c.endsWith(".css"),R=g?'[rel="stylesheet"]':"";if(!!n)for(let O=a.length-1;O>=0;O--){const _=a[O];if(_.href===c&&(!g||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${R}`))return;const E=document.createElement("link");if(E.rel=g?"stylesheet":Yt,g||(E.as="script"),E.crossOrigin="",E.href=c,y&&E.setAttribute("nonce",y),document.head.appendChild(E),g)return new Promise((O,_)=>{E.addEventListener("load",O),E.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function m(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return i.then(s=>{for(const a of s||[])a.status==="rejected"&&m(a.reason);return t().catch(m)})},$t={};var Ft=et('
'),Nt=et(" ",1);function Wt(r,t){yt(t,!0);let e=B(t,"components",23,()=>[]),n=B(t,"data_0",3,null),i=B(t,"data_1",3,null),m=B(t,"data_2",3,null);Rt(()=>t.stores.page.set(t.page)),Ot(()=>{t.stores,t.page,t.constructors,e(),t.form,n(),i(),m(),t.stores.page.notify()});let s=J(!1),a=J(!1),u=J(null);St(()=>{const _=t.stores.page.subscribe(()=>{h(s)&&(Y(a,!0),At().then(()=>{Y(u,document.title||"untitled page",!0)}))});return Y(s,!0),_});const y=j(()=>t.constructors[2]);var c=Nt(),g=L(c);{var R=_=>{const A=j(()=>t.constructors[0]);var T=V(),w=L(T);S(w,()=>h(A),(b,I)=>{k(I(b,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(f,Ht)=>{var Q=V(),at=L(Q);{var st=D=>{const q=j(()=>t.constructors[1]);var x=V(),F=L(x);S(F,()=>h(q),(N,W)=>{k(W(N,{get data(){return i()},get form(){return t.form},get params(){return t.page.params},children:(v,Jt)=>{var z=V(),nt=L(z);S(nt,()=>h(y),(it,ut)=>{k(ut(it,{get data(){return m()},get form(){return t.form},get params(){return t.page.params}}),C=>e()[2]=C,()=>{var C;return(C=e())==null?void 0:C[2]})}),P(v,z)},$$slots:{default:!0}}),v=>e()[1]=v,()=>{var v;return(v=e())==null?void 0:v[1]})}),P(D,x)},ot=D=>{const q=j(()=>t.constructors[1]);var x=V(),F=L(x);S(F,()=>h(q),(N,W)=>{k(W(N,{get data(){return i()},get form(){return t.form},get params(){return t.page.params}}),v=>e()[1]=v,()=>{var v;return(v=e())==null?void 0:v[1]})}),P(D,x)};U(at,D=>{t.constructors[2]?D(st):D(ot,-1)})}P(f,Q)},$$slots:{default:!0}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),P(_,T)},K=_=>{const A=j(()=>t.constructors[0]);var T=V(),w=L(T);S(w,()=>h(A),(b,I)=>{k(I(b,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),P(_,T)};U(g,_=>{t.constructors[1]?_(R):_(K,-1)})}var E=Tt(g,2);{var O=_=>{var A=Ft(),T=Lt(A);{var w=b=>{var I=jt();Dt(()=>kt(I,h(u))),P(b,I)};U(T,b=>{h(a)&&b(w)})}It(A),P(_,A)};U(E,_=>{h(s)&&_(O)})}P(r,c),bt()}const te=Bt(Wt),ee=[()=>o(()=>import("../nodes/0.BMqZW0X_.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>o(()=>import("../nodes/1.Bdu_R2Hn.js"),__vite__mapDeps([25,1,2,10,11,9,3]),import.meta.url),()=>o(()=>import("../nodes/2.DWWtnNKd.js"),__vite__mapDeps([26,1,2,4,6,5,7,8,9,3,19,27,28]),import.meta.url),()=>o(()=>import("../nodes/3.C0WC8trC.js"),__vite__mapDeps([29,1,2,4,5,30,7,23,22,31,32,10,33,34,15,20,18,35]),import.meta.url),()=>o(()=>import("../nodes/4.BxW_ZYFP.js"),__vite__mapDeps([36,1,2,4,5,30,23,22,7,37,35,38,15,34,32,10,33,39,12]),import.meta.url),()=>o(()=>import("../nodes/5.C24PPPF_.js"),__vite__mapDeps([40,1,2,4,30,7,41,23,22,42,43,44,5,45,14,46,47,12,18,39]),import.meta.url),()=>o(()=>import("../nodes/6.CEvKoBqC.js"),__vite__mapDeps([48,1,2,3,4,5,45,7,23,22,21,34]),import.meta.url),()=>o(()=>import("../nodes/7.DneEC9SR.js"),__vite__mapDeps([49,1,2,3,4,7,43,9,8,16,39,22]),import.meta.url),()=>o(()=>import("../nodes/8.BQus6eSQ.js"),__vite__mapDeps([50,1,2,4,5,30,7,23,22,51,46,39,42,43,33,34,44,45,14,47]),import.meta.url),()=>o(()=>import("../nodes/9.g1C7u4k3.js"),__vite__mapDeps([52,1,2,4,5,30,7,43,41,8,9,3,23,22,31,33,38,15,37,53,34,18,51,13,14,54,27,39,35,55,42,56,12]),import.meta.url),()=>o(()=>import("../nodes/10.DFEGHcUu.js"),__vite__mapDeps([57,1,2,4,5,30,7,43,41,8,9,3,23,22,12,37,51,13,14,54,39,55,58,56,33,34]),import.meta.url),()=>o(()=>import("../nodes/11.DMrjUtpD.js"),__vite__mapDeps([59,1,2,4,5,30,7,43,41,8,9,3,23,22,12,37,51,13,14,54,53,46,55,33]),import.meta.url),()=>o(()=>import("../nodes/12.BO7G7YPE.js"),__vite__mapDeps([60,1,2,4,5,30,7,45,8,9,3,23,22,12,54,39,33]),import.meta.url),()=>o(()=>import("../nodes/13.DJV70kty.js"),__vite__mapDeps([61,1,2,3,4,5,30,23,22,7,53,55,58,6,54,41,14,46,34,17,39]),import.meta.url),()=>o(()=>import("../nodes/14.udJGaOK1.js"),__vite__mapDeps([62,1,2,10,4,30,11,9,3,7,63,23,22,42,43,5,13,14,39,38,15,17]),import.meta.url),()=>o(()=>import("../nodes/15.BC8amYnm.js"),__vite__mapDeps([64,1,2,3,4,30,8,9,23,22,7,63,42,43,5,13,14,39,38,15,17]),import.meta.url),()=>o(()=>import("../nodes/16.DrkZ20qh.js"),__vite__mapDeps([65,1,2,4,5,30,7,23,22,42,43,44,45,14,46,47,12,28,39,33]),import.meta.url),()=>o(()=>import("../nodes/17.CjAaIU5M.js"),__vite__mapDeps([66,1,2,3,4,5,7,43,41,37,51,39,34,22]),import.meta.url),()=>o(()=>import("../nodes/18.C3f1k8vs.js"),__vite__mapDeps([67,1,2,4,5,30,7,23,22,42,43,33,12,13,39,55]),import.meta.url),()=>o(()=>import("../nodes/19.CiwgThsf.js"),__vite__mapDeps([68,1,2,4,5,30,41,23,22,42,7,43,34,33,12,37,51,39,55]),import.meta.url)],re=[],ae={"/":[3],"/containers/stale":[4],"/deploy":[5],"/events":[6],"/login":[7],"/projects":[8],"/projects/[id]":[9],"/projects/[id]/env":[10],"/projects/[id]/volumes":[11],"/projects/[id]/volumes/[volId]/browse":[12],"/proxies":[13],"/proxies/create":[14],"/proxies/[id]/edit":[15],"/settings":[16,[2]],"/settings/auth":[17,[2]],"/settings/credentials":[18,[2]],"/settings/registries":[19,[2]]},rt={handleError:(({error:r})=>{console.error(r)}),reroute:(()=>{}),transport:{}},Gt=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.decode])),se=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.encode])),oe=!1,ne=(r,t)=>Gt[r](t);export{ne as decode,Gt as decoders,ae as dictionary,se as encoders,oe as hash,rt as hooks,$t as matchers,ee as nodes,te as root,re as server_loads};
diff --git a/web/.svelte-kit/output/client/_app/immutable/entry/start.BU-sFgwv.js b/web/.svelte-kit/output/client/_app/immutable/entry/start.BU-sFgwv.js
deleted file mode 100644
index e257640..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/entry/start.BU-sFgwv.js
+++ /dev/null
@@ -1 +0,0 @@
-import{l as o,a as r}from"../chunks/CWhLh9u1.js";export{o as load_css,r as start};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/0.BMqZW0X_.js b/web/.svelte-kit/output/client/_app/immutable/nodes/0.BMqZW0X_.js
deleted file mode 100644
index a0c4d15..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/0.BMqZW0X_.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import{a as v,f as V,d as ve,b as k,s as S,c as U,g as dt}from"../chunks/BJdXET8u.js";import{a as vt}from"../chunks/phMGo29-.js";import{t as g,p as ce,e as pe,c as n,g as t,r as a,s as d,w as ct,az as pt,i as ie,d as K,h as Ae,a as le,u as H}from"../chunks/DKemW7Dm.js";import{p as w,s as he,i as D,a as q}from"../chunks/BSXRhUWv.js";import{e as R,i as de}from"../chunks/CZnXUJhL.js";import{s as Oe}from"../chunks/CnPWu_ZO.js";import{s as u,a as y,c as A,t as qe,e as ht,f as ut,l as xt}from"../chunks/kfynmD3Z.js";import{p as ft}from"../chunks/DELaSNrV.js";import"../chunks/BSEsuAwr.js";import{i as Se}from"../chunks/BlV-f-zB.js";import{t as Pe}from"../chunks/CjZL2MYp.js";import{I as gt}from"../chunks/LFhQE6G2.js";import{I as je}from"../chunks/R0-LJft-.js";import{I as mt}from"../chunks/CGCp4lb_.js";import{s as bt,t as yt,a as Ze,r as wt}from"../chunks/CcoMVVg8.js";import{I as _t}from"../chunks/DrzuxmSv.js";import{I as kt}from"../chunks/Hsiz6fBZ.js";import{I as Mt}from"../chunks/CWCQOKDd.js";import{I as zt}from"../chunks/CvtQ6g1S.js";import{c as It}from"../chunks/DPFeFjvi.js";import{i as $t,c as jt}from"../chunks/DTyrBG6r.js";import{_ as Ge}from"../chunks/Bpb8V1MF.js";const St=!1,Ct=!1,Hr=Object.freeze(Object.defineProperty({__proto__:null,prerender:Ct,ssr:St},Symbol.toStringTag,{value:"Module"}));var Bt=V(' ');function Lt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Bt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Dt=V(' ');function Tt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Dt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Kt=V(' ');function Vt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Kt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Et=V(' ');function Ht(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Et();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Ut=V(' ');function At(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Ut();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Ot=V(' ');function Pt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Ot();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Zt=V(' ');function Gt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Zt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Nt=V(' ');function qt(l,o){const r=w(o,"size",3,20),i=w(o,"class",3,"");var e=Nt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Wt=V(' ');function Xt(l,o){const r=w(o,"size",3,24),i=w(o,"class",3,"");var e=Wt();g(()=>{u(e,"width",r()),u(e,"height",r()),y(e,0,A(i()))}),v(l,e)}var Ft=k(''),Jt=k('
');function Qt(l,o){ce(o,!1);const r=()=>q(Pe,"$toasts",i),[i,e]=he(),C={success:"bg-[var(--color-success)]",error:"bg-[var(--color-danger)]",warning:"bg-[var(--color-warning)]",info:"bg-[var(--color-info)]"};Se();var T=Jt();R(T,5,r,$=>$.id,($,j)=>{var c=Ft(),p=n(c),M=n(p);{var O=I=>{gt(I,{size:18})},Z=I=>{je(I,{size:18})},P=I=>{mt(I,{size:18})},h=I=>{Vt(I,{size:18})};D(M,I=>{t(j).type==="success"?I(O):t(j).type==="error"?I(Z,1):t(j).type==="warning"?I(P,2):I(h,-1)})}a(p);var X=d(p,2),ue=n(X,!0);a(X);var W=d(X,2),Y=n(W);je(Y,{size:16}),a(W),a(c),g(()=>{y(c,1,`pointer-events-auto flex items-center gap-3 rounded-xl px-4 py-3 text-white shadow-lg animate-slide-in ${C[t(j).type]??""}`),S(ue,t(j).message)}),U("click",W,()=>Pe.remove(t(j).id)),v($,c)}),a(T),v(l,T),pe(),e()}ve(["click"]);var Rt=k(' '),Yt=k('
');function er(l,o){ce(o,!1);const r=()=>q(yt,"$themeMode",e),i=()=>q(qe,"$t",e),[e,C]=he(),T=["light","dark","system"];Se();var $=Yt();R($,5,()=>T,de,(j,c)=>{var p=Rt(),M=n(p);{var O=h=>{Ht(h,{size:14})},Z=h=>{At(h,{size:14})},P=h=>{Pt(h,{size:14})};D(M,h=>{t(c)==="light"?h(O):t(c)==="dark"?h(Z,1):h(P,-1)})}a(p),g(h=>{y(p,1,`flex items-center justify-center rounded-md p-1.5 transition-all duration-150
- ${r()===t(c)?"bg-[var(--color-brand-100)] text-[var(--color-brand-700)] shadow-sm":"text-[var(--text-tertiary)] hover:text-[var(--text-secondary)]"}`),u(p,"title",h)},[()=>i()(`theme.${t(c)}`)]),U("click",p,()=>bt(t(c))),v(j,p)}),a($),v(l,$),pe(),C()}ve(["click"]);var tr=k(' '),rr=k('');function ar(l,o){ce(o,!1);const r=()=>q(xt,"$locale",i),[i,e]=he();Se();var C=rr(),T=n(C);_t(T,{size:14,class:"text-[var(--text-tertiary)]"});var $=d(T,2);R($,5,()=>ut,de,(j,c)=>{var p=tr(),M=n(p,!0);a(p),g(O=>{y(p,1,`rounded-md px-2 py-0.5 text-xs font-medium transition-all duration-150
- ${r()===t(c)?"bg-[var(--color-brand-100)] text-[var(--color-brand-700)] shadow-sm":"text-[var(--text-tertiary)] hover:text-[var(--text-secondary)]"}`),S(M,O)},[()=>t(c).toUpperCase()]),U("click",p,()=>ht(t(c))),v(j,p)}),a($),a(C),v(l,C),pe(),e()}ve(["click"]);function or(){const{subscribe:l,set:o,update:r}=ct({statuses:{},lastUpdate:0,deployStatuses:{}});return{subscribe:l,update(i){r(e=>({...e,statuses:{...e.statuses,[i.instance_id]:i.status},lastUpdate:Date.now()}))},notifyDeploy(i){r(e=>({...e,deployStatuses:{...e.deployStatuses,[i.deploy_id]:i},lastUpdate:Date.now()}))},getStatus(i){return pt({subscribe:l}).statuses[i]},reset(){o({statuses:{},lastUpdate:0,deployStatuses:{}})}}}const Ne=or();var sr=k('
'),nr=k('
'),ir=k(" "),lr=k(' '),dr=V(' '),vr=k('• '),cr=k(' '),pr=k(''),hr=k('
'),ur=k(''),xr=k(" ",1);function Ur(l,o){ce(o,!0);const r=()=>q(ft,"$page",C),i=()=>q(wt,"$resolvedTheme",C),e=()=>q(qe,"$t",C),[C,T]=he(),$=[{href:"/",labelKey:"nav.dashboard",icon:"dashboard"},{href:"/projects",labelKey:"nav.projects",icon:"projects"},{href:"/deploy",labelKey:"nav.deploy",icon:"deploy"},{href:"/proxies",labelKey:"nav.proxies",icon:"proxies"},{href:"/events",labelKey:"nav.events",icon:"events"},{href:"/settings",labelKey:"nav.settings",icon:"settings"}];function j(m,b){return m==="/"?b==="/":b.startsWith(m)}let c=null,p=le(!1),M=le(null),O=le(!1),Z=null,P=le(!1);const h=H(()=>{var m;return((m=t(M))==null?void 0:m.connected)??!1}),X=H(()=>r().url.pathname==="/login");ie(()=>{Ze(i())}),ie(()=>{if(typeof window>"u")return;const m=window.matchMedia("(prefers-color-scheme: dark)"),b=()=>Ze(i());return m.addEventListener("change",b),()=>m.removeEventListener("change",b)}),ie(()=>{r().url.pathname,K(p,!1)});function ue(){jt(),c==null||c.close(),c=null,window.location.href="/login"}ie(()=>{if(r().url.pathname,!$t()||c)return;c=It({onInstanceStatus(b){Ne.update(b)},onDeployStatus(b){Ne.notifyDeploy(b)}});async function m(){try{const b=await Ge();K(M,b.docker,!0)}catch{K(M,{connected:!1},!0)}K(O,!0)}m(),Z=setInterval(m,3e4)}),vt(()=>{c==null||c.close(),c=null,Z&&clearInterval(Z)});var W=xr(),Y=Ae(W);{var I=m=>{var b=dt(),ee=Ae(b);Oe(ee,()=>o.children),v(m,b)},We=m=>{var b=ur(),ee=n(b);{var Fe=B=>{var f=sr();U("click",f,()=>{K(p,!1)}),v(B,f)};D(ee,B=>{t(p)&&B(Fe)})}var te=d(ee,2),xe=n(te),fe=d(n(xe),2),Je=n(fe,!0);a(fe);var ge=d(fe,2),Qe=n(ge);je(Qe,{size:20}),a(ge),a(xe);var me=d(xe,2);R(me,21,()=>$,de,(B,f)=>{const _=H(()=>j(t(f).href,r().url.pathname));var L=ir(),G=n(L);{var F=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");Lt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}},_e=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");Tt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}},J=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");kt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}},ke=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");zt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}},Me=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");qt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}},ze=s=>{{let x=H(()=>t(_)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)] group-hover:text-[var(--text-secondary)]");Mt(s,{size:18,get class(){return`${t(x)??""} transition-colors duration-150`}})}};D(G,s=>{t(f).icon==="dashboard"?s(F):t(f).icon==="projects"?s(_e,1):t(f).icon==="deploy"?s(J,2):t(f).icon==="proxies"?s(ke,3):t(f).icon==="events"?s(Me,4):t(f).icon==="settings"&&s(ze,5)})}var oe=d(G),Ie=d(oe);{var z=s=>{var x=nr();v(s,x)};D(Ie,s=>{t(_)&&s(z)})}a(L),g(s=>{u(L,"href",t(f).href),y(L,1,`group flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-all duration-150
- ${t(_)?"bg-[var(--color-brand-50)] text-[var(--color-brand-700)] shadow-sm":"text-[var(--text-secondary)] hover:bg-[var(--surface-card-hover)] hover:text-[var(--text-primary)]"}`),S(oe,` ${s??""} `)},[()=>e()(t(f).labelKey)]),v(B,L)}),a(me);var Ce=d(me,2),Be=n(Ce);{var Re=B=>{var f=hr(),_=n(f),L=n(_),G=n(L);{var F=z=>{var s=lr();v(z,s)};D(G,z=>{t(h)&&z(F)})}var _e=d(G,2);a(L);var J=d(L,2),ke=n(J);a(J);var Me=d(J,2);{var ze=z=>{var s=dr();g(()=>y(s,0,`h-3 w-3 transition-transform ${t(P)?"rotate-180":""}`)),v(z,s)};D(Me,z=>{t(h)||z(ze)})}a(_);var oe=d(_,2);{var Ie=z=>{var s=pr(),x=n(s);R(x,21,()=>t(M).hints,de,(E,Q)=>{var N=vr(),se=d(n(N),2),ne=n(se,!0);a(se),a(N),g(()=>S(ne,t(Q))),v(E,N)}),a(x);var Ue=d(x,2);{var st=E=>{var Q=cr(),N=n(Q),se=n(N,!0);a(N);var ne=d(N,2),it=n(ne,!0);a(ne),a(Q),g(lt=>{S(se,lt),S(it,t(M).error)},[()=>e()("health.rawError")]),v(E,Q)};D(Ue,E=>{t(M).error&&E(st)})}var $e=d(Ue,2),nt=n($e,!0);a($e),a(s),g(E=>S(nt,E),[()=>e()("health.retryNow")]),U("click",$e,async()=>{try{const E=await Ge();K(M,E.docker,!0)}catch{K(M,{connected:!1},!0)}}),v(z,s)};D(oe,z=>{var s,x;!t(h)&&t(P)&&((x=(s=t(M))==null?void 0:s.hints)!=null&&x.length)&&z(Ie)})}a(f),g(z=>{y(f,1,`rounded-md ${t(h)?"":"bg-red-50 dark:bg-red-950/30"}`),y(_,1,`flex w-full items-center gap-2 px-2 py-1.5 text-xs ${t(h)?"text-emerald-600":"text-red-500 cursor-pointer"}`),_.disabled=t(h),y(_e,1,`relative inline-flex h-2 w-2 rounded-full ${t(h)?"bg-emerald-500":"bg-red-500"}`),S(ke,`Docker ${z??""}`)},[()=>t(h)?e()("health.connected"):e()("health.disconnected")]),U("click",_,()=>{t(h)||K(P,!t(P))}),v(B,f)};D(Be,B=>{t(O)&&B(Re)})}var be=d(Be,2),Le=n(be);er(Le,{});var Ye=d(Le,2);ar(Ye,{}),a(be);var De=d(be,2),ye=n(De),et=n(ye);a(ye);var re=d(ye,2),Te=n(re);Xt(Te,{size:14});var tt=d(Te);a(re),a(De),a(Ce),a(te);var Ke=d(te,2),we=n(Ke),ae=n(we),rt=n(ae);Gt(rt,{size:22}),a(ae);var Ve=d(ae,4),at=n(Ve,!0);a(Ve),a(we);var Ee=d(we,2),He=n(Ee),ot=n(He);Oe(ot,()=>o.children),a(He),a(Ee),a(Ke),a(b),g((B,f,_,L,G,F)=>{y(te,1,`fixed inset-y-0 left-0 z-50 flex w-64 flex-col border-r border-[var(--border-primary)] bg-[var(--surface-sidebar)] transition-transform duration-300 lg:static lg:translate-x-0
- ${t(p)?"translate-x-0":"-translate-x-full"}`),S(Je,B),S(et,`${f??""} ${_??""}`),u(re,"title",L),S(tt,` ${G??""}`),S(at,F)},[()=>e()("app.name"),()=>e()("app.name"),()=>e()("app.version"),()=>e()("nav.logout"),()=>e()("nav.logout"),()=>e()("app.name")]),U("click",ge,()=>{K(p,!1)}),U("click",re,ue),U("click",ae,()=>{K(p,!0)}),v(m,b)};D(Y,m=>{t(X)?m(I):m(We,-1)})}var Xe=d(Y,2);Qt(Xe,{}),v(l,W),pe(),T()}ve(["click"]);export{Ur as component,Hr as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/1.Bdu_R2Hn.js b/web/.svelte-kit/output/client/_app/immutable/nodes/1.Bdu_R2Hn.js
deleted file mode 100644
index bb42f8f..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/1.Bdu_R2Hn.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as u,b as g,s as a}from"../chunks/BJdXET8u.js";import"../chunks/BSEsuAwr.js";import{p as l,h as v,t as d,e as _,c as o,r as p,s as x}from"../chunks/DKemW7Dm.js";import{i as $}from"../chunks/BlV-f-zB.js";import{s as b,p as m}from"../chunks/CWhLh9u1.js";const k={get error(){return m.error},get status(){return m.status}};b.updated.check;const i=k;var E=g("
",1);function A(c,n){l(n,!1),$();var t=E(),r=v(t),f=o(r,!0);p(r);var s=x(r,2),h=o(s,!0);p(s),d(()=>{var e;a(f,i.status),a(h,(e=i.error)==null?void 0:e.message)}),u(c,t),_()}export{A as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/10.DFEGHcUu.js b/web/.svelte-kit/output/client/_app/immutable/nodes/10.DFEGHcUu.js
deleted file mode 100644
index f04fa1e..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/10.DFEGHcUu.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Ve,a as v,s as i,b as l,g as Ce,c as ht}from"../chunks/BJdXET8u.js";import{p as Ne,a as p,b as Wt,i as se,g as t,t as c,e as Ue,d,f as Je,u as gt,c as r,$ as Me,r as e,s,h as Zt,k as Re}from"../chunks/DKemW7Dm.js";import{i as D,s as Xe,a as de}from"../chunks/BSXRhUWv.js";import{e as te}from"../chunks/CZnXUJhL.js";import{h as Ye}from"../chunks/ecfdBtDb.js";import{s as K,t as qe,c as Be,a as Ge,r as Vt}from"../chunks/kfynmD3Z.js";import{b as Ct}from"../chunks/DgtbvmBB.js";import{b as He}from"../chunks/Bxa5VUw6.js";import{p as Qe}from"../chunks/DELaSNrV.js";import{g as We,b as Ze,u as tr,d as er,c as rr}from"../chunks/Bpb8V1MF.js";import{t as W}from"../chunks/CjZL2MYp.js";import{I as ar}from"../chunks/scnZuc49.js";import{I as or}from"../chunks/C6FeVxU4.js";import{I as sr}from"../chunks/LFhQE6G2.js";import{I as dr}from"../chunks/R0-LJft-.js";import{I as ir}from"../chunks/Icw0y4KW.js";import{I as nr}from"../chunks/BFW91e3Y.js";import{I as vr}from"../chunks/CPatcLwq.js";import{I as lr}from"../chunks/CpnAtA5t.js";import{T as ie}from"../chunks/BberSjRt.js";import{S as ne}from"../chunks/BE_zO38m.js";import{E as cr}from"../chunks/CexodXHl.js";var pr=l('
'),ur=l(''),xr=l(" "),mr=l(' '),fr=l(' '),_r=l(' '),yr=l(''),br=l('
'),hr=l('
'),gr=l(' '),Er=l(' '),kr=l(' '),wr=l('
'),Ir=l(''),jr=l('
',1),Sr=l('
',1),zr=l('');function Qr(ve,le){Ne(le,!0);const ce=()=>de(Qe,"$page",ee),o=()=>de(qe,"$t",ee),[ee,pe]=Xe();let st=p(Wt([])),x=p(""),Et=p(Wt([])),dt=p(Wt({})),Nt=p(!0),Ut=p(!1),kt=p(""),Z=p(""),wt=p(""),it=p(!1),T=p(!1),nt=p(""),vt=p(""),lt=p(""),ct=p(!1);const V=gt(()=>ce().params.id);async function ue(){d(Nt,!0),d(kt,"");try{const a=await We(t(V));d(st,a.stages??[],!0);try{d(dt,JSON.parse(a.project.env||"{}"),!0)}catch{d(dt,{},!0)}t(st).length>0&&!t(x)&&d(x,t(st)[0].id,!0)}catch(a){d(kt,a instanceof Error?a.message:o()("envEditor.loadFailed"),!0)}finally{d(Nt,!1)}}async function It(a){if(a){d(Ut,!0);try{d(Et,await Ze(t(V),a),!0)}catch(n){W.error(n instanceof Error?n.message:o()("envEditor.loadEnvFailed")),d(Et,[],!0)}finally{d(Ut,!1)}}}async function xe(){if(!(!t(Z).trim()||!t(x))){d(T,!0);try{await rr(t(V),t(x),{key:t(Z).trim(),value:t(wt),encrypted:t(it)}),d(Z,""),d(wt,""),d(it,!1),W.success(o()("envEditor.envAdded")),await It(t(x))}catch(a){W.error(a instanceof Error?a.message:o()("envEditor.addFailed"))}finally{d(T,!1)}}}function me(a){d(nt,a.id,!0),d(vt,a.key,!0),d(lt,a.encrypted?"":a.value,!0),d(ct,a.encrypted,!0)}function fe(){d(nt,"")}async function _e(){if(t(vt).trim()){d(T,!0);try{const a={key:t(vt).trim(),encrypted:t(ct)};t(lt)&&(a.value=t(lt)),await tr(t(V),t(x),t(nt),a),d(nt,""),W.success(o()("envEditor.envUpdated")),await It(t(x))}catch(a){W.error(a instanceof Error?a.message:o()("envEditor.updateFailed"))}finally{d(T,!1)}}}async function ye(a){try{await er(t(V),t(x),a),W.success(o()("envEditor.envDeleted")),await It(t(x))}catch(n){W.error(n instanceof Error?n.message:o()("envEditor.deleteFailed"))}}function re(a){return t(Et).some(n=>n.key===a)}se(()=>{t(V),ue()}),se(()=>{t(x)&&It(t(x))});var Jt=zr();Ye("1fdiw6z",a=>{Je((n,m)=>{Me.title=`${n??""} - ${m??""}`},[()=>o()("envEditor.title"),()=>o()("app.name")])});var Mt=r(Jt),Rt=r(Mt),jt=r(Rt),be=r(jt,!0);e(jt);var he=s(jt,2);ir(he,{size:14}),e(Rt);var Xt=s(Rt,2),ge=r(Xt,!0);e(Xt);var ae=s(Xt,2),Ee=r(ae,!0);e(ae),e(Mt);var ke=s(Mt,2);{var we=a=>{var n=pr(),m=r(n);ne(m,{width:"16rem",height:"2.5rem"});var C=s(m,2);ne(C,{height:"12rem"}),e(n),v(a,n)},Ie=a=>{var n=ur(),m=r(n),C=r(m,!0);e(m),e(n),c(()=>i(C,t(kt))),v(a,n)},je=a=>{var n=Sr(),m=Zt(n),C=r(m),Se=r(C,!0);e(C);var Yt=s(C,2);te(Yt,21,()=>t(st),u=>u.id,(u,S)=>{var z=xr(),qt=r(z,!0);e(z);var St={};c(()=>{i(qt,t(S).name),St!==(St=t(S).id)&&(z.value=(z.__value=t(S).id)??"")}),v(u,z)}),e(Yt),e(m);var ze=s(m,2);{var Oe=u=>{{let S=gt(()=>o()("envEditor.noStages"));cr(u,{get title(){return t(S)},icon:"instances"})}},$e=u=>{var S=jr(),z=Zt(S);{var qt=h=>{var E=yr(),I=r(E),O=r(I,!0);e(I);var N=s(I,2),$=r(N),pt=r($),tt=r(pt),ut=r(tt),xt=r(ut,!0);e(ut);var mt=s(ut),ft=r(mt,!0);e(mt);var zt=s(mt),Ot=r(zt,!0);e(zt),e(tt),e(pt);var $t=s(pt);te($t,21,()=>Object.entries(t(dt)),([F,U])=>F,(F,U)=>{var J=gt(()=>Re(t(U),2));let j=()=>t(J)[0],Ft=()=>t(J)[1];var L=_r(),M=r(L),_t=r(M,!0);e(M);var yt=s(M),Lt=r(yt,!0);e(yt);var R=s(yt),Pt=r(R);{var Gt=y=>{var k=mr(),X=r(k,!0);e(k),c(Y=>i(X,Y),[()=>o()("envEditor.overridden")]),v(y,k)},f=gt(()=>re(j())),_=y=>{var k=fr(),X=r(k,!0);e(k),c(Y=>i(X,Y),[()=>o()("envEditor.inherited")]),v(y,k)};D(Pt,y=>{t(f)?y(Gt):y(_,-1)})}e(R),e(L),c(y=>{Ge(L,1,y),i(_t,j()),i(Lt,Ft())},[()=>Be(re(j())?"opacity-50":"")]),v(F,L)}),e($t),e($),e(N),e(E),c((F,U,J,j)=>{i(O,F),i(xt,U),i(ft,J),i(Ot,j)},[()=>o()("envEditor.projectDefaults"),()=>o()("envEditor.key"),()=>o()("envEditor.value"),()=>o()("envEditor.source")]),v(h,E)},St=gt(()=>Object.keys(t(dt)).length>0);D(z,h=>{t(St)&&h(qt)})}var oe=s(z,2),Bt=r(oe),Fe=r(Bt,!0);e(Bt);var Le=s(Bt,2);{var Pe=h=>{var E=br(),I=r(E);nr(I,{size:20});var O=s(I,2),N=r(O,!0);e(O),e(E),c($=>i(N,$),[()=>o()("common.loading")]),v(h,E)},Ae=h=>{var E=Ir(),I=r(E),O=r(I),N=r(O),$=r(N),pt=r($,!0);e($);var tt=s($),ut=r(tt,!0);e(tt);var xt=s(tt),mt=r(xt,!0);e(xt);var ft=s(xt),zt=r(ft,!0);e(ft);var Ot=s(ft),$t=r(Ot,!0);e(Ot),e(N),e(O);var F=s(O),U=r(F);te(U,17,()=>t(Et),f=>f.id,(f,_)=>{var y=Ce(),k=Zt(y);{var X=P=>{var q=hr(),B=r(q),At=r(B);Vt(At),e(B);var G=s(B),et=r(G);Vt(et),e(G);var H=s(G),Ht=r(H);ie(Ht,{label:"Secret",get checked(){return t(ct)},set checked(w){d(ct,w,!0)}}),e(H);var Dt=s(H,2),rt=r(Dt),A=r(rt),Qt=r(A);sr(Qt,{size:16}),e(A);var at=s(A,2),Kt=r(at);dr(Kt,{size:16}),e(at),e(rt),e(Dt),e(q),c((w,Q)=>{K(et,"type",t(ct)?"password":"text"),K(et,"placeholder",t(_).encrypted?"Leave empty to keep current":""),A.disabled=t(T),K(A,"title",w),K(at,"title",Q)},[()=>o()("envEditor.save"),()=>o()("common.cancel")]),Ct(At,()=>t(vt),w=>d(vt,w)),Ct(et,()=>t(lt),w=>d(lt,w)),ht("click",A,_e),ht("click",at,fe),v(P,q)},Y=P=>{var q=wr(),B=r(q),At=r(B,!0);e(B);var G=s(B),et=r(G,!0);e(G);var H=s(G),Ht=r(H);{var Dt=g=>{var b=gr(),ot=r(b);lr(ot,{size:12});var bt=s(ot);e(b),c(Te=>i(bt,` ${Te??""}`),[()=>o()("envEditor.secret")]),v(g,b)};D(Ht,g=>{t(_).encrypted&&g(Dt)})}e(H);var rt=s(H),A=r(rt);{var Qt=g=>{var b=Er(),ot=r(b,!0);e(b),c(bt=>i(ot,bt),[()=>o()("envEditor.overridesProject")]),v(g,b)},at=g=>{var b=kr(),ot=r(b,!0);e(b),c(bt=>i(ot,bt),[()=>o()("envEditor.stageOnly")]),v(g,b)};D(A,g=>{t(_).key in t(dt)?g(Qt):g(at,-1)})}e(rt);var Kt=s(rt),w=r(Kt),Q=r(w),De=r(Q);vr(De,{size:16}),e(Q);var Tt=s(Q,2),Ke=r(Tt);ar(Ke,{size:16}),e(Tt),e(w),e(Kt),e(q),c((g,b)=>{i(At,t(_).key),i(et,t(_).encrypted?"••••••••":t(_).value),K(Q,"title",g),K(Tt,"title",b)},[()=>o()("envEditor.edit"),()=>o()("envEditor.delete")]),ht("click",Q,()=>me(t(_))),ht("click",Tt,()=>ye(t(_).id)),v(P,q)};D(k,P=>{t(nt)===t(_).id?P(X):P(Y,-1)})}v(f,y)});var J=s(U),j=r(J),Ft=r(j);Vt(Ft),e(j);var L=s(j),M=r(L);Vt(M),e(L);var _t=s(L),yt=r(_t);ie(yt,{label:"Secret",get checked(){return t(it)},set checked(f){d(it,f,!0)}}),e(_t);var Lt=s(_t,2),R=r(Lt),Pt=r(R);or(Pt,{size:14});var Gt=s(Pt);e(R),e(Lt),e(J),e(F),e(I),e(E),c((f,_,y,k,X,Y,P)=>{i(pt,f),i(ut,_),i(mt,y),i(zt,k),i($t,X),K(M,"type",t(it)?"password":"text"),R.disabled=Y,i(Gt,` ${P??""}`)},[()=>o()("envEditor.key"),()=>o()("envEditor.value"),()=>o()("envEditor.secret"),()=>o()("envEditor.source"),()=>o()("envEditor.actions"),()=>!t(Z).trim()||t(T),()=>t(T)?o()("envEditor.adding"):o()("envEditor.add")]),Ct(Ft,()=>t(Z),f=>d(Z,f)),Ct(M,()=>t(wt),f=>d(wt,f)),ht("click",R,xe),v(h,E)};D(Le,h=>{t(Ut)?h(Pe):h(Ae,-1)})}e(oe),c(h=>i(Fe,h),[()=>o()("envEditor.stageOverrides")]),v(u,S)};D(ze,u=>{t(st).length===0?u(Oe):u($e,-1)})}c(u=>i(Se,u),[()=>o()("envEditor.stage")]),He(Yt,()=>t(x),u=>d(x,u)),v(a,n)};D(ke,a=>{t(Nt)?a(we):t(kt)?a(Ie,1):a(je,-1)})}e(Jt),c((a,n,m)=>{K(jt,"href",`/projects/${t(V)??""}`),i(be,a),i(ge,n),i(Ee,m)},[()=>o()("common.project"),()=>o()("envEditor.title"),()=>o()("envEditor.description")]),v(ve,Jt),Ue(),pe()}Ve(["click"]);export{Qr as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/11.DMrjUtpD.js b/web/.svelte-kit/output/client/_app/immutable/nodes/11.DMrjUtpD.js
deleted file mode 100644
index 7a4016d..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/11.DMrjUtpD.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Xr,a as x,s as c,b as m,c as O,g as Gr,t as Jr}from"../chunks/BJdXET8u.js";import{p as Kr,a as g,b as dr,i as Mr,g as t,t as f,e as Or,d as l,f as Qr,u as B,s,c as e,$ as Wr,r,h as Kt}from"../chunks/DKemW7Dm.js";import{i as h,s as Yr,a as nr}from"../chunks/BSXRhUWv.js";import{e as zt,i as Mt}from"../chunks/CZnXUJhL.js";import{h as Zr}from"../chunks/ecfdBtDb.js";import{s as q,t as te,a as Ot,r as Q}from"../chunks/kfynmD3Z.js";import{b as W}from"../chunks/DgtbvmBB.js";import{b as ir}from"../chunks/Bxa5VUw6.js";import{p as re}from"../chunks/DELaSNrV.js";import{e as ee,f as ae,h as oe,j as se,k as de,v as ne}from"../chunks/Bpb8V1MF.js";import{t as Y}from"../chunks/CjZL2MYp.js";import{I as ie}from"../chunks/scnZuc49.js";import{I as le}from"../chunks/C6FeVxU4.js";import{I as ce}from"../chunks/LFhQE6G2.js";import{I as ve}from"../chunks/R0-LJft-.js";import{I as pe}from"../chunks/Icw0y4KW.js";import{I as ue}from"../chunks/BphdEXYy.js";import{I as xe}from"../chunks/BvIWRct8.js";import{I as me}from"../chunks/CPatcLwq.js";import{S as be}from"../chunks/BE_zO38m.js";var fe=m(' '),_e=m(''),ge=m('
'),ye=m(''),he=m(' '),ke=m(' '),Ee=m(" "),we=m(' '),Ie=m('— '),je=m('
'),$e=m(' '),ze=m(' ',1),Se=m('
'),Ne=m(' '),Pe=m(' '),Ce=m(" "),Ve=m(' '),De=m('— '),Fe=m(''),Ue=m('
'),He=m(' ',1),Te=m('');function sa(lr,cr){Kr(cr,!0);const vr=()=>nr(re,"$page",Qt),i=()=>nr(te,"$t",Qt),[Qt,pr]=Yr();function ur(a){return ne(t(P),a)}let St=g(dr([])),V=g(dr([])),Nt=g(!0),ft=g(""),L=g(""),R=g(""),k=g("project"),X=g(""),D=g(!1),Z=g(""),tt=g(""),rt=g(""),F=g("project"),et=g("");const P=B(()=>vr().params.id??""),_t=B(()=>t(k)==="project_named"||t(k)==="named"),Pt=B(()=>t(F)==="project_named"||t(F)==="named"),Ct=B(()=>t(k)==="ephemeral"),Wt=B(()=>t(F)==="ephemeral");function Yt(a){var v;return((v=t(V).find(_=>_.scope===a))==null?void 0:v.description)??""}function xr(a){var v;return((v=t(V).find(_=>_.scope===a))==null?void 0:v.path_example)??""}const Zt={instance:{bg:"bg-amber-50 dark:bg-amber-900/30",text:"text-amber-700 dark:text-amber-400"},stage:{bg:"bg-blue-50 dark:bg-blue-900/30",text:"text-blue-700 dark:text-blue-400"},project:{bg:"bg-emerald-50 dark:bg-emerald-900/30",text:"text-emerald-700 dark:text-emerald-400"},project_named:{bg:"bg-violet-50 dark:bg-violet-900/30",text:"text-violet-700 dark:text-violet-400"},named:{bg:"bg-purple-50 dark:bg-purple-900/30",text:"text-purple-700 dark:text-purple-400"},ephemeral:{bg:"bg-gray-100 dark:bg-gray-800",text:"text-gray-600 dark:text-gray-400"}};function Vt(a){return Zt[a]??Zt.project}async function at(){l(Nt,!0),l(ft,"");try{const[a,v]=await Promise.all([ee(t(P)),ae()]);l(St,a,!0),l(V,v,!0)}catch(a){l(ft,a instanceof Error?a.message:i()("volumeEditor.loadFailed"),!0)}finally{l(Nt,!1)}}async function mr(){if(!(!t(Ct)&&!t(L).trim())&&t(R).trim()&&!(t(_t)&&!t(X).trim())){l(D,!0);try{await de(t(P),{source:t(L).trim(),target:t(R).trim(),scope:t(k),name:t(_t)?t(X).trim():void 0}),l(L,""),l(R,""),l(k,"project"),l(X,""),Y.success(i()("volumeEditor.volumeAdded")),await at()}catch(a){Y.error(a instanceof Error?a.message:i()("volumeEditor.addFailed"))}finally{l(D,!1)}}}function br(a){l(Z,a.id,!0),l(tt,a.source,!0),l(rt,a.target,!0),l(F,a.scope||"project",!0),l(et,a.name||"",!0)}function fr(){l(Z,"")}async function _r(){if(!(!t(Wt)&&!t(tt).trim())&&t(rt).trim()&&!(t(Pt)&&!t(et).trim())){l(D,!0);try{await oe(t(P),t(Z),{source:t(tt).trim(),target:t(rt).trim(),scope:t(F),name:t(Pt)?t(et).trim():""}),l(Z,""),Y.success(i()("volumeEditor.volumeUpdated")),await at()}catch(a){Y.error(a instanceof Error?a.message:i()("volumeEditor.updateFailed"))}finally{l(D,!1)}}}async function gr(a){try{await se(t(P),a),Y.success(i()("volumeEditor.volumeDeleted")),await at()}catch(v){Y.error(v instanceof Error?v.message:i()("volumeEditor.deleteFailed"))}}Mr(()=>{t(P),at()});var Dt=Te();Zr("15zmna7",a=>{Qr((v,_)=>{Wr.title=`${v??""} - ${_??""}`},[()=>i()("volumeEditor.title"),()=>i()("app.name")])});var Ft=e(Dt),Ut=e(Ft),gt=e(Ut),yr=e(gt,!0);r(gt);var hr=s(gt,2);pe(hr,{size:14}),r(Ut);var Ht=s(Ut,2),kr=e(Ht,!0);r(Ht);var tr=s(Ht,2),Er=e(tr,!0);r(tr),r(Ft);var rr=s(Ft,2);{var wr=a=>{var v=ge();zt(v,21,()=>t(V),Mt,(_,j)=>{const E=B(()=>Vt(t(j).scope));var $=_e(),z=e($),G=e(z),ot=e(G,!0);r(G);var Tt=s(G,2);{var st=it=>{var J=fe(),kt=e(J);r(J),f(Et=>c(kt,`(${Et??""})`),[()=>i()("volumeEditor.requiresName")]),x(it,J)};h(Tt,it=>{t(j).needs_name&&it(st)})}r(z);var dt=s(z,2),nt=e(dt,!0);r(dt);var yt=s(dt,2),ht=e(yt,!0);r(yt),r($),f(()=>{Ot($,1,`rounded-lg border border-[var(--border-primary)] p-3 ${t(E).bg??""}`),Ot(G,1,`rounded-full px-2 py-0.5 text-xs font-semibold ${t(E).text??""} ${t(E).bg??""}`),c(ot,t(j).scope),c(nt,t(j).description),c(ht,t(j).path_example)}),x(_,$)}),r(v),x(a,v)};h(rr,a=>{t(V).length>0&&a(wr)})}var Ir=s(rr,2);{var jr=a=>{be(a,{height:"12rem"})},$r=a=>{var v=ye(),_=e(v),j=e(_,!0);r(_);var E=s(_,2),$=e(E,!0);r(E),r(v),f(z=>{c(j,t(ft)),c($,z)},[()=>i()("common.retry")]),O("click",E,at),x(a,v)},zr=a=>{var v=He(),_=Kt(v),j=e(_),E=e(j),$=e(E),z=e($),G=e(z,!0);r(z);var ot=s(z),Tt=e(ot,!0);r(ot);var st=s(ot),dt=e(st,!0);r(st);var nt=s(st),yt=e(nt,!0);r(nt);var ht=s(nt),it=e(ht,!0);r(ht),r($),r(E);var J=s(E),kt=e(J);zt(kt,17,()=>t(St),d=>d.id,(d,o)=>{var u=Gr(),y=Kt(u);{var C=w=>{var S=je(),N=e(S),ct=e(N);{var Xt=b=>{var n=he(),p=e(n,!0);r(n),f(I=>c(p,I),[()=>i()("volumeEditor.noHostPath")]),x(b,n)},Gt=b=>{var n=ke();Q(n),W(n,()=>t(tt),p=>l(tt,p)),x(b,n)};h(ct,b=>{t(Wt)?b(Xt):b(Gt,-1)})}r(N);var U=s(N),It=e(U);Q(It),r(U);var H=s(U),T=e(H);zt(T,21,()=>t(V),Mt,(b,n)=>{var p=Ee(),I=e(p,!0);r(p);var M={};f(()=>{c(I,t(n).scope),M!==(M=t(n).scope)&&(p.value=(p.__value=t(n).scope)??"")}),x(b,p)}),r(T),r(H);var vt=s(H),pt=e(vt);{var Jt=b=>{var n=we();Q(n),f(p=>q(n,"placeholder",p),[()=>i()("volumeEditor.namePlaceholder")]),W(n,()=>t(et),p=>l(et,p)),x(b,n)},jt=b=>{var n=Ie();x(b,n)};h(pt,b=>{t(Pt)?b(Jt):b(jt,-1)})}r(vt);var ut=s(vt),xt=e(ut),A=e(xt),K=e(A);ce(K,{size:16}),r(A);var mt=s(A,2),bt=e(mt);ve(bt,{size:16}),r(mt),r(xt),r(ut),r(S),f(()=>A.disabled=t(D)),W(It,()=>t(rt),b=>l(rt,b)),ir(T,()=>t(F),b=>l(F,b)),O("click",A,_r),O("click",mt,fr),x(w,S)},lt=w=>{var S=Se(),N=e(S),ct=e(N);{var Xt=n=>{var p=$e(),I=e(p,!0);r(p),f(M=>c(I,M),[()=>i()("volumeEditor.tmpfs")]),x(n,p)},Gt=n=>{var p=Jr();f(()=>c(p,t(o).source)),x(n,p)};h(ct,n=>{t(o).scope==="ephemeral"?n(Xt):n(Gt,-1)})}r(N);var U=s(N),It=e(U,!0);r(U);var H=s(U),T=e(H),vt=e(T,!0);r(T),r(H);var pt=s(H),Jt=e(pt,!0);r(pt);var jt=s(pt),ut=e(jt),xt=e(ut);{var A=n=>{var p=ze(),I=Kt(p),M=e(I);xe(M,{size:16}),r(I);var $t=s(I,2),Br=e($t);ue(Br,{size:16}),r($t),f((qr,Lr,Rr)=>{q(I,"href",`/projects/${t(P)??""}/volumes/${t(o).id??""}/browse`),q(I,"title",qr),q($t,"href",Lr),q($t,"title",Rr)},[()=>i()("volumeBrowser.browse"),()=>ur(t(o).id),()=>i()("volumeBrowser.download")]),x(n,p)};h(xt,n=>{t(o).scope!=="ephemeral"&&n(A)})}var K=s(xt,2),mt=e(K);me(mt,{size:16}),r(K);var bt=s(K,2),b=e(bt);ie(b,{size:16}),r(bt),r(ut),r(jt),r(S),f((n,p)=>{c(It,t(o).target),Ot(T,1,`rounded-full px-2 py-0.5 text-xs font-medium ${n??""} ${p??""}`),c(vt,t(o).scope),c(Jt,t(o).name||"—")},[()=>Vt(t(o).scope).bg,()=>Vt(t(o).scope).text]),O("click",K,()=>br(t(o))),O("click",bt,()=>gr(t(o).id)),x(w,S)};h(y,w=>{t(Z)===t(o).id?w(C):w(lt,-1)})}x(d,u)});var Et=s(kt),At=e(Et),Sr=e(At);{var Nr=d=>{var o=Ne(),u=e(o,!0);r(o),f(y=>c(u,y),[()=>i()("volumeEditor.noHostPath")]),x(d,o)},Pr=d=>{var o=Pe();Q(o),W(o,()=>t(L),u=>l(L,u)),x(d,o)};h(Sr,d=>{t(Ct)?d(Nr):d(Pr,-1)})}r(At);var Bt=s(At),er=e(Bt);Q(er),r(Bt);var qt=s(Bt),Lt=e(qt);zt(Lt,21,()=>t(V),Mt,(d,o)=>{var u=Ce(),y=e(u,!0);r(u);var C={};f(()=>{c(y,t(o).scope),C!==(C=t(o).scope)&&(u.value=(u.__value=t(o).scope)??"")}),x(d,u)}),r(Lt),r(qt);var Rt=s(qt),Cr=e(Rt);{var Vr=d=>{var o=Ve();Q(o),f(u=>q(o,"placeholder",u),[()=>i()("volumeEditor.namePlaceholder")]),W(o,()=>t(X),u=>l(X,u)),x(d,o)},Dr=d=>{var o=De();x(d,o)};h(Cr,d=>{t(_t)?d(Vr):d(Dr,-1)})}r(Rt);var ar=s(Rt),wt=e(ar),or=e(wt);le(or,{size:14});var Fr=s(or);r(wt),r(ar),r(Et),r(J),r(j),r(_);var sr=s(_,2);{var Ur=d=>{var o=Fe(),u=e(o),y=e(u),C=e(y);r(y);var lt=s(y);r(u);var w=s(u,2),S=e(w,!0);r(w),r(o),f((N,ct)=>{c(C,`${t(k)??""}:`),c(lt,` ${N??""}`),c(S,ct)},[()=>Yt(t(k)),()=>xr(t(k))]),x(d,o)},Hr=B(()=>Yt(t(k)));h(sr,d=>{t(Hr)&&d(Ur)})}var Tr=s(sr,2);{var Ar=d=>{var o=Ue(),u=e(o,!0);r(o),f(y=>c(u,y),[()=>i()("volumeEditor.noVolumes")]),x(d,o)};h(Tr,d=>{t(St).length===0&&d(Ar)})}f((d,o,u,y,C,lt,w)=>{c(G,d),c(Tt,o),c(dt,u),c(yt,y),c(it,C),wt.disabled=lt,c(Fr,` ${w??""}`)},[()=>i()("volumeEditor.sourceHost"),()=>i()("volumeEditor.targetContainer"),()=>i()("volumeEditor.scope"),()=>i()("volumeEditor.nameColumn"),()=>i()("volumeEditor.actions"),()=>!t(Ct)&&!t(L).trim()||!t(R).trim()||t(_t)&&!t(X).trim()||t(D),()=>t(D)?i()("volumeEditor.adding"):i()("volumeEditor.add")]),W(er,()=>t(R),d=>l(R,d)),ir(Lt,()=>t(k),d=>l(k,d)),O("click",wt,mr),x(a,v)};h(Ir,a=>{t(Nt)?a(jr):t(ft)?a($r,1):a(zr,-1)})}r(Dt),f((a,v,_)=>{q(gt,"href",`/projects/${t(P)??""}`),c(yr,a),c(kr,v),c(Er,_)},[()=>i()("common.project"),()=>i()("volumeEditor.title"),()=>i()("volumeEditor.description")]),x(lr,Dt),Or(),pr()}Xr(["click"]);export{sa as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/12.BO7G7YPE.js b/web/.svelte-kit/output/client/_app/immutable/nodes/12.BO7G7YPE.js
deleted file mode 100644
index d537a96..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/12.BO7G7YPE.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Xt,c as $,a as f,s as d,b as y,t as Yt}from"../chunks/BJdXET8u.js";import{p as Zt,a as I,b as te,i as ee,g as t,t as g,e as re,d as b,f as ae,u as P,s as i,c as a,$ as oe,r as o,h as se}from"../chunks/DKemW7Dm.js";import{i as U,s as ie,a as mt}from"../chunks/BSXRhUWv.js";import{e as xt,i as ne}from"../chunks/CZnXUJhL.js";import{h as le}from"../chunks/ecfdBtDb.js";import{s as ft,a as V,t as ve}from"../chunks/kfynmD3Z.js";import{b as de}from"../chunks/BoGS7hWi.js";import{p as ce}from"../chunks/DELaSNrV.js";import{r as ue,v as _t,s as pe}from"../chunks/Bpb8V1MF.js";import{t as ht}from"../chunks/CjZL2MYp.js";import{I as et}from"../chunks/Icw0y4KW.js";import{I as me}from"../chunks/BFW91e3Y.js";import{S as xe}from"../chunks/BE_zO38m.js";const fe=!1,Me=Object.freeze(Object.defineProperty({__proto__:null,ssr:fe},Symbol.toStringTag,{value:"Module"}));var _e=y(' ',1),he=y(''),ge=y(''),be=y('📁 .. '),ye=y(' '),we=y(' '),$e=y(''),Be=y('');function Oe(gt,bt){Zt(bt,!0);const S=()=>mt(ce,"$page",rt),l=()=>mt(ve,"$t",rt),[rt,yt]=ie(),w=P(()=>S().params.id??""),B=P(()=>S().params.volId??"");let A=I(te([])),c=I(""),G=I(!0),C=I(""),D=I(!1);const E=P(()=>S().url.searchParams.get("stage")??""),F=P(()=>S().url.searchParams.get("tag")??""),at=P(()=>()=>t(c)?t(c).split("/").filter(Boolean):[]);function wt(e){var n;if(e.is_dir)return"📁";const r=((n=e.name.split(".").pop())==null?void 0:n.toLowerCase())??"";return{jpg:"🖼️",jpeg:"🖼️",png:"🖼️",gif:"🖼️",svg:"🖼️",webp:"🖼️",txt:"📄",md:"📄",log:"📄",csv:"📄",json:"📋",yaml:"📋",yml:"📋",toml:"📋",xml:"📋",js:"📜",ts:"📜",go:"📜",py:"📜",rs:"📜",sh:"📜",zip:"📦",tar:"📦",gz:"📦",rar:"📦",db:"🗄️",sqlite:"🗄️",sql:"🗄️"}[r]??"📄"}function $t(e){if(e===0)return"—";const r=["B","KB","MB","GB"];let s=0,n=e;for(;n>=1024&&s{t(w),t(B),T("")});var K=Be();le("8w09c1",e=>{ae((r,s)=>{oe.title=`${r??""} - ${s??""}`},[()=>l()("volumeBrowser.title"),()=>l()("app.name")])});var R=a(K),H=a(R),q=a(H),Pt=a(q,!0);o(q);var ot=i(q,2);et(ot,{size:14});var M=i(ot,2),St=a(M,!0);o(M);var Ct=i(M,2);et(Ct,{size:14}),o(H);var st=i(H,2),J=a(st),Dt=a(J,!0);o(J);var it=i(J,2),O=a(it),Et=a(O);o(O);var N=i(O,2),nt=a(N);{var Ft=e=>{me(e,{size:14,class:"animate-spin"})};U(nt,e=>{t(D)&&e(Ft)})}var lt=i(nt),vt=i(lt);de(vt,e=>k=e,()=>k),o(N),o(it),o(st),o(R);var Q=i(R,2),W=a(Q),Tt=i(W,2);xt(Tt,17,()=>t(at)(),ne,(e,r,s)=>{var n=_e(),u=se(n);et(u,{size:12,class:"text-[var(--text-tertiary)]"});var m=i(u,2),j=a(m,!0);o(m),g(z=>{V(m,1,`rounded px-1.5 py-0.5 text-[var(--text-link)] hover:bg-[var(--surface-card-hover)] transition-colors ${z??""}`),d(j,t(r))},[()=>s===t(at)().length-1?"font-semibold text-[var(--text-primary)]":""]),$("click",m,()=>kt(s)),f(e,n)}),o(Q);var Lt=i(Q,2);{var qt=e=>{xe(e,{height:"16rem"})},Mt=e=>{var r=he(),s=a(r),n=a(s,!0);o(s);var u=i(s,2),m=a(u,!0);o(u),o(r),g(j=>{d(n,t(C)),d(m,j)},[()=>l()("common.retry")]),$("click",u,()=>T(t(c))),f(e,r)},Ot=e=>{var r=ge(),s=a(r),n=a(s,!0);o(s),o(r),g(u=>d(n,u),[()=>l()("volumeBrowser.empty")]),f(e,r)},Ut=e=>{var r=$e(),s=a(r),n=a(s),u=a(n),m=a(u),j=a(m,!0);o(m);var z=i(m),Vt=a(z,!0);o(z);var dt=i(z),At=a(dt,!0);o(dt),o(u),o(n);var ct=i(n),ut=a(ct);{var Gt=p=>{var v=be();$("click",v,()=>{const x=t(c).split("/").filter(Boolean);x.pop(),L(x.join("/"))}),f(p,v)};U(ut,p=>{t(c)&&p(Gt)})}var Kt=i(ut);xt(Kt,17,()=>t(A).sort((p,v)=>p.is_dir!==v.is_dir?p.is_dir?-1:1:p.name.localeCompare(v.name)),p=>p.name,(p,v)=>{var x=we(),X=a(x),Y=a(X),Rt=a(Y,!0);o(Y);var Ht=i(Y,2);{var Jt=_=>{var h=ye(),tt=a(h,!0);o(h),g(()=>d(tt,t(v).name)),f(_,h)},Nt=_=>{var h=Yt();g(()=>d(h,t(v).name)),f(_,h)};U(Ht,_=>{t(v).is_dir?_(Jt):_(Nt,-1)})}o(X);var Z=i(X),Qt=a(Z,!0);o(Z);var pt=i(Z),Wt=a(pt,!0);o(pt),o(x),g((_,h,tt)=>{V(x,1,`hover:bg-[var(--surface-card-hover)] transition-colors ${t(v).is_dir?"cursor-pointer":""}`),d(Rt,_),d(Qt,h),d(Wt,tt)},[()=>wt(t(v)),()=>t(v).is_dir?"—":$t(t(v).size),()=>Bt(t(v).mod_time)]),$("click",x,()=>jt(t(v))),f(p,x)}),o(ct),o(s),o(r),g((p,v,x)=>{d(j,p),d(Vt,v),d(At,x)},[()=>l()("volumeBrowser.name"),()=>l()("volumeBrowser.size"),()=>l()("volumeBrowser.modified")]),f(e,r)};U(Lt,e=>{t(G)?e(qt):t(C)?e(Mt,1):t(A).length===0?e(Ot,2):e(Ut,-1)})}o(K),g((e,r,s,n,u)=>{ft(q,"href",`/projects/${t(w)??""}`),d(Pt,e),ft(M,"href",`/projects/${t(w)??""}/volumes`),d(St,r),d(Dt,s),d(Et,`📦 ${n??""}`),V(N,1,`inline-flex cursor-pointer items-center gap-1.5 rounded-lg bg-[var(--color-brand-600)] px-3 py-2 text-xs font-medium text-white hover:bg-[var(--color-brand-700)] transition-colors ${t(D)?"opacity-50 pointer-events-none":""}`),d(lt,` ${u??""} `),V(W,1,`rounded px-1.5 py-0.5 text-[var(--text-link)] hover:bg-[var(--surface-card-hover)] transition-colors ${t(c)===""?"font-semibold":""}`)},[()=>l()("common.project"),()=>l()("volumeEditor.title"),()=>l()("volumeBrowser.title"),()=>t(c)?l()("volumeBrowser.downloadFolder"):l()("volumeBrowser.downloadAll"),()=>l()("volumeBrowser.upload")]),$("click",O,zt),$("change",vt,It),$("click",W,()=>L("")),f(gt,K),re(),yt()}Xt(["click","change"]);export{Oe as component,Me as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/13.DJV70kty.js b/web/.svelte-kit/output/client/_app/immutable/nodes/13.DJV70kty.js
deleted file mode 100644
index 13380fb..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/13.DJV70kty.js
+++ /dev/null
@@ -1 +0,0 @@
-import{s as v,a as p,b as x,d as je,c as oe,g as ke}from"../chunks/BJdXET8u.js";import{o as Re}from"../chunks/phMGo29-.js";import{p as Fe,c as e,g as r,s,r as t,t as P,e as Ie,u as F,F as Ue,h as re,a as ae,b as De,d as G,f as Xe,$ as Je}from"../chunks/DKemW7Dm.js";import{i as M,s as Pe,a as Ce,p as Ke}from"../chunks/BSXRhUWv.js";import{e as _e}from"../chunks/CZnXUJhL.js";import{h as Qe}from"../chunks/ecfdBtDb.js";import{M as Ve}from"../chunks/Bpb8V1MF.js";import{s as ge,a as we,t as Le,r as We,d as Ye}from"../chunks/kfynmD3Z.js";import{I as Ze}from"../chunks/BphdEXYy.js";import{I as $e}from"../chunks/CPatcLwq.js";import{I as et}from"../chunks/CpnAtA5t.js";import{s as tt}from"../chunks/CnPWu_ZO.js";import{I as rt}from"../chunks/Icw0y4KW.js";import{i as Se,s as Te}from"../chunks/Bxa5VUw6.js";import{I as at}from"../chunks/R0-LJft-.js";import{I as ot}from"../chunks/BvIWRct8.js";import{E as nt}from"../chunks/CexodXHl.js";import{I as st}from"../chunks/DrzuxmSv.js";import{I as lt}from"../chunks/BFW91e3Y.js";const Vt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var it=x(" "),dt=x(' SSL '),vt=x(' '),ct=x(' ',1),pt=x(' '),ut=x(" "),xt=x('
'),mt=x('');function Ge(W,o){Fe(o,!0);const d=()=>Ce(Le,"$t",D),[D,A]=Pe(),b={healthy:{dot:"bg-emerald-500",ring:"bg-emerald-500"},unhealthy:{dot:"bg-red-500",ring:"bg-red-500"},unknown:{dot:"bg-amber-400",ring:"bg-amber-400"}},C=F(()=>b[o.proxy.health_status]??b.unknown),L=F(()=>o.proxy.health_status==="healthy"),z=F(()=>o.proxy.type==="managed"?"bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300":"bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300"),y=F(()=>d()(`proxies.health.${o.proxy.health_status}`));function f(l){if(!l)return"";try{return new Date(l).toLocaleString()}catch{return l}}var I=mt(),B=e(I),g=e(B),E=e(g),k=e(E),R=e(k);{var U=l=>{var c=it();P(()=>we(c,1,`absolute inline-flex h-full w-full animate-ping rounded-full ${r(C).ring??""} opacity-50`)),p(l,c)};M(R,l=>{r(L)&&l(U)})}var Y=s(R,2);t(k);var H=s(k,2),w=e(H),X=e(w,!0);t(w);var ne=s(w,2);Ze(ne,{size:13,class:"shrink-0 opacity-0 group-hover:opacity-100 transition-opacity"}),t(H),t(E);var S=s(E,2),le=e(S,!0);t(S),t(g);var O=s(g,2),ie=e(O,!0);t(O),t(B);var J=s(B,2),se=e(J);{var de=l=>{var c=dt(),u=e(c);et(u,{size:11}),Ue(),t(c),p(l,c)};M(se,l=>{o.proxy.ssl_enabled&&l(de)})}var h=s(se,2),q=e(h,!0);t(h);var V=s(h,2);{var Z=l=>{var c=ct(),u=re(c),N=e(u,!0);t(u);var T=s(u,2);{var ve=K=>{var $=vt(),ce=e($,!0);t($),P(()=>v(ce,o.proxy.stage_name)),p(K,$)};M(T,K=>{o.proxy.stage_name&&K(ve)})}P(()=>v(N,o.proxy.project_name)),p(l,c)};M(V,l=>{o.proxy.type==="managed"&&o.proxy.project_name&&l(Z)})}t(J);var a=s(J,2),n=e(a);{var i=l=>{var c=pt(),u=e(c);$e(u,{size:12});var N=s(u);t(c),P(T=>{ge(c,"href",`/proxies/${o.proxy.id??""}/edit`),v(N,` ${T??""}`)},[()=>d()("common.edit")]),p(l,c)},m=l=>{var c=ut();p(l,c)};M(n,l=>{o.proxy.type==="standalone"?l(i):l(m,-1)})}var _=s(n,2);{var j=l=>{var c=xt(),u=e(c);t(c),P((N,T)=>v(u,`${N??""}: ${T??""}`),[()=>d()("proxies.lastChecked"),()=>f(o.proxy.created_at)]),p(l,c)};M(_,l=>{o.proxy.created_at&&l(j)})}t(a),t(I),P(()=>{ge(k,"title",r(y)),we(Y,1,`relative inline-flex h-2.5 w-2.5 rounded-full ${r(C).dot??""}`),ge(H,"href",`https://${o.proxy.domain??""}`),v(X,o.proxy.domain),v(le,o.proxy.destination),we(O,1,`shrink-0 rounded-full px-2 py-0.5 text-xs font-medium ${r(z)??""}`),v(ie,o.proxy.type),v(q,r(y))}),p(W,I),Ie(),A()}var ft=x(''),_t=x('
');function Be(W,o){const d=Ke(o,"defaultExpanded",3,!0);let D=ae(De(d()));var A=_t(),b=e(A),C=e(b);{let g=F(()=>r(D)?"rotate-90":"");rt(C,{size:16,get class(){return`shrink-0 text-[var(--text-tertiary)] transition-transform duration-200 ${r(g)??""}`}})}var L=s(C,2),z=e(L,!0);t(L);var y=s(L,2),f=e(y,!0);t(y),t(b);var I=s(b,2);{var B=g=>{var E=ft(),k=e(E),R=e(k);tt(R,()=>o.children),t(k),t(E),p(g,E)};M(I,g=>{r(D)&&g(B)})}t(A),P(()=>{v(z,o.title),v(f,o.count)}),oe("click",b,()=>{G(D,!r(D))}),p(W,A)}je(["click"]);var gt=x(' '),ht=x('');function bt(W,o){Fe(o,!0);const d=()=>Ce(Le,"$t",D),[D,A]=Pe(),b=F(()=>o.search.length>0||o.healthFilter!=="all"||o.typeFilter!=="all");var C=ht(),L=e(C),z=e(L);ot(z,{size:16,class:"absolute left-3 top-1/2 -translate-y-1/2 text-[var(--text-tertiary)]"});var y=s(z,2);We(y),t(L);var f=s(L,2),I=e(f),B=e(I);t(I),I.value=I.__value="all";var g=s(I),E=e(g,!0);t(g),g.value=g.__value="healthy";var k=s(g),R=e(k,!0);t(k),k.value=k.__value="unhealthy";var U=s(k),Y=e(U,!0);t(U),U.value=U.__value="unknown",t(f);var H;Se(f);var w=s(f,2),X=e(w),ne=e(X);t(X),X.value=X.__value="all";var S=s(X),le=e(S,!0);t(S),S.value=S.__value="managed";var O=s(S),ie=e(O,!0);t(O),O.value=O.__value="standalone",t(w);var J;Se(w);var se=s(w,2);{var de=h=>{var q=gt(),V=e(q);at(V,{size:14});var Z=s(V);t(q),P(a=>v(Z,` ${a??""}`),[()=>d()("proxies.filter.clear")]),oe("click",q,function(...a){var n;(n=o.onclear)==null||n.apply(this,a)}),p(h,q)};M(se,h=>{r(b)&&h(de)})}t(C),P((h,q,V,Z,a,n,i,m,_,j)=>{Ye(y,o.search),ge(y,"placeholder",h),v(B,`${q??""}: ${V??""}`),v(E,Z),v(R,a),v(Y,n),H!==(H=o.healthFilter)&&(f.value=(f.__value=o.healthFilter)??"",Te(f,o.healthFilter)),v(ne,`${i??""}: ${m??""}`),v(le,_),v(ie,j),J!==(J=o.typeFilter)&&(w.value=(w.__value=o.typeFilter)??"",Te(w,o.typeFilter))},[()=>d()("proxies.filter.search"),()=>d()("proxies.filter.health"),()=>d()("proxies.filter.all"),()=>d()("proxies.health.healthy"),()=>d()("proxies.health.unhealthy"),()=>d()("proxies.health.unknown"),()=>d()("proxies.filter.type"),()=>d()("proxies.filter.all"),()=>d()("proxies.managed"),()=>d()("proxies.standalone")]),oe("input",y,h=>o.onsearchchange(h.currentTarget.value)),oe("change",f,h=>o.onhealthchange(h.currentTarget.value)),oe("change",w,h=>o.ontypechange(h.currentTarget.value)),p(W,C),Ie(),A()}je(["input","change","click"]);var yt=x('
'),kt=x('
'),wt=x(''),jt=x(''),Ft=x(''),It=x(" ",1),Pt=x('
'),Ct=x('
',1),Lt=x(' ',1);function Wt(W,o){Fe(o,!0);const d=()=>Ce(Le,"$t",D),[D,A]=Pe();let b=ae(De([])),C=ae(!0),L=ae(""),z=ae(""),y=ae("all"),f=ae("all");const I=F(()=>()=>{let a=r(b);if(r(z).length>0){const n=r(z).toLowerCase();a=a.filter(i=>i.domain.toLowerCase().includes(n)||i.destination.toLowerCase().includes(n))}return r(y)!=="all"&&(a=a.filter(n=>n.health_status===r(y))),r(f)!=="all"&&(a=a.filter(n=>n.type===r(f))),a}),B=F(()=>r(I)().filter(a=>a.type==="standalone")),g=F(()=>r(I)().filter(a=>a.type==="managed")),E=F(()=>()=>{const a=new Map;for(const i of r(g)){const m=i.project_name??"Unknown",_=i.stage_name??"default";a.has(m)||a.set(m,new Map);const j=a.get(m);j.has(_)||j.set(_,[]),j.get(_).push(i)}const n=[];for(const[i,m]of a){const _=[];let j=0;for(const[l,c]of m)_.push({stageName:l,proxies:c}),j+=c.length;n.push({projectName:i,stages:_,totalCount:j})}return n.sort((i,m)=>i.projectName.localeCompare(m.projectName))});function k(){G(z,""),G(y,"all"),G(f,"all")}async function R(){G(C,!0),G(L,"");try{G(b,await Ve(),!0)}catch(a){G(L,a instanceof Error?a.message:"Failed to load proxies",!0)}finally{G(C,!1)}}Re(()=>{R()});var U=Lt();Qe("88k8ar",a=>{Xe((n,i)=>{Je.title=`${n??""} - ${i??""}`},[()=>d()("proxies.title"),()=>d()("app.name")])});var Y=re(U),H=e(Y),w=e(H),X=e(w);st(X,{size:22}),t(w);var ne=s(w,2),S=e(ne),le=e(S,!0);t(S);var O=s(S,2);{var ie=a=>{var n=yt(),i=e(n);t(n),P(()=>v(i,`${r(b).length??""} ${r(b).length===1?"proxy":"proxies"}`)),p(a,n)};M(O,a=>{!r(C)&&r(b).length>0&&a(ie)})}t(ne),t(H);var J=s(H,2),se=s(e(J));t(J),t(Y);var de=s(Y,2);{var h=a=>{var n=kt(),i=e(n);lt(i,{size:24,class:"animate-spin text-[var(--color-brand-500)]"});var m=s(i,2),_=e(m,!0);t(m),t(n),P(j=>v(_,j),[()=>d()("common.loading")]),p(a,n)},q=a=>{var n=wt(),i=e(n),m=e(i,!0);t(i);var _=s(i,2),j=e(_,!0);t(_),t(n),P(l=>{v(m,r(L)),v(j,l)},[()=>d()("common.retry")]),oe("click",_,R),p(a,n)},V=a=>{{let n=F(()=>d()("proxies.noProxies")),i=F(()=>d()("proxies.noProxiesDesc")),m=F(()=>d()("proxies.create"));nt(a,{get title(){return r(n)},get description(){return r(i)},get actionLabel(){return r(m)},actionHref:"/proxies/create",icon:"projects"})}},Z=a=>{var n=Ct(),i=re(n),m=e(i);bt(m,{get search(){return r(z)},get healthFilter(){return r(y)},get typeFilter(){return r(f)},onsearchchange:u=>{G(z,u,!0)},onhealthchange:u=>{G(y,u,!0)},ontypechange:u=>{G(f,u,!0)},onclear:k}),t(i);var _=s(i,2);{var j=u=>{var N=jt(),T=e(N),ve=e(T,!0);t(T);var K=s(T,2),$=e(K,!0);t(K),t(N),P((ce,Q)=>{v(ve,ce),v($,Q)},[()=>d()("proxies.noProxies"),()=>d()("proxies.filter.clear")]),oe("click",K,k),p(u,N)},l=F(()=>r(I)().length===0),c=u=>{var N=Pt(),T=e(N);{var ve=Q=>{{let ue=F(()=>d()("proxies.standalone"));Be(Q,{get title(){return r(ue)},get count(){return r(B).length},children:(he,xe)=>{var ee=ke(),be=re(ee);_e(be,17,()=>r(B),me=>me.id,(me,fe)=>{Ge(me,{get proxy(){return r(fe)}})}),p(he,ee)},$$slots:{default:!0}})}};M(T,Q=>{r(B).length>0&&Q(ve)})}var K=s(T,2);{var $=Q=>{var ue=ke(),he=re(ue);_e(he,17,()=>r(E)(),xe=>xe.projectName,(xe,ee)=>{Be(xe,{get title(){return r(ee).projectName},get count(){return r(ee).totalCount},children:(be,me)=>{var fe=ke(),He=re(fe);_e(He,17,()=>r(ee).stages,ye=>ye.stageName,(ye,Me)=>{var Ne=It(),ze=re(Ne);{var Oe=te=>{var pe=Ft(),Ee=e(pe),Ae=e(Ee,!0);t(Ee),t(pe),P(()=>v(Ae,r(Me).stageName)),p(te,pe)};M(ze,te=>{r(ee).stages.length>1&&te(Oe)})}var qe=s(ze,2);_e(qe,17,()=>r(Me).proxies,te=>te.id,(te,pe)=>{Ge(te,{get proxy(){return r(pe)}})}),p(ye,Ne)}),p(be,fe)},$$slots:{default:!0}})}),p(Q,ue)},ce=F(()=>r(E)().length>0);M(K,Q=>{r(ce)&&Q($)})}t(N),p(u,N)};M(_,u=>{r(l)?u(j):u(c,-1)})}p(a,n)};M(de,a=>{r(C)?a(h):r(L)?a(q,1):r(b).length===0?a(V,2):a(Z,-1)})}P((a,n)=>{v(le,a),v(se,` ${n??""}`)},[()=>d()("proxies.title"),()=>d()("proxies.create")]),p(W,U),Ie(),A()}je(["click"]);export{Wt as component,Vt as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/14.udJGaOK1.js b/web/.svelte-kit/output/client/_app/immutable/nodes/14.udJGaOK1.js
deleted file mode 100644
index 52851f7..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/14.udJGaOK1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as P,s as v,b as S}from"../chunks/BJdXET8u.js";import"../chunks/BSEsuAwr.js";import{p as z,h as C,t as I,e as M,f as O,c as e,$ as B,s as a,r}from"../chunks/DKemW7Dm.js";import{s as F,a as G}from"../chunks/BSXRhUWv.js";import{h as H}from"../chunks/ecfdBtDb.js";import{i as T}from"../chunks/BlV-f-zB.js";import{g as f}from"../chunks/CWhLh9u1.js";import{t as q}from"../chunks/kfynmD3Z.js";import{P as A}from"../chunks/DsQCf6vC.js";import{I as D}from"../chunks/DrzuxmSv.js";const Y=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var E=S('
',1);function Z(x,h){z(h,!1);const t=()=>G(q,"$t",u),[u,_]=F();function b(n){f("/proxies")}function g(){f("/proxies")}T();var d=E();H("1eyu80y",n=>{O((l,j)=>{B.title=`${l??""} - ${j??""}`},[()=>t()("proxies.form.title"),()=>t()("app.name")])});var o=C(d),m=e(o),$=a(e(m));r(m),r(o);var s=a(o,2),i=e(s),y=e(i);D(y,{size:22}),r(i);var c=a(i,2),w=e(c,!0);r(c),r(s);var p=a(s,2),k=e(p);A(k,{mode:"create",onsave:b,oncancel:g}),r(p),I((n,l)=>{v($,` ${n??""}`),v(w,l)},[()=>t()("common.back"),()=>t()("proxies.form.title")]),P(x,d),M(),_()}export{Z as component,Y as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/15.BC8amYnm.js b/web/.svelte-kit/output/client/_app/immutable/nodes/15.BC8amYnm.js
deleted file mode 100644
index 2b5f666..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/15.BC8amYnm.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as p,s as n,b as v}from"../chunks/BJdXET8u.js";import{o as N}from"../chunks/phMGo29-.js";import{p as Q,h as R,t as b,e as U,f as V,c as t,d as h,g as i,$ as W,s as d,r as a,a as y,u as X}from"../chunks/DKemW7Dm.js";import{i as Y,s as Z,a as z}from"../chunks/BSXRhUWv.js";import{h as ee}from"../chunks/ecfdBtDb.js";import{p as re}from"../chunks/DELaSNrV.js";import{g as $}from"../chunks/CWhLh9u1.js";import{t as te}from"../chunks/Bpb8V1MF.js";import{t as ae}from"../chunks/kfynmD3Z.js";import{P as oe}from"../chunks/DsQCf6vC.js";import{I as se}from"../chunks/DrzuxmSv.js";import{I as ie}from"../chunks/BFW91e3Y.js";const ke=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));var de=v('
'),ne=v(''),le=v('
'),ce=v(' ',1);function we(M,S){Q(S,!0);const T=()=>z(re,"$page",k),s=()=>z(ae,"$t",k),[k,C]=Z();let m=y(null),w=y(!0),x=y("");const F=X(()=>T().params.id);N(async()=>{try{h(m,await te(i(F)),!0)}catch(e){h(x,e instanceof Error?e.message:"Failed to load proxy",!0)}finally{h(w,!1)}});function O(e){$("/proxies")}function B(e){$("/proxies")}function D(){$("/proxies")}var j=ce();ee("57j31g",e=>{V((r,o)=>{W.title=`${r??""} - ${o??""}`},[()=>s()("proxies.form.editTitle"),()=>s()("app.name")])});var f=R(j),I=t(f),E=d(t(I));a(I),a(f);var u=d(f,2),_=t(u),G=t(_);se(G,{size:22}),a(_);var P=d(_,2),H=t(P,!0);a(P),a(u);var L=d(u,2);{var q=e=>{var r=de(),o=t(r);ie(o,{size:24,class:"text-[var(--color-brand-500)]"});var l=d(o,2),c=t(l,!0);a(l),a(r),b(g=>n(c,g),[()=>s()("common.loading")]),p(e,r)},A=e=>{var r=ne(),o=t(r),l=t(o,!0);a(o);var c=d(o,2),g=t(c,!0);a(c),a(r),b(K=>{n(l,i(x)),n(g,K)},[()=>s()("common.back")]),p(e,r)},J=e=>{var r=le(),o=t(r);oe(o,{mode:"edit",get proxy(){return i(m)},onsave:O,ondelete:B,oncancel:D}),a(r),p(e,r)};Y(L,e=>{i(w)?e(q):i(x)?e(A,1):i(m)&&e(J,2)})}b((e,r)=>{n(E,` ${e??""}`),n(H,r)},[()=>s()("common.back"),()=>s()("proxies.form.editTitle")]),p(M,j),U(),C()}export{we as component,ke as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/16.DrkZ20qh.js b/web/.svelte-kit/output/client/_app/immutable/nodes/16.DrkZ20qh.js
deleted file mode 100644
index 6e61719..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/16.DrkZ20qh.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as x,f as De,d as $t,b as U,s as m,c as A,t as ve}from"../chunks/BJdXET8u.js";import{t as _,p as It,a as g,b as Ee,i as Ct,h as Se,d as n,g as e,e as Ut,f as Pt,s as c,u as v,$ as zt,c as o,r as s}from"../chunks/DKemW7Dm.js";import{p as K,i as C,s as Tt,a as Et}from"../chunks/BSXRhUWv.js";import{e as St,i as Ht}from"../chunks/CZnXUJhL.js";import{h as Ft}from"../chunks/ecfdBtDb.js";import{s as V,a as Me,c as We,t as Nt}from"../chunks/kfynmD3Z.js";import{m as Dt,E as He,F as Mt,n as Wt,G as jt}from"../chunks/Bpb8V1MF.js";import{F as y}from"../chunks/DfwQ65vN.js";import{E as At}from"../chunks/BxXVdbgr.js";import{t as G}from"../chunks/CjZL2MYp.js";import{I as Vt}from"../chunks/R0-LJft-.js";import{I as Lt}from"../chunks/DhEbbC3M.js";import{I as Fe}from"../chunks/BFW91e3Y.js";import{S as Ne}from"../chunks/BE_zO38m.js";var Bt=De(' ');function Rt(P,w){const r=K(w,"size",3,20),z=K(w,"class",3,"");var f=Bt();_(()=>{V(f,"width",r()),V(f,"height",r()),Me(f,0,We(z()))}),x(P,f)}var Zt=De(' ');function qt(P,w){const r=K(w,"size",3,20),z=K(w,"class",3,"");var f=Zt();_(()=>{V(f,"width",r()),V(f,"height",r()),Me(f,0,We(z()))}),x(P,f)}var Ot=U(''),Xt=U(' '),Jt=U('
'),Kt=U('
'),Qt=U(' ',1),Yt=U('
',1);function pr(P,w){It(w,!0);const r=()=>Et(Nt,"$t",z),[z,f]=Tt();let Q=g(!0),T=g(!1),E=g(""),S=g(!1),H=g(""),F=g(""),L=g(""),B=g(""),N=g(""),R=g(""),D=g(""),Z=g("7"),h=g(0),k=g(""),$=g(!1),Y=g(Ee([])),ee=g(!1),M=g(Ee({}));function je(t){return t.trim()?/^[a-zA-Z0-9][a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$/.test(t.trim())?"":r()("validation.invalidDomain"):r()("validation.required",{field:"Domain"})}function Ae(t){return t.trim()?/^(\d{1,3}\.){3}\d{1,3}$/.test(t.trim())?"":r()("validation.invalidIp"):""}function Ve(t){if(!t.trim())return"";const l=parseInt(t,10);return isNaN(l)||l<10||l>86400?r()("validation.invalidPollingInterval"):""}function Le(t){if(!t.trim())return"";try{return new URL(t.trim()),""}catch{return r()("validation.invalidUrl")}}function Be(){const t={},l=je(e(H));l&&(t.domain=l);const u=Ae(e(F));u&&(t.serverIp=u);const b=Ve(e(N));b&&(t.pollingInterval=b);const I=Le(e(D));return I&&(t.notificationUrl=I),n(M,t,!0),Object.keys(t).length===0}async function Re(){n(Q,!0);try{const t=await Dt();n(H,t.domain??"",!0),n(F,t.server_ip??"",!0),n(L,t.network??"",!0),n(B,t.subdomain_pattern??"",!0),n(N,t.polling_interval??"",!0),n(R,t.base_volume_path??"",!0),n(h,t.ssl_certificate_id??0,!0),n(D,t.notification_url??"",!0),n(Z,String(t.stale_threshold_days??7),!0)}catch(t){G.error(t instanceof Error?t.message:r()("settingsGeneral.loadFailed"))}finally{n(Q,!1)}}async function Ze(){try{const t=await Mt();n(E,t.url,!0)}catch{}}async function qe(){if(Be()){n(T,!0);try{await Wt({domain:e(H).trim(),server_ip:e(F).trim(),network:e(L).trim(),subdomain_pattern:e(B).trim(),polling_interval:e(N).trim(),base_volume_path:e(R).trim(),notification_url:e(D).trim(),ssl_certificate_id:e(h),stale_threshold_days:Math.max(1,parseInt(e(Z),10)||7)}),G.success(r()("settingsGeneral.saved"))}catch(t){G.error(t instanceof Error?t.message:r()("settingsGeneral.saveFailed"))}finally{n(T,!1)}}}async function Oe(){n(S,!0);try{const t=await jt();n(E,t.url,!0),G.success(r()("settingsGeneral.regenerated"))}catch(t){G.error(t instanceof Error?t.message:r()("settingsGeneral.regenerateFailed"))}finally{n(S,!1)}}async function Xe(){n(ee,!0),n($,!0);try{const t=await He();n(Y,t.map(l=>({value:String(l.id),label:l.nice_name||`Certificate #${l.id}`,description:l.domain_names.join(", ")})),!0)}catch(t){G.error(t instanceof Error?t.message:r()("settingsGeneral.noCertificatesFound")),n($,!1)}finally{n(ee,!1)}}function Je(t){const l=parseInt(t,10);n(h,l,!0);const u=e(Y).find(b=>b.value===t);n(k,(u==null?void 0:u.label)??"",!0),n($,!1)}function Ke(){n(h,0),n(k,"")}async function Qe(){if(!(e(h)<=0))try{const l=(await He()).find(u=>u.id===e(h));l?n(k,l.nice_name||`Certificate #${l.id}`,!0):n(k,`Certificate #${e(h)}`)}catch{n(k,`Certificate #${e(h)}`)}}async function Ye(){await Re(),await Qe(),Ze()}Ct(()=>{Ye()});var ue=Yt();Ft("1i19ct2",t=>{Pt((l,u)=>{zt.title=`${l??""} - ${u??""}`},[()=>r()("settingsGeneral.title"),()=>r()("app.name")])});var te=Se(ue),et=o(te);{var tt=t=>{var l=Ot(),u=o(l);Ne(u,{height:"2rem",width:"12rem"});var b=c(u,2);St(b,20,()=>Array(6),Ht,(I,q)=>{Ne(I,{height:"4rem"})}),s(b),s(l),x(t,l)},rt=t=>{var l=Qt(),u=Se(l),b=o(u),I=o(b,!0);s(b);var q=c(b,2),ge=o(q);{let a=v(()=>r()("settingsGeneral.domain")),i=v(()=>e(M).domain??""),d=v(()=>r()("settingsGeneral.domainHelp"));y(ge,{get label(){return e(a)},name:"domain",placeholder:"example.com",required:!0,get error(){return e(i)},get helpText(){return e(d)},get value(){return e(H)},set value(p){n(H,p,!0)}})}var pe=c(ge,2);{let a=v(()=>r()("settingsGeneral.serverIp")),i=v(()=>e(M).serverIp??""),d=v(()=>r()("settingsGeneral.serverIpHelp"));y(pe,{get label(){return e(a)},name:"serverIp",placeholder:"93.84.96.191",get error(){return e(i)},get helpText(){return e(d)},get value(){return e(F)},set value(p){n(F,p,!0)}})}var me=c(pe,2);{let a=v(()=>r()("settingsGeneral.dockerNetwork")),i=v(()=>r()("settingsGeneral.dockerNetworkHelp"));y(me,{get label(){return e(a)},name:"network",placeholder:"staging-net",get helpText(){return e(i)},get value(){return e(L)},set value(d){n(L,d,!0)}})}var fe=c(me,2);{let a=v(()=>r()("settingsGeneral.subdomainPattern")),i=v(()=>r()("settingsGeneral.subdomainPatternHelp"));y(fe,{get label(){return e(a)},name:"subdomainPattern",placeholder:"stage-{stage}-{project}",get helpText(){return e(i)},get value(){return e(B)},set value(d){n(B,d,!0)}})}var he=c(fe,2);{let a=v(()=>r()("settingsGeneral.pollingInterval")),i=v(()=>e(M).pollingInterval??""),d=v(()=>r()("settingsGeneral.pollingIntervalHelp"));y(he,{get label(){return e(a)},name:"pollingInterval",type:"number",placeholder:"60",get error(){return e(i)},get helpText(){return e(d)},get value(){return e(N)},set value(p){n(N,p,!0)}})}var be=c(he,2);y(be,{label:"Base Volume Path",name:"baseVolumePath",placeholder:"/data",helpText:"Prepended to relative volume sources (e.g., /data + my-app/uploads = /data/my-app/uploads)",get value(){return e(R)},set value(a){n(R,a,!0)}});var nt=c(be,2);{let a=v(()=>r()("settingsGeneral.notificationUrl")),i=v(()=>e(M).notificationUrl??""),d=v(()=>r()("settingsGeneral.notificationUrlHelp"));y(nt,{get label(){return e(a)},name:"notificationUrl",placeholder:"https://notify.example.com/webhook",get error(){return e(i)},get helpText(){return e(d)},get value(){return e(D)},set value(p){n(D,p,!0)}})}s(q);var re=c(q,2),xe=o(re),_e=o(xe),ae=o(_e),it=o(ae,!0);s(ae);var ne=c(ae,2),st=o(ne,!0);s(ne);var ye=c(ne,2),O=o(ye),we=o(O);Lt(we,{size:16});var lt=c(we,2);{var ot=a=>{var i=ve();_(d=>m(i,d),[()=>r()("settingsGeneral.loadingCertificates")]),x(a,i)},dt=a=>{var i=ve();_(()=>m(i,e(k))),x(a,i)},ct=a=>{var i=ve();_(d=>m(i,d),[()=>r()("settingsGeneral.noCertificate")]),x(a,i)};C(lt,a=>{e(ee)?a(ot):e(h)>0&&e(k)?a(dt,1):a(ct,-1)})}s(O);var vt=c(O,2);{var ut=a=>{var i=Xt(),d=o(i);Vt(d,{size:14}),s(i),_(p=>V(i,"title",p),[()=>r()("settingsGeneral.clearCertificate")]),A("click",i,Ke),x(a,i)};C(vt,a=>{e(h)>0&&a(ut)})}s(ye),s(_e),s(xe),s(re);var ie=c(re,2),se=o(ie),gt=o(se,!0);s(se);var ke=c(se,2),pt=o(ke);{let a=v(()=>r()("settings.staleThreshold")),i=v(()=>r()("settings.staleThresholdHelp"));y(pt,{get label(){return e(a)},name:"staleThresholdDays",type:"number",placeholder:"7",get helpText(){return e(i)},get value(){return e(Z)},set value(d){n(Z,d,!0)}})}s(ke),s(ie);var Ge=c(ie,2),X=o(Ge),$e=o(X);{var mt=a=>{Fe(a,{size:16})};C($e,a=>{e(T)&&a(mt)})}var ft=c($e);s(X),s(Ge),s(u);var Ie=c(u,2),le=o(Ie),ht=o(le,!0);s(le);var oe=c(le,2),bt=o(oe,!0);s(oe);var Ce=c(oe,2);{var xt=a=>{var i=Jt(),d=o(i),p=o(d,!0);s(d);var j=c(d,2),J=o(j);Rt(J,{size:16});var de=c(J);s(j),s(i),_(ce=>{m(p,e(E)),m(de,` ${ce??""}`)},[()=>r()("settingsGeneral.copy")]),A("click",j,()=>{navigator.clipboard.writeText(e(E)),G.info(r()("settingsGeneral.copied"))}),x(a,i)},_t=a=>{var i=Kt(),d=o(i,!0);s(i),_(p=>m(d,p),[()=>r()("settingsGeneral.noWebhookUrl")]),x(a,i)};C(Ce,a=>{e(E)?a(xt):a(_t,-1)})}var Ue=c(Ce,2),W=o(Ue),Pe=o(W);{var yt=a=>{Fe(a,{size:16})};C(Pe,a=>{e(S)&&a(yt)})}var ze=c(Pe,2);qt(ze,{size:16});var wt=c(ze);s(W);var Te=c(W,2),kt=o(Te,!0);s(Te),s(Ue),s(Ie),_((a,i,d,p,j,J,de,ce,Gt)=>{m(I,a),m(it,i),m(st,d),m(gt,p),X.disabled=e(T),m(ft,` ${j??""}`),m(ht,J),m(bt,de),W.disabled=e(S),m(wt,` ${ce??""}`),m(kt,Gt)},[()=>r()("settingsGeneral.globalConfig"),()=>r()("settingsGeneral.sslCertificate"),()=>r()("settingsGeneral.sslCertificateHelp"),()=>r()("stale.title"),()=>e(T)?r()("settingsGeneral.saving"):r()("settingsGeneral.saveSettings"),()=>r()("settingsGeneral.webhookUrl"),()=>r()("settingsGeneral.webhookDesc"),()=>e(S)?r()("settingsGeneral.regenerating"):r()("settingsGeneral.regenerateUrl"),()=>r()("settingsGeneral.regenerateWarning")]),A("click",O,Xe),A("click",X,qe),A("click",W,Oe),x(t,l)};C(et,t=>{e(Q)?t(tt):t(rt,-1)})}s(te);var at=c(te,2);{let t=v(()=>String(e(h))),l=v(()=>r()("settingsGeneral.selectCertificate"));At(at,{get items(){return e(Y)},get current(){return e(t)},get title(){return e(l)},onselect:Je,onclose:()=>{n($,!1)},get open(){return e($)},set open(u){n($,u,!0)}})}x(P,ue),Ut(),f()}$t(["click"]);export{pr as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/17.CjAaIU5M.js b/web/.svelte-kit/output/client/_app/immutable/nodes/17.CjAaIU5M.js
deleted file mode 100644
index c40e2ee..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/17.CjAaIU5M.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as ve,c as xt,a as y,s as d,b as w}from"../chunks/BJdXET8u.js";import{o as ue}from"../chunks/phMGo29-.js";import{p as pe,a as g,b as jt,t as k,g as a,e as xe,c as r,s as i,d as n,r as e,F as me,u as Ft}from"../chunks/DKemW7Dm.js";import{i as J,s as he,a as be}from"../chunks/BSXRhUWv.js";import{e as Tt,i as Nt}from"../chunks/CZnXUJhL.js";import{s as U,t as ge,r as S,a as _e}from"../chunks/kfynmD3Z.js";import{a as Pt,b as K}from"../chunks/DgtbvmBB.js";import{b as fe}from"../chunks/Bxa5VUw6.js";import{I as ye}from"../chunks/scnZuc49.js";import{I as we}from"../chunks/C6FeVxU4.js";import{I as Ae}from"../chunks/BFW91e3Y.js";import{E as ke}from"../chunks/CexodXHl.js";import{g as Ue}from"../chunks/DTyrBG6r.js";var $e=w('
'),Ee=w('
'),Se=w('
'),Ie=w(''),je=w(' '),Fe=w(''),Te=w('
'),Ne=w('');function Ke(zt,Ct){pe(Ct,!0);const o=()=>be(ge,"$t",Dt),[Dt,Ot]=he(),mt=[];let u=g(jt({auth_mode:"local",oidc_client_id:"",oidc_client_secret:"",oidc_issuer_url:"",oidc_redirect_url:""})),Q=g(jt([])),I=g(!1),$=g(""),c=g(""),j=g(""),F=g(""),L=g(""),M=g("viewer");function T(){return{"Content-Type":"application/json",Authorization:`Bearer ${Ue()??""}`}}ue(async()=>{await Promise.all([Jt(),V()])});async function Jt(){try{const s=await(await fetch("/api/auth/settings",{headers:T()})).json();s.success&&n(u,s.data,!0)}catch(t){n(c,t instanceof Error?t.message:o()("settingsAuth.loadFailed"),!0)}}async function V(){try{const s=await(await fetch("/api/auth/users",{headers:T()})).json();s.success&&n(Q,s.data??[],!0)}catch(t){n(c,t instanceof Error?t.message:o()("settingsAuth.loadFailed"),!0)}}async function Lt(){n(I,!0),n($,""),n(c,"");try{const s=await(await fetch("/api/auth/settings",{method:"PUT",headers:T(),body:JSON.stringify(a(u))})).json();s.success?n($,o()("settingsAuth.saved"),!0):n(c,s.error??o()("settingsAuth.saveFailed"),!0)}catch(t){n(c,t instanceof Error?t.message:"Network error",!0)}finally{n(I,!1)}}async function Mt(){if(!a(j)||!a(F)){n(c,o()("settingsAuth.usernameRequired"),!0);return}try{const s=await(await fetch("/api/auth/users",{method:"POST",headers:T(),body:JSON.stringify({username:a(j),password:a(F),email:a(L),role:a(M)})})).json();s.success?(n(j,""),n(F,""),n(L,""),n(M,"viewer"),await V(),n($,o()("settingsAuth.userCreated"),!0)):n(c,s.error??o()("settingsAuth.createFailed"),!0)}catch(t){n(c,t instanceof Error?t.message:"Network error",!0)}}async function Rt(t){if(confirm(o()("settingsAuth.deleteConfirm")))try{const l=await(await fetch(`/api/auth/users/${t}`,{method:"DELETE",headers:T()})).json();l.success?(await V(),n($,o()("settingsAuth.userDeleted"),!0)):n(c,l.error??o()("settingsAuth.deleteFailed"),!0)}catch(s){n(c,s instanceof Error?s.message:"Network error",!0)}}var W=Ne(),X=r(W),Y=r(X),qt=r(Y,!0);e(Y);var ht=i(Y,2),Bt=r(ht,!0);e(ht),e(X);var bt=i(X,2);{var Ht=t=>{var s=$e(),l=r(s,!0);e(s),k(()=>d(l,a($))),y(t,s)};J(bt,t=>{a($)&&t(Ht)})}var gt=i(bt,2);{var Gt=t=>{var s=Ee(),l=r(s,!0);e(s),k(()=>d(l,a(c))),y(t,s)};J(gt,t=>{a(c)&&t(Gt)})}var Z=i(gt,2),tt=r(Z),Kt=r(tt,!0);e(tt);var _t=i(tt,2),et=r(_t),N=r(et);S(N),N.value=N.__value="local";var ft=i(N,2),Qt=r(ft,!0);e(ft),e(et);var yt=i(et,2),P=r(yt);S(P),P.value=P.__value="oidc";var wt=i(P,2),Vt=r(wt,!0);e(wt),e(yt),e(_t),e(Z);var At=i(Z,2);{var Wt=t=>{var s=Ie(),l=r(s),p=r(l,!0);e(l);var x=i(l,2);Tt(x,5,()=>[{id:"issuer",label:o()("settingsAuth.issuerUrl"),type:"url",key:"oidc_issuer_url",placeholder:"https://auth.example.com/application/o/docker-watcher/"},{id:"client_id",label:o()("settingsAuth.clientId"),type:"text",key:"oidc_client_id",placeholder:""},{id:"client_secret",label:o()("settingsAuth.clientSecret"),type:"password",key:"oidc_client_secret",placeholder:""},{id:"redirect",label:o()("settingsAuth.redirectUrl"),type:"url",key:"oidc_redirect_url",placeholder:"https://watcher.example.com/api/auth/oidc/callback"}],Nt,(m,v)=>{var h=Se(),_=r(h),A=r(_,!0);e(_);var b=i(_,2);S(b),e(h),k(()=>{U(_,"for",a(v).id),d(A,a(v).label),U(b,"id",a(v).id),U(b,"type",a(v).type),U(b,"placeholder",a(v).placeholder)}),K(b,()=>a(u)[a(v).key],E=>a(u)[a(v).key]=E),y(m,h)}),e(x),e(s),k(m=>d(p,m),[()=>o()("settingsAuth.oidcConfig")]),y(t,s)};J(At,t=>{a(u).auth_mode==="oidc"&&t(Wt)})}var z=i(At,2),kt=r(z);{var Xt=t=>{Ae(t,{size:16})};J(kt,t=>{a(I)&&t(Xt)})}var Yt=i(kt);e(z);var Ut=i(z,2),rt=r(Ut),Zt=r(rt,!0);e(rt);var $t=i(rt,2);{var te=t=>{var s=Fe(),l=r(s),p=r(l),x=r(p),m=r(x),v=r(m,!0);e(m);var h=i(m),_=r(h,!0);e(h);var A=i(h),b=r(A,!0);e(A);var E=i(A),nt=r(E,!0);e(E),me(),e(x),e(p);var G=i(p);Tt(G,21,()=>a(Q),Nt,(dt,f)=>{var D=je(),O=r(D),ie=r(O,!0);e(O);var lt=i(O),ne=r(lt,!0);e(lt);var ct=i(lt),vt=r(ct),de=r(vt,!0);e(vt),e(ct);var ut=i(ct),le=r(ut,!0);e(ut);var It=i(ut),pt=r(It),ce=r(pt);ye(ce,{size:16}),e(pt),e(It),e(D),k(()=>{d(ie,a(f).username),d(ne,a(f).email||"-"),_e(vt,1,`inline-flex rounded-full px-2 py-0.5 text-xs font-semibold ${a(f).role==="admin"?"bg-purple-50 text-purple-700":"bg-gray-100 text-gray-700"}`),d(de,a(f).role),d(le,a(f).created_at)}),xt("click",pt,()=>Rt(a(f).id)),y(dt,D)}),e(G),e(l),e(s),k((dt,f,D,O)=>{d(v,dt),d(_,f),d(b,D),d(nt,O)},[()=>o()("settingsAuth.username"),()=>o()("settingsAuth.email"),()=>o()("settingsAuth.role"),()=>o()("settingsAuth.created")]),y(t,s)},ee=t=>{var s=Te(),l=r(s);{let p=Ft(()=>o()("empty.noUsers")),x=Ft(()=>o()("empty.noUsersDesc"));ke(l,{get title(){return a(p)},get description(){return a(x)},icon:"users"})}e(s),y(t,s)};J($t,t=>{a(Q).length>0?t(te):t(ee,-1)})}var Et=i($t,2),at=r(Et),re=r(at,!0);e(at);var st=i(at,2),R=r(st);S(R);var q=i(R,2);S(q);var B=i(q,2);S(B);var ot=i(B,2),C=r(ot),ae=r(C,!0);e(C),C.value=C.__value="viewer";var H=i(C),se=r(H,!0);e(H),H.value=H.__value="admin",e(ot),e(st);var it=i(st,2),St=r(it);we(St,{size:16});var oe=i(St);e(it),e(Et),e(Ut),e(W),k((t,s,l,p,x,m,v,h,_,A,b,E,nt,G)=>{d(qt,t),d(Bt,s),d(Kt,l),d(Qt,p),d(Vt,x),z.disabled=a(I),d(Yt,` ${m??""}`),d(Zt,v),d(re,h),U(R,"placeholder",_),U(q,"placeholder",A),U(B,"placeholder",`${b??""} (optional)`),d(ae,E),d(se,nt),d(oe,` ${G??""}`)},[()=>o()("settingsAuth.title"),()=>o()("settingsAuth.description"),()=>o()("settingsAuth.authMode"),()=>o()("settingsAuth.local"),()=>o()("settingsAuth.oidc"),()=>a(I)?o()("settingsAuth.saving"):o()("settingsAuth.saveSettings"),()=>o()("settingsAuth.localUsers"),()=>o()("settingsAuth.addUser"),()=>o()("settingsAuth.username"),()=>o()("settingsAuth.password"),()=>o()("settingsAuth.email"),()=>o()("settingsAuth.viewer"),()=>o()("settingsAuth.admin"),()=>o()("settingsAuth.addUser")]),Pt(mt,[],N,()=>a(u).auth_mode,t=>a(u).auth_mode=t),Pt(mt,[],P,()=>a(u).auth_mode,t=>a(u).auth_mode=t),xt("click",z,Lt),K(R,()=>a(j),t=>n(j,t)),K(q,()=>a(F),t=>n(F,t)),K(B,()=>a(L),t=>n(L,t)),fe(ot,()=>a(M),t=>n(M,t)),xt("click",it,Mt),y(zt,W),xe(),Ot()}ve(["click"]);export{Ke as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/18.C3f1k8vs.js b/web/.svelte-kit/output/client/_app/immutable/nodes/18.C3f1k8vs.js
deleted file mode 100644
index 0653e3a..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/18.C3f1k8vs.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as ke,a as h,s as o,b as C,c as K}from"../chunks/BJdXET8u.js";import{p as Ee,a as y,b as Ue,i as qe,t as F,e as Fe,d as n,f as Ie,$ as Ne,c as a,r as s,s as l,g as e,h as Pe,u as g}from"../chunks/DKemW7Dm.js";import{i as z,s as Se,a as Te}from"../chunks/BSXRhUWv.js";import{e as He,i as ze}from"../chunks/CZnXUJhL.js";import{h as Le}from"../chunks/ecfdBtDb.js";import{t as je,a as De}from"../chunks/kfynmD3Z.js";import{m as Re,n as Me}from"../chunks/Bpb8V1MF.js";import{F as Q}from"../chunks/DfwQ65vN.js";import{S as Oe}from"../chunks/BE_zO38m.js";import{t as V}from"../chunks/CjZL2MYp.js";import{I as We}from"../chunks/LFhQE6G2.js";import{I as Ae}from"../chunks/BFW91e3Y.js";import{I as Be}from"../chunks/CPatcLwq.js";var Ge=C('
'),Je=C(' '),Ke=C(''),Qe=C('
'),Ve=C(' '),Xe=C(''),Ye=C(' ',1),Ze=C('');function ct(re,ae){Ee(ae,!0);const t=()=>Te(je,"$t",se),[se,ie]=Se();let j=y(!0),P=y(!1),w=y(""),$=y(""),b=y(""),k=y(!1),E=y(!1),S=y(Ue({}));function ne(){const r={};if(!e(w).trim())r.npmUrl=t()("validation.required",{field:"NPM URL"});else try{new URL(e(w).trim())}catch{r.npmUrl=t()("validation.invalidUrl")}return e($).trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e($).trim())||(r.npmEmail=t()("validation.invalidEmail")):r.npmEmail=t()("validation.required",{field:"Email"}),e(E)&&!e(b).trim()&&(r.npmPassword=t()("validation.requiredWhenUpdating",{field:"Password"})),n(S,r,!0),Object.keys(r).length===0}async function le(){n(j,!0);try{const r=await Re();n(w,r.npm_url??"",!0),n($,r.npm_email??"",!0),n(k,!!(r.npm_url&&r.npm_email)),n(b,"")}catch(r){V.error(r instanceof Error?r.message:t()("settingsCredentials.loadFailed"))}finally{n(j,!1)}}async function oe(){if(ne()){n(P,!0);try{const r={npm_url:e(w).trim(),npm_email:e($).trim()};e(b).trim()&&(r.npm_password=e(b).trim()),await Me(r),n(k,!0),n(E,!1),n(b,""),V.success(t()("settingsCredentials.saved"))}catch(r){V.error(r instanceof Error?r.message:t()("settingsCredentials.saveFailed"))}finally{n(P,!1)}}}qe(()=>{le()});var D=Ze();Le("5z23cl",r=>{Ie((p,U)=>{Ne.title=`${p??""} - ${U??""}`},[()=>t()("settingsCredentials.title"),()=>t()("app.name")])});var R=a(D),M=a(R),de=a(M,!0);s(M);var X=l(M,2),ve=a(X,!0);s(X),s(R);var me=l(R,2);{var pe=r=>{var p=Ge(),U=a(p);Oe(U,{height:"12rem"}),s(p),h(r,p)},ce=r=>{var p=Ye(),U=Pe(p),O=a(U),W=a(O),A=a(W),ue=a(A,!0);s(A);var Y=l(A,2),ge=a(Y,!0);s(Y),s(W);var fe=l(W,2);{var xe=v=>{var d=Je(),c=a(d);We(c,{size:12});var u=l(c);s(d),F(f=>o(u,` ${f??""}`),[()=>t()("settingsCredentials.configured")]),h(v,d)};z(fe,v=>{e(k)&&!e(E)&&v(xe)})}s(O);var _e=l(O,2);{var be=v=>{var d=Qe(),c=a(d);He(c,1,()=>[{label:t()("settingsCredentials.npmUrl"),value:e(w)},{label:t()("settingsCredentials.email"),value:e($)},{label:t()("settingsCredentials.password"),value:"--------"}],ze,(x,N)=>{var T=Ke(),L=a(T),H=a(L),J=a(H,!0);s(H);var i=l(H,2),m=a(i,!0);s(i),s(L),s(T),F(_=>{o(J,e(N).label),De(i,1,`text-sm text-[var(--text-secondary)] ${_??""}`),o(m,e(N).value||"Not set")},[()=>e(N).label===t()("settingsCredentials.password")?"font-mono":""]),h(x,T)});var u=l(c,2),f=a(u);Be(f,{size:16});var I=l(f);s(u),s(d),F(x=>o(I,` ${x??""}`),[()=>t()("settingsCredentials.changeCredentials")]),K("click",u,()=>{n(E,!0)}),h(v,d)},he=v=>{var d=Xe(),c=a(d);{let i=g(()=>t()("settingsCredentials.npmUrl")),m=g(()=>e(S).npmUrl??""),_=g(()=>t()("settingsCredentials.npmUrlHelp"));Q(c,{get label(){return e(i)},name:"npmUrl",placeholder:"http://npm:81",required:!0,get error(){return e(m)},get helpText(){return e(_)},get value(){return e(w)},set value(q){n(w,q,!0)}})}var u=l(c,2);{let i=g(()=>t()("settingsCredentials.email")),m=g(()=>e(S).npmEmail??""),_=g(()=>t()("settingsCredentials.emailHelp"));Q(u,{get label(){return e(i)},name:"npmEmail",type:"email",placeholder:"admin@example.com",required:!0,get error(){return e(m)},get helpText(){return e(_)},get value(){return e($)},set value(q){n($,q,!0)}})}var f=l(u,2);{let i=g(()=>t()("settingsCredentials.password")),m=g(()=>e(k)?"(enter new password)":"npm-password"),_=g(()=>e(S).npmPassword??""),q=g(()=>e(k)?t()("settingsCredentials.passwordHelpEdit"):t()("settingsCredentials.passwordHelpNew"));Q(f,{get label(){return e(i)},name:"npmPassword",type:"password",get placeholder(){return e(m)},get required(){return e(E)},get error(){return e(_)},get helpText(){return e(q)},get value(){return e(b)},set value($e){n(b,$e,!0)}})}var I=l(f,2),x=a(I),N=a(x);{var T=i=>{Ae(i,{size:16})};z(N,i=>{e(P)&&i(T)})}var L=l(N);s(x);var H=l(x,2);{var J=i=>{var m=Ve(),_=a(m,!0);s(m),F(q=>o(_,q),[()=>t()("common.cancel")]),K("click",m,()=>{n(E,!1),n(b,""),n(S,{},!0)}),h(i,m)};z(H,i=>{e(k)&&i(J)})}s(I),s(d),F(i=>{x.disabled=e(P),o(L,` ${i??""}`)},[()=>e(P)?t()("settingsCredentials.saving"):t()("settingsCredentials.save")]),K("click",x,oe),h(v,d)};z(_e,v=>{!e(E)&&e(k)?v(be):v(he,-1)})}s(U);var Z=l(U,2),B=a(Z),ye=a(B,!0);s(B);var ee=l(B,2),te=a(ee),G=l(te),Ce=a(G,!0);s(G);var we=l(G);s(ee),s(Z),F((v,d,c,u,f,I)=>{o(ue,v),o(ge,d),o(ye,c),o(te,`${u??""} `),o(Ce,f),o(we,` ${I??""}`)},[()=>t()("settingsCredentials.npm"),()=>t()("settingsCredentials.npmDesc"),()=>t()("settingsCredentials.registryTokens"),()=>t()("settingsCredentials.registryTokensDesc"),()=>t()("settingsCredentials.registriesLink"),()=>t()("settingsCredentials.registryTokensSuffix")]),h(r,p)};z(me,r=>{e(j)?r(pe):r(ce,-1)})}s(D),F((r,p)=>{o(de,r),o(ve,p)},[()=>t()("settingsCredentials.title"),()=>t()("settingsCredentials.description")]),h(re,D),Fe(),ie()}ke(["click"]);export{ct as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/19.CiwgThsf.js b/web/.svelte-kit/output/client/_app/immutable/nodes/19.CiwgThsf.js
deleted file mode 100644
index c761b66..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/19.CiwgThsf.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as h,f as Ae,d as Me,s as p,b,c as A}from"../chunks/BJdXET8u.js";import{t as X,p as Oe,a as m,b as fe,i as Be,e as Ge,d as a,g as e,f as Pe,$ as We,c as n,r as o,s as l,u}from"../chunks/DKemW7Dm.js";import{p as be,i as M,s as Je,a as Ke}from"../chunks/BSXRhUWv.js";import{e as _e,i as Qe}from"../chunks/CZnXUJhL.js";import{h as Ve}from"../chunks/ecfdBtDb.js";import{b as Xe}from"../chunks/Bxa5VUw6.js";import{l as Ye,A as ye,B as Ze,C as et,D as tt}from"../chunks/Bpb8V1MF.js";import{F as re}from"../chunks/DfwQ65vN.js";import{E as rt}from"../chunks/CexodXHl.js";import{S as at}from"../chunks/BE_zO38m.js";import{t as y}from"../chunks/CjZL2MYp.js";import{s as Re,a as st,c as it,t as ot}from"../chunks/kfynmD3Z.js";import{I as nt}from"../chunks/scnZuc49.js";import{I as lt}from"../chunks/C6FeVxU4.js";import{I as we}from"../chunks/BFW91e3Y.js";import{I as dt}from"../chunks/CPatcLwq.js";var vt=Ae(' ');function ct(ae,Y){const r=be(Y,"size",3,20),se=be(Y,"class",3,"");var I=vt();X(()=>{Re(I,"width",r()),Re(I,"height",r()),st(I,0,it(se()))}),h(ae,I)}var ut=b(' '),gt=b(' Gitea GitHub Docker Hub Custom
'),pt=b('
'),mt=b(' '),ft=b(' '),ht=b(' '),xt=b(''),bt=b('
'),_t=b('');function Dt(ae,Y){Oe(Y,!0);const r=()=>Ke(ot,"$t",se),[se,I]=Je();let Z=m(fe([])),ie=m(!0),E=m(!1),f=m(null),H=m(""),R=m(""),O=m("gitea"),w=m(""),B=m(""),z=m(!1),G=m(null),_=fe({}),C=m(fe({}));function ke(){const t={};if(e(H).trim()||(t.name=r()("validation.required",{field:"Name"})),!e(R).trim())t.url=r()("validation.required",{field:"URL"});else try{new URL(e(R).trim())}catch{t.url=r()("validation.invalidUrl")}return!e(w).trim()&&!e(f)&&(t.token=r()("validation.requiredForNew",{field:"Token"})),a(C,t,!0),Object.keys(t).length===0}function oe(){a(E,!1),a(f,null),a(H,""),a(R,""),a(O,"gitea"),a(w,""),a(B,""),a(C,{},!0)}function $e(t){a(f,t.id,!0),a(H,t.name,!0),a(R,t.url,!0),a(O,t.type,!0),a(w,""),a(B,t.owner??"",!0),a(E,!0),a(C,{},!0)}async function ne(){a(ie,!0);try{a(Z,await Ye(),!0),Ee()}catch(t){y.error(t instanceof Error?t.message:r()("settingsRegistries.loadFailed"))}finally{a(ie,!1)}}async function Fe(){if(ke()){a(z,!0);try{const t={name:e(H).trim(),url:e(R).trim(),type:e(O),owner:e(B).trim()};e(w).trim()&&(t.token=e(w).trim()),e(f)?(await Ze(e(f),t),y.success(r()("settingsRegistries.registryUpdated"))):(await et(t),y.success(r()("settingsRegistries.registryAdded"))),oe(),await ne()}catch(t){y.error(t instanceof Error?t.message:r()("settingsRegistries.saveFailed"))}finally{a(z,!1)}}}async function Te(t){if(confirm(r()("settingsRegistries.deleteConfirm",{name:t.name})))try{await tt(t.id),y.success(r()("settingsRegistries.registryDeleted",{name:t.name})),await ne()}catch(s){y.error(s instanceof Error?s.message:r()("settingsRegistries.deleteFailed"))}}async function Ie(t){a(G,t.id,!0);try{await ye(t.id),y.success(r()("settingsRegistries.testSuccess",{name:t.name})),_[t.id]="healthy"}catch(s){y.error(s instanceof Error?s.message:r()("settingsRegistries.testFailed")),_[t.id]="unhealthy"}finally{a(G,null)}}async function Ee(){for(const t of e(Z)){_[t.id]="checking";try{await ye(t.id),_[t.id]="healthy"}catch{_[t.id]="unhealthy"}}}Be(()=>{ne()});var le=_t();Ve("p19oey",t=>{Pe((s,c)=>{We.title=`${s??""} - ${c??""}`},[()=>r()("settingsRegistries.title"),()=>r()("app.name")])});var de=n(le),ve=n(de),ce=n(ve),He=n(ce,!0);o(ce);var he=l(ce,2),ze=n(he,!0);o(he),o(ve);var Ce=l(ve,2);{var Se=t=>{var s=ut(),c=n(s);lt(c,{size:16});var d=l(c);o(s),X(x=>p(d,` ${x??""}`),[()=>r()("settingsRegistries.addRegistry")]),A("click",s,()=>{oe(),a(E,!0)}),h(t,s)};M(Ce,t=>{e(E)||t(Se)})}o(de);var xe=l(de,2);{var Ue=t=>{var s=gt(),c=n(s),d=n(c,!0);o(c);var x=l(c,2),S=n(x);{let v=u(()=>r()("settingsRegistries.name")),i=u(()=>e(C).name??""),g=u(()=>r()("settingsRegistries.nameHelp"));re(S,{get label(){return e(v)},name:"registryName",placeholder:"gitea",required:!0,get error(){return e(i)},get helpText(){return e(g)},get value(){return e(H)},set value(T){a(H,T,!0)}})}var U=l(S,2);{let v=u(()=>r()("settingsRegistries.url")),i=u(()=>e(C).url??""),g=u(()=>r()("settingsRegistries.urlHelp"));re(U,{get label(){return e(v)},name:"registryUrl",placeholder:"https://git.example.com",required:!0,get error(){return e(i)},get helpText(){return e(g)},get value(){return e(R)},set value(T){a(R,T,!0)}})}var q=l(U,2),P=n(q),ue=n(P,!0);o(P);var N=l(P,2),k=n(N);k.value=k.__value="gitea";var W=l(k);W.value=W.__value="github";var D=l(W);D.value=D.__value="docker_hub";var ee=l(D);ee.value=ee.__value="custom",o(N);var J=l(N,2),ge=n(J,!0);o(J),o(q);var K=l(q,2);{let v=u(()=>r()("settingsRegistries.token")),i=u(()=>e(f)?"(leave empty to keep current)":"registry-access-token"),g=u(()=>!e(f)),T=u(()=>e(C).token??""),me=u(()=>e(f)?r()("settingsRegistries.tokenHelpEdit"):r()("settingsRegistries.tokenHelpNew"));re(K,{get label(){return e(v)},name:"registryToken",type:"password",get placeholder(){return e(i)},get required(){return e(g)},get error(){return e(T)},get helpText(){return e(me)},get value(){return e(w)},set value(je){a(w,je,!0)}})}var $=l(K,2);{let v=u(()=>r()("settingsRegistries.owner")),i=u(()=>r()("settingsRegistries.ownerHelp"));re($,{get label(){return e(v)},name:"registryOwner",placeholder:"alexei",get helpText(){return e(i)},get value(){return e(B)},set value(g){a(B,g,!0)}})}o(x);var Q=l(x,2),F=n(Q),te=n(F);{var pe=v=>{we(v,{size:16})};M(te,v=>{e(z)&&v(pe)})}var L=l(te);o(F);var j=l(F,2),V=n(j,!0);o(j),o(Q),o(s),X((v,i,g,T,me)=>{p(d,v),p(ue,i),p(ge,g),F.disabled=e(z),p(L,` ${T??""}`),j.disabled=e(z),p(V,me)},[()=>e(f)?r()("settingsRegistries.editRegistry"):r()("settingsRegistries.addNewRegistry"),()=>r()("settingsRegistries.type"),()=>r()("settingsRegistries.typeHelp"),()=>e(z)?r()("settingsRegistries.saving"):e(f)?r()("settingsRegistries.update"):r()("settingsRegistries.addRegistry"),()=>r()("common.cancel")]),Xe(N,()=>e(O),v=>a(O,v)),A("click",F,Fe),A("click",j,oe),h(t,s)};M(xe,t=>{e(E)&&t(Ue)})}var qe=l(xe,2);{var Ne=t=>{var s=pt();_e(s,20,()=>Array(2),Qe,(c,d)=>{at(c,{height:"5rem"})}),o(s),h(t,s)},De=t=>{{let s=u(()=>r()("empty.noRegistries")),c=u(()=>r()("empty.noRegistriesDesc")),d=u(()=>r()("settingsRegistries.addFirst"));rt(t,{get title(){return e(s)},get description(){return e(c)},get actionLabel(){return e(d)},onaction:()=>{a(E,!0)},icon:"registries"})}},Le=t=>{var s=bt();_e(s,21,()=>e(Z),c=>c.id,(c,d)=>{var x=xt(),S=n(x),U=n(S),q=n(U);{var P=i=>{var g=mt();h(i,g)},ue=i=>{var g=ft();h(i,g)},N=i=>{var g=ht();h(i,g)};M(q,i=>{_[e(d).id]==="checking"?i(P):_[e(d).id]==="healthy"?i(ue,1):_[e(d).id]==="unhealthy"&&i(N,2)})}var k=l(q,2),W=n(k,!0);o(k);var D=l(k,2),ee=n(D,!0);o(D),o(U);var J=l(U,2),ge=n(J);o(J),o(S);var K=l(S,2),$=n(K),Q=n($);{var F=i=>{we(i,{size:14})},te=i=>{ct(i,{size:14})};M(Q,i=>{e(G)===e(d).id?i(F):i(te,-1)})}var pe=l(Q);o($);var L=l($,2),j=n(L);dt(j,{size:16}),o(L);var V=l(L,2),v=n(V);nt(v,{size:16}),o(V),o(K),o(x),X(i=>{p(W,e(d).name),p(ee,e(d).type),p(ge,`${e(d).url??""}${e(d).owner?`/${e(d).owner}`:""}`),$.disabled=e(G)===e(d).id,p(pe,` ${i??""}`)},[()=>e(G)===e(d).id?r()("settingsRegistries.testing"):r()("settingsRegistries.test")]),A("click",$,()=>Ie(e(d))),A("click",L,()=>$e(e(d))),A("click",V,()=>Te(e(d))),h(c,x)}),o(s),h(t,s)};M(qe,t=>{e(ie)?t(Ne):e(Z).length===0?t(De,1):t(Le,-1)})}o(le),X((t,s)=>{p(He,t),p(ze,s)},[()=>r()("settingsRegistries.title"),()=>r()("settingsRegistries.description")]),h(ae,le),Ge(),I()}Me(["click"]);export{Dt as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/2.DWWtnNKd.js b/web/.svelte-kit/output/client/_app/immutable/nodes/2.DWWtnNKd.js
deleted file mode 100644
index 6dc8508..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/2.DWWtnNKd.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{a as y,f as H,s as M,b as A}from"../chunks/BJdXET8u.js";import{t as w,p as J,e as L,c as o,r as s,s as b,g as t,u as v}from"../chunks/DKemW7Dm.js";import{p as S,s as N,a as j,i as O}from"../chunks/BSXRhUWv.js";import{s as Q}from"../chunks/CnPWu_ZO.js";import{e as R,i as T}from"../chunks/CZnXUJhL.js";import{s as _,a as B,c as U,t as X}from"../chunks/kfynmD3Z.js";import{p as Y}from"../chunks/DELaSNrV.js";import{I as Z}from"../chunks/CWCQOKDd.js";import{I as tt}from"../chunks/DqoiTw6k.js";import{I as et}from"../chunks/DhEbbC3M.js";var rt=H(' ');function at(g,n){const f=S(n,"size",3,20),p=S(n,"class",3,"");var i=rt();w(()=>{_(i,"width",f()),_(i,"height",f()),B(i,0,U(p()))}),y(g,i)}var st=A(" "),it=A('');function dt(g,n){J(n,!0);const f=()=>j(Y,"$page",i),p=()=>j(X,"$t",i),[i,C]=N(),D=[{href:"/settings",labelKey:"settings.general",icon:"general"},{href:"/settings/registries",labelKey:"settings.registries",icon:"registries"},{href:"/settings/credentials",labelKey:"settings.credentials",icon:"credentials"},{href:"/settings/auth",labelKey:"settings.authentication",icon:"auth"}];let I=v(()=>f().url.pathname);function c(l){return l==="/settings"?t(I)==="/settings":t(I).startsWith(l)}var h=it(),d=o(h),P=o(d,!0);s(d);var k=b(d,2),u=o(k),z=o(u);R(z,21,()=>D,T,(l,r)=>{var m=st(),x=o(m),$=o(x);{var W=e=>{{let a=v(()=>c(t(r).href)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)]");Z(e,{size:16,get class(){return t(a)}})}},q=e=>{{let a=v(()=>c(t(r).href)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)]");at(e,{size:16,get class(){return t(a)}})}},E=e=>{{let a=v(()=>c(t(r).href)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)]");tt(e,{size:16,get class(){return t(a)}})}},F=e=>{{let a=v(()=>c(t(r).href)?"text-[var(--color-brand-600)]":"text-[var(--text-tertiary)]");et(e,{size:16,get class(){return t(a)}})}};O($,e=>{t(r).icon==="general"?e(W):t(r).icon==="registries"?e(q,1):t(r).icon==="credentials"?e(E,2):t(r).icon==="auth"&&e(F,3)})}var G=b($);s(x),s(m),w((e,a)=>{_(x,"href",t(r).href),B(x,1,`flex items-center gap-2.5 whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-all duration-150
- ${e??""}`),M(G,` ${a??""}`)},[()=>c(t(r).href)?"bg-[var(--color-brand-50)] text-[var(--color-brand-700)] shadow-sm":"text-[var(--text-secondary)] hover:bg-[var(--surface-card-hover)] hover:text-[var(--text-primary)]",()=>p()(t(r).labelKey)]),y(l,m)}),s(z),s(u);var K=b(u,2),V=o(K);Q(V,()=>n.children),s(K),s(k),s(h),w(l=>M(P,l),[()=>p()("settings.title")]),y(g,h),L(),C()}export{dt as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/3.C0WC8trC.js b/web/.svelte-kit/output/client/_app/immutable/nodes/3.C0WC8trC.js
deleted file mode 100644
index 236dd48..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/3.C0WC8trC.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as m,f as At,s as o,b as y,g as Wt,d as Xt,c as Yt}from"../chunks/BJdXET8u.js";import{t as k,p as It,c as e,r as t,s as a,g as r,e as Pt,u as _,h as $t,i as Bt,d as b,a as L,b as jt,f as te,$ as ee}from"../chunks/DKemW7Dm.js";import{p as ht,i as X,s as kt,a as Ct}from"../chunks/BSXRhUWv.js";import{e as Et,i as re}from"../chunks/CZnXUJhL.js";import{h as ae}from"../chunks/ecfdBtDb.js";import{s as _t,a as J,c as Dt,t as zt}from"../chunks/kfynmD3Z.js";import{o as Lt,M as se,L as oe,g as Mt,N as Rt,H as ne}from"../chunks/Bpb8V1MF.js";import{S as ie}from"../chunks/BPqRr2-s.js";import{S as de}from"../chunks/ip4Jv8C8.js";import{E as ve}from"../chunks/CexodXHl.js";import{I as Ft}from"../chunks/CGCp4lb_.js";import{I as le}from"../chunks/CvtQ6g1S.js";import{I as ce}from"../chunks/Hsiz6fBZ.js";import{I as pe}from"../chunks/DVE7XZFM.js";var xe=At(' ');function Ot(F,l){const n=ht(l,"size",3,20),O=ht(l,"class",3,"");var f=xe();k(()=>{_t(f,"width",n()),_t(f,"height",n()),J(f,0,Dt(O()))}),m(F,f)}var ue=At(' ');function qt(F,l){const n=ht(l,"size",3,20),O=ht(l,"class",3,"");var f=ue();k(()=>{_t(f,"width",n()),_t(f,"height",n()),J(f,0,Dt(O()))}),m(F,f)}var me=y(' '),fe=y(' '),ge=y(' ',1),he=y(' '),_e=y(' '),be=y(' '),ye=y('
');function we(F,l){It(l,!0);const n=()=>Ct(zt,"$t",O),[O,f]=kt(),w=ht(l,"instances",19,()=>[]),M=_(()=>w().filter(s=>s.status==="running").length),q=_(()=>w().filter(s=>s.status==="stopped").length),C=_(()=>w().filter(s=>s.status==="failed").length),j=_(()=>w().length),K=_(()=>()=>r(C)>0?"failed":r(M)>0?"running":(r(q)>0,"stopped"));var N=ye(),Y=e(N),V=e(Y),g=e(V),$=e(g),H=e($);qt(H,{size:16}),t($);var E=a($,2),Q=e(E,!0);t(E),t(g);var I=a(g,2),c=e(I,!0);t(I),t(V);var tt=a(V,2);{let s=_(()=>r(K)());ie(tt,{get status(){return r(s)},size:"sm"})}t(Y);var z=a(Y,2),A=e(z);{var et=s=>{var v=ge(),h=$t(v),B=a(e(h),2),at=e(B,!0);t(B),t(h);var st=a(h,2);{var U=p=>{var P=me(),R=a(e(P),2),D=e(R,!0);t(R),t(P),k(()=>o(D,r(q))),m(p,P)};X(st,p=>{r(q)>0&&p(U)})}var ct=a(st,2);{var ot=p=>{var P=fe(),R=a(e(P),2),D=e(R,!0);t(R),t(P),k(()=>o(D,r(C))),m(p,P)};X(ct,p=>{r(C)>0&&p(ot)})}var G=a(ct,2),pt=e(G);t(G),k(p=>{o(at,r(M)),o(pt,`${r(j)??""} ${p??""}`)},[()=>r(j)===1?n()("common.instance"):n()("common.instances")]),m(s,v)},dt=s=>{var v=he(),h=e(v,!0);t(v),k(B=>o(h,B),[()=>n()("projectDetail.noInstancesRunning")]),m(s,v)};X(A,s=>{r(j)>0?s(et):s(dt,-1)})}t(z);var Z=a(z,2),T=e(Z);{var vt=s=>{var v=_e(),h=e(v);t(v),k(()=>o(h,`:${l.project.port??""}`)),m(s,v)};X(T,s=>{l.project.port&&s(vt)})}var lt=a(T,2);{var rt=s=>{var v=be(),h=e(v,!0);t(v),k(()=>o(h,l.project.healthcheck)),m(s,v)};X(lt,s=>{l.project.healthcheck&&s(rt)})}t(Z),t(N),k(()=>{_t(N,"href",`/projects/${l.project.id??""}`),o(Q,l.project.name),o(c,l.project.image)}),m(F,N),Pt(),f()}var je=y('/ ',1),$e=y('');function Ie(F,l){It(l,!0);const n=()=>Ct(zt,"$t",O),[O,f]=kt();let w=L(0),M=L(0),q=L(0),C=L(0),j=L(0),K=L(!0);Bt(()=>{let g=!1;async function $(){try{const[H,E,Q]=await Promise.all([Lt(),se().catch(()=>[]),oe().catch(()=>({info:0,warn:0,error:0,total:0}))]),I=[];for(const c of H)try{const tt=await Mt(c.id);for(const z of tt.stages??[]){const A=await Rt(c.id,z.id);I.push(...A)}}catch{}g||(b(w,I.filter(c=>c.status==="running").length,!0),b(M,I.filter(c=>c.status!=="running").length,!0),b(q,E.filter(c=>c.health_status==="healthy").length,!0),b(C,E.filter(c=>c.health_status==="unhealthy").length,!0),b(j,Q.error,!0),b(K,!1))}catch{g||b(K,!1)}}return $(),()=>{g=!0}});var N=Wt(),Y=$t(N);{var V=g=>{var $=$e(),H=e($),E=e(H,!0);t(H);var Q=a(H,2),I=e(Q),c=e(I),tt=e(c);Ot(tt,{size:18}),t(c);var z=a(c,2),A=e(z),et=e(A,!0);t(A);var dt=a(A,2),Z=e(dt),T=e(Z,!0);t(Z);var vt=a(Z,4),lt=e(vt,!0);t(vt),t(dt),t(z),t(I);var rt=a(I,2),s=e(rt),v=e(s);le(v,{size:18}),t(s);var h=a(s,2),B=e(h),at=e(B,!0);t(B);var st=a(B,2),U=e(st),ct=e(U,!0);t(U);var ot=a(U,2);{var G=nt=>{var it=je(),W=a($t(it),2),ft=e(W,!0);t(W),k(()=>o(ft,r(C))),m(nt,it)};X(ot,nt=>{r(C)>0&&nt(G)})}t(st),t(h),t(rt);var pt=a(rt,2),p=e(pt),P=e(p);Ft(P,{size:18}),t(p);var R=a(p,2),D=e(R),bt=e(D,!0);t(D);var xt=a(D,2),ut=e(xt,!0);t(xt),t(R),t(pt),t(Q),t($),k((nt,it,W,ft)=>{o(E,nt),o(et,it),o(T,r(w)),o(lt,r(M)),J(s,1,`flex h-9 w-9 items-center justify-center rounded-lg ${r(C)>0?"bg-red-50 text-red-600":"bg-blue-50 text-blue-600"}`),o(at,W),o(ct,r(q)),J(p,1,`flex h-9 w-9 items-center justify-center rounded-lg ${r(j)>0?"bg-red-50 text-red-600":"bg-gray-50 text-gray-400"}`),o(bt,ft),J(xt,1,`text-sm font-semibold ${r(j)>0?"text-red-600":"text-[var(--text-primary)]"}`),o(ut,r(j))},[()=>n()("systemHealth.title"),()=>n()("systemHealth.containers"),()=>n()("systemHealth.proxies"),()=>n()("systemHealth.recentErrors")]),m(g,$)};X(Y,g=>{r(K)||g(V)})}m(F,N),Pt(),f()}var Pe=y('
'),ke=y(''),Ce=y('
'),ze=y('
'),Se=y('');function Ge(F,l){It(l,!0);const n=()=>Ct(zt,"$t",O),[O,f]=kt();let w=L(jt([])),M=L(jt({})),q=L(jt([])),C=L(!0),j=L("");async function K(){b(C,!0),b(j,"");try{b(w,await Lt(),!0);const i=r(w).map(async u=>{try{const gt=(await Mt(u.id)).stages??[],Tt=await Promise.all(gt.map(Ut=>Rt(u.id,Ut.id)));return{projectId:u.id,instances:Tt.flat()}}catch{return{projectId:u.id,instances:[]}}}),[d,x]=await Promise.all([Promise.all(i),ne().catch(()=>[])]),S={};for(const u of d)S[u.projectId]=u.instances;b(M,S,!0),b(q,x,!0)}catch(i){b(j,i instanceof Error?i.message:n()("dashboard.loadFailed"),!0)}finally{b(C,!1)}}Bt(()=>{K()});const N=_(()=>r(w).length),Y=_(()=>Object.values(r(M)).flat().filter(i=>i.status==="running").length),V=_(()=>Object.values(r(M)).flat().filter(i=>i.status==="failed").length),g=_(()=>r(q).length);var $=Se();ae("1uha8ag",i=>{te((d,x)=>{ee.title=`${d??""} - ${x??""}`},[()=>n()("dashboard.title"),()=>n()("app.name")])});var H=e($),E=e(H),Q=e(E,!0);t(E);var I=a(E,2),c=e(I);ce(c,{size:16});var tt=a(c);t(I),t(H);var z=a(H,2),A=e(z),et=e(A),dt=e(et);qt(dt,{size:24}),t(et);var Z=a(et,2),T=e(Z),vt=e(T,!0);t(T);var lt=a(T,2),rt=e(lt,!0);t(lt),t(Z),t(A);var s=a(A,2),v=e(s),h=e(v);Ot(h,{size:24}),t(v);var B=a(v,2),at=e(B),st=e(at,!0);t(at);var U=a(at,2),ct=e(U,!0);t(U),t(B),t(s);var ot=a(s,2),G=e(ot),pt=e(G);Ft(pt,{size:24}),t(G);var p=a(G,2),P=e(p),R=e(P,!0);t(P);var D=a(P,2),bt=e(D,!0);t(D),t(p),t(ot);var xt=a(ot,2),ut=e(xt),nt=e(ut);pe(nt,{size:24}),t(ut);var it=a(ut,2),W=e(it),ft=e(W,!0);t(W);var yt=a(W,2),Nt=e(yt,!0);t(yt),t(it),t(xt),t(z);var St=a(z,2);Ie(St,{});var Ht=a(St,2),wt=e(Ht),Vt=e(wt,!0);t(wt);var Zt=a(wt,2);{var Gt=i=>{var d=Pe();Et(d,20,()=>Array(3),re,(x,S)=>{de(x)}),t(d),m(i,d)},Jt=i=>{var d=ke(),x=e(d),S=e(x,!0);t(x);var u=a(x,2),mt=e(u,!0);t(u),t(d),k(gt=>{o(S,r(j)),o(mt,gt)},[()=>n()("dashboard.retry")]),Yt("click",u,K),m(i,d)},Kt=i=>{var d=Ce(),x=e(d);{let S=_(()=>n()("empty.noProjects")),u=_(()=>n()("empty.noProjectsDesc")),mt=_(()=>n()("empty.createProject"));ve(x,{get title(){return r(S)},get description(){return r(u)},get actionLabel(){return r(mt)},actionHref:"/projects",icon:"projects"})}t(d),m(i,d)},Qt=i=>{var d=ze();Et(d,21,()=>r(w),x=>x.id,(x,S)=>{{let u=_(()=>r(M)[r(S).id]??[]);we(x,{get project(){return r(S)},get instances(){return r(u)}})}}),t(d),m(i,d)};X(Zt,i=>{r(C)?i(Gt):r(j)?i(Jt,1):r(w).length===0?i(Kt,2):i(Qt,-1)})}t(Ht),t($),k((i,d,x,S,u,mt,gt)=>{o(Q,i),o(tt,` ${d??""}`),o(vt,x),o(rt,r(N)),o(st,S),o(ct,r(Y)),J(G,1,`flex h-12 w-12 items-center justify-center rounded-xl ${r(V)>0?"bg-red-50 text-red-600":"bg-gray-50 text-gray-400"}`),o(R,u),J(D,1,`mt-0.5 text-2xl font-bold ${r(V)>0?"text-red-600":"text-[var(--text-primary)]"}`),o(bt,r(V)),J(ut,1,`flex h-12 w-12 items-center justify-center rounded-xl ${r(g)>0?"bg-amber-50 text-amber-600":"bg-gray-50 text-gray-400"}`),o(ft,mt),J(yt,1,`mt-0.5 text-2xl font-bold ${r(g)>0?"text-amber-600":"text-[var(--text-primary)]"}`),o(Nt,r(g)),o(Vt,gt)},[()=>n()("dashboard.title"),()=>n()("dashboard.quickDeploy"),()=>n()("dashboard.totalProjects"),()=>n()("dashboard.runningInstances"),()=>n()("dashboard.failedInstances"),()=>n()("dashboard.staleContainers"),()=>n()("dashboard.projects")]),m(F,$),Pt(),f()}Xt(["click"]);export{Ge as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/4.BxW_ZYFP.js b/web/.svelte-kit/output/client/_app/immutable/nodes/4.BxW_ZYFP.js
deleted file mode 100644
index ac81c1a..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/4.BxW_ZYFP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as z,f as me,d as re,s as u,c as W,b as j}from"../chunks/BJdXET8u.js";import{t as H,p as ne,c as o,r as s,s as i,g as a,e as se,u as v,a as S,b as Z,i as fe,h as ge,d as c,f as pe,$ as xe}from"../chunks/DKemW7Dm.js";import{p as X,a as oe,s as le,i as R}from"../chunks/BSXRhUWv.js";import{e as ee,i as _e}from"../chunks/CZnXUJhL.js";import{h as be}from"../chunks/ecfdBtDb.js";import{H as he,I as ye,J as ke}from"../chunks/Bpb8V1MF.js";import{s as Y,a as ie,c as Ce,t as ce}from"../chunks/kfynmD3Z.js";import{I as de}from"../chunks/scnZuc49.js";import{I as te}from"../chunks/DVE7XZFM.js";import{C as ae}from"../chunks/C8zo5-Sk.js";import{E as we}from"../chunks/CexodXHl.js";import{S as Se}from"../chunks/ip4Jv8C8.js";import{I as ze}from"../chunks/BFW91e3Y.js";import{t as P}from"../chunks/CjZL2MYp.js";var Ie=me(' ');function je($,l){const r=X(l,"size",3,20),A=X(l,"class",3,"");var x=Ie();H(()=>{Y(x,"width",r()),Y(x,"height",r()),ie(x,0,Ce(A()))}),z($,x)}const $e=!1,Xe=Object.freeze(Object.defineProperty({__proto__:null,ssr:$e},Symbol.toStringTag,{value:"Module"}));var Ae=j('');function De($,l){ne(l,!0);const r=()=>oe(ce,"$t",A),[A,x]=le(),g=X(l,"cleaning",3,!1),D=v(()=>l.container.days_stale>=14?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400"),y=v(()=>`${l.container.project_name}-${l.container.stage_name}-${l.container.instance.image_tag}`);function k(h){return h?new Date(h).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"}):"-"}var _=Ae(),p=o(_),b=o(p),C=o(b),G=o(C,!0);s(C);var M=i(C,2),E=o(M),O=o(E,!0);s(E);var I=i(E,2),B=o(I,!0);s(I),s(M),s(b);var w=i(b,2),U=o(w);te(U,{size:12});var K=i(U);s(w),s(p);var L=i(p,2),F=o(L),V=o(F);je(V,{size:12});var Q=i(V);s(F);var T=i(F,2),q=o(T);te(q,{size:12});var J=i(q);s(T);var N=i(T,2),e=o(N,!0);s(N),s(L);var t=i(L,2),n=o(t),d=o(n);de(d,{size:14});var m=i(d);s(n),s(t),s(_),H((h,f,ve,ue)=>{Y(C,"title",a(y)),u(G,a(y)),u(O,l.container.project_name),u(B,l.container.stage_name),ie(w,1,`inline-flex flex-shrink-0 items-center gap-1 rounded-full px-2.5 py-1 text-xs font-semibold ${a(D)??""}`),u(K,` ${l.container.days_stale??""} ${h??""}`),u(Q,` ${l.container.instance.image_tag??""}`),u(J,` ${f??""}: ${ve??""}`),u(e,l.container.instance.status),n.disabled=g(),u(m,` ${ue??""}`)},[()=>r()("stale.daysStale"),()=>r()("stale.lastAlive"),()=>k(l.container.instance.last_alive_at),()=>r()("stale.cleanup")]),W("click",n,()=>l.oncleanup(l.container.instance.id)),z($,_),se(),x()}re(["click"]);var Ee=j(' '),Be=j('
'),Le=j(''),Fe=j('
'),Te=j(' ',1);function Ye($,l){ne(l,!0);const r=()=>oe(ce,"$t",A),[A,x]=le();let g=S(Z([])),D=S(!0),y=S(""),k=S(""),_=S(!1),p=S(Z(new Set)),b=S(!1);async function C(){c(D,!0),c(y,"");try{c(g,await he(),!0)}catch(e){c(y,e instanceof Error?e.message:r()("stale.loadFailed"),!0)}finally{c(D,!1)}}function G(e){c(k,e,!0)}async function M(){const e=a(k);c(k,""),c(p,new Set([...a(p),e]),!0);try{await ye(e),c(g,a(g).filter(t=>t.id!==e),!0),P.success(r()("stale.cleanedUp"))}catch(t){P.error(t instanceof Error?t.message:r()("stale.cleanupFailed"))}finally{const t=new Set(a(p));t.delete(e),c(p,t,!0)}}async function E(){c(_,!1),c(b,!0);try{const e=await ke();c(g,[],!0),P.success(r()("stale.bulkCleanedUp",{count:String(e.deleted)}))}catch(e){P.error(e instanceof Error?e.message:r()("stale.cleanupFailed"))}finally{c(b,!1)}}fe(()=>{C()});var O=Te();be("r4vrn",e=>{pe((t,n)=>{xe.title=`${t??""} - ${n??""}`},[()=>r()("stale.title"),()=>r()("app.name")])});var I=ge(O),B=o(I),w=o(B),U=o(w,!0);s(w);var K=i(w,2);{var L=e=>{var t=Ee(),n=o(t);{var d=f=>{ze(f,{size:16})};R(n,f=>{a(b)&&f(d)})}var m=i(n,2);de(m,{size:16});var h=i(m);s(t),H(f=>{t.disabled=a(b),u(h,` ${f??""}`)},[()=>r()("stale.cleanupAll")]),W("click",t,()=>{c(_,!0)}),z(e,t)};R(K,e=>{a(g).length>0&&e(L)})}s(B);var F=i(B,2);{var V=e=>{var t=Be();ee(t,20,()=>Array(3),_e,(n,d)=>{Se(n)}),s(t),z(e,t)},Q=e=>{var t=Le(),n=o(t),d=o(n,!0);s(n);var m=i(n,2),h=o(m,!0);s(m),s(t),H(f=>{u(d,a(y)),u(h,f)},[()=>r()("common.retry")]),W("click",m,C),z(e,t)},T=e=>{{let t=v(()=>r()("stale.noStale")),n=v(()=>r()("stale.noStaleDesc"));we(e,{get title(){return a(t)},get description(){return a(n)},icon:"instances"})}},q=e=>{var t=Fe();ee(t,21,()=>a(g),n=>n.id,(n,d)=>{{let m=v(()=>a(p).has(a(d).id));De(n,{get container(){return a(d)},get cleaning(){return a(m)},oncleanup:G})}}),s(t),z(e,t)};R(F,e=>{a(D)?e(V):a(y)?e(Q,1):a(g).length===0?e(T,2):e(q,-1)})}s(I);var J=i(I,2);{let e=v(()=>a(k)!==""),t=v(()=>r()("stale.cleanup")),n=v(()=>r()("stale.confirmCleanup")),d=v(()=>r()("stale.cleanup"));ae(J,{get open(){return a(e)},get title(){return a(t)},get message(){return a(n)},get confirmLabel(){return a(d)},confirmVariant:"danger",onconfirm:M,oncancel:()=>{c(k,"")}})}var N=i(J,2);{let e=v(()=>r()("stale.cleanupAll")),t=v(()=>r()("stale.confirmBulkCleanup")),n=v(()=>r()("stale.cleanupAll"));ae(N,{get open(){return a(_)},get title(){return a(e)},get message(){return a(t)},get confirmLabel(){return a(n)},confirmVariant:"danger",onconfirm:E,oncancel:()=>{c(_,!1)}})}H(e=>u(U,e),[()=>r()("stale.title")]),z($,O),se(),x()}re(["click"]);export{Ye as component,Xe as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/5.C24PPPF_.js b/web/.svelte-kit/output/client/_app/immutable/nodes/5.C24PPPF_.js
deleted file mode 100644
index f475873..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/5.C24PPPF_.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as vt,c as Y,a as q,s as p,b as $}from"../chunks/BJdXET8u.js";import{p as mt,a as g,b as xe,d as a,g as t,t as D,e as gt,f as ft,s as n,c as i,$ as bt,r as s,u as v,h as H}from"../chunks/DKemW7Dm.js";import{i as Z,s as yt,a as xt}from"../chunks/BSXRhUWv.js";import{h as ht}from"../chunks/ecfdBtDb.js";import{s as he,t as _t}from"../chunks/kfynmD3Z.js";import{b as kt}from"../chunks/Bxa5VUw6.js";import{l as qt,a as Dt,i as wt,q as $t}from"../chunks/Bpb8V1MF.js";import{F as w}from"../chunks/DfwQ65vN.js";import{E as It}from"../chunks/BxXVdbgr.js";import{t as F}from"../chunks/CjZL2MYp.js";import{I as Pt}from"../chunks/Hsiz6fBZ.js";import{I as _e}from"../chunks/BvIWRct8.js";import{I as ce}from"../chunks/BFW91e3Y.js";var zt=$(" ",1),jt=$(" ",1),Et=$(" ",1),Nt=$(" ",1),Tt=$(' ',1),Ut=$('');function Gt(ke,qe){mt(qe,!0);const r=()=>xt(_t,"$t",De),[De,we]=yt();let b=g(""),I=g(!1),P=g(!1),L=g(!1),G=g(null),y=g(""),h=g(""),R=g(""),A=g("dev"),S=g(""),V=g(""),_=g(xe({})),z=g(!1),J=g(xe([])),M=g(!1);async function $e(){if(a(z,!0),!(t(J).length>0)){a(M,!0);try{const e=await qt(),l=[];for(const o of e)if(o.owner)try{const m=await Dt(o.id);for(const f of m)l.push({value:f.full_ref+":latest",label:f.full_ref,description:o.name,group:o.name})}catch{}a(J,l,!0)}catch{F.error(r()("quickDeploy.imageLoadFailed"))}finally{a(M,!1)}}}function Ie(e){a(b,e,!0),a(z,!1)}function Pe(e){return e.trim()?/^[a-zA-Z0-9._\-/]+:[a-zA-Z0-9._\-]+$/.test(e.trim())?"":r()("validation.invalidUrl"):r()("validation.required",{field:"Image URL"})}function ze(e){if(!e.trim())return r()("validation.required",{field:"Port"});const l=parseInt(e,10);return isNaN(l)||l<1||l>65535?r()("validation.invalidPort"):""}function je(e){return e.trim()?e.trim().length>1&&!/^[a-z0-9][a-z0-9\-]*[a-z0-9]$/.test(e.trim())?r()("validation.invalidProjectName"):"":r()("validation.required",{field:"Project name"})}function Ee(){const e={},l=je(t(y));l&&(e.projectName=l);const o=ze(t(h));return o&&(e.port=o),a(_,e,!0),Object.keys(e).length===0}function Ne(e){const o=(e.split(":")[0]??e).split("/");return(o[o.length-1]??"unknown").toLowerCase().replace(/[^a-z0-9\-]/g,"-")}async function Te(){var l;const e=Pe(t(b));if(e){a(_,{imageUrl:e},!0);return}a(_,{},!0),a(I,!0);try{const o=await wt(t(b).trim());a(G,o,!0),a(y,Ne(o.image),!0),a(h,((l=o.port)==null?void 0:l.toString())??"",!0),a(R,o.healthcheck??"",!0),a(A,"dev"),a(S,""),a(V,""),a(L,!0),F.success(r()("quickDeploy.inspectedSuccess"))}catch(o){const m=o instanceof Error?o.message:r()("quickDeploy.inspectFailed");F.error(m)}finally{a(I,!1)}}async function Ue(){if(Ee()){a(P,!0);try{await $t({image:t(b).trim(),name:t(y).trim(),port:parseInt(t(h),10)}),F.success(r()("quickDeploy.deployedSuccess",{name:t(y)})),a(b,""),a(L,!1),a(G,null),a(y,""),a(h,""),a(R,""),a(A,"dev"),a(S,""),a(V,"")}catch(e){const l=e instanceof Error?e.message:r()("quickDeploy.deployFailed");F.error(l)}finally{a(P,!1)}}}var Q=Ut();ht("2t7dow",e=>{ft((l,o)=>{bt.title=`${l??""} - ${o??""}`},[()=>r()("quickDeploy.title"),()=>r()("app.name")])});var W=i(Q),X=i(W),He=i(X,!0);s(X);var ue=n(X,2),Fe=i(ue,!0);s(ue),s(W);var ee=n(W,2),te=i(ee),Le=i(te,!0);s(te);var re=n(te,2),ae=i(re),Re=i(ae);{let e=v(()=>r()("quickDeploy.imageUrl")),l=v(()=>t(_).imageUrl??""),o=v(()=>r()("quickDeploy.imageUrlHelp"));w(Re,{get label(){return t(e)},name:"imageUrl",placeholder:"registry.example.com/org/app:tag",required:!0,get error(){return t(l)},get helpText(){return t(o)},get disabled(){return t(I)},get value(){return t(b)},set value(m){a(b,m,!0)}})}s(ae);var de=n(ae,2),k=i(de),Ae=i(k);{var Se=e=>{ce(e,{size:16})},Ve=e=>{_e(e,{size:16})};Z(Ae,e=>{t(M)?e(Se):e(Ve,-1)})}s(k);var C=n(k,2),Ce=i(C);{var Oe=e=>{var l=zt(),o=H(l);ce(o,{size:16});var m=n(o);D(f=>p(m,` ${f??""}`),[()=>r()("quickDeploy.inspecting")]),q(e,l)},Be=e=>{var l=jt(),o=H(l);_e(o,{size:16});var m=n(o);D(f=>p(m,` ${f??""}`),[()=>r()("quickDeploy.inspect")]),q(e,l)};Z(Ce,e=>{t(I)?e(Oe):e(Be,-1)})}s(C),s(de),s(re);var Ke=n(re,2);{let e=v(()=>r()("quickDeploy.selectImage")),l=v(()=>r()("entityPicker.search"));It(Ke,{get items(){return t(J)},get current(){return t(b)},get title(){return t(e)},get placeholder(){return t(l)},onselect:Ie,onclose:()=>{a(z,!1)},get open(){return t(z)},set open(o){a(z,o,!0)}})}s(ee);var Ye=n(ee,2);{var Ze=e=>{var l=Tt(),o=H(l),m=i(o),f=i(m,!0);s(m);var j=n(m,2),Ge=i(j,!0);s(j);var oe=n(j,2),pe=i(oe);{let c=v(()=>r()("quickDeploy.projectName")),u=v(()=>t(_).projectName??"");w(pe,{get label(){return t(c)},name:"projectName",placeholder:"my-app",required:!0,get error(){return t(u)},helpText:"Lowercase with hyphens",get value(){return t(y)},set value(d){a(y,d,!0)}})}var ve=n(pe,2);{let c=v(()=>r()("quickDeploy.port")),u=v(()=>t(_).port??""),d=v(()=>r()("quickDeploy.portHelp"));w(ve,{get label(){return t(c)},name:"port",type:"number",placeholder:"3000",required:!0,get error(){return t(u)},get helpText(){return t(d)},get value(){return t(h)},set value(x){a(h,x,!0)}})}var me=n(ve,2);{let c=v(()=>r()("quickDeploy.healthCheckPath")),u=v(()=>r()("quickDeploy.healthCheckHelp"));w(me,{get label(){return t(c)},name:"healthcheck",placeholder:"/api/health",get helpText(){return t(u)},get value(){return t(R)},set value(d){a(R,d,!0)}})}var le=n(me,2),ie=i(le),Je=i(ie,!0);s(ie);var O=n(ie,2),E=i(O),Me=i(E,!0);s(E),E.value=E.__value="dev";var N=n(E),Qe=i(N,!0);s(N),N.value=N.__value="rel";var B=n(N),We=i(B,!0);s(B),B.value=B.__value="prod",s(O);var ge=n(O,2),Xe=i(ge,!0);s(ge),s(le);var et=n(le,2);{let c=v(()=>r()("quickDeploy.subdomainOverride")),u=v(()=>r()("quickDeploy.subdomainHelp"));w(et,{get label(){return t(c)},name:"subdomain",placeholder:"auto-generated",get helpText(){return t(u)},get value(){return t(S)},set value(d){a(S,d,!0)}})}s(oe);var fe=n(oe,2),tt=i(fe);{let c=v(()=>r()("quickDeploy.envVars")),u=v(()=>r()("quickDeploy.envVarsHelp"));w(tt,{get label(){return t(c)},name:"envVars",type:"textarea",placeholder:"KEY=value ANOTHER_KEY=another_value",get helpText(){return t(u)},get value(){return t(V)},set value(d){a(V,d,!0)}})}s(fe),s(o);var be=n(o,2),se=i(be),rt=i(se,!0);s(se);var ne=n(se,2),at=i(ne,!0);s(ne);var ye=n(ne,2),T=i(ye),ot=i(T);{var lt=c=>{var u=Et(),d=H(u);ce(d,{size:16});var x=n(d);D(U=>p(x,` ${U??""}`),[()=>r()("projectDetail.deploying")]),q(c,u)},it=c=>{var u=Nt(),d=H(u);Pt(d,{size:16});var x=n(d);D(U=>p(x,` ${U??""}`),[()=>r()("quickDeploy.deployBtn")]),q(c,u)};Z(ot,c=>{t(P)?c(lt):c(it,-1)})}s(T);var K=n(T,2),st=i(K,!0);s(K),s(ye),s(be),D((c,u,d,x,U,nt,ct,ut,dt,pt)=>{p(f,c),p(Ge,u),p(Je,d),p(Me,x),p(Qe,U),p(We,nt),p(Xe,ct),p(rt,ut),p(at,dt),T.disabled=t(P),K.disabled=t(P),p(st,pt)},[()=>r()("quickDeploy.step2"),()=>r()("quickDeploy.reviewDesc"),()=>r()("quickDeploy.stage"),()=>r()("quickDeploy.development"),()=>r()("quickDeploy.release"),()=>r()("quickDeploy.production"),()=>r()("quickDeploy.stageHelp"),()=>r()("quickDeploy.step3"),()=>r()("quickDeploy.deployDesc"),()=>r()("common.cancel")]),kt(O,()=>t(A),c=>a(A,c)),Y("click",T,Ue),Y("click",K,()=>{a(L,!1),a(G,null)}),q(e,l)};Z(Ye,e=>{t(L)&&e(Ze)})}s(Q),D((e,l,o,m,f,j)=>{p(He,e),p(Fe,l),p(Le,o),he(k,"title",m),he(k,"aria-label",f),C.disabled=j},[()=>r()("quickDeploy.title"),()=>r()("quickDeploy.description"),()=>r()("quickDeploy.step1"),()=>r()("quickDeploy.browseImages"),()=>r()("quickDeploy.browseImages"),()=>t(I)||!t(b).trim()]),Y("click",k,$e),Y("click",C,Te),q(ke,Q),gt(),we()}vt(["click"]);export{Gt as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/6.CEvKoBqC.js b/web/.svelte-kit/output/client/_app/immutable/nodes/6.CEvKoBqC.js
deleted file mode 100644
index c4202b2..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/6.CEvKoBqC.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import{d as _e,s as h,a as g,c as U,b as y,e as Oe,f as Be}from"../chunks/BJdXET8u.js";import{o as Re,a as Ke}from"../chunks/phMGo29-.js";import{p as we,c as l,r as o,s as d,g as e,t as C,e as ke,u as L,h as pe,d as s,a as _,k as Ne,b as re}from"../chunks/DKemW7Dm.js";import{p as Pe,i as A,a as Se,s as Ee}from"../chunks/BSXRhUWv.js";import{e as de,i as xe}from"../chunks/CZnXUJhL.js";import{b as ze}from"../chunks/BoGS7hWi.js";import{a as G,s as je,t as Me,d as Fe,r as Ie}from"../chunks/kfynmD3Z.js";import{K as Ae,L as Ge}from"../chunks/Bpb8V1MF.js";import{c as He}from"../chunks/DPFeFjvi.js";import{E as Je}from"../chunks/CexodXHl.js";const Ve=!1,_t=Object.freeze(Object.defineProperty({__proto__:null,ssr:Ve},Symbol.toStringTag,{value:"Module"}));var Ze=y(' ',1),qe=y(''),Qe=y(' ',1),Ue=y('');function We(ae,r){we(r,!0);const p=()=>Se(Me,"$t",ne),[ne,oe]=Ee(),w=Pe(r,"isNew",3,!1);let x=_(!1);function W(u){const R=Date.now(),M=new Date(u).getTime(),b=Math.floor((R-M)/1e3);if(b<60)return`${b}s ago`;const T=Math.floor(b/60);if(T<60)return`${T}m ago`;const P=Math.floor(T/60);if(P<24)return`${P}h ago`;const z=Math.floor(P/24);return z<30?`${z}d ago`:`${Math.floor(z/30)}mo ago`}function H(u){return new Date(u).toLocaleString()}const X={info:"bg-blue-400 dark:bg-blue-500",warn:"bg-amber-400 dark:bg-amber-500",error:"bg-red-400 dark:bg-red-500"},S={info:"text-blue-600 dark:text-blue-400",warn:"text-amber-600 dark:text-amber-400",error:"text-red-600 dark:text-red-400"},j=L(()=>{if(!r.entry.metadata||r.entry.metadata==="{}"||r.entry.metadata==="null")return null;try{const u=JSON.parse(r.entry.metadata);return typeof u=="object"&&u!==null&&Object.keys(u).length>0?u:null}catch{return null}}),J=L(()=>e(j)!==null);var k=Ue(),D=l(k),K=l(D);o(D);var O=d(D,2),V=l(O),N=l(V),B=l(N,!0);o(N);var E=d(N,4),Z=l(E,!0);o(E);var a=d(E,2),i=l(a,!0);o(a),o(V);var c=d(V,2),v=l(c,!0);o(c);var m=d(c,2);{var q=u=>{var R=Qe(),M=pe(R),b=l(M),T=d(b);o(M);var P=d(M,2);{var z=F=>{var Y=qe(),ve=l(Y);de(ve,21,()=>Object.entries(e(j)??{}),xe,(me,be)=>{var se=L(()=>Ne(e(be),2));let ue=()=>e(se)[0],ie=()=>e(se)[1];var fe=Ze(),le=pe(fe),he=l(le,!0);o(le);var ge=d(le,2),t=l(ge,!0);o(ge),C(n=>{h(he,ue()),h(t,n)},[()=>typeof ie()=="object"?JSON.stringify(ie()):String(ie())]),g(me,fe)}),o(ve),o(Y),g(F,Y)};A(P,F=>{e(x)&&F(z)})}C(F=>{G(b,0,`h-2.5 w-2.5 transition-transform duration-150 ${e(x)?"rotate-90":""}`),h(T,` ${F??""}`)},[()=>p()("events.metadata")]),U("click",M,()=>{s(x,!e(x))}),g(u,R)};A(m,u=>{e(J)&&u(q)})}o(O),o(k),C((u,R,M,b)=>{G(k,1,`group relative flex gap-3 py-2.5 px-3 rounded-lg transition-colors duration-150 hover:bg-[var(--surface-card-hover)]
- ${w()?"animate-fade-in bg-[var(--color-brand-50)] dark:bg-[var(--color-brand-900)]/10":""}`),G(K,1,`w-0.5 h-full min-h-[1.5rem] rounded-full ${X[r.entry.severity]??X.info??""} opacity-70`),h(B,u),G(E,1,`font-medium ${S[r.entry.severity]??S.info??""}`),h(Z,R),je(a,"title",M),h(i,b),h(v,r.entry.message)},[()=>p()(`events.source.${r.entry.source}`),()=>p()(`events.severity.${r.entry.severity}`),()=>H(r.entry.created_at),()=>W(r.entry.created_at)]),g(ae,k),ke(),oe()}_e(["click"]);var Xe=y(" "),Ye=y(' '),$e=y(' '),et=y(' '),tt=y(' '),rt=y('');function at(ae,r){we(r,!0);const p=()=>Se(Me,"$t",ne),[ne,oe]=Ee(),w=["info","warn","error"],x=["deploy","container","proxy","system"],W=[{value:"1h",labelKey:"events.filter.lastHour"},{value:"24h",labelKey:"events.filter.last24h"},{value:"7d",labelKey:"events.filter.last7d"},{value:"all",labelKey:"events.filter.allTime"}],H={info:{active:"bg-blue-100 text-blue-700 ring-1 ring-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:ring-blue-700",inactive:"bg-[var(--surface-card-hover)] text-[var(--text-tertiary)] line-through decoration-1",dot:"bg-blue-500"},warn:{active:"bg-amber-100 text-amber-700 ring-1 ring-amber-300 dark:bg-amber-900/40 dark:text-amber-300 dark:ring-amber-700",inactive:"bg-[var(--surface-card-hover)] text-[var(--text-tertiary)] line-through decoration-1",dot:"bg-amber-500"},error:{active:"bg-red-100 text-red-700 ring-1 ring-red-300 dark:bg-red-900/40 dark:text-red-300 dark:ring-red-700",inactive:"bg-[var(--surface-card-hover)] text-[var(--text-tertiary)] line-through decoration-1",dot:"bg-red-500"}},X=L(()=>(r.severities.lengthc!==a):[...r.severities,a];i.length>0&&r.onseveritieschange(i)}function j(a){const i=r.sources.includes(a)?r.sources.filter(c=>c!==a):[...r.sources,a];i.length>0&&r.onsourceschange(i)}var J=rt(),k=l(J),D=l(k);de(D,17,()=>w,xe,(a,i)=>{const c=L(()=>r.severities.includes(e(i))),v=L(()=>H[e(i)]);var m=Ye(),q=l(m),u=d(q),R=d(u);{var M=b=>{var T=Xe(),P=l(T,!0);o(T),C(()=>{G(T,1,`tabular-nums font-semibold ${e(c)?"":"opacity-50"}`),h(P,r.stats[e(i)]??0)}),g(b,T)};A(R,b=>{r.stats&&b(M)})}o(m),C(b=>{G(m,1,`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-medium transition-all duration-150 select-none cursor-pointer
- ${(e(c)?e(v).active:e(v).inactive)??""}`),G(q,1,`h-1.5 w-1.5 rounded-full ${(e(c)?e(v).dot:"bg-[var(--text-tertiary)] opacity-40")??""}`),h(u,` ${b??""} `)},[()=>p()(`events.severity.${e(i)}`)]),U("click",m,()=>S(e(i))),g(a,m)});var K=d(D,4);de(K,17,()=>x,xe,(a,i)=>{const c=L(()=>r.sources.includes(e(i)));var v=$e(),m=l(v,!0);o(v),C(q=>{G(v,1,`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-xs font-medium transition-all duration-150 select-none cursor-pointer
- ${e(c)?"bg-[var(--surface-card)] text-[var(--text-primary)] ring-1 ring-[var(--border-primary)] shadow-[var(--shadow-sm)]":"bg-[var(--surface-card-hover)] text-[var(--text-tertiary)] line-through decoration-1"}`),h(m,q)},[()=>p()(`events.source.${e(i)}`)]),U("click",v,()=>j(e(i))),g(a,v)});var O=d(K,4);{var V=a=>{var i=et(),c=d(l(i));o(i),C(v=>h(c,` ${v??""}`),[()=>p()("events.filter.clear")]),U("click",i,function(...v){var m;(m=r.onclear)==null||m.apply(this,v)}),g(a,i)};A(O,a=>{e(X)>0&&a(V)})}o(k);var N=d(k,2),B=l(N);de(B,21,()=>W,xe,(a,i)=>{var c=tt(),v=l(c,!0);o(c),C(m=>{G(c,1,`rounded-md px-2.5 py-1 text-xs font-medium transition-all duration-150
- ${r.dateRange===e(i).value?"bg-[var(--surface-card)] text-[var(--text-primary)] shadow-[var(--shadow-sm)]":"text-[var(--text-tertiary)] hover:text-[var(--text-secondary)]"}`),h(v,m)},[()=>p()(e(i).labelKey)]),U("click",c,()=>r.ondaterangechange(e(i).value)),g(a,c)}),o(B);var E=d(B,2),Z=d(l(E),2);Ie(Z),o(E),o(N),o(J),C(a=>{je(Z,"placeholder",a),Fe(Z,r.searchText)},[()=>p()("events.filter.search")]),U("input",Z,a=>r.onsearchchange(a.target.value)),g(ae,J),ke(),oe()}_e(["click","input"]);var nt=y(' '),ot=y(' '),st=y(''),it=Be(' '),lt=y('
'),ct=y('
',1),dt=y('');function wt(ae,r){we(r,!0);const p=()=>Se(Me,"$t",ne),[ne,oe]=Ee();let w=_(re([])),x=_(re({info:0,warn:0,error:0,total:0})),W=_(!0),H=_(!1),X=_(!0),S=_(re(new Set)),j=_(re([])),J=_(!1),k=_(re(["info","warn","error"])),D=_(re(["deploy","container","proxy","system"])),K=_("all"),O=_("");const V=50;let N=_(0),B=null,E=_(void 0);function Z(t){if(t==="all")return;const n=Date.now(),Q={"1h":3600*1e3,"24h":1440*60*1e3,"7d":10080*60*1e3}[t];if(Q)return new Date(n-Q).toISOString()}async function a(t=!1){const n=t?e(N):0;t?s(H,!0):s(W,!0);try{const f=e(k).length<3?e(k).join(","):void 0,Q=e(D).length<4?e(D).join(","):void 0,ye=Z(e(K)),$=await Ae({severity:f,source:Q,since:ye,limit:V,offset:n});t?s(w,[...e(w),...$],!0):s(w,$,!0),s(X,$.length===V),s(N,(t?n:0)+$.length)}catch{}finally{s(W,!1),s(H,!1)}}async function i(){try{s(x,await Ge(),!0)}catch{}}function c(){a(!0)}function v(t){s(k,t,!0),a()}function m(t){s(D,t,!0),a()}function q(t){s(K,t,!0),a()}function u(t){s(O,t,!0)}function R(){s(k,["info","warn","error"],!0),s(D,["deploy","container","proxy","system"],!0),s(K,"all"),s(O,""),a()}const M=L(()=>e(O).trim()===""?e(w):e(w).filter(t=>t.message.toLowerCase().includes(e(O).toLowerCase())));function b(t){const n={id:t.id,source:t.source,severity:t.severity,message:t.message,metadata:t.metadata,created_at:t.created_at};s(x,{...e(x),[n.severity]:(e(x)[n.severity]??0)+1,total:e(x).total+1},!0),e(J)?s(j,[n,...e(j)],!0):(s(w,[n,...e(w)],!0),s(S,new Set([...e(S),n.id]),!0),setTimeout(()=>{s(S,new Set([...e(S)].filter(f=>f!==n.id)),!0)},3e3))}function T(){var n;s(w,[...e(j),...e(w)],!0);const t=new Set([...e(S),...e(j).map(f=>f.id)]);s(S,t,!0),s(j,[],!0),(n=e(E))==null||n.scrollTo({top:0,behavior:"smooth"}),setTimeout(()=>{s(S,new Set,!0)},3e3)}function P(){e(E)&&s(J,e(E).scrollTop>200)}Re(()=>{a(),i(),B=He({onEventLog(t){b(t)}})}),Ke(()=>{B==null||B.close(),B=null});var z=dt(),F=l(z),Y=l(F),ve=l(Y,!0);o(Y);var me=d(Y,2);{var be=t=>{var n=nt(),f=l(n);o(n),C(()=>h(f,`${e(x).total??""} total`)),g(t,n)};A(me,t=>{e(x).total>0&&t(be)})}o(F);var se=d(F,2);at(se,{get severities(){return e(k)},get sources(){return e(D)},get dateRange(){return e(K)},get searchText(){return e(O)},get stats(){return e(x)},onseveritieschange:v,onsourceschange:m,ondaterangechange:q,onsearchchange:u,onclear:R});var ue=d(se,2);{var ie=t=>{var n=ot(),f=l(n);o(n),C(Q=>h(f,`${e(j).length??""} ${Q??""}`),[()=>p()("events.newEvents")]),U("click",n,T),g(t,n)};A(ue,t=>{e(j).length>0&&t(ie)})}var fe=d(ue,2);{var le=t=>{var n=st();g(t,n)},he=t=>{{let n=L(()=>p()("events.noEvents")),f=L(()=>p()("events.noEventsDesc"));Je(t,{get title(){return e(n)},get description(){return e(f)},icon:"deploys"})}},ge=t=>{var n=ct(),f=pe(n);de(f,21,()=>e(M),I=>I.id,(I,ee)=>{{let te=L(()=>e(S).has(e(ee).id));We(I,{get entry(){return e(ee)},get isNew(){return e(te)}})}}),o(f),ze(f,I=>s(E,I),()=>e(E));var Q=d(f,2);{var ye=I=>{var ee=lt(),te=l(ee),Ce=l(te);{var De=ce=>{var Le=it();g(ce,Le)};A(Ce,ce=>{e(H)&&ce(De)})}var Te=d(Ce);o(te),o(ee),C(ce=>{te.disabled=e(H),h(Te,` ${ce??""}`)},[()=>p()("events.loadMore")]),U("click",te,c),g(I,ee)},$=L(()=>e(X)&&e(O).trim()==="");A(Q,I=>{e($)&&I(ye)})}Oe("scroll",f,P),g(t,n)};A(fe,t=>{e(W)?t(le):e(M).length===0?t(he,1):t(ge,-1)})}o(z),C(t=>h(ve,t),[()=>p()("events.title")]),g(ae,z),ke(),oe()}_e(["click"]);export{wt as component,_t as universal};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/7.DneEC9SR.js b/web/.svelte-kit/output/client/_app/immutable/nodes/7.DneEC9SR.js
deleted file mode 100644
index 693f007..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/7.DneEC9SR.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as cr,e as ur,c as pr,a as p,s as i,b as C,t as mr}from"../chunks/BJdXET8u.js";import{o as fr}from"../chunks/phMGo29-.js";import{p as gr,i as xr,t as m,g as l,e as br,s as o,a as f,c as e,r as t,d,h as hr}from"../chunks/DKemW7Dm.js";import{i as N,a as A,s as yr}from"../chunks/BSXRhUWv.js";import{t as _r,r as G}from"../chunks/kfynmD3Z.js";import{b as H}from"../chunks/DgtbvmBB.js";import{g as B}from"../chunks/CWhLh9u1.js";import{p as wr}from"../chunks/DELaSNrV.js";import{a as kr,r as $r}from"../chunks/CcoMVVg8.js";import{I as Mr}from"../chunks/BFW91e3Y.js";import{s as K,i as Tr}from"../chunks/DTyrBG6r.js";var jr=C('
'),Ir=C(" ",1),Lr=C('');function Fr(Q,R){gr(R,!0);const U=()=>A($r,"$resolvedTheme",g),W=()=>A(wr,"$page",g),s=()=>A(_r,"$t",g),[g,X]=yr();let x=f(""),b=f(""),v=f(""),c=f(!1);xr(()=>{kr(U())}),fr(async()=>{const r=W().url.searchParams.get("token");if(r){try{if((await fetch("/api/auth/me",{headers:{Authorization:`Bearer ${r}`}})).ok){K(r),history.replaceState(null,"","/login"),B("/");return}}catch{}history.replaceState(null,"","/login")}Tr()&&B("/")});async function Y(){d(v,""),d(c,!0);try{const a=await(await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:l(x),password:l(b)})})).json();if(!a.success){d(v,a.error??s()("login.loginFailed"),!0);return}K(a.data.token),B("/")}catch(r){d(v,r instanceof Error?r.message:s()("login.networkError"),!0)}finally{d(c,!1)}}function Z(){window.location.href="/api/auth/oidc/login"}var h=Lr(),O=e(h),q=e(O),y=e(q),_=o(e(y),2),rr=e(_,!0);t(_);var z=o(_,2),er=e(z,!0);t(z),t(y);var D=o(y,2);{var tr=r=>{var a=jr(),n=e(a,!0);t(a),m(()=>i(n,l(v))),p(r,a)};N(D,r=>{l(v)&&r(tr)})}var u=o(D,2),w=e(u),k=e(w),ar=e(k,!0);t(k);var E=o(k,2);G(E),t(w);var $=o(w,2),M=e($),or=e(M,!0);t(M);var P=o(M,2);G(P),t($);var T=o($,2),sr=e(T);{var ir=r=>{var a=Ir(),n=hr(a);Mr(n,{size:16});var L=o(n);m(S=>i(L,` ${S??""}`),[()=>s()("login.signingIn")]),p(r,a)},nr=r=>{var a=mr();m(n=>i(a,n),[()=>s()("login.signIn")]),p(r,a)};N(sr,r=>{l(c)?r(ir):r(nr,-1)})}t(T),t(u);var V=o(u,2),j=e(V),F=o(e(j),2),J=e(F),lr=e(J,!0);t(J),t(F),t(j);var I=o(j,2),dr=e(I,!0);t(I),t(V),t(q),t(O),t(h),m((r,a,n,L,S,vr)=>{i(rr,r),i(er,a),i(ar,n),i(or,L),T.disabled=l(c),i(lr,S),i(dr,vr)},[()=>s()("login.title"),()=>s()("login.subtitle"),()=>s()("login.username"),()=>s()("login.password"),()=>s()("login.or"),()=>s()("login.ssoButton")]),ur("submit",u,r=>{r.preventDefault(),Y()}),H(E,()=>l(x),r=>d(x,r)),H(P,()=>l(b),r=>d(b,r)),pr("click",I,Z),p(Q,h),br(),X()}cr(["click"]);export{Fr as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/8.BQus6eSQ.js b/web/.svelte-kit/output/client/_app/immutable/nodes/8.BQus6eSQ.js
deleted file mode 100644
index fc1fc92..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/8.BQus6eSQ.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as S,b as A,d as Te,c as Y,s as n}from"../chunks/BJdXET8u.js";import{c as r,r as t,s as l,p as He,a as m,b as he,i as Je,t as C,e as Be,d as s,f as Xe,g as e,$ as Ge,F as Ke,u as j}from"../chunks/DKemW7Dm.js";import{p as be,i as K,s as Me,a as Qe}from"../chunks/BSXRhUWv.js";import{e as te,i as ue}from"../chunks/CZnXUJhL.js";import{h as Ue}from"../chunks/ecfdBtDb.js";import{a as Ve,t as We,s as Z}from"../chunks/kfynmD3Z.js";import{o as Ye,l as Ze,a as et,p as tt}from"../chunks/Bpb8V1MF.js";import{I as rt}from"../chunks/C6FeVxU4.js";import{I as at}from"../chunks/BvIWRct8.js";import{I as st}from"../chunks/BFW91e3Y.js";import{F as ee}from"../chunks/DfwQ65vN.js";import{S as ye}from"../chunks/BE_zO38m.js";import{E as ot}from"../chunks/CexodXHl.js";import{E as it}from"../chunks/BxXVdbgr.js";var dt=A('
'),lt=A('');function ct(re,M){const o=be(M,"rows",3,5),Q=be(M,"cols",3,4);var D=lt(),k=r(D),N=r(k);te(N,21,()=>Array(Q()),ue,(f,_,u)=>{ye(f,{width:u===0?"6rem":"5rem",height:"0.75rem"})}),t(N),t(k);var q=l(k,2);te(q,17,()=>Array(o()),ue,(f,_)=>{var u=dt();te(u,21,()=>Array(Q()),ue,(O,T,z,H)=>{ye(O,{width:z===0?"40%":"20%",height:"0.875rem"})}),t(u),S(f,u)}),t(D),S(re,D)}var nt=A(''),vt=A(''),pt=A(''),mt=A(' '),ut=A(''),ft=A('');function Et(re,M){He(M,!0);const o=()=>Qe(We,"$t",Q),[Q,D]=Me();let k=m(he([])),N=m(!0),q=m(""),f=m(!1),_=m(""),u=m(""),O=m(""),T=m("3000"),z=m(""),H=m(!1),J=m(""),B=m(!1),U=m(he([])),ae=m(!1);async function _e(){if(s(B,!0),!(e(U).length>0)){s(ae,!0);try{const a=await Ze(),i=new Set(e(k).map(p=>p.image.toLowerCase())),v=[];for(const p of a)if(p.owner)try{const x=await et(p.id);for(const g of x){const h=i.has(g.full_ref.toLowerCase());v.push({value:JSON.stringify({full_ref:g.full_ref,registryName:p.name}),label:g.full_ref,description:h?void 0:p.name,group:p.name,disabled:h,disabledHint:h?"Already added":void 0})}}catch{}s(U,v,!0)}catch{s(U,[],!0)}finally{s(ae,!1)}}}function we(a){const i=a.split("/");return i[i.length-1].toLowerCase().replace(/[^a-z0-9-]/g,"-")}function je(a){const i=JSON.parse(a);s(u,i.full_ref,!0),s(O,i.registryName,!0),e(_).trim()||s(_,we(i.full_ref),!0),s(B,!1)}async function se(){s(N,!0),s(q,"");try{s(k,await Ye(),!0)}catch(a){s(q,a instanceof Error?a.message:o()("projects.loadFailed"),!0)}finally{s(N,!1)}}async function ke(){if(!e(_).trim()||!e(u).trim()){s(J,o()("projects.nameRequired"),!0);return}s(H,!0),s(J,"");try{await tt({name:e(_).trim(),image:e(u).trim(),registry:e(O).trim(),port:parseInt(e(T),10)||3e3,healthcheck:e(z).trim()}),s(_,""),s(u,""),s(O,""),s(T,"3000"),s(z,""),s(f,!1),await se()}catch(a){s(J,a instanceof Error?a.message:o()("projects.createFailed"),!0)}finally{s(H,!1)}}Je(()=>{se()});var oe=ft();Ue("rqn88j",a=>{Xe((i,v)=>{Ge.title=`${i??""} - ${v??""}`},[()=>o()("projects.title"),()=>o()("app.name")])});var ie=r(oe),de=r(ie),$e=r(de,!0);t(de);var V=l(de,2),fe=r(V);{var Pe=a=>{rt(a,{size:16})};K(fe,a=>{e(f)||a(Pe)})}var Ie=l(fe);t(V),t(ie);var xe=l(ie,2);{var Se=a=>{var i=vt(),v=r(i),p=r(v,!0);t(v);var x=l(v,2);{var g=d=>{var c=nt(),I=r(c),L=r(I,!0);t(I),t(c),C(()=>n(L,e(J))),S(d,c)};K(x,d=>{e(J)&&d(g)})}var h=l(x,2),R=r(h);{let d=j(()=>o()("projects.name"));ee(R,{get label(){return`${e(d)??""} *`},name:"name",placeholder:"my-web-app",required:!0,get value(){return e(_)},set value(c){s(_,c,!0)}})}var X=l(R,2),E=r(X),le=r(E);{let d=j(()=>o()("projects.image"));ee(le,{get label(){return`${e(d)??""} *`},name:"image",placeholder:"registry.example.com/org/app",required:!0,get value(){return e(u)},set value(c){s(u,c,!0)}})}t(E);var w=l(E,2),ce=r(w);{var W=d=>{st(d,{size:16})},ne=d=>{at(d,{size:16})};K(ce,d=>{e(ae)?d(W):d(ne,-1)})}t(w),t(X);var G=l(X,2);{let d=j(()=>o()("projects.selectImage")),c=j(()=>o()("entityPicker.search"));it(G,{get items(){return e(U)},get current(){return e(u)},get title(){return e(d)},get placeholder(){return e(c)},onselect:je,onclose:()=>{s(B,!1)},get open(){return e(B)},set open(I){s(B,I,!0)}})}var $=l(G,2);{let d=j(()=>o()("projects.port"));ee($,{get label(){return e(d)},name:"port",type:"number",helpText:"Auto-detected from EXPOSE if empty",get value(){return e(T)},set value(c){s(T,c,!0)}})}var b=l($,2);{let d=j(()=>o()("projects.healthcheck"));ee(b,{get label(){return e(d)},name:"healthcheck",placeholder:"/api/health",helpText:"Auto-detected from image if empty",get value(){return e(z)},set value(c){s(z,c,!0)}})}t(h);var P=l(h,2),y=r(P),F=r(y,!0);t(y),t(P),t(i),C((d,c,I,L)=>{n(p,d),Z(w,"title",c),Z(w,"aria-label",I),y.disabled=e(H),n(F,L)},[()=>o()("projects.newProject"),()=>o()("projects.browseImages"),()=>o()("projects.browseImages"),()=>e(H)?o()("projects.creating"):o()("projects.createProject")]),Y("click",w,_e),Y("click",y,ke),S(a,i)};K(xe,a=>{e(f)&&a(Se)})}var Ae=l(xe,2);{var Ee=a=>{ct(a,{rows:4,cols:5})},Fe=a=>{var i=pt(),v=r(i),p=r(v,!0);t(v);var x=l(v,2),g=r(x,!0);t(x),t(i),C(h=>{n(p,e(q)),n(g,h)},[()=>o()("common.retry")]),Y("click",x,se),S(a,i)},Le=a=>{{let i=j(()=>o()("empty.noProjects")),v=j(()=>o()("empty.noProjectsDesc")),p=j(()=>o()("projects.addProject"));ot(a,{get title(){return e(i)},get description(){return e(v)},get actionLabel(){return e(p)},onaction:()=>{s(f,!0)},icon:"projects"})}},Ne=a=>{var i=ut(),v=r(i),p=r(v),x=r(p),g=r(x),h=r(g,!0);t(g);var R=l(g),X=r(R,!0);t(R);var E=l(R),le=r(E,!0);t(E);var w=l(E),ce=r(w,!0);t(w);var W=l(w),ne=r(W,!0);t(W),Ke(),t(x),t(p);var G=l(p);te(G,21,()=>e(k),$=>$.id,($,b)=>{var P=mt(),y=r(P),F=r(y),d=r(F,!0);t(F),t(y);var c=l(y),I=r(c,!0);t(c);var L=l(c),qe=r(L,!0);t(L);var ve=l(L),ze=r(ve,!0);t(ve);var pe=l(ve),Re=r(pe,!0);t(pe);var ge=l(pe),me=r(ge),Ce=r(me,!0);t(me),t(ge),t(P),C((De,Oe)=>{Z(F,"href",`/projects/${e(b).id??""}`),n(d,e(b).name),n(I,e(b).image),n(qe,e(b).port||"-"),n(ze,e(b).registry||"-"),n(Re,De),Z(me,"href",`/projects/${e(b).id??""}`),n(Ce,Oe)},[()=>new Date(e(b).created_at).toLocaleDateString(),()=>o()("projects.view")]),S($,P)}),t(G),t(v),t(i),C(($,b,P,y,F)=>{n(h,$),n(X,b),n(le,P),n(ce,y),n(ne,F)},[()=>o()("projects.name"),()=>o()("projects.image"),()=>o()("projects.port"),()=>o()("projects.registry"),()=>o()("projects.created")]),S(a,i)};K(Ae,a=>{e(N)?a(Ee):e(q)?a(Fe,1):e(k).length===0?a(Le,2):a(Ne,-1)})}t(oe),C((a,i)=>{n($e,a),Ve(V,1,`inline-flex items-center gap-2 rounded-lg ${e(f)?"border border-[var(--border-primary)] bg-[var(--surface-card)] text-[var(--text-secondary)] hover:bg-[var(--surface-card-hover)]":"bg-[var(--color-brand-600)] text-white shadow-sm hover:bg-[var(--color-brand-700)]"} px-4 py-2.5 text-sm font-medium transition-all duration-150 active:animate-press`),n(Ie,` ${i??""}`)},[()=>o()("projects.title"),()=>e(f)?o()("projects.cancel"):o()("projects.addProject")]),Y("click",V,()=>{s(f,!e(f))}),S(re,oe),Be(),D()}Te(["click"]);export{Et as component};
diff --git a/web/.svelte-kit/output/client/_app/immutable/nodes/9.g1C7u4k3.js b/web/.svelte-kit/output/client/_app/immutable/nodes/9.g1C7u4k3.js
deleted file mode 100644
index 37785b9..0000000
--- a/web/.svelte-kit/output/client/_app/immutable/nodes/9.g1C7u4k3.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as v,f as ve,g as Ke,s as o,b as d,d as Xe,c as Z}from"../chunks/BJdXET8u.js";import{t as x,p as Ce,i as Oe,d as s,h as qt,g as t,e as Me,a as p,c as r,r as e,s as a,u as J,b as ie,f as Sr,$ as zr}from"../chunks/DKemW7Dm.js";import{p as Et,i as F,s as Te,a as le}from"../chunks/BSXRhUWv.js";import{e as Zt,i as Ue}from"../chunks/CZnXUJhL.js";import{h as Pr}from"../chunks/ecfdBtDb.js";import{s as B,a as Ft,c as de,t as Ee,r as Cr}from"../chunks/kfynmD3Z.js";import{b as Mr}from"../chunks/DgtbvmBB.js";import{b as Tr}from"../chunks/Bxa5VUw6.js";import{p as Er}from"../chunks/DELaSNrV.js";import{O as Fr,P as Ar,Q as Br,R as Lr,S as Nr,g as Hr,N as Rr,T as Vr,U as Ur,V as qr,W as Gr,X as Kr,Y as Xr,Z as Or}from"../chunks/Bpb8V1MF.js";import{S as Qe}from"../chunks/BPqRr2-s.js";import{s as qe,S as ne}from"../chunks/BE_zO38m.js";import{C as We}from"../chunks/C8zo5-Sk.js";import{I as Pe}from"../chunks/scnZuc49.js";import{I as Qr}from"../chunks/BphdEXYy.js";import{E as Wr}from"../chunks/CexodXHl.js";import{I as Yr}from"../chunks/Hsiz6fBZ.js";import{I as Zr}from"../chunks/C6FeVxU4.js";import{I as Jr}from"../chunks/LFhQE6G2.js";import{I as $r}from"../chunks/R0-LJft-.js";import{I as ta}from"../chunks/Icw0y4KW.js";import{I as ea}from"../chunks/DqoiTw6k.js";import{I as ra}from"../chunks/BFW91e3Y.js";import{I as aa}from"../chunks/DVE7XZFM.js";import{I as sa}from"../chunks/CPatcLwq.js";import{F as Rt}from"../chunks/DfwQ65vN.js";import{T as Ge}from"../chunks/BberSjRt.js";import{t as Ut}from"../chunks/CjZL2MYp.js";var oa=ve(' ');function ia(st,n){const y=Et(n,"size",3,20),i=Et(n,"class",3,"");var h=oa();x(()=>{B(h,"width",y()),B(h,"height",y()),Ft(h,0,de(i()))}),v(st,h)}var na=ve(' ');function la(st,n){const y=Et(n,"size",3,20),i=Et(n,"class",3,"");var h=na();x(()=>{B(h,"width",y()),B(h,"height",y()),Ft(h,0,de(i()))}),v(st,h)}var va=ve(' ');function da(st,n){const y=Et(n,"size",3,20),i=Et(n,"class",3,"");var h=va();x(()=>{B(h,"width",y()),B(h,"height",y()),Ft(h,0,de(i()))}),v(st,h)}var ca=ve(' ');function ua(st,n){const y=Et(n,"size",3,20),i=Et(n,"class",3,"");var h=ca();x(()=>{B(h,"width",y()),B(h,"height",y()),Ft(h,0,de(i()))}),v(st,h)}var ma=d(''),pa=d('
');function xa(st,n){Ce(n,!0);const y=()=>le(Ee,"$t",i),[i,h]=Te();let D=p(null),g=p(!1);Oe(()=>{let j=!1;async function k(){try{const T=await Fr(n.projectId,n.stageId,n.instanceId);j||(s(D,T,!0),s(g,!1))}catch{j||s(g,!0)}}k();const M=setInterval(k,1e4);return()=>{j=!0,clearInterval(M)}});function S(j){if(j<1024)return`${j} B`;const k=j/1024;if(k<1024)return`${k.toFixed(0)} KB`;const M=k/1024;return M<1024?`${M.toFixed(1)} MB`:`${(M/1024).toFixed(2)} GB`}const At=J(()=>()=>t(D)?t(D).cpu_percent>80?"bg-red-500":t(D).cpu_percent>50?"bg-amber-500":"bg-emerald-500":"bg-gray-300"),It=J(()=>()=>t(D)?t(D).memory_percent>80?"bg-red-500":t(D).memory_percent>50?"bg-amber-500":"bg-blue-500":"bg-gray-300");var ht=Ke(),ct=qt(ht);{var ut=j=>{var k=ma(),M=r(k),T=r(M),mt=r(T,!0);e(T);var gt=a(T,2),_t=r(gt);e(gt);var yt=a(gt,2),wt=r(yt);e(yt),e(M);var pt=a(M,2),Bt=r(pt),jt=r(Bt,!0);e(Bt);var lt=a(Bt,2),vt=r(lt);e(lt);var bt=a(lt,2),Dt=r(bt);e(bt),e(pt),e(k),x((St,kt,Gt,Vt,Lt,zt,q,xt,c)=>{o(mt,St),Ft(_t,1,`absolute inset-y-0 left-0 rounded-full transition-all duration-500 ${kt??""}`),qe(_t,`width: ${Gt??""}%`),o(wt,`${Vt??""}%`),o(jt,Lt),Ft(vt,1,`absolute inset-y-0 left-0 rounded-full transition-all duration-500 ${zt??""}`),qe(vt,`width: ${q??""}%`),o(Dt,`${xt??""} / ${c??""}`)},[()=>y()("stats.cpu"),()=>t(At)(),()=>Math.min(t(D).cpu_percent,100),()=>t(D).cpu_percent.toFixed(1),()=>y()("stats.mem"),()=>t(It)(),()=>Math.min(t(D).memory_percent,100),()=>S(t(D).memory_usage),()=>S(t(D).memory_limit)]),v(j,k)},X=j=>{var k=pa(),M=r(k,!0);e(k),x(T=>o(M,T),[()=>y()("stats.unavailable")]),v(j,k)};F(ct,j=>{t(D)?j(ut):t(g)&&j(X,1)})}v(st,ht),Me(),h()}var fa=d(' '),ga=d(' ',1),_a=d(' '),ba=d('
'),ha=d(' ',1);function ya(st,n){Ce(n,!0);const y=()=>le(Ee,"$t",i),[i,h]=Te();let D=p(!1),g=p(""),S=p(null);const At=J(()=>n.instance.subdomain?`https://${n.instance.subdomain}`:""),It=J(()=>()=>{const c=new Date(n.instance.created_at),z=new Date().getTime()-c.getTime(),$=Math.floor(z/6e4);if($<60)return`${$}m ago`;const ot=Math.floor($/60);return ot<24?`${ot}h ago`:`${Math.floor(ot/24)}d ago`});async function ht(c){var _;s(D,!0),s(g,""),s(S,null);try{switch(c){case"stop":await Nr(n.projectId,n.instance.stage_id,n.instance.id);break;case"start":await Lr(n.projectId,n.instance.stage_id,n.instance.id);break;case"restart":await Br(n.projectId,n.instance.stage_id,n.instance.id);break;case"remove":await Ar(n.projectId,n.instance.stage_id,n.instance.id);break}(_=n.onchange)==null||_.call(n)}catch(z){s(g,z instanceof Error?z.message:y()("instance.actionFailed"),!0)}finally{s(D,!1)}}function ct(c){s(S,c,!0)}var ut=ha(),X=qt(ut),j=r(X),k=r(j),M=r(k),T=r(M),mt=r(T,!0);e(T);var gt=a(T,2);Qe(gt,{get status(){return n.instance.status},size:"sm"}),e(M);var _t=a(M,2);{var yt=c=>{var _=fa(),z=r(_),$=a(z);Qr($,{size:12}),e(_),x(()=>{B(_,"href",t(At)),o(z,`${n.instance.subdomain??""} `)}),v(c,_)};F(_t,c=>{t(At)&&c(yt)})}var wt=a(_t,2),pt=r(wt),Bt=r(pt);e(pt);var jt=a(pt,2),lt=r(jt,!0);e(jt),e(wt),e(k);var vt=a(k,2),bt=r(vt);{var Dt=c=>{var _=ga(),z=qt(_),$=r(z);la($,{size:16}),e(z);var ot=a(z,2),Jt=r(ot);da(Jt,{size:16}),e(ot),x((ce,ue)=>{B(z,"title",ce),z.disabled=t(D),B(ot,"title",ue),ot.disabled=t(D)},[()=>y()("common.stop"),()=>y()("common.restart")]),Z("click",z,()=>ct("stop")),Z("click",ot,()=>ct("restart")),v(c,_)},St=c=>{var _=_a(),z=r(_);ia(z,{size:16}),e(_),x($=>{B(_,"title",$),_.disabled=t(D)},[()=>y()("common.start")]),Z("click",_,()=>ht("start")),v(c,_)};F(bt,c=>{n.instance.status==="running"?c(Dt):n.instance.status==="stopped"&&c(St,1)})}var kt=a(bt,2),Gt=r(kt);Pe(Gt,{size:16}),e(kt),e(vt),e(j);var Vt=a(j,2);{var Lt=c=>{xa(c,{get projectId(){return n.projectId},get stageId(){return n.instance.stage_id},get instanceId(){return n.instance.id}})};F(Vt,c=>{n.instance.status==="running"&&c(Lt)})}var zt=a(Vt,2);{var q=c=>{var _=ba(),z=r(_,!0);e(_),x(()=>o(z,t(g))),v(c,_)};F(zt,c=>{t(g)&&c(q)})}e(X);var xt=a(X,2);{let c=J(()=>t(S)!==null),_=J(()=>t(S)?y()(`confirm.${t(S)}Instance`):""),z=J(()=>t(S)?y()(`instance.${t(S)}Confirm`):""),$=J(()=>t(S)?t(S).charAt(0).toUpperCase()+t(S).slice(1):""),ot=J(()=>t(S)==="remove"?"danger":"primary");We(xt,{get open(){return t(c)},get title(){return t(_)},get message(){return t(z)},get confirmLabel(){return t($)},get confirmVariant(){return t(ot)},onconfirm:()=>{t(S)&&ht(t(S))},oncancel:()=>{s(S,null)}})}x((c,_)=>{o(mt,n.instance.image_tag),o(Bt,`:${n.instance.port??""}`),o(lt,c),B(kt,"title",_),kt.disabled=t(D)},[()=>t(It)(),()=>y()("common.remove")]),Z("click",kt,()=>ct("remove")),v(st,ut),Me(),h()}Xe(["click"]);var wa=d(''),ja=d(''),ka=d('
',1),Ia=d(''),Da=d(''),Sa=d('
'),za=d(' '),Pa=d(' '),Ca=d('No Proxy '),Ma=d('
'),Ta=d(" "),Ea=d(' '),Fa=d(' '),Aa=d('
'),Ba=d(''),La=d('
'),Na=d('
'),Ha=d(''),Ra=d('
'),Va=d('
'),Ua=d(' '),qa=d(" "),Ga=d('
'),Ka=d(''),Xa=d('
'),Oa=d(' ',1);function ws(st,n){Ce(n,!0);const y=()=>le(Er,"$page",h),i=()=>le(Ee,"$t",h),[h,D]=Te();let g=p(null),S=p(ie([])),At=p(ie({})),It=p(ie([])),ht=p(!0),ct=p(""),ut=p(""),X=p(""),j=p(!1),k=p(""),M=p(ie([])),T=p(!1),mt=p(""),gt=p("*"),_t=p(!0),yt=p(!0),wt=p("1"),pt=p(!1);async function Bt(){if(t(mt).trim()){s(pt,!0);try{await Gr(t(q),{name:t(mt).trim(),tag_pattern:t(gt).trim()||"*",auto_deploy:t(_t),enable_proxy:t(yt),max_instances:parseInt(t(wt))||1}),Ut.success(`Stage "${t(mt)}" created`),s(mt,""),s(gt,"*"),s(_t,!0),s(yt,!0),s(wt,"1"),s(T,!1),await xt()}catch(u){Ut.error(u instanceof Error?u.message:"Failed to create stage")}finally{s(pt,!1)}}}let jt=p(!1),lt=p(""),vt=p(""),bt=p(""),Dt=p(""),St=p(!1);function kt(){t(g)&&(s(lt,t(g).name,!0),s(vt,t(g).image,!0),s(bt,String(t(g).port||""),!0),s(Dt,t(g).healthcheck||"",!0),s(jt,!0))}async function Gt(){if(!(!t(lt).trim()||!t(vt).trim())){s(St,!0);try{await qr(t(q),{name:t(lt).trim(),image:t(vt).trim(),port:parseInt(t(bt))||0,healthcheck:t(Dt).trim()}),Ut.success("Project updated"),s(jt,!1),await xt()}catch(u){Ut.error(u instanceof Error?u.message:"Failed to update project")}finally{s(St,!1)}}}async function Vt(u,P){try{await Xr(t(q),u),Ut.success(`Stage "${P}" deleted`),await xt()}catch(C){Ut.error(C instanceof Error?C.message:"Failed to delete stage")}}let Lt=p(!1),zt=p(!1);const q=J(()=>y().params.id);async function xt(){s(ht,!0),s(ct,"");try{const u=await Hr(t(q));s(g,u.project,!0),s(S,u.stages??[],!0);const P=await Promise.all(t(S).map(async V=>{try{const tt=await Rr(t(q),V.id);return{stageId:V.id,instances:tt}}catch{return{stageId:V.id,instances:[]}}})),C={};for(const V of P)C[V.stageId]=V.instances;s(At,C,!0);try{const V=await Vr(20);s(It,V.filter(tt=>tt.project_id===t(q)),!0)}catch{s(It,[],!0)}}catch(u){s(ct,u instanceof Error?u.message:i()("projectDetail.loadFailed"),!0)}finally{s(ht,!1)}}async function c(u){var P,C;if(s(ut,u,!0),s(X,""),s(M,[],!0),!(!((P=t(g))!=null&&P.registry)||!((C=t(g))!=null&&C.image))){s(Lt,!0);try{s(M,await Kr(t(g).registry,t(g).image),!0)}catch{s(M,[],!0)}finally{s(Lt,!1)}}}async function _(){if(!(!t(X).trim()||!t(ut))){s(j,!0),s(k,"");try{await Or(t(q),t(ut),t(X).trim()),s(X,""),s(ut,""),await xt()}catch(u){s(k,u instanceof Error?u.message:i()("projectDetail.deployFailed"),!0)}finally{s(j,!1)}}}async function z(){s(zt,!1);try{await Ur(t(q)),window.location.href="/projects"}catch(u){s(ct,u instanceof Error?u.message:i()("projectDetail.deleteFailed"),!0)}}Oe(()=>{t(q),xt()});var $=Ke();Pr("ffmenf",u=>{Sr((P,C)=>{zr.title=`${P??""} - ${C??""}`},[()=>{var P;return((P=t(g))==null?void 0:P.name)??i()("common.project")},()=>i()("app.name")])});var ot=qt($);{var Jt=u=>{var P=wa(),C=r(P),V=r(C),tt=r(V);ne(tt,{width:"4rem",height:"0.875rem"});var Pt=a(tt,2);ne(Pt,{width:"12rem",height:"1.75rem"});var Nt=a(Pt,2);ne(Nt,{width:"16rem",height:"0.875rem"}),e(V),e(C);var $t=a(C,2);Zt($t,20,()=>Array(4),Ue,(me,te)=>{ne(me,{height:"3rem"})}),e($t),e(P),v(u,P)},ce=u=>{var P=ja(),C=r(P),V=r(C,!0);e(C);var tt=a(C,2),Pt=r(tt,!0);e(tt),e(P),x(Nt=>{o(V,t(ct)),o(Pt,Nt)},[()=>i()("common.retry")]),Z("click",tt,xt),v(u,P)},ue=u=>{var P=Oa(),C=qt(P),V=r(C),tt=r(V),Pt=r(tt),Nt=r(Pt),$t=r(Nt,!0);e(Nt);var me=a(Nt,2);ta(me,{size:14}),e(Pt);var te=a(Pt,2),Ye=r(te,!0);e(te);var Fe=a(te,2),Ze=r(Fe,!0);e(Fe),e(tt);var pe=a(tt,2),Ae=r(pe);Pe(Ae,{size:16});var Je=a(Ae);e(pe),e(V);var xe=a(V,2),ee=r(xe),Be=r(ee);ea(Be,{size:16});var $e=a(Be);e(ee);var fe=a(ee,2),Le=r(fe);ua(Le,{size:16});var tr=a(Le);e(fe),e(xe);var ge=a(xe,2),er=r(ge);{var rr=m=>{var f=ka(),b=qt(f),l=r(b);Rt(l,{label:"Name *",name:"editName",get value(){return t(lt)},set value(A){s(lt,A,!0)}});var L=a(l,2);Rt(L,{label:"Image *",name:"editImage",get value(){return t(vt)},set value(A){s(vt,A,!0)}});var U=a(L,2);Rt(U,{label:"Port",name:"editPort",type:"number",get value(){return t(bt)},set value(A){s(bt,A,!0)}});var G=a(U,2);Rt(G,{label:"Healthcheck Path",name:"editHealthcheck",placeholder:"/api/health",get value(){return t(Dt)},set value(A){s(Dt,A,!0)}}),e(b);var et=a(b,2),R=r(et),O=r(R);$r(O,{size:14});var dt=a(O);e(R);var it=a(R,2),rt=r(it);Jr(rt,{size:14});var Q=a(rt);e(it),e(et),x((A,N,Ct)=>{o(dt,` ${A??""}`),it.disabled=N,o(Q,` ${Ct??""}`)},[()=>i()("projects.cancel"),()=>t(St)||!t(lt).trim()||!t(vt).trim(),()=>t(St)?"Saving...":i()("common.save")]),Z("click",R,()=>{s(jt,!1)}),Z("click",it,Gt),v(m,f)},ar=m=>{var f=Ia(),b=r(f),l=r(b),L=r(l),U=r(L,!0);e(L);var G=a(L,2),et=r(G,!0);e(G),e(l);var R=a(l,2),O=r(R),dt=r(O,!0);e(O);var it=a(O,2),rt=r(it,!0);e(it),e(R);var Q=a(R,2),A=r(Q),N=r(A,!0);e(A);var Ct=a(A,2),Kt=r(Ct,!0);e(Ct),e(Q);var Ht=a(Q,2),H=r(Ht),W=r(H,!0);e(H);var at=a(H,2),Mt=r(at,!0);e(at),e(Ht),e(b);var Tt=a(b,2),Xt=r(Tt);sa(Xt,{size:16}),e(Tt),e(f),x((we,ae,je,se,ke,Ie)=>{o(U,we),o(et,t(g).port||"Auto"),o(dt,ae),o(rt,t(g).healthcheck||"Auto"),o(N,je),o(Kt,t(g).registry||"-"),o(W,se),o(Mt,ke),B(Tt,"title",Ie)},[()=>i()("projects.port"),()=>i()("projects.healthcheck"),()=>i()("projects.registry"),()=>i()("projects.created"),()=>new Date(t(g).created_at).toLocaleDateString(),()=>i()("common.edit")]),Z("click",Tt,kt),v(m,f)};F(er,m=>{t(jt)?m(rr):m(ar,-1)})}e(ge);var _e=a(ge,2),be=r(_e),he=r(be),sr=r(he,!0);e(he);var re=a(he,2),Ne=r(re);{var or=m=>{Zr(m,{size:14})};F(Ne,m=>{t(T)||m(or)})}var ir=a(Ne);e(re),e(be);var He=a(be,2);{var nr=m=>{var f=Da(),b=r(f),l=r(b);Rt(l,{label:"Name *",name:"stageName",placeholder:"dev",get value(){return t(mt)},set value(N){s(mt,N,!0)}});var L=a(l,2);Rt(L,{label:"Tag Pattern",name:"stagePattern",placeholder:"dev-*",helpText:"Glob pattern (e.g., dev-*, v*)",get value(){return t(gt)},set value(N){s(gt,N,!0)}});var U=a(L,2);Rt(U,{label:"Max Instances",name:"stageMax",type:"number",get value(){return t(wt)},set value(N){s(wt,N,!0)}});var G=a(U,2),et=a(r(G),2),R=r(et);Ge(R,{label:"Auto Deploy",get checked(){return t(_t)},set checked(N){s(_t,N,!0)}}),e(et),e(G);var O=a(G,2),dt=a(r(O),2),it=r(dt);Ge(it,{label:"NPM Proxy",get checked(){return t(yt)},set checked(N){s(yt,N,!0)}}),e(dt),e(O),e(b);var rt=a(b,2),Q=r(rt),A=r(Q,!0);e(Q),e(rt),e(f),x(N=>{Q.disabled=N,o(A,t(pt)?"Creating...":"Create Stage")},[()=>t(pt)||!t(mt).trim()]),Z("click",Q,Bt),v(m,f)};F(He,m=>{t(T)&&m(nr)})}var lr=a(He,2);{var vr=m=>{var f=Sa(),b=r(f);{let l=J(()=>i()("projectDetail.noStages"));Wr(b,{get title(){return t(l)},icon:"instances"})}e(f),v(m,f)},dr=m=>{var f=Ra();Zt(f,21,()=>t(S),b=>b.id,(b,l)=>{const L=J(()=>t(At)[t(l).id]??[]);var U=Ha(),G=r(U),et=r(G),R=r(et),O=r(R,!0);e(R);var dt=a(R,2),it=r(dt,!0);e(dt);var rt=a(dt,2);{var Q=w=>{var I=za(),nt=r(I,!0);e(I),x(ft=>o(nt,ft),[()=>i()("projectDetail.autoDeploy")]),v(w,I)};F(rt,w=>{t(l).auto_deploy&&w(Q)})}var A=a(rt,2);{var N=w=>{var I=Pa(),nt=r(I,!0);e(I),x(ft=>o(nt,ft),[()=>i()("projectDetail.requiresConfirm")]),v(w,I)};F(A,w=>{t(l).confirm&&w(N)})}var Ct=a(A,2);{var Kt=w=>{var I=Ca();v(w,I)};F(Ct,w=>{t(l).enable_proxy||w(Kt)})}e(et);var Ht=a(et,2),H=r(Ht),W=r(H);e(H);var at=a(H,2),Mt=r(at);Yr(Mt,{size:14});var Tt=a(Mt);e(at);var Xt=a(at,2),we=r(Xt);Pe(we,{size:14}),e(Xt),e(Ht),e(G);var ae=a(G,2);{var je=w=>{var I=Ba(),nt=r(I),ft=r(nt),oe=r(ft),gr=r(oe,!0);e(oe);var _r=a(oe,2);{var br=Y=>{var E=Ma(),K=r(E);ra(K,{size:16});var Qt=a(K);e(E),x(Se=>o(Qt,` ${Se??""}`),[()=>i()("projectDetail.loadingTags")]),v(Y,E)},hr=Y=>{var E=Ea(),K=r(E),Qt=r(K,!0);e(K),K.value=K.__value="";var Se=a(K);Zt(Se,17,()=>t(M),Ue,(Wt,ze)=>{var Yt=Ta(),Dr=r(Yt,!0);e(Yt);var Ve={};x(()=>{o(Dr,t(ze)),Ve!==(Ve=t(ze))&&(Yt.value=(Yt.__value=t(ze))??"")}),v(Wt,Yt)}),e(E),x(Wt=>{B(E,"id",`deploy-tag-${t(l).id??""}`),o(Qt,Wt)},[()=>i()("projectDetail.chooseTag")]),Tr(E,()=>t(X),Wt=>s(X,Wt)),v(Y,E)},yr=Y=>{var E=Fa();Cr(E),x(K=>{B(E,"id",`deploy-tag-${t(l).id??""}`),B(E,"placeholder",K)},[()=>i()("projectDetail.enterTag")]),Mr(E,()=>t(X),K=>s(X,K)),v(Y,E)};F(_r,Y=>{t(Lt)?Y(br):t(M).length>0?Y(hr,1):Y(yr,-1)})}e(ft);var Ot=a(ft,2),wr=r(Ot,!0);e(Ot);var De=a(Ot,2),jr=r(De,!0);e(De),e(nt);var kr=a(nt,2);{var Ir=Y=>{var E=Aa(),K=r(E,!0);e(E),x(()=>o(K,t(k))),v(Y,E)};F(kr,Y=>{t(k)&&Y(Ir)})}e(I),x((Y,E,K,Qt)=>{B(oe,"for",`deploy-tag-${t(l).id??""}`),o(gr,Y),Ot.disabled=E,o(wr,K),o(jr,Qt)},[()=>i()("projectDetail.selectTag"),()=>!t(X).trim()||t(j),()=>t(j)?i()("projectDetail.deploying"):i()("projectDetail.deploy"),()=>i()("common.cancel")]),Z("click",Ot,_),Z("click",De,()=>{s(ut,"")}),v(w,I)};F(ae,w=>{t(ut)===t(l).id&&w(je)})}var se=a(ae,2),ke=r(se);{var Ie=w=>{var I=La(),nt=r(I,!0);e(I),x(ft=>o(nt,ft),[()=>i()("projectDetail.noInstancesRunning")]),v(w,I)},fr=w=>{var I=Na();Zt(I,21,()=>t(L),nt=>nt.id,(nt,ft)=>{ya(nt,{get instance(){return t(ft)},get projectId(){return t(q)},onchange:xt})}),e(I),v(w,I)};F(ke,w=>{t(L).length===0?w(Ie):w(fr,-1)})}e(se),e(U),x((w,I)=>{o(O,t(l).name),o(it,t(l).tag_pattern),o(W,`${t(L).length??""} / ${t(l).max_instances??""} ${w??""}`),o(Tt,` ${I??""}`)},[()=>i()("projectDetail.instances"),()=>i()("projectDetail.deployNewVersion")]),Z("click",at,()=>c(t(l).id)),Z("click",Xt,()=>{confirm(`Delete stage "${t(l).name}"?`)&&Vt(t(l).id,t(l).name)}),v(b,U)}),e(f),v(m,f)};F(lr,m=>{t(S).length===0&&!t(T)?m(vr):m(dr,-1)})}e(_e);var Re=a(_e,2),ye=r(Re),cr=r(ye,!0);e(ye);var ur=a(ye,2);{var mr=m=>{var f=Va(),b=r(f,!0);e(f),x(l=>o(b,l),[()=>i()("projectDetail.noDeployHistory")]),v(m,f)},pr=m=>{var f=Xa();Zt(f,21,()=>t(It),b=>b.id,(b,l)=>{var L=Ka(),U=r(L),G=r(U);e(U);var et=a(U,2),R=r(et),O=r(R),dt=r(O,!0);e(O);var it=a(O,2);Qe(it,{get status(){return t(l).status},size:"sm"}),e(R);var rt=a(R,2),Q=r(rt);{var A=H=>{var W=Ua(),at=r(W);aa(at,{size:12});var Mt=a(at);e(W),x(Tt=>o(Mt,` ${Tt??""}`),[()=>new Date(t(l).started_at).toLocaleString()]),v(H,W)};F(Q,H=>{t(l).started_at&&H(A)})}var N=a(Q,2);{var Ct=H=>{var W=qa(),at=r(W);e(W),x(Mt=>o(at,`→ ${Mt??""}`),[()=>new Date(t(l).finished_at).toLocaleString()]),v(H,W)};F(N,H=>{t(l).finished_at&&H(Ct)})}e(rt);var Kt=a(rt,2);{var Ht=H=>{var W=Ga(),at=r(W,!0);e(W),x(()=>o(at,t(l).error)),v(H,W)};F(Kt,H=>{t(l).error&&H(Ht)})}e(et),e(L),x(()=>{Ft(G,1,`h-3 w-3 rounded-full ${t(l).status==="success"?"bg-emerald-500":t(l).status==="failed"?"bg-red-500":"bg-blue-500"}`),o(dt,t(l).image_tag)}),v(b,L)}),e(f),v(m,f)};F(ur,m=>{t(It).length===0?m(mr):m(pr,-1)})}e(Re),e(C);var xr=a(C,2);{let m=J(()=>i()("projectDetail.deleteConfirmTitle")),f=J(()=>i()("projectDetail.deleteConfirmMessage",{name:t(g).name})),b=J(()=>i()("common.delete"));We(xr,{get open(){return t(zt)},get title(){return t(m)},get message(){return t(f)},get confirmLabel(){return t(b)},confirmVariant:"danger",onconfirm:z,oncancel:()=>{s(zt,!1)}})}x((m,f,b,l,L,U,G)=>{o($t,m),o(Ye,t(g).name),o(Ze,t(g).image),o(Je,` ${f??""}`),B(ee,"href",`/projects/${t(q)??""}/env`),o($e,` ${b??""}`),B(fe,"href",`/projects/${t(q)??""}/volumes`),o(tr,` ${l??""}`),o(sr,L),Ft(re,1,`inline-flex items-center gap-1.5 rounded-lg ${t(T)?"border border-[var(--border-primary)] text-[var(--text-secondary)]":"bg-[var(--color-brand-600)] text-white"} px-3 py-1.5 text-xs font-medium transition-all hover:opacity-90`),o(ir,` ${U??""}`),o(cr,G)},[()=>i()("projects.title"),()=>i()("projectDetail.deleteProject"),()=>i()("projectDetail.envVars"),()=>i()("projectDetail.volumes"),()=>i()("projectDetail.stages"),()=>t(T)?i()("projects.cancel"):"Add Stage",()=>i()("projectDetail.recentDeploys")]),Z("click",pe,()=>{s(zt,!0)}),Z("click",re,()=>{s(T,!t(T))}),v(u,P)};F(ot,u=>{t(ht)?u(Jt):t(ct)?u(ce,1):t(g)&&u(ue,2)})}v(st,$),Me(),D()}Xe(["click"]);export{ws as component};
diff --git a/web/.svelte-kit/output/client/_app/version.json b/web/.svelte-kit/output/client/_app/version.json
deleted file mode 100644
index dedc2c7..0000000
--- a/web/.svelte-kit/output/client/_app/version.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"1775075469000"}
\ No newline at end of file
diff --git a/web/.svelte-kit/output/prerendered/dependencies/_app/env.js b/web/.svelte-kit/output/prerendered/dependencies/_app/env.js
deleted file mode 100644
index f5427da..0000000
--- a/web/.svelte-kit/output/prerendered/dependencies/_app/env.js
+++ /dev/null
@@ -1 +0,0 @@
-export const env={}
\ No newline at end of file
diff --git a/web/.svelte-kit/output/server/.vite/manifest.json b/web/.svelte-kit/output/server/.vite/manifest.json
deleted file mode 100644
index 3fc5ea8..0000000
--- a/web/.svelte-kit/output/server/.vite/manifest.json
+++ /dev/null
@@ -1,581 +0,0 @@
-{
- ".svelte-kit/generated/server/internal.js": {
- "file": "internal.js",
- "name": "internal",
- "src": ".svelte-kit/generated/server/internal.js",
- "isEntry": true,
- "imports": [
- "_root.js",
- "_environment.js",
- "_internal.js"
- ]
- },
- "_EntityPicker.RxInhUBX.css": {
- "file": "_app/immutable/assets/EntityPicker.RxInhUBX.css",
- "src": "_EntityPicker.RxInhUBX.css"
- },
- "_EntityPicker.js": {
- "file": "chunks/EntityPicker.js",
- "name": "EntityPicker",
- "imports": [
- "_index.js",
- "_IconX.js",
- "_index2.js"
- ],
- "css": [
- "_app/immutable/assets/EntityPicker.RxInhUBX.css"
- ]
- },
- "_FormField.js": {
- "file": "chunks/FormField.js",
- "name": "FormField",
- "imports": [
- "_index.js"
- ]
- },
- "_IconAlert.js": {
- "file": "chunks/IconAlert.js",
- "name": "IconAlert",
- "imports": [
- "_index.js"
- ]
- },
- "_IconCheck.js": {
- "file": "chunks/IconCheck.js",
- "name": "IconCheck",
- "imports": [
- "_index.js"
- ]
- },
- "_IconChevronRight.js": {
- "file": "chunks/IconChevronRight.js",
- "name": "IconChevronRight",
- "imports": [
- "_index.js"
- ]
- },
- "_IconDeploy.js": {
- "file": "chunks/IconDeploy.js",
- "name": "IconDeploy",
- "imports": [
- "_index.js"
- ]
- },
- "_IconGlobe.js": {
- "file": "chunks/IconGlobe.js",
- "name": "IconGlobe",
- "imports": [
- "_index.js"
- ]
- },
- "_IconLoader.js": {
- "file": "chunks/IconLoader.js",
- "name": "IconLoader",
- "imports": [
- "_index.js"
- ]
- },
- "_IconPlus.js": {
- "file": "chunks/IconPlus.js",
- "name": "IconPlus",
- "imports": [
- "_index.js"
- ]
- },
- "_IconSettings.js": {
- "file": "chunks/IconSettings.js",
- "name": "IconSettings",
- "imports": [
- "_index.js"
- ]
- },
- "_IconTrash.js": {
- "file": "chunks/IconTrash.js",
- "name": "IconTrash",
- "imports": [
- "_index.js"
- ]
- },
- "_IconX.js": {
- "file": "chunks/IconX.js",
- "name": "IconX",
- "imports": [
- "_index.js"
- ]
- },
- "_Skeleton.js": {
- "file": "chunks/Skeleton.js",
- "name": "Skeleton",
- "imports": [
- "_index.js"
- ]
- },
- "_SkeletonCard.js": {
- "file": "chunks/SkeletonCard.js",
- "name": "SkeletonCard",
- "imports": [
- "_Skeleton.js"
- ]
- },
- "_api.js": {
- "file": "chunks/api.js",
- "name": "api"
- },
- "_environment.js": {
- "file": "chunks/environment.js",
- "name": "environment"
- },
- "_exports.js": {
- "file": "chunks/exports.js",
- "name": "exports"
- },
- "_false.js": {
- "file": "chunks/false.js",
- "name": "false"
- },
- "_index-server.js": {
- "file": "chunks/index-server.js",
- "name": "index-server",
- "imports": [
- "_index.js"
- ]
- },
- "_index.js": {
- "file": "chunks/index.js",
- "name": "index",
- "imports": [
- "_false.js"
- ]
- },
- "_index2.js": {
- "file": "chunks/index2.js",
- "name": "index",
- "imports": [
- "_index3.js"
- ]
- },
- "_index3.js": {
- "file": "chunks/index3.js",
- "name": "index",
- "imports": [
- "_index.js"
- ]
- },
- "_internal.js": {
- "file": "chunks/internal.js",
- "name": "internal",
- "imports": [
- "_root.js",
- "_environment.js"
- ]
- },
- "_root.js": {
- "file": "chunks/root.js",
- "name": "root",
- "imports": [
- "_index.js"
- ]
- },
- "_shared.js": {
- "file": "chunks/shared.js",
- "name": "shared",
- "imports": [
- "_utils.js"
- ]
- },
- "_state.svelte.js": {
- "file": "chunks/state.svelte.js",
- "name": "state.svelte",
- "imports": [
- "_index.js",
- "_exports.js",
- "_root.js"
- ]
- },
- "_stores.js": {
- "file": "chunks/stores.js",
- "name": "stores",
- "imports": [
- "_index.js",
- "_exports.js",
- "_utils.js",
- "_root.js",
- "_state.svelte.js"
- ]
- },
- "_theme.js": {
- "file": "chunks/theme.js",
- "name": "theme",
- "imports": [
- "_index3.js"
- ]
- },
- "_toast.js": {
- "file": "chunks/toast.js",
- "name": "toast",
- "imports": [
- "_index3.js"
- ]
- },
- "_utils.js": {
- "file": "chunks/utils.js",
- "name": "utils"
- },
- "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js": {
- "file": "remote-entry.js",
- "name": "remote-entry",
- "src": "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js",
- "isEntry": true,
- "imports": [
- "_shared.js",
- "_false.js",
- "_environment.js"
- ]
- },
- "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte": {
- "file": "entries/fallbacks/error.svelte.js",
- "name": "entries/fallbacks/error.svelte",
- "src": "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_state.svelte.js",
- "_exports.js",
- "_utils.js",
- "_index3.js",
- "_root.js"
- ]
- },
- "node_modules/@sveltejs/kit/src/runtime/server/index.js": {
- "file": "index.js",
- "name": "index",
- "src": "node_modules/@sveltejs/kit/src/runtime/server/index.js",
- "isEntry": true,
- "imports": [
- "_false.js",
- "_environment.js",
- "_shared.js",
- "_exports.js",
- "_utils.js",
- "_index3.js",
- "_internal.js"
- ]
- },
- "src/routes/+layout.svelte": {
- "file": "entries/pages/_layout.svelte.js",
- "name": "entries/pages/_layout.svelte",
- "src": "src/routes/+layout.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index-server.js",
- "_stores.js",
- "_toast.js",
- "_IconCheck.js",
- "_IconX.js",
- "_IconAlert.js",
- "_theme.js",
- "_index2.js",
- "_IconGlobe.js",
- "_IconDeploy.js",
- "_IconSettings.js",
- "_index3.js"
- ],
- "css": [
- "_app/immutable/assets/_layout.ZH2qq8sR.css"
- ]
- },
- "src/routes/+layout.ts": {
- "file": "entries/pages/_layout.ts.js",
- "name": "entries/pages/_layout.ts",
- "src": "src/routes/+layout.ts",
- "isEntry": true
- },
- "src/routes/+page.svelte": {
- "file": "entries/pages/_page.svelte.js",
- "name": "entries/pages/_page.svelte",
- "src": "src/routes/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index2.js",
- "_IconDeploy.js",
- "_IconAlert.js",
- "_SkeletonCard.js"
- ]
- },
- "src/routes/containers/stale/+page.svelte": {
- "file": "entries/pages/containers/stale/_page.svelte.js",
- "name": "entries/pages/containers/stale/_page.svelte",
- "src": "src/routes/containers/stale/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_api.js",
- "_IconTrash.js",
- "_IconLoader.js",
- "_index2.js",
- "_IconAlert.js",
- "_SkeletonCard.js",
- "_toast.js"
- ]
- },
- "src/routes/containers/stale/+page.ts": {
- "file": "entries/pages/containers/stale/_page.ts.js",
- "name": "entries/pages/containers/stale/_page.ts",
- "src": "src/routes/containers/stale/+page.ts",
- "isEntry": true
- },
- "src/routes/deploy/+page.svelte": {
- "file": "entries/pages/deploy/_page.svelte.js",
- "name": "entries/pages/deploy/_page.svelte",
- "src": "src/routes/deploy/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_FormField.js",
- "_EntityPicker.js",
- "_toast.js",
- "_index2.js"
- ]
- },
- "src/routes/events/+page.svelte": {
- "file": "entries/pages/events/_page.svelte.js",
- "name": "entries/pages/events/_page.svelte",
- "src": "src/routes/events/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index-server.js",
- "_index2.js"
- ]
- },
- "src/routes/events/+page.ts": {
- "file": "entries/pages/events/_page.ts.js",
- "name": "entries/pages/events/_page.ts",
- "src": "src/routes/events/+page.ts",
- "isEntry": true
- },
- "src/routes/login/+page.svelte": {
- "file": "entries/pages/login/_page.svelte.js",
- "name": "entries/pages/login/_page.svelte",
- "src": "src/routes/login/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_exports.js",
- "_utils.js",
- "_root.js",
- "_state.svelte.js",
- "_index2.js",
- "_theme.js"
- ]
- },
- "src/routes/projects/+page.svelte": {
- "file": "entries/pages/projects/_page.svelte.js",
- "name": "entries/pages/projects/_page.svelte",
- "src": "src/routes/projects/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index2.js",
- "_IconPlus.js",
- "_Skeleton.js"
- ],
- "css": [
- "_app/immutable/assets/EntityPicker.RxInhUBX.css"
- ]
- },
- "src/routes/projects/[id]/+page.svelte": {
- "file": "entries/pages/projects/_id_/_page.svelte.js",
- "name": "entries/pages/projects/_id_/_page.svelte",
- "src": "src/routes/projects/[id]/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_exports.js",
- "_utils.js",
- "_root.js",
- "_state.svelte.js",
- "_index2.js",
- "_Skeleton.js",
- "_toast.js"
- ]
- },
- "src/routes/projects/[id]/env/+page.svelte": {
- "file": "entries/pages/projects/_id_/env/_page.svelte.js",
- "name": "entries/pages/projects/_id_/env/_page.svelte",
- "src": "src/routes/projects/[id]/env/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_stores.js",
- "_toast.js",
- "_index2.js",
- "_IconChevronRight.js",
- "_Skeleton.js"
- ]
- },
- "src/routes/projects/[id]/volumes/+page.svelte": {
- "file": "entries/pages/projects/_id_/volumes/_page.svelte.js",
- "name": "entries/pages/projects/_id_/volumes/_page.svelte",
- "src": "src/routes/projects/[id]/volumes/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_stores.js",
- "_toast.js",
- "_index2.js",
- "_IconChevronRight.js",
- "_Skeleton.js"
- ]
- },
- "src/routes/projects/[id]/volumes/[volId]/browse/+page.svelte": {
- "file": "entries/pages/projects/_id_/volumes/_volId_/browse/_page.svelte.js",
- "name": "entries/pages/projects/_id_/volumes/_volId_/browse/_page.svelte",
- "src": "src/routes/projects/[id]/volumes/[volId]/browse/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_stores.js",
- "_toast.js",
- "_index2.js",
- "_IconChevronRight.js",
- "_Skeleton.js"
- ]
- },
- "src/routes/projects/[id]/volumes/[volId]/browse/+page.ts": {
- "file": "entries/pages/projects/_id_/volumes/_volId_/browse/_page.ts.js",
- "name": "entries/pages/projects/_id_/volumes/_volId_/browse/_page.ts",
- "src": "src/routes/projects/[id]/volumes/[volId]/browse/+page.ts",
- "isEntry": true
- },
- "src/routes/proxies/+page.svelte": {
- "file": "entries/pages/proxies/_page.svelte.js",
- "name": "entries/pages/proxies/_page.svelte",
- "src": "src/routes/proxies/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index2.js",
- "_IconGlobe.js",
- "_IconLoader.js"
- ]
- },
- "src/routes/proxies/+page.ts": {
- "file": "entries/pages/proxies/_page.ts.js",
- "name": "entries/pages/proxies/_page.ts",
- "src": "src/routes/proxies/+page.ts",
- "isEntry": true
- },
- "src/routes/proxies/[id]/edit/+page.svelte": {
- "file": "entries/pages/proxies/_id_/edit/_page.svelte.js",
- "name": "entries/pages/proxies/_id_/edit/_page.svelte",
- "src": "src/routes/proxies/[id]/edit/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_exports.js",
- "_utils.js",
- "_root.js",
- "_state.svelte.js",
- "_index2.js",
- "_IconGlobe.js",
- "_IconLoader.js"
- ]
- },
- "src/routes/proxies/[id]/edit/+page.ts": {
- "file": "entries/pages/proxies/_id_/edit/_page.ts.js",
- "name": "entries/pages/proxies/_id_/edit/_page.ts",
- "src": "src/routes/proxies/[id]/edit/+page.ts",
- "isEntry": true
- },
- "src/routes/proxies/create/+page.svelte": {
- "file": "entries/pages/proxies/create/_page.svelte.js",
- "name": "entries/pages/proxies/create/_page.svelte",
- "src": "src/routes/proxies/create/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_exports.js",
- "_utils.js",
- "_root.js",
- "_state.svelte.js",
- "_index2.js",
- "_api.js",
- "_FormField.js",
- "_IconCheck.js",
- "_IconX.js",
- "_IconLoader.js",
- "_IconGlobe.js"
- ]
- },
- "src/routes/proxies/create/+page.ts": {
- "file": "entries/pages/proxies/create/_page.ts.js",
- "name": "entries/pages/proxies/create/_page.ts",
- "src": "src/routes/proxies/create/+page.ts",
- "isEntry": true
- },
- "src/routes/settings/+layout.svelte": {
- "file": "entries/pages/settings/_layout.svelte.js",
- "name": "entries/pages/settings/_layout.svelte",
- "src": "src/routes/settings/+layout.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_stores.js",
- "_index2.js",
- "_IconSettings.js"
- ]
- },
- "src/routes/settings/+page.svelte": {
- "file": "entries/pages/settings/_page.svelte.js",
- "name": "entries/pages/settings/_page.svelte",
- "src": "src/routes/settings/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_EntityPicker.js",
- "_toast.js",
- "_index2.js",
- "_Skeleton.js"
- ]
- },
- "src/routes/settings/auth/+page.svelte": {
- "file": "entries/pages/settings/auth/_page.svelte.js",
- "name": "entries/pages/settings/auth/_page.svelte",
- "src": "src/routes/settings/auth/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_index2.js",
- "_IconTrash.js",
- "_IconPlus.js"
- ]
- },
- "src/routes/settings/credentials/+page.svelte": {
- "file": "entries/pages/settings/credentials/_page.svelte.js",
- "name": "entries/pages/settings/credentials/_page.svelte",
- "src": "src/routes/settings/credentials/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_Skeleton.js",
- "_toast.js",
- "_index2.js"
- ]
- },
- "src/routes/settings/registries/+page.svelte": {
- "file": "entries/pages/settings/registries/_page.svelte.js",
- "name": "entries/pages/settings/registries/_page.svelte",
- "src": "src/routes/settings/registries/+page.svelte",
- "isEntry": true,
- "imports": [
- "_index.js",
- "_Skeleton.js",
- "_toast.js",
- "_index2.js",
- "_IconPlus.js"
- ]
- }
-}
\ No newline at end of file
diff --git a/web/.svelte-kit/output/server/_app/immutable/assets/EntityPicker.RxInhUBX.css b/web/.svelte-kit/output/server/_app/immutable/assets/EntityPicker.RxInhUBX.css
deleted file mode 100644
index 6a7e9f4..0000000
--- a/web/.svelte-kit/output/server/_app/immutable/assets/EntityPicker.RxInhUBX.css
+++ /dev/null
@@ -1 +0,0 @@
-.entity-picker-backdrop.svelte-1bxz98v{position:fixed;inset:0;z-index:60;background:var(--surface-overlay);backdrop-filter:blur(4px);animation:fade-in var(--transition-normal) forwards}.entity-picker-container.svelte-1bxz98v{position:fixed;inset:0;z-index:61;display:flex;align-items:flex-start;justify-content:center;padding-top:12vh;pointer-events:none}.entity-picker-modal.svelte-1bxz98v{pointer-events:auto;width:90vw;max-width:500px;background:var(--surface-card);border:1px solid var(--border-primary);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);overflow:hidden;animation:scale-in var(--transition-normal) forwards;display:flex;flex-direction:column}.entity-picker-header.svelte-1bxz98v{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-secondary)}.entity-picker-title.svelte-1bxz98v{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--text-primary);margin:0}.entity-picker-close.svelte-1bxz98v{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-md);background:transparent;color:var(--text-tertiary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.entity-picker-close.svelte-1bxz98v:hover{background:var(--surface-card-hover);color:var(--text-primary)}.entity-picker-search.svelte-1bxz98v{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-secondary)}.entity-picker-search-icon{flex-shrink:0;color:var(--text-tertiary)}.entity-picker-search-input.svelte-1bxz98v{flex:1;border:none;outline:none;background:transparent;font-size:var(--text-sm);color:var(--text-primary);font-family:var(--font-family-sans)}.entity-picker-search-input.svelte-1bxz98v::placeholder{color:var(--text-tertiary)}.entity-picker-close-inline.svelte-1bxz98v{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-tertiary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.entity-picker-close-inline.svelte-1bxz98v:hover{background:var(--surface-card-hover);color:var(--text-primary)}.entity-picker-list.svelte-1bxz98v{overflow-y:auto;max-height:60vh;padding:var(--space-1) 0}.entity-picker-empty.svelte-1bxz98v{padding:var(--space-8) var(--space-4);text-align:center;font-size:var(--text-sm);color:var(--text-tertiary)}.entity-picker-group-header.svelte-1bxz98v{padding:var(--space-2) var(--space-4) var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em}.entity-picker-item.svelte-1bxz98v{display:flex;align-items:center;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-4);border:none;background:transparent;cursor:pointer;text-align:left;font-family:var(--font-family-sans);transition:background var(--transition-fast);border-left:3px solid transparent}.entity-picker-item--highlighted.svelte-1bxz98v{background:var(--surface-card-hover)}.entity-picker-item--current.svelte-1bxz98v{border-left-color:var(--color-brand-500)}.entity-picker-item-icon.svelte-1bxz98v{flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;color:var(--text-tertiary)}.entity-picker-item-content.svelte-1bxz98v{display:flex;flex-direction:column;gap:1px;min-width:0}.entity-picker-item-label.svelte-1bxz98v{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-picker-item-description.svelte-1bxz98v{font-size:var(--text-xs);color:var(--text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entity-picker-item--disabled.svelte-1bxz98v{opacity:.45;cursor:default;pointer-events:none}.entity-picker-item-hint.svelte-1bxz98v{font-size:var(--text-xs);color:var(--text-tertiary);font-style:italic;white-space:nowrap}
diff --git a/web/.svelte-kit/output/server/_app/immutable/assets/_layout.ZH2qq8sR.css b/web/.svelte-kit/output/server/_app/immutable/assets/_layout.ZH2qq8sR.css
deleted file mode 100644
index f33a6a5..0000000
--- a/web/.svelte-kit/output/server/_app/immutable/assets/_layout.ZH2qq8sR.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-400:oklch(85.2% .199 91.936);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-4{right:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.col-span-full{grid-column:1/-1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[38px\]{height:38px}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[1\.5rem\]{min-height:1.5rem}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[180px\]{min-width:180px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--border-primary\)\]>:not(:last-child)){border-color:var(--border-primary)}:where(.divide-\[var\(--border-secondary\)\]>:not(:last-child)){border-color:var(--border-secondary)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--border-input\)\]{border-color:var(--border-input)}.border-\[var\(--border-primary\)\]{border-color:var(--border-primary)}.border-\[var\(--border-secondary\)\]{border-color:var(--border-secondary)}.border-\[var\(--color-danger\)\]{border-color:var(--color-danger)}.border-\[var\(--color-danger-light\)\]{border-color:var(--color-danger-light)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.bg-\[var\(--border-primary\)\]{background-color:var(--border-primary)}.bg-\[var\(--color-brand-50\)\],.bg-\[var\(--color-brand-50\)\]\/30{background-color:var(--color-brand-50)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-brand-50\)\]\/30{background-color:color-mix(in oklab,var(--color-brand-50) 30%,transparent)}}.bg-\[var\(--color-brand-100\)\]{background-color:var(--color-brand-100)}.bg-\[var\(--color-brand-600\)\]{background-color:var(--color-brand-600)}.bg-\[var\(--color-danger\)\]{background-color:var(--color-danger)}.bg-\[var\(--color-danger-light\)\]{background-color:var(--color-danger-light)}.bg-\[var\(--color-info\)\]{background-color:var(--color-info)}.bg-\[var\(--color-success\)\]{background-color:var(--color-success)}.bg-\[var\(--color-warning\)\]{background-color:var(--color-warning)}.bg-\[var\(--surface-card\)\]{background-color:var(--surface-card)}.bg-\[var\(--surface-card-hover\)\]{background-color:var(--surface-card-hover)}.bg-\[var\(--surface-input\)\]{background-color:var(--surface-input)}.bg-\[var\(--surface-overlay\)\]{background-color:var(--surface-overlay)}.bg-\[var\(--surface-page\)\]{background-color:var(--surface-page)}.bg-\[var\(--surface-sidebar\)\]{background-color:var(--surface-sidebar)}.bg-\[var\(--text-tertiary\)\]{background-color:var(--text-tertiary)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-yellow-400{background-color:var(--color-yellow-400)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[26px\]{padding-top:26px}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--color-brand-500\)\]{color:var(--color-brand-500)}.text-\[var\(--color-brand-600\)\]{color:var(--color-brand-600)}.text-\[var\(--color-brand-700\)\]{color:var(--color-brand-700)}.text-\[var\(--color-danger\)\]{color:var(--color-danger)}.text-\[var\(--text-link\)\]{color:var(--text-link)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--text-tertiary\)\]{color:var(--text-tertiary)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-indigo-700{color:var(--color-indigo-700)}.text-purple-700{color:var(--color-purple-700)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-1{text-decoration-thickness:1px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[var\(--shadow-lg\)\]{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-sm\)\]{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--border-primary\)\]{--tw-ring-color:var(--border-primary)}.ring-amber-300{--tw-ring-color:var(--color-amber-300)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-red-300{--tw-ring-color:var(--color-red-300)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:bg-\[var\(--color-brand-100\)\]:is(:where(.group):hover *){background-color:var(--color-brand-100)}.group-hover\:text-\[var\(--text-secondary\)\]:is(:where(.group):hover *){color:var(--text-secondary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--text-tertiary\)\]::placeholder{color:var(--text-tertiary)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--color-brand-300\)\]:hover{border-color:var(--color-brand-300)}.hover\:bg-\[var\(--color-brand-700\)\]:hover{background-color:var(--color-brand-700)}.hover\:bg-\[var\(--color-danger-dark\)\]:hover{background-color:var(--color-danger-dark)}.hover\:bg-\[var\(--color-danger-light\)\]:hover{background-color:var(--color-danger-light)}.hover\:bg-\[var\(--color-info-dark\)\]:hover{background-color:var(--color-info-dark)}.hover\:bg-\[var\(--color-success-dark\)\]:hover{background-color:var(--color-success-dark)}.hover\:bg-\[var\(--surface-card\)\]:hover{background-color:var(--surface-card)}.hover\:bg-\[var\(--surface-card-hover\)\]:hover{background-color:var(--surface-card-hover)}.hover\:bg-amber-50:hover{background-color:var(--color-amber-50)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-emerald-50:hover{background-color:var(--color-emerald-50)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-\[var\(--color-brand-600\)\]:hover{color:var(--color-brand-600)}.hover\:text-\[var\(--color-brand-700\)\]:hover{color:var(--color-brand-700)}.hover\:text-\[var\(--color-danger\)\]:hover{color:var(--color-danger)}.hover\:text-\[var\(--text-link\)\]:hover{color:var(--text-link)}.hover\:text-\[var\(--text-link-hover\)\]:hover{color:var(--text-link-hover)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-emerald-600:hover{color:var(--color-emerald-600)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-white:hover{color:var(--color-white)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[var\(--shadow-md\)\]:hover{--tw-shadow:var(--shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-\[var\(--color-brand-400\)\]:focus{border-color:var(--color-brand-400)}.focus\:border-\[var\(--color-brand-500\)\]:focus{border-color:var(--color-brand-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[var\(--color-brand-400\)\]:focus{--tw-ring-color:var(--color-brand-400)}.focus\:ring-\[var\(--color-brand-500\)\]:focus{--tw-ring-color:var(--color-brand-500)}.focus\:ring-\[var\(--color-danger\)\]:focus{--tw-ring-color:var(--color-danger)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-\[var\(--color-brand-600\)\]:focus-visible{outline-color:var(--color-brand-600)}.focus-visible\:outline-\[var\(--color-danger\)\]:focus-visible{outline-color:var(--color-danger)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:w-48{width:calc(var(--spacing) * 48)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}:where(.sm\:space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:static{position:static}.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:border-red-700{border-color:var(--color-red-700)}.dark\:border-red-900{border-color:var(--color-red-900)}.dark\:bg-\[var\(--color-brand-900\)\]\/10{background-color:var(--color-brand-900)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-\[var\(--color-brand-900\)\]\/10{background-color:color-mix(in oklab,var(--color-brand-900) 10%,transparent)}}.dark\:bg-amber-500{background-color:var(--color-amber-500)}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900) 30%,transparent)}}.dark\:bg-amber-900\/40{background-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/40{background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.dark\:bg-amber-950{background-color:var(--color-amber-950)}.dark\:bg-blue-500{background-color:var(--color-blue-500)}.dark\:bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900) 30%,transparent)}}.dark\:bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900) 40%,transparent)}}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-emerald-900\/30{background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30{background-color:color-mix(in oklab,var(--color-emerald-900) 30%,transparent)}}.dark\:bg-emerald-950{background-color:var(--color-emerald-950)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-indigo-950{background-color:var(--color-indigo-950)}.dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900) 30%,transparent)}}.dark\:bg-purple-950{background-color:var(--color-purple-950)}.dark\:bg-red-500{background-color:var(--color-red-500)}.dark\:bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.dark\:bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.dark\:bg-red-950{background-color:var(--color-red-950)}.dark\:bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950) 30%,transparent)}}.dark\:bg-violet-900\/30{background-color:#4d179a4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-violet-900\/30{background-color:color-mix(in oklab,var(--color-violet-900) 30%,transparent)}}.dark\:bg-violet-950{background-color:var(--color-violet-950)}.dark\:text-amber-300{color:var(--color-amber-300)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-violet-300{color:var(--color-violet-300)}.dark\:text-violet-400{color:var(--color-violet-400)}.dark\:ring-amber-700{--tw-ring-color:var(--color-amber-700)}.dark\:ring-blue-700{--tw-ring-color:var(--color-blue-700)}.dark\:ring-red-700{--tw-ring-color:var(--color-red-700)}@media(hover:hover){.dark\:hover\:bg-red-900\/30:hover{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-red-900\/30:hover{background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.dark\:hover\:bg-red-950:hover{background-color:var(--color-red-950)}}}}:root{--color-brand-50:#eef2ff;--color-brand-100:#e0e7ff;--color-brand-200:#c7d2fe;--color-brand-300:#a5b4fc;--color-brand-400:#818cf8;--color-brand-500:#6366f1;--color-brand-600:#4f46e5;--color-brand-700:#4338ca;--color-brand-800:#3730a3;--color-brand-900:#312e81;--color-success:#16a34a;--color-success-light:#dcfce7;--color-success-dark:#15803d;--color-warning:#d97706;--color-warning-light:#fef3c7;--color-warning-dark:#b45309;--color-danger:#dc2626;--color-danger-light:#fee2e2;--color-danger-dark:#b91c1c;--color-info:#2563eb;--color-info-light:#dbeafe;--color-info-dark:#1d4ed8;--surface-page:#f8fafc;--surface-card:#fff;--surface-card-hover:#f8fafc;--surface-sidebar:#fff;--surface-overlay:#0000004d;--surface-input:#fff;--border-primary:#e2e8f0;--border-secondary:#f1f5f9;--border-focus:var(--color-brand-500);--border-input:#cbd5e1;--text-primary:#0f172a;--text-secondary:#475569;--text-tertiary:#94a3b8;--text-inverse:#fff;--text-link:var(--color-brand-600);--text-link-hover:var(--color-brand-700);--space-0:0;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--font-family-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-family-mono:"JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.2s cubic-bezier(.4, 0, .2, 1);--transition-slow:.3s cubic-bezier(.4, 0, .2, 1);--sidebar-width:16rem;--sidebar-collapsed-width:0;--topbar-height:4rem}[data-theme=dark]{--surface-page:#0f172a;--surface-card:#1e293b;--surface-card-hover:#334155;--surface-sidebar:#1e293b;--surface-overlay:#0009;--surface-input:#1e293b;--border-primary:#334155;--border-secondary:#1e293b;--border-focus:var(--color-brand-400);--border-input:#475569;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-tertiary:#64748b;--text-inverse:#0f172a;--text-link:var(--color-brand-400);--text-link-hover:var(--color-brand-300);--color-success:#22c55e;--color-success-light:#14532d;--color-warning:#f59e0b;--color-warning-light:#451a03;--color-danger:#ef4444;--color-danger-light:#450a0a;--color-info:#3b82f6;--color-info-light:#172554;--shadow-sm:0 1px 2px 0 #0000004d;--shadow-md:0 4px 6px -1px #0006, 0 2px 4px -2px #0000004d;--shadow-lg:0 10px 15px -3px #0006, 0 4px 6px -4px #0000004d;--shadow-xl:0 20px 25px -5px #0006, 0 8px 10px -6px #0000004d}@keyframes pulse-status{0%,to{opacity:1}50%{opacity:.5}}@keyframes slide-in-right{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes slide-out-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes button-press{0%,to{transform:scale(1)}50%{transform:scale(.97)}}.animate-pulse-status{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse-status}.animate-slide-in{animation:slide-in-right var(--transition-slow) forwards}.animate-slide-out{animation:slide-out-right var(--transition-slow) forwards}.animate-fade-in{animation:fade-in var(--transition-normal) forwards}.animate-scale-in{animation:scale-in var(--transition-normal) forwards}.active\:animate-press:active{animation:.15s ease-in-out button-press}.skeleton{background:linear-gradient(90deg,var(--border-secondary) 25%,var(--border-primary) 50%,var(--border-secondary) 75%);border-radius:var(--radius-md);background-size:200% 100%;animation:1.5s ease-in-out infinite skeleton-shimmer}.toggle-switch{background-color:var(--border-primary);border-radius:var(--radius-full);cursor:pointer;width:2.75rem;height:1.5rem;transition:background-color var(--transition-fast);position:relative}.toggle-switch[aria-checked=true]{background-color:var(--color-brand-600)}.toggle-switch:after{content:"";border-radius:var(--radius-full);width:1.25rem;height:1.25rem;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast);background-color:#fff;position:absolute;top:.125rem;left:.125rem}.toggle-switch[aria-checked=true]:after{transform:translate(1.25rem)}html,body{height:100%;font-family:var(--font-family-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--surface-page);color:var(--text-primary);margin:0;padding:0;overflow:hidden}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.focus-ring:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-primary);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
diff --git a/web/.svelte-kit/output/server/chunks/EntityPicker.js b/web/.svelte-kit/output/server/chunks/EntityPicker.js
deleted file mode 100644
index 07dac8e..0000000
--- a/web/.svelte-kit/output/server/chunks/EntityPicker.js
+++ /dev/null
@@ -1,140 +0,0 @@
-import { a as attr, b as attr_class, c as clsx, e as escape_html, s as store_get, f as ensure_array_like, u as unsubscribe_stores, k as bind_props, i as derived } from "./index.js";
-import { I as IconX } from "./IconX.js";
-import { t } from "./index2.js";
-/* empty css */
-function html(value) {
- var html2 = String(value ?? "");
- var open = "";
- return open + html2 + "";
-}
-function IconSearch($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-function EntityPicker($$renderer, $$props) {
- $$renderer.component(($$renderer2) => {
- var $$store_subs;
- const {
- open = void 0,
- items,
- current = "",
- placeholder,
- title = "",
- onselect,
- onclose
- } = $$props;
- let query = "";
- let highlightIndex = 0;
- const filtered = derived(() => {
- const q = query.toLowerCase().trim();
- if (!q) return items;
- return items.filter((item) => item.label.toLowerCase().includes(q) || (item.description?.toLowerCase().includes(q) ?? false));
- });
- const grouped = derived(() => {
- const groups = [];
- const seen = /* @__PURE__ */ new Map();
- for (const item of filtered()) {
- const groupName = item.group ?? "";
- const idx = seen.get(groupName);
- if (idx !== void 0) {
- groups[idx].items.push(item);
- } else {
- seen.set(groupName, groups.length);
- groups.push({ name: groupName, items: [item] });
- }
- }
- return groups;
- });
- const flatFiltered = derived(filtered);
- function flatIndexOf(groupIdx, itemIdx) {
- let index = 0;
- for (let g = 0; g < groupIdx; g++) {
- index += grouped()[g].items.length;
- }
- return index + itemIdx;
- }
- if (open) {
- $$renderer2.push("");
- $$renderer2.push(`
`);
- if (title) {
- $$renderer2.push("");
- $$renderer2.push(``);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(`
`);
- IconSearch($$renderer2, { size: 16, class: "entity-picker-search-icon" });
- $$renderer2.push(` `);
- if (!title) {
- $$renderer2.push("");
- $$renderer2.push(``);
- IconX($$renderer2, { size: 16 });
- $$renderer2.push(` `);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(`
`);
- if (flatFiltered().length === 0) {
- $$renderer2.push("");
- $$renderer2.push(`
${escape_html(store_get($$store_subs ??= {}, "$t", t)("entityPicker.noResults"))}
`);
- } else {
- $$renderer2.push("");
- $$renderer2.push(``);
- const each_array = ensure_array_like(grouped());
- for (let gIdx = 0, $$length = each_array.length; gIdx < $$length; gIdx++) {
- let group = each_array[gIdx];
- if (group.name) {
- $$renderer2.push("");
- $$renderer2.push(``);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(` `);
- const each_array_1 = ensure_array_like(group.items);
- for (let iIdx = 0, $$length2 = each_array_1.length; iIdx < $$length2; iIdx++) {
- let item = each_array_1[iIdx];
- const flatIdx = flatIndexOf(gIdx, iIdx);
- const isHighlighted = flatIdx === highlightIndex;
- const isCurrent = item.value === current;
- $$renderer2.push(`
`);
- if (item.icon) {
- $$renderer2.push("");
- $$renderer2.push(`${html(item.icon)} `);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(` ${escape_html(item.label)} `);
- if (item.disabledHint) {
- $$renderer2.push("");
- $$renderer2.push(`${escape_html(item.disabledHint)} `);
- } else if (item.description) {
- $$renderer2.push("");
- $$renderer2.push(`${escape_html(item.description)} `);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(` `);
- }
- $$renderer2.push(``);
- }
- $$renderer2.push(``);
- }
- $$renderer2.push(`
`);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(``);
- if ($$store_subs) unsubscribe_stores($$store_subs);
- bind_props($$props, { open });
- });
-}
-export {
- EntityPicker as E,
- IconSearch as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/FormField.js b/web/.svelte-kit/output/server/chunks/FormField.js
deleted file mode 100644
index 4d32633..0000000
--- a/web/.svelte-kit/output/server/chunks/FormField.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import { a as attr, e as escape_html, b as attr_class, k as bind_props, g as stringify } from "./index.js";
-function FormField($$renderer, $$props) {
- $$renderer.component(($$renderer2) => {
- let {
- label,
- name,
- type = "text",
- value = "",
- placeholder = "",
- required = false,
- disabled = false,
- error = "",
- helpText = "",
- oninput
- } = $$props;
- const inputBase = "w-full rounded-lg border px-3 py-2 text-sm transition-all duration-150 focus:outline-none focus:ring-2 bg-[var(--surface-input)] text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)]";
- const inputNormal = "border-[var(--border-input)] focus:ring-[var(--color-brand-500)] focus:border-[var(--color-brand-500)]";
- const inputError = "border-[var(--color-danger)] focus:ring-[var(--color-danger)]";
- const inputDisabled = "opacity-60 cursor-not-allowed bg-[var(--surface-card-hover)]";
- $$renderer2.push(`${escape_html(label)} `);
- if (required) {
- $$renderer2.push("");
- $$renderer2.push(`* `);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(` `);
- if (type === "textarea") {
- $$renderer2.push("");
- $$renderer2.push(`
`);
- } else {
- $$renderer2.push("");
- $$renderer2.push(`
`);
- }
- $$renderer2.push(` `);
- if (error) {
- $$renderer2.push("");
- $$renderer2.push(`
${escape_html(error)}
`);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(` `);
- if (helpText && !error) {
- $$renderer2.push("");
- $$renderer2.push(`
${escape_html(helpText)}
`);
- } else {
- $$renderer2.push("");
- }
- $$renderer2.push(`
`);
- bind_props($$props, { value });
- });
-}
-export {
- FormField as F
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconAlert.js b/web/.svelte-kit/output/server/chunks/IconAlert.js
deleted file mode 100644
index f03a512..0000000
--- a/web/.svelte-kit/output/server/chunks/IconAlert.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconAlert($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconAlert as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconCheck.js b/web/.svelte-kit/output/server/chunks/IconCheck.js
deleted file mode 100644
index fe1e42b..0000000
--- a/web/.svelte-kit/output/server/chunks/IconCheck.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconCheck($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconCheck as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconChevronRight.js b/web/.svelte-kit/output/server/chunks/IconChevronRight.js
deleted file mode 100644
index 02a5b19..0000000
--- a/web/.svelte-kit/output/server/chunks/IconChevronRight.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconChevronRight($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconChevronRight as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconDeploy.js b/web/.svelte-kit/output/server/chunks/IconDeploy.js
deleted file mode 100644
index e8a9e1c..0000000
--- a/web/.svelte-kit/output/server/chunks/IconDeploy.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconDeploy($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconDeploy as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconGlobe.js b/web/.svelte-kit/output/server/chunks/IconGlobe.js
deleted file mode 100644
index 4fffd84..0000000
--- a/web/.svelte-kit/output/server/chunks/IconGlobe.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconGlobe($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconGlobe as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconLoader.js b/web/.svelte-kit/output/server/chunks/IconLoader.js
deleted file mode 100644
index 02c967b..0000000
--- a/web/.svelte-kit/output/server/chunks/IconLoader.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, g as stringify } from "./index.js";
-function IconLoader($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconLoader as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconPlus.js b/web/.svelte-kit/output/server/chunks/IconPlus.js
deleted file mode 100644
index 125393c..0000000
--- a/web/.svelte-kit/output/server/chunks/IconPlus.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconPlus($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconPlus as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconSettings.js b/web/.svelte-kit/output/server/chunks/IconSettings.js
deleted file mode 100644
index e14846d..0000000
--- a/web/.svelte-kit/output/server/chunks/IconSettings.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconSettings($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconSettings as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconTrash.js b/web/.svelte-kit/output/server/chunks/IconTrash.js
deleted file mode 100644
index 4fde0c5..0000000
--- a/web/.svelte-kit/output/server/chunks/IconTrash.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconTrash($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconTrash as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/IconX.js b/web/.svelte-kit/output/server/chunks/IconX.js
deleted file mode 100644
index ba68b97..0000000
--- a/web/.svelte-kit/output/server/chunks/IconX.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { a as attr, b as attr_class, c as clsx } from "./index.js";
-function IconX($$renderer, $$props) {
- const { size = 20, class: c = "" } = $$props;
- $$renderer.push(` `);
-}
-export {
- IconX as I
-};
diff --git a/web/.svelte-kit/output/server/chunks/Skeleton.js b/web/.svelte-kit/output/server/chunks/Skeleton.js
deleted file mode 100644
index 79e55a0..0000000
--- a/web/.svelte-kit/output/server/chunks/Skeleton.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { b as attr_class, l as attr_style, g as stringify } from "./index.js";
-function Skeleton($$renderer, $$props) {
- const {
- class: className = "",
- width = "100%",
- height = "1rem",
- rounded = false
- } = $$props;
- $$renderer.push(`
`);
-}
-export {
- Skeleton as S
-};
diff --git a/web/.svelte-kit/output/server/chunks/SkeletonCard.js b/web/.svelte-kit/output/server/chunks/SkeletonCard.js
deleted file mode 100644
index 544e898..0000000
--- a/web/.svelte-kit/output/server/chunks/SkeletonCard.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import "clsx";
-import { S as Skeleton } from "./Skeleton.js";
-function SkeletonCard($$renderer) {
- $$renderer.push(``);
- Skeleton($$renderer, { width: "60%", height: "1.25rem" });
- $$renderer.push(` `);
- Skeleton($$renderer, { width: "80%", height: "0.875rem" });
- $$renderer.push(`
`);
- Skeleton($$renderer, { width: "4rem", height: "1.5rem", rounded: true });
- $$renderer.push(`
`);
- Skeleton($$renderer, { width: "5rem", height: "0.875rem" });
- $$renderer.push(` `);
- Skeleton($$renderer, { width: "4rem", height: "0.875rem" });
- $$renderer.push(`
`);
- Skeleton($$renderer, { width: "3.5rem", height: "0.75rem" });
- $$renderer.push(` `);
- Skeleton($$renderer, { width: "4.5rem", height: "0.75rem" });
- $$renderer.push(`
`);
-}
-export {
- SkeletonCard as S
-};
diff --git a/web/.svelte-kit/output/server/chunks/api.js b/web/.svelte-kit/output/server/chunks/api.js
deleted file mode 100644
index c7fc1a5..0000000
--- a/web/.svelte-kit/output/server/chunks/api.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const TOKEN_KEY = "auth_token";
-function getAuthToken() {
- if (typeof localStorage !== "undefined") {
- return localStorage.getItem(TOKEN_KEY);
- }
- return null;
-}
-function clearAuth() {
- if (typeof localStorage !== "undefined") {
- localStorage.removeItem(TOKEN_KEY);
- }
-}
-class ApiError extends Error {
- constructor(message, status) {
- super(message);
- this.status = status;
- this.name = "ApiError";
- }
-}
-async function request(path, init) {
- const token = getAuthToken();
- const headers = {
- "Content-Type": "application/json",
- ...init?.headers
- };
- if (token) {
- headers["Authorization"] = `Bearer ${token}`;
- }
- const res = await fetch(path, {
- ...init,
- headers
- });
- if (res.status === 401 && typeof window !== "undefined" && !path.includes("/auth/")) {
- clearAuth();
- window.location.href = "/login";
- throw new ApiError("Authentication required", 401);
- }
- let envelope;
- try {
- envelope = await res.json();
- } catch {
- throw new ApiError(
- `Server returned non-JSON response (HTTP ${res.status})`,
- res.status
- );
- }
- if (!envelope.success) {
- throw new ApiError(envelope.error ?? "Unknown API error", res.status);
- }
- return envelope.data;
-}
-function post(path, body) {
- return request(path, {
- method: "POST",
- body: body !== void 0 ? JSON.stringify(body) : void 0
- });
-}
-function validateProxy(host, port) {
- return post("/api/proxies/validate", { host, port });
-}
-function cleanupStaleContainer(id) {
- return post(`/api/containers/stale/${id}/cleanup`);
-}
-function bulkCleanupStaleContainers() {
- return post("/api/containers/stale/cleanup");
-}
-export {
- bulkCleanupStaleContainers as b,
- cleanupStaleContainer as c,
- validateProxy as v
-};
diff --git a/web/.svelte-kit/output/server/chunks/environment.js b/web/.svelte-kit/output/server/chunks/environment.js
deleted file mode 100644
index fe987e5..0000000
--- a/web/.svelte-kit/output/server/chunks/environment.js
+++ /dev/null
@@ -1,34 +0,0 @@
-let base = "";
-let assets = base;
-const app_dir = "_app";
-const relative = true;
-const initial = { base, assets };
-function override(paths) {
- base = paths.base;
- assets = paths.assets;
-}
-function reset() {
- base = initial.base;
- assets = initial.assets;
-}
-function set_assets(path) {
- assets = initial.assets = path;
-}
-let prerendering = false;
-function set_building() {
-}
-function set_prerendering() {
- prerendering = true;
-}
-export {
- set_building as a,
- set_prerendering as b,
- base as c,
- app_dir as d,
- assets as e,
- reset as f,
- override as o,
- prerendering as p,
- relative as r,
- set_assets as s
-};
diff --git a/web/.svelte-kit/output/server/chunks/exports.js b/web/.svelte-kit/output/server/chunks/exports.js
deleted file mode 100644
index 81554d4..0000000
--- a/web/.svelte-kit/output/server/chunks/exports.js
+++ /dev/null
@@ -1,174 +0,0 @@
-const SCHEME = /^[a-z][a-z\d+\-.]+:/i;
-const internal = new URL("sveltekit-internal://");
-function resolve(base, path) {
- if (path[0] === "/" && path[1] === "/") return path;
- let url = new URL(base, internal);
- url = new URL(path, url);
- return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;
-}
-function normalize_path(path, trailing_slash) {
- if (path === "/" || trailing_slash === "ignore") return path;
- if (trailing_slash === "never") {
- return path.endsWith("/") ? path.slice(0, -1) : path;
- } else if (trailing_slash === "always" && !path.endsWith("/")) {
- return path + "/";
- }
- return path;
-}
-function decode_pathname(pathname) {
- return pathname.split("%25").map(decodeURI).join("%25");
-}
-function decode_params(params) {
- for (const key in params) {
- params[key] = decodeURIComponent(params[key]);
- }
- return params;
-}
-function make_trackable(url, callback, search_params_callback, allow_hash = false) {
- const tracked = new URL(url);
- Object.defineProperty(tracked, "searchParams", {
- value: new Proxy(tracked.searchParams, {
- get(obj, key) {
- if (key === "get" || key === "getAll" || key === "has") {
- return (param, ...rest) => {
- search_params_callback(param);
- return obj[key](param, ...rest);
- };
- }
- callback();
- const value = Reflect.get(obj, key);
- return typeof value === "function" ? value.bind(obj) : value;
- }
- }),
- enumerable: true,
- configurable: true
- });
- const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"];
- if (allow_hash) tracked_url_properties.push("hash");
- for (const property of tracked_url_properties) {
- Object.defineProperty(tracked, property, {
- get() {
- callback();
- return url[property];
- },
- enumerable: true,
- configurable: true
- });
- }
- {
- tracked[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
- return inspect(url, opts);
- };
- tracked.searchParams[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
- return inspect(url.searchParams, opts);
- };
- }
- if (!allow_hash) {
- disable_hash(tracked);
- }
- return tracked;
-}
-function disable_hash(url) {
- allow_nodejs_console_log(url);
- Object.defineProperty(url, "hash", {
- get() {
- throw new Error(
- "Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead"
- );
- }
- });
-}
-function disable_search(url) {
- allow_nodejs_console_log(url);
- for (const property of ["search", "searchParams"]) {
- Object.defineProperty(url, property, {
- get() {
- throw new Error(`Cannot access url.${property} on a page with prerendering enabled`);
- }
- });
- }
-}
-function allow_nodejs_console_log(url) {
- {
- url[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
- return inspect(new URL(url), opts);
- };
- }
-}
-function validator(expected) {
- function validate(module, file) {
- if (!module) return;
- for (const key in module) {
- if (key[0] === "_" || expected.has(key)) continue;
- const values = [...expected.values()];
- const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`;
- throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`);
- }
- }
- return validate;
-}
-function hint_for_supported_files(key, ext = ".js") {
- const supported_files = [];
- if (valid_layout_exports.has(key)) {
- supported_files.push(`+layout${ext}`);
- }
- if (valid_page_exports.has(key)) {
- supported_files.push(`+page${ext}`);
- }
- if (valid_layout_server_exports.has(key)) {
- supported_files.push(`+layout.server${ext}`);
- }
- if (valid_page_server_exports.has(key)) {
- supported_files.push(`+page.server${ext}`);
- }
- if (valid_server_exports.has(key)) {
- supported_files.push(`+server${ext}`);
- }
- if (supported_files.length > 0) {
- return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`;
- }
-}
-const valid_layout_exports = /* @__PURE__ */ new Set([
- "load",
- "prerender",
- "csr",
- "ssr",
- "trailingSlash",
- "config"
-]);
-const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]);
-const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);
-const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]);
-const valid_server_exports = /* @__PURE__ */ new Set([
- "GET",
- "POST",
- "PATCH",
- "PUT",
- "DELETE",
- "OPTIONS",
- "HEAD",
- "fallback",
- "prerender",
- "trailingSlash",
- "config",
- "entries"
-]);
-const validate_layout_exports = validator(valid_layout_exports);
-const validate_page_exports = validator(valid_page_exports);
-const validate_layout_server_exports = validator(valid_layout_server_exports);
-const validate_page_server_exports = validator(valid_page_server_exports);
-const validate_server_exports = validator(valid_server_exports);
-export {
- SCHEME as S,
- decode_params as a,
- validate_layout_exports as b,
- validate_page_server_exports as c,
- disable_search as d,
- validate_page_exports as e,
- decode_pathname as f,
- validate_server_exports as g,
- make_trackable as m,
- normalize_path as n,
- resolve as r,
- validate_layout_server_exports as v
-};
diff --git a/web/.svelte-kit/output/server/chunks/false.js b/web/.svelte-kit/output/server/chunks/false.js
deleted file mode 100644
index 85bc56d..0000000
--- a/web/.svelte-kit/output/server/chunks/false.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const BROWSER = false;
-export {
- BROWSER as B
-};
diff --git a/web/.svelte-kit/output/server/chunks/index-server.js b/web/.svelte-kit/output/server/chunks/index-server.js
deleted file mode 100644
index 99896c5..0000000
--- a/web/.svelte-kit/output/server/chunks/index-server.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { d as ssr_context } from "./index.js";
-import "clsx";
-function onDestroy(fn) {
- /** @type {SSRContext} */
- ssr_context.r.on_destroy(fn);
-}
-export {
- onDestroy as o
-};
diff --git a/web/.svelte-kit/output/server/chunks/index.js b/web/.svelte-kit/output/server/chunks/index.js
deleted file mode 100644
index 29d46a8..0000000
--- a/web/.svelte-kit/output/server/chunks/index.js
+++ /dev/null
@@ -1,3168 +0,0 @@
-import { clsx as clsx$1 } from "clsx";
-import { B as BROWSER } from "./false.js";
-import * as devalue from "devalue";
-var is_array = Array.isArray;
-var index_of = Array.prototype.indexOf;
-var includes = Array.prototype.includes;
-var array_from = Array.from;
-var define_property = Object.defineProperty;
-var get_descriptor = Object.getOwnPropertyDescriptor;
-var object_prototype = Object.prototype;
-var array_prototype = Array.prototype;
-var get_prototype_of = Object.getPrototypeOf;
-var is_extensible = Object.isExtensible;
-var has_own_property = Object.prototype.hasOwnProperty;
-const noop = () => {
-};
-function run_all(arr) {
- for (var i = 0; i < arr.length; i++) {
- arr[i]();
- }
-}
-function deferred() {
- var resolve;
- var reject;
- var promise = new Promise((res, rej) => {
- resolve = res;
- reject = rej;
- });
- return { promise, resolve, reject };
-}
-function equals(value) {
- return value === this.v;
-}
-function safe_not_equal(a, b) {
- return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
-}
-function safe_equals(value) {
- return !safe_not_equal(value, this.v);
-}
-const DERIVED = 1 << 1;
-const EFFECT = 1 << 2;
-const RENDER_EFFECT = 1 << 3;
-const MANAGED_EFFECT = 1 << 24;
-const BLOCK_EFFECT = 1 << 4;
-const BRANCH_EFFECT = 1 << 5;
-const ROOT_EFFECT = 1 << 6;
-const BOUNDARY_EFFECT = 1 << 7;
-const CONNECTED = 1 << 9;
-const CLEAN = 1 << 10;
-const DIRTY = 1 << 11;
-const MAYBE_DIRTY = 1 << 12;
-const INERT = 1 << 13;
-const DESTROYED = 1 << 14;
-const REACTION_RAN = 1 << 15;
-const DESTROYING = 1 << 25;
-const EFFECT_TRANSPARENT = 1 << 16;
-const EAGER_EFFECT = 1 << 17;
-const HEAD_EFFECT = 1 << 18;
-const EFFECT_PRESERVED = 1 << 19;
-const USER_EFFECT = 1 << 20;
-const WAS_MARKED = 1 << 16;
-const REACTION_IS_UPDATING = 1 << 21;
-const ASYNC = 1 << 22;
-const ERROR_VALUE = 1 << 23;
-const STATE_SYMBOL = Symbol("$state");
-const LEGACY_PROPS = Symbol("legacy props");
-const STALE_REACTION = new class StaleReactionError extends Error {
- name = "StaleReactionError";
- message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
-}();
-const COMMENT_NODE = 8;
-function lifecycle_outside_component(name) {
- {
- throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
- }
-}
-function effect_update_depth_exceeded() {
- {
- throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
- }
-}
-function hydration_failed() {
- {
- throw new Error(`https://svelte.dev/e/hydration_failed`);
- }
-}
-function state_descriptors_fixed() {
- {
- throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
- }
-}
-function state_prototype_fixed() {
- {
- throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
- }
-}
-function state_unsafe_mutation() {
- {
- throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
- }
-}
-function svelte_boundary_reset_onerror() {
- {
- throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
- }
-}
-const HYDRATION_START = "[";
-const HYDRATION_START_ELSE = "[!";
-const HYDRATION_START_FAILED = "[?";
-const HYDRATION_END = "]";
-const HYDRATION_ERROR = {};
-const ELEMENT_IS_NAMESPACED = 1;
-const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;
-const ELEMENT_IS_INPUT = 1 << 2;
-const UNINITIALIZED = Symbol();
-let tracing_mode_flag = false;
-let component_context = null;
-function set_component_context(context) {
- component_context = context;
-}
-function push$1(props, runes = false, fn) {
- component_context = {
- p: component_context,
- i: false,
- c: null,
- e: null,
- s: props,
- x: null,
- r: (
- /** @type {Effect} */
- active_effect
- ),
- l: null
- };
-}
-function pop$1(component) {
- var context = (
- /** @type {ComponentContext} */
- component_context
- );
- var effects = context.e;
- if (effects !== null) {
- context.e = null;
- for (var fn of effects) {
- create_user_effect(fn);
- }
- }
- context.i = true;
- component_context = context.p;
- return (
- /** @type {T} */
- {}
- );
-}
-function is_runes() {
- return true;
-}
-let micro_tasks = [];
-function run_micro_tasks() {
- var tasks = micro_tasks;
- micro_tasks = [];
- run_all(tasks);
-}
-function queue_micro_task(fn) {
- if (micro_tasks.length === 0 && !is_flushing_sync) {
- var tasks = micro_tasks;
- queueMicrotask(() => {
- if (tasks === micro_tasks) run_micro_tasks();
- });
- }
- micro_tasks.push(fn);
-}
-function flush_tasks() {
- while (micro_tasks.length > 0) {
- run_micro_tasks();
- }
-}
-function handle_error(error) {
- var effect = active_effect;
- if (effect === null) {
- active_reaction.f |= ERROR_VALUE;
- return error;
- }
- if ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {
- throw error;
- }
- invoke_error_boundary(error, effect);
-}
-function invoke_error_boundary(error, effect) {
- while (effect !== null) {
- if ((effect.f & BOUNDARY_EFFECT) !== 0) {
- if ((effect.f & REACTION_RAN) === 0) {
- throw error;
- }
- try {
- effect.b.error(error);
- return;
- } catch (e) {
- error = e;
- }
- }
- effect = effect.parent;
- }
- throw error;
-}
-const STATUS_MASK = -7169;
-function set_signal_status(signal, status) {
- signal.f = signal.f & STATUS_MASK | status;
-}
-function update_derived_status(derived2) {
- if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) {
- set_signal_status(derived2, CLEAN);
- } else {
- set_signal_status(derived2, MAYBE_DIRTY);
- }
-}
-function clear_marked(deps) {
- if (deps === null) return;
- for (const dep of deps) {
- if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
- continue;
- }
- dep.f ^= WAS_MARKED;
- clear_marked(
- /** @type {Derived} */
- dep.deps
- );
- }
-}
-function defer_effect(effect, dirty_effects, maybe_dirty_effects) {
- if ((effect.f & DIRTY) !== 0) {
- dirty_effects.add(effect);
- } else if ((effect.f & MAYBE_DIRTY) !== 0) {
- maybe_dirty_effects.add(effect);
- }
- clear_marked(effect.deps);
- set_signal_status(effect, CLEAN);
-}
-const batches = /* @__PURE__ */ new Set();
-let current_batch = null;
-let batch_values = null;
-let last_scheduled_effect = null;
-let is_flushing_sync = false;
-let is_processing = false;
-let collected_effects = null;
-let legacy_updates = null;
-var flush_count = 0;
-let uid = 1;
-class Batch {
- id = uid++;
- /**
- * The current values of any signals that are updated in this batch.
- * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)
- * They keys of this map are identical to `this.#previous`
- * @type {Map}
- */
- current = /* @__PURE__ */ new Map();
- /**
- * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.
- * They keys of this map are identical to `this.#current`
- * @type {Map}
- */
- previous = /* @__PURE__ */ new Map();
- /**
- * When the batch is committed (and the DOM is updated), we need to remove old branches
- * and append new ones by calling the functions added inside (if/each/key/etc) blocks
- * @type {Set<(batch: Batch) => void>}
- */
- #commit_callbacks = /* @__PURE__ */ new Set();
- /**
- * If a fork is discarded, we need to destroy any effects that are no longer needed
- * @type {Set<(batch: Batch) => void>}
- */
- #discard_callbacks = /* @__PURE__ */ new Set();
- /**
- * Async effects that are currently in flight
- * @type {Map}
- */
- #pending = /* @__PURE__ */ new Map();
- /**
- * Async effects that are currently in flight, _not_ inside a pending boundary
- * @type {Map}
- */
- #blocking_pending = /* @__PURE__ */ new Map();
- /**
- * A deferred that resolves when the batch is committed, used with `settled()`
- * TODO replace with Promise.withResolvers once supported widely enough
- * @type {{ promise: Promise, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
- */
- #deferred = null;
- /**
- * The root effects that need to be flushed
- * @type {Effect[]}
- */
- #roots = [];
- /**
- * Deferred effects (which run after async work has completed) that are DIRTY
- * @type {Set}
- */
- #dirty_effects = /* @__PURE__ */ new Set();
- /**
- * Deferred effects that are MAYBE_DIRTY
- * @type {Set}
- */
- #maybe_dirty_effects = /* @__PURE__ */ new Set();
- /**
- * A map of branches that still exist, but will be destroyed when this batch
- * is committed — we skip over these during `process`.
- * The value contains child effects that were dirty/maybe_dirty before being reset,
- * so they can be rescheduled if the branch survives.
- * @type {Map}
- */
- #skipped_branches = /* @__PURE__ */ new Map();
- is_fork = false;
- #decrement_queued = false;
- /** @type {Set} */
- #blockers = /* @__PURE__ */ new Set();
- #is_deferred() {
- return this.is_fork || this.#blocking_pending.size > 0;
- }
- #is_blocked() {
- for (const batch of this.#blockers) {
- for (const effect of batch.#blocking_pending.keys()) {
- var skipped = false;
- var e = effect;
- while (e.parent !== null) {
- if (this.#skipped_branches.has(e)) {
- skipped = true;
- break;
- }
- e = e.parent;
- }
- if (!skipped) {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * Add an effect to the #skipped_branches map and reset its children
- * @param {Effect} effect
- */
- skip_effect(effect) {
- if (!this.#skipped_branches.has(effect)) {
- this.#skipped_branches.set(effect, { d: [], m: [] });
- }
- }
- /**
- * Remove an effect from the #skipped_branches map and reschedule
- * any tracked dirty/maybe_dirty child effects
- * @param {Effect} effect
- */
- unskip_effect(effect) {
- var tracked = this.#skipped_branches.get(effect);
- if (tracked) {
- this.#skipped_branches.delete(effect);
- for (var e of tracked.d) {
- set_signal_status(e, DIRTY);
- this.schedule(e);
- }
- for (e of tracked.m) {
- set_signal_status(e, MAYBE_DIRTY);
- this.schedule(e);
- }
- }
- }
- #process() {
- if (flush_count++ > 1e3) {
- batches.delete(this);
- infinite_loop_guard();
- }
- if (!this.#is_deferred()) {
- for (const e of this.#dirty_effects) {
- this.#maybe_dirty_effects.delete(e);
- set_signal_status(e, DIRTY);
- this.schedule(e);
- }
- for (const e of this.#maybe_dirty_effects) {
- set_signal_status(e, MAYBE_DIRTY);
- this.schedule(e);
- }
- }
- const roots = this.#roots;
- this.#roots = [];
- this.apply();
- var effects = collected_effects = [];
- var render_effects = [];
- var updates = legacy_updates = [];
- for (const root of roots) {
- try {
- this.#traverse(root, effects, render_effects);
- } catch (e) {
- reset_all(root);
- throw e;
- }
- }
- current_batch = null;
- if (updates.length > 0) {
- var batch = Batch.ensure();
- for (const e of updates) {
- batch.schedule(e);
- }
- }
- collected_effects = null;
- legacy_updates = null;
- if (this.#is_deferred() || this.#is_blocked()) {
- this.#defer_effects(render_effects);
- this.#defer_effects(effects);
- for (const [e, t] of this.#skipped_branches) {
- reset_branch(e, t);
- }
- } else {
- if (this.#pending.size === 0) {
- batches.delete(this);
- }
- this.#dirty_effects.clear();
- this.#maybe_dirty_effects.clear();
- for (const fn of this.#commit_callbacks) fn(this);
- this.#commit_callbacks.clear();
- flush_queued_effects(render_effects);
- flush_queued_effects(effects);
- this.#deferred?.resolve();
- }
- var next_batch = (
- /** @type {Batch | null} */
- /** @type {unknown} */
- current_batch
- );
- if (this.#roots.length > 0) {
- const batch2 = next_batch ??= this;
- batch2.#roots.push(...this.#roots.filter((r) => !batch2.#roots.includes(r)));
- }
- if (next_batch !== null) {
- batches.add(next_batch);
- next_batch.#process();
- }
- if (!batches.has(this)) {
- this.#commit();
- }
- }
- /**
- * Traverse the effect tree, executing effects or stashing
- * them for later execution as appropriate
- * @param {Effect} root
- * @param {Effect[]} effects
- * @param {Effect[]} render_effects
- */
- #traverse(root, effects, render_effects) {
- root.f ^= CLEAN;
- var effect = root.first;
- while (effect !== null) {
- var flags = effect.f;
- var is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
- var is_skippable_branch = is_branch && (flags & CLEAN) !== 0;
- var skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);
- if (!skip && effect.fn !== null) {
- if (is_branch) {
- effect.f ^= CLEAN;
- } else if ((flags & EFFECT) !== 0) {
- effects.push(effect);
- } else if (is_dirty(effect)) {
- if ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);
- update_effect(effect);
- }
- var child = effect.first;
- if (child !== null) {
- effect = child;
- continue;
- }
- }
- while (effect !== null) {
- var next = effect.next;
- if (next !== null) {
- effect = next;
- break;
- }
- effect = effect.parent;
- }
- }
- }
- /**
- * @param {Effect[]} effects
- */
- #defer_effects(effects) {
- for (var i = 0; i < effects.length; i += 1) {
- defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);
- }
- }
- /**
- * Associate a change to a given source with the current
- * batch, noting its previous and current values
- * @param {Value} source
- * @param {any} old_value
- * @param {boolean} [is_derived]
- */
- capture(source2, old_value, is_derived = false) {
- if (old_value !== UNINITIALIZED && !this.previous.has(source2)) {
- this.previous.set(source2, old_value);
- }
- if ((source2.f & ERROR_VALUE) === 0) {
- this.current.set(source2, [source2.v, is_derived]);
- batch_values?.set(source2, source2.v);
- }
- }
- activate() {
- current_batch = this;
- }
- deactivate() {
- current_batch = null;
- batch_values = null;
- }
- flush() {
- try {
- is_processing = true;
- current_batch = this;
- this.#process();
- } finally {
- flush_count = 0;
- last_scheduled_effect = null;
- collected_effects = null;
- legacy_updates = null;
- is_processing = false;
- current_batch = null;
- batch_values = null;
- old_values.clear();
- }
- }
- discard() {
- for (const fn of this.#discard_callbacks) fn(this);
- this.#discard_callbacks.clear();
- batches.delete(this);
- }
- #commit() {
- for (const batch of batches) {
- var is_earlier = batch.id < this.id;
- var sources = [];
- for (const [source3, [value, is_derived]] of this.current) {
- if (batch.current.has(source3)) {
- var batch_value = (
- /** @type {[any, boolean]} */
- batch.current.get(source3)[0]
- );
- if (is_earlier && value !== batch_value) {
- batch.current.set(source3, [value, is_derived]);
- } else {
- continue;
- }
- }
- sources.push(source3);
- }
- var others = [...batch.current.keys()].filter((s) => !this.current.has(s));
- if (others.length === 0) {
- if (is_earlier) {
- batch.discard();
- }
- } else if (sources.length > 0) {
- batch.activate();
- var marked = /* @__PURE__ */ new Set();
- var checked = /* @__PURE__ */ new Map();
- for (var source2 of sources) {
- mark_effects(source2, others, marked, checked);
- }
- if (batch.#roots.length > 0) {
- batch.apply();
- for (var root of batch.#roots) {
- batch.#traverse(root, [], []);
- }
- batch.#roots = [];
- }
- batch.deactivate();
- }
- }
- for (const batch of batches) {
- if (batch.#blockers.has(this)) {
- batch.#blockers.delete(this);
- if (batch.#blockers.size === 0 && !batch.#is_deferred()) {
- batch.activate();
- batch.#process();
- }
- }
- }
- }
- /**
- * @param {boolean} blocking
- * @param {Effect} effect
- */
- increment(blocking, effect) {
- let pending_count = this.#pending.get(effect) ?? 0;
- this.#pending.set(effect, pending_count + 1);
- if (blocking) {
- let blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;
- this.#blocking_pending.set(effect, blocking_pending_count + 1);
- }
- }
- /**
- * @param {boolean} blocking
- * @param {Effect} effect
- * @param {boolean} skip - whether to skip updates (because this is triggered by a stale reaction)
- */
- decrement(blocking, effect, skip) {
- let pending_count = this.#pending.get(effect) ?? 0;
- if (pending_count === 1) {
- this.#pending.delete(effect);
- } else {
- this.#pending.set(effect, pending_count - 1);
- }
- if (blocking) {
- let blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;
- if (blocking_pending_count === 1) {
- this.#blocking_pending.delete(effect);
- } else {
- this.#blocking_pending.set(effect, blocking_pending_count - 1);
- }
- }
- if (this.#decrement_queued || skip) return;
- this.#decrement_queued = true;
- queue_micro_task(() => {
- this.#decrement_queued = false;
- this.flush();
- });
- }
- /**
- * @param {Set} dirty_effects
- * @param {Set} maybe_dirty_effects
- */
- transfer_effects(dirty_effects, maybe_dirty_effects) {
- for (const e of dirty_effects) {
- this.#dirty_effects.add(e);
- }
- for (const e of maybe_dirty_effects) {
- this.#maybe_dirty_effects.add(e);
- }
- dirty_effects.clear();
- maybe_dirty_effects.clear();
- }
- /** @param {(batch: Batch) => void} fn */
- oncommit(fn) {
- this.#commit_callbacks.add(fn);
- }
- /** @param {(batch: Batch) => void} fn */
- ondiscard(fn) {
- this.#discard_callbacks.add(fn);
- }
- settled() {
- return (this.#deferred ??= deferred()).promise;
- }
- static ensure() {
- if (current_batch === null) {
- const batch = current_batch = new Batch();
- if (!is_processing) {
- batches.add(current_batch);
- if (!is_flushing_sync) {
- queue_micro_task(() => {
- if (current_batch !== batch) {
- return;
- }
- batch.flush();
- });
- }
- }
- }
- return current_batch;
- }
- apply() {
- {
- batch_values = null;
- return;
- }
- }
- /**
- *
- * @param {Effect} effect
- */
- schedule(effect) {
- last_scheduled_effect = effect;
- if (effect.b?.is_pending && (effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 && (effect.f & REACTION_RAN) === 0) {
- effect.b.defer_effect(effect);
- return;
- }
- var e = effect;
- while (e.parent !== null) {
- e = e.parent;
- var flags = e.f;
- if (collected_effects !== null && e === active_effect) {
- if ((active_reaction === null || (active_reaction.f & DERIVED) === 0) && true) {
- return;
- }
- }
- if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
- if ((flags & CLEAN) === 0) {
- return;
- }
- e.f ^= CLEAN;
- }
- }
- this.#roots.push(e);
- }
-}
-function flushSync(fn) {
- var was_flushing_sync = is_flushing_sync;
- is_flushing_sync = true;
- try {
- var result;
- if (fn) ;
- while (true) {
- flush_tasks();
- if (current_batch === null) {
- return (
- /** @type {T} */
- result
- );
- }
- current_batch.flush();
- }
- } finally {
- is_flushing_sync = was_flushing_sync;
- }
-}
-function infinite_loop_guard() {
- try {
- effect_update_depth_exceeded();
- } catch (error) {
- invoke_error_boundary(error, last_scheduled_effect);
- }
-}
-let eager_block_effects = null;
-function flush_queued_effects(effects) {
- var length = effects.length;
- if (length === 0) return;
- var i = 0;
- while (i < length) {
- var effect = effects[i++];
- if ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {
- eager_block_effects = /* @__PURE__ */ new Set();
- update_effect(effect);
- if (effect.deps === null && effect.first === null && effect.nodes === null && effect.teardown === null && effect.ac === null) {
- unlink_effect(effect);
- }
- if (eager_block_effects?.size > 0) {
- old_values.clear();
- for (const e of eager_block_effects) {
- if ((e.f & (DESTROYED | INERT)) !== 0) continue;
- const ordered_effects = [e];
- let ancestor = e.parent;
- while (ancestor !== null) {
- if (eager_block_effects.has(ancestor)) {
- eager_block_effects.delete(ancestor);
- ordered_effects.push(ancestor);
- }
- ancestor = ancestor.parent;
- }
- for (let j = ordered_effects.length - 1; j >= 0; j--) {
- const e2 = ordered_effects[j];
- if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
- update_effect(e2);
- }
- }
- eager_block_effects.clear();
- }
- }
- }
- eager_block_effects = null;
-}
-function mark_effects(value, sources, marked, checked) {
- if (marked.has(value)) return;
- marked.add(value);
- if (value.reactions !== null) {
- for (const reaction of value.reactions) {
- const flags = reaction.f;
- if ((flags & DERIVED) !== 0) {
- mark_effects(
- /** @type {Derived} */
- reaction,
- sources,
- marked,
- checked
- );
- } else if ((flags & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
- set_signal_status(reaction, DIRTY);
- schedule_effect(
- /** @type {Effect} */
- reaction
- );
- }
- }
- }
-}
-function depends_on(reaction, sources, checked) {
- const depends = checked.get(reaction);
- if (depends !== void 0) return depends;
- if (reaction.deps !== null) {
- for (const dep of reaction.deps) {
- if (includes.call(sources, dep)) {
- return true;
- }
- if ((dep.f & DERIVED) !== 0 && depends_on(
- /** @type {Derived} */
- dep,
- sources,
- checked
- )) {
- checked.set(
- /** @type {Derived} */
- dep,
- true
- );
- return true;
- }
- }
- }
- checked.set(reaction, false);
- return false;
-}
-function schedule_effect(effect) {
- current_batch.schedule(effect);
-}
-function reset_branch(effect, tracked) {
- if ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {
- return;
- }
- if ((effect.f & DIRTY) !== 0) {
- tracked.d.push(effect);
- } else if ((effect.f & MAYBE_DIRTY) !== 0) {
- tracked.m.push(effect);
- }
- set_signal_status(effect, CLEAN);
- var e = effect.first;
- while (e !== null) {
- reset_branch(e, tracked);
- e = e.next;
- }
-}
-function reset_all(effect) {
- set_signal_status(effect, CLEAN);
- var e = effect.first;
- while (e !== null) {
- reset_all(e);
- e = e.next;
- }
-}
-function destroy_derived_effects(derived2) {
- var effects = derived2.effects;
- if (effects !== null) {
- derived2.effects = null;
- for (var i = 0; i < effects.length; i += 1) {
- destroy_effect(
- /** @type {Effect} */
- effects[i]
- );
- }
- }
-}
-function get_derived_parent_effect(derived2) {
- var parent = derived2.parent;
- while (parent !== null) {
- if ((parent.f & DERIVED) === 0) {
- return (parent.f & DESTROYED) === 0 ? (
- /** @type {Effect} */
- parent
- ) : null;
- }
- parent = parent.parent;
- }
- return null;
-}
-function execute_derived(derived2) {
- var value;
- var prev_active_effect = active_effect;
- set_active_effect(get_derived_parent_effect(derived2));
- {
- try {
- derived2.f &= ~WAS_MARKED;
- destroy_derived_effects(derived2);
- value = update_reaction(derived2);
- } finally {
- set_active_effect(prev_active_effect);
- }
- }
- return value;
-}
-function update_derived(derived2) {
- var old_value = derived2.v;
- var value = execute_derived(derived2);
- if (!derived2.equals(value)) {
- derived2.wv = increment_write_version();
- if (!current_batch?.is_fork || derived2.deps === null) {
- derived2.v = value;
- current_batch?.capture(derived2, old_value, true);
- if (derived2.deps === null) {
- set_signal_status(derived2, CLEAN);
- return;
- }
- }
- }
- if (is_destroying_effect) {
- return;
- }
- if (batch_values !== null) {
- if (effect_tracking() || current_batch?.is_fork) {
- batch_values.set(derived2, value);
- }
- } else {
- update_derived_status(derived2);
- }
-}
-function freeze_derived_effects(derived2) {
- if (derived2.effects === null) return;
- for (const e of derived2.effects) {
- if (e.teardown || e.ac) {
- e.teardown?.();
- e.ac?.abort(STALE_REACTION);
- e.teardown = noop;
- e.ac = null;
- remove_reactions(e, 0);
- destroy_effect_children(e);
- }
- }
-}
-function unfreeze_derived_effects(derived2) {
- if (derived2.effects === null) return;
- for (const e of derived2.effects) {
- if (e.teardown) {
- update_effect(e);
- }
- }
-}
-let eager_effects = /* @__PURE__ */ new Set();
-const old_values = /* @__PURE__ */ new Map();
-let eager_effects_deferred = false;
-function source(v, stack) {
- var signal = {
- f: 0,
- // TODO ideally we could skip this altogether, but it causes type errors
- v,
- reactions: null,
- equals,
- rv: 0,
- wv: 0
- };
- return signal;
-}
-// @__NO_SIDE_EFFECTS__
-function state(v, stack) {
- const s = source(v);
- push_reaction_value(s);
- return s;
-}
-// @__NO_SIDE_EFFECTS__
-function mutable_source(initial_value, immutable = false, trackable = true) {
- const s = source(initial_value);
- if (!immutable) {
- s.equals = safe_equals;
- }
- return s;
-}
-function set(source2, value, should_proxy = false) {
- if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
- // to ensure we error if state is set inside an inspect effect
- (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && (current_sources === null || !includes.call(current_sources, source2))) {
- state_unsafe_mutation();
- }
- let new_value = should_proxy ? proxy(value) : value;
- return internal_set(source2, new_value, legacy_updates);
-}
-function internal_set(source2, value, updated_during_traversal = null) {
- if (!source2.equals(value)) {
- var old_value = source2.v;
- if (is_destroying_effect) {
- old_values.set(source2, value);
- } else {
- old_values.set(source2, old_value);
- }
- source2.v = value;
- var batch = Batch.ensure();
- batch.capture(source2, old_value);
- if ((source2.f & DERIVED) !== 0) {
- const derived2 = (
- /** @type {Derived} */
- source2
- );
- if ((source2.f & DIRTY) !== 0) {
- execute_derived(derived2);
- }
- if (batch_values === null) {
- update_derived_status(derived2);
- }
- }
- source2.wv = increment_write_version();
- mark_reactions(source2, DIRTY, updated_during_traversal);
- if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
- if (untracked_writes === null) {
- set_untracked_writes([source2]);
- } else {
- untracked_writes.push(source2);
- }
- }
- if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
- flush_eager_effects();
- }
- }
- return value;
-}
-function flush_eager_effects() {
- eager_effects_deferred = false;
- for (const effect of eager_effects) {
- if ((effect.f & CLEAN) !== 0) {
- set_signal_status(effect, MAYBE_DIRTY);
- }
- if (is_dirty(effect)) {
- update_effect(effect);
- }
- }
- eager_effects.clear();
-}
-function increment(source2) {
- set(source2, source2.v + 1);
-}
-function mark_reactions(signal, status, updated_during_traversal) {
- var reactions = signal.reactions;
- if (reactions === null) return;
- var length = reactions.length;
- for (var i = 0; i < length; i++) {
- var reaction = reactions[i];
- var flags = reaction.f;
- var not_dirty = (flags & DIRTY) === 0;
- if (not_dirty) {
- set_signal_status(reaction, status);
- }
- if ((flags & DERIVED) !== 0) {
- var derived2 = (
- /** @type {Derived} */
- reaction
- );
- batch_values?.delete(derived2);
- if ((flags & WAS_MARKED) === 0) {
- if (flags & CONNECTED) {
- reaction.f |= WAS_MARKED;
- }
- mark_reactions(derived2, MAYBE_DIRTY, updated_during_traversal);
- }
- } else if (not_dirty) {
- var effect = (
- /** @type {Effect} */
- reaction
- );
- if ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
- eager_block_effects.add(effect);
- }
- if (updated_during_traversal !== null) {
- updated_during_traversal.push(effect);
- } else {
- schedule_effect(effect);
- }
- }
- }
-}
-function proxy(value) {
- if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
- return value;
- }
- const prototype = get_prototype_of(value);
- if (prototype !== object_prototype && prototype !== array_prototype) {
- return value;
- }
- var sources = /* @__PURE__ */ new Map();
- var is_proxied_array = is_array(value);
- var version = /* @__PURE__ */ state(0);
- var parent_version = update_version;
- var with_parent = (fn) => {
- if (update_version === parent_version) {
- return fn();
- }
- var reaction = active_reaction;
- var version2 = update_version;
- set_active_reaction(null);
- set_update_version(parent_version);
- var result = fn();
- set_active_reaction(reaction);
- set_update_version(version2);
- return result;
- };
- if (is_proxied_array) {
- sources.set("length", /* @__PURE__ */ state(
- /** @type {any[]} */
- value.length
- ));
- }
- return new Proxy(
- /** @type {any} */
- value,
- {
- defineProperty(_, prop, descriptor) {
- if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
- state_descriptors_fixed();
- }
- var s = sources.get(prop);
- if (s === void 0) {
- with_parent(() => {
- var s2 = /* @__PURE__ */ state(descriptor.value);
- sources.set(prop, s2);
- return s2;
- });
- } else {
- set(s, descriptor.value, true);
- }
- return true;
- },
- deleteProperty(target, prop) {
- var s = sources.get(prop);
- if (s === void 0) {
- if (prop in target) {
- const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
- sources.set(prop, s2);
- increment(version);
- }
- } else {
- set(s, UNINITIALIZED);
- increment(version);
- }
- return true;
- },
- get(target, prop, receiver) {
- if (prop === STATE_SYMBOL) {
- return value;
- }
- var s = sources.get(prop);
- var exists = prop in target;
- if (s === void 0 && (!exists || get_descriptor(target, prop)?.writable)) {
- s = with_parent(() => {
- var p = proxy(exists ? target[prop] : UNINITIALIZED);
- var s2 = /* @__PURE__ */ state(p);
- return s2;
- });
- sources.set(prop, s);
- }
- if (s !== void 0) {
- var v = get(s);
- return v === UNINITIALIZED ? void 0 : v;
- }
- return Reflect.get(target, prop, receiver);
- },
- getOwnPropertyDescriptor(target, prop) {
- var descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
- if (descriptor && "value" in descriptor) {
- var s = sources.get(prop);
- if (s) descriptor.value = get(s);
- } else if (descriptor === void 0) {
- var source2 = sources.get(prop);
- var value2 = source2?.v;
- if (source2 !== void 0 && value2 !== UNINITIALIZED) {
- return {
- enumerable: true,
- configurable: true,
- value: value2,
- writable: true
- };
- }
- }
- return descriptor;
- },
- has(target, prop) {
- if (prop === STATE_SYMBOL) {
- return true;
- }
- var s = sources.get(prop);
- var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop);
- if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop)?.writable)) {
- if (s === void 0) {
- s = with_parent(() => {
- var p = has ? proxy(target[prop]) : UNINITIALIZED;
- var s2 = /* @__PURE__ */ state(p);
- return s2;
- });
- sources.set(prop, s);
- }
- var value2 = get(s);
- if (value2 === UNINITIALIZED) {
- return false;
- }
- }
- return has;
- },
- set(target, prop, value2, receiver) {
- var s = sources.get(prop);
- var has = prop in target;
- if (is_proxied_array && prop === "length") {
- for (var i = value2; i < /** @type {Source} */
- s.v; i += 1) {
- var other_s = sources.get(i + "");
- if (other_s !== void 0) {
- set(other_s, UNINITIALIZED);
- } else if (i in target) {
- other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED));
- sources.set(i + "", other_s);
- }
- }
- }
- if (s === void 0) {
- if (!has || get_descriptor(target, prop)?.writable) {
- s = with_parent(() => /* @__PURE__ */ state(void 0));
- set(s, proxy(value2));
- sources.set(prop, s);
- }
- } else {
- has = s.v !== UNINITIALIZED;
- var p = with_parent(() => proxy(value2));
- set(s, p);
- }
- var descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
- if (descriptor?.set) {
- descriptor.set.call(receiver, value2);
- }
- if (!has) {
- if (is_proxied_array && typeof prop === "string") {
- var ls = (
- /** @type {Source} */
- sources.get("length")
- );
- var n = Number(prop);
- if (Number.isInteger(n) && n >= ls.v) {
- set(ls, n + 1);
- }
- }
- increment(version);
- }
- return true;
- },
- ownKeys(target) {
- get(version);
- var own_keys = Reflect.ownKeys(target).filter((key2) => {
- var source3 = sources.get(key2);
- return source3 === void 0 || source3.v !== UNINITIALIZED;
- });
- for (var [key, source2] of sources) {
- if (source2.v !== UNINITIALIZED && !(key in target)) {
- own_keys.push(key);
- }
- }
- return own_keys;
- },
- setPrototypeOf() {
- state_prototype_fixed();
- }
- }
- );
-}
-var $window;
-var first_child_getter;
-var next_sibling_getter;
-function init_operations() {
- if ($window !== void 0) {
- return;
- }
- $window = window;
- var element_prototype = Element.prototype;
- var node_prototype = Node.prototype;
- var text_prototype = Text.prototype;
- first_child_getter = get_descriptor(node_prototype, "firstChild").get;
- next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
- if (is_extensible(element_prototype)) {
- element_prototype.__click = void 0;
- element_prototype.__className = void 0;
- element_prototype.__attributes = null;
- element_prototype.__style = void 0;
- element_prototype.__e = void 0;
- }
- if (is_extensible(text_prototype)) {
- text_prototype.__t = void 0;
- }
-}
-function create_text(value = "") {
- return document.createTextNode(value);
-}
-// @__NO_SIDE_EFFECTS__
-function get_first_child(node) {
- return (
- /** @type {TemplateNode | null} */
- first_child_getter.call(node)
- );
-}
-// @__NO_SIDE_EFFECTS__
-function get_next_sibling(node) {
- return (
- /** @type {TemplateNode | null} */
- next_sibling_getter.call(node)
- );
-}
-function clear_text_content(node) {
- node.textContent = "";
-}
-function without_reactive_context(fn) {
- var previous_reaction = active_reaction;
- var previous_effect = active_effect;
- set_active_reaction(null);
- set_active_effect(null);
- try {
- return fn();
- } finally {
- set_active_reaction(previous_reaction);
- set_active_effect(previous_effect);
- }
-}
-function push_effect(effect, parent_effect) {
- var parent_last = parent_effect.last;
- if (parent_last === null) {
- parent_effect.last = parent_effect.first = effect;
- } else {
- parent_last.next = effect;
- effect.prev = parent_last;
- parent_effect.last = effect;
- }
-}
-function create_effect(type, fn) {
- var parent = active_effect;
- if (parent !== null && (parent.f & INERT) !== 0) {
- type |= INERT;
- }
- var effect = {
- ctx: component_context,
- deps: null,
- nodes: null,
- f: type | DIRTY | CONNECTED,
- first: null,
- fn,
- last: null,
- next: null,
- parent,
- b: parent && parent.b,
- prev: null,
- teardown: null,
- wv: 0,
- ac: null
- };
- var e = effect;
- if ((type & EFFECT) !== 0) {
- if (collected_effects !== null) {
- collected_effects.push(effect);
- } else {
- Batch.ensure().schedule(effect);
- }
- } else if (fn !== null) {
- try {
- update_effect(effect);
- } catch (e2) {
- destroy_effect(effect);
- throw e2;
- }
- if (e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
- (e.f & EFFECT_PRESERVED) === 0) {
- e = e.first;
- if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
- e.f |= EFFECT_TRANSPARENT;
- }
- }
- }
- if (e !== null) {
- e.parent = parent;
- if (parent !== null) {
- push_effect(e, parent);
- }
- if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
- var derived2 = (
- /** @type {Derived} */
- active_reaction
- );
- (derived2.effects ??= []).push(e);
- }
- }
- return effect;
-}
-function effect_tracking() {
- return active_reaction !== null && !untracking;
-}
-function create_user_effect(fn) {
- return create_effect(EFFECT | USER_EFFECT, fn);
-}
-function component_root(fn) {
- Batch.ensure();
- const effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);
- return (options = {}) => {
- return new Promise((fulfil) => {
- if (options.outro) {
- pause_effect(effect, () => {
- destroy_effect(effect);
- fulfil(void 0);
- });
- } else {
- destroy_effect(effect);
- fulfil(void 0);
- }
- });
- };
-}
-function render_effect(fn, flags = 0) {
- return create_effect(RENDER_EFFECT | flags, fn);
-}
-function block(fn, flags = 0) {
- var effect = create_effect(BLOCK_EFFECT | flags, fn);
- return effect;
-}
-function branch(fn) {
- return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);
-}
-function execute_effect_teardown(effect) {
- var teardown = effect.teardown;
- if (teardown !== null) {
- const previously_destroying_effect = is_destroying_effect;
- const previous_reaction = active_reaction;
- set_is_destroying_effect(true);
- set_active_reaction(null);
- try {
- teardown.call(null);
- } finally {
- set_is_destroying_effect(previously_destroying_effect);
- set_active_reaction(previous_reaction);
- }
- }
-}
-function destroy_effect_children(signal, remove_dom = false) {
- var effect = signal.first;
- signal.first = signal.last = null;
- while (effect !== null) {
- const controller2 = effect.ac;
- if (controller2 !== null) {
- without_reactive_context(() => {
- controller2.abort(STALE_REACTION);
- });
- }
- var next = effect.next;
- if ((effect.f & ROOT_EFFECT) !== 0) {
- effect.parent = null;
- } else {
- destroy_effect(effect, remove_dom);
- }
- effect = next;
- }
-}
-function destroy_block_effect_children(signal) {
- var effect = signal.first;
- while (effect !== null) {
- var next = effect.next;
- if ((effect.f & BRANCH_EFFECT) === 0) {
- destroy_effect(effect);
- }
- effect = next;
- }
-}
-function destroy_effect(effect, remove_dom = true) {
- var removed = false;
- if ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes !== null && effect.nodes.end !== null) {
- remove_effect_dom(
- effect.nodes.start,
- /** @type {TemplateNode} */
- effect.nodes.end
- );
- removed = true;
- }
- set_signal_status(effect, DESTROYING);
- destroy_effect_children(effect, remove_dom && !removed);
- remove_reactions(effect, 0);
- var transitions = effect.nodes && effect.nodes.t;
- if (transitions !== null) {
- for (const transition of transitions) {
- transition.stop();
- }
- }
- execute_effect_teardown(effect);
- effect.f ^= DESTROYING;
- effect.f |= DESTROYED;
- var parent = effect.parent;
- if (parent !== null && parent.first !== null) {
- unlink_effect(effect);
- }
- effect.next = effect.prev = effect.teardown = effect.ctx = effect.deps = effect.fn = effect.nodes = effect.ac = effect.b = null;
-}
-function remove_effect_dom(node, end) {
- while (node !== null) {
- var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
- node.remove();
- node = next;
- }
-}
-function unlink_effect(effect) {
- var parent = effect.parent;
- var prev = effect.prev;
- var next = effect.next;
- if (prev !== null) prev.next = next;
- if (next !== null) next.prev = prev;
- if (parent !== null) {
- if (parent.first === effect) parent.first = next;
- if (parent.last === effect) parent.last = prev;
- }
-}
-function pause_effect(effect, callback, destroy = true) {
- var transitions = [];
- pause_children(effect, transitions, true);
- var fn = () => {
- if (destroy) destroy_effect(effect);
- if (callback) callback();
- };
- var remaining = transitions.length;
- if (remaining > 0) {
- var check = () => --remaining || fn();
- for (var transition of transitions) {
- transition.out(check);
- }
- } else {
- fn();
- }
-}
-function pause_children(effect, transitions, local) {
- if ((effect.f & INERT) !== 0) return;
- effect.f ^= INERT;
- var t = effect.nodes && effect.nodes.t;
- if (t !== null) {
- for (const transition of t) {
- if (transition.is_global || local) {
- transitions.push(transition);
- }
- }
- }
- var child = effect.first;
- while (child !== null) {
- var sibling = child.next;
- var transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
- // it means the parent block effect was pruned. In that case,
- // transparency information was transferred to the branch effect.
- (child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0;
- pause_children(child, transitions, transparent ? local : false);
- child = sibling;
- }
-}
-function move_effect(effect, fragment) {
- if (!effect.nodes) return;
- var node = effect.nodes.start;
- var end = effect.nodes.end;
- while (node !== null) {
- var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node);
- fragment.append(node);
- node = next;
- }
-}
-let is_updating_effect = false;
-let is_destroying_effect = false;
-function set_is_destroying_effect(value) {
- is_destroying_effect = value;
-}
-let active_reaction = null;
-let untracking = false;
-function set_active_reaction(reaction) {
- active_reaction = reaction;
-}
-let active_effect = null;
-function set_active_effect(effect) {
- active_effect = effect;
-}
-let current_sources = null;
-function push_reaction_value(value) {
- if (active_reaction !== null && true) {
- if (current_sources === null) {
- current_sources = [value];
- } else {
- current_sources.push(value);
- }
- }
-}
-let new_deps = null;
-let skipped_deps = 0;
-let untracked_writes = null;
-function set_untracked_writes(value) {
- untracked_writes = value;
-}
-let write_version = 1;
-let read_version = 0;
-let update_version = read_version;
-function set_update_version(value) {
- update_version = value;
-}
-function increment_write_version() {
- return ++write_version;
-}
-function is_dirty(reaction) {
- var flags = reaction.f;
- if ((flags & DIRTY) !== 0) {
- return true;
- }
- if (flags & DERIVED) {
- reaction.f &= ~WAS_MARKED;
- }
- if ((flags & MAYBE_DIRTY) !== 0) {
- var dependencies = (
- /** @type {Value[]} */
- reaction.deps
- );
- var length = dependencies.length;
- for (var i = 0; i < length; i++) {
- var dependency = dependencies[i];
- if (is_dirty(
- /** @type {Derived} */
- dependency
- )) {
- update_derived(
- /** @type {Derived} */
- dependency
- );
- }
- if (dependency.wv > reaction.wv) {
- return true;
- }
- }
- if ((flags & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
- // traversal of the graph in the other batches still happens
- batch_values === null) {
- set_signal_status(reaction, CLEAN);
- }
- }
- return false;
-}
-function schedule_possible_effect_self_invalidation(signal, effect, root = true) {
- var reactions = signal.reactions;
- if (reactions === null) return;
- if (current_sources !== null && includes.call(current_sources, signal)) {
- return;
- }
- for (var i = 0; i < reactions.length; i++) {
- var reaction = reactions[i];
- if ((reaction.f & DERIVED) !== 0) {
- schedule_possible_effect_self_invalidation(
- /** @type {Derived} */
- reaction,
- effect,
- false
- );
- } else if (effect === reaction) {
- if (root) {
- set_signal_status(reaction, DIRTY);
- } else if ((reaction.f & CLEAN) !== 0) {
- set_signal_status(reaction, MAYBE_DIRTY);
- }
- schedule_effect(
- /** @type {Effect} */
- reaction
- );
- }
- }
-}
-function update_reaction(reaction) {
- var previous_deps = new_deps;
- var previous_skipped_deps = skipped_deps;
- var previous_untracked_writes = untracked_writes;
- var previous_reaction = active_reaction;
- var previous_sources = current_sources;
- var previous_component_context = component_context;
- var previous_untracking = untracking;
- var previous_update_version = update_version;
- var flags = reaction.f;
- new_deps = /** @type {null | Value[]} */
- null;
- skipped_deps = 0;
- untracked_writes = null;
- active_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
- current_sources = null;
- set_component_context(reaction.ctx);
- untracking = false;
- update_version = ++read_version;
- if (reaction.ac !== null) {
- without_reactive_context(() => {
- reaction.ac.abort(STALE_REACTION);
- });
- reaction.ac = null;
- }
- try {
- reaction.f |= REACTION_IS_UPDATING;
- var fn = (
- /** @type {Function} */
- reaction.fn
- );
- var result = fn();
- reaction.f |= REACTION_RAN;
- var deps = reaction.deps;
- var is_fork = current_batch?.is_fork;
- if (new_deps !== null) {
- var i;
- if (!is_fork) {
- remove_reactions(reaction, skipped_deps);
- }
- if (deps !== null && skipped_deps > 0) {
- deps.length = skipped_deps + new_deps.length;
- for (i = 0; i < new_deps.length; i++) {
- deps[skipped_deps + i] = new_deps[i];
- }
- } else {
- reaction.deps = deps = new_deps;
- }
- if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
- for (i = skipped_deps; i < deps.length; i++) {
- (deps[i].reactions ??= []).push(reaction);
- }
- }
- } else if (!is_fork && deps !== null && skipped_deps < deps.length) {
- remove_reactions(reaction, skipped_deps);
- deps.length = skipped_deps;
- }
- if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
- for (i = 0; i < /** @type {Source[]} */
- untracked_writes.length; i++) {
- schedule_possible_effect_self_invalidation(
- untracked_writes[i],
- /** @type {Effect} */
- reaction
- );
- }
- }
- if (previous_reaction !== null && previous_reaction !== reaction) {
- read_version++;
- if (previous_reaction.deps !== null) {
- for (let i2 = 0; i2 < previous_skipped_deps; i2 += 1) {
- previous_reaction.deps[i2].rv = read_version;
- }
- }
- if (previous_deps !== null) {
- for (const dep of previous_deps) {
- dep.rv = read_version;
- }
- }
- if (untracked_writes !== null) {
- if (previous_untracked_writes === null) {
- previous_untracked_writes = untracked_writes;
- } else {
- previous_untracked_writes.push(.../** @type {Source[]} */
- untracked_writes);
- }
- }
- }
- if ((reaction.f & ERROR_VALUE) !== 0) {
- reaction.f ^= ERROR_VALUE;
- }
- return result;
- } catch (error) {
- return handle_error(error);
- } finally {
- reaction.f ^= REACTION_IS_UPDATING;
- new_deps = previous_deps;
- skipped_deps = previous_skipped_deps;
- untracked_writes = previous_untracked_writes;
- active_reaction = previous_reaction;
- current_sources = previous_sources;
- set_component_context(previous_component_context);
- untracking = previous_untracking;
- update_version = previous_update_version;
- }
-}
-function remove_reaction(signal, dependency) {
- let reactions = dependency.reactions;
- if (reactions !== null) {
- var index = index_of.call(reactions, signal);
- if (index !== -1) {
- var new_length = reactions.length - 1;
- if (new_length === 0) {
- reactions = dependency.reactions = null;
- } else {
- reactions[index] = reactions[new_length];
- reactions.pop();
- }
- }
- }
- if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
- // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
- // allows us to skip the expensive work of disconnecting and immediately reconnecting it
- (new_deps === null || !includes.call(new_deps, dependency))) {
- var derived2 = (
- /** @type {Derived} */
- dependency
- );
- if ((derived2.f & CONNECTED) !== 0) {
- derived2.f ^= CONNECTED;
- derived2.f &= ~WAS_MARKED;
- }
- update_derived_status(derived2);
- freeze_derived_effects(derived2);
- remove_reactions(derived2, 0);
- }
-}
-function remove_reactions(signal, start_index) {
- var dependencies = signal.deps;
- if (dependencies === null) return;
- for (var i = start_index; i < dependencies.length; i++) {
- remove_reaction(signal, dependencies[i]);
- }
-}
-function update_effect(effect) {
- var flags = effect.f;
- if ((flags & DESTROYED) !== 0) {
- return;
- }
- set_signal_status(effect, CLEAN);
- var previous_effect = active_effect;
- var was_updating_effect = is_updating_effect;
- active_effect = effect;
- is_updating_effect = true;
- try {
- if ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
- destroy_block_effect_children(effect);
- } else {
- destroy_effect_children(effect);
- }
- execute_effect_teardown(effect);
- var teardown = update_reaction(effect);
- effect.teardown = typeof teardown === "function" ? teardown : null;
- effect.wv = write_version;
- var dep;
- if (BROWSER && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) ;
- } finally {
- is_updating_effect = was_updating_effect;
- active_effect = previous_effect;
- }
-}
-function get(signal) {
- var flags = signal.f;
- var is_derived = (flags & DERIVED) !== 0;
- if (active_reaction !== null && !untracking) {
- var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
- if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
- var deps = active_reaction.deps;
- if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
- if (signal.rv < read_version) {
- signal.rv = read_version;
- if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
- skipped_deps++;
- } else if (new_deps === null) {
- new_deps = [signal];
- } else {
- new_deps.push(signal);
- }
- }
- } else {
- (active_reaction.deps ??= []).push(signal);
- var reactions = signal.reactions;
- if (reactions === null) {
- signal.reactions = [active_reaction];
- } else if (!includes.call(reactions, active_reaction)) {
- reactions.push(active_reaction);
- }
- }
- }
- }
- if (is_destroying_effect && old_values.has(signal)) {
- return old_values.get(signal);
- }
- if (is_derived) {
- var derived2 = (
- /** @type {Derived} */
- signal
- );
- if (is_destroying_effect) {
- var value = derived2.v;
- if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
- value = execute_derived(derived2);
- }
- old_values.set(derived2, value);
- return value;
- }
- var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
- var is_new = (derived2.f & REACTION_RAN) === 0;
- if (is_dirty(derived2)) {
- if (should_connect) {
- derived2.f |= CONNECTED;
- }
- update_derived(derived2);
- }
- if (should_connect && !is_new) {
- unfreeze_derived_effects(derived2);
- reconnect(derived2);
- }
- }
- if (batch_values?.has(signal)) {
- return batch_values.get(signal);
- }
- if ((signal.f & ERROR_VALUE) !== 0) {
- throw signal.v;
- }
- return signal.v;
-}
-function reconnect(derived2) {
- derived2.f |= CONNECTED;
- if (derived2.deps === null) return;
- for (const dep of derived2.deps) {
- (dep.reactions ??= []).push(derived2);
- if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
- unfreeze_derived_effects(
- /** @type {Derived} */
- dep
- );
- reconnect(
- /** @type {Derived} */
- dep
- );
- }
- }
-}
-function depends_on_old_values(derived2) {
- if (derived2.v === UNINITIALIZED) return true;
- if (derived2.deps === null) return false;
- for (const dep of derived2.deps) {
- if (old_values.has(dep)) {
- return true;
- }
- if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
- /** @type {Derived} */
- dep
- )) {
- return true;
- }
- }
- return false;
-}
-function untrack(fn) {
- var previous_untracking = untracking;
- try {
- untracking = true;
- return fn();
- } finally {
- untracking = previous_untracking;
- }
-}
-function subscribe_to_store(store, run, invalidate) {
- if (store == null) {
- run(void 0);
- if (invalidate) invalidate(void 0);
- return noop;
- }
- const unsub = untrack(
- () => store.subscribe(
- run,
- // @ts-expect-error
- invalidate
- )
- );
- return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
-}
-const DOM_BOOLEAN_ATTRIBUTES = [
- "allowfullscreen",
- "async",
- "autofocus",
- "autoplay",
- "checked",
- "controls",
- "default",
- "disabled",
- "formnovalidate",
- "indeterminate",
- "inert",
- "ismap",
- "loop",
- "multiple",
- "muted",
- "nomodule",
- "novalidate",
- "open",
- "playsinline",
- "readonly",
- "required",
- "reversed",
- "seamless",
- "selected",
- "webkitdirectory",
- "defer",
- "disablepictureinpicture",
- "disableremoteplayback"
-];
-function is_boolean_attribute(name) {
- return DOM_BOOLEAN_ATTRIBUTES.includes(name);
-}
-const PASSIVE_EVENTS = ["touchstart", "touchmove"];
-function is_passive_event(name) {
- return PASSIVE_EVENTS.includes(name);
-}
-const ATTR_REGEX = /[&"<]/g;
-const CONTENT_REGEX = /[&<]/g;
-function escape_html(value, is_attr) {
- const str = String(value ?? "");
- const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;
- pattern.lastIndex = 0;
- let escaped = "";
- let last = 0;
- while (pattern.test(str)) {
- const i = pattern.lastIndex - 1;
- const ch = str[i];
- escaped += str.substring(last, i) + (ch === "&" ? "&" : ch === '"' ? """ : "<");
- last = i + 1;
- }
- return escaped + str.substring(last);
-}
-const replacements = {
- translate: /* @__PURE__ */ new Map([
- [true, "yes"],
- [false, "no"]
- ])
-};
-function attr(name, value, is_boolean = false) {
- if (name === "hidden" && value !== "until-found") {
- is_boolean = true;
- }
- if (value == null || !value && is_boolean) return "";
- const normalized = has_own_property.call(replacements, name) && replacements[name].get(value) || value;
- const assignment = is_boolean ? `=""` : `="${escape_html(normalized, true)}"`;
- return ` ${name}${assignment}`;
-}
-function clsx(value) {
- if (typeof value === "object") {
- return clsx$1(value);
- } else {
- return value ?? "";
- }
-}
-const whitespace = [..." \n\r\f \v\uFEFF"];
-function to_class(value, hash, directives) {
- var classname = value == null ? "" : "" + value;
- if (hash) {
- classname = classname ? classname + " " + hash : hash;
- }
- if (directives) {
- for (var key of Object.keys(directives)) {
- if (directives[key]) {
- classname = classname ? classname + " " + key : key;
- } else if (classname.length) {
- var len = key.length;
- var a = 0;
- while ((a = classname.indexOf(key, a)) >= 0) {
- var b = a + len;
- if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) {
- classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1);
- } else {
- a = b;
- }
- }
- }
- }
- }
- return classname === "" ? null : classname;
-}
-function append_styles(styles, important = false) {
- var separator = important ? " !important;" : ";";
- var css = "";
- for (var key of Object.keys(styles)) {
- var value = styles[key];
- if (value != null && value !== "") {
- css += " " + key + ": " + value + separator;
- }
- }
- return css;
-}
-function to_css_name(name) {
- if (name[0] !== "-" || name[1] !== "-") {
- return name.toLowerCase();
- }
- return name;
-}
-function to_style(value, styles) {
- if (styles) {
- var new_style = "";
- var normal_styles;
- var important_styles;
- if (Array.isArray(styles)) {
- normal_styles = styles[0];
- important_styles = styles[1];
- } else {
- normal_styles = styles;
- }
- if (value) {
- value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim();
- var in_str = false;
- var in_apo = 0;
- var in_comment = false;
- var reserved_names = [];
- if (normal_styles) {
- reserved_names.push(...Object.keys(normal_styles).map(to_css_name));
- }
- if (important_styles) {
- reserved_names.push(...Object.keys(important_styles).map(to_css_name));
- }
- var start_index = 0;
- var name_index = -1;
- const len = value.length;
- for (var i = 0; i < len; i++) {
- var c = value[i];
- if (in_comment) {
- if (c === "/" && value[i - 1] === "*") {
- in_comment = false;
- }
- } else if (in_str) {
- if (in_str === c) {
- in_str = false;
- }
- } else if (c === "/" && value[i + 1] === "*") {
- in_comment = true;
- } else if (c === '"' || c === "'") {
- in_str = c;
- } else if (c === "(") {
- in_apo++;
- } else if (c === ")") {
- in_apo--;
- }
- if (!in_comment && in_str === false && in_apo === 0) {
- if (c === ":" && name_index === -1) {
- name_index = i;
- } else if (c === ";" || i === len - 1) {
- if (name_index !== -1) {
- var name = to_css_name(value.substring(start_index, name_index).trim());
- if (!reserved_names.includes(name)) {
- if (c !== ";") {
- i++;
- }
- var property = value.substring(start_index, i).trim();
- new_style += " " + property + ";";
- }
- }
- start_index = i + 1;
- name_index = -1;
- }
- }
- }
- }
- if (normal_styles) {
- new_style += append_styles(normal_styles);
- }
- if (important_styles) {
- new_style += append_styles(important_styles, true);
- }
- new_style = new_style.trim();
- return new_style === "" ? null : new_style;
- }
- return value == null ? null : String(value);
-}
-const BLOCK_OPEN = ``;
-const BLOCK_CLOSE = ``;
-const EMPTY_COMMENT = ``;
-let controller = null;
-function abort() {
- controller?.abort(STALE_REACTION);
- controller = null;
-}
-function await_invalid() {
- const error = new Error(`await_invalid
-Encountered asynchronous work while rendering synchronously.
-https://svelte.dev/e/await_invalid`);
- error.name = "Svelte error";
- throw error;
-}
-function invalid_csp() {
- const error = new Error(`invalid_csp
-\`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously.
-https://svelte.dev/e/invalid_csp`);
- error.name = "Svelte error";
- throw error;
-}
-function server_context_required() {
- const error = new Error(`server_context_required
-Could not resolve \`render\` context.
-https://svelte.dev/e/server_context_required`);
- error.name = "Svelte error";
- throw error;
-}
-var ssr_context = null;
-function set_ssr_context(v) {
- ssr_context = v;
-}
-function getContext(key) {
- const context_map = get_or_init_context_map();
- const result = (
- /** @type {T} */
- context_map.get(key)
- );
- return result;
-}
-function setContext(key, context) {
- get_or_init_context_map().set(key, context);
- return context;
-}
-function get_or_init_context_map(name) {
- if (ssr_context === null) {
- lifecycle_outside_component();
- }
- return ssr_context.c ??= new Map(get_parent_context(ssr_context) || void 0);
-}
-function push(fn) {
- ssr_context = { p: ssr_context, c: null, r: null };
-}
-function pop() {
- ssr_context = /** @type {SSRContext} */
- ssr_context.p;
-}
-function get_parent_context(ssr_context2) {
- let parent = ssr_context2.p;
- while (parent !== null) {
- const context_map = parent.c;
- if (context_map !== null) {
- return context_map;
- }
- parent = parent.p;
- }
- return null;
-}
-function unresolved_hydratable(key, stack) {
- {
- console.warn(`https://svelte.dev/e/unresolved_hydratable`);
- }
-}
-function get_render_context() {
- const store = als?.getStore();
- {
- server_context_required();
- }
- return store;
-}
-let als = null;
-let text_encoder;
-let crypto;
-const obfuscated_import = (module_name) => import(
- /* @vite-ignore */
- module_name
-);
-async function sha256(data) {
- text_encoder ??= new TextEncoder();
- crypto ??= globalThis.crypto?.subtle?.digest ? globalThis.crypto : (
- // @ts-ignore - we don't install node types in the prod build
- // don't use import('node:crypto') directly because static analysers will think we rely on node when we don't
- (await obfuscated_import("node:crypto")).webcrypto
- );
- const hash_buffer = await crypto.subtle.digest("SHA-256", text_encoder.encode(data));
- return base64_encode(hash_buffer);
-}
-function base64_encode(bytes) {
- if (globalThis.Buffer) {
- return globalThis.Buffer.from(bytes).toString("base64");
- }
- let binary = "";
- for (let i = 0; i < bytes.length; i++) {
- binary += String.fromCharCode(bytes[i]);
- }
- return btoa(binary);
-}
-class Renderer {
- /**
- * The contents of the renderer.
- * @type {RendererItem[]}
- */
- #out = [];
- /**
- * Any `onDestroy` callbacks registered during execution of this renderer.
- * @type {(() => void)[] | undefined}
- */
- #on_destroy = void 0;
- /**
- * Whether this renderer is a component body.
- * @type {boolean}
- */
- #is_component_body = false;
- /**
- * If set, this renderer is an error boundary. When async collection
- * of the children fails, the failed snippet is rendered instead.
- * @type {{
- * failed: (renderer: Renderer, error: unknown, reset: () => void) => void;
- * transformError: (error: unknown) => unknown;
- * context: SSRContext | null;
- * } | null}
- */
- #boundary = null;
- /**
- * The type of string content that this renderer is accumulating.
- * @type {RendererType}
- */
- type;
- /** @type {Renderer | undefined} */
- #parent;
- /**
- * Asynchronous work associated with this renderer
- * @type {Promise | undefined}
- */
- promise = void 0;
- /**
- * State which is associated with the content tree as a whole.
- * It will be re-exposed, uncopied, on all children.
- * @type {SSRState}
- * @readonly
- */
- global;
- /**
- * State that is local to the branch it is declared in.
- * It will be shallow-copied to all children.
- *
- * @type {{ select_value: string | undefined }}
- */
- local;
- /**
- * @param {SSRState} global
- * @param {Renderer | undefined} [parent]
- */
- constructor(global, parent) {
- this.#parent = parent;
- this.global = global;
- this.local = parent ? { ...parent.local } : { select_value: void 0 };
- this.type = parent ? parent.type : "body";
- }
- /**
- * @param {(renderer: Renderer) => void} fn
- */
- head(fn) {
- const head2 = new Renderer(this.global, this);
- head2.type = "head";
- this.#out.push(head2);
- head2.child(fn);
- }
- /**
- * @param {Array>} blockers
- * @param {(renderer: Renderer) => void} fn
- */
- async_block(blockers, fn) {
- this.#out.push(BLOCK_OPEN);
- this.async(blockers, fn);
- this.#out.push(BLOCK_CLOSE);
- }
- /**
- * @param {Array>} blockers
- * @param {(renderer: Renderer) => void} fn
- */
- async(blockers, fn) {
- let callback = fn;
- if (blockers.length > 0) {
- const context = ssr_context;
- callback = (renderer) => {
- return Promise.all(blockers).then(() => {
- const previous_context = ssr_context;
- try {
- set_ssr_context(context);
- return fn(renderer);
- } finally {
- set_ssr_context(previous_context);
- }
- });
- };
- }
- this.child(callback);
- }
- /**
- * @param {Array<() => void>} thunks
- */
- run(thunks) {
- const context = ssr_context;
- let promise = Promise.resolve(thunks[0]());
- const promises = [promise];
- for (const fn of thunks.slice(1)) {
- promise = promise.then(() => {
- const previous_context = ssr_context;
- set_ssr_context(context);
- try {
- return fn();
- } finally {
- set_ssr_context(previous_context);
- }
- });
- promises.push(promise);
- }
- promise.catch(noop);
- this.promise = promise;
- return promises;
- }
- /**
- * @param {(renderer: Renderer) => MaybePromise} fn
- */
- child_block(fn) {
- this.#out.push(BLOCK_OPEN);
- this.child(fn);
- this.#out.push(BLOCK_CLOSE);
- }
- /**
- * Create a child renderer. The child renderer inherits the state from the parent,
- * but has its own content.
- * @param {(renderer: Renderer) => MaybePromise} fn
- */
- child(fn) {
- const child = new Renderer(this.global, this);
- this.#out.push(child);
- const parent = ssr_context;
- set_ssr_context({
- ...ssr_context,
- p: parent,
- c: null,
- r: child
- });
- const result = fn(child);
- set_ssr_context(parent);
- if (result instanceof Promise) {
- result.catch(noop);
- result.finally(() => set_ssr_context(null)).catch(noop);
- if (child.global.mode === "sync") {
- await_invalid();
- }
- child.promise = result;
- }
- return child;
- }
- /**
- * Render children inside an error boundary. If the children throw and the API-level
- * `transformError` transform handles the error (doesn't re-throw), the `failed` snippet is
- * rendered instead. Otherwise the error propagates.
- *
- * @param {{ failed?: (renderer: Renderer, error: unknown, reset: () => void) => void }} props
- * @param {(renderer: Renderer) => MaybePromise} children_fn
- */
- boundary(props, children_fn) {
- const child = new Renderer(this.global, this);
- this.#out.push(child);
- const parent_context = ssr_context;
- if (props.failed) {
- child.#boundary = {
- failed: props.failed,
- transformError: this.global.transformError,
- context: parent_context
- };
- }
- set_ssr_context({
- ...ssr_context,
- p: parent_context,
- c: null,
- r: child
- });
- try {
- const result = children_fn(child);
- set_ssr_context(parent_context);
- if (result instanceof Promise) {
- if (child.global.mode === "sync") {
- await_invalid();
- }
- result.catch(noop);
- child.promise = result;
- }
- } catch (error) {
- set_ssr_context(parent_context);
- const failed_snippet = props.failed;
- if (!failed_snippet) throw error;
- const result = this.global.transformError(error);
- child.#out.length = 0;
- child.#boundary = null;
- if (result instanceof Promise) {
- if (this.global.mode === "sync") {
- await_invalid();
- }
- child.promise = /** @type {Promise} */
- result.then((transformed) => {
- set_ssr_context(parent_context);
- child.#out.push(Renderer.#serialize_failed_boundary(transformed));
- failed_snippet(child, transformed, noop);
- child.#out.push(BLOCK_CLOSE);
- });
- child.promise.catch(noop);
- } else {
- child.#out.push(Renderer.#serialize_failed_boundary(result));
- failed_snippet(child, result, noop);
- child.#out.push(BLOCK_CLOSE);
- }
- }
- }
- /**
- * Create a component renderer. The component renderer inherits the state from the parent,
- * but has its own content. It is treated as an ordering boundary for ondestroy callbacks.
- * @param {(renderer: Renderer) => MaybePromise} fn
- * @param {Function} [component_fn]
- * @returns {void}
- */
- component(fn, component_fn) {
- push();
- const child = this.child(fn);
- child.#is_component_body = true;
- pop();
- }
- /**
- * @param {Record} attrs
- * @param {(renderer: Renderer) => void} fn
- * @param {string | undefined} [css_hash]
- * @param {Record | undefined} [classes]
- * @param {Record | undefined} [styles]
- * @param {number | undefined} [flags]
- * @param {boolean | undefined} [is_rich]
- * @returns {void}
- */
- select(attrs, fn, css_hash, classes, styles, flags, is_rich) {
- const { value, ...select_attrs } = attrs;
- this.push(``);
- this.child((renderer) => {
- renderer.local.select_value = value;
- fn(renderer);
- });
- this.push(`${is_rich ? "" : ""} `);
- }
- /**
- * @param {Record} attrs
- * @param {string | number | boolean | ((renderer: Renderer) => void)} body
- * @param {string | undefined} [css_hash]
- * @param {Record | undefined} [classes]
- * @param {Record | undefined} [styles]
- * @param {number | undefined} [flags]
- * @param {boolean | undefined} [is_rich]
- */
- option(attrs, body, css_hash, classes, styles, flags, is_rich) {
- this.#out.push(` {
- if (has_own_property.call(attrs, "value")) {
- value = attrs.value;
- }
- if (value === this.local.select_value) {
- renderer.#out.push(' selected=""');
- }
- renderer.#out.push(`>${body2}${is_rich ? "" : ""} `);
- if (head2) {
- renderer.head((child) => child.push(head2));
- }
- };
- if (typeof body === "function") {
- this.child((renderer) => {
- const r = new Renderer(this.global, this);
- body(r);
- if (this.global.mode === "async") {
- return r.#collect_content_async().then((content) => {
- close(renderer, content.body.replaceAll("", ""), content);
- });
- } else {
- const content = r.#collect_content();
- close(renderer, content.body.replaceAll("", ""), content);
- }
- });
- } else {
- close(this, body, { body: escape_html(body) });
- }
- }
- /**
- * @param {(renderer: Renderer) => void} fn
- */
- title(fn) {
- const path = this.get_path();
- const close = (head2) => {
- this.global.set_title(head2, path);
- };
- this.child((renderer) => {
- const r = new Renderer(renderer.global, renderer);
- fn(r);
- if (renderer.global.mode === "async") {
- return r.#collect_content_async().then((content) => {
- close(content.head);
- });
- } else {
- const content = r.#collect_content();
- close(content.head);
- }
- });
- }
- /**
- * @param {string | (() => Promise)} content
- */
- push(content) {
- if (typeof content === "function") {
- this.child(async (renderer) => renderer.push(await content()));
- } else {
- this.#out.push(content);
- }
- }
- /**
- * @param {() => void} fn
- */
- on_destroy(fn) {
- (this.#on_destroy ??= []).push(fn);
- }
- /**
- * @returns {number[]}
- */
- get_path() {
- return this.#parent ? [...this.#parent.get_path(), this.#parent.#out.indexOf(this)] : [];
- }
- /**
- * @deprecated this is needed for legacy component bindings
- */
- copy() {
- const copy = new Renderer(this.global, this.#parent);
- copy.#out = this.#out.map((item) => item instanceof Renderer ? item.copy() : item);
- copy.promise = this.promise;
- return copy;
- }
- /**
- * @param {Renderer} other
- * @deprecated this is needed for legacy component bindings
- */
- subsume(other) {
- if (this.global.mode !== other.global.mode) {
- throw new Error(
- "invariant: A renderer cannot switch modes. If you're seeing this, there's a compiler bug. File an issue!"
- );
- }
- this.local = other.local;
- this.#out = other.#out.map((item) => {
- if (item instanceof Renderer) {
- item.subsume(item);
- }
- return item;
- });
- this.promise = other.promise;
- this.type = other.type;
- }
- get length() {
- return this.#out.length;
- }
- /**
- * Creates the hydration comment that marks the start of a failed boundary.
- * The error is JSON-serialized and embedded inside an HTML comment for the client
- * to parse during hydration. The JSON is escaped to prevent `-->` or ``;
- }
- /**
- * Only available on the server and when compiling with the `server` option.
- * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.
- * @template {Record} Props
- * @param {Component} component
- * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp }} [options]
- * @returns {RenderOutput}
- */
- static render(component, options = {}) {
- let sync;
- const result = (
- /** @type {RenderOutput} */
- {}
- );
- Object.defineProperties(result, {
- html: {
- get: () => {
- return (sync ??= Renderer.#render(component, options)).body;
- }
- },
- head: {
- get: () => {
- return (sync ??= Renderer.#render(component, options)).head;
- }
- },
- body: {
- get: () => {
- return (sync ??= Renderer.#render(component, options)).body;
- }
- },
- hashes: {
- value: {
- script: ""
- }
- },
- then: {
- value: (
- /**
- * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function.
- *
- * @template TResult1
- * @template [TResult2=never]
- * @param { (value: SyncRenderOutput) => TResult1 } onfulfilled
- * @param { (reason: unknown) => TResult2 } onrejected
- */
- (onfulfilled, onrejected) => {
- {
- const result2 = sync ??= Renderer.#render(component, options);
- const user_result = onfulfilled({
- head: result2.head,
- body: result2.body,
- html: result2.body,
- hashes: { script: [] }
- });
- return Promise.resolve(user_result);
- }
- }
- )
- }
- });
- return result;
- }
- /**
- * Collect all of the `onDestroy` callbacks registered during rendering. In an async context, this is only safe to call
- * after awaiting `collect_async`.
- *
- * Child renderers are "porous" and don't affect execution order, but component body renderers
- * create ordering boundaries. Within a renderer, callbacks run in order until hitting a component boundary.
- * @returns {Iterable<() => void>}
- */
- *#collect_on_destroy() {
- for (const component of this.#traverse_components()) {
- yield* component.#collect_ondestroy();
- }
- }
- /**
- * Performs a depth-first search of renderers, yielding the deepest components first, then additional components as we backtrack up the tree.
- * @returns {Iterable}
- */
- *#traverse_components() {
- for (const child of this.#out) {
- if (typeof child !== "string") {
- yield* child.#traverse_components();
- }
- }
- if (this.#is_component_body) {
- yield this;
- }
- }
- /**
- * @returns {Iterable<() => void>}
- */
- *#collect_ondestroy() {
- if (this.#on_destroy) {
- for (const fn of this.#on_destroy) {
- yield fn;
- }
- }
- for (const child of this.#out) {
- if (child instanceof Renderer && !child.#is_component_body) {
- yield* child.#collect_ondestroy();
- }
- }
- }
- /**
- * Render a component. Throws if any of the children are performing asynchronous work.
- *
- * @template {Record} Props
- * @param {Component} component
- * @param {{ props?: Omit; context?: Map; idPrefix?: string }} options
- * @returns {AccumulatedContent}
- */
- static #render(component, options) {
- var previous_context = ssr_context;
- try {
- const renderer = Renderer.#open_render("sync", component, options);
- const content = renderer.#collect_content();
- return Renderer.#close_render(content, renderer);
- } finally {
- abort();
- set_ssr_context(previous_context);
- }
- }
- /**
- * Render a component.
- *
- * @template {Record} Props
- * @param {Component} component
- * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp }} options
- * @returns {Promise}
- */
- static async #render_async(component, options) {
- const previous_context = ssr_context;
- try {
- const renderer = Renderer.#open_render("async", component, options);
- const content = await renderer.#collect_content_async();
- const hydratables = await renderer.#collect_hydratables();
- if (hydratables !== null) {
- content.head = hydratables + content.head;
- }
- return Renderer.#close_render(content, renderer);
- } finally {
- set_ssr_context(previous_context);
- abort();
- }
- }
- /**
- * Collect all of the code from the `out` array and return it as a string, or a promise resolving to a string.
- * @param {AccumulatedContent} content
- * @returns {AccumulatedContent}
- */
- #collect_content(content = { head: "", body: "" }) {
- for (const item of this.#out) {
- if (typeof item === "string") {
- content[this.type] += item;
- } else if (item instanceof Renderer) {
- item.#collect_content(content);
- }
- }
- return content;
- }
- /**
- * Collect all of the code from the `out` array and return it as a string.
- * @param {AccumulatedContent} content
- * @returns {Promise}
- */
- async #collect_content_async(content = { head: "", body: "" }) {
- await this.promise;
- for (const item of this.#out) {
- if (typeof item === "string") {
- content[this.type] += item;
- } else if (item instanceof Renderer) {
- if (item.#boundary) {
- const boundary_content = { head: "", body: "" };
- try {
- await item.#collect_content_async(boundary_content);
- content.head += boundary_content.head;
- content.body += boundary_content.body;
- } catch (error) {
- const { context, failed, transformError } = item.#boundary;
- set_ssr_context(context);
- let transformed = await transformError(error);
- const failed_renderer = new Renderer(item.global, item);
- failed_renderer.type = item.type;
- failed_renderer.#out.push(Renderer.#serialize_failed_boundary(transformed));
- failed(failed_renderer, transformed, noop);
- failed_renderer.#out.push(BLOCK_CLOSE);
- await failed_renderer.#collect_content_async(content);
- }
- } else {
- await item.#collect_content_async(content);
- }
- }
- }
- return content;
- }
- async #collect_hydratables() {
- const ctx = get_render_context().hydratable;
- for (const [_, key] of ctx.unresolved_promises) {
- unresolved_hydratable(key, ctx.lookup.get(key)?.stack ?? "");
- }
- for (const comparison of ctx.comparisons) {
- await comparison;
- }
- return await this.#hydratable_block(ctx);
- }
- /**
- * @template {Record} Props
- * @param {'sync' | 'async'} mode
- * @param {import('svelte').Component} component
- * @param {{ props?: Omit; context?: Map; idPrefix?: string; csp?: Csp; transformError?: (error: unknown) => unknown }} options
- * @returns {Renderer}
- */
- static #open_render(mode, component, options) {
- var previous_context = ssr_context;
- try {
- const renderer = new Renderer(
- new SSRState(
- mode,
- options.idPrefix ? options.idPrefix + "-" : "",
- options.csp,
- options.transformError
- )
- );
- const context = { p: null, c: options.context ?? null, r: renderer };
- set_ssr_context(context);
- renderer.push(BLOCK_OPEN);
- component(renderer, options.props ?? {});
- renderer.push(BLOCK_CLOSE);
- return renderer;
- } finally {
- set_ssr_context(previous_context);
- }
- }
- /**
- * @param {AccumulatedContent} content
- * @param {Renderer} renderer
- * @returns {AccumulatedContent & { hashes: { script: Sha256Source[] } }}
- */
- static #close_render(content, renderer) {
- for (const cleanup of renderer.#collect_on_destroy()) {
- cleanup();
- }
- let head2 = content.head + renderer.global.get_title();
- let body = content.body;
- for (const { hash, code } of renderer.global.css) {
- head2 += ``;
- }
- return {
- head: head2,
- body,
- hashes: {
- script: renderer.global.csp.script_hashes
- }
- };
- }
- /**
- * @param {HydratableContext} ctx
- */
- async #hydratable_block(ctx) {
- if (ctx.lookup.size === 0) {
- return null;
- }
- let entries = [];
- let has_promises = false;
- for (const [k, v] of ctx.lookup) {
- if (v.promises) {
- has_promises = true;
- for (const p of v.promises) await p;
- }
- entries.push(`[${devalue.uneval(k)},${v.serialized}]`);
- }
- let prelude = `const h = (window.__svelte ??= {}).h ??= new Map();`;
- if (has_promises) {
- prelude = `const r = (v) => Promise.resolve(v);
- ${prelude}`;
- }
- const body = `
- {
- ${prelude}
-
- for (const [k, v] of [
- ${entries.join(",\n ")}
- ]) {
- h.set(k, v);
- }
- }
- `;
- let csp_attr = "";
- if (this.global.csp.nonce) {
- csp_attr = ` nonce="${this.global.csp.nonce}"`;
- } else if (this.global.csp.hash) {
- const hash = await sha256(body);
- this.global.csp.script_hashes.push(`sha256-${hash}`);
- }
- return `
-