~starkingdoms/starkingdoms

ea95cf279b1c21687826debb5db825fa057e6d3b — core 11 months ago 587a01e
new rendering infrastructure beginnings
155 files changed, 5924 insertions(+), 267 deletions(-)

M Cargo.lock
M Cargo.toml
A client/.gitignore
A client/.npmrc
A client/.prettierignore
A client/.prettierrc
A client/README.md
A client/components.json
A client/eslint.config.js
A client/package.json
A client/pnpm-lock.yaml
A client/postcss.config.js
A client/src/app.d.ts
A client/src/app.html
A client/src/lib/components/ui/button/Button.svelte
A client/src/lib/components/ui/button/button.svelte
A client/src/lib/components/ui/button/index.ts
A client/src/lib/components/ui/card/card-content.svelte
A client/src/lib/components/ui/card/card-description.svelte
A client/src/lib/components/ui/card/card-footer.svelte
A client/src/lib/components/ui/card/card-header.svelte
A client/src/lib/components/ui/card/card-title.svelte
A client/src/lib/components/ui/card/card.svelte
A client/src/lib/components/ui/card/index.ts
A client/src/lib/index.ts
A client/src/routes/(menu)/+page.svelte
A client/src/routes/(menu)/login/+page.svelte
R {starkingdoms-client/public => client/static}/favicon.ico
A client/static/favicon.png
A client/svelte.config.js
A client/tailwind.config.js
A client/tsconfig.json
A client/vite.config.ts
M kabel/Cargo.toml
M server/src/crafting/components.rs
M server/src/main.rs
M server/src/player/mod.rs
M server/src/player/packet.rs
R {starkingdoms-client => starkingdoms-client-js}/.gitignore
R {starkingdoms-client => starkingdoms-client-js}/.prettierignore
R {starkingdoms-client => starkingdoms-client-js}/.prettierrc
R {starkingdoms-client => starkingdoms-client-js}/Dockerfile
A starkingdoms-client-js/index.html
R {starkingdoms-client => starkingdoms-client-js}/login/index.html
R {starkingdoms-client => starkingdoms-client-js}/package.json
R {starkingdoms-client => starkingdoms-client-js}/play/index.html
A starkingdoms-client-js/public/favicon.ico
R {starkingdoms-client => starkingdoms-client-js}/shipeditor/index.html
R {starkingdoms-client => starkingdoms-client-js}/signup/index.html
R {starkingdoms-client => starkingdoms-client-js}/src/assets/autoplr_cfg.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/autoplr_error.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/autoplr_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/cargo_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/cargo_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/earth.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/earth_icon.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/ecothruster_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/editor_direction.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/hearty.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/hearty_ferris.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/hearty_party.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/hub_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/hub_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/landingleg.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/landingthruster_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/landingthruster_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/mars.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/mars_icon.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/missing.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/moon.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/moon_icon.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/powerhub_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/powerhub_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/starfield.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/starfield_dim.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/starfield_transp.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/sun.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/sun_rings.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/superthruster_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/superthruster_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/thruster_off.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/thruster_on.svg
R {starkingdoms-client => starkingdoms-client-js}/src/assets/trackindicator.svg
R {starkingdoms-client => starkingdoms-client-js}/src/components/Chatbox.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/Button.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/Checkbox.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/Column.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/ColumnTable.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/HorizontalGap.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/PasswordInput.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/Popup.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/TextInput.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/components/ui/VerticalRule.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/config.json
R {starkingdoms-client => starkingdoms-client-js}/src/config.ts
R {starkingdoms-client => starkingdoms-client-js}/src/css/chat.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/font.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/footer.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/form.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/game.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/globals.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/grid.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/hud.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/json.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/log.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/style.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/themes/catppuccin-mocha.scss
R {starkingdoms-client => starkingdoms-client-js}/src/css/utils.scss
R {starkingdoms-client => starkingdoms-client-js}/src/env.d.ts
R {starkingdoms-client => starkingdoms-client-js}/src/globals.ts
R {starkingdoms-client => starkingdoms-client-js}/src/hub.ts
R {starkingdoms-client => starkingdoms-client-js}/src/icons/ChevronDown.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/icons/ChevronUp.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/icons/HeartIcon.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/icons/MovableIcon.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/icons/WarningIcon.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/jwt.ts
R {starkingdoms-client => starkingdoms-client-js}/src/packet_ui.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/home.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/login.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/play.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/shipeditor.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/signup.ts
R {starkingdoms-client => starkingdoms-client-js}/src/page_loaders/uikit.ts
R {starkingdoms-client => starkingdoms-client-js}/src/pages/Home.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/pages/Login.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/pages/Play.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/pages/ShipEditor.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/pages/Signup.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/pages/UiKit.svelte
R {starkingdoms-client => starkingdoms-client-js}/src/planet_colors.ts
R {starkingdoms-client => starkingdoms-client-js}/src/protocol.ts
R {starkingdoms-client => starkingdoms-client-js}/src/rendering.ts
R {starkingdoms-client => starkingdoms-client-js}/src/save.ts
R {starkingdoms-client => starkingdoms-client-js}/src/textures.ts
R {starkingdoms-client => starkingdoms-client-js}/src/vite-env.d.ts
R {starkingdoms-client => starkingdoms-client-js}/svelte.config.js
R {starkingdoms-client => starkingdoms-client-js}/tsconfig.json
R {starkingdoms-client => starkingdoms-client-js}/uikit/index.html
R {starkingdoms-client => starkingdoms-client-js}/vite.config.ts
R {starkingdoms-client => starkingdoms-client-js}/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs
R {starkingdoms-client => starkingdoms-client-js}/yarn.lock
A starkingdoms-client/Cargo.toml
M starkingdoms-client/index.html
A starkingdoms-client/src/ecs.rs
A starkingdoms-client/src/input.rs
A starkingdoms-client/src/lib.rs
A starkingdoms-client/src/main.rs
A starkingdoms-client/src/native/mod.rs
A starkingdoms-client/src/shaders/sprite.wgsl
A starkingdoms-client/src/shaders/text_quad_mips.wgsl
A starkingdoms-client/src/textures/f.png
A starkingdoms-client/src/textures/happy-tree.png
A starkingdoms-client/src/textures/uv.png
A starkingdoms-client/src/wasm/mod.rs
M Cargo.lock => Cargo.lock +1985 -234
@@ 1,6 1,22 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
version = 4

[[package]]
name = "ab_glyph"
version = "0.2.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0"
dependencies = [
 "ab_glyph_rasterizer",
 "owned_ttf_parser",
]

[[package]]
name = "ab_glyph_rasterizer"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"

[[package]]
name = "accesskit"


@@ 53,7 69,7 @@ dependencies = [
 "accesskit_macos",
 "accesskit_windows",
 "raw-window-handle",
 "winit",
 "winit 0.29.15",
]

[[package]]


@@ 81,7 97,7 @@ checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370"
dependencies = [
 "actix-utils",
 "actix-web",
 "derive_more",
 "derive_more 0.99.18",
 "futures-util",
 "log",
 "once_cell",


@@ 104,7 120,7 @@ dependencies = [
 "brotli",
 "bytes",
 "bytestring",
 "derive_more",
 "derive_more 0.99.18",
 "encoding_rs",
 "flate2",
 "futures-core",


@@ 134,7 150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
dependencies = [
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 220,7 236,7 @@ dependencies = [
 "bytestring",
 "cfg-if",
 "cookie",
 "derive_more",
 "derive_more 0.99.18",
 "encoding_rs",
 "futures-core",
 "futures-util",


@@ 250,7 266,7 @@ dependencies = [
 "actix-router",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 269,12 285,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"

[[package]]
name = "adler2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"

[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
 "cfg-if",
 "const-random",
 "getrandom",
 "once_cell",
 "version_check",


@@ 291,6 314,12 @@ dependencies = [
]

[[package]]
name = "aligned-vec"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1"

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 325,11 354,32 @@ dependencies = [
 "jni-sys",
 "libc",
 "log",
 "ndk",
 "ndk 0.8.0",
 "ndk-context",
 "ndk-sys 0.5.0+25.2.9519653",
 "num_enum",
 "thiserror 1.0.69",
]

[[package]]
name = "android-activity"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
dependencies = [
 "android-properties",
 "bitflags 2.6.0",
 "cc",
 "cesu8",
 "jni",
 "jni-sys",
 "libc",
 "log",
 "ndk 0.9.0",
 "ndk-context",
 "ndk-sys",
 "ndk-sys 0.6.0+11769913",
 "num_enum",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 366,6 416,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"

[[package]]
name = "anyhow"
version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"

[[package]]
name = "approx"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 375,6 431,23 @@ dependencies = [
]

[[package]]
name = "arbitrary"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"

[[package]]
name = "arg_enum_proc_macro"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]
name = "argon2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 394,14 467,20 @@ checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"

[[package]]
name = "arrayvec"
version = "0.7.4"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
dependencies = [
 "serde",
]

[[package]]
name = "as-raw-xcb-connection"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"

[[package]]
name = "ash"
version = "0.37.3+1.3.251"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 411,6 490,26 @@ dependencies = [
]

[[package]]
name = "ash"
version = "0.38.0+1.3.281"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
dependencies = [
 "libloading 0.8.5",
]

[[package]]
name = "assert_type_match"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]
name = "async-broadcast"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 481,7 580,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 497,6 596,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"

[[package]]
name = "av1-grain"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf"
dependencies = [
 "anyhow",
 "arrayvec",
 "log",
 "nom",
 "num-rational",
 "v_frame",
]

[[package]]
name = "avif-serialize"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62"
dependencies = [
 "arrayvec",
]

[[package]]
name = "backtrace"
version = "0.3.73"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 506,7 628,7 @@ dependencies = [
 "cc",
 "cfg-if",
 "libc",
 "miniz_oxide",
 "miniz_oxide 0.7.4",
 "object",
 "rustc-demangle",
]


@@ 565,7 687,7 @@ dependencies = [
 "accesskit",
 "bevy_app",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
]

[[package]]


@@ 575,10 697,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab348a32e46d21c5d61794294a92d415a770d26c7ba8951830b127b40b53ccc4"
dependencies = [
 "bevy_derive",
 "bevy_ecs",
 "bevy_reflect",
 "bevy_tasks",
 "bevy_utils",
 "bevy_ecs 0.13.2",
 "bevy_reflect 0.13.2",
 "bevy_tasks 0.13.2",
 "bevy_utils 0.13.2",
 "downcast-rs",
 "wasm-bindgen",
 "web-sys",


@@ 595,11 717,11 @@ dependencies = [
 "async-lock",
 "bevy_app",
 "bevy_asset_macros",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_log",
 "bevy_reflect",
 "bevy_tasks",
 "bevy_utils",
 "bevy_reflect 0.13.2",
 "bevy_tasks 0.13.2",
 "bevy_utils 0.13.2",
 "bevy_winit",
 "blake3",
 "crossbeam-channel",


@@ 610,7 732,7 @@ dependencies = [
 "parking_lot",
 "ron",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",


@@ 622,10 744,10 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6617475908368418d815360148fdbb82f879dc255a70d2d7baa3766f0cd4bfd7"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 635,11 757,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12b0042f241ba7cd61487aadd8addfb56f7eeb662d713ac1577026704508fc6c"
dependencies = [
 "bevy_app",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_math",
 "bevy_reflect",
 "bevy_tasks",
 "bevy_utils",
 "bevy_reflect 0.13.2",
 "bevy_tasks 0.13.2",
 "bevy_utils 0.13.2",
 "bytemuck",
 "serde",
]


@@ 654,13 776,13 @@ dependencies = [
 "bevy_asset",
 "bevy_core",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_log",
 "bevy_math",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "bitflags 2.6.0",
 "radsort",
 "serde",


@@ 672,9 794,9 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0e01f8343f391e2d6a63b368b82fb5b252ed43c8713fc87f9a8f2d59407dd00"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 685,10 807,10 @@ checksum = "e1401cdccec7e49378d013dfb0ff62c251f85b3be19dcdf04cfd827f793d1ee9"
dependencies = [
 "bevy_app",
 "bevy_core",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_log",
 "bevy_time",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "const-fnv1a-hash",
 "sysinfo",
]


@@ 700,29 822,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98e612a8e7962ead849e370f3a7e972b88df879ced05cd9dad6a0286d14650cf"
dependencies = [
 "async-channel",
 "bevy_ecs_macros",
 "bevy_ptr",
 "bevy_reflect",
 "bevy_tasks",
 "bevy_utils",
 "bevy_ecs_macros 0.13.2",
 "bevy_ptr 0.13.2",
 "bevy_reflect 0.13.2",
 "bevy_tasks 0.13.2",
 "bevy_utils 0.13.2",
 "downcast-rs",
 "fixedbitset",
 "fixedbitset 0.4.2",
 "rustc-hash",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
 "thread_local",
]

[[package]]
name = "bevy_ecs"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b747210d7db09dfacc237707d4fd31c8b43d7744cd5e5829e2c4ca86b9e47baf"
dependencies = [
 "bevy_ecs_macros 0.15.1",
 "bevy_ptr 0.15.1",
 "bevy_reflect 0.15.1",
 "bevy_tasks 0.15.1",
 "bevy_utils 0.15.1",
 "bitflags 2.6.0",
 "concurrent-queue",
 "derive_more 1.0.0",
 "disqualified",
 "fixedbitset 0.5.7",
 "nonmax",
 "petgraph",
 "smallvec",
]

[[package]]
name = "bevy_ecs_macros"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "807b5106c3410e58f4f523b55ea3c071e2a09e31e9510f3c22021c6a04732b5b"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]
name = "bevy_ecs_macros"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d36ba5874ee278d20f17b8934d2969f8fbab90f3ea3fcf8d3583814b3661ada"
dependencies = [
 "bevy_macro_utils 0.15.1",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 731,7 886,7 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "887087a5e522d9f20733a84dd7e6e9ca04cd8fdfac659220ed87d675eebc83a7"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "encase_derive_impl",
]



@@ 745,15 900,15 @@ dependencies = [
 "bevy_asset",
 "bevy_core",
 "bevy_core_pipeline",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_gizmos_macros",
 "bevy_log",
 "bevy_math",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_sprite",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
]

[[package]]


@@ 762,10 917,10 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abdcaf74d8cd34aa5c3293527e7a012826840886ad3496c1b963ed8b66b1619f"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 776,10 931,10 @@ checksum = "bbb3dfad24866a6713dafa3065a91c5cf5e355f6e1b191c25d704ae54185246c"
dependencies = [
 "bevy_app",
 "bevy_core",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_log",
 "bevy_reflect",
 "bevy_utils",
 "bevy_reflect 0.13.2",
 "bevy_utils 0.13.2",
]

[[package]]


@@ 789,13 944,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47f2b2b3df168c6ef661d25e09abf5bd4fecaacd400f27e5db650df1c3fa3a3b"
dependencies = [
 "bevy_app",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_math",
 "bevy_reflect",
 "bevy_utils",
 "bevy_reflect 0.13.2",
 "bevy_utils 0.13.2",
 "serde",
 "smol_str",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 811,22 966,22 @@ dependencies = [
 "bevy_core_pipeline",
 "bevy_derive",
 "bevy_diagnostic",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_gizmos",
 "bevy_hierarchy",
 "bevy_input",
 "bevy_log",
 "bevy_math",
 "bevy_ptr",
 "bevy_reflect",
 "bevy_ptr 0.13.2",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_scene",
 "bevy_sprite",
 "bevy_tasks",
 "bevy_tasks 0.13.2",
 "bevy_time",
 "bevy_transform",
 "bevy_ui",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "bevy_window",
 "bevy_winit",
]


@@ 839,8 994,8 @@ checksum = "a5eea6c527fd828b7fef8d0f518167f27f405b904a16f227b644687d3f46a809"
dependencies = [
 "android_log-sys",
 "bevy_app",
 "bevy_ecs",
 "bevy_utils",
 "bevy_ecs 0.13.2",
 "bevy_utils 0.13.2",
 "console_error_panic_hook",
 "tracing-error",
 "tracing-log 0.1.4",


@@ 858,11 1013,23 @@ dependencies = [
 "proc-macro2",
 "quote",
 "rustc-hash",
 "syn 2.0.72",
 "syn 2.0.94",
 "toml_edit 0.21.1",
]

[[package]]
name = "bevy_macro_utils"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bdb3a681c24abace65bf18ed467ad8befbedb42468b32e459811bfdb01e506c"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "toml_edit 0.22.20",
]

[[package]]
name = "bevy_math"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 888,6 1055,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268"

[[package]]
name = "bevy_ptr"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa65df6a190b7dfc84d79f09cf02d47ae046fa86a613e202c31559e06d8d3710"

[[package]]
name = "bevy_rapier2d"
version = "0.25.0"
source = "git+https://github.com/ghostlyzsh/bevy_rapier.git#348c11dc7463a2c4b29c28cd118b4730c3d15035"


@@ 907,15 1080,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccbd7de21d586457a340a0962ad0747dc5098ff925eb6b27a918c4bdd8252f7b"
dependencies = [
 "bevy_math",
 "bevy_ptr",
 "bevy_reflect_derive",
 "bevy_utils",
 "bevy_ptr 0.13.2",
 "bevy_reflect_derive 0.13.2",
 "bevy_utils 0.13.2",
 "downcast-rs",
 "erased-serde",
 "glam",
 "serde",
 "smol_str",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]
name = "bevy_reflect"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bab3264acc3b6f48bc23fbd09fdfea6e5d9b7bfec142e4f3333f532acf195bca"
dependencies = [
 "assert_type_match",
 "bevy_ptr 0.15.1",
 "bevy_reflect_derive 0.15.1",
 "bevy_utils 0.15.1",
 "derive_more 1.0.0",
 "disqualified",
 "downcast-rs",
 "erased-serde",
 "serde",
 "smallvec",
]

[[package]]


@@ 924,10 1115,23 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ce33051bd49036d4a5a62aa3f2068672ec55f3ebe92aa0d003a341f15cc37ac"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "uuid",
]

[[package]]
name = "bevy_reflect_derive"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f83876a322130ab38a47d5dcf75258944bf76b3387d1acdb3750920fda63e2"
dependencies = [
 "bevy_macro_utils 0.15.1",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
 "uuid",
]



@@ 942,18 1146,18 @@ dependencies = [
 "bevy_asset",
 "bevy_core",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_encase_derive",
 "bevy_hierarchy",
 "bevy_log",
 "bevy_math",
 "bevy_mikktspace",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render_macros",
 "bevy_tasks",
 "bevy_tasks 0.13.2",
 "bevy_time",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "bevy_window",
 "bitflags 2.6.0",
 "bytemuck",


@@ 962,17 1166,17 @@ dependencies = [
 "encase",
 "futures-lite",
 "hexasphere",
 "image",
 "image 0.24.9",
 "js-sys",
 "naga",
 "naga 0.19.2",
 "naga_oil",
 "profiling",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
 "thread_local",
 "wasm-bindgen",
 "web-sys",
 "wgpu",
 "wgpu 0.19.4",
]

[[package]]


@@ 981,10 1185,10 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "720b88406e786e378829b7d43c1ffb5300186912b99904d0d4d8ec6698a4f210"
dependencies = [
 "bevy_macro_utils",
 "bevy_macro_utils 0.13.2",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 996,14 1200,14 @@ dependencies = [
 "bevy_app",
 "bevy_asset",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_hierarchy",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
 "uuid",
]



@@ 1017,20 1221,20 @@ dependencies = [
 "bevy_asset",
 "bevy_core_pipeline",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_log",
 "bevy_math",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "bitflags 2.6.0",
 "bytemuck",
 "fixedbitset",
 "fixedbitset 0.4.2",
 "guillotiere",
 "radsort",
 "rectangle-pack",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 1048,18 1252,31 @@ dependencies = [
]

[[package]]
name = "bevy_tasks"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b"
dependencies = [
 "async-executor",
 "futures-channel",
 "futures-lite",
 "pin-project",
 "wasm-bindgen-futures",
]

[[package]]
name = "bevy_time"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38ea5ae9fe7f56f555dbb05a88d34931907873e3f0c7dc426591839eef72fe3e"
dependencies = [
 "bevy_app",
 "bevy_ecs",
 "bevy_reflect",
 "bevy_utils",
 "bevy_ecs 0.13.2",
 "bevy_reflect 0.13.2",
 "bevy_utils 0.13.2",
 "crossbeam-channel",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 1069,12 1286,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0d51a1f332cc00939d2f19ed6b909e5ed7037e39c7e25cc86930d79d432163e"
dependencies = [
 "bevy_app",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_hierarchy",
 "bevy_math",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "serde",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 1088,21 1305,21 @@ dependencies = [
 "bevy_asset",
 "bevy_core_pipeline",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_hierarchy",
 "bevy_input",
 "bevy_log",
 "bevy_math",
 "bevy_reflect",
 "bevy_reflect 0.13.2",
 "bevy_render",
 "bevy_sprite",
 "bevy_transform",
 "bevy_utils",
 "bevy_utils 0.13.2",
 "bevy_window",
 "bytemuck",
 "serde",
 "taffy",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 1112,16 1329,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a9f845a985c00e0ee8dc2d8af3f417be925fb52aad4bda5b96e2e58a2b4d2eb"
dependencies = [
 "ahash",
 "bevy_utils_proc_macros",
 "bevy_utils_proc_macros 0.13.2",
 "getrandom",
 "hashbrown",
 "hashbrown 0.14.5",
 "nonmax",
 "petgraph",
 "smallvec",
 "thiserror",
 "thiserror 1.0.69",
 "tracing",
 "uuid",
 "web-time",
 "web-time 0.2.4",
]

[[package]]
name = "bevy_utils"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f01088c048960ea50ee847c3f668942ecf49ed26be12a1585a5e59b6a941d9a"
dependencies = [
 "ahash",
 "bevy_utils_proc_macros 0.15.1",
 "getrandom",
 "hashbrown 0.14.5",
 "thread_local",
 "tracing",
 "web-time 1.1.0",
]

[[package]]


@@ 1132,7 1364,18 @@ checksum = "bef158627f30503d5c18c20c60b444829f698d343516eeaf6eeee078c9a45163"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]
name = "bevy_utils_proc_macros"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0c3244d543cc964545b7aa074f6fb18a915a7121cf3de5d7ed37a4aae8662d"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]


@@ 1143,11 1386,11 @@ checksum = "976202d2ed838176595b550ac654b15ae236e0178a6f19a94ca6d58f2a96ca60"
dependencies = [
 "bevy_a11y",
 "bevy_app",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_input",
 "bevy_math",
 "bevy_reflect",
 "bevy_utils",
 "bevy_reflect 0.13.2",
 "bevy_utils 0.13.2",
 "raw-window-handle",
 "serde",
 "smol_str",


@@ 1164,18 1407,18 @@ dependencies = [
 "bevy_a11y",
 "bevy_app",
 "bevy_derive",
 "bevy_ecs",
 "bevy_ecs 0.13.2",
 "bevy_hierarchy",
 "bevy_input",
 "bevy_math",
 "bevy_tasks",
 "bevy_utils",
 "bevy_tasks 0.13.2",
 "bevy_utils 0.13.2",
 "bevy_window",
 "crossbeam-channel",
 "raw-window-handle",
 "wasm-bindgen",
 "web-sys",
 "winit",
 "winit 0.29.15",
]

[[package]]


@@ 1184,7 1427,16 @@ version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
dependencies = [
 "bit-vec",
 "bit-vec 0.6.3",
]

[[package]]
name = "bit-set"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
dependencies = [
 "bit-vec 0.8.0",
]

[[package]]


@@ 1197,6 1449,18 @@ dependencies = [
]

[[package]]
name = "bit-vec"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"

[[package]]
name = "bit_field"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"

[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1212,6 1476,12 @@ dependencies = [
]

[[package]]
name = "bitstream-io"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"

[[package]]
name = "blake2"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1287,6 1557,15 @@ dependencies = [
]

[[package]]
name = "block2"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
dependencies = [
 "objc2 0.5.2",
]

[[package]]
name = "blocking"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1321,6 1600,12 @@ dependencies = [
]

[[package]]
name = "built"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b"

[[package]]
name = "bumpalo"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1328,9 1613,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"

[[package]]
name = "bytemuck"
version = "1.16.3"
version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83"
checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
dependencies = [
 "bytemuck_derive",
]


@@ 1343,7 1628,7 @@ checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 1353,6 1638,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"

[[package]]
name = "byteorder-lite"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"

[[package]]
name = "bytes"
version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1378,7 1669,33 @@ dependencies = [
 "polling",
 "rustix",
 "slab",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]
name = "calloop"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
dependencies = [
 "bitflags 2.6.0",
 "log",
 "polling",
 "rustix",
 "slab",
 "thiserror 1.0.69",
]

[[package]]
name = "calloop-wayland-source"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
dependencies = [
 "calloop 0.13.0",
 "rustix",
 "wayland-backend",
 "wayland-client",
]

[[package]]


@@ 1404,6 1721,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"

[[package]]
name = "cfg-expr"
version = "0.15.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
dependencies = [
 "smallvec",
 "target-lexicon",
]

[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1416,6 1743,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"

[[package]]
name = "cfg_aliases"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"

[[package]]
name = "ciborium"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1550,6 1883,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca"

[[package]]
name = "const-random"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
dependencies = [
 "const-random-macro",
]

[[package]]
name = "const-random-macro"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
dependencies = [
 "getrandom",
 "once_cell",
 "tiny-keccak",
]

[[package]]
name = "const_panic"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1663,7 2016,7 @@ dependencies = [
 "clap",
 "criterion-plot",
 "is-terminal",
 "itertools",
 "itertools 0.10.5",
 "num-traits",
 "once_cell",
 "oorandom",


@@ 1684,7 2037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
dependencies = [
 "cast",
 "itertools",
 "itertools 0.10.5",
]

[[package]]


@@ 1801,19 2154,40 @@ dependencies = [
 "proc-macro2",
 "quote",
 "rustc_version",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]
name = "diesel"
version = "2.1.6"
name = "derive_more"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff236accb9a5069572099f0b350a92e9560e8e63a9b8d546162f4a5e03026bb2"
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
dependencies = [
 "bitflags 2.6.0",
 "byteorder",
 "diesel_derives",
 "itoa",
 "derive_more-impl",
]

[[package]]
name = "derive_more-impl"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
 "unicode-xid",
]

[[package]]
name = "diesel"
version = "2.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff236accb9a5069572099f0b350a92e9560e8e63a9b8d546162f4a5e03026bb2"
dependencies = [
 "bitflags 2.6.0",
 "byteorder",
 "diesel_derives",
 "itoa",
 "serde_json",
]



@@ 1841,7 2215,7 @@ dependencies = [
 "diesel_table_macro_syntax",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 1861,7 2235,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
dependencies = [
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 1882,6 2256,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"

[[package]]
name = "disqualified"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd"

[[package]]
name = "dlib"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1891,18 2271,101 @@ dependencies = [
]

[[package]]
name = "document-features"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0"
dependencies = [
 "litrs",
]

[[package]]
name = "downcast-rs"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"

[[package]]
name = "dpi"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53"

[[package]]
name = "ecolor"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d72e9c39f6e11a2e922d04a34ec5e7ef522ea3f5a1acfca7a19d16ad5fe50f5"
dependencies = [
 "bytemuck",
 "emath",
]

[[package]]
name = "egui"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "252d52224d35be1535d7fd1d6139ce071fb42c9097773e79f7665604f5596b5e"
dependencies = [
 "ahash",
 "emath",
 "epaint",
 "log",
 "nohash-hasher",
 "profiling",
]

[[package]]
name = "egui-wgpu"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26c1e821d2d8921ef6ce98b258c7e24d9d6aab2ca1f9cdf374eca997e7f67f59"
dependencies = [
 "ahash",
 "bytemuck",
 "document-features",
 "egui",
 "epaint",
 "log",
 "profiling",
 "thiserror 1.0.69",
 "type-map",
 "web-time 1.1.0",
 "wgpu 23.0.1",
]

[[package]]
name = "egui-winit"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e84c2919cd9f3a38a91e8f84ac6a245c19251fd95226ed9fae61d5ea564fce3"
dependencies = [
 "ahash",
 "egui",
 "log",
 "profiling",
 "raw-window-handle",
 "web-time 1.1.0",
 "webbrowser",
 "winit 0.30.8",
]

[[package]]
name = "either"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"

[[package]]
name = "emath"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4fe73c1207b864ee40aa0b0c038d6092af1030744678c60188a05c28553515d"
dependencies = [
 "bytemuck",
]

[[package]]
name = "encase"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1911,7 2374,7 @@ dependencies = [
 "const_panic",
 "encase_derive",
 "glam",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 1931,7 2394,7 @@ checksum = "92959a9e8d13eaa13b8ae8c7b583c3bf1669ca7a8e7708a088d12587ba86effc"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 1957,6 2420,30 @@ dependencies = [
]

[[package]]
name = "epaint"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5666f8d25236293c966fbb3635eac18b04ad1914e3bab55bc7d44b9980cafcac"
dependencies = [
 "ab_glyph",
 "ahash",
 "bytemuck",
 "ecolor",
 "emath",
 "epaint_default_fonts",
 "log",
 "nohash-hasher",
 "parking_lot",
 "profiling",
]

[[package]]
name = "epaint_default_fonts"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66f6ddac3e6ac6fd4c3d48bb8b1943472f8da0f43a4303bcd8a18aa594401c80"

[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2019,6 2506,21 @@ dependencies = [
]

[[package]]
name = "exr"
version = "1.73.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0"
dependencies = [
 "bit_field",
 "half",
 "lebe",
 "miniz_oxide 0.8.2",
 "rayon-core",
 "smallvec",
 "zune-inflate",
]

[[package]]
name = "fallible-iterator"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2031,19 2533,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"

[[package]]
name = "fdeflate"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
 "simd-adler32",
]

[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"

[[package]]
name = "fixedbitset"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"

[[package]]
name = "flate2"
version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920"
dependencies = [
 "crc32fast",
 "miniz_oxide",
 "miniz_oxide 0.7.4",
]

[[package]]


@@ 2053,6 2570,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"

[[package]]
name = "foldhash"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"

[[package]]
name = "foreign-types"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2070,7 2593,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 2131,7 2654,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 2185,6 2708,16 @@ dependencies = [
]

[[package]]
name = "gethostname"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
dependencies = [
 "libc",
 "windows-targets 0.48.5",
]

[[package]]
name = "getrandom"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2198,6 2731,16 @@ dependencies = [
]

[[package]]
name = "gif"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
dependencies = [
 "color_quant",
 "weezl",
]

[[package]]
name = "gimli"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2237,6 2780,18 @@ dependencies = [
]

[[package]]
name = "glow"
version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483"
dependencies = [
 "js-sys",
 "slotmap",
 "wasm-bindgen",
 "web-sys",
]

[[package]]
name = "glutin_wgl_sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2246,6 2801,15 @@ dependencies = [
]

[[package]]
name = "glutin_wgl_sys"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c"
dependencies = [
 "gl_generator",
]

[[package]]
name = "gpu-alloc"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2272,20 2836,43 @@ checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884"
dependencies = [
 "log",
 "presser",
 "thiserror",
 "thiserror 1.0.69",
 "winapi",
 "windows 0.52.0",
]

[[package]]
name = "gpu-allocator"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
dependencies = [
 "log",
 "presser",
 "thiserror 1.0.69",
 "windows 0.58.0",
]

[[package]]
name = "gpu-descriptor"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c"
dependencies = [
 "bitflags 2.6.0",
 "gpu-descriptor-types",
 "hashbrown",
 "gpu-descriptor-types 0.1.2",
 "hashbrown 0.14.5",
]

[[package]]
name = "gpu-descriptor"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca"
dependencies = [
 "bitflags 2.6.0",
 "gpu-descriptor-types 0.2.0",
 "hashbrown 0.15.2",
]

[[package]]


@@ 2298,6 2885,15 @@ dependencies = [
]

[[package]]
name = "gpu-descriptor-types"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
dependencies = [
 "bitflags 2.6.0",
]

[[package]]
name = "grid"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2354,6 2950,15 @@ dependencies = [
]

[[package]]
name = "hashbrown"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
dependencies = [
 "foldhash",
]

[[package]]
name = "hassle-rs"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2363,12 2968,18 @@ dependencies = [
 "com",
 "libc",
 "libloading 0.8.5",
 "thiserror",
 "thiserror 1.0.69",
 "widestring",
 "winapi",
]

[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"

[[package]]
name = "hermit-abi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2412,6 3023,15 @@ dependencies = [
]

[[package]]
name = "home"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
dependencies = [
 "windows-sys 0.59.0",
]

[[package]]
name = "http"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2485,13 3105,63 @@ dependencies = [
]

[[package]]
name = "image"
version = "0.25.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b"
dependencies = [
 "bytemuck",
 "byteorder-lite",
 "color_quant",
 "exr",
 "gif",
 "image-webp",
 "num-traits",
 "png",
 "qoi",
 "ravif",
 "rayon",
 "rgb",
 "tiff",
 "zune-core",
 "zune-jpeg",
]

[[package]]
name = "image-webp"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f"
dependencies = [
 "byteorder-lite",
 "quick-error",
]

[[package]]
name = "imgref"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"

[[package]]
name = "indexmap"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
dependencies = [
 "equivalent",
 "hashbrown",
 "hashbrown 0.14.5",
]

[[package]]
name = "interpolate_name"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]


@@ 2515,6 3185,15 @@ dependencies = [
]

[[package]]
name = "itertools"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
dependencies = [
 "either",
]

[[package]]
name = "itoa"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2531,7 3210,7 @@ dependencies = [
 "combine",
 "jni-sys",
 "log",
 "thiserror",
 "thiserror 1.0.69",
 "walkdir",
 "windows-sys 0.45.0",
]


@@ 2552,11 3231,18 @@ dependencies = [
]

[[package]]
name = "jpeg-decoder"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"

[[package]]
name = "js-sys"
version = "0.3.69"
version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
 "once_cell",
 "wasm-bindgen",
]



@@ 2613,12 3299,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"

[[package]]
name = "lebe"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"

[[package]]
name = "libc"
version = "0.2.155"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"

[[package]]
name = "libfuzzer-sys"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa"
dependencies = [
 "arbitrary",
 "cc",
]

[[package]]
name = "libloading"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2662,6 3364,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"

[[package]]
name = "litrs"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"

[[package]]
name = "local-channel"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2708,6 3416,15 @@ dependencies = [
]

[[package]]
name = "loop9"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
dependencies = [
 "imgref",
]

[[package]]
name = "malloc_buf"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2736,6 3453,16 @@ dependencies = [
]

[[package]]
name = "maybe-rayon"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
dependencies = [
 "cfg-if",
 "rayon",
]

[[package]]
name = "md-5"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2752,12 3479,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"

[[package]]
name = "metal"
version = "0.27.0"
name = "memmap2"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
dependencies = [
 "bitflags 2.6.0",
 "libc",
]

[[package]]
name = "metal"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
dependencies = [
 "bitflags 2.6.0",
 "block",
 "core-graphics-types",
 "foreign-types",
 "log",
 "objc",
 "paste",
]

[[package]]
name = "metal"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
dependencies = [
 "bitflags 2.6.0",
 "block",
 "core-graphics-types",
 "foreign-types",


@@ 2794,6 3545,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"

[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"

[[package]]
name = "miniz_oxide"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2803,6 3560,16 @@ dependencies = [
]

[[package]]
name = "miniz_oxide"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394"
dependencies = [
 "adler2",
 "simd-adler32",
]

[[package]]
name = "mio"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2821,7 3588,7 @@ version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843"
dependencies = [
 "bit-set",
 "bit-set 0.5.3",
 "bitflags 2.6.0",
 "codespan-reporting",
 "hexf-parse",


@@ 2832,7 3599,28 @@ dependencies = [
 "rustc-hash",
 "spirv",
 "termcolor",
 "thiserror",
 "thiserror 1.0.69",
 "unicode-xid",
]

[[package]]
name = "naga"
version = "23.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f"
dependencies = [
 "arrayvec",
 "bit-set 0.8.0",
 "bitflags 2.6.0",
 "cfg_aliases 0.1.1",
 "codespan-reporting",
 "hexf-parse",
 "indexmap",
 "log",
 "rustc-hash",
 "spirv",
 "termcolor",
 "thiserror 1.0.69",
 "unicode-xid",
]



@@ 2842,16 3630,16 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ea62ae0f2787456afca7209ca180522b41f00cbe159ee369eba1e07d365cd1"
dependencies = [
 "bit-set",
 "bit-set 0.5.3",
 "codespan-reporting",
 "data-encoding",
 "indexmap",
 "naga",
 "naga 0.19.2",
 "once_cell",
 "regex",
 "regex-syntax 0.8.4",
 "rustc-hash",
 "thiserror",
 "thiserror 1.0.69",
 "tracing",
 "unicode-ident",
]


@@ 2882,7 3670,7 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 2894,10 3682,25 @@ dependencies = [
 "bitflags 2.6.0",
 "jni-sys",
 "log",
 "ndk-sys",
 "ndk-sys 0.5.0+25.2.9519653",
 "num_enum",
 "raw-window-handle",
 "thiserror 1.0.69",
]

[[package]]
name = "ndk"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
 "bitflags 2.6.0",
 "jni-sys",
 "log",
 "ndk-sys 0.6.0+11769913",
 "num_enum",
 "raw-window-handle",
 "thiserror",
 "thiserror 1.0.69",
]

[[package]]


@@ 2916,12 3719,49 @@ dependencies = [
]

[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
dependencies = [
 "jni-sys",
]

[[package]]
name = "new_debug_unreachable"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"

[[package]]
name = "nohash-hasher"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"

[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
 "memchr",
 "minimal-lexical",
]

[[package]]
name = "nonmax"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"

[[package]]
name = "noop_proc_macro"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"

[[package]]
name = "ntapi"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2941,6 3781,16 @@ dependencies = [
]

[[package]]
name = "num-bigint"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
 "num-integer",
 "num-traits",
]

[[package]]
name = "num-complex"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2964,7 3814,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 2982,6 3832,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
 "num-bigint",
 "num-integer",
 "num-traits",
]


@@ 3014,7 3865,7 @@ dependencies = [
 "proc-macro-crate",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 3061,6 3912,92 @@ dependencies = [
]

[[package]]
name = "objc2"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
dependencies = [
 "objc-sys 0.3.5",
 "objc2-encode 4.0.3",
]

[[package]]
name = "objc2-app-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "libc",
 "objc2 0.5.2",
 "objc2-core-data",
 "objc2-core-image",
 "objc2-foundation",
 "objc2-quartz-core",
]

[[package]]
name = "objc2-cloud-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-core-location",
 "objc2-foundation",
]

[[package]]
name = "objc2-contacts"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
]

[[package]]
name = "objc2-core-data"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
]

[[package]]
name = "objc2-core-image"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-metal",
]

[[package]]
name = "objc2-core-location"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-contacts",
 "objc2-foundation",
]

[[package]]
name = "objc2-encode"
version = "2.0.0-pre.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3076,6 4013,117 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666"

[[package]]
name = "objc2-encode"
version = "4.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8"

[[package]]
name = "objc2-foundation"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "dispatch",
 "libc",
 "objc2 0.5.2",
]

[[package]]
name = "objc2-link-presentation"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-app-kit",
 "objc2-foundation",
]

[[package]]
name = "objc2-metal"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
]

[[package]]
name = "objc2-quartz-core"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
 "objc2-metal",
]

[[package]]
name = "objc2-symbols"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
dependencies = [
 "objc2 0.5.2",
 "objc2-foundation",
]

[[package]]
name = "objc2-ui-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-cloud-kit",
 "objc2-core-data",
 "objc2-core-image",
 "objc2-core-location",
 "objc2-foundation",
 "objc2-link-presentation",
 "objc2-quartz-core",
 "objc2-symbols",
 "objc2-uniform-type-identifiers",
 "objc2-user-notifications",
]

[[package]]
name = "objc2-uniform-type-identifiers"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
dependencies = [
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-foundation",
]

[[package]]
name = "objc2-user-notifications"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
 "bitflags 2.6.0",
 "block2 0.5.1",
 "objc2 0.5.2",
 "objc2-core-location",
 "objc2-foundation",
]

[[package]]
name = "objc_exception"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3095,9 4143,9 @@ dependencies = [

[[package]]
name = "once_cell"
version = "1.19.0"
version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"

[[package]]
name = "oorandom"


@@ 3121,6 4169,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"

[[package]]
name = "owned_ttf_parser"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
dependencies = [
 "ttf-parser",
]

[[package]]
name = "parking"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3200,7 4257,7 @@ version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [
 "fixedbitset",
 "fixedbitset 0.4.2",
 "indexmap",
]



@@ 3223,6 4280,26 @@ dependencies = [
]

[[package]]
name = "pin-project"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"
dependencies = [
 "pin-project-internal",
]

[[package]]
name = "pin-project-internal"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]
name = "pin-project-lite"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3280,6 4357,19 @@ dependencies = [
]

[[package]]
name = "png"
version = "0.17.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
dependencies = [
 "bitflags 1.3.2",
 "crc32fast",
 "fdeflate",
 "flate2",
 "miniz_oxide 0.8.2",
]

[[package]]
name = "polling"
version = "3.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3295,6 4385,12 @@ dependencies = [
]

[[package]]
name = "pollster"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"

[[package]]
name = "postgres-protocol"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3364,18 4460,18 @@ dependencies = [

[[package]]
name = "proc-macro2"
version = "1.0.86"
version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
 "unicode-ident",
]

[[package]]
name = "profiling"
version = "1.0.15"
version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58"
checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d"
dependencies = [
 "profiling-procmacros",
 "tracing",


@@ 3383,12 4479,36 @@ dependencies = [

[[package]]
name = "profiling-procmacros"
version = "1.0.15"
version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd"
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
dependencies = [
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]
name = "qoi"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
dependencies = [
 "bytemuck",
]

[[package]]
name = "quick-error"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"

[[package]]
name = "quick-xml"
version = "0.36.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
dependencies = [
 "memchr",
]

[[package]]


@@ 3449,7 4569,7 @@ source = "git+https://github.com/ghostlyzsh/rapier.git#0ac5a2906d4ffbfba346bf327
dependencies = [
 "approx",
 "arrayvec",
 "bit-vec",
 "bit-vec 0.6.3",
 "bitflags 1.3.2",
 "crossbeam",
 "downcast-rs",


@@ 3463,6 4583,56 @@ dependencies = [
]

[[package]]
name = "rav1e"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9"
dependencies = [
 "arbitrary",
 "arg_enum_proc_macro",
 "arrayvec",
 "av1-grain",
 "bitstream-io",
 "built",
 "cfg-if",
 "interpolate_name",
 "itertools 0.12.1",
 "libc",
 "libfuzzer-sys",
 "log",
 "maybe-rayon",
 "new_debug_unreachable",
 "noop_proc_macro",
 "num-derive",
 "num-traits",
 "once_cell",
 "paste",
 "profiling",
 "rand",
 "rand_chacha",
 "simd_helpers",
 "system-deps",
 "thiserror 1.0.69",
 "v_frame",
 "wasm-bindgen",
]

[[package]]
name = "ravif"
version = "0.11.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6"
dependencies = [
 "avif-serialize",
 "imgref",
 "loop9",
 "quick-error",
 "rav1e",
 "rayon",
 "rgb",
]

[[package]]
name = "raw-window-handle"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3584,6 4754,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"

[[package]]
name = "rgb"
version = "0.8.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a"

[[package]]
name = "rmp"
version = "0.8.14"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3723,6 4899,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"

[[package]]
name = "sctk-adwaita"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
dependencies = [
 "ab_glyph",
 "log",
 "memmap2",
 "smithay-client-toolkit",
 "tiny-skia",
]

[[package]]
name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3745,7 4934,7 @@ checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 3835,6 5024,21 @@ dependencies = [
]

[[package]]
name = "simd-adler32"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"

[[package]]
name = "simd_helpers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
dependencies = [
 "quote",
]

[[package]]
name = "siphasher"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3868,6 5072,31 @@ dependencies = [
]

[[package]]
name = "smithay-client-toolkit"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
dependencies = [
 "bitflags 2.6.0",
 "calloop 0.13.0",
 "calloop-wayland-source",
 "cursor-icon",
 "libc",
 "log",
 "memmap2",
 "rustix",
 "thiserror 1.0.69",
 "wayland-backend",
 "wayland-client",
 "wayland-csd-frame",
 "wayland-cursor",
 "wayland-protocols",
 "wayland-protocols-wlr",
 "wayland-scanner",
 "xkeysym",
]

[[package]]
name = "smol_str"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3892,7 5121,7 @@ version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "766195f983f4098dc3bf37fb66bd609f6e6258c4b8db684d05252b2c694cdbcd"
dependencies = [
 "hashbrown",
 "hashbrown 0.14.5",
 "num-traits",
 "robust",
 "smallvec",


@@ 3959,6 5188,29 @@ dependencies = [
]

[[package]]
name = "starkingdoms-client"
version = "0.1.0"
dependencies = [
 "bevy_ecs 0.15.1",
 "console_error_panic_hook",
 "egui",
 "egui-wgpu",
 "egui-winit",
 "image 0.25.5",
 "pollster",
 "thiserror 2.0.9",
 "tracing",
 "tracing-subscriber",
 "tracing-web",
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",
 "web-time 1.1.0",
 "wgpu 23.0.1",
 "winit 0.30.8",
]

[[package]]
name = "starkingdoms-common"
version = "0.1.0"
dependencies = [


@@ 3997,6 5249,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"

[[package]]
name = "strict-num"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"

[[package]]
name = "stringprep"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4032,9 5290,9 @@ dependencies = [

[[package]]
name = "syn"
version = "2.0.72"
version = "2.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af"
checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3"
dependencies = [
 "proc-macro2",
 "quote",


@@ 4056,6 5314,19 @@ dependencies = [
]

[[package]]
name = "system-deps"
version = "6.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
dependencies = [
 "cfg-expr",
 "heck",
 "pkg-config",
 "toml 0.8.19",
 "version-compare",
]

[[package]]
name = "taffy"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4068,6 5339,12 @@ dependencies = [
]

[[package]]
name = "target-lexicon"
version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"

[[package]]
name = "termcolor"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4084,28 5361,48 @@ checksum = "f9576037ae2a919664866c736156fd646d1c0e4e217244b1da05f56204dd6c61"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
 "unicode-ident",
]

[[package]]
name = "thiserror"
version = "1.0.63"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
 "thiserror-impl 1.0.69",
]

[[package]]
name = "thiserror"
version = "2.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
dependencies = [
 "thiserror-impl 2.0.9",
]

[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
 "thiserror-impl",
 "proc-macro2",
 "quote",
 "syn 2.0.94",
]

[[package]]
name = "thiserror-impl"
version = "1.0.63"
version = "2.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 4119,6 5416,17 @@ dependencies = [
]

[[package]]
name = "tiff"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
dependencies = [
 "flate2",
 "jpeg-decoder",
 "weezl",
]

[[package]]
name = "time"
version = "0.3.36"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4150,6 5458,40 @@ dependencies = [
]

[[package]]
name = "tiny-keccak"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
dependencies = [
 "crunchy",
]

[[package]]
name = "tiny-skia"
version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab"
dependencies = [
 "arrayref",
 "arrayvec",
 "bytemuck",
 "cfg-if",
 "log",
 "tiny-skia-path",
]

[[package]]
name = "tiny-skia-path"
version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93"
dependencies = [
 "arrayref",
 "bytemuck",
 "strict-num",
]

[[package]]
name = "tinytemplate"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4320,7 5662,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 4406,6 5748,19 @@ dependencies = [
]

[[package]]
name = "tracing-web"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e6a141feebd51f8d91ebfd785af50fca223c570b86852166caa3b141defe7c"
dependencies = [
 "js-sys",
 "tracing-core",
 "tracing-subscriber",
 "wasm-bindgen",
 "web-sys",
]

[[package]]
name = "tracy-client"
version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4426,6 5781,12 @@ dependencies = [
]

[[package]]
name = "ttf-parser"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"

[[package]]
name = "tungstenite"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4439,12 5800,21 @@ dependencies = [
 "log",
 "rand",
 "sha1",
 "thiserror",
 "thiserror 1.0.69",
 "url",
 "utf-8",
]

[[package]]
name = "type-map"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f"
dependencies = [
 "rustc-hash",
]

[[package]]
name = "typeid"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4497,9 5867,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"

[[package]]
name = "unicode-xid"
version = "0.2.4"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"

[[package]]
name = "url"


@@ 4529,12 5899,29 @@ dependencies = [
]

[[package]]
name = "v_frame"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b"
dependencies = [
 "aligned-vec",
 "num-traits",
 "wasm-bindgen",
]

[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"

[[package]]
name = "version-compare"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"

[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4564,46 5951,47 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"

[[package]]
name = "wasm-bindgen"
version = "0.2.92"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
 "cfg-if",
 "once_cell",
 "wasm-bindgen-macro",
]

[[package]]
name = "wasm-bindgen-backend"
version = "0.2.92"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
 "bumpalo",
 "log",
 "once_cell",
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
 "wasm-bindgen-shared",
]

[[package]]
name = "wasm-bindgen-futures"
version = "0.4.42"
version = "0.4.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
dependencies = [
 "cfg-if",
 "js-sys",
 "once_cell",
 "wasm-bindgen",
 "web-sys",
]

[[package]]
name = "wasm-bindgen-macro"
version = "0.2.92"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
 "quote",
 "wasm-bindgen-macro-support",


@@ 4611,28 5999,137 @@ dependencies = [

[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.92"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
 "wasm-bindgen-backend",
 "wasm-bindgen-shared",
]

[[package]]
name = "wasm-bindgen-shared"
version = "0.2.92"
version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"

[[package]]
name = "wayland-backend"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6"
dependencies = [
 "cc",
 "downcast-rs",
 "rustix",
 "scoped-tls",
 "smallvec",
 "wayland-sys",
]

[[package]]
name = "wayland-client"
version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280"
dependencies = [
 "bitflags 2.6.0",
 "rustix",
 "wayland-backend",
 "wayland-scanner",
]

[[package]]
name = "wayland-csd-frame"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
dependencies = [
 "bitflags 2.6.0",
 "cursor-icon",
 "wayland-backend",
]

[[package]]
name = "wayland-cursor"
version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c"
dependencies = [
 "rustix",
 "wayland-client",
 "xcursor",
]

[[package]]
name = "wayland-protocols"
version = "0.32.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e"
dependencies = [
 "bitflags 2.6.0",
 "wayland-backend",
 "wayland-client",
 "wayland-scanner",
]

[[package]]
name = "wayland-protocols-plasma"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd"
dependencies = [
 "bitflags 2.6.0",
 "wayland-backend",
 "wayland-client",
 "wayland-protocols",
 "wayland-scanner",
]

[[package]]
name = "wayland-protocols-wlr"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022"
dependencies = [
 "bitflags 2.6.0",
 "wayland-backend",
 "wayland-client",
 "wayland-protocols",
 "wayland-scanner",
]

[[package]]
name = "wayland-scanner"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3"
dependencies = [
 "proc-macro2",
 "quick-xml",
 "quote",
]

[[package]]
name = "wayland-sys"
version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09"
dependencies = [
 "dlib",
 "log",
 "once_cell",
 "pkg-config",
]

[[package]]
name = "web-sys"
version = "0.3.69"
version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
dependencies = [
 "js-sys",
 "wasm-bindgen",


@@ 4649,6 6146,40 @@ dependencies = [
]

[[package]]
name = "web-time"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
 "js-sys",
 "wasm-bindgen",
]

[[package]]
name = "webbrowser"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e"
dependencies = [
 "block2 0.5.1",
 "core-foundation",
 "home",
 "jni",
 "log",
 "ndk-context",
 "objc2 0.5.2",
 "objc2-foundation",
 "url",
 "web-sys",
]

[[package]]
name = "weezl"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"

[[package]]
name = "wgpu"
version = "0.19.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4656,10 6187,35 @@ checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01"
dependencies = [
 "arrayvec",
 "cfg-if",
 "cfg_aliases",
 "cfg_aliases 0.1.1",
 "js-sys",
 "log",
 "naga 0.19.2",
 "parking_lot",
 "profiling",
 "raw-window-handle",
 "smallvec",
 "static_assertions",
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",
 "wgpu-core 0.19.4",
 "wgpu-hal 0.19.5",
 "wgpu-types 0.19.2",
]

[[package]]
name = "wgpu"
version = "23.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a"
dependencies = [
 "arrayvec",
 "cfg_aliases 0.1.1",
 "document-features",
 "js-sys",
 "log",
 "naga",
 "naga 23.1.0",
 "parking_lot",
 "profiling",
 "raw-window-handle",


@@ 4668,9 6224,9 @@ dependencies = [
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",
 "wgpu-core",
 "wgpu-hal",
 "wgpu-types",
 "wgpu-core 23.0.1",
 "wgpu-hal 23.0.1",
 "wgpu-types 23.0.0",
]

[[package]]


@@ 4680,23 6236,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a"
dependencies = [
 "arrayvec",
 "bit-vec",
 "bit-vec 0.6.3",
 "bitflags 2.6.0",
 "cfg_aliases",
 "cfg_aliases 0.1.1",
 "codespan-reporting",
 "indexmap",
 "log",
 "naga",
 "naga 0.19.2",
 "once_cell",
 "parking_lot",
 "profiling",
 "raw-window-handle",
 "rustc-hash",
 "smallvec",
 "thiserror",
 "thiserror 1.0.69",
 "web-sys",
 "wgpu-hal",
 "wgpu-types",
 "wgpu-hal 0.19.5",
 "wgpu-types 0.19.2",
]

[[package]]
name = "wgpu-core"
version = "23.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a"
dependencies = [
 "arrayvec",
 "bit-vec 0.8.0",
 "bitflags 2.6.0",
 "cfg_aliases 0.1.1",
 "document-features",
 "indexmap",
 "log",
 "naga 23.1.0",
 "once_cell",
 "parking_lot",
 "profiling",
 "raw-window-handle",
 "rustc-hash",
 "smallvec",
 "thiserror 1.0.69",
 "wgpu-hal 23.0.1",
 "wgpu-types 23.0.0",
]

[[package]]


@@ 4707,27 6288,27 @@ checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703"
dependencies = [
 "android_system_properties",
 "arrayvec",
 "ash",
 "bit-set",
 "ash 0.37.3+1.3.251",
 "bit-set 0.5.3",
 "bitflags 2.6.0",
 "block",
 "cfg_aliases",
 "cfg_aliases 0.1.1",
 "core-graphics-types",
 "d3d12",
 "glow",
 "glutin_wgl_sys",
 "glow 0.13.1",
 "glutin_wgl_sys 0.5.0",
 "gpu-alloc",
 "gpu-allocator",
 "gpu-descriptor",
 "gpu-allocator 0.25.0",
 "gpu-descriptor 0.2.4",
 "hassle-rs",
 "js-sys",
 "khronos-egl",
 "libc",
 "libloading 0.8.5",
 "log",
 "metal",
 "naga",
 "ndk-sys",
 "metal 0.27.0",
 "naga 0.19.2",
 "ndk-sys 0.5.0+25.2.9519653",
 "objc",
 "once_cell",
 "parking_lot",


@@ 4737,14 6318,59 @@ dependencies = [
 "renderdoc-sys",
 "rustc-hash",
 "smallvec",
 "thiserror",
 "thiserror 1.0.69",
 "wasm-bindgen",
 "web-sys",
 "wgpu-types",
 "wgpu-types 0.19.2",
 "winapi",
]

[[package]]
name = "wgpu-hal"
version = "23.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821"
dependencies = [
 "android_system_properties",
 "arrayvec",
 "ash 0.38.0+1.3.281",
 "bit-set 0.8.0",
 "bitflags 2.6.0",
 "block",
 "bytemuck",
 "cfg_aliases 0.1.1",
 "core-graphics-types",
 "glow 0.14.2",
 "glutin_wgl_sys 0.6.0",
 "gpu-alloc",
 "gpu-allocator 0.27.0",
 "gpu-descriptor 0.3.1",
 "js-sys",
 "khronos-egl",
 "libc",
 "libloading 0.8.5",
 "log",
 "metal 0.29.0",
 "naga 23.1.0",
 "ndk-sys 0.5.0+25.2.9519653",
 "objc",
 "once_cell",
 "parking_lot",
 "profiling",
 "range-alloc",
 "raw-window-handle",
 "renderdoc-sys",
 "rustc-hash",
 "smallvec",
 "thiserror 1.0.69",
 "wasm-bindgen",
 "web-sys",
 "wgpu-types 23.0.0",
 "windows 0.58.0",
 "windows-core 0.58.0",
]

[[package]]
name = "wgpu-types"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4756,6 6382,17 @@ dependencies = [
]

[[package]]
name = "wgpu-types"
version = "23.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068"
dependencies = [
 "bitflags 2.6.0",
 "js-sys",
 "web-sys",
]

[[package]]
name = "whoami"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4885,7 6522,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 4907,7 6544,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 5149,11 6786,11 @@ version = "0.29.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca"
dependencies = [
 "android-activity",
 "android-activity 0.5.2",
 "atomic-waker",
 "bitflags 2.6.0",
 "calloop",
 "cfg_aliases",
 "calloop 0.12.4",
 "cfg_aliases 0.1.1",
 "core-foundation",
 "core-graphics",
 "cursor-icon",


@@ 5161,8 6798,8 @@ dependencies = [
 "js-sys",
 "libc",
 "log",
 "ndk",
 "ndk-sys",
 "ndk 0.8.0",
 "ndk-sys 0.5.0+25.2.9519653",
 "objc2 0.4.1",
 "once_cell",
 "orbclient",


@@ 5174,12 6811,64 @@ dependencies = [
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "web-sys",
 "web-time",
 "web-time 0.2.4",
 "windows-sys 0.48.0",
 "xkbcommon-dl",
]

[[package]]
name = "winit"
version = "0.30.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f"
dependencies = [
 "ahash",
 "android-activity 0.6.0",
 "atomic-waker",
 "bitflags 2.6.0",
 "block2 0.5.1",
 "bytemuck",
 "calloop 0.13.0",
 "cfg_aliases 0.2.1",
 "concurrent-queue",
 "core-foundation",
 "core-graphics",
 "cursor-icon",
 "dpi",
 "js-sys",
 "libc",
 "memmap2",
 "ndk 0.9.0",
 "objc2 0.5.2",
 "objc2-app-kit",
 "objc2-foundation",
 "objc2-ui-kit",
 "orbclient",
 "percent-encoding",
 "pin-project",
 "raw-window-handle",
 "redox_syscall 0.4.1",
 "rustix",
 "sctk-adwaita",
 "smithay-client-toolkit",
 "smol_str",
 "tracing",
 "unicode-segmentation",
 "wasm-bindgen",
 "wasm-bindgen-futures",
 "wayland-backend",
 "wayland-client",
 "wayland-protocols",
 "wayland-protocols-plasma",
 "web-sys",
 "web-time 1.1.0",
 "windows-sys 0.52.0",
 "x11-dl",
 "x11rb",
 "xkbcommon-dl",
]

[[package]]
name = "winnow"
version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 5198,6 6887,44 @@ dependencies = [
]

[[package]]
name = "x11-dl"
version = "2.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
dependencies = [
 "libc",
 "once_cell",
 "pkg-config",
]

[[package]]
name = "x11rb"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
dependencies = [
 "as-raw-xcb-connection",
 "gethostname",
 "libc",
 "libloading 0.8.5",
 "once_cell",
 "rustix",
 "x11rb-protocol",
]

[[package]]
name = "x11rb-protocol"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"

[[package]]
name = "xcursor"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61"

[[package]]
name = "xkbcommon-dl"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 5240,7 6967,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
 "proc-macro2",
 "quote",
 "syn 2.0.72",
 "syn 2.0.94",
]

[[package]]


@@ 5270,3 6997,27 @@ dependencies = [
 "cc",
 "pkg-config",
]

[[package]]
name = "zune-core"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"

[[package]]
name = "zune-inflate"
version = "0.2.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
dependencies = [
 "simd-adler32",
]

[[package]]
name = "zune-jpeg"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028"
dependencies = [
 "zune-core",
]

M Cargo.toml => Cargo.toml +5 -2
@@ 4,13 4,16 @@ members = [
    "starkingdoms-backplane",
    "starkingdoms-common",
    "savefile_decoder"
, "starkingdoms-api", "kabel"]
, "starkingdoms-api", "kabel", "starkingdoms-client"]
resolver = "2"

[profile.dev.package."*"]
opt-level = 3

[profile.release]
debug = "full"

[profile.release-ci]
inherits = "release"
codegen-units = 1
lto = "fat"
lto = "fat"
\ No newline at end of file

A client/.gitignore => client/.gitignore +21 -0
@@ 0,0 1,21 @@
node_modules

# Output
.output
.vercel
/.svelte-kit
/build

# OS
.DS_Store
Thumbs.db

# Env
.env
.env.*
!.env.example
!.env.test

# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

A client/.npmrc => client/.npmrc +1 -0
@@ 0,0 1,1 @@
engine-strict=true

A client/.prettierignore => client/.prettierignore +4 -0
@@ 0,0 1,4 @@
# Package Managers
package-lock.json
pnpm-lock.yaml
yarn.lock

A client/.prettierrc => client/.prettierrc +8 -0
@@ 0,0 1,8 @@
{
	"useTabs": true,
	"singleQuote": true,
	"trailingComma": "none",
	"printWidth": 100,
	"plugins": ["prettier-plugin-svelte"],
	"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}

A client/README.md => client/README.md +38 -0
@@ 0,0 1,38 @@
# create-svelte

Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).

## Creating a project

If you're seeing this, you've probably already done this step. Congrats!

```bash
# create a new project in the current directory
npm create svelte@latest

# create a new project in my-app
npm create svelte@latest my-app
```

## Developing

Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:

```bash
npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open
```

## Building

To create a production version of your app:

```bash
npm run build
```

You can preview the production build with `npm run preview`.

> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.

A client/components.json => client/components.json +14 -0
@@ 0,0 1,14 @@
{
	"$schema": "https://shadcn-svelte.com/schema.json",
	"style": "new-york",
	"tailwind": {
		"config": "tailwind.config.js",
		"css": "src/app.pcss",
		"baseColor": "slate"
	},
	"aliases": {
		"components": "$lib/components",
		"utils": "$lib/utils"
	},
	"typescript": true
}
\ No newline at end of file

A client/eslint.config.js => client/eslint.config.js +33 -0
@@ 0,0 1,33 @@
import js from '@eslint/js';
import ts from 'typescript-eslint';
import svelte from 'eslint-plugin-svelte';
import prettier from 'eslint-config-prettier';
import globals from 'globals';

/** @type {import('eslint').Linter.Config[]} */
export default [
	js.configs.recommended,
	...ts.configs.recommended,
	...svelte.configs['flat/recommended'],
	prettier,
	...svelte.configs['flat/prettier'],
	{
		languageOptions: {
			globals: {
				...globals.browser,
				...globals.node
			}
		}
	},
	{
		files: ['**/*.svelte'],
		languageOptions: {
			parserOptions: {
				parser: ts.parser
			}
		}
	},
	{
		ignores: ['build/', '.svelte-kit/', 'dist/']
	}
];

A client/package.json => client/package.json +46 -0
@@ 0,0 1,46 @@
{
	"name": "starkingdoms-client",
	"version": "0.0.1",
	"private": true,
	"scripts": {
		"dev": "vite dev",
		"build": "vite build",
		"preview": "vite preview",
		"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
		"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
		"lint": "prettier --check . && eslint .",
		"format": "prettier --write ."
	},
	"devDependencies": {
		"@sveltejs/adapter-auto": "^3.2.2",
		"@sveltejs/kit": "^2.5.18",
		"@sveltejs/vite-plugin-svelte": "^3.1.1",
		"@tailwindcss/forms": "^0.5.7",
		"@types/eslint": "^9.6.0",
		"autoprefixer": "^10.4.19",
		"eslint": "^9.8.0",
		"eslint-config-prettier": "^9.1.0",
		"eslint-plugin-svelte": "^2.43.0",
		"globals": "^15.8.0",
		"postcss": "^8.4.40",
		"prettier": "^3.3.3",
		"prettier-plugin-svelte": "^3.2.6",
		"svelte": "^4.2.18",
		"svelte-check": "^3.8.5",
		"tailwind-merge": "^2.4.0",
		"tailwind-variants": "^0.2.1",
		"tailwindcss": "^3.4.7",
		"typescript": "^5.5.4",
		"typescript-eslint": "^8.0.0",
		"vite": "^5.3.5"
	},
	"type": "module",
	"packageManager": "pnpm@9.6.0",
	"dependencies": {
		"bits-ui": "^0.21.13",
		"clsx": "^2.1.1",
		"debug": "^4.3.6",
		"lucide-svelte": "^0.418.0",
		"svelte-radix": "^1.1.0"
	}
}

A client/pnpm-lock.yaml => client/pnpm-lock.yaml +3003 -0
@@ 0,0 1,3003 @@
lockfileVersion: '9.0'

settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false

importers:

  .:
    dependencies:
      bits-ui:
        specifier: ^0.21.13
        version: 0.21.13(svelte@4.2.18)
      clsx:
        specifier: ^2.1.1
        version: 2.1.1
      debug:
        specifier: ^4.3.6
        version: 4.3.6
      lucide-svelte:
        specifier: ^0.418.0
        version: 0.418.0(svelte@4.2.18)
      svelte-radix:
        specifier: ^1.1.0
        version: 1.1.0(svelte@4.2.18)
    devDependencies:
      '@sveltejs/adapter-auto':
        specifier: ^3.2.2
        version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5))
      '@sveltejs/kit':
        specifier: ^2.5.18
        version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)
      '@sveltejs/vite-plugin-svelte':
        specifier: ^3.1.1
        version: 3.1.1(svelte@4.2.18)(vite@5.3.5)
      '@tailwindcss/forms':
        specifier: ^0.5.7
        version: 0.5.7(tailwindcss@3.4.7)
      '@types/eslint':
        specifier: ^9.6.0
        version: 9.6.0
      autoprefixer:
        specifier: ^10.4.19
        version: 10.4.19(postcss@8.4.40)
      eslint:
        specifier: ^9.8.0
        version: 9.8.0
      eslint-config-prettier:
        specifier: ^9.1.0
        version: 9.1.0(eslint@9.8.0)
      eslint-plugin-svelte:
        specifier: ^2.43.0
        version: 2.43.0(eslint@9.8.0)(svelte@4.2.18)
      globals:
        specifier: ^15.8.0
        version: 15.8.0
      postcss:
        specifier: ^8.4.40
        version: 8.4.40
      prettier:
        specifier: ^3.3.3
        version: 3.3.3
      prettier-plugin-svelte:
        specifier: ^3.2.6
        version: 3.2.6(prettier@3.3.3)(svelte@4.2.18)
      svelte:
        specifier: ^4.2.18
        version: 4.2.18
      svelte-check:
        specifier: ^3.8.5
        version: 3.8.5(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18)
      tailwind-merge:
        specifier: ^2.4.0
        version: 2.4.0
      tailwind-variants:
        specifier: ^0.2.1
        version: 0.2.1(tailwindcss@3.4.7)
      tailwindcss:
        specifier: ^3.4.7
        version: 3.4.7
      typescript:
        specifier: ^5.5.4
        version: 5.5.4
      typescript-eslint:
        specifier: ^8.0.0
        version: 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      vite:
        specifier: ^5.3.5
        version: 5.3.5

packages:

  '@alloc/quick-lru@5.2.0':
    resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
    engines: {node: '>=10'}

  '@ampproject/remapping@2.3.0':
    resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
    engines: {node: '>=6.0.0'}

  '@esbuild/aix-ppc64@0.21.5':
    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [aix]

  '@esbuild/android-arm64@0.21.5':
    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [android]

  '@esbuild/android-arm@0.21.5':
    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
    engines: {node: '>=12'}
    cpu: [arm]
    os: [android]

  '@esbuild/android-x64@0.21.5':
    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [android]

  '@esbuild/darwin-arm64@0.21.5':
    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [darwin]

  '@esbuild/darwin-x64@0.21.5':
    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [darwin]

  '@esbuild/freebsd-arm64@0.21.5':
    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [freebsd]

  '@esbuild/freebsd-x64@0.21.5':
    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [freebsd]

  '@esbuild/linux-arm64@0.21.5':
    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [linux]

  '@esbuild/linux-arm@0.21.5':
    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
    engines: {node: '>=12'}
    cpu: [arm]
    os: [linux]

  '@esbuild/linux-ia32@0.21.5':
    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [linux]

  '@esbuild/linux-loong64@0.21.5':
    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
    engines: {node: '>=12'}
    cpu: [loong64]
    os: [linux]

  '@esbuild/linux-mips64el@0.21.5':
    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
    engines: {node: '>=12'}
    cpu: [mips64el]
    os: [linux]

  '@esbuild/linux-ppc64@0.21.5':
    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [linux]

  '@esbuild/linux-riscv64@0.21.5':
    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
    engines: {node: '>=12'}
    cpu: [riscv64]
    os: [linux]

  '@esbuild/linux-s390x@0.21.5':
    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
    engines: {node: '>=12'}
    cpu: [s390x]
    os: [linux]

  '@esbuild/linux-x64@0.21.5':
    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [linux]

  '@esbuild/netbsd-x64@0.21.5':
    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [netbsd]

  '@esbuild/openbsd-x64@0.21.5':
    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [openbsd]

  '@esbuild/sunos-x64@0.21.5':
    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [sunos]

  '@esbuild/win32-arm64@0.21.5':
    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [win32]

  '@esbuild/win32-ia32@0.21.5':
    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [win32]

  '@esbuild/win32-x64@0.21.5':
    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [win32]

  '@eslint-community/eslint-utils@4.4.0':
    resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
    peerDependencies:
      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0

  '@eslint-community/regexpp@4.11.0':
    resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}

  '@eslint/config-array@0.17.1':
    resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@eslint/eslintrc@3.1.0':
    resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@eslint/js@9.8.0':
    resolution: {integrity: sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@eslint/object-schema@2.1.4':
    resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@floating-ui/core@1.6.5':
    resolution: {integrity: sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==}

  '@floating-ui/dom@1.6.8':
    resolution: {integrity: sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==}

  '@floating-ui/utils@0.2.5':
    resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==}

  '@humanwhocodes/module-importer@1.0.1':
    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
    engines: {node: '>=12.22'}

  '@humanwhocodes/retry@0.3.0':
    resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==}
    engines: {node: '>=18.18'}

  '@internationalized/date@3.5.5':
    resolution: {integrity: sha512-H+CfYvOZ0LTJeeLOqm19E3uj/4YjrmOFtBufDHPfvtI80hFAMqtrp7oCACpe4Cil5l8S0Qu/9dYfZc/5lY8WQQ==}

  '@isaacs/cliui@8.0.2':
    resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
    engines: {node: '>=12'}

  '@jridgewell/gen-mapping@0.3.5':
    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
    engines: {node: '>=6.0.0'}

  '@jridgewell/resolve-uri@3.1.2':
    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
    engines: {node: '>=6.0.0'}

  '@jridgewell/set-array@1.2.1':
    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
    engines: {node: '>=6.0.0'}

  '@jridgewell/sourcemap-codec@1.5.0':
    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}

  '@jridgewell/trace-mapping@0.3.25':
    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}

  '@melt-ui/svelte@0.76.2':
    resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==}
    peerDependencies:
      svelte: '>=3 <5'

  '@nodelib/fs.scandir@2.1.5':
    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
    engines: {node: '>= 8'}

  '@nodelib/fs.stat@2.0.5':
    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
    engines: {node: '>= 8'}

  '@nodelib/fs.walk@1.2.8':
    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
    engines: {node: '>= 8'}

  '@pkgjs/parseargs@0.11.0':
    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
    engines: {node: '>=14'}

  '@polka/url@1.0.0-next.25':
    resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}

  '@rollup/rollup-android-arm-eabi@4.19.1':
    resolution: {integrity: sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==}
    cpu: [arm]
    os: [android]

  '@rollup/rollup-android-arm64@4.19.1':
    resolution: {integrity: sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==}
    cpu: [arm64]
    os: [android]

  '@rollup/rollup-darwin-arm64@4.19.1':
    resolution: {integrity: sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==}
    cpu: [arm64]
    os: [darwin]

  '@rollup/rollup-darwin-x64@4.19.1':
    resolution: {integrity: sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==}
    cpu: [x64]
    os: [darwin]

  '@rollup/rollup-linux-arm-gnueabihf@4.19.1':
    resolution: {integrity: sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==}
    cpu: [arm]
    os: [linux]

  '@rollup/rollup-linux-arm-musleabihf@4.19.1':
    resolution: {integrity: sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==}
    cpu: [arm]
    os: [linux]

  '@rollup/rollup-linux-arm64-gnu@4.19.1':
    resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==}
    cpu: [arm64]
    os: [linux]

  '@rollup/rollup-linux-arm64-musl@4.19.1':
    resolution: {integrity: sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==}
    cpu: [arm64]
    os: [linux]

  '@rollup/rollup-linux-powerpc64le-gnu@4.19.1':
    resolution: {integrity: sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==}
    cpu: [ppc64]
    os: [linux]

  '@rollup/rollup-linux-riscv64-gnu@4.19.1':
    resolution: {integrity: sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==}
    cpu: [riscv64]
    os: [linux]

  '@rollup/rollup-linux-s390x-gnu@4.19.1':
    resolution: {integrity: sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==}
    cpu: [s390x]
    os: [linux]

  '@rollup/rollup-linux-x64-gnu@4.19.1':
    resolution: {integrity: sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==}
    cpu: [x64]
    os: [linux]

  '@rollup/rollup-linux-x64-musl@4.19.1':
    resolution: {integrity: sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==}
    cpu: [x64]
    os: [linux]

  '@rollup/rollup-win32-arm64-msvc@4.19.1':
    resolution: {integrity: sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==}
    cpu: [arm64]
    os: [win32]

  '@rollup/rollup-win32-ia32-msvc@4.19.1':
    resolution: {integrity: sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==}
    cpu: [ia32]
    os: [win32]

  '@rollup/rollup-win32-x64-msvc@4.19.1':
    resolution: {integrity: sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==}
    cpu: [x64]
    os: [win32]

  '@sveltejs/adapter-auto@3.2.2':
    resolution: {integrity: sha512-Mso5xPCA8zgcKrv+QioVlqMZkyUQ5MjDJiEPuG/Z7cV/5tmwV7LmcVWk5tZ+H0NCOV1x12AsoSpt/CwFwuVXMA==}
    peerDependencies:
      '@sveltejs/kit': ^2.0.0

  '@sveltejs/kit@2.5.18':
    resolution: {integrity: sha512-+g06hvpVAnH7b4CDjhnTDgFWBKBiQJpuSmQeGYOuzbO3SC3tdYjRNlDCrafvDtKbGiT2uxY5Dn9qdEUGVZdWOQ==}
    engines: {node: '>=18.13'}
    hasBin: true
    peerDependencies:
      '@sveltejs/vite-plugin-svelte': ^3.0.0
      svelte: ^4.0.0 || ^5.0.0-next.0
      vite: ^5.0.3

  '@sveltejs/vite-plugin-svelte-inspector@2.1.0':
    resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
    engines: {node: ^18.0.0 || >=20}
    peerDependencies:
      '@sveltejs/vite-plugin-svelte': ^3.0.0
      svelte: ^4.0.0 || ^5.0.0-next.0
      vite: ^5.0.0

  '@sveltejs/vite-plugin-svelte@3.1.1':
    resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==}
    engines: {node: ^18.0.0 || >=20}
    peerDependencies:
      svelte: ^4.0.0 || ^5.0.0-next.0
      vite: ^5.0.0

  '@swc/helpers@0.5.12':
    resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==}

  '@tailwindcss/forms@0.5.7':
    resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
    peerDependencies:
      tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'

  '@types/cookie@0.6.0':
    resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}

  '@types/eslint@9.6.0':
    resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==}

  '@types/estree@1.0.5':
    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}

  '@types/json-schema@7.0.15':
    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}

  '@types/pug@2.0.10':
    resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}

  '@typescript-eslint/eslint-plugin@8.0.0':
    resolution: {integrity: sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
      eslint: ^8.57.0 || ^9.0.0
      typescript: '*'
    peerDependenciesMeta:
      typescript:
        optional: true

  '@typescript-eslint/parser@8.0.0':
    resolution: {integrity: sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: '*'
    peerDependenciesMeta:
      typescript:
        optional: true

  '@typescript-eslint/scope-manager@8.0.0':
    resolution: {integrity: sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@typescript-eslint/type-utils@8.0.0':
    resolution: {integrity: sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '*'
    peerDependenciesMeta:
      typescript:
        optional: true

  '@typescript-eslint/types@8.0.0':
    resolution: {integrity: sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  '@typescript-eslint/typescript-estree@8.0.0':
    resolution: {integrity: sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '*'
    peerDependenciesMeta:
      typescript:
        optional: true

  '@typescript-eslint/utils@8.0.0':
    resolution: {integrity: sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0

  '@typescript-eslint/visitor-keys@8.0.0':
    resolution: {integrity: sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  acorn-jsx@5.3.2:
    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
    peerDependencies:
      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0

  acorn@8.12.1:
    resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
    engines: {node: '>=0.4.0'}
    hasBin: true

  ajv@6.12.6:
    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}

  ansi-regex@5.0.1:
    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
    engines: {node: '>=8'}

  ansi-regex@6.0.1:
    resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
    engines: {node: '>=12'}

  ansi-styles@4.3.0:
    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
    engines: {node: '>=8'}

  ansi-styles@6.2.1:
    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
    engines: {node: '>=12'}

  any-promise@1.3.0:
    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}

  anymatch@3.1.3:
    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
    engines: {node: '>= 8'}

  arg@5.0.2:
    resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}

  argparse@2.0.1:
    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}

  aria-query@5.3.0:
    resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}

  array-union@2.1.0:
    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
    engines: {node: '>=8'}

  autoprefixer@10.4.19:
    resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==}
    engines: {node: ^10 || ^12 || >=14}
    hasBin: true
    peerDependencies:
      postcss: ^8.1.0

  axobject-query@4.1.0:
    resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
    engines: {node: '>= 0.4'}

  balanced-match@1.0.2:
    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}

  binary-extensions@2.3.0:
    resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
    engines: {node: '>=8'}

  bits-ui@0.21.13:
    resolution: {integrity: sha512-7nmOh6Ig7ND4DXZHv1FhNsY9yUGrad0+mf3tc4YN//3MgnJT1LnHtk4HZAKgmxCOe7txSX7/39LtYHbkrXokAQ==}
    peerDependencies:
      svelte: ^4.0.0 || ^5.0.0-next.118

  brace-expansion@1.1.11:
    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}

  brace-expansion@2.0.1:
    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}

  braces@3.0.3:
    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
    engines: {node: '>=8'}

  browserslist@4.23.2:
    resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==}
    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
    hasBin: true

  buffer-crc32@1.0.0:
    resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
    engines: {node: '>=8.0.0'}

  callsites@3.1.0:
    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
    engines: {node: '>=6'}

  camelcase-css@2.0.1:
    resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
    engines: {node: '>= 6'}

  caniuse-lite@1.0.30001645:
    resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==}

  chalk@4.1.2:
    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
    engines: {node: '>=10'}

  chokidar@3.6.0:
    resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
    engines: {node: '>= 8.10.0'}

  clsx@2.1.1:
    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
    engines: {node: '>=6'}

  code-red@1.0.4:
    resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}

  color-convert@2.0.1:
    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
    engines: {node: '>=7.0.0'}

  color-name@1.1.4:
    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}

  commander@4.1.1:
    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
    engines: {node: '>= 6'}

  concat-map@0.0.1:
    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}

  cookie@0.6.0:
    resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
    engines: {node: '>= 0.6'}

  cross-spawn@7.0.3:
    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
    engines: {node: '>= 8'}

  css-tree@2.3.1:
    resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}

  cssesc@3.0.0:
    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
    engines: {node: '>=4'}
    hasBin: true

  debug@4.3.6:
    resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
    engines: {node: '>=6.0'}
    peerDependencies:
      supports-color: '*'
    peerDependenciesMeta:
      supports-color:
        optional: true

  deep-is@0.1.4:
    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}

  deepmerge@4.3.1:
    resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
    engines: {node: '>=0.10.0'}

  dequal@2.0.3:
    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
    engines: {node: '>=6'}

  detect-indent@6.1.0:
    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
    engines: {node: '>=8'}

  devalue@5.0.0:
    resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==}

  didyoumean@1.2.2:
    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}

  dir-glob@3.0.1:
    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
    engines: {node: '>=8'}

  dlv@1.1.3:
    resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}

  eastasianwidth@0.2.0:
    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}

  electron-to-chromium@1.5.4:
    resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==}

  emoji-regex@8.0.0:
    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}

  emoji-regex@9.2.2:
    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}

  es6-promise@3.3.1:
    resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}

  esbuild@0.21.5:
    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
    engines: {node: '>=12'}
    hasBin: true

  escalade@3.1.2:
    resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
    engines: {node: '>=6'}

  escape-string-regexp@4.0.0:
    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
    engines: {node: '>=10'}

  eslint-compat-utils@0.5.1:
    resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
    engines: {node: '>=12'}
    peerDependencies:
      eslint: '>=6.0.0'

  eslint-config-prettier@9.1.0:
    resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
    hasBin: true
    peerDependencies:
      eslint: '>=7.0.0'

  eslint-plugin-svelte@2.43.0:
    resolution: {integrity: sha512-REkxQWvg2pp7QVLxQNa+dJ97xUqRe7Y2JJbSWkHSuszu0VcblZtXkPBPckkivk99y5CdLw4slqfPylL2d/X4jQ==}
    engines: {node: ^14.17.0 || >=16.0.0}
    peerDependencies:
      eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0
      svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
    peerDependenciesMeta:
      svelte:
        optional: true

  eslint-scope@7.2.2:
    resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}

  eslint-scope@8.0.2:
    resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  eslint-visitor-keys@3.4.3:
    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}

  eslint-visitor-keys@4.0.0:
    resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  eslint@9.8.0:
    resolution: {integrity: sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    hasBin: true

  esm-env@1.0.0:
    resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}

  espree@10.1.0:
    resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}

  espree@9.6.1:
    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}

  esquery@1.6.0:
    resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
    engines: {node: '>=0.10'}

  esrecurse@4.3.0:
    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
    engines: {node: '>=4.0'}

  estraverse@5.3.0:
    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
    engines: {node: '>=4.0'}

  estree-walker@3.0.3:
    resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}

  esutils@2.0.3:
    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
    engines: {node: '>=0.10.0'}

  fast-deep-equal@3.1.3:
    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}

  fast-glob@3.3.2:
    resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
    engines: {node: '>=8.6.0'}

  fast-json-stable-stringify@2.1.0:
    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}

  fast-levenshtein@2.0.6:
    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}

  fastq@1.17.1:
    resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}

  file-entry-cache@8.0.0:
    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
    engines: {node: '>=16.0.0'}

  fill-range@7.1.1:
    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
    engines: {node: '>=8'}

  find-up@5.0.0:
    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
    engines: {node: '>=10'}

  flat-cache@4.0.1:
    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
    engines: {node: '>=16'}

  flatted@3.3.1:
    resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}

  focus-trap@7.5.4:
    resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}

  foreground-child@3.2.1:
    resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
    engines: {node: '>=14'}

  fraction.js@4.3.7:
    resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}

  fs.realpath@1.0.0:
    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}

  fsevents@2.3.3:
    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
    os: [darwin]

  function-bind@1.1.2:
    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}

  glob-parent@5.1.2:
    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
    engines: {node: '>= 6'}

  glob-parent@6.0.2:
    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
    engines: {node: '>=10.13.0'}

  glob@10.4.5:
    resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
    hasBin: true

  glob@7.2.3:
    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
    deprecated: Glob versions prior to v9 are no longer supported

  globals@14.0.0:
    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
    engines: {node: '>=18'}

  globals@15.8.0:
    resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==}
    engines: {node: '>=18'}

  globalyzer@0.1.0:
    resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}

  globby@11.1.0:
    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
    engines: {node: '>=10'}

  globrex@0.1.2:
    resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}

  graceful-fs@4.2.11:
    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}

  graphemer@1.4.0:
    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}

  has-flag@4.0.0:
    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
    engines: {node: '>=8'}

  hasown@2.0.2:
    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
    engines: {node: '>= 0.4'}

  ignore@5.3.1:
    resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
    engines: {node: '>= 4'}

  import-fresh@3.3.0:
    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
    engines: {node: '>=6'}

  import-meta-resolve@4.1.0:
    resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}

  imurmurhash@0.1.4:
    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
    engines: {node: '>=0.8.19'}

  inflight@1.0.6:
    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
    deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.

  inherits@2.0.4:
    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}

  is-binary-path@2.1.0:
    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
    engines: {node: '>=8'}

  is-core-module@2.15.0:
    resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==}
    engines: {node: '>= 0.4'}

  is-extglob@2.1.1:
    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
    engines: {node: '>=0.10.0'}

  is-fullwidth-code-point@3.0.0:
    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
    engines: {node: '>=8'}

  is-glob@4.0.3:
    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
    engines: {node: '>=0.10.0'}

  is-number@7.0.0:
    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
    engines: {node: '>=0.12.0'}

  is-path-inside@3.0.3:
    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
    engines: {node: '>=8'}

  is-reference@3.0.2:
    resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}

  isexe@2.0.0:
    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}

  jackspeak@3.4.3:
    resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}

  jiti@1.21.6:
    resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
    hasBin: true

  js-yaml@4.1.0:
    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
    hasBin: true

  json-buffer@3.0.1:
    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}

  json-schema-traverse@0.4.1:
    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}

  json-stable-stringify-without-jsonify@1.0.1:
    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}

  keyv@4.5.4:
    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}

  kleur@4.1.5:
    resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
    engines: {node: '>=6'}

  known-css-properties@0.34.0:
    resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==}

  levn@0.4.1:
    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
    engines: {node: '>= 0.8.0'}

  lilconfig@2.1.0:
    resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
    engines: {node: '>=10'}

  lilconfig@3.1.2:
    resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
    engines: {node: '>=14'}

  lines-and-columns@1.2.4:
    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}

  locate-character@3.0.0:
    resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}

  locate-path@6.0.0:
    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
    engines: {node: '>=10'}

  lodash.merge@4.6.2:
    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}

  lru-cache@10.4.3:
    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}

  lucide-svelte@0.418.0:
    resolution: {integrity: sha512-kQBuv2PFVmRqd2GSTmRwG8lZBi3w9iYIDeEm789VtnmgXS0gzZaTazdrCRfRIcLT1XEdJUi2lD1G1C8ACMy5DQ==}
    peerDependencies:
      svelte: ^3 || ^4 || ^5.0.0-next.42

  magic-string@0.30.11:
    resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}

  mdn-data@2.0.30:
    resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}

  merge2@1.4.1:
    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
    engines: {node: '>= 8'}

  micromatch@4.0.7:
    resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
    engines: {node: '>=8.6'}

  min-indent@1.0.1:
    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
    engines: {node: '>=4'}

  mini-svg-data-uri@1.4.4:
    resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
    hasBin: true

  minimatch@3.1.2:
    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}

  minimatch@9.0.5:
    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
    engines: {node: '>=16 || 14 >=14.17'}

  minimist@1.2.8:
    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}

  minipass@7.1.2:
    resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
    engines: {node: '>=16 || 14 >=14.17'}

  mkdirp@0.5.6:
    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
    hasBin: true

  mri@1.2.0:
    resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
    engines: {node: '>=4'}

  mrmime@2.0.0:
    resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
    engines: {node: '>=10'}

  ms@2.1.2:
    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}

  mz@2.7.0:
    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}

  nanoid@3.3.7:
    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
    hasBin: true

  nanoid@5.0.7:
    resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==}
    engines: {node: ^18 || >=20}
    hasBin: true

  natural-compare@1.4.0:
    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}

  node-releases@2.0.18:
    resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}

  normalize-path@3.0.0:
    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
    engines: {node: '>=0.10.0'}

  normalize-range@0.1.2:
    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
    engines: {node: '>=0.10.0'}

  object-assign@4.1.1:
    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
    engines: {node: '>=0.10.0'}

  object-hash@3.0.0:
    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
    engines: {node: '>= 6'}

  once@1.4.0:
    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}

  optionator@0.9.4:
    resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
    engines: {node: '>= 0.8.0'}

  p-limit@3.1.0:
    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
    engines: {node: '>=10'}

  p-locate@5.0.0:
    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
    engines: {node: '>=10'}

  package-json-from-dist@1.0.0:
    resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}

  parent-module@1.0.1:
    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
    engines: {node: '>=6'}

  path-exists@4.0.0:
    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
    engines: {node: '>=8'}

  path-is-absolute@1.0.1:
    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
    engines: {node: '>=0.10.0'}

  path-key@3.1.1:
    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
    engines: {node: '>=8'}

  path-parse@1.0.7:
    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}

  path-scurry@1.11.1:
    resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
    engines: {node: '>=16 || 14 >=14.18'}

  path-type@4.0.0:
    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
    engines: {node: '>=8'}

  periscopic@3.1.0:
    resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}

  picocolors@1.0.1:
    resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}

  picomatch@2.3.1:
    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
    engines: {node: '>=8.6'}

  pify@2.3.0:
    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
    engines: {node: '>=0.10.0'}

  pirates@4.0.6:
    resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
    engines: {node: '>= 6'}

  postcss-import@15.1.0:
    resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
    engines: {node: '>=14.0.0'}
    peerDependencies:
      postcss: ^8.0.0

  postcss-js@4.0.1:
    resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
    engines: {node: ^12 || ^14 || >= 16}
    peerDependencies:
      postcss: ^8.4.21

  postcss-load-config@3.1.4:
    resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
    engines: {node: '>= 10'}
    peerDependencies:
      postcss: '>=8.0.9'
      ts-node: '>=9.0.0'
    peerDependenciesMeta:
      postcss:
        optional: true
      ts-node:
        optional: true

  postcss-load-config@4.0.2:
    resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
    engines: {node: '>= 14'}
    peerDependencies:
      postcss: '>=8.0.9'
      ts-node: '>=9.0.0'
    peerDependenciesMeta:
      postcss:
        optional: true
      ts-node:
        optional: true

  postcss-nested@6.2.0:
    resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
    engines: {node: '>=12.0'}
    peerDependencies:
      postcss: ^8.2.14

  postcss-safe-parser@6.0.0:
    resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
    engines: {node: '>=12.0'}
    peerDependencies:
      postcss: ^8.3.3

  postcss-scss@4.0.9:
    resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
    engines: {node: '>=12.0'}
    peerDependencies:
      postcss: ^8.4.29

  postcss-selector-parser@6.1.1:
    resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==}
    engines: {node: '>=4'}

  postcss-value-parser@4.2.0:
    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}

  postcss@8.4.40:
    resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
    engines: {node: ^10 || ^12 || >=14}

  prelude-ls@1.2.1:
    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
    engines: {node: '>= 0.8.0'}

  prettier-plugin-svelte@3.2.6:
    resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==}
    peerDependencies:
      prettier: ^3.0.0
      svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0

  prettier@3.3.3:
    resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
    engines: {node: '>=14'}
    hasBin: true

  punycode@2.3.1:
    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
    engines: {node: '>=6'}

  queue-microtask@1.2.3:
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}

  read-cache@1.0.0:
    resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}

  readdirp@3.6.0:
    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
    engines: {node: '>=8.10.0'}

  resolve-from@4.0.0:
    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
    engines: {node: '>=4'}

  resolve@1.22.8:
    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
    hasBin: true

  reusify@1.0.4:
    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}

  rimraf@2.7.1:
    resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
    deprecated: Rimraf versions prior to v4 are no longer supported
    hasBin: true

  rollup@4.19.1:
    resolution: {integrity: sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==}
    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
    hasBin: true

  run-parallel@1.2.0:
    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}

  sade@1.8.1:
    resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
    engines: {node: '>=6'}

  sander@0.5.1:
    resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}

  semver@7.6.3:
    resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
    engines: {node: '>=10'}
    hasBin: true

  set-cookie-parser@2.6.0:
    resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}

  shebang-command@2.0.0:
    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
    engines: {node: '>=8'}

  shebang-regex@3.0.0:
    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
    engines: {node: '>=8'}

  signal-exit@4.1.0:
    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
    engines: {node: '>=14'}

  sirv@2.0.4:
    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
    engines: {node: '>= 10'}

  slash@3.0.0:
    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
    engines: {node: '>=8'}

  sorcery@0.11.1:
    resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==}
    hasBin: true

  source-map-js@1.2.0:
    resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
    engines: {node: '>=0.10.0'}

  string-width@4.2.3:
    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
    engines: {node: '>=8'}

  string-width@5.1.2:
    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
    engines: {node: '>=12'}

  strip-ansi@6.0.1:
    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
    engines: {node: '>=8'}

  strip-ansi@7.1.0:
    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
    engines: {node: '>=12'}

  strip-indent@3.0.0:
    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
    engines: {node: '>=8'}

  strip-json-comments@3.1.1:
    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
    engines: {node: '>=8'}

  sucrase@3.35.0:
    resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
    engines: {node: '>=16 || 14 >=14.17'}
    hasBin: true

  supports-color@7.2.0:
    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
    engines: {node: '>=8'}

  supports-preserve-symlinks-flag@1.0.0:
    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
    engines: {node: '>= 0.4'}

  svelte-check@3.8.5:
    resolution: {integrity: sha512-3OGGgr9+bJ/+1nbPgsvulkLC48xBsqsgtc8Wam281H4G9F5v3mYGa2bHRsPuwHC5brKl4AxJH95QF73kmfihGQ==}
    hasBin: true
    peerDependencies:
      svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0

  svelte-eslint-parser@0.41.0:
    resolution: {integrity: sha512-L6f4hOL+AbgfBIB52Z310pg1d2QjRqm7wy3kI1W6hhdhX5bvu7+f0R6w4ykp5HoDdzq+vGhIJmsisaiJDGmVfA==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
    peerDependencies:
      svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191
    peerDependenciesMeta:
      svelte:
        optional: true

  svelte-hmr@0.16.0:
    resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
    engines: {node: ^12.20 || ^14.13.1 || >= 16}
    peerDependencies:
      svelte: ^3.19.0 || ^4.0.0

  svelte-preprocess@5.1.4:
    resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==}
    engines: {node: '>= 16.0.0'}
    peerDependencies:
      '@babel/core': ^7.10.2
      coffeescript: ^2.5.1
      less: ^3.11.3 || ^4.0.0
      postcss: ^7 || ^8
      postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
      pug: ^3.0.0
      sass: ^1.26.8
      stylus: ^0.55.0
      sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
      svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
      typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
    peerDependenciesMeta:
      '@babel/core':
        optional: true
      coffeescript:
        optional: true
      less:
        optional: true
      postcss:
        optional: true
      postcss-load-config:
        optional: true
      pug:
        optional: true
      sass:
        optional: true
      stylus:
        optional: true
      sugarss:
        optional: true
      typescript:
        optional: true

  svelte-radix@1.1.0:
    resolution: {integrity: sha512-kyE9wZiJV937INGb+wiBkAjmGtQUUYRPkVL2Q+/gj+9Vog1Ewd2wNvNmpNMUd+c+euxoc5u5YZMuCUgky9EUPw==}
    peerDependencies:
      svelte: ^3.54.0 || ^4.0.0 || ^5.0.0

  svelte@4.2.18:
    resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==}
    engines: {node: '>=16'}

  tabbable@6.2.0:
    resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}

  tailwind-merge@2.4.0:
    resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==}

  tailwind-variants@0.2.1:
    resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==}
    engines: {node: '>=16.x', pnpm: '>=7.x'}
    peerDependencies:
      tailwindcss: '*'

  tailwindcss@3.4.7:
    resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==}
    engines: {node: '>=14.0.0'}
    hasBin: true

  text-table@0.2.0:
    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}

  thenify-all@1.6.0:
    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
    engines: {node: '>=0.8'}

  thenify@3.3.1:
    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}

  tiny-glob@0.2.9:
    resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}

  to-regex-range@5.0.1:
    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
    engines: {node: '>=8.0'}

  totalist@3.0.1:
    resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
    engines: {node: '>=6'}

  ts-api-utils@1.3.0:
    resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
    engines: {node: '>=16'}
    peerDependencies:
      typescript: '>=4.2.0'

  ts-interface-checker@0.1.13:
    resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}

  tslib@2.6.3:
    resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}

  type-check@0.4.0:
    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
    engines: {node: '>= 0.8.0'}

  typescript-eslint@8.0.0:
    resolution: {integrity: sha512-yQWBJutWL1PmpmDddIOl9/Mi6vZjqNCjqSGBMQ4vsc2Aiodk0SnbQQWPXbSy0HNuKCuGkw1+u4aQ2mO40TdhDQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '*'
    peerDependenciesMeta:
      typescript:
        optional: true

  typescript@5.5.4:
    resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
    engines: {node: '>=14.17'}
    hasBin: true

  update-browserslist-db@1.1.0:
    resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
    hasBin: true
    peerDependencies:
      browserslist: '>= 4.21.0'

  uri-js@4.4.1:
    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}

  util-deprecate@1.0.2:
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}

  vite@5.3.5:
    resolution: {integrity: sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==}
    engines: {node: ^18.0.0 || >=20.0.0}
    hasBin: true
    peerDependencies:
      '@types/node': ^18.0.0 || >=20.0.0
      less: '*'
      lightningcss: ^1.21.0
      sass: '*'
      stylus: '*'
      sugarss: '*'
      terser: ^5.4.0
    peerDependenciesMeta:
      '@types/node':
        optional: true
      less:
        optional: true
      lightningcss:
        optional: true
      sass:
        optional: true
      stylus:
        optional: true
      sugarss:
        optional: true
      terser:
        optional: true

  vitefu@0.2.5:
    resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
    peerDependencies:
      vite: ^3.0.0 || ^4.0.0 || ^5.0.0
    peerDependenciesMeta:
      vite:
        optional: true

  which@2.0.2:
    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
    engines: {node: '>= 8'}
    hasBin: true

  word-wrap@1.2.5:
    resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
    engines: {node: '>=0.10.0'}

  wrap-ansi@7.0.0:
    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
    engines: {node: '>=10'}

  wrap-ansi@8.1.0:
    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
    engines: {node: '>=12'}

  wrappy@1.0.2:
    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}

  yaml@1.10.2:
    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
    engines: {node: '>= 6'}

  yaml@2.5.0:
    resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
    engines: {node: '>= 14'}
    hasBin: true

  yocto-queue@0.1.0:
    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
    engines: {node: '>=10'}

snapshots:

  '@alloc/quick-lru@5.2.0': {}

  '@ampproject/remapping@2.3.0':
    dependencies:
      '@jridgewell/gen-mapping': 0.3.5
      '@jridgewell/trace-mapping': 0.3.25

  '@esbuild/aix-ppc64@0.21.5':
    optional: true

  '@esbuild/android-arm64@0.21.5':
    optional: true

  '@esbuild/android-arm@0.21.5':
    optional: true

  '@esbuild/android-x64@0.21.5':
    optional: true

  '@esbuild/darwin-arm64@0.21.5':
    optional: true

  '@esbuild/darwin-x64@0.21.5':
    optional: true

  '@esbuild/freebsd-arm64@0.21.5':
    optional: true

  '@esbuild/freebsd-x64@0.21.5':
    optional: true

  '@esbuild/linux-arm64@0.21.5':
    optional: true

  '@esbuild/linux-arm@0.21.5':
    optional: true

  '@esbuild/linux-ia32@0.21.5':
    optional: true

  '@esbuild/linux-loong64@0.21.5':
    optional: true

  '@esbuild/linux-mips64el@0.21.5':
    optional: true

  '@esbuild/linux-ppc64@0.21.5':
    optional: true

  '@esbuild/linux-riscv64@0.21.5':
    optional: true

  '@esbuild/linux-s390x@0.21.5':
    optional: true

  '@esbuild/linux-x64@0.21.5':
    optional: true

  '@esbuild/netbsd-x64@0.21.5':
    optional: true

  '@esbuild/openbsd-x64@0.21.5':
    optional: true

  '@esbuild/sunos-x64@0.21.5':
    optional: true

  '@esbuild/win32-arm64@0.21.5':
    optional: true

  '@esbuild/win32-ia32@0.21.5':
    optional: true

  '@esbuild/win32-x64@0.21.5':
    optional: true

  '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0)':
    dependencies:
      eslint: 9.8.0
      eslint-visitor-keys: 3.4.3

  '@eslint-community/regexpp@4.11.0': {}

  '@eslint/config-array@0.17.1':
    dependencies:
      '@eslint/object-schema': 2.1.4
      debug: 4.3.6
      minimatch: 3.1.2
    transitivePeerDependencies:
      - supports-color

  '@eslint/eslintrc@3.1.0':
    dependencies:
      ajv: 6.12.6
      debug: 4.3.6
      espree: 10.1.0
      globals: 14.0.0
      ignore: 5.3.1
      import-fresh: 3.3.0
      js-yaml: 4.1.0
      minimatch: 3.1.2
      strip-json-comments: 3.1.1
    transitivePeerDependencies:
      - supports-color

  '@eslint/js@9.8.0': {}

  '@eslint/object-schema@2.1.4': {}

  '@floating-ui/core@1.6.5':
    dependencies:
      '@floating-ui/utils': 0.2.5

  '@floating-ui/dom@1.6.8':
    dependencies:
      '@floating-ui/core': 1.6.5
      '@floating-ui/utils': 0.2.5

  '@floating-ui/utils@0.2.5': {}

  '@humanwhocodes/module-importer@1.0.1': {}

  '@humanwhocodes/retry@0.3.0': {}

  '@internationalized/date@3.5.5':
    dependencies:
      '@swc/helpers': 0.5.12

  '@isaacs/cliui@8.0.2':
    dependencies:
      string-width: 5.1.2
      string-width-cjs: string-width@4.2.3
      strip-ansi: 7.1.0
      strip-ansi-cjs: strip-ansi@6.0.1
      wrap-ansi: 8.1.0
      wrap-ansi-cjs: wrap-ansi@7.0.0

  '@jridgewell/gen-mapping@0.3.5':
    dependencies:
      '@jridgewell/set-array': 1.2.1
      '@jridgewell/sourcemap-codec': 1.5.0
      '@jridgewell/trace-mapping': 0.3.25

  '@jridgewell/resolve-uri@3.1.2': {}

  '@jridgewell/set-array@1.2.1': {}

  '@jridgewell/sourcemap-codec@1.5.0': {}

  '@jridgewell/trace-mapping@0.3.25':
    dependencies:
      '@jridgewell/resolve-uri': 3.1.2
      '@jridgewell/sourcemap-codec': 1.5.0

  '@melt-ui/svelte@0.76.2(svelte@4.2.18)':
    dependencies:
      '@floating-ui/core': 1.6.5
      '@floating-ui/dom': 1.6.8
      '@internationalized/date': 3.5.5
      dequal: 2.0.3
      focus-trap: 7.5.4
      nanoid: 5.0.7
      svelte: 4.2.18

  '@nodelib/fs.scandir@2.1.5':
    dependencies:
      '@nodelib/fs.stat': 2.0.5
      run-parallel: 1.2.0

  '@nodelib/fs.stat@2.0.5': {}

  '@nodelib/fs.walk@1.2.8':
    dependencies:
      '@nodelib/fs.scandir': 2.1.5
      fastq: 1.17.1

  '@pkgjs/parseargs@0.11.0':
    optional: true

  '@polka/url@1.0.0-next.25': {}

  '@rollup/rollup-android-arm-eabi@4.19.1':
    optional: true

  '@rollup/rollup-android-arm64@4.19.1':
    optional: true

  '@rollup/rollup-darwin-arm64@4.19.1':
    optional: true

  '@rollup/rollup-darwin-x64@4.19.1':
    optional: true

  '@rollup/rollup-linux-arm-gnueabihf@4.19.1':
    optional: true

  '@rollup/rollup-linux-arm-musleabihf@4.19.1':
    optional: true

  '@rollup/rollup-linux-arm64-gnu@4.19.1':
    optional: true

  '@rollup/rollup-linux-arm64-musl@4.19.1':
    optional: true

  '@rollup/rollup-linux-powerpc64le-gnu@4.19.1':
    optional: true

  '@rollup/rollup-linux-riscv64-gnu@4.19.1':
    optional: true

  '@rollup/rollup-linux-s390x-gnu@4.19.1':
    optional: true

  '@rollup/rollup-linux-x64-gnu@4.19.1':
    optional: true

  '@rollup/rollup-linux-x64-musl@4.19.1':
    optional: true

  '@rollup/rollup-win32-arm64-msvc@4.19.1':
    optional: true

  '@rollup/rollup-win32-ia32-msvc@4.19.1':
    optional: true

  '@rollup/rollup-win32-x64-msvc@4.19.1':
    optional: true

  '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5))':
    dependencies:
      '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)
      import-meta-resolve: 4.1.0

  '@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)':
    dependencies:
      '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5)
      '@types/cookie': 0.6.0
      cookie: 0.6.0
      devalue: 5.0.0
      esm-env: 1.0.0
      import-meta-resolve: 4.1.0
      kleur: 4.1.5
      magic-string: 0.30.11
      mrmime: 2.0.0
      sade: 1.8.1
      set-cookie-parser: 2.6.0
      sirv: 2.0.4
      svelte: 4.2.18
      tiny-glob: 0.2.9
      vite: 5.3.5

  '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)':
    dependencies:
      '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5)
      debug: 4.3.6
      svelte: 4.2.18
      vite: 5.3.5
    transitivePeerDependencies:
      - supports-color

  '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5)':
    dependencies:
      '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)
      debug: 4.3.6
      deepmerge: 4.3.1
      kleur: 4.1.5
      magic-string: 0.30.11
      svelte: 4.2.18
      svelte-hmr: 0.16.0(svelte@4.2.18)
      vite: 5.3.5
      vitefu: 0.2.5(vite@5.3.5)
    transitivePeerDependencies:
      - supports-color

  '@swc/helpers@0.5.12':
    dependencies:
      tslib: 2.6.3

  '@tailwindcss/forms@0.5.7(tailwindcss@3.4.7)':
    dependencies:
      mini-svg-data-uri: 1.4.4
      tailwindcss: 3.4.7

  '@types/cookie@0.6.0': {}

  '@types/eslint@9.6.0':
    dependencies:
      '@types/estree': 1.0.5
      '@types/json-schema': 7.0.15

  '@types/estree@1.0.5': {}

  '@types/json-schema@7.0.15': {}

  '@types/pug@2.0.10': {}

  '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)':
    dependencies:
      '@eslint-community/regexpp': 4.11.0
      '@typescript-eslint/parser': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      '@typescript-eslint/scope-manager': 8.0.0
      '@typescript-eslint/type-utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      '@typescript-eslint/visitor-keys': 8.0.0
      eslint: 9.8.0
      graphemer: 1.4.0
      ignore: 5.3.1
      natural-compare: 1.4.0
      ts-api-utils: 1.3.0(typescript@5.5.4)
    optionalDependencies:
      typescript: 5.5.4
    transitivePeerDependencies:
      - supports-color

  '@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4)':
    dependencies:
      '@typescript-eslint/scope-manager': 8.0.0
      '@typescript-eslint/types': 8.0.0
      '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4)
      '@typescript-eslint/visitor-keys': 8.0.0
      debug: 4.3.6
      eslint: 9.8.0
    optionalDependencies:
      typescript: 5.5.4
    transitivePeerDependencies:
      - supports-color

  '@typescript-eslint/scope-manager@8.0.0':
    dependencies:
      '@typescript-eslint/types': 8.0.0
      '@typescript-eslint/visitor-keys': 8.0.0

  '@typescript-eslint/type-utils@8.0.0(eslint@9.8.0)(typescript@5.5.4)':
    dependencies:
      '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4)
      '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      debug: 4.3.6
      ts-api-utils: 1.3.0(typescript@5.5.4)
    optionalDependencies:
      typescript: 5.5.4
    transitivePeerDependencies:
      - eslint
      - supports-color

  '@typescript-eslint/types@8.0.0': {}

  '@typescript-eslint/typescript-estree@8.0.0(typescript@5.5.4)':
    dependencies:
      '@typescript-eslint/types': 8.0.0
      '@typescript-eslint/visitor-keys': 8.0.0
      debug: 4.3.6
      globby: 11.1.0
      is-glob: 4.0.3
      minimatch: 9.0.5
      semver: 7.6.3
      ts-api-utils: 1.3.0(typescript@5.5.4)
    optionalDependencies:
      typescript: 5.5.4
    transitivePeerDependencies:
      - supports-color

  '@typescript-eslint/utils@8.0.0(eslint@9.8.0)(typescript@5.5.4)':
    dependencies:
      '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0)
      '@typescript-eslint/scope-manager': 8.0.0
      '@typescript-eslint/types': 8.0.0
      '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4)
      eslint: 9.8.0
    transitivePeerDependencies:
      - supports-color
      - typescript

  '@typescript-eslint/visitor-keys@8.0.0':
    dependencies:
      '@typescript-eslint/types': 8.0.0
      eslint-visitor-keys: 3.4.3

  acorn-jsx@5.3.2(acorn@8.12.1):
    dependencies:
      acorn: 8.12.1

  acorn@8.12.1: {}

  ajv@6.12.6:
    dependencies:
      fast-deep-equal: 3.1.3
      fast-json-stable-stringify: 2.1.0
      json-schema-traverse: 0.4.1
      uri-js: 4.4.1

  ansi-regex@5.0.1: {}

  ansi-regex@6.0.1: {}

  ansi-styles@4.3.0:
    dependencies:
      color-convert: 2.0.1

  ansi-styles@6.2.1: {}

  any-promise@1.3.0: {}

  anymatch@3.1.3:
    dependencies:
      normalize-path: 3.0.0
      picomatch: 2.3.1

  arg@5.0.2: {}

  argparse@2.0.1: {}

  aria-query@5.3.0:
    dependencies:
      dequal: 2.0.3

  array-union@2.1.0: {}

  autoprefixer@10.4.19(postcss@8.4.40):
    dependencies:
      browserslist: 4.23.2
      caniuse-lite: 1.0.30001645
      fraction.js: 4.3.7
      normalize-range: 0.1.2
      picocolors: 1.0.1
      postcss: 8.4.40
      postcss-value-parser: 4.2.0

  axobject-query@4.1.0: {}

  balanced-match@1.0.2: {}

  binary-extensions@2.3.0: {}

  bits-ui@0.21.13(svelte@4.2.18):
    dependencies:
      '@internationalized/date': 3.5.5
      '@melt-ui/svelte': 0.76.2(svelte@4.2.18)
      nanoid: 5.0.7
      svelte: 4.2.18

  brace-expansion@1.1.11:
    dependencies:
      balanced-match: 1.0.2
      concat-map: 0.0.1

  brace-expansion@2.0.1:
    dependencies:
      balanced-match: 1.0.2

  braces@3.0.3:
    dependencies:
      fill-range: 7.1.1

  browserslist@4.23.2:
    dependencies:
      caniuse-lite: 1.0.30001645
      electron-to-chromium: 1.5.4
      node-releases: 2.0.18
      update-browserslist-db: 1.1.0(browserslist@4.23.2)

  buffer-crc32@1.0.0: {}

  callsites@3.1.0: {}

  camelcase-css@2.0.1: {}

  caniuse-lite@1.0.30001645: {}

  chalk@4.1.2:
    dependencies:
      ansi-styles: 4.3.0
      supports-color: 7.2.0

  chokidar@3.6.0:
    dependencies:
      anymatch: 3.1.3
      braces: 3.0.3
      glob-parent: 5.1.2
      is-binary-path: 2.1.0
      is-glob: 4.0.3
      normalize-path: 3.0.0
      readdirp: 3.6.0
    optionalDependencies:
      fsevents: 2.3.3

  clsx@2.1.1: {}

  code-red@1.0.4:
    dependencies:
      '@jridgewell/sourcemap-codec': 1.5.0
      '@types/estree': 1.0.5
      acorn: 8.12.1
      estree-walker: 3.0.3
      periscopic: 3.1.0

  color-convert@2.0.1:
    dependencies:
      color-name: 1.1.4

  color-name@1.1.4: {}

  commander@4.1.1: {}

  concat-map@0.0.1: {}

  cookie@0.6.0: {}

  cross-spawn@7.0.3:
    dependencies:
      path-key: 3.1.1
      shebang-command: 2.0.0
      which: 2.0.2

  css-tree@2.3.1:
    dependencies:
      mdn-data: 2.0.30
      source-map-js: 1.2.0

  cssesc@3.0.0: {}

  debug@4.3.6:
    dependencies:
      ms: 2.1.2

  deep-is@0.1.4: {}

  deepmerge@4.3.1: {}

  dequal@2.0.3: {}

  detect-indent@6.1.0: {}

  devalue@5.0.0: {}

  didyoumean@1.2.2: {}

  dir-glob@3.0.1:
    dependencies:
      path-type: 4.0.0

  dlv@1.1.3: {}

  eastasianwidth@0.2.0: {}

  electron-to-chromium@1.5.4: {}

  emoji-regex@8.0.0: {}

  emoji-regex@9.2.2: {}

  es6-promise@3.3.1: {}

  esbuild@0.21.5:
    optionalDependencies:
      '@esbuild/aix-ppc64': 0.21.5
      '@esbuild/android-arm': 0.21.5
      '@esbuild/android-arm64': 0.21.5
      '@esbuild/android-x64': 0.21.5
      '@esbuild/darwin-arm64': 0.21.5
      '@esbuild/darwin-x64': 0.21.5
      '@esbuild/freebsd-arm64': 0.21.5
      '@esbuild/freebsd-x64': 0.21.5
      '@esbuild/linux-arm': 0.21.5
      '@esbuild/linux-arm64': 0.21.5
      '@esbuild/linux-ia32': 0.21.5
      '@esbuild/linux-loong64': 0.21.5
      '@esbuild/linux-mips64el': 0.21.5
      '@esbuild/linux-ppc64': 0.21.5
      '@esbuild/linux-riscv64': 0.21.5
      '@esbuild/linux-s390x': 0.21.5
      '@esbuild/linux-x64': 0.21.5
      '@esbuild/netbsd-x64': 0.21.5
      '@esbuild/openbsd-x64': 0.21.5
      '@esbuild/sunos-x64': 0.21.5
      '@esbuild/win32-arm64': 0.21.5
      '@esbuild/win32-ia32': 0.21.5
      '@esbuild/win32-x64': 0.21.5

  escalade@3.1.2: {}

  escape-string-regexp@4.0.0: {}

  eslint-compat-utils@0.5.1(eslint@9.8.0):
    dependencies:
      eslint: 9.8.0
      semver: 7.6.3

  eslint-config-prettier@9.1.0(eslint@9.8.0):
    dependencies:
      eslint: 9.8.0

  eslint-plugin-svelte@2.43.0(eslint@9.8.0)(svelte@4.2.18):
    dependencies:
      '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0)
      '@jridgewell/sourcemap-codec': 1.5.0
      eslint: 9.8.0
      eslint-compat-utils: 0.5.1(eslint@9.8.0)
      esutils: 2.0.3
      known-css-properties: 0.34.0
      postcss: 8.4.40
      postcss-load-config: 3.1.4(postcss@8.4.40)
      postcss-safe-parser: 6.0.0(postcss@8.4.40)
      postcss-selector-parser: 6.1.1
      semver: 7.6.3
      svelte-eslint-parser: 0.41.0(svelte@4.2.18)
    optionalDependencies:
      svelte: 4.2.18
    transitivePeerDependencies:
      - ts-node

  eslint-scope@7.2.2:
    dependencies:
      esrecurse: 4.3.0
      estraverse: 5.3.0

  eslint-scope@8.0.2:
    dependencies:
      esrecurse: 4.3.0
      estraverse: 5.3.0

  eslint-visitor-keys@3.4.3: {}

  eslint-visitor-keys@4.0.0: {}

  eslint@9.8.0:
    dependencies:
      '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0)
      '@eslint-community/regexpp': 4.11.0
      '@eslint/config-array': 0.17.1
      '@eslint/eslintrc': 3.1.0
      '@eslint/js': 9.8.0
      '@humanwhocodes/module-importer': 1.0.1
      '@humanwhocodes/retry': 0.3.0
      '@nodelib/fs.walk': 1.2.8
      ajv: 6.12.6
      chalk: 4.1.2
      cross-spawn: 7.0.3
      debug: 4.3.6
      escape-string-regexp: 4.0.0
      eslint-scope: 8.0.2
      eslint-visitor-keys: 4.0.0
      espree: 10.1.0
      esquery: 1.6.0
      esutils: 2.0.3
      fast-deep-equal: 3.1.3
      file-entry-cache: 8.0.0
      find-up: 5.0.0
      glob-parent: 6.0.2
      ignore: 5.3.1
      imurmurhash: 0.1.4
      is-glob: 4.0.3
      is-path-inside: 3.0.3
      json-stable-stringify-without-jsonify: 1.0.1
      levn: 0.4.1
      lodash.merge: 4.6.2
      minimatch: 3.1.2
      natural-compare: 1.4.0
      optionator: 0.9.4
      strip-ansi: 6.0.1
      text-table: 0.2.0
    transitivePeerDependencies:
      - supports-color

  esm-env@1.0.0: {}

  espree@10.1.0:
    dependencies:
      acorn: 8.12.1
      acorn-jsx: 5.3.2(acorn@8.12.1)
      eslint-visitor-keys: 4.0.0

  espree@9.6.1:
    dependencies:
      acorn: 8.12.1
      acorn-jsx: 5.3.2(acorn@8.12.1)
      eslint-visitor-keys: 3.4.3

  esquery@1.6.0:
    dependencies:
      estraverse: 5.3.0

  esrecurse@4.3.0:
    dependencies:
      estraverse: 5.3.0

  estraverse@5.3.0: {}

  estree-walker@3.0.3:
    dependencies:
      '@types/estree': 1.0.5

  esutils@2.0.3: {}

  fast-deep-equal@3.1.3: {}

  fast-glob@3.3.2:
    dependencies:
      '@nodelib/fs.stat': 2.0.5
      '@nodelib/fs.walk': 1.2.8
      glob-parent: 5.1.2
      merge2: 1.4.1
      micromatch: 4.0.7

  fast-json-stable-stringify@2.1.0: {}

  fast-levenshtein@2.0.6: {}

  fastq@1.17.1:
    dependencies:
      reusify: 1.0.4

  file-entry-cache@8.0.0:
    dependencies:
      flat-cache: 4.0.1

  fill-range@7.1.1:
    dependencies:
      to-regex-range: 5.0.1

  find-up@5.0.0:
    dependencies:
      locate-path: 6.0.0
      path-exists: 4.0.0

  flat-cache@4.0.1:
    dependencies:
      flatted: 3.3.1
      keyv: 4.5.4

  flatted@3.3.1: {}

  focus-trap@7.5.4:
    dependencies:
      tabbable: 6.2.0

  foreground-child@3.2.1:
    dependencies:
      cross-spawn: 7.0.3
      signal-exit: 4.1.0

  fraction.js@4.3.7: {}

  fs.realpath@1.0.0: {}

  fsevents@2.3.3:
    optional: true

  function-bind@1.1.2: {}

  glob-parent@5.1.2:
    dependencies:
      is-glob: 4.0.3

  glob-parent@6.0.2:
    dependencies:
      is-glob: 4.0.3

  glob@10.4.5:
    dependencies:
      foreground-child: 3.2.1
      jackspeak: 3.4.3
      minimatch: 9.0.5
      minipass: 7.1.2
      package-json-from-dist: 1.0.0
      path-scurry: 1.11.1

  glob@7.2.3:
    dependencies:
      fs.realpath: 1.0.0
      inflight: 1.0.6
      inherits: 2.0.4
      minimatch: 3.1.2
      once: 1.4.0
      path-is-absolute: 1.0.1

  globals@14.0.0: {}

  globals@15.8.0: {}

  globalyzer@0.1.0: {}

  globby@11.1.0:
    dependencies:
      array-union: 2.1.0
      dir-glob: 3.0.1
      fast-glob: 3.3.2
      ignore: 5.3.1
      merge2: 1.4.1
      slash: 3.0.0

  globrex@0.1.2: {}

  graceful-fs@4.2.11: {}

  graphemer@1.4.0: {}

  has-flag@4.0.0: {}

  hasown@2.0.2:
    dependencies:
      function-bind: 1.1.2

  ignore@5.3.1: {}

  import-fresh@3.3.0:
    dependencies:
      parent-module: 1.0.1
      resolve-from: 4.0.0

  import-meta-resolve@4.1.0: {}

  imurmurhash@0.1.4: {}

  inflight@1.0.6:
    dependencies:
      once: 1.4.0
      wrappy: 1.0.2

  inherits@2.0.4: {}

  is-binary-path@2.1.0:
    dependencies:
      binary-extensions: 2.3.0

  is-core-module@2.15.0:
    dependencies:
      hasown: 2.0.2

  is-extglob@2.1.1: {}

  is-fullwidth-code-point@3.0.0: {}

  is-glob@4.0.3:
    dependencies:
      is-extglob: 2.1.1

  is-number@7.0.0: {}

  is-path-inside@3.0.3: {}

  is-reference@3.0.2:
    dependencies:
      '@types/estree': 1.0.5

  isexe@2.0.0: {}

  jackspeak@3.4.3:
    dependencies:
      '@isaacs/cliui': 8.0.2
    optionalDependencies:
      '@pkgjs/parseargs': 0.11.0

  jiti@1.21.6: {}

  js-yaml@4.1.0:
    dependencies:
      argparse: 2.0.1

  json-buffer@3.0.1: {}

  json-schema-traverse@0.4.1: {}

  json-stable-stringify-without-jsonify@1.0.1: {}

  keyv@4.5.4:
    dependencies:
      json-buffer: 3.0.1

  kleur@4.1.5: {}

  known-css-properties@0.34.0: {}

  levn@0.4.1:
    dependencies:
      prelude-ls: 1.2.1
      type-check: 0.4.0

  lilconfig@2.1.0: {}

  lilconfig@3.1.2: {}

  lines-and-columns@1.2.4: {}

  locate-character@3.0.0: {}

  locate-path@6.0.0:
    dependencies:
      p-locate: 5.0.0

  lodash.merge@4.6.2: {}

  lru-cache@10.4.3: {}

  lucide-svelte@0.418.0(svelte@4.2.18):
    dependencies:
      svelte: 4.2.18

  magic-string@0.30.11:
    dependencies:
      '@jridgewell/sourcemap-codec': 1.5.0

  mdn-data@2.0.30: {}

  merge2@1.4.1: {}

  micromatch@4.0.7:
    dependencies:
      braces: 3.0.3
      picomatch: 2.3.1

  min-indent@1.0.1: {}

  mini-svg-data-uri@1.4.4: {}

  minimatch@3.1.2:
    dependencies:
      brace-expansion: 1.1.11

  minimatch@9.0.5:
    dependencies:
      brace-expansion: 2.0.1

  minimist@1.2.8: {}

  minipass@7.1.2: {}

  mkdirp@0.5.6:
    dependencies:
      minimist: 1.2.8

  mri@1.2.0: {}

  mrmime@2.0.0: {}

  ms@2.1.2: {}

  mz@2.7.0:
    dependencies:
      any-promise: 1.3.0
      object-assign: 4.1.1
      thenify-all: 1.6.0

  nanoid@3.3.7: {}

  nanoid@5.0.7: {}

  natural-compare@1.4.0: {}

  node-releases@2.0.18: {}

  normalize-path@3.0.0: {}

  normalize-range@0.1.2: {}

  object-assign@4.1.1: {}

  object-hash@3.0.0: {}

  once@1.4.0:
    dependencies:
      wrappy: 1.0.2

  optionator@0.9.4:
    dependencies:
      deep-is: 0.1.4
      fast-levenshtein: 2.0.6
      levn: 0.4.1
      prelude-ls: 1.2.1
      type-check: 0.4.0
      word-wrap: 1.2.5

  p-limit@3.1.0:
    dependencies:
      yocto-queue: 0.1.0

  p-locate@5.0.0:
    dependencies:
      p-limit: 3.1.0

  package-json-from-dist@1.0.0: {}

  parent-module@1.0.1:
    dependencies:
      callsites: 3.1.0

  path-exists@4.0.0: {}

  path-is-absolute@1.0.1: {}

  path-key@3.1.1: {}

  path-parse@1.0.7: {}

  path-scurry@1.11.1:
    dependencies:
      lru-cache: 10.4.3
      minipass: 7.1.2

  path-type@4.0.0: {}

  periscopic@3.1.0:
    dependencies:
      '@types/estree': 1.0.5
      estree-walker: 3.0.3
      is-reference: 3.0.2

  picocolors@1.0.1: {}

  picomatch@2.3.1: {}

  pify@2.3.0: {}

  pirates@4.0.6: {}

  postcss-import@15.1.0(postcss@8.4.40):
    dependencies:
      postcss: 8.4.40
      postcss-value-parser: 4.2.0
      read-cache: 1.0.0
      resolve: 1.22.8

  postcss-js@4.0.1(postcss@8.4.40):
    dependencies:
      camelcase-css: 2.0.1
      postcss: 8.4.40

  postcss-load-config@3.1.4(postcss@8.4.40):
    dependencies:
      lilconfig: 2.1.0
      yaml: 1.10.2
    optionalDependencies:
      postcss: 8.4.40

  postcss-load-config@4.0.2(postcss@8.4.40):
    dependencies:
      lilconfig: 3.1.2
      yaml: 2.5.0
    optionalDependencies:
      postcss: 8.4.40

  postcss-nested@6.2.0(postcss@8.4.40):
    dependencies:
      postcss: 8.4.40
      postcss-selector-parser: 6.1.1

  postcss-safe-parser@6.0.0(postcss@8.4.40):
    dependencies:
      postcss: 8.4.40

  postcss-scss@4.0.9(postcss@8.4.40):
    dependencies:
      postcss: 8.4.40

  postcss-selector-parser@6.1.1:
    dependencies:
      cssesc: 3.0.0
      util-deprecate: 1.0.2

  postcss-value-parser@4.2.0: {}

  postcss@8.4.40:
    dependencies:
      nanoid: 3.3.7
      picocolors: 1.0.1
      source-map-js: 1.2.0

  prelude-ls@1.2.1: {}

  prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.18):
    dependencies:
      prettier: 3.3.3
      svelte: 4.2.18

  prettier@3.3.3: {}

  punycode@2.3.1: {}

  queue-microtask@1.2.3: {}

  read-cache@1.0.0:
    dependencies:
      pify: 2.3.0

  readdirp@3.6.0:
    dependencies:
      picomatch: 2.3.1

  resolve-from@4.0.0: {}

  resolve@1.22.8:
    dependencies:
      is-core-module: 2.15.0
      path-parse: 1.0.7
      supports-preserve-symlinks-flag: 1.0.0

  reusify@1.0.4: {}

  rimraf@2.7.1:
    dependencies:
      glob: 7.2.3

  rollup@4.19.1:
    dependencies:
      '@types/estree': 1.0.5
    optionalDependencies:
      '@rollup/rollup-android-arm-eabi': 4.19.1
      '@rollup/rollup-android-arm64': 4.19.1
      '@rollup/rollup-darwin-arm64': 4.19.1
      '@rollup/rollup-darwin-x64': 4.19.1
      '@rollup/rollup-linux-arm-gnueabihf': 4.19.1
      '@rollup/rollup-linux-arm-musleabihf': 4.19.1
      '@rollup/rollup-linux-arm64-gnu': 4.19.1
      '@rollup/rollup-linux-arm64-musl': 4.19.1
      '@rollup/rollup-linux-powerpc64le-gnu': 4.19.1
      '@rollup/rollup-linux-riscv64-gnu': 4.19.1
      '@rollup/rollup-linux-s390x-gnu': 4.19.1
      '@rollup/rollup-linux-x64-gnu': 4.19.1
      '@rollup/rollup-linux-x64-musl': 4.19.1
      '@rollup/rollup-win32-arm64-msvc': 4.19.1
      '@rollup/rollup-win32-ia32-msvc': 4.19.1
      '@rollup/rollup-win32-x64-msvc': 4.19.1
      fsevents: 2.3.3

  run-parallel@1.2.0:
    dependencies:
      queue-microtask: 1.2.3

  sade@1.8.1:
    dependencies:
      mri: 1.2.0

  sander@0.5.1:
    dependencies:
      es6-promise: 3.3.1
      graceful-fs: 4.2.11
      mkdirp: 0.5.6
      rimraf: 2.7.1

  semver@7.6.3: {}

  set-cookie-parser@2.6.0: {}

  shebang-command@2.0.0:
    dependencies:
      shebang-regex: 3.0.0

  shebang-regex@3.0.0: {}

  signal-exit@4.1.0: {}

  sirv@2.0.4:
    dependencies:
      '@polka/url': 1.0.0-next.25
      mrmime: 2.0.0
      totalist: 3.0.1

  slash@3.0.0: {}

  sorcery@0.11.1:
    dependencies:
      '@jridgewell/sourcemap-codec': 1.5.0
      buffer-crc32: 1.0.0
      minimist: 1.2.8
      sander: 0.5.1

  source-map-js@1.2.0: {}

  string-width@4.2.3:
    dependencies:
      emoji-regex: 8.0.0
      is-fullwidth-code-point: 3.0.0
      strip-ansi: 6.0.1

  string-width@5.1.2:
    dependencies:
      eastasianwidth: 0.2.0
      emoji-regex: 9.2.2
      strip-ansi: 7.1.0

  strip-ansi@6.0.1:
    dependencies:
      ansi-regex: 5.0.1

  strip-ansi@7.1.0:
    dependencies:
      ansi-regex: 6.0.1

  strip-indent@3.0.0:
    dependencies:
      min-indent: 1.0.1

  strip-json-comments@3.1.1: {}

  sucrase@3.35.0:
    dependencies:
      '@jridgewell/gen-mapping': 0.3.5
      commander: 4.1.1
      glob: 10.4.5
      lines-and-columns: 1.2.4
      mz: 2.7.0
      pirates: 4.0.6
      ts-interface-checker: 0.1.13

  supports-color@7.2.0:
    dependencies:
      has-flag: 4.0.0

  supports-preserve-symlinks-flag@1.0.0: {}

  svelte-check@3.8.5(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18):
    dependencies:
      '@jridgewell/trace-mapping': 0.3.25
      chokidar: 3.6.0
      picocolors: 1.0.1
      sade: 1.8.1
      svelte: 4.2.18
      svelte-preprocess: 5.1.4(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18)(typescript@5.5.4)
      typescript: 5.5.4
    transitivePeerDependencies:
      - '@babel/core'
      - coffeescript
      - less
      - postcss
      - postcss-load-config
      - pug
      - sass
      - stylus
      - sugarss

  svelte-eslint-parser@0.41.0(svelte@4.2.18):
    dependencies:
      eslint-scope: 7.2.2
      eslint-visitor-keys: 3.4.3
      espree: 9.6.1
      postcss: 8.4.40
      postcss-scss: 4.0.9(postcss@8.4.40)
    optionalDependencies:
      svelte: 4.2.18

  svelte-hmr@0.16.0(svelte@4.2.18):
    dependencies:
      svelte: 4.2.18

  svelte-preprocess@5.1.4(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18)(typescript@5.5.4):
    dependencies:
      '@types/pug': 2.0.10
      detect-indent: 6.1.0
      magic-string: 0.30.11
      sorcery: 0.11.1
      strip-indent: 3.0.0
      svelte: 4.2.18
    optionalDependencies:
      postcss: 8.4.40
      postcss-load-config: 4.0.2(postcss@8.4.40)
      typescript: 5.5.4

  svelte-radix@1.1.0(svelte@4.2.18):
    dependencies:
      svelte: 4.2.18

  svelte@4.2.18:
    dependencies:
      '@ampproject/remapping': 2.3.0
      '@jridgewell/sourcemap-codec': 1.5.0
      '@jridgewell/trace-mapping': 0.3.25
      '@types/estree': 1.0.5
      acorn: 8.12.1
      aria-query: 5.3.0
      axobject-query: 4.1.0
      code-red: 1.0.4
      css-tree: 2.3.1
      estree-walker: 3.0.3
      is-reference: 3.0.2
      locate-character: 3.0.0
      magic-string: 0.30.11
      periscopic: 3.1.0

  tabbable@6.2.0: {}

  tailwind-merge@2.4.0: {}

  tailwind-variants@0.2.1(tailwindcss@3.4.7):
    dependencies:
      tailwind-merge: 2.4.0
      tailwindcss: 3.4.7

  tailwindcss@3.4.7:
    dependencies:
      '@alloc/quick-lru': 5.2.0
      arg: 5.0.2
      chokidar: 3.6.0
      didyoumean: 1.2.2
      dlv: 1.1.3
      fast-glob: 3.3.2
      glob-parent: 6.0.2
      is-glob: 4.0.3
      jiti: 1.21.6
      lilconfig: 2.1.0
      micromatch: 4.0.7
      normalize-path: 3.0.0
      object-hash: 3.0.0
      picocolors: 1.0.1
      postcss: 8.4.40
      postcss-import: 15.1.0(postcss@8.4.40)
      postcss-js: 4.0.1(postcss@8.4.40)
      postcss-load-config: 4.0.2(postcss@8.4.40)
      postcss-nested: 6.2.0(postcss@8.4.40)
      postcss-selector-parser: 6.1.1
      resolve: 1.22.8
      sucrase: 3.35.0
    transitivePeerDependencies:
      - ts-node

  text-table@0.2.0: {}

  thenify-all@1.6.0:
    dependencies:
      thenify: 3.3.1

  thenify@3.3.1:
    dependencies:
      any-promise: 1.3.0

  tiny-glob@0.2.9:
    dependencies:
      globalyzer: 0.1.0
      globrex: 0.1.2

  to-regex-range@5.0.1:
    dependencies:
      is-number: 7.0.0

  totalist@3.0.1: {}

  ts-api-utils@1.3.0(typescript@5.5.4):
    dependencies:
      typescript: 5.5.4

  ts-interface-checker@0.1.13: {}

  tslib@2.6.3: {}

  type-check@0.4.0:
    dependencies:
      prelude-ls: 1.2.1

  typescript-eslint@8.0.0(eslint@9.8.0)(typescript@5.5.4):
    dependencies:
      '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)
      '@typescript-eslint/parser': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
      '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4)
    optionalDependencies:
      typescript: 5.5.4
    transitivePeerDependencies:
      - eslint
      - supports-color

  typescript@5.5.4: {}

  update-browserslist-db@1.1.0(browserslist@4.23.2):
    dependencies:
      browserslist: 4.23.2
      escalade: 3.1.2
      picocolors: 1.0.1

  uri-js@4.4.1:
    dependencies:
      punycode: 2.3.1

  util-deprecate@1.0.2: {}

  vite@5.3.5:
    dependencies:
      esbuild: 0.21.5
      postcss: 8.4.40
      rollup: 4.19.1
    optionalDependencies:
      fsevents: 2.3.3

  vitefu@0.2.5(vite@5.3.5):
    optionalDependencies:
      vite: 5.3.5

  which@2.0.2:
    dependencies:
      isexe: 2.0.0

  word-wrap@1.2.5: {}

  wrap-ansi@7.0.0:
    dependencies:
      ansi-styles: 4.3.0
      string-width: 4.2.3
      strip-ansi: 6.0.1

  wrap-ansi@8.1.0:
    dependencies:
      ansi-styles: 6.2.1
      string-width: 5.1.2
      strip-ansi: 7.1.0

  wrappy@1.0.2: {}

  yaml@1.10.2: {}

  yaml@2.5.0: {}

  yocto-queue@0.1.0: {}

A client/postcss.config.js => client/postcss.config.js +6 -0
@@ 0,0 1,6 @@
export default {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}

A client/src/app.d.ts => client/src/app.d.ts +13 -0
@@ 0,0 1,13 @@
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
	namespace App {
		// interface Error {}
		// interface Locals {}
		// interface PageData {}
		// interface PageState {}
		// interface Platform {}
	}
}

export {};

A client/src/app.html => client/src/app.html +12 -0
@@ 0,0 1,12 @@
<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<link rel="icon" href="%sveltekit.assets%/favicon.png" />
		<meta name="viewport" content="width=device-width, initial-scale=1" />
		%sveltekit.head%
	</head>
	<body data-sveltekit-preload-data="hover">
		<div style="display: contents">%sveltekit.body%</div>
	</body>
</html>

A client/src/lib/components/ui/button/Button.svelte => client/src/lib/components/ui/button/Button.svelte +25 -0
@@ 0,0 1,25 @@
<script lang="ts">
	import { Button as ButtonPrimitive } from "bits-ui";
	import { type Events, type Props, buttonVariants } from "./index.js";
	import { cn } from "$lib/utils.js";

	type $$Props = Props;
	type $$Events = Events;

	let className: $$Props["class"] = undefined;
	export let variant: $$Props["variant"] = "default";
	export let size: $$Props["size"] = "default";
	export let builders: $$Props["builders"] = [];
	export { className as class };
</script>

<ButtonPrimitive.Root
	{builders}
	class={cn(buttonVariants({ variant, size, className }))}
	type="button"
	{...$$restProps}
	on:click
	on:keydown
>
	<slot />
</ButtonPrimitive.Root>
\ No newline at end of file

A client/src/lib/components/ui/button/button.svelte => client/src/lib/components/ui/button/button.svelte +25 -0
@@ 0,0 1,25 @@
<script lang="ts">
	import { Button as ButtonPrimitive } from "bits-ui";
	import { type Events, type Props, buttonVariants } from "./index.js";
	import { cn } from "$lib/utils.js";

	type $$Props = Props;
	type $$Events = Events;

	let className: $$Props["class"] = undefined;
	export let variant: $$Props["variant"] = "default";
	export let size: $$Props["size"] = "default";
	export let builders: $$Props["builders"] = [];
	export { className as class };
</script>

<ButtonPrimitive.Root
	{builders}
	class={cn(buttonVariants({ variant, size, className }))}
	type="button"
	{...$$restProps}
	on:click
	on:keydown
>
	<slot />
</ButtonPrimitive.Root>

A client/src/lib/components/ui/button/index.ts => client/src/lib/components/ui/button/index.ts +50 -0
@@ 0,0 1,50 @@
import type { Button as ButtonPrimitive } from "bits-ui";
import { type VariantProps, tv } from "tailwind-variants";
import Root from "./button.svelte";

const buttonVariants = tv({
	base: "focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50",
	variants: {
		variant: {
			default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow",
			destructive:
				"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm",
			outline:
				"border-input bg-background hover:bg-accent hover:text-accent-foreground border shadow-sm",
			secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-sm",
			ghost: "hover:bg-accent hover:text-accent-foreground",
			link: "text-primary underline-offset-4 hover:underline",
		},
		size: {
			default: "h-9 px-4 py-2",
			sm: "h-8 rounded-md px-3 text-xs",
			lg: "h-10 rounded-md px-8",
			icon: "h-9 w-9",
		},
	},
	defaultVariants: {
		variant: "default",
		size: "default",
	},
});

type Variant = VariantProps<typeof buttonVariants>["variant"];
type Size = VariantProps<typeof buttonVariants>["size"];

type Props = ButtonPrimitive.Props & {
	variant?: Variant;
	size?: Size;
};

type Events = ButtonPrimitive.Events;

export {
	Root,
	type Props,
	type Events,
	//
	Root as Button,
	type Props as ButtonProps,
	type Events as ButtonEvents,
	buttonVariants,
};

A client/src/lib/components/ui/card/card-content.svelte => client/src/lib/components/ui/card/card-content.svelte +13 -0
@@ 0,0 1,13 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLDivElement>;

	let className: $$Props["class"] = undefined;
	export { className as class };
</script>

<div class={cn("p-6 pt-0", className)} {...$$restProps}>
	<slot />
</div>

A client/src/lib/components/ui/card/card-description.svelte => client/src/lib/components/ui/card/card-description.svelte +13 -0
@@ 0,0 1,13 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLParagraphElement>;

	let className: $$Props["class"] = undefined;
	export { className as class };
</script>

<p class={cn("text-muted-foreground text-sm", className)} {...$$restProps}>
	<slot />
</p>

A client/src/lib/components/ui/card/card-footer.svelte => client/src/lib/components/ui/card/card-footer.svelte +13 -0
@@ 0,0 1,13 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLDivElement>;

	let className: $$Props["class"] = undefined;
	export { className as class };
</script>

<div class={cn("flex items-center p-6 pt-0", className)} {...$$restProps}>
	<slot />
</div>

A client/src/lib/components/ui/card/card-header.svelte => client/src/lib/components/ui/card/card-header.svelte +13 -0
@@ 0,0 1,13 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLDivElement>;

	let className: $$Props["class"] = undefined;
	export { className as class };
</script>

<div class={cn("flex flex-col space-y-1.5 p-6", className)} {...$$restProps}>
	<slot />
</div>

A client/src/lib/components/ui/card/card-title.svelte => client/src/lib/components/ui/card/card-title.svelte +21 -0
@@ 0,0 1,21 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import type { HeadingLevel } from "./index.js";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLHeadingElement> & {
		tag?: HeadingLevel;
	};

	let className: $$Props["class"] = undefined;
	export let tag: $$Props["tag"] = "h3";
	export { className as class };
</script>

<svelte:element
	this={tag}
	class={cn("font-semibold leading-none tracking-tight", className)}
	{...$$restProps}
>
	<slot />
</svelte:element>

A client/src/lib/components/ui/card/card.svelte => client/src/lib/components/ui/card/card.svelte +22 -0
@@ 0,0 1,22 @@
<script lang="ts">
	import type { HTMLAttributes } from "svelte/elements";
	import { cn } from "$lib/utils.js";

	type $$Props = HTMLAttributes<HTMLDivElement>;

	let className: $$Props["class"] = undefined;
	export { className as class };
</script>

<!-- svelte-ignore a11y-no-static-element-interactions -->
<div
	class={cn("bg-card text-card-foreground rounded-xl border shadow", className)}
	{...$$restProps}
	on:click
	on:focusin
	on:focusout
	on:mouseenter
	on:mouseleave
>
	<slot />
</div>

A client/src/lib/components/ui/card/index.ts => client/src/lib/components/ui/card/index.ts +24 -0
@@ 0,0 1,24 @@
import Root from "./card.svelte";
import Content from "./card-content.svelte";
import Description from "./card-description.svelte";
import Footer from "./card-footer.svelte";
import Header from "./card-header.svelte";
import Title from "./card-title.svelte";

export {
	Root,
	Content,
	Description,
	Footer,
	Header,
	Title,
	//
	Root as Card,
	Content as CardContent,
	Description as CardDescription,
	Footer as CardFooter,
	Header as CardHeader,
	Title as CardTitle,
};

export type HeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";

A client/src/lib/index.ts => client/src/lib/index.ts +1 -0
@@ 0,0 1,1 @@
// place files you want to import through the `$lib` alias in this folder.

A client/src/routes/(menu)/+page.svelte => client/src/routes/(menu)/+page.svelte +74 -0
@@ 0,0 1,74 @@
<script lang="ts">
	import * as Card from "$lib/components/ui/card";
	import Column from './Column.svelte';
	import { Input } from "$lib/components/ui/input";
	import { Label } from "$lib/components/ui/label";
	import { Button } from "$lib/components/ui/button";
	import * as Select from "$lib/components/ui/select";
	import { TriangleAlertIcon } from "lucide-svelte";
	import type { PageData } from "./$types";

	export let data: PageData;

	let serverId: number;
	$: console.log(serverId);
	$: selectedServer = serverId ? { label: data.config.environments[serverId].name, value: serverId } : undefined;

	let username: string;

	$: allowJoin = !username || !serverId;
</script>

<Card.Root class="space-y-2 p-4">
	<h1 class="font-semibold text-xl text-center">StarKingdoms</h1>

	<div class="flex flex-row gap-4">

		<Column title="About">
			<p>StarKingdoms is a browser game about floating through space.</p>

			<h2 class="text-center font-semibold">Profile</h2>
			<Button href="/login" class="w-full" variant="outline">Log in</Button>
			<p class="text-sm">Log in to save your progress on the server and sync it across devices.</p>
		</Column>

		<Column title="Join Game">
			<div class="flex w-full max-w-sm flex-col gap-1.5">
				<Label for="username">Username</Label>
				<Input bind:value={username} type="text" id="username" placeholder="StarKingdomsPlayer1214" />
			</div>
			<div class="flex w-full max-w-sm flex-col gap-1.5">
				<Label for="server">Server</Label>
				<Select.Root selected={selectedServer} onSelectedChange={(v) => {console.log(v); v && (serverId = v.value)}}>
					<Select.Trigger>
						<Select.Value placeholder="Select a server" />
					</Select.Trigger>
					<Select.Content>
						{#each data.config.environments as v, k}
							<Select.Item value={k} label={v.name} />
						{/each}
					</Select.Content>
				</Select.Root>
				{#if serverId && data.config.environments[serverId] && !data.config.environments[serverId].isProduction}
					<div class="bg-popover p-2 rounded text-destructive">
						<div class="flex flex-row font-semibold">
							<TriangleAlertIcon class="h-6 w-6 mr-2" />
							Here be dragons!
						</div>
						<p class="text-sm mt-2">You have selected a pre-release server! Expect bugs, and save data may be wiped at any time.</p>
					</div>
				{/if}
			</div>
			{#if allowJoin}
				<Button disabled class="w-full">Launch!</Button>
			{:else}
				<Button href="/play/{serverId}/{username}" class="w-full">Launch!</Button>
			{/if}
		</Column>

		<Column title="Tools & Options">
			<Button class="w-full" variant="secondary" disabled>Options (soon!)</Button>
		</Column>

	</div>
</Card.Root>
\ No newline at end of file

A client/src/routes/(menu)/login/+page.svelte => client/src/routes/(menu)/login/+page.svelte +25 -0
@@ 0,0 1,25 @@
<script lang="ts">
	import * as Card from "$lib/components/ui/card";
	import { Input } from "$lib/components/ui/input";
	import { Label } from "$lib/components/ui/label";
	import { Button } from "$lib/components/ui/button";
	import * as Select from "$lib/components/ui/select";
	import { TriangleAlertIcon } from "lucide-svelte";

</script>

<Card.Root class="space-y-2 p-4">
	<h1 class="font-semibold text-xl text-center">Login</h1>

	<div class="flex w-full max-w-sm flex-col gap-1.5">
		<Label for="username">Username</Label>
		<Input type="text" id="username" placeholder="starkingdoms_player_2122" />
	</div>
	<div class="flex w-full max-w-sm flex-col gap-1.5">
		<Label for="password">Password</Label>
		<Input type="password" id="password" />
	</div>
	<Button class="w-full">Login</Button>
	<p class="text-sm">Don't have an account? <a href="/register" class="text-accent underline underline-offset-4">Register</a></p>
	<p class="text-sm">Just want to play? <a href="/" class="text-accent underline underline-offset-4">Go back</a></p>
</Card.Root>
\ No newline at end of file

R starkingdoms-client/public/favicon.ico => client/static/favicon.ico +0 -0
A client/static/favicon.png => client/static/favicon.png +0 -0
A client/svelte.config.js => client/svelte.config.js +18 -0
@@ 0,0 1,18 @@
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';

/** @type {import('@sveltejs/kit').Config} */
const config = {
	// Consult https://kit.svelte.dev/docs/integrations#preprocessors
	// for more information about preprocessors
	preprocess: vitePreprocess(),

	kit: {
		// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
		// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
		// See https://kit.svelte.dev/docs/adapters for more information about adapters.
		adapter: adapter()
	}
};

export default config;

A client/tailwind.config.js => client/tailwind.config.js +64 -0
@@ 0,0 1,64 @@
import { fontFamily } from "tailwindcss/defaultTheme";

/** @type {import('tailwindcss').Config} */
const config = {
	darkMode: ["class"],
	content: ["./src/**/*.{html,js,svelte,ts}"],
	safelist: ["dark"],
	theme: {
		container: {
			center: true,
			padding: "2rem",
			screens: {
				"2xl": "1400px"
			}
		},
		extend: {
			colors: {
				border: "hsl(var(--border) / <alpha-value>)",
				input: "hsl(var(--input) / <alpha-value>)",
				ring: "hsl(var(--ring) / <alpha-value>)",
				background: "hsl(var(--background) / <alpha-value>)",
				foreground: "hsl(var(--foreground) / <alpha-value>)",
				primary: {
					DEFAULT: "hsl(var(--primary) / <alpha-value>)",
					foreground: "hsl(var(--primary-foreground) / <alpha-value>)"
				},
				secondary: {
					DEFAULT: "hsl(var(--secondary) / <alpha-value>)",
					foreground: "hsl(var(--secondary-foreground) / <alpha-value>)"
				},
				destructive: {
					DEFAULT: "hsl(var(--destructive) / <alpha-value>)",
					foreground: "hsl(var(--destructive-foreground) / <alpha-value>)"
				},
				muted: {
					DEFAULT: "hsl(var(--muted) / <alpha-value>)",
					foreground: "hsl(var(--muted-foreground) / <alpha-value>)"
				},
				accent: {
					DEFAULT: "hsl(var(--accent) / <alpha-value>)",
					foreground: "hsl(var(--accent-foreground) / <alpha-value>)"
				},
				popover: {
					DEFAULT: "hsl(var(--popover) / <alpha-value>)",
					foreground: "hsl(var(--popover-foreground) / <alpha-value>)"
				},
				card: {
					DEFAULT: "hsl(var(--card) / <alpha-value>)",
					foreground: "hsl(var(--card-foreground) / <alpha-value>)"
				}
			},
			borderRadius: {
				lg: "var(--radius)",
				md: "calc(var(--radius) - 2px)",
				sm: "calc(var(--radius) - 4px)"
			},
			fontFamily: {
				sans: [...fontFamily.sans]
			}
		}
	},
};

export default config;

A client/tsconfig.json => client/tsconfig.json +19 -0
@@ 0,0 1,19 @@
{
	"extends": "./.svelte-kit/tsconfig.json",
	"compilerOptions": {
		"allowJs": true,
		"checkJs": true,
		"esModuleInterop": true,
		"forceConsistentCasingInFileNames": true,
		"resolveJsonModule": true,
		"skipLibCheck": true,
		"sourceMap": true,
		"strict": true,
		"moduleResolution": "bundler"
	}
	// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
	// except $lib which is handled by https://kit.svelte.dev/docs/configuration#files
	//
	// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
	// from the referenced tsconfig.json - TypeScript does not merge them in
}

A client/vite.config.ts => client/vite.config.ts +6 -0
@@ 0,0 1,6 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
	plugins: [sveltekit()]
});

M kabel/Cargo.toml => kabel/Cargo.toml +1 -4
@@ 11,7 11,4 @@ test_each_file = "0.3.3"
timer = []
debug = ["debug_lexer", "debug_parser"]
debug_lexer = []
debug_parser = []

[profile.release]
debug = true
debug_parser = []
\ No newline at end of file

M server/src/crafting/components.rs => server/src/crafting/components.rs +7 -7
@@ 4,14 4,14 @@ use bevy::prelude::Component;

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MaterialType {
    Silicon, // Mercury
    Sulfur, // Venus
    Iron, // Mars
    Hydrogen, // Jupiter
    Helium, // Saturn
    Rubber, // Uranus
    Silicon,   // Mercury
    Sulfur,    // Venus
    Iron,      // Mars
    Hydrogen,  // Jupiter
    Helium,    // Saturn
    Rubber,    // Uranus
    Composite, // Neptune
    Ice, // Pluto
    Ice,       // Pluto
}

#[derive(Component, Debug, Clone)]

M server/src/main.rs => server/src/main.rs +7 -4
@@ 37,13 37,13 @@ use std::time::Duration;

#[macro_use]
pub mod config;
pub mod crafting;
pub mod macros;
pub mod mathutil;
pub mod module;
pub mod packet;
pub mod planet;
pub mod player;
pub mod crafting;
pub mod ws;

struct StkPluginGroup;


@@ 146,9 146,12 @@ fn main() {
            ..Default::default()
        })
        .init_resource::<ModuleTimer>()
        .add_plugins(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(
            server_config.world.pixels_per_meter,
        ).in_fixed_schedule())
        .add_plugins(
            RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(
                server_config.world.pixels_per_meter,
            )
            .in_fixed_schedule(),
        )
        .add_plugins(StkTungsteniteServerPlugin)
        .add_systems(
            Startup,

M server/src/player/mod.rs => server/src/player/mod.rs +4 -2
@@ 87,8 87,10 @@ pub fn on_message(
                        app_keys.clone(),
                        from,
                        &mut event_queue,
                        server_config.clone()
                    ) { continue }
                        server_config.clone(),
                    ) {
                        continue;
                    }

                    // create player in world
                    let (id, transform, mut player_comp) =

M server/src/player/packet.rs => server/src/player/packet.rs +1 -1
@@ 66,7 66,7 @@ pub fn on_position_change(
                transform: proto_transform!(Transform::from_translation(
                    transform.translation * CLIENT_SCALE
                )),
                radius: planet!(*planet_type).size * CLIENT_SCALE
                radius: planet!(*planet_type).size * CLIENT_SCALE,
            },
        ));
    }

R starkingdoms-client/.gitignore => starkingdoms-client-js/.gitignore +0 -0
R starkingdoms-client/.prettierignore => starkingdoms-client-js/.prettierignore +0 -0
R starkingdoms-client/.prettierrc => starkingdoms-client-js/.prettierrc +0 -0
R starkingdoms-client/Dockerfile => starkingdoms-client-js/Dockerfile +0 -0
A starkingdoms-client-js/index.html => starkingdoms-client-js/index.html +16 -0
@@ 0,0 1,16 @@
<!-- DO NOT CHANGE THIS FILE! -->
<!-- UI is rendered by Svelte. The root of the component tree is src/pages/Home.svelte. -->
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>StarKingdoms.IO</title>
  </head>
  <body class="bg-grid">
    <div id="mount">
      <!-- Rendered by Svelte -->
    </div>

    <script type="module" src="src/page_loaders/home.ts"></script>
  </body>
</html>

R starkingdoms-client/login/index.html => starkingdoms-client-js/login/index.html +0 -0
R starkingdoms-client/package.json => starkingdoms-client-js/package.json +0 -0
R starkingdoms-client/play/index.html => starkingdoms-client-js/play/index.html +0 -0
A starkingdoms-client-js/public/favicon.ico => starkingdoms-client-js/public/favicon.ico +0 -0
R starkingdoms-client/shipeditor/index.html => starkingdoms-client-js/shipeditor/index.html +0 -0
R starkingdoms-client/signup/index.html => starkingdoms-client-js/signup/index.html +0 -0
R starkingdoms-client/src/assets/autoplr_cfg.svg => starkingdoms-client-js/src/assets/autoplr_cfg.svg +0 -0
R starkingdoms-client/src/assets/autoplr_error.svg => starkingdoms-client-js/src/assets/autoplr_error.svg +0 -0
R starkingdoms-client/src/assets/autoplr_on.svg => starkingdoms-client-js/src/assets/autoplr_on.svg +0 -0
R starkingdoms-client/src/assets/cargo_off.svg => starkingdoms-client-js/src/assets/cargo_off.svg +0 -0
R starkingdoms-client/src/assets/cargo_on.svg => starkingdoms-client-js/src/assets/cargo_on.svg +0 -0
R starkingdoms-client/src/assets/earth.svg => starkingdoms-client-js/src/assets/earth.svg +0 -0
R starkingdoms-client/src/assets/earth_icon.svg => starkingdoms-client-js/src/assets/earth_icon.svg +0 -0
R starkingdoms-client/src/assets/ecothruster_on.svg => starkingdoms-client-js/src/assets/ecothruster_on.svg +0 -0
R starkingdoms-client/src/assets/editor_direction.svg => starkingdoms-client-js/src/assets/editor_direction.svg +0 -0
R starkingdoms-client/src/assets/hearty.svg => starkingdoms-client-js/src/assets/hearty.svg +0 -0
R starkingdoms-client/src/assets/hearty_ferris.svg => starkingdoms-client-js/src/assets/hearty_ferris.svg +0 -0
R starkingdoms-client/src/assets/hearty_party.svg => starkingdoms-client-js/src/assets/hearty_party.svg +0 -0
R starkingdoms-client/src/assets/hub_off.svg => starkingdoms-client-js/src/assets/hub_off.svg +0 -0
R starkingdoms-client/src/assets/hub_on.svg => starkingdoms-client-js/src/assets/hub_on.svg +0 -0
R starkingdoms-client/src/assets/landingleg.svg => starkingdoms-client-js/src/assets/landingleg.svg +0 -0
R starkingdoms-client/src/assets/landingthruster_off.svg => starkingdoms-client-js/src/assets/landingthruster_off.svg +0 -0
R starkingdoms-client/src/assets/landingthruster_on.svg => starkingdoms-client-js/src/assets/landingthruster_on.svg +0 -0
R starkingdoms-client/src/assets/mars.svg => starkingdoms-client-js/src/assets/mars.svg +0 -0
R starkingdoms-client/src/assets/mars_icon.svg => starkingdoms-client-js/src/assets/mars_icon.svg +0 -0
R starkingdoms-client/src/assets/missing.svg => starkingdoms-client-js/src/assets/missing.svg +0 -0
R starkingdoms-client/src/assets/moon.svg => starkingdoms-client-js/src/assets/moon.svg +0 -0
R starkingdoms-client/src/assets/moon_icon.svg => starkingdoms-client-js/src/assets/moon_icon.svg +0 -0
R starkingdoms-client/src/assets/powerhub_off.svg => starkingdoms-client-js/src/assets/powerhub_off.svg +0 -0
R starkingdoms-client/src/assets/powerhub_on.svg => starkingdoms-client-js/src/assets/powerhub_on.svg +0 -0
R starkingdoms-client/src/assets/starfield.svg => starkingdoms-client-js/src/assets/starfield.svg +0 -0
R starkingdoms-client/src/assets/starfield_dim.svg => starkingdoms-client-js/src/assets/starfield_dim.svg +0 -0
R starkingdoms-client/src/assets/starfield_transp.svg => starkingdoms-client-js/src/assets/starfield_transp.svg +0 -0
R starkingdoms-client/src/assets/sun.svg => starkingdoms-client-js/src/assets/sun.svg +0 -0
R starkingdoms-client/src/assets/sun_rings.svg => starkingdoms-client-js/src/assets/sun_rings.svg +0 -0
R starkingdoms-client/src/assets/superthruster_off.svg => starkingdoms-client-js/src/assets/superthruster_off.svg +0 -0
R starkingdoms-client/src/assets/superthruster_on.svg => starkingdoms-client-js/src/assets/superthruster_on.svg +0 -0
R starkingdoms-client/src/assets/thruster_off.svg => starkingdoms-client-js/src/assets/thruster_off.svg +0 -0
R starkingdoms-client/src/assets/thruster_on.svg => starkingdoms-client-js/src/assets/thruster_on.svg +0 -0
R starkingdoms-client/src/assets/trackindicator.svg => starkingdoms-client-js/src/assets/trackindicator.svg +0 -0
R starkingdoms-client/src/components/Chatbox.svelte => starkingdoms-client-js/src/components/Chatbox.svelte +0 -0
R starkingdoms-client/src/components/ui/Button.svelte => starkingdoms-client-js/src/components/ui/Button.svelte +0 -0
R starkingdoms-client/src/components/ui/Checkbox.svelte => starkingdoms-client-js/src/components/ui/Checkbox.svelte +0 -0
R starkingdoms-client/src/components/ui/Column.svelte => starkingdoms-client-js/src/components/ui/Column.svelte +0 -0
R starkingdoms-client/src/components/ui/ColumnTable.svelte => starkingdoms-client-js/src/components/ui/ColumnTable.svelte +0 -0
R starkingdoms-client/src/components/ui/HorizontalGap.svelte => starkingdoms-client-js/src/components/ui/HorizontalGap.svelte +0 -0
R starkingdoms-client/src/components/ui/PasswordInput.svelte => starkingdoms-client-js/src/components/ui/PasswordInput.svelte +0 -0
R starkingdoms-client/src/components/ui/Popup.svelte => starkingdoms-client-js/src/components/ui/Popup.svelte +0 -0
R starkingdoms-client/src/components/ui/TextInput.svelte => starkingdoms-client-js/src/components/ui/TextInput.svelte +0 -0
R starkingdoms-client/src/components/ui/VerticalRule.svelte => starkingdoms-client-js/src/components/ui/VerticalRule.svelte +0 -0
R starkingdoms-client/src/config.json => starkingdoms-client-js/src/config.json +0 -0
R starkingdoms-client/src/config.ts => starkingdoms-client-js/src/config.ts +0 -0
R starkingdoms-client/src/css/chat.scss => starkingdoms-client-js/src/css/chat.scss +0 -0
R starkingdoms-client/src/css/font.scss => starkingdoms-client-js/src/css/font.scss +0 -0
R starkingdoms-client/src/css/footer.scss => starkingdoms-client-js/src/css/footer.scss +0 -0
R starkingdoms-client/src/css/form.scss => starkingdoms-client-js/src/css/form.scss +0 -0
R starkingdoms-client/src/css/game.scss => starkingdoms-client-js/src/css/game.scss +0 -0
R starkingdoms-client/src/css/globals.scss => starkingdoms-client-js/src/css/globals.scss +0 -0
R starkingdoms-client/src/css/grid.scss => starkingdoms-client-js/src/css/grid.scss +0 -0
R starkingdoms-client/src/css/hud.scss => starkingdoms-client-js/src/css/hud.scss +0 -0
R starkingdoms-client/src/css/json.scss => starkingdoms-client-js/src/css/json.scss +0 -0
R starkingdoms-client/src/css/log.scss => starkingdoms-client-js/src/css/log.scss +0 -0
R starkingdoms-client/src/css/style.scss => starkingdoms-client-js/src/css/style.scss +0 -0
R starkingdoms-client/src/css/themes/catppuccin-mocha.scss => starkingdoms-client-js/src/css/themes/catppuccin-mocha.scss +0 -0
R starkingdoms-client/src/css/utils.scss => starkingdoms-client-js/src/css/utils.scss +0 -0
R starkingdoms-client/src/env.d.ts => starkingdoms-client-js/src/env.d.ts +0 -0
R starkingdoms-client/src/globals.ts => starkingdoms-client-js/src/globals.ts +0 -0
R starkingdoms-client/src/hub.ts => starkingdoms-client-js/src/hub.ts +0 -0
R starkingdoms-client/src/icons/ChevronDown.svelte => starkingdoms-client-js/src/icons/ChevronDown.svelte +0 -0
R starkingdoms-client/src/icons/ChevronUp.svelte => starkingdoms-client-js/src/icons/ChevronUp.svelte +0 -0
R starkingdoms-client/src/icons/HeartIcon.svelte => starkingdoms-client-js/src/icons/HeartIcon.svelte +0 -0
R starkingdoms-client/src/icons/MovableIcon.svelte => starkingdoms-client-js/src/icons/MovableIcon.svelte +0 -0
R starkingdoms-client/src/icons/WarningIcon.svelte => starkingdoms-client-js/src/icons/WarningIcon.svelte +0 -0
R starkingdoms-client/src/jwt.ts => starkingdoms-client-js/src/jwt.ts +0 -0
R starkingdoms-client/src/packet_ui.ts => starkingdoms-client-js/src/packet_ui.ts +0 -0
R starkingdoms-client/src/page_loaders/home.ts => starkingdoms-client-js/src/page_loaders/home.ts +0 -0
R starkingdoms-client/src/page_loaders/login.ts => starkingdoms-client-js/src/page_loaders/login.ts +0 -0
R starkingdoms-client/src/page_loaders/play.ts => starkingdoms-client-js/src/page_loaders/play.ts +0 -0
R starkingdoms-client/src/page_loaders/shipeditor.ts => starkingdoms-client-js/src/page_loaders/shipeditor.ts +0 -0
R starkingdoms-client/src/page_loaders/signup.ts => starkingdoms-client-js/src/page_loaders/signup.ts +0 -0
R starkingdoms-client/src/page_loaders/uikit.ts => starkingdoms-client-js/src/page_loaders/uikit.ts +0 -0
R starkingdoms-client/src/pages/Home.svelte => starkingdoms-client-js/src/pages/Home.svelte +0 -0
R starkingdoms-client/src/pages/Login.svelte => starkingdoms-client-js/src/pages/Login.svelte +0 -0
R starkingdoms-client/src/pages/Play.svelte => starkingdoms-client-js/src/pages/Play.svelte +0 -0
R starkingdoms-client/src/pages/ShipEditor.svelte => starkingdoms-client-js/src/pages/ShipEditor.svelte +0 -0
R starkingdoms-client/src/pages/Signup.svelte => starkingdoms-client-js/src/pages/Signup.svelte +0 -0
R starkingdoms-client/src/pages/UiKit.svelte => starkingdoms-client-js/src/pages/UiKit.svelte +0 -0
R starkingdoms-client/src/planet_colors.ts => starkingdoms-client-js/src/planet_colors.ts +0 -0
R starkingdoms-client/src/protocol.ts => starkingdoms-client-js/src/protocol.ts +0 -0
R starkingdoms-client/src/rendering.ts => starkingdoms-client-js/src/rendering.ts +0 -0
R starkingdoms-client/src/save.ts => starkingdoms-client-js/src/save.ts +0 -0
R starkingdoms-client/src/textures.ts => starkingdoms-client-js/src/textures.ts +0 -0
R starkingdoms-client/src/vite-env.d.ts => starkingdoms-client-js/src/vite-env.d.ts +0 -0
R starkingdoms-client/svelte.config.js => starkingdoms-client-js/svelte.config.js +0 -0
R starkingdoms-client/tsconfig.json => starkingdoms-client-js/tsconfig.json +0 -0
R starkingdoms-client/uikit/index.html => starkingdoms-client-js/uikit/index.html +0 -0
R starkingdoms-client/vite.config.ts => starkingdoms-client-js/vite.config.ts +0 -0
R starkingdoms-client/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs => starkingdoms-client-js/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs +0 -0
R starkingdoms-client/yarn.lock => starkingdoms-client-js/yarn.lock +0 -0
A starkingdoms-client/Cargo.toml => starkingdoms-client/Cargo.toml +33 -0
@@ 0,0 1,33 @@
[package]
name = "starkingdoms-client"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "rlib"]

# Everywhere dependencies
[dependencies]
tracing = "0.1" # Log system
tracing-subscriber = "0.3" # Log layers
bevy_ecs = "0.15"
egui = "0.30"
wgpu = { version = "23", features = ["webgl"] }
winit = "0.30"
thiserror = "2"
image = "0.25"
egui-winit = { version = "0.30", default-features = false, features = ["links", "wayland", "x11"] }
egui-wgpu = "0.30"
web-time = "1"

# WASM dependencies
[target.'cfg(target_arch = "wasm32")'.dependencies]
tracing-web = "0.1" # Log output
console_error_panic_hook = "0.1" # Give useful information in the panic response, other than the useless "entered unreachable code"
wasm-bindgen = "0.2"
web-sys = "0.3"
wasm-bindgen-futures = "0.4"

# Native dependencies
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
pollster = "0.4"
\ No newline at end of file

M starkingdoms-client/index.html => starkingdoms-client/index.html +36 -13
@@ 1,16 1,39 @@
<!-- DO NOT CHANGE THIS FILE! -->
<!-- UI is rendered by Svelte. The root of the component tree is src/pages/Home.svelte. -->
<!doctype html>
<html lang="en">
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>StarKingdoms.IO</title>
  </head>
  <body class="bg-grid">
    <div id="mount">
      <!-- Rendered by Svelte -->
    </div>
    <title>StarKingdoms.TK</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />

    <script type="module" src="src/page_loaders/home.ts"></script>
    <style>
        html, body {
            overflow: hidden;
            margin: 0;
            padding: 0;
            height: 100%;
            width: 100%;
        }

        canvas {
            margin-right: auto;
            margin-left: auto;
            display: block;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }
    </style>
  </head>
  <body>
    <script type="module">
      import init from './pkg/starkingdoms_client.js';
      async function run() {
        await init();
      }
      window.addEventListener('load', run);
    </script>
  </body>
</html>
</html>
\ No newline at end of file

A starkingdoms-client/src/ecs.rs => starkingdoms-client/src/ecs.rs +33 -0
@@ 0,0 1,33 @@
use bevy_ecs::bundle::Bundle;
use bevy_ecs::component::Component;
use bevy_ecs::system::Resource;

#[derive(Component, Debug, Clone, Copy)]
pub struct Position {
    pub x: f64,
    pub y: f64
}
#[derive(Component, Debug, Clone, Copy)]
pub struct Scale {
    pub width: f64,
    pub height: f64,
}

#[derive(Component, Debug, Clone)]
pub struct SpriteTexture {
    pub texture: String,
}

#[derive(Bundle)]
pub struct SpriteBundle {
    pub position: Position,
    pub scale: Scale,
    pub texture: SpriteTexture
}

#[derive(Resource, Debug)]
pub struct Camera {
    pub x: f64,
    pub y: f64,
    pub zoom: f64
}
\ No newline at end of file

A starkingdoms-client/src/input.rs => starkingdoms-client/src/input.rs +13 -0
@@ 0,0 1,13 @@
use bevy_ecs::event::Event;

#[derive(Event, Debug, Copy, Clone)]
pub enum MouseWheelEvent {
    Line {
        x: f64,
        y: f64,
    },
    Pixel {
        x: f64,
        y: f64,
    }
}
\ No newline at end of file

A starkingdoms-client/src/lib.rs => starkingdoms-client/src/lib.rs +46 -0
@@ 0,0 1,46 @@
use bevy_ecs::event::Events;
use bevy_ecs::schedule::Schedule;
use bevy_ecs::world::World;
use egui::Context;
use tracing::info;
use crate::ecs::Camera;
use crate::input::MouseWheelEvent;
use crate::rendering::Renderer;
use crate::rendering::ui::UiRenderable;

#[cfg(target_arch = "wasm32")]
#[path = "wasm/mod.rs"]
pub mod platform;
#[cfg(not(target_arch = "wasm32"))]
#[path = "native/mod.rs"]
pub mod platform;

pub mod ecs;
pub mod input;
pub mod rendering;


// Hi, you've found the real main function! This is called AFTER platform-specific initialization code.
pub fn start() {
    info!("Hello, world! StarKingdoms.TK v{} says hello, running on {}", env!("CARGO_PKG_VERSION"), if cfg!(target_arch = "wasm32") { "wasm" } else { "native" });

    info!("Creating the ECS world...");
    let mut world = World::new();
    
    world.insert_resource::<Events<MouseWheelEvent>>(Events::default());
    world.insert_resource(Camera {
        x: 0.0,
        y: 0.0,
        zoom: 1.0,
    });
    
    let mut start_schedule = Schedule::default();
    // Add startup things here
    // Caution: This will run before there are things on-screen
    start_schedule.run(&mut world);
    
    let mut update_schedule = Schedule::default();
    // Add things to run every frame here
    // Caution: This will run once before there are things on screen
    
}

A starkingdoms-client/src/main.rs => starkingdoms-client/src/main.rs +5 -0
@@ 0,0 1,5 @@
/// --- IMPORTANT: DO NOT EDIT - EDIT THE APPROPRIATE PLATFORM SPECIFIC ENTRYPOINT ---
/// `platform::start` IS WHAT YOU WANT
fn main() {
    starkingdoms_client::platform::entrypoint();
}

A starkingdoms-client/src/native/mod.rs => starkingdoms-client/src/native/mod.rs +11 -0
@@ 0,0 1,11 @@
/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE ---
/// THIS WILL ONLY EXECUTE ON NATIVE
/// DO ONLY PLATFORM SPECIFIC INITIALIZATION HERE
/// FOR ACTUAL PROGRAM LOGIC, EDIT `crate::start`
/// DO NOT RENAME
pub fn entrypoint() {
    tracing_subscriber::fmt::init();
    
    // All done with platform-specific initialization, call back into the common code path
    crate::start();
}
\ No newline at end of file

A starkingdoms-client/src/shaders/sprite.wgsl => starkingdoms-client/src/shaders/sprite.wgsl +36 -0
@@ 0,0 1,36 @@
struct VertexShaderOut {
    @builtin(position) position: vec4<f32>,
    @location(0) texcoord: vec2<f32>
}

struct Uniforms {
    scale: vec2f,
    offset: vec2f
}
@group(0) @binding(2) var<uniform> uni: Uniforms;

@vertex fn vs(
    @builtin(vertex_index) vertexIndex : u32
) -> VertexShaderOut {
    let pos = array(
        vec2<f32>(0.0, 0.0),
        vec2<f32>(1.0, 0.0),
        vec2<f32>(0.0, 1.0),
        vec2<f32>(0.0, 1.0),
        vec2<f32>(1.0, 0.0),
        vec2<f32>(1.0, 1.0)
    );

    var vsOutput: VertexShaderOut;
    let xy = pos[vertexIndex];
    vsOutput.position = vec4f(xy * uni.scale + uni.offset, 0.0, 1.0);
    vsOutput.texcoord = vec2f(xy.x, 1.0 - xy.y);
    return vsOutput;
}

@group(0) @binding(0) var tex_sampler: sampler;
@group(0) @binding(1) var tex: texture_2d<f32>;

@fragment fn fs(fsInput: VertexShaderOut) -> @location(0) vec4<f32> {
    return textureSample(tex, tex_sampler, fsInput.texcoord);
}
\ No newline at end of file

A starkingdoms-client/src/shaders/text_quad_mips.wgsl => starkingdoms-client/src/shaders/text_quad_mips.wgsl +26 -0
@@ 0,0 1,26 @@
struct VertexOutput {
    @builtin(position) position: vec4<f32>,
    @location(0) texcoord: vec2<f32>
}
@vertex fn vs(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
    let pos = array(
        vec2<f32>(0.0, 0.0),
        vec2<f32>(1.0, 0.0),
        vec2<f32>(0.0, 1.0),
        vec2<f32>(0.0, 1.0),
        vec2<f32>(1.0, 0.0),
        vec2<f32>(1.0, 1.0)
    );
    var out: VertexOutput;
    let xy = pos[vertexIndex];
    out.position = vec4<f32>(xy * 2.0 - 1.0, 0.0, 1.0);
    out.texcoord = vec2<f32>(xy.x, 1.0 - xy.y);
    return out;
}

@group(0) @binding(0) var texSampler: sampler;
@group(0) @binding(1) var tex: texture_2d<f32>;

@fragment fn fs(inp: VertexOutput) -> @location(0) vec4<f32> {
    return textureSample(tex, texSampler, inp.texcoord);
}
\ No newline at end of file

A starkingdoms-client/src/textures/f.png => starkingdoms-client/src/textures/f.png +0 -0
A starkingdoms-client/src/textures/happy-tree.png => starkingdoms-client/src/textures/happy-tree.png +0 -0
A starkingdoms-client/src/textures/uv.png => starkingdoms-client/src/textures/uv.png +0 -0
A starkingdoms-client/src/wasm/mod.rs => starkingdoms-client/src/wasm/mod.rs +34 -0
@@ 0,0 1,34 @@
use tracing::Level;
use tracing_subscriber::fmt::format::Pretty;
use tracing_subscriber::prelude::*;
use wasm_bindgen::prelude::wasm_bindgen;
use tracing_web::{MakeWebConsoleWriter, performance_layer};

/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE ---
/// THIS WILL ONLY EXECUTE ON WEBASSEMBLY
/// DO ONLY PLATFORM SPECIFIC INITIALIZATION HERE
/// FOR ACTUAL PROGRAM LOGIC, EDIT `crate::start`
/// DO NOT RENAME
#[wasm_bindgen(start)]
pub fn entrypoint() {
    // Panic handler
    console_error_panic_hook::set_once();

    /* ----- Logging setup ----- */
    let fmt_layer = tracing_subscriber::fmt::layer()
        .with_ansi(false) // not supported in browsers
        .without_time()   // std::time doesn't exist in wasm
        .with_writer(MakeWebConsoleWriter::new().with_max_level(Level::DEBUG)); // wgpu spams the console, and this is slow as hell
        

    let perf_layer = performance_layer() // enable performance tracing
        .with_details_from_fields(Pretty::default()); // ... with pretty fields

    tracing_subscriber::registry()
        .with(fmt_layer)
        .with(perf_layer)
        .init(); // register the logger

    // All done with platform-specific initialization, call back into the common code path
    crate::start();
}
\ No newline at end of file